OpenAgents Logo
OpenAgentsDocumentation
Tutorials演示:研究团队
Updated February 24, 2026

演示:研究团队

一个路由代理使用 project mod 对专门代理之间的研究任务进行结构化的任务委派与协调。

演示:带路由器的研究团队

路由器代理使用 项目模块 在专门化代理之间协调研究任务。本演示展示了结构化任务委派、代理组和多步骤工作流。

重要: 重要: 如果你正在运行它们,请停止你的网络。

你将学到的内容

  • 使用项目模块进行任务管理
  • 基于路由的协调模式
  • 代理组和权限
  • 使用 send_event 的事件驱动任务委派
  • 项目模板

架构

                    ┌─────────────────┐
    Research        │     Router      │
    Request    ────►│  (coordinator)  │
                    └────────┬────────┘
                             │ task.delegate
              ┌──────────────┴──────────────┐
              │                             │
              ▼                             ▼
       ┌─────────────┐               ┌───────────┐
       │ web-searcher│               │  analyst  │
       │ (find info) │               │ (reason)  │
       └──────┬──────┘               └─────┬─────┘
              │                             │
              └──────────────┬──────────────┘
                             │ task.complete

                    ┌─────────────────┐
                    │     Router      │
                    │ (compile report)│
                    └─────────────────┘

代理

代理角色职责
router协调者协调者接收请求、分配任务、汇总结果
web-searcher研究者信息收集者网络搜索、Hacker News 查询
analyst研究者综合者分析与结论

前提条件

  • 已安装 OpenAgents (pip install openagents)
  • 一个 LLM 的 API 密钥
# Optional: Set the OpenAI base URL
export OPENAI_BASE_URL="your-base-url-here"
 
# Must: Set the OpenAI API key
export OPENAI_API_KEY="your-key-here"

可选(用于更好的网络搜索):

export BRAVE_API_KEY="your-brave-key"  # Falls back to DuckDuckGo if not set

快速开始

终端 1:启动网络

openagents network start demos/03_research_team/

终端 2:启动路由器

openagents agent start demos/03_research_team/agents/router.yaml

终端 3:启动网络搜索器

openagents agent start demos/03_research_team/agents/web_searcher.yaml

终端 4:启动分析员

openagents agent start demos/03_research_team/agents/analyst.yaml

使用 Studio 连接

打开 http://localhost:8050,并连接到 localhost:8700

试一试

  1. 在 Studio 中导航到 项目 部分
  2. 使用 "研究任务" 模板创建一个新项目
  3. 将目标设为类似于:

"研究 Rust 与 Go 在后端开发中的优缺点"

研究团队

  1. 观察代理如何协作:
    • 路由器接收请求并将其委派给网页搜索器
    • 网页搜索器收集信息并返回发现
    • 路由器将分析委派给分析员
    • 分析员综合信息并提供结论
    • 路由器汇总并交付最终报告

配置深入解析

使用代理组的网络配置

# demos/03_research_team/network.yaml
network:
  name: "ResearchTeam"
 
  default_agent_group: guest
 
  # Define agent groups with different permissions
  agent_groups:
    coordinators:
      description: "Router agents that coordinate research tasks"
      password_hash:
 
    researchers:
      description: "Worker agents that execute research tasks"
      password_hash: ...
 
  mods:
    # Default workspace for event handling
    - name: "openagents.mods.workspace.default"
      enabled: true
      config:
        custom_events_enabled: true
 
    # Project management mod
    - name: "openagents.mods.workspace.project"
      enabled: true
      config:
        max_concurrent_projects: 5
 
        project_templates:
          research_task:
            name: "Research Task"
            description: "Structured research with search and analysis"
            agent_groups: ["coordinators", "researchers"]
            context: |
              Research Task Workflow:
              1. Router receives request and delegates search
              2. Web-searcher returns findings
              3. Router delegates analysis
              4. Analyst synthesizes conclusions
              5. Router compiles final report

路由器代理配置

# demos/03_research_team/agents/router.yaml
type: "openagents.agents.collaborator_agent.CollaboratorAgent"
agent_id: "router"
 
config:
  model_name: "gpt-4o-mini"
 
  # Limit iterations to prevent duplicate sends
  max_iterations: 3
 
  instruction: |
    You are the ROUTER - a simple coordinator.
    Make ONE action per event, then call finish().
 
    YOUR TOOLS:
    - send_project_message(project_id, content) - message the user
    - send_event(event_name, destination_id, payload) - delegate tasks
    - complete_project(project_id, summary) - finish the project
    - finish() - MUST call this last
 
    RULE: Make ONE tool call, then call finish(). Never call send_event twice.
 
  react_to_all_messages: false
 
  triggers:
    - event: "project.notification.started"
      instruction: |
        Project started. Do these 2 things IN ORDER:
        1. send_event(event_name="task.delegate", destination_id="web-searcher",
           payload={"task_id": "s1", "query": "[the goal from payload]"})
        2. finish()
 
    - event: "task.complete"
      instruction: |
        A task completed. Check who sent it:
 
        IF source is "web-searcher":
        1. send_event to analyst with the results
        2. finish()
 
        IF source is "analyst":
        1. send_project_message with summary
        2. complete_project
        3. finish()
 
mods:
  - name: "openagents.mods.workspace.project"
    enabled: true
  - name: "openagents.mods.workspace.default"
    enabled: true
 
connection:
  host: "localhost"
  port: 8700
  transport: "grpc"
  agent_group: "coordinators"  # Join as coordinator

关键模式

事件驱动的任务委派

路由器使用 send_event 来委派工作:

# Conceptual flow
send_event(
    event_name="task.delegate",
    destination_id="web-searcher",
    payload={"task_id": "s1", "query": "Rust vs Go comparison"}
)

工作者响应:

send_event(
    event_name="task.complete",
    destination_id="router",
    payload={"task_id": "s1", "results": "...findings..."}
)

防止重复操作

路由器使用 max_iterations: 3 和显式规则来防止:

  • 针对单个触发器多次发送事件
  • 无限委派循环
  • 向用户发送重复消息

项目模板

模板为不同的研究类型提供结构:

模板使用场景
research_task包含搜索与分析的一般研究
comparison_research比较两个或多个主题
deep_dive对单一主题的深入研究

网络搜索工具

# demos/03_research_team/tools/web_search.py
 
def search_web(query: str, count: int = 5) -> str:
    """Search using Brave (if API key) or DuckDuckGo."""
    # Tries Brave first, falls back to DuckDuckGo
 
def fetch_webpage(url: str, max_length: int = 8000) -> str:
    """Fetch and extract text content from a webpage."""
 
def search_hackernews(query: str, count: int = 5) -> str:
    """Search Hacker News using Algolia API."""

定制化建议

增加更多专家

# agents/fact_checker.yaml
agent_id: "fact-checker"
config:
  instruction: |
    You verify claims made by other agents.
    Cross-reference sources and flag inconsistencies.

创建自定义模板

# In network.yaml
project_templates:
  competitor_analysis:
    name: "Competitor Analysis"
    description: "Research competitors in a market"
    context: |
      1. Identify key competitors
      2. Gather data on each
      3. Compare strengths/weaknesses
      4. Provide strategic recommendations

故障排除

路由器发送重复事件

  1. 验证已设置 max_iterations: 3
  2. 检查说明是否写着 "只进行一次工具调用"
  3. 确保在每个操作后调用 finish()

任务未完成

  1. 检查所有智能体是否已连接
  2. 验证 agent_group 分配是否与权限匹配
  3. 在智能体终端中查找错误

网络搜索失败

  1. 如果没有 BRAVE_API_KEY,会回退到 DuckDuckGo
  2. 检查网络连接
  3. 某些查询可能会被限流

接下来做什么?

Was this helpful?