Записки Kotlin Developer
78 subscribers
51 photos
5 videos
5 files
33 links
Hi, я Кирилл, Kotlin разработчик👋

Тут пишу заметки и tutorial: Kotlin, алгоритмы, Functional style, инфрастуктуру, микросервисы.

Начинаем с базы и дойдем до вершин📈

Subscribe, Let's upgrade skills together🤝

Автор: @kyrillP
Download Telegram
▌ Социальный IT-проект: создай сказку и помоги ребенку!

Мы запустили проект совместно с @BugrovExperience и благотворительным фондом Время Детства — социальную платформу, позволяющую каждому почувствовать себя писателем, добавив пару строк в коллективную детскую сказку и внести вклад в будущее детей! 🎈📚

▌ Концепция проекта

Проект представляет собой веб-платформу, где каждый желающий может написать пару предложений в сказку после совершения небольшого благотворительного пожертвования. Все собранные средства поступают на счет Благотворительного фонда Время Детства.

▌ Что было сделано?

- UI/UX: продуманная структура, удобная навигация и привлекательный интерфейс, созданный в Figma @BugrovExperience
- Реализация:
  - Фронтенд: Vue
  - Бэкенд: Kotlin, Spring Boot 3,  Jmix, PostgreSQL, AI Агент для валидации текста и создания краткого пересказа, админка.
  - Интеграция с платежным сервисом: возможность безопасного подтверждения транзакций.
@kyrillP

🌐 Посмотреть проект онлайн:

story.vremyadetstva.ru

Сейчас проект на стадии  тестирования на фокус группе...

P.S Да простит меня дизайнер, он сделал потрясающий макет, но я не до конца доделал вёрстку, мне нужно поправить все padding и margin в соответствии с макетом, но для MVP, думаю, это не критично 😅
8❤‍🔥2
🚀🚀🚀
⚡️Стань соавтором сказки для детей!

Друзья, совсем скоро нашему фонду исполнится пять лет🤗 Это такой первый взрослый день рождения, и мы решили, что правильно будет не просить подарки для себя, а вместе сделать подарок для наших детей.

С нами часто случаются чудеса (самим не верится!). Вот и в этот раз не обошлось без чуда‼️ Мы придумали идею, но реализовать ее сами не могли. И тут, как по волшебству, к нам на помощь пришли волонтеры Сбера! Да-да, того самого Сбера!💔

🌸И теперь у нас есть готовый лендинг – страница акции, которую мы придумали к празднику🌸

Друзья! Мы предлагаем вам стать соавторами сказки для детей!📖 Каждый из вас может написать отрывок – продолжение сюжета, и в итоге у нас получится такая народная сказка со списком авторов в конце. Мы напечатаем книгу и подарим детям в онкоотделениях. Пусть в их жизни будет много волшебства и чудес!

Сюжет сказки зависит только от вашей фантазии: главное – помнить, что она должна быть доброй!💕

Переходите по ссылке или на нашем сайте по кнопке «Стань автором сказки!» и участвуйте! Мы вместе напишем КНИГУ! Неужели не здорово?

Огромное спасибо волонтерам Сбера: Людмиле Романовой, Денису Бугрову, Кириллу Пахтусову. Вы – настоящие волшебники!


#жизньфонда
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7
В сентябре я планирую поехать на конференцию по Data Science — AI Conf X.
Очень понравились темы докладов, есть разные треки😍

Я уже забронировал отель, так как не мог упустить одно выгодное предложение.

Мой выбор пал на ibis Москва Динамо. Стоимость проживания — всего 12 тысяч рублей за три дня! Это просто замечательно!

Кстати, если вы будете бронировать отель через сервис Отелло, то сможете получить хорошую скидку по промокоду.

Подробнее в комментарии или на фото⤵️
4🔥1
Сбербанк представил практический гайд по созданию ИИ-агентов — автономных систем, которые самостоятельно выполняют различные задачи с помощью генеративного искусственного интеллекта.

Я был в восторге от чтения гайда, очень подробная теория и есть классные практические примеры.

Знаю, что сейчас этот гайд популяризируется благодаря таргетированной рекламе, но если вдруг его пропустили, то рекомендую 👍

Например в книге есть код для AI агента который на основе описания идеи стартапа делает "канва бизнес-модель". Проверил и потестил его, работает хорошо 👍

Могу поделиться репозиторием с исходным кодом, если интересно и нет желания искать его самостоятельно)

Ознакомиться с гайдом можно тут
https://giga.chat/b2b/multi-agent-system
4🔥31
🔥 Нужен ваш совет: собственный компонент комментариев или готовое решение? 🚀

Описание проблемы

Друзья, столкнулся с интересным вопросом. В свой pet-проект хочу добавить систему комментирования.

Проект:
frontend: React + TypeScript
backend: Kotlin + Spring Boot .

Вариант №1: Написать самостоятельно

Преимущества:
- Полный контроль над функционалом и дизайном.
- Возможность кастомизации под нужды проекта.
- Хорошая практика программирования.

Недостатки:
- Требует значительных временных затрат.
- Возможны дополнительные затраты на тестирование и отладку.

Вариант №2: Использовать готовое решение

Преимущества:
- Быстрое внедрение.
- Уже проверенное и оптимизированное решение.
- Минимальные временные затраты.

Недостатки:
- Ограниченная кастомизация.
- Риск зависимости от стороннего сервиса.

Вариант №3: Комбинация 1 и 2 варианта

Пока я пошел по первому варианту. То что у меня получилось на фронте на текущий момент добавил к посту, см. картинки). Думаю, буду небольшими итерациями добавлять и расширять функциональность этого модуля.

Какой путь выбрали бы вы и почему? Жду ваших мнений и рекомендаций! 😊
🔥3
Зарелизил подсистему комментариев, оказалось это не так сложно, спасибо GigaChat Web.❤️

Он конечно не написал весь код, но помогал с рефакторингом, пробрасывание свойств и функций в компонент, а так же подсказал как из списка комментариев построить дерево комментариев с бесконечной вложенностью за O(N)....
3
🚀 KronxRAG - ваш интеллектуальный помощник для работы с документами!

Представляю KronxRAG - RAG-приложение на базе Streamlit и GigaChat и GigaChain, которое превращает ваши документы в умную базу знаний.

🔥 Основные возможности:
📄 Загрузка TXT и PDF файлов
🔍 Умный поиск по документам с помощью RAG-технологии
🤖 AI-ответы на основе ваших материалов через GigaChat
📚 Управление базой знаний
💾 Сохранение данных между сессиями

💡 Как это работает:
1. Загружаете свои документы
2. Задаете любой вопрос
3. Получаете точный ответ, основанный только на ваших материалах

🛠 Технологический стек:
• Frontend: Streamlit
• AI: GigaChat (Сбер)
• Векторная база: ChromaD (хранится локально на вашем пк)
• Фреймворк: LangChain

🔗 Проект уже готов к использованию! Для запуска нужен только API ключ от GigaChat.

Проект доступен на https://gitverse.ru/kronx/KronxRAG

p.s Вообще я его затеял, потому что стало интересно потрогать RAG, на практики попробовать всякие алгоритмы для улучшения поиска по нему. Имея такой интерфейс гораздо удобнее тестировать...
🔥1
Больше прозрачности в RAG
Добавил в приложение при ответе формирования списка источников откуда были взяты данные, чтобы сделать систему более прозрачной для пользователя и упростить отладку при разработке более продвинутых RAG сценариев..

Как это работает?
Создаем функцию для чтения pdf
def read_pdf(file):
pdf_document = fitz.open(stream=file.read(), filetype="pdf")
pages = [] # список страниц для хранения всех страниц
for page_num in range(pdf_document.page_count):
page = pdf_document.load_page(page_num)
text = page.get_text() # извлекаем текст каждой страницы отдельно
pages.append((page_num + 1, text)) # добавляем номер страницы и её текст
return pages

Переработал функцию обработки файлов, теперь каждый документ langchain - это отдельная страница pdf документа, в каждом документе мы добавляем мето-данные
def process_files(files) -> list[Document]:
"""
Функция обрабатывает загруженные файлы, преобразуя их в документы с метаданными.
Теперь каждый чанк включает номер страницы.
"""
documents = []
for file in files:
if file.type == "application/pdf":
pages = read_pdf(file) # получаем страницы с номерами и текстом
for page_number, content in pages:

document = Document(
page_content=content,
metadata={
"source": file.name,
"page": page_number # добавляем номер страницы в метаданные
}
)
print(page_number)
documents.append(document)
else:
# Для текстовых файлов просто читаем и декодируем содержимое
content = file.read().decode()
cleaned_content = clean_html(content)
document = Document(
page_content=cleaned_content,
metadata={"source": file.name}
)
documents.append(document)

return documents


Эти документы потом будут разбиваться на чанки с помощью функции spit_docs

def split_docs(documents: list[Document], chunk_size: int = 1000, chunk_overlap: int = 200) -> list[Document]:
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=chunk_size,
chunk_overlap=chunk_overlap,
)
chunks = text_splitter.split_documents(documents)

return chunks



Ещё из важного нужен промт, который формирует итоговый ответ на основе RAG, пока я пришел к такому промту

template = """Используй приведённый ниже контекст, чтобы ответить на вопрос.
Если не знаешь ответ — просто скажи, что не знаешь, не выдумывай.
Используй только информацию из контекста
Всегда добавляй спискок источкников из запроса
Добавляй номера страниц из которых ты составил итоговый ответ
Контекст: {context}
Вопрос: {question}

Полезный ответ:"""
custom_rag_prompt = PromptTemplate.from_template(template)


Далее нам нужна RAG цепочка
    rag_chain = (
{"context": retriever | format_docs, "question": RunnablePassthrough()}
| custom_rag_prompt
| giga
| StrOutputParser()
)

Код функции для форматирования
def format_docs(docs: list[Document]):
formatted_contents = []
sources = []
for doc in docs:
page = None
source = ''
print(doc.metadata)
if hasattr(doc, 'metadata') and doc.metadata and 'source' in doc.metadata:
source = doc.metadata['source']
if hasattr(doc, 'metadata') and doc.metadata and 'page' in doc.metadata:
page = doc.metadata['page']
if source not in sources:
sources.append(source)
formatted_contents.append(f"""
[Источник: {source}{f' страница {page}' if page is not None else ''}]\n\n
{doc.page_content}\n\n
""")
return "\n\n".join(formatted_contents)

C полным кодом вы можете ознакомится тут

Далее планирую повысить качество ответов из таблиц в pdf, сейчас ответы из таблиц не очень...
Тут уже есть подсказка как это сделать
https://habr.com/ru/articles/893356
🔥2
Друзья, я рад сообщить вам приятную новость! Несмотря на недавние изменения в сервисе Evolution Foundation Models на cloud.ru, многие мощные модели остаются доступны абсолютно бесплатно.

Перечисляю бесплатные модели, которые остаются открытыми для всех пользователей:

- 🔥 GigaChat/GigaChat-2-Max
- 💡 Qwen/Qwen3-Next-80B-A3B-Instruct
- ⚙️ t-tech/T-lite-it-1.0
- t-tech/T-pro-it-1.0
- 🌐 t-tech/T-pro-it-2.0
- 🎧 openai/whisper-large-v3
- 📊 Qwen/Qwen3-Embedding-0.6B
- 🤖 Qwen/Qwen3-Reranker-0.6B
- 🏭 BAAI/bge-m3
- 👩‍💻 BAAI/bge-reranker-v2-m3

Не знаю, как долго продлится эта акция, вероятно, до конца ноября. Это отличная возможность провести вечер за вайбкодингом!

Мне особенно понравилась модель GLM 4.6, и я продолжаю использовать её на платной основе. До ноября она была бесплатной ...

Этот пост носит исключительно информационный характер и не является рекламой..