Building a Multi-Agent LLM Platform for Customer Service Automation

deutsche_telekom · Telecommunications · 2023 · source Agentic: yes · promotional bias: med · source-backed · extracted with prompt 0.5.4 (schema v2)

Generated from extraction.json — do not edit by hand. Every claim cites verbatim source evidence; stated means the quote directly asserts the claim, implied means it supports it indirectly.

Problem

Domain: Telecom customer-service automation platform

Deutsche Telekom needed to deploy customer-facing LLM agents across European countries, languages, chat and voice channels, and business domains without each team rebuilding routing, lifecycle, retrieval, testing, guardrails, and deployment infrastructure.

Constraints:

Architecture

Deutsche Telekom built LMOS, an open-source agent computing platform for Frag Magenta 1BOT. A customer-facing chatbot sends requests to an LMOS router, which uses advertised agent capabilities for intent-based routing across isolated business-domain agents. Agents are written with the Kotlin ARC DSL, package as Docker/Helm deployments, call platform services such as customer APIs and search/RAG APIs, and run under a Kubernetes/Istio control plane with channels, runtime bootstrapping, lifecycle management, filters, sensitive-data handling, and rollout controls.

Diagram confidence: explicit (topology described by the source).

flowchart LR
  frag-magenta-chatbot["Frag Magenta chatbot"] --> channel["Channel"]
  frag-magenta-chatbot --> lmos-router["LMOS router"]
  channel --> lmos-router
  lmos-router --> billing-agent["Billing agent"]
  lmos-router --> faq-agent["FAQ agent"]
  lmos-router --> news-agent["News agent"]
  lmos-router --> weather-agent["Weather agent"]
  billing-agent --> lmos-arc["LMOS ARC"]
  billing-agent --> customer-api["Customer API"]
  billing-agent --> search-api["Search API"]
  billing-agent --> faq-agent
  faq-agent --> search-api
  agent-platform["Agent platform"] --> customer-api
  agent-platform --> search-api
  agent-platform --> lmos-kernel["LMOS kernel"]
  lmos-kernel --> lmos-arc
  lmos-control-plane["LMOS control plane"] --> lmos-router
  lmos-control-plane --> channel
  lmos-control-plane --> lmos-runtime["LMOS runtime"]
  lmos-control-plane --> lmos-arc
  lmos-control-plane --> non-arc-agents["Non-ARC agents"]
Drag to pan · scroll or use +/− to zoom · reconstructed from the source's described component topology

Components

Component Role Interacts with
Frag Magenta chatbot Customer-facing chatbot and channel entrypoint for Deutsche Telekom service automation. LMOS router, Billing agent, Channel
Channel Country and channel grouping such as web, app, chat, voice, Germany, Austria, or Hungary. Frag Magenta chatbot, LMOS control plane, LMOS router
LMOS router Intent-based router bootstrapped from agent-advertised capabilities rather than static weight-only routing. Frag Magenta chatbot, Channel, Billing agent, FAQ agent, News agent, Weather agent, LMOS control plane
Billing agent Domain-specific isolated microservice for billing questions, tools, prompts, filters, and dialog flow. LMOS router, LMOS ARC, Customer API, Search API, FAQ agent
FAQ agent Fallback agent holding RAG pipelines for questions the billing agent cannot answer. Billing agent, Search API, LMOS router
News agent Example non-billing agent that advertises news-summary capabilities and joins a multi-agent channel. LMOS router, LMOS control plane
Weather agent Example agent scoped to Germany and Austria web/app channels. LMOS router, LMOS control plane
Agent platform Shared service layer integrating customer APIs, search APIs, RAG, and other services for agents. Billing agent, Customer API, Search API, LMOS kernel
Customer API Business API surface for account, billing, contract, and customer operations. Billing agent, Agent platform
Search API Centralized RAG/search API layer used by FAQ and other agents. Agent platform, FAQ agent, Billing agent
LMOS kernel Foundational computing abstractions for prompting optimization, memory management, LLM handling, checks, and step chains. Agent platform, LMOS ARC, LMOS runtime
LMOS ARC Kotlin DSL for defining agent metadata, model settings, prompts, knowledge, filters, tools, and dialog steps in a small number of scripts. Billing agent, LMOS kernel, LMOS control plane
LMOS control plane Kubernetes/Istio control plane with custom resources for agent lifecycle, channels, tenant management, and traffic management. LMOS router, LMOS runtime, Channel, LMOS ARC, Non-ARC agents
LMOS runtime Bootstraps systems with the agents required for a particular channel or use case. LMOS control plane, LMOS kernel
Non-ARC agents Python, LangChain, LlamaIndex, or other agents that can run on the platform if they follow runtime specifications. LMOS control plane, LMOS router

Data flow

A customer request arrives through a chat, voice, web, or app channel. The LMOS runtime groups the relevant agents for that channel, and the router picks an agent based on intent and advertised capabilities. The selected isolated agent uses a dynamically generated prompt, filters, knowledge blocks, tools such as billing or contract APIs, optional fallback to FAQ/RAG, and output filters. Sensitive data is anonymized before LLM use and deanonymized before the customer response. Agents are packaged and deployed as Docker images/Helm resources, while the control plane manages lifecycle, routing, channels, and traffic.

4 supporting quotes
“We have a single chatbot that's facing our customer and our user, and behind that, we have a collection of agents”article, stated
“In front of that, we have an agent router that routes each incoming request to one of those agents. This means, during a conversation, multiple agents can come into play.”article, stated
“The search API is where all our RAG pipelines reside. The agents themselves, they don't really have to do much of this RAGing”article, stated
“Because this result of this function is fed straight back into the LLM, it's very important for us that we anonymize any personal data.”article, stated

Why this architecture

LMOS was built because rudimentary prompt abstractions and one-off functions would not scale across Deutsche Telekom's countries, channels, APIs, teams, and release needs. Isolated domain agents limit prompt-Jenga blast radius, the platform absorbs hard concerns such as routing, lifecycle, RAG, guardrails, testing, and deployment, and the Kubernetes-native control plane lets agents become first-class deployable resources.

4 supporting quotes
“rudimentary prompt abstractions and functions on top is not going to scale if you want to build this platform.”article, stated
“With this multi-prompt agent design, worst case is you break a single agent as opposed to having the entire chatbot collapse, kind of like Jenga. This is definitely something we struggled with quite a bit at the beginning.”article, stated
“The key part is you need to figure out a way in which this can be platformified, like you build your own Heroku, so that these hard concerns are handled by the platform and it allows democratization of building agents.”article, stated
“agents are now a first-class citizen in the fabric, in the ecosystem, as a customer source, and so is the idea of channels.”article, stated

Models used: GPT-4o · GPT-4o mini · GPT-3.5 · OpenAI tool-calling models · internal German PII model

Scale

Alternatives considered (roads not taken)

Rudimentary functions on top of prompts

Rejected because: The team concluded that this would not scale across countries, business processes, APIs, and specifications.

“versus you build functions on top of a prompt was not particularly appealing if you really wanted to build something which is scalable.”article, stated
“we cannot take a rudimentary approach in building something and expect it to work for all these countries with different business processes, APIs, specifications.”article, stated

Python-first or off-the-shelf LangChain-style stack

Rejected because: Deutsche Telekom had JVM investments, SDKs, and observability libraries, and there was not enough in the JVM ecosystem for their scale needs.

“Also, as Deutsche Telekom, we had huge investments on the JVM stack. A lot of our transactional systems were on the JVM stack. We have SDKs, client libraries already built on the JVM stack, which allows data pulls and also observability platforms.”article, stated
“calling functionality in the OpenAI APIs. LangChain4j was a port which was also emerging, and nothing particularly available in the JVM ecosystem. It's not really the JVM ecosystem, but rather the approach towards a scalable solution, versus you build functions on top of a prompt was not”article, stated

One large prompt/chatbot containing all business domains

Rejected because: Prompt changes are fragile; isolated microservice agents limit failures to one domain agent rather than the whole chatbot.

“LLM prompts can be fragile, and whenever you make a change, no matter how small, you are at risk of breaking the entire prompt.”article, stated
“With this multi-prompt agent design, worst case is you break a single agent as opposed to having the entire chatbot collapse”article, stated

Traditional weight/canary-only routing

Rejected because: Multi-agent systems need intent-based routing from agent capabilities, not just static traffic weights.

“it's not only the traditional routing based on weights and canaries, which is important, now multi-agent systems require intent-based routing”article, stated

Closed ARC-only platform

Rejected because: LMOS was designed to run Python, LangChain, LlamaIndex, or other agents as long as they follow the runtime specs.

“We wanted to build this not as a closed platform where you can only run your ARC agent, or the agents in JVM or Kotlin”article, stated
“The idea is it can all coexist in this platform if it follows the specifications and the runtime specifications”article, stated

Off-the-shelf dialog-tree vendor product

Rejected because: The previous vendor bot had low solution rates, while the LMOS architecture mixed dialog predictability with LLM flexibility and beat vendor handover performance.

“It is based on a vendor product, and it follows the dialog pre-design, which used to be the previous case. It's not like we built this yesterday, so we already had a bot.”article, stated
“The solution rates, however, was low. Because dialog tree-based approaches you can never expect what the customer might ask, the traditional. You used to have their custom DSL, which looks like a YAML file, where you say, if customer asks this, do this, do that.”article, stated

Patterns

multi-agent-orchestration (agents)

LMOS composes a customer-facing chatbot from multiple isolated domain agents and routes each incoming request to the right agent based on intent.

“behind that, we have a collection of agents, each agent focusing on a single business domain running as a separate, isolated microservice.”article, stated
“In front of that, we have an agent router that routes each incoming request to one of those agents.”article, stated

model-routing (routing)

LMOS routes work between agents by advertised capability and intent rather than only by weights or canaries.

“now multi-agent systems require intent-based routing, which you cannot really configure, which is what the LMOS router does.”article, stated
“The router is automatically bootstrapped, and now it dynamically discovers, drops the traffic for this particular channel, and the router picks up the right agent.”article, stated

rag-retrieval (retrieval)

RAG pipelines live behind the search API and FAQ agent rather than being reimplemented inside every business-domain agent.

“The search API is where all our RAG pipelines reside.”article, stated
“we can do a fallback to another agent, which, in most cases, is the FAQ agent, which in turn holds our RAG pipelines”article, stated

guardrails-io-filtering (safety)

ARC filters detect human-agent requests, hacking attempts, fabricated links, unresolved answers, and output artifacts before continuing or falling back.

“We then also have a HackingDetector. Like any other software, LLMs can be hacked, and with this filter here, we can detect that”article, stated
“we want to detect if the LLM is fabricating any information. Here, we can use regular expressions within this filter to extract all the links”article, stated

privacy-preserving-processing (safety)

The agent marks personalized conversations as sensitive, anonymizes IBANs before LLM use, and deanonymizes only before the customer response.

“As soon as the customer is pulling personalized data, we mark the entire conversation as sensitive and apply higher security constructs”article, stated
“anonymizeIBAN, which will anonymize that data so that the LLM never sees the real customer data.”article, stated

canary-rollout (operations)

The platform supports channel and small-percentage releases, allowing agents to be exposed to 1% or 2% of customers before broad rollout.

“the need to reduce the blast radius and release it only for maybe 1%, 2% of the customers, get feedback.”article, stated
“Tenant channel management. Also, agent release is also a continuous iteration process.”article, stated

latency-optimization (operations)

LMOS can execute some LLM checks in parallel and uses smaller models for simpler filters to reduce response delay.

“Often, we execute the LLM sequentially, but in some cases, we also run them in parallel, where it's possible.”article, stated
“For these simpler filters, we usually use lower models, like 4o mini, or even 3.5 which execute a lot faster.”article, stated

eval-driven-development (evaluation)

Flagged questions become test cases for future releases, and human annotators are used because fully automated hallucination/risk detection is not solved.

“we needed human annotators to start with, because there is no particular technique by which you can fully say that an automated pipeline”article, stated
“it can go into that list of test cases which runs, execute it against a new release of that agent.”article, stated

prompt-versioning (operations)

The platform treats prompts as brittle release artifacts and isolates them per agent so prompt changes do not collapse the whole chatbot.

“prompts are so fragile and brittle. There are data scientists, engineers, evaluation teams, so the traditional development lifecycle need to be changed.”article, stated
“With this multi-prompt agent design, worst case is you break a single agent as opposed to having the entire chatbot collapse”article, stated

fallback-degradation (operations)

If the primary agent cannot answer, an unresolved detector can trigger fallback to the FAQ/RAG agent.

“As soon as the LLM says it cannot answer a question, this filter will be triggered, and then we can do a fallback to another agent”article, stated
“the FAQ agent, which in turn holds our RAG pipelines, then should hopefully be able to answer any question that the billing agent itself cannot answer.”article, stated

Tradeoffs

Core platform strategy

Chose build LMOS as an open-source JVM/Kotlin-friendly platform over adopting a Python-first or existing-framework-only approach.

Rationale: Deutsche Telekom had JVM investments and needed enterprise-grade constructs unavailable in the ecosystem at the time.

“we had huge investments on the JVM stack. A lot of our transactional systems were on the JVM stack.”article, stated
“nothing particularly available in the JVM ecosystem.”article, stated

Agent topology

Chose isolated microservice agents by business domain over a single monolithic multi-domain chatbot prompt.

Rationale: Multiple teams could work in parallel and prompt failures had a smaller blast radius.

“we needed to upscale the number of teams working on the application.”article, stated
“With this multi-prompt agent design, worst case is you break a single agent as opposed to having the entire chatbot collapse”article, stated

Knowledge placement

Chose curated one-to-two-page knowledge blocks for most agents over RAG pipelines inside every agent.

Rationale: Modern context windows made small curated knowledge blocks enough for many agents, while central RAG stayed behind the FAQ/search layer.

“we're talking about maybe one or two pages. With modern LLMs that have a context window of 100,000 characters, we don't need RAG pipelines for the majority of our agents”article, stated
“The search API is where all our RAG pipelines reside.”article, stated

Data protection inside tools

Chose anonymize sensitive data before it reaches the LLM over passing real customer data directly through tool results.

Rationale: Tool output is fed back into the LLM, so real personal data must be hidden until the final customer-visible response.

“Because this result of this function is fed straight back into the LLM, it's very important for us that we anonymize any personal data.”article, stated
“as soon as the customer gets the answer, or just before the customer gets the answer, this will be deanonymized”article, stated

Routing mechanism

Chose capability-advertised intent routing over manual routing configuration for every new agent/channel.

Rationale: The router can bootstrap itself from deployed agent capabilities and automatically pick the right agent for a channel.

“The router is automatically bootstrapped, and now it dynamically discovers, drops the traffic for this particular channel, and the router picks up the right agent.”article, stated
“with the agent advertising, I can now handle news summary use cases.”article, stated

Gotchas (what bit them)

LLM prompts behaved like prompt Jenga.

Root cause: Small prompt changes could break unrelated behavior if every domain lived in one prompt.

Resolution: The platform isolates domains into separate agents so a bad prompt change breaks one agent instead of the whole chatbot.

“LLM prompts can be fragile, and whenever you make a change, no matter how small, you are at risk of breaking the entire prompt.”article, stated
“worst case is you break a single agent as opposed to having the entire chatbot collapse”article, stated

Customer-facing models could return surplus or fabricated information.

Root cause: LLMs naturally fill space, may fabricate links or phone numbers, and mix Markdown/JSON artifacts into output.

Resolution: The team uses concise prompts, low temperature/static seed, output cleanup, link verification, and filters.

“Obviously, the number was wrong. The combination of these settings and this single line in the prompt really reduces the surplus information.”article, stated
“we want to detect if the LLM is fabricating any information. Here, we can use regular expressions within this filter to extract all the links”article, stated

LLM testing remained difficult and still needed people in the loop.

Root cause: There was no fully reliable automated technique to identify hallucinations or risky answers.

Resolution: Human annotators, flagged-question test sets, small blast-radius releases, and isolated microservices reduce risk.

“we needed human annotators to start with, because there is no particular technique by which you can fully say that an automated pipeline”article, stated
“Testing is awful. It's very tricky. That's especially why we wanted to have these isolated microservices so we can really limit the damage”article, stated

Voice and chat channels could not share naive prompt flows.

Root cause: Voice channels have different interaction constraints, such as not being able to send links.

Resolution: LMOS uses channels and tenant/channel management so agents can be scoped and adapted by country and channel.

“How do you build a prompt flow, or a use case which requires a different approach in voice channel, as against the chat channel.”article, stated
“You cannot send links, for example, in the voice channel.”article, stated

Production LLM agents must be designed for failure and fast intervention.

Root cause: Jailbreaks and risky answers can happen despite testing.

Resolution: LMOS includes constructs that let teams intervene and deploy fixes within hours.

3 supporting quotes
“Risky answer, there are a lot of goof-ups as well, or the latest one was someone jailbreaked”article, stated
“we need to design for failure.”article, stated
“we have the necessary constructs in the platform which allows us to intervene and deploy a fix within hours.”article, stated

Evaluation

Deutsche Telekom combines human annotators, flagged-question regression tests, production A/B testing against vendor products, acceptable-answer/risk metrics, guardrail tests, and small-percentage releases to validate customer-facing agents.

Metrics: acceptable answer rate · risk rate · human-agent conversations deflected · agent handover performance against vendors · release cadence · agent development time · feature development time · flagged-question regression tests

4 supporting quotes
“with an 89% acceptable answer rate.”article, stated
“more than 300,000 human-agent conversations deflected with a risk rate under 2%.”article, stated
“We did the A/B testing in production, and this is around 38% agent handovers were better in comparison to the vendor products”article, stated
“it can go into that list of test cases which runs, execute it against a new release of that agent.”article, stated

Outcomes

LMOS supports a European customer-service footprint of around 10 countries, 100 million customers, multiple channels, country/channel scoping, and domain agents such as billing, contracts, weather, news, FAQ/RAG, and future non-ARC agents.

4 supporting quotes
“fully homegrown set of tooling, framework, and a full-fledged platform, which is fully open source”article, stated
“more than a million questions answered by the use cases for which we have deployed this, with an 89% acceptable answer rate.”article, stated
“more than 300,000 human-agent conversations deflected with a risk rate under 2%.”article, stated
“We brought it down to two per week in production.”article, stated