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
- Yarn
- pnpm
npm install -S pg
yarn add pg
pnpm add pg
我们还需要 pg-copy-streams 来快速批量添加向量。
- npm
- Yarn
- pnpm
npm install -S pg-copy-streams
yarn add pg-copy-streams
pnpm add pg-copy-streams
:::提示 请参阅安装集成包的一般说明部分。 :::
- npm
- Yarn
- pnpm
npm install @langchain/openai @langchain/community @langchain/core
yarn add @langchain/openai @langchain/community @langchain/core
pnpm add @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 Reference:
- AnalyticDBVectorStore from
@langchain/community/vectorstores/analyticdb - OpenAIEmbeddings from
@langchain/openai
相关内容
Related
- Vector store conceptual guide
- Vector store how-to guides