강의

멘토링

로드맵

sangin1.park님의 프로필 이미지
sangin1.park

작성한 질문수

LangGraph를 활용한 AI Agent 개발 (feat. MCP)

2.7 병렬 처리를 통한 효율 개선 (feat. 프롬프트 엔지니어링)

병렬 처리 질문 있습니다.

해결된 질문

작성

·

123

0

graph_builder.add_edge('get_tax_base_equation', 'calculate_tax_base')
graph_builder.add_edge('get_tax_deduction', 'calculate_tax_base')
graph_builder.add_edge('get_market_ratio', 'calculate_tax_base')

2.7 병렬 처리를 통한 효율 개선 (feat. 프롬프트 엔지니어링).ipynb 에서 질문 있습니다.

3개가 병렬로 실행된다면 분명 먼저 끝나는 노드가 있을 거고 그러면 완료 노드 순서에 맞게 calculate_tax_base를 실행해야 하지만 결과를 보면 calculate_tax_base를 한번만 실행하더라고요. 그러면 어떠한 조작 없이도 ranggraph에서 add_edge를 사용한 노드라면 자동으로 병렬 처리 완료 상태를 보관하고 3개가 전부 종료 된 후 실행된다고 이해했는데 맞을 까요?

제가 이해한게 맞다면 add_edge를 사용하지 않은 노드(Comand 명령어 사용한 노드)들의 병렬 처리에서 스레드 동기화 처리가 자동으로 안되기 때문에 반드시 add_edge를 반드시 사용해야하나요?

이런 질문을 드리는 이유는 Command를 병렬로 처리해보고 있는데 궁금증이 생겨서 그렇습니다.!

    messages = [
       {"role": "system", "content": system_prompt},
    ] + state["messages"]

    response = llm.with_structured_output(Routers).invoke(messages)
    datasources = [router['next'] for router in response['nexts']]
    print(datasources)
    
    # FINISH를 analyst_node로 변환
    goto_nodes = [
        "analyst_node" if ds == "FINISH" else ds
        for ds in datasources
    ]

    # 병렬 실행을 위해 전체 리스트 반환
    return Command(goto=goto_nodes)

 

퀴즈

61%나 틀려요. 한번 도전해보세요!

LangGraph에서 'Conditional Edge'의 주된 역할은 무엇일까요?

두 노드를 무조건 연결하는 역할

에이전트의 현재 상태를 저장하는 역할

그래프가 상태나 조건에 따라 다음 노드를 동적으로 선택하게 함

특정 작업을 수행하거나 액션을 실행함

답변 1

0

제이쓴님의 프로필 이미지
제이쓴
지식공유자

안녕하세요! 좋은 질문 감사합니다. 답변을 드리자면

  1. 3개가 병렬로 실행된다면 분명 먼저 끝나는 노드가 있을 거고 그러면 완료 노드 순서에 맞게 calculate_tax_base를 실행해야 하지만 결과를 보면 calculate_tax_base를 한번만 실행하더라고요. 그러면 어떠한 조작 없이도 ranggraph에서 add_edge를 사용한 노드라면 자동으로 병렬 처리 완료 상태를 보관하고 3개가 전부 종료 된 후 실행된다고 이해했는데 맞을 까요?

    1. 맞습니다. 3개가 모두 종료된 다음에 실행됩니다

    2. 그리고 앞에 3가지는 종종 pretty_print()로 확인했을 때 다 안보이는 경우가 많은데, 병렬작업이 끝나고 실행되는 노드의 state를 확인해보시면 정상적으로 다 끝난것을 확인하실 수 있을거에요

  2. 이런 질문을 드리는 이유는 Command를 병렬로 처리해보고 있는데 궁금증이 생겨서 그렇습니다.!

     

    1. add_edge의 경우에는 DAG를 구성하기 때문에 의도하신대로 종속성을 가지고 병렬로 처리해야할 노드가 완료되는 것을 기다리지만, Command()는 DAG구성이 되지 않습니다.

      1. 그래서 병렬로 실행은 가능하겠지만, analyst_node로 들어가기 전에 다른 노드의 작업들이 끝났다는게 보장되지 않을거에요.

    2. 다만 이건 이론상의 내용이고 저도 실제로 시도해보지는 않아서 만약 가능하다고 판단되시면 공유해주실 수 있을까요? 저를 비롯해서 유사한 궁금증을 갖고있는 다른 수강생분들께도 많은 도움이 될 것 같습니다

       

추가로 설명이 필요한 부분이 있으시면 말씀해주세요!

sangin1.park님의 프로필 이미지
sangin1.park
질문자

선생님 안녕하세요. Command()를 사용하여 병렬 처리하는 방법에 대해 고민을 계속 했습니다. 현재는 해당 문제를 해결 한 것 같아서 제가 해결한 내용 공유 드립니다.
https://github.com/tkddls3319/goto_supervisor_fastapi

 

제이쓴님의 프로필 이미지
제이쓴
지식공유자

와우 레포 구성 엄청 짱짱한데요! 공유해주셔서 감사합니다~

sangin1.park님의 프로필 이미지
sangin1.park

작성한 질문수

질문하기