Refactor AskQuestionAsync in ChatService

This commit is contained in:
Marco Minerva
2024-06-17 11:02:51 +02:00
parent 6790850afe
commit 7892f01f84
@@ -23,6 +23,7 @@ public class ChatService(IMemoryCache cache, IChatCompletionService chatCompleti
"""; """;
chat.AddUserMessage(embeddingQuestion); chat.AddUserMessage(embeddingQuestion);
var reformulatedQuestion = await chatCompletionService.GetChatMessageContentAsync(chat)!; var reformulatedQuestion = await chatCompletionService.GetChatMessageContentAsync(chat)!;
chat.AddAssistantMessage(reformulatedQuestion.Content!); chat.AddAssistantMessage(reformulatedQuestion.Content!);
@@ -33,13 +34,15 @@ public class ChatService(IMemoryCache cache, IChatCompletionService chatCompleti
public async Task<string> AskQuestionAsync(Guid conversationId, IEnumerable<DocumentChunk> chunks, string question) public async Task<string> AskQuestionAsync(Guid conversationId, IEnumerable<DocumentChunk> chunks, string question)
{ {
var chat = new ChatHistory(cache.Get<ChatHistory?>(conversationId) ?? []); var chat = new ChatHistory(""""
"""
var prompt = new StringBuilder("""
You can use only the information provided in this chat to answer questions. You can use only the information provided in this chat to answer questions.
If you don't know the answer, reply suggesting to refine the question. If you don't know the answer, reply suggesting to refine the question.
Never answer to questions that are not related to this chat. Never answer to questions that are not related to this chat.
You must answer in the same language of the user's question. You must answer in the same language of the user's question.
"""");
var prompt = new StringBuilder("""
Using the following information: Using the following information:
--- ---
@@ -61,9 +64,13 @@ public class ChatService(IMemoryCache cache, IChatCompletionService chatCompleti
chat.AddUserMessage(prompt.ToString()); chat.AddUserMessage(prompt.ToString());
var answer = await chatCompletionService.GetChatMessageContentAsync(chat)!; var answer = await chatCompletionService.GetChatMessageContentAsync(chat)!;
chat.AddAssistantMessage(answer.Content!);
await UpdateCacheAsync(conversationId, chat); // Add question and answer to the chat history.
var history = new ChatHistory(cache.Get<ChatHistory?>(conversationId) ?? []);
history.AddUserMessage(question);
history.AddAssistantMessage(answer.Content!);
await UpdateCacheAsync(conversationId, history);
return answer.Content!; return answer.Content!;
} }