diff --git a/docs/docs.json b/docs/docs.json index 75b73aae..19067e81 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -56,6 +56,7 @@ "features/async-client", "features/memory-export", "features/webhooks", + "features/graph-memory", "features/feedback-mechanism" ] } diff --git a/docs/features/graph-memory.mdx b/docs/features/graph-memory.mdx new file mode 100644 index 00000000..e4f37c3c --- /dev/null +++ b/docs/features/graph-memory.mdx @@ -0,0 +1,295 @@ +--- +title: Graph Memory +icon: "circle-nodes" +iconType: "solid" +description: "Enable graph-based memory retrieval for more contextually relevant results" +--- + +## Overview + +Graph Memory enhances memory pipeline by creating relationships between entities in your data. It builds a network of interconnected information for more contextually relevant search results. + +This feature allows your AI applications to understand connections between entities, providing richer context for responses. It's ideal for applications needing relationship tracking and nuanced information retrieval across related memories. + +## How Graph Memory Works + +The Graph Memory feature analyzes how each entity connects and relates to each other. When enabled: + +1. Mem0 automatically builds a graph representation of entities +2. Retrieval considers graph relationships between entities +3. Results include entities that may be contextually important even if they're not direct semantic matches + +## Using Graph Memory + +To use Graph Memory, you need to enable it in your API calls by setting the `enable_graph=True` parameter. You'll also need to specify `output_format="v1.1"` to receive the enriched response format. + +### Adding Memories with Graph Memory + +When adding new memories, enable Graph Memory to automatically build relationships with existing memories: + + + +```python Python +from mem0 import MemoryClient + +client = MemoryClient( + api_key="your-api-key", + org_id="your-org-id", + project_id="your-project-id" +) + +messages = [ + {"role": "user", "content": "My name is Joseph"}, + {"role": "assistant", "content": "Hello Joseph, it's nice to meet you!"}, + {"role": "user", "content": "I'm from Seattle and I work as a software engineer"} +] + +# Enable graph memory when adding +client.add( + messages, + user_id="joseph", + version="v1", + enable_graph=True, + output_format="v1.1" +) +``` + +```javascript JavaScript +import { MemoryClient } from "mem0"; + +const client = new MemoryClient({ + apiKey: "your-api-key", + orgId: "your-org-id", + projectId: "your-project-id" +}); + +const messages = [ + { role: "user", content: "My name is Joseph" }, + { role: "assistant", content: "Hello Joseph, it's nice to meet you!" }, + { role: "user", content: "I'm from Seattle and I work as a software engineer" } +]; + +// Enable graph memory when adding +await client.add({ + messages, + userId: "joseph", + version: "v1", + enableGraph: true, + outputFormat: "v1.1" +}); +``` + +```json Output +{ + "results": [ + { + "memory": "Name is Joseph", + "event": "ADD", + "id": "4a5a417a-fa10-43b5-8c53-a77c45e80438" + }, + { + "memory": "Is from Seattle", + "event": "ADD", + "id": "8d268d0f-5452-4714-b27d-ae46f676a49d" + }, + { + "memory": "Is a software engineer", + "event": "ADD", + "id": "5f0a184e-ddea-4fe6-9b92-692d6a901df8" + } + ] +} +``` + + +The graph memory would look like this: + + + Graph Memory Visualization showing relationships between entities + + +Graph Memory creates a network of relationships between entities, enabling more contextual retrieval + + + +Response for the graph memory's `add` operation will not be available directly in the response. +As adding graph memories is an asynchronous operation due to heavy processing, +you can use the `get_all()` endpoint to retrieve the memory with the graph metadata. + + + +### Searching with Graph Memory + +When searching memories, Graph Memory helps retrieve entities that are contextually important even if they're not direct semantic matches. + + + +```python Python +# Search with graph memory enabled +results = client.search( + "what is my name?", + user_id="joseph", + enable_graph=True, + output_format="v1.1" +) + +print(results) +``` + +```javascript JavaScript +// Search with graph memory enabled +const results = await client.search({ + query: "what is my name?", + userId: "joseph", + enableGraph: true, + outputFormat: "v1.1" +}); + +console.log(results); +``` + +```json Output +{ + "results": [ + { + "id": "4a5a417a-fa10-43b5-8c53-a77c45e80438", + "memory": "Name is Joseph", + "user_id": "joseph", + "metadata": null, + "categories": ["personal_details"], + "immutable": false, + "created_at": "2025-03-19T09:09:00.146390-07:00", + "updated_at": "2025-03-19T09:09:00.146404-07:00", + "score": 0.3621795393335552 + }, + { + "id": "8d268d0f-5452-4714-b27d-ae46f676a49d", + "memory": "Is from Seattle", + "user_id": "joseph", + "metadata": null, + "categories": ["personal_details"], + "immutable": false, + "created_at": "2025-03-19T09:09:00.170680-07:00", + "updated_at": "2025-03-19T09:09:00.170692-07:00", + "score": 0.31212713194651254 + } + ], + "relations": [ + { + "source": "joseph", + "source_type": "person", + "relationship": "name", + "target": "joseph", + "target_type": "person", + "score": 0.39 + } + ] +} +``` + + + +### Retrieving All Memories with Graph Memory + +When retrieving all memories, Graph Memory provides additional relationship context: + + + +```python Python +# Get all memories with graph context +memories = client.get_all( + user_id="joseph", + enable_graph=True, + output_format="v1.1" +) + +print(memories) +``` + +```javascript JavaScript +// Get all memories with graph context +const memories = await client.getAll({ + userId: "joseph", + enableGraph: true, + outputFormat: "v1.1" +}); + +console.log(memories); +``` + +```json Output +{ + "results": [ + { + "id": "5f0a184e-ddea-4fe6-9b92-692d6a901df8", + "memory": "Is a software engineer", + "user_id": "joseph", + "metadata": null, + "categories": ["professional_details"], + "immutable": false, + "created_at": "2025-03-19T09:09:00.194116-07:00", + "updated_at": "2025-03-19T09:09:00.194128-07:00", + }, + { + "id": "8d268d0f-5452-4714-b27d-ae46f676a49d", + "memory": "Is from Seattle", + "user_id": "joseph", + "metadata": null, + "categories": ["personal_details"], + "immutable": false, + "created_at": "2025-03-19T09:09:00.170680-07:00", + "updated_at": "2025-03-19T09:09:00.170692-07:00", + }, + { + "id": "4a5a417a-fa10-43b5-8c53-a77c45e80438", + "memory": "Name is Joseph", + "user_id": "joseph", + "metadata": null, + "categories": ["personal_details"], + "immutable": false, + "created_at": "2025-03-19T09:09:00.146390-07:00", + "updated_at": "2025-03-19T09:09:00.146404-07:00", + } + ], + "relations": [ + { + "source": "joseph", + "source_type": "person", + "relationship": "name", + "target": "joseph", + "target_type": "person" + }, + { + "source": "joseph", + "source_type": "person", + "relationship": "city", + "target": "seattle", + "target_type": "city" + }, + { + "source": "joseph", + "source_type": "person", + "relationship": "job", + "target": "software engineer", + "target_type": "job" + } + ] +} +``` + + + +## Best Practices + +- Enable Graph Memory for applications where understanding context and relationships between memories is important +- Graph Memory works best with a rich history of related conversations +- Consider Graph Memory for long-running assistants that need to track evolving information + +## Performance Considerations + +Graph Memory requires additional processing and may increase response times slightly for very large memory stores. However, for most use cases, the improved retrieval quality outweighs the minimal performance impact. + +If you have any questions, please feel free to reach out to us using one of the following methods: + + + diff --git a/docs/features/platform-overview.mdx b/docs/features/platform-overview.mdx index e5280d26..8400adbd 100644 --- a/docs/features/platform-overview.mdx +++ b/docs/features/platform-overview.mdx @@ -36,6 +36,9 @@ Learn about the key features and capabilities that make Mem0 a powerful platform Export memories in structured formats using customizable Pydantic schemas. + + Add memories in the form of nodes and edges in a graph database and search for related memories. + ## Getting Help diff --git a/docs/images/graph-platform.png b/docs/images/graph-platform.png new file mode 100644 index 00000000..2d386a05 Binary files /dev/null and b/docs/images/graph-platform.png differ