Skip to main content
Glama

7dayrag

Продакшн-ориентированный RAG + AI-агент, представленный как FastAPI-сервис. Создан как эталонная реализация для 7-дневного SaaS AI-проекта — обоснованные Q&A по бизнес-данным с цитатами, защитой от отказов и агентом, использующим инструменты для вызова внутренних API.

См. ARCHITECTURE.md для обоснования дизайна и плана поставки по дням.

Быстрый старт (без API-ключей)

Приложение полностью работает офлайн в режиме заглушки (детерминированные псевдо-эмбеддинги + скриптованный LLM). Добавьте реальные ключи позже, чтобы переключиться на OpenAI/Anthropic с автоматическим фейловером.

# 1. Postgres + pgvector
docker compose up -d db

# 2. Python deps
pip install -r requirements.txt

# 3. Configure (or skip: defaults match compose)
copy .env.example .env

# 4. Create schema + load the sample knowledge base
python -m scripts.seed_sample_data

# 5. Serve
uvicorn app.main:app --port 8000 --reload

Попробуйте

# Grounded Q&A with citations
curl -X POST localhost:8000/api/v1/query \
  -H "Content-Type: application/json" \
  -d '{"question": "What is the uptime SLA for Business plans?"}'

# Agent that calls tools (ticket lookup)
curl -X POST localhost:8000/api/v1/agent/run \
  -H "Content-Type: application/json" \
  -d '{"task": "Check ticket TICKET-1001 and summarize its status."}'

# Raw hybrid retrieval (debug/tuning)
curl -X POST localhost:8000/api/v1/documents/search \
  -H "Content-Type: application/json" \
  -d '{"query": "refund window annual plan", "top_n": 3}'

Интерактивная документация: http://localhost:8000/docs

API

Метод

Путь

Назначение

GET

/healthz, /readyz

живость; готовность (БД + провайдеры)

POST

/api/v1/documents

апсерт документа → чанкинг → эмбеддинг → индексация

POST

/api/v1/documents/search

гибридный поиск с объединёнными оценками

POST

/api/v1/query

обоснованный Q&A {question} → ответ + цитаты

POST

/api/v1/agent/run

ограниченный агент с вызовом инструментов, аудит в agent_runs

POST

/api/v1/admin/seed

перезагрузка примерной базы знаний

Каждый ответ содержит x-request-id; ошибки структурированы как {error: {code, message}}.

Конфигурация

Всё через переменные окружения / .env (см. .env.example). Ключевые настройки:

  • LLM_PROVIDER: openai | anthropic | stub | auto (auto проходит по PROVIDER_ORDER с повторами и бэкоффом для каждого провайдера и фейловером; заканчивается на stub, если ключи не заданы)

  • OPENAI_BASE_URL: укажите любой OpenAI-совместимый endpoint (Ollama, vLLM, шлюзы)

  • MIN_VECTOR_SCORE: минимальный порог косинусной близости лучшего результата, ниже которого API отказывает вместо угадывания

  • TICKETS_API_BASE_URL / ACCOUNTS_API_BASE_URL: направьте инструменты агента на реальные внутренние API; пусто = встроенные песочные данные

  • REDIS_URL, CACHE_ENABLED, CACHE_TTL_SECONDS, RATE_LIMIT_PER_MINUTE: кэширование + ограничение скорости; отсутствие Redis влияет только на производительность, но не на доступность

Redis (кэширование + ограничение скорости)

Обоснованные ответы кэшируются (по ключу вопроса + конфигурации), а /api/v1/* ограничивается по скорости на IP клиента с фиксированным окном 60 секунд. Ответы содержат x-ratelimit-remaining; превышение лимита возвращает структурированный 429. /readyz сообщает о состоянии Redis; API работает даже при недоступности Redis. Кэшируются только не-отказные ответы (отказы могут меняться при обновлении документов).

docker compose up -d redis   # or just: docker compose up -d  (brings up db+redis+api+n8n)

MCP-сервер

Предоставьте те же возможности Claude Desktop или любому MCP-клиенту:

python mcp_server.py        # stdio transport

Инструменты: search_knowledge_base, answer_question, run_agent, lookup_ticket, lookup_account. Фрагмент конфигурации Claude Desktop:

{
  "mcpServers": {
    "7dayrag": {
      "command": "python",
      "args": ["/absolute/path/to/7dayrag/mcp_server.py"]
    }
  }
}

Автоматизация рабочих процессов n8n

docker compose up -d n8n → откройте http://localhost:5678 → импортируйте из workflows/:

Рабочий процесс

Что делает

ticket_triage.json

Webhook POST /webhook/ticket-triage {ticket_id} → проверка входных данных → запуск агента 7dayrag → возврат сводки по тикету (с веткой ошибок). Замените на узел Slack/email, где отвечает сводка.

kb_sync.json

Ночное расписание → повторная синхронизация базы знаний через /api/v1/admin/seed; замените на ваш источник CMS/Git/S3, питающий /api/v1/documents.

Рабочие процессы вызывают http://api:8000 (сеть compose). Если вы запускаете n8n вне Compose, измените базовый URL на http://localhost:8000.

Проверьте webhook триажа после активации:

curl -X POST localhost:5678/webhook/ticket-triage \
  -H "Content-Type: application/json" -d '{"ticket_id": "TICKET-1001"}'

Как работает обоснование

  1. Вопрос эмбеддится (той же моделью, что и при загрузке) и проходит гибридный поиск: косинусный top-K в pgvector + полнотекстовый top-K в Postgres, объединённые с помощью Reciprocal Rank Fusion.

  2. Если векторная оценка лучшего результата ниже MIN_VECTOR_SCORE → отказ (без вызова LLM).

  3. В противном случае нумерованный контекст передаётся модели со строгими правилами: цитировать как [n], отвечать только по контексту, иначе отвечать NOT_ENOUGH_CONTEXT.

  4. Цитаты в ответе сопоставляются с исходными документами и возвращаются.

Тесты

docker compose up -d db      # integration tests need Postgres on :5433
pytest tests -q              # unit + integration; integration skips cleanly without DB
ruff check app tests scripts

21 тест: инварианты чанкинга, RRF-слияние, детерминизм эмбеддингов, поведение заглушки-провайдера, парсинг цикла агента, а также сквозные API-тесты против реальных Postgres/pgvector.

Развёртывание (staging)

cp .env.example .env   # add OPENAI_API_KEY
docker compose up -d --build
curl localhost:8000/readyz
curl -X POST localhost:8000/api/v1/admin/seed

Для AWS: те же образы → ECS Fargate + RDS Postgres (включите расширение pgvector). Для DigitalOcean: droplet + управляемый Postgres. Секреты только через переменные окружения / менеджер секретов.

Структура проекта

app/
  api/        FastAPI routes (documents, query, agent, health/admin)
  agent/      tool registry (KB search, ticket/account lookup) + bounded agent loop
  llm/        provider abstraction: openai, anthropic, stub + retry/failover router
  rag/        chunking, ingestion, hybrid retrieval (RRF), grounded generation
  cache.py    Redis: response cache + fixed-window rate limiting (fail-open)
  config.py   env-driven settings · db.py engine/session · db_init.py schema bootstrap
data/sample_docs/*.md    demo knowledge base
scripts/seed_sample_data.py
workflows/*.json         importable n8n automations (ticket triage, KB sync)
mcp_server.py            MCP tool server (stdio) for Claude Desktop / MCP clients
tests/

Следующие шаги (бэклог после проекта)

Стриминг (SSE), сбор обратной связи в eval-набор, этап реранкера, многотенантная RLS, плановое переиндексирование, версионирование промптов/A-B, дашборды стоимости.

-
license - not tested
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • Hosted MCP with 91 agent tools: X, domains, SEO, Maps, Trends, Search, YouTube, TikTok, and more.

  • OCR, transcription, file extraction, and image generation for AI agents via MCP.

  • 100+ MCP tools for AI agents: content metadata, trade intelligence, business-expertise analysis.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/HamdanProfessional/7dayrag'

If you have feedback or need assistance with the MCP directory API, please join our Discord server