支持私有云部署
AI知识库

53AI知识库

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


OpenManus源码小读第二弹

发布日期:2025-03-30 23:05:41 浏览次数: 1565 作者:进击的大数据
推荐语

深入探索OpenManus核心脚本,掌握斐波那契数列计算与异常处理。

核心内容:
1. 分析run_flow.py脚本,理解其在OpenManus中的作用
2. 通过计算斐波那契数列第五位,学习如何记录和调试运行结果
3. 掌握messages和tools的使用,了解规划工具的参数和功能

杨芳贤
53A创始人/腾讯云(TVP)最具价值专家

背景

上一篇文章解析了main.py作为入口的流程, 这次我们看run_flow.py的部分, 我们这次换一个提示词,
计算斐波那契数列的第五位,并记录结果到文件中

调试

运行

结果是不停的输出这样的异常的 
我们暂时先不管这个异常结果,而是关注里面的流程
这个我们在上一讲看过类似的提示词了,我们主要关心这里 ,

messages和tools

messages也就是提示词如下:
调用的tool如下,这里展示一个格式化后的tools描述
[    {        "type": "function",        "function": {            "name": "planning",            "description": "规划工具,用于创建和管理复杂任务的解决方案计划。\n提供创建计划、更新步骤和跟踪进度等功能。",            "parameters": {                "type": "object",                "properties": {                    "command": {                        "type": "string",                        "description": "执行的命令,可选值:create(创建计划)、update(更新计划)、list(列出计划)、get(获取详情)、set_active(设置激活计划)、mark_step(标记步骤状态)、delete(删除计划)",                        "enum": ["create", "update", "list", "get", "set_active", "mark_step", "delete"]                    },                    "plan_id": {                        "type": "string",                        "description": "计划唯一标识符。create/update/set_active/delete命令必填,get/mark_step命令可不填(默认使用当前激活计划)"                    },                    "title": {                        "type": "string",                        "description": "计划标题。create命令必填,update命令可选"                    },                    "steps": {                        "type": "array",                        "description": "计划步骤列表。create命令必填,update命令可选",                        "items": {                            "type": "object",                            "properties": {                                "step_description": {"type": "string"},                                "expected_result": {"type": "string"}                            }                        }                    },                    "step_index": {                        "type": "integer",                        "description": "步骤序号(从0开始)。mark_step命令必填"                    },                    "step_status": {                        "type": "string",                        "description": "步骤状态。用于mark_step命令",                        "enum": ["not_started", "in_progress", "completed", "failed"]                    },                    "step_notes": {                        "type": "string",                        "description": "步骤备注。mark_step命令可选"                    }                },                "required": ["command"],                "additionalProperties": False            }        }    }]
这里的命令只有一个, 但参数有多个
可以看到大模型的输出恰好是之前是那些tools的提示词
跟着跳转进入这里
把计划的状态存下来

创建计划,然后一步一步执行

最终会走到这里
mark_step的作用是先更新下step对应的状态
再接着执行

新的提示词

里面表达了,当前计划一共需要多少步,执行到了第几步

接着就回到第一讲中的agent执行的部分了

def fibonacci(n):    if n <= 0:        return 0    elif n == 1:        return 1    else:        return fibonacci(n-1) + fibonacci(n-2)
fib_5 = fibonacci(5)print(fib_5)
之前python_execute报错是因为exec(code, safe_globals,{})的写法有误,当递归调用时,函数名会在safe_globals的命名空间中寻找,改成这样就行(社区最新版已经修复了这个问题了)
第一个step完成后,memory的prompt继续append,这一条是file_save
当前memory是什么样呢
当完成所有步骤后,会进入到 

最后让llm总结下过程,然后输出

小bug

其实这里有个小bug
这个是因为在step1中,虽然提示词写明了要按步骤执行,但在agent在执行斐波那契的计算后,仍旧添加了保存到文件的另一个function call

尝试修复

我试着在提示词里制止llm在执行当前step时执行后续的步骤。
结果还是一样。。依旧重复,不过这些东西都有望随着llm的强大而解决,不应该因为这些小问题停止对目前新技术的学习。

后续

看看最近比较火的MCP

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

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

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

联系我们

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

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询