Google Search API를 이용하여 검색된 내용을 Embeddings 하여 Chroma(Vector DB)에 넣고
Chroma의 내용을 OpenAI를 통해 Q&A하는 내용을 Python으로 만들어 보겠습니다.
import os
from langchain.utilities import GoogleSearchAPIWrapper
from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.chat_models import AzureChatOpenAI
from langchain.chains import RetrievalQA
Azure OpenAI API 정보 (Keys and Endpoint)
Google Search API 키 생성
1. Google API 콘솔 이동
2. 프로젝트없을 경우 프로젝트 생성
3. API 라이브러리 에서 Custom Search API 클릭하여 =>사용
4. API사용해 보기 클릭
5. 프로그래밍 검색엔진 클릭 하여 검색엔진 추가(검색엔진 ID:GOOGLE_CSE_ID)
6. 키가져오기 클릭 하여 프로젝트 선택 (API KEY:GOOGLE_API_KEY)
AZURE_OPENAI_KEY = '***************************'
AZURE_OPENAI_ENDPOINT = 'https://*********.openai.azure.com'
AZURE_OPENAI_API_VERSION = '2023-03-15-preview'
AZURE_OPENAI_TYPE ="Azure"
GOOGLE_API_KEY = "********************************"
GOOGLE_CSE_ID = "*********************"
os.environ["OPENAI_API_TYPE"] =AZURE_OPENAI_TYPE
os.environ["OPENAI_API_KEY"] = AZURE_OPENAI_KEY
os.environ["OPENAI_API_BASE"] = AZURE_OPENAI_ENDPOINT
os.environ["OPENAI_API_VERSION"] = AZURE_OPENAI_API_VERSION
os.environ["GOOGLE_CSE_ID"] = GOOGLE_CSE_ID
os.environ["GOOGLE_API_KEY"] = GOOGLE_API_KEY
GoogleSearchAPIWrapper (구글 검색 인스턴스) 검색한 결과를
RecursiveCharacterTextSplitter를 이용 하여 1000 chunk 사이즈로 쪼개여
text-embedding-ada-oo2 모델로 Vector화하여 Embedding
persist_directory:저장되는 폴더
def embeddings(query,dbDir):
search = GoogleSearchAPIWrapper()
result = search.run(query)
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
texts = text_splitter.split_text(result)
if(os.path.isdir(dbDir) == False):
os.mkdir(dbDir)
embedding = OpenAIEmbeddings(model="text-embedding-ada-002",
chunk_size=1 )
vectordb = Chroma.from_texts(
texts=texts,
embedding=embedding,
persist_directory=dbDir)
vectordb.persist()
vectordb = None
print("완료")
RetrievalQL로 qa chain을 생성하여 Chroma DB의 내용을 검색하여 결과를 리턴
def searchOpenAI(query,dbDir):
embedding = OpenAIEmbeddings(model="text-embedding-ada-002", chunk_size=1 )
vectordb = Chroma( persist_directory=dbDir, embedding_function=embedding)
retriever = vectordb.as_retriever()
llm = AzureChatOpenAI(deployment_name='gpt-35-turbo', max_tokens=500)
qa_chain = RetrievalQA.from_chain_type(llm=llm, chain_type='stuff',retriever=retriever)
llm_response = qa_chain(query)
print(llm_response["result"])
이상입니다.
반응형
'OpenAI' 카테고리의 다른 글
Langchain - 캐싱 (0) | 2024.05.10 |
---|---|
Langchain - Model 컴포넌트와 호출 방법 (0) | 2024.05.03 |
Langchain - Hello Langchain (0) | 2024.05.03 |
Langchain - 기본 구성 및 환경 셋팅 (0) | 2024.05.02 |
댓글