<< [[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
- 질문을 받고 불러온 파일 내용을 바탕으로 결과 값을 반환하기