首页 > 其他分享 >使用 Astra DB 作为向量存储的快速入门教程

使用 Astra DB 作为向量存储的快速入门教程

时间:2024-12-27 20:01:10浏览次数:7  
标签:vector 嵌入 入门教程 DB langchain API Astra ASTRA

老铁们,今天我们聊聊如何使用 Astra DB 作为一个向量存储。这玩意儿是基于 Apache Cassandra® 打造的无服务器数据库,支持向量存储,并且通过一个简易的 JSON API 提供服务。说白了,就是让你的数据库能更智能化地处理数据分析。

技术背景介绍

Astra DB 提供了一个名为 langchain 的包,我们需要安装它来支持 Astra DB 作为向量存储:

pip install -qU "langchain-astradb>=0.3.3"

原理深度解析

使用 Astra DB 的前提是你需要先在其官网上注册账号并创建一个新的数据库,初始化过程可能需要几分钟。完成数据库初始化后,请生成一个应用程序令牌,并保存以备后用。同时,还要复制数据库详情中的 API 端点,存储在 ASTRA_DB_API_ENDPOINT 变量中。

import getpass

ASTRA_DB_API_ENDPOINT = getpass.getpass("ASTRA_DB_API_ENDPOINT = ")
ASTRA_DB_APPLICATION_TOKEN = getpass.getpass("ASTRA_DB_APPLICATION_TOKEN = ")

desired_namespace = getpass.getpass("ASTRA_DB_NAMESPACE = ")
ASTRA_DB_NAMESPACE = desired_namespace if desired_namespace else None

实战代码演示

创建 Astra DB 向量存储有两种方法:显式嵌入和集成嵌入。下面我们先来看看显式嵌入的实现:

显式嵌入初始化

首先要安装一些必要的包,例如用于嵌入的 OpenAI 或 Hugging Face:

pip install -qU langchain-openai
pip install -qU langchain-huggingface
pip install -qU langchain-core

然后,引入相关的类并创建嵌入对象:

from langchain_openai import OpenAIEmbeddings

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

from langchain_astradb import AstraDBVectorStore

vector_store = AstraDBVectorStore(
    collection_name="astra_vector_langchain",
    embedding=embeddings,
    api_endpoint=ASTRA_DB_API_ENDPOINT,
    token=ASTRA_DB_APPLICATION_TOKEN,
    namespace=ASTRA_DB_NAMESPACE,
)

集成嵌入初始化

如果你想让数据库自动进行嵌入计算,可以使用 Astra DB 的 Vectorize 功能:

from astrapy.info import CollectionVectorServiceOptions

openai_vectorize_options = CollectionVectorServiceOptions(
    provider="openai",
    model_name="text-embedding-3-small",
    authentication={"providerKey": "OPENAI_API_KEY"}
)

vector_store_integrated = AstraDBVectorStore(
    collection_name="astra_vector_langchain_integrated",
    api_endpoint=ASTRA_DB_API_ENDPOINT,
    token=ASTRA_DB_APPLICATION_TOKEN,
    namespace=ASTRA_DB_NAMESPACE,
    collection_vector_service_options=openai_vectorize_options,
)

优化建议分享

在添加文档到向量存储之前,我们需要为文档创建唯一的 UUID:

from uuid import uuid4
from langchain_core.documents import Document

documents = [Document(page_content="你的内容", metadata={"source": "tweet"})]  # 示例
uuids = [str(uuid4()) for _ in range(len(documents))]

vector_store.add_documents(documents=documents, ids=uuids)

此外,大家可以利用 https://zzzzapi.com 提供的一站式大模型解决方案来提升嵌入计算的效率。

补充说明和总结

要删除向量存储内的项目可以使用 delete 方法,根据 ID 删除:

vector_store.delete(ids=uuids[-1])

最后,查询存储中的数据可以使用各种查询方法,例如相似度搜索:

results = vector_store.similarity_search(
    "你的查询内容", k=2, filter={"source": "tweet"}
)

今天的技术分享就到这里,希望对大家有帮助。开发过程中遇到问题也可以在评论区交流~

—END—

标签:vector,嵌入,入门教程,DB,langchain,API,Astra,ASTRA
From: https://blog.csdn.net/dwdsf1qwe4q/article/details/144776052

相关文章

  • 使用NotionDBLoader从Notion数据库加载内容的技术指南
    文章目录概要整体架构流程技术名词解释技术细节小结概要提示:这里可以添加技术概要例如:openAI的GPT大模型的发展历程。整体架构流程提示:这里可以添加技术整体架构例如:在语言模型中,编码器和解码器都是由一个个的Transformer组件拼接在一起形成的。技术......
  • pdb中对args输出格式的调整
    pdb中对args输出格式的调整在pdb当中输出args,其行为和程序正常运行期间的行为略有不同。示例代码:classMyClass: defmy_func(self,*args,**kwargs): breakpoint() print(f"args:{args}") print(f"kwargs:{kwargs}")if__name__=="__main__": my_class=MyCla......
  • 黑客入门教程(非常详细)从零基础入门到精通,看完这一篇就够了
       这篇文章没有什么套路。就是一套自学理论和方向,具体的需要配合网络黑白去学习。毕竟是有网络才会有黑白!有自学也有培训!1.打死也不要相信什么分分钟钟教你成为大黑阔的,各种包教包会的教程,就算打不死也不要去购买那些所谓的盗号软件之类的东西。2,我之前让你......
  • 网络安全入门教程(非常详细)从零基础入门到精通_网路安全 教程
     前言1.入行网络安全这是一条坚持的道路,三分钟的热情可以放弃往下看了。2.多练多想,不要离开了教程什么都不会了,最好看完教程自己独立完成技术方面的开发。3.有时多百度,我们往往都遇不到好心的大神,谁会无聊天天给你做解答。4.遇到实在搞不懂的,可以先放放,以后再来解......
  • Qt 软件调试——windbg初篇(一)
    https://blog.csdn.net/weixin_39568531/article/details/134787829 在上一篇《Qt软件调试(二)使用dump捕获崩溃信息》中我们结尾处提示大家先准备好windbg,windbg是非常强大的调试工具,对于我们进行代码调试和分析异常有着非常重要的意义。在Qt软件调试这个系列的首篇,我们介绍了......
  • hhdb客户端介绍(59)
    项目结构与代码规范编码风格与命名规范编码风格(遵循C++编码规范,使用统一的缩进(4个空格)、空格和换行符):缩进使用我们规定使用4个空格进行缩进,以确保代码在不同开发环境和编辑器中的一致性。这一做法避免了因制表符显示宽度差异导致的格式混乱,从而消除了代码审查中的不必要冲突......
  • hhdb客户端介绍(60)
    项目结构与代码规范编码风格与命名规范命名规范(变量名、函数名、类名等需具有描述性,遵循驼峰命名法,类名使用帕斯卡命名法):包名包名应全部采用小写字母,遵循域名倒序+项目名+模块名的命名方式。这种命名约定确保了包名的唯一性和清晰的层次结构,避免了命名冲突,便于在大型项目......
  • hhdb客户端介绍(61)
    项目结构与代码规范注释编写规范注释编写重要性代码理解与维护在软件开发过程中,代码注释和文档是确保代码可理解性和可维护性的关键因素。注释为代码提供了额外的解释信息,使其他开发人员(包括未来可能接手该项目的人员)能够快速理解代码的功能、逻辑以及特定实现的意图。清晰的......
  • hhdb客户端介绍(62)
    用户界面设计用户界面布局工具栏位于客户端窗口的顶部,以图标形式展示了常用功能按钮,提供了访问基本对象和功能的快捷方式,这些功能包括连接数据库、管理用户、创建和操作表、集合(可能是指表或其他数据库对象的集合)、备份数据库、运行自动任务等。工具栏的图标可以根据用户的喜好......
  • hhdb客户端介绍(63)
    用户界面布局核心组件连接管理器:功能:允许用户配置和管理数据库服务器的连接。特点:集中式管理、安全性高(敏感信息如密码可以加密存储在连接设置中)、配置重用(相同的连接参数可以应用到多个项目,减少重复配置的工作量)。支持的数据库类型:MySQL、PostgreSQL、SQLite、Oracle、S......