ModelSiteAPI

LangChain

用 ChatOpenAI 与 ChatAnthropic 调用 ModelSite:base URL、为什么 Anthropic 要带 Bearer 头,以及推理 token 的提示

状态:已对 ModelSite 实测,langchain-openai 1.7.2 与 langchain-anthropic 1.7.6,2026-10-24:两者都回答正确。

OpenAI 格式

import os
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model="glm-5.3-flash",
    base_url="https://api.modelsite.ai/v1",
    api_key=os.environ["MODELSITE_API_KEY"],
    max_tokens=400,
)
print(llm.invoke("Reply with the single word: pong").content)   # pong

Anthropic 格式

ChatAnthropic(api_key=...) 会把 Key 放进 x-api-key 头,平台不读这个头。我们复现了对应的 401 missing or invalid authorization header。请改用 Bearer 头发送 Key。

import os
from langchain_anthropic import ChatAnthropic

llm = ChatAnthropic(
    model="glm-5.3-flash",
    base_url="https://api.modelsite.ai",          # 不带 /v1
    api_key="unused",                              # 类要求必填,ModelSite 不读它
    default_headers={"Authorization": f"Bearer {os.environ['MODELSITE_API_KEY']}"},
    max_tokens=400,
)
print(llm.invoke("Reply with the single word: pong").content)

这种写法请求成功。返回的内容是一个列表,文本前面有一个 thinking 块。

提示:给推理模型留足空间

glm-5.3-flash 会先思考再回答,思考也计入 max_tokens。max_tokens=20 时我们的 OpenAI 格式调用返回了空字符串,改成 400 就返回了 pong。回答很短时也请给几百个 token 或更多。

限制

LangChain 的流式输出、工具调用和嵌入没有在这次验证范围内。其他框架见 SDK、框架与客户端。

本页内容