菜单

函数调用集成

相关源文件

Function Calling 是 Azure OpenAI 和 OpenAI 服务中一项强大的功能,它允许开发人员在大型语言模型 (LLM) 与外部系统之间创建更结构化的交互。本文档解释了 Function Calling 的概念、其好处以及如何在生成式 AI 应用程序中实现它。

有关不使用 Function Calling 的文本生成应用程序的信息,请参阅 文本生成应用程序。有关构建聊天应用程序的信息,请参阅 聊天应用程序

目的与范围

Function Calling 使您的应用程序能够:

  1. 从 LLM 获取一致、结构化的输出
  2. 将外部数据源无缝集成到 AI 交互中
  3. 将自然语言查询转换为特定操作
  4. 弥合会话界面与程序化操作之间的差距

该系统允许 LLM 识别何时需要外部数据或工具来满足用户请求,识别要调用的适当函数,并正确格式化必要的参数。

来源:11-integrating-with-function-calling/README.md13-24 11-integrating-with-function-calling/translations/ja-jp/README.md11-24

为什么要使用 Function Calling?

在引入 Function Calling 之前,开发人员在尝试以编程方式使用 LLM 输出时遇到了重大挑战

问题:响应格式不一致

当要求 LLM 从文本中提取信息时,即使提示相同,响应格式也可能在每次调用之间有所不同。这种不一致性给下游处理带来了困难。

考虑以下示例,两个几乎相同的学生描述产生了不同的输出格式

Response 1:
{
  "name": "Emily Johnson",
  "major": "Computer Science",
  "school": "Duke University",
  "grades": "3.7",
  "club": "Chess Club"
}

Response 2:
{
  "name": "Michael Lee",
  "major": "Computer Science",
  "school": "Stanford University",
  "grades": "3.8 GPA",
  "club": "Robotics Club"
}

请注意 grades 字段的格式不同:“3.7” vs “3.8 GPA”。这些不一致性在处理大规模数据时会导致问题。

问题:对外部数据的访问受限

LLM 在某个截止日期之前的数据进行了训练,并且无法访问:

  • 实时信息
  • 专有公司数据
  • 用户特定信息
  • 动态或不断变化的数据集

Function Calling 通过允许 LLM 请求外部数据的特定数据并将其用于响应来解决这些限制。

来源:11-integrating-with-function-calling/README.md37-178 11-integrating-with-function-calling/translations/ja-jp/README.md38-177

Function Calling 的工作原理

Function Calling 流程

重要提示:LLM 实际上不会执行函数。它会识别应该调用哪个函数并提供结构化的参数。您的应用程序负责实际的函数执行。

三步流程

来源:11-integrating-with-function-calling/README.md179-204 11-integrating-with-function-calling/translations/ja-jp/README.md178-204

使用 Azure OpenAI 进行实现

实现 Function Calling 涉及以下关键步骤:

1. 创建消息

首先创建一个用户消息,其中包含您的应用程序要处理的查询

role 可以是:

  • system(用于设置规则/上下文)
  • assistant(用于模型响应)
  • user(用于最终用户查询)

2. 定义可用函数

接下来,通过提供详细的规范来定义 LLM 可以“调用”的函数

每个函数定义包括:

  • name:函数标识符
  • description:对函数功能的清晰说明
  • parameters:参数的模式,包含:
    • type:数据类型(object、string、number 等)
    • properties:每个参数的详细定义
    • required:必需参数的数组

3. 执行 Function Call

将消息和函数定义发送到 Azure OpenAI 服务

设置 function_call="auto" 允许模型根据用户查询决定是否调用函数。

4. 处理 LLM 响应

从响应中提取函数调用信息

示例响应

来源:11-integrating-with-function-calling/README.md205-297 11-integrating-with-function-calling/translations/ja-jp/README.md205-297

应用集成

为了将 Function Calling 完全集成到您的应用程序中,请遵循以下步骤:

1. 实现实际函数

创建当 LLM 建议调用时将执行的 Python 函数

2. 创建函数映射

将 LLM 响应中的函数名称映射到您的实际 Python 函数

3. 执行函数并处理结果

检查 LLM 是否建议了函数调用,执行它,并将结果添加到对话中

4. 生成用户友好的响应

将更新后的消息(包括函数结果)发送回 LLM 以生成自然语言响应

示例结果

{
     "role": "assistant",
     "content": "I found several good courses for beginner students learning Azure:\n\n
    1. [Describe concepts of cryptography](https://learn.microsoft.com/training/modules/describe-concepts-of-cryptography/?WT.mc_id=api_CatalogApi)\n
    2. [Introduction to audio classification with TensorFlow](https://learn.microsoft.com/training/modules/intro-audio-classification-tensorflow/?WT.mc_id=api_CatalogApi)\n
    3. [Design a data model with Azure Data Studio for Azure SQL Database](https://learn.microsoft.com/training/modules/design-a-data-model-with-ads/?WT.mc_id=api_CatalogApi)\n
    4. [Microsoft Cloud Adoption Framework for Azure](https://learn.microsoft.com/training/modules/cloud-adoption-framework-getting-started/?WT.mc_id=api_CatalogApi)\n
    5. [Set up your Rust development environment](https://learn.microsoft.com/training/modules/rust-set-up-environment/?WT.mc_id=api_CatalogApi)\n\n
    You can click on the links to access the courses."
}

来源:11-integrating-with-function-calling/README.md309-470 11-integrating-with-function-calling/translations/ja-jp/README.md309-470

Function Calling 的用例

Function Calling 支持各种强大的应用程序场景

1. 调用外部工具

聊天机器人可以使用 Function Calling 根据用户请求执行特定操作。例如,学生可能会要求聊天机器人“给我的教授发邮件,说我在这门课上需要更多帮助”,这可能会调用一个 send_email(to: string, body: string) 函数。

2. 创建 API 或数据库查询

用户可以使用自然语言搜索信息,这些信息会被转换为格式化的查询或 API 请求。例如,老师询问“哪些学生完成了上次作业?”,可能会触发一个 get_completed(student_name: string, assignment: int, current_status: string) 函数。

3. 创建结构化数据

用户可以检索文本或 CSV 格式的数据,并使用 LLM 提取重要信息。例如,学生可以使用 get_important_facts(agreement_name: string, date_signed: string, parties_involved: list) 函数将关于和平协议的维基百科文章转换为 AI 抽认卡。

来源:11-integrating-with-function-calling/README.md189-196 11-integrating-with-function-calling/translations/ja-jp/README.md188-195

最佳实践

在应用程序中实现 Function Calling 时,请考虑以下最佳实践:

函数设计

  • 为每个函数和参数编写清晰、具体的描述
  • 使用具有正确数据类型的描述性参数名称
  • 明确必需参数以提高一致性
  • 保持函数定义专注于特定任务

错误处理

  • 为函数调用失败的情况实施强大的错误处理
  • 当外部服务不可用时提供备用响应
  • 在执行前验证函数参数
  • 返回有意义的错误消息,这些消息可以整合到 LLM 的响应中

集成技巧

  • 妥善存储对话历史以保持上下文
  • 考虑缓存函数结果以优化性能
  • 对外部 API 调用实施速率限制
  • 使用各种用户输入进行测试,以确保可靠的函数识别

总结

Function Calling 弥合了自然语言交互与编程功能之间的差距,使您的生成式 AI 应用程序能够:

  1. 从 LLM 获取一致、结构化的输出
  2. 无缝集成外部数据和 API
  3. 根据用户请求执行特定操作
  4. 从非结构化文本中提取结构化信息

通过遵循本文档中概述的实现步骤,您可以创建更强大、更灵活、更有用的生成式 AI 应用程序。

来源:11-integrating-with-function-calling/README.md472-480 11-integrating-with-function-calling/translations/ja-jp/README.md472-480