<< [[2025-01-11|Before]] | [[2025-01-14|Next]] >>
## Goal
- Image Refine LCEL Chain 구현하기
- Streamlit 환경 설정하기
## TODO
> [!TODO] TODO
> - [v] 이미지 Refine LCEL Chain 구현하기
> - [v] 이미지 분석 CrewAI 구현하기
> - [v] Streamlit 설치하기
> - [v] 문서 업로드 UI 제작
> - [v] CrewAI fileSelector 기능 연걸
> - [v] 문서 탐색 조건 선택 옵션 UI 구현
## Issue/Solution
#### Issue 1
> [!blank]
>
>> [!warning]+ Problem
>> `Langchain`의 `UnstructuredImageLoader`을 사용하여 이미지를 `RAG`을 수행하였다.
>> 해당 과정을 수행하면서 `Excalidraw`로 만들어진 이미지의 경우 데이터의 정보가 너무나 커서 `gpt`의 **context window** 값을 넘겨 오류가 발생하였다.
>
>> [!summary]+ Solution
>>`CrewAI`의 `VisionTool`을 사용해본 결과 이유는 알 수 없지만 정상적으로 이미지를 `Load`하여 분석할 수 있었다.
>>따라서 `Image`의 경우 `CrewAI`을 활용하여 **Custom Refine Chain**을 만들었다.
#### Issue 2
> [!blank]
>
>> [!warning]+ Problem
>> Streamlit의 `upload file` 기능에서는 `directory`을 지정하지 못한다.
>> 현재 `CrewAI`는 파일 경로에서 모든 문서들과 이미지를 찾고 이를 분석하기 때문에 경로를 지정하지 못하면 현 기능들은 사용하지 못한다.
>
>> [!summary]+ Solution
>> `directory`을 직접 지정할 수 없기 때문에 **zip 형태**로 `directory` 받을 수 있게 구현하였다.
>> python에서 지원하는 `import zipfile`을 활용해 `zip` 형태의 `directory`을 압축 해제하고 압축 해제된 경로를 `CrewAI`에게 전달하여 해당 문제를 해결해였다.
#### Issue 3
> [!blank]
>
>> [!warning]+ Problem
>> 현재 `Crew`는 `markdown file`만을 찾아 불러온다.
>> 범용성 높은 프로그램을 만들기 위해서는 여러 확장자의 파일들을 불러와야 한다.
>
>> [!summary]+ Solution
>> `Streamlit`을 이용해 사용자가 어떠한 확장자를 가진 파일을 불러올 지를 결정할 수 있게 구현하였다.
>> 또한 사용자에게 키워드를 받게 하여 해당 키워드에 맞는 핵심 문서와 관련 문서들을 불러오도록 구현하였다.
## Reference
- [LangChain Image Loader](https://api.python.langchain.com/en/latest/document_loaders/langchain_community.document_loaders.image.UnstructuredImageLoader.html)
- [[Streamlit#uploading file|Streamlit upload file]]
## Git commit contents
- [build : Image 분석하는 Refine LCEL Chain 구현](https://github.com/Donghyeon-Shin/DocumentSecretary/commit/a091ecdab864cf054aabe21028190ef2163cf1a2 "build : Image 분석하는 Refine LCEL Chain 구현")
- [Fix : 이미지를 Refine Chain 대신 CrewAI 통해 분석하도록 수정](https://github.com/Donghyeon-Shin/DocumentSecretary/commit/ad9f62d3ba4ab5a3132ced019856130e37636029 "Fix : 이미지를 Refine Chain 대신 CrewAI 통해 분석하도록 수정")
- [docs : test image 삭제](https://github.com/Donghyeon-Shin/DocumentSecretary/commit/8cb6fbe4d0931ba01c2498e841cf12db24751524 "docs : test image 삭제")
- [docs : package list 수정(Streamlit 설치)](https://github.com/Donghyeon-Shin/DocumentSecretary/commit/28bcf17e8bacbaa6f058610c9aa158ea6aa78b30 "docs : package list 수정(Streamlit 설치)")
- [build : document Search 및 fileSelector에 Streamlit UI 기능 추가](https://github.com/Donghyeon-Shin/DocumentSecretary/commit/810257c6a1d0717a1e904074d4b79732244389de "build : document Search 및 fileSelector에 Streamlit UI 기능 추가")
## What should I do more
- `imgPathCrew` 연결하기
- `file Select`의 전체적인 UI 구현하기