找回密码
 立即注册
首页 业界区 安全 大模型的9行核心代码,以及自动化的使用体验 ...

大模型的9行核心代码,以及自动化的使用体验

咚獭 2025-6-23 10:06:22
LLM Agent 循环与工具使用的非凡有效性

2025-05-15 by Philip Zeyliger
过去几个月,我和同事一直在开发一个名为 Sketch 的 AI 编程助手。我最惊讶的,是使用 LLM 结合工具使用的主循环结构,竟然惊人地简单:
  1. def loop(llm):
  2.     msg = user_input()
  3.     while True:
  4.         output, tool_calls = llm(msg)
  5.         print("Agent: ", output)
  6.         if tool_calls:
  7.             msg = [ handle_tool_call(tc) for tc in tool_calls ]
  8.         else:
  9.             msg = user_input()
复制代码
当然,要让上面的代码真正运行起来,还需要一些繁文缛节(完整脚本在这里),但核心思想就是上面这 9 行代码。这里的 llm() 是一个函数,它将系统提示词、当前对话内容和用户下一条消息发送给 LLM API。
“工具使用”是个听起来高级的术语,实际意思是“LLM 返回一段符合某种结构(schema)的输出”,而在完整脚本中,我们会在系统提示和工具描述提示中告诉 LLM,它可以访问 bash。
仅靠这一个通用工具,目前的模型(我们广泛使用 Claude 3.7 Sonnet)就能解决许多问题,有些甚至是“单次完成”。以前我需要去查找某个奇怪的 git 操作,然后复制粘贴命令,现在我只需要让 Sketch 来完成。以前我手动处理 git 合并,现在让 Sketch 先试试。以前我修改类型后需要一条一条修复类型检查器报错(或者更现实点,用 perl -pie 硬搞),现在我会让 Sketch 试一下。如果提示得当,这种智能代理循环可以非常持久。如果某个工具未安装,它会自动安装。如果你的 grep 命令行参数不同,它也能适应。(当然,它有时也令人恼火!“这个测试没过……那我们就跳过它吧。”它有时会这么说,令人抓狂。)
对于许多工作流而言,代理工具是可以专门化的。Sketch 的工具库不仅仅是 bash,我们发现添加少量额外工具后,可以提升质量、加快迭代速度,并优化开发者的工作流程。让 LLM 正确编辑文本是一件出人意料的棘手任务。看到它在使用 sed 一行命令时挣扎的样子,更让我觉得基于可视界面的编辑器(而非纯文本行编辑器)真是人类的奇迹。
我毫不怀疑,代理循环(agent loop)将会被更多地融入日常自动化工作中——那些过去因为过于特殊、难以通用,或者太复杂太不稳定而无法自动化的任务。我总是会想到自己花了多少时间来手动对照堆栈信息和 git 提交记录,而 LLM 在这方面做第一次筛查已经非常不错了。未来我们会看到更多定制的、即兴的、一次性的 LLM 代理循环出现在我们的 bin/ 目录中。拿起你最喜欢的 API token,试试看吧。
原文地址:philz.dev/blog/agent-loop/

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册