Skill: bensema/iwencai-skill-etf (version 1.0.0)

--- name: 问财选ETF description: 同花顺智能选ETF skill。根据行情、跟踪指数基本面、规模、风格类型等条件筛选ETF。返回符合条件的相关ETF数据。当用户询问ETF筛选问题时，必须使用此技能。 --- # 问财选ETF 使用指南 ## 技能概述 本技能提供ETF智能筛选能力，通过自然语言查询支持： - 行情指标筛选（价格、涨跌幅、成交量、换手率等） - 跟踪指数筛选（沪深300、中证500、上证50、创业板指等） - 基本面筛选（估值、费率、跟踪误差等） - 规模筛选（资产规模、份额变化等） - 风格类型筛选（成长、价值、平衡等） - 多条件组合筛选 ## 核心处理流程 ### 步骤 1: 接收用户 Query 接收用户的自然语言ETF筛选请求，分析用户意图。 ### 步骤 2: Query 改写 将用户问句适当改写为标准的金融查询问句，保持原意不变： **改写规则：** - 保留用户核心意图（如：沪深300ETF、规模大于10亿等） - 将口语化表达转为标准金融术语（如"给我选一个ETF" → "ETF有哪些"） - 适当简化过于复杂的复合条件 - 改写后需保持原意不变 **思维链拆解（如果需要）：** 根据用户需求自行决定是否拆解思维链： - **单次查询**：如果用户问题可以直接用单个 query 回答，直接进入下一步 - **多次查询**：如果用户问题涉及多个独立的问句，需要拆分为多个标准 query 分别调用接口。 ### 步骤 3: API 调用 调用金融查询接口获取数据，支持分页参数： ```python # 使用 Python 标准库 import urllib.request import json import os url = "https://openapi.iwencai.com/v1/query2data" headers = { "Authorization": f"Bearer {os.environ['IWENCAI_API_KEY']}", "Content-Type": "application/json" } payload = { "query": "改写后的查询语句", "source": "test", "page": "1", "limit": "10", "is_cache": "1", "expand_index": "true" } data = json.dumps(payload).encode("utf-8") request = urllib.request.Request(url, data=data, headers=headers, method="POST") response = urllib.request.urlopen(request, timeout=30) result = json.loads(response.read().decode("utf-8")) datas = result.get("datas", []) ``` ### 步骤 4: 空数据处理 如果 `datas` 为空或无数据，适当放宽或简化查询条件后重新请求（**最多尝试2次**）： - **首次重试**：去掉过于苛刻的条件，保留核心筛选条件 - **二次重试**：进一步放宽条件或使用更通用的表述 每次重试都算作一次改写，最终返回时需说明最终使用的查询问句。 ### 步骤 5: 数据解析 解析返回的 `datas` 数组，提取相关指标： ```python for item in datas: # 根据查询类型提取相应字段 ``` ### 步骤 6: 数据扩展决策 skill 需要自行决策当前数据是否足够回答用户问题： - 如果数据完整：直接返回格式化后的结果 - 如果需要更多背景信息：可以调用其他金融工具或者搜索工具获取相关资讯 ### 步骤 7: 回答用户 组织语言回答用户问题，确保： - 结果清晰易懂 - 如果改写了问句，需特别说明最终使用的查询问句 - **必须强调数据来源于同花顺问财** ### 接口地址 - `IWENCAI_API_URL` ### 认证方式 - 请求头：`Authorization: Bearer {IWENCAI_API_KEY}` - 环境变量：`IWENCAI_API_KEY` ### 请求参数 | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | query | STRING | 是 | 用户问句 | | source | STRING | 否 | 来源，默认值：test | | page | STRING | 否 | 分页参数，默认值：1 | | limit | STRING | 否 | 分页参数，默认值：10 | | is_cache | STRING | 否 | 缓存参数，默认值：1 | | expand_index | STRING | 否 | 是否展开指数，默认值：true | ### 响应参数 | 参数名 | 类型 | 说明 | |--------|------|------| | datas | ARRAY | 金融数据列表，对象数组 | **响应示例：** ```json { "datas": [ {"ETF代码": "510300.SH", "ETF简称": "华泰柏瑞沪深300ETF", "涨跌幅": 1.25}, {"ETF代码": "159919.SZ", "ETF简称": "嘉实沪深300ETF", "涨跌幅": 1.18} ] } ``` ## CLI 使用方式 ### 命令行参数 | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | `--query` | STRING | 是 | 直接传入查询字符串 | | `--page` | STRING | 否 | 分页参数，默认值：1 | | `--limit` | STRING | 否 | 每页条数，默认值：10 | | `--is-cache` | STRING | 否 | 缓存参数，默认值：1 | | `--api-key` | STRING | 否 | API密钥（默认从环境变量读取）| ### 使用示例 ```bash # 直接查询（默认分页10条） python scripts/cli.py --query "沪深300ETF有哪些？" # 指定分页参数 python scripts/cli.py --query "规模最大的ETF" --page "1" --limit "20" # 指定API密钥 python scripts/cli.py --query "创业板ETF" --api-key "your-key" ``` ## 数据来源标注 **重要提示**： - 引用同花顺数据时，必须强调**数据来源于同花顺问财** - 如果没有查询到数据，提示用户可以到**同花顺问财 web端**查询：https://www.iwencai.com/unifiedwap/chat ## 错误处理 - API调用失败：给出友好错误提示 - 无数据返回：引导用户访问同花顺问财（https://www.iwencai.com/unifiedwap/chat） - 最多重试2次逐步放宽条件 ## 代码结构 ``` hithink-etf-selector/ ├── SKILL.md # Skill 配置文件 ├── references/ │ ├── api.md # API 接口文档 │ └── requirement.md # 构建要求文档 └── scripts/ └── cli.py # CLI 入口（单一脚本，内含API调用和数据处理） ```


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (CRITICAL)