LLM缓存
AutoGen支持缓存API请求,以便在发出相同请求时可以重复使用。这在重复或继续实验以实现可重复性和节省成本时非常有用。
从版本0.2.8
开始,可配置的上下文管理器允许您轻松配置LLM缓存,可以使用DiskCache
、RedisCache
或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的seed
与cache_seed
设置为None
一起使用时,即使是相同的输入,也会进行OpenAI API调用,并不能保证获得完全相同的输出。