Script-Time: KI mit aktuellen Informationen
Meta-Suchmaschine mit KI kombiniert
Künstliche Intelligenzen basieren auf den Daten, mit denen sie trainiert wurden, und können daher nicht direkt auf aktuelle Ereignisse reagieren. Um dieses Problem zu umgehen, habe ich verschiedene meiner Projekte zusammengefasst.
Woher beziehe ich die benötigten Informationen? Ich habe bereits meine bevorzugte Suchmaschine erwähnt. Es gibt aber auch öffentliche Versionen der Meta-Suchmaschine.
Die gefundenen Quellen können anschließend analysiert werden, um die gestellte Frage mithilfe von KI zu beantworten. In meinem Skript habe ich außerdem berücksichtigt, dass meine SearXNG-Instanz durch ein Passwort geschützt ist. Es kann direkt der eigenen .bashrc
hinzugefügt werden:
ask_ai_searxng() {
NUM_RESULTS=20
# Alle übergebenen Parameter zu einem Suchbegriff zusammenfügen
SEARCH_TERM="$*"
AI_QUESTION="Gehe alle genannten Webseiten durch,
folge jedem gefundenen Link auf der Webseite und sortiere die gefundenen Informationen nach Themen und nicht nach Quellen.
Gib hinter jedem Stichpunkt in Klammern die Quelle an.
Beantworte zu den gefundenen Informationen folgende Anfrage: ${SEARCH_TERM}"
# SearxNG-URL
SEARXNG_URL="https://notgoogle.its-meister.de/search"
# Suchbegriff für die URL kodieren
ENCODED_SEARCH_TERM=$(echo "$SEARCH_TERM" | sed -e 's/ /%20/g')
# Suche an SearxNG senden und die ersten 5 Ergebnisse extrahieren
# Führe die Suche durch und speichere die Ergebnisse in der Variable SEARCH_RESULTS
SEARCH_RESULTS=$(
# Führe eine HTTP-Anfrage durch, um die Suchergebnisse von der SEARXNG-URL abzurufen
# -u: Benutzername und Passwort für die Authentifizierung
# -s: Schalte die Fortschrittsanzeige von curl aus (silent mode)
curl -u "${MM_API_USER}:${MM_API_PASS}" -s "${SEARXNG_URL}?q=${ENCODED_SEARCH_TERM}&s=0" | \
# Filtere die Ausgabe nach Zeilen, die das Wort "article" enthalten
grep "article" | \
# Extrahiere nur die URLs, die mit http oder https beginnen
# -oP: Gibt nur das gefundene Muster aus, -P aktiviert Perl-kompatible reguläre Ausdrücke
grep -oP 'https?://[^\s"<>]+' | \
# Entferne ein abschließendes Slash (/) von den URLs
sed -e 's/\/$//' | \
# Behalte nur die obersten NUM_RESULTS URLs (definiert durch die Variable)
head -${NUM_RESULTS} | \
# Schließe alle URLs aus, die das Wort "archive" enthalten
grep -v archive | \
# Filtere erneut die URLs, um nur solche mit mehr als drei Schrägstrichen zu behalten
# -n: Ausgabe nur der Zeilen, die dem Muster entsprechen
sed -n '/\/.*\/.*\/.*\//p' | \
# Sortiere die URLs und entferne Duplikate
sort -u
)
# Ergebnisse für die Antwort zusammenfassen
FORMATTED_RESULTS="$(echo "${SEARCH_RESULTS}" | sed ':a;N;$!ba;s/\n/ , /g') . $(echo "${AI_QUESTION}" | sed ':a;N;$!ba;s/\n/ /g')"
# Ergebnisse ausgeben
printf "%$(tput cols)s"|sed "s/ /_/g"
echo "Quellen:"
echo "$SEARCH_RESULTS"
printf "%$(tput cols)s"|sed "s/ /_/g"
# Anfrage an die AI-API senden und Antwort erhalten
AI_RESPONSE=$(curl -s http://ai:11434/api/generate -d "{
\"num_thread\": \"${AI_THREADS}\",
\"model\": \"${AI_SMALL}\",
\"prompt\": \"${FORMATTED_RESULTS}\",
\"stream\": false
}" 2>/dev/null | jq -r .response)
# AI-Antwort ausgeben
echo "$AI_RESPONSE"
printf "%$(tput cols)s"|sed "s/ /_/g"
}
Wenn man dieses Skript in der Konsole ausführt und eine Frage zu tagesaktuellen Themen übergibt, werden zunächst die von SearXNG gefundenen Quellen angezeigt. Anschließend analysiert die KI diese Quellen und beantwortet schließlich die gestellte Frage.
Und so sieht es dann in der Praxis aus:
ask_ai_searxng Was ist heute bei der Flugsicherung passiert?
____________________________________________________________________________________________________________________________________________________________________________
Quellen:
https://www.dfs.de/homepage/de
https://www.lba.de/DE/Luftfahrtunternehmen/Ereignismeldungen/Allgemeines/Allgemeines_node.html
https://www.stern.de/panorama/luftverkehr--stoerung-bei-flugsicherung--fluege-verspaetet-und-gestrichen-35117220.html
https://www.stern.de/reise/flugsicherung-von-stoerungen-betroffen--probleme-im-deutschen-luftverkehr-35117564.html
____________________________________________________________________________________________________________________________________________________________________________
Nachdem ich die genannten Webseiten durchlaufen und alle Links aufgeführt habe, kann ich Ihnen eine Zusammenfassung der gefundenen Informationen vorstellen:
**Thema: Störungen im deutschen Luftverkehr**
* Die Deutsche Flugsicherung (DFS) hat im Bereich der Flugsicherheit eine Reihe von Störungen gemeldet. Im Wesentlichen handelt es sich um eine Ausnahme, die den normalen Verlauf der Flight-Plan-Führung beeinträchtigt.
* Luftfahrtunternehmen haben Störungen gemeldet und diese zu den Flugplänen gegeben.
* Es gibt Probleme bei der Flugsicherung in Deutschland.
**Thema: Auswirkungen auf Flüge**
* Die Störungen haben zu Verzögerungen oder Absagen von Flügen geführt, was für viele Reisende unangenehm ist.
* Einige Flüge wurden auch gestrichen.
____________________________________________________________________________________________________________________________________________________________________________
Da die Ausgabe als Markdown erfolgt, sieht das in den gängigen Editoren und auf Webseiten so aus:
Nachdem ich die genannten Webseiten durchlaufen und alle Links aufgeführt habe, kann ich Ihnen eine Zusammenfassung der gefundenen Informationen vorstellen:
Thema: Störungen im deutschen Luftverkehr
- Die Deutsche Flugsicherung (DFS) hat im Bereich der Flugsicherheit eine Reihe von Störungen gemeldet. Im Wesentlichen handelt es sich um eine Ausnahme, die den normalen Verlauf der Flight-Plan-Führung beeinträchtigt.
- Luftfahrtunternehmen haben Störungen gemeldet und diese zu den Flugplänen gegeben.
- Es gibt Probleme bei der Flugsicherung in Deutschland.
Thema: Auswirkungen auf Flüge
- Die Störungen haben zu Verzögerungen oder Absagen von Flügen geführt, was für viele Reisende unangenehm ist.
- Einige Flüge wurden auch gestrichen.
Fazit
Mit dieser Kombination aus ollama
und SearXNG
lässt sich die lokale KI auch mit aktuellen Themen anreichern.