基于 OpenAI 兼容接口的大语言模型模块,支持多种商业 API 提供商。
- ✅ 多提供商支持:支持 DeepSeek、Qwen 等
- ✅ 对话历史管理:自动维护多轮对话上下文
- ✅ 系统提示词:可自定义助手行为和风格
- ✅ 灵活配置:支持 temperature、max_tokens 等参数
- ✅ 历史修剪:自动管理对话历史长度
- ✅ OpenAI 兼容:使用标准 OpenAI API 接口
from config import load_config
from src.llm import LLMInterface
# 加载配置
config = load_config()
llm_config = config['llm']
# 初始化模块
llm = LLMInterface(llm_config)
# 发送消息
response = llm.chat("你好")
print(response)在 config/config.yaml 中配置:
llm:
provider: "deepseek" # 选择提供商
deepseek:
api_key: "sk-your-api-key" # API Key(必填)
base_url: "https://api.siliconflow.cn/v1"
model: "DeepSeek/DeepSeek-V3"
temperature: 0.7 # 创造性(0.0-2.0)
max_tokens: 2000 # 最大回复长度
top_p: 0.95 # 核采样参数
qwen:
api_key: "sk-your-qwen-key"
base_url: "https://dashscope.aliyuncs.com/api/v1"
model: "qwen-turbo"
temperature: 0.7
max_tokens: 2000
# 系统提示词
system_prompt: |
你是一个友好、耐心的智能学伴助手。
能够回答各种学习问题,提供清晰准确的解释。llm = LLMInterface(config)参数:
config: LLM配置字典,包含provider、api_key等
发送消息并获取回复。
# 使用对话历史
response = llm.chat("你好")
# 不使用历史(单次对话)
response = llm.chat("你好", use_history=False)参数:
user_message(str): 用户消息use_history(bool): 是否使用对话历史,默认True
返回:
str: LLM的回复文本
清空对话历史。
llm.clear_history()获取当前对话历史。
history = llm.get_history()
# 返回: [{"role": "user", "content": "..."}, ...]设置对话历史。
history = [
{"role": "user", "content": "你好"},
{"role": "assistant", "content": "你好!有什么可以帮助你的?"}
]
llm.set_history(history)修剪对话历史,保留最近的N轮对话。
llm.trim_history(max_turns=5) # 保留最近5轮对话设置系统提示词。
llm.set_system_prompt("你是一个专业的数学老师。")切换LLM提供商。
llm.switch_provider("qwen") # 切换到Qwen支持的提供商:
"deepseek": DeepSeek模型(硅基流动)"qwen": Qwen模型(阿里云)
from src.llm import LLMInterface
from config import load_config
config = load_config()
llm = LLMInterface(config['llm'])
# 单轮对话
response = llm.chat("什么是机器学习?")
print(response)# 第一轮
response1 = llm.chat("什么是机器学习?")
print(f"助手: {response1}")
# 第二轮(会使用历史上下文)
response2 = llm.chat("能给我举个例子吗?")
print(f"助手: {response2}")# 每次对话都是独立的
response1 = llm.chat("你好", use_history=False)
response2 = llm.chat("再见", use_history=False)# 设置为数学老师
llm.set_system_prompt("你是一个专业的数学老师,用简洁清晰的语言解释概念。")
response = llm.chat("什么是微积分?")# 获取历史
history = llm.get_history()
print(f"当前有 {len(history)} 条历史记录")
# 修剪历史(保留最近5轮)
llm.trim_history(max_turns=5)
# 清空历史
llm.clear_history()# 从DeepSeek切换到Qwen
llm.switch_provider("qwen")
# 继续使用
response = llm.chat("你好")llm:
provider: "deepseek"
deepseek:
api_key: "sk-..." # 硅基流动API Key(必填)
base_url: "https://api.siliconflow.cn/v1" # API地址
model: "DeepSeek/DeepSeek-V3" # 模型名称
temperature: 0.7 # 创造性:0.0(确定)到2.0(随机)
max_tokens: 2000 # 最大回复长度
top_p: 0.95 # 核采样参数:0.0-1.0参数说明:
| 参数 | 类型 | 说明 | 推荐值 |
|---|---|---|---|
api_key |
str | API密钥(必填) | - |
base_url |
str | API基础地址 | https://api.siliconflow.cn/v1 |
model |
str | 模型名称 | DeepSeek/DeepSeek-V3 |
temperature |
float | 控制输出随机性 | 0.7(平衡) |
max_tokens |
int | 最大回复长度 | 2000 |
top_p |
float | 核采样参数 | 0.95 |
llm:
provider: "qwen"
qwen:
api_key: "sk-..."
base_url: "https://dashscope.aliyuncs.com/api/v1"
model: "qwen-turbo"
temperature: 0.7
max_tokens: 2000
top_p: 0.8llm:
system_prompt: |
你是一个专业的物理老师。
用简洁、准确的语言讲解概念。
鼓励学生独立思考。根据不同场景设置不同的系统提示词:
# 数学老师
llm.set_system_prompt("你是一个专业的数学老师,用简洁清晰的语言解释概念。")
# 编程老师
llm.set_system_prompt("你是一个编程老师,帮助学生学习编程知识。")
# 通用助手
llm.set_system_prompt("你是一个友好的智能助手。")# 在配置文件中修改
config['llm']['deepseek']['temperature'] = 0.9 # 提高创造性
config['llm']['deepseek']['max_tokens'] = 4000 # 增加回复长度
# 重新初始化
llm = LLMInterface(config['llm'])# 对话很多轮后,自动修剪历史
if len(llm.get_history()) > 20:
llm.trim_history(max_turns=10)现象:初始化时警告 "API Key未配置"
解决:
llm:
deepseek:
api_key: "sk-your-actual-key" # 填入正确的API Key现象:错误信息包含 "401", "403" 或 "Invalid API Key"
解决:
- 检查API Key是否正确
- 检查账户余额(登录 https://siliconflow.cn/)
- 检查网络连接
- 查看详细日志:
cat data/logs/system.log
解决:
llm:
deepseek:
max_tokens: 4000 # 增加最大回复长度解决:
# 提高创造性(更随机)
llm:
deepseek:
temperature: 0.9
# 降低创造性(更确定)
llm:
deepseek:
temperature: 0.3解决:
# 方法1:在代码中切换
llm.switch_provider("qwen")
# 方法2:在配置文件中修改
# config.yaml:
# provider: "qwen"# 批量处理多个问题(在历史中)
llm.chat("问题1")
llm.chat("问题2")
llm.chat("问题3")
# 只需要3次API调用# 定期修剪历史,避免token过多
if len(llm.get_history()) > 10:
llm.trim_history(max_turns=5)- 硅基流动: https://siliconflow.cn/
- DeepSeek: https://www.deepseek.com/
- Qwen: https://github.com/QwenLM/Qwen
- OpenAI API文档: https://platform.openai.com/docs/
- API Key安全:不要将包含API Key的配置提交到Git
- 账户余额:确保API账户有足够的余额
- 历史管理:长对话会消耗更多token,定期修剪历史
- 网络连接:确保可以访问API服务器
- 错误处理:API调用可能失败,建议添加重试逻辑
MIT License