Amazon Lex vs AI Agent in Amazon Connect: Which to Use for Voice
Lex, the Amazon Connect AI agent and a Bedrock agent are not three rivals. This guide explains how they fit together, the hard limits between them, and how to choose for your calls.
By Naeem Akhtar · 14 min read
In short
- In Amazon Connect, Lex is the bot layer that every approach sits inside. The real choice is what answers behind it: fixed intents, a Connect AI agent, or a Bedrock agent.
- One bot locale cannot mix the Connect AI agent intent with the Bedrock agent intent. Pick per locale, or route between bots in the flow.
- Choose fixed Lex intents for narrow, high-risk steps, and an AI agent for open conversations that need several tool calls.
- AWS marks legacy self-service as receiving no new features. New builds should use agentic self-service.
Lex versus an AI agent is the wrong comparison
Searches for 'Amazon Lex vs AI agent' assume two products compete. In Amazon Connect they do not. AWS states that conversational AI bots built in the Connect admin website are powered by Amazon Lex, and that includes the bots that hand the conversation to an AI agent. Lex does the speech recognition and the bot plumbing. The question is what decides the reply.
There are three answers, and each is switched on through a Lex intent:
- Your own intents, slots and fulfilment: a classic Lex bot where you define what the caller can ask for and what happens next.
- A Connect AI agent, through the agent assist intent (AMAZON.QinConnectIntent): an LLM-driven agent managed inside Amazon Connect.
- A Bedrock agent, through AMAZON.BedrockAgentIntent: an agent you build in Amazon Bedrock and attach to the bot.
This guide compares them against the AWS documentation we checked on 10 November 2026. If you have not built a voice agent yet, start with How to Add an AI Voice Agent to Amazon Connect, then come back here to choose the brain.
The three approaches at a glance
| Classic Lex intents | Connect AI agent | Bedrock agent via Lex | |
|---|---|---|---|
| Who decides the reply | Your intent and slot design | An orchestrator or self-service AI agent in Connect | An agent you define in Bedrock |
| Switched on by | Custom intents with sample utterances | AMAZON.QinConnectIntent | AMAZON.BedrockAgentIntent |
| Tools | Fulfilment Lambda per intent | MCP tools, Return to Control tools, Constant tools (agentic); built-in and custom tools (legacy) | Bedrock action groups and knowledge bases |
| Access control | Your Lambda and IAM roles | Security profiles, the same framework as human agents | IAM permissions for the Lex bot and the Bedrock agent |
| Open-ended questions | Weak: only what you modelled | Strong | Strong |
| Predictability | Highest | Lower; steer with the prompt and tools | Lower; steer with the agent instructions |
Approach 1: Classic Lex intents
This is the original model. AWS describes a bot as a set of intents. Each intent has a name, sample utterances that show how a caller might express it, and a way to fulfil it. Slots are the values the bot must collect before it can act, such as a date or an account number, and AWS recommends a Lambda function for fulfilment. Every bot also has a fallback intent for requests it cannot classify.
Lex also offers Assisted NLU, which AWS says uses LLMs to improve intent classification and slot resolution, but only within the intents and slots you configured. It makes a classic bot more forgiving. It does not make it open-ended.
Classic intents fit best when the set of things a caller can do is small and each one has a clear sequence: check a balance, confirm an appointment, verify an identity before anything else. You can read the whole dialogue off the configuration, which makes testing and sign-off simpler.
Approach 2: The Connect AI agent (legacy and agentic)
You enable a Connect AI agent in a Lex bot with the agent assist intent. AWS documents two generations of self-service built on it, and the difference matters.
- Legacy self-service: the AI agent has built-in tools such as QUESTION, ESCALATION, CONVERSATION, COMPLETE and FOLLOW_UP_QUESTION. When it picks a custom tool, control returns to the contact flow, which reads the Tool session attribute and branches. AWS marks this version as not receiving new feature updates.
- Agentic self-service: an orchestrator AI agent reasons across several steps, calls MCP tools to act on backend systems, and keeps the conversation going until the issue is resolved or it needs to escalate. It returns control to the flow only through a Return to Control tool, and Complete and Escalate are included by default.
AWS recommends agentic self-service for new implementations. To set it up, you create an orchestrator agent by copying SelfServiceOrchestrator, give it a security profile, add tools, set it as the default self-service agent, create a Conversational AI bot with the agent assist intent, and route to it from a Get customer input block. Orchestrator replies must be wrapped in message tags or the caller will not see them. Our step-by-step setup guide walks through each of these.
The security profile point is easy to miss and valuable. The agent can only use the tools its profile allows, the same way a human agent's access is controlled, so you can give an AI agent read access to orders without refund rights.
Approach 3: A Bedrock agent through Lex
Lex also offers AMAZON.BedrockAgentIntent. You give it a Bedrock agent ID and alias, and optionally a Bedrock knowledge base. When the bot recognises the intent, the conversation stays with the agent, and the caller's messages are relayed to it, until the agent marks the conversation finished. Only then does Lex take control back and follow the next step you defined.
The documented requirements are specific. Generative AI must be turned on for the bot locale. The Bedrock agent must have User Input set to enabled under additional settings, because that is what lets it ask follow-up questions. AWS notes that only some Anthropic Claude models are currently supported for the optional model setting. The agent's answer, and details of the action group inputs, are written to session and request attributes your flow can read.
Choose this when the agent logic already lives in Bedrock, for example because you use multi-agent collaboration, existing action groups or a Bedrock knowledge base, and you want the phone channel to reuse it. The trade is that you own more: the agent's instructions, its permissions and its evaluation.
The limits that decide it for you
Several documented restrictions make the choice for you before preference comes into it.
- AMAZON.QinConnectIntent cannot be used in the same bot locale as AMAZON.QnAIntent or AMAZON.BedrockAgentIntent. You cannot run a Connect AI agent and a Bedrock agent in one locale of one bot.
- Each bot locale can have only one agent assist intent, and the Amazon Q in Connect domain it uses must be in the same AWS Region as the Lex bot.
- The agent assist toggle in the Connect admin website works for bots created there. For a bot created elsewhere, you update the intent in the Lex console.
- For a language other than US English, AWS says you must customise the self-service prompts so the agent replies in that language.
- The Set voice language must match the Lex bot locale, or Get customer input errors.
- MCP tools called by a Connect AI agent have a 30-second timeout, so anything slower needs an asynchronous design.
If you need both approaches, the workable pattern is separate bots, or separate locales, with the contact flow deciding which one a call reaches. That keeps each bot's configuration simple and makes it obvious in the logs which one handled the call.
How each one is wired in the contact flow
All three start the same way: a Get customer input block that invokes your Lex bot. What happens after it differs, and this is where most of the real build effort sits.
- Classic Lex: the bot collects slots and runs your fulfilment Lambda. The flow continues from the block's outputs, usually with a Check contact attributes block or intent-based branches. You decide the exact dialogue, so you also write every prompt and error path.
- Connect AI agent, legacy: add the Connect assistant block, then Get customer input. After the agent's turn, a Check contact attributes block with namespace Lex, key Session attributes and session attribute key Tool tells you which tool it chose. Route COMPLETE to the end, ESCALATION to a queue, and a custom tool such as a booking handoff to its own branch. AWS notes that ESCALATION takes the Error branch of Get customer input.
- Connect AI agent, agentic: the same Get customer input block, then a Check contact attributes block on the Default output, reading the Tool session attribute. Add a condition for each Return to Control tool: Complete goes to Disconnect, Escalate goes to Set working queue and Transfer to queue, and any custom tool goes to its own logic. Connect the No match output somewhere safe, such as a transfer to a person.
- Bedrock agent: Get customer input invokes the bot, the Bedrock agent runs the conversation until it finishes, and the flow reads the attributes Lex stored. Build explicit handling for the case where the agent does not finish, because the caller is otherwise left inside the agent's turn.
A practical rule for all three: wire the failure path before the happy path. A call that reaches a person with a summary is a success. A call that goes silent or loops is the failure that costs you a customer.
What each approach hands back to the flow
Your flow can only react to what the bot returns, so it is worth knowing what each one stores.
| Approach | What comes back | How you use it |
|---|---|---|
| Connect AI agent (legacy) | The selected tool name in the Tool session attribute | Branch in Check contact attributes. Custom tools can hand off to another bot or a step-by-step guide |
| Connect AI agent (agentic) | The Return to Control tool name and its input parameters as Lex session attributes | Copy them to contact attributes with Set contact attributes, so routing and the agent screen can use them |
| Agent assist intent (Lex side) | A conversation status of CLOSED, READY or PROCESSING, with a reason of SUCCESS, FAILED or REJECTED | Treat FAILED and REJECTED as a cue to send the caller to a person |
| Bedrock agent intent | The agent's response, plus action group inputs, knowledge base lookup details and sub-agent details, as session and request attributes | Log them for review, and use them to pre-fill a hand-off screen |
The session attributes are your audit trail as much as your routing signal. Decide up front which of them you will store against the contact record, because you will want them the first time someone asks why a call went the way it did.
An escalation tool worth copying
Agentic self-service lets you replace the default Escalate tool with one that captures context, so the person who picks up the call does not start from zero. AWS publishes this input schema as an example, with a reason category, a summary, the customer's intent and their sentiment:
{
"type": "object",
"properties": {
"customerIntent": { "type": "string", "description": "A brief phrase describing what the customer wants to accomplish" },
"sentiment": { "type": "string", "enum": ["positive", "neutral", "frustrated"] },
"escalationSummary": { "type": "string", "maxLength": 500 },
"escalationReason": {
"type": "string",
"enum": ["complex_request", "technical_issue", "customer_frustration", "policy_exception", "out_of_scope", "other"]
}
},
"required": ["escalationReason", "escalationSummary", "customerIntent", "sentiment"]
}Remove the default Escalate tool, create a Return to Control tool with this name and schema, describe in its instructions when to use it, and copy the four values to contact attributes in the flow. The enumerated reasons also give you something to count: after a month you can see whether callers escalate because of policy exceptions or because the agent could not understand them, which points at very different fixes.
One call, three designs
To see the difference, take a single call: a patient phones to move tomorrow's appointment to Thursday afternoon.
| Classic Lex | Connect AI agent (agentic) | Bedrock agent | |
|---|---|---|---|
| How it starts | A MoveAppointment intent matches sample utterances such as 'I need to change my appointment' | The orchestrator agent greets the caller and asks what they need | The bot recognises the agent intent and relays the caller's words to the agent |
| Collecting details | Slots for current date, new date and time, each with a prompt and re-prompt you wrote | The agent asks for what it needs in its own words and can accept 'Thursday afternoon, any time after two' | The agent asks follow-ups, provided User Input is enabled |
| Taking action | Fulfilment Lambda checks availability and books | MCP tools look up the booking and move it, within the security profile | An action group runs the lookup and change |
| Caller changes their mind midway | Works only if you modelled it, or falls to the fallback intent | Handled in conversation | Handled in conversation |
| Where it can go wrong | Caller phrasing you did not anticipate | A tool call returning something the prompt did not expect | The agent finishing, or failing, in a way the flow did not plan for |
The classic design is the most predictable and the least flexible. The two agent designs absorb messy phrasing well but need good tools, a clear prompt and a tested failure path. Which trade you want depends on how costly a wrong action is in your business, not on which technology is newer.
Moving from legacy self-service to agentic
If you already run the legacy AI agent, AWS's guidance is to use agentic self-service for new implementations, so a migration plan is worth drawing up even if you do not act on it now. We have not found a published one-click migration, so treat this as a sensible order of work rather than an AWS procedure.
- List the custom tools in your legacy prompt, such as a booking handoff, and what each branch in your flow does after it.
- Decide which become MCP tools the agent calls directly, and which stay as Return to Control hand-offs because they need fixed, auditable steps.
- Create a security profile that allows only the MCP tools you chose.
- Create the orchestrator agent from SelfServiceOrchestrator and move your instructions across. Remember that orchestrator replies must be wrapped in message tags.
- Use Constant tools to stand in for backend calls while you tune the conversation, then swap in the real MCP tools.
- Run the new bot beside the old one on a test number, compare outcomes on the same call set, and only then move the production number.
Keep the legacy configuration in place until the new one has handled real traffic without surprises. Rolling back a phone number to the previous flow is quick. Rebuilding a configuration you deleted is not.
Risk and governance compared
| Question a reviewer will ask | Classic Lex | Connect AI agent | Bedrock agent |
|---|---|---|---|
| What can it do to our systems? | Only what your Lambda does | Only the MCP tools its security profile allows | Only what the action groups and IAM permissions allow |
| Can we predict what it says? | Yes, you wrote every prompt | Shaped by the prompt, not fixed | Shaped by the agent instructions, not fixed |
| Where is the logic reviewed? | Intent and Lambda configuration | Agent prompt, tools and security profile | Bedrock agent configuration, outside Connect |
| How do we stop it acting on a risky step? | Do not model that step | Return to Control tool to a fixed flow path | Handle the step in the flow and keep it out of the agent's actions |
| What do we log? | Intent, slots, Lambda calls | Tool session attributes, transcripts | Agent response and action group inputs in attributes |
None of these is automatically safer. A badly scoped Lambda in a classic bot can do as much damage as an over-permissive agent. What changes is where you look: in the classic design you review the dialogue, and in the agent designs you review the permissions and the tools.
How to choose
| Your situation | Lean towards | Why |
|---|---|---|
| Five to ten fixed tasks, each with a set sequence | Classic Lex intents | Predictable, easy to test, no model in the loop |
| Callers describe problems in their own words and need several lookups | Connect AI agent (agentic) | Multi-step reasoning with MCP tools and security profiles inside Connect |
| Agent already built in Bedrock with action groups or a knowledge base | Bedrock agent via Lex | Reuses what exists; you own the agent's evaluation |
| A payment or identity step that must never improvise | Classic intent for that step | Route from the agent with a Return to Control tool |
| Existing legacy AI agent self-service | Plan a move to agentic | Legacy gets no new features, per AWS |
| Many languages | Test each locale first | Non-English self-service prompts need customising |
Our own default for a new voice agent that takes calls and acts on systems is agentic self-service with tight tools, plus a classic intent for any step where the wording and sequence must be exact. That is a judgement from builds we have done, not an AWS recommendation, so test it against your own call types.
Mixing them without losing control
A common worry is that an AI agent will improvise on a sensitive step. The agentic design gives you a clean answer. Give the agent a Return to Control tool for each hand-off, such as VerifyIdentity or TakePayment. When it invokes one, the AI conversation ends, the tool name and its parameters are stored as Lex session attributes, and your flow routes to the fixed part. Whether the caller then returns to the agent is a flow design choice, and one to test, because we did not find AWS documentation describing how context carries across the return.
This keeps the exact wording, validation and logging of regulated steps under your control, and leaves the open conversation to the model. It also gives you a natural place to record what the agent passed on, which helps when you review calls.
When it does not behave
| Symptom | Likely cause | Fix |
|---|---|---|
| Caller hears nothing from an orchestrator agent | The reply was not wrapped in message tags | Wrap responses in message tags in the prompt and examples |
| Bedrock agent never asks a follow-up question | User Input is not enabled on the agent | Enable User Input under additional settings on the Bedrock agent |
| Cannot enable the agent assist intent | The locale already has QnAIntent or BedrockAgentIntent | Remove it, or use a separate bot or locale |
| Agent assist intent fails to start | The Q in Connect domain is in a different Region from the bot, or the session ARN was not created | Use the same Region, and add the Connect assistant step to the flow |
| Get customer input errors after changing voice | Set voice language does not match the bot locale | Match them, and use Set language attribute for non-US English voices |
| Replies in the wrong language | Self-service prompts still in English | Customise the self-service prompts for the locale |
| Flow ends with no match after the agent | No condition for the tool the agent returned | Add a condition for each Return to Control tool, and send No match to a person |
| A slow tool call breaks the turn | MCP tool exceeded the 30-second timeout | Return quickly and finish the work asynchronously |
Most of these are configuration mismatches rather than model problems, which is good news: they are quick to fix once you know where to look.
Test before you commit
Do not pick from a feature table. Take twenty real calls, or scripted versions of them, and run each approach against the same set. Score three things: did the caller reach the right outcome, did it take a sensible number of turns, and did it hand off to a person at the right moment. Include awkward calls: a caller who changes their mind, one who gives a number slowly, one who asks for something out of scope.
| Score each call on | What good looks like |
|---|---|
| Outcome | The caller got what they called for, or reached a person with the right summary |
| Turns | No repeated questions, and no more turns than a human would need |
| Hand-off timing | Escalated when it should, not too early and not after the caller gave up |
| Action accuracy | Every tool call used the right values, checked against the system of record |
| Failure path | When something broke, the call ended up with a person rather than silence |
Then listen on a real phone line. A design that reads well in the test console can feel slow on a call. If latency is your worry, see How to Measure AI Voice Agent Latency in Amazon Connect for a turn-by-turn method, How to Add an AI Voice Agent to Amazon Connect for the voice and speech settings, and the architecture and build guide for where the time goes. To have this designed and evaluated for your contact centre, see our AI voice agent development service.
Frequently asked questions
Is Amazon Lex still needed if I use an AI agent in Amazon Connect?
Yes. AWS states that conversational AI bots created in the Amazon Connect admin website are powered by Amazon Lex. The AI agent is switched on through an intent in that bot, so Lex remains the layer that handles the call and passes the conversation to the agent.
Can I use a Bedrock agent and a Connect AI agent in the same bot?
Not in the same bot locale. AWS documents that the agent assist intent cannot be used alongside AMAZON.BedrockAgentIntent or AMAZON.QnAIntent in one locale. Use separate bots or locales and let the contact flow decide which one a call reaches.
What is the difference between legacy and agentic self-service in Amazon Connect?
In legacy self-service the AI agent hands control back to the contact flow whenever it selects a custom tool. In agentic self-service an orchestrator agent can chain several reasoning steps and MCP tool calls in one conversation, and returns control only through a Return to Control tool such as Complete or Escalate. AWS says legacy self-service no longer receives new features.
When should I keep classic Lex intents?
When the tasks are few, the sequence is fixed and the wording must be exact, such as identity checks or payments. Classic intents are predictable and easy to test. They can also sit alongside an AI agent, with the flow routing between them.
Does a Connect AI agent work in languages other than English?
AWS says that for languages other than US English you must customise the self-service prompts so the agent responds in that language, and the Set voice language must match the Lex bot locale. Test each language you plan to support rather than assuming parity.
Can a Connect AI agent call my own systems?
Yes. In agentic self-service the orchestrator agent calls MCP tools to look up and change records in backend systems, within the access its security profile grants. Tool calls have a 30-second timeout, so slow operations should return quickly and finish in the background.
What happens if the AI agent cannot resolve the call?
The agent invokes a Return to Control tool such as Escalate. Control returns to the contact flow, which reads the tool name from the Lex session attributes and transfers the caller to a queue. A custom Escalate tool can pass a reason, summary and sentiment so the person who answers has context. Always connect the No match output of the check to a person.
Should I migrate from legacy self-service now?
AWS says legacy self-service is not receiving new feature updates and recommends agentic self-service for new implementations. Existing legacy setups keep working, so migrate when you need agentic capabilities or want to avoid being stuck on a frozen design. Run the new design beside the old one on a test number first.
Which option is cheapest to run?
It depends on call volume, model usage and which services you already pay for, and AWS prices change. Compare current Amazon Connect, Amazon Lex and Amazon Bedrock pricing against your expected minutes and tool calls, and measure a pilot before projecting a monthly figure.
Need help with AI Voice Agents? Talk to the engineers.
Tell us what you want to build. You'll get a straight answer on scope, approach and cost from the people who do the work.
Keep reading
Related guides
Voice AI
How to Add an AI Voice Agent to Amazon Connect: Step-by-Step Setup Guide
Every step to put an AI voice agent on a phone number in Amazon Connect: instance, number, orchestrator AI agent, tools, bot, voice, contact flow and a test call, checked against the current AWS documentation.
15 min read
Voice AI
AI Voice Agent for Amazon Connect: Architecture and Build Guide
A practical guide to building an AI voice agent on Amazon Connect — the build options, the call flow, what drives cost, and the mistakes that sink pilots.
17 min read
Voice AI
Amazon Connect Custom Voice: Every Voice Option for an AI Voice Agent
What 'custom voice' can mean in Amazon Connect, and how to set up each option: agentic voice, Amazon Polly, Nova Sonic, ElevenLabs and Brand Voice, with the security setup and the traps that cost time.
11 min read