2025-10-15 20:37:30 +08:00
|
|
|
|
# API 配置指南
|
|
|
|
|
|
|
2026-04-07 19:33:49 +08:00
|
|
|
|
> 本文档详细说明如何为自动控制理论AI+数智平台配置 DeepSeek 和 Gemini API,包括密钥获取、配置方法、参数调优与常见问题排查。
|
2025-10-15 20:37:30 +08:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2026-04-07 19:33:49 +08:00
|
|
|
|
## 一、API 概述
|
2025-10-15 20:37:30 +08:00
|
|
|
|
|
2026-04-07 19:33:49 +08:00
|
|
|
|
### 1.1 平台支持的 AI API
|
2025-10-15 20:37:30 +08:00
|
|
|
|
|
2026-04-07 19:33:49 +08:00
|
|
|
|
本平台目前支持以下 AI API 提供商:
|
2025-10-15 20:37:30 +08:00
|
|
|
|
|
2026-04-07 19:33:49 +08:00
|
|
|
|
| API 提供商 | 支持模型 | 访问地区 | 推荐程度 |
|
|
|
|
|
|
|------------|----------|----------|----------|
|
|
|
|
|
|
| DeepSeek | deepseek-chat / deepseek-coder | 中国大陆 | ⭐⭐⭐⭐⭐ 首选 |
|
|
|
|
|
|
| Gemini (Google) | gemini-1.5-flash / gemini-1.5-pro | 部分受限 | ⭐⭐⭐ |
|
2025-10-15 20:37:30 +08:00
|
|
|
|
|
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` 替换为您的密钥
|
2025-10-15 20:37:30 +08:00
|
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
|
# ==================== API 配置 ====================
|
2026-04-07 19:33:49 +08:00
|
|
|
|
API_KEY = "sk-2292af2428d7419897ca1fb6e99ba6bc" # 替换为您的密钥
|
2025-10-15 20:37:30 +08:00
|
|
|
|
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
|
|
|
|
**方法二:使用环境变量(推荐用于生产环境)**
|
2025-10-15 20:37:30 +08:00
|
|
|
|
|
2026-04-07 19:33:49 +08:00
|
|
|
|
1. **Windows PowerShell:**
|
2025-10-15 20:37:30 +08:00
|
|
|
|
```powershell
|
2026-04-07 19:33:49 +08:00
|
|
|
|
$env:DEEPSEEK_API_KEY="sk-2292af2428d7419897ca1fb6e99ba6bc"
|
2025-10-15 20:37:30 +08:00
|
|
|
|
python app.py
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-04-07 19:33:49 +08:00
|
|
|
|
2. **Linux / macOS:**
|
2025-10-15 20:37:30 +08:00
|
|
|
|
```bash
|
2026-04-07 19:33:49 +08:00
|
|
|
|
export DEEPSEEK_API_KEY="sk-2292af2428d7419897ca1fb6e99ba6bc"
|
2025-10-15 20:37:30 +08:00
|
|
|
|
python app.py
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-04-07 19:33:49 +08:00
|
|
|
|
3. **在 config.py 中读取环境变量:**
|
2025-10-15 20:37:30 +08:00
|
|
|
|
```python
|
|
|
|
|
|
import os
|
2026-04-07 19:33:49 +08:00
|
|
|
|
|
2025-10-15 20:37:30 +08:00
|
|
|
|
API_KEY = os.environ.get("DEEPSEEK_API_KEY", "")
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-04-07 19:33:49 +08:00
|
|
|
|
**方法三:创建独立配置文件**
|
2025-10-15 20:37:30 +08:00
|
|
|
|
|
2026-04-07 19:33:49 +08:00
|
|
|
|
1. 在项目根目录创建 `config.json`:
|
2025-10-15 20:37:30 +08:00
|
|
|
|
```json
|
|
|
|
|
|
{
|
2026-04-07 19:33:49 +08:00
|
|
|
|
"api_key": "sk-2292af2428d7419897ca1fb6e99ba6bc",
|
2025-10-15 20:37:30 +08:00
|
|
|
|
"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` 中加载:
|
2025-10-15 20:37:30 +08:00
|
|
|
|
```python
|
|
|
|
|
|
import json
|
2026-04-07 19:33:49 +08:00
|
|
|
|
import os
|
2025-10-15 20:37:30 +08:00
|
|
|
|
|
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."""
|
2025-10-15 20:37:30 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2026-04-07 19:33:49 +08:00
|
|
|
|
## 七、安全建议
|
2025-10-15 20:37:30 +08:00
|
|
|
|
|
2026-04-07 19:33:49 +08:00
|
|
|
|
### 7.1 密钥安全原则
|
2025-10-15 20:37:30 +08:00
|
|
|
|
|
2026-04-07 19:33:49 +08:00
|
|
|
|
**❌ 不要做的事情:**
|
|
|
|
|
|
- 在代码中硬编码密钥并提交到 Git
|
|
|
|
|
|
- 在公开场合分享密钥
|
|
|
|
|
|
- 使用过于简单的密钥
|
2025-10-15 20:37:30 +08:00
|
|
|
|
|
2026-04-07 19:33:49 +08:00
|
|
|
|
**✅ 推荐的做法:**
|
|
|
|
|
|
- 使用环境变量存储密钥
|
|
|
|
|
|
- 将敏感配置文件加入 .gitignore
|
|
|
|
|
|
- 定期更换密钥
|
|
|
|
|
|
- 为不同项目使用不同的密钥
|
2025-10-15 20:37:30 +08:00
|
|
|
|
|
2026-04-07 19:33:49 +08:00
|
|
|
|
### 7.2 .gitignore 配置
|
2025-10-15 20:37:30 +08:00
|
|
|
|
|
2026-04-07 19:33:49 +08:00
|
|
|
|
确保以下文件不会被提交到 Git:
|
2025-10-15 20:37:30 +08:00
|
|
|
|
|
2026-04-07 19:33:49 +08:00
|
|
|
|
```
|
|
|
|
|
|
# API 配置文件
|
|
|
|
|
|
config.json
|
|
|
|
|
|
secrets.json
|
|
|
|
|
|
.env
|
2025-10-15 20:37:30 +08:00
|
|
|
|
|
2026-04-07 19:33:49 +08:00
|
|
|
|
# Python
|
|
|
|
|
|
__pycache__/
|
|
|
|
|
|
*.pyc
|
|
|
|
|
|
*.pyo
|
2025-10-15 20:37:30 +08:00
|
|
|
|
|
2026-04-07 19:33:49 +08:00
|
|
|
|
# IDE
|
|
|
|
|
|
.vscode/
|
|
|
|
|
|
.idea/
|
2025-10-15 20:37:30 +08:00
|
|
|
|
|
2026-04-07 19:33:49 +08:00
|
|
|
|
# 模型权重(较大文件)
|
|
|
|
|
|
Model/data/*.pth
|
|
|
|
|
|
```
|
2025-10-15 20:37:30 +08:00
|
|
|
|
|
2026-04-07 19:33:49 +08:00
|
|
|
|
### 7.3 生产环境部署
|
2025-10-15 20:37:30 +08:00
|
|
|
|
|
2026-04-07 19:33:49 +08:00
|
|
|
|
**推荐做法:**
|
2025-10-15 20:37:30 +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 请求失败
|
|
|
|
|
|
|
|
|
|
|
|
**问题1:401 Unauthorized**
|
|
|
|
|
|
|
|
|
|
|
|
| 可能原因 | 解决方法 |
|
|
|
|
|
|
|----------|----------|
|
|
|
|
|
|
| API 密钥无效 | 检查密钥是否正确复制 |
|
|
|
|
|
|
| 密钥已过期 | 在平台控制台重新创建密钥 |
|
|
|
|
|
|
| 密钥未激活 | 确认密钥已绑定正确服务 |
|
|
|
|
|
|
|
|
|
|
|
|
**问题2:403 Forbidden**
|
|
|
|
|
|
|
|
|
|
|
|
| 可能原因 | 解决方法 |
|
|
|
|
|
|
|----------|----------|
|
|
|
|
|
|
| 账户余额不足 | 充值或等待免费额度刷新 |
|
|
|
|
|
|
| 权限不足 | 检查账户权限设置 |
|
|
|
|
|
|
| 服务未开通 | 在控制台开通对应服务 |
|
|
|
|
|
|
|
|
|
|
|
|
**问题3:429 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 参数**
|
|
|
|
|
|
- 降低 temperature(0.3~0.5)使回答更确定
|
|
|
|
|
|
- 提高 temperature(0.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`:
|
2025-10-15 20:37:30 +08:00
|
|
|
|
```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}
|
2025-10-15 20:37:30 +08:00
|
|
|
|
]
|
|
|
|
|
|
)
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-04-07 19:33:49 +08:00
|
|
|
|
2. 刷新页面重试
|
2025-10-15 20:37:30 +08:00
|
|
|
|
|
2026-04-07 19:33:49 +08:00
|
|
|
|
3. 检查 LaTeX 语法是否正确
|
2025-10-15 20:37:30 +08:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2026-04-07 19:33:49 +08:00
|
|
|
|
## 九、API 使用成本优化
|
2025-10-15 20:37:30 +08:00
|
|
|
|
|
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. 开启用量告警
|
2025-10-15 20:37:30 +08:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
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日**
|