我正在使用一个 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
可以动态读取和利用这些Oracle列注释?我需要 LangChain
以编程方式访问这些注释,因为它们在确定用于数据检索和操作的列方面发挥着至关重要的作用。
这是我目前如何通过
LangChain
连接和使用数据库:
from cx_Oracle import makedsn
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)
这就是我到目前为止使用
LangChain
的方式:
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")
agent_executor.invoke("How many orders from Singapore did we have in March 2023?")
我不知道你们的
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