Добавьте файлы проекта.
This commit is contained in:
62
CodeBase/Services/LlmService.cs
Normal file
62
CodeBase/Services/LlmService.cs
Normal file
@@ -0,0 +1,62 @@
|
||||
using CodeBase.Models;
|
||||
using OpenAI;
|
||||
using OpenAI.Chat;
|
||||
using System;
|
||||
using System.ClientModel;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
public class LlmService
|
||||
{
|
||||
private readonly ChatClient _chatClient;
|
||||
private readonly LlmPromptBuilder _builder;
|
||||
|
||||
public LlmService(LlmPromptBuilder llmPromptBuilder)
|
||||
{
|
||||
// 1. Указываем адрес Ollama (обязательно с /v1 на конце для совместимости с OpenAI)
|
||||
var options = new OpenAIClientOptions
|
||||
{
|
||||
Endpoint = new Uri("http://localhost:11434/v1")
|
||||
};
|
||||
|
||||
// 2. Ключ не нужен, но пакет просит хоть какую-то строку
|
||||
var credential = new ApiKeyCredential("ollama");
|
||||
|
||||
// 3. ВАЖНО: Имя модели должно ТОЧНО совпадать с тем, что ты скачала в Ollama.
|
||||
// Например, "llama3", "llama3.1", "qwen2.5-coder" или "phi3".
|
||||
string modelName = "qwen2.5-coder:7b";
|
||||
|
||||
_chatClient = new ChatClient(modelName, credential, options);
|
||||
|
||||
_builder = llmPromptBuilder;
|
||||
}
|
||||
|
||||
public async Task<String> AskQuestionAsync(string userQuestion, List<CodeChunk> foundChunks)
|
||||
{
|
||||
try
|
||||
{
|
||||
var finalPrompt = _builder.BuildPrompt(userQuestion, foundChunks);
|
||||
// Формируем сообщение. Поскольку мы уже зашили роль и инструкции
|
||||
// внутрь finalPrompt с помощью LlmPromptBuilder,
|
||||
// передаем все это как UserMessage.
|
||||
var messages = new ChatMessage[]
|
||||
{
|
||||
new UserChatMessage(finalPrompt)
|
||||
};
|
||||
|
||||
// Отправляем запрос (настройки опциональны)
|
||||
var completionOptions = new ChatCompletionOptions
|
||||
{
|
||||
Temperature = 0.2f, // Делаем ответы менее креативными и более точными
|
||||
};
|
||||
|
||||
ChatCompletion completion = await _chatClient.CompleteChatAsync(messages, completionOptions);
|
||||
|
||||
// Возвращаем сгенерированный текст
|
||||
return completion.Content[0].Text;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return $"[-] Ошибка при обращении к LLM: {ex.Message}";
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user