TrendScope - 舆情趋势洞察
根据用户需求自动生成专业的舆情分析报告,包含情感分布、地域分布、关键词分析、媒体分布、时间趋势等多维度分析。
一、执行流程
收到用户报告生成请求后,按以下步骤执行:
Step1:配置 API Key
使用本技能前,必须先配置 API Key。
配置方式(任选其一)
- 环境变量(推荐):在运行智能体的宿主环境中设置
FEEDAX_REPORT_API_KEY,或通过系统/密钥管理工具注入,请勿在对话中粘贴或朗读密钥。 - 项目
.env:在技能项目根目录创建或编辑.env,写入FEEDAX_REPORT_API_KEY=...(可参考仓库内.env.example)。不要将.env内容复制到聊天或日志。
如果未配置
向用户返回说明(不要要求用户把 Key 发到对话里):
GE1003:未配置 API Key。请前往 https://www.feedax.cn 申请,并在宿主环境或项目
.env中设置环境变量FEEDAX_REPORT_API_KEY,切勿在聊天中发送密钥。
数据与隐私
检索词、筛选条件与聚合参数会作为请求体提交到 Feedax 报告 API。请勿在 --query 或分析需求中输入身份证号、手机号、精确门牌等可识别个人身份的信息;涉及敏感主体时请自行脱敏后再检索。
Step 2: 解析用户输入
根据 三、解析规则 从用户自然语言中提取参数。
特别注意:如果用户输入中包含地域名称(省/市/区县),必须同时:
- 在
--query中加入地域关键词 - 添加
--area "地域名"参数进行地域筛选
Step 3: 执行报告生成命令
# 无地域时
python3 scripts/report_cli.py --query "关键词" --days 7 --full-analysis
# 有地域时(如:长沙教育问题)
python3 scripts/report_cli.py --query "(长沙|湖南)&(教育|学校|教学|学生|老师|教师)" --area "长沙" --days 7 --full-analysis
Step 4: 返回结果
- 在对话中展示报告摘要(总数据量、情感分布、地域TOP5、关键词TOP10等)
- 完整报告自动保存至
~/Desktop/舆情分析报告/目录
二、CLI 参数说明
2.1 必传参数
| CLI参数 | 简写 | 说明 |
|---|---|---|
--query | -q | 全文检索关键词,匹配标题/内容/作者名 |
queryString 语法规则:
- 空格 = 与(AND)
&= 与(AND)|= 或(OR)!= 非(NOT)()= 优先级分组- 示例:
(北京|上海)&(十五届|十五大)&!(茶叶|鸡蛋)
2.2 分页与排序
| CLI参数 | 简写 | 默认值 | 说明 |
|---|---|---|---|
--size | -s | 10 | 返回条数,1-20 |
--sort | publish_time | 排序字段,默认按发布时间排序 | |
--sort-order | desc | 排序方式:asc/desc |
--sort 可选值:
publish_time- 默认。按发布时间排序,获取最新内容interact_count- 按互动数(热度)排序comments_count- 按评论数排序likes_count- 按点赞数排序reposts_count- 按转发数排序fans_count- 按粉丝数排序
2.3 内容筛选
| CLI参数 | 简写 | 说明 |
|---|---|---|
--media | -m | 媒体平台,逗号分隔(如: 微博,抖音) |
--author | 作者名称,精确匹配 | |
--msg-type | 消息类型:original/comment/repost/all | |
--content-type | 内容类型:video/picture/text/all | |
--sentiment | 情感倾向:negative/neutral/positive/all | |
--media-class | 媒体分类(如: 中央媒体) | |
--domain | 内容领域(见参考文件) | |
--scene | 业务场景(见参考文件) | |
--area | -a | 地域名称(如: 南京) |
--verification | 认证类型:blue/yellow/normal |
2.4 时间筛选
| CLI参数 | 简写 | 说明 |
|---|---|---|
--days | -d | 最近N天(如: --days 7),默认7天 |
--time-from | 开始时间(格式: YYYY-MM-DD HH:MM:SS) | |
--time-to | 结束时间(格式: YYYY-MM-DD HH:MM:SS) |
2.5 互动数据筛选
| CLI参数 | 说明 |
|---|---|
--interact-min | 互动数最小值 |
--interact-max | 互动数最大值 |
--comments-min | 评论数最小值 |
--comments-max | 评论数最大值 |
2.6 报告控制参数
| CLI参数 | 简写 | 说明 |
|---|---|---|
--full-analysis | -f | 启用全维度分析(所有统计维度) |
--no-articles | 不返回热文列表(仅返回统计数据) | |
--output-dir | -o | 报告输出目录,默认 ~/Desktop/舆情分析报告/ |
--json-only | 仅输出JSON格式 | |
--quiet | 静默模式,不显示摘要 |
aggregationTypes 默认值说明:
-
默认模式(非
--full-analysis):["sentiment", "keywords", "media_name", "area_code_province", "publish_time_histogram"]- 返回:情感分布、关键词、媒体平台、地域分布、时间趋势
-
全维度模式(
--full-analysis):["sentiment", "area_code_province", "media_class", "verification_type", "keywords", "media_name", "channel", "publish_time_histogram"]- 返回:所有8个维度的统计数据
注意: 未在
aggregationTypes中指定的维度,API 将返回null。这是正常行为,并非错误。
aggregationTypes 可选值:
| 参数值 | 含义说明 | 典型应用场景 |
|---|---|---|
sentiment | 情感倾向分布 | 舆情正负面分析 |
area_code_province | 地域分布(省级) | 省份/地区热力图 |
media_class | 媒体分类分布 | 不同媒体类型统计 |
verification_type | 作者认证类型分布 | 蓝V/黄V/普通用户统计 |
keywords | 关键词分布 | 生成词云图 |
media_name | 媒体名称分布 | 具体发布账号排名 |
channel | 通道聚合分布 | 数据来源通道统计 |
publish_time_histogram | 发布时间趋势 | 时间轴折线图/柱状图 |
scenes | 场景分布 | 业务场景分类统计 |
四、媒体平台列表
支持的媒体名称(mediaNames):
抖音、快手、微博、今日头条、火山、哔哩哔哩、小红书、微信、有驾、百家号、搜狐新闻、同花顺、股吧、东方财富、百度贴吧、搜狐网、乙方宝招标、度小视、汽车之家、网易、百度新闻、豆瓣网、喜马拉雅、百度知道、易车网、B站、网易新闻、懂车帝、新浪网、雪球、知乎、西瓜、好看、黑猫投诉、UC头条、新浪新闻、法律快车、东方财富网、搜狐新闻APP、腾讯新闻、新浪财经、皮皮虾、趣头条、QQ浏览器、什么值得买、腾讯微视、一点资讯、美篇、携程旅行网、全国12315互联网平台
五、媒体分类 (mediaClasses)
| 分类 | 说明 |
|---|---|
| 其他 | 未分类媒体 |
| 商业媒体 | 商业性质媒体 |
| 行业媒体 | 行业垂直媒体 |
| 民企 | 民营企业账号 |
| KOL | 关键意见领袖 |
| 省级媒体 | 省级官方媒体 |
| 市&以下媒体 | 市级及以下媒体 |
| 中央媒体 | 中央级官方媒体 |
| 中央政府 | 中央政府机构 |
| 区县及以下政府 | 区县级政府机构 |
| 事业单位 | 事业单位账号 |
| 市级政府 | 市级政府机构 |
| 省级政府 | 省级政府机构 |
| 社会团体 | 社会团体组织 |
| 国企 | 国有企业 |
| 服务机构 | 服务机构 |
| 明星 | 明星账号 |
| 央企 | 中央企业 |
| 境外媒体 | 境外媒体 |
| 高校 | 高等院校 |
| 外国政府 | 外国政府机构 |
| 智库 | 智库机构 |
三、解析规则
3.1 关键词解析 (queryString)
从用户输入中提取核心检索关键词,生成搜索关键词表达式。
语法规则
| 运算符 | 含义 | 示例 |
|---|---|---|
| | 或关系 (OR) | 北京|首都|京城 |
& | 与关系 (AND) | (南京|金陵)&(杀人|凶杀) |
| 空格 | 与关系 (AND) | (南京|金陵) (杀人|凶杀) |
() | 分组 | (北京|上海)&(医疗|卫生) |
! | 非(NOT) | 北京&!(茶叶|鸡蛋) |
解析示例
| 用户输入 | queryString | 同时需要 --area |
|---|---|---|
| 南京杀人案 | (南京|金陵)&(杀人|凶杀|行凶) | --area "南京" |
| 比亚迪汽车召回 | 比亚迪&(召回|退市|下架) | 无 |
| 北京暴雨 | (北京|首都)&(暴雨|大雨|洪涝) | --area "北京" |
| 江苏南京教育问题 | (南京|金陵)&(教育|学校) | --area "南京" |
重要:当用户输入中明确包含地域名称(如城市、省份)时,必须同时传递
--area参数。
--query中的地域关键词:匹配内容中提到该地域的文章--area参数:筛选发布者所在地域的文章- 两者配合使用可精确定位特定地域的本地舆情
3.2 媒体平台映射
| 用户表述 | mediaNames |
|---|---|
| 抖音、快手、小红书 | ["抖音", "快手", "小红书"] |
| 短视频平台 | ["抖音", "快手", "火山", "西瓜"] |
| 微博 | ["微博"] |
| 财经平台 | ["同花顺", "股吧", "东方财富", "雪球"] |
| 新闻平台 | ["今日头条", "百家号", "搜狐新闻", "网易新闻", "新浪新闻", "腾讯新闻"] |
3.3 情感倾向映射
| 用户表述 | sentiments |
|---|---|
| 负面/负面信息 | [-1] |
| 正面/正面信息 | [1] |
| 中性 | [0] |
| 全部情感 | [-1, 0, 1] |
3.4 媒体级别映射
| 用户表述 | mediaClasses |
|---|---|
| 央媒/央级媒体 | ["中央媒体"] |
| 省媒/省级媒体 | ["省级媒体"] |
| 省级及以上 | ["中央媒体", "省级媒体"] |
| 地市级 | ["市&以下媒体"] |
| 商业媒体 | ["商业媒体"] |
| 官方账号 | ["中央媒体", "省级媒体", "市&以下媒体", "中央政府", "省级政府", "市级政府"] |
3.5 消息类型映射
| 用户表述 | messageTypes |
|---|---|
| 原发/原创 | [1] |
| 评论/评论区 | [2] |
| 转发 | [3] |
| 全部消息 | [1, 2, 3] |
3.6 内容类型映射
| 用户表述 | contentTypes |
|---|---|
| 视频 | ["video"] |
| 图片/图文 | ["picture"] |
| 文本/文字 | ["text"] |
3.7 认证类型映射
| 用户表述 | verificationType |
|---|---|
| 蓝V/官方账号/机构号 | 1 |
| 黄V/个人认证/大V | 0 |
| 普通用户/素人 | -1 |
3.8 时间范围计算
| 用户表述 | 计算方式 |
|---|---|
| 6小时 | 当前时间 - 6小时 |
| 24小时/一天 | 当前时间 - 24小时 |
| 3天 | 当前时间 - 3天 |
| 7天/一周 | 当前时间 - 7天 |
| 30天/一个月 | 当前时间 - 30天 |
3.9 排序方式映射
默认规则:除非用户明确要求,否则一律使用 publish_time(发布时间)排序
| 用户表述 | sortField | 说明 |
|---|---|---|
| 无明确要求 | publish_time | 默认,获取最新发布的内容 |
| 按热度/热门/最火的 | interact_count | 按互动数(热度)排序 |
| 按评论数/最多评论 | comments_count | 按评论数排序 |
| 按点赞数/最多点赞 | likes_count | 按点赞数排序 |
| 按转发数/最多转发 | reposts_count | 按转发数排序 |
| 按粉丝数/大V账号 | fans_count | 按粉丝数排序 |
| 最新/最近/新发布的 | publish_time | 按发布时间排序(默认) |
六、CLI 命令示例
文件: scripts/report_cli.py
通过命令行调用报告生成API,支持所有筛选参数和聚合维度。
基础用法
# 基础报告生成
python3 scripts/report_cli.py --query "医疗问题"
# 生成指定地域的报告(最近7天)
python3 scripts/report_cli.py --query "南京 315" --area "南京" --days 7
# 生成指定平台和情感的报告
python3 scripts/report_cli.py --query "医疗问题" --media "微博,抖音" --sentiment negative
# 生成完整分析报告(包含所有聚合维度)
python3 scripts/report_cli.py --query "比亚迪" --days 30 --full-analysis
完整参数说明见 二、CLI 参数说明
完整示例
# 生成比亚迪最近30天的完整舆情分析报告
python3 scripts/report_cli.py \
--query "比亚迪" \
--days 30 \
--media "微博,抖音,今日头条" \
--full-analysis \
--output-dir "./reports"
# 生成南京教育领域负面舆情报告
python3 scripts/report_cli.py \
--query "(南京|金陵) (教育|学校)" \
--area "南京" \
--days 7 \
--sentiment negative \
--full-analysis
输出结果
- 对话展示:自动展示报告摘要(总数据量、情感分布、地域分布、关键词TOP10等)
- JSON报告文件:完整数据保存至
~/Desktop/舆情分析报告/查询词_时间戳.json - Markdown报告文件:可视化报告保存至
~/Desktop/舆情分析报告/查询词_时间戳.md
七、参考文件
references/domains.json- 领域分类完整列表references/scenes.json- 场景分类完整列表references/media_names.json- 媒体平台完整列表references/aggregation_types.json- 聚合维度完整列表assets/area_codes.json- 国标区域编码数据
八、示例对话
示例1:基础报告
用户: 生成一份关于比亚迪最近一个月的舆情分析报告
参数解析:
| 提取项 | 用户表述 | CLI参数 |
|---|---|---|
| 关键词 | 比亚迪 | --query "比亚迪" |
| 时间范围 | 最近一个月 | --days 30 |
| 分析模式 | 舆情分析报告 | --full-analysis |
执行命令:
python3 scripts/report_cli.py --query "比亚迪" --days 30 --full-analysis
示例2:指定平台和情感
用户: 帮我看看微博和抖音上关于南京地铁的负面舆情
参数解析:
| 提取项 | 用户表述 | CLI参数 |
|---|---|---|
| 关键词 | 南京地铁 | --query "(南京|金陵)&地铁" |
| 媒体平台 | 微博和抖音 | --media "微博,抖音" |
| 情感倾向 | 负面舆情 | --sentiment negative |
| 地域 | 南京 | --area "南京" |
执行命令:
python3 scripts/report_cli.py --query "(南京|金陵)&地铁" --media "微博,抖音" --sentiment negative --area "南京" --days 7
示例3:热度排序
用户: 最近3天最火的医疗相关话题有哪些
参数解析:
| 提取项 | 用户表述 | CLI参数 |
|---|---|---|
| 关键词 | 医疗 | --query "医疗|卫生" |
| 时间范围 | 最近3天 | --days 3 |
| 排序方式 | 最火的 | --sort interact_count |
执行命令:
python3 scripts/report_cli.py --query "医疗|卫生" --days 3 --sort interact_count
示例4:央媒报道
用户: 统计一下央媒对新能源汽车的报道情况
参数解析:
| 提取项 | 用户表述 | CLI参数 |
|---|---|---|
| 关键词 | 新能源汽车 | --query "新能源&汽车" |
| 媒体分类 | 央媒 | --media-class "中央媒体" |
| 分析模式 | 统计 | --full-analysis |
执行命令:
python3 scripts/report_cli.py --query "新能源&汽车" --media-class "中央媒体" --days 7 --full-analysis
示例5:精确时间范围
用户: 生成3月1日到3月15日期间关于315消费者权益的报告
参数解析:
| 提取项 | 用户表述 | CLI参数 |
|---|---|---|
| 关键词 | 315消费者权益 | --query "315&(消费者|维权)" |
| 开始时间 | 3月1日 | --time-from "2026-03-01 00:00:00" |
| 结束时间 | 3月15日 | --time-to "2026-03-15 23:59:59" |
执行命令:
python3 scripts/report_cli.py --query "315&(消费者|维权)" --time-from "2026-03-01 00:00:00" --time-to "2026-03-15 23:59:59" --full-analysis
九、报告输出格式
9.1 JSON格式(原始数据)
{
"report_info": {
"queryString": "比亚迪",
"size": 10,
"sortField": "publish_time",
"sortOrder": "desc",
"hotArticles": true,
"aggregationTypes": ["sentiment", "keywords", "media_name", "area_code_province", "publish_time_histogram"],
"timeFrom": "2026-03-03 00:00:00",
"timeTo": "2026-04-02 23:59:59",
"areaCodes": ["320100"],
"report_time": "2026-04-02T18:00:00",
"total": 77956
},
"data": {
"articles": [...],
"aggregation": {
"sentimentDistribution": [...],
"areaCodeProvinceDistribution": [...],
"keywordsDistribution": [...],
...
}
}
}
说明:
report_info包含 API 调用时的完整请求参数,便于追溯和复现查询。
9.2 Markdown格式(文本报告)
包含以下内容:
- 报告概览(总数据量、时间范围)
- 情感倾向分析(表格形式)
- 地域分布分析(TOP10省份)
- 媒体分布分析(媒体类型、平台分布)
- 关键词分析(TOP20关键词)
- 时间趋势分析(24小时趋势)
- 热文列表(TOP10热文)
9.3 HTML格式(可视化报告)
生成美观的可视化 HTML 报告,可直接在浏览器中打开查看。包含以下模块:
- 舆情概况 - 信息总量、负面/中性/正面统计卡片、情感占比进度条
- 传播渠道分布 - 视频/微博/APP等渠道的数量和占比表格
- 媒体平台分布 - TOP10 媒体平台排名表格
- 省级地域分布 - TOP15 省份/地区卡片展示
- 关键词云 - TOP20 关键词标签云(动态字号)
- 传播趋势 - ECharts 时间趋势折线图(交互式)
- 热门文章 - TOP20 热文列表(含标题、作者、平台、摘要)
- 总结 - 核心发现汇总
说明:HTML 报告使用 ECharts 图表库,需联网加载 CDN 资源。
十、错误处理
当报告生成失败时,根据以下错误码判断原因并采取相应措施。
10.1 API Key 错误码
CLI 优先读取环境变量 FEEDAX_REPORT_API_KEY;若仍为空,会尝试读取旧名 FEEDAX_SEARCH_API_KEY(兼容旧配置,建议尽快改为 FEEDAX_REPORT_API_KEY)。
| 错误码 | 说明 | 原因 | 解决方案 |
|---|---|---|---|
GE1003 | 未配置API Key | 未设置 FEEDAX_REPORT_API_KEY(或兼容的旧名) | 在宿主环境或 .env 中配置,前往 https://www.feedax.cn 免费申请 |
GE1004 | API Key已失效 | API Key 被禁用或撤销 | 检查API Key有效性,或重新申请 |
GE1005 | API Key已过期 | API Key 超过有效期 | 前往 https://www.feedax.cn 重新申请 |
GE1006 | API Key无效 | API Key 格式错误或不存在 | 前往 https://www.feedax.cn 重新申请 |
GE1007 | 账户余额不足 | 账户配额已用完 | 前往 https://www.feedax.cn 充值 |
10.2 HTTP 状态码错误
| HTTP状态码 | 错误提示 | 原因 | 建议操作 |
|---|---|---|---|
| 400 | 请求参数错误,请检查输入 | 参数格式或值不正确 | 检查 CLI 参数 |
| 401/403 | API Key可能无效或已过期 | 认证失败 | 检查 API Key 配置 |
| 429 | 请求过于频繁,请稍后再试 | 超过请求频率限制 | 等待后重试 |
| 500 | 服务器内部错误 | 服务端异常 | 稍后重试 |
| 502 | 服务暂时不可用,请稍后再试 | 网关错误 | 稍后重试 |
| 503 | 服务维护中,请稍后再试 | 服务正在维护 | 稍后重试 |
| 504 | 网关超时,请稍后再试 | 请求处理超时 | 稍后重试 |
10.3 网络错误
| 错误类型 | 错误提示 | 原因 | 建议操作 |
|---|---|---|---|
| 连接超时 | 请求超时,请稍后再试 | 网络延迟或服务繁忙 | 检查网络,稍后重试 |
| 连接错误 | 无法连接到服务器,请检查网络或稍后再试 | 网络不可达 | 检查网络连接,稍后重试 |