如何通过OpenAI Assistants API让GPT助手调用异步函数?
解决Discord Bot对接OpenAI Assistants API时异步函数不执行的问题
核心原因:你直接调用异步函数
toggle_growlight时,仅创建了协程对象,并未触发实际执行——异步函数必须在异步上下文内用await调用,或在同步环境中通过asyncio.run()触发执行。具体修复方案:
- 先通过
inspect.iscoroutinefunction()区分同步/异步函数,再对应执行:- 若代码运行在异步上下文(比如Discord.py的命令本身是异步的),直接用
await执行:import inspect function_map = { "add_numbers": add_numbers, "toggle_growlight": toggle_growlight } async def execute_called_function(func_name, args): target_func = function_map[func_name] if inspect.iscoroutinefunction(target_func): return await target_func(**args) else: return target_func(**args) # 在你的异步命令处理逻辑中调用 await execute_called_function(function_name, function_args) - 若代码运行在同步上下文,用
asyncio.run()包裹异步函数调用:import inspect import asyncio function_map = { "add_numbers": add_numbers, "toggle_growlight": toggle_growlight } def execute_called_function(func_name, args): target_func = function_map[func_name] if inspect.iscoroutinefunction(target_func): return asyncio.run(target_func(**args)) else: return target_func(**args) # 在同步逻辑中调用 execute_called_function(function_name, function_args)
- 若代码运行在异步上下文(比如Discord.py的命令本身是异步的),直接用
- 先通过
验证:修改后,
toggle_growlight内的print()语句会正常输出,函数逻辑也会执行。
内容的提问来源于stack exchange,提问作者Liam McMillen-Meyers
相关产品推荐
相关产品推荐

