探索SAP HANA Cloud Vector Engine:从设置到自查询的全面指南
在数据科学和人工智能的世界中,SAP HANA Cloud Vector Engine提供了强大的向量存储能力。本文将深入探讨如何使用SAP HANA Cloud向量引擎,设置向量存储及其自查询功能。
引言
在处理大量数据时,能够高效地存储和检索数据是至关重要的。SAP HANA Cloud Vector Engine作为一种高效的向量存储解决方案,帮助开发者处理复杂数据查询。本文旨在提供详细的步骤帮助用户在SAP HANA中设置向量存储,并实现自查询功能。
1. 初始设置
连接到SAP HANA数据库
在开始之前,确保你已具备必要的环境变量设置用于连接数据库。
import os
from hdbcli import dbapi
# 建立数据库连接
connection = dbapi.connect(
address=os.environ.get("HANA_DB_ADDRESS"),
port=os.environ.get("HANA_DB_PORT"),
user=os.environ.get("HANA_DB_USER"),
password=os.environ.get("HANA_DB_PASSWORD"),
autocommit=True,
sslValidateCertificate=False,
)
2. 创建向量存储表
为了能够进行自查询,需要在HANA中创建一个包含元数据的向量存储表。
# 创建自定义表
cur = connection.cursor()
cur.execute("DROP TABLE LANGCHAIN_DEMO_SELF_QUERY", ignoreErrors=True)
cur.execute(
(
"""CREATE TABLE "LANGCHAIN_DEMO_SELF_QUERY" (
"name" NVARCHAR(100), "is_active" BOOLEAN, "id" INTEGER, "height" DOUBLE,
"VEC_TEXT" NCLOB,
"VEC_META" NCLOB,
"VEC_VECTOR" REAL_VECTOR
)"""
)
)
3. 添加文档到向量存储
接下来,使用langchain
库将文档添加到刚刚创建的表中。
from langchain_community.vectorstores.hanavector import HanaDB
from langchain_core.documents import Document
from langchain_openai import OpenAIEmbeddings
embeddings = OpenAIEmbeddings()
docs = [
Document(
page_content="First",
metadata={"name": "adam", "is_active": True, "id": 1, "height": 10.0},
),
Document(
page_content="Second",
metadata={"name": "bob", "is_active": False, "id": 2, "height": 5.7},
),
Document(
page_content="Third",
metadata={"name": "jane", "is_active": True, "id": 3, "height": 2.4},
),
]
db = HanaDB(
connection=connection,
embedding=embeddings,
table_name="LANGCHAIN_DEMO_SELF_QUERY",
specific_metadata_columns=["name", "is_active", "id", "height"],
)
# 删除现有文档
db.delete(filter={})
db.add_documents(docs)
4. 实现自查询功能
通过SelfQueryRetriever
实现对向量存储表的自查询。
from langchain.chains.query_constructor.base import AttributeInfo
from langchain.retrievers.self_query.base import SelfQueryRetriever
from langchain_community.query_constructors.hanavector import HanaTranslator
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-3.5-turbo")
metadata_field_info = [
AttributeInfo(
name="name",
description="The name of the person",
type="string",
),
AttributeInfo(
name="is_active",
description="Whether the person is active",
type="boolean",
),
AttributeInfo(
name="id",
description="The ID of the person",
type="integer",
),
AttributeInfo(
name="height",
description="The height of the person",
type="float",
),
]
document_content_description = "A collection of persons"
hana_translator = HanaTranslator()
retriever = SelfQueryRetriever.from_llm(
llm,
db,
document_content_description,
metadata_field_info,
structured_query_translator=hana_translator,
)
# 查询不活跃的人
query_prompt = "Which person is not active?"
docs = retriever.invoke(input=query_prompt)
for doc in docs:
print("-" * 80)
print(doc.page_content, " ", doc.metadata)
5. 了解查询构建过程
了解内部查询的结构是诊断和优化系统性能的关键。
from langchain.chains.query_constructor.base import (
StructuredQueryOutputParser,
get_query_constructor_prompt,
)
prompt = get_query_constructor_prompt(
document_content_description,
metadata_field_info,
)
output_parser = StructuredQueryOutputParser.from_components()
query_constructor = prompt | llm | output_parser
sq = query_constructor.invoke(input=query_prompt)
print("Structured query: ", sq)
print("Translated for hana vector store: ", hana_translator.visit_structured_query(sq))
常见问题和解决方案
- 网络连接问题:由于网络限制,建议开发者在请求API时考虑使用API代理服务,以提高访问的稳定性。
- 数据库连接失败:确保环境变量正确配置并且网络连接可达。
- 数据插入失败:检查表结构及数据格式是否匹配。
总结与进一步学习资源
本文详细介绍了SAP HANA Cloud Vector Engine的设置和自查询功能的实现。有关更深入的学习,可以参考以下资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—
标签:Engine,name,HANA,langchain,Vector,import,query,SAP From: https://blog.csdn.net/hatjeagetju/article/details/144502775