0%

如何开发一个AI Agent应用

之前的博客中总结了使用 LangChain、LangGraph 等 Python 库开发 AI Agent 的相关代码,这篇博客总结了如何开发一个 AI Agent 应用,包括一个 Agent 应用应该有哪些功能模块和服务端架构。

Agent 设计模式

相对于传统的人工智能,AI Agent 具备通过独立思考、调用工具去逐步完成给定目标的能力。AI Agent 和大模型的区别在于,大模型与人类之间的交互是基于 prompt 实现的,用户 prompt 是否清晰明确会影响大模型回答的效果。而 AI Agent 的工作仅需给定一个目标,它就能够针对目标独立思考并做出行动。和传统的 RPA 相比,RPA 只能在给定的情况条件下,根据程序内预设好的流程来进行工作的处理,而 AI Agent 则可以通过和环境进行交互,感知信息并做出对应的思考和行动。

一个 Agent 的基本组成大概是这样的 Agent = LLM + Memory + 工具,其中 LLM + Memory 就类似我们的大脑,他可以有记忆功能,能进行思考和反馈,可以通过拆分或者规划来执行任务,最终将结果汇总并输出。有这样的大脑,再通过调用一系列工具或者工具包,就能更好地帮助我们完成设定的目标。

我们在开发 Agent 应用时,可以考虑下面几种设计模式,以便提升 LLM 的性能,让 Agent 输出更好地结果:

1
2
3
4
1. 反思 Reflection:让 Agent 审视和修正自己生成的输出;
2. 使用工具 Tool Use:LLM 生成代码、调用 API 等进行实际操作;
3. 规划 Planning:让 Agent 分解复杂任务并按计划执行;
4. 多 Agent 合作 Multiagent Collaboration:多个 Agent 扮演不同角色合作完成任务。

同时也应该考虑 Agent 具有的特性:

1
2
3
1. 自主性:按照人的指令,在没有人为干预的情况下自主执行任务
2. 反应性:利用多模态技术扩展感知空间,能处理来自环境的视觉和听觉信息
3. 交互性:可以与人或者其他 Agent 交互

Agent 功能模块

我们开发 AI Agent 应用前,首先会考虑的是根据特定行业甚至是具体业务来开发 AI Agent 应用,例如医疗行业、金融行业、教育行业等。不同的行业和业务都有一些特定的需求和功能,但是一个 AI Agent 应用的基本功能模块大致可以有下面几个:

  1. Agent 模块

    1
    2
    3
    1. Agent 创建
    2. Agent 列表
    3. Agent 详情
  2. Tools 模块

    1
    2
    3
    1. 工具列表
    2. 工具详情
    3. 配置工具
  3. LLM 模块

    1
    2
    3
    1. 模型列表
    2. 模型详情
    3. 添加模型
  4. Resource 模块

  5. Monitor 模块

  6. Evaluation 模块

  7. Marketplace 模块

Agent 模块

Agent 模块主要功能可以有创建 Agent、运行 Agent、显示 Agent 详细信息、发布 Agent 等。

Agent 创建

创建一个 Agent 时,可以包含下面的 Agent 信息:

1
2
3
4
5
6
7
8
Agent 目标:Agent 目标是我们想要 Agent 实现的最终结果,可以设定多个目标。
Agent 指令:指令是我们可以向 Agent 规定的指示或指南。通过指令,我们可以提供可操作的信息,帮助 Agent 了解如何实现给定的目标,并做出适当的选择。
Agent 类型:我们可以通过选择 Agent 的类型来改变 Agent 的思维过程。简单一点的 Agent 分类包括:完全自主 Agent(执行过程中不需要人类的参与)、半自主 Agent(执行过程中需要人类参与)。复杂一点的 Agent 分类包括:基于 ReAct 的 Agent 、固定任务的 Agent 和基于动态任务的 Agent。
LLM 选择:创建 Agent 时,我们可以选择要用来部署 Agent 的大型语言模型,不管是 GPT-3.5、GPT-4 还是像 Llama3 这种开源大模型。
Tools 选择:创建 Agent 时,我们可以选择 Agent 可以调用的工具,使用工具可以帮助 Agent 取到更好地效果。
添加资源:添加资源包括上传文件、添加网址等,Agent 在运行期间访问这些资源以便更好地检索知识、回答问题。
添加约束:约束是 Agent 运行时的护栏,以防止 Agent 产生我们不期望的答案(例如:不道德的答案、色情的答案等)。
迭代次数:我们可以设置最大迭代次数来防止 LLM 运行过长时间,产生更高的成本。太多迭代次数也有可能使 Agent 最终输出的效果变差。

这里所说的创建 Agent,可能是创建一个 Agent,也可能是创建多个 Agent 构成一个集合(便于多个 Agent 之间相互协作),这取决于 Agent 需要实现的目标的复杂度。

Agent 列表

Agent 列表记录了用户已创建的 Agent 信息,Agent 列表中可以包括 Agent 名称、Agent 运行状态等信息。

Agent 详情

Agent 详情中可以包括 Agent 运行记录列表,点击 Agent 中的某条运行记录,可以显示 Agent 运行时的详细信息、Agent 运行时的配置信息、以及 Agent 运行时的输入输出信息。

Tools 模块

Tools 模块主要功能是显示 Tool 列表、显示 Tool 详情(详情可以包含工具的被使用信息、工具的调用日志等)、增加 Tool、配置 Tool (有些工具需要配置 API Key 等信息)。

LLM 模块

LLM 模块主要功能是对 LLM 的管理,包括 LLM 列表、LLM 使用详情、添加 LLM(添加 OpenAI 模型,或者基于 Ollama 的模型,或者本地部署的模型等)。

Resource 模块

Resource 模块主要功能是对资源的管理,包括文本文件、音频文件、视频文件的增删查改等操作,这些所有资源都保存在 Milvus 或者 Pinecone 等向量数据库中。这些资源数据可以供 Tool 或者 LLM 检索时使用。

Monitor 模块

Monitor 模块主要功能是对所有 Agent 的情况进行汇总展示,包括已创建的 Agent 数量、运行中的 Agent 数量、总消耗 Tokens 数量、LLM 的使用情况等信息。

Evaluation 模块

Evaluation 模块主要功能是对 LLM 的回答结果进行评估(可以是自动评估或者业务人员手动进行评估)并展示,以便后续根据这些评估结果对 LLM 进行优化。特别的,可以评估一些我们给 LLM 设定的约束是否达到效果。不同行业或者业务也可以设定一些特定的评估指标。

有一些开源的 Python 库可以对 LLM 的输出结果进行评估,感兴趣的可以去搜索了解一下。

Marketplace 模块

Marketplace 模块主要展示已发布的 Agent 模板、已发布的 Resource 数据、以及已发布的 Tool,并且可以安装这些模板去使用。

Agent 后端功能

根据以上分析的 Agent 应用的功能模块,后端的架构大致如下:

img

上面的架构图中,网关层负责转发前端的请求到后端服务;后端服务层负责提供接口与前端进行交互,上图中是根据功能模块拆分成了多个服务;MQ 层负责分发 Agent 的运行任务,这里的 MQ 层也可以使用分布式的任务调度框架替换(如 Celery、Luigi 等);Agent 层是核心功能,负责 Agent 的运行工作,包括选择 LLM、调用 Tool、查询 Resource 数据、处理 LLM 的响应数据等工作;DB 层负责缓存数据、保存结构化数据、保存向量数据。

我们开发后端服务可以使用 Python 的 Web 框架 FastAPI,开发 Agent 可以使用 LangChain 或者 LangGraph,或者其它 Python 库。

Agent 如何与行业结合

按照上面设计的 Agent 功能模块,如果需要将 Agent 与特定的行业或者业务相结合,可以有以下几个步骤:

1
2
3
1. 首先需要将 LLM 模块与特定的行业或者业务相结合,即需要训练或者微调出特定行业或者业务的大语言模型(微调 LLM 可以使用 LLaMA-Factory、unsloth 等开源库)
2. 然后就是开发一些适合于特定行业或者业务的 Tool
3. 最后就是构建与特定行业或者业务相关的 Resource 数据,包括一些文本数据、音频数据、视频数据、或者在线数据

以上就是开发 AI Agent 应用相关的一些总结,后续有时间会补充 Agent 前端组件相关的内容。