Skip to content

Python: [Bug]: Agents in workflow do not follow instructions. #3507

@buzahid

Description

@buzahid

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 orchestrationbugSomething isn't workingpythonv1.0Features being tracked for the version 1.0 GAworkflowsRelated to Workflows in agent-framework

Type

Projects

Status

No status

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions