零基础上手 AI 客服系统:30 分钟搭建你的第一个 Agent

张开发
2026/4/17 23:31:23 15 分钟阅读

分享文章

零基础上手 AI 客服系统:30 分钟搭建你的第一个 Agent
完整可运行代码https://github.com/Lee985-cmd/AI-30-Day-Challenge⭐ 项目已开源欢迎 Star 支持一、为什么做这个传统客服太贵了10 人团队 每月 5-8 万响应慢排队 10 分钟服务质量不稳定AI 客服能解决✅ 成本降低 80%每月 100-200 元 API 费用✅ 响应时间 3 秒提升 60-200 倍✅ 24/7 在线永不疲倦数据说话某电商平台人工客服工作量减少 70%某 SaaS 公司AI 客服解决率 85%满意度 4.5/5二、技术选型核心架构用户提问 → [意图识别 Agent] → [知识库检索 RAG] → [对话管理 Agent] → 回答技术栈模块技术选型原因Agent 框架LangChain生态完善大模型通义千问 qwen-plus中文强、成本低¥0.004/1K tokens向量数据库Chroma轻量级、无需服务器Embeddingall-MiniLM-L6-v2本地运行、完全免费Web 框架FastAPI Streamlit快速开发为什么用阿里百炼比 OpenAI 便宜 5-10 倍中文能力更强国内直接使用无需翻墙三、快速上手30 分钟第 1 步安装依赖pip install langchain langchain-community dashscope chromadb fastapi uvicorn streamlit sentence-transformers第 2 步配置 API Key# PowerShell永久设置需要管理员权限 [System.Environment]::SetEnvironmentVariable(DASHSCOPE_API_KEY, sk-your-api-key, User)⚠️不要用 .env 文件容易泄露获取 API Keyhttps://dashscope.console.aliyun.com/第 3 步准备知识库创建docs/product_faq.md## Q1: 如何退货 A: 购买后 7 天内可申请无理由退货。操作步骤登录账号 → 我的订单 → 选择订单 → 申请退货。退货需要将商品寄回指定地址运费由买家承担。 ## Q2: 发货时间 A: 工作日 24 小时内发货周末和节假日顺延。 ## Q10: 如何申请退款 A: 退款是指退回已支付的款项。订单未发货直接申请退款。已发货拒收或退货后申请退款。退款 3-5 个工作日原路返回。注意退款和退货不同退款是退钱退货是退商品。第 4 步构建知识库RAG# knowledge_base.py from langchain_community.document_loaders import TextLoader from langchain_text_splitters import RecursiveCharacterTextSplitter from langchain_community.embeddings import HuggingFaceEmbeddings from langchain_community.vectorstores import Chroma class KnowledgeBase: def __init__(self): # 使用本地 Embedding 模型完全免费 self.embeddings HuggingFaceEmbeddings( model_namesentence-transformers/all-MiniLM-L6-v2 ) self.vector_db None def build_knowledge_base(self, doc_path): print(正在加载文档...) loader TextLoader(doc_path, encodingutf-8) documents loader.load() print(正在切分文档...) text_splitter RecursiveCharacterTextSplitter( chunk_size500, chunk_overlap50 ) texts text_splitter.split_documents(documents) print(正在创建向量索引...) self.vector_db Chroma.from_documents( documentstexts, embeddingself.embeddings, persist_directory./chroma_db ) print(f✅ 知识库构建完成共 {len(texts)} 个文档块) def search(self, query, k3): results self.vector_db.similarity_search(query, kk) return \n\n.join([doc.page_content for doc in results])运行kb KnowledgeBase() kb.build_knowledge_base(docs/product_faq.md) # 测试检索 context kb.search(怎么退货) print(context)第 5 步实现意图识别# intent_agent.py from langchain_community.chat_models import ChatTongyi from langchain_core.prompts import PromptTemplate from langchain_classic.chains import LLMChain import os class IntentAgent: def __init__(self): api_key os.getenv(DASHSCOPE_API_KEY) os.environ[DASHSCOPE_API_KEY] api_key self.llm ChatTongyi(modelqwen-plus, temperature0) prompt PromptTemplate( input_variables[user_input], template你是一个电商客服意图识别专家。请判断用户的意图属于哪一类。 可选类别售前咨询、售后问题、物流查询、发票问题、投诉建议、其他 用户输入{user_input} 请只输出类别名称不要解释。 类别 ) self.chain LLMChain(llmself.llm, promptprompt) def classify(self, user_input): result self.chain.invoke({user_input: user_input}) if isinstance(result, dict): return result.get(text, ).strip() return str(result).strip() # 测试 agent IntentAgent() print(agent.classify(我想退货)) # 输出售后问题第 6 步实现对话管理# dialogue_agent.py from langchain_community.chat_models import ChatTongyi from langchain_classic.chains import ConversationalRetrievalChain from langchain_core.prompts import PromptTemplate from typing import Dict, List import os class DialogueAgent: def __init__(self, knowledge_base): api_key os.getenv(DASHSCOPE_API_KEY) os.environ[DASHSCOPE_API_KEY] api_key self.llm ChatTongyi(modelqwen-plus, temperature0.7) self.kb knowledge_base self.conversation_histories: Dict[str, List[tuple]] {} qa_prompt PromptTemplate( template你是一个专业的电商客服助手。请根据以下上下文回答用户问题。 规则 1. 只使用提供的上下文信息回答不要编造 2. 如果上下文中没有答案说抱歉我暂时无法回答这个问题建议您联系人工客服 3. 语气友好、专业、简洁 上下文 {context} 用户问题{question} 客服回答 ) self.chain ConversationalRetrievalChain.from_llm( llmself.llm, retrieverknowledge_base.vector_db.as_retriever(search_kwargs{k: 3}), combine_docs_chain_kwargs{prompt: qa_prompt}, return_source_documentsTrue ) def chat(self, user_input: str, user_id: str default_user) - dict: # 获取该用户的对话历史 if user_id not in self.conversation_histories: self.conversation_histories[user_id] [] history self.conversation_histories[user_id] # 格式化聊天历史为列表格式 chat_history_list history[-5:] if len(history) 5 else history # 调用 Chain result self.chain.invoke({ question: user_input, chat_history: chat_history_list }) answer result[answer] source_docs result.get(source_documents, []) # 保存对话历史 history.append((user_input, answer)) if len(history) 10: self.conversation_histories[user_id] history[-10:] return { answer: answer, confidence: min(0.9, len(source_docs) * 0.3) if source_docs else 0.0 }第 7 步启动服务# api.py from fastapi import FastAPI from pydantic import BaseModel from knowledge_base import KnowledgeBase from intent_agent import IntentAgent from dialogue_agent import DialogueAgent import os app FastAPI(titleAI Customer Service API) kb None intent_agent None dialogue_agent None class ChatRequest(BaseModel): user_id: str message: str app.on_event(startup) async def startup(): global kb, intent_agent, dialogue_agent api_key os.getenv(DASHSCOPE_API_KEY) print(正在初始化知识库...) kb KnowledgeBase() kb.build_knowledge_base(docs/product_faq.md) print(正在初始化意图识别 Agent...) intent_agent IntentAgent() print(正在初始化对话 Agent...) dialogue_agent DialogueAgent(knowledge_basekb) print(✅ 服务初始化完成) app.post(/chat) async def chat(request: ChatRequest): # 1. 意图识别 intent intent_agent.classify(request.message) # 2. 对话处理 result dialogue_agent.chat(request.message, user_idrequest.user_id) # 3. 判断是否需要人工介入 need_human result[confidence] 0.5 return { intent: intent, answer: result[answer], confidence: result[confidence], need_human: need_human } if __name__ __main__: import uvicorn uvicorn.run(app, host0.0.0.0, port8000)启动python api.py第 8 步测试接口curl -X POST http://localhost:8000/chat \ -H Content-Type: application/json \ -d { user_id: user_001, message: 我想退货 }返回结果{ intent: 售后问题, answer: 购买后 7 天内可申请无理由退货。操作步骤登录账号 → 我的订单 → 选择订单 → 申请退货。退货需要将商品寄回指定地址运费由买家承担。, confidence: 0.9, need_human: false }四、效果演示真实对话案例案例 1退货咨询用户如何退货 AI购买后 7 天内可申请无理由退货。操作步骤登录账号 → 我的订单 → 选择订单 → 申请退货。退货需要将商品寄回指定地址运费由买家承担。 意图售后问题 | 置信度90%案例 2多轮对话记忆功能用户如何退款 AI您好关于退款流程 • 若订单未发货您可直接申请退款 • 若订单已发货请先拒收包裹或收到货后寄回商品再申请退款。 退款将在审核通过后3-5个工作日到账。 用户我刚问的什么问题 AI您刚才问的是如何申请退款。案例 3知识库外问题用户你们公司成立几年了 AI抱歉我暂时无法回答这个问题建议您联系人工客服。 置信度0% | ⚠️ 自动转人工性能指标指标数值意图识别准确率95%知识库回答覆盖率85%平均响应时间2-3 秒人工介入率15%API 成本约 0.005 元/次五、踩坑记录坑 1LangChain 版本兼容性错误ModuleNotFoundError: No module named langchain.document_loaders解决# 旧导入 ❌ from langchain.document_loaders import TextLoader # 新导入 ✅ from langchain_community.document_loaders import TextLoader详见LangChain 导入修复指南坑 2多轮对话记忆丢失问题每次对话都是独立的解决手动管理对话历史self.conversation_histories: Dict[str, List[tuple]] {} def chat(self, user_input: str, user_id: str default_user): if user_id not in self.conversation_histories: self.conversation_histories[user_id] [] history self.conversation_histories[user_id] chat_history_list history[-5:] result self.chain.invoke({ question: user_input, chat_history: chat_history_list }) history.append((user_input, result[answer]))坑 3退货和退款混淆问题RAG 检索到错误的答案解决优化知识库内容## Q1: 如何退货 A: 购买后 7 天内可申请无理由退货。操作步骤登录账号 → 我的订单 → 选择订单 → 申请退货。退货需要将商品寄回指定地址运费由买家承担。 ## Q10: 如何申请退款 A: 退款是指退回已支付的款项。订单未发货直接申请退款。已发货拒收或退货后申请退款。退款 3-5 个工作日原路返回。注意退款和退货不同退款是退钱退货是退商品。✅ 区分相似概念退货 vs 退款✅ 添加关键词提高检索准确率六、进阶优化1. 情感分析识别用户情绪from transformers import pipeline sentiment_analyzer pipeline(sentiment-analysis) label, score sentiment_analyzer(user_input)[0] if label NEGATIVE and score 0.9: need_human True # 自动转人工2. 数据监控import json from datetime import datetime def log_conversation(user_id, user_input, intent, answer, confidence): log_entry { timestamp: datetime.now().isoformat(), user_id: user_id, input: user_input, intent: intent, answer: answer, confidence: confidence } with open(logs/conversations.jsonl, a, encodingutf-8) as f: f.write(json.dumps(log_entry, ensure_asciiFalse) \n)七、部署上线Docker 部署FROM python:3.10-slim WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt COPY . . EXPOSE 8000 CMD [python, api.py]# 构建镜像 docker build -t ai-customer-service . # 运行容器 docker run -d -p 8000:8000 \ -e DASHSCOPE_API_KEYsk-your-api-key \ ai-customer-service八、源码下载完整代码已开源到 GitHub https://github.com/Lee985-cmd/AI-30-Day-Challenge一键运行# 克隆项目 git clone https://github.com/Lee985-cmd/AI-30-Day-Challenge.git cd AI-30-Day-Challenge/projects/ai-customer-service # 安装依赖 pip install -r requirements.txt # 配置 API KeyPowerShell 管理员权限 [System.Environment]::SetEnvironmentVariable(DASHSCOPE_API_KEY, sk-your-api-key, User) # 启动服务 python ai_customer_service/api.py # 访问 API 文档 # http://localhost:8000/docs九、写在最后AI 客服不是替代人工而是增强人工。85% 的常见问题→ AI 自动解决15% 的复杂问题→ 人工专注处理效率提升10 倍成本降低80%你现在需要做的下载源码跑通示例替换成你的产品文档接入你的业务系统上线测试持续优化 相关资源GitHub 仓库https://github.com/Lee985-cmd/AI-30-Day-Challenge本项目代码projects/ai-customer-service/30 天完整教程https://blog.csdn.net/m0_67081842?typeblog 如果觉得这个项目对你有帮助欢迎⭐Star 支持一下Fork并二次开发 分享给需要的朋友作者Lee身份职场宝爸 / AI 学习者 / Agent 实践者CSDNhttps://blog.csdn.net/m0_67081842

更多文章