检查其他资源
- 为这个问题添加了一个非常描述性的标题。
- 使用集成搜索在LangChain文档中进行了搜索。
- 使用GitHub搜索找到了一个类似的问题,但没有找到。
- 我确信这是LangChain中的一个bug,而不是我的代码。
- 通过更新到LangChain的最新稳定版本(或特定集成包)无法解决这个bug。
示例代码
embeddings = AzureOpenAIEmbeddings(
azure_endpoint=azure_endpoint,
openai_api_version=openai_api_version,
openai_api_key=openai_api_key,
openai_api_type=openai_api_type,
deployment=deployment,
chunk_size=1)
vectorstore = AzureSearch(
azure_search_endpoint=azure_search_endpoint,
azure_search_key=azure_search_key,
index_name=index_name,
embedding_function=embeddings.embed_query,
)
system_message_prompt = SystemMessagePromptTemplate.from_template(
system_prompt)
human_message_prompt = HumanMessagePromptTemplate.from_template(
human_template)
chat_prompt = ChatPromptTemplate.from_messages(
[system_message_prompt, human_message_prompt])
doc_chain = load_qa_chain(
conversation_llm, chain_type="stuff", prompt=chat_prompt, callback_manager=default_manager
)
conversation_chain = ConversationalRetrievalChain(
retriever=vectorstore.as_retriever(search_type="similarity_score_threshold", k=rag_top_k,
search_kwargs={"score_threshold": rag_score_threshold}),
combine_docs_chain=doc_chain,
question_generator=question_generator,
return_source_documents=True,
callback_manager=default_manager,
rephrase_question=False,
memory=memory,
max_tokens_limit=max_retrieval_tokens,
)
result = await conversation_chain.ainvoke({"question": question, "chat_history": chat_history}
错误信息和堆栈跟踪(如果适用)
TypeError("'AsyncSearchItemPaged'对象不可迭代")Traceback (most recent call last):
File "/Users/crobert/Code/Higher Bar AI/almitra-pilot-be/venv/lib/python3.10/site-packages/langchain/chains/base.py", line 208, in ainvoke
await self._acall(inputs, run_manager=run_manager)
File "/Users/crobert/Code/Higher Bar AI/almitra-pilot-be/venv/lib/python3.10/site-packages/langchain/chains/conversational_retrieval/base.py", line 212, in _acall
docs = await self._aget_docs(new_question, inputs, run_manager=_run_manager)
File "/Users/crobert/Code/Higher Bar AI/almitra-pilot-be/venv/lib/python3.10/site-packages/langchain/chains/conversational_retrieval/base.py", line 410, in _aget_docs
docs = await self.retriever.ainvoke(
File "/Users/crobert/Code/Higher Bar AI/almitra-pilot-be/venv/lib/python3.10/site-packages/langchain_core/retrievers.py", line 280, in ainvoke
raise e
File "/Users/crobert/Code/Higher Bar AI/almitra-pilot-be/venv/lib/python3.10/site-packages/langchain_core/retrievers.py", line 273, in ainvoke
result = await self._aget_relevant_documents(
File "/Users/crobert/Code/Higher Bar AI/almitra-pilot-be/venv/lib/python3.10/site-packages/langchain_community/vectorstores/azuresearch.py", line 1590, in _aget_relevant_documents
await self.vectorstore.asimilarity_search_with_relevance_scores(
File "/Users/crobert/Code/Higher Bar AI/almitra-pilot-be/venv/lib/python3.10/site-packages/langchain_community/vectorstores/azuresearch.py", line 663, in asimilarity_search_with_relevance_scores
result = await self.avector_search_with_score(query, k=k, **kwargs)
File "/Users/crobert/Code/Higher Bar AI/almitra-pilot-be/venv/lib/python3.10/site-packages
4条答案
按热度按时间kadbb4591#
实际上,我的修复(以及,我推测,原始的异步代码)仍然有一个相当致命的缺陷:因为所有的
with
块关闭了客户端,你只能在链中进行一次调用,然后触发这个错误:ValueError("HTTP传输已经被关闭。您可以检查是否在客户端创建之外调用了一个函数,或者是否已经在客户端上调用了
await close()
。")而不是每次调用都重新建立连接,我尝试保持连接打开,并在删除
AzureSearch
对象时关闭它。但是所有这些都让我感到不舒服,我想知道 PR #22075 中的 @baskaryan 关于异步 Azure 搜索客户端管理的想法。一切都仍然感觉相当混乱和不完整...yyyllmsg2#
我遇到了同样的问题,哈哈。
Args:
query: Text to look up documents similar to.
k: Number of Documents to return. Defaults to 4.
filters: Filtering expression.
v2g6jxz63#
我也遇到了同样的问题,在尝试调用AzureSearchVectorStoreRetriever上的invoke方法时,它也使用了上述描述的方法。同步调用工作正常,但异步调用在检索阶段导致错误:“'AsyncSearchItemPaged'对象不可迭代”。
j9per5c44#
JuliaZamaitat,你可以重写这个类来移除
with
块并根据需要进行其他调整。thedavgar已经在#24921中做出了这些改变,所以你可以将其作为指导,直到它被批准并包含在发布中。希望很快异步支持就能正常工作!