[랭체인] LangGraph의 "Human in the Loop"를 활용하여 시스템을 구현하는 방법steemCreated with Sketch.

in #kr-dev3 months ago (edited)

안녕하세요! 오늘은 LangGraph를 사용하여 "Human in the Loop" 시스템을 구현하는 방법에 대해 알아보겠습니다. 이 시스템은 AI와 인간이 상호작용하며 작업을 수행할 수 있게 해주는 강력한 도구입니다.

LangGraph란?

LangGraph는 대규모 언어 모델(LLM)을 사용하여 복잡한 워크플로우를 구축할 수 있게 해주는 라이브러리입니다. 이를 통해 AI 에이전트의 행동을 제어하고, 인간의 개입을 쉽게 통합할 수 있습니다.

Human in the Loop 시스템의 구조

  1. 상태 정의: 시스템의 현재 상태를 나타내는 클래스를 정의합니다.
  2. 노드 구현: AI가 수행할 작업들을 노드로 구현합니다.
  3. 그래프 구성: 노드들을 연결하여 워크플로우를 정의합니다.
  4. 인터럽트 설정: 인간의 개입이 필요한 지점을 지정합니다.

코드 예시

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)

    # ... (다른 메서드들)

주요 기능

  1. 상태 관리: AgentState 클래스를 통해 대화 이력을 관리합니다.
  2. 도구 사용: TavilySearchResults와 같은 외부 도구를 통합하여 AI의 능력을 확장합니다.
  3. 인터럽트: interrupt_before=["action"]을 통해 AI가 행동을 취하기 전에 인간이 개입할 수 있는 지점을 만듭니다.
  4. 체크포인트: 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와 같은 도구들은 이러한 협력을 가능하게 하는 핵심 기술이 될 것입니다.

#LangChain

Posted using Obsidian Steemit plugin

Sort:  

[광고] 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

Coin Marketplace

STEEM 0.17
TRX 0.15
JST 0.029
BTC 61039.43
ETH 2460.28
USDT 1.00
SBD 2.66