产物智能推荐功能设计
利用 AI 多维度分析的智能产物推荐与案例库自动发布方案
背景
系统已有发布中心和案例库能力,但需要用户主动创建发布页、选择产物并决定是否公开。很多会话中生成的 HTML 或 Markdown 业务产物具备沉淀价值,但用户不一定意识到,也不愿意手动整理发布。
本方案在会话完成后的工作区导出阶段,自动分析 .html / .md 产物,发现最多一个高价值成果,并在产物面板中提供一键发布到案例库的入口。
产品边界
- 首版只分析会话工作区中的
.html/.md文件。 - 每个会话同一时间最多展示一个主推荐卡片。
- 推荐分析只判断业务价值,不做敏感信息或隐私风险扫描。
- 用户侧不展示评分数字,不展示风险提示文案。
- 推荐分析不生成标签,标签继续由发布中心现有标签生成逻辑处理。
- 不改变 Agent 的提示词和生成行为,推荐是后处理能力。
- 为避免模板化产物反复推荐和污染公开案例库,首版按产物结构计算模板族指纹,并在 AI 分析前过滤已推荐或已公开的同模板族候选。
- 案例库定位是企业业务案例库;游戏、娱乐页、纯个人内容、通用无业务指向工具、纯技术 demo、代码项目说明、README、API 文档等不推荐。
- 定时任务和外部接口类型对话不启用产物推荐。
推荐质量门槛
一个产物必须同时满足以下门槛,才可以推荐:
- 成品性:不是草稿、中间文件、组件 demo、纯样式展示、空壳页面或未完成模板。
- 内容质量:有明确主题和实质信息,不能只有目录、占位文本、套话、空泛结论或逻辑混乱内容。
- 呈现质量:适合公开阅读或体验。HTML 需要布局清楚、层次可读、功能/交互基本完整;Markdown 需要结构清楚、章节完整、表达可读。
- 企业业务价值:能给企业业务场景提供参考、灵感或复用价值;不要求外部读者完整理解全部私有上下文,但必须能看出主旨和启发点。
推荐价值可以来自:
- 内容价值:分析、结论、建议、方案、流程、数据解读。
- 表达价值:结构清晰、呈现方式好、适合借鉴。
- 形态价值:面向企业业务场景的页面、看板、工具或小应用原型完整可体验。
排除信号:
TODO、待补充、占位、示例数据、lorem ipsum- 空表格、空图表、图片加载失败、明显不可用按钮或链接
coming soon、施工中、只有模板框架- 代码 README、CHANGELOG、API 文档、部署说明、技术接入说明、代码结构说明
- 游戏、娱乐页、纯个人内容、通用无业务指向小工具、纯技术 demo、单纯 UI 组件展示
首版不做浏览器截图、OCR、视觉模型或像素级布局检查。HTML/Markdown 的呈现质量由 AI 基于正文摘要和结构摘要判断。
用户触达
推荐卡片放在右侧或移动端「产物」Tab 顶部,位于文件统计和文件列表上方。
会话运行中默认展示电脑面板;会话完成后,如果用户没有手动切换面板,系统会自动切到「产物」Tab。因此推荐卡片会出现在用户查看产物的第一视野内。
卡片状态:
recommended:展示推荐标题、文件路径、描述、分类、推荐理由,提供「预览」「发布到案例库」「忽略」。published:展示「已发布到案例库」「自动更新中」、最近发布时间和版本数,提供「打开案例」「撤回公开」。retracted:展示「已撤回公开」,提供「重新公开」。pending/failed:不展示,避免打扰用户。
「产物」Tab 可展示轻量数量标识,例如 产物 · 1。
发布与多轮更新
用户第一次点击「发布到案例库」后,系统直接创建发布中心并发布,无二次确认、无发布前编辑。
发布中心字段:
source_type=existing_sessionsource_session_id=当前会话default_entry_path=推荐文件路径auto_publish_enabled=truepublic_to_board_enabled=truename/description/category使用推荐分析结果publish_key复用现有自动生成逻辑
发布后,用户后续继续同一会话时,同一路径产物自动更新案例库:
- 使用
source_session_id + default_entry_path作为确定性身份。 - 不再调用 AI 判断主题或用途是否一致。
- 文件内容 hash 不变则跳过。
- hash 变化则追加发布中心版本,并更新案例库最新版本。
撤回公开时:
- 设置
public_to_board_enabled=false - 设置
auto_publish_enabled=false - 保留发布中心和历史版本
重新公开时:
- 恢复
public_to_board_enabled=true - 恢复
auto_publish_enabled=true - 立即发布当前同路径最新版本
忽略规则
- 用户忽略某一路径后,同一会话同一路径不再推荐。
- 如果后续出现不同路径且达到推荐阈值的高价值产物,可以展示新的推荐。
- 用户撤回公开不等于忽略,只保留原卡片的重新公开入口。
模板族去重
为解决同一 Skill 或同一能力组合在多个新会话中反复生成类似产物的问题,推荐分析在候选预筛之后、AI 分析之前计算产物模板族指纹 artifact_family_hash。
模板族指纹只描述产物结构,不描述业务正文:
- HTML:使用标准库解析标签结构、标题层级、主要组件数量和布局骨架,忽略正文、数字、时间、URL、文件名等变化内容。
- Markdown:扫描标题层级、表格、列表、代码块、图片、链接等文档骨架,忽略正文、数字、时间、路径和标题具体文本。
- HTML 与 Markdown 使用不同算法和类型前缀,例如
html:<hash>、md:<hash>。 - 指纹算法首版偏宽松,优先减少重复推荐;同模板下不同业务主题可能不再自动推荐,用户仍可手动发布。
- 指纹计算失败时降级为
null,该候选不参与模板族去重,但仍可进入 AI 分析。
候选过滤规则:
- 同一次分析中,多个候选属于同一模板族时,只保留预筛排序最高的候选。
- 用户级去重:同一用户只要曾经展示过同
artifact_family_hash的推荐,后续不再自动推荐该模板族。 - 全站级去重:如果同
artifact_family_hash当前已有推荐来源创建且仍公开到案例库的发布中心,后续所有用户都不再自动推荐该模板族。 - 全站级去重只压制当前仍公开的模板族;公开案例撤回或删除后,压制自然解除。
- 过滤发生在 AI 分析之前;如果过滤后没有候选,直接结束,不调用 AI。
计入用户级“已展示”的状态:
recommendedpublisheddismissedretracted
不计入:
pendingfailed- AI 分析后未达推荐阈值、未展示给用户的内部丢弃记录
artifact_family_hash 只保存在 artifact_recommendations 表,不进入前端 API 响应,不写入发布中心表。历史记录不回填;旧记录为空时不参与模板族去重。
数据模型
新增 artifact_recommendations 表,同时作为轻量 job 表。
核心字段:
user_idsession_idrun_idworkspace_manifest_keycandidate_fingerprintentry_pathentry_sha256suggested_titlesuggested_descriptionsuggested_categoryreasonscandidate_pathsartifact_family_hashanalysis_statusrecommendation_statusanalysis_modelanalysis_resultpublish_center_idattempt_countmax_attemptsavailable_atlocked_atlocked_bylast_erroranalyzed_at
去重粒度为 session_id + candidate_fingerprint。candidate_fingerprint 由当前 manifest 中可推荐候选文件的路径、大小、内容摘要元数据和修改时间计算;无 .html / .md 候选时不创建推荐记录,避免早期空导出阻断后续产物推荐。推荐表保存 manifest key、候选指纹和必要摘要,不复制完整 manifest。
推荐状态:
pendingrecommendedpublisheddismissedretracted
后端模块
新增模块:
ArtifactRecommendationService:负责分析、发布、忽略、撤回、重新公开。ArtifactRecommendationWorker:在 Backend 进程内轮询处理 pending 记录。artifact_recommendationsAPI:提供当前会话推荐查询和状态动作接口。
触发方式:
callback_service收到workspace_export_status=ready。- 后端根据系统配置开关入队推荐分析。
- Worker 读取 manifest,确定性预筛
.html/.md候选。 - AI 读取内容摘要,输出推荐结果。
- 前端在产物面板查询并展示推荐状态。
候选预筛:
.html优先于.md- 最近生成或修改优先
- 根目录或浅层目录优先
- 文件名包含
report、final、summary、analysis、dashboard、index、报告、总结、分析、看板、复盘、方案加权 - 排除
README、CHANGELOG、TODO、node_modules、dist、assets、components、test、demo等明显非成果文件 - 最多提交 12 个候选给模型
模型输出:
{
"recommend": true,
"confidence": "high",
"entry_path": "/report.html",
"suggested_title": "能源消耗分析报告",
"suggested_description": "围绕重点工序能耗异常给出分析和建议。",
"suggested_category": "能源",
"reasons": ["有完整指标和结论", "页面层次清楚,适合公开阅读"]
}展示规则:
recommend=trueconfidence为medium或highentry_path必须存在于候选文件内
medium 表示满足推荐门槛但亮点一般,high 表示内容和呈现都有明显亮点。只要企业业务价值、内容质量、呈现质量、完整度任一门槛不满足,必须 recommend=false。
AI 可在 recommend=false 时返回内部字段 reject_reason,后端只保存到 analysis_result,不返回前端。
分类只允许取现有发布中心分类集合,无法判断则为空或「其它」。
接口
GET /api/v1/artifact-recommendations/session/{session_id}POST /api/v1/artifact-recommendations/{id}/publishPOST /api/v1/artifact-recommendations/{id}/dismissPOST /api/v1/artifact-recommendations/{id}/retractPOST /api/v1/artifact-recommendations/{id}/republish
查询接口返回最多一条主推荐;没有可展示推荐时返回 null。
模型配置与开关
后台模型配置新增字段:
artifact_recommendation_model- 默认值:使用后台默认轻量模型配置
推荐分析按用户有效模型配置读取该字段。
系统配置新增开关:
artifact_recommendation_enabled- 默认开启
不新增环境变量,不更新 Docker Compose 配置。
前端改动
ArtifactsPanel顶部增加推荐卡片。- 桌面端和移动端复用同一组件。
- 发布中心列表展示推荐创建的发布中心,并带来源标识「智能推荐」。
- 首版不增加发布中心来源筛选。
- 发布、忽略、撤回、重新公开不写入聊天消息流。