AI-ассистент для программирования с локальными моделями
English Version • Функции • Инструменты • Справочник
Ollama Code — это CLI-инструмент для работы с AI-ассистентом по программированию, использующий локальные модели Ollama. Проект предоставляет полный контроль над кодом и данными, работая полностью офлайн.
run → run_shell_command)Различные модели требуют разное количество видеопамяти. Ниже приведено руководство для NVIDIA 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
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 терминал |
Полнофункциональное веб-приложение с тремя основными компонентами:
| Компонент | Технология | Возможности |
|---|---|---|
| ChatInterface | React + Zustand | Streaming, выбор модели, сохранение сессий |
| FileExplorer | Monaco Editor | Подсветка синтаксиса, мультиязычность, автосохранение |
| TerminalEmulator | xterm.js + node-pty | Полная PTY поддержка, resize, 256 цветов |
Комплексная документация 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 }),
});
Крупные улучшения архитектуры для лучшей производительности и расширяемости:
| Функция | Описание |
|---|---|
| Миграция на Zustand | Заменил Context API, устраняет лишние ре-рендеры |
| Event Bus | Типизированная система pub/sub для слабой связности |
| Command Pattern | Полная поддержка Undo/Redo для обратимых операций |
| Plugin System v1 | Динамическая загрузка инструментов, builtin плагины, lifecycle hooks |
| Context Caching | KV-cache reuse для 80-90% более быстрых диалогов |
| Документация промптов | Полная документация системы формирования промптов |
| Store | Назначение |
|---|---|
sessionStore |
Состояние сессии и метрики |
streamingStore |
Состояние стриминга + AbortController |
uiStore |
UI настройки с персистентностью |
commandStore |
Command pattern для undo/redo |
eventBus |
Система событий pub/sub |
Динамическая архитектура плагинов с 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 Плагины:
core-tools — echo, timestamp, get_envdev-tools — python_dev, nodejs_dev, golang_dev, rust_dev, typescript_devfile-tools — read_file, write_file, edit_filesearch-tools — grep, glob, web_fetchshell-tools — run_shell_commandТипизированные события для коммуникации между компонентами:
// Подписка на события
eventBus.subscribe('stream:finished', (data) => {
console.log('Токены:', data.tokenCount);
});
// Эмиссия событий
eventBus.emit('command:executed', { commandId: '123', type: 'edit' });
Новая комплексная документация в docs/PROMPT_SYSTEM.md:
getCoreSystemPrompt() — построение основного системного промптаgetCompressionPrompt() — сжатие истории в XMLgetToolCallFormatInstructions() — для моделей без нативных toolsgetToolLearningContext() — обучение на прошлых ошибкахgetEnvironmentInfo() — контекст runtime окруженияСистема теперь автоматически обучается на ошибках вызова инструментов и создаёт динамические алиасы:
| Функция | Описание |
|---|---|
| Автоматическое обучение | Записывает ошибки вызова инструментов и создаёт алиасы автоматически |
| Нечёткое сопоставление | Использует расстояние Левенштейна для предложения правильных имён |
| Сохранение данных | Данные обучения сохраняются в ~/.ollama-code/learning/ |
| Динамические алиасы | Создание алиасов во время выполнения без изменения кода |
Как это работает:
Добавлены три комплексных инструмента для разработки:
| Инструмент | Алиасы | Описание |
|---|---|---|
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 |
Модель теперь получает детальную информацию об окружении в начале сессии:
Новая комплексная документация:
Модели теперь могут использовать короткие имена инструментов:
| Алиас | Каноническое имя |
|---|---|
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 |
ID текущей сессии теперь отображается в заголовке для удобства отладки и логирования.
Добавлено предупреждение при старте, если терминал не настроен на UTF-8 кодировку.
// Прогресс-бар для загрузки моделей
<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}
/>
> Выполни SELECT * FROM users LIMIT 10 в SQLite базе data.db
> Сохрани backup базы в /backup/db.sql
> Покажи схему таблицы users
> Запусти контейнер nginx на порту 8080
> Покажи логи контейнера my-app
> Останови все контейнеры
> Собери Docker образ из текущей директории
> Получи значение ключа session:user:123
> Установи cache:data со сроком 1 час
> Опубликуй сообщение в канал notifications
> Покажи все ключи с префиксом user:
// Модели с рассуждениями показывают процесс мышления
const response = await client.chat({
model: 'deepseek-r1:8b',
messages: [{ role: 'user', content: 'Реши задачу...' }],
think: true,
});
// Структурированный вывод по схеме
const response = await client.generate({
model: 'llama3.2',
prompt: 'Извлеки данные...',
format: {
type: 'object',
properties: {
name: { type: 'string' },
age: { type: 'number' },
},
required: ['name'],
},
});
> Проанализируй файл src/index.ts на качество кода
# Результат:
# Score: 85/100 (Grade: B)
# Issues: 2 warnings, 1 error
# Recommendations: Добавить обработку ошибок
> Сохрани изменения в stash с сообщением "WIP"
> Перенеси коммит abc123 в текущую ветку
> Найди баг с помощью bisect между v1.0 и HEAD
> Протестируй GET https://api.example.com/users
> Отправь POST на /api/users с данными {"name": "Test"}
> Создай блок-схему процесса авторизации
> Нарисуй 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 |
| 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.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 |
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 для отладки:
Проект использует нативные API Ollama:
| 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
packages/core/src/tools/BaseDeclarativeToolindex.tsApache License 2.0
Документация создана с помощью GLM-5 от Z.AI
См. CONTRIBUTING.md для руководства по участию в разработке.