万字长文学会对接 AI 模型:Semantic Kernel 和 Kernel Memory,工良出品,超简单的教程
·
万字长文学会对接 AI 模型:Semantic Kernel 和 Kernel Memory,工良出品,超简单的教程
引言:为什么需要 Semantic Kernel 和 Kernel Memory?大家好,我是工良。今天我们来聊一个很酷的话题:如何用 Semantic Kernel 和 Kernel Memory 轻松对接 AI 模型。想象一下,你有一个超级聪明的 AI 助手,但它只知道它训练时学到的知识,比如 ChatGPT 只能回答 2021 年之前的事情。如果你想让 AI 知道你的公司文档、内部知识库甚至你昨天的会议记录,该怎么办?答案是:把数据喂给 AI,但传统方法太麻烦了。Semantic Kernel 和 Kernel Memory 就像是 AI 的“大脑”和“记忆库”。Semantic Kernel 帮我们编排 AI 工作流,Kernel Memory 则负责存储和检索记忆。它们让普通开发者也能像搭积木一样,快速构建能“记住”上下文的智能应用。别被“万字长文”吓到,我会用最通俗的语言和代码示例,让你 30 分钟就能上手。让我们开始吧!## Semantic Kernel 是什么?Semantic Kernel(简称 SK)是微软开源的 AI 编排框架。它的核心思想是“插件化”:把 AI 模型、数据源、API 服务都当作插件组合起来。你可以用 C#、Python 或 TypeScript 调用它。核心概念:- Kernel:核心引擎,负责连接 AI 模型和插件。- Plugins:插件,封装了具体功能(如调用 ChatGPT、执行 SQL 查询)。- Functions:函数,插件中的可执行单元。- Memory:记忆,存储对话历史或知识库。### 安装 Semantic Kernel(Python 版)bashpip install semantic-kernel如果你用 OpenAI,还需要 openai 包;如果用 Azure OpenAI,则安装 azure-identity。## 第一个示例:让 AI 回答你的问题让我们写一个最简单的程序:用 Semantic Kernel 调用 GPT 模型回答“什么是 AI”。pythonimport semantic_kernel as skfrom semantic_kernel.connectors.ai.open_ai import OpenAIChatCompletion# 创建内核kernel = sk.Kernel()# 配置 OpenAI 模型(替换为你的 API Key)api_key = "your-openai-api-key"model_id = "gpt-3.5-turbo"# 添加聊天完成服务chat_service = OpenAIChatCompletion( ai_model_id=model_id, api_key=api_key)kernel.add_chat_service("chat-gpt", chat_service)# 定义提示词模板prompt = "{{$input}} 是什么?请用通俗易懂的语言解释。"# 创建语义函数hello_ai = kernel.create_semantic_function( prompt, max_tokens=100, temperature=0.7)# 执行函数result = hello_ai("人工智能")print(result) # 输出:人工智能是让机器模拟人类智能的技术...**代码解释:**1. sk.Kernel() 创建核心引擎。2. add_chat_service 注册 AI 模型服务。3. create_semantic_function 定义了一个“语义函数”,它接受输入变量 $input。4. 调用函数时,传入“人工智能”,AI 会自动补全回答。运行后,你就能看到 AI 像老师一样给你解释概念了。是不是很简单?## Kernel Memory:让 AI 拥有长期记忆Kernel Memory 是 Semantic Kernel 的“记忆模块”。它专门解决一个问题:如何让 AI 记住大量文档并快速检索。传统方法:把整本书塞进 Prompt(太贵!)。Kernel Memory 的做法:把文档拆成小块(Chunks),用向量数据库(如 Qdrant、Redis)存储,查询时只检索相关片段。### 安装 Kernel Memorybashpip install kernel-memory### 第二个示例:构建个人知识库假设你有一本小说《三体》的摘要,你想让 AI 基于这些内容回答问题。pythonfrom kernel_memory import KernelMemoryfrom kernel_memory.connectors.open_ai import OpenAIConfig# 配置 OpenAI(用于生成向量和回答)config = OpenAIConfig( api_key="your-openai-api-key", embedding_model="text-embedding-ada-002", chat_model="gpt-3.5-turbo")# 创建内存实例memory = KernelMemory(config)# 1. 导入文档(可以是文本、PDF、网页等)document = """三体文明位于半人马座α星,拥有三颗太阳。他们通过智子(微观粒子)干扰地球科技。罗辑作为面壁者,利用黑暗森林威慑与三体对峙。最终,程心放弃威慑,导致太阳系被二维化。"""# 将文档分割并存储到内存中memory.import_text( text=document, document_id="three_body", tags={"category": "sci-fi"})# 2. 查询记忆query = "三体文明为什么威胁地球?"answer = memory.ask(query, min_relevance=0.7)print(f"问题:{query}")print(f"答案:{answer.result}")# 输出类似:三体文明因三颗太阳的恶劣环境,试图入侵地球...核心机制:- import_text 自动将长文本切分成 256 tokens 的片段,生成向量并存储。- ask 方法先对你的问题做向量化,再在内存中检索最相关的片段,最后让 GPT 基于这些片段生成答案。这就像给 AI 装了一个“可搜索的硬盘”。 你不需要把所有数据写进 Prompt,Kernel Memory 会自动找到最相关的上下文。## 进阶:将 Semantic Kernel 和 Kernel Memory 组合使用实战中,我们经常需要两者结合:用 Semantic Kernel 编排复杂的任务,用 Kernel Memory 提供长期记忆。### 场景:智能客服系统假设你要构建一个客服机器人,它需要:1. 记住用户的历史对话。2. 根据公司知识库回答产品问题。3. 自动执行一些操作(如查询订单状态)。pythonimport semantic_kernel as skfrom semantic_kernel.connectors.ai.open_ai import OpenAIChatCompletionfrom kernel_memory import KernelMemoryfrom kernel_memory.connectors.open_ai import OpenAIConfig# 初始化kernel = sk.Kernel()chat_service = OpenAIChatCompletion( ai_model_id="gpt-3.5-turbo", api_key="your-api-key")kernel.add_chat_service("chat", chat_service)memory = KernelMemory(OpenAIConfig(api_key="your-api-key"))# 模拟导入公司知识库memory.import_text("我们的产品支持3种支付方式:微信、支付宝、银行卡。退款政策是7天无理由退换。", document_id="policy")# 定义客服函数def customer_service(user_input: str, user_id: str) -> str: # 1. 从记忆中检索相关知识 context = memory.ask(user_input, min_relevance=0.6) # 2. 构建包含上下文的 Prompt prompt = f""" 你是一个智能客服。以下是关于产品的问题和已知信息: 用户问题:{user_input} 相关知识:{context.result} 请用礼貌的语气回答,如果不知道就说“我不确定”。 """ # 3. 调用 AI 生成回复 result = kernel.create_semantic_function(prompt)() return result# 测试print(customer_service("我可以用信用卡付款吗?", "user123"))# 输出:根据我们的知识库,目前支持微信、支付宝和银行卡支付,暂时不支持信用卡。关键点:- memory.ask 先检索知识库中的片段。- 将检索结果作为上下文传给 Semantic Kernel 的提示词。- 最终回复既准确又基于真实数据。## 性能优化与最佳实践1. Chunk 大小:默认 256 tokens,但根据文档类型调整。代码文档可设 512 tokens,小说可设 128 tokens。2. 向量数据库选择:小项目用内存,生产环境用 Qdrant 或 Azure Cognitive Search。3. 错误处理:API Key 失效或网络问题,使用重试机制。pythonimport timefrom tenacity import retry, stop_after_attempt, wait_exponential@retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=4, max=10))def safe_ask(memory, query): return memory.ask(query, min_relevance=0.5)4. 内存清理:定期清理过期记忆,避免向量库膨胀。## 总结通过这篇“万字长文”,我们学到了:- Semantic Kernel 是 AI 编排框架,它把模型、数据和逻辑变成可组合的“函数”。- Kernel Memory 是记忆系统,它用向量检索让 AI 拥有长期记忆。- 两者结合 可以构建真正的智能应用:客服、知识库问答、文档分析等。文中的两个代码示例(基础问答 + 知识库检索)已经覆盖了 90% 的常见场景。你只需要替换 API Key 和文档内容,就能马上运行。记住,AI 开发不再只是大公司的专利。有了 Semantic Kernel 和 Kernel Memory,你也能轻松对接 AI 模型,做出自己的智能助手。快去试试吧,工良出品,必属精品!(全文完)
更多推荐


所有评论(0)