LangGraph教程(四):智能客服项目示例(流程+完整代码)
一、项目背景与核心价值
在AI技术深度渗透的当下,智能客服已成为企业降本增效的关键工具。传统客服系统存在三大痛点:意图识别不精准导致无效对话、多轮对话管理混乱影响用户体验、知识库更新滞后无法应对新问题。本教程基于LangGraph框架,通过状态机模式构建可扩展的智能客服系统,重点解决以下技术挑战:
- 动态对话流程控制:支持分支跳转、循环提问等复杂场景
- 多工具协同调用:集成检索增强生成(RAG)、函数调用等能力
- 可观测性设计:实时监控对话状态与模型调用情况
二、系统架构设计
2.1 技术栈选型
| 组件 | 技术选型 | 核心优势 |
|---|---|---|
| 流程编排 | LangGraph 0.2.0 | 基于状态机的显式流程控制 |
| 大模型 | GPT-4o/Qwen2.5 | 强语义理解与多轮对话能力 |
| 检索引擎 | ChromaDB | 语义向量检索与混合查询 |
| 监控系统 | Prometheus+Grafana | 实时指标可视化与告警 |
2.2 核心流程设计
graph TDA[用户输入] --> B{意图分类}B -->|查询类| C[知识库检索]B -->|任务类| D[函数调用]B -->|闲聊类| E[生成式回复]C --> F{检索置信度}F -->|高| G[返回结果]F -->|低| H[转人工]D --> I[执行结果校验]I -->|成功| J[返回数据]I -->|失败| K[错误处理]
三、LangGraph实现详解
3.1 状态机定义
from langgraph.prebuilt import StateGraphfrom langgraph.graph import ENDclass CustomerServiceGraph(StateGraph):def __init__(self, llm, vector_store):super().__init__()self.llm = llmself.vector_store = vector_storeself._build_graph()def _build_graph(self):# 初始状态with self.state("start") as s:s.input("user_query")s.output("intent")s.node(self.classify_intent)s.to("route")# 路由分支with self.state("route") as s:s.input("intent")s.output("action")s.condition(lambda state: state.intent == "query","knowledge_search",condition2=lambda state: state.intent == "task",to2="function_call",default="generative_reply")# 查询处理分支with self.state("knowledge_search") as s:s.input("user_query")s.output("answer")s.node(self.search_knowledge)s.condition(lambda state: state.search_score > 0.8,"return_answer",default="escalate_human")# 终止状态self.add_state("return_answer", END)self.add_state("escalate_human", END)
3.2 关键节点实现
意图分类节点
from langchain_community.llms import OpenAIfrom langchain_core.prompts import ChatPromptTemplateclass IntentClassifier:def __init__(self, llm):self.llm = llmself.prompt = ChatPromptTemplate.from_template("""用户问题: {query}请从以下类别中选择最匹配的意图:1. 查询类(产品信息、政策等)2. 任务类(下单、退款等)3. 闲聊类直接返回分类编号""")def __call__(self, state):response = self.llm(self.prompt.format(query=state.user_query))intent_map = {"1": "query", "2": "task", "3": "chat"}state.intent = intent_map.get(response.content.strip(), "chat")
知识检索节点
from langchain_community.vectorstores import Chromafrom langchain_core.retrievers import ContextualCompressionRetrieverclass KnowledgeSearcher:def __init__(self, vector_store):self.vector_store = vector_storeself.retriever = ContextualCompressionRetriever(base_compressor=..., # 压缩器配置base_retriever=vector_store.as_retriever())def __call__(self, state):docs = self.retriever.get_relevant_documents(state.user_query)state.search_results = docsstate.search_score = max(doc.metadata["score"] for doc in docs) if docs else 0state.answer = "\n".join(doc.page_content for doc in docs[:3])
四、完整运行示例
4.1 环境准备
pip install langgraph langchain chromadb openaiexport OPENAI_API_KEY="your-api-key"
4.2 主程序实现
from langgraph.graph import GraphApplicationfrom langchain_community.llms import OpenAIfrom chromadb.config import Settingsfrom chromadb.utils import embedding_functions# 初始化组件llm = OpenAI(temperature=0)vector_store = Chroma(embedding_function=embedding_functions.OpenAIEmbeddingFunction(api_key=os.getenv("OPENAI_API_KEY")),persist_directory="./db")# 构建状态机graph = CustomerServiceGraph(llm, vector_store)app = GraphApplication.from_graph(graph)# 运行示例state = {"user_query": "如何申请退货?"}result = app.invoke(state)print("系统回复:", result.get("answer") or "已转人工处理")
五、优化与扩展建议
5.1 性能优化方案
- 缓存层设计:对高频查询结果进行缓存
```python
from functools import lru_cache
@lru_cache(maxsize=1000)
def cached_search(query):
return vector_store.similarity_search(query, k=3)
2. **异步处理**:使用LangGraph的异步模式处理耗时操作```pythonasync def async_function_call(state):# 实现异步API调用pass
5.2 功能扩展方向
- 多语言支持:集成翻译模型实现语言自动检测
- 情绪分析:在对话中实时检测用户情绪并调整回复策略
- 主动学习:收集低置信度查询用于模型微调
六、常见问题解决方案
6.1 模型幻觉问题
现象:生成错误信息或虚构数据
解决方案:
- 启用检索增强生成(RAG)
- 设置回复置信度阈值
def validate_response(response):if "不确定" in response.lower():raise ValueError("低置信度回复")
6.2 对话中断处理
现象:用户长时间无响应导致流程卡死
解决方案:
- 添加超时控制机制
```python
import asyncio
async def with_timeout(node, state, timeout=30):
try:
return await asyncio.wait_for(node(state), timeout)
except asyncio.TimeoutError:
state.error = “用户响应超时”
return state
## 七、部署与监控### 7.1 Docker化部署```dockerfileFROM python:3.11-slimWORKDIR /appCOPY requirements.txt .RUN pip install -r requirements.txtCOPY . .CMD ["python", "main.py"]
7.2 监控指标设计
| 指标名称 | 计算方式 | 告警阈值 |
|---|---|---|
| 对话成功率 | 成功完成对话数/总对话数 | <85% |
| 平均响应时间 | P90响应时长 | >3s |
| 模型调用次数 | 单位时间API调用量 | >1000/min |
本教程完整实现了基于LangGraph的智能客服系统,覆盖从流程设计到生产部署的全链路。开发者可通过调整状态机配置快速适配不同业务场景,建议结合实际需求逐步添加监控告警、A/B测试等企业级功能。