AgentOverview
Agent 执行模型
理解 Agent 如何绑定模型、创建会话,并复用统一执行内核
Agent 执行模型
当前版本的项目 agent 只有一种项目执行绑定方式:api。
当前支持的执行绑定
{
"execution": {
"type": "api",
"modelId": "quality"
}
}含义是:
- 当前项目使用已连接 City AIService 中的某个模型
- 项目本身只保存
modelId - 模型的 provider、密钥和模型名由 City 侧模型目录管理
这一点和过去一些“项目内直接写 provider 配置”的做法很不一样。当前实现里,项目只声明执行目标,不重复保存完整模型定义。
运行时如何工作
agent 启动后,大致会做这些事情:
- 读取项目配置
- 解析
execution.modelId - 从 City AIService 解析出最终模型
- 创建 session 执行器
- 把系统提示词、历史消息、工具和模型一起送入执行链
从心智模型上看,一次执行大致可以理解成:
项目配置 + 静态提示词 + 会话历史 + 工具集合 + 当前模型
被组合成一轮执行上下文。
为什么项目只保存 modelId
这样做有几个好处:
- 多个项目可以共用同一个模型配置
- API key 不需要重复保存在每个项目里
- 切换项目模型时,只改一个绑定字段
这也让权限和运维边界更清楚:
- 模型目录归City runtime 维护
- 项目只负责“我选哪个模型”
普通聊天和 SDK 会复用同一套内核吗
是的。
无论你从哪里进入:
town agent chat- 聊天渠道消息
- task 执行
- SDK
Agent/RemoteAgent
底层都会回到统一的 session 和 executor 体系。
这对用户的直接影响是:
- 你在 CLI 里观察到的很多行为,在 SDK 里也能找到对应形态
- 你对“会话、历史、工具调用、输出流”的理解可以在多个入口复用
SDK 本地 Agent 的区别
SDK 本地 Agent 允许你在应用代码里显式传入:
toolspluginsmodel- session 级
model
这和项目 runtime 有一点不同:
- 项目 runtime 的模型来自
downcity.json.execution.modelId - SDK 本地执行可以来自
new Agent({ model }),也可以对单个 session 调session.set({ model })
这也是本地 SDK 最常见的踩坑点之一:你以为 SDK 会自动从项目配置里帮你把运行中的模型实例准备好,但当前实现不是这样。
也就是说,如果你既没有:
- 在
new Agent({ model })里提供默认模型
也没有:
- 对某个 session 显式
set({ model })
那么本地 SDK 执行会因为缺少模型而失败。