AI 聊天功能集成 Skill,含流式响应、上下文管理、Claude API 对接
---
name: AI Chat 架构
description: AI 聊天功能完整架构。核心表(bs_ai_model/bs_prompt/bs_chat)、提示词配置体系(master_template/chat_name/意图理解)、流式对话 12 步流程、SSE 响应格式、日志排查方法。
---
# AI Chat 架构设计
> **重要**: 本节描述 AI 聊天功能的完整架构,是后端最核心的模块之一。
## 核心表概览
| 表名 | 用途 | 关键字段 |
| ------------------ | -------------- | ------------------------------------------------------------ |
| `bs_ai_model` | AI 模型配置 | `model_name`, `api_url`, `api_key`, `status` |
| `bs_prompt` | 提示词配置 | `module_id`, `scene_code`, `role_desc`, `prompt`, `model_id` |
| `bs_prompt_module` | 提示词模块分类 | `name`, `desc` |
| `bs_chat` | 会话记录 | `user_uuid`, `category_id`, `name` |
| `bs_chat_messages` | 消息记录 | `chat_id`, `question`, `answer`, `model_id` |
## bs_ai_model 表结构
```sql
CREATE TABLE bs_ai_model (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
model_name VARCHAR(100) NOT NULL DEFAULT '' COMMENT '模型名称',
api_url VARCHAR(255) NOT NULL DEFAULT '' COMMENT 'API 地址(必须完整路径)',
api_key VARCHAR(255) NOT NULL DEFAULT '' COMMENT 'API 密钥',
status TINYINT NOT NULL DEFAULT 1 COMMENT '状态: 1=在线',
...
)
⚠️ api_url 必须规范:
- ✅ 正确:
https://aihubmix.com/v1/chat/completions
- ❌ 错误:
https://aihubmix.com/v1(缺少 /chat/completions,会 404)
| 类型 |
scene_code |
module_id |
用途 |
| 大师对话模板 |
master_template |
1 |
构建 AI 人设(主 LLM) |
| 会话名称生成 |
chat_name |
2 |
生成简短会话名称 |
| 意图理解 |
buffett |
3 |
分析用户问题类型 |
{{history}} → 最近 3 轮对话历史
{{user_question}} → 当前用户问题
type IntentResult struct {
Complexity string
QuestionType string
HasFinancialIntent bool
StockSymbols []string
Confidence float64
}
| 意图属性 |
影响 |
complexity |
thinking_budget(简单 2048、中等 4096、复杂 8192) |
questionType |
选择对应 Few-shot 示例 |
hasFinancialIntent |
是否调用 FMP API 获取股票数据 |
核心代码: backend/internal/logic/buffett/chat/send_message_logic.go
步骤0: 接收请求
↓
步骤1: 获取用户信息 (user_uuid, lang)
↓
步骤2: 获取或创建会话 (bs_chat)
↓
步骤3: 获取大师 ID 和 AI 模型配置
↓
步骤4: 创建消息记录 (bs_chat_messages)
↓
[发送 SSE 初始数据: chat_id, msg_id, chat_name]
↓
步骤5: 获取历史消息(最近 N 条)
↓
步骤6: 获取原则上下文(如果 rule_id > 0)
↓
步骤7: 构建 AI 请求
- 调用意图理解 LLM
- 根据意图获取金融数据
- 构建系统提示词 + 用户提示词
↓
步骤8: 调用流式 LLM API
↓
[发送 SSE: data: {"content": "..."} ]
↓
步骤9: 响应质量评分
↓
步骤10: 更新消息记录
↓
步骤11: 如果新会话,异步生成会话名称
↓
[发送 SSE: data: [DONE] ]
data: {"chat_id":137,"msg_id":156,"chat_name":"新会话"}
data: {"content":"你好"}
data: {"content":","}
data: {"content":"价值投资"}
data: [DONE]
| 标记 |
含义 |
[Chat流程] 步骤N: |
流式对话各步骤 |
意图理解成功 |
意图 LLM 调用成功 |
LLM 响应状态 |
主 LLM API 响应状态码 |
| 日志关键词 |
问题原因 |
解决方案 |
status_code: 404 |
API URL 不完整 |
检查 api_url 是否包含 /chat/completions |
status_code: 401 |
API Key 无效 |
检查 api_key |
意图理解配置为空 |
提示词配置缺失 |
检查 bs_prompt 是否有 module_id=3 记录 |
- 在
bs_ai_model 表插入新记录
- api_url 必须包含完整路径
- 确保
status=1
- 在
bs_prompt 表修改对应 scene_code 的记录
- 如需切换模型,修改
model_id 字段
- 可通过
is_default 控制默认配置