Photo by Growtika on Unsplash
Azure Cosmos DB — це глобально розподілена, багатомодельна служба баз даних, яка забезпечує готове глобальне розподілення через будь-яку кількість регіонів Azure. Використовуючи Azure Cosmos DB з API MongoDB в режимі vCore, важливо налаштувати мережеві параметри для забезпечення безпечного та приватного доступу до вашої бази даних. У цьому пості блогу ми розглянемо необхідні кроки для налаштування приватного доступу до вашої Azure Cosmos DB для MongoDB vCore.
Розуміння приватного доступу та налаштування Private Link
Приватний доступ гарантує, що ваша інстанція Azure Cosmos DB доступна лише з вашої віртуальної мережі (VNet). Це налаштування підвищує безпеку, запобігаючи публічному доступу до вашої бази даних.
Private Link надає більш безпечний і масштабований спосіб доступу до служб Azure приватно, зв’язуючи їх з приватною кінцевою точкою у вашій VNet. Цей метод забезпечує, що трафік між вашою VNet і Azure Cosmos DB залишається в межах мережі Azure.
- Створення приватної кінцевої точки: У порталі Azure створіть приватну кінцеву точку для вашого облікового запису Azure Cosmos DB. Ця кінцева точка отримає приватну IP-адресу з вашої VNet.
- Налаштування DNS: Налаштуйте параметри DNS, щоб дозволити розв'язувати ім'я облікового запису Azure Cosmos DB до приватної IP-адреси приватної кінцевої точки.
- Групи безпеки мережі (NSG): Застосуйте NSG до підмережі, що містить приватну кінцеву точку, для контролю вхідного та вихідного трафіку.
- Тестування з’єднання: Перевірте, чи може ваш додаток підключатися до Azure Cosmos DB за допомогою приватної кінцевої точки.
Перейдіть до статті для більш детальних кроків.
Важливий момент при створенні приватної кінцевої точки — це питання інтеграції з приватною DNS-зоною Azure чи ні.
Якщо ви обираєте інтеграцію з приватною DNS-зоною Azure, то записи DNS для приватної кінцевої точки будуть автоматично додані до записів DNS Azure.
Embedding Generation
Для виконання пошуку за схожістю, необхідно перетворити текстові шматки на векторні ембеддинги. Зазвичай для отримання високоякісних ембеддингів використовують модель OpenAI text-embedding-ada-002
(або подібну). Альтернативно, можна використати модель для ембеддингів з відкритим вихідним кодом, залежно від чутливості даних та вимог до затримки.
import openai
openai.api_key = "YOUR_OPENAI_API_KEY"
def generate_embeddings(chunks):
embeddings = []
for chunk in chunks:
response = openai.Embedding.create(
input=chunk,
model="text-embedding-ada-002"
)
embeddings.append(response["data"][0]["embedding"])
return embedding
3. Зберігання ембеддингів у MongoDB Atlas
З нашою новою партнерською угодою з MongoDB, ми спростили робочі процеси для зберігання, індексації та запиту ембеддингів у MongoDB Atlas. Ось концептуальний фрагмент коду, як вставляти ці ембеддинги в MongoDB:
from pymongo import MongoClient
client = MongoClient("YOUR_MONGODB_ATLAS_CONNECTION_STRING")
db = client["five9nes_db"]
collection = db["embedded_docs"]
def store_in_mongodb(chunks, embeddings):
documents = []
for i, chunk in enumerate(chunks):
documents.append({
"text": chunk,
"embedding": embeddings[i]
})
collection.insert_many(documents)
Налаштування векторного індексу в MongoDB
Перш ніж використовувати пошук за схожістю, потрібно налаштувати векторний індекс. MongoDB Atlas Vector Search підтримує відстані cosine
та euclidean
. Ось приклад визначення схеми в Atlas:
{
"collectionName": "embedded_docs",
"database": "five9nes_db",
"name": "vectorIndex",
"mappings": {
"dynamic": false,
"fields": {
"embedding": {
"type": "knnVector",
"dimensions": 1536, // e.g., розмір вимірювань для text-embedding-ada-002
"similarity": "cosine"
}
}
}
}
Після того, як індекс буде побудовано, ви зможете виконувати запити на найближчі вектори для отримання топ k
схожих документів.
4. Пошук за допомогою MongoDB Atlas Vector Search
Коли користувач надсилає запит, ви спочатку вбудовуєте текст запиту в той самий векторний простір, а потім виконуєте пошук за схожістю в MongoDB:
def find_similar_documents(query_vector, k=3):
pipeline = [
{
"$search": {
"knnBeta": {
"vector": query_vector,
"path": "embedding",
"k": k
}
}
},
{
"$limit": k
}
]
return list(collection.aggregate(pipeline))
MongoDB Atlas повертає топ k
шматків, разом з їхніми оцінками схожості. Наведена вище pipeline використовує оператор knnBeta
для пошуку векторів.
5. Формування запиту з LangChain
Тепер ми інтегруємо LangChain. Використовуючи RetrievalQA
(або власний ланцюг), ми можемо сформувати запит, який включатиме релевантні шматки тексту та доручити LLM відповідати, використовуючи ці шматки.
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI
llm = OpenAI(temperature=0, openai_api_key="YOUR_OPENAI_API_KEY")
retriever = five9nes.MongoDBRetriever( # Гіпотетичний ретривер, наданий five9nes
collection=collection,
index_name="vectorIndex",
embedding_model="text-embedding-ada-002"
)
qa_chain = RetrievalQA(llm=llm, retriever=retriever)
def answer_question(user_query):
return qa_chain.run(user_query)
llm = OpenAI(temperature=0, openai_api_key="YOUR_OPENAI_API_KEY")
retriever = five9nes.MongoDBRetriever( # Гіпотетичний ретривер, наданий five9nes
collection=collection,
index_name="vectorIndex",
embedding_model="text-embedding-ada-002"
)
qa_chain = RetrievalQA(llm=llm, retriever=retriever)
def answer_question(user_query):
return qa_chain.run(user_query)
У межах цієї інтеграції, MongoDBRetriever
може вбудовувати запит користувача, виконувати пошук за схожістю векторів, форматувати документи та подавати їх у запит до LLM. Це забезпечує, що відповідь від LLM ґрунтується на отриманих даних.
6. Об'єднання всього разом
- Інтеграція даних та розбиття на частини: Попередня обробка великих документів, розбитих на менші шматки.
2.
Генерація ембеддингів: Використовуйте модель ембеддингів OpenAI або іншу відповідну модель. - Зберігання в MongoDB: Вставте частини та ембеддинги в колекцію MongoDB Atlas.
- Налаштування векторного індексу: Увімкніть швидкий пошук за схожістю вектора.
- Запит користувача → LLM: Для кожного запиту вбудовуйте текст запиту та отримуйте схожі частини з MongoDB.
- Доповнення запиту: Вставте ці частини в запит до LLM через LangChain.
- Отримання остаточного результату: Поверніть повністю контекстуалізовану відповідь користувачу.
Додаткові вдосконалення
1. Гібридний пошук
Для складніших випадків використання ви можете комбінувати пошук за векторами з традиційними методами індексації тексту (наприклад, BM25) та іншими фільтрами метаданих. LangChain підтримує різноманітні підходи.
Розгляньте додавання інструкцій, які гарантують, що LLM вірно посилається на отримані частини. Наприклад, ви можете наказати:
“Використовуйте наданий текст з нашої бази знань і не вигадуйте деталі, яких немає в вихідних документах.”
3. Кешування та продуктивність
- Кешування: Використовуйте кеш в пам'яті або на основі Redis для зберігання результатів запитів → отриманих даних та зменшення повторних пошуків за векторами.
- Оновлення індексу: Якщо ваші дані часто оновлюються, забезпечте періодичне або миттєве оновлення векторного індексу за допомогою стрімінгового введення.
- Масштабованість: MongoDB Atlas масштабується горизонтально; ви можете безперешкодно додавати шардінг, якщо передбачається збільшення обсягів даних і трафіку.
4. Тонка настройка
Для високоспеціалізованих сфер розгляньте можливість тонкої настройки відкритої LLM на ваших даних. Це може бути особливо ефективно у галузях з високим рівнем спеціалізації (медицина, фінанси тощо). Описаний механізм розбиття на частини та отримання даних можна використовувати й тут.
Використання
- Чат-боти для підтримки клієнтів: Надання реальних відповідей на запити користувачів, що базуються на оновлених базах знань та документаціях.
- Внутрішня корпоративна база знань: Допомога співробітникам швидко знаходити необхідні політики чи технічні деталі з тисяч внутрішніх документів.
- Освіта та онлайн-навчання: Динамічні відповіді на запитання студентів, з контекстом з підручників, лекцій та іншого матеріалу.
У five9nes ми впроваджували RAG конвеєри в таких секторах, як фінанси, охорона здоров'я та виробництво, де кожен з них має унікальні вимоги до інтеграції даних.
Наше партнерство з MongoDB
Ми раді оголосити про наше партнерство з MongoDB, яке прискорює впровадження масштабованих рішень на основі штучного інтелекту. Продуктивність та зручність MongoDB Atlas Vector Search в поєднанні з досвідом five9nes у проектуванні AI-систем, роблять процес впровадження RAG конвеєрів простим і зручним, як ніколи раніше. Завдяки нашій співпраці ви можете очікувати:
- Оптимізовані робочі процеси: Спрощене введення даних, генерація ембеддингів і процеси індексації.
- Масштабованість: Використання шардінгу та реплікації MongoDB для великих обсягів даних.
- Готовність до підприємства: Використання вбудованих функцій безпеки, відповідності та управління від Atlas.
- Повна підтримка: Наші експерти з AI інженерії та хмарні рішення MongoDB гарантують, що ви отримаєте підтримку від концептуального доказу до повномасштабного розгортання.
Висновок
Retrieval-Augmented Generation (RAG) є революційною парадигмою для створення LLM додатків, орієнтованих на певні сфери. Інтегруючи досвід five9nes у AI, модульні інструменти LangChain, високоякісні ембеддинги OpenAI та масштабоване зберігання й отримання даних MongoDB Atlas Vector Search, ви можете створювати передові рішення, які залишаються точними, ефективними та надійними.
Якщо ви зацікавлені у створенні свого власного RAG конвеєра або маєте запитання щодо того, як ви можете використати цю архітектуру для вашого підприємства, зв'яжіться з five9nes вже сьогодні.
Наші експерти готові допомогти вам у проектуванні, створенні та оптимізації AI рішень, які безперешкодно масштабуються в умовах виробничих середовищ — особливо тепер, коли ми співпрацюємо з MongoDB, щоб забезпечити найкращу продуктивність і надійність.
Слідкуйте за нами для більш глибоких оглядів та технічних посібників на нашому інженерному блозі!
Зв'язатися з нами:
Дякуємо за прочитане. Ми з нетерпінням чекаємо на можливість допомогти вам у створенні додатків світового класу на основі AI.
Перекладено з: Building High-Performance Retrieval-Augmented Generation Pipelines with Five9nes and MongoDB