Skip to content

Latest commit

Β 

History

13 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Autonomous F# Code Generation Agent

Π‘Π°ΠΌΠΎΡ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‰Π°ΡΡΡ систСма Π½Π° F#, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ LLM (Ollama) для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ, тСстирования ΠΈ накоплСния ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π² локальной Π±Π°Π·Π΅ SQLite. Π Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π·Π°ΠΌΠΊΠ½ΡƒΡ‚Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» Β«Π Π°Π·ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΠ΅ β†’ ГСнСрация ΠΊΠΎΠ΄Π° β†’ ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π² REPL β†’ Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π² GAC-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ рССстр».

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ возмоТности

  • 🧠 LLM‑агСнт Π½Π° Π±Π°Π·Π΅ Ollama с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ JSON‑схСм (Structured Outputs)
  • πŸ“¦ Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π°Π½Π°Π»ΠΎΠ³ GAC β€” Π±Π°Π·Π° SQLite, хранящая ΠΊΠΎΠ΄ ΠΈ зависимости
  • πŸ” Π¦ΠΈΠΊΠ» ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ связи β€” автоматичСскоС исправлСниС ошибок Ρ‡Π΅Ρ€Π΅Π· dotnet fsi
  • 🧩 ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ β€” Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅Ρ‚ слоТныС Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ шагов
  • πŸ”’ ВСрсионированиС SemVer β€” всС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ суффикс _major_minor_patch
  • βœ… ВстроСнноС тСстированиС β€” тСсты хранятся вмСстС с ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅
  • 🚫 Π‘Π΅Π· Π²Π½Π΅ΡˆΠ½ΠΈΡ… зависимостСй β€” Ρ‚ΠΎΠ»ΡŒΠΊΠΎ .NET SDK, Ollama ΠΈ Microsoft.Data.Sqlite

ВрСбования

  • .NET SDK 6+
  • Ollama с установлСнной модСлью (рСкомСндуСтся qwen2.5-coder:latest)
  • ΠŸΠ°ΠΊΠ΅Ρ‚ Microsoft.Data.Sqlite (устанавливаСтся автоматичСски Ρ‡Π΅Ρ€Π΅Π· dotnet add package)

Установка ΠΈ запуск

  1. ΠšΠ»ΠΎΠ½ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ:

    git clone https://github.com/yourusername/autonomous-fsharp-agent.git
    cd autonomous-fsharp-agent
  2. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ F#:

    dotnet new console -lang "F#" -o AgentFSharp
    cd AgentFSharp
  3. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ SQLite:

    dotnet add package Microsoft.Data.Sqlite
  4. Π—Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ содСрТимоС Program.fs Π½Π° ΠΊΠΎΠ΄ ΠΈΠ· рСпозитория.

  5. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Ollama Π·Π°ΠΏΡƒΡ‰Π΅Π½Π° ΠΈ модСль доступна:

    ollama list
    ollama run qwen2.5-coder:latest
  6. ЗапуститС Π°Π³Π΅Π½Ρ‚Π°:

    dotnet run "Π‘ΠΎΠ·Π΄Π°ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°"

    Или Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² β€” Ρ‚ΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ ввСсти Π·Π°Π΄Π°Ρ‡Ρƒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.

ИспользованиС

ΠžΠ΄ΠΈΠ½ΠΎΡ‡Π½Π°Ρ Π·Π°Π΄Π°Ρ‡Π°

dotnet run "Π‘ΠΎΠ·Π΄Π°ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°"

АгСнт сгСнСрируСт ΠΊΠΎΠ΄, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ Π΅Π³ΠΎ Π² F# Interactive, ΠΏΡ€ΠΎΠ³ΠΎΠ½ΠΈΡ‚ тСсты ΠΈ сохранит ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π² Π±Π°Π·Ρƒ.

ΠœΠ½ΠΎΠ³ΠΎΡ…ΠΎΠ΄ΠΎΠ²Π°Ρ Π·Π°Π΄Π°Ρ‡Π° с ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠΎΠΌ

dotnet run "Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с банковскими транзакциями: Ρ‚ΠΈΠΏ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°"

ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ (LLM) составит список шагов, ΠΈ Π°Π³Π΅Π½Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ ΠΈΡ… ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, обновляя контСкст послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ шага.

Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ

Если Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ ввСсти Π·Π°Π΄Π°Ρ‡Ρƒ:

Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π·Π°Π΄Π°Ρ‡Ρƒ для Π°Π³Π΅Π½Ρ‚Π° (ΠΈΠ»ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Enter для Π΄Π΅ΠΌΠΎ-Π·Π°Π΄Π°Ρ‡ΠΈ):

АрхитСктура

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ систСмы

  • Config β€” настройки ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Ollama, схСмы JSON, систСмныС ΠΏΡ€ΠΎΠΌΠΏΡ‚Ρ‹
  • DatabaseRegistry β€” Ρ€Π°Π±ΠΎΡ‚Π° с SQLite, сохранСниС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ контСкста с топологичСской сортировкой
  • CoreEngine β€” взаимодСйствиС с Ollama API ΠΈ запуск dotnet fsi
  • Orchestrator β€” Ρ†ΠΈΠΊΠ» Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈ исправлСния (executeReasoningLoop)
  • Planner β€” Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ слоТной Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡ΠΈ (runPlannedTasks)

Π‘Ρ…Π΅ΠΌΠ° Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

CREATE TABLE registry (
    id TEXT PRIMARY KEY,          -- Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, "calculateFactorial_1_0_0"
    name TEXT NOT NULL,           -- Π±Π°Π·ΠΎΠ²ΠΎΠ΅ имя (Π±Π΅Π· вСрсии)
    kind TEXT NOT NULL,           -- 'type' ΠΈΠ»ΠΈ 'function'
    signature TEXT NOT NULL,
    version_major INTEGER NOT NULL,
    version_minor INTEGER NOT NULL,
    version_patch INTEGER NOT NULL,
    source_code TEXT NOT NULL,
    test_code TEXT,
    description TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE dependencies (
    parent_id TEXT NOT NULL,
    child_id TEXT NOT NULL,
    PRIMARY KEY (parent_id, child_id),
    FOREIGN KEY (parent_id) REFERENCES registry(id) ON DELETE CASCADE,
    FOREIGN KEY (child_id) REFERENCES registry(id) ON DELETE CASCADE
);

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ†ΠΈΠΊΠ»Π° Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ

  1. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ставит Π·Π°Π΄Π°Ρ‡Ρƒ.
  2. АгСнт ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ контСкст ΠΈΠ· Π‘Π” (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ совмСстимыС послСдниС вСрсии).
  3. LLM Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ JSON с полями: name, kind, signature, version, source_code, test_code, dependencies.
  4. БистСма склСиваСт контСкст + Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ΄ + тСсты ΠΈ отправляСт Π² dotnet fsi.
  5. Если тСсты проходят, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ сохраняСтся Π² Π‘Π”; ΠΈΠ½Π°Ρ‡Π΅ ошибки ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ для исправлСния (Π΄ΠΎ 5 ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ).
  6. ΠŸΡ€ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΡ…ΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Π·Π°Ρ€Π°Π½Π΅Π΅ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ список шагов, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… выполняСтся ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ одиночная Π·Π°Π΄Π°Ρ‡Π°.

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ

ВсС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ находятся Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ Config Ρ„Π°ΠΉΠ»Π° Program.fs:

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ОписаниС Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
modelName Имя модСли Ollama "qwen2.5-coder:latest"
ollamaUrl АдрСс Ollama API "http://localhost:11434/api/chat"
connectionString ΠŸΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ SQLite "Data Source=gac_registry.db"

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π·Π°Π΄Π°Ρ‡

  • "Π‘ΠΎΠ·Π΄Π°ΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… для Ρ‚ΠΎΡ‡ΠΊΠΈ Π² Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠΌ пространствС"
  • "Напиши Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ расчёта расстояния ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΡƒΡŽ Ρ‚ΠΈΠΏ Point"
  • "Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с гСомСтричСскими Ρ„ΠΈΠ³ΡƒΡ€Π°ΠΌΠΈ: Ρ‚ΠΈΠΏΡ‹, расчёт ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΈ, ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€Π°"

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ

  • Π—Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚ качСства LLM β€” модСль Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ JSON‑рСТим; ΠΈΠ½ΠΎΠ³Π΄Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ошибки Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ Π·Π° нСсколько ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ.
  • ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ автоматичСской очистки β€” ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅ вСрсии ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π² Π±Π°Π·Π΅; ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ для удалСния Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ….
  • ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Π½Π΅ всСгда ΠΈΠ΄Π΅Π°Π»Π΅Π½ β€” ΠΈΠ½ΠΎΠ³Π΄Π° Π²Ρ‹Π΄Π°Ρ‘Ρ‚ лишниС шаги; допустимо Ρ€ΡƒΡ‡Π½ΠΎΠ΅ Π²ΠΌΠ΅ΡˆΠ°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ.
  • Π‘ΡƒΠ΄ΡƒΡ‰ΠΈΠ΅ направлСния:
    • АвтоматичСскоС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ зависимостСй ΠΈΠ· исходного ΠΊΠΎΠ΄Π°
    • ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ нСзависимых шагов
    • ВСб‑интСрфСйс для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°
    • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π΄Ρ€ΡƒΠ³ΠΈΡ… языков (F# сСйчас Тёстко Π·Π°ΡˆΠΈΡ‚)

ЛицСнзия

MIT. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ свободно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄.

About

πŸ€– Autonomous F# Code Generation Agent

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages