15 KiB
长期优化案例存储设计
目标
建立一套长期存储机制,把运行过程中的原始输入、关键约束、正式产物、过程摘要、LLM 审计摘要和发布后的效果反馈沉淀为可回看、可复用、可学习的优化案例库。
这套机制第一版覆盖两类案例:
文章优化案例:GEO 文章优化主流程产生的案例。人味文案优化案例:普通文案人味优化产生的案例。
案例库不仅是历史记录,也是效果学习库。它要能解释“当时为什么这样生成”,也要能继续记录“发布后表现如何”。
背景
当前项目已经有一部分长期数据能力:
- 文章优化会保存
article_jobs、事实卡、优化稿、QA 报告和导出路径。 - 文章导出在本地写入
data/exports/<jobId>/,Cloudflare 路径写入私有 R2。 - 发布表现校准已有发布记录、效果快照、评分 run 和校准事件模型。
- 人味文案优化当前是一次性 API,返回优化后文案、修改说明和 AI 味检查,但不落库。
现有结构能支撑文章优化,但缺少统一案例入口、跨类型列表、案例元数据、失败案例保留、LLM 审计摘要和人味文案长期记录。
范围
第一版包含:
- 统一优化案例库。
- 文章优化案例和人味文案优化案例两种案例类型。
- 优化时自动保存案例。
- 成功和失败案例都保存。
- 结果版本化,重新运行优化生成新版本。
- 案例列表和案例详情页。
- 客户、品牌、项目标签、备注等可选归属信息。
- 基础关键词搜索和常用筛选。
- 发布记录、效果快照和效果学习入口。
- 两类案例各自一套评分口径,但共用发布记录和效果快照结构。
第一版不包含:
- 用户账号、团队权限或多租户隔离。
- 平台 API 自动采集效果数据。
- 完整全文搜索引擎和搜索高亮。
- 案例硬删除。
- 人味文案优化导出文件快照。
- 默认长期保存完整 prompt/response。
核心决策
统一案例库
文章优化和人味文案优化都进入同一个优化案例库,通过案例类型筛选。
理由:
- 两类案例都包含原始输入、优化结果、LLM 审计摘要、归属信息和发布表现。
- 用户需要从一个地方检索和复用历史成果。
- 详情内容按类型拆分即可,不需要拆成两个入口。
自动保存
案例在优化流程中自动保存,不要求用户优化完成后再手动点击保存。
运行开始时创建案例记录,后续持续补充过程摘要、结果版本、审计摘要和错误状态。用户可以在完成后补标题、客户、品牌、项目标签和备注。
失败案例保留
失败的优化也保存为失败案例。
失败案例不进入正式产物区,但详情页展示:
- 原始输入。
- 失败阶段。
- 错误摘要。
- LLM 审计摘要。
- 已产生的过程摘要。
结果版本
同一案例重新运行优化时生成新的结果版本,不覆盖旧结果。
发布记录绑定结果版本,而不是绑定整个案例。效果快照继续绑定发布记录。
关系是:
优化案例 -> 结果版本 -> 发布记录 -> 效果快照 -> 校准结论
LLM 审计边界
默认长期保存 LLM 审计摘要,不保存完整 prompt/response。
审计摘要包含:
- provider。
- model。
- task。
- duration_ms。
- schema 校验状态。
- 错误摘要。
- 输入内容 hash。
- 输出内容 hash。
完整 prompt/response 只作为调试证据临时保留,并应有过期时间。第一版可以先不实现完整调试证据存储,但不能把完整 prompt/response 默认写入长期库。
数据保留边界
文章优化案例
长期保存:
- 原文标题和正文。
- 图片说明或链接。
- 目标发布平台。
- 用户补充要求。
- 事实卡。
- 最终优化稿。
- QA 报告。
- 评分结果。
- 导出文件快照。
- 过程摘要。
- LLM 审计摘要。
- 发布记录、效果快照和校准结论。
默认不长期保存:
- 每一轮草稿和 rewrite 全文。
- 完整 prompt/response。
- 前端流式事件原始流。
人味文案优化案例
长期保存:
- 原始文案。
- 优化目标。
- 修改强度。
- 补充要求。
- 发布目标。
- 优化后文案。
- 修改说明。
- AI 味检查。
- warnings。
- 过程摘要。
- LLM 审计摘要。
- 发布记录、效果快照和校准结论。
第一版不保存:
- Markdown/DOCX 导出文件快照。
- 完整 prompt/response。
过程摘要
过程摘要只保存可复盘的轻量信息:
- 阶段名。
- 开始和结束时间。
- 耗时。
- 状态。
- 失败规则或错误摘要。
- rewrite 轮次。
- 是否产出正式版本。
中间稿全文默认不保存。特殊样本保留更多过程内容可以作为后续能力。
概念模型
优化案例
统一案例库中的顶层记录。
公共字段:
idcase_type:article或human_copytitlesummarystatus:running、optimized、failed、archivedcustomer_namebrand_nameproject_tagsnotescreated_atupdated_atarchived_at
customer_name、brand_name、project_tags 和 notes 第一版都可选,允许优化完成后补录和编辑。
案例输入
保存每个案例的原始输入和约束信息。
文章优化输入包含:
source_titlesource_bodyimage_inputspublish_platformuser_instructionsfact_card
人味文案输入包含:
source_textgoalintensityuser_instructionspublish_target
结果版本
一次成功优化产出的正式产物版本。
公共字段:
idcase_idversionstatusresult_summaryprocess_summarycreated_at
文章优化版本包含:
- 优化稿结构化结果。
- QA 报告。
- 评分 run。
- 导出文件快照引用。
人味文案版本包含:
optimized_textchange_notesai_taste_checkswarnings- 人味文案评分 run。
发布记录
发布记录绑定到某个结果版本。
字段包含:
result_version_idpublish_targeturlpublished_atstatusnotes
文章优化和人味文案优化共用这套概念。
效果快照
效果快照绑定发布记录。
第一版以手动表现录入为主,保留来源字段:
source:manual或未来的adapter:<name>window_labelmetricsfeedback_summaryraw_referencesnapshot_at
与现有模型的关系
文章优化
现有 article_jobs、fact_cards、optimized_articles、qa_reports 和导出存储仍可作为文章优化的底层实现。
第一版实现时建议引入统一案例元数据层,并让文章优化创建案例时关联现有 article job:
- 新增统一案例记录。
article_jobs关联case_id。optimized_articles.revision对应文章案例的结果版本号。qa_reports继续按文章结果版本保存。- 现有导出路径继续作为文章结果版本的导出文件快照。
这样可以避免一次性重写文章优化主链路。
人味文案优化
人味文案优化当前接口可以保留技术路由名 POST /api/copy/renwei-optimize,但产品文案统一使用“人味文案优化”。
第一版要把一次性 API 改为自动创建案例:
- 请求开始时创建
human_copy案例。 - 保存原始文案、优化目标、强度、补充要求和发布目标。
- 成功后保存结果版本,包含优化后文案、修改说明、AI 味检查和 warnings。
- 失败时保存失败案例和错误摘要。
发布和效果
当前发布记录以文章 job 和 revision 为核心。统一案例库需要把发布记录的业务语义提升为“绑定结果版本”。
实现可以选择兼容迁移路径:
- 为发布记录增加统一结果版本引用。
- 文章旧字段保留兼容,逐步迁移到结果版本引用。
- 新的人味文案发布记录直接绑定结果版本。
效果快照继续绑定发布记录。
页面设计
入口
新增 案例库 入口。
案例库是一个工作台页面,不是营销页。默认展示案例列表。
案例列表
默认列:
- 标题/摘要。
- 案例类型。
- 客户/品牌。
- 项目标签。
- 发布目标。
- 状态。
- 创建时间。
- 最近更新时间。
默认隐藏归档案例。
搜索和筛选:
- 关键词搜索:标题、原文摘要、结果摘要、客户、品牌、备注。
- 筛选:案例类型、状态、发布目标、项目标签、创建时间。
- 第一版不做完整全文搜索引擎和高亮。
案例详情
详情页采用共享头部 + 类型专属模块。
共享头部:
- 标题。
- 案例类型。
- 状态。
- 客户/品牌。
- 项目标签。
- 备注。
- 创建和更新时间。
- 最新结果版本。
- LLM 审计摘要概览。
- 归档/恢复操作。
共享区域:
- 结果版本列表。
- 发布记录。
- 效果快照。
- 校准结论。
- 重新运行优化。
文章优化专属模块:
- 原文标题和正文。
- 图片输入。
- 目标平台和补充要求。
- 事实卡。
- 当前版本优化稿。
- QA 报告。
- 导出链接。
人味文案专属模块:
- 原始文案。
- 优化目标。
- 修改强度。
- 补充要求。
- 发布目标。
- 优化后文案。
- 修改说明。
- AI 味检查。
- warnings。
失败案例详情:
- 显示失败状态。
- 显示失败阶段和错误摘要。
- 显示原始输入和 LLM 审计摘要。
- 不展示正式产物区。
- 允许从失败案例重新运行优化,成功后生成新结果版本。
API 设计
新增案例库 API:
GET /api/cases
GET /api/cases/:caseId
PATCH /api/cases/:caseId
POST /api/cases/:caseId/archive
POST /api/cases/:caseId/restore
POST /api/cases/:caseId/rerun
发布和效果 API:
POST /api/cases/:caseId/versions/:versionId/publications
GET /api/cases/:caseId/versions/:versionId/publications
POST /api/publications/:publicationId/performance
现有文章优化接口继续保留,但需要在运行过程中自动创建和更新案例:
POST /api/jobs/optimize-stream
POST /api/jobs
POST /api/jobs/:jobId/optimize
现有人味文案接口保留技术路径,但响应中增加案例信息:
POST /api/copy/renwei-optimize
成功响应应包含:
{
"case": {
"id": "case_xxx",
"case_type": "human_copy"
},
"result_version": {
"id": "ver_xxx",
"version": 1
},
"result": {}
}
失败响应仍返回明确错误,同时案例库中留下失败案例。
状态规则
案例状态:
running:优化已开始但尚未完成。optimized:至少有一个成功结果版本。failed:当前运行失败且没有成功结果版本,或最近一次运行失败。archived:从默认列表隐藏但仍保留记录。
结果版本状态:
optimized:成功产出正式产物。failed:本次运行失败,没有正式产物。
如果一个已有成功版本的案例重新运行失败,案例仍保留历史成功版本;详情页提示最近一次运行失败。
评分口径
文章优化和人味文案优化使用不同评分口径。
文章优化评分继续关注:
- 事实一致性。
- 平台适配。
- 搜索意图匹配。
- 答案密度。
- 信任信号质量。
- 可读性。
人味文案优化评分新增独立口径,建议关注:
- 改动克制。
- 原意保真。
- 语气自然度。
- 目标匹配。
- AI 味风险。
- 互动或转化表现。
发布记录和效果快照共用结构,但评分 run 必须记录自己的 rubric 版本。
错误处理
- API 访问密钥继续沿用现有
x-api-key规则。 - 案例创建失败时,本次优化应返回明确错误,不继续产生孤立结果。
- LLM 失败时保存失败阶段和错误摘要。
- schema 校验失败时保存校验摘要,不保存完整 response。
- 导出文件写入失败时,文章案例可以保存结构化结果并标记导出失败。
- 发布记录必须绑定存在的结果版本,否则返回
409或404。 - 效果快照必须绑定存在的发布记录,否则返回
404。
测试计划
单元测试:
- 案例类型校验接受
article和human_copy。 - 案例元数据允许客户、品牌、项目标签和备注为空。
- 人味文案结果校验包含优化后文案、修改说明、AI 味检查和 warnings。
- LLM 审计摘要不包含完整 prompt/response。
- 结果版本号重新运行时递增。
Repository 测试:
- 可以创建文章优化案例。
- 可以创建人味文案优化案例。
- 可以保存失败案例。
- 可以保存多个结果版本并按版本倒序读取。
- 发布记录绑定结果版本。
- 效果快照绑定发布记录。
- 归档案例默认不出现在普通列表。
API 测试:
- 文章优化成功后可以在案例列表查到。
- 人味文案优化成功后可以在案例列表查到。
- LLM 失败后可以查到失败案例。
PATCH /api/cases/:caseId可以补录客户、品牌、项目标签和备注。POST /api/cases/:caseId/archive后默认列表隐藏该案例。POST /api/cases/:caseId/rerun生成新结果版本,不覆盖旧版本。
组件测试:
- 案例列表展示默认列。
- 案例列表支持类型、状态、发布目标、项目标签和时间筛选。
- 文章案例详情展示事实卡、QA、导出链接和效果学习入口。
- 人味文案案例详情展示修改说明、AI 味检查和效果学习入口。
- 失败案例详情展示失败阶段和错误摘要,不展示正式产物区。
E2E 测试:
- 完成一次文章优化后进入案例库,能打开详情并下载文章导出文件。
- 完成一次人味文案优化后进入案例库,能打开详情并查看修改说明。
- 给案例补项目标签和备注后,列表可搜索或筛选到。
- 从详情页重新运行优化后出现新结果版本。
- 为某个结果版本录入发布记录和手动效果快照后,详情页显示效果学习信息。
验证命令:
npm run lint
npm test
npm run build
迁移策略
第一步先服务新产生的案例,不要求立即迁移所有旧数据。
推荐顺序:
- 增加统一案例元数据和结果版本能力。
- 让文章优化新请求自动创建案例,并关联现有 article job。
- 让人味文案优化新请求自动创建案例和结果版本。
- 增加案例列表和详情页。
- 将发布记录和效果快照入口接到结果版本。
- 再评估是否需要把历史
article_jobs批量补成案例。
历史数据迁移可以延后,因为当前主要目标是让后续运行不再丢失长期资产。
不做范围
- 不做账号、角色和权限。
- 不做平台 API 自动采集。
- 不做人味文案导出文件快照。
- 不默认保存完整 prompt/response。
- 不做全文搜索引擎。
- 不做硬删除。
- 不把失败案例当作正式产物。
- 不把两类案例强行合并为同一套评分口径。