AI Agent 开发实战手册
AI Engineer
AI Agent 开发实战手册

从 0 到 1 掌握 AI Agent 开发:涵盖自主计划、工具调用、MCP 协议与多智能体编排实战。

AI Agent 开发实战手册实战一:构建你的第一个工具调用 Agent

Python 工具调用 Agent 实战:可运行脚本、错误处理与测试

先把执行循环测清楚,再接真实模型。这个实验提供两个可以下载的文件,查询的是一条模拟订单;默认运行不需要 API Key。它适合已经会运行 Python 脚本、理解函数和 JSON 的学习者。

#1. 下载与运行

要求 Python 3.10 或以上,无需安装第三方依赖。将 tool_agent.pytest_tool_agent.py 保存到同一文件夹,然后在该文件夹运行:

bash
python3 tool_agent.py python3 -m unittest -v test_tool_agent.py

2026-09-07 的离线运行结果:

json
{"mode": "fixture", "answer": "DEMO-1001: shipped (synthetic_fixture)", "steps": 2}

9 项测试覆盖正常闭环、未知订单、未注册工具、非法 JSON、参数结构错误、重复调用上限、批量工具调用、空回答和模型层超时。fixture 是脚本化模型替身;这些结果验证执行程序,不能作为 LLM 推理能力或真实接口可用性的证明。

#2. 三个函数各管什么?

函数输入 → 输出责任
execute_tool(name, arguments)工具名与 JSON → 结构化结果只允许 lookup_order;严格检查字段和类型
run_agent(model, question)模型适配函数与问题 → 回答、轮次、历史保留模型返回项,执行工具,按 call_id 回传结果,限制轮次
fixture_model / live_model历史 → 模型输出项前者提供确定性测试;后者调用真实 Responses API

程序没有执行任意 Python 或 shell 的入口。即使模型请求 delete_order,也只会得到 unknown_tool

#3. 看一次工具调用的完整往返

模型适配函数返回工具调用:

json
{"type":"function_call","call_id":"demo-call-1","name":"lookup_order","arguments":"{\"order_id\":\"DEMO-1001\"}"}

程序校验后生成结果,再把它作为 function_call_output 放回历史;call_id 必须与请求一致。结果正文是 JSON 字符串:

json
{"ok":true,"order_id":"DEMO-1001","status":"shipped","source":"synthetic_fixture"}

下一轮模型看到结果,才生成最终回答。脚本保留完整的 output 项,包括接口返回的 reasoning 项,而不是只摘出函数名称后丢掉其他上下文。工具调用官方说明

#4. 故意让工具失败

在同一个文件夹运行:

bash
python3 -c 'from tool_agent import execute_tool; print(execute_tool("lookup_order", "{\"order_id\":\"MISSING\"}"))'

返回 {'ok': False, 'error': 'order_not_found'}。这与“订单尚未发货”不同:前者没有查到记录,后者需要有记录支持。错误必须保留为错误,不能用默认状态补齐。

将测试里的模型替身改为一直请求工具时,程序在上限处抛出 step_limit_reached;空回答则抛出 model_returned_no_answer。失败不打印成“任务成功”。

#5. 接入真实模型

脚本的 --live 路径使用标准库发送 HTTPS 请求到 OpenAI Responses API。先通过自己的安全环境配置设置 OPENAI_API_KEYOPENAI_MODEL;模型需要在你的账号中可用且支持工具调用。不要把密钥写进教程、源码或分享截图。

bash
python3 tool_agent.py --live --question 'Look up DEMO-1001. Do not guess its status.'

此模式会产生实际模型请求和费用。本轮仅核对官方接口文档,未使用真实模型运行;账户权限、模型支持情况、实际输出和费用需要你运行后确认。工具仍读取模拟订单,不会连接真实客户数据库。默认离线模式的 --question 不会改变脚本化选择,只用于观察历史传递。

真实接口设 20 秒超时;认证失败、限流和网络错误直接抛出,不自动无限重试。工程项目中应进一步增加总耗时预算、请求取消、日志脱敏及调用成本限制。

#6. 改成你的业务前,完成这张清单

  • 用服务端身份验证确定用户能查看哪些订单;不要只信任模型传来的订单号。
  • 将模拟字典替换为只读业务接口,并对超时、无权限和不存在分别返回明确错误。
  • 为真实模型准备包含正确查询、未知记录、越权请求和诱导乱调用的评测集。
  • 涉及退款或发消息时,增加独立业务授权与确认流程;这个只读实验不具备这些权限。

下一步:回到 Agent 学习路线学习评测与回归用例。希望按课程项目继续学习,可查看 AI Engineer Bootcamp 的课程安排与试学信息

System Design

系统设计必备:核心概念 + 经典案例

快速掌握取舍与设计套路,备战系统设计面试。

进入 System Design →

常见问题

开发 AI Agent 需要掌握哪些编程语言?
首选 Python 或 TypeScript。Python 是 AI 生态的基石,而 TypeScript 在开发 MCP Server 和网页端交互时效率极高。借助 Cursor 等 AI 原生编辑器,编程门槛已大幅降低。
MCP 协议目前支持哪些模型?
MCP 连接 AI 应用与工具或上下文服务,不限定某一款模型。能否使用某个 MCP Server,要看宿主应用的客户端支持、传输方式、协议版本和授权配置;模型的工具调用能力还需单独验证。
AI Agent 会导致程序员失业吗?
不能从一项技术推断个人就业结果。开发 Agent 仍需要明确需求、设计权限、验证结果和维护系统;可以先用一个小项目验证这些能力,再决定学习投入。