今年最热的技术除了LLM大语言模型外,AI Agent智能体成为下一个最热的技术发展热点。、

近期准备整理几篇AI智能体的博客,带着大家了解并学习AI 智能体的开发和应用。

一、什么是AI 智能体

AI智能体(AI Agent)是指一个由人工智能驱动的系统或程序,能够在一定的环境中自主感知、决策和执行任务,同时不断学习和优化自身行为。

智能体的目标是完成特定任务或解决问题,模拟或增强人类的智能活动。

核心特性

  1. 自主性:智能体可以独立完成任务,而不需要人类的实时干预。
  2. 感知能力:通过传感器(物理或虚拟),获取环境中的信息。
  3. 决策能力:根据感知到的信息,分析情况并制定行动计划。
  4. 执行能力:实施决策,改变自身或环境状态。
  5. 学习能力:通过与环境的交互不断优化决策和行为。

组成部分

  1. 感知模块:采集数据,例如通过摄像头、麦克风、API接口等获取外界信息。
  2. 决策模块:利用算法或规则制定行动策略。
  3. 执行模块:实施决策,例如控制机器人动作或生成文本回复。
  4. 学习模块:通过机器学习或深度学习模型改进未来的行为。

分类

  • 物理智能体:例如机器人、无人机、自动驾驶汽车,它们存在于现实世界中,与物理环境交互。
  • 虚拟智能体:例如聊天机器人、智能客服、游戏中的NPC(非玩家角色),它们存在于数字或虚拟环境中。

应用领域

  • 自动驾驶:自动驾驶汽车利用智能体感知道路状况,做出驾驶决策。
  • 智能客服:通过自然语言处理技术与用户交流,解决问题或提供服务。
  • 游戏开发:NPC智能体增强了游戏的互动性和挑战性。
  • 金融分析:智能体可以根据市场数据提供投资建议或进行风险评估。

通俗理解

AI智能体就像是一个有“眼睛”“大脑”和“手脚”的虚拟助手。它能看(感知)、想(决策)、做(执行),并且能从错误中学习,让自己变得更聪明。无论是帮助你回答问题、完成任务,还是自动驾驶和导航,它都可以独立完成,而不需要你时时刻刻指导它。

二、使用Microsoft Semantic Kernel开发AI Agent

Semantic Kernel 是一个软件开发工具包(SDK),用于将大型语言模型(LLM),如 OpenAI、Azure OpenAI 和 Hugging Face,与传统编程语言(如 C#、Python 和 Java)集成。

它通过定义插件,并以几行代码将它们串联在一起,实现这一点。

Semantic Kernel 的独特之处在于其能够利用人工智能自动协调插件。通过 Semantic Kernel 的计划器,可以请求 LLM 生成一个实现用户特定目标的计划,然后由 Semantic Kernel 为用户执行该计划。

它提供了以下功能:

  • AI 服务的抽象(如聊天、文本转图像、音频转文本等)和内存存储。
  • 针对 OpenAI、Azure OpenAI、Hugging Face、本地模型等服务的这些抽象的实现,以及针对众多向量数据库(如 Chroma、Qdrant、Milvus 和 Azure)的实现。
  • 插件的通用表示形式,之后可由 AI 自动协调。
  • 从多种来源创建此类插件的能力,包括 OpenAPI 规范、提示和用目标语言编写的任意代码。
  • 对提示管理和渲染的可扩展支持,包括对 Handlebars 和 Liquid 等常见格式的内置处理。
  • 基于这些抽象的丰富功能,例如负责任的 AI 过滤器、依赖注入集成等。

由于其灵活性、模块化和可观察性,Semantic Kernel 被企业广泛使用。它具备增强安全性的功能,如遥测支持,以及挂钩和过滤器,能够大规模提供负责任的 AI 解决方案。

三、详细开发流程

1. 安装和配置 Semantic Kernel

    • 安装 SDK:通过 NuGet 或 pip 安装 Semantic Kernel 的库。
    • 配置 API:将 OpenAI、Azure OpenAI 或其他 LLM API 集成到项目中。
var kernel = Kernel.Builder
.WithOpenAIChatCompletionService("gpt-4", "YOUR_API_KEY", "https://api.openai.com/v1/")
.Build();

2. 定义功能插件

  • 插件类型:插件可以是用提示(Prompts)、代码函数,或 OpenAPI 规范定义的功能模块。
  • 创建插件:插件可以封装不同的任务,例如处理文本、执行计算、或与外部服务交互。

    示例(简单文本生成插件)

var textPlugin = kernel.CreateSemanticFunction("What's your goal? Summarize the following: {{input}}");

3. 编排和组合插件

  • 单一任务执行:直接调用一个插件完成任务。
  • 任务链式执行:通过 Semantic Kernel 的“计划器”自动将多个插件组合起来完成复杂任务。

示例(任务链式执行)

var planner = kernel.ImportPlannerPlugin();
var plan = await planner.CreatePlanAsync("Summarize a long document and translate it into French.");
var result = await kernel.RunAsync(plan, new ContextVariables("Input text here."));
Console.WriteLine(result.Result);

4. 集成内存功能

  • 记忆用户上下文:Semantic Kernel 提供内存存储支持,可以将数据保存到向量数据库中(如 Chroma、Milvus)。
  • 查询历史记录:通过语义查询,智能体可以动态访问存储的上下文信息。

示例(内存集成)

kernel.ImportMemoryPlugin();
await kernel.Memory.SaveInformationAsync("userData", "User's preference for French summaries.");

5. 扩展和优化

  • 自定义 Prompt 模板:支持 Handlebars 和 Liquid 模板格式,轻松管理复杂的提示。
  • 安全性和责任感:启用遥测和过滤器,确保解决方案符合企业要求。
  • 多模型支持:切换到新的 LLM 模型(例如 GPT-4、Claude)时,只需替换 API,而无需改动代码。

四、示例应用:多功能 AI Agent

目标:开发一个 AI Agent,具备以下能力:

  1. 分析并总结输入文本。
  2. 将总结翻译成用户指定语言。
  3. 保存用户偏好到内存中。

完整代码示例(C#)

using Microsoft.SemanticKernel;

class Program
{
static async Task Main(string[] args)
{
// 初始化 Semantic Kernel
var kernel = Kernel.Builder
.WithOpenAIChatCompletionService("gpt-4", "YOUR_API_KEY", "https://api.openai.com/v1/")
.Build(); // 定义插件
var summarizer = kernel.CreateSemanticFunction("Summarize the following: {{input}}");
var translator = kernel.CreateSemanticFunction("Translate to {{language}}: {{input}}"); // 用户输入
string inputText = "Semantic Kernel is a framework for integrating LLMs into apps.";
string targetLanguage = "French"; // 执行任务
var summary = await kernel.RunAsync(summarizer, new ContextVariables(inputText));
var translatedText = await kernel.RunAsync(translator, new ContextVariables(summary.Result)
{
["language"] = targetLanguage
}); // 保存用户偏好到内存
kernel.ImportMemoryPlugin();
await kernel.Memory.SaveInformationAsync("userPreferences", $"Preferred language: {targetLanguage}"); // 输出结果
Console.WriteLine("Summary: " + summary.Result);
Console.WriteLine("Translation: " + translatedText.Result);
}
}
  1. 将代码部署到本地或云端。
  2. 提供输入(例如长文本),观察 AI Agent 自动执行文本总结、翻译和存储偏好。
  3. 修改模型、提示或插件实现更多定制功能。

通过 Semantic Kernel,开发者可以高效创建多功能 AI Agent,将其应用于各种企业场景,如智能客服、知识管理、内容生成等。

周国庆

2024/12/29

AI Agent系列-什么是AI智能体,使用Semantic Kernel开发一个AI Agent的更多相关文章

  1. 自己开发一个 vsts agent 的 task

    vsts 中支持自定义Build/Release的过程Task 目标:做一个可以读取 Xamarin.Android 所生成的 APK 的 基本信息的 task ,包括 package(包名) / a ...

  2. 从软件开发到 AI 领域工程师:模型训练篇

    前言 4 月热播的韩剧<王国>,不知道大家有没有看?我一集不落地看完了.王子元子出生时,正逢宫内僵尸作乱,元子也被咬了一口,但是由于大脑神经元尚未形成,寄生虫无法控制神经元,所以医女在做了 ...

  3. Semantic Kernel 知多少 | 开启面向AI编程新篇章

    引言 在ChatGPT 火热的当下, 即使没有上手亲自体验,想必也对ChatGPT的强大略有耳闻.当一些人在对ChatGPT犹犹豫豫之时,一些敏锐的企业主和开发者们已经急不可耐的开展基于ChatGPT ...

  4. Semantic Kernel 入门系列:📅 Planner 计划管理

    Semantic Kernel 的一个核心能力就是实现"目标导向"的AI应用. 目标导向 "目标导向"听起来是一个比较高大的词,但是却是实际生活中我们处理问题的 ...

  5. 伯克利推出「看视频学动作」的AI智能体

    伯克利曾经提出 DeepMimic框架,让智能体模仿参考动作片段来学习高难度技能.但这些参考片段都是经过动作捕捉合成的高度结构化数据,数据本身的获取需要很高的成本.而近日,他们又更进一步,提出了可以直 ...

  6. AI人工智能系列随笔

    初探 AI人工智能系列随笔:syntaxnet 初探(1)

  7. 中国AI觉醒 阿里王坚:云智能将成为大趋势

    2019独角兽企业重金招聘Python工程师标准>>> <麻省理工科技评论>新兴科技峰会EmTech China于北京召开.大会中,其中一项热门的讨论便是:中国和美国的科 ...

  8. 云原生的弹性 AI 训练系列之一:基于 AllReduce 的弹性分布式训练实践

    引言 随着模型规模和数据量的不断增大,分布式训练已经成为了工业界主流的 AI 模型训练方式.基于 Kubernetes 的 Kubeflow 项目,能够很好地承载分布式训练的工作负载,业已成为了云原生 ...

  9. 云原生的弹性 AI 训练系列之二:PyTorch 1.9.0 弹性分布式训练的设计与实现

    背景 机器学习工作负载与传统的工作负载相比,一个比较显著的特点是对 GPU 的需求旺盛.在之前的文章中介绍过(https://mp.weixin.qq.com/s/Nasm-cXLtJObjLwLQH ...

  10. 【SerpentAI:Python开源游戏智能体开发框架——相比OpenAI Universe可导入自己的游戏、可脱离Docker/VNC运行】

    https://weibo.com/fly51fly?from=myfollow_all&is_all=1#1514439335614 [SerpentAI:Python开源游戏智能体开发框架 ...

随机推荐

  1. 无需等待Vue Release发布,就能在项目中体验最新版

    前言 两个月前尤大在Vue 仓库中引入了 pkg.pr.new,有了这个后Vue仓库中的每个commit或者PR都会自动触发一个新的发布,我们就可以在项目中体验最新版本的Vue啦. 关注公众号:[前端 ...

  2. Linux利用scp命令上传下载文件

    scp是secure copy的简写,用于在 Linux 下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器. scp传输是加密的,可能会稍微影响一下速度.当你服务 ...

  3. 使用VMware Workstation创建的虚拟机无法连接网络解决方法

    引言:最近打开虚拟机老是连接不上网络,在网上找这前两个方法试还是一直不行,最后才知道忘记重启DHCP service和NAT service 1.查看虚拟机的设置,确保虚拟机网络连接的方式勾选的是NA ...

  4. WebDriver常用属性和方法

    除了上一篇的元素定位方法,Selenium中的WebDriver类中还有一些常用的属性和方法 一.常用的属性 1.下表列出了WebDriver的常用属性 # 属性 属性描述 用途 1 driver.n ...

  5. TCP-UDP-Socket调试工具以及使用教程(亲测好用!)

    前言 TCP-UDP老程序都不陌生吧,面试常问.所以在网络编程与网络应用开发的过程中,调试是一个至关重要的环节,它帮助开发者确保数据能够准确无误地在不同节点之间传输.尤其当涉及到TCP/IP.UDP等 ...

  6. RTCP报文解析

    RTCP包的头部结构体定义 struct RTCP_Header { unsigned short rc:5; unsigned short padding:1; unsigned short ver ...

  7. GIt分布式管理工具

    Git(分布式版本控制工具) Git的学习是不依赖我们前面学习的知识,就算没有学习java也可以学习 Git就是一个类似于百度云盘的仓库 重点是要掌握使用idea操作Git,企业用的最多,一般不会去使 ...

  8. Java net.sf.jxls 生成模板 并导出excel

    如果是 maven项目需要引入下面这个就可以 <dependency> <groupId>net.sf.jxls</groupId> <artifactId& ...

  9. JAVA 传输post传输长字符、数据编码解码 反序列化字符串

    JAVA 传输post传输长字符.数据编码解码 1.前段传输 这是传输的数组对象 2.后端接收格式已解码 JS代码: $.ajax({ url:prefix+"/importModelTre ...

  10. LinkedList原码分析(基于JDK1.6)

    <Java集合类>一文中已经最List的基本操作进行说明,并且比较了ArrayList和LinkedList的效率.本文将进一步解析LinkedList. LinkedList也和Arra ...