ChatGPT Callbacks
ChatGPT bietet die Möglichkeit, auf Funktionen im Kundensystem zuzugreifen und Informationen in seine Antworten einzuarbeiten, deren Quellen ihm eigentlich nicht zugänglich sind.
OpenAI beschreibt dieses Feature hier.
Voraussetzung
Sie haben ChatGPT in todo4teams erfolgreich konfiguriert, wie hier beschrieben.
Beispiel
Sie bieten Ihren Kunden eine Chat an (realisiert durch die Einbindung von ChatGPT), mit dem der Kunde Antworten auf typische Serviceanfragen erhält: Wo finde ich die Bedienungsanleitung für X? Wie lange erhalte ich Garantie? etc.
Die Antworten auf viele typische Fragen kann ChatGPT aber nicht beantworten, weil dazu z.B. Abfragen an Ihr CRM-System gestellt werden müssten: Wie ist mein aktueller Bonus-Punktestand? Wie lange läuft mein Abonnenment? Habe ich immer noch den Kundenstatus "VIP"?
Lösungsschema
Zur Lösung dieses Problems ist es notwendig, dass ChatGPT Daten aus Ihrem CRM-System abrufen kann. ChatGPT besitzt dazu aber keine Schnittstelle und soll auch keine Zugriffsschlüssel für diese sensible Datenquelle erhalten.
Daher wurde folgendes Verfahren gewählt:
- Der "Prompt", den Sie an ChatGPT senden, wird um die Beschreibung von Service-Funktionen ergänzt.
- ChatGPT erkennt den Sinn dieser Funktionen anhand einer textuellen Beschreibung und der Dokumentation der Parameter und versteht, welche Informationen es im Kundendialog damit erhalten kann.
- Es beschreibt in einem festgelegten Format, welche Funktionen es zur Beantwortung eines Prompts ausführen möchte, delegiert die Ausführung aber an die Client-Seite (in unserem Fall an todo4teams) zurück.
- Die Client-Seite (todo4teams) führt die Funktion aus und sendet das Ergebnis wieder an ChatGPT.
- ChatGPT wiederholt diesen Vorgang ggf., bis die benötigten Informationen vollständig sind.
- Es setzt diese Daten in die Antwort ein und beantwortet den Prompt, wie gewohnt.
Das Schaubild hier verdeutlicht diesen Ablauf.
Vorgehen in todo4teams
Wie wählen folgendes Beispiel: Der Kunde kann in E-Mails an todo4teams nach unterschiedlichen Informationen zu seinem Kundenkonto fragen - zum Beispiel nach seinem VIP-Status.
Die Funktion, den VIP-Status (zu einer gegebenen E-Mail-Adresse) zu ermittlen, implentieren Sie im E-Mail-Empfangsskript in todo4teams.
Die Beschreibung dieser Funktion muss für ChatGPT von Hand erstellt werden und könnte z.B. so aussehen:
{
type: 'function',
function: {
name: 'getVIPStatus',
description: 'Get VIP status of a customer by his email address. Returns the VIP status as a string.',
strict: true,
parameters: {
additionalProperties: false,
type: 'object',
properties: {
emailaddress: {
description: 'email address of the customer',
type: 'string'
}
},
required: ['emailaddress']
}
}
}
]
Das Format gibt ChatGPT vor und ist unter obigem Link dokumentiert.
Diese Beschreibung wird nun dem AIHelper-Objekt in todo4teams bekannt gemacht. Dies geschieht mit der Methode setFunctionDefinitions():
var defs = new org.json.JSONArray(
"[{type: 'function',function: {name: 'getVIPStatus',description: 'Get VIP status of a customer by his email address. Returns the VIP status as a string.', strict:true, parameters: {additionalProperties:false, type: 'object', properties: { emailaddress: { description: 'email address of the customer', type: 'string' }}, required:['emailaddress']}}}]");
ai.setFunctionDefinitions(defs)
Die hier angegebene Funktion getVIPStatus() muss nun in todo4teams bereitgestellt werden.
Die einfachste Möglichkeit dazu ist, einer entsprechende Funktion direkt im Empfangsscript zu schreiben und der AI-Schnittstelle zu übergeben:
'getVIPStatus': function(args){
// args is a JSONObject, as defined in parameters!
println("getVIPStatus called! "+args);
println("VIP? "+args.getString("emailaddress"));
return 'VIP, Gold level';
}
});
Hier wird in Javascript ein anonymes Objekt erzeugt, das eine Methode getVIPStatus() implementiert. Unsere Beispiel-Funktion gibt hier stets das Ergebnis 'VIP, Gold Level' zurück. Sie könnte aber ebenso auf Ihr CRM-System zugreifen.
Mit dem folgenden Aufruf an ChatGPT könnten Sie die Nutzung dieses Callbacks provozieren:
In unserem Test wird folgende Antwort auf diesen Prompt zurückgeliefert:
Alternative Bereitstellung des Callback-Handlers
Statt die Callbacks in Javascript zu verarbeiteten, können Sie diese auch an eine Java-Implemenwierung delegieren.
Stellen Sie dazu eine jar-Datei zur Verfügung (z.B. mit der Implementierung von com.myorg.todo.ai.MyCallbackHandler) und registrieren Sie diese in todo4teams, wie hier beschrieben.
Erzeugen Sie dann im Skript das Objekt und übergeben Sie es den AI-Helper:
Ihre Klasse MyCallbackHandler muss dazu die o.g. Methode getVIPStatus() in dieser Form implementieren:
import org.json.JSONObject;
public class MyCallbackHandler
{
public String getVIPStatus(Object args)
{
JSONObject jargs = (JSONObject) args;
String emailaddress = jargs.getString("emailaddress");
// calculate the VIP level for this email address
return vipStatus;
}
}
}