Chatgpt는 캐주얼 한 일반 목적 질문 답변에 적합하지만 도메인 별 지식이 필요할 때 부족합니다. 또한 지식 격차를 메우기위한 답변을 작성하고 그 출처를 인용하지 않으므로 실제로 신뢰할 수 없습니다. 이 스타터 앱은 벡터 검색과 결합 된 임베딩을 사용하여이를 해결하기 위해 또는 더 구체적으로 OpenAI의 채팅 완료를 사용하여 도메인 별 지식에 대한 대화 인터페이스를 만드는 방법을 보여줍니다.
부동 소수점 번호의 벡터로 표시되는 임베딩은 텍스트 문자열의 "관련성"을 측정합니다. 이들은 검색 결과, 클러스터링, 분류 등 순위에 매우 유용합니다. 관련성은 코사인 유사성으로 측정됩니다. 두 벡터 사이의 코사인 유사성이 1에 가까운 경우 벡터는 매우 유사하고 동일한 방향을 가리 킵니다. 텍스트 임베딩의 경우, 두 임베딩 벡터 사이의 높은 코사인 유사성은 해당 텍스트 문자열이 매우 관련이 있음을 나타냅니다.
이 스타터 앱은 임베딩을 사용하여 문서의 벡터 표현을 생성 한 다음 벡터 검색을 사용하여 쿼리와 가장 유사한 문서를 찾습니다. 그런 다음 벡터 검색 결과를 사용하여 프롬프트를 구성합니다. 그런 다음 응답을 사용자에게 스트리밍합니다. 더 많은 배경은 pgvector 및 OpenAi 임베딩의 Supabase 블로그 게시물을 확인하십시오.
사용 된 기술 :
임베딩 생성 및 저장 :
쿼리에 대한 응답 :
다음 설정 가이드는 React 및 NextJS를 사용하여 웹 앱을 개발하는 최소한 기본적인 친숙 함을 가정합니다. OpenAI API 및 Supabase에 대한 경험은 도움이되지만 일을 작동시키는 데 도움이되지는 않습니다.
Database → Extensions 통해 웹 포털에서 수행 할 수 있습니다. 실행을 통해 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 웹 포털에서 찾을 수 있습니다. API 키는 SUPABASE_ANON_KEY 변수에 저장되어야하며 프로젝트 URL은 NEXT_PUBLIC_SUPABASE_URL 에 저장되어야합니다.API Keys 아래 OpenAi 웹 포털에서 찾을 수 있습니다. API 키는 OPENAI_API_KEY 변수에 저장해야합니다.OPEAI_PROXY OpenAI API의 사용자 정의 프록시를 가능하게합니다. "공식 API를 직접 전화하기 위해 "" 떠났다.SPLASH_URL 스플래쉬를 가능하게하기 위해 제공됩니다 (Splash는 JavaScript 렌더링 서비스입니다. Twisted 및 QT5를 사용하여 Python 3에서 구현 된 HTTP API가있는 가벼운 웹 브라우저입니다) API. URL Direct를 가져 오기 위해 "" .npm run dev