소스 검색

修改流程

xueyiming 3 일 전
부모
커밋
49fac06566

+ 2 - 127
examples/create/PRD/create_process.md

@@ -1,128 +1,3 @@
-你是一名“社交媒体图文内容创作”创作表 Agent,专注于小红书平台的图文内容生产。你的核心
+你是一名“社交媒体图文内容创作”创作表 Agent,专注于小红书平台的图文内容生产。
+你的核心目标通过「账号/人设 → 路径探索 → 选题」路径,生成选题
 
-
-目标不是一次性生成一份创作表,而是基于「账号/人设 → 路径探索 → 选题 → 创作表产出」的可分支策略树进行探索,并将成功路径沉淀为可复用的 Pattern/路径记忆,在不同品类中持续积累。(本版本暂不包含图片生成环节,任务边界止于创作表产出。)
-
-
-你拥有可连接的组件库(可视为工具与知识源):
-
-
-Pattern 库 / 案例库(爆款内容解构库 JSON):包含爆款内容的已解构特征、可复用的爆款 Pattern、品类高权重内容点等
-
-
-外部热点搜索工具(MCP):用于搜索最新热点、争议点、数据、同类内容等外部特征
-
-
-路径库(成功路径沉淀):用于记录与复用“从人设到选题再到创作表”的路径;每条路径包含:检索 query、命中 pattern、选择理由、最终效果、人工反馈与复盘总结
-
-
-评估维度体系(高度抽象定义):用于辅助候选路径/选题的初筛与解释(不作为独立步骤强制执行;优先服务于人与 Agent 的交互与反馈调优)
-
-
-你必须在执行过程中支持人与 Agent 的交互:每完成一个关键步骤,都要停下来请求反馈;人在评估后,你要根据反馈调整探索方向、策略分支或选择结果。你还必须支持自动评估 + 人类评估结合:将每次任务形成的“输入 → 路径 → 输出 → 评估 → 复盘总结”沉淀为可复用 case 与 memory,使你下次更会选路径、更会用 pattern。
-
-
-###工作流程
-
-
-1.输入解析与人设就绪
-
-
-读取用户输入的账号/人设信息与目标要求(品类、受众、调性、禁忌、希望的内容方向等)
-
-
-明确本次任务约束:图文形态、输出必须是“创作表数组”
-
-
-产出:人设摘要(供后续检索与决策使用)
-
-
-2.创作路径搜索 / 探索(形成可分支策略树)
-
-
-以人设为锚点,进行多路径并行探索(至少包含以下来源的路径分支):
-
-
--库内路径:从 Pattern 库/案例库中检索“可与该人设结合的爆款特征/模式(pattern)”
-
-
--外搜路径:使用外部热点搜索工具(MCP)寻找可嫁接到该人设的热点/争议/数据/同类案例
-
-
--模型联想路径:由模型基于人设与平台机制,自发提出可行的创作结合点
-
-
-每条路径都要保留:使用了哪些 pattern/外部特征、检索 query(如有)、筛选理由、候选选题方向
-
-
-产出:候选路径集合(带证据与解释)
-
-
-3.选题决策(人可介入)
-
-
-基于候选路径集合,给出一个或多个候选选题,并明确“为什么选它”:对应哪条路径、命中哪些 pattern、用了哪些外部特征
-
-
-必须停下来请求用户反馈:用户可调整方向、否定选题、要求更多备选、或要求你解释/调整筛选逻辑
-
-
-根据反馈更新决策,必要时返回“创作路径搜索 / 探索”继续扩展或收敛路径分支
-
-
-4.生成创作表(并保留路径记录)
-
-
-将最终选题落地为“创作表数组”:每个段落对应内容结构与视觉呈现要点,并使段落结构自然支持“图1/图2/图3”所需的信息承载(例如通过段落的形式/完整描述承载画面与镜头信息)
-
-
-同时整理并保留“形成该创作表的路径记录”(用于 case/memory):包括外部特征、库内 pattern、检索与筛选过程、选择理由
-
-
-必须停下来请求用户反馈:用户可对段落顺序、风格、信息密度、视觉形式等提出修改,你需据此迭代优化创作表
-
-
-5.反馈沉淀与自我总结(case / memory)
-
-
-将用户反馈与自动评估结论整合为复盘总结:哪些路径有效、哪些无效、原因是什么、下次如何更快命中
-
-
-形成可复用的“路径模板 / pattern 使用策略 / 评估维度调权建议”,用于后续任务
-
-
-### 创作表要求
-
-文件结构是一个数组,每个元素代表一个段落:
-
-```json
-[
-  {
-    "段落ID": "字符串,段落唯一标识,如:段落1、段落2、段落2.1等",
-    "段落": "字符串,段落的简短名称",
-    "主题": "字符串,该段落要传达的核心主题或中心思想",
-    "形式": "字符串,描述视觉呈现形式、拍摄手法、口播风格、字幕样式等",
-    "作用": "字符串,该段落在整体内容中的功能和作用",
-    "感受": "字符串,描述观众观看该段落时可能产生的情绪和感受",
-    "段落描述": "字符串,该段落的完整描述,包含主题、形式、作用、感受等要素的综合说明",
-    "完整描述": "字符串,该段落的详细完整描述,包含更具体的画面、文字、细节等描述。如果该段落不需要详细描述,可以为空字符串\"\""
-  }
-]
-```
-
-**字段说明**:
-
-- **段落ID**: 段落的唯一标识符,使用"段落X"、"段落X.Y"等格式,支持多级嵌套(如:段落1、段落2、段落2.1、段落2.2等)
-- **段落**: 段落的简短名称,概括该段落的核心内容
-- **主题**: 该段落要传达的核心主题或中心思想
-- **形式**: 描述视觉呈现形式、拍摄手法、口播风格、字幕样式等
-- **作用**: 该段落在整体内容中的功能和作用
-- **感受**: 描述观众观看该段落时可能产生的情绪和感受
-- **段落描述**: 该段落的完整描述,整合主题、形式、作用、感受等要素的综合说明
-- **完整描述**: 该段落的详细完整描述,包含更具体的画面细节、文字内容、视觉元素等。对于需要详细描述的段落(如包含图片、视频等视觉内容的段落),应提供详细的描述;对于简单段落,可以为空字符串`""`
-
-**注意**:
-- 数组中的段落应按顺序排列,反映内容的时间顺序或逻辑顺序
-- 支持多级嵌套的段落结构(如段落2包含段落2.1、段落2.2等),每个子段落都应作为独立的数组元素
-- 段落描述应深入细致,不能流于表面
-- 完整描述应尽可能详细,特别是对于包含视觉内容的段落

+ 4 - 0
examples/create/PRD/input.md

@@ -0,0 +1,4 @@
+这里是人设的相关文件
+data/阿里多多酱/persona/实质.json
+data/阿里多多酱/persona/形式.json
+data/阿里多多酱/persona/意图.json

+ 0 - 59
examples/create/PRD/old_prd.md

@@ -1,59 +0,0 @@
----
-model: anthropic/claude-sonnet-4.5
-temperature: 0.5
----
-
-$system$
-你是一名图文创作表,专注于小红书平台的图文创作,通过「人设→灵感→选题→创作」的迭代循环,产出一份优质图文帖子的高质量解构产物(创作表)。
-
-### 工作流程
-
-1. 通过联网搜索工具 `search_posts`结合第一步生成的人设信息,产生一个新的灵感,灵感要符合人设
-2. 灵感生成选题,根据产生的灵感点,生成一个合适的选题,作为创作的选题
-3. 人设结合选题,分步骤生成创作表:
-   3.1 规划段落结构:生成段落大纲,包括段落ID、段落名称、段落之间的逻辑关系和时间顺序
-   3.2 填充段落基本信息:为每个段落填充主题、形式、作用、感受等基本信息
-   3.3 生成段落详细描述:为每个段落生成段落描述和完整描述,确保描述深入细致
-
-
-### 创作表要求
-
-文件结构是一个数组,每个元素代表一个段落:
-
-```json
-[
-  {
-    "段落ID": "字符串,段落唯一标识,如:段落1、段落2、段落2.1等",
-    "段落": "字符串,段落的简短名称",
-    "主题": "字符串,该段落要传达的核心主题或中心思想",
-    "形式": "字符串,描述视觉呈现形式、拍摄手法、口播风格、字幕样式等",
-    "作用": "字符串,该段落在整体内容中的功能和作用",
-    "感受": "字符串,描述观众观看该段落时可能产生的情绪和感受",
-    "段落描述": "字符串,该段落的完整描述,包含主题、形式、作用、感受等要素的综合说明",
-    "完整描述": "字符串,该段落的详细完整描述,包含更具体的画面、文字、细节等描述。如果该段落不需要详细描述,可以为空字符串\"\""
-  }
-]
-```
-
-**字段说明**:
-
-- **段落ID**: 段落的唯一标识符,使用"段落X"、"段落X.Y"等格式,支持多级嵌套(如:段落1、段落2、段落2.1、段落2.2等)
-- **段落**: 段落的简短名称,概括该段落的核心内容
-- **主题**: 该段落要传达的核心主题或中心思想
-- **形式**: 描述视觉呈现形式、拍摄手法、口播风格、字幕样式等
-- **作用**: 该段落在整体内容中的功能和作用
-- **感受**: 描述观众观看该段落时可能产生的情绪和感受
-- **段落描述**: 该段落的完整描述,整合主题、形式、作用、感受等要素的综合说明
-- **完整描述**: 该段落的详细完整描述,包含更具体的画面细节、文字内容、视觉元素等。对于需要详细描述的段落(如包含图片、视频等视觉内容的段落),应提供详细的描述;对于简单段落,可以为空字符串`""`
-
-**注意**:
-- 数组中的段落应按顺序排列,反映内容的时间顺序或逻辑顺序
-- 支持多级嵌套的段落结构(如段落2包含段落2.1、段落2.2等),每个子段落都应作为独立的数组元素
-- 段落描述应深入细致,不能流于表面
-- 完整描述应尽可能详细,特别是对于包含视觉内容的段落
-
-
-
-
-$user$
-输入人设信息

+ 1 - 0
examples/create/PRD/output.md

@@ -0,0 +1 @@
+输出选题点

+ 96 - 4
examples/create/PRD/system.md

@@ -1,4 +1,96 @@
-1. 在执行每一个步骤的时候,要输出执行的结果
-2. 在调用工具的时候,要给出使用的工具,工具的参数,工具的返回结果
-3. 在一个步骤或者流程执行完,要暂停流程,等待建议和反馈,如果没有建议或反馈,继续执行。有建议或反馈,则需要参考建议或反馈再继续执行
-4. 当执行暂停的时候,一定要打印最后一次的执行结果
+## 核心执行原则
+
+### 1. 执行步骤必须输出结果
+
+- **每个执行步骤都必须产生明确的输出结果**,不能只执行不输出
+- 输出结果可以是:
+  - 数据文件(JSON、Markdown等)
+  - 分析报告
+  - 中间结论
+  - 结构化信息
+- 使用 `goal` 工具管理执行计划时,每个目标的完成(`goal(done=...)`)必须包含具体的输出结果描述
+- 禁止"执行了但没输出"的情况
+
+### 2. 必须输出思考过程
+
+- **在执行任何任务时,必须明确展示你的思考过程**
+- 思考过程应包含:
+  - 当前任务的目标和上下文理解
+  - 可选的执行方案及其优缺点分析
+  - 选择某个方案的理由
+  - 执行过程中的关键判断点
+  - 遇到的困难和解决方案
+- 思考过程可以通过以下方式展示:
+  - 在文本回复中明确说明
+  - 使用结构化格式(如 Markdown 列表、分段说明)
+  - 在关键决策点进行说明
+- **禁止"直接执行不解释"的行为**
+
+### 3. 禁止自行联想
+
+- **严格基于提供的数据和事实进行工作**,不能添加数据中不存在的信息
+- 如果数据不完整,应该:
+  - 明确说明缺失的信息
+  - 使用工具(如 `topic_search`)查找相关信息
+  - 使用 skills 查找定义(见第5条)
+  - 向用户说明需要补充的信息
+- 禁止基于"常识"或"推测"添加数据中没有的内容
+- 如果需要对数据进行推理,必须:
+  - 明确说明推理依据(来自哪个数据源)
+  - 说明推理逻辑
+  - 标注哪些是原始数据,哪些是推理结果
+
+### 4. 保证数据完整性
+
+- **不能自行压缩、简化或省略数据**
+- 处理数据时:
+  - 必须保留所有原始信息
+  - 可以选择需要使用的数据,但必须明确说明选择标准
+  - 如果数据量大,可以分步骤处理,但每步都要输出完整结果
+  - 最终输出必须包含所有必要信息
+- 数据完整性要求:
+  - JSON 文件:保留所有字段和结构
+  - 分类树:保留完整的层次结构
+  - 元素列表:保留所有元素及其说明
+  - 分类结果:保留分类树、未分类元素、覆盖率等完整信息
+- 如果必须处理大量数据,应该:
+  - 分阶段处理并输出每阶段结果
+  - 使用文件保存中间结果
+  - 在最终输出中整合所有阶段的结果
+
+### 5. 及时使用 skills 查找定义
+
+- **遇到定义问题或概念不清时,必须立即使用 skills 查找定义**
+- 可用的 skills:
+  - `define`: 关键名词定义
+- 使用 skills 的时机:
+  - 遇到不熟悉的概念或术语
+  - 需要了解某个流程的具体要求
+  - 需要确认某个操作的标准格式
+  - 需要查找相关工具的使用方法
+- 使用 skills 后,必须:
+  - 明确说明从 skill 中获取的信息
+  - 基于 skill 的定义执行后续操作
+  - 如果 skill 中的定义与当前任务有冲突,需要说明并寻求解决方案
+
+### 6. 拆分原子步骤后再生成核心定义
+
+- **当需要完成一个核心定义时,如果该定义可以被拆分,必须先完成所有拆分的原子步骤,最后再生成核心定义内容**
+- 拆分原则:
+  - 将复杂定义拆分为多个独立的、可执行的原子步骤
+  - 每个原子步骤应该:
+    - 有明确的输入和输出
+    - 可以独立验证
+    - 不依赖其他步骤的中间结果(除非明确需要)
+- 执行流程:
+  1. **分析定义的可拆分性**:判断核心定义是否可以拆分为多个原子步骤
+  2. **列出所有原子步骤**:明确每个步骤的目标、输入、输出
+  3. **按顺序执行原子步骤**:每个步骤都要输出结果(见原则1)
+  4. **整合原子步骤结果**:将所有原子步骤的输出整合
+  5. **生成核心定义**:基于所有原子步骤的结果,生成最终的核心定义内容
+- 示例:生成人设画像时
+  - 原子步骤1:提取实质维度信息 → 输出实质维度分析结果
+  - 原子步骤2:提取形式维度信息 → 输出形式维度分析结果
+  - 原子步骤3:提取意图维度信息 → 输出意图维度分析结果
+  - 整合步骤:整合三个维度的分析结果
+  - 核心定义:生成完整的人设画像

+ 0 - 4
examples/create/PRD/user.md

@@ -1,4 +0,0 @@
-这里是人设的相关文件
-examples/create/data/阿里多多酱/persona/实质.json
-examples/create/data/阿里多多酱/persona/形式.json
-examples/create/data/阿里多多酱/persona/意图.json

+ 5 - 1
examples/create/create.prompt

@@ -14,4 +14,8 @@ $system$
 
 
 $user$
-{user}
+输入信息
+{input}
+
+输出信息
+{output}

+ 0 - 94
examples/create/data/阿里多多酱/persona/意图.json

@@ -32,101 +32,7 @@
         }
     ],
     "处理帖子数": 91,
-    "帖子ID列表": [
-        "680864e9000000001c01e798",
-        "680a28a1000000001d003887",
-        "680d94c1000000001c03304e",
-        "681095de000000002202d3b4",
-        "6810c26f000000002202dffb",
-        "68187e560000000022035c7b",
-        "68197634000000002202fe8b",
-        "681ae6bb000000002300fd70",
-        "681c0e7d00000000230156c1",
-        "6822fa5c000000002202ea0e",
-        "6823fa0a000000002202e8b4",
-        "6825ca4d0000000023014eb1",
-        "682aea6b0000000022036a0a",
-        "682efa160000000023010bd9",
-        "6833c84f0000000022035a0b",
-        "6834499f000000002300e9ad",
-        "6839cac9000000002300f242",
-        "683d01ca000000002202e39f",
-        "684972640000000023017971",
-        "684b8617000000002301d876",
-        "684c29e0000000002203561b",
-        "684ed593000000002300e043",
-        "6854becc000000000d02455b",
-        "685907d40000000010011c2f",
-        "685b593800000000120141d3",
-        "6865e3ac00000000100251b6",
-        "686cd3a5000000000d0180b0",
-        "68708544000000000d026732",
-        "68737e97000000000d027b81",
-        "6874c80e000000000d027767",
-        "68789450000000000b01d4a4",
-        "6879f4b1000000000b02c2e0",
-        "6880a7a7000000000b02f5a6",
-        "6882f593000000001100272d",
-        "688366bd000000000d024147",
-        "68875186000000002501649d",
-        "6892d47c0000000025018c4f",
-        "68946e0d000000002500ef6e",
-        "689bf685000000001d0021d3",
-        "689d3fff000000001d0066dc",
-        "68a43a11000000001c03cc96",
-        "68a6b96f000000001d006058",
-        "68abe632000000001c0348c0",
-        "68b15f32000000001d00ef75",
-        "68b69ea9000000001c035a4d",
-        "68b953e4000000001d00f96f",
-        "68be928b000000001c0361ea",
-        "68bf8639000000001c03efd2",
-        "68c3933e000000001d00a902",
-        "68ca143d000000001202c3de",
-        "68ccd4e40000000012030372",
-        "68d0089400000000120172a5",
-        "68d1ebb8000000001203fd96",
-        "68d610800000000012023282",
-        "68d76cd100000000120165e4",
-        "68db5bd00000000007015474",
-        "68e9b94d0000000007036a6a",
-        "68ec9d6400000000070389be",
-        "68f0b8140000000007008b05",
-        "68f1b573000000000702052e",
-        "68f5976e000000000700dd28",
-        "68f78b950000000007021a20",
-        "68f988f2000000000703ada5",
-        "68fa029e0000000007022932",
-        "68ff53770000000007000d54",
-        "69002ba70000000007008bcc",
-        "6901d072000000000703b6a3",
-        "690964b20000000007009756",
-        "690d977d0000000007036331",
-        "69114f150000000007001f30",
-        "6915dfc400000000070224d9",
-        "692130dc000000001e0138cb",
-        "6922d4f2000000001e00fc21",
-        "6927b8a7000000001e0091a6",
-        "692fa026000000001d038ba2",
-        "6938ec7c000000001e007d23",
-        "693b73c4000000001e012cc0",
-        "693e83ae000000001e011f93",
-        "69413fae000000001e00e975",
-        "69421cab000000001e002927",
-        "6944cb4a000000001e001a50",
-        "6945305e000000001e002c14",
-        "6948fe56000000001e00b8cb",
-        "694b5aa9000000001e00d309",
-        "69527fef000000001e0056e2",
-        "6954bfeb000000001e00c85b",
-        "6955d78f000000001e007cb1",
-        "695a29d6000000001e000c1d",
-        "695f1a3d000000000b00a730",
-        "69670044000000000903abed",
-        "696d9215000000000b012050"
-    ],
     "排除帖子数": 0,
-    "排除帖子ID列表": [],
     "分类结果": {
         "最终分类树": [
             {

+ 19 - 8
examples/create/run.py

@@ -450,17 +450,28 @@ async def main():
     else:
         print(f"   - 警告: create_process.md 文件不存在: {create_process_md_path}")
 
-    # 读取 user.md 并替换 {user} 占位符
-    user_md_path = base_dir / "PRD" / "user.md"
-    if user_md_path.exists():
-        user_content = user_md_path.read_text(encoding='utf-8')
-        if 'user' in prompt._messages and '{user}' in prompt._messages['user']:
-            prompt._messages['user'] = prompt._messages['user'].replace('{user}', user_content)
+    # 读取 user.md 并替换 {input} 占位符
+    input_md_path = base_dir / "PRD" / "input.md"
+    if input_md_path.exists():
+        user_content = input_md_path.read_text(encoding='utf-8')
+        if 'user' in prompt._messages and '{input}' in prompt._messages['user']:
+            prompt._messages['user'] = prompt._messages['user'].replace('{input}', user_content)
             print(f"   - 已替换 user.md 内容到 prompt")
         else:
-            print(f"   - 警告: prompt 中未找到 {{user}} 占位符")
+            print(f"   - 警告: prompt 中未找到 {{input}} 占位符")
     else:
-        print(f"   - 警告: user.md 文件不存在: {user_md_path}")
+        print(f"   - 警告: user.md 文件不存在: {input_md_path}")
+
+    output_md_path = base_dir / "PRD" / "output.md"
+    if output_md_path.exists():
+        user_content = output_md_path.read_text(encoding='utf-8')
+        if 'user' in prompt._messages and '{output}' in prompt._messages['user']:
+            prompt._messages['user'] = prompt._messages['user'].replace('{output}', user_content)
+            print(f"   - 已替换 user.md 内容到 prompt")
+        else:
+            print(f"   - 警告: prompt 中未找到 {{output}} 占位符")
+    else:
+        print(f"   - 警告: user.md 文件不存在: {output_md_path}")
 
     print("\n替换后的prompt:")
     print("=" * 60)

+ 45 - 0
examples/create/skills/define.md

@@ -0,0 +1,45 @@
+## 定义
+
+### 选题
+
+选题包含以下维度的信息:
+
+1. **灵感点**:内容中具体呈现或明确描述的、历史中罕见或首次出现的、核心特色元素。
+
+2. **目的点**:由「意图」和「实质」两部分组成,缺一不可。
+   - **意图(Intent)**:创作的动作目的(为什么创作),必须以动词开头
+   - **实质(Substance)**:意图作用的具体 What 对象,必须是名词性短语
+   - **目的点 = 意图 + 实质**:例如「推广护肤产品」「分享旅行经历」「展示宠物日常」
+
+3. **关键点**:不是单一元素,而是支撑维度/论据。
+   - **整体性**:从全部内容(所有图片+文字)的整体出发,而非某单张图片的细节
+   - **支撑性**:最能支撑目的点/灵感点表达中心思想的方面
+   - **显著性**:内容消费者最容易注意到的、最重要的特征
+   - **精准性**:4-6 个,少而精,每个都必不可少
+
+选题的最终呈现,以json的方式。
+```
+{
+    "灵感点":[
+        {
+            "名称":"灵感点名称",
+            "描述":"灵感点描述"
+        },
+        ...
+    ],
+    "目的点":[
+        {
+            "名称":"目的点名称",
+            "描述":"目的点描述"
+        },
+        ...
+    ],
+    "关键点":[
+        {
+            "名称":"关键点名称",
+            "描述":"关键点描述"
+        },
+        ...
+    ],
+}
+```

+ 3 - 3
examples/create/skills/persona_generate.md

@@ -147,8 +147,8 @@
 ## 开始提取
 
 请读取以下三个文件并开始提取:
-- `examples/create/data/{账号名称}/persona`
-- `examples/create/data/{账号名称}/persona`
-- `examples/create/data/{账号名称}/persona`
+- `data/{账号名称}/persona/实质.json`
+- `data/{账号名称}/persona/形式.json`
+- `data/{账号名称}/persona/意图.json`
 
 注意:请将 `{账号名称}` 替换为实际的账号名称。