- 강의 질문
- AI TECH
강사님 제가 이렇게 수정해 보았습니다. 공유해 드려 봅니다.
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, 기본형 타입 어느것을 조합해서
테스트를 해도 잘 동작하는 것 같습니다
모두 정상적으로 멤버변수를 가져왔습니다.
강사님 혹시 다른 경우가 있으면 조언 부탁드리겠습니다. 강사님 이메일을 알면 메일로 공유해드리고 싶었지만 그렇지 못해 이렇게 게시판에 개시하는점 양해 부탁드립니다.
늘 친절한 답변 감사드립니다.