
AIrecall이란?
AIrecall은 AI 에이전트를 위한 즉시 연결형 장기 메모리 계층입니다. 에이전트가 현재 컨텍스트 창에만 의존하지 않도록 세션 간에 유용한 정보를 보존합니다. 이 프로젝트는 Python SDK, Go 메모리 서버, SQLite 저장소, 프로세스 내 벡터 인덱스를 결합합니다.
AIrecall은 프롬프트를 집중된 상태로 유지하도록 설계되었습니다. 모든 요청에 전체 상호작용 기록을 삽입하는 대신, 에이전트는 현재 턴과 가장 관련성 높은 메모리를 검색할 수 있습니다.
핵심 메모리 유형 및 기능
- 에피소드 메모리: 대화, 작업, 결과를 포함한 이벤트를 순서대로 저장합니다.
- 시맨틱 메모리: 과거 에피소드에서 추출한 지속적인 사실과 선호 사항을 보존합니다.
- 하이브리드 검색: 에피소드 메모리와 시맨틱 메모리 전반에서 키워드 일치와 벡터 유사도를 결합합니다.
- 자동 요약: 오래된 에피소드를 주기적으로 압축하고 지속적인 사실을 추출하여 기록을 단순히 삭제하지 않습니다.
- 영구 로컬 저장소: 프로세스 내 벡터 인덱스와 함께 SQLite를 사용합니다.
- 유연한 운영: 메모리 서버를 로컬에서 실행하거나 사이드카로 실행할 수 있습니다.
AIrecall의 작동 방식
각 턴마다 Python SDK는 로컬 호출 또는 gRPC를 통해 현재 쿼리를 AIrecall Core로 전송합니다. Core는 키워드 및 벡터 유사도를 사용해 에피소드 메모리와 시맨틱 메모리를 검색하고, 결과의 순위를 매긴 다음, 에이전트 프롬프트에 삽입할 관련 메모리 상위 항목을 반환합니다.
백그라운드에서는 요약기가 오래된 에피소드를 처리합니다. 지속적인 정보를 시맨틱 메모리로 추출하고 나머지 기록을 압축하여, 활성 컨텍스트를 계속 확장하지 않고도 장시간 실행되는 에이전트가 유용한 지식을 유지하도록 돕습니다.
설치 및 설정
Python SDK 설치
Python 에이전트에서 가져올 패키지를 설치합니다.
pip install airecall-sdk
로컬 저장소 초기화
명령줄 인터페이스를 사용해 로컬 SQLite 기반 메모리 저장소의 기본 구조를 생성합니다.
airecall init
이 설정을 사용하면 별도의 서비스를 요구하지 않고 즉시 메모리 저장 및 검색을 시작할 수 있습니다.
메모리 서버 설치 또는 실행
Core 메모리 서버를 로컬 또는 사이드카로 사용할 수 있게 하려면 서버 추가 기능을 설치합니다.
pip install airecall-sdk[server]
그런 다음 서버를 독립 프로세스로 실행할 수 있습니다.
airecall serve
SDK 자체는 표준 라이브러리만 사용합니다. 프로젝트 README에 따르면 서버는 순수 Go 의존성 하나를 사용합니다.
기본 사용법
메모리 인스턴스 생성
Memory를 가져오고 에이전트에 식별자를 할당합니다.
from airecall import Memory
memory = Memory(agent_id="support-bot")
agent_id는 메모리를 저장하고 검색할 에이전트를 식별합니다. 이후 세션에서 동일한 메모리 컬렉션에 액세스하려면 같은 식별자를 사용합니다.
에피소드 메모리 저장
remember를 사용해 상호작용 중 발생한 일을 기록합니다.
memory.remember(
"User asked about refund policy for order ORD-9921, told 30-day window applies."
)
특정 이벤트와 그 결과를 기록하므로 에피소드 메모리에 해당합니다.
관련 컨텍스트 검색
이후 세션에서 현재 질문과 함께 recall을 호출합니다.
context = memory.recall(
"what did we tell this user about refunds?"
)
AIrecall은 저장된 메모리를 검색하고 관련 에피소드를 관련성 순으로 반환합니다. 그런 다음 애플리케이션에서 반환된 컨텍스트를 모델에 보낼 프롬프트에 추가할 수 있습니다.
지속적인 사실 저장
한 번의 이벤트를 넘어 유용하게 유지해야 하는 정보는 remember_fact로 명시적으로 승격할 수 있습니다.
memory.remember_fact(
key="preferred_contact",
value="email, not phone"
)
이는 또 하나의 시간순 에피소드만 기록하는 대신 안정적인 선호 사항을 위한 시맨틱 메모리를 생성합니다.
LangChain 어댑터 사용
AIrecall에는 MemoryRetriever라는 LangChain 어댑터가 포함되어 있습니다. 기존 Memory 인스턴스를 래핑하여 검색기를 생성합니다.
from airecall import Memory
from airecall.adapters.langchain import MemoryRetriever
memory = Memory(agent_id="support-bot")
retriever = MemoryRetriever(memory)
README는 어댑터 생성 방법을 보여 주지만 추가적인 체인 또는 검색기 설정은 지정하지 않습니다. 생성된 객체를 더 큰 LangChain 애플리케이션에 통합할 때는 어댑터의 현재 API를 따르세요.
실용적인 통합 패턴
- 에이전트용
Memory인스턴스를 생성합니다. - 응답을 생성하기 전에 사용자의 현재 쿼리와 함께
recall을 호출합니다. - 반환된 관련 메모리를 지원 컨텍스트로 모델 프롬프트에 삽입합니다.
- 상호작용 후
remember를 호출해 중요한 이벤트, 작업 또는 결과를 저장합니다. - 명시적으로 보존해야 할 지속적인 선호 사항이나 사실을 애플리케이션에서 식별하면
remember_fact를 사용합니다.
이 패턴은 모든 프롬프트에 전체 기록을 넣지 않으면서도, 필요할 때 에이전트가 이전 결정과 사용자 선호 사항에 액세스할 수 있도록 합니다.
고급 팁
이벤트와 지속적인 지식 분리
특정 상호작용 중 발생한 일에는 에피소드 메모리를 사용합니다. 안정적인 사실과 선호 사항에는 시맨틱 메모리를 사용합니다. 예를 들어 환불 논의는 에피소드에 속하고, 사용자가 이메일을 통한 소통을 선호한다는 내용은 지속적인 사실입니다.
에이전트 식별자 일관성 유지
세션 간 메모리를 공유해야 한다면 안정적인 agent_id를 선택하세요. 식별자를 변경하면 애플리케이션 관점에서 다른 메모리 범위가 생성됩니다.
적절한 배포 모드 선택
간단한 로컬 워크플로에서는 airecall init으로 SQLite 기반 저장소를 초기화하세요. 전용 메모리 프로세스가 필요한 아키텍처에서는 서버 추가 기능을 설치하고 airecall serve를 로컬에서 실행하거나 사이드카로 실행하세요.
인덱스가 준비될 때까지 기다리기
첫 번째 쿼리에서 RecallTimeout이 발생한다면 벡터 인덱스가 아직 준비 중일 수 있습니다. 상태 엔드포인트에 status: ready가 보고된 후 다시 시도하세요.
신뢰할 수 있는 저장 경로 사용
재시작 후 메모리가 사라진 것처럼 보인다면 storage.backend 경로를 확인하세요. 상대 경로는 서버 프로세스의 작업 디렉터리를 기준으로 해석되므로, 다른 디렉터리에서 서버를 실행하면 다른 저장소를 가리킬 수 있습니다. 일관된 작업 디렉터리 또는 저장 경로를 사용하세요.
결론
AIrecall은 모든 이전 상호작용을 프롬프트에 계속 포함하지 않아도 AI 에이전트에 지속적인 에피소드 및 의미 기반 메모리를 제공합니다. 간단한 Python API, SQLite 기반 저장소, 하이브리드 검색, 자동 요약을 통해 세션 간에 관련 컨텍스트를 보존하는 실용적인 방법을 제공합니다. airecall init으로 시작하고, remember로 에피소드를 기록하며, recall로 검색하고, remember_fact로 지속적인 지식을 저장하세요.
