跳到主要内容

22-官方API与参数语义手册

核对日期:2026-05-18
官方资料:Overview https://docs.langchain.com/oss/javascript/langchain/overview;Agents https://docs.langchain.com/oss/javascript/langchain/agents;Models https://docs.langchain.com/oss/javascript/langchain/models;Tools https://docs.langchain.com/oss/javascript/langchain/tools;Structured output https://docs.langchain.com/oss/javascript/langchain/structured-output;Runtime https://docs.langchain.com/oss/javascript/langchain/runtime

官方概念

本章不是 API 全量复制,而是把官方 TypeScript 文档中最常用、最容易误用的 API 参数拆成“语义、适用场景、边界、测试方法”。LangChain v1 的官方 API 设计围绕 Runnable、Agent Graph、Tool schema、Runtime context、Middleware 和 Structured output 展开。

如果只知道 API 名字,不知道参数语义,就会出现典型问题:Agent 能跑但工具乱调、结构化输出偶发失败、runtime context 泄露进 prompt、streaming 只处理文本不处理工具事件。

机制

Agent API 语义

参数/概念官方语义工程语义常见误用
modelAgent 使用的 chat model决定 tool calling、structured output、上下文长度、成本只写模型名,不锁 provider 和参数
toolsAgent 可调用工具列表工具暴露面和权限面把所有工具一次性暴露
systemPrompt / dynamic prompt系统指令或由 middleware 动态生成任务目标、输出要求、少量稳定规则把权限策略写进 prompt
responseFormat结构化输出 schema/strategy下游 API contract只测 happy path,不测 schema failure
middlewareAgent 生命周期拦截/包装逻辑动态模型、工具过滤、guardrails、trace中间件里藏大量业务规则
checkpointer保存短期会话/graph statethread 级恢复、HITL 暂停恢复用内存 checkpointer 上生产
store长期记忆存储跨会话用户画像、偏好、历史自动记住所有用户输入
contextSchemaruntime context 类型约束user/tenant/role/requestId 等控制面数据不校验 context,工具读到 undefined

典型初始化伪代码:

const contextSchema = z.object({
userId: z.string(),
tenantId: z.string(),
roles: z.array(z.string()),
requestId: z.string(),
});

const agent = createAgent({
model,
tools,
responseFormat: answerSchema,
middleware: [authMiddleware, piiMiddleware, tracingMiddleware],
contextSchema,
});

Model API 语义

能力语义适合验收
invoke单次完整响应分类、抽取、非流式问答断言响应结构、usage、错误
stream增量 chunkUI 打字机、长答案断言 done/error/chunk 协议
batch批量并发调用eval、离线抽取控制并发和失败隔离
maxRetriesSDK 层重试429、短暂网络失败不重试认证/参数错误
timeout单次请求超时防止请求挂死超时进入可恢复错误
temperature随机性创意任务高,抽取低评测任务建议低温
maxTokens输出 token 限制成本和长度控制超限时有截断策略
provider class使用 provider 专属参数reasoning、cache、baseURL、logprobs单独写 provider 回归

工程判断:model 参数不是“随便填个模型名”。它决定工具调用格式、结构化输出策略、token 预算、streaming 事件、错误码和成本。

Messages API 语义

Message 类型用途不应该承载
system稳定任务边界、角色、输出规则机密、权限、临时用户数据
user/human用户输入未经净化的可执行指令
assistant/AI模型输出、tool call 请求人工写入的业务真相
tool工具执行结果原始内部响应、堆栈、密钥

多轮对话中,messages 是“模型可见上下文”。不要把 runtime context、数据库连接、权限 token、内部 trace 全塞进去。真正的控制数据应放在 runtime context。

Tools API 语义

字段/能力官方语义工程要求
name模型引用工具的稳定名称短、明确、不可和其他工具混淆
description告诉模型何时用工具写触发条件和不适用条件
schema输入参数结构每个字段尽量有描述、枚举、范围
execute工具执行函数走网关、校验权限、记录审计
runtime context工具读取用户/租户/配置不进入模型可见内容
return object结构化工具结果给后续模型或业务层消费
return command更新 graph state需要考虑 reducer 和并发

工具 schema 示例:

const searchTicket = tool(
async ({ ticketId }, runtime) => {
const { userId, tenantId } = runtime.context;
return ticketGateway.search({ ticketId, userId, tenantId });
},
{
name: "search_ticket",
description: "查询当前租户下的工单。仅当用户明确提供工单 ID 时使用。",
schema: z.object({
ticketId: z.string().regex(/^TICKET-[0-9]+$/).describe("工单 ID"),
}),
},
);

Structured Output API 语义

参数/策略语义适用风险
responseFormat: schema自动选择策略起步最快需要确认最终选择
providerStrategy(schema)provider 原生 schema 输出原生支持强的模型provider 兼容性
toolStrategy(schema)用 tool call 产出结构支持 tool calling 的模型多一次 tool call 语义
handleErrorschema 失败时反馈模型抽取/分类脏数据错误信息不能泄露内部规则
union schema多种结构之一多任务输出模型可能同时给多个结构

结构化输出不是“永不失败”。你必须定义失败时是重试、降级、拒答,还是把错误返回给人工处理。

Runtime API 语义

Runtime 数据生命周期谁能读是否进 prompt
userId单次请求/会话middleware、tools通常不直接进
tenantId单次请求/会话retriever、tools不直接进
roles单次请求/会话tool filter、ACL不直接进
requestId单次请求tracing、audit不进
featureFlags单次请求/部署middleware不直接进
store跨会话tools、middleware只注入筛选后的内容
executionInforun/threadaudit、debug不进

Streaming API 语义

事件/模式表达什么UI 怎么处理测试怎么写
token/message chunk模型增量输出append 到答案区域拼接后等于最终答案
updateAgent 步骤更新显示进度状态断言工具调用顺序
custom工具自定义进度进度条/日志面板断言事件结构
error流中错误展示可恢复错误断言不会卡 loading
interruptHITL 暂停显示审批 UI断言 thread id 保存
done结束事件收尾、保存结果断言只出现一次

Python 差异

Python 使用 create_agent、Pydantic/TypedDict、snake_case 参数和不同 provider 包;TypeScript 使用 createAgentzod、JS provider 包和 contextSchema。概念对应,不代表 API 可以逐字翻译。双栈项目应统一 JSON schema、eval case 和 trace 字段,而不是统一代码写法。

工程边界

  • API 参数必须进入代码审查,不要让 prompt 改动绕过 review。
  • 工具 schema 是模型和业务之间的契约,字段变更要当 breaking change。
  • runtime context 是控制面数据,默认不暴露给模型。
  • streaming 是协议,不是 UI 效果;必须定义错误和中断事件。

常见反模式

反模式后果
只关注 createAgent真实问题会落在 model/tool/middleware/context 上
schema 太宽松模型产生看似合法但业务不可用的参数
工具返回大段原始 JSON上下文膨胀,敏感字段泄露
runtime context 未校验工具在 undefined 上执行错误逻辑
streaming 无 done/error前端卡住,结果不可审计

练习任务

  1. LangChain/src/tools/tool.ts 写一份工具字段审查清单。
  2. LangChain/src/runtime/types.ts 增加 requestId,并让 audit 记录它。
  3. 给学习手册的离线 AgentMiddleware 增加 wrapToolCall 概念,并写测试。