LangChain์ ํ์ฉํ LLM(Large Language Model) ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์์ ๊ธฐ๋ณธ LLM ์ฒด์ธ์ ๊ฐ์ฅ ํต์ฌ์ ์ธ ๊ฐ๋ ์ ๋๋ค. ์ด ์ฒด์ธ์ ์ฌ์ฉ์์ ์ ๋ ฅ(ํ๋กฌํํธ)์ ๋ฐ์ LLM์ ํตํด ์ํ๋ ์๋ต์ ์์ฑํ๋ ๊ฐ๋จํ๋ฉด์๋ ๊ฐ๋ ฅํ ๊ตฌ์กฐ๋ฅผ ๋งํด์. ๋ํํ AI๋ถํฐ ์๋ ๋ฌธ์ ์์ฝ๊น์ง ๋ค์ํ LLM ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ฐ์ด ๋ฉ๋๋ค.
1. ๊ธฐ๋ณธ LLM ์ฒด์ธ์ ํต์ฌ ๊ตฌ์ฑ ์์
๊ธฐ๋ณธ LLM ์ฒด์ธ์ ํฌ๊ฒ ๋ ๊ฐ์ง ์์๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
- ํ๋กฌํํธ(Prompt): LLM์๊ฒ ์ด๋ค ์์ ์ ์ํํ ์ง ์๋ ค์ฃผ๋ ์ง์๋ฌธ์ด์์. ์ง๋ฌธ, ๋ช ๋ น, ํน์ ๋งฅ๋ฝ์ ์ ๊ณตํ๋ ๋ฌธ์ฅ ๋ฑ ๋ค์ํ ํํ๋ฅผ ๊ฐ์ง ์ ์์ผ๋ฉฐ, LLM์ ์๋ต ํ์ง์ ๊ฒฐ์ ํ๋ ๊ฐ์ฅ ์ค์ํ ์์์ ๋๋ค. ํจ๊ณผ์ ์ธ ํ๋กฌํํธ๋ LLM์ด ์๋ํ ๋ฐฉํฅ์ผ๋ก ์ ํํ ์๋ตํ๋๋ก ์ ๋ํฉ๋๋ค.
- LLM(Large Language Model): GPT-3.5, GPT-4, Gemini ๋ฑ ๋๊ท๋ชจ ์ธ์ด ๋ชจ๋ธ์ ์๋ฏธํฉ๋๋ค. ๋ฐฉ๋ํ ์์ ํ ์คํธ ๋ฐ์ดํฐ๋ก ํ์ต๋์ด ์ธ์ด๋ฅผ ์ดํดํ๊ณ ์๋ก์ด ํ ์คํธ๋ฅผ ์์ฑํ๋ ๋ฅ๋ ฅ์ ๊ฐ์ถ๊ณ ์์ต๋๋ค. ํ๋กฌํํธ๋ฅผ ๋ถ์ํ๊ณ , ํ์ต๋ ์ง์์ ๋ฐํ์ผ๋ก ์์ฒญ๋ ์์ ์ ์ํํ๊ฑฐ๋ ์ ์ ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ์ญํ ์ ํฉ๋๋ค.
2. ์๋ ๋ฐฉ์
๊ธฐ๋ณธ LLM ์ฒด์ธ์ ์๋ ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ํ๋กฌํํธ ์์ฑ: ์ฌ์ฉ์์ ์๊ตฌ์ฌํญ์ด๋ ์ํํ ์์ ์ ์ ์ํ๋ ํ๋กฌํํธ๋ฅผ ๋ง๋ญ๋๋ค. ์ด ํ๋กฌํํธ๋ LLM์ด ๋ ์ ํํ๊ฒ ์๋ตํ ์ ์๋๋ก ๋ช ํํ ์ง์นจ๊ณผ ๋งฅ๋ฝ์ ํฌํจํ๋๋ก ์ต์ ํํ ์ ์์ด์.
- LLM ์ฒ๋ฆฌ: ์์ฑ๋ ํ๋กฌํํธ๋ LLM์๊ฒ ์ ๋ฌ๋ฉ๋๋ค. LLM์ ํ๋กฌํํธ๋ฅผ ๋ถ์ํ๊ณ , ๋ด๋ถ์ ์ผ๋ก ํ์ต๋ ์ง์๊ณผ ํจํด์ ํ์ฉํ์ฌ ์๋ต์ ์์ฑํฉ๋๋ค.
- ์๋ต ๋ฐํ: LLM์ด ์์ฑํ ์๋ต์ ์ฌ์ฉ์์๊ฒ ์ ๋ฌ๋ฉ๋๋ค. ์ด ์๋ต์ ๋จ์ํ ๋ต๋ณ, ์์ฝ๋ ์ ๋ณด, ํน์ ์์ฑ๋ ํ ์คํธ ๋ฑ ๋ค์ํ ํํ๋ฅผ ๋จ ์ ์์ต๋๋ค.
3. ์ค์ต ์์ : LangChain์ผ๋ก LLM ์ฒด์ธ ๋ง๋ค๊ธฐ
์ด์ ์ค์ ์ฝ๋๋ฅผ ํตํด LangChain์์ ๊ธฐ๋ณธ LLM ์ฒด์ธ์ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์์ 1: ๋จ์ LLM ํธ์ถ
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก, ChatOpenAI ํจ์๋ฅผ ์ฌ์ฉํ์ฌ OpenAI์ LLM ๋ชจ๋ธ์ ์ง์ ํ๋กฌํํธ๋ฅผ ์ ๋ฌํ๋ ์์ ์ ๋๋ค.
from langchain_openai import ChatOpenAI
# LLM ๋ชจ๋ธ ์ธ์คํด์ค ์์ฑ
llm = ChatOpenAI(model="gpt-4o-mini")
# ๋ชจ๋ธ์ ์ง์ ํ๋กฌํํธ ์ ๋ฌ ๋ฐ ์คํ
llm.invoke("์ง๊ตฌ์ ์์ ์ฃผ๊ธฐ๋?")
์ ์ฝ๋๋ฅผ ์คํํ๋ฉด, llm ๊ฐ์ฒด๊ฐ "์ง๊ตฌ์ ์์ ์ฃผ๊ธฐ๋?" ๋ผ๋ ์ง๋ฌธ์ ๋ฐ์ ๋ต๋ณ์ ์์ฑํ๊ณ , AIMessage ๊ฐ์ฒด ํํ๋ก ๋ฐํํฉ๋๋ค.
AIMessage(content='์ง๊ตฌ์ ์์ ์ฃผ๊ธฐ๋ ์ฝ 23์๊ฐ 56๋ถ 4์ด์
๋๋ค. ์ด๊ฒ์ ํญ์ฑ์ผ(sidereal day)์ด๋ผ๊ณ ํฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ํํ ๋งํ๋ ํ๋ฃจ 24์๊ฐ์ ํ์์ผ(solar day)๋ก, ์ง๊ตฌ๊ฐ ์์ ํ๋ฉด์ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ํ์์ ๊ธฐ์ค์ผ๋ก ํ๋ฃจ๊ฐ 24์๊ฐ์ด ๋ฉ๋๋ค.')
์์ 2: ํ๋กฌํํธ ํ ํ๋ฆฟ ์ฌ์ฉ
์ด๋ฒ์๋ ๋ ์ฒด๊ณ์ ์ธ ์ ๊ทผ์ ์ํด ํ๋กฌํํธ ํ ํ๋ฆฟ์ ์ฌ์ฉํด ๋ณด๊ฒ ์ต๋๋ค. ํ๋กฌํํธ ํ ํ๋ฆฟ์ ํ๋กฌํํธ์ ํ์์ ๋ฏธ๋ฆฌ ์ ์ํด๋๊ณ , ํ์ํ ๋ถ๋ถ๋ง ๋ณ์๋ก ์ฑ์ ๋ฃ์ด ์ฌ์ฉํ๋ ๋ฐฉ์์ ๋๋ค.
ChatPromptTemplate.from_template() ๋ฉ์๋๋ฅผ ์ด์ฉํด ํ๋กฌํํธ ํ ํ๋ฆฟ์ ์์ฑํ ์ ์์ต๋๋ค. ์๋ ์์ ๋ LLM์๊ฒ "์ฒ๋ฌธํ ์ ๋ฌธ๊ฐ" ์ญํ ์ ๋ถ์ฌํ์ฌ ์ง๋ฌธ์ ๋ต๋ณํ๋๋ก ์ง์ํ๋ ํ ํ๋ฆฟ์ ๋๋ค.
from langchain_core.prompts import ChatPromptTemplate
# ํ๋กฌํํธ ํ
ํ๋ฆฟ ์ ์
prompt = ChatPromptTemplate.from_template(
"You are an expert in astronomy. Answer the question. <Question>: {input}"
)
# ํ
ํ๋ฆฟ ๊ฐ์ฒด ํ์ธ
prompt
๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด input_variables=['input']์ ํตํด input์ด๋ผ๋ ๋ณ์๋ฅผ ๋ฐ๋ ํ๋กฌํํธ ๊ฐ์ฒด๊ฐ ์์ฑ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
ChatPromptTemplate(input_variables=['input'], messages=[HumanMessagePromptTemplate(prompt=PromptTemplate(input_variables=['input'], template='You are an expert in astronomy. Answer the question. <Question>: {input}'))])
์์ 3: LCEL์ ํ์ฉํ ์ฒด์ธ ๊ตฌ์ฑ
LangChain Expression Language (LCEL)์ ํ์ดํ(|) ์ฐ์ฐ์๋ฅผ ์ด์ฉํด ํ๋กฌํํธ, ๋ชจ๋ธ, ์ถ๋ ฅ ํ์๋ฅผ ๊ฐํธํ๊ฒ ์ฐ๊ฒฐํ์ฌ ํ๋์ ์ฒด์ธ์ผ๋ก ๋ง๋๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ๋๋ค.
๋ค์ ์ฝ๋๋ ์์ ์ ์ํ prompt์ llm์ ์ฐ๊ฒฐํ๊ณ , ์ต์ข ์ ์ผ๋ก StrOutputParser๋ฅผ ํตํด LLM์ ์๋ต์ ๊น๋ํ ๋ฌธ์์ด ํํ๋ก ๋ณํํ๋ ๊ณผ์ ์ ๋ณด์ฌ์ค๋๋ค.
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
# ํ๋กฌํํธ, ๋ชจ๋ธ, ์ถ๋ ฅ ํ์ ์ ์
prompt = ChatPromptTemplate.from_template("You are an expert in astronomy. Answer the question. <Question>: {input}")
llm = ChatOpenAI(model="gpt-4o-mini")
output_parser = StrOutputParser()
# LCEL๋ก ์ฒด์ธ ์ฐ๊ฒฐ
chain = prompt | llm | output_parser
# ์ฒด์ธ ํธ์ถ
chain.invoke({"input": "์ง๊ตฌ์ ์์ ์ฃผ๊ธฐ๋?"})
์ด ์ฝ๋๋ฅผ ์คํํ๋ฉด, ํ๋กฌํํธ ํ ํ๋ฆฟ์ด ๋จผ์ ์ง๋ฌธ์ ์์ฑํ๊ณ , LLM์ด ๋ต๋ณ์ ์์ฑํ๋ฉฐ, ๋ง์ง๋ง์ผ๋ก StrOutputParser๊ฐ ๊ทธ ๋ต๋ณ์ ์์ํ ํ ์คํธ๋ก ๋ณํํ์ฌ ๋ฐํํฉ๋๋ค.
์ง๊ตฌ์ ์์ ์ฃผ๊ธฐ๋ ์ฝ 24์๊ฐ์
๋๋ค. ์ด๊ฒ์ ํ๋ฃจ์ ๊ธธ์ด๋ฅผ ๊ฒฐ์ ํ๋๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
'Dev,AI > Langchain' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [LLM] Structured Output ๋ ์ผ๋ง๋ ์ ๋ขฐํ ์ ์์๊น ? (3) | 2025.12.02 |
|---|
