助手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

上一篇:

如何使用ChatGPT JavaScript API,3個簡單步驟

下一篇:

使用 Web Share API 實現圖片分享
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費