如何将Semantic Kernel与Azure OpenAI服务结合
Semantic Kernel(SK)是一个开源的AI编排框架,由微软开发,用于构建和集成AI应用。Azure OpenAI服务是微软Azure平台提供的托管式OpenAI API,支持GPT系列模型(如GPT-3.5、GPT-4)。将它们结合使用,可以高效地调用AI模型进行文本生成、对话等任务。以下步骤将指导您完成结合过程,确保结构清晰、易于操作。整个过程基于Python实现(SK也支持C#,但Python更通用)。
前提条件
在开始前,请确保您已满足以下要求:
- 拥有有效的Azure账户,并已开通Azure OpenAI服务。
- 在Azure门户中创建了OpenAI资源,获取了以下信息:
- API密钥(API Key)。
- 终结点URL(Endpoint URL)。
- 部署名称(Deployment Name),例如
gpt-35-turbo。
- 安装Python 3.8或更高版本。
- 安装必要的Python包:使用pip安装Semantic Kernel和依赖库。
步骤详解
以下是逐步结合Semantic Kernel与Azure OpenAI服务的流程:
-
安装Semantic Kernel SDK
- 打开终端或命令提示符,运行以下命令安装SK Python包:
pip install semantic-kernel
- 打开终端或命令提示符,运行以下命令安装SK Python包:
-
配置Azure OpenAI服务
- 登录Azure门户,导航到您的OpenAI资源。
- 复制API密钥、终结点URL和部署名称(这些信息在后续代码中需要)。
-
初始化Semantic Kernel并添加Azure OpenAI服务
- 在Python代码中,导入SK库,并创建Kernel实例。
- 使用AzureChat***pletion类(SK内置的connector)添加Azure OpenAI作为后端服务。
- 注意:SK调用通常是异步的,因此使用
asyncio处理异步操作。
-
定义和调用语义函数
- 创建一个语义函数(semantic function),用于定义提示词(prompt)和任务。
- 通过Kernel调用该函数,获取Azure OpenAI模型的响应。
-
测试和优化
- 运行代码,验证连接是否成功。
- 根据需求调整提示词或模型参数(如温度、最大令牌数)。
完整代码示例
以下是一个简单的Python示例,演示如何结合SK与Azure OpenAI服务。代码实现了基本的对话功能:询问天气并获取模型响应。
import asyncio
import semantic_kernel as sk
from semantic_kernel.connectors.ai.open_ai import AzureChat***pletion
async def main():
# 步骤1: 设置Azure OpenAI配置(替换为您的实际信息)
deployment_name = "your-deployment-name" # 例如:"gpt-35-turbo"
endpoint = "https://your-endpoint.openai.azure.***/" # 您的终结点URL
api_key = "your-api-key" # 您的API密钥
# 步骤2: 初始化Semantic Kernel
kernel = sk.Kernel()
# 步骤3: 添加Azure OpenAI服务到Kernel
kernel.add_chat_service(
"azure_chat_***pletion",
AzureChat***pletion(deployment_name, endpoint, api_key)
)
# 步骤4: 定义语义函数(prompt示例)
prompt = "What's the weather like today in {city}?"
semantic_function = kernel.create_semantic_function(prompt)
# 步骤5: 调用函数(异步执行)
context = kernel.create_new_context()
context["city"] = "Beijing" # 设置输入变量
result = await semantic_function.invoke_async(context=context)
# 输出结果
print(f"模型响应: {result}")
# 运行异步主函数
if __name__ == "__main__":
asyncio.run(main())
关键参数说明
-
deployment_name:在Azure OpenAI中创建的模型部署名称,例如gpt-35-turbo。 -
endpoint:Azure OpenAI服务的URL,格式为https://<your-resource-name>.openai.azure.***/。 -
api_key:从Azure门户获取的API密钥(安全存储,避免泄露)。 -
prompt:定义任务的提示词;{city}是一个变量,可通过上下文动态填充。 -
异步调用:SK使用异步模式,确保在Python脚本中使用
asyncio.run()。
注意事项
- 安全性:API密钥应存储在环境变量或密钥管理服务(如Azure Key Vault)中,避免硬编码在代码里。
-
错误处理:添加try-except块处理网络错误或API限制,例如:
try: result = await semantic_function.invoke_async(context=context) except Exception as e: print(f"错误发生: {e}") -
性能优化:根据需求调整模型参数,例如在
create_semantic_function中设置max_tokens或temperature。 - 扩展功能:SK支持插件(plugins)和规划器(planners),可用于构建复杂工作流。参考Semantic Kernel文档深入学习。
通过以上步骤,您可以轻松将Semantic Kernel与Azure OpenAI服务结合,快速开发AI应用。如果遇到问题,请检查Azure配置或升级SK包至最新版本。