ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

DeepSeek-Agent-Harness-2026终极指南-第16章第73节-五大商业场景-场景二:智能客服Agent(工单自动处理)

DeepSeek-Agent-Harness-2026终极指南-第16章第73节-五大商业场景-场景二:智能客服Agent(工单自动处理) 场景二智能客服 Agent工单自动处理第二个商业场景智能客服。和代码审查不同客服场景需要理解用户意图、检索知识库、分级处理——能自动回复的自动回复需要人工的升级给人。这一节完整实现。本文导航需求分析与架构工单读取与意图分类知识库检索工具分级处理自动回复 vs 人工升级回写闭环与统计交付复盘小结需求分析与架构客户需求某 SaaS 公司日均 200 工单3 个客服忙不过来60% 是重复问题密码重置、账单查询、功能咨询30% 需要查知识库才能回答10% 需要人工介入投诉、复杂技术问题架构设计简单问题需要检索需要人工工单系统读取新工单意图分类分类结果自动回复知识库检索升级给人工生成回复回写工单核心流程定时读取新工单意图分类简单/需检索/需人工简单问题直接回复需检索的查知识库后回复需人工的升级回写工单系统闭环工单读取与意图分类工单读取# ticket_agent/ticket_reader.pyimportrequestsfrompydanticimportBaseModelclassTicket(BaseModel):工单模型id:strtitle:strcontent:struser_email:strcreated_at:strstatus:str# open, processing, resolvedclassTicketReader:工单读取器对接 Zendesk/Freshdesk 等def__init__(self,api_url:str,api_key:str):self.api_urlapi_url self.api_keyapi_keydefget_new_tickets(self)-list[Ticket]:获取待处理工单resprequests.get(f{self.api_url}/tickets,params{status:open},headers{Authorization:fBearer{self.api_key}},)return[Ticket(**t)fortinresp.json()]意图分类# ticket_agent/classifier.pyfromdeep_pilot.clientimportclientfromenumimportEnumclassIntentType(str,Enum):SIMPLEsimple# 简单问题直接回复NEED_SEARCHsearch# 需要检索知识库NEED_HUMANhuman# 需要人工介入CLASSIFY_PROMPT你是一个客服意图分类器。请判断以下工单属于哪一类 1. **simple**简单问题如密码重置、账单查询、功能使用方法等可以直接回答 2. **search**需要查询知识库的问题如产品配置、API 文档、错误代码含义等 3. **human**需要人工介入的问题如投诉、退款、复杂技术问题、情绪激动等 工单标题{title} 工单内容{content} 请只回复分类结果simple/search/human不要回复其他内容。 defclassify_intent(ticket:Ticket)-IntentType:分类工单意图promptCLASSIFY_PROMPT.format(titleticket.title,contentticket.content[:500],# 截断避免超长)responseclient.chat.completions.create(modeldeepseek-flash,messages[{role:user,content:prompt}],temperature0.1,)result(response.choices[0].message.contentor).strip().lower()ifsimpleinresult:returnIntentType.SIMPLEelifsearchinresult:returnIntentType.NEED_SEARCHelse:returnIntentType.NEED_HUMAN知识库检索工具知识库结构# ticket_agent/knowledge_base.pyfromdataclassesimportdataclassdataclassclassKBArticle:知识库文章id:strtitle:strcontent:strtags:list[str]embedding:list[float]|NoneNoneclassKnowledgeBase:知识库简化版实际可用向量数据库def__init__(self):self.articles:list[KBArticle][]defadd_article(self,article:KBArticle):self.articles.append(article)defsearch(self,query:str,top_k:int3)-list[KBArticle]:简单关键词搜索实际可用向量检索# 这里简化实现实际应该用 embedding 相似度scored[]forarticleinself.articles:scoresum(1forkwinquery.split()ifkwinarticle.content)ifscore0:scored.append((score,article))scored.sort(reverseTrue,keylambdax:x[0])return[afor_,ainscored[:top_k]]生成回复# ticket_agent/responder.pyfromdeep_pilot.clientimportclient REPLY_PROMPT你是一个专业、友好的客服助手。请根据以下信息回复用户 用户问题{question} {context} 回复要求 1. 先确认理解用户问题 2. 给出清晰的解答步骤 3. 如果涉及操作给出具体步骤 4. 结尾询问是否解决如未解决可继续追问 5. 语气友好专业不要过于机械 请直接输出回复内容不要包含其他说明。 defgenerate_reply(ticket:Ticket,kb_results:list[KBArticle]|NoneNone)-str:生成客服回复# 构建上下文contextifkb_results:context相关知识库文章\nfori,articleinenumerate(kb_results,1):contextf\n【文章{i}】{article.title}\n{article.content[:500]}...\nelse:context这是一个简单问题请根据你的知识直接回答。promptREPLY_PROMPT.format(questionf标题{ticket.title}\n内容{ticket.content},contextcontext,)responseclient.chat.completions.create(modeldeepseek-flash,messages[{role:user,content:prompt}],temperature0.7,)returnresponse.choices[0].message.contentor分级处理自动回复 vs 人工升级主流程# ticket_agent/agent.pyfromticket_agent.ticket_readerimportTicketReader,Ticketfromticket_agent.classifierimportclassify_intent,IntentTypefromticket_agent.knowledge_baseimportKnowledgeBasefromticket_agent.responderimportgenerate_replyfromdeep_pilot.loggerimportget_logger loggerget_logger(__name__)classTicketAgent:工单处理 Agentdef__init__(self,ticket_reader:TicketReader,kb:KnowledgeBase):self.ticket_readerticket_reader self.kbkbdefprocess_all(self):处理所有新工单ticketsself.ticket_reader.get_new_tickets()logger.info(f获取到{len(tickets)}个新工单)forticketintickets:self.process_one(ticket)defprocess_one(self,ticket:Ticket):处理单个工单logger.info(f处理工单{ticket.id}:{ticket.title})# 1. 意图分类intentclassify_intent(ticket)logger.info(f 意图分类:{intent})# 2. 分级处理ifintentIntentType.NEED_HUMAN:# 升级给人工self._escalate_to_human(ticket,需要人工介入)return# 3. 生成回复ifintentIntentType.NEED_SEARCH:kb_resultsself.kb.search(ticket.content)replygenerate_reply(ticket,kb_results)else:replygenerate_reply(ticket)# 4. 回写工单self.ticket_reader.reply_ticket(ticket.id,reply)logger.info(f 已回复工单{ticket.id})def_escalate_to_human(self,ticket:Ticket,reason:str):升级给人工escalation_msgf[系统] 此工单已升级给人工客服。原因{reason}self.ticket_reader.update_status(ticket.id,processing)self.ticket_reader.reply_ticket(ticket.id,escalation_msg)logger.info(f 工单{ticket.id}已升级给人工)回写闭环与统计回写工单# ticket_agent/ticket_reader.py续classTicketReader:defreply_ticket(self,ticket_id:str,reply:str):回复工单requests.post(f{self.api_url}/tickets/{ticket_id}/replies,json{body:reply},headers{Authorization:fBearer{self.api_key}},)defupdate_status(self,ticket_id:str,status:str):更新工单状态requests.patch(f{self.api_url}/tickets/{ticket_id},json{status:status},headers{Authorization:fBearer{self.api_key}},)统计报表# ticket_agent/stats.pyfromdataclassesimportdataclass,fieldfromdatetimeimportdatetimedataclassclassDailyStats:每日统计date:strtotal_tickets:int0auto_replied:int0escalated:int0avg_response_time:float0.0classStatsTracker:统计追踪器def__init__(self):self.stats:dict[str,DailyStats]{}defrecord(self,ticket_id:str,intent:str,response_time:float):记录工单处理todaydatetime.now().strftime(%Y-%m-%d)iftodaynotinself.stats:self.stats[today]DailyStats(datetoday)statself.stats[today]stat.total_tickets1ifintenthuman:stat.escalated1else:stat.auto_replied1# 更新平均响应时间total_timestat.avg_response_time*(stat.total_tickets-1)response_time stat.avg_response_timetotal_time/stat.total_ticketsdefgenerate_report(self)-str:生成报告todaydatetime.now().strftime(%Y-%m-%d)statself.stats.get(today)ifnotstat:return今日暂无数据auto_ratestat.auto_replied/max(stat.total_tickets,1)*100returnf 客服 Agent 日报 -{today}━━━━━━━━━━━━━━━━━━━━ 总工单数:{stat.total_tickets}自动回复:{stat.auto_replied}({auto_rate:.1f}%) 人工升级:{stat.escalated}平均响应时间:{stat.avg_response_time:.1f}s ━━━━━━━━━━━━━━━━━━━━ 交付复盘实际效果上线 1 个月后指标上线前上线后变化日均处理工单200200持平客服人力3 人1 人-67%自动回复率0%65%65%平均响应时间4 小时2 分钟-99%用户满意度3.8/54.1/58%报价开发费用 - 核心功能开发4 周 × 6000 元/周 24000 元 - 知识库导入1 周 × 6000 元/周 6000 元 - 对接工单系统1 周 × 6000 元/周 6000 元 - 合计36000 元 运维费用年 - API 调用费200 工单/天 × 365 天 × 0.02 元/工单 ≈ 1500 元/年 - 服务器300 元/月 × 12 3600 元/年 - 维护支持5000 元/年 - 合计约 10000 元/年 客户最终成交开发 36000 元 年运维 10000 元关键经验意图分类准确率是核心分类错了要么该自动的升级了浪费人力要么该升级的自动了用户体验差。初期要人工抽检分类结果持续优化提示词。知识库质量决定回复质量垃圾进垃圾出知识库文章要定期更新维护。人工升级机制必须有不是所有问题都能自动解决给 Agent 一个认怂的出口。小结意图分类simple/search/human 三级决定处理路径。知识库检索简单关键词搜索或向量检索为回复提供上下文。分级处理能自动的自动需人工的升级不强行 100% 自动化。回写闭环回复后回写工单系统形成完整闭环。效果显著客服人力 -67%响应时间 -99%自动回复率 65%。报价合理开发 36000 年运维 10000客户 ROI 明显。下节预告第三个商业场景数据报表自动生成 Agent——自然语言转 SQL、执行查询、pandas 分析、图表生成、日报自动发送。让业务人员用说话就能出报表不用再求数据团队排期。如果觉得本文对你有帮助欢迎点赞、收藏、关注三连本系列持续更新中关注不迷路~
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进