问题与目标
直接调用模型 API 时,请求字段、响应对象和流式事件容易与服务商绑定。LangChain 的价值不是“让一行代码变成五行”,而是为模型、消息、提示词、解析器和执行配置提供可组合接口。
本篇使用 LangChain 1.x 风格完成一条最小链路:输入运行事件,生成一句事实摘要,最终返回字符串。示例以 OpenAI 兼容端点说明配置,但兼容接口不保证每项能力完全一致。
核心概念
- Chat Model:接收消息并返回
AIMessage,不是普通字符串函数。 - Message:用
system、user、assistant等角色保存内容与语义。 - Prompt Template:把变量填入稳定的消息骨架,避免手工拼接散落在代码中。
- Output Parser:把消息转换成上层需要的字符串或对象。
- RunnableConfig:传递标签、元数据、并发等运行配置,不承载业务输入。
Prompt | Model | Parser 只是数据流。模型能替换,不代表不同模型的上下文、工具调用和结构化输出能力完全等价,切换后仍需回归测试。
可运行实现
安装依赖并配置环境变量:
bash
python -m pip install "langchain>=1,<2" "langchain-openai>=1,<2"
export MODEL_API_KEY="replace-with-your-key"
export MODEL_API_BASE="https://provider.example/v1"
export MODEL_NAME="provider-model-name"
python
import os
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
prompt = ChatPromptTemplate.from_messages([
("system", "只根据输入整理事实,不推测原因;输出不超过60字。"),
("human", "事件:{event}"),
])
model = ChatOpenAI(
model=os.environ["MODEL_NAME"],
api_key=os.environ["MODEL_API_KEY"],
base_url=os.environ["MODEL_API_BASE"],
temperature=0,
timeout=30,
max_retries=2,
)
chain = prompt | model | StrOutputParser()
result = chain.invoke(
{"event": "节点 AX-3 网络抖动,10:42 切换备用线路后恢复。"},
config={
"tags": ["stage07", "summary"],
"metadata": {"prompt_version": "summary-v1"},
},
)
print(result)
预期得到一句只包含原始事实的摘要。调试模板时可先单独检查输入:
python
messages = prompt.invoke({"event": "节点 AX-3 已恢复"})
for message in messages.messages:
print(type(message).__name__, message.content)
这一步能区分“模板组装错误”和“模型回答错误”。上线前记录实际安装版本:
bash
python -m pip freeze | grep -E '^(langchain|pydantic)'
常见问题与排查
AIMessage 不能直接当字符串处理
模型直接调用返回消息对象,可访问 .content 或 .text;链尾加入 StrOutputParser() 后才得到字符串。不要对消息对象盲目执行字符串方法。
变量名不一致
模板使用 {event},调用就必须传入 event。先运行 prompt.invoke() 检查模板变量和最终消息,再排查模型。
更换服务商后参数报错
逐项核对模型名、Endpoint、认证方式、最大输出参数和流式事件。兼容通常只覆盖主要协议,不等于功能、错误码和 Usage 字段一致。
把密钥写在示例中
使用环境变量或密钥服务,提交前检查 .env、Notebook 输出和 Git 历史。素材中的演示密钥也不应复制到新文章。
小结
最小 LangChain 链把“消息如何构造、模型如何调用、结果如何交付”拆成三个可检查步骤。统一接口降低了替换成本,但真正的可维护性仍来自版本记录、输入输出契约和跨模型回归测试。
许可协议:CC BY-NC 4.0
更新于 1 小时前
觉得文章有帮助?点个赞吧!
0 条评论


