关于 implementing-agent-modes
用于规划和实现 PostHog Agent 模式的开发技能,涵盖模式架构、工具包、轨迹示例、前端接入、功能标记和测试。
主要功能
- 01规划并界定 Agent 模式
- 02定义模式架构和脚手架
- 03添加专用工具与示例
- 04接入前端模式选择器
- 05通过功能标记控制模式和工具
- 06测试工具、预设和执行器
适用场景
- 01为 PostHog 产品领域添加模式
- 02为 Agent 配置专用工具
- 03更新工具输出的界面呈现
- 04在功能标记下验证新模式
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ posthog/ posthog --skill implementing-agent-modes安装后在 Claude Code 中输入/implementing-agent-modes确认已加载。
详细介绍
Agent 模式
使用以下步骤来规划或实现一个新模式。模式是一种管理 Agent 上下文的方式,并注入与某个产品、用例、JTBD 等相关的工具、提示词和模式相关行为。Agent 拥有 switch_mode 工具,允许它自行切换到另一个模式,这可能会更改工具、提示词和可执行文件,同时保留当前上下文。一些先前创建的工具是上下文相关的,意味着它们会被注入到前端的特定页面中。模式会改变处理方式,并且始终在模式上下文中包含工具。
确定模式名称
探索 ee/hogai/core/agent_modes/presets 目录,检查是否已有符合用户意图的模式。如果你想创建一个新模式,应按 PostHog 产品(Product analytics)、产品领域(SQL)或 Agent(Instrumentation agent)来界定其范围。
(可选)在 schema 中创建新模式
向 frontend/src/queries/schema/schema-assistant-messages.ts 添加一个新的 AgentMode,并使用以下命令重新生成 schema:
hogli build:schema
或者,你可以使用此命令:
pnpm run schema:build
创建或更新模式的脚手架
一个模式通常至少应包含两项内容:
- 一个 AgentToolkit,暴露该模式特有的工具,以及 todo 工具的轨迹示例。
- 一个 AgentModeDefinition,包含 AgentMode、始终注入到 Agent 上下文窗口中的模式描述,以及 toolkit 和可执行文件的类。
注意:只有当用户需要修改提示词、该模式的行为或执行循环本身时,你才应创建新的可执行文件。
向模式添加工具
相关工具可能位于 ee/hogai/tools 或 products/<product_name>/backend/max_tools。有一组工具始终会被注入到上下文中,例如 read_data 工具,但所有其他工具都应是该模式特有的。
在向 toolkit 添加工具之前,先确定这些工具是否有工具依赖关系。如果存在依赖关系(例如某个实验依赖于功能标志的创建),请回到用户处,确定他们是否希望将多个模式合并为一个。如果他们不希望这样做,请确保你之后添加一个清晰解释模式切换和工具选择的轨迹示例。
你还应验证这些工具是否后端优先。如果工具在前端应用更改,却没有将适当的上下文传回对话,你应提出一种使其后端优先的方法,以便 Agent 拥有正确的上下文。
审查默认 toolkit
如果新模式包含新的 Django 模型,你应审查 read_data、search 和 list_data 工具是否具备检索这些模型的功能。如果它们不支持这些模型,你应使用或实现 ee/hogai/context/... 中可用的某个上下文提供程序。
编写类似 JTBD 的轨迹示例
更新 AgentToolkit 以包含轨迹示例。这些示例应采用 JTBD 风格,展示 Agent 应如何使用可用工具完成典型任务。请参考 Product analytics 预设作为参考。
实现前端
更新 max-constants.tsx 以包含新工具,并将该模式添加到模式选择器中。你可能还需要创建新的 UI 元素,用于显示来自这些工具的数据。
示例
假设你更新了 Error tracking 工具以列出问题。它过去是一个仅更新过滤器的前端工具,但现在它会输出错误跟踪问题。虽然 Agent 拥有它所需的上下文,但用户也需要以人类可读的方式看到这些问题。在这种情况下,你应设计并实现一个新组件来显示该工具的输出。
添加功能标志
所有新模式都必须有功能标志。示例:
@property
def mode_registry(self) -> dict[AgentMode, AgentModeDefinition]:
registry = dict(DEFAULT_CHAT_AGENT_MODE_REGISTRY)
if has_error_tracking_mode_feature_flag(self._team, self._user):
registry[AgentMode.ERROR_TRACKING] = error_tracking_agent
return registry
如果你创建了新工具,请确保为它们正确设置功能标志:
- 正在迁移的旧工具在功能标志处于激活状态时不应可用。
- 新工具应仅在功能标志处于激活状态时可用。
实现并更新测试
你应该测试新工具、预设、可执行文件,并可选地实现评估。