役割 & スコープ
ディスカバリーから本番環境対応のアーキテクチャまでのプロセスを主導しました。製品カタログ、CRM、価格エンジンを連携させ、チャットボットが文脈豊かな回答を提供し、営業チームの負担を軽減することに注力しました。
- ユースケース、データ構造、リスクを明確にするためのディスカバリーワークショップ。
- 最新の製品データに基づくチャンキング、エンリッチメント、ランキングを備えたRAGパイプライン。
- 品質を維持するためのガードレール、評価ハーネス、オブザーバビリティを備えたAzure OpenAI。
- 営業と法務がコンプライアンスを守りながら協働できるRBACと監査証跡。
インパクト
- 自動要約とタスクルーティングにより、見積もりのリードタイムを数日から数時間に短縮。
- 一貫したフォローアップとクロスセル・アップセルの代替案提示により、コンバージョン率が向上。
- モニタリングダッシュボードが品質、利用状況、今後の最適化についてリアルタイムの洞察を提供。
Architectuur
De architectuur draait op Azure OpenAI (GPT-4o), geïntegreerd achter Azure API Management en binnen dezelfde Azure-tenant als de klant — er verlaat dus geen data de bestaande Microsoft-omgeving. Retrieval loopt via Azure AI Search, met een hybride aanpak die vector- en keywordsearch combineert over de productcatalogus. Chunking gebeurt per productkaart in plaats van in vaste tokenblokken, wat nauwkeuriger ophalen van prijs- en configuratieregels oplevert. Een nachtelijke synchronisatiepijplijn vanuit CRM/PIM naar de index zorgt ervoor dat prijzen en productinformatie nooit ouder zijn dan 24 uur. Toegang loopt via rollen in Entra ID-groepen: verkoop ziet alleen eigen accounts, en of offertes automatisch verstuurd mogen worden hangt af van de rol.
Modelkeuze
GPT-4o via Azure OpenAI bleek voordeliger dan een zelf gehost open-source model. Bij dit volume wogen de kosten van eigen GPU's niet op tegen de per-token prijsstelling, en function calling voor gestructureerde prijsvoorstellen werkte betrouwbaarder dan bij de destijds beschikbare open-source alternatieven. Prijsberekening zelf loopt niet via het model, maar via een deterministische lookup — het model stelt voor, rekent niet.
Kosten & latency
- Modelkosten: indicatief €0,03–0,05 per offerteaanvraag, bij ± 600 aanvragen/maand grofweg €20–30/maand aan tokenkosten.
- Azure AI Search draait op de kleinste Standard-tier die hybride search ondersteunt.
- Latency: eerste token doorgaans binnen 900ms (streaming), volledige respons inclusief retrieval p95 rond 2,8s.
Lessons learned
De eerste versie chunkte op vaste tokenblokken van 500 — dat gaf matige precisie, omdat prijsregels en productvarianten soms over de randen van die blokken heen versnipperd raakten. Overschakelen naar semantische chunking per productkaart loste dat op. Daarnaast bleek het model zonder guardrails af en toe prijzen te "verzinnen" bij onvolledige input; opgelost door de prijsbepaling volledig buiten het model te leggen (deterministische lookup, het model doet alleen een voorstel).
Concept — cijfers ter illustratie, nog te verifiëren tegen het daadwerkelijke project vóór publicatie.