【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 的提示詞組件設計了一個靈活、模塊化的提示詞。通過將提示詞與代碼分離,同時保持緊密集成,它實現了提示詞的可維護性和可擴展性。系統提示詞和下一步提示詞的組合,加上動態模板能力,使智能體能夠適應各種任務和環境,同時保持一致的行為模式和交互風格。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/898065.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/898065.shtml
英文地址,請注明出處:http://en.pswp.cn/news/898065.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

藍橋杯刷題周計劃(第三周)

目錄 前言題目一題目代碼題解分析 題目二題目代碼題解分析 題目三題目代碼題解分析 題目四題目代碼題解分析 題目五題目代碼題解分析 題目六題目代碼題解分析 題目七題目代碼題解分析 題目八題目代碼題解分析 題目九題目代碼題解分析 題目十題目代碼題解分析 前言 大家好&#…

mysql學習-常用sql語句

1、安裝mysql參考網上鏈接,進入mysql數據庫 mysql -u root -p 2、數據庫操作 2.1、創建數據庫 create database 數據庫名 default character set utf8; 2.2、顯示所有數據庫 show databases; 2.3、選擇數據庫 use elementInfo; 2.4、刪除數據庫 drop database…

(全)2024下半年真題 系統架構設計師 綜合知識 答案解析01

系統架構設計師第二版教程VIP課程https://edu.csdn.net/course/detail/40283 操作系統 下列選項中不能作為預防死鎖措施的是 。 A. 破壞“循環等待"條件 B. 破壞“不可搶占”條件 C. 破壞“互斥”條件 D. 破壞“請求和保持”條件 答案:C 解析&…

Java泛型程序設計使用方法

Java泛型程序設計是Java語言中一項強大的特性&#xff0c;它允許你編寫更加通用和類型安全的代碼。以下是Java泛型程序設計的使用方法和技巧&#xff1a; 1. 基本概念 泛型類&#xff1a;可以定義一個類&#xff0c;其中的某些類型是參數化的。 public class Box<T> {pr…

LeetCode算法心得——零數組變換IV(0-1背包)

大家好&#xff0c;我是晴天學長&#xff0c;很久很久沒有寫算法題解了&#xff0c;今天開始轉python了。&#x1f4aa;&#x1f4aa;&#x1f4aa; 1&#xff09;統計打字方案數 給你一個長度為 n 的整數數組 nums 和一個二維數組 queries &#xff0c;其中 queries[i] [li, …

superset部署記錄

具備網絡條件的&#xff0c;完全可以一鍵部署&#xff0c;不需要折騰。網絡條件不具備時&#xff0c;部署記錄留存備查。 1、正常模式 詳細介紹參考&#xff1a;【開源項目推薦】Apache Superset——最優秀的開源數據可視化與數據探索平臺-騰訊云開發者社區-騰訊云 (tencent.c…

AI大模型完全指南:從核心原理到行業落地實踐

目錄 大模型技術演進脈絡核心原理解析與數學基礎主流大模型架構對比開發環境搭建與模型部署Prompt Engineering高階技巧垂直領域應用場景實戰倫理與安全風險防控前沿發展方向與學習資源 一、大模型技術演進脈絡 1.1 發展歷程里程碑 2017&#xff1a;Transformer架構誕生&…

HTB 學習筆記 【中/英】《前端 vs. 后端》P3

&#x1f4cc; 這篇文章講了什么&#xff1f; 介紹了 前端&#xff08;客戶端&#xff09; 和 后端&#xff08;服務器端&#xff09; 的區別。解釋了 全棧開發&#xff08;Full Stack Development&#xff09;&#xff0c;即前端后端開發。介紹了 前端和后端常用的技術。討論…

golang中的結構體

1.簡介 go也支持面向對象編程(OOP)&#xff0c;但是和傳統的面向對象編程有區別&#xff0c;并不是純粹的面向對象語言。所以說go支持面向對象編程特性是比較準確的。go沒有類(class)&#xff0c;go語言的結構體(struct)和其它編程語言的類(class)有同等的地位&#xff0c;你可…

Day 64 卡瑪筆記

這是基于代碼隨想錄的每日打卡 參加科學大會&#xff08;第六期模擬筆試&#xff09; 題目描述 ? 小明是一位科學家&#xff0c;他需要參加一場重要的國際科學大會&#xff0c;以展示自己的最新研究成果。 ? 小明的起點是第一個車站&#xff0c;終點是最后一個車站。然…

《C語言中\0:字符串的神秘“終結者”》

&#x1f680;個人主頁&#xff1a;BabyZZの秘密日記 &#x1f4d6;收入專欄&#xff1a;C語言 &#x1f30d;文章目入 引言一、字符串的定義與存儲二、\0&#xff1a;字符串的終結標志三、\0在字符串操作中的作用四、\0的陷阱與注意事項五、\0與字符串的動態分配六、總結 引言…

九、Prometheus 監控windows(外部)主機

一、監控 Windows 主機的方法 方式 1:使用 Windows Exporter Windows Exporter(wmi_exporter) 是 Prometheus 官方推薦的 Windows 監控工具,它可以采集 CPU、內存、磁盤、網絡、進程、服務狀態等 指標。 方式 2:使用 Node Exporter for Windows node_exporter 主要用于…

TCP/IP協議中三次握手(Three-way Handshake)與四次揮手(Four-way Wave)

TCP/IP協議中三次握手&#xff08;Three-way Handshake&#xff09;與四次揮手&#xff08;Four-way Wave&#xff09; 一、TCP三次握手&#xff08;Three-way Handshake&#xff09;二、TCP四次揮手&#xff08;Four-way Wave&#xff09;三、常見問題解答總結為什么三次握手不…

Java集成WebSocket實現消息推送,詳細步驟以及出現的問題如何解決

Java集成WebSocket實現消息推送 WebSocket是一種在單個TCP連接上進行全雙工通信的協議,非常適合實現實時消息推送功能。與傳統的HTTP請求-響應模式不同,WebSocket建立連接后可以保持長連接狀態,服務器可以主動向客戶端推送數據,這使得它成為實現聊天應用、通知系統和實時數…

如何在Linux中切換用戶?

Linux切換用戶 在Linux系統中&#xff0c;切換用戶可以通過使用su命令和sudo命令實現 1、su命令 su是switch user的縮寫&#xff0c;用于切換到另一個用戶。su命令的語法如下&#xff1a; su [選項] [用戶名]以下是一些示例&#xff1a; # 切換到root用戶 su - # 切換到指定…

網頁制作16-Javascipt時間特效の設置D-DAY倒計時

01、效果圖 02、應用 new Date()//返回今天日期 new Date("April 1,2025")//返回目標日期 document.write()//文檔顯示 getTime()返回當日毫秒數 Math.floor(amadays / (1000 * 60 * 60 * 24)//把毫秒換算天 03、代碼 <!doctype html> <html> &…

c#Winform也可以跨平臺了GTK框架GTKSystem.Windows.Forms

一、簡介 >> 新版下載&#xff0c;問題求助 QQ群&#xff1a;1011147488 1032313876 236066073&#xff08;滿&#xff09; Visual Studio原生開發&#xff0c;無需學習&#xff0c;一次編譯&#xff0c;跨平臺運行. C#桌面應用程序跨平臺&#xff08;windows、linux、…

`lower_bound`、`upper_bound` 和 `last_less_equal`

lower_bound、upper_bound 和 last_less_equal。它們的作用是在 有序數組 中查找目標值的位置。下面是對每個函數的詳細解釋&#xff1a; 1. lower_bound 函數 功能&#xff1a; 在有序數組 a 中查找第一個 大于或等于 target 的元素的位置。 參數&#xff1a; a[]&#xf…

網絡安全常識科普(百問百答)

汪乙己一到店&#xff0c;所有喝酒的人便都看著他笑&#xff0c;有的叫道&#xff0c;“汪乙己&#xff0c;你又監控員工隱私了&#xff01;”他不回答&#xff0c;對柜里說&#xff0c;“來兩個fofa。”便排出三個比特幣。他們又故意的高聲嚷道&#xff0c;“你一定又在電報群…

JSON 序列化 反序列化

序列化&#xff0c;反序列化 其實就是轉換數據格式的過程。 序列化 (Serialization) 是將【對象的狀態信息】轉換為【可以存儲或傳輸的形式】的過程。即&#xff1a;把C#中的類 轉換成 JSON格式的字符串&#xff0c;就是序列化。其中【對象的狀態信息】就是類的各種屬性。 …