<< [[2025-01-07|Before]] | [[2025-01-11|Next]] >> ## Goal - `CrewAI` 기능 일부를 `LangChain`으로 구현하기 - 질문을 받고 결과 값을 반환하기 ## TODO > [!TODO] TODO > - [v] CrewAI 무한 루프 문제 해결하기 > - [v] CrewAI Agent Parameter 오류 해결하기 > - [v] CrewAI를 LangChain으로 대체하기 > - [v] CrewAI 기능 분리하기 > - [-] 질문을 받고 결과 값을 반환하기 ## Issue/Solution #### Issue 1 > [!blank] > >> [!warning]+ Problem >> `Agent`가 같은 `input`을 가지고 동일한 `Tool`을 계속 수행하는 문제가 발생했다. >> 때문에 계속 **input token(context window)** 이 초과되고 올바른 결과 값이 나오지 않았다. > >> [!summary]+ Solution >> 이를 해결하기 위해, 여러 사이트를 찾아봤지만, 대부분의 사람들이 같은 문제를 겪고 있었고 이를 해결할 특별한 방도가 없음을 알았다. >> 정확히 말하자면 `LLM`이 `Agent`에게 계속해서 `Tool`을 사용하도록 요구해 발생하는 문제로, `GPT-3.5-turbo-1106`과 `GPT-4o`는 해당 문제가 발생하지 않지만 **GPT-4o-mini**에서는 발생하였다. >> 다만 `GPT-3.5-turbo-1106`의 경우는 `Agent`의 결과 값이 매우 좋지 않았다.. >> 그래서 `CrewAI` 말고 직접 `LCEL`로 구현하는 방법도 사용해보려 하였지만, `Agent`가 수행하는 일을 똑같이 하기엔 무리가 있었다. >> 그래서 일반 `Agent`의 `Model`을 **GPT-4o**로 바꾸니 무한 루프 문제는 해결되었으나, 제대로 된 결과 값이 나오지 않는다. #### Issue 2 > [!blank] > >> [!warning]+ Problem >>`GPT-4o`을 사용해 `Agent`의 무한 루프 문제는 해결했지만 `Agent`가 `FileReadTool`이나 `VisionTool`을 사용할 때 `Parameter`의 key 값을`file_path`를 `filepath`로 전달하는 버그가 간헐적으로 발생했다. > >> [!summary]+ Solution >> 이 또한 [[2025-01-10#Issue 1|Issue 1]]과 마찬가지로 특별한 방도가 없다. >> `Agent`에게 `Parameter` 값이 무엇인지 전달하여 해결하긴 하였지만, 이 역시 궁극적인 해결책이 되진 않는다. #### Issue 3 ([[2025-01-07#Issue 3|Before Issue]]) > [!blank] > >> [!warning]+ Problem >>[[2025-01-10#Issue 1|Issue 1]]과 [[2025-01-10#Issue 2|Issue 2]]의 문제로 `CrewAI`의 안전성이 떨어진다 판단하여 `LangChain`으로 직접 구현하려 하였다. > >> [!summary]+ Solution >> 하지만 `LangChain`이 `CrewAI` 보다 결과 값보다 더 좋지 않아 `CrewAI`의 기능적으로 보안을 하는게 더 좋다고 판단하였다. >> `CrewAI`의 결과 값을 향상 시키기 위해 `Agnet`의 기능을 분리 시킬 필요가 있었다. >> 기존에는 `fileSelector`가 **핵심 문서를 읽는 일**과 **문서와 연관 있는 문서를 찾기**로 2가지 일을 수행했는데 `mainFilesearcher Agent`에 `핵심 문서를 읽는 일`을 이임시켜 `Agent`의 기능을 분리했다. ## Reference - [Agent keeps going in a loop](https://community.crewai.com/t/agents-keeps-going-in-a-loop/1053/2) - [Multiple file read tools provide same content](https://github.com/crewAIInc/crewAI/issues/319) - [File Read](https://docs.crewai.com/tools/filereadtool) ## Git commit contents - [Fix : CrewAI의 무한 루프 문제를 해결하기 위해 LLM model을 GPT-4o로 변경경](https://github.com/Donghyeon-Shin/DocumentSecretary/commit/728b6678203696c0e7afb8b8121438e2bf4b397f "Fix : CrewAI의 무한 루프 문제를 해결하기 위해 LLM model을 GPT-4o로 변경경") - [DEL : CrewAI 무한 루프 문제을 근본적으로 해결하기 위해 LCEL를 직접 구현하려 하였으나 결과 값이 좋지 못해 삭제 처리](https://github.com/Donghyeon-Shin/DocumentSecretary/commit/eff08f9c41fbed307c391d2e7aa7cc3000cd570c "DEL : CrewAI 무한 루프 문제을 근본적으로 해결하기 위해 LCEL를 직접 구현하려 하였으나 결과 값이 좋지 못해 삭제 처리") - [refactor : CrewAI 기능 분리](https://github.com/Donghyeon-Shin/DocumentSecretary/commit/b85f9373be7322a171f9fe53d50af100e1bf9c05 "refactor : CrewAI 기능 분리") ## What should I do more - 질문을 받고 불러온 파일 내용을 바탕으로 결과 값을 반환하기