Mem0MemoryRetriever

Mem0MemoryRetriever

Mem0에서 장기 기억을 ChatMessage 객체로 검색해주는 컴포넌트예요. 메모리 강화 파이프라인에서 Agent나 Chat Generator 앞에 두면 돼요.

출처: Mem0MemoryRetriever

본문

개요

Mem0MemoryRetriever는 Mem0MemoryStore에서 기억을 검색해 system ChatMessage 객체로 반환해요. 모델이 응답을 만들기 전에 Agent나 채팅 생성 파이프라인에 장기 기억을 주입하는 데 사용해요.

query 입력은 문자열이거나 None일 수 있어요. query가 문자열이면 컴포넌트는 관련 기억을 검색하고 top_k를 적용해요. query가 None이면 주어진 범위(scope)와 일치하는 모든 기억을 반환해요.

검색 범위는 Mem0 엔티티 ID 중 적어도 하나로 지정해요: user_id, run_id, agent_id, app_id. Haystack 스타일 filters도 전달할 수 있어요. 필터와 ID 파라미터를 모두 제공하면 AND 조건으로 결합돼요. 일반 필터 문법은 Metadata Filtering을 참고하세요.

각 반환 메시지의 meta에는 사용자가 제공한 Mem0 메타데이터가 포함돼요. memory_id, user_id, score, 타임스탬프 같은 Mem0 검색 필드는 meta["mem0"] 아래에 포함돼요.

설치

Mem0 통합을 설치해요.

pip install mem0-haystack

Mem0 API 키를 설정해요.

export MEM0_API_KEY="your-mem0-api-key"

사용법

단독 사용:

from haystack.dataclasses import ChatMessage

from haystack_integrations.components.retrievers.mem0 import Mem0MemoryRetriever
from haystack_integrations.memory_stores.mem0 import Mem0MemoryStore

store = Mem0MemoryStore()
store.add_memories(
    messages=[ChatMessage.from_user("Alice prefers concise Python examples.")],
    user_id="alice",
    infer=False,
)

retriever = Mem0MemoryRetriever(memory_store=store, top_k=3)

result = retriever.run(query="answer style", user_id="alice")
memories = result["memories"]

for memory in memories:
    print(memory.text)

범위 안의 모든 기억을 검색하려면 query=None을 전달해요.

all_memories = retriever.run(query=None, user_id="alice")["memories"]
print([memory.text for memory in all_memories])

파이프라인 안에서:

이 예시는 기억을 검색해 현재 사용자 메시지 앞에 붙이고, 결합된 메시지 목록을 Agent에 전달해요.

from haystack import Pipeline
from haystack.components.agents import Agent
from haystack.components.converters import OutputAdapter
from haystack.components.generators.chat import OpenAIChatGenerator
from haystack.components.generators.utils import print_streaming_chunk
from haystack.dataclasses import ChatMessage

from haystack_integrations.components.retrievers.mem0 import Mem0MemoryRetriever
from haystack_integrations.memory_stores.mem0 import Mem0MemoryStore

store = Mem0MemoryStore()

pipeline = Pipeline()
pipeline.add_component("retriever", Mem0MemoryRetriever(memory_store=store, top_k=5))
pipeline.add_component(
    "memory_context",
    OutputAdapter(
        template="{{ memories + user_messages }}",
        output_type=list[ChatMessage],
        unsafe=True,
    ),
)
pipeline.add_component(
    "agent",
    Agent(
        chat_generator=OpenAIChatGenerator(model="gpt-4o-mini"),
        system_prompt=(
            "Use any system messages at the start of the conversation as long-term memory. "
            "Answer concisely."
        ),
        streaming_callback=print_streaming_chunk,
    ),
)

pipeline.connect("retriever.memories", "memory_context.memories")
pipeline.connect("memory_context.output", "agent.messages")

query = "Give me a short implementation tip."

pipeline.run(
    {
        "retriever": {
            "query": query,
            "user_id": "alice",
        },
        "memory_context": {
            "user_messages": [
                ChatMessage.from_user(query),
            ],
        },
    },
)

더 알아보기 (Learn more)