Ich habe einen einfachen Chat-Bot, der mit Semantic Kernel erstellt wurde:
Code: Select all
var response = _chatCompletionService.GetChatMessageContentAsync(
chatHistory,
executionSettings: execSettings,
kernel: kernel);
In einigen Fällen möchte ich die Antwort des Modells validieren und dort einen Textinhalt durch eine umformulierte Version ersetzen (entnommen aus einem anderen _chatCompletionService-Aufruf, aber ohne Bezug zur ursprünglichen Konversation).
Ich mache es auf diese Weise:
Code: Select all
return new ChatMessageContent(
role: response.Role,
content: rephrasedContent)
und dann speichere ich diese Nachricht in ChatHistory. Ich frage mich, ob dies die beste Option ist oder nicht, da ich ModelId, InnerContent und andere Felder aus der ursprünglichen LLM-Antwort verliere. Allerdings scheint es auch nicht ideal zu sein, diese Option beizubehalten, da es zu Inkonsistenzen zwischen dem aktualisierten Inhalt und den verbleibenden Feldern der ursprünglichen Antwort kommen kann.
Jede Hilfe wäre willkommen.
UPDATE:
An dieser Stelle weise ich den Wert „Content“ einfach neu zu.
Code: Select all
originalLlmResponse.Content = parsed.OutputMessage;
das hinter den Kulissen ruft:
Code: Select all
var textContent = this.Items.OfType().FirstOrDefault();
if (textContent is not null)
{
textContent.Text = value;
}
else if (value is not null)
{
this.Items.Add(new TextContent(
text: value,
modelId: this.ModelId,
innerContent: this.InnerContent,
encoding: this.Encoding,
metadata: this.Metadata
)
{ MimeType = this.MimeType });
was wahrscheinlich in Ordnung ist, solange Sie nur mit TextContent arbeiten. In meinem Fall arbeite ich, obwohl ich Toolss und mcps aufrufe, nicht direkt mit deren Ergebnis, sondern verlasse mich auf das, was mir das Modell zur Verfügung stellt.