Закажи экспресс-аудит своего дела онлайн всего за 199 ₽
и получи рекомендации по улучшению - Жми сюда !

5 интересных задач, решенных с помощью локальных языковых моделей: примеры и код

Я уже некоторое время использую локальные модели в своей повседневной работе, и больше всего меня удивило, как часто локальный подход оказывался лучшим выбором, а не компромиссом.

5 интересных вещей, которые я сделал с моделями локального языка.

# Введение

Когда вы впервые запускаете команду `ollama run llama3.2` в терминале и видите, как на ваш компьютер загружается модель с 7 миллиардами параметров — без ключа API, без панели управления платежами, без передачи данных с вашего компьютера — что-то меняется. Не потому, что это технически впечатляет, хотя это так. А потому, что это быстро, это функционально, и это полностью ваше. Вы владеете общением. Никто его не записывает. Никто не взимает с вас плату за токен. Модель не знает и ей все равно, что вы не в сети.

Я уже некоторое время использую локальные модели в своей повседневной работе, и больше всего меня удивило, как часто локальное использование оказывалось лучшим выбором, а не компромиссом. Ниже я расскажу о пяти вещах, которые я действительно делал с локальными языковыми моделями, чего я бы не сделал (или не смог бы сделать) с помощью облачного инструмента. Также здесь есть работающий код там, где это важно.

«Локальный» означает, что модель запускается на вашем компьютере. Для настройки используется Ollama — инструмент, который делает загрузку и запуск моделей с открытым исходным кодом примерно такими же сложными, как установка любого другого приложения. Большая часть последующего кода работает на компьютере с 8 ГБ оперативной памяти для небольших моделей и 16 ГБ для комфортной работы. Компьютеры Mac на базе Apple Silicon (M1 и более поздние модели) справляются с этим на удивление хорошо благодаря унифицированной памяти. Выделенный графический процессор NVIDIA значительно ускоряет работу, но он не является обязательным условием для начала работы.

# Проект 1: Создание личного хранилища документов

Я работаю с разнообразными научными статьями, контрактами и проектными заметками, которые накапливаются быстрее, чем я успеваю их должным образом индексировать. В какой-то момент у меня на диске скопилось три года PDF-файлов, несколько документов Word и папка с текстовыми заметками — теоретически полезные, но ни один из них не поддавался поиску.

Очевидное решение — передать их искусственному интеллекту и задать вопросы. Очевидная проблема заключается в том, что загрузка контрактов и личных исследовательских заметок в облачный сервис означает, что они теперь находятся на чужом сервере, обрабатываются чужой инфраструктурой и хранятся в соответствии с чужой политикой хранения. Для любой конфиденциальной информации — юридических документов, медицинских записей, внутренних деловых файлов, личных дневников — такой компромисс трудно оправдать.

Итак, я настроил AnythingLLM для локальной работы с Llama 3.2 через Ollama. AnythingLLM — это приложение с открытым исходным кодом, которое обрабатывает полный конвейер генерации и обработки данных (RAG) — загрузку документов, разбиение на фрагменты, встраивание, векторное хранение и поиск — без какой-либо зависимости от облака. У него более 54 000 звезд на GitHub, и оно полностью работает на вашем компьютере. Вы перетаскиваете документы, оно обрабатывает их локально, и вы начинаете задавать вопросы.

Для запуска достаточно одной команды:

# Загрузите и запустите AnythingLLM через Docker # Все данные остаются на вашем компьютере — никакие данные не покидают Docker run -d —name anythingllm -p 3001:3001 -v anythingllm_storage:/app/server/storage mintplexlabs/anythingllm # Затем откройте http://localhost:3001 в браузере # Подключитесь к Ollama (уже запущенной по адресу localhost:11434) # и загрузите модель, которую хотите использовать для чата с документами ollama pull llama3.2:3b

Я загрузил папку с научными статьями и задал программе вопросы, которые требовали чтения нескольких документов одновременно:

Вот подсказка, которую я использовал:

«В чём заключаются ключевые различия в подходах к расширению возможностей поиска информации в статьях 2023 и 2025 годов? Согласны ли они в стратегии сегментации или существуют разногласия?»

Модель выделила нужные разделы из каждой статьи, указала, из какого документа взят каждый пункт, и выявила подлинное методологическое несоответствие, которое я не заметил, читая их по отдельности. Каждый байт этих статей остался на моем компьютере.

Наилучшие результаты в этом случае показали Llama 3.2 3B для быстрой работы на более лёгком оборудовании и Mistral 7B, если у вас 8 ГБ видеопамяти и вы хотите более эффективного синтеза текста в длинных документах. При ответе на вопросы в формате «вопрос-ответ» на компьютере с 16 ГБ оперативной памяти разница заметна. Mistral читает текст более тщательно.

Почему это важно : Именно этот сценарий использования делает локальный RAG действительно лучше облачного, а не просто эквивалентным. Документ не перемещается. Перемещается ИИ. Всё, что делает облачный ИИ таким замечательным — рассуждения, синтез и способность отвечать на вопросы из множества источников — присутствует. Всё, что делает его неудобным для работы с конфиденциальной информацией — передача данных, серверное логирование и зависимость от сторонних сервисов — исчезает.

# Проект 2: Запуск системы проверки кода, которая никогда вас не осуждает

Существует специфический вид тревоги, связанной с проверкой кода, который знаком большинству разработчиков: вы написали что-то работающее, но не гордитесь этим. Это немного хитроумно, и в будущем вы будете это ненавидеть. Вы подозреваете, что есть какой-то частный случай, который вы не учли. Вы хотите получить честный отзыв, прежде чем его увидит кто-то другой.

Облачные решения в области ИИ имеют очевидный подвох. Вставка производственного кода в ChatGPT или Claude означает отправку интеллектуальной собственности вашей компании на сервер третьей стороны. Большинство соглашений о неразглашении конфиденциальной информации (NDA) регулируют этот вопрос, независимо от того, соблюдается ли кто-либо их условия. Это действительно вызывает опасения, особенно в отношении собственных алгоритмов, внутренней бизнес-логики или всего, что связано с данными клиентов.

Я запустил Qwen2.5-Coder 7B локально через Ollama. Эта модель была специально обучена на коде; она стабильно превосходит универсальные модели того же размера в тестах на программирование. При 7 миллиардах параметров она комфортно работает на 8 ГБ видеопамяти. Я задал ей реальные функции из работающего проекта и запросил три вещи: уязвимости безопасности, граничные случаи, которые я не обработал, и любые моменты, где я проявлял излишнюю изобретательность.

# Загрузка модели ollama pull qwen2.5-coder:7b # Запуск интерактивной сессии ollama run qwen2.5-coder:7b

Системная подсказка, которую я использовал для каждого сеанса проверки:

Вы — старший инженер-программист, проводящий проверку кода. Ваша задача — выявлять проблемы, а не подбадривать разработчиков. Проверяйте код на наличие: 1. Уязвимостей безопасности (внедрение кода, проблемы с аутентификацией, утечка данных) 2. Необработанных граничных случаев 3. Любых мест, где код сложнее, чем необходимо 4. Любых предположений, которые могут оказаться неверными в реальных условиях. Будьте прямолинейны. Не пересказывайте, что делает код. Начните сразу с того, что вы обнаружили.

Я передал ей следующую функцию:

def get_user_data(user_id): query = f»SELECT * FROM users WHERE id = {user_id}» result = db.execute(query) return result.fetchone()

Модель немедленно обнаружила SQL-инъекцию, пометила подстановочный знак SELECT * как риск утечки данных и указала, что функция молча возвращает None, если пользователь не существует — что вызвало бы непонятную ошибку через три вызова, где бы ни использовался результат. Все три проблемы были реальными. О двух из них я знал и планировал исправить «позже». О одной я действительно упустил из виду.

Для разработчиков, желающих интегрировать это в свой редактор, плагин Continue для VS Code и JetBrains подключается напрямую к локальному экземпляру Ollama:

// .continue/config.json — добавьте это, чтобы указать Continue на вашу локальную модель { «models»: [ { «title»: «Qwen2.5-Coder Local», «provider»: «ollama», «model»: «qwen2.5-coder:7b», «apiBase»: «http://localhost:11434» } ] }

После этого вы получаете автодополнение и боковую панель чата — всё работает локально, приватно, без подписки.

# Проект 3: Запуск полностью автономного ИИ-помощника

Это звучит просто, но это изменило мое представление о том, для чего на самом деле нужны инструменты искусственного интеллекта. У меня был 10-часовой перелет с нестабильным Wi-Fi и огромным количеством отложенной работы, которую я постоянно откладывал. Мне нужен был ИИ-помощник на протяжении всего полета — не периодически, когда соединение восстанавливалось, а постоянно, без необходимости платить за бортовой интернет и не беспокоясь о том, что я передаю через сеть авиакомпании.

Перед посадкой я достал модель:

# Загрузите перед полетом — это файл размером 4,1 ГБ с квантизацией Q4 ollama pull mistral:7b # Убедитесь, что он кэширован локально ollama list # Должно отобразиться mistral:7b с указанием размера и даты последнего изменения

Вот и вся настройка. После загрузки Ollama запускает модель полностью из локальных файлов. Переведите ноутбук в режим полета. Откройте терминал. Введите команду `ollama run mistral:7b`. Модель загружается примерно за 8 секунд на MacBook Pro с процессором M2 и начинает отвечать немедленно. Пинг не требуется. Модель не знает и не интересуется, что вы находитесь на высоте 35 000 футов.

Для чего я его использовал во время того полета:

  1. Составляю черновики писем для последующего редактирования. Я описал ситуацию и желаемый результат. Модель написала черновик. Я его отредактировал. Быстрее, чем писать с нуля, работает без отправки чего-либо на сервер.
  2. Работая над вопросом технической архитектуры, я описал проблему проектирования системы, над которой долго размышлял. Полезно иметь что-то, что может опровергнуть мои идеи — даже то, что не до конца понимает мой код. Модель задавала уточняющие вопросы. Я на них ответил. В итоге у меня сложилось более ясное представление о ситуации, чем в начале.
  3. Я составил план этой статьи. Честно. Я описал пять вариантов использования, которые хотел рассмотреть, попросил программу помочь мне структурировать их, и проработал порядок и акценты по ходу изложения.

Честно говоря, скорость работы не имеет значения : на MacBook Pro с процессором M2 и 16 ГБ унифицированной памяти Mistral 7B при квантовании Q4_K_M работает примерно на 25–35 токенов в секунду. Этого достаточно, чтобы ощущать себя как в настоящем разговоре. На более старом оборудовании или без разгрузки GPU это работает медленнее — больше похоже на чтение, чем на общение, — но всё ещё приемлемо для черновиков и работы над идеями. Что нельзя делать в автономном режиме: всё, что требует информации в реальном времени (текущие новости, цены в реальном времени, последние исследования). Это не ограничение локальных моделей как таковых; это просто физика.

# Проект 4: Создание личного партнера по размышлениям, который понимает ваш контекст

Каждый раз, когда вы открываете новый чат с Клодом, ChatGPT или любым другим облачным ИИ, вы начинаете с нуля. Модель ничего не знает о вас, вашей работе, ваших текущих проектах, о том, что вы уже пробовали, или о том, как вы предпочитаете решать проблемы. Первые пять минут любой содержательной сессии уходят на повторное установление контекста, который вам пришлось устанавливать и в предыдущей сессии. Это быстро надоедает.

Локальные модели решают эту проблему с помощью функции, называемой Modelfile — небольшого конфигурационного файла, который встраивает постоянный системный запрос непосредственно в именованную модель. Вы создаете его один раз, и каждая сессия с этой моделью начинается с полного контекста. Никаких повторных объяснений. Никакого вступления.

Вот файл модели, который я создал:

# Сохраните это как Modelfile (без расширения) в любой директории # Затем запустите: ollama create myassistant -f Modelfile FROM llama3.2:3b # Этот блок SYSTEM внедряется в начало каждого диалога SYSTEM «»» Вы мой личный партнер по размышлениям. Вот контекст, который вы всегда используете: ОБО МНЕ: Я технический писатель и разработчик, работающий в основном над инструментами ИИ и обучением разработчиков. Лучше всего я думаю, когда записываю и обсуждаю проблемы вслух, прежде чем определиться с направлением. ТЕКУЩИЕ ПРОЕКТЫ: — Серия технических статей об агентном ИИ и инструментах LLM — Библиотека Python для управления структурированными подсказками — Исследование генерации с дополненной информацией для личных баз знаний КАК Я ЛУЧШЕ ВСЕГО РАБОТАЮ: — Оспаривайте мои предположения. Я предпочитаю несогласие согласию. — Задавайте один уточняющий вопрос, если моя подсказка неоднозначна, прежде чем отвечать. — Когда я объясняю решение, ставьте под сомнение обоснованность моих рассуждений. — Не пересказывайте то, что я сказал. Начните со своего фактического ответа. ЧТО ВЫ ДОЛЖНЫ ЗНАЙТЕ: — Я работаю в сфере разработки программного обеспечения 8 лет. Не нужно слишком подробно объяснять основы. — Когда я прошу помощи в написании, мне нужна структура и прямота, а не пустая болтовня. — У меня аллергия на маркированные списки, которые можно было бы написать прозой. «»» # Установите разумные параметры генерации ПАРАМЕТР temperature 0.7 ПАРАМЕТР top_p 0.9 ПАРАМЕТР num_ctx 4096

Создание и запуск:

# Создайте модель из вашего файла Modelfile ollama create myassistant -f Modelfile # Убедитесь, что она создана ollama list # Запустите ее — каждая сессия начинается с вашего полного контекста ollama run myassistant

Разница на практике очевидна. Сравните два ответа на один и тот же вопрос — «Следует ли мне перестроить эту статью, чтобы она начиналась с примеров кода?» — с точки зрения контекстно-независимой модели и персонализированной модели:

Модель без контекста:

«Это зависит от вашей аудитории. Если ваши читатели более технически подкованы, то начало с примеров кода может быть эффективным, поскольку это сразу показывает им, чему они научатся. С другой стороны, если вы хотите сначала создать контекст…»

Персонализированная модель:

«Какова текущая структура? Начинать с кода работает только в том случае, если код достаточно понятен читателю, чтобы тот мог его понять без предварительного изучения. Учитывая, что вы сказали, что пишете для разработчиков, которые только изучают инструменты, а не для опытных специалистов, я бы возразил против начала с кода. Дайте мне первый раздел, и я скажу, можно ли его читать отдельно».

Второй вариант ответа исходит из вашей реальной ситуации. Он не тратит время на формулировки типа «зависит от обстоятельств». Он не знает, что вы хотите избежать маркированных списков, потому что он был обучен вашим предпочтениям; он знает это, потому что вы ему однажды сказали, и он всегда это помнит.

Обновляйте файл Modelfile при каждом изменении в ваших проектах. Повторите команду `ollama create myassistant -f Modelfile`, и она перезапишет предыдущую версию.

# Проект 5: Создание локального ИИ-агента, который действительно использует инструменты

Первые четыре пункта в этом списке впечатляют, но по сути это модель, представляющая собой очень эффективный генератор текста. Эта модель отличается. Это модель, выступающая в роли механизма принятия решений внутри системы, которая планирует, действует, наблюдает за результатами и выдает готовый результат — без каких-либо вызовов API к внешним сервисам ИИ.

Мне хотелось посмотреть, насколько далеко может продвинуться локальная модель в решении агентской задачи без резервного копирования в облако. Я создал минимальный агент на Python, который запускает Llama 3.2 Instruct через совместимый с OpenAI API Ollama, предоставляет ему два инструмента — веб-поиск и запись файлов — и запускает цикл ReAct до завершения задачи. Общие внешние затраты: 0 долларов .

Во-первых, убедитесь, что Ollama предоставляет доступ к модели:

ollama serve # запускает сервер API Ollama ollama pull llama3.2:3b # загружает модель инструкций, если она еще не кэширована

API Ollama совместим с OpenAI, а это значит, что вы можете заменить им любой фреймворк, ориентированный на API OpenAI, всего одной строкой кода. Вот полный локальный агент:

# local_agent.py # Установка: pip install openai duckduckgo-search # Требуется: Ollama, запущенная локально по адресу http://localhost:11434 from openai import OpenAI import json from duckduckgo_search import DDGS # Направьте клиент OpenAI на ваш локальный экземпляр Ollama # Это замена в одну строку, которая позволяет любому совместимому с OpenAI инструменту работать локально client = OpenAI( base_url=»http://localhost:11434/v1″, api_key=»ollama» # Ollama не требует реального ключа — это может быть любая строка ) MODEL = «llama3.2:3b» # Измените это на любую модель, которую вы получили через Ollama # Определите инструменты, которые может вызывать агент tools = [ { «type»: «function», «function»: { «name»: «web_search», «description»: ( «Поиск в интернете актуальной информации по теме.» «Используйте, когда вам нужны факты или данные, которые могли недавно измениться.» «НЕ используйте для информация уже есть в разговоре.» ), «параметры»: { «тип»: «объект», «свойства»: { «запрос»: { «тип»: «строка», «описание»: «Конкретный поисковый запрос, 3-8 слов.» } }, «обязательный»: [«запрос»] } } }, { «тип»: «функция», «функция»: { «имя»: «записать_файл», «описание»: «Сохранить текстовое содержимое в локальный файл. Использовать после завершения задачи.»», «параметры»: { «тип»: «объект», «свойства»: { «имя_файла»: { «тип»: «строка», «описание»: «Имя выходного файла, например, 'summary.md'» }, «содержимое»: { «тип»: «строка», «описание»: «Полное текстовое содержимое для записи.» } }, «required»: [«filename», «content»] } } } ] def web_search(query: str) -> str: «»»Выполнить реальный веб-поиск с помощью DuckDuckGo — ключ API не требуется.»»» with DDGS() as ddgs: results = list(ddgs.text(query, max_results=4)) if not results: return «Результаты не найдены.» # Форматирование результатов для корректного чтения моделью return «nn».join( f»Заголовок: {r['title']}nURL: {r['href']}nФрагмент: {r['body']}» for r in results ) def write_file(filename: str, content: str) -> str: «»»Запись содержимого в файл в текущем каталоге.»»» with open(filename, «w») as f: f.write(content) return f»Файл '{filename}' успешно записан ({len(content)} символов).» def run_tool(name: str, arguments: dict) -> str: «»»Обучение вызову инструмента к нужной функции.»»» if name == «web_search»: return web_search(arguments[«query»]) elif name == «write_file»: return write_file(arguments[«filename»], arguments[«content»]) return f»Неизвестный инструмент: {name}» def run_agent(goal: str, max_turns: int = 10) -> None: «»» Цикл агента: 1. Отправить цель и текущий диалог локальной модели. 2. Если модель вызывает инструмент, выполнить его и добавить результат в диалог. 3. Если модель завершила работу, вывести итоговое сообщение и выйти. 4. Повторять до завершения или достижения max_turns.»»» system = «»»Вы — исследовательский агент. При задании цели: 1. Используйте web_search для поиска точной, актуальной информации — выполняйте поиск несколько раз по различным аспектам. 2. Когда у вас будет достаточно информации, Используйте write_file для сохранения структурированного резюме. 3. Файл должен включать: ключевые выводы, почему они важны и источники. Тщательно обдумывайте каждое действие. Когда файл будет записан, ваша задача будет выполнена.»» messages = [{«role»: «user», «content»: goal}] for turn in range(max_turns): print(f»n— Turn {turn + 1} —«) # Отправка диалога локальной модели response = client.chat.completions.create( model=MODEL, messages=[{«role»: «system», «content»: system}] + messages, tools=tools, tool_choice=»auto» ) choice = response.choices[0] message = choice.message # Модель завершена — выводим и завершаем работу if choice.finish_reason == «stop»: print(f»nAgent finished: {message.content}») return # Модель вызвала один или несколько инструментов — выполняем каждый из них if choice.finish_reason == «tool_calls» and message.tool_calls: # Добавляем сообщение модели (с вызовами инструментов) в историю диалога messages.append({ «role»: «assistant», «content»: message.content, «tool_calls»: [ { «id»: tc.id, «type»: «function», «function»: { «name»: tc.function.name, «arguments»: tc.function.arguments } } for tc in message.tool_calls ] }) # Выполняем каждый вызов инструмента и добавляем результаты в диалог for tool_call in message.tool_calls: name = tool_call.function.name args = json.loads(tool_call.function.arguments) print(f»Инструмент: {name}({args})») result = run_tool(name, args) print(f»Предварительный просмотр результата: {result[:120]}…») # Результаты вызова инструмента должны ссылаться на tool_call_id, на который они отвечают messages.append({ «role»: «tool», «tool_call_id»: tool_call.id, «content»: result }) print(«Достигнуто максимальное количество оборотов.») if __name__ == «__main__»: goal = ( «Найти три наиболее активно обсуждаемых фреймворка RAG с открытым исходным кодом » «в 2026 году и написать краткое описание в rag-summary.md, объясняющее, что делает каждый » «и для кого он лучше всего подходит.» ) print(f»Цель: {goal}n») run_agent(goal)

Что делает этот код : клиент OpenAI указывает на localhost:11434 вместо серверов OpenAI. Это единственное изменение — вся разница между облачным агентом и локальным. Для поиска DuckDuckGo не требуется ключ API. Агент выполняет полный цикл ReAct — рассуждение, действие, наблюдение, снова рассуждение — до тех пор, пока не запишет выходной файл. Каждый шаг выполняется на вашем компьютере.

Честное замечание о возможностях модели : локальные модели с 3–7 миллиардами параметров заметно медленнее и менее точны при многошаговом рассуждении, чем модели облачных вычислений. Llama 3.2 хорошо справляется с этой задачей, когда цель ясна и сфокусирована. Для более сложных задач, связанных с агентами, Qwen 3.5-4B или Mistral 7B Instruct обеспечивают более надежное поведение при вызове инструментов. Сосредоточьтесь на задачах и используйте небольшой набор инструментов. Здесь действует то же правило, что и для облачных агентов, только в большей степени.

# Завершение

Ни одна из этих пяти вещей не может быть реализована в той же мере с помощью облачного ИИ. Не потому, что облачный ИИ менее эффективен с точки зрения бенчмарков — передовые модели, такие как Claude Opus и GPT-5, превосходят все, что работает локально на ноутбуке. Но бенчмарки — это не примеры использования.

Программа для обработки документов работает лучше локально, потому что документы содержат конфиденциальную информацию. Программа для проверки кода более полезна локально, потому что код является проприетарным. Автономный помощник возможен только локально, поскольку облако недоступно. Персонализированная модель запоминает вас только локально, потому что облачные сессии по своей природе не сохраняют состояние. Локальный агент ничего не стоит для работы, потому что нет необходимости отслеживать использование API.

Это не компромиссы. Это настоящие преимущества в тех случаях, когда самостоятельный запуск модели — правильное решение по правильным причинам. Настройка выполняется одной командой. Модели бесплатны. Потенциал, как оказалось, выше, чем ожидает большинство людей.

Шитту Олумиде — инженер-программист и технический писатель, увлеченный использованием передовых технологий для создания захватывающих повествований, обладающий острым вниманием к деталям и умением упрощать сложные концепты. Шитту также можно найти в Твиттере.

Источник: www.kdnuggets.com

✅ Найденные теги: 5, Задач, Интересных, Локальных, новости, Помощью, Решенных

Добавить комментарий

Нет других записей в этой рубрике.

Новости других рубрик

Архив рубрики ~Лента новостей~: Продолжаем уроки диванной антропологии Архив рубрики ~Лента новостей~: SK hynix продемонстрировала решение iHBM для охлаждения стеков памяти HBM Архив рубрики ~Лента новостей~: Инструменты визуальной отладки для рабочих процессов машинного обучения Архив рубрики ~Лента новостей~: Индийский фриланс в образовательных целях: стартап Human Archive использует роботов для обучения Архив рубрики ~Лента новостей~: Небольшие модели, большие результаты: Достижение превосходного извлечения намерений посредством декомпозиции Архив рубрики ~Лента новостей~: Как ускорить распознавание объектов нейросетями среди множества классов, не жертвуя памятью и точностью Архив рубрики ~Лента новостей~: OpenAI открывает лабораторию искусственного интеллекта в Сингапуре, поскольку IMDA обновляет структуру искусственного интеллекта Архив рубрики ~Лента новостей~: Колония на Марсе и предупреждения о Grok: пять странных деталей в презентации SpaceX для инвесторов.