Skip to the content.

Build rag over sql

how to build rag with sql

实现有以下关键的 3 步:

flowchart TB
    s1["1. Convert question to DSL Query: 模型转换用户的输入为 sql"]
    s2["2. Execute SQL: 执行 sql 语句"]
    s3["3. Answer the question: 模型使用 sql 结果来回答用户的输入"]
    s1 --> s2 --> s3
flowchart LR
    s1["Question"]
    subgraph s2["Optional: SQL Agent"]
        direction LR
        b1(["LLM"])
        b2["Query: select * from a"]
        b3[("DB")]
        b4(["LLM"])

        b1 --> b2 --> b3 --> b4
    end
    s3["Answer"]
    
    s1 -.-> s2 -.-> s3

那么问题的关键在于如何实现上面的 3 个步骤

use llm

  1. langchain 使用 create_sql_query_chain 来实现 query -> sql 的转换
  2. langchain 使用 QuerySQLDatabaseTool 来实现 sql 执行
  3. 将用户的问题和 sql 执行结果传给 llm 来生成对用户的响应

use agent

  1. 可以使用 SQLDatabaseToolkit 来实现 rag over sql 的功能