LangGraph节点缓存-CachePolicy

当我们使用相同的参数 反复调用同一个节点 时,会浪费大量的资源,这时我们就可以将第一次调用该节点的结果保存起来,也就是cache_policy(缓存策略),当下一次使用相同参数调用该节点时,我们就不需要真正的去执行该节点,只需要去cache中去查询。

关键代码:

python 复制代码
builder.add_node(
                 "node_a",
                 node_a,
                 cache_policy=CachePolicy(ttl=10),
                 )

我们需要在将节点加入时配置 cache_policy 。

ttl=10:表示该节点输出结果保存时间为10s,超时后需要重新执行该节点。

python 复制代码
graph = builder.compile(
    cache=InMemoryCache()
)

同时,编译图时还需要添加缓存后端,表示设置缓存的存储方式。

CachePolicy()核心参数:

复制代码
key_func:生成一个cache的Key,用于查询时使用,默认是使用 input 参数来生成一个对应的Key
复制代码
ttl:设置缓存存活时间

其中key_func一般不需要配置,默认使用所有input参数生成Key。当然某些情况下我们也可以自定义一个key_func,示例如下:

python 复制代码
略.................

class State(TypedDict):
    user: str
    request_id: str
    weather: str


def user_cache_key(state: State) -> str:
    """
    state 是节点本次收到的输入。
    只使用 user 生成缓存键,忽略 request_id。
    """
    return state['user']

略.................

builder.add_node(
    "get_weather",
    get_weather,
    cache_policy=CachePolicy(
        ttl=60,
        key_func=user_cache_key,
    ),
)

略.................

result1 = graph.invoke({
    "user": "小明",
    "request_id": "request-001",
})

通过自定义key_func,我们生成Key时只用"user"来生成Key

CachePolicy()基本原理:

1.创建节点任务时生成缓存键:

复制代码
cache_policy = proc.cache_policy or cache_policy

if cache_policy:
    args_key = cache_policy.key_func(val)

    cache_key = CacheKey(
        namespace=(
            CACHE_NS_WRITES,
            identifier(proc) or "__dynamic__",
            name,
        ),
        key=xxh3_128_hexdigest(args_key),
        ttl=cache_policy.ttl,
    )
相关推荐
CyrusYiVPP28 分钟前
实测 Ollama 本地部署:我用 Python 搓了个离线问答机器人,Qwen4 27B 一到换个模型名就能用
人工智能·python
2601_967980111 小时前
Python中flatten( )函数及函数用法详解
python·numpy·数组操作·flatten函数·列表处理
xbzb1 小时前
自定义 yum 软件源:Linux 上 createrepo,Windows 上纯 Python 也能造
linux·运维·windows·python·yum·createrepo
瑞克-桑切斯2 小时前
redis
数据库·redis·缓存
合尘猫4 小时前
图片表格变结构化数据:OCR 后的三个坑
python·ocr
小小张说故事4 小时前
Python 里弱引用到底弱在哪:拆开 weakref.ref、回调陷阱和 WeakValueDictionary
python
用户019027581615 小时前
用 DuckDB 存查 A 股 K 线:零服务、SQL 直接分析
python
程序员果子6 小时前
本体构建方法
人工智能·python·知识图谱·agent框架·本体
天天被压力7 小时前
【A股分钟级高频数据完全手册 #11】券商实时行情数据接口:实时交易(券商源)接入与字段
java·人工智能·python
总裁余(余登武)7 小时前
【python项目】:1操作EXCEl自动化开发
python·自动化·excel