ChatGPT API实战:从零搭建智能客服系统

17老师 · 2026-06-21 · 阅读约15分钟

← 返回博客列表

前言

随着大语言模型的快速发展,将ChatGPT API集成到企业应用中已成为趋势。本文将从零开始,手把手教你搭建一个完整的智能客服系统,涵盖API接入、Prompt工程、上下文管理、流式输出等核心技术点。

一、环境准备

1.1 注册OpenAI账号

首先访问 platform.openai.com 注册账号,获取API Key。注意保护好你的Key,不要提交到代码仓库。

1.2 安装依赖

# 创建虚拟环境
python -m venv venv
source venv/bin/activate

# 安装依赖
pip install openai fastapi uvicorn python-dotenv

1.3 配置环境变量

# .env 文件
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxx
OPENAI_BASE_URL=https://api.openai.com/v1

二、基础API调用

2.1 最简单的对话

from openai import OpenAI
import os
from dotenv import load_dotenv

load_dotenv()

client = OpenAI(
    api_key=os.getenv("OPENAI_API_KEY"),
    base_url=os.getenv("OPENAI_BASE_URL")
)

def chat(user_message: str) -> str:
    response = client.chat.completions.create(
        model="gpt-3.5-turbo",
        messages=[
            {"role": "system", "content": "你是一个专业的客服助手。"},
            {"role": "user", "content": user_message}
        ],
        temperature=0.7,
        max_tokens=1000
    )
    return response.choices[0].message.content

# 测试
print(chat("你好,请问你们的产品有哪些功能?"))

2.2 关键参数解释

  • model: 选择模型,gpt-3.5-turbo性价比最高,gpt-4效果最好
  • messages: 对话历史,system设定角色,user是用户输入
  • temperature: 创造性,0-1,客服场景建议0.3-0.7
  • max_tokens: 最大输出长度,根据需求设置

三、Prompt工程

3.1 系统提示词设计

好的System Prompt是智能客服的关键。以下是经过实战验证的模板:

SYSTEM_PROMPT = """
你是一个专业的技术支持客服,隶属于17老师的技术团队。

## 你的职责:
1. 回答用户关于产品和技术的问题
2. 引导用户描述问题细节
3. 提供解决方案或转接人工

## 回答规范:
- 使用友好、专业的语气
- 回答简洁明了,避免冗长
- 如果不确定,诚实告知并建议联系人工
- 涉及敏感信息(密码、密钥)时提醒用户注意安全

## 产品信息:
- 我们提供Linux运维、网络安全、自动化运维等技术服务
- 服务时间:7x24小时
- 联系方式:j.d88888888@qq.com
"""

3.2 Few-shot学习

通过提供示例让AI学习回答风格:

messages = [
    {"role": "system", "content": SYSTEM_PROMPT},
    {"role": "user", "content": "你们的服务多少钱?"},
    {"role": "assistant", "content": "您好!我们的技术服务价格如下:\n- Linux服务器运维:¥500起/次\n- 网站搭建:¥800起/个\n- 安全加固:¥1000起/次\n- 自动化运维:¥1500起/项目\n\n具体价格需要根据您的需求评估,请告诉我您的具体需求,我来帮您估算。"},
    {"role": "user", "content": user_message}
]

四、上下文管理

4.1 对话历史存储

智能客服需要记住对话上下文,使用Redis存储对话历史:

import redis
import json
from typing import List

r = redis.Redis(host='localhost', port=6379, db=0)

def get_history(session_id: str, max_turns: int = 10) -> List[dict]:
    key = f"chat:{session_id}"
    history = r.lrange(key, 0, -1)
    messages = [json.loads(h) for h in history]
    # 保留最近N轮对话
    return messages[-max_turns*2:] if len(messages) > max_turns*2 else messages

def save_message(session_id: str, role: str, content: str):
    key = f"chat:{session_id}"
    r.rpush(key, json.dumps({"role": role, "content": content}))
    r.expire(key, 3600)  # 1小时过期

4.2 Token限制处理

当对话历史超过模型Token限制时,需要智能截断:

def trim_messages(messages: List[dict], max_tokens: int = 3000) -> List[dict]:
    """保留system prompt + 最近的对话,确保不超Token限制"""
    system_msg = [m for m in messages if m["role"] == "system"]
    other_msgs = [m for m in messages if m["role"] != "system"]
    
    # 简单估算:中文约1.5 token/字,英文约0.75 token/word
    total = sum(len(m["content"]) * 1.5 for m in other_msgs)
    
    while total > max_tokens and len(other_msgs) > 2:
        removed = other_msgs.pop(0)
        total -= len(removed["content"]) * 1.5
    
    return system_msg + other_msgs

五、流式输出

5.1 SSE流式响应

使用FastAPI实现流式输出,让用户体验更好:

from fastapi import FastAPI
from fastapi.responses import StreamingResponse

app = FastAPI()

@app.post("/api/chat")
async def chat_stream(session_id: str, message: str):
    # 保存用户消息
    save_message(session_id, "user", message)
    
    # 获取对话历史
    history = get_history(session_id)
    messages = [{"role": "system", "content": SYSTEM_PROMPT}] + history
    
    async def generate():
        full_response = ""
        stream = client.chat.completions.create(
            model="gpt-3.5-turbo",
            messages=messages,
            stream=True,
            temperature=0.7
        )
        for chunk in stream:
            if chunk.choices[0].delta.content:
                text = chunk.choices[0].delta.content
                full_response += text
                yield f"data: {json.dumps({'text': text})}\n\n"
        
        # 保存AI回复
        save_message(session_id, "assistant", full_response)
        yield f"data: {json.dumps({'done': True})}\n\n"
    
    return StreamingResponse(generate(), media_type="text/event-stream")

六、前端集成

6.1 简单聊天界面

<div id="chat-container">
  <div id="messages"></div>
  <input id="user-input" placeholder="输入消息..." />
  <button onclick="sendMessage()">发送</button>
</div>

<script>
let sessionId = crypto.randomUUID();

async function sendMessage() {
  const input = document.getElementById('user-input');
  const message = input.value.trim();
  if (!message) return;
  
  // 显示用户消息
  appendMessage('user', message);
  input.value = '';
  
  // 流式接收AI回复
  const response = await fetch(`/api/chat?session_id=${sessionId}&message=${encodeURIComponent(message)}`);
  const reader = response.body.getReader();
  const decoder = new TextDecoder();
  let aiMessage = '';
  
  while (true) {
    const { done, value } = await reader.read();
    if (done) break;
    const text = decoder.decode(value);
    const lines = text.split('\n');
    for (const line of lines) {
      if (line.startsWith('data: ')) {
        const data = JSON.parse(line.slice(6));
        if (data.text) {
          aiMessage += data.text;
          updateAIMessage(aiMessage);
        }
      }
    }
  }
}

function appendMessage(role, content) {
  const div = document.createElement('div');
  div.className = `message ${role}`;
  div.textContent = content;
  document.getElementById('messages').appendChild(div);
}
</script>

七、部署上线

7.1 Docker部署

# Dockerfile
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

7.2 生产环境建议

💡 生产环境Checklist:
  • 使用环境变量管理API Key,不要硬编码
  • 添加请求频率限制,防止滥用
  • 实现对话内容审计和日志记录
  • 设置超时和重试机制
  • 添加敏感词过滤

总结

本文介绍了使用ChatGPT API搭建智能客服系统的完整流程,从基础API调用到Prompt工程、上下文管理、流式输出,再到前端集成和部署上线。掌握了这些核心技能,你就可以快速搭建自己的AI应用。

如果需要更复杂的AI应用开发或企业级部署,欢迎联系17老师获取专业支持。

关于17老师:AI应用·数字化管理·全栈开发·网络安全全栈专家。联系邮箱:j.d88888888@qq.com,微信:AFIST17
上一篇
RAG技术详解:让AI拥有企业知识库
下一篇
Python全栈开发实战