Warning
新版本将向量库从 qdrant 变更为 supabase,请注意相关参数变更!
vercel 部署需要配置环境变量 NEXT_PUBLIC_ENABLE_NODEJS_PLUGIN=1 来强制开启 node 运行时,不过免费版本的 vercel 对 node 运行时限制较多,不建议在 vercel 下使用。
以下为早期实现原理,部分逻辑与最新版本存在差异,仅供参考
- 由于接口中使用 nodejs 运行时,在 vercel 环境下接口可能会超时,建议使用 docker 部署
- 由于其他插件会影响到模型对 RAG 检索插件的调用,所以目前的做法是上传文件后默认只保留 RAG 插件的开启,其他插件将被禁用
- 已创建的向量数据不会删除
- 同一聊天窗口内即使“清除聊天”也可以访问已经上传的文件内容
- txt
- md
- docx
- csv
- json
- srt
- mp3 (基于OpenAIWhisper)
- 登录 https://supabase.com 并创建一个账户
- 在控制面板中创建一个项目
- 在
Project Settings
API Settings
中获取URL
和service_role secret
- 在
SQL Editor
中执行下面脚本创建表和函数(需根据[模型维度参考]修改vector(1536)中的维度数据)
-- Enable the pgvector extension to work with embedding vectors
create extension vector;
-- Create a table to store your documents
create table documents (
id bigserial primary key,
content text, -- corresponds to Document.pageContent
metadata jsonb, -- corresponds to Document.metadata
embedding vector(1536) -- 1536 works for OpenAI embeddings, change if needed
);
-- Create a function to search for documents
create function match_documents (
query_embedding vector(1536),
match_count int DEFAULT null,
filter jsonb DEFAULT '{}'
) returns table (
id bigint,
content text,
metadata jsonb,
embedding jsonb,
similarity float
)
language plpgsql
as $$
#variable_conflict use_column
begin
return query
select
id,
content,
metadata,
(embedding::text)::jsonb as embedding,
1 - (documents.embedding <=> query_embedding) as similarity
from documents
where metadata @> filter
order by documents.embedding <=> query_embedding
limit match_count;
end;
$$;
- 完善下面的环境变量配置后即可使用
如果你想启用 RAG 功能,将此环境变量设置为 1 即可。
supabase 项目 url。
supabase 项目 service_role secret。
分割后文档的最大大小(按字符数计算),默认:2000。
分割文档时块重叠数量,默认:200。
检索时返回的文档数量,默认:4。
向量化时使用的向量模型,默认:text-embedding-3-large。 可选项:
- text-embedding-3-small
- text-embedding-3-large
- text-embedding-ada-002
新增支持 ollama embedding 模型支持。
此处配置为 ollama 服务地址,如:http://localhost:11434
配置后请修改参数 RAG_EMBEDDING_MODEL
为 ollama 的 embedding 模型名。
上面的数据库初始化语句中的 vector(1536)
也要修改为你的向量模型所使用的维度。
嵌入模型名 | 维度 | 提供者 |
---|---|---|
text-embedding-3-small | 1536 | openai |
text-embedding-3-large | 3072 | openai |
text-embedding-ada-002 | 1536 | openai |
snowflake-arctic-embed | 1024 | ollama |
mxbai-embed-large | 1024 | ollama |
nomic-embed-text | 768 | ollama |