Merge bdaeef2b7e into c317eb98e3
commit
3ce5826e81
@ -0,0 +1,455 @@
|
|||||||
|
# GraphWorkflow Examples
|
||||||
|
|
||||||
|
This page provides simple, practical examples of how to use `GraphWorkflow` for various real-world scenarios.
|
||||||
|
|
||||||
|
## Basic Example: Research and Analysis Pipeline
|
||||||
|
|
||||||
|
```python
|
||||||
|
from swarms import Agent, GraphWorkflow
|
||||||
|
|
||||||
|
# Create specialized research and analysis agents
|
||||||
|
research_agent = Agent(
|
||||||
|
agent_name="ResearchAgent",
|
||||||
|
agent_description="Expert in research, data gathering, and information synthesis",
|
||||||
|
system_prompt="""You are a research specialist with expertise in:
|
||||||
|
- Gathering information from reliable sources
|
||||||
|
- Analyzing data and identifying key insights
|
||||||
|
- Synthesizing findings into clear summaries
|
||||||
|
- Verifying facts and checking sources
|
||||||
|
- Organizing information logically""",
|
||||||
|
model_name="gpt-4.1",
|
||||||
|
max_loops=1,
|
||||||
|
)
|
||||||
|
|
||||||
|
analysis_agent = Agent(
|
||||||
|
agent_name="AnalysisAgent",
|
||||||
|
agent_description="Specialist in data analysis and insight extraction",
|
||||||
|
system_prompt="""You are an analyst with expertise in:
|
||||||
|
- Processing research findings
|
||||||
|
- Extracting key insights and patterns
|
||||||
|
- Identifying trends and implications
|
||||||
|
- Preparing actionable recommendations""",
|
||||||
|
model_name="gpt-4.1",
|
||||||
|
max_loops=1,
|
||||||
|
)
|
||||||
|
|
||||||
|
synthesis_agent = Agent(
|
||||||
|
agent_name="SynthesisAgent",
|
||||||
|
agent_description="Expert in combining insights into cohesive reports",
|
||||||
|
system_prompt="""You are a synthesis specialist with expertise in:
|
||||||
|
- Combining insights from multiple sources
|
||||||
|
- Creating cohesive reports
|
||||||
|
- Ensuring consistency and clarity
|
||||||
|
- Highlighting key takeaways""",
|
||||||
|
model_name="gpt-4.1",
|
||||||
|
max_loops=1,
|
||||||
|
)
|
||||||
|
|
||||||
|
# Create workflow
|
||||||
|
workflow = GraphWorkflow(
|
||||||
|
name="Research-Analysis-Pipeline",
|
||||||
|
verbose=True
|
||||||
|
)
|
||||||
|
|
||||||
|
# Add agents as nodes
|
||||||
|
workflow.add_node(research_agent)
|
||||||
|
workflow.add_node(analysis_agent)
|
||||||
|
workflow.add_node(synthesis_agent)
|
||||||
|
|
||||||
|
# Connect agents sequentially
|
||||||
|
workflow.add_edge("ResearchAgent", "AnalysisAgent")
|
||||||
|
workflow.add_edge("AnalysisAgent", "SynthesisAgent")
|
||||||
|
|
||||||
|
# Execute workflow
|
||||||
|
task = "Research and analyze the latest trends in renewable energy technology"
|
||||||
|
result = workflow.run(task=task)
|
||||||
|
print(result)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Parallel Analysis Example
|
||||||
|
|
||||||
|
```python
|
||||||
|
from swarms import Agent, GraphWorkflow
|
||||||
|
|
||||||
|
# Create specialized analysis agents
|
||||||
|
data_collector = Agent(
|
||||||
|
agent_name="DataCollector",
|
||||||
|
agent_description="Expert in collecting and organizing data from various sources",
|
||||||
|
system_prompt="You are a data collection specialist. Collect and organize data from various sources, ensuring accuracy and completeness.",
|
||||||
|
model_name="gpt-4.1",
|
||||||
|
max_loops=1,
|
||||||
|
)
|
||||||
|
|
||||||
|
technical_analyst = Agent(
|
||||||
|
agent_name="TechnicalAnalyst",
|
||||||
|
agent_description="Specialist in technical analysis and data processing",
|
||||||
|
system_prompt="You are a technical analyst. Perform technical analysis on data, identify patterns, and extract technical insights.",
|
||||||
|
model_name="gpt-4.1",
|
||||||
|
max_loops=1,
|
||||||
|
)
|
||||||
|
|
||||||
|
market_analyst = Agent(
|
||||||
|
agent_name="MarketAnalyst",
|
||||||
|
agent_description="Expert in market trends and competitive analysis",
|
||||||
|
system_prompt="You are a market analyst. Analyze market trends, competitive landscape, and market conditions.",
|
||||||
|
model_name="gpt-4.1",
|
||||||
|
max_loops=1,
|
||||||
|
)
|
||||||
|
|
||||||
|
synthesis_agent = Agent(
|
||||||
|
agent_name="SynthesisAgent",
|
||||||
|
agent_description="Expert in synthesizing multiple perspectives into cohesive reports",
|
||||||
|
system_prompt="You are a synthesis specialist. Combine insights from multiple analysts into a cohesive, comprehensive report.",
|
||||||
|
model_name="gpt-4.1",
|
||||||
|
max_loops=1,
|
||||||
|
)
|
||||||
|
|
||||||
|
# Create workflow
|
||||||
|
workflow = GraphWorkflow(
|
||||||
|
name="Parallel-Analysis-Pipeline",
|
||||||
|
verbose=True
|
||||||
|
)
|
||||||
|
|
||||||
|
# Add all agents
|
||||||
|
for agent in [data_collector, technical_analyst, market_analyst, synthesis_agent]:
|
||||||
|
workflow.add_node(agent)
|
||||||
|
|
||||||
|
# Fan-out: one agent feeds multiple agents (parallel execution)
|
||||||
|
workflow.add_edges_from_source(
|
||||||
|
"DataCollector",
|
||||||
|
["TechnicalAnalyst", "MarketAnalyst"]
|
||||||
|
)
|
||||||
|
|
||||||
|
# Fan-in: multiple agents feed one agent
|
||||||
|
workflow.add_edges_to_target(
|
||||||
|
["TechnicalAnalyst", "MarketAnalyst"],
|
||||||
|
"SynthesisAgent"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Execute workflow
|
||||||
|
task = "Analyze Bitcoin market trends for Q4 2024"
|
||||||
|
result = workflow.run(task=task)
|
||||||
|
print(result)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Content Creation Pipeline Example
|
||||||
|
|
||||||
|
```python
|
||||||
|
from swarms import Agent, GraphWorkflow
|
||||||
|
|
||||||
|
# Create content creation agents
|
||||||
|
researcher = Agent(
|
||||||
|
agent_name="Researcher",
|
||||||
|
agent_description="Expert in comprehensive research and information gathering",
|
||||||
|
system_prompt="""You are a research specialist. Conduct thorough research on the given topic,
|
||||||
|
gather information from multiple sources, and provide comprehensive findings with citations.""",
|
||||||
|
model_name="gpt-4.1",
|
||||||
|
max_loops=1,
|
||||||
|
)
|
||||||
|
|
||||||
|
outline_creator = Agent(
|
||||||
|
agent_name="OutlineCreator",
|
||||||
|
agent_description="Specialist in creating structured content outlines",
|
||||||
|
system_prompt="""You are an outline specialist. Create detailed outlines based on research findings.
|
||||||
|
Structure content logically with clear sections and subsections.""",
|
||||||
|
model_name="gpt-4.1",
|
||||||
|
max_loops=1,
|
||||||
|
)
|
||||||
|
|
||||||
|
writer = Agent(
|
||||||
|
agent_name="Writer",
|
||||||
|
agent_description="Professional writer specializing in engaging content creation",
|
||||||
|
system_prompt="""You are a professional writer. Write engaging content based on the outline and research.
|
||||||
|
Ensure clarity, proper grammar, and engaging style.""",
|
||||||
|
model_name="gpt-4.1",
|
||||||
|
max_loops=1,
|
||||||
|
)
|
||||||
|
|
||||||
|
editor = Agent(
|
||||||
|
agent_name="Editor",
|
||||||
|
agent_description="Expert editor specializing in content review and refinement",
|
||||||
|
system_prompt="""You are an expert editor. Review content for accuracy, clarity, grammar, and style.
|
||||||
|
Ensure consistency and professional quality.""",
|
||||||
|
model_name="gpt-4.1",
|
||||||
|
max_loops=1,
|
||||||
|
)
|
||||||
|
|
||||||
|
# Create workflow
|
||||||
|
workflow = GraphWorkflow(
|
||||||
|
name="Content-Creation-Pipeline",
|
||||||
|
verbose=True
|
||||||
|
)
|
||||||
|
|
||||||
|
# Add agents
|
||||||
|
for agent in [researcher, outline_creator, writer, editor]:
|
||||||
|
workflow.add_node(agent)
|
||||||
|
|
||||||
|
# Create sequential flow
|
||||||
|
workflow.add_edge("Researcher", "OutlineCreator")
|
||||||
|
workflow.add_edge("OutlineCreator", "Writer")
|
||||||
|
workflow.add_edge("Writer", "Editor")
|
||||||
|
|
||||||
|
# Execute content creation
|
||||||
|
task = "Create a comprehensive guide on implementing machine learning in production systems"
|
||||||
|
result = workflow.run(task=task)
|
||||||
|
print(result)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Multi-Perspective Analysis Example
|
||||||
|
|
||||||
|
```python
|
||||||
|
from swarms import Agent, GraphWorkflow
|
||||||
|
|
||||||
|
# Create analysis agents with different perspectives
|
||||||
|
technical_analyst = Agent(
|
||||||
|
agent_name="TechnicalAnalyst",
|
||||||
|
agent_description="Expert in technical analysis focusing on implementation details",
|
||||||
|
system_prompt="Analyze from a technical perspective focusing on implementation details, architecture, and technical feasibility.",
|
||||||
|
model_name="gpt-4.1",
|
||||||
|
max_loops=1,
|
||||||
|
)
|
||||||
|
|
||||||
|
business_analyst = Agent(
|
||||||
|
agent_name="BusinessAnalyst",
|
||||||
|
agent_description="Specialist in business analysis focusing on ROI and market impact",
|
||||||
|
system_prompt="Analyze from a business perspective focusing on ROI, market impact, revenue potential, and business strategy.",
|
||||||
|
model_name="gpt-4.1",
|
||||||
|
max_loops=1,
|
||||||
|
)
|
||||||
|
|
||||||
|
risk_analyst = Agent(
|
||||||
|
agent_name="RiskAnalyst",
|
||||||
|
agent_description="Expert in risk assessment and mitigation strategies",
|
||||||
|
system_prompt="Analyze from a risk perspective focusing on potential issues, threats, and mitigation strategies.",
|
||||||
|
model_name="gpt-4.1",
|
||||||
|
max_loops=1,
|
||||||
|
)
|
||||||
|
|
||||||
|
synthesizer = Agent(
|
||||||
|
agent_name="Synthesizer",
|
||||||
|
agent_description="Expert in synthesizing multiple perspectives into comprehensive reports",
|
||||||
|
system_prompt="Synthesize all analysis perspectives into a comprehensive report that integrates technical, business, and risk considerations.",
|
||||||
|
model_name="gpt-4.1",
|
||||||
|
max_loops=1,
|
||||||
|
)
|
||||||
|
|
||||||
|
# Create workflow with rustworkx backend for better performance
|
||||||
|
workflow = GraphWorkflow(
|
||||||
|
name="Multi-Perspective-Analysis",
|
||||||
|
backend="rustworkx",
|
||||||
|
verbose=True
|
||||||
|
)
|
||||||
|
|
||||||
|
# Add agents
|
||||||
|
for agent in [technical_analyst, business_analyst, risk_analyst, synthesizer]:
|
||||||
|
workflow.add_node(agent)
|
||||||
|
|
||||||
|
# Parallel analysis followed by synthesis
|
||||||
|
workflow.add_edges_to_target(
|
||||||
|
["TechnicalAnalyst", "BusinessAnalyst", "RiskAnalyst"],
|
||||||
|
"Synthesizer"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Execute workflow
|
||||||
|
task = "Analyze the adoption of blockchain technology in financial services"
|
||||||
|
result = workflow.run(task=task)
|
||||||
|
print(result)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Using from_spec for Quick Setup
|
||||||
|
|
||||||
|
```python
|
||||||
|
from swarms import Agent, GraphWorkflow
|
||||||
|
|
||||||
|
# Create agents
|
||||||
|
researcher = Agent(
|
||||||
|
agent_name="Researcher",
|
||||||
|
agent_description="Research specialist",
|
||||||
|
system_prompt="Research the topic thoroughly and provide comprehensive findings",
|
||||||
|
model_name="gpt-4o-mini",
|
||||||
|
max_loops=1
|
||||||
|
)
|
||||||
|
|
||||||
|
analyzer = Agent(
|
||||||
|
agent_name="Analyzer",
|
||||||
|
agent_description="Data analyst",
|
||||||
|
system_prompt="Analyze research findings and extract key insights",
|
||||||
|
model_name="gpt-4o-mini",
|
||||||
|
max_loops=1
|
||||||
|
)
|
||||||
|
|
||||||
|
reporter = Agent(
|
||||||
|
agent_name="Reporter",
|
||||||
|
agent_description="Report writer",
|
||||||
|
system_prompt="Create final report based on analysis",
|
||||||
|
model_name="gpt-4o-mini",
|
||||||
|
max_loops=1
|
||||||
|
)
|
||||||
|
|
||||||
|
# Create workflow from specification
|
||||||
|
workflow = GraphWorkflow.from_spec(
|
||||||
|
agents=[researcher, analyzer, reporter],
|
||||||
|
edges=[
|
||||||
|
("Researcher", "Analyzer"),
|
||||||
|
("Analyzer", "Reporter"),
|
||||||
|
],
|
||||||
|
task="Analyze climate change data and create a report",
|
||||||
|
backend="rustworkx"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Execute workflow
|
||||||
|
results = workflow.run()
|
||||||
|
print(results)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Batch Processing
|
||||||
|
|
||||||
|
```python
|
||||||
|
from swarms import Agent, GraphWorkflow
|
||||||
|
|
||||||
|
# Create analysis agents
|
||||||
|
market_agent = Agent(
|
||||||
|
agent_name="MarketAnalyst",
|
||||||
|
agent_description="Expert in market analysis and trends",
|
||||||
|
model_name="gpt-4.1",
|
||||||
|
max_loops=1,
|
||||||
|
)
|
||||||
|
|
||||||
|
technical_agent = Agent(
|
||||||
|
agent_name="TechnicalAnalyst",
|
||||||
|
agent_description="Specialist in technical analysis and patterns",
|
||||||
|
model_name="gpt-4.1",
|
||||||
|
max_loops=1,
|
||||||
|
)
|
||||||
|
|
||||||
|
synthesis_agent = Agent(
|
||||||
|
agent_name="SynthesisAgent",
|
||||||
|
agent_description="Expert in synthesizing analysis results",
|
||||||
|
model_name="gpt-4.1",
|
||||||
|
max_loops=1,
|
||||||
|
)
|
||||||
|
|
||||||
|
# Create workflow
|
||||||
|
workflow = GraphWorkflow(
|
||||||
|
name="Analysis-Pipeline",
|
||||||
|
verbose=True
|
||||||
|
)
|
||||||
|
|
||||||
|
# Add agents
|
||||||
|
for agent in [market_agent, technical_agent, synthesis_agent]:
|
||||||
|
workflow.add_node(agent)
|
||||||
|
|
||||||
|
# Create edges
|
||||||
|
workflow.add_edges_to_target(
|
||||||
|
["MarketAnalyst", "TechnicalAnalyst"],
|
||||||
|
"SynthesisAgent"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Execute multiple tasks
|
||||||
|
tasks = [
|
||||||
|
"Analyze Apple (AAPL) stock performance",
|
||||||
|
"Evaluate Microsoft (MSFT) market position",
|
||||||
|
"Assess Google (GOOGL) competitive landscape"
|
||||||
|
]
|
||||||
|
|
||||||
|
results = workflow.batch_run(tasks=tasks)
|
||||||
|
for i, result in enumerate(results):
|
||||||
|
print(f"Task {i+1} Result:", result)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Visualizing Workflow Structure
|
||||||
|
|
||||||
|
You can visualize the structure of your workflow before executing tasks using the `visualize()` method:
|
||||||
|
|
||||||
|
```python
|
||||||
|
from swarms import Agent, GraphWorkflow
|
||||||
|
|
||||||
|
# Create specialized agents
|
||||||
|
research_agent = Agent(
|
||||||
|
agent_name="ResearchAgent",
|
||||||
|
agent_description="Specialized in comprehensive research and data gathering",
|
||||||
|
model_name="gpt-4o-mini",
|
||||||
|
max_loops=1,
|
||||||
|
)
|
||||||
|
|
||||||
|
analysis_agent = Agent(
|
||||||
|
agent_name="AnalysisAgent",
|
||||||
|
agent_description="Expert in data analysis and pattern recognition",
|
||||||
|
model_name="gpt-4o-mini",
|
||||||
|
max_loops=1,
|
||||||
|
)
|
||||||
|
|
||||||
|
synthesis_agent = Agent(
|
||||||
|
agent_name="SynthesisAgent",
|
||||||
|
agent_description="Specialized in synthesizing insights into reports",
|
||||||
|
model_name="gpt-4o-mini",
|
||||||
|
max_loops=1,
|
||||||
|
)
|
||||||
|
|
||||||
|
# Create workflow
|
||||||
|
workflow = GraphWorkflow(
|
||||||
|
name="Research-Pipeline",
|
||||||
|
verbose=True
|
||||||
|
)
|
||||||
|
|
||||||
|
# Add agents
|
||||||
|
for agent in [research_agent, analysis_agent, synthesis_agent]:
|
||||||
|
workflow.add_node(agent)
|
||||||
|
|
||||||
|
# Create edges
|
||||||
|
workflow.add_edge("ResearchAgent", "AnalysisAgent")
|
||||||
|
workflow.add_edge("AnalysisAgent", "SynthesisAgent")
|
||||||
|
|
||||||
|
# Visualize the workflow structure
|
||||||
|
# Requires graphviz: pip install graphviz
|
||||||
|
output_file = workflow.visualize(
|
||||||
|
format="png",
|
||||||
|
view=True,
|
||||||
|
show_summary=True
|
||||||
|
)
|
||||||
|
print(f"Visualization saved to: {output_file}")
|
||||||
|
|
||||||
|
# Or use simple text visualization
|
||||||
|
text_viz = workflow.visualize_simple()
|
||||||
|
print(text_viz)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Saving and Loading Workflows
|
||||||
|
|
||||||
|
You can save workflows for reuse and load them later:
|
||||||
|
|
||||||
|
```python
|
||||||
|
from swarms import Agent, GraphWorkflow
|
||||||
|
|
||||||
|
# Create and configure workflow
|
||||||
|
workflow = GraphWorkflow(name="My-Workflow")
|
||||||
|
# ... add agents and edges ...
|
||||||
|
|
||||||
|
# Save workflow with conversation history
|
||||||
|
workflow.save_to_file(
|
||||||
|
"my_workflow.json",
|
||||||
|
include_conversation=True,
|
||||||
|
include_runtime_state=True
|
||||||
|
)
|
||||||
|
|
||||||
|
# Load workflow later
|
||||||
|
loaded_workflow = GraphWorkflow.load_from_file(
|
||||||
|
"my_workflow.json",
|
||||||
|
restore_runtime_state=True
|
||||||
|
)
|
||||||
|
|
||||||
|
# Continue execution
|
||||||
|
results = loaded_workflow.run("Follow-up analysis")
|
||||||
|
```
|
||||||
|
|
||||||
|
## Key Takeaways
|
||||||
|
|
||||||
|
1. **Node-Based Architecture**: Agents are nodes, edges define data flow and execution order
|
||||||
|
2. **Parallel Execution**: Use fan-out patterns (`add_edges_from_source`) for parallel processing
|
||||||
|
3. **Backend Selection**: Use `backend="rustworkx"` for large workflows (1000+ nodes) for 5-10x better performance
|
||||||
|
4. **Automatic Compilation**: Workflows are automatically compiled for optimal execution layers
|
||||||
|
5. **Visualization**: Use `visualize()` to see your workflow structure before execution
|
||||||
|
6. **Persistence**: Save and load workflows for reuse with `save_to_file()` and `load_from_file()`
|
||||||
|
7. **Quick Setup**: Use `from_spec()` for rapid workflow creation from agent and edge specifications
|
||||||
|
|
||||||
|
For more detailed information about the `GraphWorkflow` API and advanced usage patterns, see the [main documentation](../structs/graph_workflow.md).
|
||||||
Loading…
Reference in new issue