chore: import upstream snapshot with attribution
dotnet-build-and-test / dotnet-test-functions (push) Has been cancelled
dotnet-build-and-test / paths-filter (push) Has been cancelled
dotnet-build-and-test / dotnet-build (Debug, windows-latest, net9.0) (push) Has been cancelled
dotnet-build-and-test / dotnet-build (Release, ubuntu-latest, net10.0) (push) Has been cancelled
dotnet-build-and-test / dotnet-build (Release, ubuntu-latest, net8.0) (push) Has been cancelled
dotnet-build-and-test / dotnet-build (Release, windows-latest, net472) (push) Has been cancelled
dotnet-build-and-test / dotnet-test (Release, integration, true, ubuntu-latest, net10.0) (push) Has been cancelled
dotnet-build-and-test / dotnet-test (Release, integration, true, windows-latest, net472) (push) Has been cancelled
dotnet-build-and-test / dotnet-foundry-hosted-it (push) Has been cancelled
dotnet-build-and-test / dotnet-build-and-test-check (push) Has been cancelled
dotnet-build-and-test / Integration Test Report (push) Has been cancelled
CodeQL / Analyze (csharp) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
dotnet-build-and-test / dotnet-test-functions (push) Has been cancelled
dotnet-build-and-test / paths-filter (push) Has been cancelled
dotnet-build-and-test / dotnet-build (Debug, windows-latest, net9.0) (push) Has been cancelled
dotnet-build-and-test / dotnet-build (Release, ubuntu-latest, net10.0) (push) Has been cancelled
dotnet-build-and-test / dotnet-build (Release, ubuntu-latest, net8.0) (push) Has been cancelled
dotnet-build-and-test / dotnet-build (Release, windows-latest, net472) (push) Has been cancelled
dotnet-build-and-test / dotnet-test (Release, integration, true, ubuntu-latest, net10.0) (push) Has been cancelled
dotnet-build-and-test / dotnet-test (Release, integration, true, windows-latest, net472) (push) Has been cancelled
dotnet-build-and-test / dotnet-foundry-hosted-it (push) Has been cancelled
dotnet-build-and-test / dotnet-build-and-test-check (push) Has been cancelled
dotnet-build-and-test / Integration Test Report (push) Has been cancelled
CodeQL / Analyze (csharp) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
# Marketing Copy Workflow
|
||||
|
||||
This sample demonstrates a sequential multi-agent pipeline for generating marketing copy from a product description.
|
||||
|
||||
## Overview
|
||||
|
||||
The workflow showcases:
|
||||
- **Sequential Agent Pipeline**: Three agents work in sequence, each building on the previous output
|
||||
- **Role-Based Agents**: Each agent has a distinct responsibility
|
||||
- **Content Transformation**: Raw product info transforms into polished marketing copy
|
||||
|
||||
## Agent Pipeline
|
||||
|
||||
```
|
||||
Product Description
|
||||
|
|
||||
v
|
||||
AnalystAgent --> Key features, audience, USPs
|
||||
|
|
||||
v
|
||||
WriterAgent --> Draft marketing copy
|
||||
|
|
||||
v
|
||||
EditorAgent --> Polished final copy
|
||||
|
|
||||
v
|
||||
Final Output
|
||||
```
|
||||
|
||||
## Agents
|
||||
|
||||
| Agent | Role |
|
||||
|-------|------|
|
||||
| AnalystAgent | Identifies key features, target audience, and unique selling points |
|
||||
| WriterAgent | Creates compelling marketing copy (~150 words) |
|
||||
| EditorAgent | Polishes grammar, clarity, tone, and formatting |
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
# Run the demonstration with mock responses
|
||||
python main.py
|
||||
```
|
||||
|
||||
## Example Input
|
||||
|
||||
```
|
||||
An eco-friendly stainless steel water bottle that keeps drinks cold for 24 hours.
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
For production use, configure these agents in Azure AI Foundry:
|
||||
|
||||
### AnalystAgent
|
||||
```
|
||||
Instructions: You are a marketing analyst. Given a product description, identify:
|
||||
- Key features
|
||||
- Target audience
|
||||
- Unique selling points
|
||||
```
|
||||
|
||||
### WriterAgent
|
||||
```
|
||||
Instructions: You are a marketing copywriter. Given a block of text describing
|
||||
features, audience, and USPs, compose a compelling marketing copy (like a
|
||||
newsletter section) that highlights these points. Output should be short
|
||||
(around 150 words), output just the copy as a single text block.
|
||||
```
|
||||
|
||||
### EditorAgent
|
||||
```
|
||||
Instructions: You are an editor. Given the draft copy, correct grammar,
|
||||
improve clarity, ensure consistent tone, give format and make it polished.
|
||||
Output the final improved copy as a single text block.
|
||||
```
|
||||
@@ -0,0 +1,108 @@
|
||||
# Copyright (c) Microsoft. All rights reserved.
|
||||
|
||||
"""
|
||||
Run the marketing copy workflow sample.
|
||||
|
||||
Usage:
|
||||
python main.py
|
||||
|
||||
Demonstrates sequential multi-agent pipeline:
|
||||
- AnalystAgent: Identifies key features, target audience, USPs
|
||||
- WriterAgent: Creates compelling marketing copy
|
||||
- EditorAgent: Polishes grammar, clarity, and tone
|
||||
"""
|
||||
|
||||
import asyncio
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
from agent_framework import Agent
|
||||
from agent_framework.declarative import WorkflowFactory
|
||||
from agent_framework.foundry import FoundryChatClient
|
||||
from azure.identity import AzureCliCredential
|
||||
|
||||
# Copyright (c) Microsoft. All rights reserved.
|
||||
|
||||
|
||||
ANALYST_INSTRUCTIONS = """You are a product analyst. Analyze the given product and identify:
|
||||
1. Key features and benefits
|
||||
2. Target audience demographics
|
||||
3. Unique selling propositions (USPs)
|
||||
4. Competitive advantages
|
||||
|
||||
Be concise and structured in your analysis."""
|
||||
|
||||
WRITER_INSTRUCTIONS = """You are a marketing copywriter. Based on the product analysis provided,
|
||||
create compelling marketing copy that:
|
||||
1. Has a catchy headline
|
||||
2. Highlights key benefits
|
||||
3. Speaks to the target audience
|
||||
4. Creates emotional connection
|
||||
5. Includes a call to action
|
||||
|
||||
Write in an engaging, persuasive tone."""
|
||||
|
||||
EDITOR_INSTRUCTIONS = """You are a senior editor. Review and polish the marketing copy:
|
||||
1. Fix any grammar or spelling issues
|
||||
2. Improve clarity and flow
|
||||
3. Ensure consistent tone
|
||||
4. Tighten the prose
|
||||
5. Make it more impactful
|
||||
|
||||
Return the final polished version."""
|
||||
|
||||
|
||||
async def main() -> None:
|
||||
"""Run the marketing workflow with real Azure AI agents."""
|
||||
client = FoundryChatClient(
|
||||
project_endpoint=os.environ["FOUNDRY_PROJECT_ENDPOINT"],
|
||||
model=os.environ["FOUNDRY_MODEL"],
|
||||
credential=AzureCliCredential(),
|
||||
)
|
||||
|
||||
analyst_agent = Agent(
|
||||
client=client,
|
||||
name="AnalystAgent",
|
||||
instructions=ANALYST_INSTRUCTIONS,
|
||||
)
|
||||
writer_agent = Agent(
|
||||
client=client,
|
||||
name="WriterAgent",
|
||||
instructions=WRITER_INSTRUCTIONS,
|
||||
)
|
||||
editor_agent = Agent(
|
||||
client=client,
|
||||
name="EditorAgent",
|
||||
instructions=EDITOR_INSTRUCTIONS,
|
||||
)
|
||||
|
||||
factory = WorkflowFactory(
|
||||
agents={
|
||||
"AnalystAgent": analyst_agent,
|
||||
"WriterAgent": writer_agent,
|
||||
"EditorAgent": editor_agent,
|
||||
}
|
||||
)
|
||||
|
||||
workflow_path = Path(__file__).parent / "workflow.yaml"
|
||||
workflow = factory.create_workflow_from_yaml_path(workflow_path)
|
||||
|
||||
print(f"Loaded workflow: {workflow.name}")
|
||||
print("=" * 60)
|
||||
print("Marketing Copy Generation Pipeline")
|
||||
print("=" * 60)
|
||||
|
||||
# Pass a simple string input - like .NET
|
||||
product = "An eco-friendly stainless steel water bottle that keeps drinks cold for 24 hours."
|
||||
|
||||
async for event in workflow.run(product, stream=True):
|
||||
if event.type == "output":
|
||||
print(f"{event.data}", end="", flush=True)
|
||||
|
||||
print("\n" + "=" * 60)
|
||||
print("Pipeline Complete")
|
||||
print("=" * 60)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
@@ -0,0 +1,30 @@
|
||||
#
|
||||
# This workflow demonstrates sequential agent interaction to develop product marketing copy.
|
||||
#
|
||||
# Example input:
|
||||
# An eco-friendly stainless steel water bottle that keeps drinks cold for 24 hours.
|
||||
#
|
||||
kind: Workflow
|
||||
trigger:
|
||||
|
||||
kind: OnConversationStart
|
||||
id: workflow_demo
|
||||
actions:
|
||||
|
||||
- kind: InvokeAzureAgent
|
||||
id: invoke_analyst
|
||||
conversationId: =System.ConversationId
|
||||
agent:
|
||||
name: AnalystAgent
|
||||
|
||||
- kind: InvokeAzureAgent
|
||||
id: invoke_writer
|
||||
conversationId: =System.ConversationId
|
||||
agent:
|
||||
name: WriterAgent
|
||||
|
||||
- kind: InvokeAzureAgent
|
||||
id: invoke_editor
|
||||
conversationId: =System.ConversationId
|
||||
agent:
|
||||
name: EditorAgent
|
||||
Reference in New Issue
Block a user