创建时间: 2026-09-02最后更新: 2026-09-02

1. 问题来源

上一节为了让 Agent 的创建代码稍微简单一点,我们把读取配置、创建 ChatModel 和创建 Agent 都放在了当前模块顶层中执行:

fixed-agent.ts
1
const config = await readRequiredActiveLlmConfig()
2
const model = createChatModel(config)
3
4
const agent = createAgent({
5
model,
6
tools: [],
7
systemPrompt: SYSTEM_PROMPT,
8
})

这样写有一个很清楚的优点:模块加载时只创建一次 Agent,React 重新渲染或用户再次发送消息都不会重复执行 createAgent()

但模型也在同一时刻固定下来了。即使聊天工具栏允许用户选择另一个模型,已经创建好的 Agent 仍然持有原来的 ChatModel。界面显示的是新选择,真正收到请求的却可能还是旧模型。为了避免这种不一致,上一节关闭了模型切换。

如果把 createAgent() 移回发送函数内部,当然也能让每次发送使用新的模型,但这会把 Agent 的结构和每次请求的设置混在一起。我们真正想改变的是本次模型调用,而不是重新定义整个 Agent。

wrapModelCall 正好提供了这个边界:Agent 保持不变,每次调用模型之前再决定本次使用哪个 ChatModel。

正在验证登录状态
请稍候,验证完成后将继续显示文章内容