Text-to-SQL 评测 Quickstart
text2sql 模板通过比较 SQL 执行结果来评测 text-to-SQL 系统。
创建项目
ragas quickstart text2sql
cd text2sql
安装依赖
uv sync
设置 API Key
export OPENAI_API_KEY="your-openai-key"
运行评测
uv run python evals.py
项目结构
text2sql/
├── README.md # Project documentation
├── pyproject.toml # Project configuration
├── text2sql_agent.py # Text-to-SQL agent
├── db_utils.py # Database utilities
├── evals.py # Evaluation workflow
├── prompt.txt # Base prompt template
├── prompt_v2.txt # Improved prompt v2
├── prompt_v3.txt # Improved prompt v3
├── __init__.py # Python package marker
└── evals/
├── datasets/
│ └── booksql_sample.csv # Sample book database queries
├── experiments/ # Evaluation results
└── logs/ # Execution logs
评测内容
该模板评测 text-to-SQL 生成:
- Agent:将自然语言转换为 SQL 查询
- 数据库:包含作者、书名、类型的示例图书数据库
- 测试用例:自然语言问题 → 期望的 SQL 查询
- 指标:通过 datacompy 比较查询结果得到的执行准确率
理解代码
Agent(text2sql_agent.py)
将自然语言转换为 SQL:
from text2sql_agent import Text2SQLAgent
agent = Text2SQLAgent(client=openai_client)
sql = await agent.generate_sql("Find all books by Jane Austen")
评测(evals.py)
比较执行结果:
@discrete_metric(name="execution_accuracy", allowed_values=["correct", "incorrect"])
def execution_accuracy(expected_sql: str, predicted_success: bool, predicted_result):
# Executes both SQLs and compares results using datacompy
# Returns "correct" if results match, "incorrect" otherwise
测试数据
模板包含 evals/datasets/booksql_sample.csv,其中有针对图书数据库的示例问题与期望 SQL 查询。
定制
使用你自己的数据库
更新 db_utils.py 以连接你的数据库:
def get_db_connection():
return sqlite3.connect("your_database.db")
尝试不同 Prompt
模板在 prompt.txt、prompt_v2.txt 和 prompt_v3.txt 中包含三个 prompt 版本。分别测试以查看哪个效果最好。