WangLiZhao 5de859582c docs(readme): 更新项目文档为智能模型网关
chore(database): 优化模型配置表结构和索引设计

- 重新设计 model_gateway_models 表的字段结构和约束
- 新增 billing_config 和 special_params 配置字段
- 优化索引策略,包括复合索引和条件索引的创建
- 统一表注释格式和字段说明文档
- 移除过时的配置字段和冗余索引
2026-07-07 09:47:31 +08:00
2026-06-25 17:05:13 +08:00
2026-04-28 14:00:19 +08:00
2026-06-22 11:00:03 +08:00
2026-06-10 16:32:42 +08:00
2026-06-25 14:54:01 +08:00
2026-06-25 14:54:01 +08:00
2026-06-10 16:32:42 +08:00

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_taskprompts_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
会话缓存 RedisZSET 结构,Key 格式 session:history:{tenantId}:{sessionId}:{nodeId}
服务注册 Consul
链路追踪 JaegerOpenTelemetry 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 库)

启动步骤

  1. 克隆项目代码,完成 config.yml 中 Redis / PostgreSQL / Consul / Jaeger 地址配置
  2. 执行以下命令启动服务:
go run main.go
  1. 服务默认监听 :3009 端口

请求认证

所有 API 需在请求头中携带以下信息:

  • Authorization:认证令牌
  • X-User:当前用户标识

会话缓存机制

  • 存储结构:Redis ZSET,以毫秒时间戳作为 score,以 HistoryRound JSON 序列化字符串作为 member
  • 上限控制:配置项 session.maxRounds,默认 10 轮,写入时通过 ZREMRANGEBYRANK 自动裁剪
  • 过期控制:配置项 session.expireTime,默认 1800 秒(30 分钟)
  • 读取策略:优先读 Redis 缓存,未命中则回查 PostgreSQL,查完后异步回种 Redis 为下次加速
  • Key 粒度session:history:{tenantId}:{sessionId}:{nodeId},支持多节点多会话隔离
S
Description
No description provided
Readme
297 KiB
Languages
Go 98.1%
Dockerfile 1.9%