Files

641 lines
17 KiB
Markdown
Raw Permalink Normal View History

# API 配置指南
2026-04-07 19:33:49 +08:00
> 本文档详细说明如何为自动控制理论AI+数智平台配置 DeepSeek 和 Gemini API,包括密钥获取、配置方法、参数调优与常见问题排查。
---
2026-04-07 19:33:49 +08:00
## 一、API 概述
2026-04-07 19:33:49 +08:00
### 1.1 平台支持的 AI API
2026-04-07 19:33:49 +08:00
本平台目前支持以下 AI API 提供商:
2026-04-07 19:33:49 +08:00
| API 提供商 | 支持模型 | 访问地区 | 推荐程度 |
|------------|----------|----------|----------|
| DeepSeek | deepseek-chat / deepseek-coder | 中国大陆 | ⭐⭐⭐⭐⭐ 首选 |
| Gemini (Google) | gemini-1.5-flash / gemini-1.5-pro | 部分受限 | ⭐⭐⭐ |
2026-04-07 19:33:49 +08:00
### 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 配置 ====================
2026-04-07 19:33:49 +08:00
API_KEY = "sk-2292af2428d7419897ca1fb6e99ba6bc" # 替换为您的密钥
API_BASE_URL = "https://api.deepseek.com/v1"
API_MODEL = "deepseek-chat" # 或 "deepseek-coder"
API_TYPE = "deepseek"
# ==================================================
```
2026-04-07 19:33:49 +08:00
**方法二:使用环境变量(推荐用于生产环境)**
2026-04-07 19:33:49 +08:00
1. **Windows PowerShell**
```powershell
2026-04-07 19:33:49 +08:00
$env:DEEPSEEK_API_KEY="sk-2292af2428d7419897ca1fb6e99ba6bc"
python app.py
```
2026-04-07 19:33:49 +08:00
2. **Linux / macOS**
```bash
2026-04-07 19:33:49 +08:00
export DEEPSEEK_API_KEY="sk-2292af2428d7419897ca1fb6e99ba6bc"
python app.py
```
2026-04-07 19:33:49 +08:00
3. **在 config.py 中读取环境变量:**
```python
import os
2026-04-07 19:33:49 +08:00
API_KEY = os.environ.get("DEEPSEEK_API_KEY", "")
```
2026-04-07 19:33:49 +08:00
**方法三:创建独立配置文件**
2026-04-07 19:33:49 +08:00
1. 在项目根目录创建 `config.json`
```json
{
2026-04-07 19:33:49 +08:00
"api_key": "sk-2292af2428d7419897ca1fb6e99ba6bc",
"api_base_url": "https://api.deepseek.com/v1",
"api_model": "deepseek-chat",
"api_type": "deepseek"
}
```
2026-04-07 19:33:49 +08:00
2.`config.py` 中加载:
```python
import json
2026-04-07 19:33:49 +08:00
import os
2026-04-07 19:33:49 +08:00
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."""
```
---
2026-04-07 19:33:49 +08:00
## 七、安全建议
2026-04-07 19:33:49 +08:00
### 7.1 密钥安全原则
2026-04-07 19:33:49 +08:00
**❌ 不要做的事情:**
- 在代码中硬编码密钥并提交到 Git
- 在公开场合分享密钥
- 使用过于简单的密钥
2026-04-07 19:33:49 +08:00
**✅ 推荐的做法:**
- 使用环境变量存储密钥
- 将敏感配置文件加入 .gitignore
- 定期更换密钥
- 为不同项目使用不同的密钥
2026-04-07 19:33:49 +08:00
### 7.2 .gitignore 配置
2026-04-07 19:33:49 +08:00
确保以下文件不会被提交到 Git
2026-04-07 19:33:49 +08:00
```
# API 配置文件
config.json
secrets.json
.env
2026-04-07 19:33:49 +08:00
# Python
__pycache__/
*.pyc
*.pyo
2026-04-07 19:33:49 +08:00
# IDE
.vscode/
.idea/
2026-04-07 19:33:49 +08:00
# 模型权重(较大文件)
Model/data/*.pth
```
2026-04-07 19:33:49 +08:00
### 7.3 生产环境部署
2026-04-07 19:33:49 +08:00
**推荐做法:**
2026-04-07 19:33:49 +08:00
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},
2026-04-07 19:33:49 +08:00
{"left": "$", "right": "$", "display": False},
{"left": "\\[", "right": "\\]", "display": True},
{"left": "\\(", "right": "\\)", "display": False}
]
)
```
2026-04-07 19:33:49 +08:00
2. 刷新页面重试
2026-04-07 19:33:49 +08:00
3. 检查 LaTeX 语法是否正确
---
2026-04-07 19:33:49 +08:00
## 九、API 使用成本优化
2026-04-07 19:33:49 +08:00
### 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. 开启用量告警
---
2026-04-07 19:33:49 +08:00
## 十、获取帮助
### 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日**