This skill should be used when the user provides a Tushare API document URL and asks to generate a full plugin in this codebase, including extractor, schema, config, query service, and agent/MCP/http...
将 Tushare 文档 URL 转换为本仓库的生产级插件,包含数据抽取、ClickHouse 表结构、查询服务,以及可测试的 curl 示例。
tushare_* 插件保持一致。pct_change vs pct_chg)及所需转换。references/plugin_conventions.md)src/stock_datasource/plugins/<plugin_name>/__init__.py、plugin.py、extractor.py、service.py、schema.json、config.json、<plugin_name>.mdtushare_* 插件为模板。tushare SDK,API 调用需用 proxy_context() 包裹。trade_date 或 start_date/end_date。extract_data、validate_data、transform_data、load_data。version 和 _ingested_at 列。trade_date 转为 Date。必须实现以下方法指定插件的分类和角色:
from stock_datasource.core.base_plugin import PluginCategory, PluginRole
def get_category(self) -> PluginCategory:
"""插件分类 - 按市场划分"""
return PluginCategory.CN_STOCK # 或 HK_STOCK, INDEX, ETF_FUND, SYSTEM
def get_role(self) -> PluginRole:
"""插件角色"""
return PluginRole.PRIMARY # 或 BASIC, DERIVED, AUXILIARY
分类说明:
CN_STOCK: A股相关数据HK_STOCK: 港股相关数据INDEX: 指数相关数据ETF_FUND: ETF/基金相关数据SYSTEM: 系统数据(如交易日历)角色说明:
PRIMARY: 主数据(如 daily 行情)BASIC: 基础数据(如 stock_basic)DERIVED: 衍生数据(如复权因子)AUXILIARY: 辅助数据(如指数权重)在 plugin.py 中实现依赖方法(不是在 config.json 中配置):
def get_dependencies(self) -> List[str]:
"""必须依赖 - 这些插件的数据必须存在才能运行当前插件。
例如:tushare_daily 依赖 tushare_stock_basic 提供股票代码列表。
"""
return ["tushare_stock_basic"]
def get_optional_dependencies(self) -> List[str]:
"""可选依赖 - 同步主插件时默认会同步这些依赖,用户可选择禁用。
例如:tushare_daily 可选同步 tushare_adj_factor 复权因子。
"""
return ["tushare_adj_factor"]
依赖规则:
schema.json:使用 ReplacingMergeTree,partition_by 为 toYYYYMM(trade_date),order_by 为主键。config.json:包含完整的插件配置。{
"enabled": true,
"rate_limit": 120,
"timeout": 30,
"retry_attempts": 3,
"description": "插件描述",
"schedule": {
"frequency": "daily",
"time": "18:00",
"day_of_week": "monday"
},
"parameters": {
"max_empty_days": 5,
"validate_prices": true
},
"parameters_schema": {
"trade_date": {
"type": "string",
"format": "date",
"required": true,
"description": "Trade date in YYYYMMDD format"
}
}
}
字段说明:
| 字段 | 必需 | 说明 |
|---|---|---|
enabled |
是 | 是否启用插件 |
rate_limit |
是 | API 调用频率限制(次/分钟) |
timeout |
是 | 请求超时时间(秒) |
retry_attempts |
是 | 重试次数 |
description |
是 | 插件描述 |
schedule |
否 | 调度配置 |
schedule.frequency |
否 | 调度频率:daily 或 weekly,默认 daily |
schedule.time |
否 | 执行时间,格式 HH:MM,默认 18:00 |
schedule.day_of_week |
否 | 仅 weekly 时有效,如 monday |
parameters |
否 | 插件特定参数 |
parameters_schema |
是 | 参数 schema,用于验证和前端展示 |
注意:依赖配置(dependencies、optional_dependencies)不在 config.json 中定义,而是通过 plugin.py 中的 get_dependencies() 和 get_optional_dependencies() 方法实现。
schema.json 生成 CREATE TABLE SQL。# 仅生成 SQL
python .codebuddy/skills/tushare-plugin-builder/scripts/generate_create_table_sql.py \
src/stock_datasource/plugins/<plugin_name>/schema.json
# 生成并执行
python .codebuddy/skills/tushare-plugin-builder/scripts/generate_create_table_sql.py \
src/stock_datasource/plugins/<plugin_name>/schema.json --execute
# 测试连接
python .codebuddy/skills/tushare-plugin-builder/scripts/verify_clickhouse_connection.py
# 列出所有表
python .codebuddy/skills/tushare-plugin-builder/scripts/verify_clickhouse_connection.py --list
# 验证指定表是否存在
python .codebuddy/skills/tushare-plugin-builder/scripts/verify_clickhouse_connection.py --table <table_name>
runtime_config.json 中代理设置正确。# 运行插件并验证
python .codebuddy/skills/tushare-plugin-builder/scripts/run_plugin_test.py \
<plugin_name> --date 20250110 --verify
python -m stock_datasource.plugins.<plugin_name>.plugin --date 20250110
# 使用脚本验证
python .codebuddy/skills/tushare-plugin-builder/scripts/verify_clickhouse_connection.py \
--table <table_name> --date 20250110
SELECT count(*), min(trade_date), max(trade_date)
FROM <table_name>
WHERE trade_date = '2025-01-10';
python -m stock_datasource.services.http_server# 列出所有 API 路由
python .codebuddy/skills/tushare-plugin-builder/scripts/verify_service_http.py --list
# 测试指定服务方法
python .codebuddy/skills/tushare-plugin-builder/scripts/verify_service_http.py \
--service <service_name> \
--method get_by_date_range \
--params '{"ts_code":"XXX","start_date":"20250101","end_date":"20250110"}'
# 仅生成 curl 命令
python .codebuddy/skills/tushare-plugin-builder/scripts/verify_service_http.py \
--service <service_name> --method get_latest --params '{}' --curl
python -m stock_datasource.services.mcp_server# 列出所有 MCP 工具
python .codebuddy/skills/tushare-plugin-builder/scripts/verify_mcp_tool.py --list
# 搜索相关工具
python .codebuddy/skills/tushare-plugin-builder/scripts/verify_mcp_tool.py --pattern <service_name>
# 验证指定工具
python .codebuddy/skills/tushare-plugin-builder/scripts/verify_mcp_tool.py --tool <tool_name>
本 skill 提供以下验证脚本(位于 scripts/ 目录):
| 脚本 | 用途 |
|---|---|
validate_plugin.py |
综合验证插件是否符合规范 |
verify_clickhouse_connection.py |
测试数据库连接、列出表、验证数据 |
generate_create_table_sql.py |
根据 schema.json 生成建表 SQL |
run_plugin_test.py |
运行插件 ETL 并验证入库 |
verify_service_http.py |
测试 HTTP 服务端点 |
verify_mcp_tool.py |
验证 MCP 工具注册状态 |
当用户要求验证已有插件(无论是自己编写还是生成的),执行以下步骤:
# 验证单个插件
python .codebuddy/skills/tushare-plugin-builder/scripts/validate_plugin.py <plugin_name>
# 显示所有检查详情
python .codebuddy/skills/tushare-plugin-builder/scripts/validate_plugin.py <plugin_name> --verbose
# 列出所有可用插件
python .codebuddy/skills/tushare-plugin-builder/scripts/validate_plugin.py --list
# 验证所有插件
python .codebuddy/skills/tushare-plugin-builder/scripts/validate_plugin.py --all
validate_plugin.py 会自动检查以下内容:
文件结构检查:
__init__.py 存在且导出 Plugin/Service 类plugin.py 存在且继承 BasePluginextractor.py 存在且使用 proxy_contextservice.py 存在且继承 BaseServiceschema.json 存在且包含必需字段config.json 存在且包含必需配置代码规范检查:
Schema 规范检查:
运行时检查:
根据验证结果采取行动:
✅ 通过:插件符合规范,可进行下一步测试。
⚠️ 警告:插件可运行但存在潜在问题,建议修复:
%(param)s❌ 失败:插件存在严重问题,必须修复:
通过基础检查后,执行完整测试流程:
# 1. 验证数据库连接
python .codebuddy/skills/tushare-plugin-builder/scripts/verify_clickhouse_connection.py
# 2. 建表(如果表不存在)
python .codebuddy/skills/tushare-plugin-builder/scripts/generate_create_table_sql.py \
src/stock_datasource/plugins/<plugin_name>/schema.json --execute
# 3. 运行 ETL 并验证入库
python .codebuddy/skills/tushare-plugin-builder/scripts/run_plugin_test.py \
<plugin_name> --date 20250110 --verify
# 4. 测试 HTTP 服务
python .codebuddy/skills/tushare-plugin-builder/scripts/verify_service_http.py \
--service <service_name> --method get_latest --params '{}'
# 5. 测试 MCP 工具
python .codebuddy/skills/tushare-plugin-builder/scripts/verify_mcp_tool.py \
--pattern <service_name>
proxy_context() 和 tushare SDK。get_category() 和 get_role() 方法。get_dependencies() 和 get_optional_dependencies() 方法。