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
yarn add @langchain/openai @langchain/community
pnpm add @langchain/openai @langchain/community
使用
安全
不应将用户名等用户生成的数据用作集合名称的输入。
这可能会导致 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 参考
- AnalyticDBVectorStore 来自
@langchain/community/vectorstores/analyticdb
- OpenAIEmbeddings 来自
@langchain/openai