docs(readme): 更新项目文档为智能模型网关

chore(database): 优化模型配置表结构和索引设计

- 重新设计 model_gateway_models 表的字段结构和约束
- 新增 billing_config 和 special_params 配置字段
- 优化索引策略,包括复合索引和条件索引的创建
- 统一表注释格式和字段说明文档
- 移除过时的配置字段和冗余索引
This commit is contained in:
WangLiZhao
2026-07-07 09:47:31 +08:00
parent 87a29cae3e
commit 5de859582c
2 changed files with 211 additions and 164 deletions
+104 -40
View File
@@ -1,54 +1,118 @@
# Prompts-Core 提示词核心服务
# Prompts-Core 模型历史会话服务
## 项目简介
Prompts-Core 是基于 Go 语言开发的**多模态 AI 提示词构建与管理系统**,专注于统一管理各类 AI 模型的提示词模板、维护智能会话上下文、适配主流模型协议,并支持文件解析与外部技能集成,为 AI 应用提供标准化、高效的提示词服务
Prompts-Core 是基于 Go 语言开发的**模型历史会话管理服务**,专注于为多模态 AI 对话系统提供高效的会话上下文存储、查询与清理能力。本服务原是**提示词构建引擎**,v2 版本的提示词构建职责已移交至**模型网关服务(model-gateway)**,当前版本已降级为纯粹的**历史会话中间件**
## 核心功能
1. **提示词构建引擎**
支持文字/图片/音频/向量化/全模态 5 类任务提示词生成,提供完整流程、分步节点两种构建模式,支持超大内容按 Token 自动分批处理。
2. **智能会话管理**
基于缓存实现高效会话存储,自动控制会话轮数与过期时间,保障上下文连贯性。
3. **多模型协议适配**
动态适配 OpenAI、DeepSeek、Qwen、Gemini 等主流 AI 模型协议,支持角色、字段、消息顺序灵活映射。
4. **文件与技能集成**
自动提取文本、ZIP 压缩包内容,支持加载外部 Markdown 技能配置,扩展服务能力。
5. **异步任务调度**
支持异步任务处理、状态轮询与回调通知,自带可配置重试机制。
## 版本说明: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.0
- Web 框架:GoFrame v2.10.0
- 核心存储:Redis(会话缓存)
- 服务组件:Consul(服务注册)、Jaeger(链路追踪)
- 调用链路:客户端 → Prompts-Core → 模型网关 → AI 模型
| 层级 | 选型 |
|---|---|
| 开发语言 | 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、已部署模型网关服务
Go 1.26+、Redis、PostgreSQL(依赖 model-gateway 库)
### 启动步骤
1. 克隆项目代码
2. 完成项目配置文件修改
3. 执行命令启动服务:
1. 克隆项目代码,完成 `config.yml` 中 Redis / PostgreSQL / Consul / Jaeger 地址配置
2. 执行以下命令启动服务:
```bash
go run main.go
```
3. 服务默认监听 `:3009` 端口
## API 接口
### 基础信息
- 服务地址:`http://{host}:3009`
- 请求类型:`application/json`
- 认证方式:请求头携带 `Authorization``X-User`
### 请求认证
所有 API 需在请求头中携带以下信息:
- `Authorization`:认证令牌
- `X-User`:当前用户标识
### 核心接口
1. **提示词拼接接口**
- 地址:`POST /composeMessages`
- 功能:构建提示词并调用模型服务,同步返回结果
2. **任务状态查询**
- 地址:`GET /getComposeTask`
- 功能:根据任务 ID 查询处理状态与结果
3. **任务回调接口**
- 地址:`GET /composeMessagesCallback/prompts-core`
- 功能:接收模型服务处理完成回调
4. **会话同步接口**
- 地址:`POST /sessionCallback`
- 功能:同步更新会话上下文历史
## 会话缓存机制
- **存储结构**:Redis ZSET,以毫秒时间戳作为 score,以 `HistoryRound` JSON 序列化字符串作为 member
- **上限控制**:配置项 `session.maxRounds`,默认 10 轮,写入时通过 `ZREMRANGEBYRANK` 自动裁剪
- **过期控制**:配置项 `session.expireTime`,默认 1800 秒(30 分钟)
- **读取策略**:优先读 Redis 缓存,未命中则回查 PostgreSQL,查完后异步回种 Redis 为下次加速
- **Key 粒度**`session:history:{tenantId}:{sessionId}:{nodeId}`,支持多节点多会话隔离
+107 -124
View File
@@ -1,134 +1,117 @@
-- prompts_compose_task 提示词任务记录表
CREATE TABLE IF NOT EXISTS prompts_compose_task (
id BIGINT PRIMARY KEY,
tenant_id BIGINT NOT NULL DEFAULT 0,
creator VARCHAR(64) NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updater VARCHAR(64) NOT NULL,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted_at TIMESTAMP(6),
-- ============================================
-- 提示词服务 (prompts-core) 建表语句
-- ============================================
task_id VARCHAR(64) NOT NULL,
model_name VARCHAR(128) NOT NULL DEFAULT '',
skill_name VARCHAR(128) NOT NULL DEFAULT '',
build_type INT NOT NULL DEFAULT 0,
callback_url VARCHAR(512) NOT NULL DEFAULT '',
gateway_state INT NOT NULL DEFAULT 0,
request_payload JSONB NOT NULL DEFAULT '{}'::jsonb,
result_text TEXT NOT NULL DEFAULT '',
messages JSONB NOT NULL DEFAULT '{}'::jsonb,
status VARCHAR(32) NOT NULL DEFAULT 'pending',
error_message TEXT NOT NULL DEFAULT '',
oss_file VARCHAR(1024) NOT NULL DEFAULT '',
file_type VARCHAR(64) NOT NULL DEFAULT ''
-- 1. 提示词历史会话表
CREATE TABLE "public"."prompts_compose_session" (
"id" int8 NOT NULL,
"tenant_id" int8 NOT NULL DEFAULT 0,
"creator" varchar(64) COLLATE "pg_catalog"."default" NOT NULL,
"created_at" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updater" varchar(64) COLLATE "pg_catalog"."default" NOT NULL,
"updated_at" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"deleted_at" timestamp(6),
"session_id" varchar(64) COLLATE "pg_catalog"."default" NOT NULL,
"request_content" jsonb NOT NULL DEFAULT '{}'::jsonb,
"response_content" jsonb NOT NULL DEFAULT '{}'::jsonb,
"remark" varchar(500) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying,
"node_id" varchar(64) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying,
CONSTRAINT "prompts_compose_session_pkey" PRIMARY KEY ("id")
);
ALTER TABLE "public"."prompts_compose_session" OWNER TO "postgres";
CREATE INDEX "idx_compose_session_creator_session_created" ON "public"."prompts_compose_session" USING btree (
"creator", "session_id", "created_at" DESC
);
-- 索引
CREATE UNIQUE INDEX IF NOT EXISTS uk_prompts_compose_task_task_id ON prompts_compose_task(task_id);
CREATE INDEX IF NOT EXISTS idx_prompts_compose_task_status ON prompts_compose_task(status);
CREATE INDEX IF NOT EXISTS idx_prompts_compose_task_deleted_at ON prompts_compose_task(deleted_at);
CREATE INDEX "idx_compose_session_session_id" ON "public"."prompts_compose_session" USING btree ("session_id");
-- 注释
COMMENT ON TABLE prompts_compose_task IS '提示词任务记录表';
COMMENT ON COLUMN prompts_compose_task.id IS '主键ID';
COMMENT ON COLUMN prompts_compose_task.tenant_id IS '租户ID';
COMMENT ON COLUMN prompts_compose_task.creator IS '创建人';
COMMENT ON COLUMN prompts_compose_task.created_at IS '创建时间';
COMMENT ON COLUMN prompts_compose_task.updater IS '更新人';
COMMENT ON COLUMN prompts_compose_task.updated_at IS '更新时间';
COMMENT ON COLUMN prompts_compose_task.deleted_at IS '删除时间(软删)';
COMMENT ON COLUMN prompts_compose_task.task_id IS 'model-gateway 任务ID';
COMMENT ON COLUMN prompts_compose_task.model_name IS '业务模型名称';
COMMENT ON COLUMN prompts_compose_task.skill_name IS '技能名称';
COMMENT ON COLUMN prompts_compose_task.build_type IS '构建类型:0默认/1提示词构建/2节点构建';
COMMENT ON COLUMN prompts_compose_task.callback_url IS '回调地址';
COMMENT ON COLUMN prompts_compose_task.gateway_state IS 'model-gateway 状态:0排队/1执行/2成功/3失败/4已下载';
COMMENT ON COLUMN prompts_compose_task.request_payload IS '发给 model-gateway 的请求内容';
COMMENT ON COLUMN prompts_compose_task.result_text IS '回调返回的文本结果';
COMMENT ON COLUMN prompts_compose_task.messages IS '最终解析后的 messages';
COMMENT ON COLUMN prompts_compose_task.status IS '业务状态:pending/success/failed';
COMMENT ON COLUMN prompts_compose_task.error_message IS '业务错误信息';
COMMENT ON COLUMN prompts_compose_task.oss_file IS '网关返回的结果文件地址';
COMMENT ON COLUMN prompts_compose_task.file_type IS '结果文件类型';
CREATE INDEX "idx_prompts_compose_session_deleted_at" ON "public"."prompts_compose_session" USING btree ("deleted_at");
COMMENT ON TABLE "public"."prompts_compose_session" IS '提示词历史会话表';
COMMENT ON COLUMN "public"."prompts_compose_session"."session_id" IS '会话ID';
COMMENT ON COLUMN "public"."prompts_compose_session"."node_id" IS '节点ID';
COMMENT ON COLUMN "public"."prompts_compose_session"."request_content" IS '请求内容(JSON格式)';
COMMENT ON COLUMN "public"."prompts_compose_session"."response_content" IS '返回内容(JSON格式)';
COMMENT ON COLUMN "public"."prompts_compose_session"."remark" IS '备注';
-- prompts_compose_session 提示词历史会话表
CREATE TABLE IF NOT EXISTS prompts_compose_session (
id BIGINT NOT NULL,
tenant_id BIGINT NOT NULL DEFAULT 0,
creator VARCHAR(64) NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updater VARCHAR(64) NOT NULL,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted_at TIMESTAMP(6),
session_id VARCHAR(64) NOT NULL,
request_content JSONB NOT NULL DEFAULT '{}'::jsonb,
response_content JSONB NOT NULL DEFAULT '{}'::jsonb,
remark VARCHAR(500) NOT NULL DEFAULT ''
-- 2. 模型协议配置表
CREATE TABLE "public"."prompts_provider_protocol" (
"id" int8 NOT NULL,
"tenant_id" int8 NOT NULL DEFAULT 0,
"creator" varchar(64) COLLATE "pg_catalog"."default" NOT NULL,
"created_at" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updater" varchar(64) COLLATE "pg_catalog"."default" NOT NULL,
"updated_at" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"deleted_at" timestamp(6),
"provider_name" varchar(64) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying,
"request_template" jsonb NOT NULL DEFAULT '{}'::jsonb,
"system_prompt_template" text COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::text,
"status" int4 NOT NULL DEFAULT 1,
CONSTRAINT "prompts_provider_protocol_pkey" PRIMARY KEY ("id")
);
-- 索引
CREATE INDEX IF NOT EXISTS idx_prompts_compose_session_session_id ON prompts_compose_session(session_id);
CREATE INDEX IF NOT EXISTS idx_prompts_compose_session_deleted_at ON prompts_compose_session(deleted_at);
-- 注释
COMMENT ON TABLE prompts_compose_session IS '提示词历史会话表';
COMMENT ON COLUMN prompts_compose_session.id IS '主键ID';
COMMENT ON COLUMN prompts_compose_session.tenant_id IS '租户ID';
COMMENT ON COLUMN prompts_compose_session.creator IS '创建人';
COMMENT ON COLUMN prompts_compose_session.created_at IS '创建时间';
COMMENT ON COLUMN prompts_compose_session.updater IS '更新人';
COMMENT ON COLUMN prompts_compose_session.updated_at IS '更新时间';
COMMENT ON COLUMN prompts_compose_session.deleted_at IS '删除时间(软删)';
COMMENT ON COLUMN prompts_compose_session.session_id IS '会话ID';
COMMENT ON COLUMN prompts_compose_session.request_content IS '请求内容(JSON格式)';
COMMENT ON COLUMN prompts_compose_session.response_content IS '返回内容(JSON格式)';
COMMENT ON COLUMN prompts_compose_session.remark IS '备注';
ALTER TABLE "public"."prompts_provider_protocol" OWNER TO "postgres";
CREATE INDEX "idx_provider_protocol_provider_status" ON "public"."prompts_provider_protocol" USING btree (
"provider_name", "status"
);
COMMENT ON TABLE "public"."prompts_provider_protocol" IS '模型协议映射配置表';
COMMENT ON COLUMN "public"."prompts_provider_protocol"."provider_name" IS '运营商名称';
COMMENT ON COLUMN "public"."prompts_provider_protocol"."request_template" IS '请求模板(含 {_system_} / {_user_} 占位符)';
COMMENT ON COLUMN "public"."prompts_provider_protocol"."system_prompt_template" IS '系统提示词模板(含 %s 输出结构占位符)';
COMMENT ON COLUMN "public"."prompts_provider_protocol"."status" IS '状态:1启用/0禁用';
-- prompts_provider_protocol 模型协议映射配置表
CREATE TABLE IF NOT EXISTS prompts_provider_protocol (
id BIGINT PRIMARY KEY,
tenant_id BIGINT NOT NULL DEFAULT 0,
creator VARCHAR(64) NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updater VARCHAR(64) NOT NULL,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted_at TIMESTAMP(6),
provider_name VARCHAR(64) NOT NULL DEFAULT '',
target_field VARCHAR(64) NOT NULL DEFAULT '',
merge_order JSONB NOT NULL DEFAULT '[]'::jsonb,
role_mapping JSONB NOT NULL DEFAULT '{}'::jsonb,
content_mapping JSONB NOT NULL DEFAULT '{}'::jsonb,
capabilities JSONB NOT NULL DEFAULT '{}'::jsonb,
request_template JSONB NOT NULL DEFAULT '{}'::jsonb,
system_prompt_template TEXT NOT NULL DEFAULT '',
user_prompt_template TEXT NOT NULL DEFAULT '',
status INT NOT NULL DEFAULT 1,
remark VARCHAR(500) NOT NULL DEFAULT ''
-- 3. 提示词任务记录表
CREATE TABLE "public"."prompts_compose_task" (
"id" int8 NOT NULL,
"tenant_id" int8 NOT NULL DEFAULT 0,
"creator" varchar(64) COLLATE "pg_catalog"."default" NOT NULL,
"created_at" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updater" varchar(64) COLLATE "pg_catalog"."default" NOT NULL,
"updated_at" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"deleted_at" timestamp(6),
"task_id" varchar(64) COLLATE "pg_catalog"."default" NOT NULL,
"model_name" varchar(128) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying,
"skill_name" varchar(128) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying,
"build_type" int4 NOT NULL DEFAULT 0,
"callback_url" varchar(512) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying,
"gateway_state" int4 NOT NULL DEFAULT 0,
"request_payload" jsonb NOT NULL DEFAULT '{}'::jsonb,
"result_json" jsonb NOT NULL DEFAULT '{}'::jsonb,
"status" varchar(32) COLLATE "pg_catalog"."default" NOT NULL DEFAULT 'pending'::character varying,
"error_message" text COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::text,
"oss_file" varchar(1024) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying,
"file_type" varchar(64) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying,
CONSTRAINT "prompts_compose_task_pkey" PRIMARY KEY ("id")
);
-- 索引
CREATE INDEX IF NOT EXISTS idx_prompts_provider_protocol_provider_name ON prompts_provider_protocol(provider_name);
CREATE INDEX IF NOT EXISTS idx_prompts_provider_protocol_status ON prompts_provider_protocol(status);
CREATE INDEX IF NOT EXISTS idx_prompts_provider_protocol_deleted_at ON prompts_provider_protocol(deleted_at);
-- 注释
COMMENT ON TABLE prompts_provider_protocol IS '模型协议映射配置表';
COMMENT ON COLUMN prompts_provider_protocol.id IS '主键ID';
COMMENT ON COLUMN prompts_provider_protocol.tenant_id IS '租户ID';
COMMENT ON COLUMN prompts_provider_protocol.creator IS '创建人';
COMMENT ON COLUMN prompts_provider_protocol.created_at IS '创建时间';
COMMENT ON COLUMN prompts_provider_protocol.updater IS '更新人';
COMMENT ON COLUMN prompts_provider_protocol.updated_at IS '更新时间';
COMMENT ON COLUMN prompts_provider_protocol.deleted_at IS '删除时间(软删)';
COMMENT ON COLUMN prompts_provider_protocol.provider_name IS '运营商名称(openai/deepseek/qwen/anthropic/gemini等)';
COMMENT ON COLUMN prompts_provider_protocol.target_field IS '目标字段(messages/contents/prompt';
COMMENT ON COLUMN prompts_provider_protocol.merge_order IS 'Prompt IR 拼接顺序(system/history/user';
COMMENT ON COLUMN prompts_provider_protocol.role_mapping IS '角色映射(system/user/assistant -> provider role';
COMMENT ON COLUMN prompts_provider_protocol.content_mapping IS '内容字段映射(content/parts.text等)';
COMMENT ON COLUMN prompts_provider_protocol.capabilities IS '协议能力配置(system/history/tools/stream等支持情况)';
COMMENT ON COLUMN prompts_provider_protocol.request_template IS '请求模板(JSON结构模板)';
COMMENT ON COLUMN prompts_provider_protocol.system_prompt_template IS '系统提示词模板';
COMMENT ON COLUMN prompts_provider_protocol.status IS '状态:1启用/0禁用';
COMMENT ON COLUMN prompts_provider_protocol.remark IS '备注';
ALTER TABLE "public"."prompts_compose_task" OWNER TO "postgres";
CREATE INDEX "idx_prompts_compose_task_creator_created" ON "public"."prompts_compose_task" USING btree (
"creator", "created_at" DESC
);
CREATE INDEX "idx_prompts_compose_task_deleted_at" ON "public"."prompts_compose_task" USING btree ("deleted_at");
CREATE INDEX "idx_prompts_compose_task_status" ON "public"."prompts_compose_task" USING btree ("status") WHERE deleted_at IS NULL;
CREATE UNIQUE INDEX "uk_prompts_compose_task_task_id" ON "public"."prompts_compose_task" USING btree ("task_id");
COMMENT ON TABLE "public"."prompts_compose_task" IS '提示词任务记录表';
COMMENT ON COLUMN "public"."prompts_compose_task"."task_id" IS 'model-gateway 任务ID';
COMMENT ON COLUMN "public"."prompts_compose_task"."model_name" IS '业务模型名称';
COMMENT ON COLUMN "public"."prompts_compose_task"."skill_name" IS '技能名称';
COMMENT ON COLUMN "public"."prompts_compose_task"."build_type" IS '构建类型:0默认/1提示词构建/2节点构建';
COMMENT ON COLUMN "public"."prompts_compose_task"."callback_url" IS '回调地址';
COMMENT ON COLUMN "public"."prompts_compose_task"."gateway_state" IS 'model-gateway 状态:0排队/1执行/2成功/3失败/4已下载';
COMMENT ON COLUMN "public"."prompts_compose_task"."request_payload" IS '发给 model-gateway 的请求内容';
COMMENT ON COLUMN "public"."prompts_compose_task"."result_json" IS '回调返回结果json';
COMMENT ON COLUMN "public"."prompts_compose_task"."status" IS '业务状态:pending/success/failed';
COMMENT ON COLUMN "public"."prompts_compose_task"."error_message" IS '业务错误信息';
COMMENT ON COLUMN "public"."prompts_compose_task"."oss_file" IS '网关返回的结果文件地址';
COMMENT ON COLUMN "public"."prompts_compose_task"."file_type" IS '结果文件类型';