mirror of
https://github.com/langchain-ai/langchain.git
synced 2026-10-06 09:55:21 +03:00
Co-authored-by: Bruno Bornsztein <bruno.bornsztein@gmail.com>
9.5 KiB
9.5 KiB
In [1]:
from langchain import OpenAI, SQLDatabase, SQLDatabaseChainIn [2]:
db = SQLDatabase.from_uri("sqlite:///../../../../notebooks/Chinook.db")
llm = OpenAI(temperature=0)In [ ]:
db_chain = SQLDatabaseChain(llm=llm, database=db, verbose=True)In [3]:
db_chain.run("How many employees are there?")Out [3]:
[1m> Entering new SQLDatabaseChain chain...[0m How many employees are there? SQLQuery:[32;1m[1;3m SELECT COUNT(*) FROM Employee;[0m SQLResult: [33;1m[1;3m[(9,)][0m Answer:[32;1m[1;3m There are 9 employees.[0m [1m> Finished chain.[0m
' There are 9 employees.'
In [5]:
from langchain.prompts.prompt import PromptTemplate
_DEFAULT_TEMPLATE = """Given an input question, first create a syntactically correct {dialect} query to run, then look at the results of the query and return the answer.
Use the following format:
Question: "Question here"
SQLQuery: "SQL Query to run"
SQLResult: "Result of the SQLQuery"
Answer: "Final answer here"
Only use the following tables:
{table_info}
If someone asks for the table foobar, they really mean the employee table.
Question: {input}"""
PROMPT = PromptTemplate(
input_variables=["input", "table_info", "dialect"], template=_DEFAULT_TEMPLATE
)In [6]:
db_chain = SQLDatabaseChain(llm=llm, database=db, prompt=PROMPT, verbose=True)In [7]:
db_chain.run("How many employees are there in the foobar table?")Out [7]:
[1m> Entering new SQLDatabaseChain chain...[0m How many employees are there in the foobar table? SQLQuery:[32;1m[1;3m SELECT COUNT(*) FROM Employee;[0m SQLResult: [33;1m[1;3m[(9,)][0m Answer:[32;1m[1;3m There are 9 employees in the foobar table.[0m [1m> Finished chain.[0m
' There are 9 employees in the foobar table.'
In [3]:
db_chain = SQLDatabaseChain(llm=llm, database=db, verbose=True, top_k=3)In [8]:
db_chain.run("What are some example tracks by composer Johann Sebastian Bach?")Out [8]:
[1m> Entering new SQLDatabaseChain chain...[0m
What are some example tracks by composer Johann Sebastian Bach?
SQLQuery:[32;1m[1;3m SELECT Name FROM Track WHERE Composer = 'Johann Sebastian Bach' LIMIT 3;[0m
SQLResult: [33;1m[1;3m[('Concerto for 2 Violins in D Minor, BWV 1043: I. Vivace',), ('Aria Mit 30 Veränderungen, BWV 988 "Goldberg Variations": Aria',), ('Suite for Solo Cello No. 1 in G Major, BWV 1007: I. Prélude',)][0m
Answer:[32;1m[1;3m Examples of tracks by Johann Sebastian Bach include 'Concerto for 2 Violins in D Minor, BWV 1043: I. Vivace', 'Aria Mit 30 Veränderungen, BWV 988 "Goldberg Variations": Aria', and 'Suite for Solo Cello No. 1 in G Major, BWV 1007: I. Prélude'.[0m
[1m> Finished chain.[0m
' Examples of tracks by Johann Sebastian Bach include \'Concerto for 2 Violins in D Minor, BWV 1043: I. Vivace\', \'Aria Mit 30 Veränderungen, BWV 988 "Goldberg Variations": Aria\', and \'Suite for Solo Cello No. 1 in G Major, BWV 1007: I. Prélude\'.'
In [3]:
from langchain.chains import SQLDatabaseSequentialChainIn [4]:
chain = SQLDatabaseSequentialChain.from_llm(llm, db, verbose=True)In [5]:
chain.run("How many employees are also customers?")Out [5]:
[1m> Entering new SQLDatabaseSequentialChain chain...[0m Table names to use: [33;1m[1;3m['Customer', 'Employee'][0m [1m> Entering new SQLDatabaseChain chain...[0m How many employees are also customers? SQLQuery:[32;1m[1;3m SELECT COUNT(*) FROM Customer c INNER JOIN Employee e ON c.SupportRepId = e.EmployeeId;[0m SQLResult: [33;1m[1;3m[(59,)][0m Answer:[32;1m[1;3m There are 59 employees who are also customers.[0m [1m> Finished chain.[0m [1m> Finished chain.[0m
' There are 59 employees who are also customers.'
In [ ]: