通过 Function Calling 构建自主 AI Agents

本文通过一个示例,介绍了如何使用Function Calling构建自主AI代理,使其能与外部API如SQLite数据库和文档存储进行交互。通过连接到LLM,如GPT-4,模型可以智能选择工具并调用函数,实现自主决策和可靠的数据解析。文章详细阐述了架构、解决方案和技术栈,包括Haystack、OpenRouter和RAG等,并提供了从初始化到实现交互式聊天的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址:Build Autonomous AI Agents with Function Calling

将聊天机器人转变为可以与外部 API 交互的代理

2024 年 4 月 2 日

Function Call(函数调用)并不是什么新鲜事。2023 年 7 月,OpenAI 为其 GPT 模型引入了函数调用,该功能现在已被竞争对手采用。Google 的 Gemini API 最近支持它,Anthropic 正在将其集成到 Claude 中。函数调用对于大型语言模型 (LLMs )来说变得至关重要,从而增强了它们的功能。

考虑到这一点,我的目标是编写一个全面的教程,涵盖基本介绍之外的函数调用(已经有很多教程了)。重点将放在实际实施上,构建一个完全自主的人工智能代理,并将其与 Streamlit 集成,以获得类似 ChatGPT 的界面。虽然 OpenAI 用于演示,但本教程可以很容易地适用于其他LLMs支持函数调用,例如 Gemini。

Function Calling是干什么用的?

Function Calling(函数调用)使开发人员能够描述函数(也称为工具,您可以将其视为模型要执行的操作,例如执行计算或下订单),并让模型智能地选择输出包含参数的 JSON 对象来调用这些函数。简单来说,它允许:

  • Autonomous decision making(自主决策):模型可以智能地选择工具来回答问题。
  • Reliable parsing(可靠的解析): 响应采用 JSON 格式,而不是更典型的类似对话的响应。乍一看似乎并不多,但这就是允许LLM连接到外部系统的原因,例如通过具有结构化输入的 API。

它开辟了许多可能性:

  • Autonomous AI assistants(自主人工智能助手): 机器人可以与内部系统交互,完成客户订单和退货等任务,而不仅仅是提供查询的答案
  • Personal research assistants(个人研究助理): 假设您正在计划旅行,助理可以在 Excel 中搜索 Web、抓取内容、比较选项和汇总结果。
  • IoT voice commands(IoT 语音命令): 模型可以控制设备或根据检测到的意图建议操作,例如调整交流温度。

Function Calling的结构

借用 Gemini 的函数调用文档,函数调用具有以下结构,在 OpenAI 中的工作原理相同

img

图片来自 Gemini 的函数调用文档

  1. 用户像应用程序提出问题
  2. 应用程序传递用户提供的prompt和函数声明,这是对模型可以使用的工具的描述
  3. 根据函数声明,模型建议要使用的工具以及相关的请求参数。请注意,模型仅输出建议的工具和参数,而不实际调用函数
  4. 4 & 5 根据响应,应用程序调用相关 API
  5. 6 & 7 来自 API 的响应再次输入模型,模型再输出人类可读的响应
  6. 应用程序将最终响应返回给用户,然后从 1 开始重复。

这似乎有些混乱,但我们将通过示例详细说明这个概念

架构

在深入研究代码之前,先介绍一下Demo应用程序的架构。

解决方案

在这里,我们为参观酒店的游客建立了一个助手。助手可以访问以下工具,这些工具允许助手访问外部应用程序。

  • get_items , purchase_item : 通过API连接到存储在数据库中的产品目录,分别用于检索项目列表和进行购买
  • rag_pipeline_func :使用检索增强生成 (RAG) 连接到文档存储,以从非结构化文本(例如酒店手册)中获取信息

img

技术栈

  • Embedding model: all-MiniLM-L6-v2
  • Vector Database: Haystack 的 InMemoryDocumentStore
  • LLM: 通过 OpenRouter 访问的 GPT-4 Turbo。使用 OpenRouter,您可以在没有 VPN 的情况下从香港访问不同的 LLM API。该流程可以适应使用其他LLMs流程,只需稍作代码更改,只要它们支持函数调用,Gemini
  • LLM Framework: Haystack 的易用性、出色的文档和管道建设的透明度。本教程实际上是他们针对同一主题的精彩教程的扩展

现在让我们开始吧!

示例应用程序

准备工作

前往 Github 克隆我的代码。以下内容可以在笔记本中找到 function_calling_demo 。

还请创建并激活虚拟环境,然后 pip install -r requirements.txt 安装所需的软件包

初始化

我们首先连接到 OpenRouter。或者,只要您有 OpenAI API 密钥,使用原始 OpenAIChatGenerator 文件而不覆盖 也可以 api_base_url

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import os
from dotenv import load_dotenv
from haystack.components.generators.chat import OpenAIChatGenerator
from haystack.utils import Secret
from haystack.dataclasses import ChatMessage
from haystack.components.generators.utils import print_streaming_chunk

# Set your API key as environment variable before executing this
load_dotenv()
OPENROUTER_API_KEY = os.environ.get('OPENROUTER_API_KEY')

chat_generator = OpenAIChatGenerator(api_key=Secret.from_env_var("OPENROUTER_API_KEY"),
  api_base_url="https://openrouter.ai/api/v1",
  model="openai/gpt-4-turbo-preview",
        streaming_ca
### 如何在Spring框架中调用AI函数 为了在Spring框架内集成并调用AI功能,开发者可以利用`spring-ai`模块来简化这一过程。通过设置特定属性如API密钥以及模型选项,应用程序能够轻松访问外部的人工智能服务。 配置文件中的相关设定如下所示: ```properties spring.ai.openai.api-key=YOUR_API_KEY spring.ai.openai.embedding.options.model=text-embedding-ada-002[^1] ``` 上述配置允许应用连接到OpenAI的服务,并指定使用名为`text-embedding-ada-002`的预训练模型来进行文本嵌入操作。这使得开发人员可以在项目里实现自然语言处理的任务,比如语义相似度计算或是基于内容的推荐系统构建等高级特性。 对于希望进一步增强解释性的AI交互体验的应用程序而言,研究也提供了有价值的见解。例如,在计算机视觉领域的工作展示了如何让机器学习模型不仅给出预测结果还能提供背后的原因说明,从而提高了系统的透明性和可信度[^2]。 当涉及到具体编码实践时,假设已经完成了必要的依赖引入和环境搭建工作,则可以通过注入相应的客户端组件实例化对象并与之互动的方式完成对AI能力的调用。下面是一个简单的Java代码片段展示怎样创建一个REST控制器方法用于触发AI任务执行: ```java @RestController @RequestMapping("/api/ai") public class AiController { private final OpenAIClient openAiClient; @Autowired public AiController(OpenAIClient openAiClient) { this.openAiClient = openAiClient; } @PostMapping("/embeddings") ResponseEntity<String> getEmbedding(@RequestBody String text){ EmbeddingRequest request = new EmbeddingRequest(text); EmbeddingResponse response = openAiClient.createEmbedding(request); return ResponseEntity.ok(response.toString()); } } ``` 这段代码定义了一个接受POST请求的端点 `/api/ai/embeddings` ,它接收一段文字作为输入参数并通过`openAiClient`发送给远程服务器获取对应的向量表示形式作为响应返回给前端使用者。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值