所有文章 > 如何集成API > Assistants API + MyScale:构建自定义知识库
Assistants API + MyScale:构建自定义知识库

Assistants API + MyScale:构建自定义知识库

OpenAI 助手API使开发者能够轻松在应用程序中创建功能强大的人工智能助手。该API提供了以下核心功能:

  • 无需手动处理对话历史;
  • 提供对OpenAI托管工具(如代码解释器和检索工具)的访问;
  • 增强了对第三方工具的功能调用支持。

本文将介绍如何利用助手API和MyScale向量数据库构建自定义知识库,并将其与助手API集成,以实现更高的灵活性、准确性和成本效益。


助手API的核心组件

助手API由以下几个核心部分组成:

  1. 助手(Assistant):定义助手可用的工具、可读取的文件以及系统提示。
  2. 线程(Thread):由控制助手对话的消息组成。
  3. 消息(Message):线程的基本元素,包含用户输入和生成的答案。
  4. 运行(Run):每次用户请求答案时都会启动一个运行,助手会处理线程内的所有消息。

使用助手API的工具启动运行

助手API的一个显著特点是,它能够通过API调用使用工具。GPT模型可以将用户请求转换为格式化的工具调用,从而实现对工具的有效使用。

运行的基本流程如下:

  1. 用户启动运行后,线程内的所有消息会排队等待处理。
  2. 助手决定是否使用定义的工具。如果需要调用工具,助手会进入“ActionRequired”状态,直到工具返回结果;否则助手直接返回答案并完成运行。
  3. 助手等待工具调用的输出,超时后会终止等待。如果工具返回结果,助手将其附加到线程中并完成运行。

这种运行机制由大型语言模型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
#你可能也喜欢这些API文章!

我们有何不同?

API服务商零注册

多API并行试用

数据驱动选型,提升决策效率

查看全部API→
🔥

热门场景实测,选对API

#AI文本生成大模型API

对比大模型API的内容创意新颖性、情感共鸣力、商业转化潜力

25个渠道
一键对比试用API 限时免费

#AI深度推理大模型API

对比大模型API的逻辑推理准确性、分析深度、可视化建议合理性

10个渠道
一键对比试用API 限时免费