示例
让我们创建一个生成结构化StockReport
的股票研究团队。
stock_team.py
Copy
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
对象:
Copy
StockReport(
│ symbol='NVDA',
│ company_name='NVIDIA Corporation',
│ current_price='$875.42',
│ analysis='NVIDIA 通过 H100 和即将推出的 H200 GPU 的强劲需求,继续主导人工智能芯片市场。由于企业人工智能的采用和云计算提供商的扩展,该公司在数据中心收入方面表现出卓越的增长。与主要科技公司的近期合作关系巩固了其市场地位,尽管来自 AMD 和英特尔的竞争正在加剧。',
│ recommendation='Buy'
)
使用解析器模型
您可以使用额外的模型来解析和结构化主模型的输出。当主模型针对推理任务进行了优化时,这种方法特别有效,因为此类模型可能无法始终产生详细的结构化响应。Copy
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_prompt
。
流式传输结构化输出
团队支持流式传输与结构化输出,其中content
事件包含完整的结构化结果作为单个事件。
streaming_team.py
Copy
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
)
当使用团队和结构化输出进行流式传输时,您将看到来自个别团队成员的中间步骤,但最终的结构化结果是作为一个完整的块交付的,而不是渐进式流式传输的。
开发者资源
- 查看 流式传输团队输出