Langchain项目-多功能客服

Langchain项目-多功能客服
LangChain项目之多功能客服设计思路是将客服场景拆解为独立的工具函数订单查询、退换货处理、常见问题解答然后让 LLM Agent 根据用户意图自主选择合适的工具来响应。这种工具驱动的架构模式在实际项目中非常常见也是 LangChain Agent 最典型的使用方式。# customer_service_agent.pyfrom langchain_openaiimportChatOpenAI from langchain_core.toolsimporttool from langchain_core.promptsimportChatPromptTemplate, MessagesPlaceholder from langchain.agentsimportAgentExecutor, create_openai_tools_agent# legacy新项目推荐 LangGraphfrom langchain_core.messagesimportHumanMessage, AIMessage from langchain_community.chat_message_historiesimportChatMessageHistory from langchain_core.runnables.historyimportRunnableWithMessageHistory from rich.consoleimportConsole from dotenvimportload_dotenvimportjson load_dotenv()consoleConsole()# # 工具定义# tool def search_faq(query: str)-str:搜索常见问题解答库。适合回答产品使用、政策、流程等问题。 faq_data{退款:退款政策7天内无理由退款需要原包装。申请退款请联系客服。,发货:一般1-3个工作日发货节假日顺延。急需可选顺丰加急。,保修:正规渠道购买享有官方1年保修屏幕损坏不在保修范围内。,优惠:新用户首单8折优惠会员用户积分可抵扣货款。,支付:支持微信、支付宝、银行卡不支持货到付款。,}forkeyword, answerinfaq_data.items():ifkeywordinquery:returnanswerreturn未找到相关FAQ建议联系在线客服获取更多帮助。tool def check_order(order_id: str)-str: 查询订单状态和物流信息。 输入订单编号如 ORD-12345678返回订单详情。 orders{ORD-12345678:{status:已发货,items:Python编程书 × 1,amount:89.9,shipping:顺丰SF1234567890预计明天到达},ORD-87654321:{status:待发货,items:AI开发课程 × 1,amount:299.0,shipping:预计明天发货}}orderorders.get(order_id)iforder:returnjson.dumps(order,ensure_asciiFalse)returnf订单 {order_id} 不存在请确认订单号是否正确。tool def submit_complaint(order_id: str, complaint_type: str, description: str)-str: 提交售后投诉或申请。 complaint_type: 退款申请/质量问题/物流问题/其他importdatetime ticket_idfTKT-{datetime.datetime.now().strftime(%Y%m%d%H%M%S)}return(f投诉已受理工单编号{ticket_id}\nf类型{complaint_type}\nf相关订单{order_id}\nf预计24小时内客服跟进处理。)tool def recommend_products(user_need: str)-str:根据用户需求推荐适合的产品。 catalog[{name:Python入门到精通,price:89,tag:编程 Python 初学者},{name:AI Agent实战课程,price:299,tag:AI 机器学习 Agent},{name:LangChain实战教程,price:199,tag:LangChain Python AI},{name:数据分析全攻略,price:159,tag:数据分析 pandas Excel},]# 简单的关键词匹配results[]foritemincatalog:ifany(keywordinuser_needforkeywordinitem[tag].split()): results.append(f• {item[name]} - ¥{item[price]})ifresults:return根据您的需求为您推荐\n\n.join(results)return暂无完全匹配的推荐请描述更多您的需求。# # Agent 构建# tools[search_faq, check_order, submit_complaint, recommend_products]system_message你是小慧一位热心、专业的客服助手。## 你的职责- 解答用户的产品和服务相关问题 - 查询订单状态和物流信息 - 处理售后申请和投诉 - 根据用户需求推荐合适的产品## 服务准则1. 始终保持热情、耐心、专业的态度2. 先理解用户需求再给出帮助3. 使用工具前先思考哪个工具最合适4. 如果无法解决礼貌地转接人工客服告知用户联系400-123-45675. 用友好的语气避免生硬的机器人感## 权限限制- 不能修改订单金额 - 不能直接执行退款只能提交申请 promptChatPromptTemplate.from_messages([(system, system_message), MessagesPlaceholder(variable_namechat_history),(human,{input}), MessagesPlaceholder(variable_nameagent_scratchpad),])llmChatOpenAI(modelgpt-4.1,temperature0.3)agentcreate_openai_tools_agent(llm, tools, prompt)agent_executorAgentExecutor(agentagent,toolstools,verboseFalse,max_iterations5,handle_parsing_errorsTrue)# 会话历史管理store{}def get_session_history(session_id: str)-ChatMessageHistory:ifsession_id notinstore: store[session_id]ChatMessageHistory()returnstore[session_id]agent_with_historyRunnableWithMessageHistory(agent_executor, get_session_history,input_messages_keyinput,history_messages_keychat_history)# # 主程序# def main(): session_idcustomer_001console.print(\n[bold cyan]小慧[/bold cyan]您好我是小慧很高兴为您服务请问有什么可以帮助您的)whileTrue: user_inputinput(\n[你]).strip()ifnot user_input:continueifuser_input.lower()in[quit,exit,退出]: console.print([bold cyan]小慧[/bold cyan]感谢您的光临再见)breakresultagent_with_history.invoke({input:user_input},config{configurable:{session_id:session_id}})console.print(f\n[bold cyan]小慧[/bold cyan]{result[output]})if__name____main__:main()