Скрипты Python для извлечения данных из инструментов оценки технического долга (TD), создания подсказок и запуска чатов с помощью модели большого языка (LLM) через API Ollama.
В настоящее время прототип поддерживает только Arcan в качестве инструмента оценки TD. Он также поддерживает только проекты Java.
В будущем его следует расширить для поддержки проектов Designite и C#.
pip install -r requirements.txt
Выполните анализ одной версии выбранного вами Java-проекта.
Используя результаты анализа, запустите объединение, чтобы объединить результаты в один файл.
Здесь выходные данные Arcan расположены по адресу ./arcanOutput/myproject
, и нам нужен объединенный файл по адресу ./genai4atdOutput/merger-output
. Репозиторий, содержащий проект, находится по адресу ./projects/myproject
.
python merger_run.py ./arcanOutput/myproject ./genai4atdOutput/merger-output JAVA -r ./projects/myproject -e
Мы хотим создать файл примеров, который содержит по одному запаху каждого типа, полученному из данных, поэтому мы будем использовать опцию --examples
( -e
).
В результате слияния можно дополнительно получить полные строки кода, в которых каждая зависимость используется в классе, используя параметр --loc
( -l
). На данный момент это не дало нам больших результатов с LLM, мы не рекомендуем его.
Теперь у нас есть объединенный файл по адресу ./genai4atdOutput/merger-output/myproject-merged.csv
и файл примера по адресу ./genai4atdOutput/merger-output/myproject-merged-examples.csv.
Далее нам нужно создать файл подсказки.
python build_prompt_run.py ./genai4atdOutput/merger-output/myproject-merged-examples.csv ./genai4atdOutput/prompts-output JAVA -dep -def --json
Мы хотим, чтобы зависимости каждого компонента в приглашении, а также определения запахов и метрик (из документации Arcan) были включены в контекст, поэтому мы используем опции --dependencies
( -dep
) и --definitions
( -def
).
Нам также нужны данные о запахе в формате JSON. Мы можем написать его на естественном языке, но это дает нам более длинные подсказки и не дает лучших результатов, чем JSON.
Теперь у нас есть файл подсказки по адресу ./genai4atdOutput/prompts-output/json/defs/prompt_with_dependencies.json
.
Наконец, мы можем запустить чат с LLM. API находится по адресу http://localhost:11434/api/chat
, и мы хотим использовать модель Llama 3.
python chat_run.py ./genai4atdOutput/prompts-output/json/defs/prompt_with_dependencies.json ./genai4atdOutput/chats-output http://localhost:11434/api/chat llama3 --json -def
Параметры --json
и -def
, чтобы указать, что приглашение имеет формат JSON и содержит определения.
Запустите анализ эволюции выбранного вами Java-проекта.
Используя результаты анализа, запустите трекер запахов. Он будет отслеживать запахи в разных версиях, чтобы увидеть, увеличиваются ли они, уменьшаются или исчезают. В случае изменения или исчезновения он также может получить историю различий и/или фиксации соответствующих компонентов.
Здесь выходные данные Arcan расположены по адресу ./arcanOutput/myproject-evo
, и нам нужен объединенный файл по адресу ./genai4atdOutput/smell-track-output
. Репозиторий, содержащий проект, находится по адресу ./projects/myproject
.
python smell_tracker_run.py ./arcanOutput/myproject ./genai4atdOutput/smell-track-output ./projects/myproject JAVA -diffs -commits -e
Нам нужны различия и истории коммитов соответствующих компонентов при наличии изменений, а также файл примеров, содержащий только запахи, которые изменились или исчезли, поэтому мы используем --ATDIVarDiffs
( -diffs
), --ATDIVarCommitHistory
( -commits
) и --examples
( -e
) опции.
Теперь у нас есть файл отслеживания запаха по адресу ./genai4atdOutput/smell-track-output/smell_track_myproject_evo.json
и файл примера по адресу ./genai4atdOutput/smell-track-output/smell_track_myproject_evo_example.json
Далее мы можем запустить чат с LLM. API находится по адресу http://localhost:11434/api/chat
, и мы хотим использовать модель Llama 3.
python chat_run.py ./genai4atdOutput/smell-track-output/myproject_evo_smell_track_example.json ./genai4atdOutput/chats-output http://localhost:11434/api/chat llama3 -evo
Мы используем опцию --evolution
( -evo
), чтобы указать, что это эволюционный анализ.