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

LangChain Python Agent导入Scanpy异常:如何确保稳定导入依赖库

解决LangChain Python Agent无法稳定导入依赖库的问题

你遇到的问题核心是:LangChain的PythonREPLTool默认在独立的执行环境中运行代码,外部导入的库和定义的对象不会自动进入这个环境,导致Agent执行绘图任务时反复尝试导入scanpy却失败。以下是几种可靠的解决方法:

方案1:将依赖和对象直接注入REPL环境

PythonREPLTool支持通过globals参数,把外部已导入的库、定义的对象传入REPL的全局命名空间,让Agent可以直接使用,无需重复导入。

修改代码如下:

from dotenv import load_dotenv, find_dotenv
import openai
import os
from langchain.chat_models import ChatOpenAI
from langchain.agents.agent_types import AgentType
from langchain_experimental.agents.agent_toolkits import create_python_agent
from langchain_experimental.tools import PythonREPLTool
import scanpy as sc

load_dotenv(find_dotenv())
openai.api_key = os.environ["OPENAI_API_KEY"]

# 定义你的pbmc对象(替换为实际初始化逻辑)
pbmc = sc.read("pbmc3k.h5ad")

# 初始化REPL工具,注入已有的库和对象
repl_tool = PythonREPLTool(
    globals={
        "sc": sc,
        "pbmc": pbmc
    }
)

agent_executor = create_python_agent(
    llm=ChatOpenAI(temperature=0, model="gpt-4-1106-preview"),
    tool=repl_tool,
    verbose=True,
    agent_type=AgentType.OPENAI_FUNCTIONS,
    agent_executor_kwargs={"handle_parsing_errors": True},
)

配置完成后,Agent执行代码时可直接调用sc.pl.umap(pbmc),无需再执行导入语句。

方案2:自定义预加载依赖的REPL工具

如果需要更灵活的初始化逻辑,可以自定义工具,在REPL执行前预先加载所有需要的依赖和对象:

from dotenv import load_dotenv, find_dotenv
import openai
import os
from langchain.chat_models import ChatOpenAI
from langchain.agents.agent_types import AgentType
from langchain_experimental.agents.agent_toolkits import create_python_agent
from langchain.tools import Tool
import scanpy as sc

load_dotenv(find_dotenv())
openai.api_key = os.environ["OPENAI_API_KEY"]

# 自定义REPL函数,预先加载依赖
def preloaded_python_repl(code: str) -> str:
    # 预先执行导入和对象初始化
    exec("import scanpy as sc", globals())
    pbmc = sc.read("pbmc3k.h5ad")  # 替换为你的pbmc初始化逻辑
    globals()["pbmc"] = pbmc
    
    # 执行用户请求的代码
    try:
        exec(code, globals())
        return "代码执行完成"
    except Exception as e:
        return f"执行错误: {str(e)}"

# 创建自定义工具
custom_repl_tool = Tool(
    name="PythonREPL",
    func=preloaded_python_repl,
    description="执行Python代码,已预先加载scanpy库和pbmc对象"
)

agent_executor = create_python_agent(
    llm=ChatOpenAI(temperature=0, model="gpt-4-1106-preview"),
    tool=custom_repl_tool,
    verbose=True,
    agent_type=AgentType.OPENAI_FUNCTIONS,
    agent_executor_kwargs={"handle_parsing_errors": True},
)

方案3:优化提示词引导Agent使用已有依赖

在调用Agent时,明确告知环境中已存在所需的库和对象,避免Agent重复尝试导入:

agent_executor.run("当前环境已导入scanpy库(别名sc),且已存在pbmc对象,请直接使用它们绘制UMAP图")

总结

最稳定的方案是方案1,直接通过globals参数注入依赖和对象,确保REPL执行环境与外部环境共享资源,从根源上解决重复导入失败的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 13:49:57