SQL Server In langchain implementation SQLDatabaseToolkit erroring: db Instance of SQLDatabase Expected. Is this a connection issue?

zu0ti5jz  于 2023-10-15  发布在  其他
关注(0)|答案(1)|浏览(160)

I am just trying to connect my database to my instance of the OpenAI API in order to drawn conclusions from my information; however, I am having significant troubles getting my connection to work and return a correct db. Currently my connection is working, but I am getting this warning: SAWarning: No driver name specified; this is expected by PyODBC when using DSN-less connections engine = create_engine(f"mssql+pyodbc://{SERVER}/{DATABASE}?Trusted_Connection=yes&Driver={DRIVER}")

#import the appropriate capabilities from langchain
from langchain.llms import OpenAI
from langchain.agents import create_sql_agent
from sqlalchemy import create_engine
from langchain.agents.agent_toolkits import SQLDatabaseToolkit
from langchain.sql_database import SQLDatabase
from langchain.agents import AgentExecutor
from langchain.agents.agent_types import AgentType
from langchain.chat_models import ChatOpenAI
#record our code in our environment
os.environ['OPENAI_API_KEY'] = key
#Establish connection with sample database (including: 'customers', 'agents', and 'orders' tables)
DRIVER = 'ODBC Driver 17 for SQL Server'
SERVER = 'tmwsql01'
DATABASE = 'DBJimmyTest'
engine = create_engine(f"mssql+pyodbc://{SERVER}/{DATABASE}?Trusted_Connection=yes&Driver={DRIVER}")
db = engine.connect()
llm=OpenAI(temperature=0)
toolkit = SQLDatabaseToolkit(db=db, llm=llm)

#Create a SQL Agent to Process SQL Information
agent_executor = create_sql_agent(
    #temperature rating from 0 to 1 determines how creative the ai is (0 = minimum creativity, 1 = maximum)
    llm=ChatOpenAI(temperature=0),
    toolkit=toolkit,
    verbose=True,
    agent_type="openai-functions"
)

agent_executor("what is the name of each artist's longest song? Please put only one song per artist")

Error:

Exception has occurred: ValidationError
1 validation error for SQLDatabaseToolkit
db
  instance of SQLDatabase expected (type=type_error.arbitrary_type; expected_arbitrary_type=SQLDatabase)
  File "C:\Users\jsgrazzutti\AI Project\Test Code\API_Test.py", line 36, in <module>
    toolkit = SQLDatabaseToolkit(db=db, llm=llm)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pydantic.v1.error_wrappers.ValidationError: 1 validation error for SQLDatabaseToolkit
db
  instance of SQLDatabase expected (type=type_error.arbitrary_type; expected_arbitrary_type=SQLDatabase)
2mbi3lxu

2mbi3lxu1#

Perhaps this helps

from urllib.parse import quote_plus
from sqlalchemy import create_engine

conn =  "DRIVER={ODBC Driver 17 for SQL Server};Server=tmwsql01;Database=DBJimmyTest;trusted_connection=yes;"
quoted = quote_plus(conn)
target_connection = 'mssql+pyodbc:///?odbc_connect={}'.format(quoted)
engine = create_engine(target_connection)

I have at least successfully connected like that in another project. Hope it works for you as well.

Edit: You also have to change

db = engine.connect()

to

db = SQLDatabase(engine)

Because SQLDatabaseToolkit expects a SQLDatabase object, but engine.Connect() gives you a Connection object from sqlalchemy.

相关问题