Skip to main content

SqlToolkit

这将帮助你快速入门 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 这个对等依赖。

:::提示 请参阅安装集成包的一般说明部分。 :::

yarn add langchain @langchain/core typeorm

实例化

首先,我们需要定义在工具包中要使用的 LLM。

Pick your chat model:

Install dependencies

yarn add @langchain/groq 

Add environment variables

GROQ_API_KEY=your-api-key

Instantiate the model

import { ChatGroq } from "@langchain/groq";

const llm = new ChatGroq({
model: "llama-3.3-70b-versatile",
temperature: 0
});
import { SqlToolkit } from "langchain/agents/toolkits/sql";
import { DataSource } from "typeorm";
import { SqlDatabase } from "langchain/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:

yarn add @langchain/langgraph
import { createReactAgent } from "@langchain/langgraph/prebuilt";

const agentExecutor = createReactAgent({ 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 参考文档


Was this page helpful?


You can also leave detailed feedback on GitHub.