You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Semantic Kernel Python中invoke_async属性不存在,无法调用函数

Semantic Kernel Python:创建并调用函数的正确方法

问题描述

我正在遵循Semantic Kernel官方教程,但无法调用创建的函数,怀疑.NET与Python API差异导致代码编写困难,附上代码及报错信息,寻求创建并调用函数的正确方法。

原代码

from semantic_kernel import Kernel

import semantic_kernel
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
from semantic_kernel.functions.kernel_arguments import KernelArguments
from semantic_kernel.functions.kernel_function_from_prompt import KernelFunctionFromPrompt
import asyncio

# Populate values from your OpenAI deployment
model_id = "gpt-4"
endpoint = "https://xxx.openai.azure.com/openai/deployments/gpt-4/chat/completions?api-version=2025-01-01-preview"
api_key = "something here"

# Create a kernel and add Azure OpenAI chat completion
kernel = Kernel()
kernel.add_service(
    AzureChatCompletion(
        deployment_name=model_id,
        endpoint=endpoint,
        api_key=api_key
    )
)


async def activities():
    print("running activities function")
    city = "New York"
    prompt = "I'm visiting {city}. What are some activities I could  do ?"

    activitiesfunction = KernelFunctionFromPrompt("activitiesfunction",prompt=prompt)
    arguments = {"city": city}

    result2 = await kernel.invoke_async(activitiesfunction, arguments)
    print(result2)

asyncio.run(activities())   

报错信息

result2 = await kernel.invoke_async(activitiesfunction, arguments)
                    ^^^^^^^^^^^^^^^^^^^
  File "C:\Users\manuchadha\AppData\Local\Programs\Python\Python313\Lib\site-packages\pydantic\main.py", line 991, in __getattr__
    raise AttributeError(f'{type(self).__name__!r} object has no attribute {item!r}')
AttributeError: 'Kernel' object has no attribute 'invoke_async'

我尝试在官方文档中查找invoke_async,但未找到相关内容。

问题分析与修正方案

报错核心原因是Semantic Kernel的Python API和.NET API存在差异:Python版本中Kernel对象没有invoke_async方法,异步场景下直接使用kernel.invoke()并await即可。同时还有几处代码细节需要修正:

修正后的代码

from semantic_kernel import Kernel
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
from semantic_kernel.functions.kernel_arguments import KernelArguments
from semantic_kernel.functions.kernel_function_from_prompt import KernelFunctionFromPrompt
import asyncio

# Populate values from your OpenAI deployment
model_id = "gpt-4"
# 注意:endpoint只需要基础地址,不需要带后续路径和api-version
endpoint = "https://xxx.openai.azure.com/"
api_key = "something here"

# Create a kernel and add Azure OpenAI chat completion
kernel = Kernel()
kernel.add_service(
    AzureChatCompletion(
        deployment_name=model_id,
        endpoint=endpoint,
        api_key=api_key
    )
)


async def activities():
    print("running activities function")
    city = "New York"
    prompt = "I'm visiting {city}. What are some activities I could do?"

    # 修正KernelFunctionFromPrompt的初始化方式,用name参数指定函数名
    activities_function = KernelFunctionFromPrompt(name="activitiesfunction", prompt=prompt)
    # 使用KernelArguments传递参数,而非普通字典
    arguments = KernelArguments(city=city)

    # 替换invoke_async为invoke
    result = await kernel.invoke(activities_function, arguments)
    print(result)

asyncio.run(activities())

关键修改点说明

  • 替换异步调用方法:将kernel.invoke_async改为kernel.invoke,Python版本的invoke本身就是异步方法,直接await即可
  • 修正函数构造方式:KernelFunctionFromPrompt需要用name参数指定函数名,而非位置参数
  • 规范参数传递:使用KernelArguments类传递参数,这是Semantic Kernel Python推荐的参数传递方式
  • 修正endpoint格式:AzureChatCompletion的endpoint只需填写基础域名,SDK会自动拼接请求路径和api-version,避免手动填写导致的错误

内容的提问来源于stack exchange,提问作者Manu Chadha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 20:22:26