Enhance dialog context handling for Text2SQL queries by integrating session history. Introduce new methods for summarizing previous assistant messages and determining if the last interaction was a data query. Update environment configuration for embedding options and improve error handling in SQL generation. Add user-facing delivery messages for successful SQL execution. This update supports more coherent follow-up questions and improves user experience in conversational interactions.

This commit is contained in:
陈辅元
2026-04-14 18:02:12 +08:00
parent 026d3bf88c
commit ca8bc5e7de
87 changed files with 5808 additions and 6351 deletions
+27 -20
View File
@@ -6,7 +6,7 @@
## 🚀 核心特性
- **🤖 多Agent协作流水线**:Schema Linker → SQL Generator → Validator 三阶段协作
- **🎯 高精度表检索**:向量检索(Qwen3-Embedding)+ LLM精筛,从 250+ 张表中精准定位相关表
- **🎯 高精度表检索**:向量检索(OpenAI 兼容 / ModelScope 等远程 Embedding,或可选本地模型)+ LLM精筛,从 250+ 张表中精准定位相关表
- **💡 经验数据集 Few-Shot**:基于 50 条高质量样例的语义检索,动态注入相似示例提升准确率
- **🔒 双重验证机制**:程序语法验证 + LLM语义验证,确保 SQL 正确性
- **🏦 金融领域深度优化**:针对证券经纪业务(账户、持仓、现金、结算)定制 Prompt 和推断规则
@@ -24,7 +24,7 @@
┌─────────────────────────────────────────────────────────────────┐
│ 阶段1: Schema Linker Agent │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ 1.1 向量检索粗筛(ChromaDB + Qwen3-Embedding) │ │
│ │ 1.1 向量检索粗筛(ChromaDB + Embedding 向量) │ │
│ │ - 检索 Top 20 候选表(相似度阈值 0.1) │ │
│ │ └─ 支持对手方/经纪商问题特殊处理(强制纳入 Broker 表) │ │
│ │ │ │
@@ -85,7 +85,7 @@
|------|---------|-----------|
| Agent 框架 | **CAMEL AI** | >= 0.2.0,角色扮演、消息通信 |
| LLM 模型 | **DeepSeek-chat** | 国产大模型,代码生成能力强 |
| Embedding | **Qwen3-Embedding-0.6B** | 阿里云 6 亿参数,本地免费部署 |
| Embedding | **远程 API(默认)** | OpenAI 兼容 / ModelScope 等;可选本地 HF 目录 |
| 向量数据库 | **ChromaDB** | 本地轻量,持久化 Schema 索引 |
| SQL 解析 | **sqlglot** | >= 20.0.0,多方言 AST 转换与验证 |
| 配置管理 | **Pydantic Settings** | 类型安全的环境变量管理 |
@@ -115,7 +115,7 @@ text2sql_agent_camel/
│ ├── llm/
│ │ └── deepseek_client.py # DeepSeek API 客户端(chat / validate_sql / select_tables)
│ └── utils/
│ ├── embedding.py # Qwen3-Embedding 封装(本地 / 远程 API)
│ ├── embedding.py # Embedding(远程 OpenAI 兼容 / 可选本地 HF)
│ ├── sql_parser.py # sqlglot 工具(语法验证、方言转换、规范化)
│ ├── validators.py # 验证逻辑(危险操作检测、完整验证流水线)
│ └── fewshot_selector.py # Few-Shot 示例选择器(语义/关键词检索)
@@ -186,15 +186,19 @@ cp .env .env.local # 或直接编辑 .env
DEEPSEEK_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxx
DEEPSEEK_BASE_URL=https://api.deepseek.com
# 可选:使用本地 Embedding(无需网络,但需下载模型)
USE_LOCAL_EMBEDDING=true
EMBEDDING_MODEL_PATH=./data/models/Qwen3-Embedding-0.6B
# 或使用远程 Embedding API(无需本地模型)
# 推荐:远程 Embedding(OpenAI 兼容网关或 ModelScope 等,无需本地模型目录)
USE_LOCAL_EMBEDDING=false
MODELSCOPE_API_KEY=ms-xxxxxxxx
MODELSCOPE_BASE_URL=https://api-inference.modelscope.cn/v1
MODELSCOPE_EMBEDDING_MODEL=Qwen/Qwen3-Embedding-8B
OPENAI_BASE_URL=https://api.openai.com/v1
OPENAI_API_KEY=sk-xxxxxxxx
OPENAI_EMBEDDING_MODEL=text-embedding-3-small
# 或使用 ModelScope
# MODELSCOPE_API_KEY=ms-xxxxxxxx
# MODELSCOPE_EMBEDDING_MODEL=Qwen/Qwen3-Embedding-8B
# 可选:本地 HuggingFace 模型目录(需 USE_LOCAL_EMBEDDING=true + EMBEDDING_MODEL_PATH)
# USE_LOCAL_EMBEDDING=true
# EMBEDDING_MODEL_PATH=/path/to/local/embedding-model
```
### 3. 准备 Schema 文件
@@ -350,15 +354,18 @@ MAX_RETRY=1 # 重试次数(1=仅首次,2=允许一次修正)
FEWSHOT_ENABLED=true # 是否启用 Few-Shot
FEWSHOT_TOP_K=3 # 每次注入的示例数量
FEWSHOT_MIN_RATING=7 # 示例最低评分(1-10)
# 推荐:Few-shot 走 Chroma(运行时可不配 FEWSHOT_DATA_PATH;灌库见 scripts/build_fewshot_chroma_index.py)
FEWSHOT_USE_CHROMA=true
FEWSHOT_CHROMA_PATH=./data/embeddings/chroma_fewshot
# FEWSHOT_DATA_PATH=./data/experiences/all_samples.jsonl # 仅构建索引时需要
# ========== Embedding ==========
USE_LOCAL_EMBEDDING=false # true=本地模型,false=远程API
# 本地模型路径
EMBEDDING_MODEL_PATH=./data/models/Qwen3-Embedding-0.6B
# 远程 API(ModelScope)
MODELSCOPE_API_KEY=ms-xxxx
MODELSCOPE_BASE_URL=https://api-inference.modelscope.cn/v1
MODELSCOPE_EMBEDDING_MODEL=Qwen/Qwen3-Embedding-8B
USE_LOCAL_EMBEDDING=false # false=远程(默认);true 时需配置 EMBEDDING_MODEL_PATH
# OPENAI_* 或 MODELSCOPE_* / DASHSCOPE_*(与代码内优先级一致)
OPENAI_BASE_URL=https://api.openai.com/v1
OPENAI_API_KEY=sk-xxxx
OPENAI_EMBEDDING_MODEL=text-embedding-3-small
# EMBEDDING_MODEL_PATH= # 仅 USE_LOCAL_EMBEDDING=true 时填写本地目录
# ========== Schema ==========
SCHEMA_DIR=./data/schemas
@@ -710,7 +717,7 @@ LLM 更擅长模仿示例而非理解抽象规则。提供 5-7 个高质量示
- 🎉 初始发布
- 三 Agent 流水线(Schema Linker / SQL Generator / Validator)
- 向量检索 + LLM 精筛表选择
- ChromaDB + Qwen3-Embedding 本地索引
- ChromaDB + Embedding 向量索引(默认远程 API 编码)
- T-SQL / MySQL / PostgreSQL 多方言支持
- 双重验证机制(程序 + LLM)
- 自修正重试(最多 2 次)