支持私有化部署
AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


如何构建有效的LLM智能体

发布日期:2025-05-13 07:35:22 浏览次数: 1652 作者:码了个啥
推荐语

探索智能体构建的前沿技术,把握智能应用的未来趋势。

核心内容:
1. 智能体Agent的定义及其关键特性
2. 何时需要智能体Agent以及技术栈的选择
3. 基于LLM实现智能应用的核心原理与实践

杨芳贤
53A创始人/腾讯云(TVP)最具价值专家
前言
随着大模型技术突破和成本的降低,基于大模型的智能应用迎来大爆发,2025年被称为智能体元年,从Manus的爆火,到百度心响的发布,各行业都在积极探索他们的智能应用,那么在这个浪潮下,我们如构建有效的的智能体呢?
本篇文章,我们结合国内外的经典资料讨论「如何构建有效的智能体」话题:
我们从“什么是智能体Agent”开始,讨论“什么时候需要智能体Agent”,再到“如何选择智能应用开发技术栈”其中从图形化开发平台,聊到自研选择开发框架,再到企业级架构的畅想。最后分析“如何基于LLM实现智能应用”,我们重点讨论“Workflow工作流方案”和“Agent智能体方案”的核心原理和取舍,最后源码级探索manus的核心原理。目前技术发展迅猛,迭代频繁,欢迎大家批评指正,关注交流,后续将会分享更多干货内容。

本篇综合了Anthropic的「Building Effective Agents」及大量互联网知识资料,加上自己的实践和研究理解给大家分享。其它参考资料见于文末「附录」,感谢开源、开放的伟大,让知识唾手可得。

https://www.anthropic.com/engineering/building-effective-agents
什么是智能体Agent?

在人工智能领域,智能体是一个能够在所处环境中自主感知信息、做出决策,并根据决策采取行动以实现特定目标或任务的实体。其关键特性有自主性(能在无外部干预时控制自身行为)、感知能力(通过传感器或数据输入感知环境状态)和决策能力(处理感知信息并做出响应行动) 。

LLM 智能体,很多平台也叫Agent,是利用大语言模型(LLM)、工具和记忆来执行任务、做出决策,并能自主与用户或其他系统交互的人工智能系统。它以 LLM 为核心,突破了传统 LLM 仅专注于文本生成的局限,能够理解任务指令,通过推理规划步骤,借助外部工具和记忆信息,灵活应对各种复杂问题。在智能客服场景中,它不仅能理解客户咨询,还能调用知识库、订单系统等工具获取信息,为客户提供准确解决方案 。

基于LLM的智能体应用,国外一般叫Agent,国内将Agent翻译为“智能体”,Agent这个英文单词实际上是“代理”的意思,指的是让大模型“代理”人的行为,使用某些“工具”来完成某些“任务”的能力。

OpenAI的研究主管Lilian Weng给出的定义是:
智能体(Agent) = 大语言模型(LLM)+ 任务规划(Planning)+ 记忆(Memory)+ 工具使用(Tool Use)

图像

(图片来自Lilian Weng博客原文,见于「附录」1

在基于大语言模型的自主智能体系统中,大语言模型就像是智能体的大脑,并由几个关键组件作为补充:

任务规划(Planning)
  • 任务分解:
    智能体将大型任务分解为更小、可管理的子目标,从而能够高效处理复杂任务。
  • 反思与优化:智能体可以对过去的行动进行自我批评和自我反思,从错误中学习并在后续步骤中改进,进而提高最终结果的质量。

记忆(Memory)
大模型本质上是无状态的,每一次交互都只基于当次的提交内容进行回答,那么多次连贯操作的上下文记忆,就需要应用来给他附加记忆的能力。
  • 短期记忆:
    所有的上下文学习(参考「附录」3.提示词工程」)都可以看作是利用模型的短期记忆进行学习。
  • 长期记忆:
    这使得智能体具备长时间保留和回忆(无限)信息的能力,通常是通过利用外部向量存储和快速检索来实现,现在也可以扩展到任何存储数据库来进行记忆。

工具使用(Tool Use)
智能体学会调用外部 API 以获取模型权重中缺失的额外信息(通常在预训练后难以更改),包括当前信息、代码执行能力、访问专有信息源等。那么现在的智能体,所有能力都可以抽象为工具,包括浏览器使用、搜索、文件操作、PPT、PS等工具SDK,也包括企业的私有核心能力如美团点外卖、滴滴打车、高德地图检索、百度搜索等API,甚至如具身智能如无人机、机器人、摄像头等设备的操控。

智能体是否好用,取决于上述每一个环节能否做好,这将会是长期探索和实践的话题,深入可以参考「附录」1.OpenAI的研究主管Lilian Weng智能体原文,后续也会出详细解读文章,欢迎大家关注交流。

什么时候需要智能体Agent?

首先Agent能做的事情,在Agent出现之前其实就能做,使用Agent无非就是构建了一个基于大模型按多步骤执行的流程,如果通过传统的开发方法,如硬编码(Hard Code)或者低代码的配置化平台(如一些SOP配置平台、流程编排平台等),也同样能实现类似Agent的流程功能。说的具体一点,Agent其实就是让大模型去调用API接口完成一些相对复杂的步骤执行,也完全同样可以直接用代码去开发这个功能,或者使用低代码平台的表单配置、逻辑配置、API接口配置,通过不同执行节点之间的参数配置、映射来构建复杂的业务流程。

Agent与传统方式的核心区别:Agent可以每一个问题生成独特的任务规划,而不需要传统的方式提前预定义好流程。并且软件交互方式从GUI(图形交互界面)到LUI(自然语言交互界面),自然语言交互的高效体验,确实带来革命性的软件使用效率提升。

在需要基于LLM构建智能应用时,Anthropic的文章中建议,尽可能寻找最简单的解决方案,仅在必要时增加复杂性。这可能意味着根本不要构建智能体系统,智能体系统通常以延迟和成本为代价来换取更好的任务性能,应当考虑这种权衡是否合理。这里注意区分基于LLM的智能应用和智能体Agent,其实现方案不同。
在需要更高复杂度的情况下,优先选择工作流,为明确的任务提供了可预测性和一致性;而当需要大规模的灵活性和基于模型的自主决策时,才需要Agent。然而,对于许多应用程序而言,通过检索和上下文示例来优化单个 LLM 调用通常就足够了。

如何选择LLM智能应用开发技术栈?

图形化配置实现智能应用

Coze、dify这样的图形化开发平台可以降低门槛,甚至无需会代码,人人都可以进行智能体创意的快速构建,但这里有2个问题:

1、Coze这样的Pass平台,数据和服务全部暴露到外部,可能是很多企业无法接受的,适合于快速试错搭建,如果需要更多的功能和个性化诉求,需要开通企业账号;

2、Dify私有化部署,由此也会带来运维成本,免费的社区版同样功能有限,以及大规模企业级智能体应用,将会对Dify的部署方式带来极大的挑战,甚至需要二开重构优化。设想一下,企业级所有的智能应用流量如何全部通过Dify来扛?

自研构建智能应用

以Java语言为例,目前可以选择开源框架Spring AI/Spring AI Alibaba或者Langchain4j框架,这些框架与SpringBoot无缝集成,就像开发传统微服务一样构建自己的智能体应用微服务。但这些框架目前还没有出正式版,都在频繁迭代发布新功能阶段。并且Anthropic的文章中指出,这些框架通过简化诸如调用大型语言模型、定义和解析工具以及将调用串联起来等标准的底层任务,让入门变得容易,但是它们常常会增加额外的抽象层,从而掩盖了底层的提示和响应,使其更难调试。此外,它们还可能让人倾向于添加不必要的复杂性,而实际上更简单的设置就已足够。他们建议开发者从直接使用 LLM API 开始:许多模式只需几行代码即可实现。如果确实使用框架,请确保了解其底层代码原理,避免出现问题,团队都需要重新学习开发框架。

企业级智能应用架构

大规模的企业级智能体应用,需要考虑当前的业务服务和接口能力如何0成本或低成本接入大模型使其成为可被大模型调用的“业务工具”,另外需要考虑企业级开发的开发发布流程,以及网关、鉴权、流控(基于tokens限流)、监控、告警等基础设施的支持,完整的企业级架构方案在阿里开源的全家桶中有构想并正在实现,SpringCloud全家桶系列应该也会跟进,大家敬请期待,下图为阿里企业级AI架构构想:

image.png

(图片来自阿里技术文章)

如何基于LLM实现智能应用?

除了开发技术选型,下一步需要决策的就是实现方案。这里又回到了什么时候需要Agent的问题,与大模型结合,从简单到复杂一般有这么4种方案:

1、在需要的场景直接调用大模型API,获得大模型的分析和总结,这是最简单的;

2、知识库问答类应用中,采用RAG方案,给大模型外挂企业私有知识库,从而让大模型能够回答企业私有知识问题,基于现在的开发平台也能快速简单实现。但是在面对用户复杂灵活的问题,或者是需要计算性、归纳性问题时,RAG的相似性搜索可能无法满足,RAG方案持续性调优也将会是长期的话题。

3、Workflow方案,通过预定义流程编排大语言模型(LLMs)和工具调用,使其具有稳定的、可预测的输出,减少不可控的风险。

4、Agent方案,完全交由大模型自主规划问题的解决流程步骤,并且能够动态调整自身流程和工具使用。

在实际应用中,往往需要综合上述方案,协同来完成企业“综合型智能应用”。下面主要讨论Workflow工作流方案与Agent方案。

Workflow工作流方案

对于大部分企业的智能体应用,都不是通用智能体应用,不需要拥有万能的流程和工具来解决用户的问题,而是结合企业内部核心服务能力构建的私有智能应用,比如你们是做打车的、点外卖的,还是电商的,亦或是机票购买的,不论你们公司的核心业务是什么,面向用户的往往都是固定流程的业务,这个时候就比较适合采用workflow来实现。那么workflow又有哪些方案?

提示链

将任务分解为一系列步骤,每个 LLM 调用处理前一个的输出,适用于可轻松分解为固定子任务的场景,以延迟换取更高准确性。可以在任何中间步骤添加程序化检查(见下图中的“Gate”),以确保流程仍在正轨上,确保可控。
路由
对输入进行分类并导向专门的后续任务,适用于复杂任务中不同类别需分别处理且分类准确的情况,这里的路由也可以是企业私有的意图识别算法,来匹配命中企业的业务流程。
并行化
包括分段(将任务分解为并行运行的独立子任务)和投票(多次运行同一任务获得多样化输出),适用于子任务可并行化加速或需多个视角获得高置信度结果的任务。
协调器 - 工作者
中央 LLM 动态分解任务并分配给工作者 LLM,适用于无法预测子任务的复杂任务。此工作流非常适合复杂任务,在这些任务中无法预测所需的子任务(例如在编码中,需要更改的文件数量以及每个文件中更改的性质可能取决于任务)。尽管其拓扑结构相似,但与并行化的主要区别在于其灵活性——子任务不是预先定义的,而是由协调器根据特定输入来确定。
评估者 - 优化器
一个 LLM 生成响应,另一个LLM提供评估和反馈,适用于有明确评估标准且迭代优化有价值的任务。当有明确的评估标准,且迭代改进能带来可衡量的价值时,此工作流程尤为有效。两个适用的良好迹象是:首先,当人类明确表达反馈时,LLM 的响应能够明显得到改善;其次,LLM 能够提供此类反馈。这类似于人类作者在创作一份精美的文档时所经历的反复修改过程。
大家在实践应用中,需要思考自身业务场景适用于上述哪一种流程方案,如果还无法满足,可能才需要考虑Agent方案。
Agent智能体方案
如果上述工作流都无法满足诉求,可以考虑真Agent方案,适用于难以或无法预测所需步骤的开放式问题,以及无法采用工作流固定流程的问题。大型语言模型可能会运行多个回合,必须对其决策有一定的信任度,当然其自主性意味着更高的成本以及错误叠加的可能性,建议在隔离环境中进行广泛的测试,并设置适当的防护措施,需要小心调试、慎重采用。
随着Manus爆火全世界,很多人都惊叹其能力,那么究竟是如何实现的呢?各路大神也发布了较多开源项目来窥探其原理,这里推荐2个开源项目来供大家体验和学习:
Python
https://github.com/mannaandpoem/OpenManus
Java
https://github.com/alibaba/spring-ai-alibaba/tree/main/community/openmanus

这里基于阿里开源的Java版openmanus,来给大家介绍其核心实现原理(这里只介绍核心原理,后面会出详细解读,大家可以关注交流学习)。
首先运行体验一下,下面为官方给的体验案例:
用户问题:我计划在接下来的五一劳动节假期到韩国旅行,行程是从杭州出发到韩国首尔,总预算为10000元。我想体验韩国的风土人情、文化、普通老百姓的生活,总行程计划为5天。请提供详细的行程并制作成一个简单的HTML旅行手册,其中包含地图、景点描述、基本的韩语短语和旅行提示,以供我在整个旅程中参考。
智能体计划及执行:一共规划了5个步骤,分别调用了浏览器、地图、文件操作等工具。
spring ai alibaba openmanus
Spring AI Alibaba Openmanus 与 Python 版本 OpenManus 设计理念相似,其总体架构如下图所示:
spring ai alibaba openmanus architecture
(图片来自阿里技术文章)
核心主流程代码:
1、任务规划(Planning)
由大模型来生成任务计划,其核心为提示词,能够让大模型分析用户问题,并规划任务,按预定义的程序能理解的格式来输出计划,下面为最终的提示词:
## IntroductionI am Manus, an AI assistant designed to help users with a wide variety of tasks. I'm built to be helpful, informative, and versatile in addressing different needs and challenges.## My PurposeMy primary purpose is to assist users in accomplishing their goals by providing information, executing tasks, and offering guidance. I aim to be a reliable partner in problem-solving and task completion.## How I Approach TasksWhen presented with a task, I typically:1. Analyze the request to understand what's being asked2. Break down complex problems into manageable steps3. Use appropriate tools and methods to address each step4. Provide clear communication throughout the process5. Deliver results in a helpful and organized manner## Current state Main goal :Create a reasonable plan with clear steps to accomplish the task.## Available Agents Information:Available Agents:- Agent Name : BROWSER_AGENTDescription: A browser agent that can control a browser to accomplish tasks- Agent Name : DEFAULT_AGENTDescription: A versatile default agent that can handle various user requests using file operations and shell commands. Perfect for general-purpose tasks that may involve file manipulation, system operations, or text processing.- Agent Name : TEXT_FILE_AGENTDescription: A text file manipulation agent that can create, read, write, and append content to various text-based files. Suitable for both temporary and persistent record keeping. Supports multiple file types including markdown, html, source code, and configuration files.# Task to accomplish: 帮我买一张五一去大理的机票 You can use the planning tool to help you create the plan, assign plan_1745571134688 as the plan id.Important: For each step in the plan, start with [AGENT_NAME] where AGENT_NAME is one of the available agents listed above.For example: "[BROWSER_AGENT] Search for relevant information" or "[REACT_AGENT] Process the search results"use chinese to make the plan.
大家可以自己修改下面用户输入部分:
# Task to accomplish: 帮我买一张五一去大理的机票
丢给任何大模型应用,都能给你规划任务和使用的工具,下面是豆包的效果:
这就是大模型规划的原理,将用户问题和可以使用的工具说明一起提交给大模型,要求其规划步骤,并按预定义的程序能理解的格式来输出计划。
2、工具使用(Tool Use)
也即执行计划,根据上述大模型规划的任务列表,按顺序执行:
这里采用的多智能体的方式实现,每一步计划步骤所对应的工具,由对应的智能体来实现,为什么不是直接function call或者MCP来执行工具呢?是因为Manus太通用了,这里的每一步都还足够的复杂与灵活,每一步都需要一个对应的智能体来进一步拆解子任务来完成。下面的提示词是项目中可以被大模型规划和使用的“工具型智能体”说明:
## Available Agents Information:Available Agents:- Agent Name : BROWSER_AGENTDescription: A browser agent that can control a browser to accomplish tasks- Agent Name : DEFAULT_AGENTDescription: A versatile default agent that can handle various user requests using file operations and shell commands. Perfect for general-purpose tasks that may involve file manipulation, system operations, or text processing.- Agent Name : TEXT_FILE_AGENTDescription: A text file manipulation agent that can create, read, write, and append content to various text-based files. Suitable for both temporary and persistent record keeping. Supports multiple file types including markdown, html, source code, and configuration files.
一共3个可被使用的智能体,我们继续跟踪最核心的BROWSER_AGENT(可以控制浏览器的智能体)这个智能体,其核心定义如下,提示词模版为:
@DynamicAgentDefinition(agentName = "BROWSER_AGENT",		agentDescription = "A browser agent that can control a browser to accomplish tasks",		systemPrompt = """				You are an AI agent designed to automate browser tasks. Your goal is to accomplish the ultimate task following the rules.
# Input Format Task Previous actions Current URL Open Tabs Interactive Elements [index]<type>text</type> - index: Numeric identifier for interaction - type: HTML element type (button, input, etc.) - text: Element description Example: [33]<button>Submit Form</button>
- Only elements with numeric indexes in [] are interactive - elements without [] provide only context
# Response Rules 1. ACTIONS: You can specify multiple actions in a sequence, but one action name per item - Form filling: [\\{"input_text": \\{"index": 1, "text": "username"\\}\\}, \\{"click_element": \\{"index": 3\\}\\}] - Navigation: [\\{"go_to_url": \\{"url": "https://example.com"\\}\\}, \\{"extract_content": \\{"goal": "names"\\}\\}]
2. ELEMENT INTERACTION: - Only use indexed elements - Watch for non-interactive elements
3. NAVIGATION & ERROR HANDLING: - Try alternative approaches if stuck - Handle popups and cookies - Use scroll for hidden elements - Open new tabs for research - Handle captchas or find alternatives - Wait for page loads
4. TASK COMPLETION: - Track progress in memory - Count iterations for repeated tasks - Include all findings in results - Use done action appropriately
5. VISUAL CONTEXT: - Use provided screenshots - Reference element indices
6. FORM FILLING: - Handle dynamic field changes
7. EXTRACTION: - Use extract_content for information gathering """, nextStepPrompt = """ What should I do for next action to achieve my goal?
Remember: 1. Use 'get_text' action to obtain page content instead of scrolling 2. Don't worry about content visibility or viewport position 3. Focus on text-based information extraction 4. Process the obtained text data directly 5. IMPORTANT: You MUST use at least one tool in your response to make progress!
Consider both what's visible and what might be beyond the current viewport. Be methodical - remember your progress and what you've learned so far. """, availableToolKeys = { "browser_use""text_file_operator""terminate" })
它有3个工具:browser_use: 负责操控浏览器;text_file_operator:负责文件操作;terminate:负责命令行执行。
其中核心是使用了browser_use这个开源工具来操作浏览器,它所支持的能力也在这个智能体与LLM交互的过程中由提示词给到大模型来规划和动态调整步骤,诸如跳转、点击、输入、按键等等的浏览器控制动作:
private final String name = "browser_use";private final String description = """	Interact with a web browser to perform various actions such as navigation, element interaction,搜索类优先考虑此工具	content extraction, and tab management. Supported actions include:	- 'navigate': Go to a specific URL, use https://baidu.com by default	- 'click': Click an element by index	- 'input_text': Input text into an element, for 百度(Baidu), the index of the input button is	- 'key_enter': Hit the Enter key	- 'screenshot': Capture a screenshot	- 'get_html': Get page HTML content	- 'get_text': Get text content of the page	- 'execute_js': Execute JavaScript code	- 'scroll': Scroll the page	- 'switch_tab': Switch to a specific tab	- 'new_tab': Open a new tab	- 'close_tab': Close the current tab	- 'refresh': Refresh the current page	""";
BROWSER_AGENT智能体,是一个ReAct智能体,因为在操控浏览器进行任务执行,如购买机票、规划行程的过程中解决用户问题需要的步骤和信息是极其复杂的,同时需要识别页面元素来找到输入框、按钮等等,就像模拟人操作进行如购买机票、规划行程的过程,需要反复与大模型进行交互。
ReAct(Reasoning and Acting,推理与行动)智能体是一种结合了推理和行动能力的新型智能体架构,旨在让智能体更好地在复杂环境中完成任务,其核心思想是将推理和行动交替进行。
ReAct 智能体基于语言模型构建,通过生成文本形式的行动序列来与环境进行交互。它能够理解自然语言描述的任务,并在推理过程中决定采取何种行动,同时根据行动的结果进一步推理和调整后续行动,以实现最终目标
  • 推理模块
    对任务、当前状态和环境反馈进行分析和推理。它可以理解任务的目标、条件和约束,根据已有的知识和经验,生成合理的行动规划和决策。例如,在回答一个复杂问题时,推理模块会分析问题的关键信息,确定需要查找哪些知识源或执行哪些操作来获取答案。
  • 行动模块
    根据推理模块的决策,执行具体的行动。这些行动可以是与外部环境的交互,如调用 API 获取数据、在数据库中查询信息等,也可以是对内部状态的更新,如记录中间结果、更新知识库等。

3、记忆(Memory)
分析完了openmanus源码的任务规划(Planning)+ 工具使用(Tool Use),那么核心要素还缺一个记忆(Memory)呢?
大模型本质上是无状态的,每一次交互都只基于当次的提交内容进行回答,那么多次连贯操作的上下文记忆,就需要应用来给他附加记忆的能力。
在Spring AI框架中,记忆将变得十分简单,同样支持在大模型调用前后以AOP的方式来增强,如下代码从会话ID的角度将与大模型的通信过程进行存储记忆,并在与大模型交互过程中提交必要的记忆上下文给到大模型,以确保大模型连贯的理解正在执行的计划和历史步骤情况:
至此,分析完了openmanus的核心源码原理,这也是经典的Agent实现方案。
总结
我们结合国内外的经典资料讨论了「如何构建有效的智能体」话题:
我们从“什么是智能体Agent”开始,讨论了“什么时候需要智能体Agent”,再到“如何选择智能应用开发技术栈”其中从图形化开发平台,聊到自研选择开发框架,再到企业级架构的畅想。最后分析了“如何基于LLM实现智能应用”,我们重点讨论了“Workflow工作流方案”和“Agent智能体方案”的核心原理和取舍,最后源码级探索了manus的核心原理。目前技术发展迅猛,迭代频繁,欢迎大家批评指正,关注交流,后续将会分享更多干货内容。

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询