首页 / 资料库 / Hugging Face · 智能体课

资料库4 分钟读完Apache-2.0智能体Hugging Face加餐

什么是函数调用?

译自《什么是函数调用?》 · 查看英文原文

原文出处Hugging Face Agents Course · units/zh-CN/bonus-unit1/what-is-function-calling.mdx 原作者:Hugging Face · 许可证:Apache-2.0 License 本篇为课程官方中文译文(Hugging Face 社区翻译),诸葛AI学院仅做格式整理(去除图片与交互组件),版权归原作者所有。

什么是函数调用?(What is Function Calling?)

函数调用是大语言模型 (LLM) 对其环境采取行动的一种方式。它最初在 GPT-4中引入,然后被其他模型复制。

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

在第1单元中,智能体没有学习使用工具 (Tools),我们只是提供了工具列表,并依赖模型能够泛化使用这些工具定义计划的事实。

而在这里,通过函数调用,智能体被微调(训练)来使用工具

模型如何"学习"采取行动?

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

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

在通过 API 与模型进行的"典型"对话中,对话将在用户和助手消息之间交替进行,如下所示:

python 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. 一个用于 行动(Action) 的新角色
  2. 一个用于 观察(Observation) 的新角色

如果我们以 Mistral API 为例,它看起来像这样:

python 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中,模型将要采取的行动格式化为"助手"消息。聊天模板然后将此表示为函数调用的特殊词元 (special tokens)

  • [AVAILABLE_TOOLS] – 开始可用工具列表
  • [/AVAILABLE_TOOLS] – 结束可用工具列表
  • [TOOL_CALLS] – 调用工具(即采取"行动")
  • [TOOL_RESULTS] – "观察"行动的结果
  • [/TOOL_RESULTS] – 观察结束(即模型可以再次解码)

我们将在本课程中再次讨论函数调用,但如果你想深入了解,可以查看这个优秀的文档部分


现在我们已经了解了什么是函数调用以及它是如何工作的,让我们为一个尚未具有这些能力的模型添加一些函数调用功能:通过向模型添加一些新的特殊词元来增强: google/gemma-2-2b-it

要能够做到这一点,我们首先需要理解微调和LoRA

这篇在讲什么,跟咱们的课怎么对?

资料库是大厂公开教材的中文译本,偏原理和工程做法。想看面向中小企业的白话版本,去入门课场景课