Швидка порада: замініть MongoDB® Atlas на SingleStore Kai у LlamaIndex

Швидкий тест для визначення, чи буде працювати LlamaIndex з Kai

Анотація

Ця стаття демонструє, як інтегрувати MongoDBAtlasVectorSearch від LlamaIndex з SingleStore Kai, API, сумісним з MongoDB. Вона висвітлює простий тест, який показує, що LlamaIndex і Kai працюють бездоганно разом, забезпечуючи основу для застосунків на базі штучного інтелекту.

Ноутбук, використаний в цій статті, доступний на GitHub.

Вступ

SingleStore Kai — це API, сумісний з MongoDB, який працює на базі розподіленої бази даних SingleStore, що дозволяє розробникам інтегрувати робочі процеси MongoDB з масштабованою базою даних. LlamaIndex підтримує MongoDBAtlasVectorSearch для просунутих запитів та вилучення даних. У цій статті тестується MongoDBAtlasVectorSearch з SingleStore Kai.

Створення облікового запису SingleStore Cloud

У попередній статті показано кроки для створення безкоштовного облікового запису SingleStore Cloud. Ми використаємо Standard Tier і виберемо стандартні імена для групи робочих просторів і робочого простору. Також ми активуємо SingleStore Kai.

Ми збережемо наш OpenAI API Key у сховищі секретів за допомогою OPENAI_API_KEY.

Імпортуємо ноутбук

Ми завантажимо ноутбук з GitHub.

З лівої панелі навігації в порталі SingleStore Cloud ми вибираємо DEVELOP > Data Studio.

У верхньому правому куті веб-сторінки вибираємо New Notebook > Import From File. Використовуємо майстра, щоб знайти та імпортувати ноутбук, який ми завантажили з GitHub.

Запуск ноутбука

Ноутбук адаптовано з репозиторію LlamaIndex на GitHub.

Спочатку завантажимо деякі дані для використання:

!mkdir -p 'data/10k/'  
!wget 'https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/10k/uber_2021.pdf' -O 'data/10k/uber_2021.pdf'

Далі переконаємось, що OpenAI API Key доступний, і визначимо моделі LLM та вбудовування:

os.environ["OPENAI_API_KEY"] = get_secret("OPENAI_API_KEY")  

llm = OpenAI(  
 model = "gpt-4o-mini"  
)  

embed_model = OpenAIEmbedding(  
 model = "text-embedding-3-small"  
)

Отримаємо з’єднання з Kai, використовуючи connection_url_kai, яке є змінною середовища, що вже вказує на екземпляр Kai, встановимо базу даних і колекцію, створимо індекс векторів та збережемо раніше завантажені дані:

kai_client = pymongo.MongoClient(connection_url_kai)  
db = kai_client["default_db"]  
collection = db["default_collection"]  

collection.create_index(  
 [("embedding", "vector")],  
 name = "vector_index",  
 kaiIndexOptions = {  
 "index_type": "AUTO",  
 "metric_type": "DOT_PRODUCT",  
 "dimensions": 1536  
 }  
)  

store = MongoDBAtlasVectorSearch(kai_client)  

storage_context = StorageContext.from_defaults(vector_store = store)  
uber_docs = SimpleDirectoryReader(  
 input_files = ["./data/10k/uber_2021.pdf"]  
).load_data()  
index = VectorStoreIndex.from_documents(  
 uber_docs, storage_context = storage_context, embed_model = embed_model  
)

Тепер поставимо запитання:

response = index.as_query_engine(llm = llm).query("What was Uber's revenue?")  
display(Markdown(f"{response}"))

Приклад виводу:

Uber's revenue for the year ended December 31, 2021, was $17.455 billion.

Наступний код перевіряє, скільки документів збережено в базі даних, визначає конкретний документ за його ID (ref_doc_id), а потім видаляє його.
Перед і після кожного кроку виводиться кількість документів у базі даних, щоб показати зміни.

print(store._collection.count_documents({}))  

typed_response = (  
 response if isinstance(response, Response) else response.get_response()  
)  
ref_doc_id = typed_response.source_nodes[0].node.ref_doc_id  
print(store._collection.count_documents({"metadata.ref_doc_id": ref_doc_id}))  

if ref_doc_id:  
 store.delete(ref_doc_id)  
 print(store._collection.count_documents({}))

Приклад виводу:

395  
1  
394

Підсумки

Результати цього швидкого тесту виглядають багатообіцяльними. Необхідні подальші тести для визначення повної сумісності між LlamaIndex і Kai.

Перекладено з: Quick tip: Replace MongoDB® Atlas with SingleStore Kai in LlamaIndex

Leave a Reply

Your email address will not be published. Required fields are marked *