СИСТЕМА КОМПЬЮТЕРНОГО ДОСТУПА

Строим агентов дома бесплатно: инструменты и модели с открытым кодом


Вы можете создать полноценную мультиагентную систему на своём ноутбуке, используя только бесплатные инструменты и открытые модели. Никаких кредитных карт, никаких ограничений API, никакой привязки к вендору. Компромисс? Более медленный инференс и немного меньше возможностей. Но для обучения, экспериментов и небольшой автоматизации этого более чем достаточно.

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

Аргументы в пользу открытых агентов

Реальность затрат

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

Конфиденциальность и контроль данных

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

Проверка реальностью

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

Выбор открытого LLM

Семейства LLM

  • Llama (Meta): Наиболее широко поддерживаемое семейство. Llama 3 особенно мощный.
  • Mistral: Отличное соотношение качество/параметры. Mistral-7B превосходит свой размер.
  • Phi (Microsoft): Крайне эффективные небольшие модели. Phi-3 Mini работает без GPU.
  • Qwen (Alibaba): Сильная многоязычная производительность.

Размер модели и требования к железу

МодельПараметрыКвантизацияVRAMСкоростьКачество
Phi-3 Mini3,8B4-bit4 ГБОчень быстроХорошее
Mistral-7B7B4-bit8 ГББыстроХорошее
Llama-3-8B8B4-bit8 ГББыстроОчень хорошее
Llama-3-13B13B4-bit10 ГБСреднеОчень хорошее
Mixtral-8x7B46,7B (MoE)4-bit24 ГБМедленноОтличное

Квантизация: почему это важно

Квантизация сжимает веса модели для использования меньшего объёма памяти. Модель 7B параметров в полной точности требует ~28 ГБ RAM. Та же модель в 4-bit квантизации нужно ~4 ГБ, с минимальной потерей качества.

Отправные точки по железу:

  • Ноутбук (8–16 ГБ RAM): Phi-3 Mini или Mistral-7B в 4-bit
  • Десктоп со средней GPU: Mistral-7B или Llama-3-8B с ускорением GPU
  • Десктоп с мощной GPU: Mixtral-8x7B или Llama-3-70B в 4-bit

Настройка локального инференса

Ollama: самый простой способ начать

Terminal window
# Установка на macOS
brew install ollama
# Установка на Linux
curl -fsSL https://ollama.com/install.sh | sh
# Загрузка Mistral-7B
ollama pull mistral
# Более лёгкий вариант для слабого железа
ollama pull phi3
# Запуск сервера инференса
ollama serve

Проверка работы:

Terminal window
curl http://localhost:11434/api/generate -d '{
"model": "mistral",
"prompt": "Что такое агент ИИ в одном предложении?",
"stream": false
}'

LM Studio: графическая альтернатива

LM Studio — десктопное приложение с графическим интерфейсом для загрузки и запуска моделей. Предоставляет API-эндпоинт, совместимый с OpenAI.

Открытые фреймворки для агентов

ФреймворкЛучше всего дляКривая обучения
LangChainШирокая поддержка инструментовСредняя
LangGraphВоркфлоу с конечными автоматамиСредняя-высокая
AutoGenМультиагентные разговорыНизкая
CrewAIРолевые мультиагентные системыНизкая-средняя

Начните с AutoGen или LangChain. AutoGen быстрее для прототипирования; LangChain даёт больше контроля над циклом агента.

Создаём первого агента: локальный исследовательский ассистент

Настройка окружения

Terminal window
python3 -m venv agent-env
source agent-env/bin/activate
pip install langchain langchain-ollama langchain-community duckduckgo-search

Полный агент

#!/usr/bin/env python3
"""
Локальный агент-исследователь на Ollama + LangChain
Предварительные требования:
- ollama serve (работает в фоне)
- ollama pull mistral
- pip install langchain langchain-ollama langchain-community duckduckgo-search
"""
import json
from langchain_core.tools import tool
from langchain_core.prompts import ChatPromptTemplate
from langchain_ollama import ChatOllama
from langchain.agents import AgentExecutor, create_react_agent
from duckduckgo_search import DDGS
@tool
def search_web(query: str) -> str:
"""Ищет информацию в интернете через DuckDuckGo."""
try:
with DDGS() as ddgs:
results = list(ddgs.text(query, max_results=5))
if not results:
return "Результаты не найдены."
return json.dumps(
[{"title": r["title"], "snippet": r["body"], "url": r["href"]}
for r in results],
indent=2, ensure_ascii=False
)
except Exception as e:
return f"Поиск не удался: {e}"
@tool
def read_file(filepath: str) -> str:
"""Читает локальный файл и возвращает его содержимое."""
try:
with open(filepath, "r") as f:
return f.read()
except FileNotFoundError:
return f"Файл не найден: {filepath}"
@tool
def calculate(expression: str) -> str:
"""Безопасно вычисляет простое арифметическое выражение."""
try:
result = eval(expression, {"__builtins__": {}}, {})
return str(result)
except Exception as e:
return f"Ошибка вычисления: {e}"
llm = ChatOllama(
model="mistral",
base_url="http://localhost:11434",
temperature=0.3,
)
prompt = ChatPromptTemplate.from_messages([
("system", """Вы исследовательский ассистент. Отвечайте на вопросы с помощью инструментов.
Доступные инструменты: {tool_names}
Описания инструментов: {tools}
Следуйте этому формату точно:
Thought: Что мне нужно выяснить?
Action: название_инструмента
Action Input: входные данные для инструмента
Observation: результат инструмента
... (повторяйте по необходимости)
Thought: Теперь у меня достаточно информации.
Final Answer: ваш полный ответ"""),
("user", "{input}"),
("placeholder", "{agent_scratchpad}"),
])
tools = [search_web, read_file, calculate]
agent = create_react_agent(llm, tools, prompt)
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
verbose=True,
max_iterations=8,
handle_parsing_errors=True,
)
if __name__ == "__main__":
result = agent_executor.invoke({
"input": "Какие три самых популярных открытых LLM прямо сейчас? Назовите их и укажите по одной ключевой характеристике каждого."
})
print(f"\nИТОГОВЫЙ ОТВЕТ:\n{result['output']}")

Запуск

Terminal window
# Терминал 1: запустить Ollama
ollama serve
# Терминал 2: запустить агента
python research_agent.py

Расширение возможностей: инструменты без API

Локальный доступ к базе данных

import sqlite3
@tool
def query_database(sql: str) -> str:
"""Выполняет read-only SQL-запрос к локальной базе данных."""
try:
conn = sqlite3.connect("data.db")
cursor = conn.cursor()
cursor.execute(sql)
rows = cursor.fetchall()
columns = [desc[0] for desc in cursor.description]
conn.close()
return json.dumps([dict(zip(columns, row)) for row in rows], indent=2)
except Exception as e:
return f"Ошибка базы данных: {e}"

Локальный поиск по документам с эмбеддингами

Terminal window
pip install sentence-transformers chromadb
from sentence_transformers import SentenceTransformer
import chromadb
model = SentenceTransformer("all-MiniLM-L6-v2")
client = chromadb.Client()
collection = client.create_collection("docs")
@tool
def search_docs(query: str) -> str:
"""Ищет локальные документы по семантическому сходству."""
results = collection.query(
query_embeddings=[model.encode(query).tolist()],
n_results=3
)
return json.dumps(results["documents"][0], indent=2)

Реальные ограничения и решения

Задержка

Ожидайте 2–30 секунд на шаг инференса. Стратегии:

  • Проектируйте агентов с меньшим количеством шагов; проще = быстрее
  • Группируйте вызовы инструментов там, где это возможно

Пробелы в точности

Стратегии смягчения:

  • Более короткие и явные промпты — точно указывайте ожидаемый формат
  • Разбивайте сложные задачи на шаги
  • Валидируйте выходные данные инструментов перед возвратом агенту
  • Используйте температуру 0,1–0,3 для работы с инструментами

Развёртывание: от ноутбука к постоянной работе

Docker

FROM python:3.12-slim
RUN pip install langchain langchain-ollama langchain-community duckduckgo-search
COPY research_agent.py .
ENV OLLAMA_HOST=host.docker.internal:11434
CMD ["python3", "research_agent.py"]

Systemd-сервис (Linux)

Terminal window
sudo systemctl enable ollama
sudo systemctl start ollama

Идём глубже: мультиагентные системы дома

def run_pipeline(question: str) -> str:
research_result = researcher.invoke({"input": question})
final_output = writer.invoke({
"input": f"На основе этого исследования напишите чёткое резюме:\n{research_result['output']}"
})
return final_output["output"]

Разработка открытых агентов сегодня практична. Путь такой: Ollama для инференса, LangChain или AutoGen для цикла агента, DuckDuckGo для поиска, и файловая система вашей машины для всего остального.

Начинайте просто — с агента-исследователя выше. Запустите его. Добавьте второй инструмент. Потом второго агента.


Связанные статьи