基于 CrewAI 框架构建的自然语言转 SQL 查询系统,专门针对 ClickHouse 数据库优化,支持复杂业务场景的智能查询生成。
- 多智能体协作:采用 CrewAI 框架,通过多个专业智能体协同工作
- ClickHouse 优化:专门针对 ClickHouse 数据库进行优化,支持复杂查询
- 丰富知识库:内置完整的数据库 Schema 和业务规则知识库
- 智能记忆:使用 BGE-M3 嵌入模型实现智能记忆功能
- 多种运行模式:支持交互式、批量处理等多种使用方式
-
SQL 分析师 (sql_analyst)
- 负责理解和分析自然语言查询
- 提取查询意图和业务需求
- 识别相关的数据实体和关系
-
ClickHouse 专家 (clickhouse_expert)
- 生成优化的 ClickHouse SQL 查询
- 具备完整的数据库 Schema 知识
- 支持跨数据库查询和复杂业务逻辑
-
质量检查员 (quality_checker)
- 验证 SQL 查询的正确性和性能
- 确保查询符合最佳实践
- 提供优化建议
-
结果解释器 (result_interpreter)
- 执行 SQL 查询并获取结果
- 解释查询结果的业务含义
- 提供数据洞察和建议
- ClickHouseTool: ClickHouse 数据库连接和查询执行工具
- KnowledgeTool: 知识库读取工具,支持 Schema 查询和业务规则检索
- 项目的知识库文件,位于
knowledge/目录: - 支持.md、.txt、.sql等文本
- 期望包含数据库Schema、业务规则、查询示例等
- Python 3.13
- ClickHouse 数据库访问权限
# 使用 uv 安装(推荐)
uv sync
# 或使用 pip 安装
pip install -e .创建 .env 文件并配置以下环境变量:
# ModelScope API 配置
MODELSCOPE_MODEL=openai/Qwen/Qwen3-Coder-480B-A35B-Instruct
MODELSCOPE_BASE_URL=https://api-inference.modelscope.cn/v1
MODELSCOPE_API_KEY=your_api_key_here
# 数据库环境
ENVIRONMENT=clickhouse在 src/text2sql/config/database.yaml 中配置 ClickHouse 连接信息:
clickhouse:
host: your_clickhouse_host
port: 9000
username: your_username
password: your_password
database: your_databasepython src/text2sql/main.py --interactive进入交互式模式,可以持续输入查询并获得结果。
python src/text2sql/main.py "显示最近30天订单金额前10的用户"直接执行单个查询。
python src/text2sql/main.py --examples查看预设的查询示例。
python src/text2sql/main.py --quick-test使用示例查询进行快速测试。
text2sql/
├── src/text2sql/
│ ├── main.py # 主程序入口
│ ├── crew.py # CrewAI 智能体团队配置
│ ├── config/ # 配置文件
│ │ ├── agents.yaml # 智能体配置
│ │ ├── tasks.yaml # 任务配置
│ │ └── database.yaml # 数据库配置
│ ├── tools/ # 工具模块
│ │ ├── clickhouse_tool.py # ClickHouse 工具
│ │ └── knowledge_tool.py # 知识库工具
│ └── memory/ # 记忆配置
├── knowledge/ # 知识库文件
├── logs/ # 日志文件
├── data/ # 数据文件
└── docs/ # 文档
系统支持各种复杂的业务查询,例如:
- "显示最近30天订单金额前10的用户"
- "统计本月各个订单状态的数量分布"
- "查询逾期超过30天的订单信息"
- "分析最近一周的审批通过率趋势"
- "显示风险等级为高的客户列表"
- 自动添加 LIMIT 子句避免大结果集
- 智能选择索引和分区键
- 支持查询缓存和结果复用
- 内置查询性能监控
- 所有执行日志都会记录到日志文件
logs/text2sql_crew_log_{timestamp}.log.txt - 所有agent的查询数据都会记录到
data/query_result_{timestamp}.excel - 支持详细的执行过程跟踪
- 目前只支持clickhouse数据库,但是可以自行对
tools/clickhouse_tool.py进行扩展或者替代 - agents和tasks的prompt可以在
config/agents.yaml和config/tasks.yaml中进行配置,prompt对最终效果有非常大的影响,建议多进行调试 - 知识库文件可以在
knowledge/目录中添加,支持.md、.txt、.sql等文本文件,也可以在prompt中进行强调,比如- 可以在prompt中添加
知识库文件:knowledge/,这样agent就会自动读取knowledge/目录下的所有文件 - 可以在prompt中添加
知识库文件:knowledge/aaa.md,这样agent就会自动读取knowledge/aaa.md文件
- 可以在prompt中添加
- Fork 项目
- 创建特性分支
- 提交更改
- 推送到分支
- 创建 Pull Request
如有问题或建议,请创建 Issue 或联系项目维护者。