如何解决SQLDatabase.from_databricks在Databricks工作流作业中访问仓库失败问题
解决LangChain SQLDatabase.from_databricks在Databricks工作流中报错的问题
问题根源
作业环境中的DatabricksReplContext对象不包含browserHostName属性——这个属性仅存在于交互式笔记本的上下文里,导致LangChain的方法尝试自动读取上下文信息时失败。
解决方案
1. 显式传入所有必要参数
直接给SQLDatabase.from_databricks传入完整的连接参数,完全绕过上下文自动获取逻辑:
from langchain.sql_database import SQLDatabase import os # 从环境变量读取敏感信息,避免硬编码 db_host = os.getenv("DATABRICKS_HOST") db_token = os.getenv("DATABRICKS_TOKEN") db = SQLDatabase.from_databricks( host=db_host, api_token=db_token, catalog="你的目录名", schema="你的模式名", warehouse_id="你的SQL仓库ID" # 或者用cluster_id指定集群 )
Databricks作业环境默认会注入DATABRICKS_HOST和DATABRICKS_TOKEN环境变量,无需手动配置。
2. 临时适配上下文(不推荐长期使用)
如果方法内部仍强制依赖上下文属性,可以手动构造包含browserHostName的上下文对象:
import sys from databricks.sdk.core import DatabricksContext # 构造上下文并添加缺失的属性 custom_context = DatabricksContext() custom_context.browserHostName = "https://你的工作区URL" # 替换LangChain依赖的上下文 sys.modules['databricks.repl.context'].context = custom_context # 再调用from_databricks方法 db = SQLDatabase.from_databricks( catalog="你的目录名", schema="你的模式名", warehouse_id="你的SQL仓库ID" )
这个方法属于临时hack,后续LangChain版本更新后可能会失效,优先使用第一种方案。
3. 升级LangChain到最新版本
该问题可能是旧版本的适配bug,升级到最新版的LangChain及Databricks相关插件:
%pip install --upgrade langchain langchain-databricks
如果是在作业中执行,需要将该命令放在作业的初始化步骤或第一个执行单元格中。
内容的提问来源于stack exchange,提问作者Hanumant Garad
相关产品推荐
相关产品推荐

