luojunhui 1 dzień temu
rodzic
commit
b2ffcaf641

+ 82 - 0
tests/skills/account_precipitation.md

@@ -0,0 +1,82 @@
+---
+name: account_precipitation
+description: 账号沉淀策略(公众号账号信息提取与聚合)
+---
+
+# 账号沉淀策略(公众号账号信息提取与聚合)
+
+## 目标
+
+基于已筛选文章,调用 `fetch_weixin_account` 获取公众号账号信息,完成账号层面的沉淀与聚合,形成可复用的“优质账号池”。
+
+---
+
+## 输入与输出
+
+### 输入
+- 文章列表(建议来自 `article_filter_strategy` 输出)
+- 每条至少包含 `url`、`title`
+- url链接必须是完整的链接,绝对不能修改或者截断
+
+### 输出
+- 去重后的账号列表
+- 每个账号包含:`account_id`、`account_name`、`article_count`、`sample_articles`、`tags`(可选)
+
+---
+
+## 工具使用规则
+
+### 必用工具
+- `fetch_weixin_account`:根据文章查询其所属公众号账号信息
+
+### 调用顺序
+1. 遍历文章,逐条调用 `fetch_weixin_account`, 输入的信息是 `wx_gh`, 是一个以 `gh_` 开头的字符串
+2. 将返回账号按唯一键聚合(优先 `account_id`)
+3. 统计每个账号命中文章数与代表文章
+4. 生成账号沉淀结果
+
+---
+
+## 聚合与去重规则
+
+- 优先用 `account_id` 去重;若无 `account_id`,使用 `account_name` 兜底
+- 同一账号下累计:
+  - `article_count += 1`
+  - 将文章标题加入 `sample_articles`(保留前 3-5 条示例)
+- 若账号字段冲突,采用“非空优先 + 最新记录优先”策略
+
+---
+
+## 质量筛选(账号层)
+
+用于后续细化,可先保留框架:
+
+- **内容匹配度**:账号历史内容是否持续覆盖老年人关注主题
+- **稳定性**:不是一次性命中,而是多篇文章持续命中
+- **可信度**:内容风格是否理性、信息是否相对可靠
+
+> 当前阶段先沉淀,不强制淘汰;后续可在此增加评分阈值。
+
+---
+
+## 数据真实性要求
+
+- 账号信息必须来自 `fetch_weixin_account` 返回
+- 不得根据标题或 URL 猜测账号名
+- 文章与账号映射关系必须可追溯(建议保留 `source_urls`)
+
+---
+
+## 输出建议格式
+
+```json
+[
+  {
+    "account_id": "gh_xxx",
+    "account_name": "示例公众号",
+    "article_count": 4,
+    "sample_articles": ["标题A", "标题B", "标题C"],
+    "tags": ["健康科普", "防诈骗"]
+  }
+]
+```

+ 103 - 0
tests/skills/article_filter_strategy.md

@@ -0,0 +1,103 @@
+---
+name: article_filter_strategy
+description: 文章过滤与筛选策略(老年人兴趣向)
+---
+
+# 文章过滤与筛选策略(老年人兴趣向)
+
+## 目标
+
+在 `article_finding_strategy` 拿到候选文章后,调用 `fetch_article_detail` 获取详情,筛选出更适合老年人、且老年人更感兴趣的内容,输出可直接使用的高质量文章集合。
+
+---
+
+## 输入与输出
+
+### 输入
+- `input_query`(用户原始需求)
+- 候选文章列表(至少包含 `url`、`title`、`statistics.time`)
+- 目标数量 **M**
+
+### 输出
+- 通过筛选的文章列表(最多 M 条)
+- 每条保留:`title`、`url`、`publish_time`、`reason`(入选原因)
+- 可选附加:`score`(用于内部排序)
+
+---
+
+## 工具使用规则
+
+### 必用工具
+- `fetch_article_detail`:用于查询文章详情(正文、摘要、标签、互动信息等)
+
+### 调用顺序
+1. 先基于候选列表做初筛(去重、基础质量过滤)
+2. 对初筛后的文章逐条调用 `fetch_article_detail`
+3. 根据详情做老年人兴趣打分与淘汰
+4. 按得分排序,输出前 M 条
+
+---
+
+## 筛选框架(老年人导向)
+
+采用三阶段筛选:**相关性判断** + **硬性淘汰** + **兴趣评分**。
+
+### 一、相关性判断(与 `input_query` 对齐)
+
+先判断文章与用户需求是否相关,再进入后续评分。
+
+- **核心意图匹配**:文章是否回答了 `input_query` 的主要问题
+- **关键信息匹配**:主题、对象、人群、场景是否与 query 一致
+- **偏题惩罚**:仅关键词相似但实际内容跑题,判定为低相关
+
+建议先按高/中/低分档:
+- 高相关:直接围绕 query 展开,信息可直接用于需求
+- 中相关:部分覆盖 query,需要用户二次判断
+- 低相关:偏题或仅弱关联,优先淘汰
+
+### 二、硬性淘汰(任一命中即排除)
+- 内容明显低俗、猎奇惊悚、过度煽动情绪
+- 医疗健康类但存在明显不实或夸大表述
+- 标题党严重、正文信息密度极低
+- 与用户主题完全无关
+
+### 三、兴趣评分(建议维度)
+- **需求价值(query-driven)**:是否真正解决 `input_query`,并给出可执行、可理解的信息
+- **可读性**:结构清晰、语言直白、专业术语少
+- **可信度**:来源可靠、论述相对客观、有明确依据
+- **情感适配**:积极稳健,不过度制造焦虑
+- **时效性**:在可接受时间范围内(避免过旧信息误导)
+
+> 说明:先用相对评分即可(高/中/低),后续再细化成数值阈值。  
+> 价值判断不再限定固定品类,而是以 `input_query` 为核心做动态匹配。
+
+---
+
+## 结果数量控制
+
+- 若通过数 **C >= M**:按评分取前 M 条输出
+- 若 **M × 0.8 <= C < M**:输出当前结果并标注“数量接近目标”
+- 若 **C < M × 0.8**:返回上游继续补充候选,再进入本流程
+
+---
+
+## 数据真实性与一致性
+
+- 仅使用工具返回数据,不编造字段
+- `title`、`url`、`publish_time` 必须来自同一条记录
+- `reason` 必须基于可验证内容生成(例如“涉及防诈骗案例且表达清晰”)
+
+---
+
+## 输出建议格式
+
+```json
+[
+  {
+    "title": "文章标题",
+    "url": "完整链接",
+    "publish_time": 1710000000,
+    "reason": "适合老年人阅读:主题实用、表达清晰、信息可信"
+  }
+]
+```