我是这个langchain的新手。在这里,我想要构建的是一个文本到 SQL 的应用程序。但我无法使用 langchain SQLDatabasechain 访问表名,这些表名是同义词、视图。有人能帮我解决这个问题吗? 这是代码。请看一下并告诉我哪里出错了。
import os
import sys
import cx_Oracle
from langchain.utilities import SQLDatabase
from langchain.llms import OpenAI
from langchain_experimental.sql import SQLDatabaseChain
from sqlalchemy import create_engine
import constants #Importing OpenAPIKey from constants file
os.environ["OPENAI_API_KEY"] = constants.APIKEY
# Declaring Database Details
IP="IP Address"
PORT="POSRT"
servicename="ORACLE_SERVICENAME"
username="USERNAME"
password="PASSWORD"
# Developing the oracle Connection
oracle_connection_string_fmt = (f'oracle+cx_oracle://{username}:{password}@' + cx_Oracle.makedsn(f'{IP}', f'{PORT}', service_name=f'{servicename}'))
url = oracle_connection_string_fmt.format(username=username, password=password, hostname=IP, port=PORT, service_name=servicename,)
engine=create_engine(url, echo=True)
db = SQLDatabase(engine)
llm = OpenAI(temperature=0.01, verbose=True)
db_chain = SQLDatabaseChain.from_llm(llm, db, verbose=True)
while True:
query = input("Query Please: ") # query = "Is employee code 7365 exist or not?"
if query in ('q', 'quit', 'exit'):
break
sys.exit()
value = db_chain.run(query)
print(value)
您只需将上面的语法更改为:
from langchain.utilities import SQLDatabase
oracle_connection_string_fmt = SQLDatabase.from_uri(f"oracle+cx_oracle://{userName}:password}@{host}/{service_name}",sample_rows_in_table_info=3)