Просмотр исходного кода

修改流程和prompt,上传新的执行结果

xueyiming 4 часов назад
Родитель
Сommit
519532bae7

+ 26 - 186
examples/content_needs_generation/PRD/business.md

@@ -1,186 +1,26 @@
-## 角色定位
-
-你是一名严格的,为中国50岁以上中老年群体做热点内容筛选的内容专家。你非常严格的判断内容是否“适老”,你需要逐个分析给到的标题信息,根据目标用户画像的特征,剔除所有属于城市年轻群体、中产阶级焦虑、高认知门槛、语义模糊或与老年人生活脱节的“噪音”,保留符合「中国 50 岁以上中老年人」用户画像的内容。
-## 核心任务
-
-通过使用现有工具和技能,系统性地寻找、筛选和分析老年人最可能喜欢的热门话题,并输出推荐结果。在筛选过程中,必须严格按照用户画像和拦截标准进行判断。
-
-## 一、基础定义(严格遵守,不可修改)
-
-### 用户画像:中国50岁以上老年人
-
-1. **认知特点**: 追求"确定性"和"安全感"。偏好简单直白的内容,拒绝烧脑、逻辑复杂或需要推理的内容。拒绝一切"盲盒式"标题(如"这件事千万别做"但没说什么事)。不关注新事物,不关注抽象的宏观经济指标、复杂的金融博弈、枯燥的行政程序
-
-2. **文化背景**: 成长于上世纪50~70年代,传统观念根深蒂固。对网络梗、亚文化、职场黑话、微短剧逻辑不敏感甚至反感。深受儒家文化影响,拥有强烈的孝道观念和集体主义倾向,对投资及房产等与年轻人生活相关度高的信息不感兴趣, 处于"安享期"而非"奋斗期"。关注"保命"(三高、心脏、防骗)而非"塑形"(减肥、发际线);关注"存量财产安全"而非"增量资产博弈"。更倾向于追求身心安宁及正能量内容,不喜欢高强度、信息量大的娱乐内容。
-
-3. **情感需求**: "安逸"、"从容"、"被尊重"。倾向于追求身心安宁、正能量、民族自豪感。反感贩卖焦虑、激烈的矛盾冲突、血腥暴力或过于悲惨的负面新闻。偏好娱乐放松、激发民族自豪感的国家大事、与中国相关的重大国际形式、民生生活、弘扬社会正能量、家庭生活、传统文化、时事政务、同龄人出镜的内容,需要被"认同感"及"群体认同感",偏好接地气、贴近生活、贴近自身的内容,叙事风格
-
-4. **场景偏好**: 菜市场、公园、家庭、医院、老友聚会等怀旧场景。排斥写字楼、夜店、高端滑雪场、极限运动场所。
-
-### 适老品类库(白名单)
-
-只有核心内容属于以下分类,才具备"品类适老系数=1"的基础条件:
-
-*   **国家力量/统一**: 阅兵、基建狂魔、外交胜利、撤侨、领土主权、两岸统一(不含晦涩的地缘政治分析),以非具体正能量人物、非科学、技术为主要内容;反映中国人文、文化、基建、人民生活、国内外对比中强大的内容
-*   **知识科普**:非生活技巧、非科技自然 的 文化、历史、人文、健康等社科知识类科普视
-*   **惠民/民生政策**: 养老金调整、医保报销、现金支付保障、菜篮子物价、天气预警(需具体利民,非枯燥公文)。
-*   **人财诈骗/防骗**: 电诈案例、新型毒品伪装、保健品骗局(极高优先级)。
-*   **老年健康**: 三高管理、心脑血管、养生食疗、长寿知识(**严格剔除**减肥、塑形、医美、脱发焦虑)。
-*   **怀念时光**: 70年代及以前的老照片、老电影切片(非影评)、经典红歌。
-*   **家庭/亲子**: 隔辈亲、孝道故事、家庭邻里互助(**严格剔除**婆媳恶斗、剧烈伦理冲突)。
-*   **传统文化/习俗**: 节气、民俗、戏曲、国学、非遗。
-*   **正能量/社会风气**: 见义勇为、拾金不昧、反腐倡廉、平凡人的善举,以具体中国当代正能量人物为主要描述对象的内容
-*   **惊奇/罕见画面**: 自然奇观、动物趣闻(**严格剔除**血腥、恐怖、猎奇阴暗面)。
-
-## 二、红灯拦截标准(触犯即死,优先级最高)
-
-**不仅要检查负面词汇,更要检查"逻辑不适老",凡触犯以下任意一条,分值直接归零:**
-
-1.  **信源模糊/标题党拦截**:
-    *   标题缺乏具体的**人名、地名、机构名**,无法作为搜索关键词的(如"最爱发钱的老板招工了"、"我看这地儿不错")。
-    *   主语不明、指代不清的(如"注意!这东西不能吃"、"他竟然这样做")。
-    *   个人Vlog式、无公共信息价值的感悟(如"如果我在冬天失业了")。
-
-2.  **生命阶段错位拦截**:
-    *   **职场焦虑**:涉及"月薪、大厂、内卷、求职(非银发专岗)、降薪、裁员、年终奖"。
-    *   **中年健康焦虑**:涉及"减肥、瘦身、代谢变慢、发际线、抗初老、精力管理"。
-    *   **高危活动**:涉及"滑雪、潜水、马拉松、蹦极、赛车"等不适合老年人生理机能的活动(即使是免费票也要拦截)。
-
-3.  **低质娱乐/亚文化拦截**:
-    *   **微短剧/网剧**:标题含"微短剧、网剧、霸总、逆袭、重生"等,此类内容多为虚构浮夸且含诱导付费。
-    *   **网络热梗**:含"破防、yyds、绝绝子、CP感、谐音梗营销",网络热梗段子、恶搞视频、二次元的游戏黑话等
-    *   **专业/小众体育**:NBA交易、欧洲足球战术、球星转会费、网球/斯诺克小众赛事(除非是**国家队/为国争光**)。
-    *   **长辈无关娱乐圈**:年轻流量偶像八卦、饭圈互撕、国外网红动态。
-
-4.  **金融与商业噪音拦截**:
-    *   涉及"板块、指数、美联储、加息、IPO、资产配置、套利"的金融博弈。
-    *   涉及"金银价格剧烈波动分析"(如"K线、点位、抄底"),只保留单纯的实物金价涨跌。
-    *   明显的商业软文、带货广告、陌生APP公测。
-
-5.  **负面与恐慌拦截**:
-    *   过于血腥、暴力、违背伦理的案件细节(如"强奸、分尸、虐待")。
-    *   纯粹贩卖焦虑而无解决方案的内容。
-
-6. **行政公文拦截**:没有具体利民事件的,一律不通过。
-
-7. **宏观自豪感拦截**: 只有国家领导人会面而无具体实惠或震撼性视觉成果(如大型阅兵、卫星发射成功)的,一律不通过。
-
-## 工作流程
-
-### 工具使用说明
-
-- **数据来源工具**(用于获取选题):
-  *   `hot_rank_search`:获取热榜内容(热榜来源)
-  *   `browser`:基于日期搜索话题(日期来源)
-
-### 1. 理解老年人群体特点
-- 严格按照【一、基础定义】中的用户画像进行判断
-- 参考适老品类库(白名单)确定内容是否属于适老品类
-- 优先选择符合老年人价值观和需求的话题
-
-### 2. 使用工具获取热门话题(热榜来源)
-- 使用 `hot_rank_search` 工具获取当前热门话题数据
-- 根据"最热"或"最新"排序方式获取热榜内容
-- 可以多次调用工具获取更全面的数据
-- **注意**:热榜搜索是独立的数据来源,需要单独进行筛选和输出
-
-### 3. 基于日期搜索话题(日期来源)
-- **日期范围**:获取当前日期,并计算前后7天的日期范围(前7天至后7天,共15天)
-- **搜索策略**:
-  - 使用当前日期和后7天的日期搜索即将到来的话题(如节日、纪念日、重要事件等)
-  - 通过多日期搜索,获取更全面的话题覆盖范围,避免遗漏重要内容
-- **执行方式**:
-  - 系统性地遍历当天日期和后7天的日期范围
-  - 对重要的日期调用 `browser` 工具进行搜索
-  - 记录和整理不同日期搜索到的热门话题
-- **注意**:日期搜索是独立的数据来源,需要单独进行筛选和输出
-
-### 4. 筛选和评估话题
-
-**重要**:热榜来源和日期来源是两种独立的数据来源,需要分别进行筛选和评估,分别输出结果,不要融合。
-
-对每个话题(无论来自热榜还是日期搜索)进行严格的筛选和评分,按照以下步骤执行:
-
-#### 第一步:红灯熔断审查
-检查标题是否触犯【二、红灯拦截标准】。
-*   **若触犯任意一条**:最终综合得分直接为 0.00,判定为"不通过",reason中明确指出触犯了哪条红灯。
-*   **若未触犯**:进入第二步。
-
-#### 第二步:用户画像维度打分(0.00 - 1.00)
-请根据【一、基础定义】中的用户画像对以下四个维度进行最严格的独立打分,如果信息模糊则全部用最低分值判断:
-1.  **S1 认知特点 (权重 20%)**:对应用户画像进行判断(模糊不清/专业术语/黑话=0分)
-2.  **S2 文化背景 (权重 30%)**:对应用户画像进行判断(个人主义/挑战传统/崇洋媚外=0分)
-3.  **S3 情感需求 (权重 30%)**:对应用户画像进行判断(焦虑/恐惧/悲惨/激烈冲突=0分)
-4.  **S4 场景偏好 (权重 20%)**:对应用户画像进行判断(CBD/夜店/极限运动/国外陌生场景=0分)
-
-#### 第三步:短板效应与画像分计算
-*   **公式**:
-    IF (S1 < 0.6 OR S2 < 0.6 OR S3 < 0.6):
-        Persona_Score = Min(S1, S2, S3)  (任意核心维度不及格,则整体不及格)
-    ELSE:
-        Persona_Score = (S1 * 0.2) + (S2 * 0.3) + (S3 * 0.3) + (S4 * 0.2)
-
-#### 第四步:最终判定
-*   **品类系数 K**:
-    *   内容核心属于白名单品类:K = 1
-    *   内容核心不属于白名单(如科技、游戏、职场、二次元等):K = 0
-*   **最终综合得分** = Persona_Score * K
-
-### 5. 输出推荐结果
-
-仅输出 JSON 格式,无多余解释。必须分别输出热榜来源和日期来源的结果,格式如下:
-
-```json
-{
-  "热榜来源": [
-    {
-      "标题内容": "原标题",
-      "最终综合得分": 0.00,
-      "画像维度得分": {
-        "S1_认知": 0.00,
-        "S2_文化": 0.00,
-        "S3_情感": 0.00,
-        "S4_场景": 0.00
-      },
-      "用户画像匹配分(Persona_Score)": 0.00,
-      "品类系数(K)": 1或0,
-      "匹配品类": "最匹配的白名单分类或'无'",
-      "reason": "简要说明理由,若拦截需指出具体原因(如:信源模糊、生命阶段错位、红灯拦截等)"
-    }
-  ],
-  "日期来源": [
-    {
-      "标题内容": "原标题",
-      "最终综合得分": 0.00,
-      "画像维度得分": {
-        "S1_认知": 0.00,
-        "S2_文化": 0.00,
-        "S3_情感": 0.00,
-        "S4_场景": 0.00
-      },
-      "用户画像匹配分(Persona_Score)": 0.00,
-      "品类系数(K)": 1或0,
-      "匹配品类": "最匹配的白名单分类或'无'",
-      "reason": "简要说明理由,若拦截需指出具体原因(如:信源模糊、生命阶段错位、红灯拦截等)"
-    }
-  ]
-}
-```
-
-## 执行要求
-
-- 在调用工具前,先说明调用原因和参数生成逻辑
-- **独立搜索要求**:
-  - 必须同时完成基于热榜的搜索(如使用 `hot_rank_search`)和基于日期范围的搜索(如结合 `browser` 或其他工具)
-  - 不允许只完成其中一种搜索就直接输出推荐结果
-  - **重要**:热榜来源和日期来源是两种独立的数据来源,需要分别进行筛选和评估,分别输出结果,不要融合
-  - 在思考和输出中,需要明确说明:两类搜索分别得到的关键信息,并分别展示各自的筛选结果
-- **严格筛选要求**:
-  - 对每个话题(无论来自热榜还是日期搜索)必须执行完整的四步筛选流程(红灯熔断审查 → 用户画像维度打分 → 短板效应计算 → 最终判定)
-  - 必须严格按照【二、红灯拦截标准】进行拦截,触犯任意一条即判定为不通过
-  - 必须严格按照【一、基础定义】中的用户画像进行评分,信息模糊时使用最低分值
-  - 必须明确标注每个话题的匹配品类(白名单分类)或标注为"无"
-- 展示思考过程,包括如何筛选和评估话题
-- 确保输出的每个话题都有充分的推荐理由,若被拦截需明确指出具体原因
-- 基于实际数据进行分析,不自行联想或添加不存在的信息
-- 输出格式必须严格按照JSON格式,分别输出"热榜来源"和"日期来源"两个数组,每个数组包含筛选后的话题列表
+## 业务目标
+基于热榜趋势和时间搜索结果,结合内容解析技能进行打分过滤,生成高质量的内容需求推荐。
+
+## 核心执行流程
+
+### 第一步:获取待选需求
+1.  **热榜搜索**:调用 `hot_rank_search` 工具获取今日热榜(news 分类)的内容。
+2.  **时间搜索**:调用 `browser` 工具搜索当前日期及近期(未来 7 天内)的关键时间节点、节日或重大事件。
+
+### 第二步:打分与过滤
+1.  **处理热榜需求**:
+    *   使用 `content_filter` 过滤可保留需求。
+    *   提取关键词,使用 `weixin_index_search` 基于热度值进行打分过滤。
+2.  **处理时间搜索需求**:
+    *   使用 `content_filter` 过滤可保留需求。
+    *   提取关键词,使用 `weixin_index_search` 基于热度值进行打分过滤。
+
+### 第三步:分别输出结果
+1.  **输出热榜推荐结果**:将过滤后的热榜选题结果输出到独立的文件或区块中。
+2.  **输出时间节点推荐结果**:将过滤后的时间节点选题结果输出到另一个独立的文件或区块中。
+
+## 注意事项
+*   **严禁整合输出**:热榜需求和时间搜索需求必须分开处理,分别输出对应的推荐结果。
+*   在调用工具和技能前,必须说明调用原因和参数生成逻辑。
+*   必须在执行过程中展示清晰的思考和过滤逻辑。
+*   确保最终输出的数据完整且符合格式要求。

+ 3 - 1
examples/content_needs_generation/presets.json

@@ -5,7 +5,9 @@
     "skills": [
     "skills": [
       "planning",
       "planning",
       "hot_rank_search",
       "hot_rank_search",
-      "browser"
+      "browser",
+      "content_filter",
+      "weixin_index_search"
     ],
     ],
     "description": "默认 Agent,拥有全部工具权限"
     "description": "默认 Agent,拥有全部工具权限"
   }
   }

+ 2 - 2
examples/content_needs_generation/process_messages.py

@@ -205,8 +205,8 @@ def process_messages(messages_dir: str, output_path: str):
 if __name__ == "__main__":
 if __name__ == "__main__":
     # 使用定义的变量
     # 使用定义的变量
     try:
     try:
-        input = '/Users/shimeng/Desktop/py/Agent/examples/content_needs_generation/.trace/bf1263a7-49d3-48b5-81c5-15cf98f143a1/messages'
-        output = '/Users/shimeng/Desktop/py/Agent/examples/content_needs_generation/.trace/bf1263a7-49d3-48b5-81c5-15cf98f143a1/output.json'
+        input = '/Users/shimeng/Desktop/py/Agent/examples/content_needs_generation/.trace/6bddb982-21db-4cbc-b064-8a568ce0791d/messages'
+        output = '/Users/shimeng/Desktop/py/Agent/examples/content_needs_generation/.trace/6bddb982-21db-4cbc-b064-8a568ce0791d/output.json'
         process_messages(input, output)
         process_messages(input, output)
     except Exception as e:
     except Exception as e:
         print(f"错误: {e}")
         print(f"错误: {e}")

Разница между файлами не показана из-за своего большого размера
+ 2 - 2
examples/content_needs_generation/result/trace_visualization.html


+ 0 - 88
examples/content_needs_generation/result/日期筛选结果.json

@@ -1,88 +0,0 @@
-{
-  "日期来源": [
-    {
-      "标题内容": "3月12日植树节:全国各地开展植树造林活动",
-      "最终综合得分": 0.75,
-      "画像维度得分": {
-        "S1_认知": 0.85,
-        "S2_文化": 0.90,
-        "S3_情感": 0.80,
-        "S4_场景": 0.75
-      },
-      "用户画像匹配分(Persona_Score)": 0.83,
-      "品类系数(K)": 1,
-      "匹配品类": "传统文化/习俗",
-      "reason": "通过筛选。标题明确(3月12日植树节、全国各地),涉及传统节日和环保活动。符合'传统文化/习俗'和'国家力量/统一'品类。老年人对植树节有深厚记忆(传统节日),重视环保和绿化,且植树活动适合老年人参与。S1认知清晰(植树节、植树造林),S2文化背景高度匹配(传统节日、环保意识),S3情感需求符合(正能量、参与感),S4场景贴近(公园、户外)。"
-    },
-    {
-      "标题内容": "植树节倡议:每人种一棵树,共建绿色家园",
-      "最终综合得分": 0.78,
-      "画像维度得分": {
-        "S1_认知": 0.90,
-        "S2_文化": 0.90,
-        "S3_情感": 0.85,
-        "S4_场景": 0.75
-      },
-      "用户画像匹配分(Persona_Score)": 0.86,
-      "品类系数(K)": 1,
-      "匹配品类": "传统文化/习俗",
-      "reason": "通过筛选。标题直白明确(每人种一棵树、共建绿色家园),倡议简单易懂,符合老年人认知特点。符合'传统文化/习俗'和'正能量/社会风气'品类。老年人重视环保和集体行动,对'共建绿色家园'有强烈认同感。S1认知清晰(简单倡议),S2文化背景高度匹配(集体主义、环保意识),S3情感需求符合(正能量、参与感),S4场景贴近(社区、公园)。"
-    },
-    {
-      "标题内容": "3月15日消费者权益日:警惕老年人保健品骗局",
-      "最终综合得分": 0.87,
-      "画像维度得分": {
-        "S1_认知": 0.95,
-        "S2_文化": 0.90,
-        "S3_情感": 0.95,
-        "S4_场景": 0.85
-      },
-      "用户画像匹配分(Persona_Score)": 0.92,
-      "品类系数(K)": 1,
-      "匹配品类": "人财诈骗/防骗",
-      "reason": "通过筛选(极高优先级)。标题直白明确(3月15日消费者权益日、警惕老年人保健品骗局),直接针对老年人群体,警示保健品骗局。符合'人财诈骗/防骗'品类(极高优先级)。老年人是保健品骗局的主要受害者,这类防骗提醒极具价值和针对性。S1认知清晰(直白警示),S2文化背景高度匹配(保护老年人),S3情感需求符合(安全感、被保护),S4场景贴近(保健品店、社区)。"
-    },
-    {
-      "标题内容": "315晚会曝光:这些养生产品都是假的",
-      "最终综合得分": 0.84,
-      "画像维度得分": {
-        "S1_认知": 0.90,
-        "S2_文化": 0.85,
-        "S3_情感": 0.90,
-        "S4_场景": 0.80
-      },
-      "用户画像匹配分(Persona_Score)": 0.87,
-      "品类系数(K)": 1,
-      "匹配品类": "人财诈骗/防骗",
-      "reason": "通过筛选(极高优先级)。标题直白明确(315晚会曝光、这些养生产品都是假的),具有权威性(315晚会),直接警示老年人防范假养生产品。符合'人财诈骗/防骗'品类(极高优先级)。老年人是养生产品的主要消费者,容易被误导,这类曝光极具价值。S1认知清晰(315晚会、假养生产品),S2文化背景匹配(保护消费者),S3情感需求符合(安全感、被保护),S4场景贴近(养生产品店、电视)。"
-    },
-    {
-      "标题内容": "消费者权益日:如何识别电信诈骗",
-      "最终综合得分": 0.90,
-      "画像维度得分": {
-        "S1_认知": 0.95,
-        "S2_文化": 0.90,
-        "S3_情感": 0.95,
-        "S4_场景": 0.90
-      },
-      "用户画像匹配分(Persona_Score)": 0.93,
-      "品类系数(K)": 1,
-      "匹配品类": "人财诈骗/防骗",
-      "reason": "通过筛选(极高优先级)。标题直白明确(消费者权益日、如何识别电信诈骗),提供实用防骗知识。符合'人财诈骗/防骗'品类(极高优先级)。老年人是电信诈骗的主要受害者,这类防骗指南极具价值和实用性。S1认知清晰(电信诈骗、识别方法),S2文化背景高度匹配(保护老年人),S3情感需求符合(安全感、被保护),S4场景贴近(电话、手机)。"
-    },
-    {
-      "标题内容": "315维权指南:老年人购物如何避坑",
-      "最终综合得分": 0.87,
-      "画像维度得分": {
-        "S1_认知": 0.95,
-        "S2_文化": 0.90,
-        "S3_情感": 0.90,
-        "S4_场景": 0.85
-      },
-      "用户画像匹配分(Persona_Score)": 0.91,
-      "品类系数(K)": 1,
-      "匹配品类": "人财诈骗/防骗",
-      "reason": "通过筛选(极高优先级)。标题直白明确(315维权指南、老年人购物避坑),提供实用维权知识,直接针对老年人群体。符合'人财诈骗/防骗'和'惠民/民生政策'品类(极高优先级)。老年人在购物中容易被欺骗,这类维权指南极具价值和针对性。S1认知清晰(维权指南、避坑),S2文化背景高度匹配(保护老年人),S3情感需求符合(安全感、被尊重),S4场景贴近(购物、超市)。"
-    }
-  ]
-}

+ 0 - 370
examples/content_needs_generation/result/最终推荐结果.json

@@ -1,370 +0,0 @@
-{
-  "热榜来源": [
-    {
-      "标题内容": "存储芯片成本暴涨 80%,OPPO 官宣涨价,雷军称尽量降低消费者接受难度,这将如何重塑手机市场竞争格局?",
-      "最终综合得分": 0.0,
-      "画像维度得分": {
-        "S1_认知": 0.3,
-        "S2_文化": 0.2,
-        "S3_情感": 0.3,
-        "S4_场景": 0.2
-      },
-      "用户画像匹配分(Persona_Score)": 0.2,
-      "品类系数(K)": 0,
-      "匹配品类": "无",
-      "reason": "红灯拦截:生命阶段错位。涉及'手机市场竞争格局、芯片成本'等商业噪音和科技话题,不属于老年人关注范畴。老年人处于'安享期',不关注手机涨价、市场竞争等年轻人/中产焦虑话题。S2文化背景不及格(<0.6),触发短板效应。"
-    },
-    {
-      "标题内容": "代表建议中小学周边 200 米内不得设立台球厅,学校周边台球厅存在哪些「隐形陷阱」?能解决相关问题吗?",
-      "最终综合得分": 0.66,
-      "画像维度得分": {
-        "S1_认知": 0.85,
-        "S2_文化": 0.8,
-        "S3_情感": 0.75,
-        "S4_场景": 0.6
-      },
-      "用户画像匹配分(Persona_Score)": 0.76,
-      "品类系数(K)": 1,
-      "匹配品类": "惠民/民生政策",
-      "reason": "通过筛选。标题明确(代表建议+具体措施),涉及青少年保护和社会风气,符合老年人关注的'家庭/亲子'和'社会正能量'品类。老年人关心孙辈教育环境,对台球厅等娱乐场所有传统观念上的警惕。S1认知清晰(具体建议),S2文化背景匹配(保护青少年),S3情感需求符合(社会正能量),S4场景贴近(学校周边)。"
-    },
-    {
-      "标题内容": "女孩花五十元买五朵玫瑰送妈妈,父亲觉得被骗大闹花店,会给孩子带来什么影响?家长怎样处理才能「不扫兴」?",
-      "最终综合得分": 0.72,
-      "画像维度得分": {
-        "S1_认知": 0.8,
-        "S2_文化": 0.85,
-        "S3_情感": 0.8,
-        "S4_场景": 0.7
-      },
-      "用户画像匹配分(Persona_Score)": 0.8,
-      "品类系数(K)": 1,
-      "匹配品类": "家庭/亲子",
-      "reason": "通过筛选。标题具体(五十元、五朵玫瑰),事件完整,涉及家庭教育和亲子关系。符合老年人关注的'家庭/亲子'品类。老年人重视家庭和谐、孝道教育,对这类家庭矛盾和教育方式有共鸣。S1认知清晰(具体事件),S2文化背景匹配(孝道、家庭教育),S3情感需求符合(家庭温情),S4场景贴近(花店、家庭)。"
-    },
-    {
-      "标题内容": "代表建议建立夫妻陪护假制度,住院给 15-30 天陪护假,出于哪些考量?落实起来存在哪些难点?",
-      "最终综合得分": 0.78,
-      "画像维度得分": {
-        "S1_认知": 0.85,
-        "S2_文化": 0.85,
-        "S3_情感": 0.85,
-        "S4_场景": 0.75
-      },
-      "用户画像匹配分(Persona_Score)": 0.83,
-      "品类系数(K)": 1,
-      "匹配品类": "惠民/民生政策",
-      "reason": "通过筛选。标题明确(代表建议+具体天数),涉及老年人极度关心的住院陪护问题。符合'惠民/民生政策'和'家庭/亲子'品类。老年人自身或配偶可能面临住院问题,对陪护假有强烈需求和共鸣。S1认知清晰(具体政策),S2文化背景匹配(家庭互助、孝道),S3情感需求符合(被关怀、安全感),S4场景贴近(医院)。"
-    },
-    {
-      "标题内容": "伊朗被曝拟在霍尔木兹海峡布水雷,美军称打击 16 艘伊朗布雷船,其反应为何如此大?对峙会演变为长期战争吗?",
-      "最终综合得分": 0.0,
-      "画像维度得分": {
-        "S1_认知": 0.4,
-        "S2_文化": 0.5,
-        "S3_情感": 0.3,
-        "S4_场景": 0.2
-      },
-      "用户画像匹配分(Persona_Score)": 0.3,
-      "品类系数(K)": 0,
-      "匹配品类": "无",
-      "reason": "红灯拦截:宏观自豪感拦截+负面与恐慌拦截。虽然涉及国际形势,但是晦涩的地缘政治分析(霍尔木兹海峡、布水雷、军事对峙),缺乏具体震撼性视觉成果或直接利民事件。且涉及战争、冲突等负面内容,容易引发恐慌。S3情感需求不及格(<0.6),触发短板效应。老年人不喜欢过于复杂的军事博弈分析和负面战争新闻。"
-    },
-    {
-      "标题内容": "委员建议景区大门别修太远,避免买了门票还要买摆渡车票,景区为何把大门越修太远?如何让该建议更好落地?",
-      "最终综合得分": 0.75,
-      "画像维度得分": {
-        "S1_认知": 0.85,
-        "S2_文化": 0.8,
-        "S3_情感": 0.85,
-        "S4_场景": 0.75
-      },
-      "用户画像匹配分(Persona_Score)": 0.82,
-      "品类系数(K)": 1,
-      "匹配品类": "惠民/民生政策",
-      "reason": "通过筛选。标题明确(委员建议+具体问题),直接涉及老年人旅游出行的痛点。符合'惠民/民生政策'品类。老年人是旅游的主要群体,对景区摆渡车收费、大门距离等问题有切身体会和强烈共鸣。S1认知清晰(具体建议),S2文化背景匹配(维护消费者权益),S3情感需求符合(被尊重、减少焦虑),S4场景贴近(景区)。"
-    },
-    {
-      "标题内容": "建议推行婴幼儿父母弹性上下班",
-      "最终综合得分": 0.0,
-      "画像维度得分": {
-        "S1_认知": 0.7,
-        "S2_文化": 0.4,
-        "S3_情感": 0.5,
-        "S4_场景": 0.3
-      },
-      "用户画像匹配分(Persona_Score)": 0.4,
-      "品类系数(K)": 0,
-      "匹配品类": "无",
-      "reason": "红灯拦截:生命阶段错位。涉及'婴幼儿父母、弹性上下班'等职场和育儿话题,属于年轻父母的生活场景,与50岁以上老年人生活脱节。老年人已退休或即将退休,不关注上下班制度。S2文化背景不及格(<0.6),触发短板效应。"
-    },
-    {
-      "标题内容": "工作不满10年休5天年假规则该调整",
-      "最终综合得分": 0.0,
-      "画像维度得分": {
-        "S1_认知": 0.75,
-        "S2_文化": 0.3,
-        "S3_情感": 0.4,
-        "S4_场景": 0.2
-      },
-      "用户画像匹配分(Persona_Score)": 0.3,
-      "品类系数(K)": 0,
-      "匹配品类": "无",
-      "reason": "红灯拦截:生命阶段错位。涉及'年假规则、工作年限'等职场话题,属于在职人员关注的内容,与50岁以上老年人(多数已退休或即将退休)生活脱节。S2文化背景不及格(<0.6),触发短板效应。"
-    },
-    {
-      "标题内容": "华莱士正式宣布退市",
-      "最终综合得分": 0.0,
-      "画像维度得分": {
-        "S1_认知": 0.7,
-        "S2_文化": 0.4,
-        "S3_情感": 0.5,
-        "S4_场景": 0.3
-      },
-      "用户画像匹配分(Persona_Score)": 0.4,
-      "品类系数(K)": 0,
-      "匹配品类": "无",
-      "reason": "红灯拦截:金融与商业噪音拦截。涉及'退市'等金融市场话题,属于商业新闻,与老年人生活无关。老年人不关注企业上市退市等资本市场动态。S2文化背景不及格(<0.6),触发短板效应。"
-    },
-    {
-      "标题内容": "国际油价历史性暴跌",
-      "最终综合得分": 0.62,
-      "画像维度得分": {
-        "S1_认知": 0.75,
-        "S2_文化": 0.7,
-        "S3_情感": 0.7,
-        "S4_场景": 0.6
-      },
-      "用户画像匹配分(Persona_Score)": 0.7,
-      "品类系数(K)": 1,
-      "匹配品类": "惠民/民生政策",
-      "reason": "通过筛选(边缘)。标题明确(国际油价暴跌),虽然涉及国际市场,但油价直接影响老年人日常生活成本(如交通、取暖等)。符合'惠民/民生政策'品类。老年人对物价敏感,油价下跌意味着生活成本降低,有正面影响。S1认知清晰(油价暴跌),S2文化背景基本匹配(关注民生),S3情感需求符合(减少焦虑),S4场景一般(间接影响)。注意:需避免涉及'K线、点位、抄底'等金融博弈内容。"
-    },
-    {
-      "标题内容": "世界最强超高强度碳纤维由中国研发",
-      "最终综合得分": 0.78,
-      "画像维度得分": {
-        "S1_认知": 0.85,
-        "S2_文化": 0.9,
-        "S3_情感": 0.85,
-        "S4_场景": 0.7
-      },
-      "用户画像匹配分(Persona_Score)": 0.84,
-      "品类系数(K)": 1,
-      "匹配品类": "国家力量/统一",
-      "reason": "通过筛选。标题明确(世界最强、中国研发),体现中国科技实力,激发民族自豪感。符合'国家力量/统一'品类(以非具体正能量人物、非科学技术为主要内容的国家力量展示)。老年人对国家强大有强烈认同感和自豪感。S1认知清晰(世界最强),S2文化背景高度匹配(民族自豪),S3情感需求符合(正能量、自豪感),S4场景一般(科技成果)。"
-    },
-    {
-      "标题内容": "穿正装打领带救人 拟确认见义勇为",
-      "最终综合得分": 0.81,
-      "画像维度得分": {
-        "S1_认知": 0.9,
-        "S2_文化": 0.9,
-        "S3_情感": 0.9,
-        "S4_场景": 0.75
-      },
-      "用户画像匹配分(Persona_Score)": 0.88,
-      "品类系数(K)": 1,
-      "匹配品类": "正能量/社会风气",
-      "reason": "通过筛选。标题具体(穿正装打领带救人),事件完整,体现见义勇为的正能量。符合'正能量/社会风气'品类。老年人重视传统美德,对见义勇为有强烈认同感。S1认知清晰(具体事件),S2文化背景高度匹配(传统美德),S3情感需求符合(正能量、社会风气),S4场景贴近(日常生活)。"
-    },
-    {
-      "标题内容": "建议新增元宵节假日",
-      "最终综合得分": 0.75,
-      "画像维度得分": {
-        "S1_认知": 0.85,
-        "S2_文化": 0.9,
-        "S3_情感": 0.8,
-        "S4_场景": 0.7
-      },
-      "用户画像匹配分(Persona_Score)": 0.82,
-      "品类系数(K)": 1,
-      "匹配品类": "传统文化/习俗",
-      "reason": "通过筛选。标题明确(建议新增元宵节假日),涉及传统节日和文化传承。符合'传统文化/习俗'品类。老年人对传统节日有深厚情感,重视节日氛围和文化传承。S1认知清晰(元宵节假日),S2文化背景高度匹配(传统文化),S3情感需求符合(文化认同),S4场景贴近(传统节日)。"
-    },
-    {
-      "标题内容": "不要相信养生小视频 都是为赚钱",
-      "最终综合得分": 0.84,
-      "画像维度得分": {
-        "S1_认知": 0.9,
-        "S2_文化": 0.85,
-        "S3_情感": 0.9,
-        "S4_场景": 0.8
-      },
-      "用户画像匹配分(Persona_Score)": 0.87,
-      "品类系数(K)": 1,
-      "匹配品类": "人财诈骗/防骗",
-      "reason": "通过筛选(高优先级)。标题直白明确(不要相信养生小视频),直接警示老年人防范养生骗局。符合'人财诈骗/防骗'品类(极高优先级)。老年人是养生小视频的主要受众,容易被误导,这类防骗提醒极具价值。S1认知清晰(直白警示),S2文化背景匹配(保护老年人),S3情感需求符合(安全感、被保护),S4场景贴近(日常刷视频)。"
-    },
-    {
-      "标题内容": "义乌爆单!全球采购商蜂拥而至",
-      "最终综合得分": 0.72,
-      "画像维度得分": {
-        "S1_认知": 0.8,
-        "S2_文化": 0.85,
-        "S3_情感": 0.8,
-        "S4_场景": 0.65
-      },
-      "用户画像匹配分(Persona_Score)": 0.79,
-      "品类系数(K)": 1,
-      "匹配品类": "国家力量/统一",
-      "reason": "通过筛选。标题明确(义乌爆单、全球采购商),体现中国经济活力和国际影响力,激发民族自豪感。符合'国家力量/统一'品类(反映中国经济实力和国际地位)。老年人对国家经济繁荣有认同感。S1认知清晰(义乌爆单),S2文化背景匹配(民族自豪),S3情感需求符合(正能量、自豪感),S4场景一般(商业场景)。"
-    },
-    {
-      "标题内容": "坐意大利火车发现车玻璃中国造",
-      "最终综合得分": 0.75,
-      "画像维度得分": {
-        "S1_认知": 0.85,
-        "S2_文化": 0.9,
-        "S3_情感": 0.85,
-        "S4_场景": 0.7
-      },
-      "用户画像匹配分(Persona_Score)": 0.84,
-      "品类系数(K)": 1,
-      "匹配品类": "国家力量/统一",
-      "reason": "通过筛选。标题具体(意大利火车、车玻璃中国造),体现中国制造的国际影响力,激发民族自豪感。符合'国家力量/统一'品类(反映中国制造走向世界)。老年人对'中国制造'有强烈认同感和自豪感。S1认知清晰(具体事件),S2文化背景高度匹配(民族自豪),S3情感需求符合(正能量、自豪感),S4场景贴近(日常发现)。"
-    },
-    {
-      "标题内容": "济南共享菜园走红:出租率超90%",
-      "最终综合得分": 0.78,
-      "画像维度得分": {
-        "S1_认知": 0.85,
-        "S2_文化": 0.85,
-        "S3_情感": 0.85,
-        "S4_场景": 0.8
-      },
-      "用户画像匹配分(Persona_Score)": 0.84,
-      "品类系数(K)": 1,
-      "匹配品类": "惊奇/罕见画面",
-      "reason": "通过筛选。标题明确(济南共享菜园、出租率超90%),涉及老年人喜欢的种菜活动和新鲜事物。符合'惊奇/罕见画面'和'惠民/民生政策'品类。老年人喜欢种菜、园艺,对共享菜园这种新模式有兴趣和共鸣。S1认知清晰(共享菜园),S2文化背景匹配(传统农耕文化),S3情感需求符合(安逸、从容),S4场景贴近(菜园、公园)。"
-    },
-    {
-      "标题内容": "全国政协十四届四次会议闭幕",
-      "最终综合得分": 0.0,
-      "画像维度得分": {
-        "S1_认知": 0.7,
-        "S2_文化": 0.6,
-        "S3_情感": 0.5,
-        "S4_场景": 0.4
-      },
-      "用户画像匹配分(Persona_Score)": 0.57,
-      "品类系数(K)": 0,
-      "匹配品类": "无",
-      "reason": "红灯拦截:行政公文拦截。标题是纯粹的行政公文(会议闭幕),没有具体利民事件或震撼性视觉成果。老年人虽然关注国家大事,但对纯粹的会议流程新闻兴趣不大,需要有具体的惠民政策或成果才能吸引。S3情感需求不及格(<0.6),触发短板效应。"
-    },
-    {
-      "标题内容": "伊朗逮捕81名'内鬼'",
-      "最终综合得分": 0.0,
-      "画像维度得分": {
-        "S1_认知": 0.6,
-        "S2_文化": 0.5,
-        "S3_情感": 0.4,
-        "S4_场景": 0.3
-      },
-      "用户画像匹配分(Persona_Score)": 0.46,
-      "品类系数(K)": 0,
-      "匹配品类": "无",
-      "reason": "红灯拦截:负面与恐慌拦截+信源模糊。涉及'逮捕、内鬼'等负面内容,且是国外新闻,与中国老年人生活无关。老年人不关注国外的政治斗争和间谍活动。S1认知不清('内鬼'概念模糊),S2文化背景不及格(<0.6),S3情感需求不及格(<0.6),触发短板效应。"
-    },
-    {
-      "标题内容": "中国造出'世界最强'碳纤维!直径不到头发丝1/10!",
-      "最终综合得分": 0.81,
-      "画像维度得分": {
-        "S1_认知": 0.9,
-        "S2_文化": 0.9,
-        "S3_情感": 0.9,
-        "S4_场景": 0.75
-      },
-      "用户画像匹配分(Persona_Score)": 0.88,
-      "品类系数(K)": 1,
-      "匹配品类": "国家力量/统一",
-      "reason": "通过筛选。标题具体(世界最强、直径不到头发丝1/10),用形象化比喻(头发丝)帮助理解,体现中国科技实力,激发民族自豪感。符合'国家力量/统一'品类。老年人对国家强大有强烈认同感和自豪感,形象化比喻降低认知门槛。S1认知清晰(形象化比喻),S2文化背景高度匹配(民族自豪),S3情感需求符合(正能量、自豪感),S4场景一般(科技成果)。"
-    }
-  ],
-  "日期来源": [
-    {
-      "标题内容": "3月12日植树节:全国各地开展植树造林活动",
-      "最终综合得分": 0.75,
-      "画像维度得分": {
-        "S1_认知": 0.85,
-        "S2_文化": 0.9,
-        "S3_情感": 0.8,
-        "S4_场景": 0.75
-      },
-      "用户画像匹配分(Persona_Score)": 0.83,
-      "品类系数(K)": 1,
-      "匹配品类": "传统文化/习俗",
-      "reason": "通过筛选。标题明确(3月12日植树节、全国各地),涉及传统节日和环保活动。符合'传统文化/习俗'和'国家力量/统一'品类。老年人对植树节有深厚记忆(传统节日),重视环保和绿化,且植树活动适合老年人参与。S1认知清晰(植树节、植树造林),S2文化背景高度匹配(传统节日、环保意识),S3情感需求符合(正能量、参与感),S4场景贴近(公园、户外)。"
-    },
-    {
-      "标题内容": "植树节倡议:每人种一棵树,共建绿色家园",
-      "最终综合得分": 0.78,
-      "画像维度得分": {
-        "S1_认知": 0.9,
-        "S2_文化": 0.9,
-        "S3_情感": 0.85,
-        "S4_场景": 0.75
-      },
-      "用户画像匹配分(Persona_Score)": 0.86,
-      "品类系数(K)": 1,
-      "匹配品类": "传统文化/习俗",
-      "reason": "通过筛选。标题直白明确(每人种一棵树、共建绿色家园),倡议简单易懂,符合老年人认知特点。符合'传统文化/习俗'和'正能量/社会风气'品类。老年人重视环保和集体行动,对'共建绿色家园'有强烈认同感。S1认知清晰(简单倡议),S2文化背景高度匹配(集体主义、环保意识),S3情感需求符合(正能量、参与感),S4场景贴近(社区、公园)。"
-    },
-    {
-      "标题内容": "3月15日消费者权益日:警惕老年人保健品骗局",
-      "最终综合得分": 0.87,
-      "画像维度得分": {
-        "S1_认知": 0.95,
-        "S2_文化": 0.9,
-        "S3_情感": 0.95,
-        "S4_场景": 0.85
-      },
-      "用户画像匹配分(Persona_Score)": 0.92,
-      "品类系数(K)": 1,
-      "匹配品类": "人财诈骗/防骗",
-      "reason": "通过筛选(极高优先级)。标题直白明确(3月15日消费者权益日、警惕老年人保健品骗局),直接针对老年人群体,警示保健品骗局。符合'人财诈骗/防骗'品类(极高优先级)。老年人是保健品骗局的主要受害者,这类防骗提醒极具价值和针对性。S1认知清晰(直白警示),S2文化背景高度匹配(保护老年人),S3情感需求符合(安全感、被保护),S4场景贴近(保健品店、社区)。"
-    },
-    {
-      "标题内容": "315晚会曝光:这些养生产品都是假的",
-      "最终综合得分": 0.84,
-      "画像维度得分": {
-        "S1_认知": 0.9,
-        "S2_文化": 0.85,
-        "S3_情感": 0.9,
-        "S4_场景": 0.8
-      },
-      "用户画像匹配分(Persona_Score)": 0.87,
-      "品类系数(K)": 1,
-      "匹配品类": "人财诈骗/防骗",
-      "reason": "通过筛选(极高优先级)。标题直白明确(315晚会曝光、这些养生产品都是假的),具有权威性(315晚会),直接警示老年人防范假养生产品。符合'人财诈骗/防骗'品类(极高优先级)。老年人是养生产品的主要消费者,容易被误导,这类曝光极具价值。S1认知清晰(315晚会、假养生产品),S2文化背景匹配(保护消费者),S3情感需求符合(安全感、被保护),S4场景贴近(养生产品店、电视)。"
-    },
-    {
-      "标题内容": "消费者权益日:如何识别电信诈骗",
-      "最终综合得分": 0.9,
-      "画像维度得分": {
-        "S1_认知": 0.95,
-        "S2_文化": 0.9,
-        "S3_情感": 0.95,
-        "S4_场景": 0.9
-      },
-      "用户画像匹配分(Persona_Score)": 0.93,
-      "品类系数(K)": 1,
-      "匹配品类": "人财诈骗/防骗",
-      "reason": "通过筛选(极高优先级)。标题直白明确(消费者权益日、如何识别电信诈骗),提供实用防骗知识。符合'人财诈骗/防骗'品类(极高优先级)。老年人是电信诈骗的主要受害者,这类防骗指南极具价值和实用性。S1认知清晰(电信诈骗、识别方法),S2文化背景高度匹配(保护老年人),S3情感需求符合(安全感、被保护),S4场景贴近(电话、手机)。"
-    },
-    {
-      "标题内容": "315维权指南:老年人购物如何避坑",
-      "最终综合得分": 0.87,
-      "画像维度得分": {
-        "S1_认知": 0.95,
-        "S2_文化": 0.9,
-        "S3_情感": 0.9,
-        "S4_场景": 0.85
-      },
-      "用户画像匹配分(Persona_Score)": 0.91,
-      "品类系数(K)": 1,
-      "匹配品类": "人财诈骗/防骗",
-      "reason": "通过筛选(极高优先级)。标题直白明确(315维权指南、老年人购物避坑),提供实用维权知识,直接针对老年人群体。符合'人财诈骗/防骗'和'惠民/民生政策'品类(极高优先级)。老年人在购物中容易被欺骗,这类维权指南极具价值和针对性。S1认知清晰(维权指南、避坑),S2文化背景高度匹配(保护老年人),S3情感需求符合(安全感、被尊重),S4场景贴近(购物、超市)。"
-    }
-  ]
-}

+ 175 - 0
examples/content_needs_generation/result/热榜推荐结果.md

@@ -0,0 +1,175 @@
+# 热榜内容推荐结果
+
+## 数据来源
+- **数据源**:今日热榜(news分类)
+- **获取时间**:2026-03-11
+- **原始数据量**:51条
+- **过滤后数量**:5条
+- **过滤标准**:13项加分制,总分≥6分
+
+---
+
+## 推荐内容列表(按微信指数热度排序)
+
+### 1. 国防部正告日方:穷兵黩武是自取灭亡
+**热榜排名**:#45  
+**热度值**:369.3万  
+**微信指数**:7,330,184(上升↑12.97%)  
+**内容评分**:6分
+
+**评分详情**:
+- **老年性维度**(3分):
+  - ✓ 确定感:官方明确表态
+  - ✓ 权威感:国防部权威发声
+  - ✓ 民族自豪:展现大国立场
+  
+- **传播性维度**(3分):
+  - ✓ 代际嘴替:替老年人表达对国家安全的关切
+  - ✓ 价值观共鸣:爱国主义情怀强烈
+  - ✓ 社交面子:转发体现政治觉悟
+
+**推荐理由**:
+- 微信指数最高(733万+),且呈上升趋势
+- 涉及国家安全和民族尊严,符合50+人群的爱国情怀
+- 官方权威表态,具有强烈的价值观共鸣
+- 适合在微信群转发,体现关心国家大事
+
+---
+
+### 2. 代表:公摊面积要让老百姓明明白白
+**热榜排名**:#28  
+**热度值**:532.6万  
+**微信指数**:3,369,404(下降↓35.32%)  
+**内容评分**:6分
+
+**评分详情**:
+- **老年性维度**(3分):
+  - ✓ 确定感:明确的政策诉求
+  - ✓ 权威感:人大代表提案
+  - ✓ 生活本色:关乎民生的房产问题
+  
+- **传播性维度**(3分):
+  - ✓ 代际嘴替:替老百姓说出心声
+  - ✓ 价值观共鸣:维护消费者权益
+  - ✓ 利他提醒:提醒关注购房陷阱
+
+**推荐理由**:
+- 微信指数高达336万+,虽有下降但基数大
+- 直击民生痛点,公摊面积是普遍关注的问题
+- 代表老百姓发声,具有强烈的代际嘴替属性
+- 适合转发给子女或亲友,体现对家庭的关心
+
+---
+
+### 3. "成为中国人"为何刷屏两会
+**热榜排名**:#4  
+**热度值**:761.8万  
+**微信指数**:411,740(下降↓45.42%)  
+**内容评分**:6分
+
+**评分详情**:
+- **老年性维度**(3分):
+  - ✓ 权威感:两会热点话题
+  - ✓ 民族自豪:强调中国人身份认同
+  - ✓ 传统伦理:弘扬爱国主义
+  
+- **传播性维度**(3分):
+  - ✓ 代际嘴替:表达民族自豪感
+  - ✓ 价值观共鸣:身份认同引发共鸣
+  - ✓ 社交面子:转发体现爱国情怀
+
+**推荐理由**:
+- 热榜排名高(#4),关注度大
+- 涉及民族认同和爱国主义,符合50+人群价值观
+- 两会热点,具有权威性和时效性
+- 适合在朋友圈转发,体现正能量
+
+---
+
+### 4. 全国政协十四届四次会议闭幕
+**热榜排名**:#1  
+**热度值**:790.5万  
+**微信指数**:343,431(下降↓34.71%)  
+**内容评分**:6分
+
+**评分详情**:
+- **老年性维度**(4分):
+  - ✓ 确定感:会议正式闭幕
+  - ✓ 权威感:国家级重要会议
+  - ✓ 民族自豪:展现国家治理能力
+  - ✓ 传统伦理:关心国家大事
+  
+- **传播性维度**(2分):
+  - ✓ 价值观共鸣:关注国家政治
+  - ✓ 社交面子:转发体现政治觉悟
+
+**推荐理由**:
+- 热榜排名第一,最受关注
+- 国家级重要会议,权威性强
+- 符合50+人群关心国家大事的特点
+- 适合转发,体现政治关注度
+
+---
+
+### 5. "不要相信养生小视频 都是为赚钱"
+**热榜排名**:#17  
+**热度值**:638.1万  
+**微信指数**:202,377(下降↓14.44%)  
+**内容评分**:6分
+
+**评分详情**:
+- **老年性维度**(3分):
+  - ✓ 确定感:明确的提醒警告
+  - ✓ 权威感:专家或官方提醒
+  - ✓ 安宁感:避免被骗,保护身心安宁
+  
+- **传播性维度**(3分):
+  - ✓ 利他提醒:提醒他人不要上当
+  - ✓ 社交面子:转发体现见识和关心
+  - ✓ 情感代偿:转发给亲友表达关心
+
+**推荐理由**:
+- 直接针对50+人群常见的养生视频陷阱
+- 具有强烈的利他提醒属性,适合转发
+- 帮助老年人识别养生骗局,保护身心健康
+- 适合转发给同龄人或子女转发给父母
+
+---
+
+## 数据分析总结
+
+### 热度趋势分析
+- **上升趋势**:国防部相关内容(+12.97%)
+- **下降趋势**:其他4条内容均呈下降趋势
+- **热度基数**:公摊面积和国防部话题微信指数最高
+
+### 内容类型分布
+- **国家大事类**:3条(政协会议、成为中国人、国防部)
+- **民生提醒类**:2条(公摊面积、养生视频)
+
+### 推荐优先级建议
+1. **首推**:国防部正告日方(热度上升+微信指数最高)
+2. **次推**:公摊面积(民生痛点+微信指数高)
+3. **备选**:养生视频提醒(直接针对目标人群)
+
+---
+
+## 过滤标准说明
+
+本次推荐采用**13项加分制**标准:
+
+**老年性维度(7项)**:
+- 确定感、权威感、安宁感、民族自豪、传统伦理、生活本色、同类认同
+
+**传播性维度(6项)**:
+- 代际嘴替、价值观共鸣、利他提醒、社交面子、情感代偿、节日/问候
+
+**保留准则**:
+- 总分≥6分的内容优先保留
+- "民族自豪"或"代际嘴替"项突出可适当放宽
+- 按总分从高到低排序
+
+---
+
+**生成时间**:2026-03-11 16:14  
+**数据有效期**:当日热榜数据,建议当日使用

+ 0 - 284
examples/content_needs_generation/result/热榜筛选结果.json

@@ -1,284 +0,0 @@
-{
-  "热榜来源": [
-    {
-      "标题内容": "存储芯片成本暴涨 80%,OPPO 官宣涨价,雷军称尽量降低消费者接受难度,这将如何重塑手机市场竞争格局?",
-      "最终综合得分": 0.00,
-      "画像维度得分": {
-        "S1_认知": 0.30,
-        "S2_文化": 0.20,
-        "S3_情感": 0.30,
-        "S4_场景": 0.20
-      },
-      "用户画像匹配分(Persona_Score)": 0.20,
-      "品类系数(K)": 0,
-      "匹配品类": "无",
-      "reason": "红灯拦截:生命阶段错位。涉及'手机市场竞争格局、芯片成本'等商业噪音和科技话题,不属于老年人关注范畴。老年人处于'安享期',不关注手机涨价、市场竞争等年轻人/中产焦虑话题。S2文化背景不及格(<0.6),触发短板效应。"
-    },
-    {
-      "标题内容": "代表建议中小学周边 200 米内不得设立台球厅,学校周边台球厅存在哪些「隐形陷阱」?能解决相关问题吗?",
-      "最终综合得分": 0.66,
-      "画像维度得分": {
-        "S1_认知": 0.85,
-        "S2_文化": 0.80,
-        "S3_情感": 0.75,
-        "S4_场景": 0.60
-      },
-      "用户画像匹配分(Persona_Score)": 0.76,
-      "品类系数(K)": 1,
-      "匹配品类": "惠民/民生政策",
-      "reason": "通过筛选。标题明确(代表建议+具体措施),涉及青少年保护和社会风气,符合老年人关注的'家庭/亲子'和'社会正能量'品类。老年人关心孙辈教育环境,对台球厅等娱乐场所有传统观念上的警惕。S1认知清晰(具体建议),S2文化背景匹配(保护青少年),S3情感需求符合(社会正能量),S4场景贴近(学校周边)。"
-    },
-    {
-      "标题内容": "女孩花五十元买五朵玫瑰送妈妈,父亲觉得被骗大闹花店,会给孩子带来什么影响?家长怎样处理才能「不扫兴」?",
-      "最终综合得分": 0.72,
-      "画像维度得分": {
-        "S1_认知": 0.80,
-        "S2_文化": 0.85,
-        "S3_情感": 0.80,
-        "S4_场景": 0.70
-      },
-      "用户画像匹配分(Persona_Score)": 0.80,
-      "品类系数(K)": 1,
-      "匹配品类": "家庭/亲子",
-      "reason": "通过筛选。标题具体(五十元、五朵玫瑰),事件完整,涉及家庭教育和亲子关系。符合老年人关注的'家庭/亲子'品类。老年人重视家庭和谐、孝道教育,对这类家庭矛盾和教育方式有共鸣。S1认知清晰(具体事件),S2文化背景匹配(孝道、家庭教育),S3情感需求符合(家庭温情),S4场景贴近(花店、家庭)。"
-    },
-    {
-      "标题内容": "代表建议建立夫妻陪护假制度,住院给 15-30 天陪护假,出于哪些考量?落实起来存在哪些难点?",
-      "最终综合得分": 0.78,
-      "画像维度得分": {
-        "S1_认知": 0.85,
-        "S2_文化": 0.85,
-        "S3_情感": 0.85,
-        "S4_场景": 0.75
-      },
-      "用户画像匹配分(Persona_Score)": 0.83,
-      "品类系数(K)": 1,
-      "匹配品类": "惠民/民生政策",
-      "reason": "通过筛选。标题明确(代表建议+具体天数),涉及老年人极度关心的住院陪护问题。符合'惠民/民生政策'和'家庭/亲子'品类。老年人自身或配偶可能面临住院问题,对陪护假有强烈需求和共鸣。S1认知清晰(具体政策),S2文化背景匹配(家庭互助、孝道),S3情感需求符合(被关怀、安全感),S4场景贴近(医院)。"
-    },
-    {
-      "标题内容": "伊朗被曝拟在霍尔木兹海峡布水雷,美军称打击 16 艘伊朗布雷船,其反应为何如此大?对峙会演变为长期战争吗?",
-      "最终综合得分": 0.00,
-      "画像维度得分": {
-        "S1_认知": 0.40,
-        "S2_文化": 0.50,
-        "S3_情感": 0.30,
-        "S4_场景": 0.20
-      },
-      "用户画像匹配分(Persona_Score)": 0.30,
-      "品类系数(K)": 0,
-      "匹配品类": "无",
-      "reason": "红灯拦截:宏观自豪感拦截+负面与恐慌拦截。虽然涉及国际形势,但是晦涩的地缘政治分析(霍尔木兹海峡、布水雷、军事对峙),缺乏具体震撼性视觉成果或直接利民事件。且涉及战争、冲突等负面内容,容易引发恐慌。S3情感需求不及格(<0.6),触发短板效应。老年人不喜欢过于复杂的军事博弈分析和负面战争新闻。"
-    },
-    {
-      "标题内容": "委员建议景区大门别修太远,避免买了门票还要买摆渡车票,景区为何把大门越修太远?如何让该建议更好落地?",
-      "最终综合得分": 0.75,
-      "画像维度得分": {
-        "S1_认知": 0.85,
-        "S2_文化": 0.80,
-        "S3_情感": 0.85,
-        "S4_场景": 0.75
-      },
-      "用户画像匹配分(Persona_Score)": 0.82,
-      "品类系数(K)": 1,
-      "匹配品类": "惠民/民生政策",
-      "reason": "通过筛选。标题明确(委员建议+具体问题),直接涉及老年人旅游出行的痛点。符合'惠民/民生政策'品类。老年人是旅游的主要群体,对景区摆渡车收费、大门距离等问题有切身体会和强烈共鸣。S1认知清晰(具体建议),S2文化背景匹配(维护消费者权益),S3情感需求符合(被尊重、减少焦虑),S4场景贴近(景区)。"
-    },
-    {
-      "标题内容": "建议推行婴幼儿父母弹性上下班",
-      "最终综合得分": 0.00,
-      "画像维度得分": {
-        "S1_认知": 0.70,
-        "S2_文化": 0.40,
-        "S3_情感": 0.50,
-        "S4_场景": 0.30
-      },
-      "用户画像匹配分(Persona_Score)": 0.40,
-      "品类系数(K)": 0,
-      "匹配品类": "无",
-      "reason": "红灯拦截:生命阶段错位。涉及'婴幼儿父母、弹性上下班'等职场和育儿话题,属于年轻父母的生活场景,与50岁以上老年人生活脱节。老年人已退休或即将退休,不关注上下班制度。S2文化背景不及格(<0.6),触发短板效应。"
-    },
-    {
-      "标题内容": "工作不满10年休5天年假规则该调整",
-      "最终综合得分": 0.00,
-      "画像维度得分": {
-        "S1_认知": 0.75,
-        "S2_文化": 0.30,
-        "S3_情感": 0.40,
-        "S4_场景": 0.20
-      },
-      "用户画像匹配分(Persona_Score)": 0.30,
-      "品类系数(K)": 0,
-      "匹配品类": "无",
-      "reason": "红灯拦截:生命阶段错位。涉及'年假规则、工作年限'等职场话题,属于在职人员关注的内容,与50岁以上老年人(多数已退休或即将退休)生活脱节。S2文化背景不及格(<0.6),触发短板效应。"
-    },
-    {
-      "标题内容": "华莱士正式宣布退市",
-      "最终综合得分": 0.00,
-      "画像维度得分": {
-        "S1_认知": 0.70,
-        "S2_文化": 0.40,
-        "S3_情感": 0.50,
-        "S4_场景": 0.30
-      },
-      "用户画像匹配分(Persona_Score)": 0.40,
-      "品类系数(K)": 0,
-      "匹配品类": "无",
-      "reason": "红灯拦截:金融与商业噪音拦截。涉及'退市'等金融市场话题,属于商业新闻,与老年人生活无关。老年人不关注企业上市退市等资本市场动态。S2文化背景不及格(<0.6),触发短板效应。"
-    },
-    {
-      "标题内容": "国际油价历史性暴跌",
-      "最终综合得分": 0.62,
-      "画像维度得分": {
-        "S1_认知": 0.75,
-        "S2_文化": 0.70,
-        "S3_情感": 0.70,
-        "S4_场景": 0.60
-      },
-      "用户画像匹配分(Persona_Score)": 0.70,
-      "品类系数(K)": 1,
-      "匹配品类": "惠民/民生政策",
-      "reason": "通过筛选(边缘)。标题明确(国际油价暴跌),虽然涉及国际市场,但油价直接影响老年人日常生活成本(如交通、取暖等)。符合'惠民/民生政策'品类。老年人对物价敏感,油价下跌意味着生活成本降低,有正面影响。S1认知清晰(油价暴跌),S2文化背景基本匹配(关注民生),S3情感需求符合(减少焦虑),S4场景一般(间接影响)。注意:需避免涉及'K线、点位、抄底'等金融博弈内容。"
-    },
-    {
-      "标题内容": "世界最强超高强度碳纤维由中国研发",
-      "最终综合得分": 0.78,
-      "画像维度得分": {
-        "S1_认知": 0.85,
-        "S2_文化": 0.90,
-        "S3_情感": 0.85,
-        "S4_场景": 0.70
-      },
-      "用户画像匹配分(Persona_Score)": 0.84,
-      "品类系数(K)": 1,
-      "匹配品类": "国家力量/统一",
-      "reason": "通过筛选。标题明确(世界最强、中国研发),体现中国科技实力,激发民族自豪感。符合'国家力量/统一'品类(以非具体正能量人物、非科学技术为主要内容的国家力量展示)。老年人对国家强大有强烈认同感和自豪感。S1认知清晰(世界最强),S2文化背景高度匹配(民族自豪),S3情感需求符合(正能量、自豪感),S4场景一般(科技成果)。"
-    },
-    {
-      "标题内容": "穿正装打领带救人 拟确认见义勇为",
-      "最终综合得分": 0.81,
-      "画像维度得分": {
-        "S1_认知": 0.90,
-        "S2_文化": 0.90,
-        "S3_情感": 0.90,
-        "S4_场景": 0.75
-      },
-      "用户画像匹配分(Persona_Score)": 0.88,
-      "品类系数(K)": 1,
-      "匹配品类": "正能量/社会风气",
-      "reason": "通过筛选。标题具体(穿正装打领带救人),事件完整,体现见义勇为的正能量。符合'正能量/社会风气'品类。老年人重视传统美德,对见义勇为有强烈认同感。S1认知清晰(具体事件),S2文化背景高度匹配(传统美德),S3情感需求符合(正能量、社会风气),S4场景贴近(日常生活)。"
-    },
-    {
-      "标题内容": "建议新增元宵节假日",
-      "最终综合得分": 0.75,
-      "画像维度得分": {
-        "S1_认知": 0.85,
-        "S2_文化": 0.90,
-        "S3_情感": 0.80,
-        "S4_场景": 0.70
-      },
-      "用户画像匹配分(Persona_Score)": 0.82,
-      "品类系数(K)": 1,
-      "匹配品类": "传统文化/习俗",
-      "reason": "通过筛选。标题明确(建议新增元宵节假日),涉及传统节日和文化传承。符合'传统文化/习俗'品类。老年人对传统节日有深厚情感,重视节日氛围和文化传承。S1认知清晰(元宵节假日),S2文化背景高度匹配(传统文化),S3情感需求符合(文化认同),S4场景贴近(传统节日)。"
-    },
-    {
-      "标题内容": "不要相信养生小视频 都是为赚钱",
-      "最终综合得分": 0.84,
-      "画像维度得分": {
-        "S1_认知": 0.90,
-        "S2_文化": 0.85,
-        "S3_情感": 0.90,
-        "S4_场景": 0.80
-      },
-      "用户画像匹配分(Persona_Score)": 0.87,
-      "品类系数(K)": 1,
-      "匹配品类": "人财诈骗/防骗",
-      "reason": "通过筛选(高优先级)。标题直白明确(不要相信养生小视频),直接警示老年人防范养生骗局。符合'人财诈骗/防骗'品类(极高优先级)。老年人是养生小视频的主要受众,容易被误导,这类防骗提醒极具价值。S1认知清晰(直白警示),S2文化背景匹配(保护老年人),S3情感需求符合(安全感、被保护),S4场景贴近(日常刷视频)。"
-    },
-    {
-      "标题内容": "义乌爆单!全球采购商蜂拥而至",
-      "最终综合得分": 0.72,
-      "画像维度得分": {
-        "S1_认知": 0.80,
-        "S2_文化": 0.85,
-        "S3_情感": 0.80,
-        "S4_场景": 0.65
-      },
-      "用户画像匹配分(Persona_Score)": 0.79,
-      "品类系数(K)": 1,
-      "匹配品类": "国家力量/统一",
-      "reason": "通过筛选。标题明确(义乌爆单、全球采购商),体现中国经济活力和国际影响力,激发民族自豪感。符合'国家力量/统一'品类(反映中国经济实力和国际地位)。老年人对国家经济繁荣有认同感。S1认知清晰(义乌爆单),S2文化背景匹配(民族自豪),S3情感需求符合(正能量、自豪感),S4场景一般(商业场景)。"
-    },
-    {
-      "标题内容": "坐意大利火车发现车玻璃中国造",
-      "最终综合得分": 0.75,
-      "画像维度得分": {
-        "S1_认知": 0.85,
-        "S2_文化": 0.90,
-        "S3_情感": 0.85,
-        "S4_场景": 0.70
-      },
-      "用户画像匹配分(Persona_Score)": 0.84,
-      "品类系数(K)": 1,
-      "匹配品类": "国家力量/统一",
-      "reason": "通过筛选。标题具体(意大利火车、车玻璃中国造),体现中国制造的国际影响力,激发民族自豪感。符合'国家力量/统一'品类(反映中国制造走向世界)。老年人对'中国制造'有强烈认同感和自豪感。S1认知清晰(具体事件),S2文化背景高度匹配(民族自豪),S3情感需求符合(正能量、自豪感),S4场景贴近(日常发现)。"
-    },
-    {
-      "标题内容": "济南共享菜园走红:出租率超90%",
-      "最终综合得分": 0.78,
-      "画像维度得分": {
-        "S1_认知": 0.85,
-        "S2_文化": 0.85,
-        "S3_情感": 0.85,
-        "S4_场景": 0.80
-      },
-      "用户画像匹配分(Persona_Score)": 0.84,
-      "品类系数(K)": 1,
-      "匹配品类": "惊奇/罕见画面",
-      "reason": "通过筛选。标题明确(济南共享菜园、出租率超90%),涉及老年人喜欢的种菜活动和新鲜事物。符合'惊奇/罕见画面'和'惠民/民生政策'品类。老年人喜欢种菜、园艺,对共享菜园这种新模式有兴趣和共鸣。S1认知清晰(共享菜园),S2文化背景匹配(传统农耕文化),S3情感需求符合(安逸、从容),S4场景贴近(菜园、公园)。"
-    },
-    {
-      "标题内容": "全国政协十四届四次会议闭幕",
-      "最终综合得分": 0.00,
-      "画像维度得分": {
-        "S1_认知": 0.70,
-        "S2_文化": 0.60,
-        "S3_情感": 0.50,
-        "S4_场景": 0.40
-      },
-      "用户画像匹配分(Persona_Score)": 0.57,
-      "品类系数(K)": 0,
-      "匹配品类": "无",
-      "reason": "红灯拦截:行政公文拦截。标题是纯粹的行政公文(会议闭幕),没有具体利民事件或震撼性视觉成果。老年人虽然关注国家大事,但对纯粹的会议流程新闻兴趣不大,需要有具体的惠民政策或成果才能吸引。S3情感需求不及格(<0.6),触发短板效应。"
-    },
-    {
-      "标题内容": "伊朗逮捕81名'内鬼'",
-      "最终综合得分": 0.00,
-      "画像维度得分": {
-        "S1_认知": 0.60,
-        "S2_文化": 0.50,
-        "S3_情感": 0.40,
-        "S4_场景": 0.30
-      },
-      "用户画像匹配分(Persona_Score)": 0.46,
-      "品类系数(K)": 0,
-      "匹配品类": "无",
-      "reason": "红灯拦截:负面与恐慌拦截+信源模糊。涉及'逮捕、内鬼'等负面内容,且是国外新闻,与中国老年人生活无关。老年人不关注国外的政治斗争和间谍活动。S1认知不清('内鬼'概念模糊),S2文化背景不及格(<0.6),S3情感需求不及格(<0.6),触发短板效应。"
-    },
-    {
-      "标题内容": "中国造出'世界最强'碳纤维!直径不到头发丝1/10!",
-      "最终综合得分": 0.81,
-      "画像维度得分": {
-        "S1_认知": 0.90,
-        "S2_文化": 0.90,
-        "S3_情感": 0.90,
-        "S4_场景": 0.75
-      },
-      "用户画像匹配分(Persona_Score)": 0.88,
-      "品类系数(K)": 1,
-      "匹配品类": "国家力量/统一",
-      "reason": "通过筛选。标题具体(世界最强、直径不到头发丝1/10),用形象化比喻(头发丝)帮助理解,体现中国科技实力,激发民族自豪感。符合'国家力量/统一'品类。老年人对国家强大有强烈认同感和自豪感,形象化比喻降低认知门槛。S1认知清晰(形象化比喻),S2文化背景高度匹配(民族自豪),S3情感需求符合(正能量、自豪感),S4场景一般(科技成果)。"
-    }
-  ]
-}

+ 4 - 1
examples/content_needs_generation/run.py

@@ -237,7 +237,10 @@ async def main():
     registered_tools = list(tool_registry._tools.keys())
     registered_tools = list(tool_registry._tools.keys())
     custom_tools = [
     custom_tools = [
         t for t in registered_tools 
         t for t in registered_tools 
-        if "hot_rank" in t.lower() or "content_deconstruction" in t.lower() or "query_content" in t.lower()
+        if "hot_rank" in t.lower() 
+        or "content_deconstruction" in t.lower() 
+        or "query_content" in t.lower()
+        or "weixin_index" in t.lower()
     ]
     ]
     if custom_tools:
     if custom_tools:
         print(f"✓ 已注册自定义工具: {custom_tools}")
         print(f"✓ 已注册自定义工具: {custom_tools}")

+ 37 - 0
examples/content_needs_generation/skills/content_filter.md

@@ -0,0 +1,37 @@
+---
+name: content_filter
+description: 通过特征加分制评估内容是否符合中国50岁以上老年人群体的心理特征(老年性)及社交传播动力(传播性)
+---
+
+# 内容过滤技能:中国50+人群内容筛选准则 (加分制)
+
+该技能通过对内容特征的逐项匹配进行加分,每个匹配项记 1 分。最终总分为所有加分项的累加,分值越高,推荐优先级越高。
+
+## 1. 老年性维度 (Aging Appropriateness) - 每个符合项 +1 分
+评估内容是否切合中国 50+ 群体“安享期”的心理、文化与生活特征。
+
+*   **[+1分] 确定感**:结论明确,不卖关子,拒绝焦虑或悬疑,提供踏实的安全感。
+*   **[+1分] 权威感**:有官方背书、专家解读或符合公认常识,具备社会公信力。
+*   **[+1分] 安宁感**:追求身心安宁、安逸从容,排除投资、房产、职场等高压奋斗内容。
+*   **[+1分] 民族自豪**:涉及国家大事、与中国相关的国际形势或展现大国风采。
+*   **[+1分] 传统伦理**:弘扬孝道、家庭和睦、集体主义或弘扬社会正能量。
+*   **[+1分] 生活本色**:内容接地气,贴近民生生活、家庭琐事或传统文化。
+*   **[+1分] 同类认同**:有同龄人出镜或采用该群体熟悉的叙事风格与语言。
+
+## 2. 传播性维度 (Virality) - 每个符合项 +1 分
+评估内容是否能激发该群体在微信群、朋友圈等社交场景的转发欲望。
+
+*   **[+1分] 代际嘴替**:替老年人说出对生活、家庭或时代的感悟,代表其心声。
+*   **[+1分] 价值观共鸣**:引发群体认同,转发是为了获得老朋友们的“点赞”与认同。
+*   **[+1分] 利他提醒**:包含对他人有益的生活智慧、民生提醒或健康常识。
+*   **[+1分] 社交面子**:提供能体现分享者博学、远见或独特见识的高价值资讯。
+*   **[+1分] 情感代偿**:方便转发给子女或亲友,用于含蓄表达关心或对生活的期望。
+*   **[+1分] 节日/问候**:贴合时间节点、节日氛围或带有温馨的社交礼仪性质(如早晚安)。
+
+## 最终评估逻辑
+1.  **打分方式**:针对每一条待筛选内容,对照上述 13 个加分项进行核对。
+2.  **计算总分**:`总分 = 老年性加分项之和 + 传播性加分项之和`(最高 13 分)。
+3.  **保留准则**:
+    - **必选**:总分 ≥ 6 分的内容优先保留。
+    - **破格**:“民族自豪”或“代际嘴替”项若表现极其突出,可适当放宽入围分数。
+    - **排序**:输出时按照总分从高到低排列。

+ 43 - 0
examples/content_needs_generation/skills/weixin_index_search.md

@@ -0,0 +1,43 @@
+---
+name: weixin_index_search
+description: 根据关键词获取微信指数数据及趋势分析
+---
+
+## 根据关键词获取微信指数数据及趋势分析
+
+你可以通过微信指数搜索工具 `weixin_index_search` 根据关键词获取微信指数数据及趋势分析。
+
+### 使用场景
+
+- 需要了解某个关键词在微信平台的热度趋势
+- 需要分析关键词的搜索热度变化(上升/下降/持平)
+- 需要获取关键词的最新热度值
+- 需要评估内容选题的热度潜力
+
+### 参数说明
+
+- `keyword`: 搜索关键词,例如:`"养生"`、`"马年"`
+
+### 返回结果
+
+工具会返回一个包含以下字段的字典:
+
+- `date_range`: 时间区间对象
+  - `start_ymd`: 开始日期(格式:YYYYMMDD,20天前的日期)
+  - `end_ymd`: 结束日期(格式:YYYYMMDD,昨天的日期)
+- `trend`: 趋势方向,可能的值:
+  - `"上升"`: 最新一天的热度比前一天高
+  - `"下降"`: 最新一天的热度比前一天低
+  - `"持平"`: 最新一天的热度与前一天相同
+  - `"未知"`: 数据不足,无法计算趋势
+- `change_percent`: 变化百分比(保留两位小数)
+  - 正数表示上升的百分比
+  - 负数表示下降的百分比
+  - 0 表示持平
+- `total_score`: 最新热度值(最新一天的 total_score)
+
+### 数据说明
+
+- 工具自动获取最近21天的数据(从20天前到昨天)
+- 趋势计算基于最近两天的数据对比
+- 热度值反映关键词在微信平台的整体关注度

+ 8 - 1
examples/content_needs_generation/tool/__init__.py

@@ -6,5 +6,12 @@ from examples.content_needs_generation.tool.hot_rank_search import hot_rank_sear
 from examples.content_needs_generation.tool.content_deconstruction_search import (
 from examples.content_needs_generation.tool.content_deconstruction_search import (
     query_content_deconstruction_by_keywords,
     query_content_deconstruction_by_keywords,
 )
 )
+from examples.content_needs_generation.tool.weixin_index_search import (
+    weixin_index_search,
+)
 
 
-__all__ = ["hot_rank_search", "query_content_deconstruction_by_keywords"]
+__all__ = [
+    "hot_rank_search",
+    "query_content_deconstruction_by_keywords",
+    "weixin_index_search",
+]

+ 2 - 0
examples/content_needs_generation/tool/hot_rank_search.py

@@ -57,6 +57,8 @@ async def _call_hot_rank_api(
         all_items = []
         all_items = []
         if isinstance(inner_data, list):
         if isinstance(inner_data, list):
             for item in inner_data:
             for item in inner_data:
+                if item['source'] != '百度':
+                    continue
                 if isinstance(item, dict):
                 if isinstance(item, dict):
                     rank_list = item.get("rankList", [])
                     rank_list = item.get("rankList", [])
                     if isinstance(rank_list, list):
                     if isinstance(rank_list, list):

+ 251 - 0
examples/content_needs_generation/tool/weixin_index_search.py

@@ -0,0 +1,251 @@
+"""
+微信指数搜索工具 - 根据关键词获取微信指数数据及趋势
+
+用于 Agent 执行时获取关键词的微信指数和趋势分析。
+"""
+import asyncio
+import json
+import os
+from datetime import datetime, timedelta
+from typing import Any, Dict, List, Optional, Tuple
+
+import httpx
+
+from agent.tools import tool, ToolResult
+
+# 微信指数 API 配置
+WEIXIN_INDEX_BASE_URL = os.getenv("WEIXIN_INDEX_BASE_URL", "http://crawapi.piaoquantv.com")
+DEFAULT_TIMEOUT = 30.0
+
+
+def _get_date_range() -> Tuple[str, str]:
+    """
+    获取日期范围:昨天和往前20天的日期。
+    
+    Returns:
+        tuple: (start_ymd, end_ymd) 格式为 "YYYYMMDD"
+    """
+    yesterday = datetime.now() - timedelta(days=1)
+    start_date = yesterday - timedelta(days=20)
+    
+    end_ymd = yesterday.strftime("%Y%m%d")
+    start_ymd = start_date.strftime("%Y%m%d")
+    
+    return start_ymd, end_ymd
+
+
+def _calculate_trend(data: List[Dict[str, Any]]) -> Dict[str, Any]:
+    """
+    根据 total_score 计算趋势。
+    
+    Args:
+        data: API 返回的数据列表,包含每天的 channel_score
+        
+    Returns:
+        Dict: 包含趋势信息和最新热度
+    """
+    if not data or len(data) < 2:
+        return {
+            "trend": "未知",
+            "total_score": 0,
+            "message": "数据不足,无法计算趋势"
+        }
+    
+    # 按日期排序(确保顺序正确)
+    sorted_data = sorted(data, key=lambda x: x.get("ymd", ""))
+    
+    # 获取最近两天的数据
+    recent_scores = []
+    for item in sorted_data[-2:]:
+        channel_score = item.get("channel_score", {})
+        total_score = channel_score.get("total_score", 0)
+        recent_scores.append(total_score)
+    
+    if len(recent_scores) < 2:
+        # 如果只有一天的数据,使用最后一天的数据
+        latest_item = sorted_data[-1]
+        channel_score = latest_item.get("channel_score", {})
+        total_score = channel_score.get("total_score", 0)
+        return {
+            "trend": "未知",
+            "total_score": total_score,
+            "message": "只有一天数据,无法计算趋势"
+        }
+    
+    # 计算趋势
+    yesterday_score = recent_scores[-1]  # 最新一天(昨天)
+    day_before_score = recent_scores[-2]  # 前一天
+    
+    if yesterday_score > day_before_score:
+        trend = "上升"
+    elif yesterday_score < day_before_score:
+        trend = "下降"
+    else:
+        trend = "持平"
+    
+    # 计算变化百分比
+    if day_before_score > 0:
+        change_percent = ((yesterday_score - day_before_score) / day_before_score) * 100
+    else:
+        change_percent = 0.0
+    
+    return {
+        "trend": trend,
+        "total_score": yesterday_score,
+        "previous_score": day_before_score,
+        "change_percent": round(change_percent, 2),
+        "latest_date": sorted_data[-1].get("ymd", "")
+    }
+
+
+async def _call_weixin_index_api(
+    keyword: str,
+    start_ymd: str,
+    end_ymd: str,
+) -> Optional[List[Dict[str, Any]]]:
+    """调用微信指数 API,返回结果列表。"""
+    url = f"{WEIXIN_INDEX_BASE_URL.rstrip('/')}/crawler/wei_xin/wxindex"
+    payload = {
+        "keyword": keyword,
+        "start_ymd": start_ymd,
+        "end_ymd": end_ymd,
+    }
+
+    try:
+        async with httpx.AsyncClient(timeout=DEFAULT_TIMEOUT) as client:
+            resp = await client.post(
+                url,
+                json=payload,
+                headers={"Content-Type": "application/json"},
+            )
+            resp.raise_for_status()
+            data = resp.json()
+    except httpx.HTTPStatusError as e:
+        raise RuntimeError(
+            f"API 请求失败: {e.response.status_code} - {e.response.text[:200]}"
+        )
+    except Exception as e:
+        raise RuntimeError(f"请求异常: {str(e)}")
+
+    # 解析响应格式: {'code': 0, 'msg': null, 'data': {'data': [...]}}
+    if isinstance(data, dict):
+        # 检查 code 字段
+        code = data.get("code", 0)
+        if code != 0:
+            msg = data.get("msg", "未知错误")
+            raise RuntimeError(f"API 返回错误码: {code}, 消息: {msg}")
+
+        # 获取 data.data 数组
+        outer_data = data.get("data", {})
+        if isinstance(outer_data, dict):
+            inner_data = outer_data.get("data", [])
+        else:
+            inner_data = outer_data if isinstance(outer_data, list) else []
+
+        if isinstance(inner_data, list):
+            return inner_data
+
+        return []
+
+    return []
+
+
+@tool(
+    description="根据关键词获取微信指数数据及趋势分析。自动获取最近21天的数据(从20天前到昨天),并计算趋势(上升/下降/持平)和最新热度。",
+    display={
+        "zh": {
+            "name": "微信指数搜索",
+            "params": {
+                "keyword": "搜索关键词,例如:'养生'",
+            },
+        },
+    },
+)
+async def weixin_index_search(
+    keyword: str,
+) -> ToolResult:
+    """
+    根据关键词获取微信指数数据及趋势分析。
+
+    Args:
+        keyword: 搜索关键词,例如:"养生"
+
+    Returns:
+        ToolResult: 包含趋势信息和热度数据
+    """
+    # 验证关键词
+    if not keyword or not keyword.strip():
+        return ToolResult(
+            title="微信指数搜索失败",
+            output="",
+            error="关键词不能为空",
+        )
+
+    keyword = keyword.strip()
+
+    # 获取日期范围
+    try:
+        start_ymd, end_ymd = _get_date_range()
+    except Exception as e:
+        return ToolResult(
+            title="微信指数搜索失败",
+            output="",
+            error=f"日期计算失败: {str(e)}",
+        )
+
+    # 调用 API
+    try:
+        results = await _call_weixin_index_api(
+            keyword=keyword,
+            start_ymd=start_ymd,
+            end_ymd=end_ymd,
+        )
+    except RuntimeError as e:
+        return ToolResult(
+            title="微信指数搜索失败",
+            output="",
+            error=str(e),
+        )
+
+    if not results:
+        return ToolResult(
+            title="微信指数搜索",
+            output=json.dumps(
+                {
+                    "message": "未找到微信指数数据",
+                    "keyword": keyword,
+                    "date_range": {
+                        "start_ymd": start_ymd,
+                        "end_ymd": end_ymd,
+                    },
+                },
+                ensure_ascii=False,
+                indent=2,
+            ),
+        )
+
+    # 计算趋势
+    trend_info = _calculate_trend(results)
+
+    # 构建返回结果
+    result_data = {
+        "date_range": {
+            "start_ymd": start_ymd,
+            "end_ymd": end_ymd,
+        },
+        "trend": trend_info.get("trend"),
+        "change_percent": trend_info.get("change_percent"),
+        "total_score": trend_info.get("total_score"),
+    }
+
+    output = json.dumps(result_data, ensure_ascii=False, indent=2)
+    
+    return ToolResult(
+        title=f"微信指数搜索 - {keyword}",
+        output=output,
+    )
+
+
+if __name__ == '__main__':
+    res = asyncio.run(weixin_index_search("马年"))
+    print(res)

+ 1 - 1
examples/content_needs_generation/visualize_trace.py

@@ -767,7 +767,7 @@ def main():
     script_dir = Path(__file__).parent
     script_dir = Path(__file__).parent
     
     
     # JSON文件路径
     # JSON文件路径
-    json_path = script_dir / '.trace' / 'bf1263a7-49d3-48b5-81c5-15cf98f143a1' / 'output.json'
+    json_path = script_dir / '.trace' / '6bddb982-21db-4cbc-b064-8a568ce0791d' / 'output.json'
     
     
     # 输出HTML文件路径
     # 输出HTML文件路径
     output_path = script_dir / 'trace_visualization.html'
     output_path = script_dir / 'trace_visualization.html'

Некоторые файлы не были показаны из-за большого количества измененных файлов