Search

langchain

subtitle
Tags
AI
Created
2025/05/23
2 more properties

LangChain: 처음 써보며 느낀 것들

최근 GPT API를 프로젝트에 도입하면서, 단순한 프롬프트 호출 이상의 무언가가 필요하다는 느낌을 자주 받았다. 예컨대, 대화의 맥락을 유지하고 싶거나, 유저 입력을 체계적으로 분석해 외부 API 호출로 이어지는 플로우를 만들고 싶을 때, 단순 fetch() 기반 GPT 호출은 한계를 보인다. 이 지점에서 LangChain을 접하게 되었다.
이번 글에서는 LangChain을 어떻게 이해하고 활용했는지, 구체적인 코드와 함께 공유한다.

LangChain이란?

LangChain은 LLM(Large Language Model)을 중심으로 다양한 도구들과 연결하여 복잡한 LLM 기반 애플리케이션을 손쉽게 구축할 수 있게 도와주는 프레임워크다. 단순히 텍스트를 입력하고 결과를 받는 것이 아니라, 프롬프트 체이닝, 메모리 저장, 외부 데이터 호출, 툴 사용, 에이전트 시스템 등을 가능케 한다.

기본적인 사용 예: 프롬프트 체인

LangChain의 핵심은 체인(Chain)이다. 가장 간단한 예는 프롬프트를 정형화해 입력에 따라 동적으로 메시지를 생성하는 것이다.
import { PromptTemplate } from "langchain/prompts"; import { ChatOpenAI } from "langchain/chat_models/openai"; import { LLMChain } from "langchain/chains"; const model = new ChatOpenAI({ temperature: 0.7, openAIApiKey: process.env.OPENAI_API_KEY, }); const prompt = new PromptTemplate({ template: "나에게 {topic}에 대해 3문장으로 설명해줘", inputVariables: ["topic"], }); const chain = new LLMChain({ llm: model, prompt, }); const response = await chain.call({ topic: "블록체인" }); console.log(response.text);
TypeScript
복사
PromptTemplate을 통해 프롬프트를 동적으로 구성하고, LLMChain을 통해 모델과 연결해 실행한다. 체인의 입력은 { topic: "블록체인" } 형태의 JSON이며, 출력은 .text로 받을 수 있다.

메모리를 활용한 대화 흐름 유지

LangChain에서 Memory는 대화형 애플리케이션에서 대화를 기억하는 방식이다. 아래는 BufferMemory를 활용한 예시이다
import { ConversationChain } from "langchain/chains"; import { BufferMemory } from "langchain/memory"; const memory = new BufferMemory(); const conversation = new ConversationChain({ llm: model, memory, }); await conversation.call({ input: "안녕?" }); const result = await conversation.call({ input: "내가 뭐라고 했는지 기억나?" }); console.log(result.response);
TypeScript
복사
이렇게 하면, 두 번째 호출 시 이전 입력인 "안녕?"에 대한 기억이 반영된 응답을 받을 수 있다.

외부 API와 연결: 툴과 에이전트

LangChain의 강점은 외부 API나 유틸리티 함수와 GPT를 연결하는 에이전트 기반 아키텍처다. 예컨대, 계산기나 검색 도구 같은 것을 GPT가 스스로 판단해서 사용할 수 있게 만든다.
import { initializeAgentExecutorWithOptions } from "langchain/agents"; import { SerpAPI } from "langchain/tools"; import { Calculator } from "langchain/tools/calculator"; const tools = [new SerpAPI(), new Calculator()]; const executor = await initializeAgentExecutorWithOptions(tools, model, { agentType: "zero-shot-react-description", verbose: true, }); const result = await executor.call({ input: "내일 서울 날씨 알려주고, 섭씨를 화씨로 바꿔줘" }); console.log(result.output);
TypeScript
복사
이 코드는 GPT가 '검색이 필요하다'고 판단하면 SerpAPI를 쓰고, '섭씨→화씨 변환'이 필요하다고 판단하면 Calculator를 스스로 호출한다. 프론트엔드 개발자의 눈엔 꽤 마법처럼 느껴지는 순간이다.

쓰면서 느낀 점

장점
GPT 호출을 구조화하고 로직을 분리할 수 있어 유지보수가 쉬워진다.
대화형 인터페이스나 워크플로우 설계에 강력한 도구가 된다.
LLM을 단순 출력기 이상으로 활용하는 설계가 가능하다.
단점
완전히 TypeScript 친화적이진 않으며, 일부 패키지는 Node.js 환경에 종속적이다.
추상화가 많아서 디버깅할 때 흐름을 따라가기가 어렵다.
Web 프론트에서 직접 쓰기엔 번들 사이즈 이슈나 보안 이슈가 있다. → 서버리스 함수나 백엔드와 함께 쓰는 것이 안전하다.

마치며

LangChain은 프롬프트 기반 인터페이스를 정형화하고, LLM 기반 앱을 구조적으로 설계하는 데 좋은 도구인 것 같다. 특히 에이전트와 툴 시스템은 단순 챗봇을 넘어서 다양한 자동화 서비스로 확장할 수 있는 가능성이 있다. 단, 어디에 활용할 것인가는 아직 고민 중..