左帮右臂 Auto Loop 闭环系统 — CMS集成指南
版本: v1.1 | 更新日期: 2026-07-05 | 适用系统: BossAgents v2.x
目录
1. 系统架构概览
1.1 闭环流程
docs/*.md ──→ DocsConverter ──→ ContentStore ──→ MarketingService ──→ 发布
│ │ │
│ Markdown→HTML │ 内容存储 │ 平台变体
│ LLM导语增强 │ 质量检查 │ 审核→发布
│ 体验Footer追加 │ 去AI味 │ 微信/知乎/CSDN
│ │ │
└──── 体验入口(立即体验+分享) ◄────────────┘
│
分享裂变系统
(AES-256加密)
│
访客→注册转化
1.2 数据流向
| 阶段 | 输入 | 输出 | 存储 |
|------|------|------|------|
| 文档转换 | docs/*.md | HTML文章 | content-items.json |
| 内容生成 | doc_assets | 生成文章 | content-items.json |
| 营销变体 | 已发布内容 | 平台变体 | marketing-items.json |
| 分享裂变 | Skill结果 | 加密链接 | auto-loop-data.json |
| 转换追踪 | 转换记录 | 状态 | docs-converted.json |
1.3 关键文件位置
| 文件 | 路径 | 说明 |
|---|---|---|
| 文档目录 | docs/*.md | 99篇技术Markdown文档 |
| 内容存储 | server/data/content-items.json | 所有内容资产 |
| 营销变体 | server/data/marketing-items.json | 平台变体内容 |
| 闭环数据 | server/data/auto-loop-data.json | 分享/行为/指标 |
| 转换追踪 | server/data/docs-converted.json | 文档转换记录 |
| Skill配置 | server/config/auto-loop-skills.json | 5个Skill定义 |
| DocsConverter | server/core/docs-converter.js | 文档转换引擎 |
| MarketingService | server/core/marketing-service.js | 营销变体引擎 |
| AutoLoopService | server/core/auto-loop-service.js | 闭环核心引擎 |
| ShareService | server/core/share-service.js | 分享加密服务 |
| API路由 | server/routes/auto-loop-api.js | 22个API端点 |
2. 核心概念
2.1 内容状态流转
draft → refined → published
│ │ │
│ │ └──→ 营销变体生成 → 审核 → 发布
│ └──→ 去AI味优化完成
└──→ 初始生成/转换
| 状态 | 说明 | 触发条件 |
|------|------|----------|
| draft | 草稿 | 新生成或新转换 |
| refined | 已优化 | 去AI味处理完成 |
| published | 已发布 | 手动发布或自动发布(质量≥80分) |
| failed | 失败 | 生成过程出错 |
2.2 内容来源标记
| source | 说明 |
|---|---|
| docs-converter | 从docs/目录Markdown转换 |
| auto_loop | AutoLoop Pipeline自动生成 |
| digital-staff | 数字员工调度触发 |
| manual | 前端手动创建 |
2.3 平台变体
| 平台 | 代码 | 风格 | 字数 | 特点 |
|---|---|---|---|---|
| 微信公众号 | 亲和专业 | 800-2000 | 段落简短,可加emoji | |
| 知乎 | zhihu | 专业深度 | 1500-3000 | 逻辑清晰,数据支撑 |
| CSDN | csdn | 技术实战 | 1000-2500 | 代码示例,步骤清晰 |
| 今日头条 | toutiao | 通俗信息 | 800-1500 | 图文并茂,信息密度高 |
3. Docs文档批量转文章
3.1 工作原理
DocsConverter扫描docs/目录下的Markdown文件,执行以下转换流程:
- 扫描 — 发现所有
.md文件,对比已转换记录,找出未转换文件 - 解析 — 提取标题、摘要、关键词、分类
- 转换 — Markdown→HTML(标题/代码块/列表/链接/加粗/斜体)
- 增强 — 调用LLM生成80-150字导语(可关闭)
- 追加Footer — 添加"立即体验"+"分享给同事"按钮
- 存储 — 写入ContentStore,状态为
draft
3.2 API使用
#### 扫描文档
GET /api/auto-loop/docs/scan
响应示例:
json
{
"success": true,
"data": {
"total": 99,
"unconverted": ["ARCHITECTURE.md", "DEPLOY.md", ...],
"converted": 6
}
}
#### 转换单个文档
POST /api/auto-loop/docs/convert
Content-Type: application/json
{
"file": "ARCHITECTURE.md",
"options": {
"enhanceWithLlm": true,
"experienceFooter": true,
"autoPublish": false,
"force": false
}
}
| 参数 | 类型 | 默认 | 说明 |
|------|------|------|------|
| file | string | 必填 | docs/下的文件名 |
| options.enhanceWithLlm | boolean | true | 是否用LLM生成导语 |
| options.experienceFooter | boolean | true | 是否追加体验Footer |
| options.autoPublish | boolean | false | 转换后自动发布 |
| options.force | boolean | false | 强制重新转换已转换文件 |
#### 批量转换
POST /api/auto-loop/docs/convert
Content-Type: application/json
{
"options": {
"limit": 10,
"enhanceWithLlm": false,
"experienceFooter": true
}
}
不指定file时为批量模式,limit控制每次转换数量(默认10)。
注意: 首次批量转换建议关闭enhanceWithLlm,因为LLM调用较慢。先快速转换所有文档,后续再逐篇增强。
#### 查看转换状态
GET /api/auto-loop/docs/status
响应示例:
json
{
"success": true,
"data": {
"totalDocs": 99,
"convertedCount": 7,
"unconvertedCount": 92,
"lastScan": null,
"recentConversions": [
{
"file": "ARCHITECTURE.md",
"contentId": "CONTENT-00016",
"title": "左帮右臂 — 技术架构说明",
"category": "系统架构",
"keywords": ["ARCHITECTURE", "架构文档索引", ...],
"convertedAt": "2026-07-05T07:40:12.476Z"
}
]
}
}
3.3 分类自动推断
系统根据文件名和内容关键词自动推断分类:
| 关键词 | 分类 |
|--------|------|
| SCSAI, aml | SCSAI集成 |
| architecture, 框架, 系统 | 系统架构 |
| bom, 工艺, process | 制造工艺 |
| api, 接口, route | API文档 |
| deploy, 部署, docker | 部署运维 |
| agent, 智能体, digital | 智能体 |
| content, 内容, 营销 | 内容营销 |
| rule, 规则 | 规则引擎 |
| doc, 文档 | 文档管理 |
| 其他 | 技术文档 |
3.4 转换追踪
转换记录存储在server/data/docs-converted.json,包含:
- 文件名 → 内容ID映射
- 标题、分类、关键词
- 转换时间
已转换的文件不会重复转换(除非设置force: true)。
4. 内容数字员工链路
4.1 工作原理
AutoLoopService.runContentPipeline()从doc_assets表读取已审核文档,通过ContentEngine生成内容,经质量检查和去AI味后存入ContentStore。
4.2 手动触发Pipeline
POST /api/auto-loop/pipeline/run
注意: Pipeline需要LLM可用,如果LLM不可用会超时。建议优先使用DocsConverter转换docs/目录文档。
4.3 内容质量检查
系统自动检测以下问题:
| 检查项 | 说明 | 阈值 |
|--------|------|------|
| AI味检测 | 检测"综上所述""值得一提的是"等AI味词汇 | aiScore > 30 触发去AI味 |
| 内部字段泄露 | 检测config_id、permission_id等SCSAI内部字段 | 出现即标记 |
| 内容完整性 | 检测内容长度 | < 100字标记为不完整 |
4.4 内容API
| 端点 | 方法 | 说明 |
|---|---|---|
| /api/content/list | GET | 内容列表(支持分页、筛选) |
| /api/content/generate | POST | 生成新内容 |
| /api/content/refine | POST | 去AI味优化 |
| /api/content/publish | POST | 发布内容 |
5. 营销数字员工链路
5.1 完整流程
已发布内容 → 发现可推广内容 → 生成平台变体 → 审核 → 发布
5.2 发现可推广内容
GET /api/auto-loop/marketing/discover
返回所有已发布(published/refined)但尚未生成营销变体的内容。
5.3 生成营销变体
#### 单平台变体
POST /api/auto-loop/marketing/variant
Content-Type: application/json
{
"content_id": "CONTENT-00009",
"platforms": ["wechat"]
}
#### 多平台批量变体
POST /api/auto-loop/marketing/variant
Content-Type: application/json
{
"content_id": "CONTENT-00009",
"platforms": ["wechat", "zhihu", "csdn"]
}
5.4 审核变体
POST /api/auto-loop/marketing/variant/{variantId}/review
Content-Type: application/json
{
"action": "approve",
"note": "内容质量良好,可以发布"
}
| action | 说明 |
|--------|------|
| approve | 审核通过,状态变为approved |
| reject | 审核拒绝,状态变为rejected |
5.5 发布变体
POST /api/auto-loop/marketing/variant/{variantId}/publish
只有approved状态的变体才能发布。
5.6 查看变体列表
GET /api/auto-loop/marketing/variants?platform=wechat&status=published&page=1&pageSize=20
5.7 营销统计
GET /api/auto-loop/marketing/stats
响应示例:
json
{
"success": true,
"data": {
"total": 4,
"byStatus": { "draft": 1, "published": 3 },
"byPlatform": { "wechat": 4 }
}
}
6. CMS体验入口
6.1 配置体验入口
在内容中心 → 设置页面的"体验入口与购买链接"卡片中配置:
| 配置项 | 说明 | 示例 |
|--------|------|------|
| 启用体验Footer | 是否在文章底部追加体验入口 | 启用/禁用 |
| 体验链接 | 点击"体验"按钮跳转的URL | https://miniapp.example.com/experience |
| 购买/咨询链接 | 点击"购买"按钮跳转的URL | https://miniapp.example.com/buy |
| 分享链接 | 点击"分享"按钮跳转的URL | https://miniapp.example.com/share |
| 体验按钮文字 | 自定义体验按钮文字 | "免费体验" |
| 购买按钮文字 | 自定义购买按钮文字 | "立即购买" |
| 分享按钮文字 | 自定义分享按钮文字 | "转发好友" |
| 品牌名称 | Footer底部品牌标识 | "左帮右臂 · PLM智能体" |
| 二维码图片 | 上传或粘贴Base64编码的二维码 | 支持PNG/JPG |
小程序集成: 体验链接和购买链接可以指向小程序路径(如微信小程序的 weixin://dl/business/?appid=xxx),用户点击即可跳转小程序。
6.2 配置存储
配置存储在 server/config/content-config.json 的 experienceFooter 字段:
json
{
"experienceFooter": {
"enabled": true,
"experienceUrl": "https://miniapp.example.com/experience",
"purchaseUrl": "https://miniapp.example.com/buy",
"qrCodeBase64": "data:image/png;base64,...",
"shareUrl": "https://miniapp.example.com/share",
"experienceButtonText": "免费体验",
"purchaseButtonText": "立即购买",
"shareButtonText": "转发好友",
"brandName": "左帮右臂 · PLM智能体"
}
}
6.3 体验Footer效果
文章底部自动追加的Footer包含:
- 标题 — "想亲自体验{文章标题}?"
- 体验按钮 — 链接到配置的体验URL(白色按钮,蓝字)
- 购买按钮 — 链接到配置的购买URL(红色按钮,白字),仅在配置了purchaseUrl时显示
- 分享按钮 — 链接到配置的分享URL(半透明白色按钮)
- 二维码 — 配置了qrCodeBase64时显示,带"扫码体验"提示
- 品牌标识 — 配置的brandName
6.4 通过API配置
PUT /api/content/config
Content-Type: application/json
{
"experienceFooter": {
"enabled": true,
"experienceUrl": "https://your-miniapp.com/experience",
"purchaseUrl": "https://your-miniapp.com/buy",
"qrCodeBase64": "data:image/png;base64,...",
"shareUrl": "https://your-miniapp.com/share",
"experienceButtonText": "免费体验",
"purchaseButtonText": "立即购买",
"shareButtonText": "转发好友",
"brandName": "左帮右臂 · PLM智能体"
}
}
`
### 6.5 关闭体验Footer
方式一:设置页关闭"启用体验Footer"
方式二:转换时设置 `experienceFooter: false`:
`json
{ "file": "README.md", "options": { "experienceFooter": false } }
`
### 6.6 链接未配置时的行为
| 链接 | 未配置时 |
|------|----------|
| experienceUrl | 使用默认 `/experience?topic={标题}&category={分类}` |
| purchaseUrl | 不显示购买按钮 |
| shareUrl | 使用默认 `/share?title={标题}&source=docs` |
| qrCodeBase64 | 不显示二维码区域 |
---
## 7. 分享裂变系统
### 7.1 工作原理
分享系统使用**AES-256-CBC加密**生成分享Token,确保分享链接不可伪造:
1. 创建分享时,将`{sessionId, skillId, timestamp, nonce}`加密为Token
2. 分享链接格式:`/share/{encryptedToken}`
3. 解析分享时,解密Token获取原始信息
4. 记录点击次数和注册转化
### 7.2 创建分享链接
POST /api/auto-loop/share/create
Content-Type: application/json
{
"skill_id": "skill_content_gen",
"result_snapshot": {
"summary": "制造业数字化转型实践",
"content": "..."
},
"session_id": "user-session-123"
}
响应:
`json
{
"success": true,
"data": {
"share_token": "+oJs5PazgWLSYmB...",
"share_url": "/share/+oJs5PazgWLSYmB...",
"expires_at": "2026-08-04T08:00:00.000Z",
"watermark_text": "Powered by SCSAi PLM"
}
}
`
### 7.3 解析分享链接
GET /api/auto-loop/share/{token}
响应包含原始Skill结果、是否过期、是否提示注册。
### 7.4 记录分享点击
POST /api/auto-loop/share/click
Content-Type: application/json
{
"token": "+oJs5PazgWLSYmB...",
"new_user_id": "newly-registered-user-id"
}
### 7.5 分享配置
| 配置项 | 默认值 | 说明 |
|--------|--------|------|
| `share_expire_days` | 30 | 分享链接过期天数 |
| `guest_daily_limit` | 10 | 访客每日体验次数 |
通过`PUT /api/auto-loop/config`修改。
---
## 8. Skill体验系统
### 8.1 可用Skill列表
| Skill ID | 名称 | 图标 | 说明 |
|----------|------|------|------|
| `skill_bom_compare` | BOM比对 | 📊 | 上传两份BOM数据,AI自动对比差异 |
| `skill_process_optimize` | 工艺优化 | ⚙️ | 输入工艺参数,AI分析优化建议 |
| `skill_content_gen` | 内容生成 | ✍️ | 输入主题关键词,AI生成文章 |
| `skill_data_health` | 数据健康检查 | 🩺 | 一键检查PLM数据质量 |
| `skill_doc_chat` | 文档问答 | 💬 | 基于技术文档智能问答 |
### 8.2 执行Skill
POST /api/auto-loop/skill/execute
Content-Type: application/json
{
"skill_id": "skill_content_gen",
"input_params": {
"topic": "制造业数字化转型实践",
"keywords": "PLM, BOM, 数字化",
"style": "professional"
},
"session_id": "user-session-123"
}
响应:
`json
{
"success": true,
"data": {
"skill_id": "skill_content_gen",
"result": {
"summary": "内容生成结果",
"content": "<h2>制造业数字化转型实践</h2>..."
},
"result_template": { "type": "article" },
"is_demo": true,
"demo_label": "⚠️ 演示数据"
}
}
`
### 8.3 访客模式
- 无Bearer Token的请求默认为访客模式
- 访客获得演示数据(`is_demo: true`)
- 访客每日限制10次体验(可配置)
- 超出限制返回429错误
### 8.4 注册用户模式
- 携带有效Bearer Token的请求走真实API
- 调用Skill对应的`api_endpoint`
- 无次数限制
- 返回真实数据(`is_demo: false`)
### 8.5 查询使用次数
GET /api/auto-loop/skill/usage?session_id=user-session-123
响应:
`json
{
"success": true,
"data": {
"today_count": 3,
"daily_limit": 10,
"remaining": 7
}
}
`
---
## 9. 闭环指标与配置
### 9.1 闭环指标
GET /api/auto-loop/metrics?date=2026-07-05&period=day
| 指标 | 说明 |
|------|------|
| `content_generated` | 今日生成内容数 |
| `content_published` | 今日发布内容数 |
| `guest_visits` | 访客访问数 |
| `skill_executions` | Skill执行次数 |
| `share_count` | 分享创建数 |
| `share_clicks` | 分享点击数 |
| `share_conversions` | 分享转化注册数 |
| `knowledge_deposited` | 知识沉淀数 |
### 9.2 闭环配置
GET /api/auto-loop/config
PUT /api/auto-loop/config
Content-Type: application/json
{
"recommend_weight_threshold": 0.3,
"marketing_trigger_growth": 0.5,
"share_expire_days": 30,
"guest_daily_limit": 10,
"auto_publish_mode": "manual_review",
"evolution_cron": "0 2 *"
}
| 配置 | 默认 | 说明 |
|------|------|------|
| `auto_publish_mode` | `manual_review` | `auto_publish`自动发布(质量≥80),`manual_review`手动审核 |
| `share_expire_days` | 30 | 分享链接过期天数 |
| `guest_daily_limit` | 10 | 访客每日体验次数 |
| `evolution_cron` | `0 2 * * *` | 自进化分析定时 |
---
## 10. 完整API参考
### 10.1 Skill相关
| 端点 | 方法 | 说明 |
|------|------|------|
| `/api/auto-loop/skills` | GET | 获取Skill列表 |
| `/api/auto-loop/skill/execute` | POST | 执行Skill |
| `/api/auto-loop/skill/usage` | GET | 查询使用次数 |
### 10.2 文档转换
| 端点 | 方法 | 说明 |
|------|------|------|
| `/api/auto-loop/docs/scan` | GET | 扫描docs/目录 |
| `/api/auto-loop/docs/convert` | POST | 转换文档(单个或批量) |
| `/api/auto-loop/docs/status` | GET | 查看转换状态 |
### 10.3 内容链路
| 端点 | 方法 | 说明 |
|------|------|------|
| `/api/auto-loop/pipeline/run` | POST | 运行内容Pipeline |
### 10.4 营销变体
| 端点 | 方法 | 说明 |
|------|------|------|
| `/api/auto-loop/marketing/discover` | GET | 发现可推广内容 |
| `/api/auto-loop/marketing/variant` | POST | 生成营销变体 |
| `/api/auto-loop/marketing/variants` | GET | 变体列表 |
| `/api/auto-loop/marketing/variant/{id}/review` | POST | 审核变体 |
| `/api/auto-loop/marketing/variant/{id}/publish` | POST | 发布变体 |
| `/api/auto-loop/marketing/stats` | GET | 营销统计 |
### 10.5 分享裂变
| 端点 | 方法 | 说明 |
|------|------|------|
| `/api/auto-loop/share/create` | POST | 创建分享链接 |
| `/api/auto-loop/share/{token}` | GET | 解析分享链接 |
| `/api/auto-loop/share/click` | POST | 记录分享点击 |
### 10.6 行为与指标
| 端点 | 方法 | 说明 |
|------|------|------|
| `/api/auto-loop/behavior/report` | POST | 上报行为数据 |
| `/api/auto-loop/metrics` | GET | 闭环指标 |
| `/api/auto-loop/config` | GET/PUT | 闭环配置 |
| `/api/auto-loop/catalog` | GET | 数据目录 |
---
## 11. 常见问题
### Q1: 批量转换99篇文档太慢怎么办?
关闭LLM增强,先快速转换所有文档:
`json
POST /api/auto-loop/docs/convert
{ "options": { "limit": 99, "enhanceWithLlm": false, "experienceFooter": true } }
`
后续可对单篇文档设置`force: true`重新转换并启用LLM增强。
### Q2: 如何让文章自动发布?
修改闭环配置:
`json
PUT /api/auto-loop/config
{ "auto_publish_mode": "auto_publish" }
`
质量评分≥80的文章会自动发布。
### Q3: 分享链接如何集成到外部CMS?
1. 调用`POST /api/auto-loop/share/create`获取分享URL
2. 将`share_url`嵌入CMS文章或页面
3. 访客点击后看到Skill演示结果+注册引导
### Q4: 如何添加新的Skill?
编辑`server/config/auto-loop-skills.json`,添加新Skill配置:
`json
{
"skill_id": "skill_my_custom",
"name": "自定义Skill",
"description": "Skill描述",
"icon": "🔧",
"api_endpoint": "/api/my-endpoint",
"api_method": "POST",
"input_template": {
"fields": [
{ "key": "param1", "label": "参数1", "type": "text", "required": true }
]
},
"result_template": { "type": "list" },
"is_public": true,
"daily_limit_guest": 10,
"sort_order": 50
}
`
同时在`auto-loop-service.js`的`_getDemoData()`中添加对应的演示数据。
### Q5: 如何自定义体验Footer?
修改`server/core/docs-converter.js`中的`_appendExperienceFooter()`方法。可自定义:
- 按钮文字和链接
- 颜色和样式
- 二维码图片(使用`<img src="data:image/png;base64,...">`)
- 添加"咨询购买"按钮
### Q6: 营销变体的LLM生成失败怎么办?
系统会自动降级为简单适配(提取原文前15段),变体仍会创建,状态为`draft`,可手动编辑后审核发布。
### Q7: 如何查看所有已转换文档的内容?
GET /api/content/list?pageSize=100
``
按source: docs-converter筛选即为所有转换文档。
Q8: 服务器端口是多少?
默认端口3006,访问地址https://ylxt.chat。
Q9: 如何与外部CMS系统对接?
方案一:API拉取
外部CMS定时调用/api/content/list?status=published拉取已发布内容。
方案二:Webhook推送
在marketing-service.js的publishVariant()中添加Webhook通知,发布后推送到外部CMS。
方案三:文件导出
调用/api/content/list获取内容,将HTML导出为文件,由CMS导入。
附录:快速开始
一键转换docs文档并发布
bash
1. 启动服务器
node server.js
2. 批量转换docs文档(关闭LLM加速)
curl -X POST https://ylxt.chat/api/auto-loop/docs/convert \
-H "Content-Type: application/json" \
-d '{"options": {"limit": 99, "enhanceWithLlm": false, "experienceFooter": true}}'
3. 查看转换状态
curl https://ylxt.chat/api/auto-loop/docs/status
4. 发现可推广内容
curl https://ylxt.chat/api/auto-loop/marketing/discover
5. 生成微信变体
curl -X POST https://ylxt.chat/api/auto-loop/marketing/variant \
-H "Content-Type: application/json" \
-d '{"content_id": "CONTENT-00001", "platforms": ["wechat"]}'
6. 审核发布
curl -X POST https://ylxt.chat/api/auto-loop/marketing/variant/MKT-xxx/review \
-H "Content-Type: application/json" \
-d '{"action": "approve"}'
curl -X POST https://ylxt.chat/api/auto-loop/marketing/variant/MKT-xxx/publish
7. 查看闭环指标
curl https://ylxt.chat/api/auto-loop/metrics
`
BossAgents