跳至主要内容

AnalyticDB

AnalyticDB for PostgreSQL 是一种大规模并行处理 (MPP) 数据仓库服务,旨在在线分析大量数据。

AnalyticDB for PostgreSQL 基于开源 Greenplum Database 项目开发,并由 阿里云 深入扩展。AnalyticDB for PostgreSQL 兼容 ANSI SQL 2003 语法以及 PostgreSQL 和 Oracle 数据库生态系统。AnalyticDB for PostgreSQL 还支持行存储和列存储。AnalyticDB for PostgreSQL 以高性能水平处理 PB 级数据,并支持高并发在线查询。

此笔记本展示了如何使用与 AnalyticDB 向量数据库相关的功能。

要运行,您应该有一个已启动并运行的 AnalyticDB 实例。

兼容性

仅适用于 Node.js。

设置

LangChain.js 接受 node-postgres 作为 AnalyticDB 向量存储的连接池。

npm install -S pg

我们还需要 pg-copy-streams 来快速添加批量向量。

npm install -S pg-copy-streams
npm install @langchain/openai @langchain/community @langchain/core

用法

安全

不要将用户生成的数据(例如用户名)用作集合名的输入。
这可能会导致 SQL 注入!

import { AnalyticDBVectorStore } from "@langchain/community/vectorstores/analyticdb";
import { OpenAIEmbeddings } from "@langchain/openai";

const connectionOptions = {
host: process.env.ANALYTICDB_HOST || "localhost",
port: Number(process.env.ANALYTICDB_PORT) || 5432,
database: process.env.ANALYTICDB_DATABASE || "your_database",
user: process.env.ANALYTICDB_USERNAME || "username",
password: process.env.ANALYTICDB_PASSWORD || "password",
};

const vectorStore = await AnalyticDBVectorStore.fromTexts(
["foo", "bar", "baz"],
[{ page: 1 }, { page: 2 }, { page: 3 }],
new OpenAIEmbeddings(),
{ connectionOptions }
);
const result = await vectorStore.similaritySearch("foo", 1);
console.log(JSON.stringify(result));
// [{"pageContent":"foo","metadata":{"page":1}}]

await vectorStore.addDocuments([{ pageContent: "foo", metadata: { page: 4 } }]);

const filterResult = await vectorStore.similaritySearch("foo", 1, {
page: 4,
});
console.log(JSON.stringify(filterResult));
// [{"pageContent":"foo","metadata":{"page":4}}]

const filterWithScoreResult = await vectorStore.similaritySearchWithScore(
"foo",
1,
{ page: 3 }
);
console.log(JSON.stringify(filterWithScoreResult));
// [[{"pageContent":"baz","metadata":{"page":3}},0.26075905561447144]]

const filterNoMatchResult = await vectorStore.similaritySearchWithScore(
"foo",
1,
{ page: 5 }
);
console.log(JSON.stringify(filterNoMatchResult));
// []

// need to manually close the Connection pool
await vectorStore.end();

API 参考


此页面是否有帮助?


您也可以在 GitHub 上留下详细的反馈 GitHub.