일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- k8s
- 프로그래머스
- Scanner
- ai
- Apollo
- restapi
- 백준알고리즘
- mysql
- Android
- HTTP
- LangChain
- puppeteer
- 스프링
- eof
- bufferdreader
- nodejs
- mongodb
- java
- 스프링부트
- TCP
- redis
- 서버
- graphql
- Spring
- Docker
- Mongoose
- 자바
- 조건문
- MapReduce
- java11
- Today
- Total
자라나라 개발머리
[LangChain] LangChain 쌩기초 뜯어보기 (장점, LECL) 본문
오늘은 핫!한 LLM 프레임워크인 Langchain에 대해서 뜯어보려고 합니다.
LangChain 이란?
대규모 언어 모델(LLM)을 기반으로하는 애플리케이션을 개발하기 위한 프레임워크(langchain 공식문서),
LLM을 사용하여 애플리케이션 생성을 단순화하도록 설계된 프레임워크(위키백과)라고 합니다.
Langchain 구성요소를 뜯어보면, 단순히 Langchain만 있는게 아니더라구요.
공식 문서에서는 LangChain은 LLM 애플리케이션 생애주기의 모든 단계를 단순화한다고 설명하고 있어요.
하지만 위에 보이는 것처럼, LangChain, LangServe, LangSmith 등 요 프레임워크를 모두 사용했을 때, 비로소 모든 생애주기를 단순화할 수 있는거라고 합니다.
각 프레임워크는 개발 생애주기에 요렇게 도움이 된다고 합니다. (그냥 그대로 번역해왔습니다 ^^*)
개발 - LangChain: 참조용 템플릿을 사용하여 즉시 시작하세요.
운영화 - LangSmith: 체인을 검사, 테스트 및 모니터링하여 지속적으로 향상시키고 자신감 있게 배포하세요.
배포 - LangServe: 모든 체인을 API로 전환하세요.
오늘은, 딱 LangChain만 다뤄보겠습니다. LangChain만 썼을 때의 장점이 무엇인지 파헤쳐봅시다!
LangChain의 장점
1. Intergrations
Langchain에서는 시중에 나와있는 LLM 모델들을 통합해주고 있습니다. 요게 무슨 의미냐고요? 내가 갑자기 LLM 모델을 다른 걸 쓰게 되더라도 랭체인이 알아서 intergration해주고 있기 때문에 최소한의 코드 변경으로 모델을 교체할 수 있다는 말이에요.
2. Components
랭체인은 모든 요소들을 모듈로 제공하고 있어요. 그래서 랭체인의 전체 기능을 몰라도, 몇 개만 알면 쉽게 langchain을 활용해서 LLM과 통신할 수 있답니다.
3. Off-the-shelf chains
랭체인은 chain이란 이름으로 여러 기능을 제공하고 있는데요, 사전에 만들어진 체인을 활용하여 쉽게 랭체인을 사용할 수 있습니다. 이는 개발자가 코드를 0부터 구현 할 필요 없이 복잡하고 어려운 기능을 바로 사용할 수 있다는 뜻 이에요. 이후 숙련이 된다면, 체인을 커스텀하거나 제작을 할 수 있겠죠!
4. LangChain Expression Language (LCEL)
요것이 뭐냐하면, 랭체인은 chain으로 기능을 제공한다고 했죠? 고 체인을 만들 때 쓰는 선언적 language라고 합니다. LCEL를 사용하여 체인을 만들고 구성해서 랭체인을 활용할 수 있습니다. 요렇게 LCEL로 만든 체인은 자동으로 전체 동기화, 비동기 및 스트리밍, 병렬 처리, 로깅 같은 기능을 지원한다고 해요!
글을 쭉 작성 하다보니, LangChain을 잘 쓰기 위해서는 요 Chain이란 녀썩을 잘 써야 되나 봅니다. 그리고 이 Chain은 LCEL로 구성이 되고 있구요. 그럼 LCEL에 대해 좀 더 알아볼까요?
Chain with LangChain Expression Language (LCEL)
0. chain
요 chain을 활용하는 아주 아주 아주 기초적인 예시를 볼겁니다.
모델 객체를 생성하고, 그 안에 묻고 싶은걸 작성해서 invoke()로 실행시키네요.
뭔진 몰라도, invoke() 함수가 이 뭔 chain을 작동 시키는 애인가봅니다.
import { ChatOpenAI } from "@langchain/openai";
const chatModel = new ChatOpenAI({});
const response = await chatModel.invoke("what is LangSmith?");
console.log(response);
/**
AIMessage {
content: 'LangSmith refers to the combination of two surnames, Lang and Smith. It is most commonly used as a fictional or hypothetical name for a person or a company. This term may also refer to specific individuals or entities named LangSmith in certain contexts.',
additional_kwargs: { function_call: undefined, tool_calls: undefined }
}
**/
다음으로 넘어가볼까요?
1. Basic example: prompt + model + output parser
제일 기본적으로 chain을 만드는 방법은, 프롬프트 + 모델 + 아웃풋 파서의 조합이라고 합니다.
import { ChatOpenAI } from "@langchain/openai";
import { ChatPromptTemplate } from "@langchain/core/prompts";
import { StringOutputParser } from "@langchain/core/output_parsers";
const prompt = ChatPromptTemplate.fromMessages([
["human", "Tell me a short joke about {topic}"],
]);
const model = new ChatOpenAI({});
const outputParser = new StringOutputParser();
const chain = prompt.pipe(model).pipe(outputParser);
const response = await chain.invoke({
topic: "ice cream",
});
console.log(response);
/**
Why did the ice cream go to the gym?
Because it wanted to get a little "cone"ditioning!
*/
전보다 좀 더 업그레이드 됐습니다!
fromptTemplate로 프롬프트를 구성하고, 모델 객체와 아웃풋 파서 객체를 생성해준 뒤, pipe라는 함수로 다 연결해주고 있네요.
요렇게 만든 체인을 invoke()함수로 실행시키니, prompt에 작성했던 질문이 그대로 반환됩니다. invoke안엔 리터럴 객체로 파라미터를 전달할 수도 있네요!
이렇게, LCEL을 활용해서 chain을 만들어봤습니다. 요 예시는 아주 기초적인 chain일 뿐이고, 더 많은 기능을 추가해서
Retrieval Chain, Conversational Retrieval Chain 과 같은 훌륭한 chain을 만들 수 있다고 합니다. 궁금하시다구요? 그렇다면 공식 docs를 참고해주세요. 😁
오늘은 이렇게 langchain 쌩기초에 대해 뜯어봤습니다. langchain에 대해 리서치할 때, 모든 글들이 너무 어려워서 결국, '그래서 랭체인 왜 쓰는건데?!?!?!?!?!' 라는 근본적인 물음이 해결이 안 되더라구요. 그래서 langchain을 처음 접해보시는 분들도 이해하실 수 있도록 쉽게 작성해보았습니다.
저는 개인적으로 LangChain을 써보면서, 특정 LLM을 사용하기 위해선 개발 환경 구성에 대한 리서치가 반드시 필요하기 마련인데, langChain 하나 알고 있으면 그렇게 깊게 알아 볼 필요없이 환경 구성이 쉽게 된다는 느낌을 받았습니다.
아직 LangChain의 심화요소를 써본 적이 없어 랭체인의 강력한 장점에 대해서 기술하지 못한게 아쉽습니다. 다음엔 더 심화된 게시글로 돌아오겠습니다. 읽어주셔서 감사합니다! 🥰
Reference
https://jayhey.github.io/deep%20learning/2023/04/23/langchain/
https://www.samsungsds.com/kr/insights/what-is-langchain.html
'AI&Data' 카테고리의 다른 글
[LangChain/node.js] LangChain을 활용한 문서 요약(loadSummarizationChain) (0) | 2024.05.25 |
---|---|
[데이터 분산 처리] 맵리듀스(MapReduce) 간단 설명/ Mapper, Reducer 구현해보기 (2) | 2024.04.28 |