跳到主要内容
这将帮助您开始使用 SqlToolkit。有关所有 SqlToolkit 功能和配置的详细文档,请参阅 API 参考。您还可以在 此处 找到 Python 对应版本的文档。 此工具包包含以下工具:
名称描述
query-sql此工具的输入是详细且正确的 SQL 查询,输出是数据库的结果。如果查询不正确,将返回错误消息。如果返回错误,请重写查询,检查查询,然后重试。
info-sql此工具的输入是以逗号分隔的表列表,输出是这些表的模式和示例行。务必先调用 list-tables-sql 来确认表确实存在!示例输入:“table1, table2, table3”。
list-tables-sql输入为空字符串,输出是数据库中以逗号分隔的表列表。
query-checker在执行查询之前,使用此工具仔细检查您的查询是否正确。在使用 query-sql 执行查询之前,务必使用此工具!
此工具包对于在 SQL 数据库上提问、执行查询、验证查询等非常有用。

设置

此示例使用 Chinook 数据库,这是一个适用于 SQL Server、Oracle、MySQL 等的示例数据库。要进行设置,请按照 这些说明 操作,将 .db 文件放置在您的代码所在的目录中。 如果您想从单个工具运行中获取自动化跟踪,您还可以通过取消注释下方来设置您的 LangSmith API 密钥:
process.env.LANGSMITH_TRACING="true"
process.env.LANGSMITH_API_KEY="your-api-key"

安装

此工具包位于 langchain 包中。您还需要安装 typeorm 对等依赖项。
npm install langchain @langchain/core typeorm

实例化

首先,我们需要定义将在工具包中使用的 LLM。
// @lc-docs-hide-cell

import { ChatOpenAI } from "@langchain/openai";

const llm = new ChatOpenAI({
  model: "gpt-4o-mini",
  temperature: 0,
})
import { SqlToolkit } from "@langchain/classic/agents/toolkits/sql"
import { DataSource } from "typeorm";
import { SqlDatabase } from "@langchain/classic/sql_db";

const datasource = new DataSource({
  type: "sqlite",
  database: "../../../../../../Chinook.db", // Replace with the link to your database
});
const db = await SqlDatabase.fromDataSourceParams({
  appDataSource: datasource,
});

const toolkit = new SqlToolkit(db, llm);

工具

查看可用工具
const tools = toolkit.getTools();

console.log(tools.map((tool) => ({
  name: tool.name,
  description: tool.description,
})))
[
  {
    name: 'query-sql',
    description: 'Input to this tool is a detailed and correct SQL query, output is a result from the database.\n' +
      '  If the query is not correct, an error message will be returned.\n' +
      '  If an error is returned, rewrite the query, check the query, and try again.'
  },
  {
    name: 'info-sql',
    description: 'Input to this tool is a comma-separated list of tables, output is the schema and sample rows for those tables.\n' +
      '    Be sure that the tables actually exist by calling list-tables-sql first!\n' +
      '\n' +
      '    Example Input: "table1, table2, table3.'
  },
  {
    name: 'list-tables-sql',
    description: 'Input is an empty string, output is a comma-separated list of tables in the database.'
  },
  {
    name: 'query-checker',
    description: 'Use this tool to double check if your query is correct before executing it.\n' +
      '    Always use this tool before executing a query with query-sql!'
  }
]

在代理中使用

首先,请确保您已安装 LangGraph
npm install @langchain/langgraph
import { createAgent } from "@langchain/classic"

const agentExecutor = createAgent({ llm, tools });
const exampleQuery = "Can you list 10 artists from my database?"

const events = await agentExecutor.stream(
  { messages: [["user", exampleQuery]]},
  { streamMode: "values", }
)

for await (const event of events) {
  const lastMsg = event.messages[event.messages.length - 1];
  if (lastMsg.tool_calls?.length) {
    console.dir(lastMsg.tool_calls, { depth: null });
  } else if (lastMsg.content) {
    console.log(lastMsg.content);
  }
}
[
  {
    name: 'list-tables-sql',
    args: {},
    type: 'tool_call',
    id: 'call_LqsRA86SsKmzhRfSRekIQtff'
  }
]
Album, Artist, Customer, Employee, Genre, Invoice, InvoiceLine, MediaType, Playlist, PlaylistTrack, Track
[
  {
    name: 'query-checker',
    args: { input: 'SELECT * FROM Artist LIMIT 10;' },
    type: 'tool_call',
    id: 'call_MKBCjt4gKhl5UpnjsMHmDrBH'
  }
]
The SQL query you provided is:

\`\`\`sql
SELECT * FROM Artist LIMIT 10;
\`\`\`

This query is straightforward and does not contain any of the common mistakes listed. It simply selects all columns from the `Artist` table and limits the result to 10 rows.

Therefore, there are no mistakes to correct, and the original query can be reproduced as is:

\`\`\`sql
SELECT * FROM Artist LIMIT 10;
\`\`\`
[
  {
    name: 'query-sql',
    args: { input: 'SELECT * FROM Artist LIMIT 10;' },
    type: 'tool_call',
    id: 'call_a8MPiqXPMaN6yjN9i7rJctJo'
  }
]
[{"ArtistId":1,"Name":"AC/DC"},{"ArtistId":2,"Name":"Accept"},{"ArtistId":3,"Name":"Aerosmith"},{"ArtistId":4,"Name":"Alanis Morissette"},{"ArtistId":5,"Name":"Alice In Chains"},{"ArtistId":6,"Name":"Antônio Carlos Jobim"},{"ArtistId":7,"Name":"Apocalyptica"},{"ArtistId":8,"Name":"Audioslave"},{"ArtistId":9,"Name":"BackBeat"},{"ArtistId":10,"Name":"Billy Cobham"}]
Here are 10 artists from your database:

1. AC/DC
2. Accept
3. Aerosmith
4. Alanis Morissette
5. Alice In Chains
6. Antônio Carlos Jobim
7. Apocalyptica
8. Audioslave
9. BackBeat
10. Billy Cobham

API 参考

有关所有 SqlToolkit 功能和配置的详细文档,请参阅 API 参考
以编程方式连接这些文档到 Claude、VSCode 等,通过 MCP 获取实时答案。
© . This site is unofficial and not affiliated with LangChain, Inc.