AI菜鸟向前飞 — OpenAI Assistant API 原理以及核心结构(一)
使用Assistant API 如何去实现一个自定义“Tool”
依然是三步走,是不是很像?与LangChain定义的方式基本一致,请回看
AI菜鸟向前飞 — LangChain系列之十三 - 关于Tool的必知必会
第一步
定义一个函数
def get_citations(docs: str) -> str:
return f"{docs}的文章出自于 Song榆钱儿公众号,欢迎关注。"
第二步
编写一个json文件
{
"type": "function",
"function": {
"name": "get_citations",
"description": "这是一个询问文章出处的处理函数",
"parameters": {
"type": "object",
"properties": {
"docs": {"type": "string", "description": "文档"}
},
"required": ["docs"],
}
}
}
第三步
让Assistant识别它
assistant = client.beta.assistants.create(
instructions="You are an assistant.",
model="gpt-4o",
tools=[
{
"type": "function",
"function": {
"name": "get_citations",
"description": "这是一个询问文章出处的处理函数",
"parameters": {
"type": "object",
"properties": {
"docs": {"type": "string", "description": "文档"}
},
"required": ["docs"],
}
}
}
]
)
接下来,简单看看如何运行起来
先加入message
message = client.beta.threads.messages.create(
thread_id=thread.id,
role="user",
content="AI菜鸟系列的文章出自于哪个公众号?"
)
run起来~
TOOL_CHOICE: Literal["none", "auto", "required"] = "auto"
run = client.beta.threads.runs.create_and_poll(
thread_id=thread.id,
assistant_id=assistant.id,
tool_choice=TOOL_CHOICE
)
注意,这里有个知识点,tool_choice的取值。(上面的例子,我用的是"auto"哈)
TOOL_MAP = {"get_citations": get_citations}
for tool_call in run.required_action.submit_tool_outputs.tool_calls:
func_with_args = tool_call.function
# 调用函数,得到函数执行结果
TOOL_MAP[func_with_args.name](**json.loads(func_with_args.arguments))
但这样会存在一个问题:这是单独用assistant解析了函数名和函数参数,并没有使用它完成真正的运行,也就是没有做到真正意义上的大模型运行~
欲知这是咋回事,请期待下一篇哈~