在 LangChain 中接入 CaMeL Hub:一个 Key 调用 GPT / Claude / Gemini / DeepSeek

LangChain 是目前使用最广的大模型应用开发框架(Python、JS 都有),链式调用、Agent、RAG 管线都建立在一个可随意替换的 Chat Model 接口之上。把它内置的 OpenAI 兼容类 ChatOpenAI 指向 CaMeL Hub 后,你原有的链、Agent、工具调用代码不需要改动——只是 model="..." 现在可以填 GPT-5.5、Claude Sonnet 5、Gemini 3.1 Pro、DeepSeek V4 Flash,或 CaMeL Hub 收录的 480 余个模型中的任意一个,统一用一把 Key、一个 base_url、一张账单结算。

LangChain ↗

  1. 安装 LangChain 的 OpenAI 集成包

    LangChain 通过 langchain-openai 这个包与任何 OpenAI 兼容端点通信,CaMeL Hub 正是其中之一。和基础的 langchain 包一起装上即可。
    pip install -U langchain langchain-openai
  2. 在 CaMeL Hub 创建 API Key

    登录 CaMeL Hub 控制台,在左侧菜单找到通常叫“令牌”或“API Keys”的页面,新建一个令牌并立即复制完整的 sk-... 密钥——它只会完整显示这一次。
  3. 把 OpenAI 客户端配置指向 CaMeL Hub

    LangChain 的 OpenAI 系列类只需要两个配置项:密钥和 base URL。可以设成环境变量(下一步也能直接传参)。CaMeL Hub 的 OpenAI 兼容端点要求带完整路径的 /v1,只填主域名 https://api.camel-hub.com 是不行的。
    export OPENAI_API_KEY="sk-你的CaMeL-Hub密钥"
    export OPENAI_BASE_URL="https://api.camel-hub.com/v1"
  4. 用 ChatOpenAI 调用任意模型

    从 langchain_openai 导入 ChatOpenAI,把 model 设成任意 CaMeL Hub 支持的模型名。如果上一步已经设置了环境变量,这里不需要再传 base_url,当然显式传入也可以。
    from langchain_openai import ChatOpenAI
    
    llm = ChatOpenAI(
        model="claude-sonnet-5",
        base_url="https://api.camel-hub.com/v1",  # 若已设置 OPENAI_BASE_URL 可省略
        temperature=0.7,
    )
    
    response = llm.invoke("用一句话解释 base_url 覆盖的作用。")
    print(response.content)
  5. 只改 model 字符串即可切换厂商

    因为所有厂商都通过同一个 OpenAI 格式端点暴露,这里完全不需要 LangChain 的 ChatAnthropic 或 ChatGoogleGenerativeAI——只改 model 字符串,ChatOpenAI 一个类就够用。
    for model in ["gpt-5.5", "claude-sonnet-5", "gemini-3.1-pro", "deepseek-v4-flash"]:
        llm = ChatOpenAI(model=model)
        print(model, "->", llm.invoke("用五个词打个招呼。").content)
  6. 流式输出与工具调用

    流式输出和工具/函数调用的用法与直连 OpenAI 完全一致。逐 token 输出用 .stream(),Agent 场景用 .bind_tools()——具体某个模型是否支持函数调用或视觉,先看该模型在 CaMeL Hub 页面上的 Capabilities 栏。
    for chunk in llm.stream("写一首关于 API 网关的两行俳句。"):
        print(chunk.content, end="", flush=True)
  7. LangChain.js(TypeScript)同样适用

    Node/TypeScript 版 SDK 通过 @langchain/openai 遵循同样的模式,基于它搭建的 LangGraph.js 链和 Agent 不需要额外改动。
    import { ChatOpenAI } from "@langchain/openai";
    
    const llm = new ChatOpenAI({
      model: "claude-sonnet-5",
      apiKey: process.env.OPENAI_API_KEY,
      configuration: { baseURL: "https://api.camel-hub.com/v1" },
    });
    
    const res = await llm.invoke("hello");
    console.log(res.content);

常见问题

Claude、Gemini 模型是不是该用 LangChain 的 ChatAnthropic / ChatGoogleGenerativeAI?

不需要,也不能用。CaMeL Hub 把所有厂商统一封装成一个 OpenAI 格式端点,LangChain 里只用 ChatOpenAI(或 init_chat_model(..., model_provider="openai"))即可,换模型只改 model 字符串。用厂商专属的 Chat 类会尝试直连 Anthropic、Google 官方接口,CaMeL Hub 的密钥在那边不认。

model= 参数该填什么名字?

填 CaMeL Hub 侧的模型 slug——也就是模型详情页或控制台模型列表里显示的名字(例如 claude-sonnet-5、gpt-5.5、deepseek-v4-flash),不是厂商自己的模型 ID,网关不识别厂商原生 ID。

LangChain 报 401 Unauthorized 怎么办?

先确认 OPENAI_API_KEY(或传给 ChatOpenAI 的密钥)复制完整、没有多余空格或换行,再确认 OPENAI_BASE_URL / base_url 末尾带了 /v1。base URL 漏掉 /v1 是“curl 能通、LangChain 报 401”最常见的原因。

LangChain 的 Agent、bind_tools 工具调用能在 CaMeL Hub 上用吗?

能,前提是所选模型的 Capabilities 里列出了函数调用(function-calling)。OpenAI 兼容端点会按 OpenAI 的格式转发 tool 定义和 tool_call 结果,bind_tools()、create_tool_calling_agent,以及基于它们的 LangGraph agent 都无需改动。