基于Langchain的项目同时使用OpenAI与Openrouter的版本兼容问题咨询
解决Langchain同时集成OpenAI与Openrouter的版本冲突问题
以下是按优先级排序的最优解决方案:
方案一:指定兼容版本组合
先确认langchain-openrouter依赖的langchain-core版本范围,再匹配对应版本的langchain-openai,实现三者兼容:
- 查看
langchain-openrouter的依赖要求:执行命令pip show langchain-openrouter,查看Requires字段;或直接查看PyPI上该包的依赖说明。 - 查找符合该
langchain-core版本范围的langchain-openai版本,可通过PyPI的版本历史页面筛选。 - 安装指定版本的依赖包,示例命令:
(注:版本号需根据实际兼容情况调整)pip install langchain-core==0.1.30 langchain-openai==0.1.10 langchain-openrouter==0.0.2
方案二:自定义OpenRouter LLM类
直接基于Langchain核心的LLM基类实现OpenRouter的调用逻辑,完全摆脱langchain-openrouter包的版本限制:
- 导入Langchain核心模块,自定义LLM子类并实现必要方法,示例代码:
import requests from langchain_core.language_models.llms import LLM from langchain_core.callbacks.manager import CallbackManagerForLLMRun class CustomOpenRouterLLM(LLM): model_name: str api_key: str base_url: str = "https://openrouter.ai/api/v1" @property def _llm_type(self) -> str: return "openrouter" def _call( self, prompt: str, stop: list[str] | None = None, run_manager: CallbackManagerForLLMRun | None = None, **kwargs, ) -> str: headers = { "Authorization": f"Bearer {self.api_key}", "Content-Type": "application/json" } # 根据模型类型选择聊天或补全接口 endpoint = "/chat/completions" if "chat" in self.model_name.lower() else "/completions" payload = { "model": self.model_name, "prompt": prompt if endpoint == "/completions" else [{"role": "user", "content": prompt}], "stop": stop or [], **kwargs } response = requests.post(f"{self.base_url}{endpoint}", headers=headers, json=payload) response.raise_for_status() result = response.json() return result["choices"][0]["message"]["content"] if endpoint == "/chat/completions" else result["choices"][0]["text"] - 在项目中直接使用
CustomOpenRouterLLM类,与langchain-openai的组件无缝配合,完全兼容当前langchain-core版本。
方案三:Fork并更新langchain-openrouter依赖
若需要保留langchain-openrouter的原有封装功能,可自行修改其依赖版本限制:
- Fork官方的
langchain-openrouter仓库到自己的GitHub账号。 - 修改仓库中
setup.py或pyproject.toml文件里的langchain-core和langchain-openai版本范围,使其适配项目当前使用的版本。 - 安装修改后的包,示例命令:
pip install git+https://github.com/你的用户名/langchain-openrouter.git
最优方案选择建议
优先尝试方案一,操作简单且无需修改代码;若找不到兼容版本组合,优先选择方案二,自定义实现灵活性最高且无后续版本依赖问题;方案三作为备选,适合需要复用langchain-openrouter原有逻辑的场景。
内容的提问来源于stack exchange,提问作者MaxPC08
相关产品推荐
相关产品推荐

