You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将缩写术语表集成到LangChain以优化SQL查询生成(NL2SQL)

解决LangChain对接含缩写列名Oracle数据库的方案

方法1:自定义数据库表与列的描述信息

LangChain的SQLDatabase类支持初始化时传入custom_table_info参数,你可以将缩写列名的映射嵌入表描述,让LLM关联缩写与实际含义。

步骤:

  • 先构建包含术语映射的表信息字符串(以订单表为例):
custom_table_info = """
表ORDERS的列信息:
- CST_ID: 对应Customer ID(客户ID)
- PRDCT_NUM: 对应Product Number(产品编号)
- ORDR_DATE: 订单日期
- CNTRY: 客户所在国家/地区
"""
  • 初始化SQLDatabase时传入自定义信息:
from langchain.sql_database import SQLDatabase

db = SQLDatabase.from_uri("oracle+cx_oracle://user:pass@host:port/service_name", 
                          include_tables=["ORDERS"],  # 指定需处理的表
                          custom_table_info=custom_table_info)

LLM生成SQL时会参考这些描述,将自然语言中的"Customer ID"对应到CST_ID。

方法2:修改SQL工具的系统提示词

通过自定义SQLDatabaseToolkit的提示模板,将缩写术语表直接注入工具提示,让LLM每次调用SQL工具时都能参考映射关系。

代码示例:

from langchain.agents.agent_toolkits import SQLDatabaseToolkit
from langchain.prompts import PromptTemplate

# 定义包含术语映射的提示模板
custom_prompt = PromptTemplate(
    input_variables=["input", "table_info", "top_k"],
    template="""你是SQL专家,需根据用户问题生成正确的Oracle SQL语句。
注意以下列名缩写映射:
CST_ID = Customer ID
PRDCT_NUM = Product Number

用户问题:{input}
数据库表信息:{table_info}
请生成最多{top_k}条结果的SQL语句,不要返回其他解释。"""
)

# 自定义Toolkit并替换默认提示
toolkit = SQLDatabaseToolkit(db=db, llm=chat_client)
# 替换sql_db_query工具的提示(第一个工具通常为该工具)
toolkit.get_tools()[0].prompt = custom_prompt

# 后续创建Agent的代码保持不变
agent_executor = create_sql_agent(llm=chat_client,
                                  toolkit=toolkit,
                                  agent_type="openai-tools",
                                  verbose=True,
                                  return_intermediate_steps=True)

方法3:自定义SQL代理的系统提示

对于OpenAI Tools类型的Agent,可直接修改系统提示,将术语表加入全局指令,让LLM全程感知映射关系。

代码示例:

from langchain.agents import create_sql_agent
from langchain.agents.agent_toolkits import SQLDatabaseToolkit
from langchain_core.messages import SystemMessage

toolkit = SQLDatabaseToolkit(db=db, llm=chat_client)

# 自定义系统提示,加入缩写映射
system_message = SystemMessage(content="""你是处理Oracle数据库查询的专家,需严格遵循以下列名缩写映射生成SQL:
CST_ID = Customer ID
PRDCT_NUM = Product Number
请根据用户的自然语言问题,生成准确的SQL语句查询数据库。""")

agent_executor = create_sql_agent(llm=chat_client,
                                  toolkit=toolkit,
                                  agent_type="openai-tools",
                                  verbose=True,
                                  return_intermediate_steps=True,
                                  system_message=system_message)

注意事项

  • 若存在大量表和缩写,建议将术语映射整理为结构化字符串(如Markdown列表),避免提示过长影响LLM理解。
  • 优先测试方法3,OpenAI Tools类型的Agent对系统提示的感知更直接。
  • 可结合方法1与方法3,同时在表描述和系统提示中加入映射,进一步提升准确率。

内容的提问来源于stack exchange,提问作者DataJanitor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 20:11:13