【Agent智能体】42KnowledgeHandler设计实现
章节四十二KnowledgeHandler设计与实现一、KnowledgeHandler设计1.1 概述KnowledgeHandler负责处理知识问答类请求。根据用户问题检索信息将检索到的信息连同用户问题一起交给大模型生成回复。ChitChatHandler负责处理闲聊类请求。读取最近对话历史将历史和用户最后一句话一起交给大模型生成自然的闲聊回复。1.2 知识意图定义KnowledgeHandler中定义了如下知识意图TurnPlanner会将用户问题归到某个知识意图知识意图说明product_info商品信息咨询order_info订单信息咨询refund_policy退款政策咨询return_policy退货政策咨询shipping_policy配送政策咨询platform_rule平台规则咨询general_ecommerce_info电商通用信息咨询1.3 信息源类型不同意图对应不同的信息源当前系统有三类信息源信息源说明api查询实时业务数据例如商品、订单faq查询标准问答rag查询文档知识库意图与信息源的对应关系知识意图信息源列表product_infoapi.product、faq.default、rag.defaultorder_infoapi.order、faq.default、rag.defaultrefund_policyfaq.default、rag.defaultreturn_policyfaq.default、rag.defaultshipping_policyfaq.default、rag.defaultplatform_rulerag.defaultgeneral_ecommerce_infofaq.default、rag.default1.4 KnowledgeHandler处理流程第一步DialogueEngine根据用户消息预测知识意图。第二步进入KnowledgeHandler编排知识问答流程。第三步KnowledgeContextBuilder构建上下文对象包含用户消息、最近历史、聚焦对象和知识意图。第四步KnowledgePlanner根据知识意图和上下文选择本轮要查询的信息源。第五步KnowledgeProviderRegistry根据provider ID找到对应的KnowledgeProvider。第六步KnowledgeProvider从具体信息源中获取数据返回KnowledgeChunk知识片段。第七步KnowledgeResponder将检索到的信息和用户问题组装成提示词交给大模型生成回复。第八步返回BotMessage最终客服消息。1.5 ChitChatHandler处理流程第一步ChitChatHandler接收闲聊消息。第二步提取最近对话历史recent_turns。第三步提取用户最后一句话user_message。第四步ChitChatResponder组装提示词并调用大模型。第五步返回BotMessage闲聊回复。二、KnowledgeHandler实现2.1 入口方法KnowledgeHandler的handle()接收两个参数state当前完整对话状态intents本轮命中的知识意图列表处理流程第一步读取pending_turn.input_message当前用户问题。第二步读取state.recent_turns最近对话历史。第三步根据intents合并provider_ids并去重。第四步通过KnowledgeProviderRegistry.get()查找对应的Provider。第五步调用Provider.retrieve()获取知识片段KnowledgeChunk列表。第六步调用KnowledgeResponder.respond()将用户问题、对话历史和知识片段交给大模型生成回复。第七步返回BotMessage。2.2 KnowledgeIntentKnowledgeIntent描述一种知识问答意图及其需要的provider。字段包括id意图ID、description意图说明、provider_ids需要查询的provider列表、requires_object是否要求有聚焦对象。例如product_info意图需要api.product且要求聚焦对象类型为productorder_info需要api.order且要求聚焦对象类型为order。2.3 KnowledgeProviderKnowledgeProvider是知识来源的基类每个provider负责根据当前DialogueState检索知识并返回KnowledgeChunk列表。ProductApiProvider查询商品实时信息。从focused_object获取商品ID调用商品详情接口将结果格式化后返回KnowledgeChunk。OrderApiProvider查询订单和物流实时信息。从focused_object获取订单号使用asyncio.gather()并发查询订单API和物流API合并结果后返回KnowledgeChunk。FaqKnowledgeProvider和RagKnowledgeProvider当前为占位实现后续可接入具体的FAQ库和RAG知识库。2.4 KnowledgeProviderRegistryKnowledgeProviderRegistry根据provider id查找provider。初始化时把provider列表转换为字典provider_id到provider实例实现O(1)快速查找。2.5 KnowledgeResponderKnowledgeResponder负责把知识片段、对话历史和用户问题交给大模型生成最终客服回复。处理流程第一步拼接knowledge_content合并所有知识片段的内容。第二步构建history格式化最近对话历史。第三步组装LangChain chain调用大模型的执行链。第四步调用LLM生成回复。第五步返回BotMessage。提示词模板要点角色设定为中文电商客服助手语气自然友好简洁优先基于知识片段作答不编造不存在的内容信息不足时坦诚告知不机械复述资料原文。2.6 KnowledgeHandler总入口最终的总入口流程第一步从state.pending_turn.input_message读取当前用户问题。第二步从state.recent_turns(10)读取最近10轮对话历史。第三步根据intents合并provider列表并去重。第四步遍历provider_ids调用registry.get()获取Provider再调用provider.retrieve(state)获取知识片段。第五步调用responder.respond(user_message, recent_turns, chunks)生成回复。