com um clique
com um clique
用于快速分析投资组合的持仓概览、集中度检查和总体评价。适用于用户请求组合快速诊断、持仓概览、集中度分析或面向客户的结构化结果说明时。
串联投资组合快速诊断、深度诊断和优化处方三个子技能。支持对话模式(交互式阶段确认)和 API 模式(无状态一次性执行)。
用于对投资组合进行深度诊断。收集 4 个分析参数后调用 run_pipeline() 完成量化计算,再向用户解释诊断结果。
用于基于约束条件生成投资组合优化处方。调用 prescription_main.py 完成量化优化,仅保留约束收集、异常处理和结果解释。
| name | event-intelligence |
| description | 定时推送、手动获取事件资讯,并支持查询单条事件详情。 |
| description_zh | 事件语义检索定时推送 + 单条详情查询 |
| description_en | Scheduled event push notifications with detail drill-down |
sessionTarget="isolated"。sessionTarget="current"。sessionTarget="session:xxx",以及任何 session:* 形式的已有 session 绑定。本技能分为两部分:
eventId 调用详情接口获取完整分析数据。event-intelligence/
├── SKILL.md # 本文件,技能说明
├── event_query.py # 业务函数(search_events / get_event_detail / daily_event_summary)
├── qveris_client.py # Qveris REST 客户端(search + execute_tool)
└── state/
├── push_config.json # 推送运行时配置(间隔、关键词、上次推送时间、每日统计开关等)
└── push_history.json # 最近几次推送的事件列表缓存(用于按序号/描述查详情)
https://qveris.aiQVERIS_TOKEN 读取,必须提前配置。事件数据通过 Qveris 平台调用 deepseekdata 语义事件检索工具,无需本地持有 deepseekdata 独立 API Key。本技能中所有文件路径均 相对于本 SKILL.md 所在目录(即 event-intelligence/)。
执行命令前,agent 应先定位本技能目录:
SKILL_DIR="$(cd "$(dirname "$(readlink -f "${BASH_SOURCE[0]:-$0}")")" && pwd 2>/dev/null || pwd)"
如果 agent 是通过读取 SKILL.md 获得路径的,直接取其父目录即可。后续所有 cd 均使用该变量,不依赖任何硬编码绝对路径。
不同环境中 Python 命令可能是 python3 或 python,执行前先探测:
PY=$(command -v python3 2>/dev/null || command -v python 2>/dev/null)
if [ -z "$PY" ]; then echo "错误:未找到 python3 或 python,请先安装 Python 3.10+"; exit 1; fi
后续所有 Python 调用统一使用 $PY 代替 python3 / python。
用户说"开始推送"/"启动事件推送"/"开始定时推送"等触发本技能后:
state/push_config.json,获取当前推送参数。interval_minutes:推送间隔(默认 5 分钟)keyword:语义检索关键词(默认 "AI",用户可改为任意主题,比如:半导体、机器人、新能源)page_size:每次推送返回的事件条数(默认 10)state/push_config.json。search_events() 获取当前时间窗口内的事件,格式化后推送给用户(如果无事件则静默跳过)。interval_minutes 的间隔周期执行推送。每次推送执行时:
运行以下命令获取事件列表:
cd "$SKILL_DIR"
$PY -c "
import json, sys
sys.stdout.reconfigure(encoding='utf-8')
from event_query import search_events
result = search_events(keyword=\"\"\"<KEYWORD>\"\"\", minutes=<INTERVAL_MINUTES>, page_size=<PAGE_SIZE>)
print(json.dumps(result, ensure_ascii=False, indent=2))
"
解析返回的 JSON,提取事件列表。
如果 total > 0,按以下格式推送给用户:
📡 事件推送 (HH:MM) —— 最近 N 分钟共 X 条新事件(最多推送10条)
━━━━━━━━━━━━━━━━━━━━━━━━
[1] 标题
⏰ 2026-04-09 10:30:00 | 信号等级: S级
📌 一句话总结: xxxxx(取自 original_summary 字段)
📝 事件摘要: xxxxx(取自 summary 字段)
━━━━━━━━━━━━━━━━━━━━━━━━
[2] ...
💡 对某条感兴趣?直接说「第X条详细看看」或描述标题关键词即可查看完整分析。
🔄 想换个主题?说「关注半导体」即可切换关键词。
⏱️ 想调整推送频率?说「改为15分钟推送一次」。
字段映射:
compliantTitleeventPublishDatesignalLeveloriginal_summary(产业链维度的精炼总结)summary(事件核心要点概述)两个摘要都必须输出,不可省略。original_summary 偏产业链视角,summary 偏事件本身,互相补充。
前缀清洗:
event_query.py已在返回数据时自动去除original_summary和summary开头的"研报"/"研报指出"等冗余前缀及紧跟的标点,agent 直接使用返回值即可,无需额外处理。
如果 total == 0,静默跳过,不向用户发送任何消息。仅更新 state/push_config.json 中的 last_push_time,不写入推送历史,不输出任何内容。
缓存推送结果(仅 total > 0 时执行):将本次推送的事件列表写入 state/push_history.json,供后续详情查询使用(见下方"推送历史缓存"章节)。
更新 state/push_config.json 中的 last_push_time。
每次推送成功后,必须将结果追加到 state/push_history.json。
缓存规则:
batches 数组,新 batch 插入数组头部(最新在前)。batches 最多保留 max_batches 条(默认 3),超出时丢弃最旧的。[1] [2] [3] 对应。batch 结构示例:
{
"max_batches": 3,
"batches": [
{
"push_time": "2026-04-09T10:30:00",
"keyword": "AI",
"events": [
{
"index": 1,
"eventId": "76679",
"compliantTitle": "某事件标题",
"eventPublishDate": "2026-04-09 10:15:00",
"signalLevel": "high",
"original_summary": "产业链总结...",
"summary": "摘要文本..."
},
{
"index": 2,
"eventId": "76680",
"compliantTitle": "另一个事件",
"eventPublishDate": "2026-04-09 10:20:00",
"signalLevel": "medium",
"original_summary": "...",
"summary": "..."
}
]
}
]
}
写入方式:
每次推送执行完毕后,运行:
cd "$SKILL_DIR"
$PY -c "
import json
from datetime import datetime
history_path = 'state/push_history.json'
with open(history_path, 'r') as f:
history = json.load(f)
new_batch = {
'push_time': datetime.now().strftime('%Y-%m-%dT%H:%M:%S+08:00'),
'keyword': '<KEYWORD>',
'events': <EVENTS_LIST>
}
history['batches'].insert(0, new_batch)
max_b = history.get('max_batches', 3)
history['batches'] = history['batches'][:max_b]
with open(history_path, 'w') as f:
json.dump(history, f, ensure_ascii=False, indent=2)
"
其中 <EVENTS_LIST> 是本次推送返回的事件列表(每个事件增加 index 字段,从 1 开始编号)。
当用户说"改为 15 分钟推送一次"/"推送间隔改成 30 分钟"等:
state/push_config.json 中的 interval_minutes。memory/YYYY-MM-DD.md 中记录本次修改。当用户说"关注半导体"/"推送关键词改为新能源"等:
state/push_config.json 中的 keyword。当用户说"停止推送"/"关闭推送"等:
state/push_config.json,将 active 设为 false。与定时推送配套的 24 小时周期统计功能。启动推送时自动一并启动,停止推送时一并关闭。统计过去 24 小时内按信号等级(S 级、A 级)的事件数量,以简报形式推送给用户。
随定时推送一起自动启动,不需要用户单独触发。启动推送时:
daily_event_summary() 并将结果格式化输出给用户。state/push_config.json 中记录 daily_summary_active: true。每次执行时:
运行以下命令获取统计数据:
cd "$SKILL_DIR"
$PY -c "
import json, sys
sys.stdout.reconfigure(encoding='utf-8')
from event_query import daily_event_summary
result = daily_event_summary(keyword=\"\"\"<KEYWORD>\"\"\", minutes=1440)
print(json.dumps(result, ensure_ascii=False, indent=2))
"
解析返回的 JSON。
如果 total > 0,按以下格式输出给用户:
📊 每日事件统计 (HH:MM)
━━━━━━━━━━━━━━━━━━━━━━━━
🔍 关键词: <KEYWORD>
📅 统计周期: YYYY-MM-DD HH:MM ~ YYYY-MM-DD HH:MM(过去 24 小时)
🔴 S 级事件: X 条
🟠 A 级事件: Y 条
📋 其他等级: Z 条
── 合计: N 条
💡 想查看具体事件?说「查最近24小时的事件」。
如果 total == 0,静默跳过,不发送任何消息(与事件推送保持一致)。
随定时推送一起关闭,无需单独操作。
当用户说"查最近5小时的事件"/"最近有什么AI事件"/"搜一下半导体事件"等:
search_events()。state/push_history.json,确保后续可以通过"第X条详细看看"查询详情。state/push_config.json 的 last_push_time。💡 对某条感兴趣?直接说「第X条详细看看」即可查看完整分析。
🔍 想看其他时间段?说「查最近1小时」或「查最近24小时」。
🔄 想换个主题?说「搜一下半导体事件」。
💡 最近 N 分钟/小时暂无新事件。想扩大范围?说「查最近24小时」。
🔄 想换个主题?说「搜一下半导体事件」。
cd "$SKILL_DIR"
$PY -c "
import json, sys
sys.stdout.reconfigure(encoding='utf-8')
from event_query import search_events
result = search_events(keyword=\"\"\"<KEYWORD>\"\"\", minutes=<MINUTES>, page_size=<PAGE_SIZE>)
print(json.dumps(result, ensure_ascii=False, indent=2))
"
用户可以通过以下任意方式触发详情查询:
| 用户说法示例 | 匹配方式 |
|---|---|
| "第3条详细看看" | 按序号匹配 |
| "那个关于芯片的事件看一下" | 按关键词模糊匹配标题/摘要 |
| "长飞光纤那条" | 按标题中的实体名称匹配 |
| "上一轮推送的第1条" | 指定历史批次 |
注意:eventId 对用户不可见,用户不会通过 eventId 来指定事件。eventId 仅在内部用于调用详情 API。
state/push_history.json。index == 3 的事件。compliantTitle 、summary和 original_summary 中做模糊匹配。如果匹配到多条,列出候选(带序号)让用户选择。batches[1](上一轮)中按序号查找。cd "$SKILL_DIR"
$PY -c "
import json, sys
sys.stdout.reconfigure(encoding='utf-8')
from event_query import get_event_detail
detail = get_event_detail(keyword=\"\"\"<KEYWORD>\"\"\", event_id='<EVENT_ID>')
print(json.dumps(detail, ensure_ascii=False, indent=2))
"
将 API 返回的原始 JSON 组织成以下专业分析报告。报告分为 8 个板块,按固定顺序输出,每个板块之间用分隔线隔开。如果某个字段为空或 null,该板块标注"暂无数据",不省略板块本身。
完整报告模板:
格式说明:以下模板为理想输出格式。若 LLM 无法精确对齐 box-drawing 字符(如虚线卡片框、方框传导链路),请使用各板块中标注的简化格式,优先保证内容完整和可读性。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📋 事 件 深 度 分 析 报 告
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📰 compliantTitle
🕐 eventPublishDate
🔶 信号等级: signalLevel | 信号类型: signalCategory
═══════════════════════════════════════════════
📝 一、核 心 摘 要
═══════════════════════════════════════════════
original_summary 的完整内容
═══════════════════════════════════════════════
🔗 二、投 资 逻 辑 与 多 空 博 弈
═══════════════════════════════════════════════
◆ 核心逻辑链路
(从 investmentLogic 中提取"核心逻辑:"后的内容)
◆ 分支逻辑
· AI多模态布局:
持股PixVerse → 影视大模型领先 → 商业化落地 → 股权增值
· 估值重估逻辑:
PB低于行业 → AI资产未充分定价 → 重估空间明确
(每条分支单独一段,链路用 → 串联,换行缩进保持整洁)
◆ 多空博弈
🔴 红方 59% vs 🔵 蓝方 41% ── 红方微弱占优
(从 investmentLogic 中提取红蓝方胜率)
═══════════════════════════════════════════════
🌳 三、推 理 验 证 链 路
═══════════════════════════════════════════════
① 步骤1的结论
↓
② 步骤2的结论
↓
③ 步骤3的结论
↓
④ ...
↓
⑤ 决策综合
(数据来自 overallReasoningChain,是 JSON 字符串数组,
解析后逐步展示,用带编号的纵向箭头链串联,每步独占一行)
═══════════════════════════════════════════════
🏗️ 四、产 业 链 全 景
═══════════════════════════════════════════════
(直接输出 formatted_tree 的完整内容,保留原始缩进和层级结构,
除此之外不要自己生成其他内容)
═══════════════════════════════════════════════
⚡ 五、传 导 路 径 与 节 奏
═══════════════════════════════════════════════
▸ 触发事件: transmission_logic.trigger
▸ 传导链路:
节点A ──(周期/B级)──▸ 节点B ──(周期/B级)──▸ 节点C
(数据来自 transmission_logic.steps 数组,
每个 step 包含 node / cycle / grade。
默认使用上方简化箭头格式,LLM 可稳定复现。
若输出环境支持等宽字符且能精确对齐,可选用方框增强版:
┌─────────┐ 周期 ┌─────────┐ 周期 ┌─────────┐
│ 节点A │ ────────▸ │ 节点B │ ────────▸ │ 节点C │
│ B级 │ │ B级 │ │ C级 │
└─────────┘ └─────────┘ └─────────┘
)
▸ 总传导周期: transmission_logic.total_cycle
═══════════════════════════════════════════════
📚 六、逻 辑 库 匹 配
═══════════════════════════════════════════════
对本事件提取的可复用投资逻辑模式:
── ▸ 逻辑模式 1: logic_name ──────────────
📎 标准链路:
standard_chain
(如果链路较长,按 → 分段换行展示)
📊 置信度: ████████░░ confidence_score × 100%
📈 历史成功率: ██████░░░░ estimated_success_rate × 100%
(用进度条可视化:每10%一个█,不足部分用░,总长度固定10格)
🔍 信号特征:
signal_characteristics
(如果是一大段文本,按句号/分号拆分为要点列表:
· 特征要点 1
· 特征要点 2
· 特征要点 3
)
🎯 适用场景:
· applicable_scenarios[0]
· applicable_scenarios[1]
⚠️ 风险打破条件:
· risk_breakers[0]
· risk_breakers[1]
── ▸ 逻辑模式 2: ... ────────────────────
(同上格式)
(默认使用上方 ── ▸ 标题 ── 分隔线格式,LLM 可稳定复现。
若输出环境支持等宽字符,可选用虚线卡片框增强视觉效果:
┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐
▸ 逻辑模式 N: 名称
└ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┘
)
──────────────────────────────────────
📋 综合评估:
extraction_summary
(如果是长段落,按语义拆分为 2-3 个要点)
──────────────────────────────────────
(数据来自 logic_library_output.extracted_patterns 数组)
═══════════════════════════════════════════════
🎯 七、核 心 标 的
═══════════════════════════════════════════════
| 标的名称 | 代码 | 相关度 | 研究观点 |
|---------|------|-------|---------|
| 电广传媒 | 000917.SZ | 高 | 中性偏谨慎 |
| ... | ... | ... | ... |
(数据来自 investmentTargetsSummary 数组,每行一个标的。
必须使用 Markdown 表格格式输出,不要用空格对齐。)
═══════════════════════════════════════════════
⚠️ 八、关 键 风 险
═══════════════════════════════════════════════
🔸 1. keyRisks[0]
🔸 2. keyRisks[1]
🔸 3. ...
(每条风险独占一段,风险之间留空行,便于阅读)
═══════════════════════════════════════════════
🔬 附 录:历 史 案 例 参 考
═══════════════════════════════════════════════
historical_cases_analysis 的完整内容
(如果内容是长段落,按案例/时间点拆分为独立段落,
每个案例之间留空行)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
字段到板块的完整映射:
| 板块 | 数据来源字段 | 处理说明 |
|---|---|---|
| 基本信息(报告头) | compliantTitle, eventPublishDate, signalLevel, signalCategory | 直接输出 |
| 一、核心摘要 | original_summary | 完整输出,不截断 |
| 二、投资逻辑与多空博弈 | investmentLogic | 拆分为核心逻辑、分支逻辑、多空博弈三段 |
| 三、推理验证链路 | overallReasoningChain | JSON 字符串,需先 json.loads() 解析为数组 |
| 四、产业链全景 | formatted_tree | 原样输出,保留树形缩进 |
| 五、传导路径与节奏 | transmission_logic | 对象,含 trigger, steps[], total_cycle |
| 六、逻辑库匹配 | logic_library_output | 含 extracted_patterns[] 和 extraction_summary |
| 七、核心标的 | investmentTargetsSummary | 数组,每项取 target_name, target_code, relevance, research_opinion,必须用 Markdown 表格输出 |
| 八、关键风险 | keyRisks | 字符串数组,编号列出 |
| 附录:历史案例参考 | historical_cases_analysis | 完整输出 |
格式规则:
━ 作报告外边框,═ 作板块标题分隔线,视觉层次分明█░ 进度条可视化(总长度固定 10 格,每格代表 10%)investmentLogic 是一段长文本,需要智能拆分为核心逻辑、分支链路、多空博弈三个子段落overallReasoningChain 是 JSON 字符串格式的数组,必须先解析再用纵向带编号箭头链展示· 前缀),每个要点独占一行。这尤其适用于第六部分的 signal_characteristics、extraction_summary,以及附录的 historical_cases_analysis── ▸ 标题 ── 分隔线标识,保证 LLM 稳定复现;若输出环境支持等宽字符对齐,可选用虚线框 ┌ ─ ─ ┐ / └ ─ ─ ┘ 增强卡片效果报告输出后追加引导:
state/push_config.json 结构:
{
"active": false,
"interval_minutes": 5,
"keyword": "AI",
"page_size": 10,
"last_push_time": null,
"daily_summary_active": false
}
| 字段 | 类型 | 说明 |
|---|---|---|
active | bool | 推送是否正在运行 |
interval_minutes | int | 推送间隔,单位分钟,默认 5 |
keyword | string | 语义检索关键词,默认 "AI" |
page_size | int | 每次推送返回的事件条数,默认 10 |
last_push_time | string | 上次推送时间 (ISO 格式),初始为 null |
daily_summary_active | bool | 每日统计是否正在运行,随 active 一起启停 |
以下关键词/意图会触发本技能:
启动推送:开始推送、启动推送、事件推送、定时推送、开始监控事件、打开推送等
手动查询:查最近X小时/分钟事件、最近有什么事件、查事件、搜事件、看看事件、有什么新事件等
修改参数:推送间隔、改为X分钟、推送频率、关注XX(修改关键词)等
停止推送:停止推送、关闭推送、暂停推送、取消推送等
查看详情:第X条详细看看、详情+序号、那个关于XX的事件、XX那条、上一轮第X条等
2026-04-09T14:01:30+08:00。严禁使用 UTC 时间或带 Z 后缀的时间戳。datetime.now() 在系统时区为 Asia/Shanghai 或 Asia/Beijing 时已返回北京时间,直接使用即可。state/push_config.json,不依赖会话记忆。memory/YYYY-MM-DD.md 中记录重要的配置变更,便于跨会话回溯。