错误描述
使用sanic作为Web服务器提供接口。使用RetrieverQueryEngine查询query_engine.query(""),报告RuntimeError:此事件循环已经运行。
版本
0.10.52
重现步骤
retriever = RaptorRetriever(
[],
embed_model=OpenAIEmbedding(
model="text-embedding-3-small", api_key=api_key, api_base=base_url
), # 用于嵌入聚类
llm=OpenAI(model="gpt-3.5-turbo", temperature=0.1,
api_key=api_key, api_base=base_url),
用于生成摘要
vector_store=vector_store, # 用于存储
similarity_top_k=2, # 每层的前k个,或整体的前k个折叠
mode="tree_traversal", # 设置默认模式
)
query_engine = RetrieverQueryEngine.from_args(
retriever, llm=OpenAI(model="gpt-3.5-turbo", temperature=0.1,
api_key=api_key,
api_base=base_url),
text_qa_template=CHAT_TEXT_QA_PROMPT,
streaming=True,
response_synthesizer=synth,
use_async=True
)
@app.route("/test", methods=['POST'])
async def test(req: request):
res = query_engine.query("who are you").response_gen
return res
if name == "main":
app.run(host='0.0.0.0', port=8777, workers=1, access_log=False)
相关日志/回溯
File "/raptor/venv/lib/python3.11/site-packages/nest_asyncio.py", line 35, in run
loop.run_until_complete(task)
File "uvloop/loop.pyx", line 1511, in uvloop.loop.Loop.run_until_complete
File "uvloop/loop.pyx", line 1504, in uvloop.loop.Loop.run_until_complete
File "uvloop/loop.pyx", line 1377, in uvloop.loop.Loop.run_forever
File "uvloop/loop.pyx", line 518, in uvloop.loop.Loop._run
RuntimeError: this event loop is already running.
6条答案
按热度按时间chhqkbe11#
你好,@ljhssga!👋我在这里帮助你解决任何bug、问题或贡献。我是一个Maven机器人,旨在协助你在等待人类维护者时提供帮助。
要解决在使用Sanic作为网络服务器并使用
RetrieverQueryEngine
查询时出现的RuntimeError: this event loop is already running
问题,你可以使用nest_asyncio
库。这个库允许你在已经运行的事件循环中嵌套asyncio事件循环,这可以帮助你在一个已经运行的事件循环中运行事件循环。以下是如何修改你的代码:
nest_asyncio
:nest_asyncio
:通过应用
nest_asyncio
,你可以避免RuntimeError
并运行你的Sanic网络服务器,同时与其他异步任务一起进行。wvmv3b1j2#
我看到uvloop,所以我猜你正在使用fastapi。
尝试设置循环类型
unicorn.run(...., loop="asyncio")
gg58donl3#
我看到uvloop,所以我猜你正在使用fastapi。
尝试设置循环类型
unicorn.run(...., loop="asyncio")
。我使用的是Sanic。
1yjd4xko4#
你好,@ljhssga!👋我在这里帮助你解决任何bug、问题或贡献。我是一个Maven机器人,旨在协助你在等待人类维护者时提供帮助。
要解决在使用Sanic作为网络服务器并使用
RetrieverQueryEngine
查询时出现的RuntimeError: this event loop is already running
问题,你可以使用nest_asyncio
库。这个库允许你在已经运行的事件循环中嵌套asyncio事件循环,这可以帮助你在一个已经运行的事件循环中运行事件循环。以下是如何修改你的代码:
nest_asyncio
:nest_asyncio
:通过应用
nest_asyncio
,你可以避免RuntimeError
并在其他异步任务 1(https://github.com/run-llama/llama_index/blob/main/docs/docs/examples/discover_llamaindex/document_management/discord_dumps/help_channel_dump_06_02_23.json) 2(https://github.com/run-llama/llama_index/blob/main/docs/docs/examples/discover_llamaindex/document_management/discord_dumps/help_channel_dump_05_25_23.json) 的同时运行你的Sanic网络服务器。它不起作用
a8jjtwal5#
要解决在使用Sanic和
RetrieverQueryEngine
时出现的RuntimeError: this event loop is already running
问题,你可以尝试以下步骤:nest_asyncio
被正确应用:nest_asyncio
并确保使用异步方法,你应该能够避免RuntimeError
并运行你的Sanic Web服务器,同时处理其他异步任务1(https://github.com/run-llama/llama_index/blob/main/docs/docs/examples/discover_llamaindex/document_management/discord_dumps/help_channel_dump_06_02_23.json)2(https://github.com/run-llama/llama_index/blob/main/docs/docs/examples/discover_llamaindex/document_management/discord_dumps/help_channel_dump_05_25_23.json)。yc0p9oo06#
我尝试添加
但它仍然不起作用。