チャット履歴を保存する

完了

セマンティック カーネル SDK では、チャット セッションで交換されたメッセージのレコードを保持する ChatHistory オブジェクトがサポートされています。 ユーザー、アシスタント、ツール、システムなど、さまざまな作成者からのメッセージとメタデータが格納されます。 ChatHistory オブジェクトは、会話のコンテキストと継続性を維持するために不可欠です。 ChatHistory オブジェクトの出力例を次に示します。

system: You are a helpful assistant.
user: What's available to order?
assistant: We have pizza, pasta, and salad available to order. What would you like to order?
user: I'd like to have the first option, please.

チャット履歴オブジェクトの作成

ChatHistory オブジェクトを作成する前に、適切なパッケージをインポートする必要があります。 内部では、チャット履歴オブジェクトは、チャット セッション内のメッセージのシーケンスを管理するためのコンテナーとして機能するリストです。

// Import the chat completion namespace
using Microsoft.SemanticKernel.ChatCompletion;

// Create a chat history object
ChatHistory chatHistory = [];

// Add role messages to the chat history
chatHistory.AddSystemMessage("You are a helpful assistant.");
chatHistory.AddUserMessage("What's available to order?");
chatHistory.AddAssistantMessage("We have pizza, pasta, and salad available to order. What would you like to order?");
chatHistory.AddUserMessage("I'd like to have the first option, please.");

for (int i = 0; i < chatHistory.Count; i++)
{
    Console.WriteLine($"{chatHistory[i].Role}: {chatHistory[i]}");
}
from semantic_kernel.contents.chat_history import ChatHistory

# Create a chat history object
chat_history = ChatHistory()

# Add role messages to the chat history
chat_history.add_system_message("You are a helpful assistant.")
chat_history.add_user_message("What's available to order?")
chat_history.add_assistant_message("We have pizza, pasta, and salad available to order. What would you like to order?")
chat_history.add_user_message("I'd like to have the first option, please.")

# Print chat history
for message in chat_history:
    print(f"{message.role}: {message.content}")

この例では、ChatHistory オブジェクトが作成され、さまざまな作成者からのメッセージが設定されます。

  • システム メッセージ: アシスタントの役割または動作を設定します (例: "You're a helpful assistant")。
  • ユーザー メッセージ: 利用可能なアイテムの要求や注文など、ユーザーの入力をキャプチャします。
  • アシスタント メッセージ: AI アシスタントによって生成された応答を含み、提案を提供するか、アクションを確認します。

チャット履歴を使用すると、自然で、ユーザーのニーズに反応するインテリジェントでコンテキストに対応したチャット エクスペリエンスを構築できます。

ChatMessage オブジェクトを作成して、チャット履歴に詳細を追加することもできます。 ChatMessage オブジェクトは、ユーザー名や画像コンテンツなどの追加情報をサポートします。 次に例を示します。

// Add user message with an image
#pragma warning disable SKEXP0001 // AuthorName is subject to change and emits a warning
chatHistory.Add(
    new() {
        Role = AuthorRole.User,
        AuthorName = "Laimonis Dumins",
        Items = [
            new TextContent { Text = "What available on this menu" },
            new ImageContent { Uri = new Uri("https://example.com/menu.jpg") }
        ]
    }
);
from semantic_kernel.contents.chat_history import ChatHistory
from semantic_kernel.contents.chat_message_content import ChatMessageContent, AuthorRole
from semantic_kernel.contents.text_content import TextContent
from semantic_kernel.contents.image_content import ImageContent

# Create a chat history object
chat_history = ChatHistory()

# Add a user message with author name, text, and image content
chat_history.add(
    ChatMessageContent(
        role=AuthorRole.USER,
        author_name="Laimonis Dumins",
        items=[
            TextContent(text="What available on this menu"),
            ImageContent(uri="https://example.com/menu.jpg")
        ]
    )
)

# Print the last message to verify
last_message = chat_history[-1]
print(f"{last_message.role} ({last_message.author_name}):")
for item in last_message.items:
    if isinstance(item, TextContent):
        print(f"  Text: {item.text}")
    elif isinstance(item, ImageContent):
        print(f"  Image: {item.uri}")

プロジェクトでチャット履歴を使用すると、ユーザーの操作を強化できます。 たとえば、チャット履歴は複数の交換でコンテキストを保持することで継続性を確保し、ユーザーが情報を繰り返すことなく、アシスタントがより正確に応答できるようにします。 チャット履歴を使用して、一般的なクエリの識別や会話フローの調整など、AI 応答を改善するためのユーザー操作を分析することもできます。

ChatHistory オブジェクトを使用すると、チャット セッション中に交換されたメッセージを追跡し、会話がコンテキストに応じて認識され、自然な状態を維持できます。 システム、ユーザー、アシスタントのメッセージを追加することで、まとまりのあるユーザー エクスペリエンスを作成する動作と対話を定義できます。 ChatMessage オブジェクトは、ユーザー名やマルチメディア コンテンツなどの詳細をサポートすることで柔軟性を提供します。 これらのツールを使用すると、動的でパーソナライズされたチャット アプリケーションを簡単に設計できます。