전날에 오픈AI api를 써서 코드 만들어본 것을 이제는 업스테이지 솔라 모델을 활용해서 만들어보았다. 새로운 라이브러리를 깔아야한 거 빼고는 어제 오픈AI 불러와서 만든 코드를 살짝 변형하는 정도.
전체 코드.
#모델 정의
from langchain_upstage import ChatUpstage
chat = ChatUpstage(api_key="api-key")
#문서 로드 및 청킹
from langchain_community.document_loaders import PyPDFLoader
loader = PyPDFLoader("sportclimbing.pdf")
sportclimbingpdf = loader.load()
from langchain_text_splitters import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=600,
chunk_overlap=100,
length_function=len,
is_separator_regex=False
)
sportclimbingsplits = text_splitter.split_documents(sportclimbingpdf)
#임베딩, 벡터스토어
from langchain_upstage import UpstageEmbeddings
embeddings = UpstageEmbeddings(
api_key="api-key",
model="solar-embedding-1-large-passage")
from langchain_chroma import Chroma
chroma_db = Chroma.from_documents(sportclimbingsplits,
embedding=UpstageEmbeddings(
api_key="api-key",
model="solar-embedding-1-large-passage"))
#리트리버와 제너레이터
retriever = chroma_db.as_retriever(
search_type = "mmr",
search_kwargs = {"k":3})
retrieved_docs = retriever.invoke("스포츠 클라이밍의 규칙을 요약해서 알려줘")
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser
from langchain import hub
def merge_docs(retrieved_docs):
return "\n\n".join([d.page_content for d in retrieved_docs])
prompt = hub.pull("rlm/rag-prompt")
rag_chain = (
{"context": retriever | merge_docs, "question": RunnablePassthrough()}
| prompt
| chat
| StrOutputParser()
)
rag_chain.invoke("스포츠 클라이밍의 규칙을 요약해서 알려줘")
일단 돌아가는 걸 확인했으니, 다음은 모듈화 작업. 각자 팀원들마다 맡은 부분이 있어서 그 부분을 모듈화하고 깃허브에 올려서 합치면 된다.
그런데 깃허브에 만들어놓은 폴더 전체를 clone 해오니까 내가 쓰고 있던 가상환경이 그 폴더에서 작동하지 않았다ㅠ 다 깔아놨는데.. 뭐 깔았는지 기억 안나는데ㅋㅋㅋㅋ 팀원들과 예전에 합의했었던 파이썬 버전 3.11로 가상환경을 아나콘다로 다시 만들었다. 그리고 잘 실행되는지 해보는데 계속 chroma 모듈이 없다고 실행이 안된다. 이걸 오랜 시간 붙잡고 있다가 다른 팀원분이 이거 해보라해서 했더니 잘됨!!
pip install -qU chromadb langchain-chroma
이게 의존성(?)문제라고 하던데, LangChain에서 Chroma를 사용하기 위해서는 두 가지 패키지(chromadb, langchain-chroma) 두 개를 위 코드처럼 설치하면 모든 의존성이 해결된다. 내가 둘 중 하나를 안깔았나보다. (기억 안남.. 하도 뭘 이것저것 많이 깔아서)
깃허브에서 클론해온 파일이 잘 작동하는 것을 확인! 이제 내가 맡은 부분의 코드를 추가해서 push 하면 되는데. 또 다른 난관이. (참고로 나는 임베딩해서 벡터스토어에 집어넣는 부분을 맡았는데) 또 다른 분이 다시 코드를 push했다고 해서 이걸 다시 클론을 해왔더니 원래 폴더 안에 똑같은 폴더가 또 하나 생겼다; 에라 모르겠다 하고 일단 지움.
그리고 나는 내 이름으로 된 브랜치를 하나 만들고, vectorstore.py를 추가하고 main.py를 수정한 뒤에 push를 했다. 근데 문서를 로드하고 스플릿하는 부분을 맡은 분이 먼저 올리셔야해서 내꺼는 일단 머지하지 않고 놔둔 상태....(?) 그리고 문서 로드와 스플릿 부분 코드가 올라온 뒤에 팀원들과 동기화를 맞춰주기 위해서 Pull을 다같이 했다.
Pull은 main 브랜치에다가 한 다음에 나는 다시 내 브랜치로 돌아가서 수정을 하려고 하니까 로드와 스플릿된 파일이 없어지는 것! 그래서 이게 뭐지!? 하고 물어봤는데 pull을 할 때 내가 수정중인 브랜치에 가서 Pull을 해와야 한다고.
다시 내 브랜치로 옮겨가서 pull을 하는데.. ㅇㅅㅇ
이전에 내가 커밋했던 것들이랑 충돌난 상태(???)ㅠㅠㅠ 이 상태에서 뭘 눌렀는지 정확히 기억은 안나는데 어떻게 머징을 했던 것 같다. 그리고 나서 다시 내가 vectorstore.py를 추가하고 main.py를 수정해서 push.
이어서 다음 분이 리트리버 부분을 추가해주시기로 했는데, 여기까지가 수요일에 한 일!!
'공부방 > Upstage AI Lab 4기' 카테고리의 다른 글
Github 레파지토리 만들고 나서 연결, 깃허브에서 파일 삭제 (0) | 2024.08.21 |
---|---|
Github에 소스코드 올리기 | api-key는 환경변수로 설정 (0) | 2024.08.15 |
8/12 QA Engine 개발 Day2 | LangChain을 이용한 App 개발 PJT (1) | 2024.08.14 |
8/12 QA Engine 개발 Day1 | LangChain을 이용한 App 개발 PJT (0) | 2024.08.12 |
8/8~9 학습일지 | Github랑 Git이 다른 거였어?! (0) | 2024.08.09 |