Карысная лакальная LLM за 30 хвілін: кадаванне, пытанні па дакументах і голас
Карысная лакальная LLM за 30 хвілін з Ollama, Qwen3 і Whisper.cpp: асістэнт кадавання, RAG па вашых нататках і афлайн-галасавы цыкл пад аб’ём вашай памяці.
Крыніцы: Run a Useful Local LLM in 30 Minutes (Coding, RAG, Voice)
Местная мадэль можа адказаць на рэальны кэдавангавальны запытак, калі сетка не падключана, на ноутбуку, які ужо стоіць на столе. Настройка займае апошнія восемь хвілін, а месячныя расходы ўзагалі няма. Дастатнья толькі запытка, падобная да той, што падае ніжэй, каб пабачыць, як яна працуе.
$ ollama run qwen3:8b
>>> rewrite this function to use async/await
Якасць — гэта тое, што дзівуе. Хоць ён не параджуе найлепшым хмарным мадэлям у складных багатыярусных расчынэннях, але ён надзеямо справляецца з звычнымі інжынернымі завадамі, таму ўсё больш зменшываецца розніца межу простым іграшкамі на выходныя і рэальным інструментам.
Тры змяны за прыблізна паловы год зробілі гэта практычным. Файлы модэляў сталі меньшымі, ўсё ўзроўна з звычным RAM: Qwen 3 мае версію з 8 мільярдаў параметраў розмерам прыблізна 5 ГБ. Qwen3-Coder, выданы ў люты 2026 года, паштоўвае 70,6 процэнта на тэстах SWE-bench; ён перавераны за дапамогою дызайну 30 мільярдаў параметраў, які актываціруе толькі 3 мільярды параметраў на кожны токен. А встановленне перайшла з заплутаных сітак Python-сераўакаў у адні бінарны файл завдзяк Ollama.
Чырвоныя — тры адзінаковыя версіі, кожная з якіх ствараецца за паловы гадзіну: асістэнт для напісання коду ўнутрь рэдаггера, Python-скрыпт, які адпавядае на запытанні пра папку дакументаў, і цікл голасу, які слухае і адпавядае. Усе яны маюць пяціхвілінны базовы элемент, а потым розходзяцца, таму разумны выбор — выбраць той варыант, які найбольш падходзіць для ўседзённай працы, а іншыя залішыць на пазнейшы час.
Базовы элемент, які ўсі раздзеляюць
Кожнам падходу трэба інжынер для вырашэння задач і набор ваг модэлю.
Ollama выполняе ролю такога інжынера. Ён керуе разлікамі у апаратнай частцы, ствараея ўвагу да таго, чыя машына мае NVIDIA GPU, чып Apple Silicon чы то толькі CPU, і падготавляе графік выканання, які паспраўдзіцца да гэтага. Ён працуе у фоне і аддае локальны HTTP API, які працуе як канцэнтры велікіх прадаўцоў хмарных сервісаў.
Інсталяцыя залежыць ад платформы. На macOS яе выканае Homebrew:
brew install ollama
У Linux ёсць скрыпт для інсталяцыі:
curl -fsSL https://ollama.com/install.sh | sh
Пользоватары Windows можаць завантажыць інсталляр MSI з веб-сайта Ollama.
Калі двыжак установлена, заступаецца мадэль. Базовы варыянт — qwen3:8b, які выкарыстоўвае або прыблізна 5 ГБ дыскавай прастору і легка размешчаецца ў 16 ГБ RAM. Без аддыянальнай графічнай карты Ollama выкарыстоўвае обчыслення на CPU з частотай ад 8 да 12 токенав у секунду, што яшчэ ўсё залежыцься для чытання.
Завантажыце яго:
ollama pull qwen3:8b
Потым паказайце, што усё працюе, адкрываючы програму на час:
ollama run qwen3:8b "Write a python script to reverse a string."
Адказ прыходзіць у тэрмінал. У закулісчы Ollama завантажае файл GGUF — фармат, які перадае вагі з дыска безпасяродна ў RAM, таму, калі паглядзець на манітар сістэмы, будзе відна, як памяць зростае прыблізна на велічыну самага файла.
Апарат з 8 ГБ RAM або менш пачне выкарыстоўваць дыск для зберагання дадзеных, і шырокавяроўнаванне сповільніцца до мінімуму. Для такіх случаў лепшым выборам будуць qwen3:4b або gemma3:4b. З 24 ГБ GPU ёсць можлівасць выкарыстоўваць qwen3:14b як наступны етап розвітку.
Шлях А: асістэнт для напісання коду ў рэдагарыі
Усі, хто працуе ў рэдагарыі коду, павінны атрымаць найшырэйшыя выгоды з гэтага падходу. Мета — пад’ясніць локальную мадэль да VS Code для перэработы коду, стварэння докстрынгаў і шаблонав.
Загальны мадэль Qwen 3 ўстойчыва, але для працы з кодам патрэбны спецыялізаваныя трэнінгі. Па стану на май 2026 года Qwen3-Coder ёсць найсільнейшым універсальным локальным кодавальнікам, які пасягае 70,6 процэнта на тэстах SWE-bench Verified і 44,3 процэнта на тэстах SWE-Bench Pro. Яго загальны размер складае 30 мільярда параметраў, пры чым для кожнага токена актыўныя толькі 3 мільярда, таму ён пасваіцца ў 24 ГБ VRAM або працюе без проблем на Mac з серыі M з 32 ГБ аб’еднанай памяці.
Ноутбук з 16 ГБ памяці без окрэмай графічнай карты, верагатна, не справіцца з модэлью 30 мільярда параметраў. Альтэрнатыва — qwen2.5-coder:7b, якій патрэбны 4,7 ГБ памяці і які все ж такі пасягае прыблізна 92 процэнта на тэстах HumanEval.
# For 24GB+ VRAM or 32GB+ Mac Unified Memory
ollama pull qwen3-coder:30b
# For 16GB RAM laptops
ollama pull qwen2.5-coder:7b
Рэдагувальніку патрэбны інструменты для вясноўленьня з модэлем. Cline — гэта пашырэнне VS Code з аднадзесят мільйонаў запускаў, якое можа чытаць файлы, прымаць прыпускі ў відношэніі змян і запускаць команды тэрміналу. Яго можна знайсці, вышукавшы ў маркетплейсе па яго назыве.
Ёсць адна проблема, якая заслуговае на увагу. Cline выкарыстоўвае довгі сістэмны запрос, які пояснюе, як фарматаваць прыпускі ў відношэніі змян, чытаць структуру файлаў і вяршыць працу з інструментамі; гэты запрос часта налічвае 25 000 токенав пры тым, як код яшчэ не быў даданы. Стандартныя параметры кантэкстнага вікна для модэляў Qwen 3 у Ollama станавяць 40 000 токенав. Як толькі ачынаецца калькі файлаў, ўсё гэта легка перакроюе гэты ліміт, і тады Ollama без паведамлення скрацвае запрос. У такім случае модэль тырае інструкцыі па фарматаванні, ігнаруе правіла і стварае звычайны тэкст замест адпаведных прыпускаў у відношэніі змян.
Рашэннем яўляецца стварэнне спецыяльнага Modelfile, які дазволяе выкарыстоўваць большае кантэкстнае вікно.
Modelfile, налаштаваны для Cline
Зберажыце наступны тэкст у каталозе працы як файл пад назвай Modelfile.
# Modelfile — cline-tuned qwen3-coder
# Save as: ./Modelfile
FROM qwen3-coder:30b
# Cline's system prompt is ~25-30K tokens before your code is added.
# Ollama's default num_ctx for Qwen 3 is 40K, but Cline ships an
# expanded system prompt in v3+ that comfortably exceeds it on any
# real task. 65536 is the safe floor for serious use; 131072 if
# you have RAM/VRAM to spare.
PARAMETER num_ctx 65536
# Code edits want low-variance output. The default 0.7 is too loose.
PARAMETER temperature 0.2
# Stop after the model's natural turn. Cline parses this.
PARAMETER stop "<|im_end|>"
Створыце мадэль на адказе з Ollama CLI, а пасцерагіцеся, чы не паўзіла настройка кантэксту:
# Build the Cline-tuned model from the Modelfile in the current dir
ollama create qwen3-coder-cline -f ./Modelfile
# Verify the context window actually took
ollama show qwen3-coder-cline --modelfile | grep num_ctx
# Expected output: PARAMETER num_ctx 65536
# Sanity-check it answers
ollama run qwen3-coder-cline "write a python one-liner to read /etc/hostname"
У VS Code ачыніце палітру каманд з Cmd+Shift+P і выберыце пункт налашоўкаў Cline. Настаўьце яе на локальны двыгун:
API Provider: Ollama
Base URL: http://localhost:11434
Model: qwen3-coder-cline
Context Window: 65536
Значэнне вікна кантэксту ў графічнам інтэрфейсе павінна абсалютна збігацца з значэннем num_ctx у файле модэля. Калі яго значэнне ніжэй, Cline прыймае, што вікно меньшае, і тыхаўка обмежвае колькасць файлаў, якія ён адправляе.
Ёжы спробаваць, ачыніце файл на Python з сінхронным функцыяй, адкройце панель чату Cline і папросіце перэклад на фармат async/await. Cline чытае файл, адправляе яго на локальны модэль Qwen3-Coder, прымея адпаведзь і пакажае чыстыя разніцы ў рэдагары. Прыйняць яго можна адной кліканнем, і весь цыкл адбываецца без падключэння да інтэрнэту.
Гэта налаштаванне дапамагае перэкладваць файлы, тэставаць ізольаваныя функцыі і ствараць шаблонны код. Рэзультаты тэставання ў спялочы паказваюць, што ў вузькая спрамованыя задачы яго якасць становіць ад 70 до 85 процэнтам да якасці перэдовых хмарных рашэнняў.
Ён не функцыонуе пад час большых змян архітэктуры, якія выключаюць вялікія колькіства файлаў. Пераклад праекта Flask, які складаецца з 20 файлаў, на FastAPI ёст крок, пад час якога ён зламваецца: ніткі выканання трапляюцца, імпорты ствараюцца некорэктна, і кодавая база стае нефункцыональной. Такія велікі праекты яшчэ паслужаюць прыкладам для розрахоўкаў на базе хмарных тэхналогій. Аднак для дзесяткаў маленькіх, рутынных правак, якія робяцца ўсё дзень, местная рэалізацыя вельмі падходзіць.
Шлях B: адзысканне інфармацыі з вашых сабеўных дакументаў
У гэтым шляху ідэя заключаецца у віддзеле з нотаткамі у фармаце markdown, стэнограмамі зустрэчаў або дакументацыяю да праекта, якія шукаюцца вручную. Усё гэта можна рэалізаваць за дапамогою адносна 60 ліній звычайнага Python, выкарыстоўваючы толькі кліент Ollama і бібліятэку numpy.
Мадэль амбеддынга ператварае тэкст у вектары. Nomic Embed Text v1.5 мае 137 мільйонаў параметраў, выдае 768-вымерныя вектары, займае менш чым 300MB, можа обрабляць кантэкст з 8192 токенамі і показвае хорашыя рэзультаты на тэстах адзыскання інфармацыі MTEB.
З’явіце мадэль для эмбедынгу і установіце пакеты для Python:
llama pull nomic-embed-text
pip install ollama numpy
Пасля таго запісаце скрыпт як rag.py.
"""Local RAG over a folder of notes — Ollama embeddings + numpy cosine.
No vector DB. For a few hundred docs, an in-memory list + numpy is
faster to set up and fast enough to run. Swap in sqlite-vec when
the corpus outgrows it (typically past ~5000 chunks).
Setup:
ollama pull qwen3:8b
ollama pull nomic-embed-text
pip install ollama numpy
Run:
python rag.py ./notes "what did the team decide about pricing?"
"""
from __future__ import annotations
import glob
import os
import sys
import numpy as np
import ollama
EMBED_MODEL = "nomic-embed-text"
CHAT_MODEL = "qwen3:8b"
CHUNK_WORDS = 400 # ~500 tokens; fits 4 chunks in an 8K context
TOP_K = 3
def load_chunks(folder: str) -> list[str]:
"""Read every .md / .txt under folder, split into ~CHUNK_WORDS chunks."""
chunks: list[str] = []
for path in glob.glob(os.path.join(folder, "**/*"), recursive=True):
if not path.endswith((".md", ".txt")):
continue
with open(path, encoding="utf-8") as f:
words = f.read().split()
for i in range(0, len(words), CHUNK_WORDS):
chunk = " ".join(words[i : i + CHUNK_WORDS])
if chunk.strip():
chunks.append(chunk)
return chunks
def embed(texts: list[str]) -> np.ndarray:
"""Embed a batch of texts via Ollama. Returns an (N, D) matrix."""
resp = ollama.embed(model=EMBED_MODEL, input=texts)
return np.array(resp["embeddings"], dtype=np.float32)
def top_k_indices(
query_vec: np.ndarray, doc_mat: np.ndarray, k: int
) -> list[int]:
"""Return indices of the k most cosine-similar rows in doc_mat.
The trick: if both vectors are unit-length (norm == 1), their
dot product equals their cosine similarity. So we normalize
once, then one matrix multiply gives a similarity score for
every chunk against the query — no Python loop needed.
"""
# Normalize query and every chunk to unit length.
# The 1e-8 prevents division by zero on a zero vector.
q = query_vec / (np.linalg.norm(query_vec) + 1e-8)
d = doc_mat / (np.linalg.norm(doc_mat, axis=1, keepdims=True) + 1e-8)
# One matmul across all chunks: scores[i] = cos(query, chunk_i).
scores = d @ q
# Sort descending, take the first k indices.
return np.argsort(scores)[::-1][:k].tolist()
def answer(query: str, chunks: list[str], doc_mat: np.ndarray) -> str:
"""Retrieve top-K chunks, stuff them into a prompt, generate."""
q_vec = embed([query])[0]
idx = top_k_indices(q_vec, doc_mat, k=TOP_K)
context = "\n\n---\n\n".join(chunks[i] for i in idx)
prompt = (
"Answer the question using ONLY the context below. "
"If the context does not contain the answer, say so plainly.\n\n"
f"CONTEXT:\n{context}\n\nQUESTION: {query}"
)
resp = ollama.chat(
model=CHAT_MODEL,
messages=[{"role": "user", "content": prompt}],
)
return resp["message"]["content"]
if __name__ == "__main__":
if len(sys.argv) != 3:
sys.exit('usage: python rag.py <folder> "<question>"')
folder, query = sys.argv[1], sys.argv[2]
chunks = load_chunks(folder)
if not chunks:
sys.exit(f"no .md or .txt files found under {folder}")
print(f"indexing {len(chunks)} chunks...")
doc_mat = embed(chunks)
print(answer(query, chunks, doc_mat))
Направіце яго на каталог з нотаткамі і задайце запітанне:
python rag.py ~/Documents/meeting_notes "what did the team decide about pricing?"
Скрыпт пераглядае папку, чытае файлы і дзеліць іх на фрагменты по 400 слоў. Полны спіс фрагментаў адправляецца на тэрмінал упакавкі Ollama ў аднай пакетацыі. Для кожнага запіту вектар запіту паўстанавляецца па аналогіі з кожным вектарам дакумента за дапамой косай схожасці.
Тры лепшыя фрагменты дадаюцца ў прыказ для генеравання, і мадэль qwen3:8b пішае адпаведны адказ. У гэтым прыказе ёсць строгія інструкцыя: адказваць толькі на аднойчы паданым кантэкстам, і чыста сказаць, якшо кантэкст не мае адпаведзення. Местныя мадэлі часта ствараюць корыстна выглядаючыя выдумкі, калі пошук нічога не вяртае, а гэта правіла змушваюць іх з’явіць сваю некантэкстуальнасць.
Гэта не рэтрыбыцье дадзеных для практычнага выкарыстоўвання. Прыем «чанкінг» — грубы спосаб разлічэння колькасці слоў, які іноды дзеліць рэчэ на две часты. Эмбедынгі знаходзяцца ў памяці і знікаюць пасля завершэння работы, таму корпус дадзеных неабходна занова эмбедаваць за кожны раз. Калі колькасць дакументаў у зборцы перасягне каля калякіх тысяч, а запуск стане раздражаючым, замена матрыцы numpy на sqlite-vec дазволяе зберагаць вектары ў локальным файле SQLite. Для персональных нотатак короткі скрыпт цэлкам дастаточны.
Шлях C: цікл голасу
Ён дапамагае співаць з модэлем без набірання тэксту і без адправкі аудыя на паслугу ў воблаку, ствараючы цэлы цікл «голас-голас» на локальнай апаратыразыі.
У такой схеме ёсць тры элементы: прыем «голас-тэкст», які транскрыбуе звук з мікрафона, LLM, які складае адпаведны адказ, і прыем «тэкст-голас», які чытае адказ вучыма.
Для транскрыпцыі выкарыстоўваецца Whisper.cpp — адзін з супэроптымацыяных варыянтов C++ версіі Whisper ад OpenAI, якая працюе на CPU, Apple Metal і NVIDIA CUDA. Для пераканварэння аудыя патрэбны бібліятэкі ffmpeg. На macOS:
brew install whisper-cpp ffmpeg
У Linux запусціце ffmpeg праз менеджар пакетаў, клонавайце рэпазітары whisper.cpp і запусціце make.
Whisper.cpp патрабуе вагі ў фармаце GGML. Файл ggml-base.en.bin, розмерам прыблізна 150MB, доступны ў офіцыяльным рэпазітары Hugging Face і ўжоўчы і точны для англійскай мовы. Для іншых мов або вышэйшай точнасці вярным выборам ёсць ggml-large-v3.bin. Пакладзіце файл у вядомую папку, напрыклад ~/models/.
Выходны голас даёт Kokoro ONNX — лёгкі двыжок TTS, вага вагоў якога станавіць прыблізна 300MB, і які сінтэзіруе голас паўнасцю ў рэальны час на звычным CPU. Ён наразе выкарыстоўвае Python 3.10 да 3.13 і не можа быць запусцены на версіі 3.14.
pip install -U sounddevice ollama kokoro-onnx
Скрыпт пайплайна
Зберэжыце наступны тэкст як voice.py і зменіце шлях WHISPER_MODEL так, каб ён вялічыў файл GGML, які ўжо быў завантажаны.
"""Local voice loop — mic → whisper.cpp → Ollama → Kokoro → speaker.
Everything runs offline. Nothing leaves the machine.
Setup:
brew install whisper-cpp ffmpeg # macOS
# (Linux: apt install ffmpeg; build whisper.cpp from source)
pip install -U sounddevice ollama kokoro-onnx
# Whisper GGML model — pick one:
# ggml-base.en.bin (~150MB, fast, English-only)
# ggml-large-v3.bin (~3GB, accurate, multilingual)
# Download from https://huggingface.co/ggerganov/whisper.cpp
# Kokoro model files auto-download to ~/.cache/kokoro-onnx/
# on first run, or grab them manually from
# https://github.com/thewh1teagle/kokoro-onnx/releases
Run:
python voice.py
"""
from __future__ import annotations
import subprocess
import tempfile
import wave
from pathlib import Path
import sounddevice as sd
import ollama
from kokoro_onnx import Kokoro
WHISPER_MODEL = Path.home() / "models" / "ggml-base.en.bin"
CHAT_MODEL = "qwen3:8b"
KOKORO_VOICE = "af_sarah" # see kokoro voices.json for all options
SAMPLE_RATE = 16000 # whisper.cpp requires 16kHz mono
RECORD_SECONDS = 5
# Kokoro auto-downloads the model files on first instantiation.
kokoro = Kokoro("kokoro-v1.0.onnx", "voices-v1.0.bin")
def record() -> Path:
"""Record from the default mic, write a 16kHz mono WAV, return its path."""
print(f"listening for {RECORD_SECONDS}s...")
audio = sd.rec(
int(RECORD_SECONDS * SAMPLE_RATE),
samplerate=SAMPLE_RATE,
channels=1, # mono
dtype="int16", # 16-bit PCM is what wave.open expects
)
sd.wait() # block until recording finishes
# Fixed path in the system tempdir — overwritten each invocation.
wav_path = Path(tempfile.gettempdir()) / "voice_in.wav"
with wave.open(str(wav_path), "wb") as w:
w.setnchannels(1) # mono
w.setsampwidth(2) # 2 bytes per sample == int16
w.setframerate(SAMPLE_RATE) # 16 kHz — whisper.cpp's required rate
w.writeframes(audio.tobytes())
return wav_path
def transcribe(wav_path: Path) -> str:
"""Run whisper.cpp on a WAV file, return the transcript text."""
result = subprocess.run(
[
"whisper-cli",
"-m", str(WHISPER_MODEL),
"-f", str(wav_path),
"-otxt", # write the transcript to <input>.txt
"-np", # suppress progress prints on stdout
],
capture_output=True,
text=True,
timeout=60,
)
if result.returncode != 0:
raise RuntimeError(f"whisper-cli failed: {result.stderr}")
# -otxt writes the transcript next to the input file, with .txt
# tacked onto the existing name — so /tmp/voice_in.wav becomes
# /tmp/voice_in.wav.txt (same directory, same stem, extra suffix).
txt_path = wav_path.with_suffix(wav_path.suffix + ".txt")
return txt_path.read_text(encoding="utf-8").strip()
def respond(text: str) -> str:
"""Send the transcript to the local LLM, return the reply."""
resp = ollama.chat(
model=CHAT_MODEL,
messages=[
{
"role": "system",
"content": (
"You are a voice assistant. Keep replies to one or "
"two short sentences. No markdown, no lists."
),
},
{"role": "user", "content": text},
],
)
return resp["message"]["content"]
def speak(text: str) -> None:
"""Synthesize the reply with Kokoro and play it back."""
samples, sample_rate = kokoro.create(
text, voice=KOKORO_VOICE, speed=1.0, lang="en-us"
)
sd.play(samples, sample_rate)
sd.wait()
if __name__ == "__main__":
wav = record()
heard = transcribe(wav)
if not heard:
print("nothing heard. exiting.")
raise SystemExit(0)
print(f"you said: {heard}")
reply = respond(heard)
print(f"model: {reply}")
speak(reply)
Яго запуск вымагае, каб скрыпт чакаў пяць секунд, перакладваў тэкст, ствараў адпаведны адказ і выгаварваў яго. Першы запуск настаўляе паузу, пакуль Kokoro завантажае сваія файлы ONNX у катэгорыю ~/.cache/kokoro-onnx/.
Тры выборы дызайну маюць большое значэнне, ніж можа здавацца. Запіс на частоце 16kHz у моно-фармаце ёсць обавязковым: Whisper быў натрэнаваны на аудыя на частоце 16kHz, а мікрафоны з стандартной частотай 44.1kHz даюць вымышлены тэкст або порожні адказ. Запуск whisper-cli як окольнага процэса, а не як частыні Python-коду, дапамагае ухіліцца ад конфліктавання і проблем з розшырэннямі на C, а флаг для выходу тэксту запішвае пераклад у файл, тады нікому не трэба скрабаваць стандартны выход. Сістэмны прапанаў таксама чыста забараняе вікорыстоўванне markdown, таму што Kokoro выгаварвае звёздкі вочна, а фарматаваны адказ псуе ўсю апытнасць.
Гэты цыкл обрабоцоўвае толькі адну паўтарэнне. Ён не трансляюе фрагменты аудыя ў рэальны час і не зберагае історыю размовы. Справжній агент для размовы дадаў бы адказванне на актывнасць голасу, каб з’ясаваць, калі заканчываецца мовленне, замест тыповага пяцісекунднага перыоду. Як базовы показнік, гэта паказвае, што локальны апаратура можа запусціць усю ланцоўку перакладу мовлення ў тэкст, мадэль і сінтэзу мовлення за калькі секунд.
Што дазволяе апаратура
Локальныя мадэлі абмежаны пропускной здатнасцю памяці значна больш, чым простаю вычысковой моцю. Тое, насколькі шыбкая пераходзіць інформацыя з RAM у ядро вычыскавага прыстрою, мае большое значэнне, чым шыбка, з якою процэсор выкананаў арыфметычныя операцыі, і самэ гэта факт вяліць за сабой выбір прыдатнай мадэлі для апаратуры.
Ноутбук з 16 ГБ памяці без адыянальнай графічнай карточкі працюе з прыблізна 50–70 ГБ/с пропускной здатнасцю памяці сістэмы. Ён можа запускаць мадэлі qwen3:8b або qwen2.5-coder:7b на CPU з 8–12 токенамі на секунду, што падходзіць для запошуку інформацыі і апрацоўкі голасу, але занадто повольна для кодавання. Тэхнологія Apple Silicon з сваёй аб’еднанай памяцю прыносіць пропускную здатнасць 200–400 ГБ/с, таму мадэлі серыі M Pro або Max з 24–36 ГБ памяці легка справляюцца з мадэллю qwen3-coder:30b, адколі за прынцыпам MoE на кожны токен актывацыяяўся толькі 3 мільярды параметраў.
Карточкі NVIDIA праграмуюцься так, каб заменіць вялікія об’ёмы памяці на вышэю пропускную здатнасць. З 12–16 ГБ VRAM мадэль qwen3:8b запускаецца мгновэна, а квантаваная версія qwen3-coder:30b таксама падходзіць. Пры 24 ГБ або больш, напрыклад у картках RTX 3090 або 4090, мадэль 30B працюе на максымальных частотах, і для працы з адным файлам ёй падабаецца прыблізна тое ж, што і платная прыўязка. Пры менш чым 8 ГБ RAM кодаванне застаецца практычна недаступным, таму рэалістычны варыянт — вікорыстоўванне модэлей qwen3:4b або phi-4-mini для запошуку інформацыі і апрацоўкі голасу.
Спадневаная літэратура
- Практычныя прытамулы: Стварэнне агента для кодавання ў прыватным воблака: OpenCode + локальны LLM — Паследовыя інструкцыі па вікорыстоўванню практычных прытамулов: Стварэнне агента для кодавання ў прыватным воблака: OpenCode + локальны LLM: контракты, перакананні і шаблоны коду для команд, якія впрыменяюць гэты патэрн.
- Тракароўка агента Voice RAG з LiveKit, Qdrant і MLflow — Стварэнне асістэнта для розмовы з паводлівымі запытамі з вікорыстоўванням LiveKit, LlamaIndex і Qdrant, з адзінкамі OpenTelemetry у MLflow, якія паказваюць кожны крок адзысквання інфармацыі і працы LLM.