Швидкий тест, щоб визначити, чи працюватиме 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