Elasticsearch:将 Ollama 与推理 API 结合使用

作者:来自 Elastic Jeffrey Rengifo

Ollama API 与 OpenAI API 兼容,因此将 Ollama 与 Elasticsearch 集成非常容易。

在本文中,我们将学习如何使用 Ollama 将本地模型连接到 Elasticsearch 推理模型,然后使用 Playground 向文档提出问题。

Elasticsearch 允许用户使用开放推理 API(Inference API)连接到 LLMs,支持 Amazon Bedrock、Cohere、Google AI、Azure AI Studio、HuggingFace 等提供商(作为服务)等。

Ollama 是一个工具,允许你使用自己的基础设施(本地机器/服务器)下载和执行 LLM 模型。你可以在此处找到与 Ollama 兼容的可用型号列表。

如果你想要托管和测试不同的开源模型,而又不必担心每个模型需要以不同的方式设置,或者如何创建 API 来访问模型功能,那么 Ollama 是一个不错的选择,因为 Ollama 会处理所有事情。

由于 Ollama API 与 OpenAI API 兼容,我们可以轻松集成推理模型并使用 Playground 创建 RAG 应用程序。

更多阅读,请参阅 “Elasticsearch:在 Elastic 中玩转 DeepSeek R1 来实现 RAG 应用”。

先决条件

  • Elasticsearch 8.17
  • Kibana 8.17
  • Python

步骤

  • 设置 Ollama LLM 服务器
  • 创建映射
  • 索引数据
  • 使用 Playground 提问

设置 Ollama LLM 服务器

我们将设置一个 LLM 服务器,并使用 Ollama 将其连接到我们的 Playground 实例。我们需要:

  • 下载并运行 Ollama。
  • 使用 ngrok 通过互联网访问托管 Ollama 的本地 Web 服务器

下载并运行 Ollama

要使用Ollama,我们首先需要下载它。 Ollama 支持 Linux、Windows 和 macOS,因此只需在此处下载与你的操作系统兼容的 Ollama 版本即可。一旦安装了 Ollama,我们就可以从这个受支持的 LLM 列表中选择一个模型。在此示例中,我们将使用 llama3.2 模型,这是一个通用的多语言模型。在安装过程中,你将启用 Ollama 的命令行工具。下载完成后,你可以运行以下行:

ollama pull llama3.2

这将输出:

pulling manifest
pulling dde5aa3fc5ff... 100% ▕█████████████████████████████████████████████████████████████████████████████████████████▏ 2.0 GB
pulling 966de95ca8a6... 100% ▕█████████████████████████████████████████████████████████████████████████████████████████▏ 1.4 KB
pulling fcc5a6bec9da... 100% ▕█████████████████████████████████████████████████████████████████████████████████████████▏ 7.7 KB
pulling a70ff7e570d9... 100% ▕█████████████████████████████████████████████████████████████████████████████████████████▏ 6.0 KB
pulling 56bb8bd477a5... 100% ▕█████████████████████████████████████████████████████████████████████████████████████████▏   96 B
pulling 34bb5ab01051... 100% ▕█████████████████████████████████████████████████████████████████████████████████████████▏  561 B
verifying sha256 digest
writing manifest
success

安装后,你可以使用以下命令进行测试:

ollama run llama3.2

我们来问一个问题:

在模型运行时,Ollama 启用默认在端口 “11434” 上运行的 API。让我们按照官方文档向该 API 发出请求:

curl http://localhost:11434/api/generate -d '{                                          "model": "llama3.2",               "prompt": "What is the capital of France?"
}' 

这是我们得到的答案:

{"model":"llama3.2","created_at":"2024-11-28T21:48:42.152817532Z","response":"The","done":false}
{"model":"llama3.2","created_at":"2024-11-28T21:48:42.251884485Z","response":" capital","done":false}
{"model":"llama3.2","created_at":"2024-11-28T21:48:42.347365913Z","response":" of","done":false}
{"model":"llama3.2","created_at":"2024-11-28T21:48:42.446837322Z","response":" France","done":false}
{"model":"llama3.2","created_at":"2024-11-28T21:48:42.542367394Z","response":" is","done":false}
{"model":"llama3.2","created_at":"2024-11-28T21:48:42.644580384Z","response":" Paris","done":false}
{"model":"llama3.2","created_at":"2024-11-28T21:48:42.739865362Z","response":".","done":false}
{"model":"llama3.2","created_at":"2024-11-28T21:48:42.834347518Z","response":"","done":true,"done_reason":"stop","context":[128006,9125,128007,271,38766,1303,33025,2696,25,6790,220,2366,18,271,128009,128006,882,128007,271,3923,374,279,6864,315,9822,30,128009,128006,78191,128007,271,791,6864,315,9822,374,12366,13],"total_duration":6948567145,"load_duration":4386106503,"prompt_eval_count":32,"prompt_eval_duration":1872000000,"eval_count":8,"eval_duration":684000000}

请注意,此端点的具体响应是流式传输。

使用 ngrok 将端点暴露给互联网

由于我们的端点在本地环境中工作,因此无法通过互联网从另一个点(如我们的 Elastic Cloud 实例)访问它。 ngrok 允许我们公开提供公共 IP 的端口。在 ngrok 中创建一个帐户并按照官方设置指南进行操作。

:这个有点类似在中国提供的 “花生壳” 功能。

一旦安装并配置了 ngrok 代理,我们就可以使用以下命令公开 Ollama 端口:

ngrok http 11434 --host-header="localhost:11434"

注意:标头 --host-header="localhost:11434" 保证请求中的 “Host” 标头与 “localhost:11434” 匹配

执行此命令将返回一个公共链接,只要 ngrok 和 Ollama 服务器在本地运行,该链接就会起作用。

Session Status                online                                                                                                                                                                              
Account                       xxxx@yourEmailProvider.com (Plan: Free)                                                                                                                                             
Version                       3.18.4                                                                                                                                                                              
Region                        United States (us)                                                                                                                                                                  
Latency                       561ms                                                                                                                                                                               
Web Interface                 http://127.0.0.1:4040                                                                                                                                                               
Forwarding                    https://your-ngrok-url.ngrok-free.app -> http://localhost:11434                                                                                                                   Connections                   ttl     opn     rt1     rt5     p50     p90                                                                                                                                         0       0       0.00    0.00    0.00    0.00                                                ```

在 “Forwarding” 中我们可以看到 ngrok 生成了一个 URL。保存以供以后使用。

让我们再次尝试向端点发出 HTTP 请求,现在使用 ngrok 生成的 URL:

curl https://your-ngrok-endpoint.ngrok-free.app/api/generate -d '{                                          "model": "llama3.2",               "prompt": "What is the capital of France?"
}'

响应应与前一个类似。

创建映射

ELSER 端点

对于此示例,我们将使用 Elasticsearch 推理 API 创建一个推理端点。此外,我们将使用 ELSER 来生成嵌入。

PUT _inference/sparse_embedding/medicines-inference
{"service": "elasticsearch","service_settings": {"num_allocations": 1,"num_threads": 1,"model_id": ".elser_model_2_linux-x86_64"}
}

在这个例子中,假设你有一家药店,销售两种类型的药品:

  • 需要处方的药物。
  • 不需要处方的药物。

该信息将包含在每种药物的描述字段中。

LLM 必须解释这个字段,因此我们将使用以下数据映射:

PUT medicines
{"mappings": {"properties": {"name": {"type": "text","copy_to": "semantic_field"},"semantic_field": {"type": "semantic_text","inference_id": "medicines-inference"},"text_description": {"type": "text","copy_to": "semantic_field"}}}
}

字段 text_description 将存储描述的纯文本,而 semantic_field(一种 semantic_text 字段类型)将存储由 ELSER 生成的嵌入。

copy_to 属性将把字段 name 和 text_description 中的内容复制到语义字段中,以便生成这些字段的嵌入。

索引数据

现在,让我们使用 _bulk API 对数据进行索引。

POST _bulk
{"index":{"_index":"medicines"}}
{"id":1,"name":"Paracetamol","text_description":"An analgesic and antipyretic that does NOT require a prescription."}
{"index":{"_index":"medicines"}}
{"id":2,"name":"Ibuprofen","text_description":"A nonsteroidal anti-inflammatory drug (NSAID) available WITHOUT a prescription."}
{"index":{"_index":"medicines"}}
{"id":3,"name":"Amoxicillin","text_description":"An antibiotic that requires a prescription."}
{"index":{"_index":"medicines"}}
{"id":4,"name":"Lorazepam","text_description":"An anxiolytic medication that strictly requires a prescription."}
{"index":{"_index":"medicines"}}
{"id":5,"name":"Omeprazole","text_description":"A medication for stomach acidity that does NOT require a prescription."}
{"index":{"_index":"medicines"}}
{"id":6,"name":"Insulin","text_description":"A hormone used in diabetes treatment that requires a prescription."}
{"index":{"_index":"medicines"}}
{"id":7,"name":"Cold Medicine","text_description":"A compound formula to relieve flu symptoms available WITHOUT a prescription."}
{"index":{"_index":"medicines"}}
{"id":8,"name":"Clonazepam","text_description":"An antiepileptic medication that requires a prescription."}
{"index":{"_index":"medicines"}}
{"id":9,"name":"Vitamin C","text_description":"A dietary supplement that does NOT require a prescription."}
{"index":{"_index":"medicines"}}
{"id":10,"name":"Metformin","text_description":"A medication used for type 2 diabetes that requires a prescription."}

响应:

{"errors": false,"took": 34732020848,"items": [{"index": {"_index": "medicines","_id": "mYoeMpQBF7lnCNFTfdn2","_version": 1,"result": "created","_shards": {"total": 2,"successful": 2,"failed": 0},"_seq_no": 0,"_primary_term": 1,"status": 201}},{"index": {"_index": "medicines","_id": "mooeMpQBF7lnCNFTfdn2","_version": 1,"result": "created","_shards": {"total": 2,"successful": 2,"failed": 0},"_seq_no": 1,"_primary_term": 1,"status": 201}},{"index": {"_index": "medicines","_id": "m4oeMpQBF7lnCNFTfdn2","_version": 1,"result": "created","_shards": {"total": 2,"successful": 2,"failed": 0},"_seq_no": 2,"_primary_term": 1,"status": 201}},{"index": {"_index": "medicines","_id": "nIoeMpQBF7lnCNFTfdn2","_version": 1,"result": "created","_shards": {"total": 2,"successful": 2,"failed": 0},"_seq_no": 3,"_primary_term": 1,"status": 201}},{"index": {"_index": "medicines","_id": "nYoeMpQBF7lnCNFTfdn2","_version": 1,"result": "created","_shards": {"total": 2,"successful": 2,"failed": 0},"_seq_no": 4,"_primary_term": 1,"status": 201}},{"index": {"_index": "medicines","_id": "nooeMpQBF7lnCNFTfdn2","_version": 1,"result": "created","_shards": {"total": 2,"successful": 2,"failed": 0},"_seq_no": 5,"_primary_term": 1,"status": 201}},{"index": {"_index": "medicines","_id": "n4oeMpQBF7lnCNFTfdn2","_version": 1,"result": "created","_shards": {"total": 2,"successful": 2,"failed": 0},"_seq_no": 6,"_primary_term": 1,"status": 201}},{"index": {"_index": "medicines","_id": "oIoeMpQBF7lnCNFTfdn2","_version": 1,"result": "created","_shards": {"total": 2,"successful": 2,"failed": 0},"_seq_no": 7,"_primary_term": 1,"status": 201}},{"index": {"_index": "medicines","_id": "oYoeMpQBF7lnCNFTfdn2","_version": 1,"result": "created","_shards": {"total": 2,"successful": 2,"failed": 0},"_seq_no": 8,"_primary_term": 1,"status": 201}},{"index": {"_index": "medicines","_id": "oooeMpQBF7lnCNFTfdn2","_version": 1,"result": "created","_shards": {"total": 2,"successful": 2,"failed": 0},"_seq_no": 9,"_primary_term": 1,"status": 201}}]}

使用 Playground 提问

Playground 是一个 Kibana 工具,允许你使用 Elasticsearch 索引和 LLM 提供程序快速创建 RAG 系统。你可以阅读本文以了解更多信息。

将本地 LLM 连接到 Playground

我们首先需要创建一个使用我们刚刚创建的公共 URL 的连接器。在 Kibana 中,转到 Search>Playground,然后单击 “Connect to an LLM”。

此操作将显示 Kibana 界面左侧的菜单。在那里,点击 “OpenAI”。

我们现在可以开始配置 OpenAI 连接器。

转到 “Connector settings”,对于 OpenAI 提供商,选择 “Other (OpenAI Compatible Service)”:

现在,让我们配置其他字段。在这个例子中,我们将我们的模型命名为 “medicines-llm”。在 URL 字段中,使用 ngrok 生成的 URL(/v1/chat/completions)。在 “Default model” 字段中,选择 “llama3.2”。我们不会使用 API 密钥,因此只需输入任何随机文本即可继续:

点击 “Save”,点击 “Add data sources” 添加索引药品:

太棒了!我们现在可以使用在本地运行的 LLM 作为 RAG 引擎来访问 Playground。

在测试之前,让我们向代理添加更具体的指令,并将发送给模型的文档数量增加到 10,以便答案具有尽可能多的可用文档。上下文字段将是 semantic_field,它包括药物的名称和描述,这要归功于 copy_to 属性。

现在让我们问一个问题:Can I buy Clonazepam without a prescription? 看看会发生什么:

https://drive.google.com/file/d/1WOg9yJ2Vs5ugmXk9_K9giZJypB8jbxuN/view?usp=drive_link

正如我们所料,我们得到了正确的答案。

后续步骤

下一步是创建你自己的应用程序! Playground 提供了一个 Python 代码脚本,你可以在自己的机器上运行它并自定义它以满足你的需要。例如,通过将其置于 FastAPI 服务器后面来创建由你的 UI 使用的 QA 药品聊天机器人。

你可以通过点击 Playground 右上角的 View code 按钮找到此代码:

并且你使用 Endpoints & API keys 生成代码中所需的 ES_API_KEY 环境变量。

对于此特定示例,代码如下:

## Install the required packages
## pip install -qU elasticsearch openai
import os
from elasticsearch import Elasticsearch
from openai import OpenAI
es_client = Elasticsearch("https://your-deployment.us-central1.gcp.cloud.es.io:443",api_key=os.environ["ES_API_KEY"]
)
openai_client = OpenAI(api_key=os.environ["OPENAI_API_KEY"],
)
index_source_fields = {"medicines": ["semantic_field"]
}
def get_elasticsearch_results():es_query = {"retriever": {"standard": {"query": {"nested": {"path": "semantic_field.inference.chunks","query": {"sparse_vector": {"inference_id": "medicines-inference","field": "semantic_field.inference.chunks.embeddings","query": query}},"inner_hits": {"size": 2,"name": "medicines.semantic_field","_source": ["semantic_field.inference.chunks.text"]}}}}},"size": 3}result = es_client.search(index="medicines", body=es_query)return result["hits"]["hits"]
def create_openai_prompt(results):context = ""for hit in results:inner_hit_path = f"{hit['_index']}.{index_source_fields.get(hit['_index'])[0]}"## For semantic_text matches, we need to extract the text from the inner_hitsif 'inner_hits' in hit and inner_hit_path in hit['inner_hits']:context += '\n --- \n'.join(inner_hit['_source']['text'] for inner_hit in hit['inner_hits'][inner_hit_path]['hits']['hits'])else:source_field = index_source_fields.get(hit["_index"])[0]hit_context = hit["_source"][source_field]context += f"{hit_context}\n"prompt = f"""Instructions:- You are an assistant specializing in answering questions about the sale of medicines.- Answer questions truthfully and factually using only the context presented.- If you don't know the answer, just say that you don't know, don't make up an answer.- You must always cite the document where the answer was extracted using inline academic citation style [], using the position.- Use markdown format for code examples.- You are correct, factual, precise, and reliable.Context:{context}"""return prompt
def generate_openai_completion(user_prompt, question):response = openai_client.chat.completions.create(model="gpt-3.5-turbo",messages=[{"role": "system", "content": user_prompt},{"role": "user", "content": question},])return response.choices[0].message.content
if __name__ == "__main__":question = "my question"elasticsearch_results = get_elasticsearch_results()context_prompt = create_openai_prompt(elasticsearch_results)openai_completion = generate_openai_completion(context_prompt, question)print(openai_completion)

为了使其与 Ollama 一起工作,你必须更改 OpenAI 客户端以连接到 Ollama 服务器而不是 OpenAI 服务器。你可以在此处找到 OpenAI 示例和兼容端点的完整列表。

openai_client = OpenAI(# you can use http://localhost:11434/v1/ if running this code locally.base_url='https://your-ngrok-url.ngrok-free.app/v1/',# required but ignoredapi_key='ollama',
)

并且在调用完成方法时将模型更改为 llama3.2:

def generate_openai_completion(user_prompt, question):response = openai_client.chat.completions.create(model="llama3.2",messages=[{"role": "system", "content": user_prompt},{"role": "user", "content": question},])return response.choices[0].message.content

让我们添加一个问题:an I buy Clonazepam without a prescription? 对于 Elasticsearch 查询:

def get_elasticsearch_results():es_query = {"retriever": {"standard": {"query": {"nested": {"path": "semantic_field.inference.chunks","query": {"sparse_vector": {"inference_id": "medicines-inference","field": "semantic_field.inference.chunks.embeddings","query": "Can I buy Clonazepam without a prescription?"}},"inner_hits": {"size": 2,"name": "medicines.semantic_field","_source": ["semantic_field.inference.chunks.text"]}}}}},"size": 3}result = es_client.search(index="medicines", body=es_query)return result["hits"]["hits"]

另外,在完成调用时还会打印一些内容,这样我们就可以确认我们正在将 Elasticsearch 结果作为问题上下文的一部分发送:

if __name__ == "__main__":question = "Can I buy Clonazepam without a prescription?"elasticsearch_results = get_elasticsearch_results()context_prompt = create_openai_prompt(elasticsearch_results)print("========== Context Prompt START ==========")print(context_prompt)print("========== Context Prompt END ==========")print("========== Ollama Completion START ==========")openai_completion = generate_openai_completion(context_prompt, question)print(openai_completion)print("========== Ollama Completion END ==========")

现在让我们运行命令:

pip install -qU elasticsearch openaipython main.py

你应该看到类似这样的内容:

========== Context Prompt START ==========Instructions:- You are an assistant specializing in answering questions about the sale of medicines.- Answer questions truthfully and factually using only the context presented.- If you don't know the answer, just say that you don't know, don't make up an answer.- You must always cite the document where the answer was extracted using inline academic citation style [], using the position.- Use markdown format for code examples.- You are correct, factual, precise, and reliable.Context:Clonazepam---
An antiepileptic medication that requires a prescription.A nonsteroidal anti-inflammatory drug (NSAID) available WITHOUT a prescription.---
IbuprofenAn anxiolytic medication that strictly requires a prescription.---
Lorazepam========== Context Prompt END ==========
========== Ollama Completion START ==========
No, you cannot buy Clonazepam over-the-counter (OTC) without a prescription [1]. It is classified as a controlled substance in the United States due to its potential for dependence and abuse. Therefore, it can only be obtained from a licensed healthcare provider who will issue a prescription for this medication.
========== Ollama Completion END ==========

结论

在本文中,我们可以看到,当将 Ollama 等工具与 Elasticsearch 推理 API 和 Playground 结合使用时,它们的强大功能和多功能性。

经过几个简单的步骤,我们就得到了一个可以运行的 RAG 应用程序,该应用程序可以使用 LLM 在我们自己的基础设施中免费运行的聊天功能。这还使我们能够更好地控制资源和敏感信息,同时还使我们能够访问用于不同任务的各种模型。

想要获得 Elastic 认证吗?了解下一期 Elasticsearch 工程师培训何时举行!

Elasticsearch 包含许多新功能,可帮助你为你的用例构建最佳的搜索解决方案。深入了解我们的示例笔记本以了解更多信息,开始免费云试用,或立即在本地机器上试用 Elastic。

原文:Using Ollama with the Inference API - Elasticsearch Labs

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/70073.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

openGauss 3.0 数据库在线实训课程18:学习视图管理

前提 我正在参加21天养成好习惯| 第二届openGauss每日一练活动 课程详见:openGauss 3.0.0数据库在线实训课程 学习目标 掌握openGauss视图的管理:创建视图、删除视图、查询视图的信息、修改视图的信息。 课程作业 1.创建表,创建普通视图…

腾讯云大模型知识引擎×DeepSeek赋能文旅

腾讯云大模型知识引擎DeepSeek赋能文旅 ——以合肥文旅为例的技术革新与实践路径 一、技术底座:知识引擎与DeepSeek的融合逻辑 腾讯云大模型知识引擎与DeepSeek模型的结合,本质上是**“知识库检索增强生成(RAG)实时联网能力”**…

利用SkinMagic美化MFC应用界面

MFC(Microsoft Foundation Class)应用程序的界面设计风格通常比较保守,而且虽然MFC框架的控件功能强大且易于集成,但视觉效果较为朴素,缺乏现代感。尤其是MFC应用程序的设计往往以功能实现为核心,界面设计可能显得较为简洁甚至略显呆板,用户体验可能不如现代应用程序流畅…

qt QOpenGLTexture详解

1. 概述 QOpenGLTexture 是 Qt5 提供的一个类,用于表示和管理 OpenGL 纹理。它封装了 OpenGL 纹理的创建、分配存储、绑定和设置像素数据等操作,简化了 OpenGL 纹理的使用。 2. 重要函数 构造函数: QOpenGLTexture(const QImage &image,…

nlp|微调大语言模型初探索(2),训练自己的聊天机器人

前言 上篇文章记录了具体的微调语言大模型步骤,以及在微调过程中可能遇见的各种报错,美中不足的是只是基于开源数据集的微调,今天来记录一下怎么基于自己的数据集去微调大语言模型,训练自己的智能机器人!!&…

Java 大视界 -- 量子计算时代 Java 大数据的潜在变革与应对策略(88)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

手机功耗BugReport字段含义介绍

BugReport一般用来分析功耗问题,例如休眠待机,后台待机,游戏,视频,相机场景等 BugReport字段含义介绍 BugReport字段 含义 备注 Reboot 设备的重启事件 CPU running CPU运行状态,休眠 或者 唤醒 只有…

什么是 近端策略优化算法PPO

什么是 近端策略优化算法PPO 近端策略优化算法(Proximal Policy Optimization,PPO)是OpenAI公司于2017年开发的一系列无模型强化学习算法,用于优化策略网络以最大化累计奖励。以下是具体介绍及示例: 算法原理 策略梯度:PPO基于策略梯度算法,通过估计策略网络的梯度来更…

计算机视觉-局部特征

一、局部特征 1.1全景拼接 先用RANSAC估计出变换,就可以拼接两张图片 ①提取特征 ②匹配特征 ③拼接图像 1.2 点的特征 怎么找到对应点?(才能做点对应关系RANSAC) :特征检测 我们希望找到的点具有的特征有什么特…

个人搭建CDN加速服务 特网科技

在互联网快速发展的今天,网站的加载速度对用户体验有着至关重要的影响,传统的网页加载方式依赖于服务器的性能和网络环境,这使得某些网站的页面加载时间过长,用户体验不佳,为了解决这个问题,许多企业开始采…

类型通配符上限

主函数 package typeWildcardTop;import java.util.ArrayList;public class typeWildcardTopTest {/**/public static void main(String[] args) { // test1();test2();}/*测试showList接收ArrayList类型 ArrayList接收各种类型参数创建animals cats mincats集合 传入s…

OpenCV(1):简介、安装、入门案例、基础模块

1 OpenCV 简介 OpenCV 是一个功能强大、应用广泛的计算机视觉库,它为开发人员提供了丰富的工具和算法,可以帮助他们快速构建各种视觉应用。随着计算机视觉技术的不断发展,OpenCV 也将会继续发挥重要的作用。OpenCV 提供了大量的计算机视觉算法…

FTP自动上传/vue打包自动上传

ftp自动上传 在我们平时开发项目时,需要将本地代码编译后上传到服务器,我们可以借助Node.js库中的ssh2来实现自动上传 首先我们先来说下ssh2的安装和使用 安装ssh2 npm install ssh2创建ssh2实例 const { Client } require(ssh2);连接服务器 const c…

SQL复习

SQL复习 MySQL SQL介绍 SQL SQL的全拼是什么? SQL全拼:Structured Query Language,也叫结构化查询语言。 SQL92和SQL99有什么区别呢? SQL92和SQL99分别代表了92年和99年颁布的SQL标准。 在 SQL92 中采用(&#xff…

nlp|微调大语言模型初探索(1),LLaMA-Factory

前言 微调模型通常比从零开始训练一个模型的技术要求低。公司不需要拥有大量的深度学习专家,利用现有的开源工具和库(如Hugging Face的Transformers等),中小型公司可以轻松地使用和微调大型模型,从而快速实现AI能力的集…

软件定义汽车时代的功能安全和信息安全

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活…

内容中台驱动企业数字化内容管理高效协同架构

内容概要 在数字化转型加速的背景下,企业对内容管理的需求从单一存储向全链路协同演进。内容中台作为核心支撑架构,通过统一的内容资源池与智能化管理工具,重塑了内容生产、存储、分发及迭代的流程。其核心价值在于打破部门壁垒,…

【探商宝】:大数据与AI赋能,助力中小企业精准拓客引

引言:在数据洪流中,如何精准锁定商机? 在竞争激烈的商业环境中,中小企业如何从海量信息中快速筛选出高价值客户?如何避免无效沟通,精准触达目标企业? 探商宝——一款基于大数据与AI技术的企业信…

springboot接入ShardingJDBC

ShardingJDBC 是 Apache ShardingSphere 的一个子项目,它是一个开源的分库分表中间件,提供了透明化的数据分片、分布式事务和数据库治理等功能。ShardingJDBC 以 JDBC Driver 的形式提供,支持任何基于 JDBC 的 ORM 框架、持久层框架和数据库连…

Dify平台搭建面试机器人

无代码搭建面试机器人 什么是Dify 什么是Dify Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非技术人员,也能…