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.LANGCHAIN_TRACING_V2 = "true";
process.env.LANGCHAIN_API_KEY = "your-api-key";
安装
此工具包位于 langchain
包中。您还需要安装 typeorm
对等依赖项。
提示
有关安装集成包的常规说明,请参阅 本部分。
- npm
- yarn
- pnpm
npm i langchain @langchain/core typeorm
yarn add langchain @langchain/core typeorm
pnpm add langchain @langchain/core typeorm
实例化
首先,我们需要定义要在工具包中使用的 LLM。
选择您的聊天模型
- OpenAI
- Anthropic
- FireworksAI
- MistralAI
- Groq
- VertexAI
安装依赖项
提示
- npm
- yarn
- pnpm
npm i @langchain/openai
yarn add @langchain/openai
pnpm add @langchain/openai
添加环境变量
OPENAI_API_KEY=your-api-key
实例化模型
import { ChatOpenAI } from "@langchain/openai";
const llm = new ChatOpenAI({
model: "gpt-4o-mini",
temperature: 0
});
安装依赖项
提示
- npm
- yarn
- pnpm
npm i @langchain/anthropic
yarn add @langchain/anthropic
pnpm add @langchain/anthropic
添加环境变量
ANTHROPIC_API_KEY=your-api-key
实例化模型
import { ChatAnthropic } from "@langchain/anthropic";
const llm = new ChatAnthropic({
model: "claude-3-5-sonnet-20240620",
temperature: 0
});
安装依赖项
提示
- npm
- yarn
- pnpm
npm i @langchain/community
yarn add @langchain/community
pnpm add @langchain/community
添加环境变量
FIREWORKS_API_KEY=your-api-key
实例化模型
import { ChatFireworks } from "@langchain/community/chat_models/fireworks";
const llm = new ChatFireworks({
model: "accounts/fireworks/models/llama-v3p1-70b-instruct",
temperature: 0
});
安装依赖项
提示
- npm
- yarn
- pnpm
npm i @langchain/mistralai
yarn add @langchain/mistralai
pnpm add @langchain/mistralai
添加环境变量
MISTRAL_API_KEY=your-api-key
实例化模型
import { ChatMistralAI } from "@langchain/mistralai";
const llm = new ChatMistralAI({
model: "mistral-large-latest",
temperature: 0
});
安装依赖项
提示
- npm
- yarn
- pnpm
npm i @langchain/groq
yarn add @langchain/groq
pnpm add @langchain/groq
添加环境变量
GROQ_API_KEY=your-api-key
实例化模型
import { ChatGroq } from "@langchain/groq";
const llm = new ChatGroq({
model: "mixtral-8x7b-32768",
temperature: 0
});
安装依赖项
提示
- npm
- yarn
- pnpm
npm i @langchain/google-vertexai
yarn add @langchain/google-vertexai
pnpm add @langchain/google-vertexai
添加环境变量
GOOGLE_APPLICATION_CREDENTIALS=credentials.json
实例化模型
import { ChatVertexAI } from "@langchain/google-vertexai";
const llm = new ChatVertexAI({
model: "gemini-1.5-flash",
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
- npm
- yarn
- pnpm
npm i @langchain/langgraph
yarn add @langchain/langgraph
pnpm 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 参考。