root layout

패스트캠퍼스

  1. 강의 질문
  2. AI TECH

강사님 제가 이렇게 수정해 보았습니다. 공유해 드려 봅니다.

2025.10.29 16:57 수정

from typing import TypedDict, Annotated

from langgraph.graph import StateGraph, END

from pydantic import BaseModel, Field

from langchain_core.runnables import RunnableLambda


# 1. 상태(State) 스키마 정의

# TypedDict를 사용하여 상태의 구조를 정의합니다.

class GraphState(BaseModel):

    question: Annotated[str, Field(description="질문")]

    documents: Annotated[str, "문서"]

    answer: str

    # 여기에 필요한 다른 필드를 추가할 수 있습니다.


# 2. 그래프 생성

builder = StateGraph(GraphState)


# 3. 노드 추가 (예시)

def retrieve_docs(state: GraphState):

    print("문서 검색 중...")

    question = state["question"]

    # 실제 문서 검색 로직은 여기에...

    return {"documents": [f"문서 1: {question}", f"문서 2: {question}"]}


builder.add_node("retrieve", retrieve_docs)


# 4. 그래프 시작점 설정

builder.set_entry_point("retrieve")

builder.set_finish_point("retrieve")


# 5. 그래프 컴파일

app = builder.compile()


=============== 위와 같이 그래프를 정의한 다음에 =============================


# 방법 1)

input_schema = app.get_input_schema()

schema = input_schema.model_json_schema()


if list(schema.keys())[0] == "$defs":

   val = schema["$defs"]

   key = list(val.keys())

   items = val[key[0]]["required"]

elif list(schema.keys())[0] == "properties":

   items = schema["required"]

print(items)


# 방법 2)


schema = getattr(app, "input_schema").model_json_schema()


if list(schema.keys())[0] == "$defs":

   val = schema["$defs"]

   key = list(val.keys())

   items = val[key[0]]["required"]

elif list(schema.keys())[0] == "properties":

   items = schema["required"]

print(items)


이렇게 작성했더니 어떤 경우에도 잘 동작하는 것 같습니다. 강사님이 새로 주신 코드를 분석해서 나름대로 만들어 봤습니다.


BaseModel, TypedDict 어떤 것을 상속하거나 Annotated, Field, 기본형 타입 어느것을 조합해서

테스트를 해도 잘 동작하는 것 같습니다

모두 정상적으로 멤버변수를 가져왔습니다.


강사님 혹시 다른 경우가 있으면 조언 부탁드리겠습니다. 강사님 이메일을 알면 메일로 공유해드리고 싶었지만 그렇지 못해 이렇게 게시판에 개시하는점 양해 부탁드립니다.

늘 친절한 답변 감사드립니다.




답변 

연관 질문

커뮤니티 질문보기