老铁们,今天咱们来聊聊如何在SQL问答中更好地进行提示,尤其是在使用create_sql_query_chain
时。咱们主要聚焦于如何在提示信息中有效地获取与数据库相关的信息。
技术背景介绍
在自动生成SQL查询时,使用正确的提示策略可以显著提高生成SQL的准确率。特别是当你在处理不同方言的SQL数据库时,了解如何调整提示信息以适应特定的数据库方言、模式信息以及选择有效的few-shot示例非常重要。
原理深度解析
-
方言特定的提示信息:根据使用的SQL方言定制提示信息。这在
create_sql_query_chain
和SQLDatabase
中已经得到了很好的处理。 -
格式化模式信息:使用
SQLDatabase.get_context
将数据库的模式信息插入到提示中,这是确保SQL查询有效的重要环节。 -
构建与选择few-shot示例:通过在提示中加入自然语言问题与其对应的SQL查询示例,可以有效提升模型的表现。
实战代码演示
首先,安装所需的包并设置环境变量:
%pip install --upgrade --quiet langchain langchain-community langchain-experimental langchain-openai
from langchain_community.utilities import SQLDatabase
db = SQLDatabase.from_uri("sqlite:///Chinook.db", sample_rows_in_table_info=3)
print(db.dialect)
print(db.get_usable_table_names())
使用特定方言创建SQL查询链:
from langchain.chains import create_sql_query_chain
chain = create_sql_query_chain(llm, db)
chain.get_prompts()[0].pretty_print()
优化建议分享
- 少用全列查询:在SQL提示中应避免使用
SELECT *
,而是具体到所需的列。 - 动态选择示例:为了保持提示的简洁,可以使用
SemanticSimilarityExampleSelector
选择与输入最相关的few-shot示例。
补充说明和总结
使用示例选择器来动态选择示例:
from langchain_community.vectorstores import FAISS
from langchain_core.example_selectors import SemanticSimilarityExampleSelector
from langchain_openai import OpenAIEmbeddings
example_selector = SemanticSimilarityExampleSelector.from_examples(
examples,
OpenAIEmbeddings(),
FAISS,
k=5,
input_keys=["input"],
)
老铁们,今天的技术分享就到这里,希望对大家有帮助。开发过程中遇到问题也可以在评论区交流~
—END—