728x90
반응형
LangChain
- LLM을 활용한 애플리케이션 개발을 위한 오픈소스 프레임워크
- LLM과의 상호작용, 메모리 관리, 체인 실행, 데이터 처리 등을 통해 복잡한 AI 애플리케이션을 효율적으로 구축할 수 있음.
- LangGraph: 그래프 기반 모델링을 도와주는 패키지로, 여러 작업을 동시에 처리하거나 특정 조건에 따라 작업을 분기하는 복잡한 애플리케이션을 설계할 수 있음.
- LangSmith: LLM 애플리케이션을 디버킹, 테스트, 평가, 모니터링할 수 있는 개발자 플랫폼
- LangServe: REST API 배포를 도와주는 패키지, 랭체인의 체인을 REST API로 간편하게 배포할 수 있음.
- 장점: 특정 작업을 수행할 때 원하는 기능을 손쉽게 사용할 수 있어 프로젝트의 복잡성을 줄이고 개발 효율을 극대화 함
- 모듈성: 모든 기능을 독립적으로 제공
- 통합의 용이성: 다양한 외부 시스템과 쉽게 연동
- 커뮤니티와 지원
Why LangChain?
- OpenAI API로 AI 애플리케이션을 충분히 개발할 수 있지만, 랭체인을 활용하면 모든 기능을 모듈 단위로 나눠 제공하기 때문에 개발자가 원하는 기능을 필요할 때 수비게 추가하거나 교체할 수 있음.
- 다양한 외부 시스템과 연동할 수 있는 표준 인터페이스를 제공
LLM 파라미터
- temperature: 생성 응답의 다양성을 조정. 0~1 사이의 값으로 값이 작을 수록 예측 가능하고 일관된 출력을 생성, 값이 클수록 다양하고 창의적인 출력을 생성
- max tokens: 생성할 최대 토큰 수를 지정하여 생성할 텍스트의 길이를 제한
- Top P: 생성 과정에서 특정 확률 분포 내에서 상위 P%의 토큰만을 고려하는 방식. 출력의 다양성 조절
- Frequency Penalty: 0~1. 값이 클수록 이미 등장한 단어나 구절이 다시 등장할 확률을 감소시킴. 텍스트의 다양성 증가
- Presence Penalty: 텍스트 내에서 단어의 존재 유무에 따라 해당 단어의 선택 확률을 조정. 0~1. 값이 클수록 아직 텍스트에 등장하지 않은 새로운 단어 사용 장려
- Stop Sequences: 특정 단어나 구절이 등장할 경우 생성을 멈추도록 설정하여 특정 포인트에서 종료하고자 할 때 사용
표현 언어
- 러너블(runnable): 랭체인에서 작업을 실행할 수 있는 단위로, 이들을 서로 연결하여 연속적인 작업을 처리할 수 있음
- invoke(): 단일 입력을 처리하여 결과를 반환하는 동기 메서드
- batch(): 여러 입력을 동시에 처리하는 동기 메서드
- stream(): 결과를 스트리밍 방식으로 반환하는 동기 메서드
- ainvoke(): invoke()의 비동기 버전
- abatch(): batch()의 비동기 버전
- astream(): stream()의 비동기 버전
- astream_log(): 중간 단계와 최종 결과를 비동기적으로 스트리밍
- astream_events(): 체인에서 발생하는 이벤트를 비동기적으로 스트리밍
1) 라이브러리 불러오기
from dotenv import load_dotenv
import os
from langchain_openai import OpenAI
load_dotenv("/content/.env") # .env 파일에서 환경 변수 로드
api_key = os.getenv("OPENAI_API_KEY") # 환경 변수에서 API 키 가져오기
llm = OpenAI() # 오픈AI 대규모 언어 모델 초기화
2) 호출
# 라이브러리 불러오기
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
# 오픈AI의 대규모 언어 모델 설정
model = ChatOpenAI(model="gpt-4o-mini")
# 프롬프트 템플릿 정의: 주어진 주제에 대한 설명 요청
prompt = ChatPromptTemplate.from_template("주제 {topic}에 대해 짧게 설명을 해주세요")
# 출력 파서 정의: AI 메시지의 출력 내용을 추출
parser = StrOutputParser()
# 프롬프트, 모델, 출력 파서를 체인으로 연결
chain = prompt | model | parser
# 응답을 호출
chain.invoke({"topic":"더블딥"})
chain.batch([{"topic": "더블딥"}, {"topic": "인플레이션"}])
- 토큰 단위로 호출
# 응답을 토큰 단위로 스트리밍하여 출력
for token in chain.stream({"topic":"더블딥"}):
# 스트리밍된 내용을 출력, 각 내용을 붙여서 출력하며, 버퍼를 즉시 플러시하여 실시간으로 보여줌
print(token, end="", flush=True)
3) 프롬프트 템플릿
- 문자열 프롬프트
from langchain_core.prompts import PromptTemplate
prompt_template = PromptTemplate.from_template("주제 {topic}에 대해 금융 관련 짧은 조언을 해주세요")
prompt_template.invoke({"topic": "투자"})
- 챗 프롬프트
from langchain_core.prompts import ChatPromptTemplate
# 챗 프롬프트 템플릿 정의: 사용자와 시스템 간의 메시지를 포함
prompt_template = ChatPromptTemplate.from_messages([
("system", "당신은 유능한 금융 조언가입니다."),
("user", "주제 {topic}에 대해 금융 관련 조언을 해주세요")
])
prompt_template.invoke({"topic": "주식"})
- system: AI 역할을 정의하여, AI가 어떤 종류의 응답을 제공해야 하는지 명확하게 함
- user: 사용자가 요청하는 내용을 포함하여, AI에게 특정 정보를 요청
4) 대화 관리
- 기본적인 대화 이력 전달
- 대화 이력 관리 및 처리
- 자동 대화 이력 관리
- 대화 이력 요약 및 트리밍
- 대화 요약 활용
Last Updated. 2025.06.24
🔖 참고 자료
RAG 마스터_github
728x90
반응형
'NLP | LLM' 카테고리의 다른 글
로컬 환경에서 필수인 Ollama에 대해 알아보기 (3) | 2025.06.18 |
---|---|
AI Agent의 모든 것 (5) | 2025.06.17 |
[RAG] 2. Query 추론 및 재생성 (0) | 2025.06.10 |
[RAG] 1. RAG와 LangGraph의 등장과 동작과정 (0) | 2025.06.10 |
[Text Summarization] 1. TextRank (0) | 2022.10.17 |