链载Ai

标题: OpenManus源码小读第二弹 [打印本页]

作者: 链载Ai    时间: 2 小时前
标题: OpenManus源码小读第二弹

背景

上一篇文章解析了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






欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5