카테고리 없음

langchain 기초(4)

도그사운드 2025. 4. 17. 15:56

🔧 문제 인식

  • 출력은 단순 텍스트로 되어 있어 백엔드에서 활용하기 어려움
  • 이를 직렬화(serialize) 하여 **프론트엔드 또는 다른 시스템과의 통신에 적합한 구조화된 데이터(JSON 등)**로 바꾸는 작업이 필요함

🧩 해결 방법 – LangChain의 PydanticOutputParser

  • LangChain의 Output Parser를 사용해 LLM의 텍스트 출력을 구조화된 데이터로 변환
  • PydanticOutputParser는 LLM의 텍스트를 Pydantic 객체로 파싱함

✅ 구현 요약

  1. Summary 클래스 정의 (Pydantic 사용)
    • summary: str (요약)
    • facts: List[str] (흥미로운 사실 목록)
  2. PydanticOutputParser 생성
     
     
    summary_parser = PydanticOutputParser(pydantic_object=Summary)
  3. 프롬프트 템플릿 구성
    • format_instructions placeholder 추가
    • partial_variables={"format_instructions": summary_parser.get_format_instructions()}
  4. LangChain Expression Language(LCEL) 활용
    • summary_prompt_template | llm | summary_parser 구조로 체인 작성
  5. 결과
    • LLM 응답을 Summary 객체로 받아옴
    • .summary, .facts 등 속성으로 접근 가능
    • .to_dict()로 직렬화 가능

📦 장점

  • 출력 데이터를 JSON으로 직렬화 가능 → 다른 시스템에서 사용 용이
  • 구조화된 출력 덕분에 프론트엔드와의 연결이 수월해짐
  • 복잡한 스키마도 LangChain + Pydantic으로 깔끔하게 구현 가능