
โํ๋กฌํํธ ์ค์ฌ ์ฌ๊ณ ์์ ์ค์ผ์คํธ๋ ์ด์ ์ค์ฌ ์ฌ๊ณ ๋ก.โ
์ด์ LLM์ ๋จ์ํ โ์ง๋ฌธ-๋ต๋ณโ ๋๊ตฌ๊ฐ ์๋๋ผ ํ๋์ ์์คํ ์ผ๋ก ์ค๊ณํ์.
LangChain์ LLM ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฝ๊ฒ ๊ตฌ์ฑํ๊ธฐ ์ํ ์ค์ผ์คํธ๋ ์ด์
ํ๋ ์์ํฌ์
๋๋ค.
GPT ๊ฐ์ ๋ชจ๋ธ์ ๋จ์ ํธ์ถํ๋ ๊ฒ์ด ์๋๋ผ, ํ๋กฌํํธยท๋ฉ๋ชจ๋ฆฌยทํดยท์ฒด์ธยท์์ด์ ํธ ๋ฑ์ ์กฐํฉํด ๋ณต์กํ AI ์ํฌํ๋ก์ฐ(Workflow)๋ฅผ ๋ง๋ค ์ ์๊ฒ ํด์ค๋๋ค.
| ํญ๋ชฉ | ์ค๋ช |
|---|---|
| ์ ์ | LLM ํธ์ถ์ ์ฒด๊ณ์ ์ผ๋ก ๊ตฌ์ฑํ๊ณ ๊ด๋ฆฌํ๋ Python/JS ๊ธฐ๋ฐ ํ๋ ์์ํฌ |
| ํต์ฌ ์ฒ ํ | โLLM์ ์ง์ ๋ถ๋ฅด์ง ๋ง๊ณ , ์กฐ๋ฆฝ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ๋ก ์ค๊ณํ๋ผโ |
| ํต์ฌ ๊ตฌ์ฑ์์ | Prompt, LLM, Chain, Tool, Memory, Agent |
| ํ์ฉ ์์ | ์ง์์๋ต ์์คํ , ๋ํํ ๋ด, ๋ฌธ์ ๊ฒ์+์์ฝ ์์คํ |
| ๊ณต์ ๋ฌธ์ | https://python.langchain.com |
LangChain์ ๋ชจ๋ ๊ธฐ๋ฅ์ ์๋ ์ฌ์ฏ ๊ฐ์ง ๊ตฌ์ฑ์์๋ก ํ์๋ฉ๋๋ค ๐
| ๊ตฌ์ฑ์์ | ์ค๋ช | ์์ |
|---|---|---|
| PromptTemplate | ๋ชจ๋ธ ์ ๋ ฅ์ ๋์ ์ผ๋ก ๊ตฌ์ฑ | "Answer the question: {question}" |
| LLM | ์ค์ ๋ชจ๋ธ ํธ์ถ ๊ฐ์ฒด | ChatOpenAI(model="gpt-4o-mini") |
| Chain | ์ฌ๋ฌ ๋จ๊ณ๋ฅผ ์ฐ๊ฒฐํ ํ์ดํ๋ผ์ธ | LLMChain, SequentialChain |
| Tool | LLM์ด ์ง์ ํธ์ถํ ์ ์๋ ํจ์ | ๊ฒ์ API, ๊ณ์ฐ๊ธฐ ๋ฑ |
| Memory | ๋ํ ๋งฅ๋ฝ ์ ์ง | ConversationBufferMemory |
| Agent | Tool์ ์ค์ค๋ก ์ ํยทํ์ฉํ๋ LLM | initialize_agent() |
์ด ์ฌ์ฏ ๊ฐ์ง๋ฅผ ์กฐํฉํ๋ฉด, ๋จ์ํ Q&A๋ถํฐ ์์จ์ ์์ด์ ํธ ์์คํ ๊น์ง ์ค๊ณํ ์ ์์ต๋๋ค.
LangChain์ ๊ฐ์ฅ ๋จ์ํ ์คํ ํํ๋ โํ๋กฌํํธ โ LLM โ ์ถ๋ ฅโ์ ๋จ์ผ ์ฒด์ธ์ ๋๋ค.
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from langchain_openai import ChatOpenAI
# 1๏ธโฃ ํ๋กฌํํธ ํ
ํ๋ฆฟ ์ ์
prompt = PromptTemplate.from_template("Q: {question}\nA:")
# 2๏ธโฃ LLMChain ์์ฑ
chain = LLMChain(
llm=ChatOpenAI(model="gpt-4o-mini"),
prompt=prompt
)
# 3๏ธโฃ ์คํ
result = chain.invoke({"question": "LangChain์ด๋ ๋ฌด์์ธ๊ฐ?"})
print(result)
๐ ์ถ๋ ฅ ์์
LangChain์ LLM์ ์ค์ฌ์ผ๋ก ํ๋กฌํํธ, ๋ฉ๋ชจ๋ฆฌ, ํด ๋ฑ์ ์ฒด๊ณ์ ์ผ๋ก ์ฐ๊ฒฐํ์ฌ
AI ์ํฌํ๋ก์ฐ๋ฅผ ์ฝ๊ฒ ์ค๊ณํ ์ ์๋ ํ๋ ์์ํฌ์ ๋๋ค.

์ด ๊ฐ๋จํ ์ ํ ๊ตฌ์กฐ๊ฐ ์ดํ LangChain์์ Chain + Memory + Tool + Agent๋ก ํ์ฅ๋๋ฉฐ ๋ณต์กํ ๋ํํ ์์คํ ์ ๊ธฐ๋ฐ์ด ๋ฉ๋๋ค.
LangChain์ ๋จ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋๋ผ, ์ฌ๊ณ ๋ฐฉ์์ ๋ฐ๊พธ๋ ํ๋ ์์ํฌ์ ๋๋ค.
| ์ ํต์ ์ ๊ทผ | LangChain์ ์ ๊ทผ |
|---|---|
| โGPT์ ํ๋กฌํํธ๋ฅผ ๋ฃ๋๋ค.โ | โGPT ํธ์ถ ์์ฒด๋ฅผ ํ๋์ ๋ ธ๋๋ก ์กฐํฉํ๋ค.โ |
| Prompt โ Response | Prompt โ LLM โ Tool โ Memory โ Output |
| ํ๋์ฝ๋ฉ๋ ํ๋ฆ | ์กฐ๋ฆฝ ๊ฐ๋ฅํ ์ฒด์ธ ๊ตฌ์กฐ |
| ๋จ์ ์ง๋ฌธ ์๋ต | ์์จ์ ์ถ๋ก ยท๊ฒ์ยท๊ณ์ฐ ๋ฑ ๋ณตํฉ ํ๋ |
์ฆ, LangChain์ LLM์ ํ๋์ โ์๊ฐํ๋ ํจ์(Thinking Function)โ๋ก ๋ค๋ฃจ๋ ํจ๋ฌ๋ค์์ ์ ๊ณตํฉ๋๋ค.
์๋๋ LangChain์ ์ด์ฉํ โ์ง๋ฌธ โ ๋ต๋ณโ ์ฒด์ธ์ ์ต์ ํํ์ ๋๋ค.
from langchain.chains import SimpleSequentialChain
from langchain.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
# ์์ฝ ์ฒด์ธ
summary_prompt = PromptTemplate.from_template("๋ค์ ๋ฌธ์ฅ์ ํ ์ค๋ก ์์ฝํด์ค: {text}")
summary_chain = LLMChain(llm=ChatOpenAI(model="gpt-4o-mini"), prompt=summary_prompt)
# ๋ฒ์ญ ์ฒด์ธ
translate_prompt = PromptTemplate.from_template("Translate this to English: {summary}")
translate_chain = LLMChain(llm=ChatOpenAI(model="gpt-4o-mini"), prompt=translate_prompt)
# ๋ ์ฒด์ธ์ ์ฐ๊ฒฐ
overall_chain = SimpleSequentialChain(chains=[summary_chain, translate_chain])
result = overall_chain.invoke({"text": "LangChain์ ๋ํ์ธ์ด๋ชจ๋ธ ๊ธฐ๋ฐ์ ํ์ดํ๋ผ์ธ ํ๋ ์์ํฌ์
๋๋ค."})
print(result)
๐ ์ถ๋ ฅ ์์
โLangChain is a pipeline framework based on large language models.โ
| ์ฃผ์ | ํ์ต ์ด์ | ํ์ต ๋ฐฉํฅ |
|---|---|---|
| LCEL (LangChain Expression Language) | LangChain ๋ด๋ถ ์คํ ์์ง ์ดํด | ๊ณต์ ๋ฌธ์ + LCEL ์์ ์ฝ๋ ์ค์ต |
| PromptTemplate ๊ณ ๊ธ ๋ฌธ๋ฒ | ๋ค์ํ ์ ๋ ฅ ๋ณ์ยท์กฐ๊ฑด ์ฒ๋ฆฌ | f-string, Jinja2 ๋ฌธ๋ฒ ํ์ต |
| Callback / Tracing | LLM ํธ์ถ ๋ก๊ทธ ์ถ์ ๋ฐ ์๊ฐํ | LangSmith ์ฌ์ฉ |
| LangChainHub | ์คํ ์ฒด์ธ/Tool ๊ณต์ ํ๋ซํผ ํ์ฉ | Hub์ ์ง์ ๋ฑ๋ก ์ค์ต |
| LangServe | Chain/Agent๋ฅผ REST API๋ก ๋ฐฐํฌ | LangGraph ํ์ต ์ ์ค์ต ๊ธฐ๋ฐ |
| ํญ๋ชฉ | ์์ฝ |
|---|---|
| ํต์ฌ ๊ฐ๋ | LangChain์ โLLM ์ํฌํ๋ก์ฐ๋ฅผ ์ฒด๊ณํโํ๋ ์ค์ผ์คํธ๋ ์ด์ ํ๋ ์์ํฌ |
| ํต์ฌ ์ฝ๋ | PromptTemplate โ LLMChain โ invoke() |
| ๋น์ | ๋จ์ ํธ์ถ์ด ์๋ โLLM ์์คํ ์ค๊ณโ๋ก์ ์ ํ |
| ๋ค์ ํธ ์๊ณ | ๐ LangChain โก โ Chain, Memory, Agent ์ค์ ๊ตฌ์กฐ |
LangChain์ โLLM์ ์ง์ ๋ถ๋ฅด๋โ ๊ฒ์ด ์๋๋ผ,
โLLM์ด ์๋ํ๋ ํ๋ฆ ์์ฒด๋ฅผ ์ฝ๋๋ก ์ค๊ณํ๋โ ํ๋ ์์ํฌ๋ค.