RAG Service
Retrieval-Augmented Generation для поиска по корпоративным документам. Загрузка, индексация и семантический поиск по внутренней базе знаний.
Document Ingestion
Загрузка PDF, DOCX, TXT, HTML, Markdown
Hybrid Search
Комбинация векторного и keyword поиска
Smart Chunking
Семантическое разбиение документов
Reranking
Переранжирование результатов для точности
Архитектура RAG Pipeline
┌──────────────────────────────────────────────────────────────────┐ │ RAG Pipeline │ ├──────────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ Upload │───►│ Chunking │───►│ Embedding │ │ │ │ Documents │ │ (Semantic) │ │ (bge-m3) │ │ │ └─────────────┘ └─────────────┘ └──────┬──────┘ │ │ │ │ │ ▼ │ │ ┌─────────────┐ │ │ │ Milvus │ │ │ │ Vector │ │ │ │ Store │ │ │ └──────┬──────┘ │ │ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────┴─────┐ │ │ │ Answer │◄───│ Reranking │◄───│ Search │ │ │ │ Generation │ │ (cross-enc)│ │ (Hybrid) │ │ │ └─────────────┘ └─────────────┘ └───────────┘ │ │ │ └──────────────────────────────────────────────────────────────────┘
Создание коллекции
Коллекция — это изолированное пространство для группы связанных документов. Например, отдельные коллекции для разных отделов или продуктов.
1from coren import Coren23client = Coren()45# Создание коллекции для банковских регламентов6collection = client.rag.collections.create(7 name="bank-regulations",8 description="Внутренние регламенты и инструкции банка",9 embedding_model="bge-m3",10 chunk_size=512,11 chunk_overlap=50,12 metadata={13 "department": "compliance",14 "classification": "internal"15 }16)1718print(f"Коллекция создана: {collection.id}")
Загрузка документов
Загружайте документы по одному или пакетами. Сервис автоматически определяет формат, извлекает текст и разбивает на chunks.
1from coren import Coren2from pathlib import Path34client = Coren()56# Загрузка одного документа7doc = client.rag.documents.upload(8 collection_id="bank-regulations",9 file=Path("docs/credit-policy.pdf"),10 metadata={11 "type": "policy",12 "version": "2024-01",13 "author": "compliance_dept"14 }15)1617print(f"Документ загружен: {doc.id}, chunks: {doc.chunk_count}")1819# Пакетная загрузка20docs_folder = Path("docs/regulations/")21for file_path in docs_folder.glob("*.pdf"):22 client.rag.documents.upload(23 collection_id="bank-regulations",24 file=file_path,25 metadata={"source": "regulations"}26 )27 print(f"Загружен: {file_path.name}")
Поддерживаемые форматы
.pdfДокументы и отчеты
.docxРегламенты, инструкции
.txtПростой текст
.mdТехническая документация
.htmlВеб-страницы
.csvТабличные данные
Семантический поиск
Поиск находит релевантные фрагменты документов по смыслу запроса, а не только по точному совпадению слов.
1from coren import Coren23client = Coren()45# Простой поиск6results = client.rag.search(7 collection_id="bank-regulations",8 query="Какие документы нужны для выдачи кредита юридическому лицу?",9 top_k=510)1112for result in results:13 print(f"Score: {result.score:.3f}")14 print(f"Документ: {result.document_id}")15 print(f"Текст: {result.content[:200]}...")16 print("---")1718# Поиск с фильтрами19results = client.rag.search(20 collection_id="bank-regulations",21 query="процедура одобрения кредита",22 top_k=10,23 filter={24 "type": "policy",25 "version": {"$gte": "2023-01"}26 },27 rerank=True # Включить переранжирование28)
Генерация ответа с контекстом (RAG Query)
Комбинация поиска и генерации: сначала находим релевантные документы, затем передаем их LLM для формирования ответа.
1from coren import Coren23client = Coren()45# RAG запрос с автоматическим поиском и генерацией6response = client.rag.query(7 collection_id="bank-regulations",8 query="Какой максимальный срок рассмотрения заявки на ипотеку?",9 model="llama-3-70b",10 top_k=5,11 include_sources=True,12 system_prompt="Ты помощник банковского сотрудника. Отвечай только на основе предоставленных документов."13)1415print("Ответ:", response.answer)16print()17print("Источники:")18for source in response.sources:19 print(f" - {source.document_name}: стр. {source.page}")2021# Пример вывода:22# Ответ: Согласно регламенту рассмотрения ипотечных заявок,23# максимальный срок рассмотрения составляет 5 рабочих дней24# с момента предоставления полного пакета документов.25#26# Источники:27# - credit-policy.pdf: стр. 1228# - mortgage-regulations.pdf: стр. 8
Гибридный поиск
Комбинация векторного поиска (semantic) и BM25 (keyword) для лучших результатов. Особенно полезно для документов с терминологией и кодами.
1from coren import Coren23client = Coren()45# Гибридный поиск6results = client.rag.search(7 collection_id="bank-regulations",8 query="форма 0401060", # Номер формы платежного поручения9 search_type="hybrid",10 hybrid_config={11 "vector_weight": 0.7, # Вес векторного поиска12 "bm25_weight": 0.3, # Вес keyword поиска13 },14 top_k=10,15 rerank=True16)1718# Результат находит документы, содержащие и номер формы,19# и семантически связанный контекст
API Endpoints
| Method | Endpoint | Описание |
|---|---|---|
| POST | /v1/rag/collections | Создать коллекцию |
| GET | /v1/rag/collections | Список коллекций |
| POST | /v1/rag/documents | Загрузить документ |
| POST | /v1/rag/search | Семантический поиск |
| POST | /v1/rag/query | RAG query с генерацией |
| DELETE | /v1/rag/documents/:id | Удалить документ |