Deploy: migrate k3s → Docker; search logic → master-agents-svc
- deploy/k3s удалён, deploy/docker добавлен (Caddyfile, docker-compose, searxng) - chat-svc: agents/models/prompts удалены, использует llm-svc (LLMClient, EmbeddingClient) - master-agents-svc: SearchOrchestrator, classifier, researcher, actions, widgets - web-svc: ChatModelSelector, Optimization, Sources удалены; InputBarPlus; UnregisterSW - geo-device-svc, localization-svc: Dockerfiles - docs: 02-k3s-services-spec.md, RUNBOOK/TELEMETRY/WORKING удалены Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
# Архитектура аналога Perplexity.ai — полная спецификация
|
||||
|
||||
Документ описывает полную архитектуру системы на базе микросервисов K3s с акцентом на:
|
||||
- **ВСЕ сервисы в `services/`.** Папка `apps/` удаляется. Микросервисная архитектура: chat, search, discover, finance, travel, auth, library, memory, create, notifications, projects, web (UI), cache-worker.
|
||||
Документ описывает полную архитектуру системы на базе **СОА (сервисной архитектуры)** в K3s с акцентом на:
|
||||
- **ВСЕ сервисы в `services/`.** Папка `apps/` удаляется. Сервисная архитектура: chat, search, discover, finance, travel, auth, library, memory, create, notifications, projects, web (UI), cache-worker.
|
||||
- **~10 000 DAU** (ежедневных пользователей)
|
||||
- **Клиентская логика** — максимум на клиенте; персональные данные — только для аккаунтов
|
||||
- **Предварительная обработка и кэш** — новости, finance, travel, повторяющиеся запросы
|
||||
@@ -249,7 +249,7 @@
|
||||
|
||||
---
|
||||
|
||||
## 3. Микросервисы K3s
|
||||
## 3. Сервисы K3s (СОА)
|
||||
|
||||
### 3.1 Карта сервисов
|
||||
|
||||
@@ -269,7 +269,7 @@
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────────────────────────────┐
|
||||
│ BACKEND MICROSERVICES (K3s) │
|
||||
│ BACKEND SERVICES (K3s, SOA) │
|
||||
├─────────────────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
||||
@@ -305,7 +305,7 @@
|
||||
└─────────────────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 3.2 Описание микросервисов
|
||||
### 3.2 Описание сервисов
|
||||
|
||||
| Сервис | Язык | Replicas (10k DAU) | Назначение |
|
||||
|--------|------|--------------------|------------|
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# K3s — спецификация микросервисов
|
||||
# K3s — спецификация сервисов (СОА)
|
||||
|
||||
## 1. Обзор инфраструктуры K3s
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
│ K3s Cluster │
|
||||
├─────────────────────────────────────────────────────────────────────────────┤
|
||||
│ Ingress (Traefik) │
|
||||
│ api.perplexica.local → path-based routing к микросервисам │
|
||||
│ api.perplexica.local → path-based routing к сервисам │
|
||||
│ auth.perplexica.local → auth-svc:3000 │
|
||||
│ *.perplexica.local → web (static) │
|
||||
└─────────────────────────────────────────────────────────────────────────────┘
|
||||
@@ -1310,7 +1310,7 @@ spec:
|
||||
- auth.perplexica.local
|
||||
secretName: perplexica-tls
|
||||
rules:
|
||||
# API: path-based маршрутизация к микросервисам
|
||||
# API: path-based маршрутизация к сервисам
|
||||
- host: api.perplexica.local
|
||||
http:
|
||||
paths:
|
||||
@@ -11,7 +11,7 @@
|
||||
| **Инфраструктура** | SearXNG — единый инстанс | Очередь запросов в search-svc; при росте — пул инстансов |
|
||||
| **Инфраструктура** | cache-worker зависает | `activeDeadlineSeconds` во всех CronJob (5–20 мин) |
|
||||
| **Инфраструктура** | Redis/PostgreSQL без HA | Sentinel/Cluster и Read replica при масштабировании |
|
||||
| **Инфраструктура** | travel-svc без HPA | HPA 1–4 replicas добавлен в 02-k3s-microservices-spec |
|
||||
| **Инфраструктура** | travel-svc без HPA | HPA 1–4 replicas добавлен в 02-k3s-services-spec |
|
||||
| **Функции** | Внешние API (LLM, FMP, TA) | Retry + circuit breaker; fallback при частичном сбое |
|
||||
|
||||
## 1. Инфраструктура
|
||||
@@ -103,6 +103,6 @@
|
||||
- [04-pages-logic-verification.md §9](./04-pages-logic-verification.md#9-покрытие-фич-perplexity-20252026) — покрытие vs Perplexity 2026
|
||||
- [06-roadmap-specification.md](./06-roadmap-specification.md) — roadmap и спеки фич
|
||||
- [01-perplexity-analogue-design.md](./01-perplexity-analogue-design.md)
|
||||
- [02-k3s-microservices-spec.md](./02-k3s-microservices-spec.md)
|
||||
- [02-k3s-services-spec.md](./02-k3s-services-spec.md)
|
||||
- [03-cache-and-precompute-strategy.md](./03-cache-and-precompute-strategy.md)
|
||||
- [04-pages-logic-verification.md](./04-pages-logic-verification.md)
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
## 1. Спецификация фич (детали)
|
||||
|
||||
Все пункты определены в [01-perplexity-analogue-design.md](./01-perplexity-analogue-design.md), [02-k3s-microservices-spec.md](./02-k3s-microservices-spec.md), [04-pages-logic-verification.md §9](./04-pages-logic-verification.md#9-покрытие-фич-perplexity-20252026).
|
||||
Все пункты определены в [01-perplexity-analogue-design.md](./01-perplexity-analogue-design.md), [02-k3s-services-spec.md](./02-k3s-services-spec.md), [04-pages-logic-verification.md §9](./04-pages-logic-verification.md#9-покрытие-фич-perplexity-20252026).
|
||||
|
||||
### 1.1 Memory (memory-svc)
|
||||
- **Сервис:** memory-svc, порт 3010
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Миграция GooSeek на микросервисную архитектуру
|
||||
# Миграция GooSeek на сервисную архитектуру (СОА)
|
||||
|
||||
**Ссылки:** [01-perplexity-analogue-design.md](./01-perplexity-analogue-design.md), [02-k3s-microservices-spec.md](./02-k3s-microservices-spec.md)
|
||||
**Ссылки:** [01-perplexity-analogue-design.md](./01-perplexity-analogue-design.md), [02-k3s-services-spec.md](./02-k3s-services-spec.md)
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -2,9 +2,13 @@
|
||||
|
||||
**Отдельный проект.** Документы самодостаточны; все спеки и roadmap — внутри этой папки.
|
||||
|
||||
## СОА (сервисная архитектура)
|
||||
|
||||
Используется **СОА**, а не микросервисная архитектура: доменные сервисы (chat, search, finance и т.д.), единая точка входа (api-gateway), стандартизированные REST API. Сервисы — бизнес-компоненты, а не атомарные микросервисы.
|
||||
|
||||
Целевая система для ~10 000 DAU с **полным совпадением** логики Perplexity.ai:
|
||||
- **ВСЁ в `services/`.** Папка `apps/` удаляется. Никаких app — только микросервисы.
|
||||
- Микросервисы в K3s (chat, search, discover, finance, travel, auth, library, memory, create, notifications, projects, cache-worker, web/frontend)
|
||||
- **СОА (сервисная архитектура).** Папка `apps/` удаляется. Никаких app — только сервисы.
|
||||
- Сервисы в K3s (chat, search, discover, finance, travel, auth, library, memory, create, notifications, projects, cache-worker, web/frontend)
|
||||
- Максимум логики на клиенте; персональные данные только для аккаунтов
|
||||
- Предварительная обработка и кэширование (discover, finance, travel+inspiration, поиск)
|
||||
|
||||
@@ -12,8 +16,8 @@
|
||||
|
||||
| Документ | Описание |
|
||||
|----------|----------|
|
||||
| [01-perplexity-analogue-design.md](./01-perplexity-analogue-design.md) | Карта функциональностей, микросервисы, стратегия кэша, порядок реализации |
|
||||
| [02-k3s-microservices-spec.md](./02-k3s-microservices-spec.md) | K3s манифесты, Deployment, Service, CronJob для каждого сервиса |
|
||||
| [01-perplexity-analogue-design.md](./01-perplexity-analogue-design.md) | Карта функциональностей, сервисы СОА, стратегия кэша, порядок реализации |
|
||||
| [02-k3s-services-spec.md](./02-k3s-services-spec.md) | K3s манифесты, Deployment, Service, CronJob для каждого сервиса |
|
||||
| [03-cache-and-precompute-strategy.md](./03-cache-and-precompute-strategy.md) | Детальная стратегия кэширования: discover, finance, travel, search |
|
||||
| [04-pages-logic-verification.md](./04-pages-logic-verification.md) | Сверка логики страниц с Perplexity.ai — полное совпадение |
|
||||
| [05-gaps-and-best-practices.md](./05-gaps-and-best-practices.md) | Production checklist, требования инфраструктуры |
|
||||
@@ -22,7 +26,7 @@
|
||||
## Быстрый старт
|
||||
|
||||
1. Прочитать `01-perplexity-analogue-design.md` для общего понимания
|
||||
2. Использовать `02-k3s-microservices-spec.md` для развёртывания
|
||||
2. Использовать `02-k3s-services-spec.md` для развёртывания
|
||||
3. Реализовать `cache-worker` и Redis по `03-cache-and-precompute-strategy.md`
|
||||
|
||||
## Отношение к functional-inventory
|
||||
|
||||
@@ -1,72 +0,0 @@
|
||||
# How GooSeek Works
|
||||
|
||||
This is a high level overview of how Perplexica answers a question.
|
||||
|
||||
If you want a component level overview, see [README.md](README.md).
|
||||
|
||||
If you want implementation details, see [CONTRIBUTING.md](../../CONTRIBUTING.md).
|
||||
|
||||
## What happens when you ask a question
|
||||
|
||||
When you send a message in the UI, the app calls `POST /api/chat`.
|
||||
|
||||
At a high level, we do three things:
|
||||
|
||||
1. Classify the question and decide what to do next.
|
||||
2. Run research and widgets in parallel.
|
||||
3. Write the final answer and include citations.
|
||||
|
||||
## Classification
|
||||
|
||||
Before searching or answering, we run a classification step.
|
||||
|
||||
This step decides things like:
|
||||
|
||||
- Whether we should do research for this question
|
||||
- Whether we should show any widgets
|
||||
- How to rewrite the question into a clearer standalone form
|
||||
|
||||
## Widgets
|
||||
|
||||
Widgets are small, structured helpers that can run alongside research.
|
||||
|
||||
Examples include weather, stocks, and simple calculations.
|
||||
|
||||
If a widget is relevant, we show it in the UI while the answer is still being generated.
|
||||
|
||||
Widgets are helpful context for the answer, but they are not part of what the model should cite.
|
||||
|
||||
## Research
|
||||
|
||||
If research is needed, we gather information in the background while widgets can run.
|
||||
|
||||
Depending on configuration, research may include web lookup and searching user uploaded files.
|
||||
|
||||
## Answer generation
|
||||
|
||||
Once we have enough context, the chat model generates the final response.
|
||||
|
||||
You can control the tradeoff between speed and quality using `optimizationMode`:
|
||||
|
||||
- `speed`
|
||||
- `balanced`
|
||||
- `quality`
|
||||
|
||||
## How citations work
|
||||
|
||||
We prompt the model to cite the references it used. The UI then renders those citations alongside the supporting links.
|
||||
|
||||
## Search API
|
||||
|
||||
If you are integrating GooSeek into another product, you can call `POST /api/search`.
|
||||
|
||||
It returns:
|
||||
|
||||
- `message`: the generated answer
|
||||
- `sources`: supporting references used for the answer
|
||||
|
||||
You can also enable streaming by setting `stream: true`.
|
||||
|
||||
## Image and video search
|
||||
|
||||
Image and video search use separate endpoints (`POST /api/images` and `POST /api/videos`). We generate a focused query using the chat model, then fetch matching results from a search backend.
|
||||
Reference in New Issue
Block a user