🔍 Recherchiert mit find_files, find_files, read_file, read_file, read_file, read_file, read_file, read_file, find_files, find_files, find_files, read_file, read_file, read_file, read_file, read_file, read_file, read_file, read_file, find_files, find_files, find_files, read_file, read_file, read_file, read_file, read_file
🤖 Odoo 19 Enterprise – AI Use Cases mit Beispielen
Ich habe den gesamten Quellcode durchsucht und kann dir jetzt konkrete, belegte Use Cases liefern. Hier sind alle 6 echten Anwendungsfälle mit detaillierten Beispielen:
📋 Use Case 1: „Ask AI" – Natürlichsprachige Navigation & Datenabfragen
Was passiert im Hintergrund?
enterprise_19/ai/data/ai_agent_data.xml:8 → <record id="ai_agent_natural_language_search"> mit llm_model="gemini-2.5-flash" und response_style="analytical"
Der „Ask AI"-Agent verwendet bewusst Gemini 2.5 Flash mit Temperature 0.2 (analytical) – das macht ihn schnell und präzise für Tool-Calls, nicht kreativ.
enterprise_19/ai/data/ai_agent_data.xml:13 → Das System-Prompt enthält zwei klar getrennte Entscheidungspfade:
- „Wer/Wann/Wie"-Fragen → Information Retrieval (antwortet direkt)
- „Zeig/Öffne/View"-Fragen → Navigation (öffnet Odoo-Ansicht)
Konkrete Beispiele:
| Du tippst… | Was die AI macht |
|---|---|
| „Who are my top 5 sales reps?" | Ruft get_fields + read_group auf sale.order auf, antwortet direkt im Chat |
| „Show me a bar chart of top-selling products" | Ruft get_menu_details + open_menu_graph auf – öffnet automatisch die richtige Ansicht mit Balkendiagramm |
| „Do I have customers in Japan?" | Baut Domain [["country_id.code","=","JP"]], sucht in res.partner, antwortet mit Namen |
| „Pivot of products with less than 5 in stock" | Ruft open_menu_pivot mit custom_domain=[["qty_on_hand","<",5]] auf |
enterprise_19/ai/data/ai_topic_data.xml:51 → Kritische Regel im Code: Dotted-Paths wie lines.product_id.name sind NUR in custom_domain erlaubt – niemals in search oder groupbys. Das verhindert ORM-Fehler.
enterprise_19/ai/models/ai_prompt_button.py:4 → PROMPT_MODULE_MAP – Die Quick-Prompts im Systray sind modulabhängig: Nur wenn z.B. accounting installiert ist, erscheint „Show me the current cash flow status".
📧 Use Case 2: E-Mail & Chatter AI-Hilfe
2a. E-Mail verfassen (mail_composer)
enterprise_19/ai/data/ai_composer_data.xml:96 → <record id="ai_mail_composer"> – Das System-Prompt legt fest:
„YOUR REPLY WILL BE INSERTED AS IS – WRITE ONLY THE BODY. DO NOT ADD COMMENTARY, SUBJECT LINE, OR SIGNATURE."
Beispiel-Ablauf:
- Du öffnest die E-Mail-Compose-Maske auf einem CRM-Lead
- Du klickst auf „Write a followup answer"
- Die AI liest den bisherigen Chatter-Verlauf und schreibt einen passenden Antwort-Entwurf
- Der Text wird direkt in das Compose-Feld eingefügt – ohne Umweg
2b. Chatter zusammenfassen (chatter_ai_button)
enterprise_19/ai/data/ai_composer_data.xml:122 → <record id="ai_chatter_helper"> – Zwei Quick-Prompts sind vorinstalliert:
- „Summarize the chatter conversation" → Gibt eine strukturierte Zusammenfassung: erst kurze Beschreibung, dann fettgedruckte Bullet-Points mit jedem Schlüsselereignis
- „Write a followup answer" → Schreibt eine Antwort im Ton der bisherigen Nachrichten
2c. Markierten Text umschreiben (html_field_text_select)
enterprise_19/ai/data/ai_composer_data.xml:113 → <record id="ai_html_text_selector"> – Du markierst Text in einem HTML-Feld, die AI ersetzt ihn direkt. Quick-Prompt: „Rewrite selected text". Die Antwort ersetzt die Selektion 1:1.
2d. E-Mail-Template Platzhalter ausfüllen (html_prompt_shortcut)
enterprise_19/ai/data/ai_composer_data.xml:131 → <record id="ai_mail_template_prompt_evaluator"> – Wenn ein Template <div class="o_editor_prompt"> enthält, ersetzt die AI diese Platzhalter automatisch. Wichtige Regel aus dem Code:
„Ideas linked to
false,undefined,nullor[value]should be IGNORED – don't invent dates or names."
Beispiel aus dem Code (Zeile 160–165):
- Input:
"Insert a greeting mentioning 'Burger Maison' and reminding them of [deadline]." - Output:
"We're thrilled to announce the launch of Burger Maison – thank you for your continued partnership." [deadline]fehlt → dieser Teil wird einfach weggelassen
📁 Use Case 3: Automatische Dokumenten-Sortierung
Wie es funktioniert:
enterprise_19/ai_documents/wizard/ai_documents_sort.py:46 → AiDocumentsSort.default_get() – Beim Öffnen des Wizard wird automatisch ein Default-Prompt vorausgefüllt:
"If the document is an invoice, send it to [Finance-Ordner]"
Die Finance-Ordner-ID wird dynamisch eingesetzt.
enterprise_19/ai_documents/wizard/ai_documents_sort.py:98 → action_setup_folder() – Diese Methode speichert den Prompt auf dem Ordner und richtet Automations-Regeln ein. Ab diesem Moment wird jedes neu eingehende Dokument in diesem Ordner automatisch verarbeitet.
enterprise_19/ai_documents/data/ir_actions_server_tools.xml:3 → Zwei AI-Tools stehen zur Verfügung:
- „AI: Move To Folder" – verschiebt das Dokument in einen Ziel-Ordner (
folder_idals Parameter) - „AI: Add Tags" – setzt Tags auf dem Dokument (
tag_namesals Array)
Konkrete Beispiele:
| Eingehende Datei | Dein Prompt | Ergebnis |
|---|---|---|
rechnung_april.pdf |
„If invoice → Finance" | → Ordner „Finance" |
vertrag_kunde.pdf |
„If contract → Legal, add tag 'review'" | → Ordner „Legal" + Tag „review" |
foto_produkt.jpg |
„If image → Marketing" | → Ordner „Marketing" |
📞 Use Case 4: VOIP-Anruf Transkription & Zusammenfassung
Schritt 1 – Transkription:
enterprise_19/voip_ai/controllers/voip_ai_controller.py:8 → TRANSCRIPTION_MAX_FILE_SIZE = 25 * 1024 * 1024 – Die Grenze liegt bei exakt 25 MB (OpenAI API-Limit). Bei Überschreitung: Status too_big_to_process.
enterprise_19/voip_ai/controllers/voip_ai_controller.py:12 → VoipAiController.transcribe_call() – Der Ablauf:
- Prüft ob Aufnahme bereits existiert (
transcription_status != "no_audio") – verhindert Manipulation - Speichert die
.ogg-Aufnahme alsir.attachment - Setzt Status auf
pending - Triggert sofort den Cron:
ir_cron_transcribe_recent_voip_call._trigger()
Schritt 2 – Automatische Zusammenfassung:
enterprise_19/voip_ai/models/voip_call.py:33 → VoipCall._cron_transcribe_recent_voip_call() – Nach der Transkription ruft der Cron automatisch den „Call Summarizer"-Agent auf:
enterprise_19/voip_ai/data/ai_agent_prompts.xml:4 → <record id="voip_call_summary_agent"> – Das System-Prompt ist äußerst präzise definiert:
- Max 10 Wörter oder 60 Zeichen
- Beginnt mit Gerundium (z.B. „Discussing…") oder Substantivphrase
- Keine Pronomen, kein „is/are/was"
- Mehrsprachig: nimmt die Sprache des Kunden
Beispiele:
| Anruf-Inhalt | AI-Zusammenfassung |
|---|---|
| Kunde fragt nach Preis für Produkt X | "Requesting pricing for Product X" |
| Support-Anruf wegen Lieferproblem | "Resolving delivery issue" |
| Kandidaten-Interview für Stelle | "Interviewing candidate for position" |
Schritt 3 – Quick-Prompts danach:
enterprise_19/ai/data/ai_composer_data.xml:206 → <record id="ai_voice_transcription"> – Nach der Transkription erscheinen 3 Quick-Prompts:
- „Summarize this recruitment call"
- „Summarize this prospect call"
- „Write an email recap"
🤝 Use Case 5: CRM Lead-Erstellung via Livechat
Der komplette Flow aus dem Code:
enterprise_19/ai_crm/data/ai_topic.xml:3 → <record id="ai_crm.ai_topic_create_lead"> – Das Topic definiert einen strikten 5-Schritt-Flow:
1. Schlage dem Kunden vor, dass jemand ihn zurückruft
2. Frage Name → 2.1 dann E-Mail → 2.2 dann Telefon → 2.3
(IMMER einzeln! Nie alle auf einmal!)
3. Rufe das Lead-Tool GENAU EINMAL auf
4. Antworte mit: "Thanks. Our team will recontact you soon."
5. Verrate NIE interne Tool-Namen oder System-Status
enterprise_19/ai_crm/models/crm_lead.py:13 → CrmLead._ai_create_lead() – Die Methode erstellt den Lead mit allen gesammelten Feldern: name, contact_name, email, phone, team_id, tag_ids, priority, plus optionale Adressfelder.
enterprise_19/ai_crm/models/crm_lead.py:55 → Wichtige Logik: Wenn der User eingeloggt ist (not env.user._is_public()), wird automatisch der bestehende res.partner verknüpft und fehlende Adressfelder ergänzt. Für anonyme Website-Besucher werden alle Felder neu angelegt.
enterprise_19/ai_crm/models/ai_agent.py:14 → AIAgent._auto_init() – Jeder AI-Agent bekommt beim Installieren automatisch eine utm.source-ID, damit Leads die richtige Traffic-Quelle zugewiesen bekommen.
Beispiel-Gesprächsverlauf:
Kunde: "I need a custom quote for 500 units"
AI: "I'd be happy to have someone from our team reach out.
May I ask your name?"
Kunde: "Anna Müller"
AI: "Thanks Anna! What's the best email to reach you?"
Kunde: "anna@example.com"
AI: "And your phone number?"
Kunde: "+49 123 456789"
AI: "Thanks. Our team will recontact you soon."
→ Lead wird im CRM angelegt ✅
🧠 Use Case 6: Eigener Agent mit Wissensbasis (RAG)
Wissensquellen hinzufügen:
enterprise_19/ai/models/ai_agent_source.py:57 → AIAgentSource.create_from_attachments() – Lädt PDFs/Dokumente hoch. Prüft zuerst via checksum, ob die Datei bereits als Embedding vorliegt – verhindert Doppelverarbeitung.
enterprise_19/ai/models/ai_agent_source.py:109 → AIAgentSource.create_from_urls() – Nur für Admins (self.env.is_system()). Scrapt die URL, liest den Titel via OpenGraph-Preview aus.
RAG-Abruf bei jeder Anfrage:
enterprise_19/ai/models/ai_agent.py:588 → AIAgent._build_rag_context(prompt) – Der Ablauf:
- Erstellt Embedding-Vektor des User-Prompts
- Findet Top 5 ähnlichste Chunks aus allen indizierten Quellen
- Prüft Zugriffsrechte pro Quelle
- Unzugängliche Quellen →
[UNACCESSIBLE_REFERENCES]– AI darf sie nicht zitieren - Zugängliche Quellen → werden als
##Context informationmitgegeben
enterprise_19/ai/models/ai_agent.py:50 → PREPROMPTS['restrict_to_sources'] – Wenn restrict_to_sources = True:
„For all questions, ONLY use information from the provided context. DO NOT make up information or use general knowledge."
Beispiel-Szenario: Interner Support-Bot
Agent-Setup:
- Name: "HR-Assistent"
- System-Prompt: "Du bist der HR-Assistent der Firma."
- Quellen: employee_handbook.pdf, vacation_policy.pdf
- restrict_to_sources: ✅ AN
Mitarbeiter fragt: "Wie viele Urlaubstage habe ich im ersten Jahr?"
→ AI sucht in vacation_policy.pdf → findet Abschnitt → antwortet korrekt
→ Bei Frage zu etwas nicht in den Docs: "No source information available"
🎛️ Alles auf einen Blick
| Use Case | Modul | Trigger | Steuerbar? |
|---|---|---|---|
| Natürlichsprachige Suche | ai |
Systray-Button | Quick-Prompts anpassen |
| E-Mail / Chatter Hilfe | ai |
AI-Button im Composer | System-Prompt überschreiben |
| Dokumente auto-sortieren | ai_documents |
Neues Dokument im Ordner | Prompt pro Ordner frei definieren |
| Anruf-Transkription | voip_ai |
Nach VOIP-Anruf | Max-Dateigröße 25 MB fest |
| CRM Lead via Chat | ai_crm |
Livechat auf Website | Agent + Topic konfigurieren |
Odoo-Expertin bei Detalex GmbH