技能创建器
skill-creator
创建、改进和评估自定义技能,把专业流程转化为可重复使用的 AI 能力。
byted-bytehouse-ai-query【数据与研究】ByteHouse AI 查询技能,提供自然语言转 SQL(Text2SQL)、SQL 执行、库表结构查询、多模态向量化和向量检索等能力,覆盖 ByteHouse 云数仓的日常查询、SQL 生成与执行场景。当用户提到 "ByteHouse"、"查表"、"查数据"、"Text2SQL"、"自然语言查询"、"列出数据库"、"列出表"、"执行 SQL"、"生成 SQL"、"多模态检索" 等诉求,或者需要基于 ByteHouse 完成上述任务时,应使用本 Skill。
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
ByteHouse AI Query Skill,提供以下核心能力:
当以下情况时使用此 Skill:
Agent 在承接上述任务时,按以下流程调度本 Skill 内的脚本:
source scripts/export_config.sh,把 ~/.bytehouse_config.json 中的配置注入环境变量。
~/.bytehouse_config.json 不存在或缺失 BYTEHOUSE_HOST / BYTEHOUSE_PASSWORD,主动引导用户提供,并把用户返回的连接信息写入该 JSON 文件后再 source。scripts/list_tables.py 查询数据库/表列表,帮助用户/Agent 选定要查的表。scripts/text2sql.py,将目标表以位置参数传入。scripts/execute_sql.py。默认只允许执行 DQL,非 DQL(INSERT/UPDATE/DROP 等)需要先向用户确认再附加 --force。scripts/embedding.py + scripts/search_client.py 完成向量化与向量/混合检索。Agent 必须通过上述脚本发起查询/执行,不允许自行拼装 SQL 或直接连接 ByteHouse。
~/.bytehouse_config.json 加载配置到环境变量(依赖 jq)。配置文件位于 ~/.bytehouse_config.json。如果文件存在且非空,直接使用文件中的配置;否则,向用户询问必填连接信息(可以把这份文档发给用户以便查阅 ByteHouse 连接信息获取指引),拿到后写入 JSON 文件,避免重复询问。当用户切换 ByteHouse 集群时,一并更新该文件。
{
"BYTEHOUSE_HOST": "<ByteHouse-host>",
"BYTEHOUSE_PORT": "8123",
"BYTEHOUSE_USER": "bytehouse",
"BYTEHOUSE_PASSWORD": "<ByteHouse-password>",
"BH_ARK_API_KEY": "<火山引擎方舟 API 密钥>",
"BH_ARK_BASE_URL": "https://ark.cn-beijing.volces.com/api/v3",
"BH_EMBEDDING_MODEL": "doubao-embedding-vision-251215"
}
BYTEHOUSE_HOST(主机地址)与 BYTEHOUSE_PASSWORD(密码)必须由用户提供。BH_ARK_API_KEY 只在多模态向量化时使用,其余场景可忽略。execute_sql.py 遇到非 DQL 时默认报错并要求确认。--force 参数强制执行,例如:
python3 scripts/execute_sql.py "DROP TABLE xxx" --force
jq(export_config.sh 解析 JSON 需要,未安装时可 brew install jq 或 sudo apt install jq)requirements.txt,可通过 pip install -r requirements.txt 安装~/.bytehouse_config.json)# 从配置文件读取配置,导出到环境变量
source scripts/export_config.sh
# 列出所有数据库
python3 scripts/list_tables.py --databases
# 列出指定数据库的表
python3 scripts/list_tables.py --database tpcds
# 执行 Text2SQL
python3 scripts/text2sql.py "get count of all call centers" "tpcds.call_center"
返回:
SELECT COUNT(*) AS call_center_count FROM tpcds.call_center;
python3 scripts/execute_sql.py "SELECT * FROM tpcds.call_center LIMIT 5"
python3 scripts/execute_sql.py "SELECT count(*) FROM tpcds.store_sales" --format pretty
# 1. 生成 SQL
SQL=$(python3 scripts/text2sql.py "get count of call centers" "tpcds.call_center")
# 2. 执行 SQL
python3 scripts/execute_sql.py "$SQL"
多模态相关脚本:
scripts/embedding.py — 多模态向量化模块scripts/search_client.py — ByteHouse 向量检索客户端# 从脚本目录调用,或将 scripts/ 加入 sys.path
from search_client import ByteHouseMultimodalSearch
# 初始化客户端
search = ByteHouseMultimodalSearch(connection_type="http")
# 创建表
search.create_multimodal_table("my_index")
# 插入文档
search.insert_document(
"my_index",
doc_id=1,
content_type="text",
content="ByteHouse 多模态检索",
title="介绍",
)
# 向量检索(返回结果中已过滤掉 0 维向量)
query_embedding = search.embedding.encode_text("云原生数据仓库")
results = search.vector_search("my_index", query_embedding=query_embedding, top_k=10)
参考文档:
import subprocess
import json
def ai_query(natural_language: str, tables: list, config: dict = None) -> str:
"""调用 Text2SQL 并执行查询"""
cmd = ["python3", "scripts/text2sql.py", natural_language] + tables
if config:
cmd.extend(["--config", json.dumps(config)])
sql_result = subprocess.run(cmd, capture_output=True, text=True)
sql = sql_result.stdout.strip()
if not sql:
return f"Text2SQL failed: {sql_result.stderr}"
result = subprocess.run(
["python3", "scripts/execute_sql.py", sql],
capture_output=True,
text=True,
)
return result.stdout
if __name__ == "__main__":
print(ai_query("get count of call centers", ["tpcds.call_center"]))
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| systemHints | string | 否 | 系统提示词,默认为 "TEXT2SQL" |
| input | string | 是 | 自然语言查询 |
| knowledgeBaseIDsString | string[] | 否 | 知识库 ID 列表,默认 ["*"] |
| tables | string[] | 是 | 要查询的表名列表 |
| config | object | 否 | 自定义配置 |
| config.reasoningModel | string | 否 | 自定义模型 ID |
| config.reasoningAPIKey | string | 否 | 自定义 API Key |
| config.url | string | 否 | 自定义 API URL |