Skip to content

Общая архитектура ​

aihelpme.ru состоит из веб-фронтенда, основного сервиса на Go и сервиса разбора документов на Python; бизнес-данные хранятся в базе данных, а асинхронные задачи планируются через Redis. Векторное хранилище, объектное хранилище, граф знаний и сервисы моделей настраиваются в соответствии с требованиями развёртывания.

Состав системы ​

aihelpme.ru использует трёхпроцессную базовую архитектуру «основной сервис + фронтенд + микросервис разбора документов», плюс две инфраструктурные зависимости — PostgreSQL и Redis; остальные компоненты (векторное хранилище, граф знаний, поиск в интернете и т. д.) опциональны и включаются по мере необходимости через профили Docker Compose.

Основные сервисы (запускаются по умолчанию) ​

СервисОбраз / сборкаПортНазначение
appwechatopenai/weknora-app (docker/Dockerfile.app, Go)8080Основной бэкенд: REST API, RAG-поиск, движок агентов, worker асинхронных задач, подключение каналов IM/Embed. Проверка здоровья GET /health
frontendwechatopenai/weknora-ui (frontend/, NGINX + статические артефакты Vue3)80Веб-интерфейс; NGINX одновременно выступает обратным прокси и перенаправляет /api на app (APP_HOST/APP_BACKEND_PORT/APP_SCHEME могут указывать на удалённый бэкенд)
docreaderwechatopenai/weknora-docreader (docker/Dockerfile.docreader, Python)50051 (expose только внутри сети compose, на хост не маппится)Микросервис разбора документов: сервер gRPC, разбор и рендеринг страниц в 25+ форматах PDF/DOCX/Excel/EPUB/веб-страницы и др. Проверка здоровья grpc_health_probe
postgresparadedb/paradedb:v0.25.11-pg175432 (внутри сети)Основная БД. Дистрибутив ParadeDB включает полнотекстовый поиск BM25 и векторные возможности pgvector, поэтому при развёртывании по умолчанию отдельное векторное хранилище не требуется (RETRIEVE_DRIVER=postgres)
redisredis:7.0-alpine (appendonly + requirepass)6379 (внутри сети)Очередь задач Asynq, управление SSE-потоками (межэкземплярное), pub/sub system_settings, ограничение скорости и распределённый шлюз конкурентности моделей
sandboxwechatopenai/weknora-sandbox (docker/Dockerfile.sandbox)—Стандартный рабочий образ платформы; может напрямую использоваться как Docker-бэкенд пространства, а при подключении CubeSandbox/E2B автоматически регистрируется через template API и используется для навыков агента

app и docreader дополнительно передают изображения — продукты разбора — через общий том docreader-tmp (монтируется в /tmp/docreader); локальный том файлового хранилища app — data-files (/data/files).

Опциональные компоненты (профиль Compose) ​

СервисprofileНазначение
searxng (+ одноразовый searxng-init)searxng / fullСамостоятельно размещаемый метапоисковик, предоставляющий агенту Web Search (по умолчанию привязка 127.0.0.1:8888)
neo4jneo4j / fullХранилище графа знаний (GraphRAG), переключатель NEO4J_ENABLE, протокол Bolt 7687
miniominio / fullОбъектное хранилище (STORAGE_TYPE=minio)
qdrant / milvus / weaviateсоответствующие одноимённые профилиОтдельные векторные хранилища (переключается через RETRIEVE_DRIVER)
doris-fe + doris-bedorisПоисковый движок Apache Doris 4.1 (FE MySQL 9030 / FE HTTP 8030 Stream Load / BE 8040)
odl-hybridodl-hybridГибридный бэкенд разбора PDF OpenDataLoader (docreader вызывает его по HTTP :5002)
dexdex / fullТестовый IdP OIDC (совместно с OIDC_AUTH_ENABLE)
langfuse-* (web/worker/clickhouse/minio/db-init)langfuseСамостоятельный стек наблюдаемости LLM, переиспользует postgres платформы (новая БД langfuse) и redis (DB 1)

Кроме того, бэкенд на Go может напрямую подключаться к внешним движкам, не входящим в compose: Elasticsearch v7/v8, OpenSearch, облачный VectorDB, а также 8 видов объектного хранилища (local/MinIO/COS/TOS/S3/OSS/KS3/OBS).

Формы развёртывания ​

Помимо стандартного развёртывания через Docker Compose, репозиторий поддерживает:

  • Режим Lite: DB_DRIVER=sqlite (встроенное векторное расширение sqlite-vec)+ без настройки REDIS_ADDR (Asynq вырождается во внутрипроцессный SyncTaskExecutor), работа одним бинарником, статические ресурсы фронтенда встроены (при handler.Edition == "lite" их обслуживает сам процесс Go);
  • Десктопная версия: cmd/desktop упакован в десктопное приложение на базе Wails v2, сессии могут выполняться в песочнице локальной операционной системы (сейчас только macOS, на базе Seatbelt);
  • Kubernetes: чарт helm/; bare-metal: юниты systemd в deploy/.

Список технологического стека ​

СлойТехнологияВерсия/примечание
Язык бэкендаGogo.mod объявляет go 1.26.0
Веб-фреймворкgithub.com/gin-gonic/ginv1.12.0
ORMgorm.io/gorm + драйвер postgres/sqlitev1.31.1; SQLite поставляется с векторным расширением sqlite-vec
Внедрение зависимостейgo.uber.org/digv1.19.0 (инъекция через конструкторы, см. раздел о дизайне бэкенда)
Асинхронные задачиgithub.com/hibiken/asynqv0.26.0 (на базе Redis, 6 пулов worker)
Кэш/очередьgithub.com/redis/go-redis/v9v9.14.1
Аутентификацияgithub.com/golang-jwt/jwt/v5 + OIDCтри состояния: JWT Bearer / X-API-Key / OIDC
Миграции БДgithub.com/golang-migrate/migrate/v4migrations/versioned/*.up.sql, при запуске автоматически выполняется AUTO_MIGRATE
Логированиеgithub.com/sirupsen/logrus + ротация lumberjackсобственный formatter, сквозной request_id
Конфигурацияgithub.com/spf13/viper + config/config.yaml + переменные окружения—
НаблюдаемостьOpenTelemetry + Langfuse (internal/tracing/langfuse)trace на уровне вызовов LLM
gRPCgoogle.golang.org/grpc v1.81.0вызов docreader
Подключение LLMсобственный слой протоколов internal/models/api (по одному пакету на проводной формат OpenAI / Anthropic / Gemini / DashScope и т. д.), Ollama, LKE SDK и др.27 вендоров объявлены в internal/models/providers, см. Управление моделями
Векторы/поискpgvector, ES v7/v8, OpenSearch, Qdrant, Milvus, Weaviate, Doris, VectorDB, sqlite-vecдинамически собираются по RETRIEVE_DRIVER и таблице vector_stores
Граф знанийneo4j-go-driver/v6опционально
Анализ данныхDuckDB (duckdb-go/v2), валидация SQL pg_query_goинструмент анализа данных агента
Пул горутинpanjf2000/ants/v2пул параллелизма обработки документов (CONCURRENCY_POOL_SIZE)
MCPmark3labs/mcp-go v0.52.0внешние MCP-инструменты агента (включая OAuth)
Документация APIswaggo/gin-swaggerв не-release режиме открывает /swagger
Фронтенд-фреймворкVue 3 (^3.5)+ TypeScript + Vite 7frontend/package.json
UI/состояние фронтендаTDesign Vue Next, Pinia, Vue Router 4, vue-i18nMarked/KaTeX/Mermaid/highlight.js для рендеринга форматированного текста
Сервис разбора документовPython + grpciodocreader/main.py; парсеры в docreader/parser/ (pdf/docx/excel/epub/web/image/markitdown/opendataloader и др.)
ДесктопWails v2cmd/desktop

Способы межпроцессного взаимодействия ​

КаналПротоколОписание
Браузер → frontend(NGINX) → appHTTP/HTTPS (REST + SSE)NGINX обратный прокси /api; чат идёт через потоковый ответ SSE
app → docreadergRPC (по умолчанию docreader:50051, DOCREADER_TRANSPORT=grpc, поддерживает TLS/mTLS и GRPC_AUTH_TOKEN)proto определён в docreader/proto/; большие файлы идут потоковым ReadStream
app → postgresPostgreSQL wire (GORM/pgx)бизнес-данные + BM25 + pgvector
app ↔ redisRESP (поддержка TLS)① очередь задач Asynq (разбор/обогащение/Wiki/память и др.); ② Stream Manager для возобновления SSE-потока после разрыва (STREAM_MANAGER_TYPE); ③ Pub/Sub изменений system_settings; ④ ограничение скорости каналов Embed; ⑤ распределённый семафор конкурентности per-model
app → neo4jBolt (bolt://neo4j:7687)доступ к сущностям/связям GraphRAG
app → searxng / провайдер веб-поискаHTTPпроверка по белому списку SSRF (SSRF_WHITELIST_EXTRA по умолчанию пропускает внутри compose searxng,qdrant,milvus,weaviate,doris-fe,doris-be,minio; после включения SSRF_DNS_WHITELIST_ONLY разрешён исходящий трафик только по белому списку)
app → векторное хранилище/объектное хранилище/провайдер LLMсоответствующие SDK (HTTP/gRPC/протокол MySQL)Doris работает по протоколу MySQL + Stream Load HTTP
app → бэкенд песочницыDocker Engine API / control plane и data plane Cube/E2Bвыполнение сессий, установка навыков и файловые артефакты; выбор по конфигурации песочницы пространства
MCP-клиент → appStreamable HTTP (/mcp/:endpoint_id, у каждого эндпоинта отдельный Bearer Token)встроенный MCP Server, предоставляющий внешним MCP-клиентам возможности вроде поиска по базам знаний пространства, см. Интеграция MCP
Расширение Chrome ↔ appWebSocket (/api/v1/local-browser/extension, при удалённом развёртывании требуется WSS)возможности локального браузера: процесс app ведёт демон BrowserSkill, расширение выполняет веб-задачи в браузере пользователя, см. Локальный браузер
app ↔ платформы IMHTTP webhook / SDK длительного соединенияWeChat, WeCom, Feishu, DingTalk, Slack, Telegram, QQ, Mattermost, Yunzhijia (internal/im/)

Общая схема архитектуры ​

Типичная цепочка запроса: загрузка документа и его разбор с индексацией ​

На схеме ниже показан полный путь документа от загрузки до готовности к поиску, охватывающий большинство взаимодействий между компонентами (синхронное API, асинхронные задачи Asynq, разбор по gRPC, Embedding и запись векторов, подзадачи обогащения):

Цепочка диалога (POST /api/v1/knowledge-chat/:session_id или agent-chat)— синхронный SSE: Handler → SessionService → конвейер плагинов chat_pipeline (понимание запроса → параллельный поиск → rerank → слияние → сборка Prompt → потоковое дополнение LLM) → через Stream Manager (Redis/память) поток токенов возвращается клиенту, подробности в разделе о дизайне бэкенда.

Обзор каталогов верхнего уровня репозитория ​

КаталогНазначение
cmd/Исполняемые точки входа. cmd/server: основной сервис (main/bootstrap/listen + обработка сигналов платформы); cmd/desktop: десктопная версия Wails; cmd/download: вспомогательный инструмент загрузки моделей/ресурсов
internal/Весь бизнес-код бэкенда на Go (слоистая структура описана в разделе о дизайне бэкенда): handler, application/service, application/repository, container (DI), router, middleware, types, agent, im, mcp, stream, sandbox и др.
frontend/Веб-фронтенд Vue3 + Vite + TDesign, артефакты сборки обслуживаются NGINX или встроены в режиме Lite
docreader/Микросервис разбора документов на Python gRPC: точка входа сервера main.py, 25+ парсеров в parser/, разделители в splitter/, определения протокола в proto/, отдельная сборка Dockerfile.docreader
cli/Командная строка weknora: операции с ресурсами — базы знаний, документы, поиск, сессии, агенты, модели, MCP, навыки и т. д., а также диагностика doctor, см. CLI
client/Go SDK: оборачивает API платформы в виде HTTP-клиента для интеграции при вторичной разработке
mcp-server/MCP Server, реализованный на Python (weknora_mcp_server.py), предоставляет API платформы как MCP-инструменты MCP-клиентам вроде Claude
miniprogram/Клиент в виде мини-программы WeChat (WXML/WXSS/JS)
migrations/Миграции БД golang-migrate: versioned/ (основная линия Postgres NNNNNN_*.up/down.sql), sqlite/ (режим Lite), paradedb/, mysql/
config/Конфигурация выполнения: основной конфиг config.yaml, встроенные агенты builtin_agents.yaml, пресеты агентов agent_type_presets.yaml, декларативные встроенные модели builtin_models.yaml.example, наложение каталога вендоров моделей models.json.example, шаблоны промптов prompt_templates/
docker/Dockerfile каждого образа (app/docreader/sandbox/odl-hybrid) и конфигурация searxng
deploy/Ресурсы развёртывания на bare-metal (юниты служб systemd и др.)
helm/Helm-чарт Kubernetes (Chart.yaml / values.yaml / templates/)
examples/Примеры кода использования API; examples/skills/ — примеры пакетов навыков агента
dataset/Наборы QA-данных для оценки и скрипты их генерации
scripts/Вспомогательные скрипты сборки/запуска/миграции (например start_all.sh; build_frontend_dist.sh для сборки Lite / десктопа, образ UI собирается многоэтапно через frontend/Dockerfile)
tests/, testdata/Интеграционные тесты и тестовые данные
misc/Разное (например dex-config.yaml — тестовая конфигурация OIDC)
packages/Отдельно публикуемые интеграционные пакеты, например плагин DeepSeek Harness packages/dsh-weknora, см. DeepSeek Harness
docs/Устаревшие документы, снятые с сопровождения; временно хранит сгенерированные пакеты Swagger, релизные ресурсы и исторические изображения

Примечание: имя модуля Go — aihelpme.ru; в корне также лежат docker-compose.yml (продакшн-оркестрация) и docker-compose.dev.yml (оркестрация для разработки), Makefile, VERSION и т. д.

Следующая статья «Дизайн бэкенда на Go» подробно разбирает внутреннее устройство internal/: слоистая архитектура, внедрение зависимостей dig, процесс запуска, маршрутизация и RBAC, middleware, доменные модели и соглашения об ошибках/логировании.

Версия v0.8.3 · MIT License