基于LangChain的Web研究Agent依赖冲突问题求助
问题:LangChain 0.1.x与langchain-contrib依赖冲突导致导入循环
核心矛盾
- 升级LangChain到0.1.0后,
create_openai_functions_agent导入正常,但langchain-contrib包因依赖旧版LangChain的langchain.schema.BaseLanguageModel报错 - 降级LangChain到旧版本(如0.0.148)能解决langchain-contrib的导入问题,但
create_openai_functions_agent又无法导入(该API在LangChain 0.1.x才稳定提供)
当前环境信息
Python版本
Python 3.12.1
完整依赖列表
aiohttp==3.9.1 aiosignal==1.3.1 annotated-types==0.6.0 anyio==4.2.0 attrs==23.2.0 beautifulsoup4==4.12.2 certifi==2023.11.17 charset-normalizer==3.3.2 click==8.1.7 colorama==0.4.6 dataclasses-json==0.5.14 distro==1.9.0 executing==2.0.1 fastapi==0.108.0 frozenlist==1.4.1 fsspec==2023.12.2 fvalues==0.0.3 gpt-index==0.8.42 greenlet==3.0.3 h11==0.14.0 httpcore==1.0.2 httpx==0.26.0 idna==3.6 joblib==1.3.2 jsonpatch==1.33 jsonpointer==2.4 langchain==0.1.0 langchain-community==0.0.11 langchain-contrib==0.0.4 langchain-core==0.1.8 langchain-openai==0.0.2 langsmith==0.0.79 llama_index==0.5.6 marshmallow==3.20.1 multidict==6.0.4 mypy-extensions==1.0.0 nest-asyncio==1.5.8 nltk==3.8.1 numexpr==2.8.8 numpy==1.26.3 openai==1.7.0 openapi-schema-pydantic==1.2.4 packaging==23.2 pandas==2.1.4 pexpect==4.9.0 ptyprocess==0.7.0 pydantic==1.10.8 pydantic_core==2.14.6 python-dateutil==2.8.2 python-dotenv==1.0.0 pytz==2023.3.post1 PyYAML==6.0.1 regex==2023.12.25 requests==2.31.0 setuptools==69.0.3 simple-term-menu==1.6.4 six==1.16.0 sniffio==1.3.0 soupsieve==2.5 SQLAlchemy==2.0.25 starlette==0.32.0.post1 tenacity==8.2.3 tiktoken==0.5.2 tqdm==4.66.1 typing-inspect==0.9.0 typing_extensions==4.9.0 tzdata==2023.4 urllib3==1.26.18 yarl==1.9.4
应用代码片段
import os import json import requests from dotenv import load_dotenv from langchain.prompts import PromptTemplate from langchain_contrib.prompts import ChainedPromptTemplate from langchain_openai import ChatOpenAI from langchain.agents import AgentExecutor, create_openai_functions_agent from langchain.tools import BaseTool from langchain.prompts import PromptTemplate, MessagesPlaceholder from langchain.memory import ConversationSummaryBufferMemory from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.chains import LLMSummarizationCheckerChain from pydantic import BaseModel, Field from bs4 import BeautifulSoup from fastapi import FastAPI load_dotenv() browserless_api_key = os.getenv("BROWSERLESS_API_KEY") serper_api_key = os.getenv("SERP_API_KEY") # 后续代码省略
解决方案
1. 替换langchain-contrib的依赖功能
langchain-contrib的ChainedPromptTemplate可以用LangChain官方的PipelinePromptTemplate替代,无需依赖第三方包:
# 原导入 # from langchain_contrib.prompts import ChainedPromptTemplate # 替换为官方实现 from langchain.prompts import PipelinePromptTemplate
官方PipelinePromptTemplate的用法与ChainedPromptTemplate完全兼容,直接替换即可。
2. 手动修复langchain-contrib的导入兼容问题
如果必须使用langchain-contrib的其他功能,可临时修改其源码:
- 找到langchain-contrib安装目录下的相关文件(如
prompts.py) - 将
from langchain.schema import BaseLanguageModel替换为from langchain_core.language_models import BaseLanguageModel - 保存后重新运行代码
3. 升级langchain-contrib到兼容版本
检查langchain-contrib的最新版本是否已适配LangChain 0.1.x,执行升级命令:
pip install --upgrade langchain-contrib
如果最新版本仍未适配,可提交Issue到其代码仓库请求更新。
4. 清理冲突依赖
移除旧版llama-index相关包(gpt-index和llama_index共存可能导致冲突):
pip uninstall -y gpt-index llama_index pip install llama-index --upgrade
确保llama-index版本兼容LangChain 0.1.x。
内容的提问来源于stack exchange,提问作者Ozzymandius
相关产品推荐
相关产品推荐

