上一章 目录 下一章

第41章:Agent开发实战

学习目标

  • 掌握使用LangChain构建Agent的基础方法
  • 理解Claude Code的Agent能力与使用方式
  • 学会定义Agent的工具集和执行流程
  • 了解Agent的测试验证方法

前置要求

  • 已完成第40章Agent架构的学习
  • 有Python开发能力
  • 了解LangChain或Claude API基础
Agent开发框架示意图
图41-1 Agent开发框架:基于LangChain与Claude集成,通过"规划→执行→观察"循环实现自主任务完成

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、处理解析错误

扩展阅读

上一章 目录 下一章