session.set({ model })
本地 SDK Session 如何显式绑定默认模型实例
session.set({ model })
session.set({ model }) 让本地 SDK Session 使用自己的 AgentModel 覆盖 Agent 模型。这里可以直接传入 AI SDK LanguageModel 或 City CityModel。
await session.set({
model: openai.responses("gpt-5"),
});运行中切换何时生效
session.set() 成功返回表示新配置已经写入并进入当前 Session 的有序输入队列,不表示正在进行的 provider 请求会被替换。
- 当前流式响应和正在执行的工具继续使用原模型
- 新模型在下一个 Session step 检查点生效;如果当前 Session turn 先结束,则在下一个 Session turn 开始时生效
- 配置修改与运行中追加的 steer prompt 按入队顺序一起提交
- 模型切换生效时,Session timeline 会产生 completed action message
因此,配置 API 的返回值表达“修改是否成功”,action message 表达“修改在哪个 Session turn 的 step 检查点生效”。Timeline 只承担观测职责:action 写入失败不会回滚已经生效的配置,SDK 会记录 warning。
控制 Action 与 Mutation
set() 的第二个可选参数只控制配置提交后的可观测结果,不影响配置写入和检查点生效:
await session.set(
{ model },
{ persist_action: false, publish_mutation: false },
);persist_action默认为true;设为false时不创建配置 Action Message。publish_mutation默认跟随persist_action;设为false时可以保留历史 Action,但不向subscribe()发布对应 Mutation。persist_action=false时不能设置publish_mutation=true,因为 Message Mutation 必须对应 canonical Message。- 重复设置相同模型身份不会创建新的配置 Action;重启后传入同一模型只会重新绑定运行时实例。
Session 初始化或恢复可关闭两项可观测输出;用户主动切换模型通常保留默认选项。
什么时候需要它
适用于这些场景:
- 你在纯 SDK 嵌入模式下使用
@downcity/agent - 你直接管理本地 Session
Agent 默认模型
多个 Session 使用同一个模型时,直接在 Agent 上提供实例:
const agent = new Agent({
id: "repo-helper",
workspace: new Workspace({ path: "/path/to/project" }),
model,
});Session 没有显式模型时会回退到该 Agent 模型;设置后则优先使用自己的模型。模型实例不会持久化。
为什么会这样设计
因为本地 SDK 更像一个嵌入式执行壳:
- agent 负责路径、工具、plugin、会话落盘
- 具体用哪个运行中的模型实例,由调用方决定
这让本地 SDK 更灵活,但也把“模型是否准备好”的责任明确交给了调用方。
如果不设置会怎样
如果 Agent 和本地 Session 都没有模型实例,执行会明确失败。
远程 session 呢
远程 Session 不提供模型设置 API。远程客户端只发送 prompt;服务端创建本地 Agent 时传入模型实例。
Downcity Agent 项目呢
如果你是在正常的 Downcity Agent 项目里工作,模型通常应该来自:
- Agent config
execution.modelId - 已连接的
Federation AIService
这时不应把 session.set({ model }) 当成默认用法。