Files
CodeAnalizer/CodeBase/Services/LlmService.cs

62 lines
2.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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<GraphNodeContext> grafContext)
{
try
{
var finalPrompt = _builder.BuildPrompt(userQuestion, grafContext);
// Формируем сообщение. Поскольку мы уже зашили роль и инструкции
// внутрь 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}";
}
}
}