🎉 新版站点已上线 — 新用户请在 v2.cloudmist.cloud 注册使用,本站教程均以新站地址为准 · 老用户账号已迁移完成,用原用户名/邮箱 + 原密码可直接登录 新站(登不上请在用户名后加 _82350),原站余额可继续在 api.cloudmist.cloud 用完,新站需重建令牌并改用新站 base_url
首页 › 教程 · 文章 › LangChain ChatOpenAI 怎么接第三方 API?消息输入与返回结果验收

LangChain ChatOpenAI 怎么接第三方 API?消息输入与返回结果验收

云岚API · 教程 · 更新于 2026-10-25

LangChain 的 ChatOpenAI 可以配置第三方地址,但还要匹配协议、模型和响应字段。普通 invoke(messages) 返回 AIMessage,应分别读取文本、工具调用与用量,不能照搬原始 SDK 的 choices[0]。本文核对 Python langchain-openai 1.7.2 与 langchain-core 1.6.10 的相关源码,资料日期为 2026-10-25;未安装运行 LangChain,也未调用云岚API。

先固定包版本和本次接口

在自己的项目环境用 python -m pip show langchain-openai langchain-core openai 记录实际版本。本文讨论 from langchain_openai import ChatOpenAI,不是 JavaScript 同名类,也不是完整 Agent。依赖版本以项目锁文件为准,不要为了照抄示例直接升级生产环境。1.7.2 依赖声明

官方说明 ChatOpenAI 面向 OpenAI 标准;第三方自行扩展的推理等字段不保证被提取或保留,需要这类字段时应查对应厂商集成。模型能普通聊天,不等于其工具、结构化输出和 Responses 都支持。兼容范围

把消息列表交给 invoke

先用一条有明确要求的短文本。下面是待配置的非流式示例:环境变量需由你在本地提供,运行会发起真实请求;本文未运行它。模型 ID 必须来自当前服务说明,不能填写展示名。

import os
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model=os.environ["APP_MODEL_ID"],
    api_key=os.environ["APP_API_KEY"],
    base_url="https://v2.cloudmist.cloud/v1",
    use_responses_api=False,
    max_retries=0,
    timeout=30,
)
messages = [
    {"role": "system", "content": "把通知改写得礼貌,只输出一句话。"},
    {"role": "user", "content": "下午三点开会"},
]
reply = llm.invoke(messages)
print(reply.text)

这里明确选择 Chat Completions,关闭本例 SDK 层的自动重试,便于核对单次调用;不保证网关内部没有重试。地址来自本站协议与 base URL 说明,并非该组合已通过测试。角色与正文直接构造为 Python 对象,让库序列化,不要手拼含用户输入的 JSON 字符串。消息输入格式

再次调用同一个 llm 也不会凭空获得前文。需要多轮时,按历史与状态教程明确保存、追加和隔离消息;本页先验收单轮。

AIMessage 里哪些字段分别处理?

字段 用途与检查
reply.text 获取显示文本;不是整份响应,也不代表任务已完成
reply.content / content_blocks 原始内容或标准化内容块;正文可能不是单一字符串
reply.tool_calls 待处理调用的名称、参数和 ID;不是执行结果
reply.invalid_tool_calls 有解析错误的调用,先保留错误,不交执行器
reply.usage_metadata 可用时的标准化 token 数;缺失不等于零
reply.response_metadata 响应相关元信息;按实际协议核对结束信息

当前 .text 会提取文本,其他类型内容仍须从原消息核对。不要先把整条消息压成字符串,再发现工具参数或用量已经丢失。文本属性源码、AIMessage 字段

接收顺序可以是:先查异常、拒绝和未完成状态,再查无效调用及待执行工具,最后验收最终文本。bind_tools 只是绑定声明,不替应用完成本地函数;工具分支继续看执行与回传流程。未知状态先留待核,不能只因有字就入库。

为什么加了参数后开始请求 Responses?

在核对版本中,use_responses_api 未明确设置时,部分模型或参数会触发 Responses 路由,例如 use_previous_response_id=True、reasoning 或内置工具。output_version="responses/v1" 也参与路由判断,不能只当显示格式开关。本文示例的 False 只选择路线,不能让不支持的功能变得兼容。路由实现

需要 Responses 时,先核对服务、模型、参数,再单独设置和验收。保存配置值与实际观察到的请求路径;观察不到就留空。不要将接口切换后的问题统一归因于 Key,也不要直接套用 Chat Completions 的结束字段。官方集成说明

怎样留下可以复查的结果?

下载 LangChain 返回结果核对包,包含静态清单、人工场景和空白 CSV。按同一配置记录包版本、接口、输入角色、内容形状、工具分支、结束信息、文本任务结论及服务端关联记录。缺项填待核,不写成通过。

验收“一句礼貌通知”时,除了取得完整正文,还应核对是否满足原要求。用量有值也只是记录,实际费用另按用量与账单对照;一次成功不能证明全部模型功能。资源不调用接口,不导入 LangChain,也不含真实用量。

常见问题

content 为空,是不是接口坏了?

不一定。先看工具调用、解析错误、拒绝及完成状态。工具请求可能没有最终文本;没有这些证据时也不能直接判成功,应保留脱敏响应查原因。

usage_metadata 没有值,就没有扣费吗?

不能这样判断。字段缺失只能记作未知,需要按请求时间和可用标识查服务记录与账单,不能自行补零。

为什么我的 invoke 返回字典或其他对象?

先看调用对象是否已套了结构化输出、解析器或其他链。本文讲直接调用聊天模型;结构化包装的结果要按它自己的约定处理,并继续做JSON 结构与事实验收。

换成云岚API只改 base_url 就够了吗?

还要确认 Key 所属站点、精确模型 ID、协议和参数。先完成本文的短文本分支,再逐项加入实际需要的能力;官方 OpenAI 集成能力表不能直接当作本站渠道支持表。

注册后查看试用额度与领取条件

按当前模型列表选择服务,先核对令牌分组、接口协议与价格,再用自己的任务验证。

注册并查看试用条件 →已有账号?进入控制台创建令牌 · 调用报错先排查
注册、充值和调用均在云岚API 新业务站完成
相关内容
本站为云岚API 注册、登录与充值入口站点 · 模型与价格以控制台实时数据为准 · 更新于 2026-10-25
Claude、GPT、Gemini 等名称为各自权利人商标,本站为独立第三方 API 中转/聚合服务,与上述厂商无隶属或授权关系。