-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Open
Labels
agent orchestrationIssues related to agent orchestrationIssues related to agent orchestrationbugSomething isn't workingSomething isn't workingpythonv1.0Features being tracked for the version 1.0 GAFeatures being tracked for the version 1.0 GAworkflowsRelated to Workflows in agent-frameworkRelated to Workflows in agent-framework
Description
Description
In the sequential workflow example at sequential_workflow_as_agent.py the output does not match the expected results.
The reviewer agent is supposed to review the tagline produced by the writer agent. Instead, the reviewer agent also writes a tagline. The output I received is:
01 [user]
Write a tagline for a budget-friendly eBike.
------------------------------------------------------------
02 [writer]
"Ride Far. Spend Less. Go Electric."
------------------------------------------------------------
03 [reviewer]
"Electric Freedom, Wallet Friendly."
I also tried with different agents and instructions, and the agents do not follow any of their instructions.
summarizer = chat_client.as_agent(
instructions=("You are a concise summarization agent. Provide a single sentence summary of the customer's feedback. Do not include any additional commentary or information."),
name="summarizer",
)
classifier = chat_client.as_agent(
instructions=("You are a strict classification agent. Output a classification of the feedback as one of the following: Positive, Negative, or Feature request. Do not include any additional commentary or information."),
name="classifier",
)
action = chat_client.as_agent(
instructions=("You are an action suggestion agent. Based on the summary and classification, suggest the next action in one short sentence. Do not include any additional commentary or information."),
name="action",
)
feedback="""I use the dashboard every day to monitor metrics, and it works well overall.
But when I'm working late at night, the bright screen is really harsh on my eyes.
If you added a dark mode option, it would make the experience much more comfortable.
"""
workflow = SequentialBuilder().participants([summarizer, classifier, action]).build()
outputs: list[list[ChatMessage]] = []
async for event in workflow.run_stream(f"Customer feedback: {feedback}"):
if isinstance(event, WorkflowOutputEvent):
outputs.append(cast(list[ChatMessage], event.data))Each agent ignores the provided instructions and attempts to resolve the feedback.
Code Sample
import asyncio
from typing import cast
from agent_framework import ChatMessage, Role, SequentialBuilder, WorkflowOutputEvent
from agent_framework.azure import AzureAIAgentClient
from azure.identity import AzureCliCredential
"""
Sample: Sequential workflow (agent-focused API) with shared conversation context
Build a high-level sequential workflow using SequentialBuilder and two domain agents.
The shared conversation (list[ChatMessage]) flows through each participant. Each agent
appends its assistant message to the context. The workflow outputs the final conversation
list when complete.
Note on internal adapters:
- Sequential orchestration includes small adapter nodes for input normalization
("input-conversation"), agent-response conversion ("to-conversation:<participant>"),
and completion ("complete"). These may appear as ExecutorInvoke/Completed events in
the stream—similar to how concurrent orchestration includes a dispatcher/aggregator.
You can safely ignore them when focusing on agent progress.
Prerequisites:
- Azure OpenAI access configured for AzureOpenAIChatClient (use az login + env vars)
"""
async def main() -> None:
# 1) Create agents
chat_client = AzureAIAgentClient(credential=AzureCliCredential())
writer = chat_client.as_agent(
instructions=("You are a concise copywriter. Provide a single, punchy marketing sentence based on the prompt."),
name="writer",
)
reviewer = chat_client.as_agent(
instructions=("You are a thoughtful reviewer. Give brief feedback on the previous assistant message."),
name="reviewer",
)
# 2) Build sequential workflow: writer -> reviewer
workflow = SequentialBuilder().participants([writer, reviewer]).build()
# 3) Run and collect outputs
outputs: list[list[ChatMessage]] = []
async for event in workflow.run_stream("Write a tagline for a budget-friendly eBike."):
if isinstance(event, WorkflowOutputEvent):
outputs.append(cast(list[ChatMessage], event.data))
if outputs:
print("===== Final Conversation =====")
for i, msg in enumerate(outputs[-1], start=1):
name = msg.author_name or ("assistant" if msg.role == Role.ASSISTANT else "user")
print(f"{'-' * 60}\n{i:02d} [{name}]\n{msg.text}")
"""
Sample Output:
===== Final Conversation =====
------------------------------------------------------------
01 [user]
Write a tagline for a budget-friendly eBike.
------------------------------------------------------------
02 [writer]
Ride farther, spend less—your affordable eBike adventure starts here.
------------------------------------------------------------
03 [reviewer]
This tagline clearly communicates affordability and the benefit of extended travel, making it
appealing to budget-conscious consumers. It has a friendly and motivating tone, though it could
be slightly shorter for more punch. Overall, a strong and effective suggestion!
"""
if __name__ == "__main__":
asyncio.run(main())Error Messages / Stack Traces
Package Versions
agent-framework v1.0.0b260128
Python Version
3.12.10
Additional Context
No response
Metadata
Metadata
Assignees
Labels
agent orchestrationIssues related to agent orchestrationIssues related to agent orchestrationbugSomething isn't workingSomething isn't workingpythonv1.0Features being tracked for the version 1.0 GAFeatures being tracked for the version 1.0 GAworkflowsRelated to Workflows in agent-frameworkRelated to Workflows in agent-framework
Type
Projects
Status
No status