当前位置: 首页 > article >正文

【Agent】OpenManus-Prompt组件详细分析

1. 提示词架构概述

OpenManus 的提示词组件采用了模块化设计,为不同类型的智能体提供专门的提示词模板。每个提示词模块通常包含两种核心提示词:系统提示词(System Prompt)和下一步提示词(Next Step Prompt)。这种设计使得提示词可以独立于智能体代码进行管理和优化,同时保持了提示词与智能体之间的紧密集成。

2. 提示词类型与设计

2.1 系统提示词 (System Prompt)

设计特点

  • 定义智能体的角色、能力和行为边界
  • 设置智能体的整体行为模式和交互风格
  • 通常较为简洁,专注于角色定义
  • 在智能体初始化时设置,整个会话期间保持不变

使用场景

  • 在智能体初始化时设置基础行为模式
  • 在 LLM 调用时作为系统消息传递

2.2 下一步提示词 (Next Step Prompt)

设计特点

  • 指导智能体在每个步骤中的决策和行动
  • 提供可用工具的详细说明和使用指南
  • 通常较为详细,包含具体指令和约束
  • 在每个思考步骤中使用,可以动态更新

使用场景

  • 在每个 think 方法调用前添加到消息历史
  • 引导智能体选择合适的工具和行动
  • 提供上下文信息和决策指南

2.3 模板提示词 (Template Prompt)

设计特点

  • 包含占位符,可以在运行时动态填充
  • 支持格式化字符串语法
  • 适用于需要动态内容的场景

使用场景

  • SWE 智能体中的工作目录和文件信息
  • 规划流程中的步骤执行提示

3. 提示词调用流程

3.1 智能体初始化

# 在智能体类定义中设置提示词
class Manus(ToolCallAgent):system_prompt: str = SYSTEM_PROMPTnext_step_prompt: str = NEXT_STEP_PROMPT
  1. 提示词常量从相应模块导入
  2. 在智能体类定义中设置为类属性
  3. 可以在子类中覆盖或扩展

3.2 思考过程中的提示词使用

# ToolCallAgent.think 方法中的提示词使用
async def think(self) -> bool:if self.next_step_prompt:user_msg = Message.user_message(self.next_step_prompt)self.messages += [user_msg]response = await self.llm.ask_tool(messages=self.messages,system_msgs=[Message.system_message(self.system_prompt)]if self.system_promptelse None,tools=self.available_tools.to_params(),tool_choice=self.tool_choices,)
  1. 如果存在下一步提示词,创建用户消息并添加到消息历史
  2. 调用 LLM 时,将系统提示词作为系统消息传递
  3. 同时传递工具参数和工具选择模式

3.3 动态提示词处理

# SWEAgent.think 方法中的动态提示词处理
async def think(self) -> bool:# Update working directoryself.working_dir = await self.bash.execute("pwd")self.next_step_prompt = self.next_step_prompt.format(current_dir=self.working_dir)return await super().think()
  1. 获取当前工作目录
  2. 使用 format 方法填充提示词模板中的占位符
  3. 调用父类的 think 方法继续处理

3.4 规划流程中的提示词使用

# PlanningFlow._create_initial_plan 方法中的提示词使用
async def _create_initial_plan(self, request: str) -> None:# Create a system message for plan creationsystem_message = Message.system_message("You are a planning assistant. Create a concise, actionable plan with clear steps. ""Focus on key milestones rather than detailed sub-steps. ""Optimize for clarity and efficiency.")# Create a user message with the requestuser_message = Message.user_message(f"Create a reasonable plan with clear steps to accomplish the task: {request}")# Call LLM with PlanningToolresponse = await self.llm.ask_tool(messages=[user_message],system_msgs=[system_message],tools=[self.planning_tool.to_param()],tool_choice=ToolChoice.REQUIRED,)
  1. 创建特定于任务的系统消息
  2. 创建包含用户请求的用户消息
  3. 调用 LLM 时传递这些消息和工具参数

4. LLM 接口中的提示词处理

4.1 消息格式化

# LLM.ask 方法中的消息处理
async def ask(self,messages: List[Union[dict, Message]],system_msgs: Optional[List[Union[dict, Message]]] = None,stream: bool = True,temperature: Optional[float] = None,
) -> str:# Format system and user messagesif system_msgs:system_msgs = self.format_messages(system_msgs)messages = system_msgs + self.format_messages(messages)else:messages = self.format_messages(messages)
  1. 接收消息和系统消息作为参数
  2. 使用 format_messages 方法将消息转换为标准格式
  3. 将系统消息添加到消息列表的开头

4.2 工具调用提示词处理

# LLM.ask_tool 方法中的工具提示词处理
async def ask_tool(self,messages: List[Union[dict, Message]],system_msgs: Optional[List[Union[dict, Message]]] = None,timeout: int = 300,tools: Optional[List[dict]] = None,tool_choice: TOOL_CHOICE_TYPE = ToolChoice.AUTO,temperature: Optional[float] = None,**kwargs,
):# 类似的消息处理逻辑# 加上工具参数和工具选择模式if system_msgs:system_msgs = self.format_messages(system_msgs)messages = system_msgs + self.format_messages(messages)else:messages = self.format_messages(messages)
  1. 与 ask 方法类似的消息处理
  2. 额外传递工具参数和工具选择模式
  3. 支持超时和温度等参数

OpenManus 的提示词组件设计了一个灵活、模块化的提示词。通过将提示词与代码分离,同时保持紧密集成,它实现了提示词的可维护性和可扩展性。系统提示词和下一步提示词的组合,加上动态模板能力,使智能体能够适应各种任务和环境,同时保持一致的行为模式和交互风格。

相关文章:

【Agent】OpenManus-Prompt组件详细分析

1. 提示词架构概述 OpenManus 的提示词组件采用了模块化设计,为不同类型的智能体提供专门的提示词模板。每个提示词模块通常包含两种核心提示词:系统提示词(System Prompt)和下一步提示词(Next Step Prompt&#xff0…...

swagger ui 界面清除登录信息的办法

我们在开发过程中,用swagger ui 测试接口的时候,可能会要修改当前登录的用户。 但是如果我们在谷歌中对调试的本地swagger ui 登录地址存储过账户密码,每次启动项目调试之后,都会自动登录swagger ui ,登录界面一闪就…...

TensorFlow 的基本概念和使用场景

TensorFlow 是一个由 Google 开发的开源机器学习框架,主要用于构建和训练深度学习模型。下面是一些 TensorFlow 的基本概念和使用场景: 基本概念: 张量(Tensor):在 TensorFlow 中,数据以张量的…...

基于x11vnc的ubuntu远程桌面

1、安装VNC服务 sudo apt install x11vnc -y2、创建连接密码 sudo x11vnc -storepasswd3、安装lightdm服务 x11vnc 在 默认的 GDM3 中不起作用,因此需要使用 lightdm 桌面管理环境 sudo apt install lightdm -y切换至lightdm,上一步已经切换则跳过该…...

Cursor解锁Claude Max,助力AI编程新突破!

Cursor 最新推出的 Claude Max 模型,以其卓越的性能和创新的能力,正在重新定义我们对 AI 辅助编程的认知。这款搭载 Claude3.7 大脑的超级模型,不仅具备超强智能,还凭借一系列技术突破,向传统 AI 编程工具发起了挑战。…...

created在vue3 script setup中的写法

在 Vue 2 里&#xff0c;created 是一个生命周期钩子函数&#xff0c;会在实例已经创建完成之后被调用&#xff0c;主要用于在实例初始化之后、数据观测和 event/watcher 事件配置之前执行代码。而在 Vue 3 的 <script setup> 语法糖里&#xff0c;不再有像 Vue 2 那样直…...

GenICam标准

GenICam的目标是为所有类型的相机提供一个统一的编程接口。无论相机使用的是哪种传输协议或实现了哪些功能&#xff0c;编程接口&#xff08;API&#xff09;都是一样的。 GenICam&#xff08;Generic Interface for Cameras&#xff09;是一个为工业相机和图像采集设备设计的…...

ESP8266 与 ARM7 接口-LPC2148 创建 Web 服务器以控制 LED

ESP8266 与 ARM7 接口-LPC2148 创建 Web 服务器以控制 LED ESP8266 Wi-Fi 收发器提供了一种将微控制器连接到网络的方法。它被广泛用于物联网项目,因为它便宜、体积小且易于使用。 在本教程中,我们将 ESP8266 Wi-Fi 模块与 ARM7-LPC2148 微控制器连接,并创建一个 Web 服务…...

​智享三代 AI 无人直播系统:颠覆传统,重塑直播新格局

在当今数字化浪潮席卷全球的时代&#xff0c;直播行业作为互联网经济的重要组成部分&#xff0c;正以前所未有的速度蓬勃发展。从最初的娱乐直播兴起&#xff0c;到如今电商直播、知识付费直播等多元业态百花齐放&#xff0c;直播已然成为人们生活和商业活动中不可或缺的一环。…...

通过C#脚本更改材质球的参数

// 设置贴图Texture mTexture Resources.Load("myTexture", typeof(Texture )) as Texture;material.SetTexture("_MainTex", mTexture );// 设置整数material.SetInt("_Int", 1);// 设置浮点material.SetFloat("_Float", 0.1f);// 设…...

FPGA管脚约束

目录 前言 一、IO约束 二、延迟约束 前言 IO约束包括管脚约束和延迟约束。 一、IO约束 对管脚进行约束&#xff0c;对应的约束语句&#xff1a; set_property -dict {PACKAGE_PIN AJ16 IOSTANDARD LVCMOS18} [get_ports "led[0]" ] 上面是单端的管脚&…...

已在此计算机上安装相同或更高版本的 .NET Framework 4”安装报错问题

安裝低版本的 .netFramework會被拒絕 需要做兩件事 1&#xff0c;允許windows安裝低版本的.net framework “已在此计算机上安装相同或更高版本的 .NET Framework 4”安装报错问题-CSDN博客 2,設置完成後重新安裝低版本的 .net framework,要用對應開發版本的 Win10 电脑安…...

如何判断 MSF 的 Payload 是 Staged 还是 Stageless(含 Meterpreter 与普通 Shell 对比)

在渗透测试领域&#xff0c;Metasploit Framework&#xff08;MSF&#xff09;的 msfvenom 工具是生成 Payload&#xff08;载荷&#xff09;的核心利器。然而&#xff0c;当我们选择 Payload 时&#xff0c;经常会遇到一个问题&#xff1a;这个 Payload 是 Staged&#xff08;…...

【万字总结】前端全方位性能优化指南(一)——Brotli压缩、CDN智能分发、资源合并

前言 2025年前端技术前沿呈现三大核心趋势:​AI深度赋能开发全流程,智能工具如GitHub Copilot X和Cursor实现代码生成、实时协作与自动化审查,开发效率提升3倍以上;性能与架构革新,WebAssembly 2.0支持多线程与Rust内存优化,边缘计算将渲染延迟压至50ms内,微前端Module …...

二.使用ffmpeg对原始音频数据重采样并进行AAC编码

重采样&#xff1a;将音频三元组【采样率 采样格式 通道数】之中的任何一个或者多个值改变。 一.为什么要进行重采样&#xff1f; 1.原始音频数据和编码器的数据格式不一致 2.播放器要求的和获取的数据不一致 3.方便运算 二.本次编码流程 1.了解自己本机麦克风参数&#x…...

实现前端.ttf字体包的压缩

前言 平常字体包都有1M的大小&#xff0c;所以网络请求耗时会比较长&#xff0c;所以对字体包的压缩也是前端优化的一个点。但是前端如果想要特点字符打包成字体包&#xff0c;网上查阅资料后&#xff0c;都是把前端代码里面的字符获取&#xff0c;但是对于动态的内容&#xf…...

uni-app集成保利威直播、点播SDK经验FQ(二)|小程序直播/APP直播开发适用

通过uniapp集成保利威直播、点播SDK来开发小程序/APP的视频直播能力&#xff0c;在实际开发中可能会遇到的疑问和解决方案&#xff0c;下篇。更多疑问请咨询19924784795。 1.ios不能后台挂起uniapp插件 ios端使用后台音频播放和画中画功能&#xff0c;没有在 manifest.json 进…...

Spring Framework 中 BeanDefinition 是什么

BeanDefinition 是 Spring Framework 中一个核心的接口&#xff0c;它描述了一个 Bean 的定义。你可以把它看作是 Spring IoC 容器中 Bean 的“蓝图”或“配置元数据”。它包含了 Spring 容器创建、配置和管理 Bean 所需的所有信息。 BeanDefinition 中包含的信息&#xff1a;…...

Sensodrive机器人力控关节模组SensoJoint在海洋垃圾清理机器人中的拓展应用

海洋污染已成为全球性的环境挑战&#xff0c;其中海底垃圾的清理尤为困难。据研究&#xff0c;海洋中约有2600万至6600万吨垃圾&#xff0c;超过90%沉积在海底。传统上&#xff0c;潜水员收集海底垃圾不仅成本高昂&#xff0c;而且充满风险。为解决这一问题&#xff0c;欧盟资助…...

MyBatis 配置文件解析使用了哪些设计模式

MyBatis 配置文件解析过程中&#xff0c;主要运用了以下几种设计模式 1. 建造者模式 (Builder Pattern): 应用场景: SqlSessionFactoryBuilder 和 XMLConfigBuilder 类都体现了建造者模式。模式描述: 建造者模式将一个复杂对象的构建过程与其表示分离&#xff0c;使得同样的构…...

sentinel限流算法

限流算法&#xff1a;固定窗口算法、滑动时间窗口、令牌桶和漏桶这四种常见限流算法的原理&#xff1a; 限流算法原理 固定窗口&#xff1a; 固定窗口算法将时间划分为固定大小的窗口&#xff0c;并在每个窗口内限制请求的数量。在每个窗口开始时&#xff0c;计数器重置&#…...

Git的基本指令

一、回滚 1.git init 在项目文件夹中打开bash生成一个.git的子目录&#xff0c;产生一个仓库 2.git status 查看当前目录下的所有文件的状态 3.git add . 将该目录下的所有文件提交到暂存区 4.git add 文件名 将该目录下的指定文件提交到暂存区 5.git commit -m 备注信…...

github上传本地文件到远程仓库(空仓库/已有文件的仓库)

今天搞自己本地训练的代码到仓库留个档&#xff0c;结果遇到了好多问题&#xff0c;到腾了半天才搞明白整个过程&#xff0c;留在这里记录一下。 远程空仓库 主要根据官方教程&#xff1a;Adding locally hosted code to GitHub - GitHub Docs #1. cd到你需要上传的文件夹&a…...

Git 分支使用规范全解(多人协作开发适用)

🚀 Git 分支使用规范全解(多人协作开发适用) 本文将为你梳理一套清晰、标准、适合企业/团队使用的 Git 分支管理策略,适用于前后端、边缘端、AI项目等多种场景。 🧩 为什么要规范分支管理? 防止多人协作混乱、冲突频发清晰区分:开发中 / 待发布 / 已上线 的版本快速定…...

Vitis 2024.1 无法正常编译custom ip的bug(因为Makefile里的wildcard)

现象&#xff1a;如果在vivado中&#xff0c;添加了自己的custom IP&#xff0c;比如AXI4 IP&#xff0c;那么在Vitis&#xff08;2024.1&#xff09;编译导出的原本的.xsa的时候&#xff0c;会构建build失败。报错代码是&#xff1a; "Compiling blank_test_ip..."…...

Elasticsearch 在航空行业:数据管理的游戏规则改变者

作者&#xff1a;来自 Elastic Adam La Roche 数字化客户体验不再是奢侈品&#xff0c;而是欧洲航空公司必不可少的需求。它推动了客户满意度&#xff0c;提升了运营效率&#xff0c;并创造了可持续的竞争优势。随着行业的不断发展&#xff0c;优先投资前沿数字技术和平台的航空…...

Centos编译升级libcurl

Centos编译升级libcurl ‌下载最新版源码包安装编译依赖配置编译选项如果报错&#xff1a;通过 EPEL 仓库安装手动源码编译安装 如果报错&#xff1a;安装Brotli 开发库 如果报错&#xff1a;方法一&#xff1a;安装 libpsl-devel 依赖通过 EPEL 仓库安装重新运行 configure 方…...

DeepSeek 模型的成本效益深度解析:低成本、高性能的AI新选择

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…...

利用knn算法实现手写数字分类

利用knn算法实现手写数字分类 1.作者介绍2.KNN算法2.1KNN&#xff08;K-Nearest Neighbors&#xff09;算法核心思想2.2KNN算法的工作流程2.3优缺点2.4 KNN算法图示介绍 3.实验过程3.1安装所需库3.2 MNIST数据集3.3 导入手写数字图像进行分类3.4 完整代码3.5 实验结果 1.作者介…...

基于springboot+vue的调查问卷平台

一、系统架构 前端&#xff1a;vue | element-ui | echarts 后端&#xff1a;springboot | mybatis-plus 环境&#xff1a;jdk1.8 | mysql | maven 二、代码及数据 三、功能介绍 01. 注册 02. 登录 03. web端-问卷中心 04. web端-文章中心 05. 管理端-…...