[{"data":1,"prerenderedAt":608},["ShallowReactive",2],{"blog-ai-assistant-b2b-shop-customer-support-de":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":14,"about":26,"sources":36,"cover":58,"og":59,"expertise":60,"locales":61,"lang":63,"title":65,"description":66,"coverAlt":67,"metaTitle":68,"takeaways":69,"faq":75,"toc":91,"blocks":119,"others":366},"ai-assistant-b2b-shop-customer-support","2026-10-17",9,"web",[9,10,11,12,13],"B2B e-commerce","AI assistant","Customer support","LLM agents","EU AI Act",[15,16,17,18,19,20,21,22,23,24,25],"ai assistant b2b shop","ai customer support b2b ecommerce","llm chatbot order status","ai agent customer service tools","chatbot liability air canada","klarna ai assistant results","human handoff chatbot design","eu ai act chatbot disclosure","owasp excessive agency","ai support resolution rate","b2b customer portal chatbot",[27,30,33],{"name":28,"url":29},"Customer service","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCustomer_service",{"name":31,"url":32},"Chatbot","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FChatbot",{"name":34,"url":35},"Business-to-business","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FBusiness-to-business",[37,40,43,46,49,52,55],{"title":38,"url":39},"Klarna: AI assistant handles two-thirds of customer service chats in its first month (press release, 2024)","https:\u002F\u002Fwww.klarna.com\u002Finternational\u002Fpress\u002Fklarna-ai-assistant-handles-two-thirds-of-customer-service-chats-in-its-first-month\u002F",{"title":41,"url":42},"Entrepreneur: Klarna is hiring customer service agents again, according to its CEO (May 2025)","https:\u002F\u002Fwww.entrepreneur.com\u002Fbusiness-news\u002Fklarna-ceo-reverses-course-by-hiring-more-humans-not-ai\u002F491396",{"title":44,"url":45},"ABA Business Law Today: BC tribunal confirms companies remain liable for information provided by AI chatbot","https:\u002F\u002Fwww.americanbar.org\u002Fgroups\u002Fbusiness_law\u002Fresources\u002Fbusiness-law-today\u002F2024-february\u002Fbc-tribunal-confirms-companies-remain-liable-information-provided-ai-chatbot\u002F",{"title":47,"url":48},"OWASP GenAI Security Project: LLM06:2025 Excessive Agency","https:\u002F\u002Fgenai.owasp.org\u002Fllmrisk\u002Fllm062025-excessive-agency\u002F",{"title":50,"url":51},"OWASP GenAI Security Project: LLM05:2025 Improper Output Handling","https:\u002F\u002Fgenai.owasp.org\u002Fllmrisk\u002Fllm052025-improper-output-handling\u002F",{"title":53,"url":54},"EU AI Act, Article 50: Transparency obligations","https:\u002F\u002Fartificialintelligenceact.eu\u002Farticle\u002F50\u002F",{"title":56,"url":57},"Intercom: Fin pricing and billable outcomes","https:\u002F\u002Ffin.ai\u002Fpricing","\u002Fimages\u002Fblog\u002Fai-assistant-b2b-shop-customer-support\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fai-assistant-b2b-shop-customer-support\u002Fog.jpg","b2b-ecommerce-developer",[62,63,64],"en","de","hu","Ein KI-Assistent für den Support im B2B-Shop: Tools, Berechtigungen und die Übergabe an Menschen","Wie man einen KI-Support-Assistenten für einen B2B-Shop baut: was automatisieren, Tools im Kundenkontext, Übergabe an Menschen, AI Act und Kennzahlen.","Eine hohe Mauer mit schmalem Durchgang: Ein Pfeil führt in ein Feld mit drei Quadraten, ein zweiter nach unten zu einer Ablage.","KI-Assistenten für den B2B-Shop-Support · Balázs Csorba",[70,71,72,73,74],"Die meisten B2B-Supportfragen sind Abfragen in vorhandenen Systemen: Bestellstatus, Liefertermine, Rechnungen, Zertifikate und Ersatzteile.","Der Assistent ist Teil Ihrer Website, rechtlich und für den Ruf; ein Tribunal machte Air Canada für die Aussagen seines Chatbots haftbar.","Jedes Tool läuft im Kontext des eingeloggten Kunden, die Kunden-ID kommt aus der Session, nie aus Modellargumenten.","Zuerst nur lesend, schreibende Aktionen mit Bestätigung später, und Preise, Angebote und Zusagen bleiben bei Menschen.","Ein sichtbarer Weg zu einem Menschen gehört zum Design, und der EU AI Act verlangt ab 2. August 2026 den Hinweis, dass Nutzer mit einer KI sprechen.",[76,79,82,85,88],{"q":77,"a":78},"Was kann ein KI-Assistent in einem B2B-Shop sicher automatisieren?","Abfragen mit klaren Antworten in vorhandenen Systemen: Bestell- und Lieferstatus, Kopien von Rechnungen und Gutschriften, Produktdokumente wie Datenblätter und Konformitätserklärungen sowie Fragen, die die eigene Dokumentation beantwortet. Schreibende Aktionen wie Nachbestellungen oder Retourenanfragen können später mit ausdrücklicher Bestätigung folgen.",{"q":80,"a":81},"Wer haftet, wenn der Support-Chatbot falsche Auskünfte gibt?","In der Regel das Unternehmen. Im Fall Moffatt gegen Air Canada wies ein kanadisches Tribunal das Argument zurück, der Chatbot sei eine eigene Einheit, und machte die Airline für alle Informationen auf ihrer Website verantwortlich, ob von einer statischen Seite oder einem Chatbot. Zugesprochen wurden rund 650 kanadische Dollar plus Zinsen und Gebühren.",{"q":83,"a":84},"Wie verhindere ich, dass der Assistent Bestellungen anderer Kunden zeigt?","Das Modell darf nicht wählen, wessen Daten es liest. Tools nehmen Kunden- und Firmen-ID serverseitig aus der authentifizierten Session, und die Backend-API erzwingt denselben Umfang. OWASP nennt das Ausführen von Erweiterungen im Kontext des Nutzers als Gegenmaßnahme gegen Excessive Agency.",{"q":86,"a":87},"Gilt der EU AI Act für einen Support-Chatbot im Shop?","Artikel 50 gilt ab 2. August 2026: Anbieter müssen KI-Systeme, die direkt mit Menschen interagieren, so gestalten, dass diese erfahren, dass sie mit einer KI interagieren, sofern das nicht offensichtlich ist. Praktisch heißt das: den Assistenten im Chatfenster klar kennzeichnen.",{"q":89,"a":90},"Wie sollte ich den Assistenten messen?","Gelöste Gespräche, erneute Kontakte innerhalb weniger Tage, Übergabequote und die Qualität der Übergaben messen, nicht nur die Entlastung. Anbieter definieren Lösung unterschiedlich; Intercom etwa berechnet ein Ergebnis, wenn nach der letzten Antwort keine weitere Hilfe angefragt wird.",[92,95,98,101,104,107,110,113,116],{"id":93,"title":94},"what-customers-ask","Was B2B-Kunden den Support tatsächlich fragen",{"id":96,"title":97},"lessons-from-consumer-support","Zwei Lehren aus dem Endkunden-Support",{"id":99,"title":100},"architecture","Architektur: Retrieval, Tools und ein Übergabeweg",{"id":102,"title":103},"tools-in-customer-context","Tools, die im Kontext des Kunden laufen",{"id":105,"title":106},"what-stays-human","Was bei Menschen bleibt",{"id":108,"title":109},"handoff","Die Übergabe gestalten",{"id":111,"title":112},"transparency-and-gdpr","Transparenz, AI Act und Datenschutz",{"id":114,"title":115},"measuring-success","Messen, ob es hilft",{"id":117,"title":118},"sources","Quellen",[120,124,127,130,133,185,188,189,192,195,202,203,206,215,224,225,228,231,234,242,243,251,264,267,268,271,274,275,283,291,292,295,332,340,341],{"type":121,"content":122},"paragraph",[123],"Support in einem B2B-Shop sieht anders aus als im Endkundengeschäft. Es schreiben Einkäufer, Techniker und Buchhalter, die genau wissen, was sie wollen: den Liefertermin von Auftrag 4711, eine Kopie der Rechnung vom letzten Monat, die Konformitätserklärung für ein Teil, den Ersatz für einen abgekündigten Artikel. Die meisten dieser Antworten liegen schon im ERP, im PIM oder in einem Dokumentenspeicher; Zeit kostet das Finden und Aufschreiben.",{"type":121,"content":125},[126],"Das macht B2B-Support zu einem guten Einsatzfeld für einen LLM-Assistenten und zugleich zu einem Ort, an dem Fehler teuer sind: Ein falscher Liefertermin stoppt eine Fertigungslinie, ein falscher Preis wird zum Streitfall. Dieser Beitrag beschreibt, wie ich einen solchen Assistenten für einen B2B-Shop entwerfen würde: welche Anfragen er übernimmt, wie Tools ihre Berechtigungen bekommen, wo Menschen eingebunden bleiben und woran man erkennt, ob er funktioniert.",{"type":128,"level":129,"id":93,"text":94},"heading",2,{"type":121,"content":131},[132],"Bevor man ein Modell oder einen Anbieter wählt, sortiert man ein paar hundert echte Tickets nach Anfragetypen. In den B2B-Shops, an denen ich arbeite, kehren dieselben Kategorien wieder; sie unterscheiden sich vor allem darin, wo die Antwort liegt und was eine falsche Antwort kostet.",{"type":134,"head":135,"rows":142},"table",[136,138,140],[137],"Anfragetyp",[139],"Wo die Antwort liegt",[141],"Rolle des Assistenten",[143,150,157,164,171,178],[144,146,148],[145],"Bestell- und Lieferstatus",[147],"ERP, Sendungsverfolgung",[149],"Direkt beantworten, nur lesend",[151,153,155],[152],"Kopien von Rechnung, Gutschrift, Lieferschein",[154],"ERP oder Dokumentenarchiv",[156],"Direkt mit Download-Link beantworten",[158,160,162],[159],"Datenblätter, Zertifikate, Erklärungen",[161],"PIM, DAM",[163],"Direkt aus dem Dokument beantworten",[165,167,169],[166],"Kompatibilität, Nachfolgeartikel",[168],"PIM-Beziehungen, technische Doku",[170],"Mit Quellen vorschlagen, Fachberater anbieten",[172,174,176],[173],"Retouren und Reklamationen",[175],"AGB, ERP, Qualitätsteam",[177],"Daten erfassen, Fall anlegen, übergeben",[179,181,183],[180],"Preise, Angebote, Zahlungsbedingungen",[182],"Vertrieb, Verträge",[184],"Übergeben; nie zusagen",{"type":121,"content":186},[187],"Die ersten drei Zeilen sind Abfragen mit genau einer richtigen Antwort in einem System, das Sie kontrollieren. Dort verdient sich ein Assistent seinen Platz. Die letzte Zeile ist der Bereich, in dem er nie improvisieren sollte.",{"type":128,"level":129,"id":96,"text":97},{"type":121,"content":190},[191],"Die bekanntesten Zahlen kommen von Klarna. Im Februar 2024 meldete das Unternehmen, sein KI-Assistent habe im ersten Monat 2,3 Millionen Gespräche geführt, zwei Drittel der Kundenservice-Chats, und die Arbeit von 700 Vollzeitkräften erledigt, mit 25 % weniger Folgeanfragen und Anliegen, die in unter 2 statt 11 Minuten gelöst wurden. Im Mai 2025 sagte der CEO gegenüber Bloomberg, Klarna stelle wieder menschliche Supportkräfte ein, weil der günstigere KI-Service geringere Qualität geliefert habe, und Kunden müssten immer wissen, dass es einen Menschen gibt, wenn sie einen wollen.",{"type":121,"content":193},[194],"Die zweite Lehre ist rechtlich. Im Fall Moffatt gegen Air Canada befasste sich ein Tribunal in British Columbia mit einem Chatbot, der einem Kunden sagte, er könne einen Trauerfalltarif nachträglich beantragen, was einer anderen Seite der Airline widersprach. Air Canada argumentierte, der Chatbot sei eine eigene Rechtsperson, die für ihr Handeln selbst verantwortlich sei. Das Tribunal wies das zurück, machte die Airline für alle Informationen auf ihrer Website verantwortlich, ob von einer statischen Seite oder einem Chatbot, stellte fest, dass sie nicht angemessen dafür gesorgt habe, dass der Chatbot korrekt ist, und sprach rund 650 kanadische Dollar plus Zinsen und Gebühren zu. Es ist eine Entscheidung in einem Bagatellverfahren und kein Präzedenzfall für Österreich oder Deutschland, aber die Begründung ist die, die ich von jedem Gericht erwarten würde.",{"type":196,"variant":197,"title":198,"body":199},"callout","note","Der Assistent spricht für das Unternehmen",[200],[201],"Gestalten Sie ihn wie einen neuen Supportmitarbeiter, der schnell ist, aber keine Befugnisse hat: Er darf nachschlagen und erklären, aber keine Liefertermine zusagen, die das ERP nicht zeigt, keine Rabatte gewähren und keine Verträge auslegen.",{"type":128,"level":129,"id":99,"text":100},{"type":121,"content":204},[205],"Ein B2B-Support-Assistent hat drei Arten von Fähigkeiten, und ihre Trennung macht ihn sicher. Retrieval über öffentliches Wissen: Produktdokumentation, FAQs, AGB, Versandregeln. Tools über Kontodaten: Bestellungen, Lieferungen, Rechnungen, alle auf die eingeloggte Firma beschränkt. Und ein Übergabe-Tool, das im Ticketsystem oder CRM einen Fall mit Zusammenfassung anlegt, damit die Person, die übernimmt, nicht bei null beginnt.",{"type":207,"attrs":208,"inner":212,"caption":213},"diagram",{"viewBox":209,"role":210,"aria-labelledby":211},"0 0 720 180","img","b2bsup-arch-t b2bsup-arch-d","\u003Ctitle id=\"b2bsup-arch-t\">Architektur eines B2B-Support-Assistenten\u003C\u002Ftitle>\u003Cdesc id=\"b2bsup-arch-d\">Der Chat läuft über eine Server-Route mit der Session; das Modell nutzt Retrieval, begrenzte Konto-Tools und ein Übergabe-Tool.\u003C\u002Fdesc>\u003Cdefs>\u003Cmarker id=\"b2bsup-arch-ah\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\">\u003Cpath d=\"M0 0L10 5L0 10z\" class=\"d-head\" \u002F>\u003C\u002Fmarker>\u003C\u002Fdefs>\u003Crect x=\"20\" y=\"52\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"79\" y=\"86\" text-anchor=\"middle\" class=\"d-text\">Einkäufer\u003C\u002Ftext>\u003Ctext x=\"79\" y=\"108\" text-anchor=\"middle\" class=\"d-small\">eingeloggt\u003C\u002Ftext>\u003Cpath d=\"M138 90H158\" class=\"d-line\" marker-end=\"url(#b2bsup-arch-ah)\" \u002F>\u003Crect x=\"160\" y=\"52\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"220\" y=\"86\" text-anchor=\"middle\" class=\"d-text\">Server-Route\u003C\u002Ftext>\u003Ctext x=\"220\" y=\"108\" text-anchor=\"middle\" class=\"d-small\">Session, Limits\u003C\u002Ftext>\u003Cpath d=\"M279 90H299\" class=\"d-line\" marker-end=\"url(#b2bsup-arch-ah)\" \u002F>\u003Crect x=\"301\" y=\"52\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-fill-accent\" \u002F>\u003Ctext x=\"360\" y=\"86\" text-anchor=\"middle\" class=\"d-text\">Modell\u003C\u002Ftext>\u003Ctext x=\"360\" y=\"108\" text-anchor=\"middle\" class=\"d-small\">plant, antwortet\u003C\u002Ftext>\u003Cpath d=\"M419 90H439\" class=\"d-line\" marker-end=\"url(#b2bsup-arch-ah)\" \u002F>\u003Crect x=\"441\" y=\"52\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"500\" y=\"86\" text-anchor=\"middle\" class=\"d-text\">Tools\u003C\u002Ftext>\u003Ctext x=\"500\" y=\"108\" text-anchor=\"middle\" class=\"d-small\">Doku, Aufträge, Rechnungen\u003C\u002Ftext>\u003Cpath d=\"M560 90H580\" class=\"d-line\" marker-end=\"url(#b2bsup-arch-ah)\" \u002F>\u003Crect x=\"582\" y=\"52\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"641\" y=\"86\" text-anchor=\"middle\" class=\"d-text\">Übergabe\u003C\u002Ftext>\u003Ctext x=\"641\" y=\"108\" text-anchor=\"middle\" class=\"d-small\">Fall + Zusammenfassung\u003C\u002Ftext>",[214],"Die Session, nicht das Modell, entscheidet, wessen Daten die Tools lesen dürfen.",{"type":121,"content":216},[217,218,223],"Für die Retrieval-Seite gilt die übliche RAG-Technik: Chunking, hybride Suche für Artikelnummern und Reranking, wie in ",{"tag":219,"to":220,"children":221},"link","\u002Fblog\u002Frag-pipeline-chunking-hybrid-search-reranking",[222],"einer produktiven RAG-Pipeline",". Ein B2B-spezifischer Punkt: AGB, Versandregeln und Gewährleistungsbedingungen ändern sich, und ein Assistent, der die Rückgabefrist vom letzten Jahr nennt, ist das Air-Canada-Szenario im Kleinen. Dokumente mit Gültigkeitsdatum und genau einer aktuellen Version indexieren und den Assistenten das Dokument zitieren lassen, aus dem er geantwortet hat.",{"type":128,"level":129,"id":102,"text":103},{"type":121,"content":226},[227],"OWASPs LLM06:2025 Excessive Agency nennt drei Ursachen: zu viel Funktionalität, zu viele Berechtigungen und zu viel Autonomie. Die Gegenmaßnahmen lesen sich wie eine Designvorgabe für einen Support-Assistenten: nur nötige Tools anbieten, jedes Tool eng halten, Erweiterungen im Kontext des Nutzers mit minimalen Rechten ausführen, für folgenreiche Aktionen eine Freigabe verlangen und Autorisierung in den nachgelagerten Systemen durchsetzen, statt das Modell entscheiden zu lassen, was erlaubt ist.",{"type":121,"content":229},[230],"Im Code ist die Regel einfach: Das Modell darf eine Auftragsnummer übergeben, nie eine Kundennummer. Der Server nimmt die Firmen-ID aus der Session, und die Backend-API prüft sie noch einmal. Eine eingeschleuste Anweisung in einer Produktbewertung kann den Assistenten nicht dazu bringen, fremde Rechnungen zu lesen, weil kein Tool diesen Parameter annimmt.",{"type":232,"code":233},"code","\u002F\u002F server\u002Fapi\u002Fassistant.post.ts (Nuxt, AI SDK style tools)\nimport { z } from 'zod'\nimport { tool } from 'ai'\n\nexport default defineEventHandler(async (event) => {\n  const { user } = await requireUserSession(event)        \u002F\u002F 401 if not logged in\n  const companyId = user.companyId                          \u002F\u002F from the session, never from the model\n\n  const tools = {\n    getOrderStatus: tool({\n      description: 'Status, delivery date and tracking for one order of the current customer.',\n      inputSchema: z.object({ orderNumber: z.string().regex(\u002F^[0-9]{6,10}$\u002F) }),\n      execute: async ({ orderNumber }) => {\n        const order = await erp.getOrder(orderNumber, { companyId })   \u002F\u002F ERP enforces the scope too\n        if (!order) return { found: false }\n        return { found: true, status: order.status, confirmedDelivery: order.confirmedDate ?? null, tracking: order.trackingUrl ?? null }\n      },\n    }),\n    handOffToSupport: tool({\n      description: 'Create a support case with a summary when the request needs a person.',\n      inputSchema: z.object({ topic: z.enum(['price', 'complaint', 'return', 'technical', 'other']), summary: z.string().max(1500) }),\n      execute: async ({ topic, summary }) => crm.createCase({ companyId, userId: user.id, topic, summary }),\n    }),\n  }\n  \u002F\u002F ... streamText({ model, system, messages, tools, stopWhen: stepCountIs(5) })\n})\n",{"type":121,"content":235},[236,237,241],"Man beachte, was das Bestell-Tool zurückgibt: einen bestätigten Liefertermin oder null. Hat das ERP keinen bestätigten Termin, sagt der Assistent das, statt zu schätzen. Diese eine Designentscheidung verhindert die schädlichste Klasse von B2B-Supportfehlern. Die größeren Identitätsfragen, Service-Accounts und Token-Scopes, behandle ich in ",{"tag":219,"to":238,"children":239},"\u002Fblog\u002Fai-agent-identity-least-privilege",[240],"KI-Agenten sind Identitäten",".",{"type":128,"level":129,"id":105,"text":106},{"type":121,"content":244},[245,246,250],"Ein Rollout ist eine Abfolge von Berechtigungen, kein Launch. Ich beginne nur lesend: Status, Dokumente, Rechnungen. Schreibende Aktionen wie das Nachbestellen eines früheren Auftrags oder das Anlegen einer Retourenanfrage folgen danach, und nur mit einem ausdrücklichen Bestätigungsschritt in der Oberfläche, der genau zeigt, was abgeschickt wird, nach dem Muster aus ",{"tag":219,"to":247,"children":248},"\u002Fblog\u002Fhuman-in-the-loop-ai-agents",[249],"Freigabestufen mit Human in the Loop",". Manches wandert nie zum Assistenten:",{"type":252,"items":253},"list",[254,256,258,260,262],[255],"Preise, Rabatte und Angebote außerhalb der veröffentlichten Preisliste.",[257],"Lieferzusagen, die das ERP nicht bestätigt hat.",[259],"Auslegung von Verträgen, Gewährleistung oder Haftung.",[261],"Technische Freigabe eines Ersatzteils für eine sicherheitsrelevante Anwendung.",[263],"Alles, was einen verärgerten Key Account betrifft; nach Kundenstufe routen, nicht nur nach Thema.",{"type":121,"content":265},[266],"In diesen Fällen besteht die Aufgabe des Assistenten darin, die Fakten zu sammeln, also Auftragsnummer, Artikel, Menge und was schiefging, und mit einer Zusammenfassung zu übergeben. Das ist trotzdem wertvolle Arbeit, und es ist der Teil, den Kunden bemerken, wenn die Person, die zurückruft, den Fall schon kennt.",{"type":128,"level":129,"id":108,"text":109},{"type":121,"content":269},[270],"Klarnas CEO hat die Anforderung klar formuliert: Kunden müssen wissen, dass es immer einen Menschen gibt, wenn sie einen wollen. In einem B2B-Shop heißt das: eine jederzeit sichtbare Option „mit einem Menschen sprechen“ im Chat, nicht erst nach drei gescheiterten Antworten, plus klare Angaben zu den Supportzeiten. Bei der Übergabe sollte der Fall das Gespräch, die genutzten Tool-Ergebnisse und die eigene Zusammenfassung enthalten, als maschinell erzeugt gekennzeichnet, damit der Mitarbeiter sie prüft, statt ihr zu vertrauen.",{"type":121,"content":272},[273],"Zwei Auslöser für die automatische Übergabe funktionieren gut: Die Anfrage fällt unter ein Thema der Liste „bleibt bei Menschen“, oder der Assistent hat für seine Antwort kein Tool-Ergebnis und keine Quelle. Der zweite Auslöser ist der wichtige. Ein Assistent, der sagt „Ich habe keinen bestätigten Liefertermin gefunden und das an unser Auftragsteam weitergegeben“, ist nützlich; einer, der rät, ist ein Haftungsrisiko.",{"type":128,"level":129,"id":111,"text":112},{"type":121,"content":276},[277,278,282],"Artikel 50 des EU AI Act gilt ab 2. August 2026. Sein erster Absatz verlangt von Anbietern, KI-Systeme, die direkt mit Menschen interagieren, so zu gestalten, dass die Betroffenen erfahren, dass sie mit einem KI-System interagieren, es sei denn, das ist für eine angemessen informierte, aufmerksame und verständige Person offensichtlich. Ein Chat-Widget, das wie ein Live-Chat mit benanntem Mitarbeiter aussieht, ist genau der Fall, in dem es nicht offensichtlich ist; also kennzeichnen. Meine ",{"tag":219,"to":279,"children":280},"\u002Fblog\u002Feu-ai-act-article-50-developer-checklist",[281],"Checkliste zu Artikel 50"," behandelt die Umsetzungsdetails.",{"type":121,"content":284},[285,286,290],"B2B heißt nicht: keine personenbezogenen Daten. Ansprechpartner, Mail-Adressen und Lieferadressen von Personen bei Ihren Kunden sind personenbezogene Daten im Sinne der DSGVO, und das Gesprächsprotokoll wird sie enthalten. Legen Sie die Aufbewahrungsdauer für Transkripte fest, was zum Modellanbieter gelangt und unter welchen Auftragsverarbeitungsbedingungen, und ob Sie eine DSFA brauchen; das ",{"tag":219,"to":287,"children":288},"\u002Fblog\u002Fdpia-llm-feature-worked-example",[289],"durchgerechnete DSFA-Beispiel"," nimmt genau einen Support-Assistenten als Fall.",{"type":128,"level":129,"id":114,"text":115},{"type":121,"content":293},[294],"Die Entlastungsquote, also der Anteil der Chats, die nie einen Menschen erreichen, ist die Zahl, die Anbieter mögen, und die, die Fehler verdeckt: Ein Kunde, der aufgibt, erreicht auch nie einen Menschen. Anbieter definieren außerdem Lösung auf eigene Weise. Intercom, das seinen Agenten Fin mit 0,99 Dollar pro Ergebnis abrechnet, zählt eine Lösung, wenn nach der letzten Antwort von Fin keine weitere Hilfe angefragt wird, und berechnet ein Ergebnis pro Gespräch. Das ist eine vernünftige Abrechnungsregel und eine schwache Qualitätskennzahl, also messen Sie selbst.",{"type":134,"head":296,"rows":303},[297,299,301],[298],"Kennzahl",[300],"Was sie zeigt",[302],"Wie man sie erhebt",[304,311,318,325],[305,307,309],[306],"Verifizierte Lösungsquote",[308],"Antworten, die richtig und vollständig waren",[310],"Wöchentliche menschliche Prüfung einer Zufallsstichprobe",[312,314,316],[313],"Erneuter Kontakt binnen 7 Tagen",[315],"Probleme, die nicht wirklich gelöst wurden",[317],"Chat- und Ticketdaten pro Kunde verknüpfen",[319,321,323],[320],"Übergabequote und Übergabequalität",[322],"Ob Fälle bearbeitungsfertig ankommen",[324],"Mitarbeiter bewerten die Zusammenfassung im Ticket",[326,328,330],[327],"Unbelegte Antworten",[329],"Antworten ohne Tool-Ergebnis oder Quelle",[331],"Automatische Prüfung im Trace",{"type":121,"content":333},[334,335,339],"Die geprüften Gespräche in ein Eval-Set überführen und es vor jeder Prompt- oder Modelländerung laufen lassen, wie in ",{"tag":219,"to":336,"children":337},"\u002Fblog\u002Fllm-evals-for-product-features",[338],"LLM-Evals für Produktfunktionen"," beschrieben. Und bevor Kunden irgendetwas sehen, den Assistenten einige Wochen als internes Werkzeug für das eigene Supportteam betreiben, das Antwortentwürfe verschickt oder verwirft. So entstehen gelabelte Daten, das Team lernt, wo er scheitert, und die erste Version für Kunden startet mit bekannten Grenzen statt mit Hoffnungen.",{"type":128,"level":129,"id":117,"text":118},{"type":252,"ordered":342,"items":343},true,[344,348,351,354,357,360,363],[345],{"tag":346,"href":39,"children":347},"a",[38],[349],{"tag":346,"href":42,"children":350},[41],[352],{"tag":346,"href":45,"children":353},[44],[355],{"tag":346,"href":48,"children":356},[47],[358],{"tag":346,"href":51,"children":359},[50],[361],{"tag":346,"href":54,"children":362},[53],[364],{"tag":346,"href":57,"children":365},[56],[367,437,489,557],{"slug":368,"published":5,"minutes":369,"category":7,"tags":370,"keywords":375,"about":387,"sources":394,"cover":431,"og":432,"expertise":60,"locales":433,"lang":63,"title":434,"description":435,"coverAlt":436},"schema-org-structured-data-b2b-shop",10,[371,372,9,373,374],"Schema.org","Structured data","Technical SEO","Nuxt",[376,377,378,379,380,381,382,383,384,385,386],"schema.org b2b shop","product structured data b2b","merchant listing structured data","product snippet vs merchant listing","unitpricespecification referencequantity","productgroup variants structured data","organization schema vatid","b2b prices behind login seo","json-ld nuxt schema org","merchant return policy structured data","mpn gtin structured data",[388,390,393],{"name":371,"url":389},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSchema.org",{"name":391,"url":392},"JSON-LD","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FJSON-LD",{"name":34,"url":35},[395,398,401,404,407,410,413,416,419,422,425,428],{"title":396,"url":397},"Google Search Central: Introduction to Product structured data","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Fproduct",{"title":399,"url":400},"Google Search Central: Merchant listing (Product, Offer) structured data","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Fmerchant-listing",{"title":402,"url":403},"Google Search Central: Product snippet structured data","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Fproduct-snippet",{"title":405,"url":406},"Google Search Central: Product variant structured data","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Fproduct-variants",{"title":408,"url":409},"Google Search Central: Organization structured data","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Forganization",{"title":411,"url":412},"Google Search Central: Merchant return policy structured data","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Freturn-policy",{"title":414,"url":415},"Google Search Central: General structured data guidelines","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Fsd-policies",{"title":417,"url":418},"Google Search Central: Generate structured data with JavaScript","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Fgenerate-structured-data-with-javascript",{"title":420,"url":421},"Schema.org: Offer","https:\u002F\u002Fschema.org\u002FOffer",{"title":423,"url":424},"Schema.org: UnitPriceSpecification","https:\u002F\u002Fschema.org\u002FUnitPriceSpecification",{"title":426,"url":427},"Unhead: Product schema (defineProduct)","https:\u002F\u002Funhead.unjs.io\u002Fdocs\u002Fschema-org\u002Fapi\u002Fschema\u002Fproduct",{"title":429,"url":430},"Nuxt SEO: Schema.org identity setup","https:\u002F\u002Fnuxtseo.com\u002Fdocs\u002Fschema-org\u002Fguides\u002Fsetup-identity","\u002Fimages\u002Fblog\u002Fschema-org-structured-data-b2b-shop\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fschema-org-structured-data-b2b-shop\u002Fog.jpg",[62,63,64],"Schema.org-Strukturdaten für B2B-Shops: Preise hinter Logins, Einheiten und Varianten","Produkt-Markup für B2B-Shops: Snippet oder Händlereintrag, welcher Preis, Artikelnummern, Grundpreise, Varianten, Organization und SSR in Nuxt.","Ein Produktrechteck mit dünnem Rahmen und einem kleinen Feld, das eine niedrige Wand verdeckt.",{"slug":438,"published":439,"minutes":440,"category":7,"tags":441,"keywords":446,"about":457,"sources":466,"cover":482,"og":483,"expertise":484,"locales":485,"lang":63,"title":486,"description":487,"coverAlt":488},"nuxt-i18n-multilingual-seo-hreflang","2026-10-16",8,[374,442,443,444,445],"i18n","SEO","hreflang","Multilingual",[447,448,449,450,451,452,453,454,455,456],"nuxt i18n seo","nuxt hreflang","useLocaleHead","nuxt i18n canonical","hreflang x-default","prefix_except_default","multilingual seo nuxt","nuxt i18n sitemap hreflang","hreflang self-referencing","nuxt i18n baseUrl",[458,460,463],{"name":374,"url":459},"https:\u002F\u002Fnuxt.com\u002F",{"name":461,"url":462},"Hreflang","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHreflang",{"name":464,"url":465},"Internationalization and localization","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FInternationalization_and_localization",[467,470,473,476,479],{"title":468,"url":469},"Nuxt i18n docs: SEO (useLocaleHead)","https:\u002F\u002Fi18n.nuxtjs.org\u002Fdocs\u002Fguide\u002Fseo",{"title":471,"url":472},"Nuxt i18n docs: Routing strategies","https:\u002F\u002Fi18n.nuxtjs.org\u002Fdocs\u002Fguide",{"title":474,"url":475},"Google Search Central: Tell Google about localized versions of your page","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fspecialty\u002Finternational\u002Flocalized-versions",{"title":477,"url":478},"Google Search Central: Managing multi-regional and multilingual sites","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fspecialty\u002Finternational\u002Fmanaging-multi-regional-sites",{"title":480,"url":481},"Google Search Central: How to specify a canonical URL","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fcrawling-indexing\u002Fconsolidate-duplicate-urls","\u002Fimages\u002Fblog\u002Fnuxt-i18n-multilingual-seo-hreflang\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fnuxt-i18n-multilingual-seo-hreflang\u002Fog.jpg","vue-nuxt-developer",[62,63,64],"Mehrsprachiges SEO mit Nuxt i18n: URL-Strategie, hreflang, Canonicals und Sitemaps","So richtet man Nuxt i18n ein, damit Suchmaschinen jede Sprache indexieren: Routing-Strategie, useLocaleHead, hreflang-Regeln, Teilübersetzungen, Sitemaps.","Ein großes Blatt, durch drei waagrechte Verbindungen an eine Spalte aus drei kleineren Blättern gebunden.",{"slug":490,"published":439,"minutes":491,"category":7,"tags":492,"keywords":497,"about":510,"sources":517,"cover":551,"og":552,"expertise":484,"locales":553,"lang":63,"title":554,"description":555,"coverAlt":556},"llm-endpoint-abuse-denial-of-wallet",14,[374,493,494,495,496],"LLM security","Rate limiting","OWASP","Cost control",[498,499,500,501,502,503,504,505,506,507,508,509],"denial of wallet llm","owasp llm10 unbounded consumption","rate limit llm api nuxt","nuxt security rate limiter","protect openai api key frontend","llm token budget per user","limit llm cost per user","nitro api rate limiting","cloudflare turnstile nuxt","anthropic spend limit","openai hard spend limit","llm prompt size limit",[511,513,516],{"name":494,"url":512},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FRate_limiting",{"name":514,"url":515},"Denial-of-service attack","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FDenial-of-service_attack",{"name":374,"url":459},[518,521,524,527,530,533,536,539,542,545,548],{"title":519,"url":520},"OWASP GenAI Security Project: LLM10:2025 Unbounded Consumption","https:\u002F\u002Fgenai.owasp.org\u002Fllmrisk\u002Fllm102025-unbounded-consumption\u002F",{"title":522,"url":523},"Nuxt Security: Rate Limiter middleware","https:\u002F\u002Fnuxt-security.vercel.app\u002Fmiddleware\u002Frate-limiter",{"title":525,"url":526},"Nuxt Security: Request Size Limiter middleware","https:\u002F\u002Fnuxt-security.vercel.app\u002Fmiddleware\u002Frequest-size-limiter",{"title":528,"url":529},"nuxt-auth-utils: README (GitHub)","https:\u002F\u002Fgithub.com\u002Fatinux\u002Fnuxt-auth-utils",{"title":531,"url":532},"h3: request utilities (getRequestIP, readValidatedBody)","https:\u002F\u002Fh3.dev\u002Futils\u002Frequest",{"title":534,"url":535},"Upstash: Ratelimiting algorithms","https:\u002F\u002Fupstash.com\u002Fdocs\u002Fredis\u002Fsdks\u002Fratelimit-ts\u002Falgorithms",{"title":537,"url":538},"Cloudflare Turnstile: Validate the token","https:\u002F\u002Fdevelopers.cloudflare.com\u002Fturnstile\u002Fget-started\u002Fserver-side-validation\u002F",{"title":540,"url":541},"Claude Platform Docs: Rate limits and spend limits","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fapi\u002Frate-limits",{"title":543,"url":544},"Claude Platform Docs: Token counting","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Ftoken-counting",{"title":546,"url":547},"OpenAI API Docs: Spend limits","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fspend-limits",{"title":549,"url":550},"OpenAI API Docs: Rate limits","https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fguides\u002Frate-limits","\u002Fimages\u002Fblog\u002Fllm-endpoint-abuse-denial-of-wallet\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fllm-endpoint-abuse-denial-of-wallet\u002Fog.jpg",[62,63,64],"Denial of Wallet: öffentliche LLM-Endpunkte in einer Nuxt-App absichern","Missbrauch und ausufernde Kosten auf einer öffentlichen LLM-Route in Nuxt stoppen: Auth, Rate Limits, Prompt-Limits, Token-Budgets, Turnstile, Spend Limits.","Kleine Punkte drängen an einem schmalen Schlitz in einer Wand, nur zwei kommen durch, darüber eine Schiene.",{"slug":558,"published":559,"minutes":6,"category":7,"tags":560,"keywords":564,"about":572,"sources":579,"cover":601,"og":602,"expertise":603,"locales":604,"lang":63,"title":605,"description":606,"coverAlt":607},"llms-txt-vs-markdown-content-negotiation","2026-10-07",[561,562,563,374],"llms.txt","Content negotiation","AI agents",[561,565,566,567,568,569,570,571],"markdown for agents","content negotiation","AI crawlers","generative engine optimization","Accept text\u002Fmarkdown header","llms-full.txt","agent-ready website",[573,576],{"name":574,"url":575},"Markdown","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMarkdown",{"name":577,"url":578},"Hypertext Transfer Protocol","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHypertext_Transfer_Protocol",[580,583,586,589,592,595,598],{"title":581,"url":582},"llmstxt.org: The \u002Fllms.txt file (proposal, version 2)","https:\u002F\u002Fllmstxt.org\u002F",{"title":584,"url":585},"llmstxt.org: Changes from v1 to v2","https:\u002F\u002Fllmstxt.org\u002Fchanges.html",{"title":587,"url":588},"Cloudflare changelog: Markdown for Agents (12 February 2026)","https:\u002F\u002Fdevelopers.cloudflare.com\u002Fchangelog\u002Fpost\u002F2026-02-12-markdown-for-agents\u002F",{"title":590,"url":591},"Cloudflare docs: Markdown for Agents","https:\u002F\u002Fdevelopers.cloudflare.com\u002Ffundamentals\u002Freference\u002Fmarkdown-for-agents\u002F",{"title":593,"url":594},"Ahrefs: 137K sites analyzed, 97% of llms.txt files never get read (June 2026)","https:\u002F\u002Fahrefs.com\u002Fblog\u002Fllmstxt-study\u002F",{"title":596,"url":597},"Checkly: The current state of content negotiation for AI agents (February 2026)","https:\u002F\u002Fwww.checklyhq.com\u002Fblog\u002Fstate-of-ai-agent-content-negotation\u002F",{"title":599,"url":600},"Suganthan: tracking Cloudflare Markdown for Agents on one site","https:\u002F\u002Fsuganthan.com\u002Fblog\u002Fcloudflare-markdown-for-agents\u002F","\u002Fimages\u002Fblog\u002Fllms-txt-vs-markdown-content-negotiation\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fllms-txt-vs-markdown-content-negotiation\u002Fog.jpg","ai-engineer",[62,63,64],"llms.txt versus Markdown Content Negotiation: was Agenten wirklich abrufen","llms.txt ist ein Vorschlag, Markdown Content Negotiation ein Header. Was KI-Agenten abrufen, was die Logs zeigen und wie man beides aus Nuxt und nginx ausliefert.","Zwei Türen nebeneinander mit quadratischem und rundem Griff, ein ankommendes Quadrat wendet sich rechts.",1792222777490]