Agents 课程文档

什么是函数调用?

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

什么是函数调用?

函数调用是一种让 LLM 对其环境采取行动的方式。它最初在 GPT-4 中引入,后来在其他模型中也得到了重现。

就像 Agent 的工具一样,函数调用赋予模型对其环境采取行动的能力。然而,函数调用能力是由模型学习的,并且比其他 agent 技术更少依赖于提示。

在单元 1 中,Agent 没有学习如何使用工具,我们只是提供了列表,并且我们依赖于模型能够概括使用这些工具定义计划。

而在这里,通过函数调用,Agent 经过微调(训练)以使用工具。

模型如何“学习”采取行动?

在单元 1 中,我们探讨了 agent 的一般工作流程。一旦用户向 agent 提供了一些工具并使用查询提示了它,模型将循环执行

  1. 思考:为了实现目标,我需要采取什么行动?
  2. 行动:使用正确的参数格式化行动并停止生成。
  3. 观察:取回执行结果。

在通过 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"},
]

函数调用为对话带来了新的角色!

  1. 行动的一个新角色
  2. 观察的一个新角色

如果我们以 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 上更新