Практичный гайд: что купить, что запустить локально, а что не нужно вообще. Бюджетная сборка для 3-5 разработчиков.
╔══════════════╦═══════════════════════════╦═══════╗ ║ Инструмент ║ Зачем ║ Цена ║ ╠══════════════╬═══════════════════════════╬═══════╣ ║ Ollama ║ Локальный LLM сервер ║ $0 ║ ║ Continue.dev ║ AI-автодополнение в IDE ║ $0 ║ ║ Aider ║ AI-парное программирование ║ $0 ║ ║ ChromaDB ║ Векторная БД для RAG ║ $0 ║ ║ Open WebUI ║ Веб-интерфейс для LLM ║ $0 ║ ║ VPS + GPU ║ Сервер RTX 4090/RTX 6000 ║ ~$200/мес║ ╚══════════════╩═══════════════════════════╩═══════╝ # ИТОГО: $0 на софт + ~$200/мес на железо # Всё Open Source, никаких API-ключей, полный контроль
# docker-compose.yml — Ollama как сервис для всей команды version: '3.8' services: ollama: image: ollama/ollama:latest container_name: ollama-server ports: - "11434:11434" volumes: - ollama_data:/root/.ollama deploy: resources: reservations: devices: - driver: nvidia count: 1 capabilities: [gpu] environment: - OLLAMA_KEEP_ALIVE=24h - OLLAMA_NUM_PARALLEL=4 # Запуск: docker compose up -d # Загрузка моделей внутрь контейнера docker exec -it ollama-server ollama pull llama3.1 docker exec -it ollama-server ollama pull qwen2.5-coder:7b
# ~/.continue/config.json — настройка Continue с Ollama { "models": [{ "title": "Llama 3.1 (локальный)", "provider": "ollama", "model": "llama3.1", "apiBase": "http://gpu-server:11434" }, { "title": "Qwen Coder (код)", "provider": "ollama", "model": "qwen2.5-coder:7b", "apiBase": "http://gpu-server:11434" }], "tabAutocompleteModel": { "provider": "ollama", "model": "qwen2.5-coder:1.5b" } } # Горячие клавиши: # Ctrl+L — выделить код → спросить # Ctrl+I — inline редактирование # Tab — автодополнение (срабатывает на паузе)
import chromadb from chromadb.utils import embedding_functions # Инициализация ChromaDB и эмбеддингов client = chromadb.PersistentClient(path="./docs_db") ef = embedding_functions.OllamaEmbeddingFunction( model_name="nomic-embed-text", url="http://localhost:11434/api/embeddings" ) collection = client.get_or_create_collection( name="docs", embedding_function=ef ) # Добавление документов collection.add( documents=["API принимает JSON с полями name и email"], ids=["doc_1"] ) # Поиск релевантных документов results = collection.query( query_texts=["какой формат данных принимает API?"], n_results=3 ) print(results['documents'])
# .github/workflows/ai-review.yml name: AI Code Review on: pull_request: types: [opened, synchronize] jobs: review: runs-on: self-hosted # ваш сервер с GPU steps: - uses: actions/checkout@v4 - name: Get diff run: | git diff origin/${{ github.base_ref }} > diff.txt - name: AI Review run: | DIFF=$(cat diff.txt | head -c 8000) curl -s http://gpu-server:11434/api/generate \ -d "{ \"model\": \"llama3.1\", \"prompt\": \"Review this code diff. Find bugs, "\ \"security issues, and suggest improvements: "\ \"$DIFF\", \"stream\": false }" | jq -r '.response' > review.md - name: Post comment uses: actions/github-script@v7 with: script: | const fs = require('fs'); const review = fs.readFileSync('review.md', 'utf8'); await github.issues.createComment({...});
❌ УПРАВЛЯЕМЫЕ ВЕКТОРНЫЕ БД (Pinecone, Weaviate Cloud) → ChromaDB на вашем сервере решает 95% задач за $0 ❌ ДОРОГИЕ API КЛЮЧИ (OpenAI, Anthropic, Google AI) → Локальные модели через Ollama: качество сопоставимо, цена $0 ❌ FINE-TUNING НА СТАРТЕ → RAG + хороший промпт дают 80% результата без затрат → Fine-tuning нужен когда есть 1000+ примеров и RAG не справляется ❌ LANGCHAIN ДЛЯ ПРОСТЫХ ЗАДАЧ → LangChain добавляет сложность. Для простого RAG: → chromadb + sentence-transformers + openai (локальный) = 50 строк кода → Тот же функционал на LangChain = 200 строк + куча абстракций ❌ ОТДЕЛЬНЫЙ ML-ИНЖЕНЕР → Базовый AI-стек настраивается за 1 день силами бэкенд-разработчика