Kuinka yhdistää LLM SQL-tietokantaan LangChain SQLAgentin avulla (2024)

Dishen Wang

·

Seuraa

Julkaistu

Dataherald

·

6 min lukeminen

·

21. kesäkuuta

--

How to connect LLM to SQL database with LangChain SQLAgent (3)

Johdanto

Meidän viimeisessäblogipostauskeskustelimme aiheesta PostGres-tietokannan yhdistäminen Large Language Model (LLM) -järjestelmään ja annoimme esimerkin sen käytöstäLangChain SQLChainmuodostaaksesi yhteyden tietokantaan ja kysyäksesi kysymyksiä. Tässä viestissä teemme saman kanssa aLangChain SQLAgentja vertaa näiden kahden lähestymistavan tehokkuutta.

Miksi SQLAgent

Ennen kuin siirryt opetusohjelmaan, meidän on ensin ymmärrettävä, mikä on agentti ja miksi sitä voidaan suosia yksinkertaiseen SQLChainiin verrattuna. Agentti on komponentti, jolla on pääsy työkaluihin, mukaan lukien Large Language Model (LLM). Sen erottuva ominaisuus on kyky tehdä tietoisia päätöksiä käyttäjän syötteen perusteella käyttäen sopivia työkaluja, kunnes se saa tyydyttävän vastauksen. Esimerkiksi tekstistä SQL:ksi siirrettäessä LangChain SQLAgent ei anna periksi, jos generoidun SQL:n suorittamisessa tapahtuu virhe. Sen sijaan se yrittää toipua tulkitsemalla virheen seuraavassa LLM-kutsussa ja korjaa ongelman. Siksi teoriassa SQLAgentin pitäisi olla parempi kuin SQLChain tuottavuudessa ja tarkkuudessa.

Katsotaanpa, kuinka SQLAgent toimii meitä vastaanKiinteistöttietokanta.

1. Aloitus

Jos luet ensimmäistä blogiamme osoitteessakuinka käyttää LangChain SQLChainia LLM:n yhdistämiseen tietokantaan, saatat jo tuntea jotkin alla olevista vaiheista. Voit vapaasti hypätä ympäriinsä ja noudattaa ohjeita tarpeen mukaan.

Tässä opetusohjelmassa käytämme OpenAI:tagpt-3.5-turbomalli LLM-mallillemme ja DataheraldilleKiinteistöttietokantaamme varten. Tässä opetusohjelmassa käytetään postgresia sql-murteena. Jos käytät toista sql-murretta, tarkistaSQLAlchemyohjeet tietokantayhteyden määrittämisestä.

Asennamme ensin tarvittavat paketit. Jos kyseessä on postgres, varmista, että olet asentanut postgreSQL:n koneellesi. Hyödynnä OpenAI:n API:ta varmistamalla, että sinulla on OpenAI-tili ja sen API-avain valmiina.

Asenna seuraavat paketit:

pip asennus langchain
pip install openai
pip asennus psycopg2

Luo seuraavaksi python-tiedosto nimeltämain.pyja tuo seuraavat:

langchain.agentsista tuo create_sql_agent
Tuo SQLDatabaseToolkit osoitteesta langchain.agents.agent_toolkits
langchain.sql_database tuo SQLDatabase
Tuo OpenAI osoitteesta langchain.llms.openai
langchain.agentsista tuonti AgentExecutor
langchain.agents.agent_typesista tuo AgentType
langchain.chat_modelsista tuo ChatOpenAI

2. Yhdistä tietokanta

Käytä Postgres-tietokantoja varten seuraavaa muotomerkkijonoa tietokannan URI:lle ja ilmoita vaaditut muuttujat yllä:

pg_uri = f"postgresql+psycopg2://{username}:{password}@{host}:{port}/{mydatabase}"

Asetetaan nyt tietokantayhteytemme:

db = SQLDatabase.from_uri(pg_uri)

3. Asenna LLM

Koska käytämme OpenAI:tagpt-3.5-turbomallia, anna meidän käyttää OpenAI-tilimme API-avainta:

OPENAI_API_KEY = "OpenAI-avaimesi"

Määritellään LLM-mallimme:

gpt = OpenAI(lämpötila=0, openai_api_key=OPENAI_API_KEY, mallin_nimi='gpt-3.5-turbo')

4. Asetusagentti

Määrittelemme agenttimme työkalupakki, jota käytetään vastaamaan käyttäjän kysymykseen:

työkalupakki = SQLDatabaseToolkit(db=db, llm=gpt)

Sitten voimme luoda agenttitoimitsijamme agenttityypilläZERO_SHOT_REACT_DESCRIPTION:

agent_executor = create_sql_agent(
llm=gpt,
työkalupakki = työkalupakki,
verbose = Totta,
agent_type=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
)

Lisätietoja käytettävissä olevista agenttityypeistä ja niiden ominaisuuksista on LangChainin dokumentaatiossatässä.

5. Esitä kysely

Lopuksi määritellään kysymys ja suoritetaan agentti kysymyksellä:

kysymys = "Keskimääräinen vuokra Chicagossa lokakuusta 2022 joulukuuhun 2022"
agent_executor.run(kysymys)

Tässä tulokset ohjelmamme suorittamisen jälkeen:

> Siirrytään uuteen ketjuun...
Toimi: sql_db_list_tables
Toiminnon syöttö: ""
Havainto: redfin_homes_sold, zillow_home_value_index, redfin_median_list_price, redfin_median_ppsf, renthub_neighborhood_listings, zillow_observed_rent_index, zillow_rent, redfin_avg_sale_to_list, renthub_low_orylist, redfinin_median_rent s, renthub_num_rental_listings, redfin_median_sale_price, redfin_pending_sales, renthub_average_rent
Ajatus:Voin kysyä taulukoista "renthub_average_rent" ja "zillow_rent" saadakseni keskimääräisen vuokrahinnan Chicagossa. Kyselen näiden taulukoiden skeemaa asiaankuuluvien sarakkeiden määrittämiseksi.
Toimi: sql_db_schema
Toiminnon syöttö: "renthub_average_rent, zillow_rent"
Havainto:
LUO TAULUKO renthub_average_rent (
period_start DATE NOT NULL,
period_end DATE NOT NULL,
period_type TEXT NOT NULL,
...
)

/*
3 riviä renthub_average_rent-taulukosta:
jakson_alku jakson_loppu kauden_tyyppi geo_tyyppi ominaisuuden_tyyppi sijainnin_nimi dh_valtion_fips dh_osavaltion_nimi dh_valtio_abbr dh_county_fips dh_county_name dh_county_fullname dh_place_fips dh_place_name dh_place_dh_fullhcityid dh_neighborhood_name dh_zip_code is_seasonally_adjusted metriikka_arvo hg_date_updated
2022-02-01 2022-02-28 kuukausittainen naapurusto Talo Far North 48 Texas TX 085 Collin Collin County 19000 Dallas Dallasin kaupunki Dallas Dallasin kaupunki 273698 Kaukopohjoinen - Väärä 2543.752941176471 2543.752941176471 20203-35-35-3-3-3-3-3-3-3-3-3-3-3-3-5.
2020-12-01 2020-12-31 kuukausittainen naapurusto Kerrostalo Aurora Highlands 08 Colorado CO 001 Adams Adams County 04000 Aurora Aurora kaupunki Aurora Aurora kaupunki 342766 Aurora Highlands - Väärä 1306.80523435:28523435:285743 38.812353
2021-12-01 2021-12-31 kuukausittainen naapurusto Kerrostalo Penrose 51 Virginia VA 013 Arlington Arlington County 03000 Arlington Arlington CDP Arlington Arlington CDP 271765 Penrose - False 2009.924.2009. .812353
*/

LUO TAULUKKO zillow_rent (
period_start DATE NOT NULL,
period_end DATE NOT NULL,
period_type TEXT NOT NULL,
...
)

/*
3 riviä zillow_rent-taulukosta:
kauden_alku kauden_loppu kauden_tyyppi geo_tyyppi on_seasonally_adjusted property_type location_name location_fullname dh_state_fips dh_state_name dh_state_abbr dh_county_fips dh_county_name dh_county_fullname dh_place_fips_placehlhd_placehdcity city_fullname dh_zip_code metrinen_arvo hg_date_updated

*/
Ajatus:Voin tehdä kyselyn "renthub_average_rent"- ja "zillow_rent"-taulukoista saadakseni keskimääräisen vuokrahinnan Chicagossa. Asiaankuuluvat sarakkeet ovat "metric_value" "renthub_average_rent"-taulukossa ja "metric_value" "zillow_rent"-taulukossa. Kirjoitan kyselyn keskimääräisen vuokrahinnan laskemiseksi Chicagossa lokakuusta 2022 joulukuuhun 2022.
Toimi: sql_db_query_checker
Toiminnon syöttö: "SELECT AVG(metriikan_arvo) FROM renthub_average_rent WHERE location_name = 'Chicago' AND period_start >= '2022-10-01' AND period_end <= '2022-12-31'"
Huomautus: Alkuperäinen kysely ei sisällä yleisiä virheitä. Tässä on toistettu alkuperäinen kysely:

``` sql
SELECT AVG(mittarin_arvo)
FROM renthub_average_rent
WHERE location_name = 'Chicago'
JA periodin_aloitus >= '2022-10-01'
JA kauden_loppu <= '2022-12-31';
```
Ajatus: Kysely on oikea ja valmis suoritettavaksi, jotta saadaan Chicagon keskimääräinen vuokrahinta lokakuusta 2022 joulukuuhun 2022.
Toimi: sql_db_query
Toiminnon syöttö: "SELECT AVG(metriikan_arvo) FROM renthub_average_rent WHERE location_name = 'Chicago' AND period_start >= '2022-10-01' AND period_end <= '2022-12-31'"
Havainto: [(2344.4993233104487,)]
Ajatus: Keskimääräinen vuokrahinta Chicagossa lokakuusta 2022 joulukuuhun 2022 on 2344,50 $.
Lopullinen vastaus: 2344,50 dollaria

voilà

Keskustelu

Testimme aikana suoritimme useita kysymyksiä sekä SQLChainista että SQLAgentista GPT-3.5:n avulla ja vertasimme niiden tuloksia. Havaintomme paljasti, että SQLAgent suoritti SQLChainin paremmin vastaamalla useampaan kysymykseen. Esimerkiksi kun kysyttiin "Nouseeko Chicagon keskimääräinen vuokrahinta kesäkuusta 2022 maaliskuuhun 2023", SQLChainilta saamamme tulos on:

Chicagossa ei näytä olevan pöytää erityisesti keskimääräiseen vuokraukseen. Koska minulla ei ole pääsyä asiaankuuluviin tietoihin, en tiedä vastausta kysymykseen.

ja SQLAgentin tulos on:

Lopullinen vastaus: Chicagon keskimääräinen vuokrahinta nousee kesäkuusta 2022 maaliskuuhun 2023.

Tarkkuuden vuoksi havainnot osoittavat kuitenkin, että SQLAgentin antamat virheelliset vastaukset ovat yleisempiä. Yleisten puutteiden lisäksi (katso päätelmä kohdassaKuinka - LangChain SQLChain) käyttämällä LLM:ää tietokannan kyselyyn, oletamme, että SQLAgent yrittää toisinaan parhaansa vastata kysymykseen, vaikka SQL-kyselystä ei saada konkreettisia tuloksia. Kun esimerkiksi kysytään: "Nousevatko asuntojen hinnat San Diegossa marraskuusta 2022 joulukuuhun 2022?", SQLAgent tuottaa seuraavan ajatus- ja toimintaketjun:

Toimi: list_tables_sql_db
Toiminnon syöttö: ""

Ajatus:Voin kysyä taulukoista "zillow_home_value_index" ja "zillow_home_value" saadakseni tietoa asuntojen hinnoista. Minun pitäisi kysyä näiden taulukoiden skeemaa nähdäkseni käytettävissä olevat sarakkeet.
Toimi: schema_sql_db
Toiminnon syöttö: "zillow_home_value_index, zillow_home_value"

Ajatus:Voin kysyä taulukoista "zillow_home_value_index" ja "zillow_home_value" saadakseni tietoa asuntojen hinnoista. Asiaankuuluvat sarakkeet ovat "period_start", "period_end", "location_name" ja "metric_value". Voin suodattaa tulokset sijainnin nimen "San Diego" ja marraskuun 2022 ja joulukuun 2022 välisen ajanjakson perusteella. Minun pitäisi käyttää "zillow_home_value" -taulukkoa, koska siinä on tarkempia kiinteistötyyppejä.
Toimi: query_sql_db
Toiminnon syöttö: "SELECT periodin_aloitus, jakson_loppu, sijainnin_nimi, metriikan_arvo FROM zillow_home_value WHERE sijainnin_nimi = 'San Diego' AND periodin_aloitus >= '2022-11-01' AND period_end <= '2022-12-31' LIMIT 10"
Havainto: []
Ajatus: Kyselyllä ei ole tuloksia. Tämä tarkoittaa, että San Diegon asuntojen hinnoista ei ole saatavilla tietoja marraskuusta 2022 joulukuuhun 2022.
Lopullinen vastaus: Ei, asuntojen hinnat eivät nouse San Diegossa marraskuusta 2022 joulukuuhun 2022.

Kuten näemme, SQLAgent ei havainnut mitään tietoja sql-kyselystä, mutta päätti antaa vastauksen joka tapauksessa.

Siksi, jos huomaat tarvitsevasi SQLAgentin kykyä rakentaa monimutkaisia ​​kutsuketjuja kielimalleille ja muille työkaluille, olisi järkevää muotoilla hyvin määritellyt ja tarkat kysymykset samalla, kun myös ristiintarkistaa tulokset tietokantaasi.

Johtopäätös

LangChain SQLAgent on tehokas työkalu, joka luo monimutkaisia ​​LLM-ketjukutsuja käyttäjien kysymyksiin vastaamiseksi. Vaikka se antaa vastauksen tärkeimpiin kysymyksiin, se ei pysty estämään LLM-hallusinaatioita.

Jos et ole lukenut blogia LangChain SQLChainin käytöstä, tutustu siihentässä. Kerromme myös, miten sitä käytetäänLlamaIndexLLM:ien yhdistämisestä tietokantoihin myöhemmin tässä kuussa, joten jos olet kiinnostunut oppimaan lisää LLM:n käyttämisestä tietokantakysymyksiin vastaamiseen, harkitse tilaamista, kiitos.

Kuinka yhdistää LLM SQL-tietokantaan LangChain SQLAgentin avulla (2024)

FAQs

How to connect llm to SQL database with LangChain sqlchain? ›

We will be using LangChain for our framework and will be writing in Python.
  1. Getting started. Let us install the required packages first, make sure you have already installed postgreSQL on your machine and have an OpenAI account as well. ...
  2. Connect the database. ...
  3. Setup LLM. ...
  4. Run a query.
Jun 15, 2023

What is the SQL agent in LangChain? ›

The SQL Agent provided by LangChain is a tool that allows you to interact with SQL databases using natural language. It is designed to be more flexible and more powerful than the standard SQLDatabaseChain, and it can be used to answer more general questions about a database, as well as recover from errors.

Can LLM generate SQL? ›

Given the impressive capabilities of large language models (LLMs), it's natural to wonder if AI can help us translate our information needs into well-formed SQL queries. Granted, most LLMs can output at least some SQL queries based on natural language input.

How to import SQL database from LangChain? ›

Toolkit​
  1. agent_toolkits import SQLDatabaseToolkit.
  2. from langchain_openai import ChatOpenAI.
  3. toolkit = SQLDatabaseToolkit(db=db, llm=ChatOpenAI(temperature=0))
  4. context = toolkit. get_context()
  5. tools = toolkit. get_tools()

Can LLMs read tabular data? ›

2.1 Serialization. Rows are line-separated, columns are separated by “,”, “\t”, “:”, etc. Since LLMs are sequence-to-sequence models, in order to feed tabular data as inputs into an LLM, we have to convert the structured tabular data into a text format (Sui et al., 2023b; Jaitly et al., 2023) .

What is the difference between LangChain and LlamaIndex? ›

What are typical use cases for LangChain and LlamaIndex? LangChain is suitable for text generation, language translation, text summarization, and classification. LlamaIndex excels in content generation, document search and retrieval, chatbots, and virtual assistants.

Is LangChain data safe? ›

LangChain data can be sensitive: LangChain data can be sensitive, especially if it contains personal information or confidential data. It is important to take steps to protect LangChain data from unauthorized access.

How does the LangChain SQL Agent work? ›

Under the hood, the LangChain SQL Agent uses a MRKL (pronounced Miracle)-based approach, and queries the database schema and example rows and uses these to generate SQL queries, which it then executes to pull back the results you're asking for.

How can a custom agent be created for LangChain? ›

Custom agent
  1. Load the LLM​ First, let's load the language model we're going to use to control the agent. ...
  2. Define Tools​ Next, let's define some tools to use. ...
  3. Create Prompt​ Now let us create the prompt. ...
  4. Bind tools to LLM​ How does the agent know what tools it can use? ...
  5. Create the Agent​ ...
  6. Adding memory​

Can I train my own LLM? ›

Of course you do. One of the first things you need to do is add large language models (LLMs) to your infrastructure to start powering generative AI applications. The problem is training your own LLM (despite its benefits) is time-consuming, resource-intensive, and expensive.

Can I build my own LLM? ›

Building your own large language model can enable you to build and share open-source models with the broader developer community. By building your private LLM you have complete control over the model's architecture, training data and training process.

Will learning SQL increase my salary? ›

I'd consider SQL a basic skill for most jobs related to data. But note that knowing SQL by itself won't make you a highly paid employee. You usually need to combine that skill with something else (e.g. ability to visualize/analyze/communicate the data). No, you shouldn't learn SQL if it is JUST for the money.

Does LangChain expose your data? ›

By employing LangChain, you can interact with LLM Provider APIs without exposing your PII, thus protecting yourself against potential data breaches while still enjoying the functionalities and benefits that these APIs have to offer.

What Databases are supported by LangChain? ›

LangChain comes with a number of built-in chains and agents that are compatible with any SQL dialect supported by SQLAlchemy (e.g., MySQL, PostgreSQL, Oracle SQL, Databricks, SQLite).

What is a chain in LangChain? ›

LangChain introduces a revolutionary way to harness the power of language models. At the heart of this system lies the concept of “chains” — a sequence of interconnected components designed to execute tasks in a specific order.

How to connect to SQL database using SQL command line? ›

Open a Command Prompt window, and type sqlcmd -SmyServer\instanceName. Replace myServer\instanceName with the name of the computer and the instance of SQL Server that you want to connect to. Press ENTER. The sqlcmd prompt ( 1> ) indicates that you are connected to the specified instance of SQL Server.

How to connect two SQL database? ›

Steps to Join Tables from Different Databases in SQL Server
  1. Step 1: Create the first database and table. To start, create the first database called database_1: ...
  2. Step 2: Create the second database and table. ...
  3. Step 3: Join the tables from the different databases in SQL Server. ...
  4. Step 4 (optional): Drop the databases created.

What databases are supported by LangChain? ›

LangChain comes with a number of built-in chains and agents that are compatible with any SQL dialect supported by SQLAlchemy (e.g., MySQL, PostgreSQL, Oracle SQL, Databricks, SQLite).

How to connect dataflow to SQL Server? ›

  1. Go to the Dataflow Create job from template page.
  2. In the Job name field, enter a unique job name.
  3. Optional: For Regional endpoint, select a value from the drop-down menu. ...
  4. From the Dataflow template drop-down menu, select the SQL Server to BigQuery template.
  5. In the provided parameter fields, enter your parameter values.

Top Articles
Latest Posts
Article information

Author: Geoffrey Lueilwitz

Last Updated:

Views: 5839

Rating: 5 / 5 (60 voted)

Reviews: 83% of readers found this page helpful

Author information

Name: Geoffrey Lueilwitz

Birthday: 1997-03-23

Address: 74183 Thomas Course, Port Micheal, OK 55446-1529

Phone: +13408645881558

Job: Global Representative

Hobby: Sailing, Vehicle restoration, Rowing, Ghost hunting, Scrapbooking, Rugby, Board sports

Introduction: My name is Geoffrey Lueilwitz, I am a zealous, encouraging, sparkling, enchanting, graceful, faithful, nice person who loves writing and wants to share my knowledge and understanding with you.