Langchain:使用SQLDatabaseChain查询postgresql数据库

pkwftd7m  于 2023-10-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(501)

我正在使用langchain查询postgresql数据库。为此,我使用Claude llm,其API键是anthropic_API_key。我正在使用SQLDatabase.from_uri()方法连接postgresql数据库。
这是我在postgres_db.py文件中的代码

from langchain import  SQLDatabase
from constants import anthropic_key
from langchain.chat_models import ChatAnthropic
from langchain_experimental.sql import SQLDatabaseChain
from langchain.agents.agent_toolkits import SQLDatabaseToolkit
from langchain.agents import create_sql_agent
from langchain.agents.agent_types import AgentType
import os

os.environ["ANTHROPIC_API_KEY"] = anthropic_key

API_KEY = anthropic_key

# Setup database
db = SQLDatabase.from_uri(
    f"postgresql+psycopg2://postgres:umang123@localhost:5432/delhi_cime_2",
)

# setup llm
llm = ChatAnthropic(temperature=0)

# Create db chain
QUERY = """
Given an input question, first create a syntactically correct postgresql 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"

"{question}"
"""

# Setup the database chain
db_chain = SQLDatabaseChain(llm=llm, database=db, verbose=True)

def get_prompt():
    print("Type 'exit' to quit")

    while True:
        prompt = input("Enter a prompt: ")

        if prompt.lower() == 'exit':
            print('Exiting...')
            break
        else:
            try:
                question = QUERY.format(question=prompt)
                result = db_chain.run(question)
                print(result)
            except Exception as e:
                print("eeeeeeeeeeeeeeeeeee",e)
                pass

get_prompt()

当我执行上述脚本使用python postgres_db.py命令卡在这个错误,我附加作为终端的屏幕截图. SQL查询在这个截图中是正确的,因为当我执行这个查询时,我得到了正确的记录,即数据库中有6条记录,但它只显示1条,这也是一个语法错误。请帮助我解决这个问题。
error on terminal image file
Thanks in advance

rkue9o1l

rkue9o1l1#

你得到的错误是因为解析问题。当你使用不同的链和LLM时,输出解析器是一个问题。
您可以尝试使用DatabaseToolkit

toolkit = SQLDatabaseToolkit(db=db, llm=self.llm)

    agent_executor = create_sql_agent(
        llm=self.llm,
        toolkit=toolkit,
        verbose=True
    )

    with get_openai_callback() as cb:
        res = agent_executor.run(query)
        print("SQL Query Result:")
        print(res)

相关问题