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

LangChain集成SQLDatabaseToolkit遇类型错误,同时存在PyODBC连接警告问题

LangChain集成SQLDatabaseToolkit遇类型错误,同时存在PyODBC连接警告问题

嘿,我来帮你搞定这两个问题!先解决那个直接导致程序崩溃的类型错误,再处理连接时的警告提示。

一、解决SQLDatabaseToolkit的ValidationError类型错误

你遇到的这个错误核心原因很明确:SQLDatabaseToolkit需要的是LangChain封装的SQLDatabase实例,而不是SQLAlchemy直接返回的数据库连接对象。你现在用db = engine.connect()得到的是SQLAlchemy原生的Connection对象,完全不符合Toolkit的参数要求。

修改方法超简单,把创建db的代码换成LangChain的SQLDatabase实例即可:

# 替换原来的 db = engine.connect()
db = SQLDatabase(engine)

或者你也可以直接用连接字符串创建SQLDatabase,效果是一样的:

db = SQLDatabase.from_uri(f"mssql+pyodbc://{SERVER}/{DATABASE}?Trusted_Connection=yes&Driver={{{DRIVER}}}")

这样再传入SQLDatabaseToolkit(db=db, llm=llm)就不会触发类型错误了。

二、解决PyODBC连接的SAWarning警告

这个警告是因为PyODBC在使用无DSN连接时,对驱动名称的格式有特殊要求——驱动名称必须用大括号{}包裹,而你的f-string直接输出了驱动名称,没有对大括号做转义处理,导致SQLAlchemy识别不到正确的驱动信息。

修改你的create_engine连接字符串,把Driver={DRIVER}改成Driver={{{DRIVER}}}(双重大括号在f-string里会自动转义成单个大括号):

engine = create_engine(f"mssql+pyodbc://{SERVER}/{DATABASE}?Trusted_Connection=yes&Driver={{{DRIVER}}}")

这样PyODBC就能正确识别驱动名称,烦人的警告就会消失了。

修改后的完整可运行代码

#import the appropriate capabilities from langchain
from langchain.llms import OpenAI
from langchain.agents import create_sql_agent
from sqlalchemy import create_engine
from langchain.agents.agent_toolkits import SQLDatabaseToolkit
from langchain.sql_database import SQLDatabase
from langchain.agents import AgentExecutor
from langchain.agents.agent_types import AgentType
from langchain.chat_models import ChatOpenAI
import os

#record our code in our environment
os.environ['OPENAI_API_KEY'] = key

#Establish connection with sample database (including: 'customers', 'agents', and 'orders' tables)
DRIVER = 'ODBC Driver 17 for SQL Server'
SERVER = 'tmwsql01'
DATABASE = 'DBJimmyTest'

# 修复连接字符串,解决SAWarning
engine = create_engine(f"mssql+pyodbc://{SERVER}/{DATABASE}?Trusted_Connection=yes&Driver={{{DRIVER}}}")

# 替换为LangChain的SQLDatabase实例,解决类型错误
db = SQLDatabase(engine)

llm=OpenAI(temperature=0)
toolkit = SQLDatabaseToolkit(db=db, llm=llm)

#Create a SQL Agent to Process SQL Information
agent_executor = create_sql_agent(
    #temperature rating from 0 to 1 determines how creative the ai is (0 = minimum creativity, 1 = maximum)
    llm=ChatOpenAI(temperature=0),
    toolkit=toolkit,
    verbose=True,
    agent_type="openai-functions"
)

agent_executor("what is the name of each artist's longest song? Please put only one song per artist")

备注:内容来源于stack exchange,提问作者Jimmy Sgrazzutti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 11:28:24