[랭체인] LangGraph의 "Human in the Loop"를 활용하여 시스템을 구현하는 방법
안녕하세요! 오늘은 LangGraph를 사용하여 "Human in the Loop" 시스템을 구현하는 방법에 대해 알아보겠습니다. 이 시스템은 AI와 인간이 상호작용하며 작업을 수행할 수 있게 해주는 강력한 도구입니다.
LangGraph란?
LangGraph는 대규모 언어 모델(LLM)을 사용하여 복잡한 워크플로우를 구축할 수 있게 해주는 라이브러리입니다. 이를 통해 AI 에이전트의 행동을 제어하고, 인간의 개입을 쉽게 통합할 수 있습니다.
Human in the Loop 시스템의 구조
- 상태 정의: 시스템의 현재 상태를 나타내는 클래스를 정의합니다.
- 노드 구현: AI가 수행할 작업들을 노드로 구현합니다.
- 그래프 구성: 노드들을 연결하여 워크플로우를 정의합니다.
- 인터럽트 설정: 인간의 개입이 필요한 지점을 지정합니다.
코드 예시
from langgraph.graph import StateGraph, END
from typing import TypedDict, Annotated
import operator
from langchain_core.messages import AnyMessage, SystemMessage, HumanMessage, ToolMessage
from langchain_openai import ChatOpenAI
from langchain_community.tools.tavily_search import TavilySearchResults
from langgraph.checkpoint.sqlite import SqliteSaver
class AgentState(TypedDict):
messages: Annotated[list[AnyMessage], reduce_messages]
class Agent:
def __init__(self, model, tools, system="", checkpointer=None):
self.system = system
graph = StateGraph(AgentState)
graph.add_node("llm", self.call_openai)
graph.add_node("action", self.take_action)
graph.add_conditional_edges("llm", self.exists_action, {True: "action", False: END})
graph.add_edge("action", "llm")
graph.set_entry_point("llm")
self.graph = graph.compile(
checkpointer=checkpointer,
interrupt_before=["action"]
)
self.tools = {t.name: t for t in tools}
self.model = model.bind_tools(tools)
# ... (다른 메서드들)
주요 기능
- 상태 관리:
AgentState
클래스를 통해 대화 이력을 관리합니다. - 도구 사용:
TavilySearchResults
와 같은 외부 도구를 통합하여 AI의 능력을 확장합니다. - 인터럽트:
interrupt_before=["action"]
을 통해 AI가 행동을 취하기 전에 인간이 개입할 수 있는 지점을 만듭니다. - 체크포인트:
SqliteSaver
를 사용하여 상태를 저장하고 불러올 수 있습니다.
사용 예시
model = ChatOpenAI(model="gpt-3.5-turbo")
tool = TavilySearchResults(max_results=2)
abot = Agent(model, [tool], system=prompt, checkpointer=memory)
messages = [HumanMessage(content="What's the weather in SF?")]
thread = {"configurable": {"thread_id": "1"}}
for event in abot.graph.stream({"messages": messages}, thread):
for v in event.values():
print(v)
이 코드는 AI에게 샌프란시스코의 날씨를 물어보고, AI가 검색 도구를 사용하여 정보를 찾는 과정을 보여줍니다.
고급 기능: 시간 여행과 상태 수정
LangGraph는 대화의 특정 시점으로 돌아가거나 상태를 수정할 수 있는 기능도 제공합니다.
# 이전 상태로 돌아가기
previous_state = abot.graph.get_state_history(thread)[-3]
abot.graph.invoke(None, previous_state.config)
# 상태 수정하기
current_state = abot.graph.get_state(thread)
current_state.values['messages'][-1].content = "수정된 메시지"
abot.graph.update_state(thread, current_state.values)
이러한 기능들을 통해 개발자는 AI 시스템의 행동을 세밀하게 제어하고, 필요한 시점에 인간의 지식과 판단을 통합할 수 있습니다.
결론
LangGraph를 사용한 Human in the Loop 시스템은 AI의 능력과 인간의 전문성을 결합하여 더 강력하고 신뢰할 수 있는 솔루션을 만들 수 있게 해줍니다. 이는 고객 서비스, 내용 생성, 의사결정 지원 등 다양한 분야에서 혁신적인 애플리케이션을 개발하는 데 사용될 수 있습니다.
AI 기술이 발전함에 따라, 인간과 AI의 협력은 더욱 중요해질 것입니다. LangGraph와 같은 도구들은 이러한 협력을 가능하게 하는 핵심 기술이 될 것입니다.
- [랭체인] 간단한 텍스트 생성 체인 만들기
- [랭체인] 텍스트 감성 분류 체인 만들기
- [랭체인] 간단한 챗봇 만들기
- [랭체인] 수학 연산 체인 구현하기
- [랭체인] SQL 데이터베이스 쿼리 자동화
- [랭체인] PythonREPL을 활용한 동적 코드 실행 챗봇 구현
- [랭체인] PDF 문서 기반 QA챗봇 구현
- [랭체인] 대화형 챗봇 만들기
- [랭체인] 도구 체인 구축 가이드
- [랭체인] 라우팅 체인 - 유연한 AI 응답 시스템 구축하기
- [랭체인] 간단한 ReAct 에이전트 구축하기
- [랭체인] 지능형 에이전트 구축하기
- [랭체인] Agentic Search: 더 스마트한 웹 검색 방법
- [랭체인] LangGraph를 사용하여 고급 대화형 AI 에이전트 구축하기
- [랭체인] LangGraph의 "Human in the Loop"를 활용하여 시스템을 구현하는 방법
[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.
Congratulations, your post has been upvoted by @upex with a 0.22% upvote. We invite you to continue producing quality content and join our Discord community here. Visit https://botsteem.com to utilize usefull and productive automations #bottosteem #upex