일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
- Parallel
- runnableparallel
- Runnable
- csvloader
- RecursiveCharacterTextSplitter
- ai language
- runnablepassthrough
- teddynote
- Multimodal
- pdfloader
- 챗봇 만들기
- langchain
- chain생성
- azure services
- webbaseloader
- Azure
- langsmith
- lcel
- OpenAI
- runnablelambda
- GPT
- 문서/번역 서비스 사용
- rag
- azureai
- splitter
- azure ai
- 자연어 처리
- azure open ai
- azure open ai service
- 자연어처리
- Today
- Total
Nathaniel
2. Langchain → Chain 생성? 본문
LCEL(LangChain Expression Language)이란 무엇인가
프롬프트 템플릿을 만들어서 체인을 구성한다, 템플릿 안에는 입력 변수(사용자의 질문)가 사용된다.
qeustion, 변수 등 다양한 것들을 프롬프트 템플릿으로 생성할 것이다.
프롬프트 템플릿은 사용자의 질문을 정해진 내용에 맞도록 리스트화하는 것.
아래의 예시를 코드로 작성하여 템플릿으로 만든다고 생각하면 된다.
template = "{County}는 어느 나라의 도시인가요?"
# from_template 메소드를 이용하여 PromptTemplate 객체 생성
prompt_template = PromptTemplate.from_template(template)
prompt_template
# prompt 생성
prompt = prompt_template.format(county="서울")
prompt
출력값 : '서울은 어느 나라의 도시인가요?'
위 프롬프트를 템플릿으로 생성해서 LLM Chain과 연결하는 것이 LCEL( LangChain Expression Language)이다
프롬프트 출력 값 → LLM으로 전달 된다.
위에서 작성된 프롬프트 템플릿의 출력값 '서울은 어느 나라의 도시인가요?'가 LLM에 전달이 되도록 하는 것.
하나의 파이프라인을 조립하는 것이자, Langchain에서 Chain이라는 표현을 쓴다(체인으로 엮는다)
Chain = Prompt | LLM | OutputParser 이러한 과정들로 차례들을 엮어서 하나의 파이프라인으로 묶어주는 결과물을 Chain이라고 한다!!
이때 Unix 파이프 연산자와 유사한 ' | '이 기호를 써서 Prompt와 LLM을 묶어줄 것이다.
1. prompt = PromptTemplate.from_template("{topic} 에 대해 쉽게 설명해주세요.")
아래는 Prompt 템플릿 된 값을 Chain 변수와 Model 변수 값인 GPT-4o-mini와 '|' 파이프로 엮어준다는 코드이다
# prompt 를 PromptTemplate 객체로 생성합니다.
prompt = PromptTemplate.from_template("{topic} 에 대해 쉽게 설명해주세요.")
model = ChatOpenAI(model="gpt-4o-mini", temperature=0.1)
chain = prompt | model
chain을 출력해 보면 Prompt와 Model이 엮어진 아래의 출력값이 나오게 된다.
Prompt는 당연 유저의 답변이 될 것
chain
출력 값 :
PromptTemplate(input_variables=['topic'], input_types={}, partial_variables={}, template='{topic} 에 대해 쉽게 설명해주세요.')
| ChatOpenAI(client=<openai.resources.chat.completions.completions.Completions object at 0x000001AFA68FF750>, async_client=<openai.resources.chat.completions.completions.AsyncCompletions object at 0x000001AFA6903690>, root_client=<openai.OpenAI object at 0x000001AFA68F3B50>, root_async_client=<openai.AsyncOpenAI object at 0x000001AFA68FF910>, model_name='gpt-4o-mini', temperature=0.1, model_kwargs={}, openai_api_key=SecretStr('**********'))
※ 즉 prompt 입력으로 들어와서 그 결과 값을 LLM에 전달한다고 기억하면 된다!
2. input = {"topic": "인공지능 모델의 학습 원리"}
이제 chain을 Invoke() 호출을 해줄 것인데,
딕셔너리 형태로 입력값을 전달한다(키:값) Invoke() 함수 호출 시, 입력 값 전달
# input 딕셔너리에 주제를 '인공지능 모델의 학습 원리'으로 설정합니다.
input = {"topic": "인공지능 모델의 학습 원리"}
# prompt 객체와 model 객체를 파이프(|) 연산자로 연결하고 invoke 메서드를 사용하여 input을 전달합니다.
# 이를 통해 AI 모델이 생성한 메시지를 반환합니다.
chain.invoke(input)
풀어보자면
1. prompt = PromptTemplate.from_template("{topic} 에 대해 쉽게 설명해주세요.")
2. input = {"topic": "인공지능 모델의 학습 원리"}
1번 prompt 변수에 넣었던 "{topic}에 대해 설명해주세요"를 2번 input 변수에 동일하게 {topic}으로 가져와서
{Key : value} 형태로 chain.invoke(input) → "출력해 줘"라고 이해하면 된다
더 쉽게 말하면 파이프로 엮은 {topic} prompt 변수를 input = {"topic": "value"} 동일하게 불러와서 input에 넣어준다.
topic 이름은 동일하게 맞춰야 된다. topic / topic (O), topic / topic2 (X)
↓ 예시 ↓
1. prompt = {topic} → 템플릿 | 모델 파이프
2. input = {topic} → 입력 {key:value}
3. chain.invoke(input) → 입력 값을 GPT model로 전달
변수 명은 여러 개가 들어가도 된다.
# {topic}, {how} 변수 두 개 지정 시
prompt = PromptTemplate.from_template("{topic} 에 대해 {how} 설명해주세요.")
model = ChatOpenAI(model="gpt-4o-mini", temperature=0.1)chain = prompt | model
# input 딕셔너리에 주제를 '인공지능 모델의 학습 원리', '간단하게'로 설정
input = {"topic": "인공지능 모델의 학습 원리", "how":"간단하게"}
변수 명 두 개 출력 사진
템플릿 안에 정한 프롬프트에 따라 결과 값은 달라진다. 명확한 목적을 가지고 템플릿 프롬프트를 작성해야 한다!!
"변수를 어떤 목적으로 몇 개를 구성하겠다."라는 템플릿을 계획 있게 작성!
Chain 생성의 마지막 OutputParser 단계
chain = prompt | model | output_parser
기존에 prompt | model로 Chain 했을 때 chain.invoke(input)을 하면 AIMessage라는 content 값인 AI 모델의 출력 답변이 나온다. ↓ 예시는 아래 확인 ↓
하지만 Prompt | model | OutputParser 형태로 Chain을 하면 아래와 같이 깔끔하게 답변을 얻을 수 있다.
이렇게 3개의 변수들을 묶었을 때의 마지막 단계인 부분을 확인할 수 있다!!
상황에 따라 받고 싶은 문자 형태를 chain으로 묶어서 출력 받으면 좋을 것 같다.
출처 테디노트 실습 코드 : https://github.com/teddylee777/langchain-kr
GitHub - teddylee777/langchain-kr: LangChain 공식 Document, Cookbook, 그 밖의 실용 예제를 바탕으로 작성한 한
LangChain 공식 Document, Cookbook, 그 밖의 실용 예제를 바탕으로 작성한 한국어 튜토리얼입니다. 본 튜토리얼을 통해 LangChain을 더 쉽고 효과적으로 사용하는 방법을 배울 수 있습니다. - teddylee777/langch
github.com
'AI' 카테고리의 다른 글
4. Runnable(Passthrough, Parallel,Lambda) (0) | 2025.03.02 |
---|---|
3. Langchain LCEL, Parallel (4) | 2025.03.02 |
RAG 코드 암기하기 D1 (0) | 2025.02.26 |
1-1. GPT-4o 멀티모달 모델로 이미지 인식하여 답변 출력 (0) | 2025.02.25 |
1. OpenAI Langchain, RAG 학습 (0) | 2025.02.25 |