OpenWiki vs QuotyAI: два проекта на LangChain DeepAgents, две архитектуры
OpenWiki использует LangChain DeepAgents для генерации документации к кодовым базам. QuotyAI использует тот же API createDeepAgent для генерации исполняемой бизнес-логики на TypeScript. Техническое сравнение архитектуры агентов, паттернов субагентов и исполнения кода.
OpenWiki, созданный LangChain AI, — это open-source CLI, который читает кодовую базу и записывает markdown-документацию для кодинг-агентов. QuotyAI — это платформа ИИ для продаж, которая читает бизнес-правила и записывает исполняемые TypeScript-функции ценообразования, JSON-схемы и логику валидации. Оба используют одну и ту же функцию createDeepAgent, одну и ту же оркестрацию LangChain и TypeScript.
Общая основа — реальная. Оба проекта вызывают одну и ту же фабричную функцию, используют один и тот же паттерн делегирования субагентов и сохраняют чекпоинты в LangGraph. Расхождение начинается на том, что агент производит, и что происходит с этим результатом после генерации.
OpenWiki записывает markdown-файлы, которые лежат в репозитории. QuotyAI записывает TypeScript-функции, которые выполняются в песочнице при каждом входящем сообщении от клиента. Это единственное отличие — справочный материал vs продакшн-код — каскадом влияет на архитектуру агентов, модель безопасности и бизнес-результаты.
Как OpenWiki генерирует документацию для агентов с помощью LangChain
OpenWiki решает конкретную проблему: когда вы направляете Claude Code или Cursor на новый репозиторий, агент ничего не знает об архитектуре, конвенциях или доменной модели. OpenWiki читает кодовую базу, синтезирует понимание и записывает структурированный markdown в директорию openwiki/:
openwiki/
quickstart.md # Точка входа со ссылками на все секции
.last-update.json # Git head, таймстемп, метаданные модели
architecture/
overview.md
data-flow.md
api/
endpoints.md
authentication.md
domain/
entities.md
business-rules.md
GitHub Action запускает openwiki --update ежедневно. Агент делает diff по git, определяет, какие страницы документации затронуты последними изменениями в исходном коде, и переписывает только эти страницы. Файлы AGENTS.md и CLAUDE.md в корне репозитория направляют кодинг-агентов к вики как к точке входа.
CLI работает локально, хранит чекпоинты в SQLite по пути ~/.openwiki/openwiki.sqlite и поддерживает пять провайдеров LLM (OpenAI, Anthropic, OpenRouter, Fireworks, Baseten). Распространяется по лицензии MIT бесплатно.
Как QuotyAI генерирует исполняемый TypeScript с помощью DeepAgents
QuotyAI решает другую проблему: когда ИИ-агент обрабатывает ценообразование для бизнеса, неверный ответ означает потерю дохода. Владелец спа-салона вводит «наш глубокотканный массаж стоит 90 за 60 минут, 120 за 90 минут, и мы предлагаем скидку 10% для участников». Платформа генерирует функцию quoteOrder(), которая возвращает $108 для 90-минутного бронирования участника. Каждый раз.
Результат хранится в структурированных директориях навыков в MongoDB с версионированными генерациями:
/sales-assistant/skills/
offerings/
skill.md # YAML frontmatter + инструкции
reference.md # Структурированный каталог продуктов
schema/
schema.json # JSON Schema (источник истины)
schema.ts # TypeScript-типы (автодериватив, readonly)
pricing-rules/
skill.md
reference.md # Правила ценообразования в структурированном markdown
scripts/
function.js # quoteOrder(order) -> QuoteResult
scheduling/
skill.md
reference.md
scripts/
function.js # transformToCheckAvailability(order)
Восемь зафиксированных навыков формируют ядро: схема offerings, схема order, формула ценообразования, функция расписания, функция валидации, роутер, колбэк и системный промпт. Каждый имеет определённую роль в пайплайне продажного разговора.
Платформа работает как мультитенантный SaaS на GCP, стоит $50/месяц за бизнес и выполняет сгенерированный код в песочнице Node.js с 5-секундным таймаутом и без доступа к require, import, fetch, process, файловой системе или сети.
Оба проекта вызывают createDeepAgent — вот чем отличается код
Оба проекта вызывают createDeepAgent из npm-пакета deepagents. Функция предоставляет встроенные инструменты для работы с файловой системой (ls, read_file, write_file, edit_file, glob, grep), делегирование субагентов через инструмент task, планирование через write_todos, чекпоинтинг и стриминг с поддержкой субграфов.
OpenWiki передаёт пустой массив tools: [] и полагается полностью на дефолтные инструменты:
import { createDeepAgent, LocalShellBackend } from 'deepagents';
import { SqliteSaver } from '@langchain/langgraph-checkpoint-sqlite';
const checkpointer = SqliteSaver.fromConnString(checkpointPath);
const agent = createDeepAgent({
model,
tools: [],
checkpointer,
backend: new LocalShellBackend({
maxOutputBytes: 100_000,
rootDir: cwd,
timeout: 120,
virtualMode: true,
}),
systemPrompt: createSystemPrompt(command),
});
Системный промпт занимает ~800 строк. Он покрывает правила качества документации, git-дисциплину, ограничения делегирования субагентам и поведение, специфичное для режимов init, update и chat. Ни одного кастомного инструмента. Ни одного определения субагента в коде. Промпт — это продукт.
QuotyAI передаёт кастомные файловые инструменты, 11 субагентов, HITL-прерывания и композитный бэкенд, который маппит /memories/ на LangGraph store и /patterns/ на тот же файловый бэкенд навыков:
import { createDeepAgent, CompositeBackend, StoreBackend } from 'deepagents';
import { initChatModel } from 'langchain/chat_models/universal';
const model = await initChatModel(p.llmConfig.model, {
modelProvider: p.llmConfig.provider,
temperature: 0.1,
});
const backend = new CompositeBackend(p.backend, {
'/memories/': new StoreBackend({ namespace: memoryNamespace }),
'/patterns/': p.backend,
});
const agent = createDeepAgent({
model,
backend,
checkpointer: p.checkpointer,
store: p.store,
systemPrompt: buildOrchestratorPrompt({ ... }),
memory: ['/memories/AGENTS.md'],
interruptOn: p.mode === DeepAgentRunMode.APPROVAL_REQUIRED
? { eval: { allowedDecisions: [AllowedDecision.APPROVE, AllowedDecision.REJECT] } }
: undefined,
middleware: [createCodeInterpreterMiddleware({ ptc: ['read_file', 'ls', 'grep', 'glob'] })],
subagents: [
knownPatternEditor,
generalCascadeEditor,
...codeGenSubagents,
],
});
Чекпоинт хранится в MongoDB, а не в SQLite. Бэкенд — это виртуальная файловая система на базе объектного хранилища MongoDB с версионированием на основе генераций. Оркестратор никогда не вызывает write_skill_file или edit_skill_file напрямую — все модификации файлов проходят через субагентов-редакторов, диспатчаемых через task().
Единый агент OpenWiki vs оркестратор с 11 субагентами в QuotyAI
Агент OpenWiki — это единый LLM, который читает код, планирует структуру документации и записывает файлы. Он может порождать субагентов через task() для параллелизации исследований, но системный промпт накладывает ограничение: «Субагенты должны ТОЛЬКО осматривать и резюмировать — они НЕ ДОЛЖНЫ создавать, редактировать, удалять или перемещать файлы.» Субагенты возвращают находки. Основной агент пишет документацию.
Агент QuotyAI — это оркестратор, который классифицирует намерение перед действием. Лёгкий вызов LLM со структурированным выходом классифицирует сообщение пользователя как query (только чтение) или update (модификация файлов), а в случае update определяет, какой известный паттерн совпадает: add-offering, remove-offering, update-price, add-user-skill или null для произвольных изменений.
Для известных паттернов оркестратор диспатчит субагента known-pattern-editor, который читает SKILL.md паттерна из /patterns/{pattern-name}/SKILL.md и следует пошаговым инструкциям. Для произвольных изменений диспатчится general-cascade-editor, который самостоятельно рассуждает о том, что нужно изменить.
Оба субагента-редактора диспатчат субагентов генерации кода — 9 специализированных генераторов, каждый из которых представляет отдельный вызов LLM со своим системным промптом и валидацией responseFormat:
| Субагент | Читает | Пишет |
|---|---|---|
offerings-schema-generator |
/offerings/reference.md |
/offerings/schema/schema.json |
order-schema-generator |
/order-schema/reference.md + схема offerings |
/order-schema/schema/schema.json |
pricing-formula-generator |
/pricing-rules/reference.md + типы offerings + типы order |
/pricing-rules/scripts/function.js |
scheduling-function-generator |
/scheduling/reference.md + типы offerings + типы order |
/scheduling/scripts/function.js |
validation-function-generator |
/validation/reference.md + типы offerings + типы order |
/validation/scripts/function.js |
router-function-generator |
skill.md + reference.md + типы order + routeActions.json | scripts/function.js навыка |
callback-function-generator |
skill.md + reference.md + типы order | scripts/function.js навыка |
condition-function-generator |
skill.md + типы order | scripts/condition.js навыка |
instruction-tool-generator |
skill.md + reference.md + типы order | scripts/function.js + tools/tool.json навыка |
Каждый вызов write_skill_file и edit_skill_file от субагента-редактора запускает HITL-прерывание. Фронтенд IDE показывает предложенное изменение с тремя кнопками: Одобрить, Редактировать, Отклонить. Агент приостанавливается, пока пользователь не примет решение.
Каскады зависимостей навыков в архитектуре DeepAgents QuotyAI
Зафиксированные навыки в QuotyAI формируют ациклический ориентированный граф. Когда один изменяется, downstream-навыки должны перегенерироваться:
offerings_schema ──────> order_schema ──────> pricing_formula
├───> scheduling_function
└───> validation_function
router (независимый)
callback (независимый)
system_prompt (независимый)
Оркестратор диспатчит субагентов генерации кода в топологическом порядке. offerings-schema-generator запускается первым, затем order-schema-generator. После этого pricing-formula-generator, scheduling-function-generator и validation-function-generator запускаются параллельно — они зависят от order_schema, но не друг от друга.
В OpenWiki нет аналогичного паттерна. Когда кодовая база меняется, агент делает diff по git, определяет затронутые страницы и переписывает их. Markdown-страницы не зависят друг от друга так, как зависят исполняемые схемы и функции. Изменение схемы offerings, которое не каскадится в функцию ценообразования, produces inconsistent prices. A stale architecture doc just produces a confused developer.
Исполнение в рантайме: markdown-файлы vs песочница TypeScript
Выходные данные OpenWiki никогда не выполняются. Markdown-файлы лежат в репозитории. Кодинг-агенты читают их как контекст. Нет песочницы, нет среды исполнения, нет валидации beyond «существует ли файл».
Выходные данные QuotyAI выполняются при каждом входящем сообщении в продажном разговоре. Пайплайн загружает навыки из MongoDB, выполняет функции роутера для решения, как обработать сообщение, вызывает LLM при необходимости и запускает функции колбэка после ответа LLM. Среда исполнения — это песочница vm.createContext со строгим allowlist:
- Разрешено:
Date,Math,Array,Object,String,Number,Boolean,RegExp,JSON,Error,TypeError,ReferenceError,RangeError,parseInt,parseFloat,isNaN,isFinite - Заблокировано:
require,import,eval,fetch,process,fs,net,setTimeout,setInterval - Таймаут: 5 секунд. Бесконечные циклы в ИИ-сгенерированном коде случаются чаще, чем вы думаете.
Когда клиент спрашивает «сколько стоит 90-минутный глубокотканный массаж для участника?», пайплайн:
- Загружает
scripts/function.jsнавыкаpricing-rulesиз MongoDB - Загружает
schema/schema.tsнавыкаofferingsдля определений типов - Вызывает
quoteOrder({ items: [{ service: "deep-tissue", duration: 90, member: true }] }) - Получает
{ total: 108, pricingCalculationBacktrace: { ... } }за 24мс - Возвращает цену с полным аудит-трейлом того, как она была рассчитана
Устаревшая страница OpenWiki означает запутанного кодинг-агента. Багнутая функция QuotyAI означает переплатившего клиента.
Обработка ошибок: git revert vs HITL-прерывания с одобрением
OpenWiki создан для разработческих воркфлоу, где git — это страховочная сеть. Агент записывает в openwiki/, вы просматриваете diff в PR и мёрджите или отклоняете. Агент повторяет попытки при ошибках 5xx от OpenRouter с автоматическим фолбэком на модель — основная модель плюс GPT-5.4-mini и Claude Sonnet 5 передаются как фолбэки через фичу OpenRouter route: "fallback". Если агент записал плохую страницу документации, git revert исправит это.
QuotyAI создан для владельцев бизнеса, где результат влияет на доход. Каждое изменение файла проходит через HITL-прерывание — пользователь видит, что будет записано, может отредактировать на месте или отклонить целиком. Кодовая база использует версионирование на основе генераций с атомарными операциями compare-and-swap для обновления указателей. Если сгенерированная функция даёт неверные результаты, пользователь может откатиться к предыдущей генерации, не затрагивая рабочее окружение.
Стоимость ошибки различается: запутанная страница документации тратит время разработчика. Неверный расчёт цены стоит денег.
Бизнес-влияние: время разработчика vs точность дохода
Различие в методологии меняет, кто использует продукт и во что обходятся ошибки:
| OpenWiki | QuotyAI | |
|---|---|---|
| Пользователи | Разработчики, кодинг-агенты | Малый бизнес, соло-предприниматели |
| Стоимость ошибки | Запутанный разработчик | Переплативший клиент |
| Триггер обновления | Ежедневно (GitHub Action) | По запросу (пользователь запускает) |
| Верификация результата | Человек читает diff | HITL одобряет каждый файл + песочница валидирует сгенерированный код |
| Модель масштабирования | Больше репозиториев = больше документации | Больше бизнесов = больше дохода ($50/мес каждый) |
| Стоимость | Бесплатно (MIT) | $50/месяц |
OpenWiki экономит время разработчика. Кодинг-агент с хорошей документацией пишет лучший код, быстрее — меньше багов, быстрее онбординг, меньше времени на объяснение кодовой базы новым членам команды.
QuotyAI экономит деньги владельца бизнеса. Продажный агент с детерминированным ценообразованием никогда не галлюцинирует цену, никогда не даёт несанкционированную скидку и никогда не делает двойное бронирование. Точное ценообразование означает отсутствие утечки дохода.
Когда использовать OpenWiki vs QuotyAI для агентных воркфлоу
Выбор зависит от того, что вашему агенту нужно делать сгенерированными знаниями.
OpenWiki подходит, когда агенту нужен контекст. Направьте Claude Code на репозиторий без документации (или с устаревшей), запустите openwiki --init, и кодинг-агент получит заметки по архитектуре, API-документацию и доменные концепции за считанные минуты. GitHub Action поддерживает их в актуальном состоянии. Результат — справочный материал, который информирует решения агента, но не выполняется.
QuotyAI подходит, когда агенту нужно запускать код. Владелец спа-салона описывает правила ценообразования на естественном языке, и платформа генерирует детерминированную функцию quoteOrder(), которая выполняется в песочнице при каждом запросе на бронирование. Результат — продакшн-код, который выполняется, считает и возвращает результаты с аудит-трейлами.
Ни один из продуктов не является RAG-пайплайном. Ни один не заменяет простого чатбота. OpenWiki не генерирует исполняемый код. QuotyAI не документирует кодовые базы. Они разделяют фреймворк, потому что фреймворк универсален. Формат результата определяет архитектуру.
Технологический стек: Node.js + SQLite vs Bun + MongoDB
| Слой | OpenWiki | QuotyAI |
|---|---|---|
| Фреймворк агентов | deepagents ^1.10.5 |
deepagents (тот же пакет) |
| Оркестрация | LangChain + LangGraph | LangChain + LangGraph |
| Язык | TypeScript | TypeScript |
| Рантайм | Node.js | Bun |
| HTTP-фреймворк | Нет (только CLI) | Hono |
| WebSocket | Нет | Socket.IO |
| База данных | Нет (файловая система) | MongoDB |
| Чекпоинт | SQLite | MongoDB |
| Стриминг | LangGraph stream protocol | SSE через Hono + LangChain Agent Protocol |
| Трассировка | Опциональный LangSmith | OpenTelemetry + LogTape |
| Фронтенд | React + Ink (терминальный UI) | Angular 21 |
| Голос | Нет | LiveKit + Deepgram |
| Провайдеры LLM | OpenAI, Anthropic, OpenRouter, Fireworks, Baseten | OpenAI, Anthropic, Google Gemini (BYOK) |
| Пакетный менеджер | pnpm | pnpm (Nx монорепо) |
Дополнительные материалы
- Hono + Bun для ИИ-платформ: 6 продакшн-паттернов, которые стоит украсть — бэкенд-стек за конструктором навыков QuotyAI
- Open Knowledge Format (OKF) vs Agent Skills — почему детерминированное исполнение побеждает статические файлы знаний
- Детерминизм как инфраструктура — почему ИИ-платформам нужно детерминированное исполнение
- Почему я выбрал Bun и Hono — оригинальный разбор решений для стека QuotyAI
Часто задаваемые вопросы
Чем отличается OpenWiki от QuotyAI? OpenWiki — это open-source CLI, который генерирует и поддерживает markdown-документацию для кодовых баз на базе DeepAgents + LangChain. QuotyAI — это SaaS-платформа, которая использует тот же стек DeepAgents + LangChain для создания исполняемых агентных навыков: сгенерированных TypeScript-функций, JSON-схем и структурированных справочных данных, работающих в песочнице.
Могут ли OpenWiki и QuotyAI использовать одних и тех же провайдеров LLM?
Да. Оба поддерживают OpenAI, Anthropic и OpenRouter. OpenWiki также поддерживает Fireworks и Baseten. QuotyAI поддерживает Google Gemini через BYOK. Оба используют абстракцию initChatModel от LangChain, поэтому добавление нового провайдера — это изменение в одну строку.
Зачем QuotyAI 9 субагентов для генерации кода, если OpenWiki не использует ни одного кастомного инструмента? OpenWiki генерирует markdown-документацию — единый тип контента, который пишется оркестратором напрямую. QuotyAI генерирует исполняемый код, JSON-схемы и структурированные данные по 8 зафиксированным навыкам с каскадными зависимостями. Каждый тип кода (формула ценообразования, функция расписания, логика валидации) требует специализированного субагента с доменной промпт-инженерией и валидацией выходных данных.
DeepAgents подходит только для инструментов документирования?
Нет. DeepAgents предоставляет композитные примитивы — createDeepAgent, SubAgent, Backend, чекпоинтинг, регистрация инструментов — которые работают для любого агентного воркфлоу. OpenWiki использует его для генерации документации. QuotyAI использует его для генерации детерминированной бизнес-логики с HITL-прерываниями, каскадными зависимостями и исполнением в песочнице. Фреймворк универсален; методология — вот что делает продукт.
Что такое каскад зависимостей в конструкторе навыков QuotyAI?
Когда зафиксированный навык изменяется (например, схема offerings), все downstream-навыки должны перегенерироваться. Каскад следует DAG: offerings_schema -> order_schema -> pricing_formula + scheduling_function + validation_function. Оркестратор диспатчит субагентов генерации кода в топологическом порядке, параллализуя независимые ветви.
Теги: deepagents langchain openwiki quotyai ai-agents deterministic-ai typescript agent-skills
Было полезно? Поделитесь.
Похожие статьи
Codex for Sales: Как Запускать Сгенерированный ИИ Бизнес-Код в Продакшене
Сгенерированные ИИ код для ценообразования и планирования требует управления жизненным циклом как в git: стейджинг, валидация, утверждение, откат. Реальные паттерны из продакшен-системы с мульти-агентной архитектурой.
Читать статьюHono + Bun для AI-платформ: 6 production-паттернов, которые стоит перенять
Строим AI-платформу на Hono + Bun: 100+ сервисов, SSE-стриминг, изолированное выполнение кода, реалтайм WebSocket. 6 production-паттернов из реального кодовой базы.
Читать статьюПочему я выбрал Bun и Hono для бэкенда QuotyAI
Создавайте более быстрые бэкенды, отказавшись от NestJS в пользу Bun и Hono — идеально для независимых основателей, создающих AI-продукты в 2026 году
Читать статью