52 lines
2.6 KiB
C#
52 lines
2.6 KiB
C#
using CodeBase.Models;
|
||
using System.Collections.Generic;
|
||
using System.Text;
|
||
|
||
public class LlmPromptBuilder
|
||
{
|
||
public string BuildPrompt(string userQuestion, List<RetrievedContext> 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();
|
||
}
|
||
} |