Skip to content

maxjamchuk/postojka

Repository files navigation

🟥 POSTOJKA

Postojka logo

Postojka — это FastAPI-сервис, который принимает текст поста и возвращает рекомендации на основе текстовой близости. Он может работать в двух режимах:

  • 📄 file — использовать локальный JSON-файл (data/posts.json) с постами
  • 💢 database — подключаться к PostgreSQL и получать посты из таблицы

🧰 Используемые технологии

Технология Назначение
FastAPI API-фреймворк для обработки запросов
Uvicorn ASGI-сервер для запуска FastAPI
sentence-transformers Для получения эмбеддингов постов
Faiss Быстрый поиск ближайших векторов
psycopg2-binary Подключение к PostgreSQL
pydantic-settings Конфигурация через .env

🤖 Что такое Faiss?

Faiss — это библиотека от Facebook для поиска ближайших векторов. Она позволяет быстро находить похожие посты на основе эмбеддингов. Вместо сравнения каждого с каждым (что медленно), Faiss строит индекс, который позволяет находить ближайшие тексты за миллисекунды.


🚀 Запуск

1. Клонируй проект

git clone https://github.com/yourusername/postojka.git
cd postojka

2. Настроить окружение

Создай .env по примеру .env.example Настрой DATA_SOURCE=file или DATA_SOURCE=database

В файле .env можно указать параметры подключения к PostgreSQL и адаптировать структуру под любую таблицу с постами:

...
# Название таблицы и колонок (важно для работы с любой структурой)
POST_TABLE_NAME=posts_post
POST_ID_COLUMN=id
POST_CONTENT_COLUMN=content

💡 Это позволяет использовать Postojka с любой таблицей, даже если в ней:

  • ID называется article_id
  • Текст поста — body
  • А сама таблица — news_article

Пример:

POST_TABLE_NAME=news_article
POST_ID_COLUMN=article_id
POST_CONTENT_COLUMN=body

3. Собери и запусти контейнер

docker-compose up --build

Сервис будет доступен на: ➡ http://localhost:8002/


🧪 Swagger-интерфейс

Интерфейс документации доступен по адресу: 📚 http://localhost:8002/docs

Что там можно:

  • Протестировать ручку /recommend
  • Ввести пример текста (на русском)
  • Получить ID и оценки релевантных постов

🔌 Интеграция в Django

Примерный путь:

  1. В Django-соцсети добавить вьюшку RecommendedPostsView (например, через ListView).
  2. При заходе пользователя отправлять его текст/интерес/ID лайкнутых постов в http://postojka:8000/recommend (или localhost:8002 вне Docker).
  3. Получить список post_id и отфильтровать по ним Post.objects.filter(id__in=...).
  4. Вывести результат на отдельной вкладке — "Рекомендованные".

Можно использовать Django-библиотеку requests или httpx.


🧱 Пример запроса

POST /recommend
Content-Type: application/json

{
  "text": "Мне понравился альбом Земфиры",
  "top_k": 3
}

Ответ:

{
  "recommended": [
    {"post_id": 4, "score": 0.78},
    {"post_id": 1, "score": 0.65},
    ...
  ]
}

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published