inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

2.4강~2.7강 관련 질문이 있습니다.

해결된 질문

89

SEO

작성한 질문수 16

1

안녕하세요 매번 빠른 답변 감사합니다. 복습을 하는중에 궁금한게 생겨서 질문을 남깁니다!

 

2.4강에서

1) 왜 check_helpfulness는 check_hallucination, check_doc_relevance와 다르게 하나의 노드로 선언되나요?

2) check_doc_relevance를 할때는 return하는것을 Literal['relevant', 'irrelevant'] 이렇게 정해주고, 실제로 리턴도

	if response['Score'] == 1:
		return 'relevant'
    return 'irrelevant'

이렇게 했잖아요. check_helpfulness 노드 만들때도 그렇구요. 근데 왜 check_hallucination을 할때는 왜 Literal['hallucinated', 'not hallucinated']:이렇게 적었음에도 왜 하지 않고

 return  hallucination_chain.invoke({'student_answer': answer, 'documents': context}) 

까지만 해도 되는건가요?

 

3) 2.6~2.7강에서도 궁금한 부분이 있는데요. router prompt를 보면 if you think you need to search the web to answer the question use 'web_search'라고 나오는데, web_seach를 하는 것이 사실 tax_income_vector_store에 없는 정보잖아요. (이게 2.6강 이 뒤로는 2.7강 관련입니다.)

단순 tax_income과 관련 없는(=역삼 근처 맛집)것 과는 다른 대통령령으로 정한 공정시장가액 을 구해야 할 때(=질문이 tax_income과 관련 있지만, vector_store에는 정보가 없는 경우) web_search를 하게 만드는 것이 가능한가요?

2.7강에서는 공정시장가액이 없다< 라는 사실을 알아서 코드를 짤 때 공정시장가액만 웹서치 해오는 걸 구현했는데 이런 서치를 해야되는 과정이 비단 공정시장가액 뿐 아니라 다른 것들도 있을것 같거든요?? 이걸 ai가 알아서 판단하게 만드는것도 이론상은 가능할 것 같아서요. 그렇담 어떻게 구현하는지 궁금합니다.

 

적다보니 ..기네요 읽어주셔서 감사합니다.

 

 

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

답변 1

1

제이쓴

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

  1. check_hallucination check_doc_relevance 는 노드의 실행 결과에 따라 다음에 실행할 노드를 결정하는 edge로만 사용됩니다. 특정 조건에 따라 흐름을 제어하는 역할을 하므로, 별도의 노드로 선언되지 않고 edge로만 사용됩니다.

    반면, check_helpfulness 는 노드이자 edge로 활용됩니다. check_helpfulness 가 단순히 흐름을 제어하는 것뿐만 아니라, 그 자체로도 중요한 기능을 수행하기 때문입니다. 따라서, 가독성을 높이고 그래프의 구조를 명확히 하기 위해 별도의 노드로 선언되었습니다.

    하지만, check_helpfulness 를 edge로만 선언해도 기능적으로는 문제가 없습니다. 설계상의 선택이며, 가독성과 유지보수성을 고려한 결정입니다.

  2. hallucination_prompt 를 보시면 not hallucinated 또는 hallucinated 를 리턴하게 되어있고, StrOutputParser() 를 활용해서, string만 뽑아내게 됩니다. 이 결과가 함수의 리턴값에 선언된 Literal의 옵션들과 동일하기 때문에 response를 리턴한다고 보시면 됩니다.

  3. 가능합니다. retrieval한 결과에 threshold(예를 들면 유사도가 70점은 넘어야 실제로 관련이 있다고 보는 점수)를 줘서, 사전에 정한 threshold를 넘기는 문서가 없는 경우에는 retrieval을 통해 가져올 문서가 없으니 web_search를 하도록 유도할 수 있습니다

추가로 설명이 필요한 부분이 있으시면 말씀 부탁드립니다!

0

SEO

답변 감사합니다. 근데 3번 같은 경우 유사도로 판단하는건 이해를 했는데, 어떻게 답변을 생성하는 지 모르겠습니다.

class AgentState(TypedDict):
    query: str # 사용자 질문
    answer: str # 세율
    tax_base_equation: str # 과세표준 계산 수식 
    tax_deduction: str # 공제액 
    market_ratio: str # 공정시장가액비율
    tax_base: str # 과세표준 계산
    

이렇게 필요한 변수를 미리 정하는 것이 아니라

class AgentState(TypedDict):
    query: str 
    context : str
    answer: str 

이렇게 선언하고(해당 문서와 관련된 어떤 질문을 할 지 모르기 때문에), 쿼리를 받았을 때 vector_store에 있는 정보(유사도 점수가 높은 경우)는 따로 저장 + 없는 정보는 ai가 알아서 판단한 다음 따로 웹서치를 하게 만든 필요한 정보들이 전부 모이면 -> 답변 생성.

image.png

이게 제가 생각한 그래프입니다. 이렇게 된다는 건가요? 근데 사실 웹서치를 해야되는게 n개가 된다면? 그걸 하나하나 계산해서 web_search 노드를 만들 순 없지 않나요? 기존에 웹서치하나해서 -> 필요한 일부 정보를 저장하고, 또 웹서치 돌려서 b를 찾아서 필요한 정보 [a ,b] 만드는 식으로 한다. << 이것도 가능한가요???? 야밤에 질문이 많네요.

글 읽어주셔서 감사합니다!

 

1

제이쓴

  1. 네네 생각하시는 그래프가 맞습니다. threshold로 검증을하고, 웹검색을 할지 말지 결정하는 플로우로 가시면 됩니다.

  2. [a, b]로 구현하는 것도 가능합니다.

    1. 웹검색 결과를 web_context: list[Document] 와 같은 형식으로 저장하고, 필요한 정보를 찾을 때마다 추가하고, 필요한 정보를 다 찾았는지 검증하는 node를 써서 while loop과 유사하게 구현하는 방법이 있을 것 같습니다.

    2. 그런데 말씀하신 기능은 워크플로우보다는 3강에서 설명드리는 도구를 활용하는 편이 좋습니다. 프롬프트 엔지니어링과 웹검색 도구를 결합하면, 필요한 정보를 얻을 때까지 웹검색을 계속 시킬 수 있습니다.

       

1

제이쓴

저도 퇴근하고 답변을 해야하다보니 오히려 이시간이 편한것같네요 ㅋㅋ

1

SEO

아 3강에서 다루는군요 !! 2강 복습하면서 생긴 궁금증이라 섣불렀네요 ㅋㅋ 사실 사람이랑 소통하는것도 궁금했는데 커리큘럼보니까 있는거 같아보여서 이건 생략했었거든요. 답변 감사합니다 ㅎㅎ.. 마저 열심히 듣겠습니다.

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

0

37

2

pyzerox 유니코드 에러

0

75

2

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

0

68

1

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

0

74

2

uv sync 파이썬 버전문제 onnxruntime

-1

103

2

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

0

96

1

PDF 형식

0

65

1

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

0

91

2

3.6 human_in_the_loop 3rd case

0

81

1

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

0

70

3

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

0

76

1

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

0

94

2

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

0

75

1

retriever 관련 질문

0

65

1

인터룹 관련 질문

0

49

2

2.4 Self-RAG 결과가 달라요!

0

77

2

md vs txt 차이..

0

134

2

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

0

112

2

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

0

88

1

LangChain과 LangGraph v1

0

136

1

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

0

73

2

후속강의 문의

0

73

2

3.6 강의 관련 질문(interrupt 관련)

0

50

1

그래프 구현 조언 부탁드립니다!

0

76

2