┌───────────────┐ ┌──────────────┐ ┌───────────────┐
│ 用户交互层 │───▶│ API调用层 │───▶│ 会话管理层 │
└───────────────┘ └──────────────┘ └───────────────┘
▲ ▲ ▲
│ │ │
┌───────┴───────┐ ┌──────┴──────┐ ┌───────┴───────┐
│ 输入验证 │ │ 请求构造 │ │ 历史记录 │
│ 内容过滤 │ │ 错误处理 │ │ 会话压缩 │
└───────────────┘ └─────────────┘ └───────────────┘
对话管理:维护上下文历史记录
API交互:处理与DeepSeek API的通信
性能监控:记录请求指标和响应质量
安全防护:API密钥管理和输入验证
日志系统:完整记录对话过程
def ask_ai(user_input):
# 1. 构建消息结构
full_messages = [
{"role": "system", "content": ROLE_PROMPT},
*conversation_history,
{"role": "user", "content": user_input}
]
# 2. 准备请求头
headers = {
"Authorization": f"Bearer {DEEPSEEK_API_KEY}",
"Content-Type": "application/json"
}
# 3. 构造请求体
json_data = {
"model": "deepseek-chat",
"messages": full_messages,
"temperature": 0.7, # 控制回答随机性
"max_tokens": 1024, # 限制响应长度
"stream": False # 非流式响应
}
# 4. 发送请求
resp = requests.post(
"https://api.deepseek.com/v1/chat/completions",
headers=headers,
json=json_data,
timeout=15
)
参数 | 类型 | 说明 | 推荐值 |
---|---|---|---|
model | string | 使用的模型版本 | deepseek-chat |
temperature | float | 控制回答随机性 | 0.5-1.0 |
max_tokens | int | 生成的最大token数 | 根据需求调整 |
stream | bool | 是否使用流式响应 | 实时场景设为True |
try:
# API请求代码...
except requests.exceptions.Timeout:
return "请求超时,请稍后重试。"
except requests.exceptions.RequestException as e:
return f"网络请求异常:{str(e)}"
except KeyError:
return "API响应格式异常,解析失败。"
except Exception as e:
return f"发生未预料的异常:{str(e)}"
错误类型处理矩阵:
错误类型 | 处理方式 | 用户提示 |
---|---|---|
超时 | 捕获Timeout异常 | "请求超时,请稍后重试" |
网络错误 | 捕获RequestException | "网络连接出现问题" |
API错误 | 检查status_code | 显示具体错误信息 |
解析错误 | 捕获KeyError | "响应解析失败" |
# 添加用户消息
conversation_history.append({"role": "user", "content": user_input})
# 添加AI回复
conversation_history.append({"role": "assistant", "content": ai_reply})
# 控制历史记录长度
if len(conversation_history) > 10:
conversation_history = conversation_history[-10:]
历史记录优化策略:
固定窗口法:保留最近N轮对话
Token限制法:根据总token数截断
摘要法:对早期对话生成摘要
def compress_history(history, max_rounds=5):
"""保留最近的N轮对话"""
return history[-2 * max_rounds:]
def summarize_conversation(history, limit=5):
"""生成对话摘要(示例实现)"""
important_points = []
for i, msg in enumerate(history[-limit*2:]):
if msg["role"] == "user":
important_points.append(f"用户{i//2+1}: {msg['content'][:50]}...")
return "\n".join(important_points)
def report_api_result(response, latency):
"""生成API调用报告"""
return {
"status_code": response.status_code,
"response_time": latency,
"success": response.status_code == 200,
"token_used": len(response.text) // 4 # 估算token使用量
}
def simulate_network_latency():
"""模拟网络延迟"""
delay = random.uniform(0.1, 1.2)
time.sleep(delay)
return delay
def check_api_key_validity(api_key):
"""验证API密钥格式"""
return bool(api_key and len(api_key) > 10)
def validate_user_input(text):
"""输入内容校验"""
return isinstance(text, str) and len(text.strip()) > 0
def log_system_context():
"""记录安全上下文"""
return {
"env": os.name,
"timestamp": datetime.now().isoformat(),
"key_hash": hashlib.sha256(DEEPSEEK_API_KEY.encode()).hexdigest()
}
def evaluate_model_performance(response_text):
"""基于长度的初步质量评估"""
length = len(response_text)
if length < 10:
return "低质量"
elif length < 100:
return "中等质量"
else:
return "高质量"
def diagnose_response_content(response_text):
"""内容诊断"""
if not response_text.strip():
return "空回复"
if "抱歉" in response_text or "无法" in response_text:
return "可能为拒答内容"
if "..." in response_text[-5:]:
return "可能被截断"
return "正常回复"
def extract_keywords(text):
"""简单关键词提取"""
words = text.split()
return [word for word in words if len(word) > 2]
def build_token_distribution(text):
"""字符频率分析"""
distribution = {}
for char in text:
distribution[char] = distribution.get(char, 0) + 1
return distribution
连接池管理:
session = requests.Session()
session.proxies = {"http": None, "https": None}
异步请求:
import aiohttp
async with aiohttp.ClientSession() as session:
async with session.post(url, json=data) as resp:
return await resp.json()
请求批处理:
def batch_ask_ai(messages_list):
return [ask_ai(msg) for msg in messages_list]
指数退避重试:
def request_with_retry(payload, max_retries=3):
for attempt in range(max_retries):
try:
return ask_ai(payload)
except Exception as e:
wait = 2 ** attempt
time.sleep(wait)
raise Exception("Max retries exceeded")
故障转移:
def fallback_ai_service(user_input):
try:
return ask_ai(user_input)
except Exception:
return simple_rule_based_response(user_input)
class ConversationSession:
def __init__(self):
self.history = []
self.session_id = hashlib.md5(str(time.time()).encode()).hexdigest()
def add_message(self, role, content):
self.history.append({"role": role, "content": content})
def get_context(self, max_tokens=2000):
"""智能截断保证token不超限"""
context = []
current_length = 0
for msg in reversed(self.history):
msg_length = len(msg["content"]) // 4
if current_length + msg_length > max_tokens:
break
context.insert(0, msg)
current_length += msg_length
return context
def create_domain_specific_ai(domain_knowledge):
"""创建领域专用的AI对话接口"""
def domain_ai(user_input):
system_prompt = f"""
你是{domain_knowledge["domain"]}领域的专家,请用专业但易懂的语言回答用户问题。
特别知识:{domain_knowledge["key_points"]}
"""
return ask_ai(user_input, system_prompt=system_prompt)
return domain_ai
# 使用示例
medical_ai = create_domain_specific_ai({
"domain": "医疗健康",
"key_points": "常见疾病症状、药品相互作用、预防保健建议"
})
本指南详细解析了一个生产级的DeepSeek AI对话系统实现,关键要点包括:
健壮的API封装:完善的错误处理和参数配置
上下文管理:智能的对话历史维护策略
监控诊断:全面的性能和质量评估
安全防护:输入验证和密钥保护
扩展能力:支持领域定制和多轮对话
最佳实践建议:
实施请求限流避免API过载
添加内容过滤机制防止滥用
定期轮换API密钥
监控token使用量控制成本