I was previously using SQLDatabaseChain
to connect LLM (Language Model) with my database, and it was functioning correctly with GPT-3.5. However, when attempting the same process with GPT-4, I encountered an error stating "incorrect syntax near 's"
To address this issue, I opted to use SQLDatabaseToolkit
and the create_sql_agent
function. However, I encountered a problem with this approach as I was unable to pass a prompt. When attempting to include a PromptTemplate
in the create_sql_agent
argument, it resulted in errors.
ValueError: Prompt missing required variables: {'tool_names', 'agent_scratchpad', 'tools'}
Below is my code:
toolkit = SQLDatabaseToolkit(db=db, llm=llm)
agent_executor = create_sql_agent(
llm=llm,
toolkit=toolkit,
verbose=True,
prompt=MSSQL_PROMPT,
)
I found solution for it.
agent_executor = create_sql_agent(llm, db=db, agent_type="openai-tools", verbose=False)
will worked for me. And it also work with prompt based approach. So if you want to add prompt in it then it should be like
agent_executor = create_sql_agent(llm, db=db, agent_type="openai-tools", verbose=False, prompt=MSSQL_PROMPT)
where
MSSQL_PROMPT = """You are an MS SQL expert. Given an input question, first create a syntactically correct MS SQL query to run, then look at the results of the query and return the answer to the input question.
Use the following Domain Knowledge about Database: One Order can have multiple shipments & shipment containers.
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}
Thought: I should look at the tables in the database to see what I can query. Then I should query the schema of the most relevant tables.
{agent_scratchpad}
Question: {input}"""
You can add more data in prompt as per your use cases.