📒 Confluence. Получение данных
from langchain_community.document_loaders import ConfluenceLoader
import requests
import warnings
from urllib3.exceptions import InsecureRequestWarning
warnings.filterwarnings('ignore', category=InsecureRequestWarning)
Авторизация¶
Для того, чтобы авторизовать лоадер, можно взять cookie авторизации из браузера. На любой странице confluence откройте DevTools клавишей F12, и во вкладке Network в любом запросе из списка найдите в заголовках запроса вашу сессию.
Этого значения доастаточно для авторизации лоадера в API Confluence.
Создадим loader, проверим авторизацию и документы¶
loader = ConfluenceLoader(
url='https://confluence.sibur.local/',
# Если включено, то вложения прочитываются, парсятся,
# а полученный текст дописывается к содержимому страницы
include_attachments=False,
# Сколько документов просить в одном запросе в API
limit=2,
# Сколько всегоо документов загрузить
max_pages=6,
# cookie авторизации
cookies={'JSESSIONID': '937C4074E9823E01F47D5528719471EC'},
# Эти параметры буду переданны в конструктор класса 'atlassian.Confluence'
confluence_kwargs={'verify_ssl': False},
)
docs = loader.load(space_key='SmrtSearKB') # По пространству "Умный поиск"
Received runtime arguments {'space_key': 'SmrtSearKB'}. Passing runtime args to `load` is deprecated. Please pass arguments during initialization instead.
docs
[Document(metadata={'title': 'База знаний по решению "Умный поиск"Главная', 'id': '430008530', 'source': 'https://confluence.sibur.local/pages/viewpage.action?pageId=430008530', 'when': '2025-09-03T00:10:55.570+03:00'}, page_content='Добро пожаловать в ваше новое пространство! Пространство продукта\xa0 "Умный поиск", "Платформа ИИ". Входящие документы продукта: INBOX RAG - База знаний по решению "Умный поиск" - Confluence 1 !!! Список задач CF Умный поиск !!! - База знаний по решению "Умный поиск" - Confluence Недавняя активность в пространстве page, comment, blogpost 5 true social Участники пространства list descendants 5 true update'),
Document(metadata={'title': 'Отпуска', 'id': '432932870', 'source': 'https://confluence.sibur.local/pages/viewpage.action?pageId=432932870', 'when': '2025-09-30T10:41:27.485+03:00'}, page_content='ФИО Даты Комментарии Алексеев С.В. - ; - Басс П.В. - ; - Майструк К.А. - Малышкина Е.А. - ; Нужный А.В. - - Ольховиков А.С. Попко А.В - ; Сальников А.А. Сингин И.А. Спесивцев Д.С. Халин С.А. Хирный Н.С. -'),
Document(metadata={'title': 'Текущие задачи в работе', 'id': '435673515', 'source': 'https://confluence.sibur.local/pages/viewpage.action?pageId=435673515', 'when': '2025-05-20T12:37:09.010+03:00'}, page_content='1747733828879 Point (.) true Point (.) false Count 1747733573781 Sparkline Filtration panel false Point (.) AND 2 incomplete'),
Document(metadata={'title': 'Исследования', 'id': '435683116', 'source': 'https://confluence.sibur.local/pages/viewpage.action?pageId=435683116', 'when': '2025-09-01T20:43:58.484+03:00'}, page_content=''),
Document(metadata={'title': 'Материалы для ПУСК', 'id': '437493889', 'source': 'https://confluence.sibur.local/pages/viewpage.action?pageId=437493889', 'when': '2025-09-19T10:34:37.501+03:00'}, page_content='RAG (Retrieval Augmented Generation) — это метод работы с большими языковыми моделями, когда пользователь пишет свой вопрос, а\xa0к этому вопросу программно добавляется дополнительная информация из дополнительных источников и все целиком передается на вход языковой модели. Другими словами в контекст запроса к языковой модели добавляется дополнительная информация, на основе которой языковая модель может дать пользователю более полный и точный ответ. Retrieval - поиск и извлечение релевантной информации. Часть системы, которая отвечает за\xa0поиск и извлечение информации, так и называют\xa0— ретривер (retriever). Retrieval Augmented — дополнение запроса пользователя найденной релевантной информацией. Retrieval Augmented Generation — генерация ответа пользователю с\xa0учетом дополнительно найденной релевантной информации. RAG слой в данном решении это программная платформа, которая осуществляет: Управление RAG-слоями (промежуточными нейронными сетями, описывающими специфичные внутрикорпоративные знания: термины, функции, аббревиатуры, оргструктуры и пр.); Управление контекстами – умение помнить предыдущие вопросы-ответы и учитывать их при ответе; Реализация ролевой модели доступа к данным; Управление очередью запросов Ресурсный план L3 250 Согласование ИБ 250 Ресурсный план L4.1 250'),
Document(metadata={'title': 'Анализ OpenWebUI', 'id': '437510322', 'source': 'https://confluence.sibur.local/pages/viewpage.action?pageId=437510322', 'when': '2025-05-26T10:45:06.530+03:00'}, page_content='250 250')]
Файлы-вложения¶
Помимо самого содержимого нас интересуют файлы, прикреплённые к странице и их содержимое. Я выбрал несколько страниц, на которых можно посмотреть как работают лоадеры для различных файлов:
- 438965021 - на странице диаграмма drawio, которая отдаётся в api, как png
- 437510322 - на странице презентация в формате pptx и pdf с текстом
- 451493456 - на странице схемы (png) и docx
- 437493889 - на странице вложения писем Outlook и таблица xlsx
OCR¶
Для распознавания текста на изображениях, ConfluenceLoader ипользует Tesseract OCR. Я добавил только русский язык, к устанавливаемому исходно английскому. Хотел скачать все языки, но их там на 700Мб.
import pytesseract
pytesseract.get_languages()
['eng', 'osd', 'rus']
Загрузка с вложениями¶
Фильтр вложений¶
Интерфейс создания ConfluenceLoader'а позволяет добавить фукнцию-фильтр для приложенных файлов, которая получает словарь с данными о вложении и должна вернуть True или False, как решение о том стоит ли обрабатывать это вложение или нет. Хорошее место, чтобы посмотреть над тем что вообще из вложений прилетает.
def attachment_filter(attachment: dict) -> bool:
"""Фильтр для аттачментов к документов
Args:
attachemt: Информация об аттачменте
Returns:
Нужно ли сохранять аттачмент
"""
to_skip = {
# 'application/pdf',
# 'image/png',
}
metadata = attachment.get('metadata', {})
print(f'Attachment: title="{attachment["title"]}", media_type="{metadata["mediaType"]}"')
if metadata and (mediatype := metadata.get('mediaType')) in to_skip:
print(f'Attachment {attachment["title"]} is SKIPPED with {mediatype=}', flush=True)
return False
return True
Загрузим документы¶
loader = ConfluenceLoader(
# Если включено, то вложения прочитываются, парсятся,
# а полученный текст дописывается к содержимому страницы
include_attachments=True,
# Сколько документов просить в одном запросе в API
limit=4,
# Сколько всегоо документов загрузить
max_pages=4,
# cookie авторизации
cookies={'mywork.tab.tasks': 'false', 'JSESSIONID': '937C4074E9823E01F47D5528719471EC'},
# Эти параметры буду переданны в класс 'atlassian.Confluence'
confluence_kwargs={'verify_ssl': False},
# Не требует пояснений
url='https://confluence.sibur.local/',
attachment_filter_func=attachment_filter,
ocr_languages="rus+eng+osd"
)
docs = loader.load(page_ids=[438965021, 437510322, 451493456, 437493889])
Received runtime arguments {'page_ids': [438965021, 437510322, 451493456, 437493889]}. Passing runtime args to `load` is deprecated. Please pass arguments during initialization instead.
Attachment: title="Диаграмма состояний.png", media_type="image/png" Attachment: title="Диаграмма состояний", media_type="application/vnd.jgraph.mxfile" Attachment: title="FastAPI - Swagger UI.pdf", media_type="application/pdf" Attachment: title="Reverse engineering Open WebUI.pptx", media_type="application/vnd.openxmlformats-officedocument.presentationml.presentation" Attachment: title="Диаграмма без названия (PROD).png", media_type="image/png" Attachment: title="Диаграмма без названия (PROD)", media_type="application/vnd.jgraph.mxfile" Attachment: title="Диаграмма без названия.png", media_type="image/png" Attachment: title="Диаграмма без названия", media_type="application/vnd.jgraph.mxfile" Attachment: title="ЗнИ Умный поиск (сервис быстрой разработки + ролевая модель) TEST v0.1.docx", media_type="application/vnd.openxmlformats-officedocument.wordprocessingml.document" Attachment: title="Ресурсный план умный поиск (17.09.25 с учетом ТЕНДЕРа)v5.xlsx", media_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" Attachment: title="RE КУПЦОВ В.Н отклонил запрос по проекту Умный поиск.msg", media_type="application/vnd.ms-outlook" Attachment: title="Ресурсный план умный поиск.xlsx", media_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
Парсинг вложений¶
Фильтр вложений показал нам на загрузке какие вложения были обработаны. Осталось сравнить то, что было добавлено из них к основному тексту статьи.
и заканчивается словами "1 сообщение разрастётся до 100Мб то на 20 сообщений будет суммарно менее 2 Гб, что немного и для корп. аренадаты".
Посмотрим, что было добавлено к основному тексту.
docs_by_id = {doc.metadata['id']: doc for doc in docs}
docs_by_id['438965021'].page_content
'true Диаграмма состояний false auto top true 1384 2 Центральный путь выполняется последовательно, задачи первой стадии могут быть выполнены параллельно. Некоторые блоки могут быть пропущены (зависит от метаданных, настроек и т.д.) Ограничения в 20Мб при одновременном ограничении токенов на входе LLM никогда не сработают, тексты весят сильно меньше. 20000 токенов в словах сильно зависит от самих слов, но в среднем 15 000 слов, (для латиницы и кириллицы очевидно должна быть разница, русские слова в среднем длиннее, но информации точной не нашёл) Размышления: 1) учитывая ограничение в 20 потоков нет особого смысла единовременно брать в обработку больше. 2) если на вход от корпоративного поиска приходят запросы пользователей только со ссылками а не вложенным текстом, их размер пренебрежительно мал 3) даже если в процессе прохождения нашего пайплайна 1 сообщение разрастётся до 100Мб то на 20 сообщений будет суммарно менее 2 Гб, что немного и для корп. аренадатыДиаграмма состояний.pngСтадия 1 (сбор данных\n\nСтадия 2 (фильтрация,\n\nи предобработка)\n\nИзвлечение top М\nсамых похожих\nдокументов из\n\nнабора\nсоответствующих\nвекторных БД\n\nоптимизация и выполнение)\n\nИзвлечение\nдокументов из\nссылок\n\nОбогащение\nвекторным поиском\n\nОптимизация\nпромпта с\nпомощью\n\nLLM\n\nВыставление\nприоритета запроса\n\nВыбор LLM\n\nПереформулирование\nзапроса\n\nПредобработка\nзапроса\n\nПроверка политик\nбезопасности и\n\nдоступов\n\nОптимизация\nпромпта\n(переприоритезация,\nдобавление\n\n> Обработка в LLM\n\nтехнических\nпромптов ,\nсокращение до\nдопустимых\nразмеров.\n\nОбогащение промта на\nоснове метаданных (история\nчата с пользователем,\nтехнические промпты)\n\nАнализ\nиспользование\nнеобходимости .\nагентов: погода, курс\nиспользования\n\nагентов\n\nКонец\n(возврат\nответа)\n\nвалют, и т.д.\n'
Видно, что перед текстом добавились настройки показа диаграммы true Диаграмма состояний false auto top true 1384 2.
В конец текста изображение было распознано и добавлено в виде такого текста:
Диаграмма состояний.pngСтадия 1 (сбор данных\n\nСтадия 2 (фильтрация,\n\nи предобработка)\n\nИзвлечение {ор М\nсамых похожих\nдокументов из\n\nнабора\nсоответствующих\nвекторных БД\n\nоптимизация и выполнение)\n\nИзвлечение\nдокументов из\nссылок\n\nОбогащение\nвекторным поиском\n\nОптимизация\nпромпта с\nпомощью\n\nИМ\n\nВыставление\nприоритета запроса\n\nВыбор 1ЕМ\n\nПереформулирование\nзапроса\n\nПредобработка\nзапроса\n\nПроверка политик\nбезопасности и\n\nдоступов\n\nОптимизация\nпромпта\n(переприоритезация,\nдобавление\n\n> Обработка в М\n\nтехнических\nпромптов ,\nсокращение до\nдопустимых\nразмеров.\n\nОбогащение промта на\nоснове метаданных (история\nчата с пользователем,\nтехнические промпты)\n\nАнализ\nиспользование\nнеобходимости .\nагентов: погода, курс\nиспользования\n\nагентов\n\nКонец\n(возврат\nответа)\n\nвалют, и т.д.\n'
PDF¶
На странице нет никакого текста, только прикреплены презентация в форманте PPTX и описание API от swagger в формате PDF.
docs_by_id['437510322']
Document(metadata={'title': 'Анализ OpenWebUI', 'id': '437510322', 'source': 'https://confluence.sibur.local/pages/viewpage.action?pageId=437510322', 'when': '2025-05-26T10:45:06.530+03:00'}, page_content='250 250FastAPI - Swagger UI.pdfPage 1:\n14.04.2025, 12:31 FastAPI - Swagger UI\n\nFastAPI 0.1.0 OAS 3.1\n\n/openapi.json\n\nollama ^\n| СЕТ /ollama/ Get Status Vv |\n| HEAD — /ollama/ Get Status ый\nРОЗТ /ollama/verify Verify Connection a Vv\nGET /ollama/config Get Config a Vv\nPOST /ollama/config/update Update Config a Vv\nGET /ollama/api/tags/{url_idx} Get Ollama Tags a Vv\nGET /ollama/api/tags Get Ollama Tags a Vv\n| GET /ollama/api/version/{url_idx} Get Ollama Versions Vv\nGET /ollama/api/version Get Ollama Versions Vv\nGET /ollama/api/ps Get Ollama Loaded Models a Vv\nPOST /ollama/api/pull/{url_idx} Pull Model a Vv\nPOST /ollama/api/pull Pull Model av\nDELETE /ollama/api/push/{url_idx} Push Model a Vv\n\nhttps://s001laa-0050.dev002.local/docs 1/26\n\n\nPage 2:\n14.04.2025, 12:31 FastAPI - Swagger UI\n\nDELETE /ollama/api/push Push Model av\nPOST /ollama/api/create/{url_idx} Create Model a Vv\nPOST /ollama/api/create Create Model a Vv\n\nPOST /ollama/api/copy/{url_idx} Copy Model a Vv\nPOST /ollama/api/copy Copy Model a Vv\n\nDELETE /ollama/api/delete/{url_idx} Delete Model a Vv\n\nDELETE /ollama/api/delete Delete Model a Vv |\nPOST /ollama/api/show Show Model Info a Vv\n| POST /ollama/api/embed/{url_idx} Embed a м\nРОЗТ /ollama/api/embed Embed a Vv\nPOST /ollama/api/embeddings/{url_idx} Embeddings a Vv\nPOST /ollama/api/embeddings Embeddings a Vv\nPOST /ollama/api/generate/{url_idx} Generate Completion a Vv\nPOST /ollama/api/generate Generate Completion a Vv\nPOST /ollama/api/chat/{url_idx} Generate Chat Completion a Vv\nPOST /ollama/api/chat Generate Chat Completion a Vv\n\nPOST /ollama/v1/completions/{url_idx} Generate Openai Completion a Vv\nPOST /ollama/v1/completions Generate Openai Completion a Vv\nPOST /ollama/v1/chat/completions/{url_idx} Generate Openai Chat Completion a Vv\n\nhttps://s001laa-0050.dev002.local/docs 2/26\n\n\nPage 3:\n14.04.2025, 12:31 FastAPI - Swagger UI\n\nPOST /ollama/v1/chat/completions Generate Openai Chat Completion\n\nGET /ollama/v1/models/{url_idx} Get Openai Models\n\n| GET /ollama/v1/models Get Openai Models\n\nPOST /ollama/models/download/{url_idx} Download Model\n\nPOST /ollama/models/download Download Model\n\nPOST /ollama/models/upload/{url_idx} Upload Model\n\nPOST /ollama/models/upload Upload Model\n\nopenai\n\nGET /openai/config Get Config\n\nPOST /openai/config/update Update Config\n\nPOST /openai/audio/speech Speech\nGET /openai/models/{url_idx} Get Models\n\nGET /openai/models Get Models\n\nPOST /openai/verify Verify Connection\n\nPOST /openai/chat/completions Generate Chat Completion\n\nPOST /openai/{path} Proxy\n\nGET /openai/{path} Proxy\n\nDELETE /openai/{path} Proxy\n\nPUT /openai/{path} Proxy\n\nhttps://s001aa-0050.dev002.local/docs\n\n3/26\n\n\nPage 4:\n14.04.2025, 12:31 FastAPI - Swagger UI\n\npipelines\n\nGET /api/v1/pipelines/list Get Pipelines List\n\nPOST /api/v1/pipelines/upload Upload Pipeline\n\nPOST /api/v1/pipelines/add Add Pipeline\n\nDELETE /api/v1/pipelines/delete Delete Pipeline\n\nGET /api/v1/pipelines/ Get Pipelines a Vv\n| GET /api/v1/pipelines/{pipeline_id}/valves Get Pipeline Valves a Vv\nGET /api/v1/pipelines/{pipeline_id}/valves/spec Get Pipeline Valves Spec a Vv\n\nPOST /api/v1/pipelines/{pipeline_id}/valves/update Update Pipeline Valves\n\ntasks\n\n| GET /api/v1/tasks/config Get Task Config\n\nPOST /api/v1/tasks/config/update Update Task Config\n\nPOST /api/v1/tasks/title/completions Generate Title\n\nPOST /api/v1/tasks/tags/completions Generate Chat Tags\n\nPOST /api/v1/tasks/image_prompt/completions Generate Image Prompt\n\nPOST /api/v1/tasks/queries/completions Generate Queries\n\nPOST /api/v1/tasks/auto/completions Generate Autocompletion\n\nPOST /api/v1/tasks/emoji/completions Generate Emoji\n\nPOST /api/v1/tasks/moa/completions Generate Moa Response\n\nA | соииининины,\n\nhttps://s001aa-0050.dev002.local/docs\n\n4/26\n\n\nPage 5:\n14.04.2025, 12:31 FastAPI - Swagger UI\n\nimages ^\n\nСЕТ /api/v1/images/config Get Config a Vv\nPOST /api/v1/images/config/update Update Config a Vv\nGET /api/v1/images/config/url/verify Verify Url a Vv\nGET /api/v1/images/image/config Get Image Config a Vv\nPOST /api/v1/images/image/config/update Update Image Config a Vv\n| GET /api/v1/images/models Get Models a Vv\n\nPOST /api/v1/images/generations |таде Generations a Vv\n\naudio ^\n| СЕТ /api/v1/audio/config Get Audio Config av\nPOST /api/v1/audio/config/update Update Audio Config a Vv\nPOST /api/v1/audio/speech Speech a Vv\nPOST /api/v1/audio/transcriptions Transcription a Vv\nGET /api/v1/audio/models Get Models a Vv\nGET /api/v1/audio/voices Get Voices a Vv\nretrieval A\nGET /api/vl/retrieval/ Get Status Vv |\nGET /api/v1/retrieval/embedding Get Embedding Config a Vv\nGET /api/v1/retrieval/reranking Get Reraanking Config a Vv |\n\nhttps://s001laa-0050.dev002.local/docs 5/26\n\n\nPage 6:\n14.04.2025, 12:31 FastAPI - Swagger UI\n\nPOST /api/v1/retrieval/embedding/update Update Embedding Config a Vv\nPOST /api/v1/retrieval/reranking/update Update Reranking Config a Vv\n| GET /api/v1/retrieval/config Get Rag Config a Vv\nPOST /api/v1/retrieval/config/update Update Rag Config a Vv\nGET /api/v1/retrieval/template Get Rag Template a Vv\nGET /api/v1/retrieval/query/settings Get Query Settings a Vv\n\nPOST /api/v1/retrieval/query/settings/update Update Query Settings a Vv\n\nв\n<\n\nPOST /api/v1/retrieval/process/file Process File\n\nPOST /api/v1/retrieval/process/text Process Text\n\nPOST /api/v1/retrieval/process/youtube Process Youtube Video\n\nPOST /api/v1/retrieval/process/web Process Web\n\nPOST /api/v1/retrieval/query/doc Query Doc Handler\n\nPOST /api/v1/retrieval/query/collection Query Collection Handler\n\nPOST /api/v1/retrieval/delete Delete Entries From Collection\n\nм мм м №\n<\n\nVv\n\nPOST /api/v1/retrieval/process/web/search Process Web Search\nPOST /api/v1/retrieval/reset/db Reset Vector Db\n\n|)\n\nPOST /api/v1/retrieval/reset/uploads Reset Upload Dir Vv\n\n| GET /api/v1/retrieval/ef/{text} Get Embeddings Vv\n\nPOST /api/v1/retrieval/process/files/batch Process Files Batch a Vv\n\nhttps://s001laa-0050.dev002.local/docs 6/26\n\n\nPage 7:\n14.04.2025, 12:31 FastAPI - Swagger UI\n\nconfigs A\nPOST /api/v1/configs/import Import Config a Vv\nGET /api/v1/configs/export Export Config av\nGET /api/v1/configs/models Get Models Config a Vv\nPOST /api/v1/configs/models Set Models Config a Vv\nPOST /api/v1/configs/suggestions Set Default Suggestions a Vv\n| GET /api/v1/configs/banners Get Banners a Vv\n\nPOST /api/v1/configs/banners Set Banners a Vv\n\nauths ^\n\n| СЕТ /api/v1/auths/ Get Session User a м\n| РОЗТ /api/v1/auths/update/profile Update Profile a Vv\n\nPOST /api/v1/auths/update/password Update Password a Vv\nPOST /api/v1/auths/ldap Ldap Auth Vv\n\nPOST /api/v1/auths/signin Signin Vv\nPOST /api/v1/auths/signup Signup Vv\nGET /api/v1/auths/signout Signout Vv\nPOST /api/v1/auths/add Add User a Vv\nGET /api/v1/auths/admin/details Get Admin Details a Vv\nGET /api/v1/auths/admin/config Get Admin Config a Vv\n\nhttps://s001laa-0050.dev002.local/docs 7/26\n\n\nPage 8:\n14.04.2025, 12:31 FastAPI - Swagger UI\n\nPOST /api/v1/auths/admin/config Update Admin Config a Vv\nGET /api/v1/auths/admin/config/ldap/server Get Ldap Server a Vv\nPOST /api/v1/auths/admin/config/ldap/server Update Ldap Server a Vv\nGET /api/v1/auths/admin/config/ldap Get Ldap Config a Vv\nPOST /api/v1/auths/admin/config/ldap Update Ldap Config a Vv\nGET /api/v1/auths/api_key Get Api Key a Vv\nPOST /api/v1/auths/api_key Generate Api Key a Vv\nDELETE /api/v1/auths/api_key Delete Api Key a Vv\nusers ^\n\nСЕТ /api/v1/users/ Get Users a Vv\nGET /api/v1/users/groups Get User Groups a Vv\nGET /api/v1/users/permissions Get User Permissisions a Vv\nGET /api/v1/users/default/permissions Get User Permissions a Vv\nPOST /api/v1/users/default/permissions Update User Permissions a Vv\nPOST /api/v1/users/update/role Update User Role a Vv\n\nGET /api/vl1/users/user/settings Get User Settings By Session User a Vv\n\nPOST /api/v1/users/user/settings/update Update User Settings By Session User a Vv\n\nGET /api/vl1/users/user/info Get User Info By Session User a Vv\nPOST /api/v1/users/user/info/update Update User Info By Session User a Vv\nGET /api/v1/users/{user_id} Get User By Id a Vv\n\nhttps://s001laa-0050.dev002.local/docs 8/26\n\n\nPage 9:\n14.04.2025, 12:31 FastAPI - Swagger UI\n\nDELETE /api/v1/users/{user_id} Delete User By Id a Vv\nPOST /api/v1/users/{user_id}/update Update User By ld a Vv |\nchannels A\n\nPOST /api/v1/channels/create Create New Channel a Vv\n\nGET /api/v1/channels/ Get Channels a Vv\nE\n\nT /api/v1/channels/{id} Get Channel By Id a Vv\n\nPOST /api/v1/channels/{id}/update Update Channel By 14 a Vv\n\nDELETE /api/v1/channels/{id}/delete Delete Channel By Id a Vv\n\n|\n|\n=\n|\n|\n\nGET /api/v1/channels/{id}/messages Get Channel Messages a Vv\n\nPOST /api/v1/channels/{id}/messages/post Post New Message a Vv\n\nGET /api/v1/channels/{id}/messages/{message_id} Get Channel Message a Vv\n\n/api/v1/channels/{id}/messages/{message_id}/thread\n\nGET Get Channel Thread Messages a У\n\nUpdate Message By Id a У\nРОЗТ О Ман ages’ {message ta}/reactions/add a хи\nРОЗТ /api/v1/channels/{id}/messages/{message_id}/reactions/remove a хи\n\n| РОЗТ /api/v1/channels/{id}/messages/{message_id}/update\n\nRemove Reaction By Id And User Id And Name\n\n/api/v1/channels/{id}/messages/{message_id}/delete\nDELETE Delete Message By Id Г Vv\n\nchats ^\n| GET /api/v1/chats/list Get Session User Chat List a Vv |\nGET /api/v1/chats/ Get Session User Chat List a Vv |\n\nhttps://s001aa-0050.dev002.local/docs 9/26\n\n\nPage 10:\n14.04.2025, 12:31 FastAPI - Swagger UI\n\nDELETE /api/v1/chats/ Delete All User Chats a Vv\nGET /api/v1/chats/list/user/{user_id} Get User Chat List By User Id a Vv\nPOST /api/v1/chats/new Create New Chat a Vv\n\nPOST /api/v1/chats/import Import Chat av\nGET /api/v1/chats/search Search User Chats a Vv\n\nGET /api/v1/chats/folder/{folder_id} Get Chats By Folder Id a Vv\n| GET /api/v1/chats/pinned Get User Pinned Chats a Vv\nGET /api/v1/chats/all Get User Chats a Vv\n| GET /api/v1/chats/all/archived Get User Archived Chats a Vv\nGET /api/v1/chats/all/tags Get All User Tags a Vv\nGET /api/v1/chats/all/db GetAll User Chats In Db a Vv\nGET /api/v1/chats/archived Get Archived Session User Chat List a Vv\nPOST /api/v1/chats/archive/all Archive All Chats a Vv\nGET /api/v1/chats/share/{share_id} Get Shared Chat By Id a Vv\nPOST /api/v1/chats/tags Get User Chat List By Tag Name a Vv\nGET /api/v1/chats/{id} Get Chat By Id av\n\nPOST /api/v1/chats/{id} Update Chat By Id av\n| DELETE /api/v1/chats/{id} Delete Chat By Id a Vv\nGET /api/v1/chats/{id}/pinned Get Pinned Status By Id a Vv |\n\nhttps://s001laa-0050.dev002.local/docs 10/26\n\n\nPage 11:\n14.04.2025, 12:31 FastAPI - Swagger UI\n\n—,\n\n—,\n\nPOST /api/v1/chats/{id}/pin Pin Chat By Id av\nPOST /api/v1/chats/{id}/clone Clone Chat By Id a Vv\nPOST /api/v1/chats/{id}/clone/shared Clone Shared Chat By Id a Vv\n\nPOST /api/v1/chats/{id}/archive Archive Chat By Id av\n\nPOST /api/v1/chats/{id}/share Share Chat By 14 a Vv\n\nDELETE /api/v1/chats/{id}/share Delete Shared Chat By Id a Vv\n\nPOST /api/v1/chats/{id}/folder Update Chat Folder Id By Id a Vv\n\n—\n\nGET /api/v1/chats/{id}/tags Get Chat Tags By Id a Vv |\n| POST /api/v1/chats/{id}/tags Add Tag By Id And Tag Name a м\nDELETE /api/v1/chats/{id}/tags Delete Tag By 14 And Tag Мате a Vv\nDELETE /api/v1/chats/{id}/tags/all Delete All Tags By Id a Vv\n\nmodels ^\n\nСЕТ /api/v1/models/ Get Models a м\n| GET /api/v1/models/base Get Base Models a Vv\nPOST /api/v1/models/create Create New Model a Vv\n| GET /api/v1/models/model Get Model By Id av\nPOST /api/v1/models/model/toggle Toggle Model By Id a Vv\nPOST /api/v1/models/model/update Update Model By Id a Vv\nDELETE /api/v1/models/model/delete Delete Model Ву Id a Vv\n\nhttps://s001aa-0050.dev002.local/docs\n\n11/26\n\n\nPage 12:\n14.04.2025, 12:31 FastAPI - Swagger UI\n\nDELETE /api/v1/models/delete/all Delete All Models a Vv\nknowledge ^\nСЕТ /api/v1/knowledge/ Get Knowledge a Vv\nGET /api/v1/knowledge/list Get Knowledge List a Vv\n| РОЗТ /api/v1/knowledge/create Create New Knowledge a Vv\n\nGET /api/v1/knowledge/{id} Get Knowledge By Id a Vv\nPOST /api/v1/knowledge/{id}/update Update Knowledge By Id a Vv\nPOST /api/v1/knowledge/{id}/file/add Add File To Knowledge By Id a Vv\nPOST /api/v1/knowledge/{id}/file/update Update File From Knowledge By Id a Vv\nPOST /api/v1/knowledge/{id}/file/remove Remove File From Knowledge By Id a Vv\n\nDELETE /api/v1/knowledge/{id}/delete Delete Knowledge By Id a м\nРОЗТ /api/v1/knowledge/{id}/reset Reset Knowledge Ву Id a Vv |\n\nPOST /api/v1/knowledge/{id}/files/batch/add Add Files To Knowledge Batch a Vv\n\nprompts ^\n| СЕТ /api/v1/prompts/ Get Prompts av\nGET /api/v1/prompts/list Get Prompt List a Vv\n\nPOST /api/v1/prompts/create Create New Prompt a Vv\nGET /api/v1/prompts/command/{command} Get Prompt By Command a Vv\n\nPOST /api/v1/prompts/command/{command}/update Update Prompt By Command a Vv\n\nhttps://s001aa-0050.dev002.local/docs\n\n12/26\n\n\nPage 13:\n14.04.2025, 12:31 FastAPI - Swagger UI\n\nDELETE /api/v1/prompts/command/{command}/delete Delete Prompt By Command a Vv\ntools ^\nСЕТ /api/v1/tools/ Get Tools av\nGET /api/v1/tools/list Get Tool List a Vv\nGET /api/v1/tools/export Export Tools a Vv\n\nPOST /api/v1/tools/create Create New Tools a Vv\n\n| GET /api/v1/tools/id/{id} Get Tools By Id a Vv\nPOST /api/v1/tools/id/{id}/update Update Tools By Id a Vv\nDELETE /api/v1/tools/id/{id}/delete Delete Tools By Id a Vv\nGET /api/v1/tools/id/{id}/valves Get Tools Valves By Id a Vv\nGET /api/v1/tools/id/{id}/valves/spec Get Tools Valves Spec By Id a Vv\nPOST /api/v1/tools/id/{id}/valves/update Update Tools Valves By Id a Vv\nGET /api/v1/tools/id/{id}/valves/user Get Tools User Valves By Id a Vv\n\n| GET /api/v1/tools/id/{id}/valves/user/spec Get Tools User Valves Spec By Id a Vv\nPOST /api/v1/tools/id/{id}/valves/user/update Update Tools User Valves By Id a Vv\n\nmemories “\nGET /api/v1/memories/ef Get Embeddings Vv\nGET /api/v1/memories/ Get Memories a Vv\nPOST /api/v1/memories/add Add Memory a Vv\nPOST /api/v1/memories/query Query Memory a Vv\n\nhttps://s001laa-0050.dev002.local/docs 13/26\n\n\nPage 14:\n14.04.2025, 12:31 FastAPI - Swagger UI\n\nPOST /api/v1/memories/reset Reset Memory From Vector Db a Vv\nDELETE /api/v1/memories/delete/user Delete Memory By User Id a Vv\nPOST /api/v1/memories/{memory_id}/update Update Memory By 14 a Vv\nDELETE /api/v1/memories/{memory_id} Delete Memory By Id a м\nfolders ^\nСЕТ /api/v1/folders/ Get Folders a Vv\nPOST /api/v1/folders/ Create Folder a Vv\nGET /api/v1/folders/{id} Get Folder By Id av\nDELETE /api/v1/folders/{id} Delete Folder By Id a Vv\nPOST /api/v1/folders/{id}/update Update Folder Name By Id a Vv\nPOST /api/v1/folders/{id}/update/parent Update Folder Parent Id By Id a Vv\nPOST /api/v1/folders/{id}/update/expanded Update Folder Is Expanded By Id a Vv\ngroups ^\nСЕТ /api/v1/groups/ Get Groups a Vv\nPOST /api/v1/groups/create Create New Function a Vv\nGET /api/v1/groups/id/{id} Get Group By Id a Vv\nPOST /api/v1/groups/id/{id}/update Update Group By Id a Vv\nDELETE /api/v1/groups/id/{id}/delete Delete Group By Id a Vv\nfiles “\n\nhttps://s001laa-0050.dev002.local/docs 14/26\n\n\nPage 15:\n14.04.2025, 12:31 FastAPI - Swagger UI\n\nGET /api/v1/files/ List Files av\nPOST /api/v1/files/ Upload File a Vv\n| DELETE /api/v1/files/all Delete All Files a Vv\nGET /api/v1/files/{id} Get File By Id av\nDELETE /api/v1/files/{id} Delete File By Id av\nGET /api/v1/files/{id}/data/content Get File Data Content By Id a Vv\nPOST /api/v1/files/{id}/data/content/update Update File Data Content By Id a Vv\nGET /api/v1/files/{id}/content Get File Content By Id a Vv\n| GET /api/v1/files/{id}/content/html Get Html File Content By Id a Vv\nGET /api/v1/files/{id}/content/{file_name} Get File Content By Id a Vv\nfunctions ^\nСЕТ /api/v1/functions/ Get Functions a Vv\n| GET /api/v1/functions/export Get Functions a Vv\nPOST /api/v1/functions/create Create New Function a Vv\nGET /api/v1/functions/id/{id} Get Function By Id a Vv\nPOST /api/v1/functions/id/{id}/toggle Toggle Function By Id a Vv\nPOST /api/v1/functions/id/{id}/toggle/global Toggle Global By Id a Vv\nPOST /api/v1/functions/id/{id}/update Update Function By Id a Vv\nDELETE /api/v1/functions/id/{id}/delete Delete Function By Id a Vv ]\n\nhttps://s001aa-0050.dev002.local/docs 15/26\n\n\nPage 16:\n14.04.2025, 12:31 FastAPI - Swagger UI\n\nGET /api/v1/functions/id/{id}/valves Get Function Valves By Id a Vv\nGET /api/v1/functions/id/{id}/valves/spec Get Function Valves Spec By Id a Vv\nPOST /api/v1/functions/id/{id}/valves/update Update Function Valves By Id a Vv\nGET /api/v1/functions/id/{id}/valves/user Get Function User Valves By Id a Vv\nЕ Ge eenser ar ay\nПЕ functions /i/ (id) valves /eser/aptate av\nevaluations “A\n| GET /api/v1/evaluations/config Get Config eo Vv\nPOST /api/v1/evaluations/config Update Config a Vv\nGET /api/v1/evaluations/feedbacks/all Get All Feedbacks a Vv\nDELETE /api/v1/evaluations/feedbacks/all Delete All Feedbacks a Vv\nGET /api/v1/evaluations/feedbacks/all/export Get All Feedbacks a Vv\n| GET /api/v1/evaluations/feedbacks/user Get Feedbacks a Vv\nDELETE /api/v1/evaluations/feedbacks Delete Feedbacks a Vv ]\nPOST /api/v1/evaluations/feedback Create Feedback a Vv\nGET /api/v1/evaluations/feedback/{id} Get Feedback By Id a Vv\nPOST /api/v1/evaluations/feedback/{id} Update Feedback Ву Id a Vv\nDELETE /api/v1/evaluations/feedback/{id} Delete Feedback By Id a Vv\nutils A\nGET /api/v1/utils/gravatar Get Gravatar Vv |\n\nhttps://s001aa-0050.dev002.local/docs 16/26\n\n\nPage 17:\n14.04.2025, 12:31 FastAPI - Swagger UI\n\nPOST /api/v1/utils/code/format Format Code Vv\nPOST /api/v1/utils/markdown Get Html From Markdown Vv\nPOST /api/v1/utils/pdf Download Chat As Pdf Vv\nGET /api/v1/utils/db/download Download Db a м\nСЕТ /api/v1/utils/litellm/config Download Litellm Config Yaml a Vv\ndefault ^\nСЕТ /api/models Get Models a Vv\n| GET /api/models/base Get Base Models a Vv\nPOST /api/chat/completions Chat Completion a Vv\nPOST /api/chat/completed Chat Completed a Vv\nPOST /api/chat/actions/{action_id} Chat Action a Vv\nPOST /api/tasks/stop/{task_id} Stop Task Endpoint a м\n| GET /api/tasks List Tasks Endpoint a Vv\nGET /api/config Get App Config Vv\n| GET /api/webhook Get Webhook Url a Vv\nPOST /api/webhook Update Webhook Url a Vv\n| GET /api/version Get App Version Vv\nGET /api/version/updates Get App Latest Release Version Vv\nGET /api/changelog Get App Changelog Vv\n\nhttps://s001laa-0050.dev002.local/docs 17/26\n\n\nPage 18:\n14.04.2025, 12:31 FastAPI - Swagger UI\n\nGET /oauth/{provider}/login Oauth Login\nGET /oauth/{provider}/callback Oauth Callback\n| GET /manifest.json Get Manifest Json\nGET /opensearch.xml Get Opensearch Xml\nGET /health Healthcheck\nGET /health/db Healthcheck With Db\nSchemas\n\nAddMemoryForm > Expand а! object\n\nAddPipelineForm > Expand а! object\n\nAddUserForm > Expandall object\n\nAdminConfig > Expandall object\n\nApiKey > Expandall object\n\nAudioConfigUpdateForm > Ехрапа а! object\n\nAutomatic1111ConfigForm > Ехрапаа! object\n\nBannerModel > Ехрапаа! object\n\nBatchProcessFilesForm › Ехрапа а! object\n\nBatchProcessFilesResponse > Ехрапа а! object\n\nBatchProcessFilesResult > Ехрапд а! object\n\nhttps://s001aa-0050.dev002.local/docs\n\n18/26\n\n\nPage 19:\n14.04.2025, 12:31 FastAPI - Swagger UI\n\nBody_transcription_api_v1_audio_transcriptions_post > Ехрапаа! object\n\nBody_upload_file_api_v1_files_ post >» Ехрапаа! object\n\nBody_upload_model_ollama_models_upload__url_idx__post > Expand all\nobject\n\nBody_upload_model_ollama_models_upload_post >» Expandall object\n\nBody_upload_pipeline_api_v1_pipelines_upload_post > Ехрапа а! object\n\nChannelForm > Expandall object\n\nChannelModel › Expandall object\n\nChatFolderldForm > Expandall object\n\nChatForm › Expandall object\n\nChatlmportForm > Ехрапа а! object\n\nChatPermissions > Expandall object\n\nChatResponse › Expandall object\n\nChatTitleldResponse > Expandall object\n\nChatTitleMessagesForm > Ехрапа а! object\n\nChunkParamUpdateForm > Ехрапа а! object\n\nCodeFormatRequest > Expandall object\n\nComfyUIConfigForm > Ехрапа а! object\n\nhttps://s001laa-0050.dev002.local/docs 19/26\n\n\nPage 20:\n14.04.2025, 12:31 FastAPI - Swagger UI\n\nConfigForm > Expandall object\n\nConfigUpdateForm > Expandall object\n\nContentExtractionConfig > Ехрапа а! object\n\nContentForm > Expandall object\n\nCopyModelForm > Expandall object\n\nCreateModelForm > Expandall object\n\nDeleteForm › Expandall object\n\nDeletePipelineForm > Ехрапа а! object\n\nEmbeddingModelUpdateForm › Ехрапа а! object\n\nFeaturesPermissions > Ехрапаа! object\n\nFeedbackForm > Expandall object\n\nFeedbackModel › Expandall object\n\nFeedbackUserResponse > Expand all object\n\nFileConfig > Ехрапаа! object\n\nFileMeta > Expandall object\n\nFileMetadataResponse > Expand all object\n\nFileModel › Expandall object\n\nhttps://s001laa-0050.dev002.local/docs 20/26\n\n\nPage 21:\n14.04.2025, 12:31 FastAPI - Swagger UI\n\nFileModelResponse > Expandall object\n\nFolderForm > Expand а! object\n\nFolderlsExpandedForm > Ехрапа а! object\n\nFolderModel › Ехрапаа! object\n\nFolderParentldForm > Expandall object\n\nFunctionForm > Ехрапа а! object\n\nFunctionMeta › Ехрапаа! object\n\nFunctionModel > Ехрапа а! object\n\nFunctionResponse › Expandall object\n\nGenerateCompletionForm > Ехрапа а! object\n\nGenerateEmbedForm > Ехрапаа! object\n\nGenerateEmbeddingsForm › Ехрапа а! object\n\nGeneratelmageForm > Ехрапа а! object\n\nGroupForm > Ехрапа а! object\n\nGroupResponse › Ехрапаа! object\n\nGroupUpdateForm > Ехрапаа! object\n\nHTTPValidationError › Ехрапд а! object\n\nhttps://s001laa-0050.dev002.local/docs 21/26\n\n\nPage 22:\n14.04.2025, 12:31 FastAPI - Swagger UI\n\nImageConfigForm > Ехрапа а! object\n\nImportConfigForm > Ехрапаа! object\n\nKnowledgeFileldForm > Expand а! object\n\nKnowledgeFilesResponse › Expandall object\n\nKnowledgeForm > Expand all object\n\nKnowledgeResponse > Expandall object\n\nKnowledgeUserResponse > Ехрапа а! object\n\nLdapConfigForm > Ехрапа а! object\n\nLdapForm › Ехрапаа! object\n\nLdapServerConfig > Ехрапа а! object\n\nMarkdownForm > Ехрапа а! object\n\nMemoryModel › Ехрапа а! object\n\nMemoryUpdateModel > Ехрапа а! object\n\nMessageForm > Ехрапа а! object\n\nMessageModel › Ехрапа а! object\n\nMessageUserResponse > Ехрапаа! object\n\nModelForm > Expandall object\n\nhttps://s001laa-0050.dev002.local/docs 22/26\n\n\nPage 23:\n14.04.2025, 12:31 FastAPI - Swagger UI\n\nModelMeta > Expandall object\n\nModelModel › Expandall object\n\nModelNameForm > Expand а! object\n\nModelParams › Expandall object\n\nModelResponse > Ехрапа а! object\n\nModelUserResponse > Ехрапа а! object\n\nModelsConfigForm > Ехрапа а! object\n\nProcessFileForm > Ехрапа а! object\n\nProcessTextForm › Expandall object\n\nProcessUrIForm > Ехрапа а! object\n\nPromptForm > Ехрапа а! object\n\nPromptModel › Ехрапа а! object\n\nPromptSuggestion > Ехрапа а! object\n\nPromptUserResponse > Expandall object\n\nPushModelForm › Ехрапд а! object\n\nQueryCollectionsForm > Ехрапа а! object\n\nQueryDocForm > Ехрапа а! object\n\nhttps://s001laa-0050.dev002.local/docs 23/26\n\n\nPage 24:\n14.04.2025, 12:31 FastAPI - Swagger UI\n\nQueryMemoryForm > Expandall object\n\nQuerySettingsForm > Ехрапа а! object\n\nRatingData > Ехрапаа! object\n\nReactionForm > Expandall object\n\nReactions > Expandall object\n\nRerankingModelUpdateForm > Expandall object\n\nSTTConfigForm > Ехрапа а! object\n\nSearchForm > Expandall object\n\nSessionUserResponse › Expandall object\n\nSetBannersForm > Expandall object\n\nSetDefaultSuggestionsForm > Expand all object\n\nSigninForm > Expand all object\n\nSigninResponse > Expandall object\n\nSignupForm > Ехрапа а! object\n\nSnapshotData › Ехрапаа! object\n\nTTSConfigForm > Ехрапаа! object\n\nTagFilterForm > Ехрапа а! object\n\nhttps://s001laa-0050.dev002.local/docs 24/26\n\n\nPage 25:\n14.04.2025, 12:31 FastAPI - Swagger UI\n\nTagForm > Ехрапа а! object\n\nTagModel > Expandall object\n\nTaskConfigForm > Expandall object\n\nToolForm > Expandall object\n\nToolMeta > Expand all object\n\nToolModel > Expandall object\n\nToolResponse > Expandall object\n\nToolUserResponse > Ехрапаа! object\n\nUpdateConfigForm › Ехрапа а! object\n\nUpdatePasswordForm > Ехрапа а! object\n\nUpdateProfileForm > Ехрапаа! object\n\nУнчгогт > Ехрапа а! object\n\nUserModel > Ехрапаа! object\n\nUserNameResponse > Ехрапа а! object\n\nUserPermissions › Ехрапа а! object\n\nUserRoleUpdateForm > Ехрапа а! object\n\nUserSettings > Ехрапаа! object\n\nhttps://s001laa-0050.dev002.local/docs 25/26\n\n\nPage 26:\n14.04.2025, 12:31 FastAPI - Swagger UI\n\nUserUpdateForm > Expand all object\n\nValidationError > Expandall object\n\nWebConfig > Expandall object\n\nWebSearchConfig > Ехрапа а! object\n\nWorkspacePermissions > Expandall object\n\nYoutubeLoaderConfig > Ехрапаа! object\n\nUserResponse > Ехрапа а! object\n\nUserResponse > Ехрапа а! object\n\nOpenAlConfigForm › Ехрапа а! object\n\nConnectionVerificationForm > Ехрапаа! object\n\nOllamaConfigForm > Ехрапа а! object\n\nConnectionVerificationForm › Ехрапаа! object\n\nOpenAlConfigForm > Ехрапа а! object\n\nOllamaConfigForm > Ехрапа а! object\n\nOpenAlConfigForm › Ехрапа а! object\n\nUserResponse > Ехрапа а! object\n\nhttps://s001laa-0050.dev002.local/docs 26/26\n\n\n')
Похоже, что в содержимое статьи попало только описание API от swagger, поробую вытащить этот документ без пасинга pdf.
def attachment_filter_no_pdf(attachment: dict) -> bool:
"""Фильтр для аттачментов к документов
Args:
attachemt: Информация об аттачменте
Returns:
Нужно ли сохранять аттачмент
"""
to_skip = {
'application/pdf',
# 'image/png',
}
metadata = attachment.get('metadata', {})
print(f'Attachment: title="{attachment["title"]}", media_type="{metadata["mediaType"]}"', flush=True)
if metadata and (mediatype := metadata.get('mediaType')) in to_skip:
print(f'Attachment {attachment["title"]} is SKIPPED with {mediatype=}', flush=True)
return False
return True
loader = ConfluenceLoader(
include_attachments=True,
limit=1,
max_pages=1,
cookies={'mywork.tab.tasks': 'false', 'JSESSIONID': '937C4074E9823E01F47D5528719471EC'},
confluence_kwargs={'verify_ssl': False},
url='https://confluence.sibur.local/',
attachment_filter_func=attachment_filter_no_pdf,
ocr_languages="rus+eng+osd",
page_ids=['437510322']
)
page = loader.load()[0]
Attachment: title="FastAPI - Swagger UI.pdf", media_type="application/pdf" Attachment FastAPI - Swagger UI.pdf is SKIPPED with mediatype='application/pdf' Attachment: title="Reverse engineering Open WebUI.pptx", media_type="application/vnd.openxmlformats-officedocument.presentationml.presentation"
page
Document(metadata={'title': 'Анализ OpenWebUI', 'id': '437510322', 'source': 'https://confluence.sibur.local/pages/viewpage.action?pageId=437510322', 'when': '2025-05-26T10:45:06.530+03:00'}, page_content='250 250')
Да, из pptx ничего не спарсилось, полагаю, что это проблема с зависимостями. В презентации текст и картинки, она должна отлично распознаваться. Займусь позже.
Word docx¶
На странице текст Функциональная схема экспресс решения:, дальше идут две диаграммы и прикреплённый документ docx.
docs_by_id['451493456'].page_content
'Функциональная схема экспресс\xa0решения: true Диаграмма без названия false auto top true 1137 2 true Диаграмма без названия (PROD) false auto top true 957 9 ЗнИ на разворот в ТЕСТ 250Диаграмма без названия (PROD).png_ Аутентификация_ _\n\nАвторизация \\\n1\n1\n1\n1\n1\n1\nАутентификация I\nАвторизация |\n1\n1\n\nзапросы\n\n© ep. ответы\naa ответы\nПользователь\n\nСобытия $\n\nбезопасности\n\nСлужебные мета данные\n\nKubernetes @ Prod\n\nДиаграмма без названия.pngответы\n\n© < запросы.\noa\n\nПользователь\n\nАутентификация\nАвторизация\n\nзапросы\nответы\n\nмета\n\nзапросы\nответы\n\nKubernetes @ DEV /\n\nЗнИ Умный поиск (сервис быстрой разработки + ролевая модель) TEST v0.1.docxЗапрос на изменение в ИТ-инфраструктуре\n\n\n\nПрежде чем начать заполнять бланк ЗнИ ознакомьтесь с правилами заполнения! \n\n\n\nПравила заполнения файла ЗнИ:\n\n\n\nДля формирования документа ЗнИ необходимо использовать только актуальный шаблон. \n\nПроектные ЗнИ прорабатываются в рамках Проекта и при оформлении задачи в Jira предоставляется полностью готовый к реализации ЗНИ файл (включая п. 5 «План изменения»).\n\nЛинейные ЗнИ могут прорабатываются инициаторами и/или архитекторами в рамках процесса «Управления инфраструктурными ЗНИ». При проработке архитекторами в рамках процесса на «вход» в Jira инициатор предоставляет шаблон ЗНИ, заполненный в части раздела «Информация» (п.1-16) и Приложения №1 (п. 1-4).\n\nПри доработке/корректировке ЗнИ необходимо сохранять новую версию файла с соответствующим номером. Удалять предыдущие версии файлов из карточки ЗнИ в Jira запрещено. \n\nЛюбые корректировки/дополнения внутри файла выделяются желтой заливкой. Запрещено направлять на рассмотрение файлы в режиме правки. \n\nПриложения из файла ЗнИ не удаляются, даже если остаются не заполненными. Незаполненные/неприменимые Приложения необходимо свернуть, нажав на уголок рядом с заголовком Приложения: \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nИнформация \n\n1.\n\nООО «СИБУР ДИДЖИТАЛ»\n\nМосква, КЦ\n\n2.\n\nНазвание предприятия, где проводится изменение\n\nГород/а\n\n\n\nПопко Александр Владимирович\n\n3.\n\nФИО инициатора изменения\n\n\n\nтел.\n\n+7-962-901-19-91\n\npopkoav@sibur.ru\n\n4.\n\nКонтактный телефон инициатора\n\nE-mail\n\n\n\nУДАиИ, Разработка программного обеспечения\n\n5.\n\nФункциональное подразделения инициатора\n\n\n\n\n\n6.\n\nАрхитектор (если известен)\n\n\n\n«Умный поиск» (программа Лаборатория)\n\n7.\n\nЛинейная деятельность / Проект (указать название)\n\n\n\nПопко Александр Владимирович\n\n8.\n\nРуководитель/Менеджер проекта (если известен)\n\n\n\nКЦ\n\n9.\n\nЗатрагивает нескольких предприятий (кроссрегиональное) и/или КЦ?\n\n\n\n\n\n10.\n\nКраткое наименование изменения\n\n\n\nс\n\n\n\nпо\n\n\n\n11.\n\nОжидаемые сроки реализации\n\n\n\n\n\n12.\n\nОбоснование: ссылка на изменение законодательства, методологические указания, процедуру бизнес-процесса, другое (собственное описание причины)\n\n\n\nВ TEST среде развернут и доступен для пользователей сервис быстрой разработки и тестирования ИИ продуктов\n\n13.\n\nОжидаемый результат Изменения\n\n\n\nK8S, Linux, PostgreSQL, Nginx, AD, KeyCloak\n\n14.\n\nИнфраструктурный технологический стек проекта: Операционная система, СУБД, СПД, СХД, VoIP (при наличии и возможности определения)\n\n\n\n\n\n15.\n\nИзвестные риски, связанные с Изменением или его не реализацией\n\n\n\nДа\n\n\n\n16.\n\nПлан работ требует разработки?\n\nДля разработки ФТТ, ТЗ требуются ресурсы (перечислить)\n\n\n\nНет\n\n\n\n\n\nВлияет на бизнес приложения?\n\nНа какие бизнес приложения влияет Изменение (перечислить)\n\n\n\n\n\n\n\n\n\n\n17. Указать связанное изменение, если применимо.\n\n18. Влияние запроса (отметьте знаком «Х» только один пункт)\n\nКритерии важности запроса\n\n\n\nОтсутствие данной функциональности ведет к невозможности выполнения бизнес-процесса, отсутствует видимое временное решение\n\n\n\nОтсутствие данной функциональности не останавливает работу бизнес-процесса, существует временное решение\n\n\n\nДобавление данной функциональности расширит возможности системы\n\nХ\n\n\n\n19. Срочность запроса (отметьте знаком «Х» только один пункт)\n\nКритерии срочности запроса\n\n\n\nНедоступность операции несет угрозу непрерывности бизнеса (требуется немедленное решение)\n\n\n\nНепрерывность бизнеса зависит от доступности операции на определенную дату\n\n\n\nНепрерывность бизнеса не зависит от доступности операции (возможно плановое решение)\n\nХ\n\n\n\n\n\n\nПриложение №1\n\nОписание бизнес-потребности\n\nОбеспечение пользователям (любой внутренний сотрудник СИБУР) доступа к возможностям корпоративной LLM (GigaChat OnPrem) в TEST среде\n\n\n\nОписание текущего состояния Системы\n\nВ ТЕСТ среде есть технический интерфейс обращения к корпоративной LLM (GigaChat OnPrem) через ReverseProxy (s001tst-api-gchat.sibur.local), не доступный пользователям.\n\n\n\nОписание планируемого состояния Системы\n\nВ ТЕСТ среде в K8S развернут сервис быстрой разработки и тестирования ИИ продуктов, включающий в себя собственный UI доступный пользователям в TEST среде с авторизацией пользователя в AD средствами KeyCloak, ReverseProxy осуществляющий контроль и ограничение частоты запросов пользователей, служебную БД PostgreSQL, интеграцию с ReverseProxy (s001tst-api-gchat.sibur.local) LLM (GigaChat OnPrem) в TEST среде.\n\n\n\nРезультат изменения\n\n- в K8S TEST добавлены ресурсы? \n\n- в K8S TEST развернут стилизованный под СИБУР OpenWebUI \n\n- в K8S TEST OpenWebUI настроена интеграция с AD по KeyCloak \n\n- в K8S TEST развернут и настроен ReverseProxy осуществляющий контроль и ограничение частоты запросов пользователей\n\n- в K8S TEST для OpenWebUI поднята и настроена БД PostgreSQL \n\n- в K8S TEST OpenWebUI подключен к ReverseProxy (s001tst-api-gchat.sibur.local) LLM (GigaChat OnPrem) в TEST среде (авторизация по KeyCloak) \n\n- в TEST среде созданы и назначены ГД для решения (ГД для просмотра логов и доступа к серверам?)\n\n- в K8S TEST организована сетевая связность и открыты сетевые порты для функционирования перечисленных ранее пунктов. \n\n- Создана СУЗ для взаимодействия решения с ReverseProxy (s001tst-api-gchat.sibur.local) LLM (GigaChat OnPrem) в TEST среде, ей назначена ГД SIBUR\\G001gg-tst-gigachat-test-client.\n\n- Настроено логирование метрик ВМ и метрик приложений в корп. системы логирования.\n\n\n\n\n\n\n\n\n\nПлан изменения\n\n\n\n\n\nНет\n\nНет Реализацию ЗНИ требуется проводить в ППР?\n\n (указать да/нет) \n\n\n\n№\n\nРаботы\n\nОтветственный*\n\nТип наряда\n\nЗависи-мость**\n\n\t\n\n\tПодготовка \t\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nВнедрение \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nЗаключительные действия \n\n\n\n\n\n\n\n\n\n\n\n\n\nПлан тестирования***\n\n\n\n\n\n\n\n\n\n\n\n\n\nПлан отката \n\n\n\n\n\n\n\n\n\n\n\n\n\nПлан актуализации информации по ИТ-Инфраструктуре\n\n\n\n\n\n\n\n\n\n\n\n* необходимо использовать наименование групп ответственных в соответствии с названием в таблице \n\n** работы технически нельзя выполнить до выполнения зависимой задачи\n\n*** обязательный раздел плана изменения, все решения после реализации изменения должны быть проверены и протестированы \n\n\n\n\nПриложение №2 Сайзинг серверов\n\nСайзинг серверов \n\nНазначение\n\nИмя\n\nсервера\n\nvCore\n\nRAM,GB\n\nDisk Size, GB\n\nIP-адрес\n\nVLAN\n\nOS\n\nУстанавливаемое ПО / условия развертывания\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nОбязательно указываем ссылку на задачу в Jira на выделение виртуальных ресурсов. \n\nДля выделения виртуальных ресурсов на мощностях КЦ тип задачи: «Инфр. виртуальные ресурсы КЦ»\n\nДля выделения виртуальных ресурсов на мощностях предприятий тип задачи: «Инфр. сайзинг/спецификация»\n\n\n\n\n\nПриложение №3 Управление DNS записями\n\nDNS записи:\n\nЗона\n\nТип \n\nзаписи\n\nИмя\n\nЗначение\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nПриложение №4 УЗ и группы\n\nПеречень локальных УЗ, СУЗ и групп:\n\n№\n\nИмя\n\nПрава\n\nОписание\n\nСервер\n\nФИО владельца/\n\nответственного за ресурс\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\xa0\n\nПеречень доменных СУЗ и групп (*):\n\n№\n\nИмя\n\nПрава\n\nОписание\n\nСервер\n\nФИО владельца/\n\nответственного за ресурс\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n*) Добавление и удаление пользователей в группы доступа осуществляется через ЕСУИД на основании обращения во ВКУС.\n\n\n\nПриложение №5 Настройки МСЭ\n\nСтандартные взаимодействия:\n\nХосты\n\nСтандартное правило\n\n\n\n\n\n\n\n\n\n! Актуальный перечень портов доступен по\xa0ссылке\n\n\n\nДополнительные взаимодействия:\n\n№\n\nAction\n\nSource\n\nDestination\n\nSource\n\nPort\n\nDestination\n\nPort\n\nПрофиль IPS\n\nDescription\n\n\n\nAllow\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nAllow\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nAllow\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nAllow\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nAllow\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nПриложение №6\xa0SSL/TLS сертификаты\n\nАтрибуты запроса на выпуск SSL/TLS сертификата: \n\nПоле\n\nЗначение\n\nСервер установки\n\nТип шаблона\n\n\n\n\n\nFriendly name\n\n\n\n\n\nSN\n\n\n\n\n\nSAN\n\n\n\n\n\nEKU\n\n\n\n\n\nPublic key\n\nRSA (4096)\n\n\n\n\n\n\n\nПриложение №7 Правила для\xa0Proxy\n\nПравила проксируемого доступа в Интернет:\n\n№\n\nAction\n\nSource\n\nDestination\n\nDescription\n\n\n\nAllow\n\n\n\n\n\n\n\n\n\nAllow\n\n\n\n\n\n\n\n\n\nСР 95-ПР03-05/01 "Запрос на изменение в ИТ-инфраструктуре"\n\nДата создания: \n\nПодготовлено:\n\nстр. 4 из 6'
Прикреплённый документ содержит тест и изображения
docs_by_id['451493456'].page_content.find('Прежде чем')
679
# Найдём текст перед картинкой и посмотрим был ли добавлен текст с изображения
position = docs_by_id['451493456'].page_content.find('нажав на уголок рядом с заголовком')
print(docs_by_id['451493456'].page_content[position: position + 200])
нажав на уголок рядом с заголовком Приложения: Информация 1. ООО «СИБУР ДИДЖИТАЛ» Москва, КЦ 2. Название предприятия, где проводится изменение Город/а Попко Александр Вл
Видно, что изображение проигнорировано, дальше по тексту идёт таблица ЗнИ.
from langchain_community.document_loaders import Docx2txtLoader
help(Docx2txtLoader)
Help on class Docx2txtLoader in module langchain_community.document_loaders.word_document:
class Docx2txtLoader(langchain_core.document_loaders.base.BaseLoader, abc.ABC)
| Docx2txtLoader(file_path: Union[str, pathlib.Path])
|
| Load `DOCX` file using `docx2txt` and chunks at character level.
|
| Defaults to check for local file, but if the file is a web path, it will download it
| to a temporary file, and use that, then clean up the temporary file after completion
|
| Method resolution order:
| Docx2txtLoader
| langchain_core.document_loaders.base.BaseLoader
| abc.ABC
| builtins.object
|
| Methods defined here:
|
| __del__(self) -> None
|
| __init__(self, file_path: Union[str, pathlib.Path])
| Initialize with file path.
|
| load(self) -> List[langchain_core.documents.base.Document]
| Load given path as single page.
|
| ----------------------------------------------------------------------
| Data and other attributes defined here:
|
| __abstractmethods__ = frozenset()
|
| __annotations__ = {}
|
| ----------------------------------------------------------------------
| Methods inherited from langchain_core.document_loaders.base.BaseLoader:
|
| async alazy_load(self) -> 'AsyncIterator[Document]'
| A lazy loader for Documents.
|
| Yields:
| the documents.
|
| async aload(self) -> 'list[Document]'
| Load data into Document objects.
|
| Returns:
| the documents.
|
| lazy_load(self) -> 'Iterator[Document]'
| A lazy loader for Documents.
|
| Yields:
| the documents.
|
| load_and_split(self, text_splitter: 'Optional[TextSplitter]' = None) -> 'list[Document]'
| Load Documents and split into chunks. Chunks are returned as Documents.
|
| Do not override this method. It should be considered to be deprecated!
|
| Args:
| text_splitter: TextSplitter instance to use for splitting documents.
| Defaults to RecursiveCharacterTextSplitter.
|
| Raises:
| ImportError: If langchain-text-splitters is not installed
| and no text_splitter is provided.
|
| Returns:
| List of Documents.
|
| ----------------------------------------------------------------------
| Data descriptors inherited from langchain_core.document_loaders.base.BaseLoader:
|
| __dict__
| dictionary for instance variables
|
| __weakref__
| list of weak references to the object
Судя по всему, лоадер не предполагает распознавание изображений. Его возможности можно расширить унаследовавшись и дописав логику взаимодействия с pytesseract.
Outlook и Excel¶
docs_by_id['437493889'].page_content
'RAG (Retrieval Augmented Generation) — это метод работы с большими языковыми моделями, когда пользователь пишет свой вопрос, а\xa0к этому вопросу программно добавляется дополнительная информация из дополнительных источников и все целиком передается на вход языковой модели. Другими словами в контекст запроса к языковой модели добавляется дополнительная информация, на основе которой языковая модель может дать пользователю более полный и точный ответ. Retrieval - поиск и извлечение релевантной информации. Часть системы, которая отвечает за\xa0поиск и извлечение информации, так и называют\xa0— ретривер (retriever). Retrieval Augmented — дополнение запроса пользователя найденной релевантной информацией. Retrieval Augmented Generation — генерация ответа пользователю с\xa0учетом дополнительно найденной релевантной информации. RAG слой в данном решении это программная платформа, которая осуществляет: Управление RAG-слоями (промежуточными нейронными сетями, описывающими специфичные внутрикорпоративные знания: термины, функции, аббревиатуры, оргструктуры и пр.); Управление контекстами – умение помнить предыдущие вопросы-ответы и учитывать их при ответе; Реализация ролевой модели доступа к данным; Управление очередью запросов Ресурсный план L3 250 Согласование ИБ 250 Ресурсный план L4.1 250'
Кроме текста самой стриницы больше ничего не добавлено. Выше фукнция-фильтр вложений писала, что приняла три вложения с этой страницы:
Attachment: title="Ресурсный план умный поиск (17.09.25 с учетом ТЕНДЕРа)v5.xlsx", media_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
Attachment: title="RE КУПЦОВ В.Н отклонил запрос по проекту Умный поиск.msg", media_type="application/vnd.ms-outlook"
Attachment: title="Ресурсный план умный поиск.xlsx", media_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
Первой на ум приходит идея о том, что это может быть связано с русским языком, но во вложениях есть и цифры, и символы латиницы. Надо разбираться.