Я уже реализовал функцию наличия номеров. Для этого используется функция ядра, которая принимает в качестве параметров checkInDate, checkOutDate и список объектов комнаты (например, две комнаты, одна для 1 взрослого, другая для 2 взрослых и ребенка 6 лет).
Эта часть работает хорошо. Например, когда я спрашиваю: «Есть ли номер для 2 взрослых с 7 по 14 ноября?» он предоставляет точную информацию на основе подключения API через плагин.
Проблема возникает с выводом функции ядра, который в настоящее время является большим и сложным из-за подробной схемы, содержащей обширные данные о пакете и комнате. . Для этой обработки требуется много токенов, и я сталкиваюсь с ошибкой 429:
Запросы к операции ChatCompletions_Create в Azure OpenAI API версии 2023 -07-01-preview превысили лимит скорости токена вашей текущей ценовой категории OpenAI S0. Повторите попытку через 50 секунд. Пожалуйста, перейдите сюда: https://aka.ms/oai/quottaincrease, если вы хотите еще больше увеличить предел скорости по умолчанию.
Чтобы уменьшить токен load, я подумал о том, чтобы разделить ответ на две части
а) динамические данные (например, цена)
б) Статические (или нечасто меняющиеся) данные (например, описания пакетов, описания номеров и т. д.).
Этот подход предполагает объединение функции ядра с векторной базой данных для хранения описаний комнат и пакетов, поскольку они меняются нечасто.
Вторая цель — дать возможность боту «узнавать» об отеле, чтобы отвечать на вопросы об отеле (например, время заезда, наличие бассейна, варианты парковки и т. д.).
Я для этого можно использовать точно настроенную модель, но и векторная база данных, которая периодически обновляется, также может работать хорошо. Однако, поскольку я никогда раньше не работал с векторной базой данных, я не знаю, как загружать в нее данные или интегрировать их с моим текущим вариантом использования.
Итак, мой главный вопрос: как я могу эффективно объединить функцию ядра с этой векторной базой данных?
То, что у меня сейчас есть, взято из: https://github.com/PieEatingNinjas /copilot-semantickernel/tree/demo и адаптирован к моему варианту использования (получение информации о тарифах отелей)
Код: Выделить всё
var builder = Kernel.CreateBuilder();
builder.Services.AddAzureOpenAIChatCompletion(
"gpt-4o-mini",
Secrets.AzureOpenAiEndpoint,
Secrets.AzureOpenAiApiKey
);
builder.Plugins.AddFromType();
builder.Plugins.AddFromType();
Kernel kernel = builder.Build();
IChatCompletionService chatCompletionService =
kernel.GetRequiredService();
var systemMessage = HotelBotCore.MainMessage;
/*
Here message is something like: "You are friendly bot that is serving information about hotel. People may ask information about hote rates. To check those you have to have information about check in date, check out date and information about rooms and people in those rooms. When presenting those rates show information about package name, room type name, price and meals [And so on, and so on]
*/
var chatMessages = new ChatHistory(systemMessage);
Console.WriteLine("--- Hotel info ---");
Console.WriteLine("Bot > How may i help you");
// Start the conversation
while (true)
{
// Get user input
Console.Write("User > ");
chatMessages.AddUserMessage(Console.ReadLine()!);
// Get the chat completions
var result =
chatCompletionService.GetStreamingChatMessageContentsAsync(
chatMessages,
executionSettings: new OpenAIPromptExecutionSettings()
{
ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions,
Temperature = 0.2
},
kernel: kernel);
// Stream the results
string fullMessage = "";
Console.Write("Bot > ");
await foreach (var content in result)
{
Console.Write(content.Content);
fullMessage += content.Content;
}
Console.WriteLine();
// Add the message from the agent to the chat history
chatMessages.AddAssistantMessage(fullMessage);
}
Код: Выделить всё
{
"PackageId": 1
"PackageName": "Package 1"
"PackageDescription": "Some long description"
"PackageRooms":
[
{
"RoomId": 1
"RoomDescription": "Long description"
"RoomPrice": 123
},
{
"RoomId": 2
"RoomDescription": "Another long description"
"RoomPrice": 456
}
]
}
Код: Выделить всё
{
"PackageId": 1
"PackageName": "Package 1"
"PackageRooms":
[
{
"RoomId": 1
"RoomPrice": 123
},
{
"RoomId": 2
"RoomPrice": 456
}
]
}
Но даже если векторная база данных не является ответом на первую проблему, представленную выше, вероятно, это так. ответ на вторую проблему (т.е. предоставление дополнительной информации о самом отеле, когда его спросят) Чтобы, если кто-то спросит:
Код: Выделить всё
At what time do I need to check out of my room?
Вы можете загрузить туда PDF-файл. Но я понятия не имею, как связать это с моим кодом
Подробнее здесь: https://stackoverflow.com/questions/791 ... th-c-sharp
Мобильная версия