@optima-chat/optima-agent 0.9.42 → 0.9.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -104,55 +104,54 @@
104
104
 
105
105
  ---
106
106
 
107
- ## 第二步:数据完整性检查
107
+ ## 第二步:Ingest + 数据完整性检查
108
108
 
109
- **在做任何分析之前,必须通过以下检查。任何一项未通过 → 补数据,不分析。**
109
+ ### Ingest
110
110
 
111
- 使用 `scout cache list` 查看已缓存的文件列表。
111
+ 数据采集完成后,将所有缓存文件 ingest KB:
112
+ - 对 `~/.scout/cache/{project}/` 中的每个缓存文件调用 kb-skills 的 ingesting-sources 流程
113
+ - 确认 raw/、wiki/sources/ 和相关 entity/overview 页面已更新
114
+
115
+ ### 数据完整性检查
116
+
117
+ **Ingest 完成后执行检查。10 项全部通过才能进入分析阶段。任何一项未通过 → 补齐后重新检查。**
112
118
 
113
119
  ```
114
120
  数据完整性检查清单:
115
121
 
116
- 搜索覆盖度:~/.scout/cache/{project}/ 中搜索结果文件包含 ≥ 30 个不重复 ASIN?
117
- 子品类聚类:完成后需在 ingest 时体现在 overview/market-{project}
118
- □ 精确搜索量:有 sp-keywords-mine 缓存文件?
119
- □ 品牌集中度:有 sp-brands 缓存文件?
120
- □ 卖家国籍:有 sp-seller-countries 缓存文件?
121
- □ 卖家类型:有 sp-seller-types 缓存文件?
122
- □ 供应端成本:有 supplier-search 缓存文件?
123
- □ 趋势信号:有至少 2 个社交平台缓存文件?
122
+ 搜索覆盖度:wiki/sources/ 中搜索结果覆盖 ≥ 30 个不重复 ASIN?
123
+ 子品类聚类:wiki/overview/market-{slug}.md 中有 ≥ 5 个子品类?
124
+ □ 精确搜索量:有 sp-keywords-mine 来源页?
125
+ □ 品牌集中度:有 sp-brands 来源页?
126
+ □ 卖家国籍:有 sp-seller-countries 来源页?
127
+ □ 卖家类型:有 sp-seller-types 来源页?
128
+ □ 供应端成本:有 supplier-search 来源页(≥ 3 家供应商)?
129
+ □ 趋势信号:有至少 2 个社交平台来源页?
124
130
  □ 缓存完整:~/.scout/cache/{project}/ 文件数 ≥ 命令执行数?
125
- 全部 ingest:所有缓存文件已 ingest 到 KB(raw/ + wiki/sources/ 对应存在)?
131
+ Ingest 完整:所有缓存文件已 ingest(raw/ + wiki/sources/ 对应存在)?
126
132
  ```
127
133
 
128
- **如果有未通过的项,告知用户缺什么,补齐后重新检查。**
129
-
130
- 检查通过后,批量 ingest 所有缓存文件到 ~/kb/product-research/:
131
- - 对每个缓存文件调用 kb-skills 的 ingesting-sources 流程
132
- - 确认 wiki/sources/ 中所有来源页已创建
133
- - 确认相关 entity 和 overview 页已更新
134
-
135
134
  **输出格式**:
136
135
  ```
137
136
  📋 数据完整性检查
138
137
  ✅ 搜索覆盖度:42 个不重复 ASIN(≥ 30)
139
138
  ✅ 子品类聚类:7 个子品类(≥ 5)
140
- ✅ 精确搜索量:3 组关键词已有数据
141
- ❌ 品牌集中度:未采集 → 需要执行 scout sp brands
142
- ❌ 卖家国籍:未采集 → 需要执行 scout sp seller-countries
139
+ ✅ 精确搜索量:3 组关键词已有来源页
140
+ ❌ 品牌集中度:未采集 → 需要执行 scout sp brands 并 ingest
141
+ ❌ 卖家国籍:未采集 → 需要执行 scout sp seller-countries 并 ingest
143
142
  ✅ 供应端成本:5 家供应商报价
144
143
  ✅ 趋势信号:TikTok + Reddit
145
144
  ✅ 缓存完整:12/12 已缓存
146
- 全部 ingest:已完成
145
+ Ingest 完整:10/12 已 ingest(缺品牌集中度、卖家国籍)
147
146
 
148
- 结论:2 项未通过,需要补充品牌集中度和卖家国籍数据。
147
+ 结论:需要补充品牌集中度和卖家国籍数据,采集后 ingest 再重新检查。
149
148
  ```
150
149
 
151
150
  ---
152
151
 
153
152
  ## 第三步:数据分析
154
153
 
155
- **只有数据完整性检查全部通过后,才进入分析阶段。**
154
+ **10/10 全部通过后才进入分析。分析时使用 kb-skills 的 querying-the-wiki 流程从 KB 查询数据,不直接读缓存 JSON。**
156
155
 
157
156
  ### 5. SPAN 初步定位
158
157
 
@@ -315,17 +314,15 @@ scout supplier-search "钛合金杯子" --limit 10
315
314
 
316
315
  CLI 自动缓存所有 API 响应到 `~/.scout/cache/{project}/`,无需手动落盘。
317
316
 
318
- **第二步:完整性检查**
317
+ **第二步:Ingest + 完整性检查**
319
318
 
320
- 使用 `scout cache list` 确认所有缓存文件存在。
319
+ 将所有缓存文件 ingest KB,然后执行完整性检查。
321
320
 
322
321
  > "📋 数据完整性检查:10/10 全部通过。可以开始分析了。"
323
322
 
324
- 检查通过后 ingest 所有缓存文件到 KB。
325
-
326
323
  **第三步:分析**
327
324
 
328
- 基于完整数据做 SPAN 评分、利润估算、IP 检查。
325
+ wiki/ 页面读取结构化数据,做 SPAN 评分、利润估算、IP 检查。
329
326
 
330
327
  **第四步:CDCP Gate 评审**
331
328
 
@@ -69,15 +69,31 @@ It is just hoarding goods
69
69
  ```
70
70
 
71
71
  写脚本时的判断:
72
- - 原片每个 phrase,问自己"这句话进成片吗"——进就把内容(用 proposal 里的原文)写进脚本
73
- - 同一意思被讲多遍(NG 重拍)——只写一遍,挑最流畅那遍的措辞
74
- - 填充词/单字口头禅/跑题——直接不写
75
- - 整段废话/犹豫——直接不写
72
+
73
+ **保留率目标 60%**:成片字数 / 原片字数(从 proposal 顶部统计或粗算)≥ 0.6。开拍 app 实证参考值 ~65%。低于 50% 必然意味着删多了内容(详见 [P0 spec](https://github.com/Optima-Chat/video-edit-skill-spec/blob/main/docs/spec/P0-content-preservation.md))。
74
+
75
+ **三类句子默认保留**(只在明确 NG 重拍时才删):
76
+ 1. **钩子条件句**:`如果你...`、`还在...的同学们`、`没有...的`、`想...不知道...的`
77
+ 2. **背景/限定前缀**:`在 X 做`、`做了 N 年的`、`我们...的`(交代说话人/卖点的铺垫)
78
+ 3. **重申/落地句**:核心卖点的二次出现,**判别启发**(关键,区分"重申要留" vs "NG 要删"):
79
+ - 换了角度? 地理 → 产品形态 → 操作步骤 / 实例 → 概念 → 是 → **留**
80
+ - 加了新信息? 新数字 / 新案例 / 新时间 → 是 → **留**
81
+ - 完全等价、只是措辞不同?(如"我做这个挺久了" / "做了三四年了")→ 否 → **算 NG 重拍,删一遍**
82
+
83
+ **两类才删**:
84
+ 1. **完全填充语**:`嗯`/`啊`/`呃`/`这个`/`那个`/`然后`,且单独成句、上下文无意义
85
+ 2. **明确 NG 重拍**:同一句话出现 take A 和 take B(措辞可能不同但信息等价),选信息更全的留
86
+
87
+ **注**:上述"必留三类"中的任一句,若 `smart-cut` / `review` 报 `HARD: repeated-content`,**优先信任 review 的判断**(它是字面重复检测,能发现你判断不到的语义级重复)。处理:从被标重复的两句里删信息密度较低的那句,再跑 review 验证;如果删完后保留率 < 50%,**回头从"两类才删"里加回内容**(钩子/背景前缀),不是再硬塞重申句。
88
+
89
+ **通用约束**:
76
90
  - **中文必须用原文措辞**——不要润色或改写,否则匹配不上
77
91
  - **每行 ≤ 10 个汉字**——超过会显示挤、可能溢出视频边界
78
92
  - **`**关键词**` 标记 1-2 个**:挑能传达这句"重点信息"的实词(名词/动词),不要标助词、口头禅;短语里没明显重点就 0 个标记
79
93
  - **英文翻译要地道、口语化**——给海外用户看的,不是直译。短句即可,可省略主语。
80
94
 
95
+ **写完前自检**:sum(所有保留行字数) ≥ 原片字数 × 0.6,不达标重新审视删除决策——绝大多数情况问题在于"两类才删"的判断把内容句也按填充语丢了,回头加回钩子/重申/引导句。
96
+
81
97
  **写完后必做的自查(保存前)**:把 final_script 当成一段**连续口播稿**通读一遍——不是一行行检查,是**整体读**。问自己:
82
98
 
83
99
  1. **同一件事说了两遍吗?**(NG 重拍最常见的坑:上一段和下一段措辞不同但说的是同一件事,比如"我做这个挺久了" + "做了三四年了"——属于同一意思,只留一段)
@@ -147,16 +163,26 @@ video-edit smart-cut <video>
147
163
 
148
164
  ## 写脚本的心法
149
165
 
166
+ **先算账**:读完 proposal 后记下原片字数 N(精度 ±10% 够用)。**目标成片字数 M ≥ 0.6 × N**。
167
+
150
168
  读 proposal 时**逐 phrase 判断**:
151
- 1. 这句进成片吗?进 phrase 文本贴到 final_script
152
- 2. 这句和前后哪句重复?只留一遍
153
- 3. 这句是填充词/口头禅?跳过
154
- 4. 这句跑题?跳过
169
+ 1. 这句是 [钩子条件 / 背景前缀 / 重申落地] 之一吗?是 → **必留**(不要凭"听起来不那么核心"就删)
170
+ 2. 这句是孤立填充语?(`嗯`/`啊`/`这个` 单成句无意义)→ 跳过
171
+ 3. 这句是明确 NG 重拍的较差版?(同一意思 take A 和 take B 选其一)→ 跳过较差那遍
172
+ 4. 不属于上述任一类 → **默认留**(不确定就留,不要默认删)
155
173
 
156
- **关键纪律**:脚本里的字**必须**来自原始转写——直接复制 proposal 里的 phrase 文本最稳。
174
+ 最后校验 sum(所有保留行字数) M。不达标 → 优先回退第 2、3 步的"跳过"决策,把误删的内容句加回来。
175
+
176
+ **关键纪律 1**:脚本里的字**必须**来自原始转写——直接复制 proposal 里的 phrase 文本最稳。
157
177
  你想怎么润色都不行(系统按字符匹配,改了字就匹不上)。
158
178
 
159
- **追求"看着不卡",宁可激进**。删多了用户能要求加回来,删少了用户体验差。
179
+ **关键纪律 2**:**追求"内容连贯且信息密度高",宁可保守**。
180
+
181
+ > ⚠️ 这条纪律 2026-05-07 反转过(之前是"宁可激进"):
182
+ >
183
+ > 实证([2026-05-07 开拍对比 finding](https://github.com/Optima-Chat/video-edit-skill-spec/blob/main/docs/findings/2026-05-07-kaipai-comparison.md))显示我们成片每对都比开拍短 4.7-5.2s,丢失的都是钩子/重申/引导句。技术指标(残留卡顿/画面跳变)我们已全面超过开拍,但用户体感"卡顿"反而是我们这边的胜场——因为**真正的"卡顿感"是删了一句话后前后两句接不上的语义断裂**。
184
+ >
185
+ > 所以删多了**比**留多了更伤体验。详见 [P0 spec](https://github.com/Optima-Chat/video-edit-skill-spec/blob/main/docs/spec/P0-content-preservation.md) 和 [ADR](https://github.com/Optima-Chat/video-edit-skill-spec/blob/main/docs/decisions/2026-05-07-stop-pause-tightening.md)。
160
186
 
161
187
  ## 交付怎么说
162
188
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@optima-chat/optima-agent",
3
- "version": "0.9.42",
3
+ "version": "0.9.44",
4
4
  "description": "基于 Claude Agent SDK 的电商运营 AI 助手",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",