Добавьте файлы проекта.

This commit is contained in:
2026-07-22 20:47:51 +04:00
parent 8050e9194d
commit 17a64809cb
22 changed files with 606 additions and 0 deletions

View 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}";
}
}
}