강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

JAY probio님의 프로필 이미지
JAY probio

작성한 질문수

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

2.4 생성된 답변을 여러번 검증하는 Self-RAG

node 함수관련 초보적인 질문하나만 드리겠습니다!

해결된 질문

작성

·

73

0

강사님 안녕하세요!

하단의 generate함수는 파라미터로 AgentState를 받고 AgentState를 리턴하는데

함수의 리턴값이 "context"를 key로 가지는 딕셔너리형태인데, 어떻게 AgentState가 되는지 궁금합니다.. ㅠㅠ

class AgentState(TypedDict):
    query: str
    context: List[Document]
    answer: str 

def retrieve(state: AgentState) -> AgentState:
    """
    사용자의 질문에 기반하여 벡터 스토어에서 관련 문서를 검색합니다.

    Args:
        state (AgentState): 사용자의 질문을 포함한 에이전트의 현재 state.

    Returns:
        AgentState: 검색된 문서가 추가된 state를 반환합니다.
    """
    query = state['query']
    docs = retriever.invoke(query)
    return {'context': docs}

답변 1

1

강병진님의 프로필 이미지
강병진
지식공유자

안녕하세요! 좋은 질문 감사합니다. 간단하게 답변드리자면 AgentState가 query, context, answer를 key로 갖는 딕셔너리이기 때문입니다. TypedDict는 각 키별로 타입을 지정한 딕셔너리라고 이해하시면 됩니다.

Screenshot 2025-04-25 at 1.30.42 PM.png

TypedDict 의 기본값이 비어있어서, agent_state가 빈 딕셔너리로 보이는데요, 기본값을 지정해주면 아래와 같이 값이 들어간 것을 볼 수 있습니다.

Screenshot 2025-04-25 at 1.31.59 PM.png

 

그리고 노드의 실행결과에서 {'context': docs} 만 리턴하게 되면, queryanswer 는 이전의 값을 유지한 상태로 context 만 변경된다고 보시면 됩니다.

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

JAY probio님의 프로필 이미지
JAY probio
질문자

답변이 엄청빠르시네요 ㄷㄷㄷ 감사합니다

 

from typing_extensions import List, TypedDict
from langchain_core.documents import Document

class AgentState(TypedDict):
    query: str
    context: List[Document]
    answer: str

def test(state: AgentState) -> AgentState:
    """
    This function takes an AgentState object, processes it, and returns the updated state.
    
    Args:
        state (AgentState): The initial state of the agent.
        
    Returns:
        AgentState: The updated state of the agent.
    """
    # Example processing: just return the state as is
    return {"anwser": "hello world!"}

initial_state = AgentState({"query":"query","context":[Document("asdf")],"answer":""})

test(initial_state)

저는 처음에는 이렇게 이해를 했었습니다.

강사님 말씀은 langGraph에서 node를 실행할때 노트에 사용한 함수는 리턴값을 그대로 돌려주는것이 아니라, state에서 해당 키의 value만 변경하는 것으로 이해하면될까요??

강병진님의 프로필 이미지
강병진
지식공유자

네 맞습니다. 해당 값만 변경한다고 보시면 됩니다

JAY probio님의 프로필 이미지
JAY probio
질문자

감사합니다!!

JAY probio님의 프로필 이미지
JAY probio

작성한 질문수

질문하기