2023년 6월 15일, 온다의 개발자 Elliot(엘리엇, 이은규)이 작성한 글에서는 Langchain 프레임워크를 이용하여 LLM(Large Language Models)을 응용한 프로그램을 개발하는 방법을 상세히 소개하고 있습니다.
최근 GPT-4, Bard, LLaMa 등 대규모 언어 모델이 뜨거운 화두로 떠오르면서, 이들을 활용한 응용 프로그램 개발에 대한 관심도 높아지고 있습니다.
Langchain은 LLM의 복잡한 연쇄작용을 제어하고 모듈화하여 언어 모델 기반 어플리케이션을 쉽게 만들 수 있도록 돕는 프레임워크입니다.
Langchain은 2022년 10월에 처음 등장한 오픈 소스 프레임워크로, 2023년 6월 현재 GitHub에서 약 4만 4천 개의 스타를 획득하며 빠르게 성장하고 있습니다.
이 프레임워크는 LLM 프롬프트 실행과 외부 소스의 실행(예: 계산기, 구글 검색, 슬랙 메시지 전송, 소스코드 실행)을 연결(Chaining)하여 하나의 어플리케이션으로 모듈화된 구성 요소들을 엮는 데 초점을 맞추고 있습니다.
Langchain은 LLM 활용을 통해 자동 생성, 요약, 질문 응답 등 텍스트 데이터 처리에 혁신적인 접근 방식을 제공합니다.
비정형 데이터를 정형 데이터로 변환하거나, 인공지능 캐릭터 집단을 구성하여 가상 공간에서 시뮬레이션하는 프로젝트와 같은 흥미로운 구현을 가능하게 합니다.
Langchain은 다양한 모듈로 구성되어 있으며, 각 모듈은 LLM 기반 응용 프로그램을 구축하는 데 중요한 역할을 합니다. 주요 모듈로는 LLMs, Prompt Templates, Agents, Tools가 있다.
import { ChatOpenAI } from 'langchain/chat_models';
export const gpt4Model = new ChatOpenAI({
temperature: 0.6,
modelName: 'gpt-4',
verbose: true,
streaming: true,
});
Prompt Template 모듈은 사전 설정된 프롬프트에 변수를 쉽게 넣을 수 있도록 구성된 템플릿입니다. 이를 통해 동일한 프롬프트를 다양한 입력 값에 재사용할 수 있으며, 결과를 파싱하여 필요한 정보만을 추출하는 역할도 수행할 수 있습니다. 예시는 다음과 같습니다:
import { PromptTemplate } from 'langchain';
import { BaseOutputParser } from 'langchain/schema';
const LANG_DETECTION = `Detect the language of text in <input></input>. Your answer must be in english...`;
class LanguageDetectionParser extends BaseOutputParser {
parse = async (output: string): Promise<string> => {
const result = output.match(/Detected: (.*)/);
if (result) {
return result[1];
}
return 'english';
};
}
export const languageDetectionPrompt = new PromptTemplate({
template: LANG_DETECTION,
inputVariables: ['input'],
outputParser: new LanguageDetectionParser(),
});
Agent 모듈은 Langchain에서 가장 핵심적인 역할을 하며, 주어진 작업을 수행하기 위해 사고(Reasoning)하고 행동(Action)을 계획하여 실행하는 역할을 합니다. Agent는 다양한 도구를 사용해 작업을 수행하며, 자신에게 주어진 자원을 최대한 활용하여 목표를 달성합니다. 아래는 Agent의 예시 코드입니다:
import { initializeAgentExecutorWithOptions } from "langchain/agents";
import { OpenAI } from "langchain/llms/openai";
import { SerpAPI } from "langchain/tools";
import { Calculator } from "langchain/tools/calculator";
const model = new OpenAI({ temperature: 0 });
const tools = [
new SerpAPI(process.env.SERPAPI_API_KEY, { location: "Austin,Texas,United States", hl: "en", gl: "us" }),
new Calculator(),
];
const executor = await initializeAgentExecutorWithOptions(tools, model, {
agentType: "zero-shot-react-description",
verbose: true,
});
const input = `Who is Olivia Wilde's boyfriend? What is his current age raised to the 0.23 power?`;
const result = await executor.call({ input });
이 예시는 Agent가 사용자 질문을 받고, Google 검색 및 계산기를 사용하여 정보를 검색하고 결과를 계산하는 과정을 보여줍니다.
Tool 모듈은 Agent가 각 Action을 수행할 때 사용하는 함수의 추상화입니다. Tool은 Agent가 사용할 수 있는 도구의 목록을 제공하며, 각 도구는 고유의 이름과 설명을 가집니다. 간단한 예시로는 수학 계산을 위한 Calculator 툴이 있습니다:
import { LLMChain, PromptTemplate } from 'langchain';
import { BaseOutputParser } from 'langchain/schema';
import { Calculator, Tool } from 'langchain/tools';
const CALC_EQUATION_GENERATE =
Generate a calculation equation from contents of <input> block...`;
class CalcEquationParser extends BaseOutputParser {
parse = async (output: string): Promise<string> => {
try {
if (/^<EOF\/>$/.test(output)) {
return '';
}
return /<output>([\s\S]*)<\/output>/.exec(output)[1].trim();
} catch (err) {
return '';
}
};
}
const calcEquationPrompt = new PromptTemplate({
template: CALC_EQUATION_GENERATE,
inputVariables: ['input'],
outputParser: new CalcEquationParser(),
});
const generateCalcEquationChain = new LLMChain({
llm: gpt3Model,
prompt: calcEquationPrompt,
outputKey: 'data',
});
class GenericCalculator extends Tool {
name = 'calculator';
async _call(input: string) {
const { data: generatedEquation } = await generateCalcEquationChain.call({ input });
if (!generatedEquation) {
return `Invalid equation. Please provide a valid equation.`;
}
return new Calculator().call(generatedEquation);
}
description =
'Useful for getting the result of a math expression...';
}
Langchain은 LLM을 활용하여 복잡한 언어 모델 기반 응용 프로그램을 쉽게 개발할 수 있도록 돕는 프레임워크입니다. 다양한 모듈과 기능을 통해 LLM을 효과적으로 활용할 수 있으며, 사용자 정의가 가능해 다양한 응용 프로그램에 적용할 수 있습니다. Langchain은 빠르게 발전하는 프로젝트로, 생성 인공지능을 응용한 어플리케이션 개발을 고려하는 개발자들에게 강력한 도구가 될 것입니다.
https://wikidocs.net/book/14314
https://www.onda.me/blog/developing-llm-applications-with-langchain