构建我的第一个 AI 代理
Source: Dev.to
介绍
AI 代理在当今科技领域日益突出,并且这种势头没有放缓的迹象。它们已经成为全球技术知识工作者工作流的不可或缺的一部分,仅用了几个月的时间就达到了这一地位。
我最近跟随了我最喜欢的作者之一 Thorsten Ball 的教程,该教程提供了构建自己的 AI 代理的路线图。我被这篇教程吸引的原因有几方面:扩展我对这些工具的了解、使用我喜欢但在日常工作中很少用到的 Go 语言,以及信任 Thorsten 对密集概念的清晰解释。
下面是我构建编码代理的高层概览,以及关键收获。
项目搭建
项目脚手架 – 创建了常规的 Go 项目文件,包括
main.go。Anthropic SDK – 添加了 Anthropic SDK 并定义了一个带有
NewAgent构造函数的Agent类型,该构造函数接受:- 一个 Anthropic 客户端
- 一个
getUserMessage函数
该类型和构造函数已在
main.go中接入。API 密钥 – 填入我的 Anthropic API 密钥,并实现了一个接受
context和对话切片的run函数。首次运行 – 在接入密钥和
run函数后,我可以在终端运行 Claude。它向我问好:“Chat with Boris, slug head”
(向 GoldenEye N64 游戏致敬)。
创建代理包装器
仅仅在本地包装一个 LLM 本身已经很有用,但一个可用的编码代理需要执行几项标准操作:
- 读取文件:在工作目录中读取文件
- 列出文件:列出该目录下的文件
- 编辑文件:在工作目录中编辑文件
这些操作遵循相同的模式:
- 为精确的输入输出定义严格的模式(schema)。
- 使用 JSON 编解码来打包/解包数据。
- 在主可执行文件中注册工具的命名空间(
read、write、list)。
将这三个“行动支柱”整合后,我的代理——GoldenEye——能够以类似我在工作和家庭中使用的代理方式运行。
实现文件操作
教程中关于文件操作的章节是最具挑战性的,但其核心过程可以归结为:
- 模式定义 – 为每个操作提供明确的 JSON 结构。
- JSON 处理 – 一致的序列化/反序列化,以确保数据流正确。
- 命名空间注册 – 将每个工具添加到代理的工具箱,以便在对话期间调用。
当这些工作完成后,GoldenEye 就可以按需读取、列出和编辑文件。
收获
- 上下文为王 – 提供清晰、明确的提示(例如
read_file({path: "main.go"}))显著提升代理按预期行动的能力。 - 接线的简易性 – 将模型本地连接到代码相对直接;真正的区别在于:
- 底层模型的质量和相关性。
- 用户体验,包括 UI 设计和性能。
- 代理循环基本解决 – 大部分繁重工作已经完成;剩余的关键在于你如何呈现工具并管理上下文。
- 未来关注点 – 我渴望探索下一层抽象:驱动这些代理的模型。了解它们的架构和能力将加深我对 AI 智能的认识。
参考资料
- How to Build an Agent by Thorsten Ball – 启发本工作的教程
- Anthropic API 文档
- GoldenEye 仓库 – 我的实现