我正在使用一个 Oracle 数据库,该数据库利用列注释来解释神秘的列名称。这些注释在 Oracle SQL Developer 中可见,但放置在
CREATE
表语句之外:
COMMENT ON COLUMN "SCHEMA"."TABLE_NAME"."COLUMN_NAME" IS 'Column which contains information X. Distinct values: ("A", "B", "C")';
我正在使用
LangChain
与数据库交互,目前,它无法访问这些注释,因为它们不包含在 CREATE
语句中。我如何修改我的方法以便 LangChain
可以阅读这些评论?这对于 LangChain
准确确定要使用哪些列至关重要。
这是我目前如何通过
LangChain
连接和使用数据库:
from cx_Oracle import makedsn
#from langchain_community.utilities import SQLDatabase <-- Deprecated
from langchain.sql_database import SQLDatabase
dsn_tns = makedsn(host=host, port=port, service_name=service_name)
connection_string = f"oracle+cx_oracle://{usr}:{pwd}@{dsn_tns}"
db = SQLDatabase.from_uri(connection_string)
print("Dialect:", db.dialect)
# Test db connection
try:
print(f"Database connection is successful, sysdate is {db.run('select sysdate from dual')}")
except Exception as e:
print(f"There was a problem with the database connection: {e}")
这就是我到目前为止使用
LangChain
的方式:
#from langchain_community.agent_toolkits import create_sql_agent # <-- Deprecated
from langchain.agents import create_sql_agent
from langchain.agents.agent_toolkits import SQLDatabaseToolkit
toolkit = SQLDatabaseToolkit(db=db,llm=chat_client)
agent_executor = create_sql_agent(llm=chat_client,
toolkit=toolkit,
agent_type="openai-tools",
verbose=True,
return_intermediate_steps=True)
我不知道你们的
langchain
产品的功能。但如果你能执行SQL语句,你就可以查询数据字典。所以简单查询:
select * from all_tab_comments where owner = 'MYSCHEMA' AND table_name = 'MYTABLE' -- table level comments
select * from all_col_comments where owner = 'MYSCHEMA' AND table_name = 'MYTABLE' -- column level comments