liuzhiheng 1 день назад
Родитель
Сommit
e9485b8e5e

+ 7 - 6
examples_how/overall_derivation/derivation_main.md

@@ -107,7 +107,8 @@ $system$
 1. **方法一(人设常量)**:工具返回的每一个常量节点必须**单独**成为一条推导路径。例如工具返回了节点 A 和节点 B,必须拆分为两条路径:路径1 input=[A] output=[A],路径2 input=[B] output=[B]。**禁止**将多个独立常量节点合并到同一条路径中。
 1. **方法一(人设常量)**:工具返回的每一个常量节点必须**单独**成为一条推导路径。例如工具返回了节点 A 和节点 B,必须拆分为两条路径:路径1 input=[A] output=[A],路径2 input=[B] output=[B]。**禁止**将多个独立常量节点合并到同一条路径中。
 2. **方法二(账号 pattern 复用)**:工具返回的每一个 pattern 必须**单独**成为一条推导路径。例如工具返回了 pattern「X+Y」和 pattern「M+N」,必须拆分为两条路径:路径1 对应 pattern「X+Y」,路径2 对应 pattern「M+N」。**禁止**将来自不同 pattern 的元素合并到同一条路径中。
 2. **方法二(账号 pattern 复用)**:工具返回的每一个 pattern 必须**单独**成为一条推导路径。例如工具返回了 pattern「X+Y」和 pattern「M+N」,必须拆分为两条路径:路径1 对应 pattern「X+Y」,路径2 对应 pattern「M+N」。**禁止**将来自不同 pattern 的元素合并到同一条路径中。
 3. **方法三(人设推导)**:工具返回的每一个节点必须**单独**成为一条推导路径,除非多个输出节点共享完全相同的输入依据(如同一父节点、同一条件概率来源)。
 3. **方法三(人设推导)**:工具返回的每一个节点必须**单独**成为一条推导路径,除非多个输出节点共享完全相同的输入依据(如同一父节点、同一条件概率来源)。
-4. **通用判断标准**:路径中每一个输入对产出该路径所有输出点都是必要的。如果去掉某个输入,剩余输入仍能独立推导出部分输出,则说明需要拆分。
+4. 方法四允许同一次搜索的多个候选点合并在一条路径中
+5. **通用判断标准**:路径中每一个输入对产出该路径所有输出点都是必要的。如果去掉某个输入,剩余输入仍能独立推导出部分输出,则说明需要拆分。
 
 
 **步骤三:匹配判断**
 **步骤三:匹配判断**
 推导完成后,逐一对本轮所有推导输出点进行匹配判断:
 推导完成后,逐一对本轮所有推导输出点进行匹配判断:
@@ -142,7 +143,7 @@ $system$
 - **操作方式**:调用工具 `find_tree_constant_nodes(account_name=account_name, post_id=post_id)` 获取人设树的全局常量、局部常量节点。工具返回格式示例:
 - **操作方式**:调用工具 `find_tree_constant_nodes(account_name=account_name, post_id=post_id)` 获取人设树的全局常量、局部常量节点。工具返回格式示例:
   ```
   ```
   - 分享  概率=0.913  全局常量  帖子选题点匹配=分享(1.0)
   - 分享  概率=0.913  全局常量  帖子选题点匹配=分享(1.0)
-  - 结构模式  概率=0.6949  全局常量  帖子选题点匹配=无
+  - 叙事结构  概率=0.6949  全局常量  帖子选题点匹配=无
   ```
   ```
   - **推导路径的 `output`**:填写工具返回的**人设树节点名称**(如 `分享`)。
   - **推导路径的 `output`**:填写工具返回的**人设树节点名称**(如 `分享`)。
   - **匹配判断**:读取「帖子选题点匹配」字段——若有值(如 `分享(1.0)`),则 `is_matched=true`,评估日志中 `matched_post_point` 填写括号前的帖子选题点名称(如 `分享`),`matched_reason` 填写匹配分数(如 `1.0`);若字段值为「无」,则 `is_matched=false`。
   - **匹配判断**:读取「帖子选题点匹配」字段——若有值(如 `分享(1.0)`),则 `is_matched=true`,评估日志中 `matched_post_point` 填写括号前的帖子选题点名称(如 `分享`),`matched_reason` 填写匹配分数(如 `1.0`);若字段值为「无」,则 `is_matched=false`。
@@ -171,7 +172,7 @@ $system$
         "derived_nodes": []
         "derived_nodes": []
       },
       },
       "output": ["叙事结构"],
       "output": ["叙事结构"],
-      "reason": "'叙事结构'是局部常量且概率为0.6441,作为账号创作的结构基石。",
+      "reason": "'叙事结构'是局部常量且概率为0.6949,作为账号创作的结构基石。",
       "tools": []
       "tools": []
     }
     }
 ]
 ]
@@ -199,7 +200,7 @@ $system$
   - 图片文字+状态与描绘+补充说明式  条件概率=0.578947 帖子选题点匹配=图片文字→图片文字(1.0)、补充说明式→补充说明式(1.0)
   - 图片文字+状态与描绘+补充说明式  条件概率=0.578947 帖子选题点匹配=图片文字→图片文字(1.0)、补充说明式→补充说明式(1.0)
   - 动物形象+搞笑风格+结构模式  条件概率=0.1356  帖子选题点匹配=无
   - 动物形象+搞笑风格+结构模式  条件概率=0.1356  帖子选题点匹配=无
   ```
   ```
-  - **推导路径的 `output`**:填写工具返回的 **pattern 中尚未推导成功的元素名称**(如 `日常物品`)。
+  - **推导路径的 `output`**:填写工具返回的 **pattern 中尚未推导成功的元素名称**(如 `日常物品`),若某 pattern 中所有元素均已推导成功,则跳过该 pattern,不生成推导路径
   - **匹配判断**:读取「帖子选题点匹配」字段——格式为 `元素名称→帖子选题点名称(分数)`;若某输出点的元素名称出现在该字段中,则 `is_matched=true`,评估日志中 `matched_post_point` 填写箭头后的帖子选题点名称(如 `日常物品`),`matched_reason` 填写匹配分数;若字段值为「无」或该元素未出现,则 `is_matched=false`。
   - **匹配判断**:读取「帖子选题点匹配」字段——格式为 `元素名称→帖子选题点名称(分数)`;若某输出点的元素名称出现在该字段中,则 `is_matched=true`,评估日志中 `matched_post_point` 填写箭头后的帖子选题点名称(如 `日常物品`),`matched_reason` 填写匹配分数;若字段值为「无」或该元素未出现,则 `is_matched=false`。
   - 注意:pattern 元素名称与其匹配到的帖子选题点名称**可能不同**,`output` 始终是元素名称,`matched_post_point` 始终是帖子选题点名称。
   - 注意:pattern 元素名称与其匹配到的帖子选题点名称**可能不同**,`output` 始终是元素名称,`matched_post_point` 始终是帖子选题点名称。
 - **优先级**:优先使用条件概率高、pattern 长度(节点数)大的结果;与已推导选题点重合多的 pattern 更优先(工具已自动排序)。
 - **优先级**:优先使用条件概率高、pattern 长度(节点数)大的结果;与已推导选题点重合多的 pattern 更优先(工具已自动排序)。
@@ -503,8 +504,8 @@ $system$
       "id": 1,
       "id": 1,
       "method": "推导方法名称(见「推导方法的定义」章节)",
       "method": "推导方法名称(见「推导方法的定义」章节)",
       "input": {
       "input": {
-        "tree_nodes": ["人设节点名称1", "人设节点名称2"],
-        "patterns": ["选题点名称1+选题点名称2", "选题点名称3+选题点名称4"],
+        "tree_nodes": ["人设节点名称"],
+        "patterns": ["名称1+名称2"],
         "derived_nodes": ["已推导的选题点名称1", "已推导的选题点名称2"]
         "derived_nodes": ["已推导的选题点名称1", "已推导的选题点名称2"]
       },
       },
       "output": ["本次推导出的选题点名称1", "本次推导出的选题点名称2"],
       "output": ["本次推导出的选题点名称1", "本次推导出的选题点名称2"],

+ 1 - 1
examples_how/overall_derivation/tools/find_pattern.py

@@ -320,7 +320,7 @@ def main() -> None:
     #     {"topic": "叙事结构", "source_node": "叙事结构"},
     #     {"topic": "叙事结构", "source_node": "叙事结构"},
     # ]
     # ]
     derived_items = derived_items = [{"source_node":"分享","topic":"分享"},{"source_node":"叙事结构","topic":"叙事结构"},{"source_node":"图片文字","topic":"图片文字"},{"source_node":"补充说明式","topic":"补充说明式"},{"source_node":"幽默化标题","topic":"幽默化标题"},{"source_node":"标题","topic":"标题"}]
     derived_items = derived_items = [{"source_node":"分享","topic":"分享"},{"source_node":"叙事结构","topic":"叙事结构"},{"source_node":"图片文字","topic":"图片文字"},{"source_node":"补充说明式","topic":"补充说明式"},{"source_node":"幽默化标题","topic":"幽默化标题"},{"source_node":"标题","topic":"标题"}]
-    conditional_ratio_threshold = 0.1
+    conditional_ratio_threshold = 0.01
     top_n = 2000
     top_n = 2000
 
 
     # 1)直接调用核心函数(不含帖子匹配,仅验证排序逻辑)
     # 1)直接调用核心函数(不含帖子匹配,仅验证排序逻辑)

+ 1 - 1
examples_how/overall_derivation/tools/find_tree_node.py

@@ -350,7 +350,7 @@ def main() -> None:
     #     {"topic": "叙事结构", "source_node": "叙事结构"},
     #     {"topic": "叙事结构", "source_node": "叙事结构"},
     # ]
     # ]
     derived_items = [{"source_node":"分享","topic":"分享"},{"source_node":"叙事结构","topic":"叙事结构"},{"source_node":"图片文字","topic":"图片文字"},{"source_node":"补充说明式","topic":"补充说明式"},{"source_node":"幽默化标题","topic":"幽默化标题"},{"source_node":"标题","topic":"标题"}]
     derived_items = [{"source_node":"分享","topic":"分享"},{"source_node":"叙事结构","topic":"叙事结构"},{"source_node":"图片文字","topic":"图片文字"},{"source_node":"补充说明式","topic":"补充说明式"},{"source_node":"幽默化标题","topic":"幽默化标题"},{"source_node":"标题","topic":"标题"}]
-    conditional_ratio_threshold = 0.1
+    conditional_ratio_threshold = 0.01
     top_n = 1000
     top_n = 1000
 
 
     # # 1)常量节点(核心函数,无匹配)
     # # 1)常量节点(核心函数,无匹配)

+ 1 - 1
examples_how/overall_derivation/tools/point_match.py

@@ -26,7 +26,7 @@ except ImportError:
 _BASE_INPUT = Path(__file__).resolve().parent.parent / "input"
 _BASE_INPUT = Path(__file__).resolve().parent.parent / "input"
 
 
 # 默认匹配阈值
 # 默认匹配阈值
-DEFAULT_MATCH_THRESHOLD = 0.78
+DEFAULT_MATCH_THRESHOLD = 0.6
 
 
 
 
 def _post_topic_file(account_name: str, post_id: str) -> Path:
 def _post_topic_file(account_name: str, post_id: str) -> Path: