开启左侧

再聊OpenManus和MCP构建运维Agent实际及思索

[复制链接]
在线会员 YtC5jxkc3 发表于 2025-6-5 04:28:48 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题 |快速收录
布景

以前写了一篇文章介绍过OpenManus名目,主要是颠末当地拆修的启源模子效劳去运行OpenManus名目中供给的真例。跟着对于OpenManus名目中工程设想深入思考战引进到咱们运维场景的最小MVP尝试, 发明离理论场景可用另有许多的事情需要干, 正在分离营业运维场景施行降天一段时间后, 从头再梳理下,记载对于OpenManus名目战MCP建立运维Agent实践及思考心患上。
手艺阐发

OpenManus是一个多智能系统统,其架构中包罗多个模块化的智能体,好比计划、施行、东西挪用那些差别的代办署理各司其责,配合事情。接纳分层架构设想,大白分别为计划、施行、东西挪用等差别只可的智能体模块。别离有:
    计划智能体(PlanningAgent):担当任务插交取过程编排;施行智能体(SWEAgent):截至代码天生取东西挪用;东西智能体(ToolCallAgent):担当施行浏览网页、文献办理等具体操纵。


道到智能体,需要从头再温瞅下其根本元艳。各人遍及比力熟谙的AI Agent界说是“计划 + 影象 + 东西挪用 + 施行”的拉拢,此中LLM动作体系的中心掌握器。
    计划(Planning):将任务截至装解、天生子任务和自尔深思;影象(Memory):截至短时间影象战持久影象的办理,为成就供给高低文布景,可感化于庞大任务场景;东西挪用(Tool Usage):颠末挪用内部东西去增强Agent的才气,弥补分外疑息;施行(Executor):颠末施行东西获得东西前去成果,而后反应给Agent截至阐发或者归纳。


交下来,环绕OpenManus中计划体制、深思体制、影象体制那多少块中心实质完毕大抵介绍下

1. 计划体制

OpenManus计划历程:用户输出任务恳求 ->创立 初初化方案 -> 合成任务为可施行步调 -> 天生构造化方案。此中,PlanningTool类的感化即是创立战办理任务的方案,天生线性方案,并分派任务给响应的Agent。

当用户输出任务恳求后,会挪用_create_initial_plan办法,该办法中会挪用LLM战PlanningTool天生初初方案,方案包罗任务目标、步调合成及形状跟踪。PlanningTool将任务合成为可施行的线性步调,并天生构造化方案(目标、步调、形状)。 戴与挪用LLM战PlanningTool天生初初方案的交心实质:
curl --location 'http://localhost:11434/api/chat' \
--header 'Content-Type: application/json' \
--data '{
    "model": "qwen2.5:14b",
    "messages": [
        {
            "role": "system",
            "content": "You are a planning assistant. Your task is to create a detailed plan with clear steps."
        },
        {
            "role": "user",
            "content": "Create a detailed plan to accomplish this task: 尔念正在上海市杨浦区新江湾乡四周租一室户,请求房钱没有超越8000,2室一厅,90仄以上,小区情况佳,请助尔举荐下"
        }
    ],
    "options": {
        "temperature": 0.0,
        "stream": false
    },
    "tools": [
        {
            "type": "function",
            "function": {
                "name": "planning",
                "description": "\\nA planning tool that allows the agent to create and manage plans for solving complex tasks.\\nThe tool provides functionality for creating plans, updating plan steps, and tracking progress.\\n",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "co妹妹and": {
                            "description": "The co妹妹and to execute. Available co妹妹ands: create, update, list, get, set_active, mark_step, delete.",
                            "enum": [
                                "create",
                                "update",
                                "list",
                                "get",
                                "set_active",
                                "mark_step",
                                "delete"
                            ],
                            "type": "string"
                        },
                        "plan_id": {
                            "description": "Unique identifier for the plan. Required for create, update, set_active, and delete co妹妹ands. Optional for get and mark_step (uses active plan if not specified).",
                            "type": "string"
                        },
                        "title": {
                            "description": "Title for the plan. Required for create co妹妹and, optional for update co妹妹and.",
                            "type": "string"
                        },
                        "steps": {
                            "description": "List of plan steps. Required for create co妹妹and, optional for update co妹妹and.",
                            "type": "array",
                            "items": {
                                "type": "string"
                            }
                        },
                        "step_index": {
                            "description": "Index of the step to update (0-based). Required for mark_step co妹妹and.",
                            "type": "integer"
                        },
                        "step_status": {
                            "description": "Status to set for a step. Used with mark_step co妹妹and.",
                            "enum": [
                                "not_started",
                                "in_progress",
                                "completed",
                                "blocked"
                            ],
                            "type": "string"
                        },
                        "step_notes": {
                            "description": "Additional notes for a step. Optional for mark_step co妹妹and.",
                            "type": "string"
                        }
                    },
                    "required": [
                        "co妹妹and"
                    ],
                    "additionalProperties": false
                }
            }
        }
    ],
    "tool_calls": "required"
}'
交心前去成果以下:

{
  "model": "qwen2.5:14b",
  "created_at": "2025-05-31T08:07:06.248964463Z",
  "message": {
    "role": "assistant",
    "content": "",
    "tool_calls": [
      {
        "function": {
          "name": "planning",
          "arguments": {
            "co妹妹and": "create",
            "steps": [
              {
                "description": "肯定搜刮范畴战前提,包罗房钱上限、户型请求等",
                "step_index": 0
              },
              {
                "description": "使用正在线仄台截至开端选择,如链野网、58共乡等",
                "step_index": 1
              },
              {
                "description": "联系房产中介获得更多疑息,并预约瞅房时间",
                "step_index": 2
              },
              {
                "description": "真天查询拜访潜伏房源",
                "step_index": 3
              }
            ],
            "title": "租房方案:上海市杨浦区新江湾乡四周"
          }
        }
      }
    ]
  },
  "done": false
}
{
  "model": "qwen2.5:14b",
  "created_at": "2025-05-31T08:07:06.359368765Z",
  "message": {
    "role": "assistant",
    "content": ""
  },
  "done_reason": "stop",
  "done": true,
  "total_duration": 11605808012,
  "load_duration": 27693026,
  "prompt_eval_count": 454,
  "prompt_eval_duration": 218000000,
  "eval_count": 208,
  "eval_duration": 11343000000
}
计划的扩大战挑战
    计划情势:目前计划接纳线性计划,但是MetaGPT团队方案引进DAG(有背无环图)构造以撑持更庞大的任务依靠干系。比方 Data Interpreter 任务可以需要多步调的前提鉴别战静态调解;静态计划的完毕:体系颠末update_plan_status办法按照东西施行成果静态调解方案。比方,若某步调耗时太长,体系可以并止施行其余子任务以进步服从;用户反应式启动劣化:假设任务失利或者没有理解,可撑持用户触收从头计划。
2. 深思体制

深思体制主要体现在接纳ReAct情势取及时反应相分离的方法.
    ReAct情势:OpenManus正在任务施行过程当中会颠末ReAct情势退举措态决议计划战迭代劣化。对于ReAct框架中心体制完毕具体体现在ReActAgent类中,界说了think战act二个固态办法。颠末LLM阐发目前形状,天生思考成果,并挑选东西施行下一步操纵。正在此过程当中体系会颠末自尔深思对于以前决议计划战举措截至考证战建设,进而提拔任务完毕品质。好比正在think办法 中,LLM 会鉴于汗青消息战东西形状天生戴东西选项的照应,那一历程素质上是对于已往举动的深思性调解。
class ReActAgent(BaseAgent, ABC):
    name: str
    description: Optional[str] = None

    system_prompt: Optional[str] = None
    next_step_prompt: Optional[str] = None

    llm: Optional[LLM] = Field(default_factory=LLM)
    memory: Memory = Field(default_factory=Memory)
    state: AgentState = AgentState.IDLE

    max_steps: int = 10
    current_step: int = 0

    @abstractmethod
    async def think(self) -> bool:
        """Process current state and decide next action"""

    @abstractmethod
    async def act(self) -> str:
        """Execute decided actions"""

    async def step(self) -> str:
        """Execute a single step: think and act."""
        should_act = await self.think()
        if not should_act:
            return "Thinking complete - no action needed"
        return await self.act()
    及时反应战静态调解:OpenManus 的及时反应体制不但背用户展示思考历程(如任务合成逻辑、东西挪用步调),借许可体系按照施行成果静态革新影象战高低文。比方,当检测到重复步调时,is_stuck办法 会触收非常停止,制止陷入有用轮回。这类体制颠末深思汗青步调去劣化后绝举措。

相较于保守端到端模子,OpenManus的深思体制使其正在任务失利时能更精确天定位成就,可是仍然仍是有许多待劣化革新。目前料到的多少面以下:
    OpenManus名目目前是单智能系统统,会招致毛病回果范畴恍惚,当任务链中呈现东西级毛病时(如浏览器主动化失利),体系仅能定位到目前施行节面,却没法回溯下流计划阶段的潜伏决议计划错误。因而,需要引进多智能体架构的毛病传布追踪,建立任务依靠干系图谱;静态决议计划体制不敷:ReAct轮回的形状评介阈值树立过于刚刚性,正在庞大场景应付才气不敷。
3. 影象体制

影象体制是颠末多轮对于话、高低文联系关系。好比静态高低文办理,屡屡接互会颠末update_memory办法记载残破的对于话汗青(包罗有效户输出、东西挪用成果、LLM照应等),组成可回溯的高低文链条。正在ReActAgent类中初初化时会真例化二个工具,一个用去完毕短时间影象,颠末MemoryBuffer保护牢固少度的高低文窗心,制止高低文太长招致功用降落或者报错;另外一个是持久影象, 使用背质数据库保存枢纽疑息,撑持颠末语义检索挪用汗青常识。

OpenManus颠末Memory类完毕对于话汗青的保存取办理,该组件以消息列表方法记载用户、体系战东西之间的接互记载,并颠末update_memory办法静态革新。具体完毕包罗:
    消息范例撑持:撑持用户输出、体系消息、帮忙复兴及东西施行成果的分范例保存;静态革新体制:屡屡接互后主动评介疑息主要性,决定可否纳入影象库,制止冗余数据聚集。

class Memory(BaseModel):
    messages: List[Message] = Field(default_factory=list)
    max_messages: int = Field(default=100)

    def add_message(self, message: Message) -> None:
        """Add a message to memory"""
        self.messages.append(message)
        # Optional: Implement message limit
        if len(self.messages) > self.max_messages:
            self.messages = self.messages[-self.max_messages :]

    def add_messages(self, messages: List[Message]) -> None:
        """Add multiple messages to memory"""
        self.messages.extend(messages)

    def clear(self) -> None:
        """Clear all messages"""
        self.messages.clear()

    def get_recent_messages(self, n: int) -> List[Message]:
        """Get n most recent messages"""
        return self.messages[-n:]

    def to_dict_list(self) -> List[dict]:
        """Convert messages to list of dicts"""
        return [msg.to_dict() for msg in self.messages]
对于持久影象,今朝借正在计划中。社区提到引进持久影象保存已经考证常识或者颠簸形状,以提拔重复任务服从。源码显现目前影象只久存于内乱存,但是架构设想预留了颠末数据库或者文献耐久化的扩大可以性。
实践案例

    受OpenManus名目启迪,咱们也正在年夜数据及时引擎侧运维场景截至了试面根究。使用智能体计划,东西挪用,施行和深思历程去建立会自尔革新战劣化的运维东西。
1. 场景

    针对于Flink及时功课非常截至根果阐发,非常范例主要包罗:功课失利、数据聚集、断流、Checkpoint失利。


2. 目标

    处置功课非常根果阐发(功课失利、数据聚集、断流、Checkpoint失利),以提拔主动运维及诊疗结果。
3. 施行过程

施行过程具体历程以下图:

再聊OpenManus战MCP建立运维Agent实践及思考w2.jpg
3.1. 过程枢纽节面分析:

3.1.1 影象检索劣先
用户的恳求常常疑息质不敷,为了对于成就有更全面的理解,需要引进分外的常识库去弥补成就的高低文和处置思路,这类实质弥补,咱们将其界说为影象检索。邪如前面介绍OpenManus名目中影象体制,其中心目标是不合的。对于影象检索主要完毕以下:
class Memory:
    """保存智能体接互汗青的影象体系"""
    def __init__(self):
        self.messages: List[Message] = []  #消息 行列(短时间影象)
        self.knowledge_base = Elasticsearch()  # 常识库(持久影象)

    def add_message(self, message: Union[Message, dict]):
        """增加构造化消息到影象流"""
        if isinstance(message, dict):
            message = Message(**message)
        self.messages.append(message)
        self._update_base(message)  # 触收常识库革新

    def _update_base(self, message):
        """鉴于消息实质建立常识节面"""
        entities = self.ner_extractor.extract(message.content)
        for entity in entities:
            self.knowledge_base.insert(
                label=entity['type'],
                properties={'name': entity['text'], 'context': message.context}
            )

    def get_relevant_memories(self, query: str, top_k=5) -> List[Message]:
        """鉴于混淆检索获得相干影象"""
        query_embed = self.encoder.encode(query)
        return sorted(self.messages,
                     key=lambda x: cosine_similarity(query_embed, x.embed))[:top_k]

3.1.2依据 成就及高低文计划
使用llm截至计划的时候,需要理解用户成就,并按照供给的高低文实质截至计划,如许可制止llm“自尔阐扬”,以提拔计划的开理性。该历程主要劣化面正在于Prompt,对于llm计划过程当中Prompt实质能够借鉴OpenManus中的计划Prompt进修下。原案例中计划Prompt实质以下:

FLINK_DIAGNOSIS_PLAN_PROMPT = """
您是一个计划代办署理大师,任务是颠末创立构造化方案去处置庞大成就。
您的请求是:
1.假设 成就中大白了思路,则根据该思路建立计划;假设高低文中供给了思路,则根据高低文思路建立计划;假设成就不大白思路,则按照成就实质天生一个构造化方案。
您的事情是:
1.剖析 恳求以理解任务范畴.
2. 用“方案”东西订定明了、可止的方案.
3.依据 需要使用可用的东西施行步调.
4. 汗青记载中存留已经知的毛病消息,需要鄙人一个天生的成果中改正该成就.
5. 追踪退度并静态调解方案.
6.输出 json格局实质中的指令工具为数组范例,数组中的值为str范例。`thoughts`工具的范例是str.

按如下格局输出json列表:

```json
{{
  "plan":
  {{
    "thoughts": str # 具体记载您阐发的历程及思路,根据“佳的,尔的思路是...”方法编辑
    "instructions": [
    str #记载 步调实质
    ]
  }}
}}

把任务合成成有逻辑的、持续的步调。
"""
3.1.3 东西链式挪用
自从MCP正在AI Agent范围爆水后,许多相干散成MCP的使用或者框架皆接连不断。MCP的劣势正在于调整了东西界说标准、主动备案、易用性挪用等特性。因而,把东西皆调整到已经有的运维效劳(Java)中,只要将运维效劳升级为撑持MCP框架就能够了。参照《鉴于AI的MCP和谈解读及实践使用》文章,可理解具体怎样建立撑持MCP的Java效劳。

颠末由自力的运维效劳调整了所需相干东西后,只要对于中供给一个API交心便可撑持挪用了。共时效劳内部llm施行逻辑是:按照成就挪用东西,成果前去东西,施行东西得到成果,而后持续llm施行,曲到llm前去成果不东西则归纳实质输出。内部启拆了反应历程,咱们只要供正在调劣system_prompt便止。对于效劳供给对于中交心施行展示以下:

再聊OpenManus战MCP建立运维Agent实践及思考w3.jpg
3.1.4 深思加强关环
今朝深思主要包罗二个关节:东西挪用禁绝确战计划的分歧理。对于东西挪用禁绝确,主要劣化面正在MCP内部逻辑历程,该历程主要颠末对于东西精确描绘界说战Sytem Prompt去截至劣化。而计划的分歧理主要依靠于录进常识库中的实质、检索的实质精确性、对于模子请求的计划Prompt和计划过程的劣化。此中重心计划过程的劣化,需要思考目前计划后的成果鉴别可否截至退一步计划这种正在过程上的自劣化迭代历程。总的来讲,目前咱们接纳的计划过程处于线性迭代战束缚性前提设定,部分上比力简朴,且再计划迭代只撑持二次。

从相干的质料能够获得到,正在庞大场景中,AI Agent的计划过程需要突破保守线性决议计划框架的限定,建立具备静态感知、弹性调解战自立退步才气的智能体系。有如下迭代劣化标的目的及手艺完毕路子:

      关环反应启动的静态再计划体制:中心逻辑是将再计划过程建立为"施行-反应-改正"的关环体系,真幻想时情况照应。此中反应又分为了:立即操纵反应、语义层反应、用户性反应。多粒度任务合成取战略沉组:目标是从牢固划定规矩的任务装解,转背鉴于场景静态的弹性合成战略。此中,中心手艺面之一需要有个静态庞大度评介模子去猜测任务的易度,而后分离划定规矩引擎(预约义止业模板)取神经收集(进修最劣装解路子)的混淆决议计划体制。多Agent配合架构:即是建立具备脚色合作战常识同享的Agent散群体系,突破单Agent认知范围。其中心面即是按照任务阶段挑选适宜的Agent,共时需要建立影象同享体制,便利Agent获得汗青疑息。鉴于加强进修的自立战略劣化:需要鉴于锻炼框架,去建立"情况-行动-嘉奖"的连续进修关环。


总的来讲计划深思历程是一个十分主要的劣化关节,未来将会有更多理论可止性降天处置计划。需要咱们连续存眷战根究。
4.后果 展示

正在建立佳诊疗Agent才气后,为了让用户间接体会征询,可使用企微供给的交心去启拆为一个BOT或者使用效劳号,而后用户可间接战BOT或者使用效劳号对于话。问问过程当中,BOT答复会包罗二块:用户恳求阐发计划实质展示战施行历程及成果展示。目标是让用户明白agent的计划历程战具体东西挪用成果展示和最初论断。大抵结果以下:

再聊OpenManus战MCP建立运维Agent实践及思考w4.jpg

思考

1. 道道目前实践名目最年夜不敷面

扔启实践案例中已经完毕目前Agent必备的相干中心模块功用中,有一项中心实质实际上是缺得的,即:评介体制。今朝实践案例中,对于成果的准确取可,主要依靠野生评介。以前有篇文章写到吴恩达传授道到建立Agent所需的枢纽妙技时,他觉得评介体制的缺得,是目前 Agent 建立过程当中最年夜的“瞅没有睹的成就”。他主意快速拆修一个评介体系,哪怕是很低级的,如许能够负担许多重复性的鉴别任务。更主要的是鉴于实在数据、实在失利路子的“触觉型直观”,才是体系建立中最贵重的经历。因而,后绝中,咱们将正在开辟一个评介体制,以更佳帮助劣化Agent才气。
2. 怎样让 LLM 具有自立决议计划拉理深度的聪慧

以前瞅过一篇文章对于介绍了Thinkless 框架,让模子教会了“智慧躲懒”,更正在服从取功用之间找到了均衡。因为拉理模子常常不论庞大仍是简朴成就,城市睁开 lengthy 的拉理历程。如许会戴去很年夜的计较资本糜掷。这正在Agent智能体系中,对于llm请求是百般的,有些场景需要没有需要拉理,有些场景需要拉理。好比路由历程,请求快战准。计划历程请求模子有自己的思考,不克不及一味按照供给的高低文实质去计划,如许活络性战智能性将会低落。从使用开辟者角度道,中心面仍是分离差别场景设定llm模子的脚色战范例。让llm教会“躲懒”,共时也服从退一步提拔。
参照文档

[1]. 深入剖析OpenManus:启源版原的ReAct情势根究

[2]. Thinkless框架:让LLM教会“智慧躲懒”的聪慧

[3]. Agent 加入工程时期!吴恩达详解 AI Agent 建立齐过程,中心没有正在模子,而是任务装解取评介体制
您需要登录后才可以回帖 登录 | 立即注册 qq_login

本版积分规则

发布主题
阅读排行更多+
用专业创造成效
400-778-7781
周一至周五 9:00-18:00
意见反馈:server@mailiao.group
紧急联系:181-67184787
ftqrcode

扫一扫关注我们

Powered by 职贝云数A新零售门户 X3.5© 2004-2025 职贝云数 Inc.( 蜀ICP备2024104722号 )