Skip to main content
Teradata Vector Store 专为在企业数据平台中高效存储、索引和搜索高维向量嵌入而设计。
本指南展示如何快速启动并运行 TeradataVectorStore,用于语义搜索和 RAG 应用。无论你是 Teradata 新手还是希望为现有数据工作流添加 AI 能力,本指南都将带你了解所需的一切。 TeradataVectorStore 的特色
  • 基于企业级 Teradata Vantage 平台构建。
  • 与现有数据仓库无缝集成。
  • 支持多种向量搜索算法,适用于不同场景。
  • 可从原型扩展到生产工作负载。

设置

在开始之前,你需要安装必要的包。TeradataVectorStore 是 langchain-teradata 包的一部分,该包还包含其他 Teradata 与 LangChain 的集成。 Teradata 新手? 请参阅:

安装

pip
pip install langchain-teradata

凭据

连接到 Teradata: create_context() 函数建立与 Teradata Vantage 系统的连接。teradataml(以及 TeradataVectorStore)通过此方式确定连接和认证的数据库。 所需信息:
  • hostname:Teradata 系统地址
  • username/password:数据库凭据
  • base_url:Teradata 系统的 API 端点
  • pat_token:用于 API 认证的个人访问令牌
  • pem_file:用于安全连接的 SSL 证书文件
更多信息 请查阅 Teradata Vector Store 用户指南了解详细设置说明。 有关 teradataml 的信息 请参阅 TeradataML 用户指南
import os
from getpass import getpass
from teradataml import create_context

os.environ['TD_HOST'] = getpass(prompt='hostname: ')
os.environ['TD_USERNAME'] = getpass(prompt='username: ')
os.environ['TD_PASSWORD'] = getpass(prompt='password: ')
os.environ['TD_BASE_URL'] = getpass(prompt='base_url: ')
os.environ['TD_PAT_TOKEN'] = getpass(prompt='pat_token: ')
os.environ['TD_PEM_FILE'] = getpass(prompt='pem_file: ')
create_context()

实例化

初始化嵌入 TeradataVectorStore 支持三种嵌入对象类型:
  1. 字符串标识符(例如,“amazon.titan-embed-text-v1”)
  2. TeradataAI 对象
  3. LangChain 嵌入对象 - 兼容 LangChain 的嵌入模型对象
# Initialize embeddings
from langchain_aws import BedrockEmbeddings
embeddings = BedrockEmbeddings(model_id="amazon.titan-embed-text-v1", region_name="us-west-2")
创建第一个向量存储 让我们从一些示例文档开始创建向量存储。from_documents() 方法是最简单的入门方式——只需传入文档,TeradataVectorStore 会处理其余工作。 底层工作原理:
  • 文档被转换为 Teradataml Dataframe 并传递给向量存储
  • 为每个 Document 对象生成并存储嵌入
  • 自动创建索引以实现快速相似度搜索和对话操作
from langchain_teradata import TeradataVectorStore
from langchain_core.documents import Document
# Sample documents about different topics
docs = [
    Document(page_content="Teradata provides scalable data analytics solutions for enterprises."),
    Document(page_content="Machine learning models require high-quality training data to perform well."),
    Document(page_content="Vector databases enable semantic search capabilities beyond keyword matching."),
    Document(page_content="LangChain simplifies building applications with large language models."),
    Document(page_content="Data warehousing has evolved to support real-time analytics and AI workloads.")
]

# Create the vector store
vs = TeradataVectorStore.from_documents(
    name="my_knowledge_base",
    documents=docs,
    embedding=embeddings
)

print("Vector store created successfully!")
创建向量存储后,最好验证一切设置是否正确。TeradataVectorStore 提供了有用的方法来监控操作并了解后台发生的情况。 为什么要检查状态?
  • 操作追踪:查看向量存储创建所处的具体阶段。
  • 故障排除:快速识别设置过程中是否出现问题。
  • 进度监控:对于大型数据集,追踪嵌入生成进度。
  • 验证:确认向量存储已准备好接受查询。
# Check the status of the store.
vs.status()
想查看向量存储的实际内容?get_details() 方法提供了设置的全面概览——可以将其视为向量存储的”仪表板”。 你将看到:
  • 对象清单:已添加的表或文档数量。
  • 搜索参数:当前算法设置(HNSW、K-means 等)
  • 配置详情:嵌入维度、距离度量和索引选项。
  • 性能设置:Top-k 值、相似度阈值和其他查询参数。
vs.get_details()

管理向量存储

向向量存储添加项目

TeradataVectorStore 最大的优点之一是扩展知识库非常简便。随着业务增长和文档增多,你可以持续添加内容,无需从头重建。 实际应用场景:
  • 创建新产品文档时即时添加。
  • 纳入最新的研究论文或行业报告。
  • 整合客户反馈和支持文档。
  • 更新最新的政策或流程变更。
企业优势: 由于一切都在 Teradata 上运行,你可以轻松从现有表、数据仓库或实时数据流添加数据,无需复杂的数据迁移。
# Add more documents
additional_docs = [
    Document(page_content="Retrieval-augmented generation combines the power of search with language models."),
    Document(page_content="Teradata's vector capabilities support both structured and unstructured data analysis.")
]

vs.add_documents(documents=additional_docs)
print("Added more knowledge to the vector store!")
# Check the status of the new store.
vs.status()

查询向量存储

向量存储创建完成并添加相关文档后,你通常会在运行链或 Agent 时对其进行查询。

直接查询

现在让我们在向量存储中搜索信息。与传统关键词搜索不同,向量搜索能理解问题背后的含义。询问”AI 应用”可能会返回关于”机器学习模型”的结果,因为它理解这些概念之间的关联。 相似度搜索的工作原理:
  • 你的问题被转换为向量嵌入(与文档的处理方式相同)。
  • TeradataVectorStore 计算问题与存储文档之间的相似度分数。
  • 返回最相关的结果,按相似度排序。
# Ask a question
question = "What are vector databases?"
results = vs.similarity_search(question=question, return_type = "json")

print("Found relevant information:")
for result in results.similar_objects:
    print(f" {result}")

转换为检索器进行查询

你也可以将向量存储转换为检索器,以便在链中更方便地使用。
# Create a retriever for your RAG pipeline
retriever = vs.as_retriever(search_type="similarity")

# Test the retriever
retrieved_docs = retriever.invoke("Tell me about Teradata's capabilities")

print("Retrieved documents for RAG:")
for doc in retrieved_docs:
    print(f"- {doc.page_content}")

用于检索增强生成

ask() 将向量搜索的能力与语言模型生成相结合。不再只是返回原始文档块,而是提供连贯、有上下文的答案。 两步处理流程:
  1. 检索:从向量存储中找到最相关的文档。
  2. 生成:将这些文档作为上下文生成自然语言回答。
为何如此强大: AI 回答基于实际数据,减少幻觉并确保准确性。就像拥有一位真正读过公司文档的知识渊博的助手!
# Get a comprehensive answer
response = vs.ask(question="What are the benefits of using vector databases?")
print("AI Response:")
print(response)
检索增强生成(RAG)是驱动大多数现代 AI 助手和聊天机器人的技术。TeradataVectorStore 与 LangChain 无缝集成,使构建 RAG 应用变得简单直接。 优质 RAG 应用的要素:
  • 相关检索:向量存储找到正确的信息。
  • 上下文生成:语言模型有效利用这些信息。
  • 来源透明:用户可以看到答案的来源。
与 TeradataVectorStore 的协作方式
  • 你可以将向量存储用作检索器获取最相关的文档,然后将这些文档传递给 LangChain 工作流中的 RAG 链。
  • 这使你在利用 Teradata 强大向量搜索能力的同时,能够灵活构建自定义管道。
现在让我们构建一个完整的 RAG 管道,将 TeradataVectorStore 检索器与语言模型结合。这展示了 RAG 的完整能力——从向量存储检索相关信息并用于生成有据可查的回答。 管道工作原理:
  • 检索:向量存储为问题找到最相关的文档。
  • 上下文准备:这些文档成为语言模型的上下文。
  • 生成:语言模型基于实际数据生成答案。
  • 输出解析:为应用程序提供整洁、格式化的响应。
实际应用:
  • 客户支持:使用产品文档回答问题。
  • 研究辅助:查询组织的知识库。
  • 合规:确保响应基于经批准的公司信息。
from langchain_core.runnables import RunnablePassthrough
from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain.chat_models import init_chat_model

#Example: Simple RAG chain
# Initialize the chat model
llm = init_chat_model("anthropic.claude-3-5-sonnet-20240620-v1:0", 
                      model_provider="bedrock_converse", 
                      region_name="<ENTER REGION>",
                      aws_access_key_id = "<ENTER AWS ACCESS KEY>" ,
                      aws_secret_access_key = "<ENTER AWS SECRET KEY>"
                      )


# Create a prompt template for the LLM to format its response using retrieved context
prompt = PromptTemplate.from_template(
    "Use the following context to answer the question.\nContext:\n{context}\n\nQuestion: {question}\nAnswer:"
)

# Build the RAG chain: retrieve context, format prompt, generate answer, and parse output
rag_chain = (
    {
        "context": retriever,
        "question": RunnablePassthrough()
    }
    | prompt
    | llm
    | StrOutputParser()
)

# Invoke the RAG chain with a sample question and print the response
response = rag_chain.invoke("Benefits of Vector Store")
print(response)

处理不同数据类型

在处理不同类型的数据源时,TeradataVectorStore 的灵活性得到了充分体现。根据起始数据,你可以选择最合适的方法。 选择起点:
  • 有 PDF 文档? 使用带文件路径的 from_documents()
  • 处理数据库表? 使用带 DataFrame 的 from_datasets()
  • 已有嵌入? 使用 from_embeddings() 直接导入

从 PDF 文件

# File-based vector store from PDFs
pdf_vs = TeradataVectorStore.from_documents(
    name="pdf_knowledge",
    documents="path/to/your/document.pdf",  # or list of PDF paths
    embedding=embeddings
)

从数据库表

# Content-based from existing tables
from teradataml import DataFrame
table_data = DataFrame('your_table_name')

table_vs = TeradataVectorStore.from_datasets(
    name="table_knowledge", 
    data=table_data,
    data_columns=["text_column"],
    embedding=embeddings
)

从预计算嵌入

# If you already have embeddings
embedding_vs = TeradataVectorStore.from_embeddings(
    name="embedding_store",
    data=your_embedding_data,
    data_columns="embedding_column"
)
注意
处理表(及嵌入表)时,data_columns 参数是必填的。它告诉 TeradataVectorStore 哪些列包含你要转换为嵌入的文本内容。可以将其理解为指引服务找到正确信息的指针。
例如,如果你的表包含 id、title、description 和 category 等列,可以指定 data_columns=[“description”] 只嵌入描述文本,或指定 data_columns=[“title”, “description”] 合并两个字段。 以下是使用 teradatagenai 加载示例表并创建基于内容的向量存储的简单示例。对于 data_columns,我们将传入”rev_text”列,用于生成嵌入。
from teradatagenai import load_data

# Load sample data into Teradata
load_data("byom", "amazon_reviews_25")

# Create a vector store from the Teradata table
td_vs = TeradataVectorStore.from_datasets(
    name="table_store_amazon",
    data="amazon_reviews_25",
    data_columns="rev_text",
    embedding=embeddings)
# Check the status of the new store
td_vs.status()

后续步骤

恭喜!你刚刚使用 TeradataVectorStore 构建了第一个 AI 驱动的搜索和 RAG 系统。现在可以将其扩展以处理真实的企业工作负载了。 准备深入探索?
  • 高级搜索算法:尝试 HNSW 或 K-means 聚类用于大规模部署
  • 自定义嵌入模型:尝试针对你所在行业的领域专用嵌入
  • 实时更新:建立管道在新数据到达时自动更新向量存储
生产注意事项:
  • 安全性:利用 Teradata 的企业级安全功能
  • 监控:使用 Teradata 内置的性能监控
了解更多:

API 参考

有关 TeradataVectorStore 所有功能和配置的详细文档,请参阅 API 参考。 langchain-teradata 用户指南