Я возился с ollama в кодировании на C#, и мне удалось заставить его выдавать мне выходные данные и даже взаимодействовать с моим кодом, однако, используя предоставленный ими пример, я столкнулся с проблемой, когда LLM не сохраняет предыдущие разговоры. , и в итоге я применил небрежный метод добавления инструкций вместе с подсказками.
Вот мой код:
public async void Prompt(string prompt)
{
output = "";
string input = instructions + prompt;
context = await ollama.StreamCompletion(input, context, stream => output += (stream.Response));
Console.WriteLine(output);
}
Вывод представляет собой строку, я мог бы изменить ее на что-то, что позволит позже сохранить больше переменных.
Контекст — это переменная ConversationContext.
Идея состоит в том, чтобы дать ему подсказку, по которой он должен следить за всем разговором, однако в настоящее время это необходимо ввести с помощью инструкций, добавляемых перед моим приглашением. Это не идеально, поскольку это противоречит цели получения степени LLM.
Что я хочу сделать, это: Вводить инструкцию только при запуске. Звонок подсказывает как обычно. Пусть он выполняет инструкции, когда это необходимо.
Я попробовал контекст += Но это недопустимый метод. Я искал решение этой проблемы, но нашел только еще один вопрос по этому поводу, и это было в феврале.
@Конвей, ты гений! Честно говоря, я привык программировать в Unity, где чаще используется void
, и даже не знал, что Task
можно использовать. Спасибо, чувак, очень ценю!
Благодаря Конвею я смог исправить свой код. В связи с тем, что я привык программировать в Unity, я всегда использовал Void
вместо Task
, потому что не знал об этом, поэтому, чтобы исправить то, что у меня было, я сделал:
`
public async Task Prompt(string prompt)
{
output = "";
string input = prompt;
context = await ollama.StreamCompletion(input, context, stream => output += (stream.Response));
Console.WriteLine(output);
ConsoleCommands.aIResponse = true;
ConsoleCommands.checkCommand(output);
}
`
Благодаря этому у меня теперь есть интегрированная программа с искусственным интеллектом, которая запоминает предыдущие подсказки и разговоры.
Я надеюсь, что это поможет кому-то еще в будущем!
Есть ли причина, по которой вы используете
async void
вместоasync Task
?async void
по сути означает «Запустить и забыть», с добавленным сюрпризом: если метод выдает исключение, это, вероятно, приведет к сбою вашего приложения.