Agents 课程文档
什么是函数调用?
加入 Hugging Face 社区
并获得增强的文档体验
开始使用
什么是函数调用?
函数调用是一种让 LLM 对其环境采取行动的方式。它最初在 GPT-4 中引入,后来在其他模型中也得到了重现。
就像 Agent 的工具一样,函数调用赋予模型对其环境采取行动的能力。然而,函数调用能力是由模型学习的,并且比其他 agent 技术更少依赖于提示。
在单元 1 中,Agent 没有学习如何使用工具,我们只是提供了列表,并且我们依赖于模型能够概括使用这些工具定义计划。
而在这里,通过函数调用,Agent 经过微调(训练)以使用工具。
模型如何“学习”采取行动?
在单元 1 中,我们探讨了 agent 的一般工作流程。一旦用户向 agent 提供了一些工具并使用查询提示了它,模型将循环执行
- 思考:为了实现目标,我需要采取什么行动?
- 行动:使用正确的参数格式化行动并停止生成。
- 观察:取回执行结果。
在通过 API 与模型的“典型”对话中,对话将在用户和助手消息之间交替,如下所示
conversation = [
{"role": "user", "content": "I need help with my order"},
{"role": "assistant", "content": "I'd be happy to help. Could you provide your order number?"},
{"role": "user", "content": "It's ORDER-123"},
]
函数调用为对话带来了新的角色!
- 行动的一个新角色
- 观察的一个新角色
如果我们以 Mistral API 为例,它看起来会是这样
conversation = [
{
"role": "user",
"content": "What's the status of my transaction T1001?"
},
{
"role": "assistant",
"content": "",
"function_call": {
"name": "retrieve_payment_status",
"arguments": "{\"transaction_id\": \"T1001\"}"
}
},
{
"role": "tool",
"name": "retrieve_payment_status",
"content": "{\"status\": \"Paid\"}"
},
{
"role": "assistant",
"content": "Your transaction T1001 has been successfully paid."
}
]
… 但你说函数调用有一个新角色?
是也不是,在这种情况下和许多其他 API 中,模型将要采取的行动格式化为“助手”消息。然后,聊天模板将此表示为函数调用的特殊 token。
[AVAILABLE_TOOLS]
– 启动可用工具列表[/AVAILABLE_TOOLS]
– 结束可用工具列表[TOOL_CALLS]
– 调用工具(即,采取“行动”)[TOOL_RESULTS]
– “观察”行动的结果[/TOOL_RESULTS]
– 结束观察(即,模型可以再次解码)
我们将在本课程中再次讨论函数调用,但如果您想深入了解,可以查看这个优秀的文档部分。
既然我们已经了解了什么是函数调用以及它是如何工作的,那么让我们为尚不具备这些能力的模型添加一些函数调用能力:google/gemma-2-2b-it,通过向模型附加一些新的特殊 token。
为了能够做到这一点,我们首先需要了解微调和 LoRA。
< > 在 GitHub 上更新