本技能提供ETF智能筛选能力,通过自然语言查询支持:
接收用户的自然语言ETF筛选请求,分析用户意图。
将用户问句适当改写为标准的金融查询问句,保持原意不变:
改写规则:
思维链拆解(如果需要): 根据用户需求自行决定是否拆解思维链:
调用金融查询接口获取数据,支持分页参数:
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", [])
如果 datas 为空或无数据,适当放宽或简化查询条件后重新请求( 最多尝试2次):
每次重试都算作一次改写,最终返回时需说明最终使用的查询问句。
解析返回的 datas 数组,提取相关指标:
python
for item in datas:
# 根据查询类型提取相应字段
skill 需要自行决策当前数据是否足够回答用户问题:
组织语言回答用户问题,确保:
IWENCAI_API_URLAuthorization: Bearer {IWENCAI_API_KEY}IWENCAI_API_KEY参数名类型必填说明querySTRING是用户问句sourceSTRING否来源,默认值:testpageSTRING否分页参数,默认值:1limitSTRING否分页参数,默认值:10is_cacheSTRING否缓存参数,默认值:1expand_indexSTRING否是否展开指数,默认值:true
参数名类型说明datasARRAY金融数据列表,对象数组
响应示例:
json
{
"datas": [
{"ETF代码": "510300.SH", "ETF简称": "华泰柏瑞沪深300ETF", "涨跌幅": 1.25},
{"ETF代码": "159919.SZ", "ETF简称": "嘉实沪深300ETF", "涨跌幅": 1.18}
]
}
参数类型必填说明--querySTRING是直接传入查询字符串--pageSTRING否分页参数,默认值:1--limitSTRING否每页条数,默认值:10--is-cacheSTRING否缓存参数,默认值:1--api-keySTRING否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"
重要提示:
text
hithink-etf-selector/
├── SKILL.md # Skill 配置文件
├── references/
│ ├── api.md # API 接口文档
│ └── requirement.md # 构建要求文档
└── scripts/
└── cli.py # CLI 入口(单一脚本,内含API调用和数据处理)