인공지능(AI)은 빠르게 성장하고 있는 분야입니다. AI 에이전트가 복잡한 작업을 수행하고 복잡한 의사 결정을 내릴 수 있도록 언어 모델이 발전하고 있습니다. 그러나 이러한 에이전트의 기술이 계속 성장함에 따라 이를 지원하는 인프라가 이를 따라잡는 데 어려움을 겪고 있습니다.
AI 에이전트의 혁신을 위해 설계된 혁신적인 라이브러리, LangGraph 빌드 및 런타임 구현.
LangGraph가 새로운 에이전트를 선보입니다.빌드 및 런타임건설적 패러다임: 상담원 워크플로를 순환 그래프 토폴로지에 기반한 구조로 보는 패러다임입니다.
LangGraph란 무엇인가요?
LangChain의 중요한 가치 제안은 사용자 정의 체인을 쉽게 생성할 수 있다는 것입니다. 그러나 LangChain에는 이러한 체인에 루프를 도입할 수 있는 쉬운 방법이 없습니다. 실제로 이러한 체인은 방향성 비순환 그래프(DAG) - 대부분의 데이터 오케스트레이션 프레임워크와 마찬가지로.
복잡한 LLM 애플리케이션을 빌드할 때 흔히 볼 수 있는 패턴은 런타임에 루프를 도입하는 것입니다. 이러한 루프는 종종 루프의 다음 동작을 추론하기 위해 LLM을 사용합니다. 이는 본질적으로 for 루프에서 LLM을 실행하는 것과 동일합니다. 이러한 시스템을 에이전트라고 부르기도 합니다.
가장 간단한 형태는 두 단계로 이루어진 루프입니다:
- LLM을 호출하여 사용자에게 어떤 조치를 취하거나 어떤 응답을 제공할지 결정합니다.
- 주어진 작업을 수행하고 1단계로 돌아갑니다.
이러한 단계는 최종 응답이 생성될 때까지 반복됩니다. 이 루프는 LangChain의 핵심인 에이전트 실행자를 구동하는 루프입니다. 매우 간단한 루프이지만, 거의 모든 의사 결정과 추론 능력을 LLM에 맡기기 때문에 가장 중요한 루프이기도 합니다.
이 프로세스에는 일반적으로 더 많은 제어가 필요하다는 점에 유의하세요. 예를 들어 상담원이 특정 툴을 먼저 호출하도록 강제하거나, 툴이 호출되는 방식을 더 세밀하게 제어하거나, 상담원의 상태에 따라 다른 프롬프트를 표시하는 등의 작업을 수행해야 합니다.
이는 제어되는 프로세스이며, LangChain은 이를 "상태 머신"이라고 부릅니다.
이러한 상태 머신에는 루프 기능이 있지만, 이 루프를 구성하는 데는 사람의 개입이 필요합니다.
LangGraph는 이러한 상태 머신을 그래프로 지정하여 생성합니다.
랭그래프는 랭체인 위에 구축되었으며, 랭체인 생태계와 완벽하게 호환됩니다.상호 운용성. 주로 루프 다이어그램을 쉽게 생성하는 방법을 도입하여 새로운 가치를 추가합니다. 이는 에이전트 런타임을 생성할 때 매우 유용합니다.
이 접근 방식을 통해 에이전트는 이전 모델의 선형 실행 모델보다 더 다양하고 미묘한 동작을 나타낼 수 있습니다. LangGraph는 그래프 이론을 사용하여 복잡한 네트워크 에이전트 시스템을 개발하는 새로운 방법을 제공합니다.
그림: 코드 생성을 위한 LangGraph
예: 동적 질문 및 답변 시스템
take 사용자가 모든 정보를 한 번에 전송하지 않고 단계별로 모델에 정보를 제공할 수 있습니다.
처방전 순환 다이어그램을 사용합니다:
- LLM이 초기 응답을 생성하도록 허용합니다.
- 답변이 불완전하거나 추가 정보가 필요한 경우 새 질문을 생성하여 사용자에게 계속 질문합니다.
- 사용자가 문제가 해결되었음을 확인할 때까지 기다립니다.
사이클 다이어그램의 구조
- 노드각 노드는 텍스트 생성, 질문 답변, 데이터 처리 등과 같은 특정 작업 또는 작업을 나타냅니다.
- 엣지노드 간 연결은 작업 실행 순서를 나타내며, 조건부 판단이 있을 수 있습니다.
- 루핑 경로루프는 노드의 출력이 이전 노드로 피드백되어야 하거나 반복적으로 실행되어야 할 때 형성됩니다.
- 정지 조건루프 다이어그램은 결과 품질이 요구 사항을 충족하거나 설정된 횟수 제한에 도달하거나 외부에서 트리거된 중지 신호가 활성화되는 등 일종의 종료 조건에 따라 종료될 수 있습니다.
왜 LangGraph를 사용하나요?
- 손재주 AI 에이전트가 발전함에 따라 개발자는 개인화된 실행 계획과 의사 결정 절차를 지원하기 위해 에이전트 런타임에 대한 더 많은 제어 권한이 필요합니다.
- AI 추론의 순환적 특성 많은 복잡한 LLM 애플리케이션은 연쇄 추론과 같은 전략을 사용할 때 주기적 실행에 의존합니다.LangGraph는 이러한 주기적 프로세스를 모델링하기 위한 자연스러운 프레임워크를 제공합니다.
- 다중 지능 시스템 다중 지능 워크플로우가 보편화됨에 따라 여러 자율 지능을 효율적으로 관리하고 조정할 수 있는 시스템에 대한 필요성이 증가하고 있습니다.
코드를 사용하여 LangGraph의 작동 방식을 확인하세요.
LangGraph의 기능은 몇 가지 기본 요소를 기반으로 합니다:
- 노드. 함수 또는 상담원용 툴입니다.
- 에지. 에이전트 시스템에서 실행 경로와 데이터 흐름을 정의하여 노드를 연결합니다.
- StateGraph. LangGraph를 사용하면 상태 객체를 관리하고 업데이트하여 실행 주기 간에 영구 데이터를 유지할 수 있으며, 노드 간에 데이터가 흐르게 됩니다.
그림 : LangGraph의 기본 워크플로우
StateGraph
StateGraph
는 그래프를 나타내는 클래스입니다. 그래프를 만들려면 state
정의를 사용하여 이 클래스를 초기화할 수 있습니다. 상태 정의는 시간이 지남에 따라 업데이트되는 중앙 상태 객체를 나타냅니다. 이 상태는 그래프의 노드에 의해 업데이트되며, 노드는 이 상태의 속성에 대한 연산을 키-값 저장소 형태로 반환합니다.
import os # 导入操作系统模块
os.environ['OpenAI_API_KEY'] = 'hk-iwtbi1e427'
from typing import Annotated
from typing_extensions import TypedDict
from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import add_messages
class State(TypedDict):
# messages 的类型为“list”。Annotated中的“add_messages” 定义了如何更新messages
# 在本例中,messages是追加到list中的,而不是覆盖
messages: Annotated[list, add_messages]
# 创建StateGraph的实例,传入State类
graph_builder = StateGraph(State)
노드
만들기 StateGraph
그 후에는 graph.add_node(name, value)
구문을 사용하여 노드를 추가합니다. name
인수는 노드 이름인 문자열입니다. value
인수는 호출될 함수 또는 실행 가능한 LCEL입니다.
이 함수 /LCEL은 다음과 같은 함수를 허용합니다. State
객체는 입력과 동일한 형식의 딕셔너리를 가지고 있으며, 입력과 동일한 형식의 딕셔너리를 사용하는 State
객체의 키를 사용하여 사전을 업데이트합니다.
from langchain_openai import ChatOpenAI # 从langchain_openai模块导入ChatOpenAI
llm = ChatOpenAI( # 创建ChatOpenAI的实例
model="gpt-4o-mini", # 指定模型
temperature=0, # 设置温度
base_url="https://api.openai-hk.com/v1"# 设置基础URL
)
def chatbot(state: State):# 定义chatbot函数,接受State类型的参数
"""
处理聊天机器人请求并返回消息。
参数:
state (State): 包含消息的状态。
返回:
dict: 机器人生成的消息的字典。
"""
return {"messages": [llm.invoke(state["messages"])]} # 返回包含消息的字典
# 第一个参数是节点name
# 第二个参数是被调用的函数或对象
graph_builder.add_node("chatbot", chatbot) # 向图中添加节点,节点名称为"chatbot"
엣지
노드 중 하나가 항상 다른 노드 다음에 호출됨을 나타냅니다.
# 添加从START到"chatbot"的边
graph_builder.add_edge(START, "chatbot")
# 添加从"chatbot"到END的边
graph_builder.add_edge("chatbot", END)
컴파일 컴파일
그래프를 정의한 후에는 실행 가능하도록 컴파일할 수 있습니다! LangChain과 동일한 메서드를 노출합니다( .invoke
(수학.) 속 .stream
(수학.) 속 .astream_log
등)를 사용하여 체인과 같은 방식으로 호출할 수 있습니다.
graph = graph_builder.compile() # 编译图
움직여야 합니다.
def stream_graph_updates(user_input: str): # 定义stream_graph_updates函数,接受用户输入
"""
使用user_input流式更新图的消息。
参数:
user_input (str): 用户输入的消息。
返回:
None
"""
# 遍历图的流事件,传入用户消息以获取模型的响应
for event in graph.stream({"messages": [("user", user_input)]}): # 遍历图的流事件
for value in event.values(): # 遍历事件的值
print("Assistant:", value["messages"][-1].content) # 打印助手的最后一条消息
whileTrue:
try:
user_input = input("User: ") # 获取用户输入
if user_input.lower() in ["quit", "exit", "q"]: # 检查用户是否想退出
print("Goodbye!")
break# 退出循环
# 调用stream_graph_updates函数处理用户输入
stream_graph_updates(user_input)
except: # 捕获异常
# fallback if input() is not available
user_input = "What do you know about LangGraph?"# 设置默认用户输入
print("User: " + user_input) # 打印用户输入
stream_graph_updates(user_input) # 调用stream_graph_updates函数处理默认输入
break# 退出循环
시각화 '다이어그램'(선택 사항)
주피터 노트북 환경에서 '다이어그램' 시각화하기

운영 효과

AI가 발전함에 따라 LangGraph와 같은 프레임워크의 중요성이 점점 더 커지고 있습니다.
개발자들이 LangGraph 기능에 익숙해지면 더 복잡한 작업을 수행할 수 있는 고급 AI 에이전트가 등장할 것으로 기대할 수 있습니다.
요약하자면, LangGraph는 AI 에이전트 개발의 획기적인 발전입니다. 개발자는 이전 시스템의 단점을 제거하고 에이전트 구성 및 실행을 위한 유연한 그래프 기반 프레임워크를 제공함으로써 AI 에이전트로 가능한 한계를 뛰어넘을 수 있으며, LangGraph는 향후 AI 개발 방향에 큰 영향을 미칠 수 있는 잠재력을 가지고 있습니다.
© 저작권 정책
이 글은 저작권이 있으며 무단으로 복제해서는 안 됩니다.
관련 문서
댓글 없음...