Справочник агентов¶
Подробная документация по 13 специализированным агентам CodeGraph.
Содержание¶
- Архитектура агентов
- Основные агенты
- 1. AnalyzerAgent
- 2. RetrieverAgent
- 3. EnrichmentAgent
- 4. GeneratorAgent
- 5. InterpreterAgent
- Специализированные агенты
- 6. CallChainAnalyzer
- 7. LogicSynthesizer
- 8. ControlFlowGenerator
- 9. AdaptiveRefiner
- 10. FallbackStrategies
- Агенты для специфических предметных областей
- 11. SecurityAgent
- 12. PerformanceAgent
- 13. ArchitectureAgent
- Взаимодействие агентов
- Добавление пользовательских агентов
- Дальнейшие шаги
Архитектура агента¶
Вопрос → AnalyzerAgent → RetrieverAgent → EnrichmentAgent → GeneratorAgent → InterpreterAgent → Ответ
↓ ↓ ↓ ↓ ↓
Намерение/Домен Гибридный поиск Семантические теги Генерация запроса Синтез ответа
Основные агенты¶
1. AnalyzerAgent¶
Назначение: Понимание вопроса и извлечение намерений
Расположение: src/agents/analyzer_agent.py
Обязанности: - Извлечение намерений пользователя из естественного языка - Определение целевой области/подсистемы - Извлечение релевантных ключевых слов - Классификация типа запроса (семантический/структурный/безопасность)
Конфигурация:
from src.agents.analyzer_agent import AnalyzerAgent
from src.config import CPGConfig
config = CPGConfig()
config.set_cpg_type("postgresql")
analyzer = AnalyzerAgent(
vector_store=vector_store,
cpg_config=config
)
Ключевые методы:
# Анализ вопроса {#analyze-a-question}
analysis = analyzer.analyze("Какие методы обрабатывают транзакции?")
# Структура результата {#result-structure}
{
'intent': 'find_methods', # Что хочет пользователь
'domain': 'transaction-manager', # Целевая подсистема
'keywords': ['transaction'], # Важные термины
'query_type': 'semantic', # Классификация запроса
'confidence': 0.85
}
2. RetrieverAgent¶
Назначение: Гибридный поиск, объединяющий семантический и структурный поиск
Расположение: src/agents/retriever_agent.py
Обязанности: - Параллельный асинхронный поиск по векторам и графу - Объединение результатов на основе RRF (Reciprocal Rank Fusion) - Ранжирование из разных источников - Кэширование результатов
Конфигурация:
from src.agents.retriever_agent import RetrieverAgent
retriever = RetrieverAgent(
vector_store=vector_store,
analyzer_agent=analyzer,
cpg_service=cpg_service,
enable_hybrid=True
)
Ключевые методы:
# Гибридный поиск {#hybrid-retrieval}
result = retriever.retrieve_hybrid(
question="Найти шаблоны выделения памяти",
mode="hybrid", # hybrid, vector_only, graph_only
query_type="structural", # Влияет на распределение весов
top_k=10,
use_ranker=True
)
# Структура результата {#result-structure}
{
'results': [...], # Сырые результаты поиска
'ranked_results': [...], # Ранжированные с оценками
'retrieval_stats': {
'total_retrieved': 15,
'source_distribution': {'vector': 8, 'graph': 7}
}
}
Адаптация весов: | Тип запроса | Вес вектора | Вес графа | |------------|---------------|--------------| | semantic | 0.75 | 0.25 | | structural | 0.25 | 0.75 | | security | 0.50 | 0.50 |
3. EnrichmentAgent¶
Назначение: Добавление семантических метаданных к узлам CPG
Расположение: src/agents/enrichment_agent.py
Обязанности: - 12-уровневое семантическое обогащение - Маркировка доменных концепций - Обнаружение свойств ACID - Аннотация атрибутов безопасности
Конфигурация:
from src.agents.enrichment_agent import EnrichmentAgent
enrichment = EnrichmentAgent()
Слои обогащения: 1. Архитектурный уровень (access-method, storage-engine и т.д.) 2. Свойства ACID 3. Шаблоны многопоточности 4. Показатели производительности 5. Атрибуты безопасности 6. Шаблоны обработки ошибок 7. Управление памятью 8. Примитивы блокировок 9. Границы транзакций 10. Категории потоков данных 11. Шаблоны потоков управления 12. Доменно-специфичные концепции
Ключевые методы:
# Обогащение метода {#enrich-a-method}
enriched = enrichment.enrich_method({
'name': 'LWLockAcquire',
'file': 'lwlock.c',
'signature': 'void LWLockAcquire(LWLock *lock, LWLockMode mode)'
})
# Результат {#result}
{
'name': 'LWLockAcquire',
'tags': ['concurrency', 'lock-acquire', 'synchronization'],
'layer': 'concurrency-primitive',
'security': ['thread-safe'],
'performance': ['blocking-operation']
}
4. GeneratorAgent¶
Назначение: Генерация запросов на основе естественного языка
Расположение: src/agents/generator_agent.py
Обязанности: - Генерация SQL-запросов к базе данных CPG - Сопоставление с шаблонами - Оптимизация запросов
Конфигурация:
from src.agents.generator_agent import GeneratorAgent
generator = GeneratorAgent(
vector_store=vector_store,
cpg_config=config
)
Ключевые методы:
# Генерация запроса из вопроса {#generate-query-from-question}
query = generator.generate_query(
question="Найти всех вызывающих CommitTransaction",
analysis={'intent': 'find_callers', 'keywords': ['CommitTransaction']},
examples=[...] # Извлечённые примеры
)
# Возвращает SQL-запрос {#returns-sql-query}
# "SELECT caller.full_name FROM edges_call ec JOIN nodes_method caller..." {#select-callerfull-name-from-edges-call-ec-join-nodes-method-caller}
5. InterpreterAgent¶
Назначение: Преобразование результатов в ответы на естественном языке
Расположение: src/agents/interpreter_agent.py
Обязанности: - Синтез результатов - Оценка достоверности - Указание источников - Форматирование ответа
Конфигурация:
from src.agents.interpreter_agent import InterpreterAgent
interpreter = InterpreterAgent(
llm_interface=llm,
cpg_config=config
)
Ключевые методы:
# Интерпретация результатов {#interpret-results}
answer = interpreter.interpret(
question="Какие методы вызывают LWLockAcquire?",
results=[...],
query="SELECT..."
)
# Результат {#result}
{
'answer': 'LWLockAcquire вызывается 15 методами, включая...',
'confidence': 0.85,
'sources': [
{'method': 'heap_insert', 'file': 'heapam.c', 'line': 234},
...
]
}
Специализированные агенты¶
6. CallChainAnalyzer¶
Назначение: Анализ зависимостей вызовов функций
Расположение: src/agents/call_chain_analyzer.py
Методы:
from src.agents.call_chain_analyzer import CallChainAnalyzer
analyzer = CallChainAnalyzer(cpg_service)
# Найти цепочку вызовов {#find-call-chain}
chain = analyzer.find_chain(
source="executor_start",
target="heap_insert",
max_depth=10
)
7. LogicSynthesizer¶
Назначение: Генерация объяснений для сложной логики
Расположение: src/agents/logic_synthesizer.py
Методы:
from src.agents.logic_synthesizer import LogicSynthesizer
synthesizer = LogicSynthesizer(llm)
# Объяснить логику {#explain-logic}
explanation = synthesizer.explain_function(
function_name="CommitTransaction",
context=retrieved_context
)
8. ControlFlowGenerator¶
Назначение: Генерация объяснений потоков управления
Расположение: src/agents/control_flow_generator.py
9. AdaptiveRefiner¶
Назначение: Уточнение запросов на основе обратной связи от выполнения
Расположение: src/agents/adaptive_refiner.py
Методы:
from src.agents.adaptive_refiner import AdaptiveRefiner
refiner = AdaptiveRefiner()
# Уточнить неудачный запрос {#refine-failed-query}
refined = refiner.refine_query(
original_query="...",
error="Результаты не найдены",
context=analysis
)
10. FallbackStrategies¶
Назначение: Обработка ошибок и предоставление резервного поведения
Расположение: src/agents/fallback_strategies.py
Агенты для специфических предметных областей¶
11. SecurityAgent¶
Назначение: Обнаружение уязвимостей безопасности
Расположение: src/security/security_agents.py
Обнаруживаемые шаблоны: - SQL-инъекции (CWE-89) - Переполнение буфера (CWE-120) - Инъекции команд (CWE-78) - Строки форматирования (CWE-134)
12. PerformanceAgent¶
Назначение: Обнаружение узких мест в производительности
Расположение: src/performance/performance_agents.py
Метрики: - Цикломатическая сложность - Глубина вложенности циклов - Длина функций - Шаблоны выделения памяти
13. ArchitectureAgent¶
Назначение: Анализ архитектурных шаблонов
Расположение: src/architecture/architecture_agents.py
Анализ: - Границы слоёв - Зависимости между модулями - Обнаружение шаблонов проектирования - Сопоставление подсистем
Взаимодействие агентов¶
Агенты взаимодействуют через общее состояние:
@dataclass
class AgentState:
question: str
analysis: Optional[Dict] = None
retrieval_results: List = field(default_factory=list)
enrichments: Dict = field(default_factory=dict)
generated_query: Optional[str] = None
execution_results: List = field(default_factory=list)
answer: Optional[str] = None
confidence: float = 0.0
errors: List[str] = field(default_factory=list)
Добавление пользовательских агентов¶
Создайте нового агента, расширив базовый шаблон:
from typing import Dict, List, Optional
class CustomAgent:
def __init__(self, cpg_config: Optional[CPGConfig] = None):
self.cpg_config = cpg_config or get_global_cpg_config()
def process(self, state: AgentState) -> AgentState:
"""Обрабатывает состояние и возвращает обновлённое состояние."""
# Ваша логика здесь
state.custom_results = self._analyze(state.question)
return state
def _analyze(self, question: str) -> Dict:
"""Внутренний метод анализа."""
pass
Зарегистрируйте в рабочем процессе:
from src.workflow import register_agent
register_agent("custom", CustomAgent)
Дальнейшие шаги¶
- Справочник по рабочим процессам — Оркестрация рабочих процессов
- Справочник API — Полная документация по API