Azure DevOps Sprintergebnisse mit KI erzeugen

#llm #Azure OpenAI # Azure DevOps #KI #GitHub

Das Ziel ist es agilen Projektteams die Möglichkeit zu geben ihre erzielten Ergebnisse aus dem vergangenen Sprint per Knopfdruck zusammenzufassen, ohne dass der Product Owner in jede einzelne User Story in Azure DevOps gehen und die Ergebnisse selber zusammenschreiben muss.

Zunächst wird eine Azure OpenAI ressource deployed. Dabei ist es wichtig, diese in Schweden zu hosten, damit es uneingeschränkt funktioniert.

Auf diese Ressource wird im Anschluss mit llm (Large Language Model) zugegriffen. (https://llm.datasette.io/en/stable/)

"llm install llm-azure" ist der Start-Befehl. Weitere Befehle sind in diesem (https://github.com/fabge/llm-azure/blob/main/README.md) Github Beitrag gut beschrieben.

Da das Thema so aktuell und neu ist, habe ich die Erfahrung gemacht, dass sich Code und Versionen schnell ändern können und daher ist meine Empfehlung diese in einem Container zu hinterlegen und diesen auszuführen, um unabhängig von Updates zu sein. Hierfür eignet sich entweder Docker oder Azure Container.

In dem Code werden einerseits die Keys zu der Azure OpenAI Ressource hinterlegt und zum anderen die Verbindung zum jeweiligen Azure DevOps Projekt erstellt.

Der gesamte Code ist am Ende des Artikels zu sehen.

Um diesen auszuführen, sind folgende Schritte im Docker Container erforderlich:

  1. Docker Desktop öffnen
  2. Terminal öffnen mit PowerShell
  3. docker start <name>
  4. source /DevOps/DevOps/bin/activate
  5. cd /DevOps
  6. ./DevOpsQueryLLM.sh
  7. Deactivate
  8. exit

Um den Code der ausgeführt werden soll zu lesen oder ggf. zu ändern nutzt man folgenden Befehl: nano DevOpsQueryLLM.sh

Durch Hinweise in dem Code, kann man Einfluss auf die Formulierungen der KI nehmen. Zum Beispiel auf Sprache und Zielgruppe. Außerdem ist es ratsam einen Beispieltext der KI zur Orientierung zur Verfügung zu stellen.

Anbei der komplette Code:

az boards query --wiql "

SELECT

    [System.Id],

    [System.Title],

    [System.WorkItemType],

    [System.State],

    [System.IterationPath]

FROM

    workitems

WHERE

        [System.IterationPath] = Sprint 27('[xxx-finops]\xxx-finops Team')

        AND

        (

                (([System.WorkItemType] = 'User Story' AND [System.State] = 'Closed')

                OR

                ([System.WorkItemType] IN ('User Story', 'Task')

                AND

                ([System.Tags] CONTAINS 'Review')))

        )

" --org "https://dev.azure.com/xxx" --project "xxx-finops" | jq '.[] | .fields' \

&& cat templates/releasenotes.txt) | \

llm -m azure -s "nutze die json response als datengrundlage und formuliere eine Releasenotes Zusammenfassung stichpunktartig auf deutsch und englisch. Zielgruppe sind techische User. Nutze das oben genannte beispiel fuer die struktur. Generiere dazu noch beschreibung der einzelen Themengebiete, der inhalt der ankuendigung soll aber aus dem System.Title  der Json responsegeneriert werden. Das heutige Datum ist $(date +%d.%m.%Y)."