Assistants API + MyScale:构建自定义知识库
作者:API传播员 · 2025-06-05 · 阅读时间:6分钟
OpenAI 助手API使开发者能够轻松在应用程序中创建功能强大的人工智能助手。该API提供了以下核心功能:
- 无需手动处理对话历史;
- 提供对OpenAI托管工具(如代码解释器和检索工具)的访问;
- 增强了对第三方工具的功能调用支持。
本文将介绍如何利用助手API和MyScale向量数据库构建自定义知识库,并将其与助手API集成,以实现更高的灵活性、准确性和成本效益。
助手API的核心组件
助手API由以下几个核心部分组成:
- 助手(Assistant):定义助手可用的工具、可读取的文件以及系统提示。
- 线程(Thread):由控制助手对话的消息组成。
- 消息(Message):线程的基本元素,包含用户输入和生成的答案。
- 运行(Run):每次用户请求答案时都会启动一个运行,助手会处理线程内的所有消息。
使用助手API的工具启动运行
助手API的一个显著特点是,它能够通过API调用使用工具。GPT模型可以将用户请求转换为格式化的工具调用,从而实现对工具的有效使用。
运行的基本流程如下:
- 用户启动运行后,线程内的所有消息会排队等待处理。
- 助手决定是否使用定义的工具。如果需要调用工具,助手会进入“ActionRequired”状态,直到工具返回结果;否则助手直接返回答案并完成运行。
- 助手等待工具调用的输出,超时后会终止等待。如果工具返回结果,助手将其附加到线程中并完成运行。
这种运行机制由大型语言模型(LLM)驱动,极大地提升了自动化能力。
为什么选择外部向量数据库
OpenAI 提供了一个内置的检索工具,但其成本较高。例如,对于一个24GB的Arxiv数据集,每天的费用为5美元(每月150美元)。此外,检索性能的准确性和效率难以预测。因此,对于需要存储和搜索大量数据的场景,使用外部向量数据库(如MyScale)是更好的选择。
将知识库定义为助手的工具
根据官方文档,可以通过以下代码创建一个助手,并将知识库定义为其工具:
from openai import OpenAI
client = OpenAI()
assistant = client.beta.assistants.create(
name="ChatData",
instructions=(
"You are a helpful assistant. Do your best to answer the questions."
),
tools=[
{
"type": "function",
"function": {
"name": "get_wiki_pages",
"description": (
"Get some related wiki pages.n"
"You should use schema here to build WHERE string:nn"
"CREATE TABLE Wikipedia (n"
" id String,n"
" text String, -- abstract of the wiki page. avoid using this column to do LIKE matchn"
" title String, -- title of the papern"
" view Float32,n"
" url String, -- URL to this wiki pagen"
"ORDER BY idn"
"You should avoid using LIKE on long text columns."
),
"parameters": {
"type": "object",
"properties": {
"subject": {"type": "string", "description": "a sentence or phrase describes the subject you want to query."},
"where_str": {"type": "string", "description": "a sql-like where string to build filter."},
"limit": {"type": "integer", "description": "default to 4"},
},
"required": ["subject", "where_str", "limit"],
},
},
}
],
model="gpt-3.5-turbo",
)
上述代码中,“subject”用于矢量搜索,“where_str”是SQL格式的过滤器。通过在工具描述中添加表模式,可以帮助助手生成正确的SQL查询。
将MyScale的外部知识注入助手
为了将MyScale的知识库与助手集成,可以实现以下功能:
数据检索工具
以下代码展示了如何实现一个工具,从MyScale向量存储中检索相关数据:
import clickhouse_connect
db = clickhouse_connect.get_client(
host='msc-4a9e710a.us-east-1.aws.staging.myscale.cloud',
port=443,
username='chatdata',
password='myscale_rocks'
)
must_have_cols = ['text', 'title', 'views']
database = 'wiki'
table = 'Wikipedia'
def get_related_pages(subject, where_str, limit):
q_emb = emb_model.encode(subject).tolist()
q_emb_str = ",".join(map(str, q_emb))
if where_str:
where_str = f"WHERE {where_str}"
else:
where_str = ""
q_str = f"""
SELECT dist, {','.join(must_have_cols)}
FROM {database}.{table}
{where_str}
ORDER BY distance(emb, [{q_emb_str}])
AS dist ASC
LIMIT {limit}
"""
docs = [r for r in db.query(q_str).named_results()]
return 'n'.join([str(d) for d in docs])
tools = {
"get_wiki_pages": lambda subject, where_str, limit: get_related_pages(subject, where_str, limit),
}
创建线程并运行
创建一个线程以保存用户输入:
thread = client.beta.threads.create()
message = client.beta.threads.messages.create(
thread_id=thread.id,
role="user",
content="What is Ring in mathematics? Please query the related documents to answer this.",
)
client.beta.threads.messages.list(thread_id=thread.id)
启动运行并链接到特定助手:
run = client.beta.threads.runs.create(
thread_id=thread.id,
assistant_id=assistant.id,
instructions="You must use query tools to look up relevant information for every answer to a user's question.",
)
检查运行状态并提交工具输出
运行状态需要持续监控,并根据助手调用的功能提供输出:
import json
from time import sleep
while True:
run = client.beta.threads.runs.retrieve(thread_id=thread.id, run_id=run.id)
if run.status == 'completed':
print(client.beta.threads.messages.list(thread_id=thread.id))
break
elif len(run.required_action.submit_tool_outputs.tool_calls) > 0:
print("> Action Required 0:
run = client.beta.threads.runs.submit_tool_outputs(
thread_id=thread.id,
run_id=run.id,
tool_outputs=outputs
)
总结
通过将MyScale向量数据库与OpenAI助手API集成,开发者可以构建功能更强大的AI助手。MyScale提供了高效的外部知识存储和检索能力,而OpenAI助手API则简化了开发流程。这种结合不仅提升了助手的知识覆盖范围,还显著增强了用户体验,为创建多功能虚拟助手奠定了基础。
原文链接: https://medium.com/@myscale/assistants-api-myscale-building-a-custom-knowledge-base-bb0c2edfcb49
热门推荐
一个账号试用1000+ API
助力AI无缝链接物理世界 · 无需多次注册
3000+提示词助力AI大模型
和专业工程师共享工作效率翻倍的秘密
热门API
- 1. AI文本生成
- 2. AI图片生成_文生图
- 3. AI图片生成_图生图
- 4. AI图像编辑
- 5. AI视频生成_文生视频
- 6. AI视频生成_图生视频
- 7. AI语音合成_文生语音
- 8. AI文本生成(中国)
最新文章
- 精通REST API:解析iOS开发中的核心要点
- ASP.NET Core Web API 的授权指南 – Auth0
- Supertest:如何像专业人士一样测试API – Testim博客
- Next.js API 路由:GET 和 POST 请求示例
- Kimi K2 API 调用全指南:解锁国产大模型的强大能力
- Amazon的API描述语言Smithy概述
- 向日葵开放平台:如何让远程办公和支持变得轻而易举?
- 常见的api认证方式:应用场景与优势
- Deribit API – 入门指南
- AI推理(Reasoning AI)技术趋势2025:从大模型到智能体的全面升级
- Dify 全链路实战:三步搭建智能天气查询机器人(Agent+DeepSeek + 高德天气)
- 2025年GitHub开源生成式 AI API 项目盘点:Open WebUI、FastAPI LLM Server、Text Generation WebUI API