2026 年 openlux langgraph 配置实操步骤:从环境变量到流式输出
2026 年 openlux langgraph 配置实操步骤:从环境变量到流式输出
把 API Key 写死在代码里、把模型名写死在节点里,是 LangGraph 项目最常见的迁移隐患。
这篇按实操顺序走一遍 openlux langgraph 配置:先准备依赖与环境变量,再把模型挂进图节点,最后把流式输出从头接到尾。文中出现的变量名、参数名和接口地址以 openlux 官方文档与你控制台里显示的信息为准,不同接入方式可能略有差异;一旦遇到不一致,先以控制台为准,再回头调整代码。
一、准备阶段:依赖与环境变量
装什么依赖
典型的组合是 langgraph、langchain-core,再加上一个能对接兼容接口的客户端,例如 langchain-openai。如果 openlux 提供了官方 SDK,优先按官方文档安装,避免自己拼装请求。
pip install -U langgraph langchain-openai python-dotenv
环境变量放在哪里
密钥、接口地址、模型名都放进环境变量,本地用 .env,线上用容器变量或密钥管理服务,不要写进仓库、前端代码或日志。
export OPENLUX_API_KEY="你的密钥"
export OPENLUX_BASE_URL="https://控制台给出的接口地址"
export OPENLUX_MODEL="控制台显示的模型名称"
配置时有三个细节最容易出错:一是 Base URL 结尾要不要带 /v1,以文档示例为准;二是模型名称的大小写和分隔符必须完全一致;三是有些接入方式需要额外请求头,这类要求通常写在文档的鉴权章节里,不要凭经验省略。
二、把模型挂进 LangGraph
初始化一个可复用的模型对象
把环境变量读进客户端,不要让节点自己去拼配置。
import os
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model=os.environ["OPENLUX_MODEL"],
api_key=os.environ["OPENLUX_API_KEY"],
base_url=os.environ["OPENLUX_BASE_URL"],
temperature=0.3,
)
如果客户端不支持 base_url 这个参数名,就按它文档里的写法设置,不要改成硬编码域名。做完这一步,可以先只调一次 llm.invoke,确认密钥与地址没问题,再进图里调。
在节点里调用,而不是写死模型
from langgraph.graph import StateGraph, START, END, MessagesState
def call_model(state):
resp = llm.invoke(state["messages"])
return {"messages": [resp]}
builder = StateGraph(MessagesState)
builder.add_node("model", call_model)
builder.add_edge(START, "model")
builder.add_edge("model", END)
graph = builder.compile()
更推荐的做法是把 llm 通过配置或依赖注入的方式传进节点,这样换模型时只改环境变量,不用动图结构。多智能体或多模型协作时,这一点尤其重要,否则每加一个模型就要复制一份节点代码。
三、流式输出:从图到前端
LangGraph 的流式能力和底层模型的流式能力是两件事,需要分别确认。常用的三种模式可以这样分工:
stream_mode="messages":适合逐 Token 输出,聊天类界面用这个。stream_mode="updates":适合观察每个节点执行完后的状态变化,调试多步流程用这个。stream_mode="values":适合查看每一步的完整状态,排查上下文丢失用这个。
for chunk in graph.stream(
{"messages": [{"role": "user", "content": "写一段产品介绍"}]},
stream_mode="messages",
):
print(chunk, flush=True)
如果结果是“攒完一次性返回”而不是逐字出现,一般是三种原因:客户端没有开启流式解析、中间层做了缓冲、或者请求里被加入了会关闭流式的参数。排查时先保持最小脚本,只打印每个 chunk 的时间戳,确认分块是否真的在陆续到达。
四、配置项自查表
| 配置项 | 作用 | 检查方法 |
|---|---|---|
| OPENLUX_API_KEY | 调用鉴权,泄漏需要立即轮换 | 确认未被提交进仓库,报错 401 时优先重查 |
| OPENLUX_BASE_URL | 决定请求打到哪个接口 | 与文档示例逐字符比对,尤其是结尾路径 |
| OPENLUX_MODEL | 决定调用哪个模型及其参数支持范围 | 用控制台的模型清单核对完整名称 |
| 超时与重试参数 | 影响长任务稳定性与重复消耗 | 对长输出场景单独测一次超时阈值 |
| stream 相关参数 | 决定逐 Token 输出还是整体返回 | 打印 chunk 时间戳,确认分块到达 |
五、常见报错与排查顺序
- 401 或 403:先查密钥是否正确、是否过期、请求头是否按文档要求携带。
- 404:多半是 Base URL 少了或多了一段路径,也可能是模型名不在可用清单里。
- 400 参数不支持:把请求参数精简到最小集合,再逐个加回,定位是哪个字段被拒绝。
- 流式无输出或中途断开:先用最短提示词测试;仍然复现,再检查网络中间层是否做了缓冲或超时。
- 余额或额度类提示:到控制台确认余额与用量,不要只按报错文案猜。
哪些参数被支持、哪些行为会额外计费,都以 openlux 的官方文档和控制台页面为准;网络上流传的示例代码可能对应的是旧版本参数。
六、多环境、多模型怎么管
真实项目里通常不止一个模型:规划用推理能力强的,改写用便宜的,摘要用长上下文友好的。如果每换一个模型就要改一次接入地址和密钥,配置成本会很快超过模型本身的费用。千聚AI中转站 这类 AI 中转站的思路是把接口收敛成一层:一个 Base URL 加一套 API Key,按任务选择不同模型,Key、余额和调用情况在同一个控制台里管理,开发、测试、生产可以各用一个 Key 分开计量。具体的模型清单、协议兼容方式和计费规则,可以在 千聚官网 控制台里查看后,再决定要不要接入。
无论用哪种方式,建议保留一个最简测试脚本:一个环境变量、一次 invoke、一次 stream。以后升级依赖或更换模型,先跑这个脚本,能省掉大量“到底是谁变了”的排查时间。
配好环境变量之后,先跑通一次流式调用
如果你希望用一套接口地址管理 LangGraph 里的多个模型,可以注册千聚账号,在控制台获取 API Key、查看可用模型,然后按本文步骤完成首次流式测试。