实战:智能客服 Agent 完整实现 实战智能客服 Agent 完整实现系列收尾实战篇。把前面讲的 ReAct 循环、工具调用、RAG 知识库、记忆系统、安全护栏全部串起来从零设计一个完整的智能客服 Agent整体架构、工具设计、Prompt 设计、对话流程、转人工逻辑、测试优化。大家好我是黒漂技术佬。前面 11 篇把 Agent 的核心组件都讲了ReAct 架构、工具调用、记忆系统、规划能力、多 Agent、RAG、框架、评估、安全、工程化。这篇作为系列收尾做一个完整的实战项目智能客服 Agent。把所有知识串起来从架构设计到具体实现走一遍完整流程。一、项目目标做什么一个企业级智能客服 Agent能回答产品相关问题查知识库查询订单状态调用订单系统 API创建工单提交到工单系统解决不了的问题转人工记住用户信息和历史对话能力范围能力说明知识库问答产品使用、常见问题、操作指南订单查询根据订单号查状态、物流工单创建记录用户问题生成工单转人工复杂问题或用户要求时转接多轮对话记住上下文连续对话二、整体架构设计架构图用户 → 聊天前端 ↓ 客服 Agent 服务 ↓ ┌───┴──────────────────┐ │ 大模型大脑 │ │ 系统提示词 工具 │ └───┬──────────────────┘ ↓ 工具层 ├── 知识库检索RAG→ 向量数据库 ├── 订单查询 → 订单系统 API ├── 创建工单 → 工单系统 API └── 转人工 → 客服系统 ↓ 记忆层 ├── 短期记忆当前对话上下文 ├── 长期记忆用户信息、历史对话 └── 向量记忆产品知识库核心组件对话管理维护会话状态、上下文Agent 核心ReAct 循环 工具调用知识库检索RAG产品文档和 FAQ业务工具订单查询、工单创建转人工判断什么时候转人工记忆系统用户画像、历史对话三、工具设计工具 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好的马上为您转接人工客服请稍候...转人工判断逻辑满足任一条件就转人工用户明确说「转人工」「找客服」「要人处理」涉及退款、赔偿、投诉、法律等敏感问题连续 2 轮知识库检索仍无法回答用户表达不满情绪可以用情感分类判断超出预设能力范围的问题六、记忆系统设计短期记忆当前对话的所有消息存在会话上下文里对话太长了做摘要只保留最近几轮 历史摘要长期记忆用户画像{user_id:xxx,name:张三,level:VIP,phone:138xxxx,preferences:{language:中文,style:简洁},recent_issues:[问过开通流程,查询过订单ABC123],open_tickets:[TICKET-001]}每次对话前把用户信息拼进系统提示词Agent 就认识用户了。向量记忆知识库产品文档、FAQ、操作指南分块向量化存向量数据库混合检索 rerank 优化召回七、安全护栏输入侧敏感词检测Prompt 注入检测频率限制每个用户每分钟最多多少条输出侧内容审核涉政、涉黄、敏感信息内部信息泄露检测回答必须有知识库来源产品类问题工具侧工具权限普通用户只能查自己的订单敏感操作创建工单、转人工记录日志工具参数校验人在回路投诉、退款等敏感问题直接转人工工单创建后人工审核可选八、代码骨架伪代码classCustomerServiceAgent:def__init__(self,user_id):self.user_iduser_id self.user_profileload_user_profile(user_id)self.conversation_history[]self.max_steps5self.tools{search_knowledge_base:search_kb,query_order:query_order_api,create_ticket:create_ticket_api,transfer_to_human:transfer_to_human,}defchat(self,user_message):# 1. 输入检测ifis_sensitive_input(user_message):return抱歉这个问题需要人工客服处理为您转接...# 2. 加入对话历史self.conversation_history.append({role:user,content:user_message})# 3. Agent 循环forstepinrange(self.max_steps):# 构造 promptsystem_promptself.build_system_prompt()messages[{role:system,content:system_prompt}]self.conversation_history# 调用大模型responsellm.chat(messagesmessages,toolsTOOLS_DEFINITION)# 判断是工具调用还是直接回答ifresponse.tool_calls:# 执行工具tool_resultself.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})# 如果是转人工直接结束ifresponse.tool_calls[0].function.nametransfer_to_human:return已为您转接人工客服请稍候...else:# 直接回答answerresponse.content self.conversation_history.append({role:assistant,content:answer})# 更新用户画像self.update_user_profile(answer)returnanswer# 超出步数转人工return抱歉这个问题比较复杂为您转接人工客服...defexecute_tool(self,tool_call):nametool_call.function.name argsjson.loads(tool_call.function.arguments)# 权限校验ifnotself.check_permission(name,args):return错误没有权限执行此操作# 执行工具try:returnself.tools[name](**args)exceptExceptionase:returnf工具调用失败{str(e)}九、测试和优化测试用例设计准备一批测试用例覆盖各种场景分类测试用例预期结果知识库问答“怎么开通企业版”调用知识库返回开通流程订单查询“订单ABC123状态”调用订单查询返回状态多轮对话先问产品再问价格记住上下文正确回答转人工“我要投诉”转接人工工单创建“产品有问题帮我记录”创建工单边界“你们老板电话多少”拒绝回答引导正常渠道优化方向知识库质量Bad Case 补充到知识库持续完善Prompt 调优根据实际对话调整系统提示词工具描述优化工具选错就改 description转人工阈值转多了浪费人力转少了用户体验差找到平衡点个性化根据用户等级、历史问题调整回答策略持续迭代每天看转人工率、解决率抽样看对话质量收集用户反馈点赞/点踩每周分析 Bad Case优化一轮十、系列总结这个系列 12 篇把 AI Agent 从入门到实战完整讲了一遍基础概念Agent 是什么、跟普通对话的区别、核心能力核心架构ReAct 思考-行动-观察循环工具调用Function Calling、工具定义、最佳实践记忆系统短期、长期、向量三层记忆规划能力CoT、任务分解、Plan-and-Execute多 Agent 协作角色分工、通信方式、常见模式RAG Agent知识库增强、检索优化框架对比LangChain、CrewAI、LlamaIndex 等评估调试评估维度、调试方法、Bad Case 分析安全可控输出校验、权限控制、人在回路、护栏设计工程化部署、监控、成本优化、版本管理实战项目智能客服 Agent 完整设计Agent 开发的核心要点Prompt 是灵魂系统提示词写得好不好直接决定 Agent 表现工具设计很关键工具描述清楚、粒度合适Agent 才能用得好RAG 质量是知识库场景的瓶颈检索准不准决定回答对不对安全不能忽视能调用工具就有风险护栏要做好持续迭代Agent 不是上线就完事了要靠 Bad Case 持续优化人是最后一道防线复杂的、有风险的转人工就对了未来展望Agent 还在快速发展模型能力越来越强工具调用更准、规划更好多模态 Agent不仅文字还能看图片、视频端侧 Agent本地小模型跑 Agent隐私好、成本低更成熟的工程化工具调试、监控、评估体系越来越完善现在是入局的好时机从简单的 Agent 做起逐步迭代积累经验。十一、本篇小结智能客服 Agent 架构对话管理 Agent 核心 工具层 记忆层四个核心工具知识库检索、订单查询、创建工单、转人工系统提示词明确职责、规则、边界是 Agent 的灵魂对话流程知识库问答、订单查询、工单创建、转人工四大场景记忆系统短期上下文 长期用户画像 向量知识库安全护栏输入检测、输出审核、工具权限、人在回路测试用例覆盖各场景靠 Bad Case 持续迭代优化AI Agent 应用开发实战系列到这里就全部结束了。12 篇从基础概念到完整实战把 Agent 开发需要的知识体系梳理了一遍。Agent 是大模型落地的重要方向值得深入学习。动手做一个自己的 Agent 吧光看没用踩过坑才是自己的。我是黒漂技术佬我们下个系列见。