#LangChain提供的一个格式化SQL提示词模板例子
根据提供的图片内容,我们可以看到 LangChain 提供的格式化 SQL 提示词模板的具体要求和格式。以下是基于图片内容的详细说明及总结。
一、LangChain SQL 提示词模板要求
1. 角色定位
- 你是一个 PostgreSQL 专家:明确指示模型扮演的角色,专注于 PostgreSQL 查询的生成。
2. 结果数量限制
- 使用 LIMIT 子句:除非用户指定返回结果数量,否则默认使用
LIMIT
子句限制结果,最多返回top_k
条记录。 - 可以对结果进行排序:以返回数据库中最有信息价值的数据。
3. 列选择
- 不要查询所有列:仅查询回答问题所需的列,并用双引号(")将每个列名包裹起来,表示它们是界定的标识符。
4. 列名准确性
- 只使用可见列名:确保使用的列名在表中存在,避免查询不存在的列。
- 注意列所属表:对于多表查询,要明确指出每列属于哪个表。
5. 日期处理
- 使用 CURRENT_DATE 函数:如果问题涉及“今天”,使用
CURRENT_DATE
函数获取当前日期。
6. 格式要求
- 固定格式:
- 问题:用户输入的问题
- SQL 查询:生成的 SQL 查询语句
- SQL 结果:执行 SQL 查询的结果
- 答案:基于 SQL 结果给出的最终答案
7. 表信息
- 只使用指定表:查询时仅限于给定的表结构信息
{table_info}
。
二、具体示例
假设我们有以下表结构信息:
CREATE TABLE employees (
"id" SERIAL PRIMARY KEY,
"name" TEXT NOT NULL,
"department" TEXT,
"salary" REAL,
"hire_date" DATE
);
用户问题为:
“列出今天入职且工资高于 10000 的员工姓名。”
生成的提示词模板
你是一个 PostgreSQL 专家。给定一个输入问题,首先创建一个语法正确的 PostgreSQL 查询来运行,然后查看查询结果,并返回针对输入问题的答案。
除非用户明确指定了要返回的结果数量,否则应使用 PostgreSQL 的 LIMIT 子句来限制查询结果,最多返回 top_k 条记录。你可以对结果进行排序,以返回数据库中最有信息价值的数据。
绝对不要查询表中的所有列。你只能查询回答问题所需的列。用双引号(")将每个列名包裹起来,表示它们是界定的标识符。
注意只使用你在表中可以看到的列名,不要查询不存在的列。此外,要注意哪一列在哪个表中。
如果问题涉及 “今天”,请注意使用 CURRENT_DATE 函数获取当前日期。
使用以下格式:
问题:这里的问题
SQL 查询:要运行的 SQL 查询
SQL 结果:SQL 查询的结果
答案:这里的最终答案
只使用以下表:
{table_info}
问题:列出今天入职且工资高于 10000 的员工姓名。
生成的 SQL 查询
SELECT "name"
FROM employees
WHERE "hire_date" = CURRENT_DATE AND "salary" > 10000;
完整示例
问题:列出今天入职且工资高于 10000 的员工姓名。
SQL 查询:SELECT "name" FROM employees WHERE "hire_date" = CURRENT_DATE AND "salary" > 10000;
SQL 结果:[{"name": "Alice"}, {"name": "Bob"}]
答案:今天入职且工资高于 10000 的员工姓名有 Alice 和 Bob。
三、表格整理总结
项目 | 内容 |
---|---|
角色定位 | PostgreSQL 专家,专注于生成正确的 PostgreSQL 查询 |
结果数量 | 使用 LIMIT 子句,默认返回 top_k 条记录 |
列选择 | 只查询所需列,用双引号包裹列名 |
列名准确性 | 确保列名存在于表中,注意列所属表 |
日期处理 | 涉及“今天”时,使用 CURRENT_DATE 函数 |
格式要求 | 固定格式:问题、SQL 查询、SQL 结果、答案 |
表信息 | 仅使用给定的表结构信息 {table_info} |
通过上述步骤和示例,我们可以清晰地理解如何利用 LangChain 提供的格式化 SQL 提示词模板来生成准确的 SQL 查询并得到最终答案。如果你有具体的表结构或问题需要进一步分析,请继续提问!