에이전트 워크플로우를 고민하는데 사흘을 썼다.
실시간 대화를 위한 워크플로우는 지연 시간이 적을 수록 좋으므로, Retriever를 높은 품질, 빠른 속도로 불러오고, llm은 하나만 사용하는 쪽으로 수정할 것 같다.
실시간 대화가 아닌 방송 등의 상황에서 쓰이는 워크플로우는 지연이 있어도 티가 나지 않으므로 조금 더 기능을 끼워넣어도 좋을 것 같지만... 일단 이것도 최소한의 구조만 사용해보는게 좋을 것 같다.
워크플로우를 수정하며 시행착오를 하는 데에 시간을 많이 썼다. 그 과정에서 여러 방법의 RAG를 시험해보았다. 배운 점은 분명히 많이 있다.
이제 기본적인 llm 워크플로우 작성 방법을 알았으니, 실제 방송을 할 수 있는 프로그램을 우선 만들고 성능을 개선하는 방향으로 개발을 진행하려고 한다.
또, 장기 기억을 저장하기 위해 별도의 워크플로우를 랭체인으로 작성하고 있다.
현재 사용중인 llm은 입력 토큰이 백만 단위이지만 출력 토큰은 만 개를 넘기 힘들다.
모든 대화 기록을 llm에 입력하는 건 가능하지만, 그걸 전부 한번에 체계적으로 정리해서 파일로 출력하는 건 불가능하다.
따라서, 우선 전체 대화 기록을 입력해서 핵심 대화 주제만을 추출하도록 했다. 여기에서 llm 호출이 한 번 발생한다.
그 다음, 추출된 주제 목록에서 주제를 5개~10개 정도의 윈도우로 묶어서 각각 한 번씩 llm에 전달한다. 그리고 관련 대화 내용 발췌, 대화 내용 분석 등을 주제마다 각각 수행하여 파일로 출력할 수 있도록 후처리한다. 여기에서 llm 호출은 추출된 주제 수를 윈도우 크기로 나눈 만큼 발생한다.
이 방법으로, 대화 기록이 길어지더라도 출력되는 토큰 수를 조절할 수 있다.