| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- runnablepassthrough
- Parallel
- 문서/번역 서비스 사용
- csvloader
- Runnable
- Azure
- ai language
- chain생성
- langchain
- runnablelambda
- OpenAI
- rag
- 자연어처리
- langsmith
- azureai
- splitter
- azure open ai
- azure open ai service
- lcel
- Multimodal
- teddynote
- runnableparallel
- pdfloader
- azure ai
- 챗봇 만들기
- azure services
- GPT
- 자연어 처리
- webbaseloader
- RecursiveCharacterTextSplitter
- Today
- Total
Nathaniel
1. OpenAI Langchain, RAG 학습 본문
조금 나태해진 나의 뒤를 돌아보면서 LLM Langchain, RAG를 다시 머릿속에 제대로 숙지시키기 위해서 조금이나마 끄적이고 싶어 글을 쓰게 되었다.
간혹 유튜브에 뜨는 테디노트님을 보면서 "RAG는 아직 완성형 분야가 아니다"라는 말이 나를 긴장되고 다시 관심 갖게 만들어주었다.
RAG를 사랑하는 테디노트님을 믿고 따르면 좋은 결과가 있을 거라고 생각한다.
시작은 여러 유튜브로 강의를 보면서 시작했지만, 마지막 종착지는 테디노트님과 혁펜하임님의 유튜브를 보면서 다시 힘을 내게 되었다.
마치 아침에 일어나기 싫은 듯한 글쓰기 끄적임일지 몰라도 해당 지식을 공부하기 위한 모습은 열정적인지라 글로 표현하려 한다.
기본 지식은 혁펜하임님의 RNN, Transformer 등의 영상을 보면서 시작하면 어느 정도 머신러닝과 딥러닝에 대한 이해도를 쌓을 수 있으니, 그분의 영상을 보는 것을 추천한다.
앞으로 해볼 내용들은 무료로도 강의가 풀리긴 하지만 유료로 사용해서 들으면 정말 좋은 것들을 배울 수 있기도 하고, Discord에 들어가 커뮤니티에서 고수분들의 조언을 얻는 좋은 방법이 있어 카드를 꺼내 들고 결제해서 유익한 영상을 듣기 시작했다.
현재 글 쓰는 위주는 테디노트님의 강의를 다시 보면서 Langchain을 진행하고, RAG를 하는 것에 중점을 두려고 한다.
- 출처 : 테디노트. dev RAG비법노트
https://teddynote.com/10-RAG%EB%B9%84%EB%B2%95%EB%85%B8%ED%8A%B8/%ED%99%98%EA%B2%BD%20%EC%84%A4%EC%A0%95%20(Windows)/
환경 설정 (Windows)
환경 설정 (Windows) git 설치 https://git-scm.com/download/win 64-bit Git for Windows Setup 다운로드 설치시 옵션 확인 후 진행 나머지는 전부 Next 버튼을 눌러 설치를 진행합니다. Window 키 - PowerShell 을 반드시 관
teddynote.com
https://github.com/teddylee777/langchain-kr
GitHub - teddylee777/langchain-kr: LangChain 공식 Document, Cookbook, 그 밖의 실용 예제를 바탕으로 작성한 한
LangChain 공식 Document, Cookbook, 그 밖의 실용 예제를 바탕으로 작성한 한국어 튜토리얼입니다. 본 튜토리얼을 통해 LangChain을 더 쉽고 효과적으로 사용하는 방법을 배울 수 있습니다. - teddylee777/langch
github.com
우선, Powershell 관리자 권한으로 들어가 pyenv 가상환경 설정부터 진행을 했다.
파이선 3.11 버전을 설치와 동시 파이썬의 버전 설치가 되었나 확인을 했다.

Poetry 설치
Poetry 패키지 관리 도구를 설치하기 위해 PowerShell을 실행한다. 설치를 해야 하는 이유? ↓ ↓
랭체인을 진행할 때 엄청 많은 패키지를 로드해야 한다. pdf 문서 로드 LLM 등등이 있는데 각각의 의존성이 있다.
A라는 패키지는 3.10 파이썬 버전을 사용한다면, B라는 패키지를 사용할 때 3.12라는 파이썬 버전을 사용해야 하는데 이것을 상쇄시켜 줄 수 있는 패키지 관리 도구이므로 굉장히 중요하다.
버전 관리로 여러 번 애를 먹어본 입장에서 이런 관리도구는 굉장히 혁신적이라고 생각된다 ㅎ.ㅎ 최소 며칠은 절약할 수 있겠다.
아래의 혁신적인 코드를 PowerShell에서 쓰자
pip3 install poetry==1.8.5
그 후 가장 기본적인 파일 위치가 되는 Documents(없다면 생성하면 됨)로 이동한 다음에, 테디노트님의 Github코드 소스를 가져와서 사용할 것이다 물론 git을 설치해서 사용하는 것이기 때문에 소스 업데이트 때 git pull로 재업데이트 시키면 된다.
git clone https://github.com/teddylee777/langchain-kr.git
git clone 한 파일 내부에 Langcahin-kr로 들어가서 ls 명령어를 누르면 여러 가지의 파일들이 존재하고 패키지를 관리하는 파일 두 개가 있다.

poetry shell명령어를 사용해서 가상환경을 생성시키자, 가상환경은 다른 버전과 별도의 프로젝트를 관리할 수 있는 좋은 환경이기 때문에 대부분 프로젝트 때에는 사용한다.
poetry update
그리고를 하면 패키지 관련 툴들을 업데이트시켜주니, 해당 명령어를 또 한 번 클릭한다.
업데이트가 조금 오래 걸리니 차분하게 기다리자.... 나는 마음이 급해서 계속 확인만 했다 ㅎㅎ
아래는 VScode에서 다운로드한 테디노트님 폴더를 열은 사진이다. 너무 친절하게 되어있다.
기본적인 지식들이 써있으니, 모르는 사람들이 이런 것들을 확인하면 매우 좋을 것 같다고 생각한다.
어렵다기보다 하다 보면 재미가 있다. LLM이라는 모델을 어떻게 RAG를 할 것인지? 내 입맛대로 어떻게 바꾸면 좋을지에 대해서 깊게 생각할 수 있는 프로젝트가 될 것이다. 그리고 Fine tuning은 오픈소스 모델 LLM인 llama 같은 모델을 사용할 수 있고, GPT는 할 수 없다. 또한 Fine tuning은 정말 많은 리소스가 필요하고 비용이라던지, 컴퓨팅 리소스 등등 많은 것들이 필요해서 Fine tuning을 한다면 다시 한번 고려해봐야 한다.

이후 OpenAI API 호출 키를 발급받는다. API 키는 .env라는 파일 내부에 있는 코드 변수명에 꼭 넣어줘야 일일이 하드코딩 하지 않아도 .env에 저장한 호출 값들을 불러와서 추후 코드를 짤 때도 매우 편하니 .env파일 내부에 코드 변수명 지정해서 사용하는 습관을 들이면 좋을 것이다. 이제부터는 모델에 RAG를 하기 위한 글자 청킹과 임베딩 백터 DB 등을 수행할 것이다.
https://platform.openai.com/docs/overview
발급받은 OpenAI API Key를. env에 넣으면 아래의 코드를 진행시켜 "대한민국의 수도는 어디인가요?"라는 question에 대한
질의 Printf"[답변]:{llm.invoke(question)}")라는 코드가 실행되어 대한민국의 수도에 대한 유사한 단어들이 나오게 된다.


이후 Langsmith의 API Key도 발급받을 것인데, 코드를 추적했을 때의 코드를 추적해 주는 시스템이다. 어떠한 질의를 하고 답변은 받는 과정들이 DB에 남아서 추적을 해줄 수 있다. 기록을 남긴다는 의미보다 나중에 RAG시스템을 만들게 되면 파이프라인이 복잡하게 되는데 그 복잡해지는 과정을 하나씩 트래킹 하기 위해 Langsmith를 사용하게 될 것이다!
나중에 쓰게 되다 보면 왜 써야 하는지 알게 되겠지 ㅎ.ㅎ
https://smith.langchain.com
LangSmith
smith.langchain.com
Langsmith API Key 발급받을 때 내가 원하는 Key값의 이름을 Teddynote로 지정했다.

발급받은 후의 API Key는 아래와 같은 .env 파일 변수명 Langsmith_API_KEY에 넣어주었다. API Key는 반드시 혼자서만 알기 위해서는 가려줘야 한다.
Tracing은 Langsmith를 사용하기 위한 추적 기능을 True로 하면 "사용한다", False로 하면 "사용 안 한다"로 생각하면 된다.
Endpoint는 그냥 기본값으로 지정된 url 주소를 지정한다. Project명은 내가 만든 API Key 발급 당시의 이름을 적으면 된다.

답변을 받은 프롬프트 상세 내역을 보기 위해서 Langsmith 프로젝트에 들어왔다.
해당 출력 토큰의 내용을 보면 prompt tokens 비용 내역을 볼 수 있으므로 내가 어느 정도의 토큰으로 비용이 어느 정도 나왔다를 계산하면 된다.
참고로 영어보다 한글의 토큰 값 비용은 2배 이상이 드는 것으로 알고 있다. 영어보다 한글이 토큰화가
7 ~9배 정도 차이가 나기 때문에 영어로 Prompt를 입력해서 받는 것보다 당연히 많은 토큰 값들이 나오기 때문이다.
Langsmith는 작년에 유료로 전환이 되었는데 사용량은 25만 건까지만 무료로 사용할 수 있으니 안심은 해도 된다.

참고로 Markdown 문법을 알고 있으면 좋다. 왜냐하면 GPT가 문서를 로더 할 때, 우리가 흔히 알고 있는 Bold 체 나, 제목 소제목 부분들을 Markdown 형식으로 지정하면 좀 더 잘 이해하기 때문에 나중에 RAG를 사용할 때도 답변을 정확하게 해 줄 수 있을 것이다.
question을 LLM GPT 모델한테 넣어줄 때는 invoke라는 함수를 써준다. 내가 원하는 질문을 넣으면 답변이 나오게 된다.
토큰 값, 또는 전체 토큰 값이 얼마가 쓰였다 등이 출력된다.

그리고 가장 좋은 게 answer을 하고, 반복문으로 작성해서 해당 출력 답변을 streaming 형식으로 답변 받는 함수가 있는데
이 기능도 실제 GPT에서 사용하고 있는 부분이다.
위 출력 문답처럼 자연스럽게 나오고 싶다면 answer = llm.stream("질문")으로 코드를 짜면 좋을 것 같다.
invoke와 stream의 차이점
invoke는 전체 출력 결과를 모아서 한번에 보여준다면(딜레이 있음)
stream 기능은 하나씩 자연스럽게 보여주는 것의 차이이다.
나는 개인적으로 stream 형식으로 출력되는 기능이 더 좋기 때문에 invoke보다 stream 을 사용하고 싶다.
다음은 GPT 멀티모달 이미지 인식하여 답변 출력을 해볼 것이다.
'AI' 카테고리의 다른 글
| 4. Runnable(Passthrough, Parallel,Lambda) (0) | 2025.03.02 |
|---|---|
| 3. Langchain LCEL, Parallel (4) | 2025.03.02 |
| RAG 코드 암기하기 D1 (0) | 2025.02.26 |
| 2. Langchain → Chain 생성? (0) | 2025.02.26 |
| 1-1. GPT-4o 멀티모달 모델로 이미지 인식하여 답변 출력 (0) | 2025.02.25 |