Ragas Ragas
stable · 中文译文
中文译文 · 原文:https://docs.ragas.io/en/stable/howtos/cli/text2sql/ · 许可证 Apache-2.0

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 版本。分别测试以查看哪个效果最好。

下一步