LLM 缓存
AutoGen 支持缓存 API 请求,以便在发出相同请求时能够重复使用。这在重复或继续实验以确保可重复性和节省成本时非常有用。
自版本 0.2.8
起,一个可配置的上下文管理器允许您轻松配置LLM缓存,可以使用 DiskCache
、RedisCache
或 Cosmos DB Cache。在上下文管理器内的所有代理将使用相同的缓存。
from autogen import Cache
# Use Redis as cache
with Cache.redis(redis_url="redis://localhost:6379/0") as cache:
user.initiate_chat(assistant, message=coding_task, cache=cache)
# Use DiskCache as cache
with Cache.disk() as cache:
user.initiate_chat(assistant, message=coding_task, cache=cache)
# Use Azure Cosmos DB as cache
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)
缓存也可以直接传递给模型客户端的创建调用。
client = OpenAIWrapper(...)
with Cache.disk() as cache:
client.create(..., cache=cache)
控制随机种子
你可以调整cache_seed
参数以获得不同的LLM输出,同时仍然使用缓存。
# Setting the cache_seed to 1 will use a different cache from the default one
# and you will see different output.
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 的 seed
并且 cache_seed
设置为 None
时,即使对于相同的输入,也会调用 OpenAI API,并且不能保证获得完全相同的输出。