728x90
반응형
LangChain
LangChain 은 LLM 기반 애플리케이션을 구성하는 프레임워크로, 다양한 모듈 (LangChain Components) 을 조합해 복잡한 LLM 기반 파이프라인을 구성하는 기능을 제공합니다.
LangChain 은 Agent 뿐 아니라, PromptTemplate, Tool, Chain, Memory 등 다양한 구성 요소를 제공하며, Agent 는 외부 Tool 들과 LLM 을 동적으로 연결해 문제를 해결하는 방식의 한 예입니다.
한 편, LangChain 이 LLM 을 중심으로 설계된 건 맞지만, 전체 구조는 LLM 을 선택적으로 사용하는 조합형 프레임워크이기 때문에 LangChain 을 사용할 때 LLM 이 필수 구성 요소는 아닙니다.
- LangChain 의 Agent 는 LLM 의 추론 능력을 활용하여 "Tool 선택", "질문 분석", "후처리" 등을 전부 수행하기 때문에, LLM 없이 Agent 는 동작하지 않음. 즉, Agent 에 LLM 은 필수 구성 요소.
- 하지만 일부 기능 (ex. Tool, Memory, PromptTemplate 등) 은 LLM 없이도 독립적으로 사용할 수 있음
Tool 사용 방식
- Tool 단독 방식
- 사용자가 직접 적절한 Tool 을 호출하여 사용
- Tool 에서 return 받은 결과값을 그대로 전달
- ex. {“weather”: “clear”, “temp”: 22}
from langchain.tools import Tool
def add(x: int, y: int) -> int:
return x + y
def subtract(x: int, y: int) -> int:
return x - y
add_tool = Tool(
name="AddTwoNumbers",
func=lambda x: add(*map(int, x.split())),
description="두 수를 더합니다. 예: '3 5'"
)
sub_tool = Tool(
name="SubtractTwoNumbers",
func=lambda x: subtract(*map(int, x.split())),
description="첫 번째 숫자에서 두 번째 숫자를 뺍니다. 입력 예시: '10 4'"
)
# 단독 실행
result = add_tool.run("3 5")
print(result) # 출력: 8
- Agent 방식
- LLM 이 Tool 의 사용을 스스로 판단
- LangChain Agent 는 내부적으로 LLM 에게 Tool 의 목록과 Description 을 제공하고, 질문에 가장 적합한 Tool 을 LLM 이 선택하도록 유도
- Tool 에서 받은 결과를 LLM 이 응답 형태로 가공하여 사용자에게 전달
- ex. “현재 서울의 날씨는 맑고 기온은 22도입니다. 산책하기 좋은 날씨예요!”
- LLM 이 Tool 의 사용을 스스로 판단
from langchain.agents import initialize_agent, AgentType
from langchain.chat_models import ChatOpenAI
from langchain.tools import Tool
# 두 개의 Tool 정의
def add(x: int, y: int) -> int:
return x + y
def subtract(x: int, y: int) -> int:
return x - y
add_tool = Tool(
name="AddTwoNumbers",
func=lambda x: add(*map(int, x.split())),
description="두 숫자를 더합니다. 입력 예시: '3 5'"
)
sub_tool = Tool(
name="SubtractTwoNumbers",
func=lambda x: subtract(*map(int, x.split())),
description="첫 번째 숫자에서 두 번째 숫자를 뺍니다. 입력 예시: '10 4'"
)
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
agent = initialize_agent(
tools=[add_tool, sub_tool],
llm=llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
verbose=True
)
agent.run("7 이랑 5 더하면 뭐야?")
Agent 는 LLM 의 추론 능력을 활용하는 주체일 뿐, LLM 그 자체가 아닙니다.
728x90
반응형