Skip to main content

LLM缓存

AutoGen支持缓存API请求,以便在发出相同请求时可以重复使用。这在重复或继续实验以实现可重复性和节省成本时非常有用。

从版本0.2.8开始,可配置的上下文管理器允许您轻松配置LLM缓存,可以使用DiskCacheRedisCache或Cosmos DB缓存。上下文管理器中的所有代理都将使用相同的缓存。

from autogen import Cache

# 使用Redis作为缓存
with Cache.redis(redis_url="redis://localhost:6379/0") as cache:
user.initiate_chat(assistant, message=coding_task, cache=cache)

# 使用DiskCache作为缓存
with Cache.disk() as cache:
user.initiate_chat(assistant, message=coding_task, cache=cache)

# 使用Azure Cosmos DB作为缓存
with Cache.cosmos_db(connection_string="your_connection_string", database_id="your_database_id", container_id="your_container_id") as cache:
user.initiate_chat(assistant, message=coding_task, cache=cache)

缓存也可以直接传递给模型客户端的create调用。

client = OpenAIWrapper(...)
with Cache.disk() as cache:
client.create(..., cache=cache)

控制种子

您可以改变cache_seed参数以获得不同的LLM输出,同时仍然使用缓存。

# 将cache_seed设置为1将使用与默认缓存不同的缓存,您将看到不同的输出。
with Cache.disk(cache_seed=1) as cache:
user.initiate_chat(assistant, message=coding_task, cache=cache)

缓存路径

默认情况下,DiskCache使用.cache作为存储路径。要更改缓存目录,请设置cache_path_root

with Cache.disk(cache_path_root="/tmp/autogen_cache") as cache:
user.initiate_chat(assistant, message=coding_task, cache=cache)

禁用缓存

为了向后兼容,DiskCache默认启用,cache_seed设置为41。要完全禁用缓存,请在代理的llm_config中将cache_seed设置为None

assistant = AssistantAgent(
"coding_agent",
llm_config={
"cache_seed": None,
"config_list": OAI_CONFIG_LIST,
"max_tokens": 1024,
},
)

cache_seed和OpenAI的seed参数的区别

OpenAI v1.1引入了一个新的参数seed。AutoGen的cache_seed和OpenAI的seed之间的区别在于,AutoGen使用一个显式的请求缓存来保证相同的输入产生完全相同的输出,当缓存命中时,不会进行OpenAI API调用。OpenAI的seed是一种尽力而为的确定性采样,不能保证确定性。当将OpenAI的seedcache_seed设置为None一起使用时,即使是相同的输入,也会进行OpenAI API调用,并不能保证获得完全相同的输出。