从零构建12-Factor Agents项目:打造符合12要素原则的TypeScript智能体

从零构建12-Factor Agents项目:打造符合12要素原则的TypeScript智能体

12-factor-agents 模块化构建LLM应用,确保生产级可靠性与高效交付。 12-factor-agents 项目地址: https://gitcode.com/gh_mirrors/12/12-factor-agents

本文将带你深入了解如何从零开始构建一个遵循12要素原则的TypeScript智能体(Agent)项目。12-Factor Agents项目提供了一套构建现代化、可扩展智能体应用的最佳实践指南。

项目初始化与环境搭建

准备工作

首先确保你的开发环境已经准备就绪:

  1. 安装Node.js 20或更高版本
  2. 准备npm包管理器
  3. 清理工作目录,确保从干净的状态开始
rm -rf baml_src/ && rm -rf src/

基础项目结构

我们从一个简单的TypeScript项目开始:

  1. 创建package.json文件,包含基本依赖:

    • TypeScript 5.0+
    • tsx (TypeScript执行环境)
    • ESLint (代码质量检查工具)
  2. 配置TypeScript编译器选项(tsconfig.json):

    • 使用ES2017标准
    • 启用严格类型检查
    • 配置模块解析方式
  3. 添加.gitignore文件,排除不需要版本控制的目录

Hello World验证

创建一个简单的index.ts文件,包含基本的异步函数:

async function hello(): Promise<void> {
    console.log('hello, world!')
}

async function main() {
    await hello()
}

main().catch(console.error)

运行验证:

npx tsx src/index.ts

构建智能体核心功能

添加BAML集成

BAML(Boundary ML)是一个用于提示工程和结构化输出的工具:

  1. 安装BAML依赖:
npm install @boundaryml/baml
  1. 初始化BAML配置:
npx baml-cli init
  1. 创建智能体提示定义文件(agent.baml):
    • 定义DoneForNow响应类型
    • 配置LLM客户端(Qwen3模型)
    • 创建DetermineNextStep函数

实现CLI接口

构建命令行交互界面:

  1. 创建cli.ts处理命令行参数
  2. 实现Thread类管理对话上下文
  3. 开发agentLoop函数处理智能体主循环

运行智能体

设置环境变量后运行:

export BASETEN_API_KEY=your_key
export BASETEN_BASE_URL=your_url
npx tsx src/index.ts "你的消息"

扩展智能体能力:计算工具

添加计算工具定义

在BAML中定义四种基本计算工具:

type CalculatorTools = AddTool | SubtractTool | MultiplyTool | DivideTool

class AddTool {
    intent "add"
    a int | float
    b int | float
}
// 其他工具类似定义...

更新智能体响应类型

修改DetermineNextStep函数,使其能返回计算工具或DoneForNow响应:

function DetermineNextStep(
    thread: string 
-) -> DoneForNow {
+) -> CalculatorTools | DoneForNow {

实现工具处理逻辑

在agentLoop中添加工具调用处理:

case "add":
    thread.events.push({"type": "tool_call", "data": nextStep});
    const result = nextStep.a + nextStep.b;
    thread.events.push({"type": "tool_response", "data": result});
    continue;

测试与验证

添加BAML测试用例

为智能体功能添加测试验证:

test MathOperation {
  functions [DetermineNextStep]
  args {
    thread #"
      {
        "type": "user_input",
        "data": "can you multiply 3 and 4?"
      }
    "#
  }
  @@assert(intent, {{this.intent == "multiply"}})
}

运行测试

执行BAML测试套件:

npx baml-cli test

进阶功能:复杂计算处理

实现多步骤计算

智能体现在可以处理复杂的多步计算请求,例如: "can you multiply 3 and 4, then divide the result by 2 and then add 12 to that result"

添加中间状态测试

验证智能体在复杂计算中间状态的行为:

test LongMath {
  functions [DetermineNextStep]
  args {
    thread #"
      [
        {"type": "user_input", "data": "复杂计算请求"},
        {"type": "tool_call", "data": {"intent": "multiply", "a": 3, "b": 4}},
        {"type": "tool_response", "data": 12}
      ]
    "#
  }
}

12要素原则实践

本项目严格遵循12要素应用原则:

  1. 代码库 - 单一代码库,多环境部署
  2. 依赖 - 显式声明依赖关系
  3. 配置 - 环境变量存储配置
  4. 后端服务 - 将LLM视为附加资源
  5. 构建、发布、运行 - 严格分离构建和运行阶段
  6. 进程 - 以无状态进程运行
  7. 端口绑定 - 通过CLI接口导出服务
  8. 并发 - 通过进程模型扩展
  9. 易处理 - 快速启动和优雅终止
  10. 开发/生产环境等价 - 保持环境相似
  11. 日志 - 将日志视为事件流
  12. 管理进程 - 将管理任务作为一次性进程运行

通过本教程,你已经掌握了构建符合12要素原则的智能体应用的核心技术。这种架构设计使你的智能体应用具备了良好的可维护性、可扩展性和部署灵活性。

12-factor-agents 模块化构建LLM应用,确保生产级可靠性与高效交付。 12-factor-agents 项目地址: https://gitcode.com/gh_mirrors/12/12-factor-agents

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

韦韬韧Hope

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值