liangdabiao 762bf37800 ok
2026-05-15 21:10:17 +08:00
2026-05-15 12:33:15 +08:00
2026-05-15 19:00:18 +08:00
2026-05-15 12:33:15 +08:00
2026-05-15 12:33:15 +08:00
ok
2026-05-15 21:08:20 +08:00
2026-05-15 12:33:15 +08:00
2026-05-15 12:33:15 +08:00
ok
2026-05-15 21:10:17 +08:00
2026-05-15 12:33:15 +08:00
2026-05-15 12:33:15 +08:00
2026-05-15 12:33:15 +08:00
2026-05-15 12:33:15 +08:00
2026-05-15 12:33:15 +08:00
2026-05-15 12:33:15 +08:00
2026-05-15 19:00:18 +08:00

星辰科技智能客服系统

基于 LangChain/LangGraph 的完整智能客服解决方案。本系统整合了原教程 11 个章节的所有核心功能,包括对话记忆、RAG 知识库、情绪识别、意图分类、工单系统、监控评价、计划执行、多 Agent 系统、MCP 技能系统等。本系统目的是为了让skill能够变成公开服务。

系统参考了: https://mp.weixin.qq.com/s/YlfCokFQ7l6QNFYUIHcGqw (图解AI系列)

📋 目录


🏗️ 系统架构

┌─────────────────────────────────────────────────────────────────────────┐
│                         星辰科技智能客服系统                              │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  ┌──────────────┐    ┌──────────────┐    ┌──────────────┐             │
│  │   Web 界面   │    │  API 服务    │    │  终端交互    │             │
│  │  (Streamlit) │    │  (FastAPI)  │    │   (CLI)     │             │
│  └──────┬───────┘    └──────┬───────┘    └──────┬───────┘             │
│         │                    │                    │                     │
│         └────────────────────┼────────────────────┘                     │
│                              ▼                                          │
│                   ┌─────────────────────┐                               │
│                   │   CustomerService   │                               │
│                   │        Agent         │                               │
│                   └──────────┬──────────┘                               │
│                              │                                          │
│         ┌────────────────────┼────────────────────┐                     │
│         ▼                    ▼                    ▼                     │
│  ┌─────────────┐    ┌─────────────┐    ┌─────────────┐               │
│  │   智能路由   │    │  情绪识别   │    │  意图分类   │               │
│  │  (Router)   │    │ (Emotion)  │    │  (Intent)  │               │
│  └──────┬──────┘    └─────────────┘    └─────────────┘               │
│         │                                                            │
│         ▼                                                            │
│  ┌─────────────────────────────────────────────────────────────┐       │
│  │                        功能模块                              │       │
│  ├──────────────┬──────────────┬──────────────┬──────────────┤       │
│  │   对话记忆    │  RAG 知识库  │   工单系统   │  工具函数    │       │
│  │  (Memory)   │   (RAG)     │  (Ticket)   │  (Tools)   │       │
│  └──────────────┴──────────────┴──────────────┴──────────────┘       │
│                              │                                          │
│         ┌────────────────────┼────────────────────┐                     │
│         ▼                    ▼                    ▼                     │
│  ┌─────────────┐    ┌─────────────┐    ┌─────────────┐               │
│  │  监控评价    │    │  计划执行    │    │  多Agent    │               │
│  │ (Monitor)   │    │  (Planner)  │    │(MultiAgent) │               │
│  └─────────────┘    └─────────────┘    └─────────────┘               │
│                                                                     │
└─────────────────────────────────────────────────────────────────────────┘

✨ 功能特性

核心功能

功能 说明 模块
🤖 智能对话 基于 LLM 的自然语言理解,支持多轮对话 agent.py
📚 知识库检索 (RAG) 向量知识库检索,结合上下文精准回答 rag.py
😊 情绪识别 识别愤怒、焦虑、不满、开心等7种情绪 classifier.py
🎯 意图分类 精准识别咨询、投诉、退款、退货等16种意图 classifier.py
🎫 工单系统 自动创建、跟踪、管理工单 ticket.py
👤 转人工 情绪激动时自动转接人工客服 ticket.py
💾 对话记忆 多轮上下文记忆,支持滑动窗口 memory.py
🔧 工具函数 订单查询、物流查询、库存查询、退款政策 tools.py

高级功能

功能 说明 模块
📊 监控评价 对话复盘分析、质量评分、监控仪表盘 monitor.py
📈 计划执行 LangGraph 状态机、任务规划与执行 planner.py
👥 多 Agent 系统 接待员、售后、技术支持、主管分工 multi_agent.py
🎯 MCP 技能系统 工具注册、技能管理、动态选择 mcp.py

接口服务

功能 说明 模块
🌐 Web 界面 Streamlit 可视化聊天界面 web.py
🔌 REST API FastAPI RESTful 接口 api.py
💻 终端模式 命令行交互模式 main.py

📁 项目结构

智能客服系统/
├── src/                         # 源代码目录
│   ├── __init__.py             # 包初始化
│   ├── config.py               # 配置模块(LLM、Embeddings、目录)
│   ├── models.py               # 数据模型(枚举、消息、工单)
│   ├── memory.py               # 对话记忆(SessionManager、ConversationLogger)
│   ├── rag.py                  # RAG 知识库(KnowledgeBase、RAGQASystem)
│   ├── classifier.py           # 情绪识别 + 意图分类 + 智能路由
│   ├── ticket.py               # 工单系统 + 转人工管理
│   ├── tools.py                # 工具函数(查订单、物流、库存、退款政策)
│   ├── agent.py                # 核心 Agent(整合所有功能)
│   ├── api.py                  # FastAPI 服务
│   ├── web.py                  # Streamlit Web 界面
│   ├── monitor.py              # 监控评价系统
│   ├── planner.py              # 计划执行系统(LangGraph)
│   ├── multi_agent.py          # 多 Agent 系统
│   └── mcp.py                  # MCP 技能系统
├── data/                       # 数据存储目录(会话、工单)
├── logs/                       # 日志文件目录
├── knowledge_base/             # 知识库文档目录
│   └── *.md                    # Markdown 格式知识文档
├── main.py                     # 终端入口文件
├── test_all.py                 # 全面功能测试
├── test_rag.py                # RAG功能测试
├── README.md                   # 项目说明文档
└── requirements.txt            # Python 依赖列表

🚀 快速开始

1. 克隆项目

git clone <repository-url>
cd 智能客服系统

2. 创建虚拟环境(推荐)

# 使用 conda
conda create -n customer_service python=3.10
conda activate customer_service

# 或使用 venv
python -m venv venv
# Windows
venv\Scripts\activate
# Linux/Mac
source venv/bin/activate

3. 安装依赖

pip install -r requirements.txt

4. 配置环境变量

在项目根目录创建 .env 文件:

# ========== 智谱 GLM 模型配置 ==========
# 智谱开放平台: https://open.bigmodel.cn/
OPENAI_API_KEY=your-zhipu-api-key-here
OPENAI_BASE_URL=https://open.bigmodel.cn/api/paas/v4/
OPENAI_MODEL=glm-5v-turbo

# ========== Embeddings 模型 ==========
# 使用智谱 embedding-3 (2048维向量)
EMBEDDINGS_MODEL=embedding-3

# ========== 阿里云 Milvus 向量数据库(生产环境)==========
# Zilliz Cloud: https://zilliz.com.cn/
MILVUS_HOST=https://your-cluster.zillizcloud.com
MILVUS_TOKEN=your-token-here

获取配置信息的步骤

智谱 API Key:

  1. 访问 智谱开放平台
  2. 注册/登录账号
  3. 进入「API 开放平台」
  4. 创建 API Key并复制到配置中

Zilliz Milvus:

  1. 访问 Zilliz Cloud
  2. 注册/登录Zilliz账号
  3. 创建免费集群(Free Tier)
  4. 获取集群连接信息(Public Endpoint 和 Token)

本地开发(可选)

如果需要本地测试向量数据库,可以使用本地文件模式:

# ========== 本地 Milvus(仅开发测试,不推荐生产使用)==========
MILVUS_URI=./milvus_data.db

⚠️ 重要提示:

  • 本地模式不支持生产环境
  • 推荐使用Zilliz Milvus(免费配额足够测试使用)
  • 确保 .env 文件不要提交到版本控制系统

5. 验证配置

运行测试脚本验证配置是否正确:

python test_all.py

应该看到类似输出:

======================================================================
                    测试结果汇总
======================================================================
  config.py: ✅ 通过
  tools.py: ✅ 通过
  rag.py: ✅ 通过
  mcp.py: ✅ 通过
  monitor.py: ✅ 通过
  classifier.py: ✅ 通过
  memory.py: ✅ 通过
  ticket.py: ✅ 通过
  agent.py: ✅ 通过
  models.py: ✅ 通过

总计: 10/10 测试通过

6. 启动系统

方式一:终端对话模式

python main.py

方式二:API 服务模式

# 启动 API 服务(默认端口 8000)
python -m src.api
# 或
cd src
python api.py

方式三:Web 界面模式

# 安装 streamlit(如果未安装)
pip install streamlit

# 终端1: 启动 API 服务
python -m src.api

# 终端2: 启动 Web 界面(会自动打开浏览器)
streamlit run src/web.py
Web 界面功能说明

启动后访问 http://localhost:8501(Streamlit 默认端口),界面功能包括:

功能 说明
💬 聊天窗口 支持多轮对话,自动显示历史消息
😊 情绪显示 显示检测到的用户情绪(😊😐🤔😤😡😰😢)
🎯 意图显示 显示识别的用户意图(问候/咨询/投诉等)
📋 工单提示 创建工单后显示工单号
🚨 转人工提示 需要转人工时显示转接状态
⏱️ 处理时间 显示每轮对话的处理耗时
🔄 新会话 侧边栏按钮可开始新对话
💡 快捷输入 侧边栏提供常见问题快速输入
配置 API 地址

如果 API 服务不在本机或使用了不同端口,可以在侧边栏修改 API 地址:

API 地址: http://localhost:8000


📖 模块详解

1. 配置模块 (config.py)

负责系统配置管理,包括 LLM、Embeddings、Milvus 等组件的初始化。

from src.config import get_llm, get_embeddings, get_llm_config, llm, embeddings

# 获取 LLM 实例
llm = get_llm(temperature=0.7)

# 获取 Embeddings 实例
embeddings = get_embeddings()

# 获取配置信息
config = get_llm_config()
print(f"模型: {config['model_name']}")
print(f"API地址: {config['base_url']}")

# 使用延迟加载(推荐)
# 首次调用时才真正创建实例,节省资源
lazy_llm = llm(temperature=0.5)

2. 数据模型 (models.py)

定义系统中使用的所有数据模型和枚举类型。

from src.models import (
    # 情绪类型
    EmotionType,
    # 意图类型
    IntentType,
    # 路由动作
    RouteAction,
    # 消息角色
    MessageRole,
    # 工单状态
    TicketStatus,
    # 工单优先级
    TicketPriority,
    # 工单分类
    TicketCategory,
    # 聊天消息
    ChatMessage,
    # 会话
    ConversationSession,
    # 工单
    Ticket,
)

# 使用示例
msg = ChatMessage(
    role=MessageRole.USER,
    content="你好"
)

3. 对话记忆 (memory.py)

提供会话管理和对话日志功能。

from src.memory import SimpleMemory, SessionManager, ConversationLogger
from src.models import MessageRole

# 简单内存(滑动窗口)
memory = SimpleMemory(k=5)
memory.save_context(
    {"input": "用户消息"},
    {"output": "AI回复"}
)
messages = memory.messages

# 会话管理器(带过期清理)
manager = SessionManager(window_size=5, timeout_minutes=30)
manager.save_context(session_id, user_msg, agent_msg)
session = manager.get_session(session_id)

# 对话日志(持久化)
logger = ConversationLogger()
logger.create_session(session_id, user_id="U001", user_name="张三")
logger.add_message(session_id, MessageRole.USER, "你好")
logger.add_message(session_id, MessageRole.AGENT, "您好!")
sessions = logger.list_sessions(limit=10)

4. RAG 知识库 (rag.py)

基于向量检索的知识库问答系统。

from src.rag import RAGQASystem, RAGCustomerServiceBot, KnowledgeBase

# 方式1:简单问答系统
rag = RAGQASystem()
answer = rag.answer("StarPods Pro有什么特点?")
print(answer)

# 方式2:完整客服机器人(带记忆)
bot = RAGCustomerServiceBot(window_size=5)
response = bot.chat("我想买耳机")
print(response)

# 方式3:直接使用知识库
kb = KnowledgeBase()
kb.initialize()  # 初始化并构建索引
results = kb.similarity_search("耳机的保修期是多久?", k=3)
for doc in results:
    print(doc)

5. 情绪与意图 (classifier.py)

情绪识别、意图分类和智能路由。

from src.classifier import (
    IntentClassifier,
    EmotionDetector,
    SmartRouter
)
from src.models import EmotionType, IntentType, RouteAction

# 意图分类
classifier = IntentClassifier()
result = classifier.classify("我想退货")
print(f"意图: {result.primary_intent.value}")  # return
print(f"置信度: {result.confidence}")
print(f"实体: {result.entities}")

# 情绪检测
detector = EmotionDetector()
result = detector.analyze("你们的东西太差了,我要投诉!")
print(f"情绪: {result.emotion_type.value}")  # angry
print(f"强度: {result.intensity}")  # 8-10
print(f"建议转人工: {result.should_escalate}")  # True

# 智能路由
router = SmartRouter()
decision = router.route("我的订单等了好久都没到!")
print(f"动作: {decision.action.value}")  # escalate 或 create_ticket
print(f"理由: {decision.reason}")
print(f"优先级: {decision.priority}")  # normal/high/urgent

6. 工单系统 (ticket.py)

工单创建、跟踪和管理。

from src.ticket import TicketSystem, EscalationManager
from src.models import TicketStatus, TicketPriority, TicketCategory

# 工单系统
ticket_sys = TicketSystem()

# 创建工单
ticket = ticket_sys.create_ticket(
    user_id="U001",
    category=TicketCategory.REFUND,
    title="退款申请",
    description="申请退款,订单号ORD-123456",
    user_name="张三",
    priority=TicketPriority.HIGH
)
print(f"工单号: {ticket.ticket_id}")

# 更新状态
ticket_sys.update_ticket_status(
    ticket.ticket_id,
    TicketStatus.PROCESSING
)

# 添加备注
ticket_sys.add_ticket_message(
    ticket.ticket_id,
    role="agent",
    content="已联系财务部门处理"
)

# 查询工单
all_tickets = ticket_sys.list_tickets(user_id="U001")
stats = ticket_sys.get_ticket_stats()
print(f"总工单: {stats['total']}")
print(f"按状态: {stats['by_status']}")

# 转人工管理
esc_mgr = EscalationManager()
escalation = esc_mgr.create_escalation(
    session_id="sess-001",
    user_id="U001",
    reason="用户情绪激动",
    context_summary="投诉订单延迟,态度不满",
    emotion_type="angry",
    priority="high"
)
print(f"转人工单号: {escalation.request_id}")

7. 工具函数 (tools.py)

可被 Agent 调用的工具函数。

from src.tools import (
    get_all_tools,
    get_tool_map,
    ToolAgent,
    query_order,
    query_logistics,
    query_inventory,
    check_refund_policy
)

# 获取所有工具
tools = get_all_tools()
for tool in tools:
    print(f"{tool.name}: {tool.description}")

# 使用工具映射
tool_map = get_tool_map()
result = tool_map["query_order"].invoke({"order_id": "ORD-001"})

# 使用 ToolAgent(自动选择工具)
agent = ToolAgent(max_tool_rounds=5)
result = agent.chat("帮我查一下订单 ORD-001 的状态")
print(result["reply"])
print(f"调用工具: {result['tool_calls']}")

8. 核心 Agent (agent.py)

整合所有模块的核心 Agent。

from src.agent import CustomerServiceAgent

# 创建 Agent(可配置功能开关)
agent = CustomerServiceAgent(
    use_llm=True,      # 使用 LLM
    use_rag=True,      # 使用知识库
    use_tools=True,    # 使用工具
    use_memory=True,   # 使用记忆
)

# 处理对话
response = agent.process(
    session_id="sess-001",
    user_message="我想查询订单状态",
    user_id="U001"
)

print(f"回复: {response.reply}")
print(f"情绪: {response.emotion}")
print(f"意图: {response.intent}")
print(f"动作: {response.action}")
print(f"工单: {response.ticket_id}")

9. 监控评价 (monitor.py)

对话质量监控和复盘分析。

from src.monitor import (
    ReviewAnalyzer,
    QualityScorer,
    Dashboard
)

# 复盘分析
analyzer = ReviewAnalyzer()
messages = [
    {"role": "user", "content": "我的订单什么时候到?"},
    {"role": "agent", "content": "抱歉,我理解您很着急。已为您查询,快递已在途中,预计明天送达。"}
]
review = analyzer.analyze_conversation(messages)
print(f"综合评分: {review.overall_score:.1f}")
print(f"共情得分: {review.empathy_score:.1f}")
print(f"解决得分: {review.resolution_score:.1f}")

# 质量评分
scorer = QualityScorer()
scorer.record_metrics({
    "session_id": "sess-001",
    "user_id": "U001",
    "total_messages": 10,
    "ticket_id": "TKT-001"
})
report = scorer.generate_report(days=7)
print(f"报告: {report}")

# 监控仪表盘
dashboard = Dashboard()
# 使用示例数据
sample_data = [
    {"total_messages": 10, "emotion": "neutral", "intent": "query"},
    {"total_messages": 15, "emotion": "positive", "intent": "complaint", "ticket_id": "TKT-001"},
]
output = dashboard.generate_dashboard(sample_data, days=7)
print(output)

# 数据导出导入
export_result = dashboard.export_data(format="json")
import_result = dashboard.import_data("backup.json")
stats = dashboard.get_statistics(days=30)

10. MCP 技能系统 (mcp.py)

基于 MCP 协议的工具和技能管理。

from src.mcp import (
    SimpleMCPServer,
    SimpleMCPClient,
    Skill,
    SkillManager,
    MCPSkillsAgent,
    create_mcp_skills_system
)

# 创建 MCP Server
server = SimpleMCPServer(
    name="order_server",
    description="订单服务"
)
server.register_tool(
    name="query_order",
    description="查询订单状态",
    handler=lambda order_id: f"订单 {order_id} 状态: 已发货",
    parameters={"order_id": "订单号"}
)

# 创建技能
skill = Skill(
    name="order_query",
    description="处理订单相关问题",
    system_prompt="你是订单客服专家",
    required_tools=["query_order"],
    knowledge="订单知识..."
)

# 使用技能管理器
manager = SkillManager()
manager.register_skill(skill)
manager.register_server(server)

# LLM智能选择技能
selected_skill = manager.select_skill("我的订单到哪了?")
print(f"选中技能: {selected_skill.name}")

# 使用 MCP Agent
agent = MCPSkillsAgent(manager)
result = agent.chat("帮我查一下订单 ORD-001")
print(result["reply"])

🔌 API 接口

接口列表

接口 方法 说明
/ GET 根路径,健康检查
/health GET 健康检查
/api/chat POST 发送消息
/api/session/{id} GET 获取会话
/api/sessions GET 列出所有会话
/api/tickets GET 列出工单
/api/tickets/{id} GET 工单详情
/api/ticket-stats GET 工单统计

Chat API 使用示例

# 发送消息
curl -X POST http://localhost:8000/api/chat \
  -H "Content-Type: application/json" \
  -d '{
    "session_id": "sess-001",
    "user_message": "我想退货",
    "user_id": "U001"
  }'

响应示例:

{
  "reply": "您好!非常理解您想要退货的心情...",
  "session_id": "sess-001",
  "emotion": "neutral",
  "intent": "return",
  "action": "create_ticket",
  "ticket_id": "TKT-20240513-001",
  "escalation_id": null,
  "confidence": 0.92,
  "processing_time_ms": 1250
}

Python SDK 方式

import requests

# 发送消息
response = requests.post(
    "http://localhost:8000/api/chat",
    json={
        "session_id": "sess-001",
        "user_message": "我的订单到哪了",
        "user_id": "U001"
    }
)
result = response.json()
print(result["reply"])

💻 使用示例

示例 1:基础对话

from src.agent import CustomerServiceAgent

agent = CustomerServiceAgent()

response = agent.process(
    session_id="",
    user_message="你好,我想了解一下你们的产品"
)

print(response.reply)

示例 2:带工具调用的对话

agent = CustomerServiceAgent(use_tools=True)

response = agent.process(
    session_id="sess-001",
    user_message="帮我查一下订单 ORD-001 的状态"
)

print(response.reply)
# 输出:订单 ORD-001 当前状态为已发货,预计明天送达。

示例 3:多轮对话

session_id = "sess-001"
agent = CustomerServiceAgent(use_memory=True)

# 第一轮
r1 = agent.process(session_id, "我想买耳机")
print(r1.reply)

# 第二轮(带上下文)
r2 = agent.process(session_id, "有什么推荐的吗?")
print(r2.reply)

# 第三轮
r3 = agent.process(session_id, "StarPods Pro 多少钱?")
print(r3.reply)

示例 4:使用 RAG 知识库

from src.rag import RAGQASystem

rag = RAGQASystem()

# 直接问答
answer = rag.answer("StarPods Pro有什么特点?")
print(answer)

# 使用完整机器人(带记忆)
from src.rag import RAGCustomerServiceBot

bot = RAGCustomerServiceBot(window_size=5)
response = bot.chat("我想买耳机")
print(response)
response = bot.chat("有什么颜色可选?")  # 自动带上前文上下文
print(response)

示例 5:工单处理流程

from src.ticket import TicketSystem
from src.models import TicketCategory, TicketPriority, TicketStatus

system = TicketSystem()

# 创建工单
ticket = system.create_ticket(
    user_id="U001",
    category=TicketCategory.REFUND,
    title="退款申请",
    description="订单ORD-123456已收货,申请全额退款",
    priority=TicketPriority.HIGH
)

print(f"工单已创建: {ticket.ticket_id}")

# 模拟处理流程
system.update_ticket_status(ticket.ticket_id, TicketStatus.PROCESSING)
system.add_ticket_message(
    ticket.ticket_id,
    role="agent",
    content="已联系财务,预计3个工作日到账"
)

# 完成工单
system.update_ticket_status(ticket.ticket_id, TicketStatus.RESOLVED)

🛠️ 技术栈

类别 技术
LLM 框架 LangChain, LangGraph
LLM 智谱 GLM-5 (glm-5v-turbo)
向量存储 阿里云 Milvus (Zilliz Cloud)
Embeddings 智谱 embedding-3 (2048维)
API 框架 FastAPI
Web 界面 Streamlit
数据验证 Pydantic
环境管理 python-dotenv

⚙️ 配置说明

知识库配置

在 knowledge_base/ 目录下添加 Markdown 文件,系统启动时会自动加载。

示例 knowledge_base/products.md:

## 产品信息

### StarPods Pro 智能耳机
- 价格: ¥799
- 特点: 主动降噪、30小时续航、Hi-Fi音质
- 颜色: 白色、黑色、蓝色
- 保修: 1年官方保修

### StarWatch X 智能手表
- 价格: ¥1299
- 特点: 14天续航、健康监测、50米防水
- 保修: 2年官方保修

### StarBox 智能音箱
- 价格: ¥399
- 特点: 360°环绕声、语音控制、智能家居
- 保修: 1年官方保修

## 常见问题

### 耳机有保修吗?
所有星辰科技产品均提供官方保修服务,具体见各产品保修期限。

### 如何申请退换货?
7天内无理由退换,15天内质量问题换货。请联系客服或前往官网申请。

### 快递多久能到?
默认顺丰快递,一般1-2个工作日送达,偏远地区3-5天。

工具函数扩展

在 src/tools.py 中添加新的工具函数:

from langchain_core.tools import tool

@tool
def your_new_tool(param: str) -> str:
    """工具描述,会自动被 Agent 发现和使用"""
    # 实现逻辑
    return result

📦 依赖

langchain>=0.1.0
langchain-core>=0.1.0
langchain-openai>=0.0.5
langchain-community>=0.0.10
langchain-text-splitters>=0.0.1
langgraph>=0.0.20
pymilvus>=2.4.0
fastapi>=0.104.0
uvicorn>=0.24.0
streamlit>=1.28.0
pydantic>=2.5.0
python-dotenv>=1.0.0
requests>=2.31.0

🧪 测试指南

运行全部测试

python test_all.py

运行 RAG 测试

python test_rag.py

测试特定模块

# 测试配置
python -c "from src.config import get_llm; print(get_llm())"

# 测试工具
python -c "from src.tools import get_all_tools; print(len(get_all_tools()))"

# 测试知识库
python -c "from src.rag import RAGQASystem; r=RAGQASystem(); print(r.answer('耳机保修多久?'))"

🚀 部署说明

生产环境部署清单

  1. 配置 .env 文件

  2. 知识库准备

    • 在 knowledge_base/ 目录下添加产品文档(Markdown格式)
    • 系统启动时会自动构建向量索引
  3. 启动服务

    # API服务(推荐使用 uvicorn)
    uvicorn src.api:app --host 0.0.0.0 --port 8000 --workers 4
    
    # 或使用 gunicorn
    gunicorn src.api:app -w 4 -k uvicorn.workers.UvicornWorker
    

Docker 部署(可选)

FROM python:3.10-slim

WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt

COPY . .
ENV PYTHONPATH=/app

EXPOSE 8000
CMD ["uvicorn", "src.api:app", "--host", "0.0.0.0", "--port", "8000"]
docker build -t customer-service .
docker run -d -p 8000:8000 --env-file .env customer-service

❓ 常见问题

Q1: 启动时报错 "OPENAI_API_KEY not found"

解决: 确保在项目根目录创建了 .env 文件,并包含正确的 OPENAI_API_KEY

Q2: Milvus 连接失败

解决:

  • 检查 MILVUS_HOST 和 MILVUS_TOKEN 是否正确
  • 确保网络可以访问阿里云 Milvus
  • 本地开发可以使用 MILVUS_URI=./milvus_data.db

Q3: 知识库检索没有结果

解决:

  • 检查 knowledge_base/ 目录下是否有 Markdown 文件
  • 确保文件编码为 UTF-8
  • 可以删除 data/ 目录下的向量索引文件重新构建

Q4: API 响应很慢

解决:

  • 首次调用需要初始化 LLM 和向量索引,会有延迟
  • 检查网络连接
  • 考虑增加缓存或使用更快的模型

Q5: 如何添加新的工具函数?

解决: 在 src/tools.py 中使用 @tool 装饰器添加新函数,参考现有示例

Q6: 如何自定义知识库内容?

解决:

  • 在 knowledge_base/ 目录添加 Markdown 文件
  • 使用 ## 和 ### 标题组织内容
  • 重启服务后自动重新加载

🤝 许可证

MIT License


📞 支持

如有问题,请提交 Issue 或联系维护者。

特别感谢

https://linux.do 社区


文档更新时间: 2024-05-13

Description
No description provided
Readme 316 KiB
Languages
Python 100%