> ## Documentation Index
> Fetch the complete documentation index at: https://ikun.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# 结构化输出

团队可以像单个代理一样，使用 Pydantic 模型生成结构化数据。此功能非常适合协调数据提取、分析和报告生成，其中多个代理协同工作以产生结构化结果。

## 示例

让我们创建一个生成结构化 `StockReport` 的股票研究团队。

```python stock_team.py theme={null}
from typing import List
from pydantic import BaseModel, Field
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.team.team import Team
from agno.tools.yfinance import YFinanceTools

class StockAnalysis(BaseModel):
    symbol: str
    company_name: str
    analysis: str

class CompanyAnalysis(BaseModel):
    company_name: str
    analysis: str

class StockReport(BaseModel):
    symbol: str = Field(..., description="股票代码符号")
    company_name: str = Field(..., description="完整公司名称")
    current_price: str = Field(..., description="当前股票价格")
    analysis: str = Field(..., description="结合多种视角的全面分析")
    recommendation: str = Field(..., description="投资建议：买入、持有或卖出")

# 创建专业代理
stock_searcher = Agent(
    name="股票搜索器",
    model=OpenAIChat("gpt-4o"),
    response_model=StockAnalysis,
    role="搜索当前股票信息和价格数据。",
    tools=[
        YFinanceTools(
            stock_price=True,
            analyst_recommendations=True,
        )
    ],
)

company_info_agent = Agent(
    name="公司信息搜索器", 
    model=OpenAIChat("gpt-4o"),
    role="研究公司基本面和近期新闻。",
    response_model=CompanyAnalysis,
    tools=[
        YFinanceTools(
            stock_price=False,
            company_info=True,
            company_news=True,
        )
    ],
)

# 创建具有结构化输出的团队
stock_research_team = Team(
    name="股票研究团队",
    mode="coordinate",
    model=OpenAIChat("gpt-4o"),
    members=[stock_searcher, company_info_agent],
    response_model=StockReport,
    markdown=True,
    show_members_responses=True,
)

stock_research_team.print_response("给我一份关于 NVDA 的全面股票报告")
```

该团队将协调其成员之间进行工作，并生成一个结构化的 `StockReport` 对象：

```python theme={null}
StockReport(
│   symbol='NVDA',
│   company_name='NVIDIA Corporation',
│   current_price='$875.42',
│   analysis='NVIDIA 通过 H100 和即将推出的 H200 GPU 的强劲需求，继续主导人工智能芯片市场。由于企业人工智能的采用和云计算提供商的扩展，该公司在数据中心收入方面表现出卓越的增长。与主要科技公司的近期合作关系巩固了其市场地位，尽管来自 AMD 和英特尔的竞争正在加剧。',
│   recommendation='Buy'
)
```

## 使用解析器模型

您可以使用额外的模型来解析和结构化主模型的输出。当主模型针对推理任务进行了优化时，这种方法特别有效，因为此类模型可能无法始终产生详细的结构化响应。

```python theme={null}
team = Team(
    name="股票研究团队",
    mode="coordinate",
    model=Claude(id="claude-sonnet-4-20250514"),
    members=[stock_searcher, company_info_agent],
    response_model=StockReport,
    parser_model=OpenAIChat(id="gpt-4o"),
)
```

您还可以为 Parser Model 提供自定义的 `parser_model_prompt`。

## 流式传输结构化输出

团队支持流式传输与结构化输出，其中 `content` 事件包含完整的结构化结果作为单个事件。

```python streaming_team.py theme={null}
from typing import List
from pydantic import BaseModel, Field
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.team.team import Team
from agno.tools.yfinance import YFinanceTools

class MarketAnalysis(BaseModel):
    sector: str = Field(..., description="正在分析的市场领域")
    key_trends: List[str] = Field(..., description="影响该领域的关键趋势")
    top_performers: List[str] = Field(..., description="该领域表现最佳的股票")
    market_outlook: str = Field(..., description="整体市场前景和预测")
    risk_factors: List[str] = Field(..., description="需要考虑的关键风险因素")

# 创建研究代理
trend_analyst = Agent(
    name="趋势分析师",
    model=OpenAIChat("gpt-4o"),
    role="分析市场趋势和行业表现。",
    tools=[YFinanceTools(stock_price=True, analyst_recommendations=True)]
)

risk_assessor = Agent(
    name="风险评估师", 
    model=OpenAIChat("gpt-4o"),
    role="识别和评估市场风险与机遇。",
    tools=[YFinanceTools(company_news=True, company_info=True)]
)

# 创建流式传输团队
market_research_team = Team(
    name="市场研究团队",
    mode="coordinate", 
    model=OpenAIChat("gpt-4o"),
    members=[trend_analyst, risk_assessor],
    response_model=MarketAnalysis,
    markdown=True,
    show_members_responses=True,
)

# 流式传输团队响应
market_research_team.print_response(
    "分析 2024 年第一季度科技行业", 
    stream=True, 
    stream_intermediate_steps=True
)
```

<Note>
  当使用团队和结构化输出进行流式传输时，您将看到来自个别团队成员的中间步骤，但最终的结构化结果是作为一个完整的块交付的，而不是渐进式流式传输的。
</Note>

## 开发者资源

* 查看 [流式传输团队输出](https://github.com/agno-agi/agno/blob/main/cookbook/teams/structured_output_streaming.py)
