Швидка порада: використання MongoDBAtlasVectorSearch з LangChain і SingleStore Kai

Швидкий тест, щоб визначити, чи працюватиме LangChain з Kai

Анотація

Ця коротка стаття досліджує інтеграцію MongoDBAtlasVectorSearch з LangChain та SingleStore Kai, MongoDB-сумісним API, що пропонується SingleStore. Хоча LangChain вже підтримує SingleStore, поява Kai дає змогу розробникам використовувати робочі процеси на основі MongoDB з високопродуктивною, масштабованою базою даних. За допомогою швидкого тесту ця стаття показує, що LangChain та Kai можуть працювати разом, відкриваючи можливості для створення додатків з підтримкою ШІ.

Файл з блокнотом, використаний у цій статті, доступний на GitHub.

Вступ

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

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

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

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

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

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

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

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

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

Спочатку створимо клієнт, базу даних та колекцію:

kai_client = pymongo.MongoClient(connection_url_kai)  
db = kai_client["langchain_demo"]  
collection = db["langchain_docs"]

connection_url_kai — це змінна середовища, яка вже вказує на екземпляр Kai.

Далі ми перевіримо, чи доступний API-ключ OpenAI:

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

Тепер ми підготуємо деякі документи, використовуючи приклади з сайту Ollama.
Ми також налаштуємо модель вбудовування OpenAI та визначимо довжину векторних вбудовувань.

documents = [  
 "Лами є членами родини верблюдових, що означає, що вони дуже тісно пов'язані з вікуньями та верблюдами",  
 "Лами були вперше одомашнені та використовувалися як в'ючні тварини 4,000–5,000 років тому в перуанських горах",  
 "Лами можуть досягати до 6 футів у висоту, хоча середній зріст лами коливається між 5 футами 6 дюймами та 5 футами 9 дюймами",  
 "Лами важать від 280 до 450 фунтів і можуть нести 25–30 відсотків своєї ваги",  
 "Лами є вегетаріанцями і мають дуже ефективні травні системи",  
 "Лами живуть до 20 років, хоча деякі живуть лише 15 років, а інші можуть досягти 30 років"  
]  

embeddings = OpenAIEmbeddings(  
 model = "text-embedding-3-small"  
)  

dimensions = len(embeddings.embed_query(documents[0]))  

docs = [Document(text) for text in documents]

Тепер ми створимо векторний індекс, як показано нижче:

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

Далі ми збережемо документи та вбудовування в SingleStore:

docsearch = MongoDBAtlasVectorSearch.from_documents(  
 docs,  
 embeddings,  
 collection = collection,  
 index_name = "vector_index"  
)

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

prompt = "Які тварини є родичами лам?"  
docs = docsearch.similarity_search(prompt)  
data = docs[0].page_content  
print(data)

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

Лами є членами родини верблюдових, що означає, що вони дуже тісно пов'язані з вікуньями та верблюдами

Далі ми використаємо LLM, як показано нижче:

openai_client = OpenAI()  

response = openai_client.chat.completions.create(  
 model = "gpt-4o-mini",  
 messages = [  
 {"role": "system", "content": "Ви корисний помічник. Надати більше деталей."},  
 {"role": "user", "content": f"Використовуючи ці дані: {data}. Відповідайте на це запитання: {prompt}"}  
 ]  
)  
print(response.choices[0].message.content)

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

Лами пов'язані з кількома тваринами в межах родини верблюдових. Найближчі родичі лам включають:  

1. **Вікуньї** – Це дикі південноамериканські верблюдові, які зовні схожі на лам, але менші й відомі своєю тонкою шерстю.  

2. **Апаки** – Апаки — це одомашнені верблюдові, які тісно пов'язані з ламами і головним чином розводяться заради їх м'якої та розкішної шерсті.  

3. **Гуанаки** – Гуанаки — це дикі родичі лам, також рідні для Південної Америки. Вони схожі за будовою та перевагами середовища.  

4. **Верблюди** – Хоча вони не є рідними для Південної Америки, верблюди (як одногорбі, так і багатогорбі) належать до тієї ж родини (Camelidae), що й лами, отже, є їх далекими родичами.  

Ці зв'язки підкреслюють різноманіття всередині родини верблюдових і тісні зв'язки між цими видами.

Підсумок

MongoDBAtlasVectorSearch з LangChain надає розширене API, і ми протестували лише невелику частину. Однак результати поки що виглядають обіцяючими. Потрібно провести подальші тести, щоб визначити повний рівень сумісності між MongoDBAtlasVectorSearch і Kai.

Перекладено з: Quick tip: Using LangChain’s MongoDBAtlasVectorSearch with SingleStore Kai

Leave a Reply

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