mcpField
A
adk-sample-creator

adk-sample-creator

github.com/googleAgent 工作流22.0k92 次安装今天更新
代码仓库

关于 adk-sample-creator

用于在 `contributing/samples/` 创建 ADK 功能演示样例的 Skill,指导贡献者选择分类、编写 Agent 或工作流并撰写 README。

主要功能

  1. 01选择样例分类和目录
  2. 02创建独立 Agent 或工作流
  3. 03遵循样例命名和导入规范
  4. 04按样例 README 模板编写文档
  5. 05参考动态和静态工作流示例

适用场景

  1. 01为 ADK 功能添加精简样例
  2. 02构建演示图路由或并行执行的样例

MCP 相关

指南将 `mcp` 列为可选样例分类之一,但未说明样例的 MCP 行为。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/google/adk-python --skill adk-sample-creator

安装后在 Claude Code 中输入/adk-sample-creator确认已加载。

附带文件references/readme-template.md

详细介绍

ADK 示例创建器

在 contributing/samples/ 下创建示例。这些示例刻意保持精简,每个示例仅演示一两个功能;这与 adk-samples 仓库不同,后者包含完整的端到端应用。

如果还没有阅读过 adk-style 技能,请先阅读,了解 ADK 2.0 的约定。

1. 选择类别目录

几乎所有示例都位于 contributing/samples/{category}/{sample_name}/。列出类别,并在创建任何内容之前与用户确认示例所属类别——工作流示例放在 workflows/ 之外是最常见的错误。

ls contributing/samples/

类别包括 workflows、patterns、core、multi_agent、tools、models、live、mcp、a2a、evaluation 和 plugins。少数示例会再嵌套一层,因为某个功能需要多个变体,例如 plugins/plugin_reflect_tool_retry/basic/。

示例目录应以所演示的功能命名,并使用 snake_case:dynamic_nodes、fan_out_fan_in、streaming_tool_events。

不要添加 _agent 后缀,也不要将类别名作为前缀重复添加——每个示例都是一个 Agent,而类别已体现在路径中。许多现有目录仍同时带有这两者;不要照搬。

2. 编写 agent.py

示例目录中的内容:

文件必需用途
agent.py是Agent 或工作流。必须公开 root_agent。
README.md是参见 readme-template.md。
__init__.py有时当示例作为包导入时需要提供。
tests/*.json否用作评估集的记录会话。

使用绝对导入,以便直接运行和导入该文件。

不要为 Agent 实例设置 model=。示例会继承系统配置的模型,这样默认模型变更时仍能正常运行;硬编码 model="gemini-2.5-flash" 会将示例绑定到即将退役的模型。只有用户明确要求使用特定模型时才设置该参数。

然后选择以下两种结构之一。

模式 A — 工作流,适用于多步骤图

当示例需要多个节点、路由或并行执行时使用。

from google.adk import Agent
from google.adk import Context
from google.adk import Event
from google.adk import Workflow
from google.adk.workflow import JoinNode
from google.adk.workflow import node

从 google.adk 导入 Workflow,不要从私有的 google.adk.workflow._* 模块导入。

my_agent = Agent(name="my_agent", instruction="...")


@node()
async def my_node(node_input: str) -> str:
  return "result"


root_agent = Workflow(
    name="root_agent",
    edges=[("START", my_node)],
)

普通函数可以直接用作 edges 中的节点;只有在需要某个选项时才使用 @node(...) 装饰器,例如对调用 ctx.run_node 的节点设置 rerun_on_resume=True。

模式 B — 独立 Agent,适用于单 Agent 或简单工具调用

当没有图,且由 Agent 自行驱动循环时使用。

from google.adk import Agent
from google.adk.tools import google_search

root_agent = Agent(
    name="standalone_assistant",
    instruction="You are a helpful assistant.",
    description="An assistant that can help with queries.",
    tools=[google_search],
)

3. 编写 README.md

遵循 readme-template.md——包括章节顺序、提示词格式、Mermaid 拓扑规则,以及 docs/guides/ 的相对链接层级。

示例参考

编写新的模式 A 示例前,请先阅读以下两个示例——一个动态流程图,一个静态流程图。

  • contributing/samples/workflows/dynamic_nodes/agent.py——Python 节点通过 ctx.run_node 驱动 while 循环,因此 Agent 调用次数由运行时决定,而不是由边决定。

    @node(rerun_on_resume=True)
    async def orchestrate(ctx: Context, node_input: str) -> str:
      yield Event(state={"topic": node_input})
    
      while True:
        headline = await ctx.run_node(generate_headline)
        # ...
    
  • contributing/samples/workflows/fan_out_fan_in/agent.py——三个函数从 START 并行运行,由 JoinNode 收集,然后进行汇总。

    join_node = JoinNode(name="join_for_results")
    
    root_agent = Workflow(
        name="root_agent",
        edges=[(
            "START",
            (make_uppercase, count_characters, reverse_string),
            join_node,
            aggregate,
        )],
    )
    

评论

支持 Markdown