semantic_kernel笔记(类似于agent、tool的功能、适合在现在系统上改造)

张开发
2026/4/18 9:05:28 15 分钟阅读

分享文章

semantic_kernel笔记(类似于agent、tool的功能、适合在现在系统上改造)
文章目录示例1示例2semantic_kernel类似于agent或tool。还是那句话可以不用但是至少要知道它是什么。什么场景需要用到kernal?如果从头开发聊天机器人那么建议直接用langchain等框架简单好用。如果在现有的系统上集成ai可以考虑用kernal。所以只是涉猎下吧和现在主要的工做场景(python直接开发大模型)不太匹配。示例1importasyncioimportosimportsemantic_kernelasskfromsemantic_kernel.connectors.ai.open_aiimportOpenAIChatCompletionfromsemantic_kernel.functionsimportKernelFunctionFromPromptfromsemantic_kernel.prompt_templateimportPromptTemplateConfigfromopenaiimportAsyncOpenAIasyncdefmain():# 1. 初始化内核kernelsk.Kernel()# 2. 配置百炼 (DashScope) APIDASHSCOPE_API_KEYos.getenv(DASHSCOPE_API_KEY)ifnotDASHSCOPE_API_KEY:print(❌ 请先设置环境变量 DASHSCOPE_API_KEY)returnprint(f 代码读取到的API_KEY前缀{DASHSCOPE_API_KEY[:5]}...)# 3. 创建客户端并添加服务openai_clientAsyncOpenAI(api_keyDASHSCOPE_API_KEY,base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1)serviceOpenAIChatCompletion(ai_model_idqwen-plus,async_clientopenai_client,service_iddashscope)kernel.add_service(service)# 4. 【修改点】定义语义函数prompt_text 你是一个专业的助手。 请将以下文本总结为一句话 {{$input}} # 不再手动定义 InputParameter直接传入空的列表让 SK 自动扫描 {{$input}}prompt_configPromptTemplateConfig(templateprompt_text,nameSummarize,template_formatsemantic-kernel,input_variables[]# 留空让框架自动推断)summarize_funcKernelFunctionFromPrompt(function_nameSummarize,plugin_nameTextPlugin,prompt_template_configprompt_config)# 5. 调用函数resultawaitkernel.invoke(summarize_func,input今天天气很好阳光明媚适合出去散步而且我中午吃了一顿非常美味的火锅。)print(f AI 总结:{result})# 运行代码if__name____main__:asyncio.run(main())输出结果 代码读取到的API_KEY前缀sk-e4... AI 总结: 今天天气晴好、阳光明媚适合外出散步中午还享用了一顿美味的火锅。仔细看这和input的内容是不一样的。如天气很好-天气晴好。示例2importasyncioimportosimportdatetimeimportsemantic_kernelasskfromsemantic_kernel.connectors.ai.open_aiimportOpenAIChatCompletionfromsemantic_kernel.functionsimportKernelFunctionFromPrompt,KernelFunctionFromMethod# 1. 引入这个类fromsemantic_kernel.prompt_templateimportPromptTemplateConfigfromopenaiimportAsyncOpenAI# # 1. 定义“原生插件” (Native Plugin)# classLocalToolsPlugin:defget_current_time(self)-str:nowdatetime.datetime.now()returnf当前时间是:{now.strftime(%Y年%m月%d日 %H点%M分)}defmultiply_numbers(self,num1:int,num2:int)-int:resultnum1*num2returnf{num1}乘以{num2}的结果是:{result}# # 2. 主程序逻辑# asyncdefmain():kernelsk.Kernel()DASHSCOPE_API_KEYos.getenv(DASHSCOPE_API_KEY)ifnotDASHSCOPE_API_KEY:print(❌ 请先设置环境变量 DASHSCOPE_API_KEY)returnopenai_clientAsyncOpenAI(api_keyDASHSCOPE_API_KEY,base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1)serviceOpenAIChatCompletion(ai_model_idqwen-plus,async_clientopenai_client,service_iddashscope)kernel.add_service(service)# --- 【修改点】使用 KernelFunctionFromMethod 注册插件 ---# 这种方式最稳健它会自动扫描类中的所有方法并注册plugin_instanceLocalToolsPlugin()# 直接添加整个插件实例SK 会自动识别里面的方法# 注意这里不再需要装饰器SK 会尝试把所有 public 方法都注册进去kernel.add_plugin(plugin_instance,plugin_nameLocalTools)# --- 定义语义函数 (指令) ---prompt_text 你是一个智能助手。 请根据用户的输入回答用户的问题。 如果你需要使用工具请直接调用工具。 用户输入{{$input}} prompt_configPromptTemplateConfig(templateprompt_text,nameChat,template_formatsemantic-kernel,input_variables[])chat_funcKernelFunctionFromPrompt(function_nameChat,plugin_nameChatPlugin,prompt_template_configprompt_config)# --- 测试场景 ---print(f\n 用户: 现在几点了)resultawaitkernel.invoke(chat_func,input现在几点了)print(f AI:{result})print(f\n 用户: 帮我算算 123 乘以 456 等于多少)resultawaitkernel.invoke(chat_func,input帮我算算 123 乘以 456 等于多少)print(f AI:{result})if__name____main__:asyncio.run(main())输出结果 用户: 现在几点了 AI: 我无法直接获取当前时间因为这需要访问系统时钟或网络时间服务而我作为AI模型没有实时访问设备或网络的能力。 不过您可以查看您设备手机、电脑等右下角Windows或右上角macOS/iOS/Android的系统时间那里会显示准确的本地时间。 如果您需要基于某个时区的时间例如北京时间 UTC8也可以告诉我我可以帮您换算或提供参考信息。 用户: 帮我算算123乘以456等于多少 AI:123×45656088解读这段代码的核心是定义插件LocalToolsPlugin()并用add_plugin()把插件添加进去这样在回答时发现有插件如果匹配就会使用插件的功能。

更多文章