5de859582c128127e91abdca995d45c938c7617f
chore(database): 优化模型配置表结构和索引设计 - 重新设计 model_gateway_models 表的字段结构和约束 - 新增 billing_config 和 special_params 配置字段 - 优化索引策略,包括复合索引和条件索引的创建 - 统一表注释格式和字段说明文档 - 移除过时的配置字段和冗余索引
Prompts-Core 模型历史会话服务
项目简介
Prompts-Core 是基于 Go 语言开发的模型历史会话管理服务,专注于为多模态 AI 对话系统提供高效的会话上下文存储、查询与清理能力。本服务原是提示词构建引擎,v2 版本的提示词构建职责已移交至模型网关服务(model-gateway),当前版本已降级为纯粹的历史会话中间件。
版本说明:v1 → v2(降级)
v1 原貌
v1 版本的核心链路为:
客户端 → prompts-core(提示词构建) → model-gateway(异步任务) → AI 模型
↑ ↓
prompts-core(回调处理) ← model-gateway(结果回调)
v1 集成了以下能力:
- 提示词构建引擎:通过 Prompt IR 中间表示,组合 System / History / User 分段,按多模型协议编译为对应厂商请求格式
- 用户表单与文件处理:支持表单拼接、Token 窗口自动分批、ZIP 解压、技能 Markdown 注入
- 多模型协议适配:通过协议配置表动态适配 OpenAI / DeepSeek / Qwen / Gemini / Anthropic 等
- 异步任务调度:创建推理任务、轮询状态、接收回调、通知业务方
- 会话历史管理:Redis ZSET + PostgreSQL 分层存储多轮对话
v2 变化
提示词构建的整体职责已移交至模型网关服务,涉及以下内容全部移除:
ComposeMessages提示词拼接接口GetComposeTask/Callback任务相关接口- Prompt IR 中间表示层与协议编译逻辑
- 用户表单 Token 分批与文件内容提取
- 外部技能 Markdown 注入
- 数据库
prompts_compose_task、prompts_provider_protocol不再使用
v2 调用链路变为:
客户端/业务方 → model-gateway(构建 + 推理) → AI 模型
model-gateway ──(回调)──→ prompts-core(写入会话历史)
客户端/业务方 ─────────────────────────→ prompts-core(查询/删除会话历史)
核心功能(v2)
1. 会话回调写入
- 地址:
POST /sessionCallback - 功能:接收模型网关回调,将当前轮的用户请求与模型回复写入 PostgreSQL 并同步缓存至 Redis ZSET
- 自动控制会话最大轮数与过期时间
2. 历史会话列表
- 地址:
GET /historyList(前端分页) - 功能:按当前用户分页查询历史会话轮次列表,返回每轮的 SessionId、NodeId、用户消息、助手回复、时间戳
3. 会话历史查询
- 地址:
GET /sessionHistory(服务调用) - 功能:按 SessionId + NodeId 查询完整历史消息列表,按时间排列
4. 历史消息获取
- 地址:
GET /historyMessages - 功能:供提示词拼接场景使用,按 SessionId + NodeId 获取历史 FlatMessage 列表
- 读取顺序:Redis → DB → 异步回种 Redis(缓存加速)
5. 消息删除
- 地址:
POST /deleteMessages - 功能:批量删除指定消息 ID,同步清理 Redis 与 PostgreSQL
6. 会话删除
- 地址:
POST /deleteSession - 功能:删除整个会话及其所有消息,同步清理 Redis 与 PostgreSQL
技术架构
| 层级 | 选型 |
|---|---|
| 开发语言 | Go 1.26.1 |
| Web 框架 | GoFrame v2.10.0 |
| 核心存储 | PostgreSQL(模型网关共用库,表 prompts_compose_session) |
| 会话缓存 | Redis(ZSET 结构,Key 格式 session:history:{tenantId}:{sessionId}:{nodeId}) |
| 服务注册 | Consul |
| 链路追踪 | Jaeger(OpenTelemetry OTLP) |
| 部署方式 | Docker(提供 Dockerfile) |
数据模型
prompts_compose_session(历史会话轮次表)
| 字段 | 类型 | 说明 |
|---|---|---|
| id | BIGINT | 主键 ID |
| tenant_id | BIGINT | 租户 ID |
| creator | VARCHAR(64) | 创建人 |
| created_at | TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | 更新时间 |
| deleted_at | TIMESTAMP | 软删除时间 |
| session_id | VARCHAR(64) | 会话 ID |
| node_id | VARCHAR(64) | 节点 ID |
| request_content | JSONB | 用户请求内容 |
| response_content | JSONB | 模型回复内容 |
| remark | VARCHAR(500) | 备注 |
快速开始
环境要求
Go 1.26+、Redis、PostgreSQL(依赖 model-gateway 库)
启动步骤
- 克隆项目代码,完成
config.yml中 Redis / PostgreSQL / Consul / Jaeger 地址配置 - 执行以下命令启动服务:
go run main.go
- 服务默认监听
:3009端口
请求认证
所有 API 需在请求头中携带以下信息:
Authorization:认证令牌X-User:当前用户标识
会话缓存机制
- 存储结构:Redis ZSET,以毫秒时间戳作为 score,以
HistoryRoundJSON 序列化字符串作为 member - 上限控制:配置项
session.maxRounds,默认 10 轮,写入时通过ZREMRANGEBYRANK自动裁剪 - 过期控制:配置项
session.expireTime,默认 1800 秒(30 分钟) - 读取策略:优先读 Redis 缓存,未命中则回查 PostgreSQL,查完后异步回种 Redis 为下次加速
- Key 粒度:
session:history:{tenantId}:{sessionId}:{nodeId},支持多节点多会话隔离
Languages
Go
98.1%
Dockerfile
1.9%