跳到主要内容

01-模型消息与调用

核对日期:2026-05-18
官方资料:Models https://docs.langchain.com/oss/javascript/langchain/models;Messages https://docs.langchain.com/oss/javascript/langchain/messages

官方概念

LangChain 的 chat model 接口以 messages 作为主要输入,message 保留 role、content 和工具相关元数据。这样做的原因是模型调用不只是字符串补全,而是多角色上下文、工具调用、流式输出和结构化响应的统一协议。

机制

模型接口负责 provider 抽象,但不消除 provider 差异。工具调用格式、结构化输出能力、token 计费、streaming 事件和错误码都可能不同。

TypeScript 写法

本手册离线示例:

npm run examples

对应文件:src/examples/01-chat-model.ts

真实 LangChain 项目中,通常会从官方 provider 包初始化模型,再把 messages 传入 model 或 agent。密钥必须通过环境变量注入,不写入源码。

Python 差异

Python 示例常见 init_chat_model("provider:model") 或 provider 专属模型类。TypeScript 侧会使用对应 JS/TS provider 包。不要假设 Python 的 import path 可直接翻译到 TypeScript。

工程边界

  • 把模型选择做成配置,但关键任务要按 provider 分别回归。
  • message history 要控制 token 预算,不能无限拼接。
  • system prompt 不应承载权限逻辑,权限必须在工具、检索和业务层执行。

常见反模式

反模式后果
把所有上下文塞进 user messagerole 边界丢失,工具和安全策略难维护
只测一个 provider换模型后 structured output 或 tool call 可能退化
在日志里完整记录敏感 prompttrace 变成敏感数据仓库

练习任务

  1. 修改 src/examples/01-chat-model.ts 的 messages,观察输出长度变化。
  2. 为 message 增加一个 metadata 字段前,先说明它是否应进入模型上下文。
  3. 写一个测试断言:assistant response 不能包含密钥形态字符串。