채팅 기록
채팅 기록 개체는 채팅 세션에서 메시지 레코드를 유지하는 데 사용됩니다. 사용자, 도우미, 도구 또는 시스템과 같은 여러 작성자의 메시지를 저장하는 데 사용됩니다. 메시지를 보내고 받기 위한 기본 메커니즘인 채팅 기록 개체는 대화의 컨텍스트와 연속성을 유지하는 데 필수적입니다.
채팅 기록 개체 만들기
채팅 기록 개체는 내부 목록이므로 메시지를 쉽게 만들고 추가할 수 있습니다.
using Microsoft.SemanticKernel.ChatCompletion;
// Create a chat history object
ChatHistory chatHistory = [];
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.");
# Create a chat history object
chat_history = ChatHistory()
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.")
import com.microsoft.semantickernel.services.chatcompletion.ChatHistory;
// Create a chat history object
ChatHistory chatHistory = new ChatHistory();
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.");
채팅 기록에 더 풍부한 메시지 추가
채팅 기록 개체에 메시지를 추가하는 가장 쉬운 방법은 위의 메서드를 사용하는 것입니다. 그러나 새 ChatMessage
개체를 만들어 메시지를 수동으로 추가할 수도 있습니다. 이를 통해 이름 및 이미지 콘텐츠와 같은 추가 정보를 제공할 수 있습니다.
using Microsoft.SemanticKernel.ChatCompletion;
// Add system message
chatHistory.Add(
new() {
Role = AuthorRole.System,
Content = "You are a helpful assistant"
}
);
// Add user message with an image
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") }
]
}
);
// Add assistant message
chatHistory.Add(
new() {
Role = AuthorRole.Assistant,
AuthorName = "Restaurant Assistant",
Content = "We have pizza, pasta, and salad available to order. What would you like to order?"
}
);
// Add additional message from a different user
chatHistory.Add(
new() {
Role = AuthorRole.User,
AuthorName = "Ema Vargova",
Content = "I'd like to have the first option, please."
}
);
from semantic_kernel.contents.chat_history import ChatHistory
from semantic_kernel.contents import ChatMessageContent, TextContent, ImageContent
from semantic_kernel.contents.utils.author_role import AuthorRole
# Add system message
chat_history.add_message(
ChatMessage(
role=AuthorRole.System,
content="You are a helpful assistant"
)
)
# Add user message with an image
chat_history.add_message(
ChatMessageContent(
role=AuthorRole.USER,
name="Laimonis Dumins",
items=[
TextContent(text="What available on this menu"),
ImageContent(uri="https://example.com/menu.jpg")
]
)
)
# Add assistant message
chat_history.add_message(
ChatMessageContent(
role=AuthorRole.ASSISTANT,
name="Restaurant Assistant",
content="We have pizza, pasta, and salad available to order. What would you like to order?"
)
)
# Add additional message from a different user
chat_history.add_message(
ChatMessageContent(
role=AuthorRole.USER,
name="Ema Vargova",
content="I'd like to have the first option, please."
)
)
import com.microsoft.semantickernel.services.chatcompletion.message.ChatMessageImageContent;
import com.microsoft.semantickernel.services.chatcompletion.message.ChatMessageTextContent;
// Add system message
chatHistory.addSystemMessage(
"You are a helpful assistant"
);
// Add user message with an image
chatHistory.addUserMessage(
"What available on this menu"
);
chatHistory.addMessage(
ChatMessageImageContent.builder()
.withImageUrl("https://example.com/menu.jpg")
.build()
);
// Add assistant message
chatHistory.addAssistantMessage(
"We have pizza, pasta, and salad available to order. What would you like to order?"
);
// Add additional message from a different user
chatHistory.addUserMessage(
"I'd like to have the first option, please."
);
함수 호출 시뮬레이션
사용자, 도우미 및 시스템 역할 외에도 도구 역할의 메시지를 추가하여 함수 호출을 시뮬레이션할 수도 있습니다. 이는 AI에서 플러그 인을 사용하는 방법을 교육하고 대화에 추가 컨텍스트를 제공하는 데 유용합니다.
예를 들어 사용자가 정보를 제공하도록 요구하거나 LLM 낭비 시간을 요구하지 않고 채팅 기록에 현재 사용자에 대한 정보를 삽입하려면 도구 역할을 사용하여 정보를 직접 제공할 수 있습니다.
다음은 플러그 인에 대한 함수 호출을 시뮬레이션하여 도우미에 사용자 알레르기를 제공할 수 있는 방법의 User
예입니다.
팁
시뮬레이션된 함수 호출은 현재 사용자에 대한 세부 정보를 제공하는 데 특히 유용합니다. 오늘날의 LLM은 사용자 정보에 특히 민감하도록 학습되었습니다. 시스템 메시지에 사용자 세부 정보를 제공하는 경우에도 LLM은 무시하도록 선택할 수 있습니다. 사용자 메시지 또는 도구 메시지를 통해 제공하는 경우 LLM은 이 메시지를 사용할 가능성이 높습니다.
// Add a simulated function call from the assistant
chatHistory.Add(
new() {
Role = AuthorRole.Assistant,
Items = [
new FunctionCallContent(
functionName: "get_user_allergies",
pluginName: "User",
id: "0001",
arguments: new () { {"username", "laimonisdumins"} }
),
new FunctionCallContent(
functionName: "get_user_allergies",
pluginName: "User",
id: "0002",
arguments: new () { {"username", "emavargova"} }
)
]
}
);
// Add a simulated function results from the tool role
chatHistory.Add(
new() {
Role = AuthorRole.Tool,
Items = [
new FunctionResultContent(
functionName: "get_user_allergies",
pluginName: "User",
id: "0001",
result: "{ \"allergies\": [\"peanuts\", \"gluten\"] }"
)
]
}
);
chatHistory.Add(
new() {
Role = AuthorRole.Tool,
Items = [
new FunctionResultContent(
functionName: "get_user_allergies",
pluginName: "User",
id: "0002",
result: "{ \"allergies\": [\"dairy\", \"soy\"] }"
)
]
}
);
from semantic_kernel.contents import ChatMessageContent, FunctionCallContent, FunctionResultContent
# Add a simulated function call from the assistant
chat_history.add_message(
ChatMessageContent(
role=AuthorRole.ASSISTANT,
items=[
FunctionCallContent(
name="get_user_allergies-User",
id="0001",
arguments=str({"username": "laimonisdumins"})
),
FunctionCallContent(
name="get_user_allergies-User",
id="0002",
arguments=str({"username": "emavargova"})
)
]
)
)
# Add a simulated function results from the tool role
chat_history.add_message(
ChatMessageContent(
role=AuthorRole.TOOL,
items=[
FunctionResultContent(
name="get_user_allergies-User",
id="0001",
result="{ \"allergies\": [\"peanuts\", \"gluten\"] }"
)
]
)
)
chat_history.add_message(
ChatMessageContent(
role=AuthorRole.TOOL,
items=[
FunctionResultContent(
name="get_user_allergies-User",
id="0002",
result="{ \"allergies\": [\"dairy\", \"gluten\"] }"
)
]
)
)
This functionality is not supported in the current version of Semantic Kernel for Java.
Important
도구 결과를 시뮬레이션할 때는 항상 결과가 해당하는 함수 호출을 제공해야 id
합니다. 이는 AI가 결과의 컨텍스트를 이해하는 데 중요합니다. OpenAI와 같은 일부 LLM은 누락되었거나 함수 호출에 해당하지 않는 경우 id
오류를 id
throw합니다.
채팅 기록 개체 검사
자동 함수 호출을 사용하도록 설정된 채팅 완료 서비스에 채팅 기록 개체를 전달할 때마다 채팅 기록 개체는 함수 호출 및 결과를 포함하도록 조작됩니다. 이렇게 하면 채팅 기록 개체에 이러한 메시지를 수동으로 추가할 필요가 없으며 채팅 기록 개체를 검사하여 함수 호출 및 결과를 볼 수도 있습니다.
그러나 채팅 기록 개체에 최종 메시지를 추가해야 합니다. 다음은 채팅 기록 개체를 검사하여 함수 호출 및 결과를 확인하는 방법의 예입니다.
using Microsoft.SemanticKernel.ChatCompletion;
ChatHistory chatHistory = [
new() {
Role = AuthorRole.User,
Content = "Please order me a pizza"
}
];
// Get the current length of the chat history object
int currentChatHistoryLength = chatHistory.Count;
// Get the chat message content
ChatMessageContent results = await chatCompletionService.GetChatMessageContentAsync(
chatHistory,
kernel: kernel
);
// Get the new messages added to the chat history object
for (int i = currentChatHistoryLength; i < chatHistory.Count; i++)
{
Console.WriteLine(chatHistory[i]);
}
// Print the final message
Console.WriteLine(results);
// Add the final message to the chat history object
chatHistory.Add(results);
from semantic_kernel.contents import ChatMessageContent
chat_history = ChatHistory([
ChatMessageContent(
role=AuthorRole.USER,
content="Please order me a pizza"
)
])
# Get the current length of the chat history object
current_chat_history_length = len(chat_history)
# Get the chat message content
results = await chat_completion.get_chat_message_content(
chat_history=history,
settings=execution_settings,
kernel=kernel,
)
# Get the new messages added to the chat history object
for i in range(current_chat_history_length, len(chat_history)):
print(chat_history[i])
# Print the final message
print(results)
# Add the final message to the chat history object
chat_history.add_message(results)
import com.microsoft.semantickernel.services.chatcompletion.ChatHistory;
ChatHistory chatHistory = new ChatHistory();
chatHistory.addUserMessage("Please order me a pizza");
// Get the chat message content
List<ChatMessageContent> results = chatCompletionService.getChatMessageContentsAsync(
chatHistory,
kernel,
null
).block();
results.forEach(result -> System.out.println(result.getContent());
// Get the new messages added to the chat history object. By default,
// the ChatCompletionService returns new messages only.
chatHistory.addAll(results);
다음 단계
이제 채팅 기록 개체를 만들고 관리하는 방법을 배웠으므로 함수 호출 항목에서 함수 호출에 대해 자세히 알아볼 수 있습니다.