ChatGPT-Next-Web/docs/rag-cn.md
2024-07-23 11:24:10 +08:00

143 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# RAG 功能配置说明
> [!WARNING]
> 新版本将向量库从 qdrant 变更为 supabase请注意相关参数变更
>
> vercel 部署需要配置环境变量 NEXT_PUBLIC_ENABLE_NODEJS_PLUGIN=1 来强制开启 node 运行时,不过免费版本的 vercel 对 node 运行时限制较多,不建议在 vercel 下使用。
## 效果图
![image-20240707152914436](./images/rag-example-2.jpg)
## 原理
以下为早期实现原理,部分逻辑与最新版本存在差异,仅供参考
![example](./images/rag.png)
## 使用须知
- 由于接口中使用 nodejs 运行时,在 vercel 环境下接口可能会超时,建议使用 docker 部署
- 由于其他插件会影响到模型对 RAG 检索插件的调用,所以目前的做法是上传文件后默认只保留 RAG 插件的开启,其他插件将被禁用
- 已创建的向量数据不会删除
- 同一聊天窗口内即使“清除聊天”也可以访问已经上传的文件内容
## 支持的文件类型
- txt
- md
- pdf
- docx
- csv
- json
- srt
- mp3 (基于OpenAIWhisper)
## 配置
1. 登录 https://supabase.com 并创建一个账户
2. 在控制面板中创建一个项目
3.`Project Settings` `API Settings` 中获取 `URL``service_role secret`
4.`SQL Editor` 中执行下面脚本创建表和函数(需根据[模型维度参考]修改vector(1536)中的维度数据)
```sql
-- 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;
$$;
```
5. 完善下面的环境变量配置后即可使用
## 环境变量
### `ENABLE_RAG`
如果你想启用 RAG 功能,将此环境变量设置为 1 即可。
### `SUPABASE_URL`
supabase 项目 url。
### `SUPABASE_PRIVATE_KEY`
supabase 项目 service_role secret。
### `RAG_CHUNK_SIZE` (可选)
分割后文档的最大大小按字符数计算默认2000。
### `RAG_CHUNK_OVERLAP` (可选)
分割文档时块重叠数量默认200。
### `RAG_RETURN_COUNT` (可选)
检索时返回的文档数量默认4。
### `RAG_EMBEDDING_MODEL` (可选)
向量化时使用的向量模型默认text-embedding-3-large。
可选项:
- text-embedding-3-small
- text-embedding-3-large
- text-embedding-ada-002
### `OLLAMA_BASE_URL` (可选)
新增支持 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 |