chatgpt pgvector
1.0.0
Chatgpt非常适合休闲,通用的问题提问者,但是当需要特定于领域的知识时,Chatgpt不足。此外,它构成了填补知识空白的答案,并且从不引用其来源,因此无法真正被信任。该启动器应用程序使用嵌入式和矢量搜索的嵌入式应用程序来解决此问题,或更具体地说,以说明如何使用OpenAI的聊天完成API来创建对话界面以特定于领域的知识。
以浮点数为代表的向量表示嵌入,测量文本字符串的“相关性”。这些对于对搜索结果,聚类,分类等进行排名非常有用。相关性是通过余弦相似性来衡量的。如果两个向量之间的余弦相似性接近1,则向量高度相似,并指向相同的方向。在文本嵌入的情况下,两个嵌入向量之间的高余弦相似性表明相应的文本字符串高度相关。
该启动器应用使用嵌入式来生成文档的向量表示,然后使用向量搜索找到与查询的最相似文档。然后使用矢量搜索的结果来构建提示。然后将响应流向用户。查看有关PGVECTOR和OpenAI嵌入的Supabase博客文章,以获取更多背景。
使用的技术:
创建和存储嵌入:
回答查询:
以下设置指南至少假定具有React和NextJS的Web应用程序的基本熟悉度。使用OpenAI API和Supabase的经验很有帮助,但并不需要使事情正常工作。
Database → Extensions从Web门户进行。您也可以通过运行:在SQL中执行此操作: create extension vector;
create table documents (
id bigserial primary key ,
content text ,
url text ,
embedding vector ( 1536 )
); create or replace function match_documents (
query_embedding vector( 1536 ),
similarity_threshold float,
match_count int
)
returns table (
id bigint ,
content text ,
url text ,
similarity float
)
language plpgsql
as $$
begin
return query
select
documents . id ,
documents . content ,
documents . url ,
1 - ( documents . embedding <=> query_embedding) as similarity
from documents
where 1 - ( documents . embedding <=> query_embedding) > similarity_threshold
order by documents . embedding <=> query_embedding
limit match_count;
end;
$$;gh repo clone gannonh/chatgpt-pgvector cd chatgpt-pgvector
code .npm installcp .env.local.example .env.localProject → API下的Supabase Web门户中找到这些。 API密钥应存储在SUPABASE_ANON_KEY变量中,并且项目URL应存储在NEXT_PUBLIC_SUPABASE_URL下。API Keys下的OpenAI Web门户网站中找到此问题。 API键应存储在OPENAI_API_KEY变量中。OPEAI_PROXY可提供您的OpenAI API自定义代理。保留了""直接致电官方API。SPLASH_URL可以提供启用飞溅(Splash是JavaScript渲染服务。它是一个带有HTTP API的轻量级Web浏览器,使用twisted and qt5)在Python 3中实现了HTTP API。留下了""直接获取URL。npm run dev