仿佛就在昨天,我们都被生成式AI震撼,尤其是让普通人也能轻松与大型语言模型对话的聊天界面。
虽然这已经非常令人惊讶,但这只是开始。下一代的人工智能是代理式的,这意味着这些系统不仅能响应指令,还能主动采取行动、作出决策,并与外部系统互动。这是通过AI代理来实现的。
什么是AI助手?当你与使用AI的聊天机器人(如ChatGPT)互动时,你可以询问它如何做某事,它会提供一步一步的指南。
例如,如果我在写代码时遇到了错误,我可以将错误信息粘贴到ChatGPT,让它帮我调试。由于ChatGPT无法访问我的代码库,它会猜测错误的原因,并给出几个可能的解决方案让我试试。我会手动试试这些方案,并告诉ChatGPT结果。我们会一直这么来回,直到错误解决或我放弃。
AI助手通过代替我与语言模型交流并直接解决问题,极大地简化了这个过程。
_> 一个AI代理程序是一个可以自主运行来实现目标的系统。
因为AI代理连接到系统,它们可以分析情境,决定下一步行动并执行,而无需任何人工干预。这种能力使它们从被动的聊天机器人角色转变为自动化助手角色。
通过使用AI代理,我只需说“解决错误”,它就能自动帮我解决错误。
AI代理如何与大型语言模型合作大型语言模型(LLM,例如GPT-4o、Claude 3.5 Sonnet、Gemini 2.0等)为AI代理提供了认知能力。大多数AI代理本身会有一个聊天界面,在这里你可以输入你的指令,代理会将你的指令发送给一个LLM。同时,代理还会通知LLM它能使用哪些工具。
调用工具功能
工具是代理的一个非常重要的方面。代理可以通过调用工具执行API调用。
我们来看一个例子。
1.) 请帮我解决我在UserService.java文件中的NullPointerException问题。
代理将用户请求和可用工具列表以结构化格式发送给LLM。
用户请求如下: "修复 UserService.java 文件中的空指针异常。"
可用工具:
1. read_file(文件路径: str) → 返回指定文件的内容。
2. analyze_code(file_content: str) → 识别潜在错误并提出修复建议。
3. edit_file(file_path: str, modifications: dict) → 应用代码更改。
4. run_tests() → 运行测试并返回结果。
切换到全屏 切换回正常视图
大模型分析请求,选择合适的工具,并决定需要读取文件来帮助解决问题。
[
{
"工具名称": "read_file",
"参数值": { "文件路径名": "UserService.java" }
}
]
全屏显示 退出全屏
代理程序调用 read_file()
并将代码发送给大型语言模型。
public class UserService {
private Database db;
public void 查找用户(String userId) {
System.out.println(db.findUserById(userId).getName());
}
}
// 根据用户ID查找用户并打印用户名
切换到全屏,切换回正常模式
5.) 大型语言模型识别到问题(db变量未被初始化),现在选择其他工具来解决这个问题。
以下是一个JSON数据结构的示例,描述了编辑文件的工具及其参数。工具名称为edit_file
,参数包括文件路径为UserService.java
。修改部分指定了修改的行号为3,并用新的代码行private Database db = new Database();
替换原有内容。
[
{
"tool": "edit_file",
"parameters": {
"file_path": "UserService.java",
"modifications": {
"line_number": 3,
"replacement": "private Database db = new Database();"
}
}
}
]
进入全屏,退出全屏
6.) 代理人运行 edit_file()
来修改 UserService.java
,然后告诉 LLM。
7.) LLM认为进行测试来确认更改是个好主意。
[
{
"tool": "运行测试任务",
"parameters": {}
}
]
点击全屏 点击退出全屏
8.), 代理人运行 run_tests()
并将测试结果告诉 LLM。
{
"tests_passed": true,
"failed_tests": []
}
全屏模式 退出全屏
9.) LLM生成一条最终消息,然后代理将这条消息展示给用户。
我在 UserService.java 中通过初始化 db 变量解决了 NullPointerException 问题。所有测试都已通过。如果您需要进一步修改,请告诉我!
全屏 / 退出全屏
没有工具调用,大型语言模型只能根据训练数据猜测答案。但通过使用工具,程序可以直接访问所需的数据,从而做出准确的决定并采取相应的行动。
值得注意的是,并不是所有的代理在工具访问上都一样。大多数专有代理只能访问特定的LLM和一组预设工具,因为公司通常会为自己的应用构建专门的代理。
其他代理,例如Goose,更加灵活,允许用户根据自己的选择配置LLM,并添加各种工具,比如API、数据库和本地环境(如IDE)。然而,为了使代理能够在不同的工具和系统之间进行扩展,而不必为每个系统单独进行自定义集成,它们需要一种标准化的方式来发现、调用和管理这些工具。这正是模型上下文协议(MCP)的功能。
MCP (注:此处为原文中的缩写或专有名词,保留原文形式) 生态体系传统的AI整合需要为每个系统定制API调用,这使得扩展变得很困难。MCP解决了这个问题,通过提供一个开放且通用的协议,使代理能够与外部系统动态地进行通信。
通过MCP,像Goose这样的代理就能够做到:
- 无需开发人员手动编写集成代码即可连接到任何 API
- 与云服务、开发工具、数据库和企业系统无缝集成
- 获取并存储上下文信息以增强推理
在撰写本文时,已有超过1000个这样的MCP服务器(这些服务器提供工具接口)可供任何支持MCP的AI代理(如 Goose)连接!这些MCP服务器作为代理和外部系统之间的桥梁,让API、数据库和开发环境变得可访问。其中一些是由官方API提供商开发的,而大多数则是由社区成员开发的。因为MCP是一个开放标准,任何人都可以为任何资源搭建MCP服务器。这大大增加了AI代理的功能和可能性!
例如,假设我想让 Goose 根据 Figma 设计在 WebStorm IDE 中开发并创建一个新的网络应用,并将代码提交到 GitHub 新仓库中。我可以将以下 MCP 服务器作为 Goose 扩展添加进来,来赋予它所有这些能力:
以下是一些教程链接:
通过这个,我可以用自然语言吩咐我的AI助手,它就会去搞定:
(句末的冒号已省略,使表达更口语化。)
_> 根据文件ID为XYZ的figma设计稿,在WebStorm中构建一个Web应用,并将其代码提交至名为angiejones/myapp的新GitHub仓库。
真的很强,对吧?!
来开始你的AI助手之旅希望这为你提供了关于什么是AI代理、它们是如何工作的以及它们能为你做些什么的清晰见解。Goose是免费且开源的,你可以根据需要添加任意数量的扩展。这是开始使用AI代理并将它们融入你的工作流程以提高效率的好方法。