Разработка RAG с векторной базой данных OpenSearch

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1Все 1566 услуг
Разработка RAG с векторной базой данных OpenSearch
Средний
от 1 недели до 3 месяцев
Часто задаваемые вопросы

Направления AI-разработки

Этапы разработки AI-решения

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1284
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1196
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    901
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1119
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    586
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    853

Разработка RAG с векторной базой данных OpenSearch

OpenSearch — форк Elasticsearch от AWS, развивающийся как независимый open-source проект под Apache 2.0. Поддерживает k-NN поиск через плагин knn-plugin с алгоритмами HNSW, IVF и FAISS. Если инфраструктура построена на AWS (Amazon OpenSearch Service), это приоритетный выбор для RAG.

Создание индекса с k-NN

from opensearchpy import OpenSearch
from opensearchpy.helpers import bulk

client = OpenSearch(
    hosts=[{"host": "localhost", "port": 9200}],
    use_ssl=False,
)

# Настройка k-NN индекса
index_config = {
    "settings": {
        "index.knn": True,
        "index.knn.space_type": "cosinesimil",
    },
    "mappings": {
        "properties": {
            "content": {
                "type": "text",
                "analyzer": "standard",
            },
            "source": {"type": "keyword"},
            "doc_type": {"type": "keyword"},
            "embedding": {
                "type": "knn_vector",
                "dimension": 1536,
                "method": {
                    "name": "hnsw",
                    "engine": "nmslib",  # или "faiss"
                    "parameters": {
                        "m": 16,
                        "ef_construction": 128,
                    }
                }
            }
        }
    }
}

client.indices.create(index="knowledge_base", body=index_config)

Hybrid Search в OpenSearch

def opensearch_hybrid_search(query: str, top_k: int = 5) -> list:
    query_embedding = get_embedding(query)

    body = {
        "query": {
            "bool": {
                "should": [
                    # BM25 поиск
                    {
                        "match": {
                            "content": {
                                "query": query,
                                "boost": 0.3
                            }
                        }
                    },
                    # k-NN поиск через script_score
                    {
                        "script_score": {
                            "query": {"match_all": {}},
                            "script": {
                                "source": "knn_score",
                                "lang": "knn",
                                "params": {
                                    "field": "embedding",
                                    "query_value": query_embedding,
                                    "space_type": "cosinesimil",
                                }
                            },
                            "boost": 0.7,
                        }
                    }
                ]
            }
        },
        "size": top_k,
        "_source": ["content", "source", "doc_type"],
    }

    response = client.search(index="knowledge_base", body=body)
    return [hit["_source"] for hit in response["hits"]["hits"]]

Amazon OpenSearch Service: managed вариант

При деплое на AWS используем Amazon OpenSearch Service с нативной интеграцией Bedrock:

import boto3
import json

# Amazon OpenSearch Serverless
bedrock_client = boto3.client("bedrock-runtime", region_name="us-east-1")

def get_embedding_bedrock(text: str) -> list:
    response = bedrock_client.invoke_model(
        modelId="amazon.titan-embed-text-v2:0",
        body=json.dumps({"inputText": text, "dimensions": 1024}),
    )
    return json.loads(response["body"].read())["embedding"]

Сравнение с Elasticsearch

OpenSearch и Elasticsearch имеют почти идентичный API для k-NN, но есть различия:

Параметр OpenSearch Elasticsearch
Лицензия Apache 2.0 SSPL/Elastic License
AWS managed Amazon OpenSearch Service Elastic Cloud on AWS
k-NN движки NMSLIB, FAISS, Lucene Lucene HNSW
RRF fusion Через scoring Нативно (8.14+)
ML Commons Встроен Нет аналога

OpenSearch ML Commons позволяет встроить embedding-модель прямо в кластер:

# Регистрация и деплой embedding модели внутри OpenSearch
# Позволяет делать semantic search без внешнего embedding API
body = {
    "name": "huggingface/sentence-transformers/paraphrase-multilingual-mpnet-base-v2",
    "version": "1.0.1",
    "model_format": "TORCH_SCRIPT",
}
client.transport.perform_request("POST", "/_plugins/_ml/models/_register", body=body)

Сроки

  • Настройка OpenSearch + индекс: 2–3 дня
  • Ingestion pipeline: 3–7 дней
  • Hybrid search + RAG пайплайн: 1–2 недели
  • Итого: 2–4 недели