HugginFace 의 오픈소스 언어모델 활용하기
·
RAG 을 활용하여 LLM 만들어보기
1. HugginFace 의 동작 방식HuggingFace 는 AI 모델과 데이터셋을 공유 및 실행할 수 있는 오픈 플랫폼을 의미한다. Langchain 과 차이는 LangChain 은 chat openai 를 불러온 뒤에 모델을 그대로 chain 에 입력한다. 반면 HuggingFace 는 `텍스트 생성기`일 뿐, 채팅의 개념이 없어서 HugginFace model을 사용하는 것이 아닌,토크나이저와 모델을 묶은 파이프라인을 만들고 그것을 LangChain 이 이해하는 Chat 인터페이스로 감싸서 쓰는 구조이다.2. HuggingFace API 준비하기HuggingFace 홈페이지에서 token을 발급받을 수 있다. 이 토큰을 HF_TOKEN 의 변수명에 입력한다. 3. HuggingFace 오픈소스 ..
streamlit cloud 를 활용하여 서비스 배포하기
·
RAG 을 활용하여 LLM 만들어보기
이번엔 지금까지 만든 ai 를 실제 cloud 로 배포하는 작업을 진행해볼 예정이다. 먼저 streamlit cloud 에 배포할 때, github 를 사용하기 때문에 미리 github 에 push 해두었다1. Streamlit cloud 에서 create app 하기.아래와 같은 순서로 create app 을 진행했다. 여기서 좀 헤맸던 부분 중 하나는 requirements.txt 가 자동으로 생성되는데이걸 사용하니까 자꾸 " ❗️ installer returned a non-zero exit code" 에러가 발생해서 몇번 수정했다. 최종적으로 사용한 requirements 는 아래와 같으니 참고하면 된다.더보기# langchain 관련langchain==0.3.27langchain-communit..
Few Shot 을 활용한 답변 정확도 향상과 포맷 수정.
·
RAG 을 활용하여 LLM 만들어보기
1. Few Shot 이란Few shot 이란 예제를 줌으로서 답변의 퀄리티를 향상시키는 동시에 원하는 포맷으로 변경할 수 있다. Langchain 의 공식 문서중 few-shot 과 관련된 example 을 활용하여 사용해 보려고 한다.공식 문서를 보면 아래와 같이 예시를 정해주고, 이를 ChatPromptTemplate 로 조합하여 사용한다. 주의할 점은 공식문서에서 질문은 input, 대답은 output 으로 보여지는데 이전에 작성한 내용은질문은 input, 대답은 answer으로 설정했기 때문에 Few shot 을 만들 때 해당 부분을 주의해서 작성한다. 2. Few Shot 적용하기먼저 기존에 작성했던 코드를 활용하되, 추가 내용을 작성해서 Few Shot 을 사용하려고 한다.먼저 config...
Chat History 추가와 Streaming 구현
·
RAG 을 활용하여 LLM 만들어보기
이번에는 create_history_aware_retriever 을 활용해서 chat history 를 받을 수 있도록 구조를 수정해보려고 한다. 최종 코드는 최하단에 추가해둘 예정이며, 전체적인 흐름은 아래와 같다.user_question 으로 사용자에게 질문 받기get_dictionary_chain() 및 invoke 로 정규화된 질문 normalized_q 생성RunnableWithMessageHistory(rag_chain) 과 get_session_history() 으로 세션별 대화 히스토리 자동 관리create_stuff_documents_chain 를 통해 context 문서와 질문을 통해 LLM 답변을 생성LLM답변 중 pick("answer").stream(..) 으 로 streamli..
Streamit 으로 chatbot 만들기
·
RAG 을 활용하여 LLM 만들어보기
1. Streamit 이란streamit 이란 HTML, CSS, JavaScript 를 몰라도 브라우저에 UI를 만들 수 있다.왜냐하면 Streamit 이 자체적으로 React 로 component 를 만들고 추상화하여 매핑했기 때문이다. 또한 Data 분석가들이 시각화하는 도구로 많이 사용하므로, python과 잘 맞는 library 이다. 먼저 아래 링크를 참고하여 streamit 환경을 설정 후 확인했을 때 Welcome to Streamlit 이 나와야 한다. 위 상태에서 Enter 을 한번 더 누르면 아래와 같이 웹사이트로 접속할 수 있다.2. Streamlit 디자인 구성하기.먼저 아래와 같이 디자인 한 뒤, terminal 이나 powershell 에서 "streamlit run .\cha..
Retrieval 효율 개선을 위한 데이터 전처리
·
RAG 을 활용하여 LLM 만들어보기
이전까지 upstageEmbedding 를 활용해서 간단하게 테스트를 진행했는데, 결과적으로는 대답이 적절하게 오지 않는다.그 이유는 가져오는 문서에서 답변이 있는 데이터가 이미지 로 구성되어 있어 파싱하지 못했기 때문이다. document-to-text-loader 를 하기 위해서는 이미지는 텍스트로, 표는 마크다운 에디터 형식으로 변경해야 한다.아래 이미지를 예시로 들 수 있는데, 상단의 표를 마크다운 에디터를 통해 아래와 같이 변경해야 한다.그렇다면 마크다운된 파일을 활용하자면 아래와 같이 진행할 수 있다.https://rusharp.tistory.com/189 에서 만든 코드를 그대로 사용하되, 문서를 가져오는 부분은 수정해야 한다. 1. 문서 가져오기먼저 여기서 표를 마크다운으로 변경한 tax_..
Pinecone 과 LangChain을 활용한 Vector Database 변경
·
RAG 을 활용하여 LLM 만들어보기
0. Pinecone pinecone 은 chroma 와 마찬가지로 vector DB로서, chroma는 인메모리인 반면, Pinecone 은 클라우드를 활용한다.따라서 LLM 서비스를 운영하는 서버를 이전할 때에도 무리 없이 데이터를 가져올 수 있다. 또한 일반적인 RDB 개념에서의 DB를 pinecone index라고 하는데, 5개까지 무료로 사용할 수 있다. https://rusharp.tistory.com/186 에서 만들었던 코드 내용을 최대한 그대로 활용하여 진행해 보려고 한다.1. 문서 가져오기2. 문서 쪼개기 3. 임베딩 진행하기 여기부터 임베딩을 chroma DB 가 아닌, cloud 를 지원하는 pinecone DB 에 입력한다. 먼저 pinecone 홈페이지에 로그인한 뒤에 API_..
LangChain을 활용하지 않고 RAG 구성해보기
·
RAG 을 활용하여 LLM 만들어보기
이번에는 LangChain을 활용하지 않고 RAG를 구성해보려고 한다. 1. 문서 가져오기먼저 문서를 가져오기 위해 pip install python-docx 이후, 아래와같이 paragraph 단위로 나누어 full_text 변수에 입력한다.2. 문서 쪼개기다음으로 tiktoken을 사용하여 문서를 토큰화한다. 내가 사용한 문서의 경우, 총 152700 토큰으로 구성되어 있다.그러나 gpt-4o 는 128000 context window까지만 지원하기 때문에 토큰 개수를 조절해야 한다. 이 때문에 쪼개는것이 중요한데, token의 lenth 를 파악한 뒤 원하는 chunk size 로 쪼개고 문서로 반환한다.https://platform.openai.com/docs/models/gpt-4o 참고로 아래..