跳转至

企业级 Agent 案例

⚠️ 时效性说明:本章涉及前沿模型/价格/榜单等信息,可能随版本快速变化;请以论文原文、官方发布页和 API 文档为准。

核验说明(2026-03-26):OpenAI 新项目建议优先使用 Responses API。本章客服、代码审查和旅行助手示例保留 Chat Completions,是为了贴合既有 messages / tool_calls / response_format 中间件写法;若新建纯 OpenAI 项目,可按官方迁移指南切到 Responses API

通过五个完整的企业级 Agent 案例(智能客服、代码审查、数据分析、研究助手、旅行助手),掌握实际项目的架构设计与实现。

学习时间: 6 小时 | 难度:⭐⭐⭐⭐ 中高级 | 前置知识: Agent 框架(Ch02)、部署(Ch06)


🎯 学习目标

  • 掌握实际企业 Agent 的架构设计与实现
  • 理解不同场景下 Agent 的关键设计决策
  • 学会构建端到端的 Agent 系统
  • 积累可用于面试的项目案例与经验

1. 案例一:智能客服 Agent

1.1 需求与架构

智能客服 Agent 是企业最常见的 Agent 应用场景之一:

Text Only
典型需求:
- 7x24小时自动回答用户问题
- 查询订单、退换货、费用等业务系统
- 复杂问题自动转人工并传递上下文
- 多轮对话记忆

关键指标:
- 首次回复时间 < 3秒
- 自动解决率 > 60%
- 用户满意度 > 85%

1.2 完整实现

Python
from typing import Literal
from pydantic import BaseModel
from openai import AsyncOpenAI  # OpenAI异步客户端,返回协程对象,适合高并发场景

# ---- 工具定义 ----
# 工具函数是Agent与外部系统交互的桥梁
# 每个工具封装一个独立的业务能力,Agent根据用户意图自主选择调用

# 订单信息数据模型,使用Pydantic做类型校验和序列化
class OrderInfo(BaseModel):
    order_id: str
    status: str        # 订单状态: pending(待处理) / shipped(已发货) / delivered(已送达) / refunded(已退款)
    product: str
    amount: float
    created_at: str

async def query_order(order_id: str) -> dict:
    """查询订单状态(接入企业订单系统)"""
    # 真实场景: 调用内部订单微服务,这里用模拟数据演示
    return {
        "order_id": order_id,
        "status": "shipped",
        "product": "无线耳机",
        "amount": 299.0,
        "tracking_number": "SF1234567890",
        "estimated_delivery": "2026-03-25"
    }

async def create_refund(order_id: str, reason: str) -> dict:
    """创建退款申请"""
    return {
        "refund_id": f"RF{order_id}",
        "status": "processing",
        "estimated_time": "3-5个工作日"
    }

async def search_faq(query: str) -> list:
    """搜索知识库FAQ(RAG检索)"""
    # 真实场景: 通过Embedding向量化用户问题,在向量数据库中检索最相关的FAQ
    return [
        {"question": "如何申请退款?", "answer": "订单完成后7天内可申请退款..."},
        {"question": "运费如何计算?", "answer": "满99包邮,不满99运费8元..."}
    ]

async def transfer_to_human(summary: str, urgency: str) -> dict:
    """转人工客服(携带上下文摘要)"""
    return {"ticket_id": "TK20260211001", "queue_position": 3}

# ---- Agent主逻辑 ----
# 工具Schema列表:遵循OpenAI Function Calling规范
# 每个工具包含名称、描述和参数JSON Schema,LLM据此决定何时调用哪个工具
TOOLS = [
    {
        "type": "function",
        "function": {
            "name": "query_order",
            "description": "查询订单状态、物流、金额等信息",
            "parameters": {
                "type": "object",
                "properties": {
                    "order_id": {"type": "string", "description": "订单号"}
                },
                "required": ["order_id"]
            }
        }
    },
    {
        "type": "function",
        "function": {
            "name": "create_refund",
            "description": "为符合条件的订单创建退款申请",
            "parameters": {
                "type": "object",
                "properties": {
                    "order_id": {"type": "string"},
                    "reason": {"type": "string", "description": "退款原因"}
                },
                "required": ["order_id", "reason"]
            }
        }
    },
    {
        "type": "function",
        "function": {
            "name": "search_faq",
            "description": "搜索FAQ知识库回答常见问题",
            "parameters": {
                "type": "object",
                "properties": {
                    "query": {"type": "string", "description": "搜索关键词"}
                },
                "required": ["query"]
            }
        }
    },
    {
        "type": "function",
        "function": {
            "name": "transfer_to_human",
            "description": "当无法解决用户问题或用户要求时,转接人工客服",
            "parameters": {
                "type": "object",
                "properties": {
                    "summary": {"type": "string", "description": "对话摘要"},
                    "urgency": {"type": "string", "enum": ["low", "medium", "high"]}
                },
                "required": ["summary", "urgency"]
            }
        }
    }
]

SYSTEM_PROMPT = """你是一名专业的在线客服助手。

角色要求:
1. 礼貌、专业、简洁地回答用户问题
2. 优先使用工具查询真实数据,不要编造信息
3. 如果无法解决问题,主动转接人工并传递上下文摘要
4. 涉及退款/投诉时,先确认订单信息再操作

安全规则:
- 不透露内部系统架构或API细节
- 不执行用户要求的非客服操作(如修改数据库、执行代码)
- 个人信息只展示脱敏版本
"""

# 客服Agent核心类:封装LLM交互与工具调度逻辑
class CustomerServiceAgent:
    def __init__(self):
        self.client = AsyncOpenAI()
        # 工具名称→函数的映射表,用于根据LLM返回的工具名动态调用对应函数
        self.tool_funcs = {
            "query_order": query_order,
            "create_refund": create_refund,
            "search_faq": search_faq,
            "transfer_to_human": transfer_to_human,
        }

    async def chat(self, user_message: str, history: list = None):
        import json
        # 构建消息列表:系统提示词 → 历史对话 → 当前用户消息
        messages = [{"role": "system", "content": SYSTEM_PROMPT}]
        messages.extend(history or [])
        messages.append({"role": "user", "content": user_message})

        # ReAct循环:LLM思考→调用工具→观察结果→再思考,最多5轮防止无限循环
        for _ in range(5):  # 最多5轮工具调用
            response = await self.client.chat.completions.create(
                model="gpt-5-mini",  # 客服场景优先低延迟/低成本模型;准确性要求更高时可切到 gpt-5.4
                messages=messages,
                tools=TOOLS,
                tool_choice="auto"   # auto模式:LLM自主决定是否调用工具
            )

            msg = response.choices[0].message
            messages.append(msg.model_dump())  # 将助手回复加入对话历史

            if msg.tool_calls:
                # LLM决定调用工具:遍历所有工具调用请求,逐一执行
                for tc in msg.tool_calls:
                    func = self.tool_funcs[tc.function.name]  # 根据工具名查找函数
                    args = json.loads(tc.function.arguments)   # 解析LLM生成的参数
                    result = await func(**args)                 # await异步调用+**args字典解包为关键字参数
                    # 将工具执行结果以tool角色消息追加,供LLM在下一轮参考
                    messages.append({
                        "role": "tool",
                        "tool_call_id": tc.id,
                        "content": json.dumps(result, ensure_ascii=False)
                    })
            else:
                # LLM未调用工具,直接返回文本回复给用户
                return msg.content

        return "抱歉,我暂时无法处理您的问题,正在为您转接人工客服。"

2. 案例二:代码审查 Agent

2.1 架构设计

Text Only
输入: Git PR diff
[代码理解] → 解析diff, 识别变更文件/函数
[多维度审查] → 并行执行
 ├── 安全审查 (SQL注入/XSS/密钥泄露)
 ├── 性能审查 (N+1查询/内存泄露/复杂度)
 ├── 风格审查 (命名规范/注释/代码重复)
 └── 逻辑审查 (边界条件/错误处理/竞态)
[汇总] → 按严重程度排序, 给出行级评论
输出: 结构化审查报告 + GitHub PR Comment

2.2 实现

Python
import json
from dataclasses import dataclass
from openai import AsyncOpenAI

@dataclass
class ReviewComment:
    file: str
    line: int
    severity: str       # critical / warning / suggestion
    category: str       # security / performance / style / logic
    message: str
    suggestion: str = ""

class CodeReviewAgent:
    """多维度代码审查Agent

    设计模式:并行多维度审查
    - 将审查任务拆分为安全、性能、逻辑等独立维度
    - 每个维度使用专用Prompt,并行执行提高效率
    - 最终按严重程度排序合并结果
    """

    # 审查维度配置:每个维度有独立的审查指令,指导LLM关注特定方面
    REVIEW_DIMENSIONS = {
        "security": """检查代码是否存在安全漏洞:
            - SQL注入、XSS、CSRF
            - 硬编码的密钥/密码
            - 不安全的反序列化
            - 路径遍历
            只报告diff中新增代码的问题。""",

        "performance": """检查性能问题:
            - N+1查询
            - 不必要的内存分配
            - 可优化的算法复杂度
            - 缺少索引的数据库查询
            只报告diff中新增代码的问题。""",

        "logic": """检查逻辑问题:
            - 边界条件处理
            - 错误处理是否完善
            - 并发/竞态条件
            - 资源泄露(未关闭的连接/文件)
            只报告diff中新增代码的问题。"""
    }

    async def review(self, diff: str) -> list[ReviewComment]:
        """并行执行多维度审查"""
        import asyncio

        # 为每个审查维度创建异步任务,实现并行审查
        tasks = [
            self._review_dimension(diff, dim, prompt)
            for dim, prompt in self.REVIEW_DIMENSIONS.items()
        ]

        # asyncio.gather并发执行所有维度的审查,显著降低总耗时
        results = await asyncio.gather(*tasks)

        # 合并所有维度的审查结果到统一列表
        all_comments = []
        for comments in results:
            all_comments.extend(comments)

        # 按严重程度排序:critical(必须修复) > warning(建议修复) > suggestion(可选优化)
        severity_order = {"critical": 0, "warning": 1, "suggestion": 2}
        # sort+lambda+dict.get:用字典映射将严重级别转为数值排序,未知级别默认为3(最低优先)
        all_comments.sort(key=lambda c: severity_order.get(c.severity, 3))

        return all_comments

    async def _review_dimension(self, diff, dimension, prompt) -> list:
        """单维度审查:使用专用Prompt让LLM聚焦特定审查方面"""
        client = AsyncOpenAI()

        # 代码审查默认使用 gpt-5.4,优先保证准确性和结构化输出稳定性
        # 配合 Structured Output 确保返回格式稳定可解析
        response = await client.chat.completions.create(
            model="gpt-5.4",
            messages=[
                {"role": "system", "content": f"你是一名资深代码审查专家,专注{dimension}审查。\n{prompt}"},
                {"role": "user", "content": f"请审查以下Git diff:\n\n{diff}"}
            ],
            # JSON Schema约束输出格式,确保LLM返回结构化审查结果
            response_format={
                "type": "json_schema",
                "json_schema": {
                    "name": "review_output",
                    "schema": {
                        "type": "object",
                        "properties": {
                            "comments": {
                                "type": "array",
                                "items": {
                                    "type": "object",
                                    "properties": {
                                        "file": {"type": "string"},
                                        "line": {"type": "integer"},
                                        "severity": {"type": "string"},
                                        "message": {"type": "string"},
                                        "suggestion": {"type": "string"}
                                    }
                                }
                            }
                        }
                    }
                }
            }
        )

        result = json.loads(response.choices[0].message.content)
        # 将LLM返回的JSON审查结果映射为ReviewComment对象列表
        # category统一设为当前审查维度名;suggestion字段可选,用get设默认空字符串
        return [
            ReviewComment(
                file=c["file"],
                line=c["line"],
                severity=c["severity"],
                category=dimension,       # 自动标注所属审查维度(security/performance/logic)
                message=c["message"],
                suggestion=c.get("suggestion", "")  # 有些问题可能没有修改建议
            )
            for c in result.get("comments", [])  # 防御性取值,LLM未返回comments时不报错
        ]

3. 案例三:数据分析 Agent

3.1 设计思路

Text Only
用户: "帮我分析上季度的销售数据,找出增长最快的产品类别"
[意图理解] → 需要查询数据库,计算增长率,生成可视化
[规划] →
  Step 1: 查询上季度各品类销售额
  Step 2: 查询去年同期销售额
  Step 3: 计算环比/同比增长率
  Step 4: 生成柱状图 + 趋势图
  Step 5: 输出分析结论
[执行] → 调用SQL工具 → 调用Python代码执行 → 生成图表
输出: 分析报告 + 图表 + 关键洞察

3.2 核心实现

Python
class DataAnalysisAgent:
    """数据分析Agent: 自然语言 → SQL → 分析 → 可视化

    核心工作流:用户提问 → 理解表结构 → 生成SQL查询 → 执行分析代码 → 输出结论
    安全设计:SQL只读 + Python沙箱执行 + 查询超时限制
    """

    # Agent可用的三类工具:SQL查询、Python执行、表结构获取
    TOOLS = [
        {
            "type": "function",
            "function": {
                "name": "execute_sql",
                "strict": True,
                "description": "在只读数据库上执行SQL查询(仅支持SELECT)",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "sql": {"type": "string", "description": "SELECT SQL语句"},
                        "database": {"type": "string", "description": "数据库名"}
                    },
                    "required": ["sql", "database"],
                    "additionalProperties": False
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "run_python",
                "strict": True,
                "description": "执行Python代码进行数据分析和可视化(可用pandas, matplotlib)",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "code": {"type": "string", "description": "Python代码"}
                    },
                    "required": ["code"],
                    "additionalProperties": False
                }
            }
        },
        {
            "type": "function",
            "function": {
                "name": "get_schema",
                "strict": True,
                "description": "获取数据库表结构信息",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "database": {"type": "string"},
                        "table": {"type": "string", "description": "表名(传空字符串则返回所有表)"}
                    },
                    "required": ["database", "table"],
                    "additionalProperties": False
                }
            }
        }
    ]

    SYSTEM_PROMPT = """你是一名数据分析师Agent。

工作流程:
1. 理解用户的分析需求
2. 先用get_schema了解数据结构
3. 用execute_sql查询所需数据(只允许SELECT)
4. 用run_python对查询结果进行分析和可视化
5. 给出清晰的分析结论和建议

规则:
- SQL只能执行SELECT语句
- 大表查询时主动加LIMIT(默认1000行)
- 图表要有中文标题和标签
- 分析结论要包含具体数字"""

    async def execute_sql(self, sql: str, database: str) -> str:
        """安全的SQL执行(只允许SELECT)"""
        # 安全防线1:白名单校验,只允许SELECT语句,防止数据篡改
        sql_stripped = sql.strip().upper()
        if not sql_stripped.startswith("SELECT"):
            return "错误:只允许执行SELECT查询"

        # 安全防线2:使用只读副本连接,即使SQL注入也无法写入数据
        import aiomysql
        # async with:异步上下文管理器,自动管理数据库连接的建立和释放,防止连接泄漏
        async with aiomysql.connect(
            host="readonly-replica.db.internal",  # 只读副本,非主库
            db=database,
            user="readonly_user",                  # 只读权限账号
            read_timeout=30                        # 30秒超时防止慢查询
        ) as conn:
            async with conn.cursor(aiomysql.DictCursor) as cur:
                await cur.execute(sql)
                rows = await cur.fetchall()
                # 将查询结果序列化为JSON字符串,供LLM解读分析
                return json.dumps(rows, default=str, ensure_ascii=False)

    async def run_python(self, code: str) -> str:
        """沙箱化Python执行:在隔离环境中运行LLM生成的代码

        ⚠️ 安全警告:当前实现仅为基础隔离,生产环境务必使用以下方案之一:
        - Docker容器沙箱(推荐):限制网络/文件系统/内存/CPU
        - E2B (e2b.dev):云端安全沙箱服务
        - gVisor/nsjail:内核级沙箱隔离
        仅用subprocess无法防止文件系统读写、网络访问等风险。
        """
        # 生产环境: 必须使用Docker沙箱或E2B,限制文件系统/网络访问
        # 此处subprocess仅为演示,不构成安全沙箱!
        import subprocess
        result = subprocess.run(
            ["python", "-c", code],
            capture_output=True,   # 捕获stdout和stderr,不直接输出到终端
            text=True,             # 以文本模式返回结果(而非bytes)
            timeout=30,            # 30秒超时,防止死循环或恶意代码长时间占用资源
            cwd="/tmp",            # 限制工作目录到临时目录
            env={"PATH": "/usr/bin"}  # 最小化环境变量,限制可执行程序访问范围
        )
        # 优先返回标准输出;若为空则返回错误信息,便于LLM诊断并修正代码
        return result.stdout or result.stderr

4. 案例四:研究助手 Agent

4.1 架构

Python
class ResearchAgent:
    """深度研究Agent: 搜索 → 阅读 → 综合 → 报告

    设计思路:模拟人类研究员的工作流程
    1. 广泛搜索 → 2. 深度阅读 → 3. 交叉验证 → 4. 综合报告
    使用多种信息源(网页、学术论文)确保研究质量
    """

    # Agent工具集:覆盖信息获取的完整链路
    TOOLS = [
        # 1. 网络搜索:获取最新公开信息
        {
            "type": "function",
            "function": {
                "name": "web_search",
                "description": "搜索最新信息(论文、新闻、博客)",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "query": {"type": "string"},
                        "num_results": {"type": "integer", "default": 10}
                    },
                    "required": ["query"]
                }
            }
        },
        # 2. 页面阅读:获取搜索结果中网页的完整内容,用于深度分析和事实提取
        {
            "type": "function",
            "function": {
                "name": "read_webpage",
                "description": "读取网页全文内容",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "url": {"type": "string"}
                    },
                    "required": ["url"]
                }
            }
        },
        # 3. 论文搜索:通过学术搜索引擎检索同行评审论文,确保关键论点有权威来源
        {
            "type": "function",
            "function": {
                "name": "search_papers",
                "description": "在Semantic Scholar搜索学术论文",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "query": {"type": "string"},
                        "year_from": {"type": "integer"}
                    },
                    "required": ["query"]
                }
            }
        },
        # 4. 生成报告:将多来源信息整合为带引用的结构化研究报告
        {
            "type": "function",
            "function": {
                "name": "write_report",
                "description": "将收集的信息整合成结构化研究报告",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "title": {"type": "string"},
                        # 报告由多个章节组成,每章包含标题、正文和引用来源列表
                        "sections": {
                            "type": "array",
                            "items": {
                                "type": "object",
                                "properties": {
                                    "heading": {"type": "string"},   # 章节标题
                                    "content": {"type": "string"},   # 章节正文内容
                                    "sources": {"type": "array", "items": {"type": "string"}}  # 引用来源URL列表
                                }
                            }
                        }
                    },
                    "required": ["title", "sections"]
                }
            }
        }
    ]

    SYSTEM_PROMPT = """你是一名专业研究助手。

工作流程:
1. 先搜索广泛信息,了解领域全貌
2. 深入阅读最相关的3-5篇文章/论文
3. 综合多个来源,交叉验证关键事实
4. 生成结构化报告(含引用来源)

质量标准:
- 每个关键论点至少有2个独立来源支撑
- 明确区分"事实"和"观点"
- 标注信息的时效性
- 如有争议观点,展示不同立场"""

5. 企业 Agent 治理

📌 2026年企业级Agent新趋势:随着Agentic AI时代的到来,企业级Agent已从探索期迈入深水区。主流平台已形成差异化的三大技术类型:综合型可信智能体(如明略科技·DeepMiner)、通用大模型(如百度文心、智谱·清言)、低代码平台(如字节·扣子Coze)。

5.1 Agent 治理框架

Python
import json
import hashlib
from datetime import datetime

class AgentGovernance:
    """企业Agent治理:权限、审计、合规

    企业级Agent必须具备的三大治理能力:
    1. 权限分级 - 不同角色可调用不同工具,遵循最小权限原则
    2. 操作审计 - 所有Agent操作留痕,支持事后追溯
    3. 合规检查 - 自动检测Agent输出是否符合合规要求
    """

    # 1. 权限分级:基于角色的访问控制(RBAC)
    # 每个级别定义可用工具、SQL操作权限和最大迭代次数
    PERMISSION_LEVELS = {
        "read_only": {  # 只读用户:仅能查询,不能执行写操作
            "allowed_tools": ["search_faq", "query_order", "get_schema", "execute_sql"],
            "sql_operations": ["SELECT"],
            "max_iterations": 5,
        },
        "standard": {  # 普通客服:可查询+创建退款,不能直接操作数据库
            "allowed_tools": ["search_faq", "query_order", "create_refund", "execute_sql"],
            "sql_operations": ["SELECT"],
            "max_iterations": 10,
        },
        "admin": {  # 管理员:拥有所有工具权限,可执行数据库写操作
            "allowed_tools": ["*"],  # 所有工具
            "sql_operations": ["SELECT", "INSERT", "UPDATE"],
            "max_iterations": 20,
        }
    }

    # 2. 操作审计:记录Agent每一次操作,确保可追溯
    async def audit_log(self, event):
        """所有Agent操作写入审计日志"""
        log_entry = {
            "timestamp": datetime.utcnow().isoformat(),  # UTC时间戳
            "agent_id": event["agent_id"],                # Agent实例ID
            "user_id": event["user_id"],                  # 操作用户ID
            "action": event["action"],                    # 操作类型
            "tool_name": event.get("tool_name"),          # 调用的工具名
            # 对工具参数做哈希处理,记录操作指纹但不存储敏感原始数据
            "tool_args_hash": hashlib.sha256(
                json.dumps(event.get("tool_args", {})).encode()
            ).hexdigest(),
            "result_status": event["status"],             # 执行结果状态
            "cost_estimate": event.get("cost"),           # 本次调用成本估算
        }
        # 写入不可变审计存储(如append-only日志),防止事后篡改
        await self.audit_store.append(log_entry)

    # 3. 合规检查:对Agent输出进行自动化合规校验
    def compliance_check(self, user_query, agent_response):
        """检查Agent响应是否合规"""
        checks = {
            "pii_check": not self._contains_pii(agent_response),                    # 检查是否泄露个人隐私信息
            "no_financial_advice": not self._contains_financial_advice(agent_response),  # 检查是否含投资建议
            "source_cited": self._has_sources(agent_response),                       # 检查是否引用了来源
        }
        # 所有检查项通过才算合规
        return all(checks.values()), checks  # all()对字典所有值求逻辑与;返回元组(是否全部通过, 各项详情)

5.2 企业 Agent 指标看板

Text Only
┌──────────── Agent运营看板 ────────────┐
│                                        │
│  请求量     延迟P99    成功率    日成本  │
│  12.3K/h   4.2s      97.8%    847单位 │
│                                        │
│  ┌─────── 工具调用分布 ───────┐        │
│  │ search_faq    ████████ 42% │        │
│  │ query_order   █████    28% │        │
│  │ create_refund ██       12% │        │
│  │ transfer      █         6% │        │
│  │ 其他          ██       12% │        │
│  └────────────────────────────┘        │
│                                        │
│  ┌──── 每日成本趋势 ────┐              │
│  │  900 │    *                          │
│  │  800 │  *   * *                      │
│  │  700 │*       * *                    │
│  │  600 │          *                    │
│  │      └──────────────                │
│  │       M T W T F S S                 │
│  └──────────────────────┘              │
│                                        │
│  ⚠ 告警: create_refund延迟>5s (P95)    │
└────────────────────────────────────────┘

6. 案例五:旅行助手 Agent

对标 hello-agents 第 13 章"旅行助手 Agent"——一个能完成行程规划、机票/酒店查询和智能推荐的多工具 Agent 。

6.1 需求与架构

Text Only
用户: "帮我规划5月去成都3天的旅行,预算5000元"
            ┌───────────────┐
            │  旅行规划Agent  │ ← 总协调
            └───────┬───────┘
          ┌─────────┼──────────┐
          ▼         ▼          ▼
     ┌─────────┐ ┌──────┐ ┌──────────┐
     │景点推荐  │ │天气   │ │预算管理   │
     │工具     │ │查询   │ │工具      │
     └─────────┘ └──────┘ └──────────┘

6.2 核心实现

Python
"""旅行助手Agent —— 完整实现"""

from dataclasses import dataclass
from openai import OpenAI

client = OpenAI()

# ────── 工具定义 ──────

# 景点数据库(模拟数据,生产环境替换为真实API或数据库)
# 数据结构:城市名 → 景点列表,每个景点含类型、费用、游览时长、评分
ATTRACTIONS_DB = {
    "成都": [
        {"name": "大熊猫基地", "type": "景点", "cost": 55, "hours": 3, "rating": 4.8},
        {"name": "宽窄巷子", "type": "景点", "cost": 0, "hours": 2, "rating": 4.5},
        {"name": "锦里", "type": "美食街", "cost": 0, "hours": 2, "rating": 4.3},
        {"name": "武侯祠", "type": "历史", "cost": 50, "hours": 2, "rating": 4.6},
        {"name": "都江堰", "type": "景点", "cost": 80, "hours": 4, "rating": 4.7},
        {"name": "青城山", "type": "自然", "cost": 90, "hours": 5, "rating": 4.6},
        {"name": "春熙路", "type": "购物", "cost": 0, "hours": 2, "rating": 4.2},
        {"name": "人民公园", "type": "休闲", "cost": 0, "hours": 1.5, "rating": 4.4},
    ],
    "北京": [
        {"name": "故宫", "type": "历史", "cost": 60, "hours": 4, "rating": 4.9},
        {"name": "长城(八达岭)", "type": "景点", "cost": 40, "hours": 6, "rating": 4.8},
    ],
}

def search_attractions(city: str, interest: str = "") -> str:
    """查询城市景点信息"""
    # 从景点数据库获取城市景点列表,未收录的城市返回空列表(优雅降级,不抛异常)
    attractions = ATTRACTIONS_DB.get(city, [])
    if interest:
        # 按兴趣类型过滤景点,支持模糊匹配(如"历史"匹配"历史"类型)
        # 列表推导+in子串匹配:过滤type字段包含interest的景点(如"历史"匹配"历史文化"类型)
        attractions = [a for a in attractions if interest in a["type"]]
    if not attractions:
        return f"未找到{city}{'相关' if interest else ''}景点信息"
    # 格式化输出:每行一个景点,包含类型、费用、游览时长、评分
    # 结构化文本便于LLM提取信息并组织进行程规划
    lines = [f"📍 {city}景点推荐:"]
    for a in attractions:
        lines.append(f"  • {a['name']} ({a['type']}) - ¥{a['cost']} | {a['hours']}h | ⭐{a['rating']}")
    return "\n".join(lines)

def check_weather(city: str, month: int) -> str:
    """查询城市月份天气概况(模拟数据)"""
    # 使用(城市, 月份)元组作为字典键,实现多维度精确查找
    # 生产环境应替换为天气API实时查询(如和风天气、OpenWeatherMap)
    weather_data = {
        ("成都", 5): "5月成都:平均20-28°C,多云为主,偶有阵雨,建议携带薄外套和雨具",
        ("成都", 10): "10月成都:平均15-22°C,秋高气爽,适合出行",
        ("北京", 5): "5月北京:平均16-28°C,晴天为主,早晚温差大",
    }
    # dict.get兜底:未命中的城市/月份组合返回通用提示,避免返回空值
    return weather_data.get((city, month), f"{month}{city}:预计温度适宜,建议出行前查看实时预报")

def calculate_budget(items: list[dict]) -> str:
    """计算预算明细:汇总各项费用并生成格式化账单"""
    total = 0
    lines = ["💰 预算明细:"]
    for item in items:
        cost = item.get("cost", 0)  # 使用get设默认值0,防止字段缺失
        total += cost
        lines.append(f"  • {item['name']}: ¥{cost}")
    lines.append(f"  ── 合计: ¥{total}")
    return "\n".join(lines)

# ────── Agent工具Schema ──────

TOOLS = [
    {
        "type": "function",
        "function": {
            "name": "search_attractions",
            "description": "查询指定城市的景点信息,可按类型过滤",
            "parameters": {
                "type": "object",
                "properties": {
                    "city": {"type": "string", "description": "城市名"},
                    "interest": {"type": "string", "description": "兴趣类型:景点/历史/美食街/自然/购物/休闲"},
                },
                "required": ["city"],
            },
        },
    },
    {
        "type": "function",
        "function": {
            "name": "check_weather",
            "description": "查询城市指定月份的天气概况",
            "parameters": {
                "type": "object",
                "properties": {
                    "city": {"type": "string"},
                    "month": {"type": "integer", "description": "月份(1-12)"},
                },
                "required": ["city", "month"],
            },
        },
    },
    {
        "type": "function",
        "function": {
            "name": "calculate_budget",
            "description": "计算旅行预算,传入费用项列表",
            "parameters": {
                "type": "object",
                "properties": {
                    "items": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "name": {"type": "string"},
                                "cost": {"type": "number"},
                            },
                        },
                    },
                },
                "required": ["items"],
            },
        },
    },
]

# 工具名称→函数的映射表,Agent主循环通过此映射动态分派工具调用
TOOL_MAP = {
    "search_attractions": search_attractions,
    "check_weather": check_weather,
    "calculate_budget": calculate_budget,
}

# 系统提示词:定义Agent的角色、工作流程和行为约束
SYSTEM_PROMPT = """你是一位专业的旅行规划助手。你的职责:
1. 根据用户的目的地、天数、预算,规划合理的行程
2. 先查天气,再推荐景点,最后计算预算
3. 输出结构化的每日行程安排
4. 确保总费用不超过用户预算
5. 给出实用的旅行小贴士"""

def travel_agent(user_request: str) -> str:
    """旅行助手Agent主循环:接收用户自然语言请求,返回完整旅行规划"""
    import json

    # 初始化消息列表:系统提示词设定Agent角色 + 用户请求
    messages = [
        {"role": "system", "content": SYSTEM_PROMPT},
        {"role": "user", "content": user_request},
    ]

    # Agent主循环:LLM思考→调用工具→观察结果→继续思考
    # 旅行规划通常需要3-5轮(查天气→查景点→算预算),设置8轮上限
    for _ in range(8):  # 最大8轮工具调用
        response = client.chat.completions.create(
            model="gpt-5-mini",   # 旅行规划默认用低延迟/低成本模型,复杂约束场景可升级到 gpt-5.4
            messages=messages,
            tools=TOOLS,
        )
        msg = response.choices[0].message

        if not msg.tool_calls:
            return msg.content  # 无工具调用表示Agent已完成规划,返回最终行程

        # LLM请求调用工具:依次执行每个工具调用并将结果反馈给LLM
        messages.append(msg.model_dump())
        for tc in msg.tool_calls:
            func = TOOL_MAP.get(tc.function.name)  # 从映射表查找工具函数
            if func:
                args = json.loads(tc.function.arguments)  # 解析LLM生成的参数
                result = func(**args)                      # 执行工具
            else:
                result = f"未知工具: {tc.function.name}"   # 防御性处理
            messages.append({
                "role": "tool",
                "tool_call_id": tc.id,
                "content": result,  # 工具结果作为tool角色消息追加
            })

    return "规划轮次超限,请简化需求后重试"  # 超过最大轮次的兜底响应

# 使用示例
if __name__ == "__main__":
    plan = travel_agent("帮我规划5月去成都3天的旅行,预算5000元,喜欢美食和历史文化")
    print(plan)

设计要点: - 多工具协作:天气→景点→预算,三步完成规划 - 预算约束: Agent 需在工具结果基础上确保不超预算 - 成本控制:默认使用 gpt-5-mini;真实费用取决于输入长度、工具轮数和输出规模,不建议写死单次美元值 - 可扩展:添加机票/酒店 API 即可对接真实数据


7. 设计决策总结

场景 模型选择 最大轮数 关键考量
客服 gpt-5-mini 5 延迟<3s, 成本控制, 快速响应
代码审查 gpt-5.4 3 准确性最重要, 并行多维度
数据分析 gpt-5.4 10 复杂推理, SQL 生成准确性
研究助手 claude-sonnet-4.6 15 长上下文理解, 综合能力

8. 练习题

实战项目

  1. 入门( 8h ):实现一个完整的客服 Agent 原型,接入模拟订单数据库
  2. 进阶( 12h ):实现代码审查 Agent ,接入 GitHub Webhook ,自动审查 PR
  3. 高级( 20h ):实现一个带治理框架的企业 Agent 平台(多 Agent + 权限 + 审计 + 看板)

面试高频题

  1. 你做过的 Agent 项目中,最大的技术挑战是什么?如何解决的?
  2. 如何评估一个 Agent 在生产环境中是否"够好了"?
  3. Agent 的幻觉问题在生产中如何缓解?
  4. 设计一个能同时服务 1000 个用户的 Agent 系统
  5. Agent 和传统 RPA/规则引擎相比,各自适合什么场景?

📝 本章小结

本章通过五个企业级案例深入学习了 Agent 实战:

  1. ✅ 智能客服 Agent — 多工具调用、转人工、成本控制
  2. ✅ 代码审查 Agent — 并行多维度审查、结构化输出
  3. ✅ 数据分析 Agent — SQL 生成、 Python 执行、可视化
  4. ✅ 研究助手 Agent — 多源搜索、综合分析、报告生成
  5. ✅ 旅行助手 Agent — 多工具协作、预算约束、行程规划
  6. ✅ 企业 Agent 治理 — 权限分级、审计日志、合规检查

✅ 学习检查清单

  • 能设计和实现一个完整的客服 Agent (含工具调用和转人工)
  • 能实现并行多维度代码审查 Agent
  • 能构建自然语言到 SQL 的数据分析 Agent
  • 理解不同场景下的模型选择和最大轮数设计
  • 能设计企业 Agent 的权限和审计体系
  • 能回答企业级 Agent 相关的面试题

📚 参考资料

  1. OpenAI Function Calling Guide
  2. OpenAI Latest Model Guide
  3. OpenAI Migrate to Responses API
  4. Anthropic Models Overview
  5. GitHub Pull Request Guide
  6. "A Survey on Large Language Model based Autonomous Agents" - Wang et al., 2023
  7. "The Landscape of Emerging AI Agent Architectures" - Masterman et al., 2024
  8. LangGraph Enterprise Examples

祝你学习愉快! 🎉


最后更新日期: 2026-03-26 适用版本: AI Agent 开发实战教程 v2026