当前行为
我得到了一个堆栈跟踪
False
True
Traceback (most recent call last):
File "/home/theinhumaneme/Documents/NebuLogic/conversation-bot/development/scripts/chatbot-postgres-test.py", line 129, in <module>
execution_time = timeit.timeit(lambda: llm.invoke("Tell me a joke"), number=1)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/timeit.py", line 237, in timeit
return Timer(stmt, setup, timer, globals).timeit(number)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/timeit.py", line 180, in timeit
timing = self.inner(it, self.timer)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<timeit-src>", line 6, in inner
File "/home/theinhumaneme/Documents/NebuLogic/conversation-bot/development/scripts/chatbot-postgres-test.py", line 129, in <lambda>
execution_time = timeit.timeit(lambda: llm.invoke("Tell me a joke"), number=1)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/theinhumaneme/Documents/NebuLogic/conversation-bot/venv/lib/python3.11/site-packages/langchain_core/language_models/chat_models.py", line 153, in invoke
self.generate_prompt(
File "/home/theinhumaneme/Documents/NebuLogic/conversation-bot/venv/lib/python3.11/site-packages/langchain_core/language_models/chat_models.py", line 546, in generate_prompt
return self.generate(prompt_messages, stop=stop, callbacks=callbacks, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/theinhumaneme/Documents/NebuLogic/conversation-bot/venv/lib/python3.11/site-packages/langchain_core/language_models/chat_models.py", line 407, in generate
raise e
File "/home/theinhumaneme/Documents/NebuLogic/conversation-bot/venv/lib/python3.11/site-packages/langchain_core/language_models/chat_models.py", line 397, in generate
self._generate_with_cache(
File "/home/theinhumaneme/Documents/NebuLogic/conversation-bot/venv/lib/python3.11/site-packages/langchain_core/language_models/chat_models.py", line 579, in _generate_with_cache
cache_val = llm_cache.lookup(prompt, llm_string)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/theinhumaneme/Documents/NebuLogic/conversation-bot/venv/lib/python3.11/site-packages/langchain_community/cache.py", line 813, in lookup
res = get(prompt, cache_obj=_gptcache)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/theinhumaneme/Documents/NebuLogic/conversation-bot/venv/lib/python3.11/site-packages/gptcache/adapter/api.py", line 124, in get
res = adapt(
^^^^^^
File "/home/theinhumaneme/Documents/NebuLogic/conversation-bot/venv/lib/python3.11/site-packages/gptcache/adapter/adapter.py", line 33, in adapt
raise NotInitError()
gptcache.utils.error.NotInitError: The cache should be inited before using
预期行为
我应该能够正常使用缓存
重现步骤
import os
from langchain_openai import ChatOpenAI
from langchain_openai import OpenAI
os.environ["OPENAI_API_KEY"] = ""
CONNECTION_STRING = "postgresql+psycopg2://postgres:postgres@localhost:5432/postgres"
import hashlib
import timeit
from gptcache import Cache, cache
from gptcache.adapter.api import init_similar_cache
from langchain.globals import set_llm_cache
from langchain_community.cache import GPTCache, SQLiteCache
from langchain_openai import OpenAIEmbeddings
from gptcache.manager import get_data_manager, CacheBase, VectorBase
from langchain.globals import set_llm_cache
from gptcache.similarity_evaluation.distance import SearchDistanceEvaluation
def get_content_func(data, **_):
return data.get("prompt").split("Question")[-1]
openai_embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
cache_base = CacheBase(
"postgresql",
sql_url="postgresql+psycopg2://postgres:postgres@127.0.0.1:5432/postgres",
)
vector_base = VectorBase(
"pgvector",
host="127.0.0.1",
port="5432",
user="postgres",
password="postgres",
dimension=1536,
)
data_manager = get_data_manager(cache_base, vector_base)
# cache.init(
# pre_embedding_func=get_content_func,
# embedding_func=OpenAIEmbeddings(model="text-embedding-3-small").embed_query,
# data_manager=data_manager,
# similarity_evaluation=SearchDistanceEvaluation(),
# )
def init_gptcache(cache_obj: Cache, llm: str):
print(cache.has_init)
cache.init(
pre_embedding_func=get_content_func,
embedding_func=OpenAIEmbeddings(model="text-embedding-3-small").embed_query,
data_manager=data_manager,
similarity_evaluation=SearchDistanceEvaluation(),
)
print(cache.has_init)
llm_model = "gpt-3.5-turbo-0125"
llm = ChatOpenAI(temperature=0, model_name=llm_model)
set_llm_cache(GPTCache(init_gptcache))
execution_time = timeit.timeit(lambda: llm.invoke("Tell me a joke"), number=1)
print(f"Execution time: {execution_time} seconds")
execution_time = timeit.timeit(lambda: llm.invoke("Tell me a joke"), number=1)
print(f"Execution time: {execution_time} seconds")
环境
- 无响应*
其他信息?
当我使用 set_llm_cache()
从 langchain 时,我得到了这个错误。当我正常使用它时,它是有效的,即初始化,但当我尝试使用 openai 嵌入文本时失败了。当我将函数中的代码更改为 embed_query
时,我得到了意外的 extra_params
传递。谢谢 :)
7条答案
按热度按时间fv2wmkja1#
请参考:#585 (评论)
你应该为
init
函数提供cache_obj
参数,例如:xtupzzrd2#
好的,这个可以工作,谢谢。但是现在我遇到了这个错误:
。这是因为新的openai端点吗?还是我做错了什么?
nwo49xxi3#
这似乎是自定义嵌入函数的错误格式。
你可以参考:https://github.com/zilliztech/GPTCache/blob/main/gptcache/embedding/openai.py
0mkxixxg4#
@theinhumaneme ,或者,你可以展示embed_query函数,也许我可以给你一些建议。
uqcuzwp85#
在
OpenAIEmbeddings
类中,目前没有to_embeddings
函数。我们有embed_query
和embed_documents
。这是链接:
https://api.python.langchain.com/en/latest/_modules/langchain_openai/embeddings/base.html#OpenAIEmbeddings.embed_query
v440hwme6#
你不能将langchain的嵌入方法放入gptcache中,因为它们不兼容,而且当langchain被修改时,gptcache将不会被考虑。
cpjpxq1n7#
好的,谢谢。我会调查一下OpenAI的库。谢谢你。