
Multilingual R&D Knowledge Assistant
6 language agents behind one Teams web app, sharing 5 R&D knowledge bases.
Project details
- Microsoft Copilot Studio
- Teams Custom App
- Direct Line API
- Dataverse
- SharePoint
- GPT-5 Reasoning
- Power Automate
Context
A multinational agri-business group with R&D operations across Europe, Latin America and Central Europe needed an internal knowledge assistant their process experts could query in their working language. 6 languages today: English, French, Portuguese (Brazilian), Czech, Spanish, Dutch. 5 SharePoint knowledge bases shared across all of them (plants, processes, products, equipment, raw materials).
An earlier internal attempt collapsed everything into a single Copilot Studio bot with language treated as a global variable. It demoed well and degraded under real R&D use: per-language quality drifted, transient Copilot Studio errors surfaced raw to the user, and conversation history disappeared the moment Teams closed the chat. The brief for the rebuild was to keep the multi-language reach and add what production needs.
Challenge
Native Copilot Studio is excellent for one agent on one channel. It is less excellent when you need 6 language-tuned agents that share 5 knowledge bases, retry their own errors, cache common answers, export their own conversations, and persist history outside the Teams transcript. None of those properties ship out of the box - collapsing them into a single bot trades them away.
2 harder constraints sat under that. First, per-language quality could not be sacrificed for architectural elegance: process experts in Brazil writing in Portuguese expect answers that read like a Portuguese-speaking colleague wrote them, not a translated English answer with the same generic ranking. Second, R&D leadership needed an auditable conversation record and structured feedback capture that linked feedback to the exact conversation it came from. Native Teams chat could not provide either.
Approach
6 dedicated Copilot Studio agents (one per language), all reading from the same 5 SharePoint knowledge bases, all running GPT-5 Reasoning. In front of them, a custom Teams web app that owns everything Copilot Studio cannot.
The web app is the orchestration layer:
- Language routing. User picks their language in the app; the app calls the matching agent via Direct Line. No language detection guesswork inside the agent.
- Automatic retry on error. Transient throttles and timeouts on the Direct Line side are retried by the web app before they ever reach the user. The agent does not have to know.
- Response caching for cost optimization. Common queries are served from a short-TTL cache instead of paying for another reasoning pass. Tenant cost goes down without changing the agents.
- Conversation history in Dataverse. Every turn persists, keyed per user. Conversations survive across sessions, devices, and Teams restarts - you can pick up a conversation from yesterday.
- PDF export on demand. Any conversation can be exported as a PDF for filing in the QM system or attaching to an experiment report.
- Structured feedback by email, with the conversation log attached. When a user flags an answer, R&D leadership receives the feedback and the full conversation that produced it. Feedback is actionable instead of decontextualized.
2 design insights that did the heavy lifting:
- Per-language agents over one-with-globals. The "single bot, language as a variable" pattern is elegant on a slide and brittle in production: prompt drift between languages, knowledge ranking that does not translate, response style that flattens to the lowest common denominator. 6 independent agents are cheaper to evolve, cheaper to A/B per language, and cheaper to govern. Adding a 7th language is one new agent and one new dropdown entry - not a refactor of the multilingual response template.
- A custom Teams web app over Copilot Studio's native UI. Retry, caching, PDF export, Dataverse history, structured feedback - none of those belong inside a topic graph. The right place for them is a thin front-end that owns the user experience and delegates reasoning to the agents. The native Teams channel was the bottleneck; replacing it unlocked everything else.
Outcome
- 6 language agents in production in the customer tenant, fronted by a custom Teams web app.
- Conversation history persists across sessions via Dataverse - users resume yesterday's thread instead of starting over.
- Retry layer absorbs transient Copilot Studio throttles invisibly; the user never sees a raw error.
- Response caching cuts tenant-side cost on repeat questions without any change to the agents.
- PDF export and structured email feedback adopted by R&D leadership as the primary feedback loop on the agents.
- Architecture extensible to a 7th language with one new agent + one new web app dropdown entry, not a redesign.





