Files
2026-04-07 19:33:49 +08:00

641 lines
17 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# API 配置指南
> 本文档详细说明如何为自动控制理论AI+数智平台配置 DeepSeek 和 Gemini API,包括密钥获取、配置方法、参数调优与常见问题排查。
---
## 一、API 概述
### 1.1 平台支持的 AI API
本平台目前支持以下 AI API 提供商:
| API 提供商 | 支持模型 | 访问地区 | 推荐程度 |
|------------|----------|----------|----------|
| DeepSeek | deepseek-chat / deepseek-coder | 中国大陆 | ⭐⭐⭐⭐⭐ 首选 |
| Gemini (Google) | gemini-1.5-flash / gemini-1.5-pro | 部分受限 | ⭐⭐⭐ |
### 1.2 为什么需要 API
AI 智能问答模块依赖外部大语言模型 API 来实现:
- 自动控制理论专业问题的理解和回答
- LaTeX 数学公式的正确生成
- 多轮对话的上下文记忆
### 1.3 配置优先级
```
┌─────────────────────────────────────────┐
│ 推荐配置顺序 │
├─────────────────────────────────────────┤
│ │
│ 1. DeepSeek API(国内访问,速度快) │
│ ↓ │
│ 2. Gemini API(需要代理) │
│ ↓ │
│ 3. 本地部署(需高配置服务器) │
│ │
└─────────────────────────────────────────┘
```
---
## 二、DeepSeek API 配置
### 2.1 DeepSeek 简介
DeepSeek 是国内领先的 AI 大模型服务提供商,提供:
- **deepseek-chat**:通用对话模型,适合教育场景
- **deepseek-coder**:代码专用模型,适合技术问题
- **价格优惠**:相比 OpenAI 等海外服务商更具性价比
- **国内访问**:无需代理,网络延迟低
### 2.2 获取 API 密钥
**Step 1:访问 DeepSeek 平台**
打开浏览器,访问:https://platform.deepseek.com/
**Step 2:注册/登录账号**
- 使用手机号或邮箱注册
- 已注册用户直接登录
**Step 3:进入 API Keys 管理页面**
登录后,点击顶部导航栏的 "API Keys"
```
https://platform.deepseek.com/api_keys
```
**Step 4:创建新密钥**
1. 点击 "创建新密钥" 按钮
2. 输入密钥名称(可自定义,如 "AutoControlCourse"
3. 点击确认
4. **立即复制密钥**(只显示一次!)
**密钥格式示例:**
```
sk-2292af2428d7419897ca1fb6e99ba6bc
```
### 2.3 配置到项目
**方法一:直接编辑 config.py(最简单)**
1. 打开项目根目录下的 `config.py` 文件
2. 找到 API 配置区域
3.`API_KEY` 替换为您的密钥
```python
# ==================== API 配置 ====================
API_KEY = "sk-2292af2428d7419897ca1fb6e99ba6bc" # 替换为您的密钥
API_BASE_URL = "https://api.deepseek.com/v1"
API_MODEL = "deepseek-chat" # 或 "deepseek-coder"
API_TYPE = "deepseek"
# ==================================================
```
**方法二:使用环境变量(推荐用于生产环境)**
1. **Windows PowerShell**
```powershell
$env:DEEPSEEK_API_KEY="sk-2292af2428d7419897ca1fb6e99ba6bc"
python app.py
```
2. **Linux / macOS**
```bash
export DEEPSEEK_API_KEY="sk-2292af2428d7419897ca1fb6e99ba6bc"
python app.py
```
3. **在 config.py 中读取环境变量:**
```python
import os
API_KEY = os.environ.get("DEEPSEEK_API_KEY", "")
```
**方法三:创建独立配置文件**
1. 在项目根目录创建 `config.json`
```json
{
"api_key": "sk-2292af2428d7419897ca1fb6e99ba6bc",
"api_base_url": "https://api.deepseek.com/v1",
"api_model": "deepseek-chat",
"api_type": "deepseek"
}
```
2.`config.py` 中加载:
```python
import json
import os
config_path = os.path.join(os.path.dirname(__file__), "config.json")
if os.path.exists(config_path):
with open(config_path, "r") as f:
config_data = json.load(f)
API_KEY = config_data.get("api_key", "")
API_BASE_URL = config_data.get("api_base_url", "https://api.deepseek.com/v1")
API_MODEL = config_data.get("api_model", "deepseek-chat")
API_TYPE = config_data.get("api_type", "deepseek")
else:
API_KEY = ""
API_BASE_URL = "https://api.deepseek.com/v1"
API_MODEL = "deepseek-chat"
API_TYPE = "deepseek"
```
### 2.4 DeepSeek 可用模型
| 模型名称 | 适用场景 | 特点 | 推荐场景 |
|----------|----------|------|----------|
| deepseek-chat | 通用对话 | 平衡性能与成本 | ⭐ 日常学习问答 |
| deepseek-coder | 代码相关 | 代码理解能力强 | 专业开发者 |
### 2.5 费用说明
| 项目 | 说明 |
|------|------|
| 新用户优惠 | 通常有免费额度 |
| 计费方式 | 按 token 用量计费 |
| 价格水平 | 比 OpenAI 低约 80% |
| 查看用量 | https://platform.deepseek.com/usage |
| 详细定价 | https://platform.deepseek.com/pricing |
### 2.6 速率限制
| 账户类型 | RPM(每分钟请求数) | TPM(每分钟 Token 数) |
|----------|---------------------|------------------------|
| 免费用户 | 60 | 100,000 |
| 付费用户 | 最高可达 2000 | 根据套餐 |
---
## 三、Gemini API 配置
### 3.1 Gemini 简介
Gemini 是 Google 开发的 AI 大模型,具备:
- **gemini-1.5-flash**:快速响应,适合实时交互
- **gemini-1.5-pro**:更强大的理解和生成能力
- **多模态**:支持文本、图像等多种输入
**注意:** Gemini API 在中国大陆可能需要网络代理才能访问。
### 3.2 获取 API 密钥
**Step 1:访问 Google AI Studio**
打开浏览器,访问:https://aistudio.google.com/app/apikey
**Step 2:登录 Google 账号**
使用您的 Google 账号登录。
**Step 3:获取 API 密钥**
1. 点击 "Get API Key"
2. 选择或创建项目
3. 点击 "Create API Key"
4. 复制生成的密钥
**密钥格式示例:**
```
AIzaSy-your-gemini-api-key-here
```
### 3.3 配置到项目
编辑 `config.py` 文件:
```python
# ==================== API 配置 ====================
API_KEY = "AIzaSy-your-gemini-api-key-here"
API_BASE_URL = "https://generativelanguage.googleapis.com/v1beta"
API_MODEL = "gemini-1.5-flash" # 或 "gemini-1.5-pro"
API_TYPE = "gemini"
# ==================================================
```
### 3.4 Gemini 可用模型
| 模型名称 | 特点 | 适用场景 | 响应速度 |
|----------|------|----------|----------|
| gemini-1.5-flash | 快速响应 | 实时交互 | ⚡⚡⚡⚡⚡ |
| gemini-1.5-pro | 更强能力 | 复杂问题 | ⚡⚡⚡ |
| gemini-pro | 经典版本 | 一般对话 | ⚡⚡⚡⚡ |
### 3.5 网络访问说明
| 地区 | 访问状态 | 解决方案 |
|------|----------|----------|
| 中国大陆 | 可能受限 | 使用 DeepSeek API 或配置代理 |
| 港澳台 | 基本正常 | 直连或使用代理 |
| 其他地区 | 正常 | 直连 |
---
## 四、配置参数详解
### 4.1 完整配置参数表
| 参数名 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| API_KEY | string | "" | API 密钥,必填 |
| API_BASE_URL | string | "https://api.deepseek.com/v1" | API 基础 URL |
| API_MODEL | string | "deepseek-chat" | 模型名称 |
| API_TYPE | string | "deepseek" | API 类型:deepseek 或 gemini |
| SERVER_NAME | string | "0.0.0.0" | 监听网络接口 |
| SERVER_PORT | int | 7860 | 监听端口 |
| SHARE | bool | True | 是否创建公开链接 |
### 4.2 API_KEY 配置
**格式:** `sk-` 开头(DeepSeek)或 `AIzaSy` 开头(Gemini
**常见错误:**
- 密钥包含多余空格(复制时容易带入)
- 密钥过期或被删除
- 密钥未激活对应服务
**排查方法:**
1. 确认密钥完整复制(无前后空格)
2. 在官网控制台确认密钥状态
3. 确认密钥已绑定正确的产品/服务
### 4.3 API_BASE_URL 配置
| API 类型 | 正确 URL | 错误示例 |
|----------|----------|----------|
| DeepSeek | https://api.deepseek.com/v1 | https://api.deepseek.com/ |
| Gemini | https://generativelanguage.googleapis.com/v1beta | 其他 URL |
### 4.4 API_MODEL 配置
**DeepSeek 模型:**
| 模型 | 上下文长度 | 适用场景 |
|------|------------|----------|
| deepseek-chat | 64K tokens | 通用对话,推荐 |
| deepseek-coder | 64K tokens | 代码相关问题 |
**Gemini 模型:**
| 模型 | 上下文长度 | 适用场景 |
|------|------------|----------|
| gemini-1.5-flash | 1M tokens | 快速响应 |
| gemini-1.5-pro | 1M tokens | 复杂任务 |
| gemini-pro | 32K tokens | 一般对话 |
---
## 五、流式响应配置
### 5.1 什么是流式响应
流式响应(Streaming)是指 AI 边生成答案边返回,用户可以实时看到回答内容,而不必等待完整答案生成完毕。
**优点:**
- 减少等待感
- 及时了解回答方向
- 支持长答案的快速预览
### 5.2 当前配置
本平台默认启用流式响应,配置位于 `chatbot.py`
```python
payload = {
"model": config.API_MODEL,
"messages": messages_for_api,
"stream": True, # 启用流式响应
"temperature": 0.7, # 创造性参数
"max_tokens": 2048 # 最大 Token 数
}
```
### 5.3 参数调优
| 参数 | 取值范围 | 说明 | 调整建议 |
|------|----------|------|----------|
| temperature | 0.0 ~ 2.0 | 创造性控制,值越低越确定 | 学习问答建议 0.3~0.7 |
| max_tokens | 1 ~ 32768 | 单次回复最大 Token 数 | 长回答设为 4096 |
| top_p | 0.0 ~ 1.0 | 核采样参数 | 通常保持默认 1.0 |
| frequency_penalty | -2.0 ~ 2.0 | 频率惩罚 | 保持默认 0.0 |
| presence_penalty | -2.0 ~ 2.0 | 存在惩罚 | 保持默认 0.0 |
---
## 六、系统提示词配置
### 6.1 系统提示词的作用
系统提示词(System Prompt)定义了 AI 助手的角色定位、回答风格和专业范围。本平台的默认提示词位于 `chatbot.py`
### 6.2 默认提示词
```python
system_prompt = """你是一位精通自动控制原理的专家教授。请用清晰、准确、专业的中文来回答有关自动控制课程内容的问题。
重要规则:
1. 当需要表达数学公式时,必须使用 LaTeX 格式
2. 行内公式使用 $公式$ 或 \\(公式\\)
3. 独立公式使用 $$公式$$ 或 \\[公式\\]
4. 例如:传递函数可以写成 $G(s) = \\frac{K}{s(s+1)}$
5. 二阶系统标准形式:$$G(s) = \\frac{\\omega_n^2}{s^2 + 2\\zeta\\omega_n s + \\omega_n^2}$$
请在适当的时候使用公式和示例来辅助解释。"""
```
### 6.3 自定义提示词
根据教学需求,您可以修改系统提示词:
**修改方法:** 编辑 `chatbot.py` 中的 `system_prompt` 变量。
**示例1:强化公式推导**
```python
system_prompt = """你是一位严谨的自动控制原理教授。在回答问题时:
1. 注重公式的推导过程
2. 每一步推导都要清晰呈现
3. 适当使用 LaTeX 公式
4. 结合实例帮助理解"""
```
**示例2:简化回答风格**
```python
system_prompt = """你是一位friendly的自动控制课程助教。请用简洁、易懂的语言回答问题:
1. 尽量少用专业术语
2. 多用生活实例类比
3. 重要公式用 LaTeX 展示"""
```
**示例3:英文问答模式**
```python
system_prompt = """You are an expert professor of Automatic Control Theory.
Answer questions in English using LaTeX for mathematical formulas.
Focus on clarity and practical examples."""
```
---
## 七、安全建议
### 7.1 密钥安全原则
**❌ 不要做的事情:**
- 在代码中硬编码密钥并提交到 Git
- 在公开场合分享密钥
- 使用过于简单的密钥
**✅ 推荐的做法:**
- 使用环境变量存储密钥
- 将敏感配置文件加入 .gitignore
- 定期更换密钥
- 为不同项目使用不同的密钥
### 7.2 .gitignore 配置
确保以下文件不会被提交到 Git
```
# API 配置文件
config.json
secrets.json
.env
# Python
__pycache__/
*.pyc
*.pyo
# IDE
.vscode/
.idea/
# 模型权重(较大文件)
Model/data/*.pth
```
### 7.3 生产环境部署
**推荐做法:**
1. **使用环境变量**
```bash
# Docker 部署
docker run -p 7860:7860 \
-e DEEPSEEK_API_KEY="sk-xxx" \
autocontrol-course
```
2. **使用配置服务**
- AWS Secrets Manager
- Azure Key Vault
- HashiCorp Vault
3. **限制 API 访问**
- 设置 API 密钥的使用 IP 白名单
- 配置请求频率限制
- 开启使用量告警
---
## 八、常见问题排查
### 8.1 API 请求失败
**问题1401 Unauthorized**
| 可能原因 | 解决方法 |
|----------|----------|
| API 密钥无效 | 检查密钥是否正确复制 |
| 密钥已过期 | 在平台控制台重新创建密钥 |
| 密钥未激活 | 确认密钥已绑定正确服务 |
**问题2403 Forbidden**
| 可能原因 | 解决方法 |
|----------|----------|
| 账户余额不足 | 充值或等待免费额度刷新 |
| 权限不足 | 检查账户权限设置 |
| 服务未开通 | 在控制台开通对应服务 |
**问题3429 Rate Limit**
| 可能原因 | 解决方法 |
|----------|----------|
| 请求过于频繁 | 降低请求频率 |
| 超出 TPM/RPM 限制 | 等待或升级套餐 |
| 并发数过高 | 减少并发请求数 |
**解决方法:**
1. 等待一段时间后重试
2. 配置请求间隔(如每次提问间隔 2 秒)
3. 升级到更高配额套餐
### 8.2 网络连接问题
**问题:Connection Error / Timeout**
**排查步骤:**
1. **检查网络连接**
```bash
# 测试 API 端点是否可达
curl -I https://api.deepseek.com/v1
```
2. **检查代理设置(如需要)**
```python
# 在 chatbot.py 中配置代理
import os
os.environ["HTTP_PROXY"] = "http://proxy.example.com:8080"
os.environ["HTTPS_PROXY"] = "http://proxy.example.com:8080"
```
3. **增加超时时间**
```python
# 在 aiohttp 请求中增加 timeout
async with session.post(api_url, json=payload, headers=headers,
timeout=aiohttp.ClientTimeout(total=120)) as response:
```
### 8.3 回复质量问题
**问题:回复内容不准确**
**解决方法:**
1. **优化系统提示词**
- 明确指定回答风格
- 强调专业领域要求
- 添加示例回答
2. **调整 temperature 参数**
- 降低 temperature0.3~0.5)使回答更确定
- 提高 temperature0.7~1.0)使回答更有创造性
3. **优化提问方式**
- 提供更多上下文
- 明确问题范围
- 指出具体困惑点
**问题:回复速度慢**
**解决方法:**
1. **使用较轻量的模型**
- DeepSeek:选择 deepseek-chat 而非 deepseek-coder
- Gemini:选择 gemini-1.5-flash
2. **减少 max_tokens**
- 根据实际需求设置合理的最大长度
- 避免生成过长的回答
3. **检查网络延迟**
- 选择距离更近的 API 端点
- 考虑使用 CDN 加速
### 8.4 公式渲染问题
**问题:LaTeX 公式不显示**
**可能原因:**
1. **Chatbot 未启用 LaTeX**
2. **MathJax 加载失败**
3. **公式语法错误**
**解决方法:**
1. 确认 `gr.Chatbot` 配置包含 `latex_delimiters`
```python
chatbot = gr.Chatbot(
latex_delimiters=[
{"left": "$$", "right": "$$", "display": True},
{"left": "$", "right": "$", "display": False},
{"left": "\\[", "right": "\\]", "display": True},
{"left": "\\(", "right": "\\)", "display": False}
]
)
```
2. 刷新页面重试
3. 检查 LaTeX 语法是否正确
---
## 九、API 使用成本优化
### 9.1 成本构成
API 使用成本主要由以下因素决定:
| 因素 | 说明 | 优化建议 |
|------|------|----------|
| 输入 Token 数 | 问题文本长度 | 精简提问 |
| 输出 Token 数 | 回答文本长度 | 限制 max_tokens |
| 请求次数 | 提问频率 | 减少无效请求 |
| 模型单价 | 不同模型价格不同 | 选择性价比模型 |
### 9.2 优化策略
**策略1:精简提问**
- 移除问题中不必要的修饰词
- 明确指出核心疑问
- 提供必要的上下文但不过度
**策略2:合理限制输出长度**
- 根据问题类型设置 max_tokens
- 简单问题设置较短限制
- 复杂问题允许更长回答
**策略3:缓存常用回答**
- 实现本地缓存机制
- 避免重复提问相同问题
- 减少 API 调用次数
**策略4:选择合适模型**
- 日常问答:使用轻量模型(flash 版本)
- 复杂问题:按需使用强大模型
### 9.3 预算设置
在 DeepSeek 控制台设置用量限制:
1. 访问 https://platform.deepseek.com/
2. 进入 "用量限制" 设置
3. 设置月度预算上限
4. 开启用量告警
---
## 十、获取帮助
### 10.1 官方文档
| 资源 | 链接 |
|------|------|
| DeepSeek 文档 | https://platform.deepseek.com/docs |
| Gemini 文档 | https://ai.google.dev/docs |
| Gradio 文档 | https://gradio.app/docs |
### 10.2 技术支持
| 渠道 | 联系方式 |
|------|----------|
| 项目问题 | GitHub Issues |
| API 问题 | 平台官方支持 |
| 使用咨询 | 课程教师/助教 |
---
**最后更新:2026年4月7日**