using CodeBase.Models; using System.Collections.Generic; using System.Text; public class LlmPromptBuilder { public string BuildPrompt(string userQuestion, List graphContexts) { var promptBuilder = new StringBuilder(); // Универсальная роль архитектора без привязки к конкретному языку promptBuilder.AppendLine("Ты — опытный ИТ-архитектор и разработчик. Твоя задача — ответить на вопрос пользователя, опираясь ИСКЛЮЧИТЕЛЬНО на предоставленный граф вызовов и зависимостей кода. Не придумывай методы или классы, которых нет в контексте."); promptBuilder.AppendLine("\nКонтекст из кодовой базы (Граф зависимостей):"); foreach (var node in graphContexts) { promptBuilder.AppendLine("--------------------------------------------------"); promptBuilder.AppendLine($"[УЗЕЛ ГРАФА]"); promptBuilder.AppendLine($"Проект: {node.ProjectName}"); promptBuilder.AppendLine($"Имя сущности: {node.EntityName}"); promptBuilder.AppendLine($"Файл: {node.FilePath}"); // Добавляем зависимости ВНИЗ (что использует метод) if (node.OutgoingDependencies != null && node.OutgoingDependencies.Any()) { promptBuilder.AppendLine("\n[ИСПОЛЬЗУЕТ ВНУТРИ СЕБЯ]:"); foreach (var dep in node.OutgoingDependencies.Distinct()) { promptBuilder.AppendLine($"- {dep}"); } } // Добавляем зависимости ВВЕРХ (кто зависит от метода) if (node.IncomingDependencies != null && node.IncomingDependencies.Any()) { promptBuilder.AppendLine("\n[ВЫЗЫВАЕТСЯ ИЗ]:"); foreach (var caller in node.IncomingDependencies.Distinct()) { promptBuilder.AppendLine($"- {caller}"); } } promptBuilder.AppendLine("\nКод:"); promptBuilder.AppendLine(node.Content); } promptBuilder.AppendLine("--------------------------------------------------"); promptBuilder.AppendLine($"Вопрос пользователя: {userQuestion}"); return promptBuilder.ToString(); } }