12-实战:智能客服Agent完整实现

实战:智能客服 Agent 完整实现

系列收尾实战篇。把前面讲的 ReAct 循环、工具调用、RAG 知识库、记忆系统、安全护栏全部串起来,从零设计一个完整的智能客服 Agent:整体架构、工具设计、Prompt 设计、对话流程、转人工逻辑、测试优化。

大家好,我是黒漂技术佬。

前面 11 篇把 Agent 的核心组件都讲了:ReAct 架构、工具调用、记忆系统、规划能力、多 Agent、RAG、框架、评估、安全、工程化。

这篇作为系列收尾,做一个完整的实战项目:智能客服 Agent。把所有知识串起来,从架构设计到具体实现,走一遍完整流程。


一、项目目标

做什么

一个企业级智能客服 Agent,能:

  1. 回答产品相关问题(查知识库)
  2. 查询订单状态(调用订单系统 API)
  3. 创建工单(提交到工单系统)
  4. 解决不了的问题转人工
  5. 记住用户信息和历史对话

能力范围

能力 说明
知识库问答 产品使用、常见问题、操作指南
订单查询 根据订单号查状态、物流
工单创建 记录用户问题,生成工单
转人工 复杂问题或用户要求时转接
多轮对话 记住上下文,连续对话

二、整体架构设计

架构图

用户 → 聊天前端
        ↓
    客服 Agent 服务
        ↓
    ┌───┴──────────────────┐
    │  大模型(大脑)       │
    │  系统提示词 + 工具    │
    └───┬──────────────────┘
        ↓
    工具层:
    ├── 知识库检索(RAG)→ 向量数据库
    ├── 订单查询 → 订单系统 API
    ├── 创建工单 → 工单系统 API
    └── 转人工 → 客服系统
        ↓
    记忆层:
    ├── 短期记忆:当前对话上下文
    ├── 长期记忆:用户信息、历史对话
    └── 向量记忆:产品知识库

核心组件

  1. 对话管理:维护会话状态、上下文
  2. Agent 核心:ReAct 循环 + 工具调用
  3. 知识库检索:RAG,产品文档和 FAQ
  4. 业务工具:订单查询、工单创建
  5. 转人工判断:什么时候转人工
  6. 记忆系统:用户画像、历史对话

三、工具设计

工具 1:知识库检索

{
    "name": "search_knowledge_base",
    "description": "从产品知识库中搜索答案,回答产品使用、功能介绍、常见问题、操作指南等问题时使用。
                    涉及产品相关问题必须先调用此工具,禁止仅凭记忆回答。",
    "parameters": {
        "type": "object",
        "properties": {
            "query": {
                "type": "string",
                "description": "搜索关键词,尽量用简洁的关键词或问题"
            }
        },
        "required": ["query"]
    }
}

工具 2:查询订单

{
    "name": "query_order",
    "description": "根据订单号查询订单状态、物流信息、收货地址等。
                    用户提供了订单号并且询问订单相关问题时使用。",
    "parameters": {
        "type": "object",
        "properties": {
            "order_id": {
                "type": "string",
                "description": "订单号,一般是字母数字组合"
            }
        },
        "required": ["order_id"]
    }
}

工具 3:创建工单

{
    "name": "create_ticket",
    "description": "创建客服工单,当问题无法通过知识库解答、需要人工处理时使用。
                    创建前必须确认用户的问题描述和联系方式。",
    "parameters": {
        "type": "object",
        "properties": {
            "title": {
                "type": "string",
                "description": "工单标题,简要概括问题"
            },
            "description": {
                "type": "string",
                "description": "问题详细描述"
            },
            "contact": {
                "type": "string",
                "description": "用户联系方式,手机号或邮箱"
            },
            "priority": {
                "type": "string",
                "enum": ["low", "normal", "high"],
                "description": "优先级,默认normal"
            }
        },
        "required": ["title", "description", "contact"]
    }
}

工具 4:转人工

{
    "name": "transfer_to_human",
    "description": "转接人工客服。当用户明确要求人工、问题超出能力范围、
                    多次尝试无法解决时使用。",
    "parameters": {
        "type": "object",
        "properties": {
            "reason": {
                "type": "string",
                "description": "转接原因"
            }
        },
        "required": ["reason"]
    }
}

四、系统提示词设计

你是XX公司的智能客服助手,名叫小X。

【你的职责】
回答用户关于XX产品的问题、查询订单信息、帮助创建工单。
友好、专业、简洁。

【可用工具】
1. search_knowledge_base:搜索产品知识库,回答产品问题必须用
2. query_order:查询订单状态,需要用户提供订单号
3. create_ticket:创建工单,问题解决不了时用
4. transfer_to_human:转人工客服

【工作规则】
1. 产品相关问题必须先调用 search_knowledge_base 检索知识库,再根据结果回答。
   禁止仅凭自己的知识回答产品问题。
2. 查订单必须要有订单号,没有就先问用户要。
3. 创建工单前必须确认:问题描述、联系方式。
4. 以下情况转人工:
   - 用户明确要求人工
   - 知识库查不到且你也无法解答
   - 涉及退款、赔偿、投诉等敏感问题
   - 连续2次尝试仍无法解决用户问题
5. 不知道的就说不知道,不要编造。
6. 回答尽量简洁,不要说废话。
7. 始终保持礼貌友好。

【回答格式】
直接用自然语言回答用户,不要暴露你是AI,不要提到工具调用。
如果引用知识库内容,可以标注来源。

【用户信息】
用户ID:{user_id}
用户名:{user_name}
用户等级:{user_level}
历史问题摘要:{history_summary}

关键点:

  • 明确职责和边界
  • 强调产品问题必须检索知识库(防幻觉)
  • 明确转人工的条件
  • 注入用户信息(个性化)

五、对话流程设计

典型对话流程

场景 1:产品问答(知识库)

用户:怎么开通企业版?
  ↓
Agent:(判断是产品问题 → 调用知识库检索)
  ↓
工具返回:开通流程...
  ↓
Agent:整理成自然语言回答用户

场景 2:订单查询

用户:我的订单到哪了?
  ↓
Agent:(需要订单号,先问用户)
  ↓
用户:订单号是 ABC123
  ↓
Agent:(调用 query_order 工具)
  ↓
工具返回:订单状态已发货,物流信息...
  ↓
Agent:告诉用户订单状态

场景 3:创建工单

用户:我的产品坏了,怎么办?
  ↓
Agent:(查知识库,没有相关解决方案)
  ↓
Agent:(建议创建工单,询问联系方式)
  ↓
用户:好的,电话138xxxx
  ↓
Agent:(调用 create_ticket 创建工单)
  ↓
Agent:工单已创建,工单号xxx,会有人联系你

场景 4:转人工

用户:我要投诉!
  ↓
Agent:(涉及投诉,属于敏感问题 → 转人工)
  ↓
Agent:好的,马上为您转接人工客服,请稍候...

转人工判断逻辑

满足任一条件就转人工:

  1. 用户明确说「转人工」「找客服」「要人处理」
  2. 涉及退款、赔偿、投诉、法律等敏感问题
  3. 连续 2 轮知识库检索仍无法回答
  4. 用户表达不满情绪(可以用情感分类判断)
  5. 超出预设能力范围的问题

六、记忆系统设计

短期记忆

  • 当前对话的所有消息,存在会话上下文里
  • 对话太长了做摘要,只保留最近几轮 + 历史摘要

长期记忆(用户画像)

{
    "user_id": "xxx",
    "name": "张三",
    "level": "VIP",
    "phone": "138xxxx",
    "preferences": {
        "language": "中文",
        "style": "简洁"
    },
    "recent_issues": [
        "问过开通流程",
        "查询过订单ABC123"
    ],
    "open_tickets": ["TICKET-001"]
}

每次对话前把用户信息拼进系统提示词,Agent 就认识用户了。

向量记忆(知识库)

  • 产品文档、FAQ、操作指南
  • 分块向量化存向量数据库
  • 混合检索 + rerank 优化召回

七、安全护栏

输入侧

  • 敏感词检测
  • Prompt 注入检测
  • 频率限制(每个用户每分钟最多多少条)

输出侧

  • 内容审核(涉政、涉黄、敏感信息)
  • 内部信息泄露检测
  • 回答必须有知识库来源(产品类问题)

工具侧

  • 工具权限:普通用户只能查自己的订单
  • 敏感操作(创建工单、转人工)记录日志
  • 工具参数校验

人在回路

  • 投诉、退款等敏感问题直接转人工
  • 工单创建后人工审核(可选)

八、代码骨架(伪代码)

class CustomerServiceAgent:
    def __init__(self, user_id):
        self.user_id = user_id
        self.user_profile = load_user_profile(user_id)
        self.conversation_history = []
        self.max_steps = 5
        self.tools = {
            "search_knowledge_base": search_kb,
            "query_order": query_order_api,
            "create_ticket": create_ticket_api,
            "transfer_to_human": transfer_to_human,
        }
    
    def chat(self, user_message):
        # 1. 输入检测
        if is_sensitive_input(user_message):
            return "抱歉,这个问题需要人工客服处理,为您转接..."
        
        # 2. 加入对话历史
        self.conversation_history.append({"role": "user", "content": user_message})
        
        # 3. Agent 循环
        for step in range(self.max_steps):
            # 构造 prompt
            system_prompt = self.build_system_prompt()
            messages = [{"role": "system", "content": system_prompt}] + self.conversation_history
            
            # 调用大模型
            response = llm.chat(messages=messages, tools=TOOLS_DEFINITION)
            
            # 判断是工具调用还是直接回答
            if response.tool_calls:
                # 执行工具
                tool_result = self.execute_tool(response.tool_calls[0])
                
                # 加入历史
                self.conversation_history.append(response)
                self.conversation_history.append({
                    "role": "tool",
                    "tool_call_id": response.tool_calls[0].id,
                    "content": tool_result
                })
                
                # 如果是转人工,直接结束
                if response.tool_calls[0].function.name == "transfer_to_human":
                    return "已为您转接人工客服,请稍候..."
            else:
                # 直接回答
                answer = response.content
                self.conversation_history.append({"role": "assistant", "content": answer})
                
                # 更新用户画像
                self.update_user_profile(answer)
                
                return answer
        
        # 超出步数,转人工
        return "抱歉,这个问题比较复杂,为您转接人工客服..."
    
    def execute_tool(self, tool_call):
        name = tool_call.function.name
        args = json.loads(tool_call.function.arguments)
        
        # 权限校验
        if not self.check_permission(name, args):
            return "错误:没有权限执行此操作"
        
        # 执行工具
        try:
            return self.tools[name](**args)
        except Exception as e:
            return f"工具调用失败:{str(e)}"

九、测试和优化

测试用例设计

准备一批测试用例,覆盖各种场景:

分类 测试用例 预期结果
知识库问答 "怎么开通企业版" 调用知识库,返回开通流程
订单查询 "订单ABC123状态" 调用订单查询,返回状态
多轮对话 先问产品,再问价格 记住上下文,正确回答
转人工 "我要投诉" 转接人工
工单创建 "产品有问题帮我记录" 创建工单
边界 "你们老板电话多少" 拒绝回答,引导正常渠道

优化方向

  1. 知识库质量:Bad Case 补充到知识库,持续完善
  2. Prompt 调优:根据实际对话调整系统提示词
  3. 工具描述优化:工具选错就改 description
  4. 转人工阈值:转多了浪费人力,转少了用户体验差,找到平衡点
  5. 个性化:根据用户等级、历史问题调整回答策略

持续迭代

  • 每天看转人工率、解决率
  • 抽样看对话质量
  • 收集用户反馈(点赞/点踩)
  • 每周分析 Bad Case,优化一轮

十、系列总结

这个系列 12 篇,把 AI Agent 从入门到实战完整讲了一遍:

  1. 基础概念:Agent 是什么、跟普通对话的区别、核心能力
  2. 核心架构:ReAct 思考-行动-观察循环
  3. 工具调用:Function Calling、工具定义、最佳实践
  4. 记忆系统:短期、长期、向量三层记忆
  5. 规划能力:CoT、任务分解、Plan-and-Execute
  6. 多 Agent 协作:角色分工、通信方式、常见模式
  7. RAG + Agent:知识库增强、检索优化
  8. 框架对比:LangChain、CrewAI、LlamaIndex 等
  9. 评估调试:评估维度、调试方法、Bad Case 分析
  10. 安全可控:输出校验、权限控制、人在回路、护栏设计
  11. 工程化:部署、监控、成本优化、版本管理
  12. 实战项目:智能客服 Agent 完整设计

Agent 开发的核心要点

  1. Prompt 是灵魂:系统提示词写得好不好,直接决定 Agent 表现
  2. 工具设计很关键:工具描述清楚、粒度合适,Agent 才能用得好
  3. RAG 质量是知识库场景的瓶颈:检索准不准决定回答对不对
  4. 安全不能忽视:能调用工具就有风险,护栏要做好
  5. 持续迭代:Agent 不是上线就完事了,要靠 Bad Case 持续优化
  6. 人是最后一道防线:复杂的、有风险的,转人工就对了

未来展望

Agent 还在快速发展:

  • 模型能力越来越强,工具调用更准、规划更好
  • 多模态 Agent:不仅文字,还能看图片、视频
  • 端侧 Agent:本地小模型跑 Agent,隐私好、成本低
  • 更成熟的工程化工具:调试、监控、评估体系越来越完善

现在是入局的好时机,从简单的 Agent 做起,逐步迭代,积累经验。


十一、本篇小结

  • 智能客服 Agent 架构:对话管理 + Agent 核心 + 工具层 + 记忆层
  • 四个核心工具:知识库检索、订单查询、创建工单、转人工
  • 系统提示词明确职责、规则、边界,是 Agent 的灵魂
  • 对话流程:知识库问答、订单查询、工单创建、转人工四大场景
  • 记忆系统:短期上下文 + 长期用户画像 + 向量知识库
  • 安全护栏:输入检测、输出审核、工具权限、人在回路
  • 测试用例覆盖各场景,靠 Bad Case 持续迭代优化

AI Agent 应用开发实战系列到这里就全部结束了。12 篇从基础概念到完整实战,把 Agent 开发需要的知识体系梳理了一遍。Agent 是大模型落地的重要方向,值得深入学习。动手做一个自己的 Agent 吧,光看没用,踩过坑才是自己的。

我是黒漂技术佬,我们下个系列见。

posted @ 2026-09-14 18:20  阿拉斯攀登  阅读(0)  评论(0)    收藏  举报