inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

병렬 처리 질문 있습니다.

해결된 질문

120

sangin1.park

작성한 질문수 14

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)

 

프롬프트엔지니어링 llm ai-agent langgraph mcp

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

       

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

0

sangin1.park

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

 

0

제이쓴

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

제공해주신 레포가 Windows 환경에 너무 비친화적입니다.

0

40

2

마크다운을 텍스트 파일로 변환하기

0

41

1

max token을 제한하는게 왜 성능을 개선하게 되는걸까요?

0

55

2

pyzerox 유니코드 에러

0

81

2

영상 메타데이터 생성 관련 LLM 활용 질문

0

76

1

종합부동산세 부분 tool 사용 질문 드립니다.

0

81

2

uv sync 파이썬 버전문제 onnxruntime

-1

119

2

MCP를 활용해서 간단한 에이전트를 만들어보세요

0

101

1

PDF 형식

0

72

1

5.3 langchain-mcp-adpater를 활용한 MCP 도구 사용 tool_list 지연 사유

0

98

2

3.6 human_in_the_loop 3rd case

0

84

1

summary 를. 시스템메세지에 추가하는 부분에 관하여

0

81

3

병렬 처리 중 retrieve 관련 궁금한 사항

0

80

1

query 에 대한 answer 결과값이 나오지 않습니다.

0

98

2

사람과 관련된 표현이 없는데 rewrite 로 이동하지 않는경우

0

80

1

retriever 관련 질문

0

66

1

인터룹 관련 질문

0

51

2

2.4 Self-RAG 결과가 달라요!

0

80

2

md vs txt 차이..

0

154

2

OpenAI API 호출 때문에 발생하는 Error code: 429 문제

0

125

2

단순 도구 사용과 도구를 가진 에이전트를 사용하는 것의 차이가 궁금합니다.

0

90

1

LangChain과 LangGraph v1

0

142

1

2.4 강의 관련 질문(답변을 검증하는 self rag)

0

77

2

후속강의 문의

0

75

2