Agent

Agent

Agent SDK 是什么,以及如何运行 Agent 工作

Agent

Agent SDK (@downcity/agent) 是执行 Agent 工作的核心运行时。Agent 实例在执行时进入 Workspace,并通过 AgentWorkspace 组合会话、工具、插件和模型。City 是宿主进程内 Agent 实例的生命周期容器。

Agent 做什么

  • 读取项目配置(构造参数或项目目录)
  • 维护会话和对话历史
  • 在执行过程中调用工具
  • 运行扩展其能力的插件
  • 绑定到模型进行推理

创建 Agent

import { Agent } from "@downcity/agent";
import { Workspace } from "@downcity/workspace";
import { Shell } from "@downcity/workspace";
import { MacOsSeatbeltSandbox } from "@downcity/sandbox-macos";

const agent = new Agent({
  id: "repo-helper",
  model: myModel,
  tools: { my_tool: myTool },
  plugins: [myPlugin],
});
const workspace = new Workspace({
  id: "project",
  path: "/path/to/project",
  shell: new Shell({ sandbox: new MacOsSeatbeltSandbox() }),
});

从历史消息创建 Session 分支

session.fork() 默认保留锚点消息。编辑并重新发送历史消息时,可以排除原消息,让新 Session 从修改后的内容继续:

const forked_session = await session.fork({
  message_id,
  include_message: false,
});

设置 Desktop Agent 头像

Desktop 会从用户级 Agent 目录读取头像。将图片放在对应 Agent ID 目录下即可:

~/.downcity/agents/<agent_id>/avatar.png

也支持 avatar.jpgavatar.jpegavatar.webp,头像文件大小限制为 2 MiB。未配置头像时,Desktop 使用默认图标。

在 Desktop 的 Agent 详情页点击头像,可以通过右侧编辑栏随机生成 Downcity Ghost 头像、选择自定义图片或移除头像。

关键概念

  • City — 持有一个或多个已经实例化的 Agent,并在宿主退出时统一释放。它不读取 Registry,也不决定 Agent 是否应当运行。
  • Session — 一个执行线程。Agent 按需创建会话,并通过它们路由消息。
  • Tool — Agent 在执行过程中可调用的函数。直接传给构造函数。
  • Plugin — 扩展 Agent 能力的模块,如聊天、任务或记忆。也直接传给构造函数。
  • Model — 推理后端。Agent 持有默认实例,Session 可设置自己的实例并优先使用。

Agent 不做什么

  • 不管理多个项目(那是 CLI / 控制台层)。
  • 不拥有模型目录(那是 City / Federation)。
  • 不持久化全局凭证(那是 City)。

保持这些边界清晰,你很容易回答:模型应该在哪配置?机器人凭证应该放在哪?这是控制平面故障还是项目运行时故障?

执行模型

Agent 执行模型很简单:

  1. 接收消息或任务
  2. 加载会话上下文(历史、工具、插件、提示词)
  3. 调用模型
  4. 如果模型要求调用工具,执行它并继续
  5. 返回结果

继续阅读: