schedule 9 мин чтения

OpenWiki vs QuotyAI: два проекта на LangChain DeepAgents, две архитектуры

OpenWiki использует LangChain DeepAgents для генерации документации к кодовым базам. QuotyAI использует тот же API createDeepAgent для генерации исполняемой бизнес-логики на TypeScript. Техническое сравнение архитектуры агентов, паттернов субагентов и исполнения кода.

translate
Доступно на:
info Эта статья переведена с помощью ИИ

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 показывает предложенное изменение с тремя кнопками: Одобрить, Редактировать, Отклонить. Агент приостанавливается, пока пользователь не примет решение.

Сравнение архитектур: OpenWiki запускает единого LLM-агента с read-only субагентами, которые возвращают находки основному писателю. QuotyAI запускает классификатор намерений, агент-оркестратор, двух субагентов-редакторов (known-pattern-editor и general-cascade-editor) и 9 субагентов генерации кода с HITL-одобрением на каждую запись файла.

Каскады зависимостей навыков в архитектуре DeepAgents QuotyAI

Зафиксированные навыки в QuotyAI формируют ациклический ориентированный граф. Когда один изменяется, downstream-навыки должны перегенерироваться:

offerings_schema ──────> order_schema ──────> pricing_formula
                                        ├───> scheduling_function
                                        └───> validation_function

router         (независимый)
callback       (независимый)
system_prompt  (независимый)
Ациклический ориентированный граф, показывающий зависимости зафиксированных навыков QuotyAI: 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-минутный глубокотканный массаж для участника?», пайплайн:

  1. Загружает scripts/function.js навыка pricing-rules из MongoDB
  2. Загружает schema/schema.ts навыка offerings для определений типов
  3. Вызывает quoteOrder({ items: [{ service: "deep-tissue", duration: 90, member: true }] })
  4. Получает { total: 108, pricingCalculationBacktrace: { ... } } за 24мс
  5. Возвращает цену с полным аудит-трейлом того, как она была рассчитана

Устаревшая страница OpenWiki означает запутанного кодинг-агента. Багнутая функция QuotyAI означает переплатившего клиента.

Сравнение рантайма: OpenWiki записывает markdown-файлы в директорию репозитория — кодинг-агенты читают их как контекст, исполнение не происходит. QuotyAI записывает TypeScript-файлы навыков в MongoDB с версионированными генерациями — в рантайме пайплайн продаж загружает навыки, выполняет функции роутера и ценообразования в песочнице vm.createContext с 5-секундным таймаутом и возвращает детерминированные результаты с аудит-трейлами.

Обработка ошибок: 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 монорепо)

Дополнительные материалы


Часто задаваемые вопросы

Чем отличается 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

Было полезно? Поделитесь.

Похожие статьи

Спасибо за чтение!
Читать другие статьи