AutoGen 프레임워크용 향상된 에이전트 구현체
요약
본 문서는 AutoGen 프레임워크를 위한 MemoryEnabledAgent (MEA) 구현체를 소개합니다. MEA는 대화, 메모리 저장 및 검색에 영구적이고 자율적인 기능을 제공하며, 인간의 기억 시스템을 모방하여 Working Memory(CC), Short-Term Memory(STM), Long-Term Memory(LTM) 구조를 갖춥니다. 이 구조는 메시지 압축과 요약을 통해 장기적인 컨텍스트 관리를 가능하게 합니다.
핵심 포인트
- MEA는 AutoGen 기반의 향상된 에이전트 구현체입니다.
- Working, Short-Term, Long-Term Memory 3단계 구조를 채택했습니다.
- 메시지 초과 시 압축 비율(CR)을 적용하여 요약 및 메모리 통합을 수행합니다.
- Memory Manager Agent (MMA)가 모든 메모리 관리 로직을 담당합니다.
이 저장소는 Microsoft AutoGen Framework를 위해 구축된 향상된 Agents들을 담고 있습니다. MemoryEnabledAgent로 데뷔했으며, 컨텍스트/토큰 제어, 이식성, 플러그 앤 플레이(Plug-and-Play) 기능에서 개선되었습니다.
The Memory Enabled Agent (MEA)는 AutoGen AssistantAgent 클래스를 상속받았으며, 에이전트가 대화, 메모리 저장 및 메모리 검색에 있어 영구적이고 자율적이며 토큰 안정적인 방식을 갖도록 하는 변경 사항과 기능을 포함합니다. 이 작업은 AutoGen_MemoryManager와 AutoGen_IterativeCoding을 개발하면서 얻은 교훈과 경험뿐만 아니라 AutoGen 커뮤니티 내의 논의에서 영감을 받아 확장된 것입니다. 이 작업은 더욱 일반적으로 강력한 AI Agent를 개발하려는 노력의 연속성을 보여줍니다. 피드백과 협업은 적극적으로 환영하며 장려됩니다.
MEA는 AutoGen 프레임워크 내에서 동적이고 자체 구성되는 메모리를 사용하는 에이전트를 쉽게 구현할 수 있도록 설계되었습니다. 구현된 시스템은 인간 기억 시스템에 대한 문헌에서 영감을 받았으며, 따라서 Working Memory (CC, Chat-Context), Short-Term Memory (STM, exChat-Context를 통해), 그리고 Long-Term Memory (LTM, exSTM-Context를 통해)를 포함합니다. STM은 CC의 상단에 고정되어 있으며 FILO(First In, Last Out) 고려 대상에서 제외됩니다. CC는 고정된 수의 메시지이며, 이 한도를 초과할 경우 압축 비율(CR_1)을 사용하여 가장 오래된 일부 메시지(FILO)를 제거하고 이를 STM으로 요약합니다. STM 역시 고정된 수의 메모리를 가지며, 이 한도를 초과할 경우 CR(CR_2)을 사용하여 가장 오래된 일부 메모리를 제거하고 LTM에 통합합니다. 두 요약 이벤트 모두 내부 MemoryEnabledAgent_Manager, 즉 Memory Manager Agent (MMA)에 의해 실행됩니다.
Chat-Context (CC)가 한도를 초과하는 것이 모든 메모리 저장 관련 기능을 구동합니다. CC가 한도를 초과하면 메시지에 압축 비율(CR)이 적용되어 다음과 같습니다:
trim_index = len(messages)*CompressionRatio
lost_messages = messages[:trim_index]
remaining_messages = messages[trim_index:]
trim_index는 비율에 따라 채팅 기록을 분할하며, 가장 오래된 섹션(lost_messages)은 Memory Manager Agent (MMA)로 전송되어 처리되고 Short-Term Memory (STM)에 추가됩니다. 반면, 가장 최신 섹션(remaining_messages)은 새로운 CC(Context Cache)로 유지됩니다.
MMA는 채팅 섹션을 받으면 다음과 같은 프롬프트를 받습니다:
Conversation Section to Summarize: {lost_messages}
Please make a function call to append_to_short_term_memory and pass in the key points you can extract from the above conversation section.
MMA는 이후 append_to_short_term_memory를 호출하고, lost_messages에서 추출할 수 있는 모든 중요 내용을 담은 메모리 목록을 전달합니다.
STM 역시 CC와 유사하게 작동하여 한계가 있으며, 이 한계를 초과하면 추가적인 메모리 저장 기능을 구동합니다. STM이 한계를 초과하면 CR(CC의 CR과는 독립적)이 적용되어 다음과 같습니다:
trim_index = len(STM)*CompressionRatio
lost_memories = STM[:trim_index]
remaining_memoriess = STM[trim_index:]
trim_index는 비율에 따라 STM을 분할하며, 가장 오래된 섹션(lost_memories)은 MMA로 전송되어 처리되고 LTM(Long-Term Memory)에 통합되며, 가장 최신 섹션(remaining_memories)은 STM에 남아 있습니다.
LTM은 모든 메모리의 최종 목적지입니다. 최대 길이에 대한 검사는 없습니다. MMA는 최소한의 목록을 유지하도록 설계되었지만, 최적의 성능을 달성하기 위해 일부 튜닝이 필요할 수 있습니다.
메모리는 Memory Enabled Agent (MEA)가 함수 호출을 통해 LTM에서 검색합니다. MEA는 MMA에게 hint를 전달하여 어떤 정보가 요청되는지 설명합니다. MMA는 기존 메모리를 복사 붙여넣기 하는 것이 아니라 쿼리에 대한 답변을 반환해야 합니다. 이는 관련성이 있을 경우 개별 메모리들을 흐릿하게 하거나 결합할 수 있도록 의도된 것입니다.
다음 기본 메모리 매개변수가 사용되었습니다:
# 장기 메모리로 압축을 시작하기 전의 최대 단기 메모리 개수
DEFAULT_SHORT_TERM_MEMORY_LIMIT = 10
# 단기 메모리를 잘라내는 비율 (0.9는 STM 한도를 초과한 후 10개 중 9개를 버리고, 0.1은 10개 중 1개를 버립니다)
...
이러한 값들을 변경할 때의 함의를 신중하게 고려해야 합니다. 어떤 흐름(flow)에 대해서든 최소 토큰/요청으로 성능을 달성하는 균형점이 있을 수 있지만, 이는 다소 경우에 따라 다릅니다. 비용 절감을 위해 토큰 오버플로우를 방지하기 위한 많은 예방 조치가 취해졌습니다. 실제로는 이 에이전트가 더 높은 최소 토큰 사용량을 가질 가능성이 높습니다. 논의가 길어지거나 길어질 잠재력이 있을 때, MEA는 매력적인 해결책을 제시할 수 있습니다.
작성자는 여러분이 이미 시스템에 AutoGen을 설치하고 실행 중이라고 가정합니다. 만약 단순히 대화형 에이전트로 시스템을 사용하고 싶다면, main.py 파일에 API 설정을 채우고, EnhancedAgents.py와 같은 디렉토리에 있는지 확인하세요. 명령줄에서 python main.py를 통해 실행할 수 있습니다.
에이전트와 정상적으로 대화할 수 있으며, 메모리 조회 요청 시 자동 응답(auto-reply)만 사용하면 됩니다.
현재 문서화는 불완전하며 작업 중인 상태입니다.
-
'User'와 실제 사용자 이름의 일관성 문제 수정.
-
더 나은 사실 정보 생성/저장을 위한 개선된 프롬프트. 때때로 여전히 문장이나 다른 복사/붙여넣기 내용이 발생합니다.
-
최소/제로 폐기를 보장한 후, CC(Contextual Compression), STM(Short Term Memory), LTM(Long Term Memory) 함수 호출 자동화.
-
코드 TODO 항목.
-
CC(Context Compression) 구동 요구사항 외의 메모리 압축/재정형화를 허용하는 자기 성찰 주기(self reflection cycle)를 생성하고 MEA가 접근할 수 있도록 합니다.
-
다음 작업을 위해 STM이 CC/STM/LTM으로부터 재정형화될 수 있도록 컨텍스트 전환 주기(context-switch cycle)를 생성합니다.
-
특정 에이전트를 위해 STM 및 LTM 조회를 조정할 수 있는 시스템을 구축하여, 더 많은 파일이나 STM 및 LTM 항목의 엔티티 이름에 대한 개선된 제어를 통해 이를 구현합니다.
-
관련 섹션으로 LTM을 분할하는 방법론과 근거를 고안하여, 적절하게 관련된 섹션 내에서 LTM 조회당 비용은 낮추면서도 더 큰 총 LTM을 허용하도록 합니다.
-
사용자 채팅 외의 다른 활동(코딩 그룹, 미디어 생성, 크로스 그룹 아이디어 구상 등)에서 에이전트를 사용할 때 최적의 성능과 효율성을 달성하기 위한 방법들을 테스트하고 개선합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub AI Tools의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기