Freigeben über


Erstellen eines KI-gesteuerten Gruppenchats mit Azure SignalR und der Vervollständigungs-API von OpenAI

Die Integration von KI in Anwendungen wird schnell zu einem Muss für Fachkräfte in der Entwicklung, die ihren Benutzern helfen möchten, kreativer und produktiver zu sein und ihre Gesundheitsziele zu erreichen. KI-gesteuerte Features wie intelligente Chatbots, personalisierte Empfehlungen und kontextbezogene Antworten bieten einen erheblichen Mehrwert für moderne Apps. Die KI-gesteuerten Apps, die auf dem Markt eingeführt wurden, seit ChatGPT unsere Vorstellungskraft beflügelt hat, nutzen in erster Linie die Kommunikation zwischen einem Benutzer und einem KI-Assistenten. Da sich Fachkräfte in der Entwicklung immer mehr mit den Funktionen von KI vertraut machen, erkunden sie KI-gesteuerte Apps im Kontext eines Teams. Sie fragen: „Welchen Mehrwert kann KI einem Team von Mitarbeitern bieten?“

Dieses Tutorial führt Sie durch die Erstellung einer Anwendung für Gruppenchats in Echtzeit. In einer Gruppe menschlicher Mitarbeiter in einem Chat gibt es einen KI-Assistenten, der Zugriff auf den Chatverlauf hat und von jedem Mitarbeiter zu Unterstützung eingeladen werden kann, wenn er die Nachricht mit @gpt beginnt. Die fertige App sieht wie folgt aus.

Screenshot der Benutzeroberfläche für den KI-gesteuerten Gruppenchat.

Wir verwenden OpenAI zum Generieren intelligenter, kontextbezogener Antworten und SignalR für die Bereitstellung der Antwort an Benutzer in einer Gruppe. Den vollständigen Code finden Sie in diesem Repository.

Abhängigkeiten

Sie können entweder Azure OpenAI oder OpenAI für dieses Projekt verwenden. Achten Sie darauf, den endpoint und key in appsetting.json zu aktualisieren. OpenAIExtensions liest die Konfiguration, wenn die App gestartet wird, und sie müssen beide Dienste authentifizieren und einen der beiden Dienste verwenden.

Zum Erstellen dieser Anwendung benötigen Sie Folgendes:

  • ASP.NET Core: Zum Erstellen der Webanwendung und Hosten des SignalR-Hubs
  • SignalR: Zur Kommunikation in Echtzeit zwischen Clients und dem Server
  • Azure SignalR: Zum Verwalten von SignalR-Verbindungen im großen Stil
  • OpenAI Client: Zum Interagieren mit der OpenAI-API zum Generieren von KI-Antworten

Implementierung

In diesem Abschnitt werden die wichtigsten Teile des Codes erläutert, die SignalR in OpenAI integrieren, um eine KI-erweiterte Oberfläche für Gruppenchats zu erstellen.

Datenfluss

Sequenzdiagramm des KI-gesteuerten Gruppenchats.

SignalR-Hub-Integration

Die GroupChatHub-Klasse verwaltet Benutzerverbindungen, Nachrichtenübertragungen und KI-Interaktionen. Wenn ein Benutzer eine Nachricht beginnend mit @gpt sendet, leitet der Hub sie an OpenAI weiter, und OpenAI generiert eine Antwort. Die Antwort der KI wird in Echtzeit zurück zur Gruppe gestreamt.

var chatClient = _openAI.GetChatClient(_options.Model);
await foreach (var completion in chatClient.CompleteChatStreamingAsync(messagesIncludeHistory))
{   
    // ...
    // Buffering and sending the AI's response in chunks
    await Clients.Group(groupName).SendAsync("newMessageWithId", "ChatGPT", id, totalCompletion.ToString());
    // ...
}

Verwalten des Kontexts mit Verlauf

Jede Anforderung an die Chat-Vervollständigungs-API von OpenAI ist zustandslos – OpenAI speichert keine vergangenen Interaktionen. In einer Chatanwendung ist es wichtig, was ein Benutzer oder ein Assistent gesagt hat, um eine kontextbezogene Antwort zu generieren. Wir können dies erreichen, indem wir den Chatverlauf in jede Anforderung an die Vervollständigungs-API einschließen.

Die GroupHistoryStore-Klasse verwaltet den Chatverlauf für jede Gruppe. Sie speichert Nachrichten, die sowohl von den Benutzern als auch von KI-Assistenten gepostet werden, und stellt sicher, dass der Unterhaltungskontext über Interaktionen hinweg erhalten bleibt. Dieser Kontext ist entscheidend für das Generieren kohärenter KI-Antworten.

// Store message generated by AI-assistant in memory
public void UpdateGroupHistoryForAssistant(string groupName, string message)
{
    var chatMessages = _store.GetOrAdd(groupName, _ => InitiateChatMessages());
    chatMessages.Add(new AssistantChatMessage(message));
}
// Store message generated by users in memory
_history.GetOrAddGroupHistory(groupName, userName, message);

Streamen von KI-Antworten

Die CompleteChatStreamingAsync()-Methode streamt Antworten von OpenAI inkrementell, wodurch die Anwendung Teilantworten an den Client senden kann, während sie generiert werden.

Der Code verwendet eine StringBuilder-Klasse, um die Antwort der KI zu sammeln. Er überprüft die Länge des gepufferten Inhalts und sendet ihn an die Clients, wenn er einen bestimmten Schwellenwert überschreitet (z. B. 20 Zeichen). Dieser Ansatz stellt sicher, dass Benutzer die Antwort der KI sehen, wenn sie formuliert wird, wobei ein menschenähnlichen Tippeffekt nachgeahmt wird.

totalCompletion.Append(content);
if (totalCompletion.Length - lastSentTokenLength > 20)
{
    await Clients.Group(groupName).SendAsync("newMessageWithId", "ChatGPT", id, totalCompletion.ToString());
    lastSentTokenLength = totalCompletion.Length;
}

Weitere Informationen

Dieses Projekt eröffnet spannende Möglichkeiten für weitere Verbesserungen:

  • Erweiterte KI-Features: Verwenden Sie andere OpenAI-Funktionen wie Stimmungsanalyse, Übersetzung oder Zusammenfassung.
  • Integrieren mehrerer KI-Agents: Sie können mehrere KI-Agents mit unterschiedlichen Rollen oder Fachgebieten innerhalb desselben Chats einführen. Beispielsweise kann sich ein Agent auf die Textgenerierung fokussieren, und der andere stellt Bild- oder Audiogenerierung bereit. Diese Interaktion kann ein umfangreicheres und dynamischeres Benutzererlebnis schaffen, bei dem verschiedene KI-Agents nahtlos mit Benutzern und miteinander interagieren.
  • Freigeben des Chatverlaufs zwischen Serverinstanzen: Implementieren Sie eine Datenbankebene, um den Chatverlauf über Sitzungen hinweg beizubehalten, sodass Unterhaltungen auch nach einer Trennung der Verbindung fortgesetzt werden können. Über SQL-basierte Lösungen oder nicht auf SQL basierende Lösungen hinaus können Sie auch einen Cachedienst wie Redis erkunden. Er kann die Leistung erheblich verbessern, indem häufig aufgerufene Daten wie Chatverlauf oder KI-Antworten im Arbeitsspeicher gespeichert werden. Dadurch wird die Latenz reduziert und werden Datenbankvorgänge ausgelagert, was zu schnelleren Antwortzeiten führt, insbesondere in Szenarien mit hohem Datenverkehr.