本课程是系列的综合实战,指导你构建一个生产级的智能客服系统。项目整合前面所学的所有知识:Agent、Memory、Tools、RAG,并结合FastAPI构建完整的Web应用。你将学习分层架构设计、API接口开发、会话管理、错误处理、性能优化等工程化实践,获得一个可直接商用的AI应用。
🎯 学习目标
- 综合运用所学知识
- 构建完整的AI应用
- 掌握工程化开发方法
- 学习部署和优化
📖 项目概述
项目:智能客服系统
构建一个功能完整的智能客服系统,包含:
1 2 3 4 5 6 7 8 9 10 11
| 功能模块: ├── 💬 多轮对话(记忆管理) ├── 📚 知识库问答(RAG) ├── 🔧 工具调用(Agent) │ ├── 查询订单 │ ├── 查询物流 │ ├── 退换货处理 │ └── 用户信息查询 ├── 🎯 意图识别(路由) ├── 📊 数据统计 └── 🌐 Web界面
|
技术栈
1 2 3 4 5 6 7 8 9
| 后端: - FastAPI:Web框架 - LangChain:AI应用框架 - Chroma:向量数据库 - SQLite:业务数据库
前端: - HTML + JavaScript(简单版) - 或 Streamlit(快速原型)
|
💻 系统架构
1 2 3 4 5 6 7 8 9 10 11 12
| 用户输入 ↓ [意图识别] ──┬── 闲聊 → 闲聊模块 ├── 订单查询 → Agent(调用工具) ├── 知识查询 → RAG └── 复杂问题 → Agent + RAG ↓ [记忆管理] ← 保存对话历史 ↓ [响应生成] ↓ 返回用户
|
📁 项目结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| intelligent_customer_service/ ├── app/ │ ├── __init__.py │ ├── main.py # FastAPI入口 │ ├── config.py # 配置 │ └── api/ │ ├── __init__.py │ └── chat.py # 聊天API ├── core/ │ ├── __init__.py │ ├── llm.py # LLM配置 │ ├── memory.py # 记忆管理 │ ├── rag.py # RAG模块 │ ├── agent.py # Agent模块 │ ├── router.py # 路由模块 │ └── tools/ │ ├── __init__.py │ ├── order.py # 订单工具 │ ├── logistics.py # 物流工具 │ └── user.py # 用户工具 ├── data/ │ ├── knowledge/ # 知识库文档 │ ├── database/ # 数据库文件 │ └── vector_store/ # 向量数据库 ├── frontend/ │ ├── index.html # Web界面 │ └── app.js ├── tests/ │ ├── test_rag.py │ ├── test_agent.py │ └── test_api.py ├── requirements.txt ├── README.md └── run.py # 启动脚本
|
🔧 核心模块实现
1. 意图识别路由
参见:router.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| from enum import Enum from pydantic import BaseModel
class Intent(str, Enum): """意图类型""" CHITCHAT = "chitchat" ORDER_QUERY = "order_query" KNOWLEDGE = "knowledge" COMPLEX = "complex"
class IntentRouter: """意图路由器""" def route(self, user_input: str) -> Intent: """识别用户意图""" pass
|
2. 工具集成
参见:tools/order.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| from langchain.tools import tool
@tool def query_order(order_id: str) -> str: """ 查询订单信息 Args: order_id: 订单号 Returns: 订单详情 """ pass
|
3. RAG集成
参见:rag.py
1 2 3 4 5 6 7 8 9 10 11 12 13
| from langchain.vectorstores import Chroma from langchain.chains import RetrievalQA
class KnowledgeBase: """知识库""" def __init__(self): self.vectorstore = self._load_vectorstore() self.qa_chain = self._create_chain() def query(self, question: str) -> str: """查询知识库""" return self.qa_chain.invoke(question)
|
4. 记忆管理
参见:memory.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| from langchain.memory import ConversationBufferMemory from typing import Dict
class MemoryManager: """会话记忆管理器""" def __init__(self): self.memories: Dict[str, ConversationBufferMemory] = {} def get_memory(self, session_id: str) -> ConversationBufferMemory: """获取会话记忆""" if session_id not in self.memories: self.memories[session_id] = ConversationBufferMemory() return self.memories[session_id]
|
5. FastAPI集成
参见:app/api/chat.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| from fastapi import APIRouter, HTTPException from pydantic import BaseModel
router = APIRouter()
class ChatRequest(BaseModel): session_id: str message: str
class ChatResponse(BaseModel): response: str intent: str sources: list = []
@router.post("/chat", response_model=ChatResponse) async def chat(request: ChatRequest) -> ChatResponse: """聊天接口""" pass
|
🎨 功能实现
功能1:订单查询
1 2 3 4 5 6 7 8 9 10 11
| 用户:"我的订单ORD123456到哪了?" ↓ 意图识别:order_query ↓ Agent思考:需要查询订单和物流信息 ↓ 调用工具: 1. query_order("ORD123456") 2. query_logistics("ORD123456") ↓ 生成回复:"您的订单ORD123456已发货,预计明天送达"
|
功能2:知识查询
1 2 3 4 5 6 7
| 用户:"你们的退货政策是什么?" ↓ 意图识别:knowledge ↓ RAG检索:搜索知识库中的退货政策文档 ↓ 生成回复:基于文档内容回答
|
功能3:复杂问题
1 2 3 4 5 6 7 8 9 10 11
| 用户:"我要退货,但不知道订单号" ↓ 意图识别:complex ↓ Agent + RAG: 1. 查询用户的订单列表 2. 询问用户确认订单 3. 查询退货政策 4. 引导用户退货流程 ↓ 多轮对话完成任务
|
🚀 部署和优化
1. 性能优化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| from langchain.cache import InMemoryCache import langchain langchain.llm_cache = InMemoryCache()
async def chat_async(message: str) -> str: """异步聊天""" pass
results = await chain.abatch([msg1, msg2, msg3])
async def stream_response(message: str): async for chunk in chain.astream(message): yield chunk
|
2. 错误处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| from functools import wraps
def safe_api_call(func): """安全包装API调用""" @wraps(func) async def wrapper(*args, **kwargs): try: return await func(*args, **kwargs) except ValueError as e: return {"error": f"参数错误:{e}"} except TimeoutError: return {"error": "请求超时,请重试"} except Exception as e: logger.error(f"API错误:{e}") return {"error": "服务暂时不可用"} return wrapper
|
3. 日志和监控
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| import logging from datetime import datetime
class ChatLogger: """聊天日志""" def log_conversation( self, session_id: str, user_message: str, ai_response: str, intent: str, duration: float ): """记录对话""" logger.info({ "timestamp": datetime.now(), "session_id": session_id, "user_message": user_message, "ai_response": ai_response, "intent": intent, "duration": duration })
|
4. 配置管理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| from pydantic_settings import BaseSettings
class Settings(BaseSettings): """配置""" api_key: str base_url: str model_name: str database_url: str vector_store_path: str max_conversation_turns: int = 10 retrieve_top_k: int = 4 class Config: env_file = ".env"
settings = Settings()
|
📝 测试
单元测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| import pytest from core.rag import KnowledgeBase
def test_knowledge_base(): """测试知识库""" kb = KnowledgeBase() result = kb.query("退货政策是什么?") assert "退货" in result assert len(result) > 0
def test_order_tool(): """测试订单工具""" from core.tools.order import query_order result = query_order("ORD123456") assert "ORD123456" in result
|
集成测试
1 2 3 4 5 6 7 8 9 10 11
| def test_full_conversation(): """测试完整对话流程""" session_id = "test_session" response1 = chat(session_id, "我想查订单") assert "订单号" in response1 response2 = chat(session_id, "ORD123456") assert "订单" in response2
|
🎯 进阶功能
1. 多语言支持
1 2 3 4 5 6 7 8
| def detect_language(text: str) -> str: """检测语言""" pass
def translate_if_needed(text: str, target_lang: str) -> str: """翻译""" pass
|
2. 情感分析
1 2 3 4 5 6 7 8 9
| from langchain.output_parsers import PydanticOutputParser
class Sentiment(BaseModel): emotion: str score: float
def analyze_sentiment(text: str) -> Sentiment: """分析情感""" pass
|
3. 个性化推荐
1 2 3 4 5
| def get_recommendations(user_id: str) -> List[str]: """根据用户历史推荐""" pass
|
📊 监控指标
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| from dataclasses import dataclass from datetime import datetime
@dataclass class Metrics: """系统指标""" total_conversations: int avg_response_time: float intent_distribution: dict success_rate: float user_satisfaction: float def to_dict(self) -> dict: """转换为字典""" return { "total_conversations": self.total_conversations, "avg_response_time": self.avg_response_time, "intent_distribution": self.intent_distribution, "success_rate": self.success_rate, "user_satisfaction": self.user_satisfaction, "updated_at": datetime.now().isoformat() }
|
🎯 检查清单
完成本课后,你应该能够:
💡 核心要点
模块化设计
错误处理很重要
性能优化
可观测性
🎓 总结
恭喜你完成了整个LangChain学习系列!
你学到了什么
1 2 3 4 5 6 7 8
| 第1课:理解AI应用开发的思维 第2课:搭建开发环境 第3课:掌握核心组件 第4课:学会组合组件(Chain) 第5课:添加记忆功能 第6课:使用Agent和工具 第7课:构建知识库(RAG) 第8课:开发完整应用 ← 你在这里!
|
下一步建议
深入学习
- LangGraph(高级工作流)
- LangSmith(调试和监控)
- LangServe(快速部署)
实践项目
社区参与
- GitHub:贡献开源项目
- Discord:加入LangChain社区
- 博客:分享你的经验
学习资源
- 本节项目代码:https://gitee.com/uyynot/intelligentcustomerservice.git
- 官方文档:https://python.langchain.com/
- GitHub:https://github.com/langchain-ai/langchain
- 示例项目:https://github.com/langchain-ai/langchain/tree/master/cookbook
🎉 恭喜完成课程!现在去构建你自己的AI应用吧!