# KI-Bot – Benutzerdefinierte Tools

**URL:** https://meta.discourse.org/t/ai-bot-custom-tools/314103
**Category:** Site Management
**Tags:** how-to, ai, ai-bot
**Created:** [28. Juni 2024 um 01:20 UTC](https://meta.discourse.org/t/ai-bot-custom-tools/314103 "2024-06-28T01:20:38Z")
**Posts on this page:** 8
**Page:** 1

<div class="post-metadata">

### Author: ![Discourse](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/discourse/32/148734_2.png) [@Discourse](https://meta.discourse.org/u/Discourse)
#### Post date: [28. Juni 2024 um 01:20 UTC](https://meta.discourse.org/t/ai-bot-custom-tools/314103/1 "2024-06-28T01:20:39Z")

</div>

> 🔖 Dieser Leitfaden erklärt, wie benutzerdefinierte KI-Tools im Discourse AI-Plugin erstellt, konfiguriert und integriert werden, wodurch Administratoren die Fähigkeiten des Bots mit benutzerdefinierten JavaScript-Funktionen erweitern können.
> 
> 🙋 Erforderliches Benutzerniveau: Administrator

Tools sind programmierbare Funktionalitäten, die vom KI-Bot verwendet werden können, um spezifische Aufgaben auszuführen oder Informationen abzurufen, die über reine textbasierte Antworten hinausgehen. Diese Tools sind Skripte oder Integrationen, die es dem Bot ermöglichen, mit externen APIs zu interagieren, Daten zu manipulieren oder zusätzliche Funktionen auszuführen, um seine Fähigkeiten zu erweitern.

## Zusammenfassung

Diese Dokumentation behandelt:

- Erstellung eines neuen benutzerdefinierten KI-Tools
- Konfiguration von Tool-Parametern und Skripten
- Verfügbare APIs für Tool-Skripte
- Integration benutzerdefinierter Tools in KI-Personas
- Testen und Fehlerbehebung benutzerdefinierter Tools

## Erstellung eines neuen benutzerdefinierten KI-Tools

Um ein neues KI-Tool zu erstellen:

1. Navigieren Sie zu Admin-Panel \> Plugins \> Discourse AI \> Tools
2. Klicken Sie auf „Neues Tool“ (Sie können vorhandene Voreinstellungen verwenden, um sich über Optionen zu informieren)
3. Füllen Sie die folgenden Felder aus:
  - Name: Der Name des Tools, wie er der LLM präsentiert wird
  - Beschreibung: Die Beschreibung des Tools, wie sie der LLM präsentiert wird
  - Zusammenfassung: Zusammenfassung dessen, was das Tool zur Unterstützung der Benutzer tut (wird in Details angezeigt)
  - Parameter: Definieren Sie die Eingaben, die Ihr Tool benötigt, wie sie der LLM präsentiert werden
  - Skript: Der JavaScript-Code, der Ihr Tool antreibt

4. Klicken Sie auf „Speichern“

 ![New AI Tool Interface](https://global.discourse-cdn.com/meta/original/4X/6/6/3/66324f9574cb850670c1c907c04d8b0825fd2338.png)

 ![This image shows a user interface window with various options, including a selected preset titled "Stock quote (AlphaVantage)" and other tools like browsing the web using jina.ai, exchange rate, and starting from a blank state. (Captioned by AI)](https://global.discourse-cdn.com/meta/original/4X/1/b/d/1bdfe356c643e9e6c802eaf5f4fb5cbeb6f32eaa.png)

 ![The image shows a script interface titled "stock_quote" that retrieves real-time stock quote information using the AlphaVantage API, with parameters for entering a stock symbol and displaying the code for making the API call and handling the response data. (Captioned by AI)](https://global.discourse-cdn.com/meta/original/4X/3/d/9/3d90f767edc63ba9700a8dba2b40c318ee65fd51.png)

## Konfiguration von Tool-Skripten

### Verfügbare APIs

Ihre Tool-Skripte haben Zugriff auf die folgenden APIs:

1. **HTTP-Anfragen:**

2. **LLM (Sprachmodell)-Integration:**

3. **Benutzerdefinierte Upload-Integration (RAG)**

4. **Upload-Unterstützung**

5. **Steuerung der Ausführungskette**

6. **Geheimnisverwaltung**

7. **Discourse-Integration**

8. **Kontextobjekt**

### Erforderliche Funktionen

Ihr Skript muss Folgendes implementieren:

- `invoke(params)`: Die Hauptfunktion, die ausgeführt wird, wenn das Tool aufgerufen wird

Es kann optional Folgendes implementieren:

- `details()`: Gibt einen String (kann einfachen HTML-Code enthalten) zurück, der die Ausführung des Tools beschreibt und in der Chat-Oberfläche angezeigt wird
- `customSystemMessage()`: Wird während der Prompt-Zusammenstellung aufgerufen (nicht während der Tool-Ausführung). Gibt einen String zurück, der dem System-Prompt angehängt wird, oder `null`/`undefined`, um dies zu überspringen. Hat Zugriff auf die Objekte `context`, `discourse` und `index`.

Beispielskript:

```javascript
function invoke(params) {
  let result = http.get("https://api.example.com/data?query=" + params.query);
  return JSON.parse(result.body);
}

function details() {
  return "Daten von der Beispiel-API abgerufen";
}

```

## Einschränkungen und Sicherheit

- **Ausführungs-Timeout:** Standard-Timeout von 2000 ms Skriptverarbeitungszeit. Der Timer pausiert während externer HTTP-Anfragen (`http.*`) und LLM-Aufrufen (`llm.generate`), sodass nur die Verarbeitungszeit des Skripts selbst zählt.
- **Speicher:** Maximal 10 MB V8-Heap-Grenze
- **HTTP-Anfragen:** Maximal 20 Anfragen pro Tool-Ausführung
- **Sandboxed-Umgebung:** Skripte laufen in einer eingeschränkten V8 JavaScript-Umgebung (über MiniRacer). Kein Zugriff auf Browser-Globale, das Host-Dateisystem oder serverseitige Bibliotheken. Netzwerkanfragen werden über das Discourse-Backend weitergeleitet.

## Testen Ihres Tools

Sie sollten jedes Tool, das Sie erstellen, testen, um sicherzustellen, dass die Ergebnisse, die der LLM zur Verfügung gestellt werden, Ihren Erwartungen entsprechen.

 ![Testing Interface](https://global.discourse-cdn.com/meta/original/4X/a/8/c/a8c115668a6c7297795cd10a694c6f064b02a8f7.png)

## Integration von Tools in KI-Personas

Um Ihr benutzerdefiniertes Tool zu einer KI-Persona hinzuzufügen:

1. Gehen Sie zu Admin-Panel \> Plugins \> Discourse AI \> Personas
2. Bearbeiten Sie eine vorhandene Persona oder erstellen Sie eine neue
3. Im Abschnitt „Tools“ sehen Sie Ihre benutzerdefinierten Tools neben den integrierten Tools aufgelistet
4. Wählen Sie Ihr benutzerdefiniertes Tool aus, um es der Persona hinzuzufügen

 ![This image shows a list of enabled tools or plugins in an interface, including options like JavaScript Evaluator, GitHub Search Code, Tags, Image, Dall-E, Google, and a custom tool named "Stock_quote". (Captioned by AI)](https://global.discourse-cdn.com/meta/original/4X/b/2/a/b2a5db3b395f5e40f402dab41e958094468d83af.png)

## Benutzerdefinierte Tools in Aktion

Sobald Sie der LLM das benutzerdefinierte Tool zur Verfügung stellen, kann es dieses verwenden, um das Gespräch zu verbessern.

 ![image](https://global.discourse-cdn.com/meta/original/4X/a/6/0/a60dda461c76a0ccb7f8b7747d4ede7d3531e68e.png)

## Fehlerbehebung

Wenn Ihr Tool nicht wie erwartet funktioniert:

1. Verwenden Sie die Testoberfläche, um sicherzustellen, dass es sich bei Ihren Eingaben wie erwartet verhält.
2. Stellen Sie sicher, dass Ihre Gruppe in `ai_bot_debugging_allowed_groups` enthalten ist. Mitglieder dieser Gruppe haben vollen Zugriff auf die Bot-Transkripte; Sie können die KI-Protokolle dort einsehen.
3. Wenn etwas Unerwartetes passiert, besuchen Sie `https://SITENAME/logs`, um nach Fehlern zu suchen.

## Zusätzliche Ressourcen

> [@Discourse AI - AI bot](https://meta.discourse.org/t/discourse-ai-ai-bot/266012):
>
> bookmark This guide explains how to enable and configure the AI bot feature of the [Discourse AI](https://meta.discourse.org/t/discourse-ai/259214) plugin. person_raising_hand Required user level: Administrator The smart chatbot can answer all questions about your Discourse community and more. The AI Bot has the power to search through your current Discourse instance and beyond with persona support to answer any type of questions you might have. Features Ability to pick the specific AI Bot persona you want to interact with Flexib…

> [@AI bot - Agents](https://meta.discourse.org/t/discourse-ai-persona-guide/306099):
>
> bookmark This guide explains how to set up and manage Agents for [Discourse AI - AI bot](https://meta.discourse.org/t/discourse-ai-ai-bot/266012). person_raising_hand Required user level: Administrator The Discourse AI bot includes a flexible system for managing Agents. This guide covers: Interaction methods for AI Agents Configuration options Advanced settings Supported commands Customization possibilitieslink Learn about the AI bot and how to enable it [in this guide](https://meta.discourse.org/t/discourse-ai-ai-bot/266012?silent=true). What are agents? Agents are a powerful feature that allows you to c…

---

<div class="post-metadata">

### Author: ![maiki](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/maiki/32/233950_2.png) [@maiki](https://meta.discourse.org/u/maiki)
#### Post date: [18. Oktober 2024 um 21:13 UTC](https://meta.discourse.org/t/ai-bot-custom-tools/314103/4 "2024-10-18T21:13:33Z")

</div>

Ich fange gerade erst an, Tools für KI-Personas in Discourse zu entwickeln, auch um mich darauf konzentrieren zu können. Das scheint sehr nützlich zu sein, angesichts der vielen nützlichen und öffentlichen APIs!

Zum Beispiel erhalte ich Ergebnisse wie:

> **Understanding Decision-Making Through Poker Strategies
AI**
>
> **maiki:**
> 
> Erstelle eine Infokarte für Breath of the Wild.
> 
> **gpt-4o:**
> 
> Hier ist eine Informationskarte für „The Legend of Zelda: Breath of the Wild“:
> 
> * * *
> 
> **Titel:** The Legend of Zelda: Breath of the Wild  
> **Entwickler:** Nintendo  
> **Herausgeber:** Nintendo  
> **Veröffentlichungsdatum:** 3. März 2017  
> **Plattformen:** Nintendo Switch, Wii U  
> **Genre:** Action-Adventure  
> **Modus:** Einzelspieler
> 
> **Zusammenfassung:**  
> In einer riesigen offenen Welt steuert der Spieler Link, der aus einem tiefen Schlaf erwacht, um Calamity Ganon zu besiegen und das Königreich Hyrule zu retten. Das Spiel wird für seine immersive Umgebung gelobt, die es den Spielern ermöglicht, die Welt und ihre Systeme frei zu erkunden und mit ihnen zu interagieren.
> 
> **Auszeichnungen:**  
> Das Spiel hat zahlreiche Auszeichnungen erhalten, darunter mehrere „Game of the Year“-Auszeichnungen, für sein innovatives Design, seine weitläufige Welt und sein bezauberndes Gameplay.
> 
> **Weitere Informationen:** [Wikidata-Eintrag](http://www.wikidata.org/entity/Q17185964)
> 
> * * *
> 
> „Breath of the Wild“ ist dafür bekannt, Open-World-Spiele neu zu definieren und ein fesselndes Erlebnis zu bieten, das zur Erkundung und Entdeckung anregt.
> 
> **maiki:**
> 
> Dasselbe für Animal Crossing: New Horizons.
> 
> **gpt-4o:**
> 
> Hier ist eine Informationskarte für „Animal Crossing: New Horizons“:
> 
> * * *
> 
> **Titel:** Animal Crossing: New Horizons  
> **Entwickler:** Nintendo  
> **Herausgeber:** Nintendo  
> **Veröffentlichungsdatum:** 20. März 2020  
> **Plattform:** Nintendo Switch  
> **Genre:** Social Simulation  
> **Modus:** Einzelspieler, Mehrspieler
> 
> **Zusammenfassung:**  
> In diesem charmanten Social-Simulation-Spiel übernimmt der Spieler die Rolle einer anpassbaren Figur, die nach dem Kauf eines Pakets von Tom Nook auf eine einsame Insel zieht. Das Spiel ermöglicht Echtzeit-Erkundung, Ressourcensammlung, Handwerk und Anpassung und fördert ein gemeinschaftliches und entspannendes Spielerlebnis.
> 
> **Auszeichnungen:**  
> Das Spiel wurde für seine kreative Freiheit und den Zeitpunkt seiner Veröffentlichung gefeiert und erhielt Auszeichnungen als „Game of the Year“ und für seine Beiträge zum sozialen Gaming während der globalen Pandemie.
> 
> **Weitere Informationen:** [Wikidata-Eintrag](http://www.wikidata.org/entity/Q64566657)
> 
> * * *
> 
> „Animal Crossing: New Horizons“ wurde zu einem kulturellen Phänomen und wurde für seine fesselnden sozialen Funktionen und sein stressabbauendes Gameplay in schwierigen Zeiten gefeiert.
> 
> **maiki:**
> 
> A long way from Chicago
> 
> **gpt-4o:**
> 
> Hier ist eine Informationskarte für das Buch „A Long Way from Chicago“:
> 
> * * *
> 
> **Titel:** A Long Way from Chicago  
> **Autor:** Richard Peck  
> **Veröffentlichungsjahr:** 1998  
> **Genre:** Historische Fiktion, Jugendbuch  
> **ISBN:** 978-0141303529
> 
> **Zusammenfassung:**  
> Dieser mit dem Newbery Honor ausgezeichnete Roman ist eine Sammlung von Kurzgeschichten, die die jährlichen Sommerreisen von Joey und seiner Schwester Mary Alice von Chicago in eine ländliche Stadt in Illinois dokumentieren, um während der späten 1920er und 1930er Jahre ihre überlebensgroße Großmutter Dowdel zu besuchen. Jedes Kapitel präsentiert eine amüsante und ergreifende Episode, die Lektionen fürs Leben inmitten des Hintergrunds der Großen Depression vermittelt.
> 
> **Auszeichnungen:**  
> Das Buch wurde 1999 mit einem Newbery Honor ausgezeichnet und wird für seinen Humor, seine Tiefe und seine Darstellung des ländlichen amerikanischen Lebens im frühen 20. Jahrhundert gefeiert.
> 
> **Weitere Informationen:** [Wikidata-Eintrag](http://www.wikidata.org/entity/Q4657935)
> 
> * * *
> 
> Dieses Buch wird für seine nostalgische und herzerwärmende Erzählweise geschätzt, die die Essenz familiärer Bindungen und einfacherer Zeiten einfängt.
> 
> **maiki:**
> 
> Thinking in Bets
> 
> **gpt-4o:**
> 
> Ich habe zuvor den Wikidata-Eintrag für „Thinking in Bets“ gefunden, kann aber derzeit keine weiteren spezifischen Details direkt von Wikidata abrufen. Hier ist jedoch eine kurze Karte, basierend auf den verfügbaren Informationen:
> 
> * * *
> 
> **Titel:** Thinking in Bets: Making Smarter Decisions When You Don’t Have All the Facts  
> **Autor:** Annie Duke  
> **Veröffentlichungsjahr:** 2018  
> **Genre:** Sachbuch, Entscheidungsfindung, Psychologie  
> **ISBN:** 978-0735216358
> 
> **Zusammenfassung:**  
> Das Buch nutzt Erkenntnisse aus dem Poker, um den Lesern zu helfen, Entscheidungen unter Unsicherheit zu verstehen. Annie Duke, die ihre Erfahrungen als professionelle Pokerspielerin und Kognitionspsychologin kombiniert, bietet einen Rahmen für klügere Entscheidungen, die Bewertung von Ergebnissen und die Annahme einer probabilistischen Denkweise.
> 
> **Weitere Informationen:** [Wikidata-Eintrag](http://www.wikidata.org/entity/Q128602168)
> 
> * * *
> 
> Für detaillierte Einblicke sollten Sie zusätzliche Ressourcen oder Datenbanken zu Buchveröffentlichungen prüfen.

* * *

Okay, das ist in Ordnung, aber mir ist diese Beschreibung aufgefallen…

> [@Discourse](#):
>
> Description: The description of the tool as presented to the LLM

…und ich frage mich: Sollte ich meine Prompts direkt auf diese Tools beziehen, um sie effizient zu nutzen?

Mein allgemeiner Ansatz beim Schreiben von Prompts ist, sie im Laufe der Zeit zu verfeinern und dann ein Verhaltensmuster zu fixieren, das ich von der KI-Tooling erwarte. Wenn ich jedoch spezifische Anweisungen hinzufügen könnte, zum Beispiel wann eine Wikidata-Entität nachgeschlagen werden soll und wann alle Ansprüche einer bestimmten Entität aufgelistet werden sollen (zwei verschiedene APIs), dann glaube ich, dass ich den gesamten Workflow so verfeinern könnte, wie ich es beabsichtige… 🤩

---

<div class="post-metadata">

### Author: ![MachineScholar](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/machinescholar/32/424719_2.png) [@MachineScholar](https://meta.discourse.org/u/MachineScholar)
#### Post date: [26. Dezember 2024 um 17:44 UTC](https://meta.discourse.org/t/ai-bot-custom-tools/314103/5 "2024-12-26T17:44:06Z")

</div>

Tatsächlich ist es vorteilhaft, das Werkzeug im System-Prompt klar zu erklären und Beispiele anzugeben.

---

<div class="post-metadata">

### Author: ![MachineScholar](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/machinescholar/32/424719_2.png) [@MachineScholar](https://meta.discourse.org/u/MachineScholar)
#### Post date: [20. Januar 2025 um 13:00 UTC](https://meta.discourse.org/t/ai-bot-custom-tools/314103/6 "2025-01-20T13:00:09Z")

</div>

Ist es möglich, in einem benutzerdefinierten Tool den API-Schlüssel und das OpenAI-Projekt aus den Admin-Einstellungen einzufügen?

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [20. Januar 2025 um 22:21 UTC](https://meta.discourse.org/t/ai-bot-custom-tools/314103/7 "2025-01-20T22:21:47Z")

</div>

Sie können REST-Aufrufe von einem benutzerdefinierten Tool aus tätigen und alle Header angeben

---

<div class="post-metadata">

### Author: ![MachineScholar](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/machinescholar/32/424719_2.png) [@MachineScholar](https://meta.discourse.org/u/MachineScholar)
#### Post date: [21. Januar 2025 um 07:23 UTC](https://meta.discourse.org/t/ai-bot-custom-tools/314103/8 "2025-01-21T07:23:43Z")

</div>

Hab’s gerade gemerkt, lol… Entschuldigung für den Geistesblitz.

---

<div class="post-metadata">

### Author: ![tpetrov](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tpetrov/32/164643_2.png) [@tpetrov](https://meta.discourse.org/u/tpetrov)
#### Post date: [26. September 2025 um 13:34 UTC](https://meta.discourse.org/t/ai-bot-custom-tools/314103/9 "2025-09-26T13:34:58Z")

</div>

Ich habe einige Dokumente in eine Persona hochgeladen, die Embeddings generiert hat und nun semantische Suchen darüber durchführen kann. Aber in einigen Fällen ist die semantische Suche nicht ideal, daher möchte ich sie verbessern und eine hybride Suche durchführen, d. h. das Vorhandene beibehalten und eine Stichwortsuche hinzufügen. Im Moment müsste ich ein benutzerdefiniertes Tool schreiben, wenn ich das tun möchte, richtig?  
Ich weiß, dass ich die Dokumente einfach als Themen veröffentlichen könnte und sie dann sofort mit der nativen Discourse-Suche funktionieren würden, aber das ist derzeit keine Option.

---

<div class="post-metadata">

### Author: ![jorge-gbs](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jorge-gbs/32/478482_2.png) [@jorge-gbs](https://meta.discourse.org/u/jorge-gbs)
#### Post date: [25. Januar 2026 um 15:10 UTC](https://meta.discourse.org/t/ai-bot-custom-tools/314103/10 "2026-01-25T15:10:38Z")

</div>

Ich sehe einen Fehler im Tool-Schema, wenn ich ein benutzerdefiniertes Tool mit einem Array-Parameter hinzufüge. Fehler beim Start der Konversation:

```plaintext
{
“error”: {
“code”: 400,
“message”: “* GenerateContentRequest.tools[0].function_declarations[3].parameters.properties[properties].items: fehlendes Feld.\\n”,
“status”: “INVALID_ARGUMENT”
}
}

```

Was ich versucht habe:

- Erstellen eines benutzerdefinierten Tools mit einem Parameter namens `properties` vom Typ Array.
- Die Parameterlisten-Benutzeroberfläche erlaubt nicht die Angabe von `items`.
- Exportieren/Importieren einer vollständigen Tool-JSON, die `items: { type: “string” }` für `properties` enthält.
- Nach dem Import bleibt der Fehler bestehen, sobald das Tool für eine Persona aktiviert wird. Wenn ich das Tool entferne, funktioniert der Bot.

Erwartet:

Entweder sollte die Parameterlisten-Benutzeroberfläche das Definieren von Array-Elementtypen zulassen, oder der Import sollte `items` berücksichtigen, damit das Schema validiert wird.

Hat das jemand gesehen? Gibt es eine bekannte Einschränkung oder einen erforderlichen UI-Pfad für die Definition von Array-Parametern?
