首页 > 数据库 >用于与多个数据库聊天的智能 SQL 代理问答和 RAG 系统(4) —— 利用大型语言模型(LLM)生成和执行SQL查询,并通过语言模型处理查询结果生成最终答案

用于与多个数据库聊天的智能 SQL 代理问答和 RAG 系统(4) —— 利用大型语言模型(LLM)生成和执行SQL查询,并通过语言模型处理查询结果生成最终答案

时间:2025-01-14 19:58:34浏览次数:3  
标签:模型 数据库 查询 llm SQL query self

实现一个与旅行相关的SQL数据库交互的工具,利用大型语言模型(LLM)生成和执行SQL查询,并通过语言模型处理查询结果生成最终答案。

完整代码:

from langchain_core.tools import tool
from langchain_community.utilities import SQLDatabase
from langchain.chains import create_sql_query_chain
from langchain_community.tools.sql_database.tool import QuerySQLDataBaseTool
from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough
from operator import itemgetter
from langchain_openai import ChatOpenAI


class TravelSQLAgentTool:
    """
    A tool for interacting with a travel-related SQL database using an LLM (Language Model) to generate and execute SQL queries.

    This tool enables users to ask travel-related questions, which are transformed into SQL queries by a language model.
    The SQL queries are executed on the provided SQLite database, and the results are processed by the language model to
    generate a final answer for the user.

    Attributes:
        sql_agent_llm (ChatOpenAI): An instance of a ChatOpenAI language model used to generate and process SQL queries.
        system_role (str): A system prompt template that guides the language model in answering user questions based on SQL query results.
        db (SQLDatabase): An instance of the SQL database used to execute queries.
        chain (RunnablePassthrough): A chain of operations that creates SQL queries, executes them, and generates a response.

    Methods:
        __init__: Initializes the TravelSQLAgentTool by setting up the language model, SQL database, and query-answering pipeline.
    """

    def __init__(self, llm: str, sqldb_directory: str, llm_temerature: float) -> None:
        """
        Initializes the TravelSQLAgentTool with the necessary configurations.

        Args:
            llm (str): The name of the language model to be used for generating and interpreting SQL queries.
            sqldb_directory (str): The directory path where the SQLite database is stored.
            llm_temerature (float): The temperature setting for the language model, controlling response randomness.
        """
        self.sql_agent_llm = ChatOpenAI(
            model=llm, temperature=llm_temerature)

        self.db = SQLDatabase.from_uri(
            f"sqlite:///{sqldb_directory}")
        print(self.db.get_usable_table_names())

        # write_query
        write_query = create_sql_query_chain(self.sql_agent_llm, self.db)

        # execute_query
        execute_query = QuerySQLDataBaseTool(db=self.db)

        # answer
        self.system_role = """Given the following user question, corresponding SQL query, and SQL result, answer the user question.\n
            Question: {question}\n
            SQL Query: {query}\n
            SQL Result: {result}\n
            Answer:
            """
        answer_prompt = PromptTemplate.from_template(
            self.system_role)
        answer = answer_prompt | self.sql_agent_llm | StrOutputParser()

        # chain
        self.chain = (
            RunnablePassthrough.assign(query=write_query).assign(
                result=itemgetter("query") | execute_query
            )
            | answer
        )

from agent_graph.load_tools_config import LoadToolsConfig

TOOLS_CFG = LoadToolsConfig()

@tool
def query_travel_sqldb(query: str) -> str:
    """Query the Swiss Airline SQL Database and access all the company's information. Input should be a search query."""
    agent = TravelSQLAgentTool(
        llm=TOOLS_CFG.travel_sqlagent_llm, # 比如:gpt-3.5-turbo
        sqldb_directory=TOOLS_CFG.travel_sqldb_directory, # 数据库地址
        llm_temerature=TOOLS_CFG.travel_sqlagent_llm_temperature # 0到10
    )
    response = agent.chain.invoke({"question": query})
    return response

以下是代码的详细解释:

这段代码定义了一个用于查询与旅行相关的SQL数据库的工具类TravelSQLAgentTool,并通过语言模型(LLM)生成和执行SQL查询。以下是每个方法的详细解释:

TravelSQLAgentTool

该类的作用是通过LLM与SQLite数据库进行交互,生成SQL查询,执行这些查询,并基于查询结果回答用户的旅行相关问题。

__init__ 方法
  • 作用:初始化TravelSQLAgentTool实例,设置语言模型、SQL数据库和查询处理流水线。
  • 参数
    • llm:要使用的语言模型的名称,用于生成和解释SQL查询。
    • sqldb_directory:SQLite数据库文件的路径。
    • llm_temerature:设置语言模型的温度参数,控制响应的随机性。温度越高,生成的回答越随机。
  • 内部操作
    1. 创建一个ChatOpenAI实例 (self.sql_agent_llm) 来生成SQL查询和处理结果。
    2. 使用SQLDatabase.from_uri()方法加载SQL数据库(SQLite数据库)。
    3. 使用create_sql_query_chain()函数创建SQL查询链 (write_query),负责将用户问题转化为SQL查询。
    4. 创建QuerySQLDataBaseTool实例 (execute_query),该工具用于执行SQL查询。
    5. 定义一个系统角色提示 (self.system_role),该角色提示引导语言模型基于SQL查询结果来回答用户问题。
    6. 创建一个回答模板 (answer_prompt),并将其与语言模型和输出解析器连接起来,生成最终回答 (answer)。
    7. 定义一个操作链 (self.chain),将上述所有部分串联起来,完成查询生成、执行和回答过程。

query_travel_sqldb 函数

  • 作用:该函数是一个装饰器@tool定义的工具函数,接受用户的查询字符串,创建一个TravelSQLAgentTool实例,并使用它处理查询,最终返回处理后的回答。
  • 参数
    • query:用户的查询,表示对旅行相关信息的搜索。
  • 内部操作
    1. 使用LoadToolsConfig加载配置文件(TOOLS_CFG)。
    2. 创建一个TravelSQLAgentTool实例,并传递所需的配置参数,如语言模型名称、数据库路径和温度设置。
    3. 使用TravelSQLAgentToolchain流水线处理用户查询,执行SQL查询并返回回答。

关键部分

  • SQLDatabase:这是langchain_community库中的一个类,封装了与SQL数据库的交互,提供了查询和执行功能。
  • create_sql_query_chain:该函数用于创建一个SQL查询链。它将语言模型与SQL数据库连接,确保语言模型能够从数据库中提取必要的信息来生成有效的SQL查询。
  • QuerySQLDataBaseTool:该工具类用于执行SQL查询,它接收生成的SQL查询并执行在数据库上,返回查询结果。
  • PromptTemplatelangchain_core中的类,用于创建基于模板的提示。通过模板,语言模型能够理解如何处理特定类型的输入(在这个例子中是SQL查询和结果)并生成回答。
  • RunnablePassthrough:这是一个流水线操作工具,用于将多个操作(如生成查询、执行查询和生成回答)串联起来。它确保各个操作按顺序执行,并将中间结果传递到下一个操作。

流程概述

  1. 用户通过query_travel_sqldb()传入查询。
  2. TravelSQLAgentTool通过语言模型生成SQL查询。
  3. 生成的SQL查询通过QuerySQLDataBaseTool执行,获取查询结果。
  4. 根据系统角色提示,最终生成答案,回答用户的问题。

这段代码的主要功能是结合语言模型和SQL数据库,使得用户能够用自然语言查询与旅行相关的数据库信息。

标签:模型,数据库,查询,llm,SQL,query,self
From: https://blog.csdn.net/u013565133/article/details/145113796

相关文章

  • 预训练+微调大模型的模式
    预训练模型,微调,大模型,深度学习,自然语言处理,计算机视觉,迁移学习1.背景介绍近年来,深度学习技术取得了飞速发展,特别是大规模预训练模型的出现,为人工智能领域带来了革命性的变革。预训练模型是指在海量数据上进行预训练,学习到通用语言表示或特征的模型。微调则是针对特定任......
  • 【转】SQL Server 时间日期 格式转换
    在SQLSERVER中,用CONVERT对日期作格式转换SELECTGETDATE()输出2025-07-0504:27:47 语句及查询结果:SelectCONVERT(varchar(100),GETDATE(),0):0516200610:57AMSelectCONVERT(varchar(100),GETDATE(),1):05/16/06SelectCONVERT(varchar(100),GETDATE()......
  • Kyutai开源端侧模型Helium -1 preview;FoloToy内测「超级智能体」,支持联网查询和语音调
      开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑......
  • 多模态大模型InterVL2.5使用记录
    本文记录在本地安装和测试InterVL2.5(26B版本)论文:https://arxiv.org/abs/2412.05271Huggingface模型权重下载页:https://huggingface.co/collections/OpenGVLab/internvl25-673e1019b66e2218f68d7c1cGithub:https://github.com/OpenGVLab/InternVL本地硬件:RTX30901.创建环......
  • Mysql 高可用(MHA)-读写分离(Atlas)
    1.搭建主从复制(一主两从)1.1准备环境1主库:10.0.0.51/db012从库:10.0.0.52/db02,10.0.0.53/db031.2 清理环境1systemctlstopmysqld2rm-rf/data/mysql_3306/*3rm-rf/binlog/4mkdir/binlog/56创建相关目录与授权7主库操作:开启binlog和G......
  • LeetCode - #183 Swift 实现查询未下订单的客户
    网罗开发(小红书、快手、视频号同名)  大家好,我是展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、HarmonyOS、Java、Python等方向。在移动端开发、鸿蒙开发、物联网、嵌入式、云原生、开源......
  • python与WRF模型联合应用技术、WRF模式前后处理
    当今从事气象及其周边相关领域的人员,常会涉及气象数值模式及其数据处理,无论是作为业务预报的手段、还是作为科研工具,掌握气象数值模式与高效前后处理语言是一件非常重要的技能。WRF作为中尺度气象数值模式的佼佼者,模式功能齐全,是大部分人的第一选择。而掌握模式还只是第一步,将......
  • 【实战指南】零基础到精通AI大模型:附带详细学习路线与实践技巧,助你快速入门并精通!
    作为零基础小白学习AI大模型,可以遵循以下步骤:基础知识学习:数学基础:学习线性代数、概率论、统计学、微积分等,这些是理解AI模型的数学原理的基础。编程基础:至少掌握一门编程语言,如Python,这是实现AI算法的工具。了解AI基本概念:学习机器学习、深度学习的基本概念,了解不同的......
  • AI - 大模型核心参数解析(Top-k、Top-p、Temperature、frequency penalty、presence pe
    原文链接https://blog.csdn.net/u012856866/article/details/140308083 文章目录0.前言1.top-k采样2.top-p采样3.Temperature采样4.联合采样(top-k&top-p&Temperature)4.frequencypenalty和presencepenalty5.参数调整技巧参考资料在大模型推理过程中,常常能看到......
  • AI大模型学习路径:适合每个人的详细步骤与技巧!
    23年AI大模型技术狂飙一年后,24年AI大模型的应用已经在爆发,因此掌握好AI大模型的应用开发技术就变成如此重要,那么如何才能更好地掌握呢?一份AI大模型详细的学习路线就变得非常重要!由于AI大模型应用技术比较新,业界也没什么参照标准,打造AI大模型技术的学习路线并非......