通过 Function Calling 构建自主 AI Agents
lichunericli 2024-06-26 09:01:04 阅读 78
原文地址: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 中的工作原理相同
用户像应用程序提出问题
应用程序传递用户提供的prompt和函数声明,这是对模型可以使用的工具的描述
根据函数声明,模型建议要使用的工具以及相关的请求参数。请注意,模型仅输出建议的工具和参数,而不实际调用函数
4 & 5 根据响应,应用程序调用相关 API
6 & 7 来自 API 的响应再次输入模型,模型再输出人类可读的响应
应用程序将最终响应返回给用户,然后从 1 开始重复。
这似乎有些混乱,但我们将通过示例详细说明这个概念
架构
在深入研究代码之前,先介绍一下Demo应用程序的架构。
解决方案
在这里,我们为参观酒店的游客建立了一个助手。助手可以访问以下工具,这些工具允许助手访问外部应用程序。
get_items
,purchase_item
: 通过API连接到存储在数据库中的产品目录,分别用于检索项目列表和进行购买
rag_pipeline_func
:使用检索增强生成 (RAG) 连接到文档存储,以从非结构化文本(例如酒店手册)中获取信息
技术栈
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_c |
下一篇: 智能化未来:Agent AI智能体的崛起与全球挑战
本文标签
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。