ollama-code

Ollama Code Logo

Ollama Code

AI-ассистент для программирования с локальными моделями

Interface Preview

English VersionФункцииИнструментыСправочник


Ollama Code — это CLI-инструмент для работы с AI-ассистентом по программированию, использующий локальные модели Ollama. Проект предоставляет полный контроль над кодом и данными, работая полностью офлайн.

Возможности

Требования

Требования к GPU для моделей

Различные модели требуют разное количество видеопамяти. Ниже приведено руководство для NVIDIA GPU:

Минимальные требования к GPU по размеру модели

Размер модели Мин. VRAM Рекомендуемый GPU Примечания
3B 4 ГБ RTX 3050, GTX 1660, RTX 5060 Базовые модели, рекомендуется квантизация
7B 6 ГБ RTX 3060, RTX 4060, RTX 5060 Хорошее соотношение скорости и качества
8B 8 ГБ RTX 3070, RTX 4060 Ti, RTX 5070 DeepSeek R1, Llama 3.1
14B 12 ГБ RTX 3080, RTX 4070, RTX 5070 Ti Qwen2.5-Coder 14B
30B 20 ГБ RTX 3090, RTX 4090, RTX 5080 Qwen3-Coder 30B
70B 32 ГБ RTX 5090, 2x RTX 3090 DeepSeek R1 70B, Llama 3.1 70B
120B+ 48+ ГБ 2x RTX 5090, A100 Требует несколько GPU или облако

Результаты тестирования производительности моделей

Тесты производительности проведены со стандартными задачами (генерация кода, рефакторинг, отладка):

GPU VRAM Модель Квантизация Скорость (tok/s) Оценка качества
RTX 3060 12 ГБ llama3.2:3b Q4_K_M 45-55 Хорошо
RTX 3060 12 ГБ qwen2.5-coder:7b Q4_K_M 28-35 Очень хорошо
RTX 3060 12 ГБ deepseek-r1:8b Q4_K_M 22-28 Отлично
RTX 3060 12 ГБ qwen2.5-coder:14b Q3_K_M 12-18 Отлично
RTX 3070 8 ГБ llama3.2:3b Q4_K_M 55-65 Хорошо
RTX 3070 8 ГБ qwen2.5-coder:7b Q4_K_M 35-42 Очень хорошо
RTX 3070 8 ГБ deepseek-r1:8b Q4_K_M 28-35 Отлично
RTX 3080 10 ГБ qwen2.5-coder:7b Q8_0 40-48 Отлично
RTX 3080 10 ГБ qwen2.5-coder:14b Q4_K_M 25-32 Отлично
RTX 3080 10 ГБ deepseek-r1:8b Q8_0 32-40 Отлично
RTX 3090 24 ГБ qwen2.5-coder:14b Q8_0 38-45 Отлично
RTX 3090 24 ГБ qwen3-coder:30b Q4_K_M 18-25 Превосходно
RTX 3090 24 ГБ deepseek-r1:32b Q4_K_M 12-18 Превосходно
RTX 4070 12 ГБ qwen2.5-coder:14b Q5_K_M 35-42 Отлично
RTX 4070 Ti 16 ГБ qwen3-coder:30b Q4_K_M 22-28 Превосходно
RTX 4080 16 ГБ qwen3-coder:30b Q5_K_M 28-35 Превосходно
RTX 4080 16 ГБ deepseek-r1:32b Q4_K_M 20-28 Превосходно
RTX 4090 24 ГБ qwen3-coder:30b Q8_0 45-55 Превосходно
RTX 4090 24 ГБ deepseek-r1:32b Q5_K_M 35-45 Превосходно
RTX 4090 24 ГБ deepseek-r1:70b Q3_K_M 8-12 Исключительно
RTX 5070 12 ГБ qwen2.5-coder:14b Q6_K 45-55 Отлично
RTX 5070 Ti 16 ГБ qwen3-coder:30b Q5_K_M 35-45 Превосходно
RTX 5080 16 ГБ qwen3-coder:30b Q6_K 45-55 Превосходно
RTX 5080 16 ГБ deepseek-r1:32b Q5_K_M 38-48 Превосходно
RTX 5090 32 ГБ qwen3-coder:30b FP16 80-100 Исключительно
RTX 5090 32 ГБ deepseek-r1:70b Q4_K_M 25-35 Исключительно
RTX 5090 32 ГБ llama3.1:70b Q5_K_M 30-40 Исключительно

Примечание: Скорость зависит от длины контекста, сложности промпта и конфигурации системы. Оценка качества субъективна и основана на точности генерации кода и связности. Серия RTX 50 показывает значительное улучшение производительности благодаря архитектуре Blackwell и памяти GDDR7.

Руководство по квантизации

Квантизация Уменьшение размера Потеря качества Рекомендуется для
Q4_K_M ~70% Минимальная Большинство задач
Q5_K_M ~65% Очень низкая Лучшее качество
Q6_K ~60% Незначительная Высокие требования к качеству
Q8_0 ~50% Нет Максимальное качество
FP16 0% Нет RTX 5090 с 32 ГБ+ VRAM

Быстрый старт

Установка зависимостей

# Клонировать репозиторий
git clone <repository-url>
cd ollama-code

# Установить зависимости
npm install

# Собрать проект
npm run build

Запуск

# Интерактивный режим
npm run start

# С указанием модели
npm run start -- --model llama3.2

# Одноразовый запрос
npm run start -- "Объясни, как работает async/await в JavaScript"

# Режим отладки
npm run debug

Web UI

Ollama Code теперь включает полнофункциональный веб-интерфейс:

# Запуск Web UI (разработка)
cd packages/web-app
npm run dev

# Запуск с поддержкой терминала
npm run dev:server

Возможности Web UI:

Вкладка Функции
Chat Streaming ответы, выбор модели, управление сессиями
Files Файловый менеджер, Monaco editor, подсветка синтаксиса
Terminal Полноценный PTY терминал на xterm.js

API Endpoints:

Endpoint Описание
/api/models Список доступных моделей Ollama
/api/chat Чат со streaming
/api/generate Генерация со streaming
/api/fs Операции с файловой системой
/terminal WebSocket терминал

Новые возможности v0.13.0

Web UI — Полноценный Next.js интерфейс

Полнофункциональное веб-приложение с тремя основными компонентами:

Компонент Технология Возможности
ChatInterface React + Zustand Streaming, выбор модели, сохранение сессий
FileExplorer Monaco Editor Подсветка синтаксиса, мультиязычность, автосохранение
TerminalEmulator xterm.js + node-pty Полная PTY поддержка, resize, 256 цветов

TSDoc документация API

Комплексная документация API для всех пакетов:

// Использование SDK
import { query, createSdkMcpServer, tool } from '@ollama-code/sdk';

const result = await query({
  prompt: 'Объясни async/await',
  model: 'llama3.2',
});

// MCP сервер
const myTool = tool({
  name: 'echo',
  description: 'Вернуть сообщение',
  parameters: { message: { type: 'string' } },
  execute: async (params) => ({ echo: params.message }),
});

Технические улучшения


Новые возможности v0.11.0

Архитектурные улучшения

Крупные улучшения архитектуры для лучшей производительности и расширяемости:

Функция Описание
Миграция на Zustand Заменил Context API, устраняет лишние ре-рендеры
Event Bus Типизированная система pub/sub для слабой связности
Command Pattern Полная поддержка Undo/Redo для обратимых операций
Plugin System v1 Динамическая загрузка инструментов, builtin плагины, lifecycle hooks
Context Caching KV-cache reuse для 80-90% более быстрых диалогов
Документация промптов Полная документация системы формирования промптов

Новые Stores

Store Назначение
sessionStore Состояние сессии и метрики
streamingStore Состояние стриминга + AbortController
uiStore UI настройки с персистентностью
commandStore Command pattern для undo/redo
eventBus Система событий pub/sub

Plugin System

Динамическая архитектура плагинов с lifecycle hooks:

const plugin: PluginDefinition = {
  metadata: { id: 'my-plugin', name: 'My Plugin', version: '1.0.0' },
  tools: [{ id: 'hello', name: 'hello', execute: async () => ({ success: true }) }],
  hooks: {
    onLoad: async (ctx) => ctx.logger.info('Загружен'),
    onBeforeToolExecute: async (id, params) => true,
  },
};

Builtin Плагины:

Event Bus

Типизированные события для коммуникации между компонентами:

// Подписка на события
eventBus.subscribe('stream:finished', (data) => {
  console.log('Токены:', data.tokenCount);
});

// Эмиссия событий
eventBus.emit('command:executed', { commandId: '123', type: 'edit' });

Документация системы промптов

Новая комплексная документация в docs/PROMPT_SYSTEM.md:


Новые возможности v0.10.7

Система самообучения для вызова инструментов

Система теперь автоматически обучается на ошибках вызова инструментов и создаёт динамические алиасы:

Функция Описание
Автоматическое обучение Записывает ошибки вызова инструментов и создаёт алиасы автоматически
Нечёткое сопоставление Использует расстояние Левенштейна для предложения правильных имён
Сохранение данных Данные обучения сохраняются в ~/.ollama-code/learning/
Динамические алиасы Создание алиасов во время выполнения без изменения кода

Как это работает:

  1. Модель вызывает несуществующий инструмент → Система записывает ошибку
  2. Система использует нечёткое сопоставление для поиска похожего инструмента
  3. После достижения порога → Создаётся динамический алиас
  4. Будущие вызовы с неправильным именем → Перенаправляются на правильный инструмент

Новые возможности v0.10.6

Инструменты разработки

Добавлены три комплексных инструмента для разработки:

Инструмент Алиасы Описание
python_dev py, python, pip, pytest Разработка на Python (run, test, lint, venv, pip)
nodejs_dev node, npm, yarn, pnpm, bun Разработка на Node.js с автоопределением пакетного менеджера
golang_dev go, golang Разработка на Go (run, build, test, mod)
php_dev php, composer, phpunit, artisan Разработка на PHP с поддержкой Composer и Laravel

Оповещение об окружении

Модель теперь получает детальную информацию об окружении в начале сессии:

Расширенная документация

Новая комплексная документация:


Новые возможности v0.10.5

Система алиасов инструментов

Модели теперь могут использовать короткие имена инструментов:

Алиас Каноническое имя
run, shell, exec, cmd run_shell_command
read read_file
write, create write_file
grep, search, find grep_search
glob, files glob
ls, list, dir list_directory
todo, todos todo_write
memory, save save_memory
websearch, web web_search
webfetch, fetch, url web_fetch
agent, subagent task

Отображение Session ID

ID текущей сессии теперь отображается в заголовке для удобства отладки и логирования.

Проверка UTF-8 локали

Добавлено предупреждение при старте, если терминал не настроен на UTF-8 кодировку.


Возможности v0.12.0

UI/UX Улучшения

// Прогресс-бар для загрузки моделей
<ProgressBar
  progress={45}
  label="Downloading model"
  speed="5.2 MB/s"
  eta="2m 30s"
/>

// Thinking indicator для thinking моделей
<ThinkingIndicator
  message="Analyzing code..."
  elapsedTime={45}
  showContent
/>

// Token usage display
<TokenUsageDisplay
  totalTokens={1500}
  promptTokens={500}
  completionTokens={1000}
  tokensPerSecond={45}
/>

// GPU/Memory indicator
<GPUUsage
  name="NVIDIA RTX 4090"
  utilization={85}
  memoryUsed={20 * 1024 * 1024 * 1024}
  memoryTotal={24 * 1024 * 1024 * 1024}
/>

Database Tool

> Выполни SELECT * FROM users LIMIT 10 в SQLite базе data.db
> Сохрани backup базы в /backup/db.sql
> Покажи схему таблицы users

Docker Tool

> Запусти контейнер nginx на порту 8080
> Покажи логи контейнера my-app
> Останови все контейнеры
> Собери Docker образ из текущей директории

Redis Tool

> Получи значение ключа session:user:123
> Установи cache:data со сроком 1 час
> Опубликуй сообщение в канал notifications
> Покажи все ключи с префиксом user:

Performance


Возможности v0.11.0

Thinking Models (DeepSeek R1)

// Модели с рассуждениями показывают процесс мышления
const response = await client.chat({
  model: 'deepseek-r1:8b',
  messages: [{ role: 'user', content: 'Реши задачу...' }],
  think: true,
});

Structured Outputs (JSON Schema)

// Структурированный вывод по схеме
const response = await client.generate({
  model: 'llama3.2',
  prompt: 'Извлеки данные...',
  format: {
    type: 'object',
    properties: {
      name: { type: 'string' },
      age: { type: 'number' },
    },
    required: ['name'],
  },
});

Code Analyzer Tool

> Проанализируй файл src/index.ts на качество кода

# Результат:
# Score: 85/100 (Grade: B)
# Issues: 2 warnings, 1 error
# Recommendations: Добавить обработку ошибок

Git Advanced Tool

> Сохрани изменения в stash с сообщением "WIP"
> Перенеси коммит abc123 в текущую ветку
> Найди баг с помощью bisect между v1.0 и HEAD

API Tester Tool

> Протестируй GET https://api.example.com/users
> Отправь POST на /api/users с данными {"name": "Test"}

Diagram Generator

> Создай блок-схему процесса авторизации
> Нарисуй sequence diagram для API запроса

Структура проекта

ollama-code/
├── packages/
│   ├── core/           # Ядро: Ollama клиент, инструменты, типы
│   ├── cli/            # CLI интерфейс на базе Ink
│   ├── web-app/        # Web UI: Next.js приложение (NEW)
│   ├── webui/          # Веб-компоненты для UI
│   └── sdk-typescript/ # SDK для программного использования
├── scripts/            # Скрипты сборки и запуска
├── integration-tests/  # Интеграционные тесты
└── docs/              # Документация

Документация

Краткий справочник

Документ Описание
WEB_UI.md Документация Web UI (NEW)
FEATURES.ru.md Полный справочник функций
TOOLS.ru.md Справочник инструментов
USAGE_GUIDE.md Руководство по использованию
EXAMPLES.md Примеры использования
OLLAMA_API.md Документация API

Английская документация (English Documentation)

Document Description
FEATURES.md Complete feature reference
TOOLS.md Tools reference
README.md README in English

Ресурсы проекта

Документ Описание
PROJECT_STRUCTURE.md Структура проекта
ROADMAP.md План развития
CONTRIBUTING.md Руководство по участию

Plugin System

Документ Описание
PLUGIN_SYSTEM.md Архитектура и API плагинов
PLUGIN_MARKETPLACE.md Руководство по Marketplace
PLUGIN_SANDBOX.md Безопасность и sandboxing

Основные команды

Команда Описание
npm run build Собрать все пакеты
npm run start Запустить CLI
npm run dev Запуск в режиме разработки
npm run debug Запуск с отладчиком
npm run test Запустить тесты
npm run lint Проверить код линтером
npm run typecheck Проверка типов TypeScript

Параметры CLI

Options:
  -d, --debug                     Режим отладки
  -m, --model                     Указать модель
  -s, --sandbox                   Запуск в песочнице
  -y, --yolo                      Автоматическое подтверждение всех действий
      --approval-mode             Режим подтверждения: plan, default, auto-edit, yolo
      --experimental-lsp          Включить экспериментальную поддержку LSP
      --ollama-base-url           URL Ollama сервера (по умолчанию: http://localhost:11434)
      --ollama-api-key            API ключ для удалённых инстансов

Переменные окружения

Переменная Описание
OLLAMA_BASE_URL URL Ollama сервера
OLLAMA_API_KEY API ключ (опционально)
OLLAMA_MODEL Модель по умолчанию
OLLAMA_KEEP_ALIVE Время удержания модели в памяти (default: 5m)
DEBUG Включить режим отладки (1 или true)
OLLAMA_CODE_DEBUG_LOG_FILE Логирование в файл

Отладка в VSCode

Проект включает готовые конфигурации VSCode для отладки:

  1. Откройте проект в VSCode
  2. Нажмите F5 или выберите “Run and Debug”
  3. Выберите конфигурацию:
    • Debug Ollama Code CLI — базовая отладка
    • Debug Ollama Code CLI (with args) — с аргументами
    • Debug Current Test File — отладка текущего теста

API Ollama

Проект использует нативные API Ollama:

Основные endpoints

Endpoint Метод Описание
/api/tags GET Список локальных моделей
/api/show POST Информация о модели
/api/generate POST Генерация текста
/api/chat POST Чат с моделью
/api/embed POST Эмбеддинги
/api/create POST Создание модели
/api/pull POST Загрузка модели
/api/ps GET Запущенные модели
/api/version GET Версия Ollama

Документация API: OLLAMA_API.md

Рекомендуемые модели

Модель Назначение Размер
llama3.2 Общего назначения 3B
qwen2.5-coder:7b Программирование 7B
qwen2.5-coder:14b Программирование 14B
qwen3-coder:30b Программирование 30B
deepseek-r1:8b Рассуждения (thinking) 8B
codellama Программирование 7B+
mistral Общего назначения 7B
nomic-embed-text Эмбеддинги 274M

Разработка

Сборка отдельного пакета

# Сборка core
npm run build --workspace=packages/core

# Сборка cli
npm run build --workspace=packages/cli

Запуск тестов

# Все тесты
npm run test

# Тесты core пакета
npm run test --workspace=packages/core

# Интеграционные тесты
npm run test:integration:sandbox:none

Добавление нового инструмента

  1. Создайте файл в packages/core/src/tools/
  2. Реализуйте класс, наследующий BaseDeclarativeTool
  3. Экспортируйте из index.ts

Лицензия

Apache License 2.0


Документация создана с помощью GLM-5 от Z.AI

Содействие

См. CONTRIBUTING.md для руководства по участию в разработке.