[RAG Project] GlobalMacro QA chatbot - Data Preprocessing - excel 파일 (4)
2024.09.10 - [RAG Project] - [RAG Project] GlobalMacro QA chatbot - Data Preprocessing - audio파일 (3) [RAG Project] GlobalMacro QA chatbot - Data Preprocessing - audio파일 (3)2024.09.10 - [RAG Project] - [RAG Project] GlobalMacro QA chatbot - Data Pr
hibyeys.tistory.com
이전 포스팅까지 RAG 시스템을 구축하기 위해 내가 모은 데이터들을 처리하는 과정을 소개했다.
이번에 포스팅에서는 이전에 처리한 데이터들을 GraphState 형태로 만들어 저장하는 방법을 공유해 보고자 한다.
GraphState 란?
- LangGraph에서 사용되는 상태 객체로 워크 플로우의 전체 상태를 캡슐화하는 객체이다.
- GraphState는 TypedDict를 상속받아 정의된 클래스로, 보통 대화 에이전트의 현재 상태를 저장하고 관리하는 데 사용된다.
- 이 상태 객체는 그래프의 노드 간에 전달되며, 각 노드에서 필요에 따라 업데이트될 수 있다.
- 개발자의 필요에 따라 GraphState의 구조를 정의하고 확장할 수 있어 굉장히 Flexible 하다.
필자는 테디노트님의 패스트 캠퍼스 강의를 통해 RAG를 배우고 있는데 8월 라이브 세션을 통해서 GraphState에 대해 알게 되었다.
덕분에 GraphState로 원하는 데이터를 분할해서 저장하는 방법을 알게 되어서 내가 처리한 데이터에 적용해 보기로 하였다.
GraphState 객체
아래와 같이 class로 정의해서 문서의 정보를 저장할 수 있다.

- title : 문서명
- filepath: 파일경로
- filetype: 파일의 타입 (.pdf | .md | .txt | ...)
- page_numbers: 분할된 Document의 수 (만약 3개면, [0, 1, 2]로 표시 )
- page_elements: 분할된 Document 내의 요소들 (text와 image 데이터를 분할해서 id를 붙여서 보관)
- page_metadata: 분할된 Document내의 metadata (metada tagger를 사용해 만든 요소들)
- page_summary: page 별 summary 데이터
- images : id를 key로 가지고 value를 image_url로 가지는 딕셔너리
- images_summary : image에 대한 description, entities. (images와 마찬가지로 id를 key로 summary를 value로 가지는 딕셔너리)
- texts : 페이지 내에서 순서를 고려하지 않고 모두 합친 텍스트 (key: page | value: texts)
- texts_summary : texts를 이용하여 만들어낸 summary (key: page | value: summary)
Process
file_path를 받아 state를 정의하는 것부터 시작해서 아래의 과정을 거쳐 Json 파일로 저장된다.

이렇게 json 파일로 저장하면 나중에 필요한 요소들을 불러와 Document 객체로 만들어 데이터를 사용할 수 있다.
예를 들어 page_content에 text와 image_summary를 넣고 metadata에 images를 넣으면 Retriever를 통해 image_summary가 걸렸을 때, summary와 같은 id를 가진 image_url을 가져와 LLM에 전달할 수 있다.
사실 md파일에는 image들도 꽤 많아서 데이터를 어떤 식으로 저장할까 고민을 많이 했는데 GraphState 저장 방식을 통해 해결할 수 있었다.