这是用户在 2025-6-2 21:52 为 https://github.com/redis-developer/langgraph-redis 保存的双语快照页面,由 沉浸式翻译 提供双语支持。了解如何保存?
Skip to content

redis-developer/langgraph-redis

Folders and files

NameName
Last commit message
Last commit date
May 29, 2025
Apr 30, 2025
Jun 2, 2025
Jun 2, 2025
Apr 30, 2025
May 29, 2025
Feb 11, 2025
Feb 28, 2025
May 31, 2025
May 31, 2025
May 31, 2025
Feb 28, 2025
Apr 30, 2025
Apr 30, 2025

Repository files navigation

LangGraph Redis

此存储库包含 LangGraph 的 Redis 实现,提供 Checkpoint 保存器和存储功能。

概述

该项目由两个主要组件组成:

  1. Redis Checkpoint 保存器 :使用 Redis 存储和管理检查点的实现
  2. Redis 存储 :基于 Redis 的键值存储,具有可选的向量搜索功能

依赖项

Python 依赖项

该项目需要以下主要的 Python 依赖项:

  • redis>=5.2.1
  • redisvl>=0.5.1
  • langgraph-checkpoint>=2.0.24

Redis 模块需求

重要: 此库需要以下模块支持的 Redis:

  • RedisJSON - 用于存储和操作 JSON 数据
  • RediSearch - 用于搜索和索引功能

Redis 8.0+

如果你使用的是 Redis 8.0 或更高版本,RedisJSON 和 RediSearch 模块已作为 Redis 核心发行版的一部分默认包含在内,无需额外安装。

Redis < 8.0

如果你使用的 Redis 版本低于 8.0,你需要确保已安装这些模块:

  • 使用 Redis Stack,它将 Redis 与这些模块捆绑在一起
  • 或者分别在你的 Redis 实例中安装这些模块

如果缺少这些模块,将在索引创建和检查点操作期间引发错误。

安装

使用 pip 安装库:

pip install langgraph-checkpoint-redis

Redis 检查点保存器

重要提示

重要

首次使用 Redis 检查点时,请务必在其上调用 .setup() 方法以创建所需的索引。有关示例,请参见下文。

标准实现

from langgraph.checkpoint.redis import RedisSaver

write_config = {"configurable": {"thread_id": "1", "checkpoint_ns": ""}}
read_config = {"configurable": {"thread_id": "1"}}

with RedisSaver.from_conn_string("redis://localhost:6379") as checkpointer:
    # Call setup to initialize indices
    checkpointer.setup()
    checkpoint = {
        "v": 1,
        "ts": "2024-07-31T20:14:19.804150+00:00",
        "id": "1ef4f797-8335-6428-8001-8a1503f9b875",
        "channel_values": {
            "my_key": "meow",
            "node": "node"
        },
        "channel_versions": {
            "__start__": 2,
            "my_key": 3,
            "start:node": 3,
            "node": 3
        },
        "versions_seen": {
            "__input__": {},
            "__start__": {
                "__start__": 1
            },
            "node": {
                "start:node": 2
            }
        },
        "pending_sends": [],
    }

    # Store checkpoint
    checkpointer.put(write_config, checkpoint, {}, {})

    # Retrieve checkpoint
    loaded_checkpoint = checkpointer.get(read_config)

    # List all checkpoints
    checkpoints = list(checkpointer.list(read_config))

异步实现

from langgraph.checkpoint.redis.aio import AsyncRedisSaver

async def main():
    write_config = {"configurable": {"thread_id": "1", "checkpoint_ns": ""}}
    read_config = {"configurable": {"thread_id": "1"}}

    async with AsyncRedisSaver.from_conn_string("redis://localhost:6379") as checkpointer:
        # Call setup to initialize indices
        await checkpointer.asetup()
        checkpoint = {
            "v": 1,
            "ts": "2024-07-31T20:14:19.804150+00:00",
            "id": "1ef4f797-8335-6428-8001-8a1503f9b875",
            "channel_values": {
                "my_key": "meow",
                "node": "node"
            },
            "channel_versions": {
                "__start__": 2,
                "my_key": 3,
                "start:node": 3,
                "node": 3
            },
            "versions_seen": {
                "__input__": {},
                "__start__": {
                    "__start__": 1
                },
                "node": {
                    "start:node": 2
                }
            },
            "pending_sends": [],
        }

        # Store checkpoint
        await checkpointer.aput(write_config, checkpoint, {}, {})

        # Retrieve checkpoint
        loaded_checkpoint = await checkpointer.aget(read_config)

        # List all checkpoints
        checkpoints = [c async for c in checkpointer.alist(read_config)]

# Run the async main function
import asyncio
asyncio.run(main())

浅层实现

浅层 Redis 检查点保存器仅将最新的检查点存储在 Redis 中。当不需要保留完整的检查点历史时,这些实现非常有用。

from langgraph.checkpoint.redis.shallow import ShallowRedisSaver
# For async version: from langgraph.checkpoint.redis.ashallow import AsyncShallowRedisSaver

write_config = {"configurable": {"thread_id": "1", "checkpoint_ns": ""}}
read_config = {"configurable": {"thread_id": "1"}}

with ShallowRedisSaver.from_conn_string("redis://localhost:6379") as checkpointer:
    checkpointer.setup()
    # ... rest of the implementation follows similar pattern

Redis Checkpoint TTL 支持

Redis 检查点保存器和存储器都支持时间戳功能以实现自动键过期:

# Configure TTL for checkpoint savers
ttl_config = {
    "default_ttl": 60,     # Default TTL in minutes
    "refresh_on_read": True,  # Refresh TTL when checkpoint is read
}

# Use with any checkpoint saver implementation
with RedisSaver.from_conn_string("redis://localhost:6379", ttl=ttl_config) as checkpointer:
    checkpointer.setup()
    # Use the checkpointer...

这使得管理存储变得容易,并确保临时数据自动被清理。

Redis 存储

Redis 存储提供持久化的键值存储,并可选配向量搜索功能。

同步实现

from langgraph.store.redis import RedisStore

# Basic usage
with RedisStore.from_conn_string("redis://localhost:6379") as store:
    store.setup()
    # Use the store...

# With vector search configuration
index_config = {
    "dims": 1536,  # Vector dimensions
    "distance_type": "cosine",  # Distance metric
    "fields": ["text"],  # Fields to index
}

# With TTL configuration
ttl_config = {
    "default_ttl": 60,     # Default TTL in minutes
    "refresh_on_read": True,  # Refresh TTL when store entries are read
}

with RedisStore.from_conn_string(
    "redis://localhost:6379", 
    index=index_config,
    ttl=ttl_config
) as store:
    store.setup()
    # Use the store with vector search and TTL capabilities...

Async Implementation

from langgraph.store.redis.aio import AsyncRedisStore

async def main():
    # TTL also works with async implementations
    ttl_config = {
        "default_ttl": 60,     # Default TTL in minutes
        "refresh_on_read": True,  # Refresh TTL when store entries are read
    }
    
    async with AsyncRedisStore.from_conn_string(
        "redis://localhost:6379", 
        ttl=ttl_config
    ) as store:
        await store.setup()
        # Use the store asynchronously...

asyncio.run(main())

Examples

The examples directory contains Jupyter notebooks demonstrating the usage of Redis with LangGraph:

  • persistence_redis.ipynb: Demonstrates the usage of Redis checkpoint savers with LangGraph
  • create-react-agent-memory.ipynb: Shows how to create an agent with persistent memory using Redis
  • cross-thread-persistence.ipynb: Demonstrates cross-thread persistence capabilities
  • persistence-functional.ipynb: Shows functional persistence patterns with Redis

Running Example Notebooks

To run the example notebooks with Docker:

  1. Navigate to the examples directory:

    cd examples
  2. Start the Docker containers:

    docker compose up
  3. Open the URL shown in the console (typically http://127.0.0.1:8888/tree) in your browser to access Jupyter.

  4. When finished, stop the containers:

    docker compose down

Implementation Details

Redis Module Usage

This implementation relies on specific Redis modules:

  • RedisJSON: Used for storing structured JSON data as native Redis objects
  • RediSearch: Used for creating and querying indices on JSON data

Indexing

The Redis implementation creates these main indices using RediSearch:

  1. Checkpoints Index: Stores checkpoint metadata and versioning
  2. Channel Values Index: Stores channel-specific data
  3. Writes Index: Tracks pending writes and intermediate states

For Redis Stores with vector search:

  1. Store Index: Main key-value store
  2. Vector Index: Optional vector embeddings for similarity search

TTL Implementation

Both Redis checkpoint savers and stores leverage Redis's native key expiration:

  • Native Redis TTL: Uses Redis's built-in EXPIRE command
  • Automatic Cleanup: Redis automatically removes expired keys
  • Configurable Default TTL: Set a default TTL for all keys in minutes
  • TTL Refresh on Read: Optionally refresh TTL when keys are accessed
  • Applied to All Related Keys: TTL is applied to all related keys (checkpoint, blobs, writes)

Contributing

We welcome contributions! Here's how you can help:

Development Setup

  1. Clone the repository:

    git clone https://github.com/redis-developer/langgraph-redis
    cd langgraph-redis
  2. Install dependencies:

    `poetry install --all-extras`

Available Commands

The project includes several make commands for development:

  • Testing:

    make test           # Run all tests
    make test-all       # Run all tests including API tests
  • Linting and Formatting:

    make format        # Format all files with Black and isort
    make lint          # Run formatting, type checking, and other linters
    make check-types   # Run mypy type checking
  • Redis for Development/Testing:

    make redis-start   # Start Redis Stack in Docker (includes RedisJSON and RediSearch modules)
    make redis-stop    # Stop Redis container

Contribution Guidelines

  1. Create a new branch for your changes
  2. Write tests for new functionality
  3. Ensure all tests pass: make test
  4. Format your code: make format
  5. Run linting checks: make lint
  6. Submit a pull request with a clear description of your changes
  7. Follow Conventional Commits for commit messages

License

This project is licensed under the MIT License.

langgraph-redis/examples at main · redis-developer/langgraph-redis · GitHub