Building and Sunsetting Ada: An Internal LLM-Powered Chatbot Assistant

leboncoin · E-commerce · 2025 · source Agentic: no · promotional bias: low · source-backed · extracted with prompt 0.5.5 (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: Internal enterprise LLM assistant

Leboncoin needed a secure internal GenAI assistant that let employees and ML teams experiment with LLMs without leaking confidential data to public services, then had to evolve that assistant into domain-specific knowledge tools and eventually decide whether maintaining it still made sense once commercial enterprise platforms met EU data-residency requirements.

Constraints:

Architecture

Ada began as a private Claude-powered internal chatbot on AWS Bedrock after self-hosted Llama 2 proved costly and weaker for conversation. It then expanded into multiple specialized assistants. Confluence and Lumapps used classic RAG with chunks, embeddings, Postgres vector storage, reranking, and, where useful, query rephrasing. Backstage reused its existing OpenSearch index with lexical search, a keyword rephraser, and reranker. Policy and org-chart assistants skipped retrieval by loading small corpora or the full org graph into context. Slack Apps brought assistants into employee workflows, while LangSmith, Airflow, custom datasets, correctness scoring, and correct-link metrics supported iteration. Ada was later phased out in favor of ChatGPT Enterprise with EU data residency, with some capabilities moving to MCP connectors, Custom GPTs, and n8n workflows.

Diagram confidence: reconstructed (reconstructed from prose).

flowchart LR
  ada-web-assistant[Ada web assistant] --> aws-bedrock-claude[AWS Bedrock Claude]
  ada-web-assistant --> privacy-layer[Privacy layer]
  ada-web-assistant --> assistant-router[Assistant router]
  ada-web-assistant --> slack-apps[Slack Apps]
  assistant-router --> classic-rag-assistants[Classic RAG assistants]
  assistant-router --> backstage-assistant[Backstage assistant]
  assistant-router --> full-context-assistants[Full-context assistants]
  classic-rag-assistants --> postgres-vectordb[Postgres vectorDB]
  classic-rag-assistants --> query-rephraser[Query rephraser]
  classic-rag-assistants --> cohere-reranker[Cohere reranker]
  classic-rag-assistants --> aws-bedrock-claude
  backstage-assistant --> opensearch-index[OpenSearch index]
  backstage-assistant --> query-rephraser
  backstage-assistant --> cohere-reranker
  backstage-assistant --> aws-bedrock-claude
  full-context-assistants --> organization-graph[Organization graph]
  full-context-assistants --> aws-bedrock-claude
  classic-rag-assistants --> evaluation-framework[Evaluation framework]
  backstage-assistant --> evaluation-framework
  full-context-assistants --> evaluation-framework
  chatgpt-enterprise-migration[ChatGPT Enterprise migration] --> mcp-connectors[MCP connectors]
  chatgpt-enterprise-migration --> custom-gpts[Custom GPTs]
  chatgpt-enterprise-migration --> n8n-workflows[n8n workflows]
Drag to pan · scroll or use +/− to zoom · reconstructed from the source's described component topology

Components

Component Role Interacts with
Ada web assistant Initial private ChatGPT-like internal assistant for employees. AWS Bedrock Claude, Privacy layer, Assistant router, Slack Apps
AWS Bedrock Claude Managed Claude model provider selected for conversational quality, privacy guarantees, and lower operational burden than self-hosting. Ada web assistant, Classic RAG assistants, Backstage assistant, Full-context assistants
Privacy layer Deployment policy that kept conversations private and did not store chats, even for the development team. Ada web assistant
Assistant router Product organization layer that separated generic Ada usage into source-specific assistants. Ada web assistant, Classic RAG assistants, Backstage assistant, Full-context assistants
Classic RAG assistants Confluence and Lumapps assistants using chunking, embeddings, Postgres vector search, reranking, and optional query rephrasing. Assistant router, Postgres vectorDB, Query rephraser, Cohere reranker, AWS Bedrock Claude, Evaluation framework
Postgres vectorDB Vector store for embedded Confluence and Lumapps document chunks. Classic RAG assistants
Backstage assistant Technical-documentation assistant that reused Backstage's existing OpenSearch index and added keyword rephrasing plus reranking. Assistant router, OpenSearch index, Query rephraser, Cohere reranker, AWS Bedrock Claude, Evaluation framework
OpenSearch index Existing keyword-search index for Backstage technical documentation. Backstage assistant
Full-context assistants Policy and org-chart assistants that load small document bases or the full org graph directly into the model context. Assistant router, Organization graph, AWS Bedrock Claude, Evaluation framework
Organization graph Structured team, squad, crew, and leadership hierarchy used for relational org questions. Full-context assistants
Query rephraser Preprocessing layer for stripping noisy query terms or converting multilingual questions into forms better suited to retrieval. Classic RAG assistants, Backstage assistant
Cohere reranker Cross-encoder reranking model that scores candidate chunks against the user query after first-pass retrieval. Classic RAG assistants, Backstage assistant
Slack Apps Workflow integration exposing Ada assistants and summarization features directly inside Slack. Ada web assistant
Evaluation framework LangSmith, Airflow, custom datasets, correctness scoring, and correct-link retrieval metrics for assistant quality. Classic RAG assistants, Backstage assistant, Full-context assistants
ChatGPT Enterprise migration Replacement internal assistant foundation with EU data residency, MCP connectors, Custom GPTs, and n8n automation. MCP connectors, Custom GPTs, n8n workflows
MCP connectors Integration path for transferring Ada capabilities to ChatGPT and internal APIs. ChatGPT Enterprise migration
Custom GPTs Action-enabled ChatGPT replacements for some Ada assistant capabilities. ChatGPT Enterprise migration
n8n workflows Workflow automation option for internal-system triggers without engineer-heavy infrastructure. ChatGPT Enterprise migration

Data flow

An employee asks Ada a question through the web interface or Slack. The request is routed to a source-specific assistant. Classic documentation assistants retrieve chunks from embedded Postgres vector stores, then rerank context before Claude answers. Backstage questions are converted to English keywords, searched against OpenSearch, reranked, and answered. Policy or organization-chart questions can load the full small corpus or graph into Claude's context instead of retrieving. Evaluation datasets and LangSmith runs measure correctness and source-link retrieval, while Airflow schedules weekly baselines. When ChatGPT Enterprise added EU data residency, the internal assistant foundation shifted toward OpenAI's platform, with Ada-specific capabilities ported via MCP connectors, Custom GPT actions, and n8n automation.

4 supporting quotes
“Ada, a secure Claude-powered assistant built on AWS Bedrock, brought a ChatGPT-like experience to leboncoin — with one key difference: everything stayed private.”article, stated
“Documents were chunked, embedded and stored in a Postgres vectorDB, enabling semantic retrieval based on similarity.”article, stated
“Since Backstage documents (tech docs) were already indexed with OpenSearch, instead of using embeddings, we retrieved content similar to the user input query by running a “search” API call.”article, stated
“Several features will be ported via Model Context Protocol (MCP) connectors, allowing integration between ChatGPT and internal APIs.”article, stated

Why this architecture

Ada's architecture followed the team's security and learning goals. Bedrock Claude gave better conversational quality and lower operational burden than self-hosting while preserving data controls. Specialized assistants replaced one generic chatbot because internal sources differed: some needed semantic vector retrieval, Backstage already had good lexical infrastructure, and small policy/org corpora could fit directly in context. Slack integration reduced workflow friction. The final migration was architectural pragmatism: once ChatGPT Enterprise satisfied EU data residency, the team could reuse commercial platform capability and redirect scarce GenAI expertise toward user-facing work instead of running a custom internal assistant.

4 supporting quotes
“The superior performance and more sustainable cost model made the shift in direction clear. ### Security & Privacy: A European Concern For a French company like leboncoin, data residency isn’t just a checkbox — it’s essential. Our goal for Ada was”article, stated
“and usage patterns of their domains. This is a critical insight for LLMOps practitioners: there is no one-size-fits-all RAG architecture. The team implemented several distinct approaches depending on the use case. For the Confluence assistant (product and technical”summary, stated
“web interface, she required users to step out of their usual workflows to ask a question. To remove that friction, we brought Ada directly into Slack, by integrating the multiple assistants into specific Slack Apps. We also developed custom Slack features such as **thread”article, stated
“Maintaining an in-house assistant like Ada came with a significant overhead — both technical and operational. Thus, at the end of the first quarter of 2025 the decision was made: Ada would be gradually phased out, and a new internal assistant would”article, stated

Models used: Meta Llama 2 · Anthropic Claude 2 · Anthropic Claude models · Claude Sonnet · Cohere Rerank 3.5 · ChatGPT Enterprise

Scale

Alternatives considered (roads not taken)

Self-host Meta Llama 2

Rejected because: Self-hosting gave theoretical data control, but deployment was complex, chat performance lagged, scaling was tricky, and cost exceeded Bedrock.

“we needed to be confident in how and where the model was running. * Early Experiment: We tried to host Meta’s Llama 2 model on AWS. It seemed promising — total data control, potentially lower long-term costs, and the geeky satisfaction of running a giant”article, stated
“Deployment was complex, performance lagged (especially for chat), and scaling was tricky. At the same time, we compared Llama 2’s answers to Anthropic’s Claude 2, accessed via AWS Bedrock. * The Results: Claude 2 consistently outperformed our in-house”article, stated

Classic RAG for every assistant

Rejected because: Backstage already had OpenSearch, and the policy/org corpora were small enough for full-context approaches.

“One of the biggest lessons from building Ada and related assistants at leboncoin is that a RAG pipeline isn’t always the right answer. Our experience with the Backstage and Organizational Chart assistants is a perfect example of this. ### Why Not RAG?”article, stated
“In some cases, we skipped retrieval entirely and loaded the full document base into the model’s context. This is only feasible when the corpus is small enough to fit within the large context windows of modern LLMs. We used this approach for the Policy”article, stated

Vector database for Backstage technical docs

Rejected because: Using existing OpenSearch avoided a new ingestion pipeline, vector database management, and embedding costs.

“build an assistant for Backstage, we had two choices for surfacing relevant information: * Classic RAG: This would involve retrieving all relevant content (like tech docs and onboarding materials), embedding it, storing it in a vector database, and using semantic search to query”article, stated
“no need for new infrastructure, which reduced deployment time of the MVP to as little as a sprint. **What is OpenSearch? **OpenSearch works by indexing documents and enabling fast keyword-based searches. It’s optimized for log and document search scenarios,”article, stated

Use standard retrieval metrics unchanged

Rejected because: Cosine similarity, answer relevance, and context relevance did not catch hallucinations or weak retrieval in practice.

“cosine similarity, answer relevance, and context relevance. But they didn’t reflect our real-world challenges.”article, stated
“metric comparing the answer to the question), looked good on paper but failed in practice. They didn’t catch hallucinations or weak retrieval. In the end, we focused mainly on two meaningful signals: * Correctness: a metric using an LLM as a judge to evaluate”article, stated

Keep maintaining Ada as the internal assistant foundation

Rejected because: ChatGPT Enterprise met EU data residency needs, and operating Ada consumed technical and operational effort better spent on user-facing GenAI work.

“for ChatGPT Enterprise and the API — ensuring data remains fully within EU boundaries, meeting GDPR, SOC 2, and CSA‑STAR requirements. This change made ChatGPT a viable enterprise solution for European‑based workplaces. As our team developed strong expertise”article, stated
“expertise in generative AI over the course of Ada’s development, we reached a point where it made sense to redirect those skills toward more user-facing use cases. Maintaining an in-house assistant like Ada came with a significant overhead — both technical and operational. Thus, at”article, stated

Patterns

privacy-preserving-processing (privacy)

Ada was built to keep employee prompts and sensitive corporate data inside controlled infrastructure, with no conversations stored by the development team.

“we needed to do it within a safe, controlled infrastructure that protected both our data and our teams”article, stated
“No conversations were stored — not even by the development team — which ensured strong privacy but also introduced complexity, especially when investigating user-reported issues.”article, stated

rag-retrieval (retrieval)

Confluence and Lumapps assistants used classic RAG with chunks, embeddings, Postgres vector storage, semantic retrieval, and Claude generation.

“Documents were chunked, embedded and stored in a Postgres vectorDB, enabling semantic retrieval based on similarity.”article, stated

retrieval-ranking (retrieval)

Leboncoin added Cohere Rerank 3.5 after first-pass retrieval to improve context relevance and answer reliability.

“we introduced a second step: reranking. This transformed our system into a two-stage retrieval pipeline.”article, stated
“For this reranking step, we chose Cohere’s Rerank 3.5 model, which leverages a technique called cross-encoding.”article, stated

query-rewriting (retrieval)

Query rephrasers stripped noisy terms or translated multilingual queries before search, but were applied only where retrieval failure justified them.

“we run the user’s question through a lightweight English keyword rephraser, making the query more compatible with OpenSearch’s index”article, stated
“Rephrasers are a precision tool, not a blanket solution. ## 4. The Sunset of Ada Artificial intelligence is a field that’s reinventing itself at breakneck speed.”article, stated

llm-as-judge (evaluation)

Correctness used an LLM judge to compare generated answers with ground truth and became the primary quality metric.

“Correctness: a metric using an LLM as a judge to evaluate how closely the generated answer matches the ground truth.”article, stated

eval-driven-development (quality)

The team built tailored datasets, custom metrics, LangSmith async evaluations, and weekly Airflow baselines to drive iteration.

“Our team dedicated multiple sprints to build and develop a robust evaluation frameworks.”article, stated
“We also used Airflow to schedule a weekly evaluation baseline. In the end, our evaluation process was fast, smooth, and precise.”article, stated

tool-use-orchestration (integration)

Ada moved from a web interface into Slack Apps and then toward MCP connectors, Custom GPTs, and n8n workflows during migration.

“we brought Ada directly into Slack, by integrating the multiple assistants into specific Slack Apps”article, stated
“we’re exploring n8n, an open-source automation engine, to orchestrate triggers across internal systems”article, stated

human-in-the-loop-gate (quality)

User feedback was incorporated into evaluation datasets so real-world failures influenced future quality checks.

“We also started to gather more user feedback to populate the datasets, which made them much more realistic and reliable.”article, stated

Tradeoffs

Model hosting

Chose Claude via AWS Bedrock over self-hosted Llama 2.

Rationale: Bedrock Claude delivered better conversational quality and reliability with a more sustainable cost model while still satisfying legal/security data guarantees.

“* The Results: Claude 2 consistently outperformed our in-house Llama 2 deployment — especially in terms of conversational quality, nuance, and reliability.”article, stated
“data would remain within the AWS ecosystem and would not be used for model retraining”article, stated

Knowledge-source architecture

Chose source-specific assistants over one generic RAG architecture.

Rationale: Confluence, Lumapps, Backstage, policies, and org charts had different structures, language requirements, corpus sizes, and retrieval failure modes.

“we created a dedicated assistant for each internal data source — each with its own design and purpose”article, stated
“their implementations varied to suit the structure and usage patterns of their respective domains”article, stated

Backstage retrieval

Chose OpenSearch plus keyword rephraser and reranker over building a new embedding/vector RAG pipeline.

Rationale: Reusing the existing index avoided new infrastructure and embedding costs, while rephrasing/reranking handled multilingual quality gaps.

“It offered a much simpler alternative to classic RAG with less overhead and no need for new infrastructure, which reduced deployment time of the MVP to as little as a sprint.”article, stated
“With our final setup (OpenSearch + Rephraser + an additional Reranker), we could achieve a more accurate and consistent result”article, stated

Org chart retrieval

Chose load the full org graph into context over keyword or vector retrieval over individual nodes.

Rationale: Relational hierarchy questions required seeing the whole graph, and the corpus was small enough for modern context windows.

“For organizational questions, we loaded and cached the entire org graph into the assistant’s context.”article, stated
“without needing extra lookups or worrying about language differences”article, stated

Assistant platform strategy

Chose ChatGPT Enterprise with EU data residency over continuing Ada as the main internal assistant.

Rationale: Commercial data residency changed the build-vs-buy calculus and let the team focus GenAI expertise on user-facing use cases.

“ensuring data remains fully within EU boundaries, meeting GDPR, SOC 2, and CSA‑STAR requirements”article, stated
“As our team developed strong expertise in generative AI over the course of Ada’s development, we reached a point where it made sense to redirect those skills toward more user-facing use cases.”article, stated

Gotchas (what bit them)

Self-hosting gave data control but worse operational economics.

Root cause: The Llama 2 deployment was complex, underperformed for chat, required large instances, and remained costly even with off-hours shutdowns.

Resolution: Move to Claude through AWS Bedrock after legal/security review confirmed data-handling guarantees.

“* What Actually Happened: Hosting Llama 2 brought a world of pain. Deployment was complex, performance lagged (especially for chat), and scaling was tricky.”article, stated
“the overall cost was higher than using a managed solution like Bedrock”article, stated

Maximum privacy reduced observability.

Root cause: Ada stored no conversations, including for the development team, which made user-reported issue investigation harder.

Resolution: Accept the privacy tradeoff for the pilot, while recognizing the operational complexity it introduced.

“No conversations were stored — not even by the development team — which ensured strong privacy but also introduced complexity, especially when investigating user-reported issues.”article, stated
“which ensured strong privacy but also introduced complexity, especially when investigating user-reported issues”article, stated

Classic RAG was unnecessary or inferior for some sources.

Root cause: Backstage already had a search index, and the org chart required relational reasoning over a graph rather than isolated keyword matches.

Resolution: Use OpenSearch plus rephrasing/reranking for Backstage, and load the entire org graph into context for organizational questions.

“* Leverage OpenSearch: Since Backstage already integrates with OpenSearch — an open-source engine optimized for keyword search and analytics — we chose to leverage that.”article, stated
“OpenSearch can’t natively answer questions like “Which teams belong to this crew?””article, stated

Generic evaluation metrics missed real failures.

Root cause: Cosine similarity, answer relevance, and context relevance did not expose hallucinations, weak retrieval, table-structure loss, or multilingual issues.

Resolution: Build use-case-specific datasets and prioritize correctness plus correct-link retrieval metrics.

“Confluence assistant struggled with table-based queries because chunking removed headers and lost structure of the arrays”article, stated
“They didn’t catch hallucinations or weak retrieval. In the end, we focused mainly on two meaningful signals:”article, stated

Rerankers improve relevance but add constraints.

Root cause: The reranker adds cost and has a much smaller token limit than Claude Sonnet, which restricts query size.

Resolution: Use reranking where its quality gains justify cost and query-length limits.

“That said, rerankers come with trade-offs. They add some extra cost, and unlike our main LLM (Claude Sonnet, with a 200K token window), the reranker model we used — Cohere Rerank 3.”article, stated
“Cohere Rerank 3.5 — has a 4,096-token limit. This restricts the size of the user query accepted by the system”article, stated

Rephrasers can reduce performance when applied blindly.

Root cause: A prompt-based rephraser hurt the Confluence assistant where retrieval already worked well.

Resolution: Treat rephrasers as targeted fixes for specific retrieval problems, not a default layer.

“When retrieval already performs well, adding a rephraser can hurt. We observed a drop of performance when adding a prompt-based rephraser into our RAG Confluence assistant (the retrieval from user query was already working well in this case).”article, stated
“We observed a drop of performance when adding a prompt-based rephraser into our RAG Confluence assistant”article, stated

The custom assistant could not scale organizational demand.

Root cause: Leadership wanted every team to have an assistant, but a few MLEs could not keep pace while maintaining infrastructure.

Resolution: Phase out Ada and use ChatGPT Enterprise as the internal assistant base, preserving selected secret sauce through connectors and workflows.

“every team should be able to have its own assistant or chatbot. A few MLEs couldn’t keep pace with demand.”article, stated
“Ada would be gradually phased out, and a new internal assistant would center on OpenAI’s platform”article, stated

Evaluation

Ada's evaluation evolved from synthetic Q&A datasets and generic metrics into use-case-specific datasets, multilingual test sets, user-feedback examples, LLM-as-judge correctness, correct-link retrieval scoring, LangSmith asynchronous batched evaluation, and weekly Airflow baselines. The team explicitly used evaluation to catch table chunking loss, weak retrieval, hallucinations, and retrieval-stage failures.

Metrics: cosine similarity · answer relevance · context relevance · correctness · correct links pulled · context relevance 0.63 to 0.73 · correct source link returned in 70% of cases · 120-example evaluation runtime · weekly baseline evaluation · query rephraser correctness lift

4 supporting quotes
“evaluation is often overlooked — but it’s what separates a cool demo from a reliable product”article, stated
“Correctness: a metric using an LLM as a judge to evaluate how closely the generated answer matches the ground truth.”article, stated
“Correct Links Pulled: a custom metric to track whether the right sources were retrieved and used”article, stated
“Its asynchronous evaluation was a real game changer (reducing the time for evaluating a dataset of 120 examples from 30min to 3min), letting us run batched, reproducible experiments efficiently despite the high latency of LLMs.”article, stated

Outcomes

Ada ran for about a year and a half, starting at the end of 2023 and phasing out after Q1 2025. The dedicated team was three MLEs, two software engineers, a PO, and a manager. Measured improvements included Backstage context relevance from 0.63 to 0.73, 70% correct source-link return, 120-example eval runtime reduced from 30 minutes to 3 minutes, and a 10% correctness lift from a simple moderation rephraser.

4 supporting quotes
“Ada became our safe launchpad into GenAI — a way to learn fast, without compromising on trust or security. ### Hosted or Self-Hosted?”article, stated
“We also developed custom Slack features such as thread and channel summarization.”article, stated
“It gave us a fresh exposure to LLM infrastructure, practical prompt engineering, LLM experimentation, RAG and indexing pipelines”article, stated
“Ada would be gradually phased out, and a new internal assistant would center on OpenAI’s platform, allowing the team to focus on higher-impact projects.”article, stated