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

基于Langchain的项目同时使用OpenAI与Openrouter的版本兼容问题咨询

解决Langchain同时集成OpenAI与Openrouter的版本冲突问题

以下是按优先级排序的最优解决方案:

方案一:指定兼容版本组合

先确认langchain-openrouter依赖的langchain-core版本范围,再匹配对应版本的langchain-openai,实现三者兼容:

  1. 查看langchain-openrouter的依赖要求:执行命令 pip show langchain-openrouter,查看Requires字段;或直接查看PyPI上该包的依赖说明。
  2. 查找符合该langchain-core版本范围的langchain-openai版本,可通过PyPI的版本历史页面筛选。
  3. 安装指定版本的依赖包,示例命令:
    pip install langchain-core==0.1.30 langchain-openai==0.1.10 langchain-openrouter==0.0.2
    
    (注:版本号需根据实际兼容情况调整)

方案二:自定义OpenRouter LLM类

直接基于Langchain核心的LLM基类实现OpenRouter的调用逻辑,完全摆脱langchain-openrouter包的版本限制:

  1. 导入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"]
    
  2. 在项目中直接使用CustomOpenRouterLLM类,与langchain-openai的组件无缝配合,完全兼容当前langchain-core版本。

方案三:Fork并更新langchain-openrouter依赖

若需要保留langchain-openrouter的原有封装功能,可自行修改其依赖版本限制:

  1. Fork官方的langchain-openrouter仓库到自己的GitHub账号。
  2. 修改仓库中setup.py或pyproject.toml文件里的langchain-core和langchain-openai版本范围,使其适配项目当前使用的版本。
  3. 安装修改后的包,示例命令:
    pip install git+https://github.com/你的用户名/langchain-openrouter.git
    

最优方案选择建议

优先尝试方案一,操作简单且无需修改代码;若找不到兼容版本组合,优先选择方案二,自定义实现灵活性最高且无后续版本依赖问题;方案三作为备选,适合需要复用langchain-openrouter原有逻辑的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.06 13:12:33