Uge 46 – Gemini-integration: Prompting, Schema-output og Mapping

Portfolio: Marlen Halvorsen

Uge 46 – Gemini-integration: Prompting, Schema-output og Mapping

Dato: 14-11-2025  |  Uge: 46

Kontekst

Machine Learning og AIBackend-udvikling og API-design

Mål

Implementere en robust integration til Gemini-modellen baseret på strict JSON-schema. Adskille eksternt AI-output fra interne domæneobjekter ved hjælp af Ports & Adapters. Sikre stabil prompt-håndtering, skemaparsing og mapping til domænemodellen.

Proces

Jeg har arbejdet ud fra Ports & Adapters-arkitekturen, hvor applikationen kun kender til et interface (IMachineReasoningAnalyzer). Selve Gemini-implementeringen ligger isoleret i infrastruktur-laget og kan udskiftes uden at påvirke domænelogikken.

Arbejdet har fokuseret på tre centrale komponenter:

  • GeminiMachineAnalyzer – ansvarlig for API-kald, prompt, JSON-schema og parsing.
  • GeminiPromptLoader – indlæser templates og gør prompts vedligeholdelsesvenlige.
  • GeminiToAggregateMapper – sikrer korrekt mapping til vores interne DTO.

Resultat

GeminiMachineAnalyzer – kald til API, strict JSON og parsing

Analyzeren bygger en prompt ud fra runtime-data, loader JSON-schema fra fil, sender request til Gemini og parser det strict JSON-output, modellen returnerer. Den fungerer som en “Adapter”, som opfylder interfacet IMachineReasoningAnalyzer.

Kodesnippet (GeminiMachineAnalyzer):
GeminiMachineAnalyzer

Kald GeminiAPI og Parsing af strict JSON:
GeminiMachineAnalyzer

Denne klasse viser:

  • generering af prompt med kontekst og værdier
  • indlæsning af JSON-schema som kontrakt
  • kald til Gemini 2.5 API
  • parsing af strict JSON fra response
  • mapping videre til intern dto

GeminiPromptLoader – template-baseret prompting

Prompten ligger i en ekstern .txt-fil, så den kan revideres uden at røre koden.
Se mere om promptdesign i denne post:
Uge 44 – Prompt engineering og strict outputs

Loaderen erstatter placeholders med værdier såsom brand, type og model.

Kodesnippet (PromptLoader):
GeminiPromptLoader

Prompten bliver loadet fra en tekstfil:
GeminiPrompt

Dette giver:

  • vedligeholdelsesvenlige prompts
  • klare testbarhedsfordele
  • separation mellem tekstskrivning og logik

GeminiToAggregateMapper – stærkt typet mapping

Mapperen oversætter Gemini’s JSON direkte til vores interne MachineAggregateDto. Den håndterer også “refusal”-cases, hvor modellen afviser at give svar.

Kodesnippet (Mapper):
GeminiToAggregateMapper

Mapperen sikrer:

  • stærkt typet interne data (vha. MachineAggregateDto)
  • korrekt håndtering af confidence, metadata og refusal-cases
  • ensartede resultater på tværs af AI-modeller

Læring / refleksion

Jeg har lært, hvordan man designer et AI-adapterlag, der både er robust, testbart og udskifteligt. Strict JSON-schema har givet mig en bedre forståelse af kontraktbaseret AI-output, og arbejdet har tydeliggjort, hvor vigtigt det er at isolere AI-afhængigheden i infrastrukturen.

Implementeringen har styrket mine kompetencer inden for:

  • Ports & Adapters (Hexagonal Architecture)
  • integration med LLM’er via prompt-templates
  • mapping fra eksterne AI-modeller til interne dto’er
  • forståelse af parsing, schema-validering og fejlscenarier

Ressourcer