第41章:Agent开发实战
学习目标
- 掌握使用LangChain构建Agent的基础方法
- 理解Claude Code的Agent能力与使用方式
- 学会定义Agent的工具集和执行流程
- 了解Agent的测试验证方法
前置要求
- 已完成第40章Agent架构的学习
- 有Python开发能力
- 了解LangChain或Claude API基础
Agent开发框架选型
| 框架 | 特点 | 适用场景 | 推荐度 |
|---|---|---|---|
| LangChain | 成熟生态、丰富工具集成、ReAct实现 | 复杂多工具Agent、生产环境 | ★★★★☆ |
| Claude Code | Anthropic官方、深度Claude集成、MCP原生支持 | Claude生态、代码助手、测试工具链 | ★★★★★ |
| AutoGPT | 完全自主、目标驱动、实验性 | 研究探索、原型验证 | ★★★☆☆ |
| OpenAI Assistants | 托管服务、简化部署、GPT集成 | 快速原型、GPT生态 | ★★★★☆ |
实战1:使用LangChain构建测试Agent
Bash - 安装依赖
# 安装 LangChain
pip install langchain langchain-anthropic
# 或使用 uv
uv add langchain langchain-anthropic
定义测试工具集
Python - 定义Agent工具
from langchain.tools import tool
from typing import Optional
import json
# 定义测试相关工具
@tool
def query_test_results(project: str, date: Optional[str] = None) -> str:
"""查询测试执行结果
Args:
project: 项目名称
date: 查询日期(可选,默认今天)
Returns:
测试结果JSON字符串
"""
# 模拟查询(实际项目中调用真实API)
results = {
"project": project,
"date": date or "2025-01-15",
"total": 50,
"passed": 45,
"failed": 3,
"skipped": 2,
"duration": "12.5 minutes"
}
return json.dumps(results)
@tool
def get_failed_test_cases(project: str) -> str:
"""获取失败测试用例详情
Args:
project: 项目名称
Returns:
失败用例列表
"""
failed_cases = [
{"id": "TC-001", "name": "支付接口测试", "error": "超时"},
{"id": "TC-002", "name": "登录验证测试", "error": "断言失败"},
{"id": "TC-003", "name": "数据同步测试", "error": "数据不一致"}
]
return json.dumps(failed_cases, indent=2)
@tool
def generate_test_report(results: str, format: str = "html") -> str:
"""生成测试报告
Args:
results: 测试结果JSON字符串
format: 报告格式(html/markdown)
Returns:
生成的报告内容
"""
data = json.loads(results)
report = f"""
## 测试报告 - {data['project']}
- 日期: {data['date']}
- 执行总数: {data['total']}
- 通过: {data['passed']} ({data['passed']/data['total']*100:.1f}%)
- 失败: {data['failed']}
- 跳过: {data['skipped']}
- 耗时: {data['duration']}
"""
return report
# 工具列表
tools = [query_test_results, get_failed_test_cases, generate_test_report]
创建Agent并执行
Python - 创建ReAct Agent
from langchain.agents import AgentExecutor, create_react_agent
from langchain_anthropic import ChatAnthropic
from langchain import hub
# 初始化 LLM
llm = ChatAnthropic(
model="claude-3-5-sonnet-20241022",
temperature=0
)
# 获取 ReAct Prompt模板
prompt = hub.pull("hwchase17/react")
# 创建 Agent
agent = create_react_agent(llm, tools, prompt)
# 创建 Agent Executor
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
verbose=True, # 显示执行过程
handle_parsing_errors=True # 处理解析错误
)
# 执行任务
result = agent_executor.invoke({
"input": "查询web项目的测试结果,并生成一份测试报告"
})
print("=== Agent 执行结果 ===")
print(result["output"])
实战2:使用Claude Code构建Agent
Claude Code的优势
Claude Code是Anthropic官方的Agent框架,与Claude深度集成,原生支持MCP工具调用,非常适合测试工具链场景。
Bash - Claude Code使用
# Claude Code 通过 CLI 使用
# 安装 Claude Code CLI
npm install -g @anthropic-ai/claude-code
# 或直接使用
claude-code
# 在 Claude Code 中配置 MCP Server
# 编辑 ~/.claude-code/config.json
{
"mcpServers": {
"test-tools": {
"command": "python",
"args": ["test_mcp_server.py"]
}
}
}
# 启动 Agent 任务
claude-code --task "执行web项目的回归测试并生成报告"
Agent开发的关键要素
| 要素 | 说明 | 开发要点 |
|---|---|---|
| 工具定义 | Agent可调用的功能集 | 每个工具要有清晰的描述和参数Schema |
| Prompt模板 | 指导Agent如何思考和行动 | ReAct模板包含:思考→行动→观察→反思 |
| 记忆系统 | 存储执行历史和上下文 | LangChain提供多种记忆类型(Buffer、Summary) |
| 错误处理 | 处理工具调用失败 | 设置handle_parsing_errors,提供重试机制 |
| 执行控制 | 限制执行次数和资源 | 设置max_iterations防止无限循环 |
Agent测试验证清单
Agent验证测试
# Agent 测试验证脚本示例
def test_agent_execution():
"""测试Agent基本执行能力"""
# 测试1:简单任务
result = agent_executor.invoke({
"input": "查询web项目的测试结果"
})
assert "passed" in result["output"] or "failed" in result["output"]
# 测试2:复杂任务链
result = agent_executor.invoke({
"input": "查询测试结果,找出失败用例,生成报告"
})
assert "报告" in result["output"]
# 测试3:异常处理
result = agent_executor.invoke({
"input": "查询不存在项目的测试结果"
})
assert result is not None # 应有错误处理,不应崩溃
# 测试4:多次执行一致性
results = [
agent_executor.invoke({"input": "生成今日报告"})
for _ in range(3)
]
# 验证结果格式一致(内容可能不同)
assert all("测试报告" in r["output"] for r in results)
print("所有Agent测试通过!")
if __name__ == "__main__":
test_agent_execution()
Agent开发最佳实践
开发建议
- 工具描述要清晰:Agent通过描述理解何时用哪个工具,描述越清晰,选择越准确
- 限制执行次数:设置max_iterations防止Agent陷入循环
- 启用verbose模式:开发时启用verbose观察Agent的思考过程
- 处理解析错误:LLM输出可能格式错误,需要容错处理
- 添加记忆系统:长任务需要记忆中间结果
- 设置成功标准:明确什么状态算"任务完成"
本章小结
- Agent开发框架:LangChain(成熟生态)、Claude Code(官方集成)、AutoGPT(实验性)
- LangChain开发流程:定义Tools → 选择Prompt模板 → 创建Agent → AgentExecutor执行
- Claude Code通过MCP集成工具,原生支持测试工具链
- 关键要素:工具定义、Prompt模板、记忆系统、错误处理、执行控制
- 测试验证:简单任务、复杂链式任务、异常处理、一致性验证
- 最佳实践:清晰工具描述、限制循环次数、启用verbose、处理解析错误
扩展阅读
- 第42章:Harness框架 - Agent执行框架详解
- LangChain Agent官方文档