本文详细介绍了如何构建Agent应用,核心定义为Application + Agent + MCP。文章从基础应用搭建开始,讲解了Agent集成设计中的智能化、交互和MCP设计,并深入探讨了Agent开发流程,包括Task Splitter和Task Executor的具体实现。通过XML格式定义任务,结合Human-in-the-loop机制,实现了高效可靠的Agent应用开发方法。


如何构建一个 Agent 应用?

是时候准备实习和面试了。

不同以往的是,当前职场已不再是那个双向奔赴时代了。求职者在变多,HC 在变少,岗位要求还更高了。

最近,我们又陆续整理了很多大厂的面试题,帮助一些球友解惑答疑,分享技术面试中的那些弯弯绕绕。

来源:https://github.com/mortalYoung/mortalYoung/blob/master/build-agent.md

本文档介绍如何构建 Agent 应用。首先,给出 Agent 的核心定义是:

Agent Application=Application+ Agent+ MCP

其中,Application 表示应用的基本功能,Agent 表示智能体的能力,MCP 是 Application 和 Agent 之间的桥梁。

由上述可知,Agent 应用并非单纯的 AI 应用,其核心是围绕 Application 的基础功能,并辅以 AI 手段(如 RAG,MCP 等技术),其目的是提升 Application 的能力。

故而可知,评价 Agent 应用的好坏,最终还是要看其所依赖的 Application 的质量以及 Application 能提供给 Agent 的 MCP 的质量。

01

Set up

首先,需要准备一个功能丰富且齐全的应用程序作为基础。这里以一个简单但功能齐全的任务调度系统作为例子。

(1)任务调度系统

任务调度系统的核心功能包括:

  • VFS(虚拟文件系统):提供文件的统一管理和访问接口。
  • 上下文管理:支持任务的上下文信息管理,包括输入、输出、状态等。
  • 任务管理:支持任务的创建、调度、执行和监控。
  • 权限隔离:支持用户、项目的权限隔离。

任务调度系统的主流程如下:

  • 登录并创建项目
  • 在项目中创建目录及文件
  • 通过临时运行任务确保任务高效运行
  • 将任务提交至调度系统,并确认 cron 以及上下文
  • 通过监控查看周期任务执行情况

02

Agent 集成设计

在集成 Agent 之前,需要考虑以下几个方面:

  • 智能化设计:如何提升 Agent 的智能化水平,实现更复杂的任务处理和决策能力。
  • 交互设计:Agent 的交互应如何实现使得最大化用户体验。
  • MCP 设计:Application 可以为 Agent 提供怎样的 MCP 以提高 Agent 的能力。

(1)智能化设计

根据 AI 应用的三大核心中提到的核心观点:AI 应用的质量取决于模型质量,上下文质量和提示词质量。

因此,需要从模型质量、上下文质量和提示词质量三个方面来提升 Agent 的智能化水平。

模型质量:一般来说,选择能推理,会思考的模型会更好。或者考虑用自研的模型,这里可以根据具体需求进行定制。

上下文质量:通常来说,提升上下文质量需要靠 Context Engineering 来实现。

但这次,我们除了借助 Context Engineering 的方式来实现,同时也借助 Multi-Agent 的方式来提升上下文质量。

将 Agent 根据任务的职责进行区分,分为 Splitter 和 Executor(根据实际情况进行拆分,复杂的 Agent 系统可能会有更多的角色,比如:Conclusion、Reviewer 等)。

需要注意的是,并不是越多角色越好,根据 Claude Code 的实践经验来看,Keep it Simple and Stupid 是最好的。

提示词质量:在 Multi-Agent 中,为每一个 Agent 提供高质量的提示词是至关重要的。提示词的质量直接影响到 Agent 的理解和执行能力。

通常来说,提供 System Prompt 应包含以下方面:

  • 角色描述,用于明确 Agent 的身份和职责。
  • 任务描述,用于清晰地定义 Agent 需要完成的任务目标和要求。
  • 上下文信息,用于提供任务相关的背景知识和信息支持。
  • 约束条件,用于限制 Agent 的行为和决策范围。
  • 回答格式,用于规定 Agent 的回答方式和输出格式。
  • 例子,一些具体的示例,用于帮助 Agent 理解任务。

(2)交互设计

传统的 AI 应用,通常仅限于你问我答的形式。更进一步的交互设计,也仅仅是将 LLM 的回答结果以更友好的方式呈现给用户。

为了提升可靠性和准确性,在交互设计中,我们将通过某种方式把人为监督介入到交互流程中。

同时,借助后端缓存,将 LLM 的回答和 Application 的能力结合,实现动态响应。

Human in the loop By @LangChain

(3)MCP 设计

MCP(Model Context Protocol)的概念不再赘述。其核心在于为 Agent 提供丰富的上下文信息和操作接口,以便更好地完成任务。

基于传统的 MCP 架构设计,我们需要建立一个 MCP 服务端,然后将任务调度系统的后端作为 MCP 的客户端,以此来调用 MCP 的能力。

但这种方式存在的问题是:

  • 需要额外建立并且管理服务器,是以增加系统的维护成本。
  • 考虑到实际系统运行的情况下,MCP 工具需要动态新增和移除,但从目前的 MCP 架构设计来看,缺乏灵活性和扩展性。
  • 在 LLM 调用 MCP 的时候缺乏 HITL(human-in-the-loop) 的支持,无法实现更人性化的交互。

因此,在真正的实现过程中,我们并不会依赖传统的 MCP 架构设计。而是基于 Context Engineering 的理念,仅为 LLM 提供 MCP 工具的含义即调用方法,而实际的调用过程则没有 LLM 的介入。

理论情况如下:

System:

03

Agent 开发

考虑具备如下完整的流程场景:

System:

上述流程中,在用户提问「Build a weather forcast for Shanghai.」之时,系统会将提问发送给 Splitter,并且在上下文中提供 System Prompt。

Splitter 在这一步的作用是将用户的诉求进行拆分,根据系统能力将其拆分成多个可执行的任务。

(1)Task Splitter System Prompt 的基础设计

在上下文中需要告知任务调度系统的核心功能:

<context>

在角色描述及职责中阐明当前角色的功能和任务:

你是一个任务调度平台的开发助手

在执行限制中说明 Agent 需要遵循的规则和约束:

<constraints>

(2)Response Format 设计

考虑到在 Assistant 的回答后,需要用户进行进一步的确认。因此需要定义固定的回答格式,以便于用户理解和确认。

这里,我们考虑用 XML 的格式进行定义:

<response_format>

举个例子:

<response>

事实上你也可以考虑让 LLM 用 JSON 格式定义任务。但在 Prompt 中,建议用 XML 对语义进行标记,因为根据 Claude Code 的实现,AI 对于 XML 的理解会更好。

XML To metadata

考虑到传输的过程是以流的形式进行的,Application 需要在流中,将 XML 数据转换为 JSON 格式,并将其进行持久化存储。

同时,将该数据传给前端,以便其在页面上可以展示任务拆分细节及确认按钮。

大致流程如下:

到这里,前端再根据返回的 metadata 信息进行渲染,并支持确认按钮。

显然,用户点击确认后,需要新增一条信息以保留用户的确认操作,同时上一条信息的状态需要修改,以确保用户在确认操作过后,不支持再次修改。

前者,可以新增标识符来表示用户操作,例如 <confirmed>Confirmed</confirmed>

这里用 XML 标签,并将确认文案放在标签内,是考虑到前端可以借助 rehype 的能力对其进行解析和渲染。

后者来说,单条信息的状态除了 loadingfinished 之外,还需要新增一个状态。 hitl,表示当前信息需要用户确认的状态。

事实上,状态的命名并不重要,重要的是状态背后的语义能够准确传达信息。

传统上来说,尽管区分 loadingfinished 两者状态,但通常只会用一个 boolean 类型的变量做标识。但新增了一个状态后,状态值的类型就需要修改为枚举。

(3)Task Executor 设计

在用户点击确认后,用户将确认后的 metadata 数据发送至后端,后端需要根据这些信息,拼接整理出 Executor 需要的上下文信息。

和 Splitter 上下文不同的是,在 Executor 的上下文中,需要提及工具的定义及相关的调用方法和规则。

tool_calling:

<tool_calling>

tools:

<tools>

即然当前的系统存在 VFS 的能力,那么显然 tools 可以读取当前系统中的一些固定格式的文件,并解析其相关描述,从而动态的将 tools 的定义提供给 LLM。

例如,满足后缀名是 .mcp,并且其内容是存在默认导出的函数,并且不依赖其他文件的,语言是 TypeScript 的任务。

则将其获取出来,并借助 JSDoc 或者 ts-morph 的能力,将其转换为工具定义的 XML 格式。

Invoke

在上下文中说明了提供的工具后,同时还需要规范 LLM 如何调用工具。

<constraints>

通过定义 invoke 标签,并提供相关例子,LLM 可以知道如果需要调用工具可以按照如下方式执行:

<invoke>

解析 XML 的原理同上述一致。

Tool Called

在识别到 invoke 标签,并且用户点击确认调用之后,系统应根据 metadata 数据,借助调度的能力,执行该任务并获取其日志。

在获取日志后,我们需要将日志通过某种形式给 LLM,让 LLM 继续工作。

在用户确认后,我会调用工具并将结果告诉你。

LLM 通过解析日志信息,获取到执行结果后,会继续重复调用直到当前任务执行完成。

Success

当任务执行完成后,LLM 需要返回 <success> 标签以通知系统当前任务完成,同时系统需要根据当前信息整理出上下文,给到 Task Splitter 以继续后续任务。

如果你发现指定的任务已经圆满完成了,你可以针对这次任务做一个总结文案,并将其放在<success>标签中。

Task Splitter 会重复拆分任务,直到任务全部完成,从而结束整个任务。

04

流程图

Send Message:

Task Submit:

Invoke

事实上,Task Submit 和 Invoke 的流程是类似的,区别在于, - Task Submit 需要整理 Context。

而 Invoke 则需要执行任务然后发送日志信息 - Task Submit 的 Response Text 从理论上来说不会出现 <success> 标签,而 Invoke 可能出现 <success> 标签。

如何学习AI大模型 ?

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。【保证100%免费】🆓

CSDN粉丝独家福利

这份完整版的 AI 大模型学习资料已经上传CSDN,朋友们如果需要可以扫描下方二维码&点击下方CSDN官方认证链接免费领取 【保证100%免费】

读者福利: 👉👉CSDN大礼包:《最新AI大模型学习资源包》免费分享 👈👈

(👆👆👆安全链接,放心点击)

对于0基础小白入门:

如果你是零基础小白,想快速入门大模型是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。

👉1.大模型入门学习思维导图👈

要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。

对于从来没有接触过AI大模型的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。(全套教程文末领取哈)
在这里插入图片描述

👉2.AGI大模型配套视频👈

很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,每个章节都是当前板块的精华浓缩。
在这里插入图片描述

在这里插入图片描述

👉3.大模型实际应用报告合集👈

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(全套教程文末领取哈)

在这里插入图片描述

👉4.大模型实战项目&项目源码👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战项目来学习。(全套教程文末领取哈)
在这里插入图片描述

👉5.大模型经典学习电子书👈

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。(全套教程文末领取哈)
在这里插入图片描述

👉6.大模型面试题&答案👈

截至目前大模型已经超过200个,在大模型纵横的时代,不仅大模型技术越来越卷,就连大模型相关的岗位和面试也开始越来越卷了。为了让大家更容易上车大模型算法赛道,我总结了大模型常考的面试题。(全套教程文末领取哈)
在这里插入图片描述

为什么分享这些资料?

只要你是真心想学AI大模型,我这份资料就可以无偿分享给你学习,我国在这方面的相关人才比较紧缺,大模型行业确实也需要更多的有志之士加入进来,我也真心希望帮助大家学好这门技术,如果日后有什么学习上的问题,欢迎找我交流,有技术上面的问题,我是很愿意去帮助大家的!

这些资料真的有用吗?

这份资料由我和鲁为民博士共同整理,鲁为民博士先后获得了北京清华大学学士和美国加州理工学院博士学位,在包括IEEE Transactions等学术期刊和诸多国际会议上发表了超过50篇学术论文、取得了多项美国和中国发明专利,同时还斩获了吴文俊人工智能科学技术奖。目前我正在和鲁博士共同进行人工智能的研究。

资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。

在这里插入图片描述
在这里插入图片描述

CSDN粉丝独家福利

这份完整版的 AI 大模型学习资料已经上传CSDN,朋友们如果需要可以扫描下方二维码&点击下方CSDN官方认证链接免费领取 【保证100%免费】

读者福利: 👉👉CSDN大礼包:《最新AI大模型学习资源包》免费分享 👈👈

(👆👆👆安全链接,放心点击)
Logo

更多推荐