portfolio-quick-diagnosis

star 2

用于快速分析投资组合的持仓概览、集中度检查和总体评价。适用于用户请求组合快速诊断、持仓概览、集中度分析或面向客户的结构化结果说明时。

QVerisAI By QVerisAI schedule Updated 5/12/2026

name: portfolio-quick-diagnosis description: 用于快速分析投资组合的持仓概览、集中度检查和总体评价。适用于用户请求组合快速诊断、持仓概览、集中度分析或面向客户的结构化结果说明时。

投资组合快速诊断

目的

把用户提供的持仓列表整理成一份结构化的快速诊断结果。该技能负责收集必要信息、补全缺失内容、触发分析,并把最终结果整理成可直接转述给客户的结构化文字。

适用场景

当任务是以下内容时使用本技能:

  • 快速概览一个组合
  • 将持仓统一整理为仓位比例
  • 检查集中度和明显的重叠风险
  • 输出简洁的中文持仓分析

总体分工

  • SKILL.md:负责流程控制、信息收集、确认步骤和调用顺序。
  • analysis_prompt.md:负责分析逻辑、检索范围、推断边界和风险判断。
  • report_prompt.md:负责最终结构化交付文案、章节结构和输出措辞。

核心规则

  • 全程使用中文。
  • 不要声称自己知道实时价格、最新基金持仓,或任何未提供、未验证的外部事实。
  • 不要给出买卖指令,也不要预测市场走势。
  • 清楚区分已知事实和粗略假设。
  • 如果用户给出的持仓比例加总不足 100%,不能假设剩余部分就是现金。必须追问用户:剩余部分是现金、货币基金,还是有其他持仓没有列出。只有在用户明确确认后,才能把剩余部分归入现金或其他类别。
  • 如果用户没有提供明确仓位,需要追问完成归一化所必需的最少信息。
  • 即使持仓信息看起来完整,最终报告前也要先进入确认步骤。
  • 最多进行 3 轮补充信息对话。
  • 默认不要生成 HTML、PDF 或其他本地报告文件。优先输出结构化中文结果。

路径约定

SKILL_ROOT = 本 SKILL.md 的父目录(即 portfolio-health-check/ 技能根目录)。所有 cd "$SKILL_ROOT" 命令均指向技能根目录,不要硬编码绝对路径。

标的识别规则

阶段一的第一步必须先做标的识别,通过 QVeris identify 命令一次性获取:

  • 股票名称和证券代码的互查
  • 公司简介(全称、主营业务、主要产品、概念标签)
  • 行业分类(申万一级/二级/三级,仅限个股)

如果用户给的是名称,先查代码;如果用户给的是代码,先查名称。 如果一个名称可能对应多个标的(返回结果中 is_ambiguous: true),先标记为待确认,并把候选代码列出来让用户选择。 如果 QVeris 找不到,再用公开网络信息补全。

QVeris 用法

单个标的:

cd "$SKILL_ROOT" && python scripts/portfolio-health-check/qveris_client.py identify "贵州茅台"

多个标的(批量):

cd "$SKILL_ROOT" && python scripts/portfolio-health-check/qveris_client.py identify "贵州茅台" "中国平安" "沪深300ETF"

identify 命令会按优先级尝试候选工具,第一个成功的就用:

  1. hangseng_polysource.stock.basicCorpInfo.retrieve.v2 — 主候选,返回公司全称、申万/证监会/中信行业分类、注册地、主营、概念板块等完整字段
  2. ths_ifind.company_basics.v1 — fallback,补 name;industry 字段上游返空属数据源限制

支持的输入格式:

  • 公司名称:"贵州茅台""中国平安"
  • 完整代码:"600519.SH""000001.SZ"
  • 纯数字代码:"600519"
  • ETF/基金名称:"沪深300ETF"

返回字段说明

字段 说明
code_lookup.codes 匹配到的 THS 代码列表
code_lookup.is_ambiguous 是否有多个候选代码
primary_code 首选代码(多候选时取第一个)
company 公司全称、主营业务、产品、概念标签
asset_type "stock""fund_or_etf"
industry 申万行业层级(个股才有,ETF/基金为 null)

处理歧义

  • 如果 is_ambiguoustrue,把所有候选代码列出来,在确认表中标注"待确认"。
  • 多市场上市(如 A+H 股)的情况下,默认取第一个代码(通常是 A 股),在确认表备注中列出其他代码。
  • 如果 identify 返回 resolved: false,再改用 search 命令做更宽泛的搜索。

第一阶段输出顺序

阶段一先输出两块内容,再进入持仓确认表:

  1. 名称/代码互查表

    • 放每个标的的名称、代码、候选代码、是否待确认
    • 这里只负责把名称和代码对上,不放长篇简介
  2. 公司与行业简介

    • 用简短中文说明公司主营、业务特点、所属行业、行业位置
    • 这部分是给用户快速理解标的用的,不放进表格里

然后再输出:

  1. 持仓确认表
    • 资产名称
    • 代码
    • 占比
    • 资产类别
    • 备注

状态存储

  • 第 1 阶段的标的识别结果、公司与行业简介、持仓确认表,会写入 state/portfolio_state.json
  • 这份文件是后续 Python 脚本读取的标准结构化输入。
  • 如果用户后续补充了新的名称/代码更正,应该更新同一个 state 文件,而不是另存新文件。

信息收集流程

收到用户持仓后,按以下顺序处理:

  1. identify 命令批量识别所有标的,一次性获取代码、公司简介、行业分类。
  2. 检查返回结果中是否有 is_ambiguous: trueresolved: false 的标的。
  3. 识别每个资产的名称、可能代码、输入形式和仓位信息。
  4. 如果只有名称没有代码,先根据公开信息自动补全常见代码。
  5. 判断是比例、金额、股数还是仅名称。
  6. 如果名称可能对应多个标的,再追问用户确认。
  7. 识别现金、货币基金或“剩下没动”等用户明确提到的现金线索。注意:比例加总不足 100% 本身不算现金线索,必须追问用户剩余部分是什么。
  8. 若信息不足,只追问完成归一化和确认所必需的最少信息。
  9. 所有追问尽量合并成一次,避免来回过多。
  10. 无论初始信息是否完整,都要先生成名称/代码互查表、公司与行业简介,再生成持仓确认表并等待确认。

输入识别规则

从用户消息中提取这些信息:

  • 资产名称
  • 可能的证券代码
  • 输入形式:金额、比例、股数,还是仅名称
  • 现金线索,例如“现金”“货币基金”“剩余”等

如果用户给的是金额,就按总金额归一化为比例。 如果用户只给了股数,不要凭记忆或直觉估算权重,应该要求补充大致市值或仓位。

确认步骤

确认表必须先于最终结构化结果输出,格式如下:

资产名称 代码 占比 资产类别 备注
示例资产 示例代码 10% 股票/ETF/债券/现金/其他 如有必要可写“待确认”

如果某个字段无法确认,请写 待确认无法确认。 确认提示语应简洁明确,例如:

“请确认以下持仓信息;如果有不准确之处,请直接修改名称、仓位或现金占比。”

调用顺序

  1. 先用 identify 命令做标的识别(代码互查 + 公司简介 + 行业分类)。
  2. 再收集并整理用户输入。
  3. 如有必要,先追问缺失信息。
  4. 生成并展示确认表。
  5. 在用户明确确认后,调用 analysis_prompt.md 生成分析要点。
  6. 再调用 report_prompt.md 生成最终结构化文字。
  7. 如果 3 轮后仍未确认,基于当前信息和必要假设继续,但要在最终结果中明确说明局限。

边界规则

  • 不要把不确定的信息写成确定事实。
  • 不得编造实时价格、实时净值、基金最新持仓、指数最新成分股、精确市值或汇率。
  • 对 ETF 与个股重叠,只能做保守判断,例如“可能存在重叠”。
  • 对无法识别的简称、代码或资产,明确写“无法确认”,并在确认阶段请求客户澄清。
  • 资产配置建议只能停留在方向性层面,不要给出具体买卖指令。

参考文件

Install via CLI
npx skills add https://github.com/QVerisAI/open-qveris-agents --skill portfolio-quick-diagnosis
Repository Details
star Stars 2
call_split Forks 0
navigation Branch main
article Path SKILL.md
More from Creator