llm-coding-agent 0.1a0 发布llm-coding-agent 0.1a0
知名开发者 Simon Willison 发布了基于其 LLM 库构建的全新实验性编码代理工具 llm-coding-agent 0.1a0。随着其原有的 LLM 库逐渐演变为一个代理框架,该项目旨在探索如何构建一个简单但高效的编码助手。该工具作为一个全新的 Python 库实现,并集成了 MCP(模型上下文协议)以增强代理的执行能力。
Simon Willison
另一个 Fable 5 实验。既然我的 LLM 库已经演变成更像是一个 agent 框架,是时候看看基于它构建的简单编程 agent 会是什么样了。
我使用我的 python-lib-template-repository GitHub 模板仓库创建了一个新的 Python 库,然后运行了这两个提示词(这里是 Claude Code for web 的对话记录):
为这个项目编写一个 spec.md —— 它将依赖 PyPI 上最新的 "llm" alpha 版本,并实现一个 Claude code 风格的编程 agent,包含用于读取和编辑文件以及执行命令的工具。
然后:
提交该 spec,然后通过一系列合理的提交,使用红/绿 TDD(测试驱动开发)来构建它(每次提交都包含通过的测试和更新的文档)—— 偶尔使用你环境中的 OpenAI API 密钥进行手动测试。
这是 spec、生成的 README 文件以及提交记录。
我已经向 PyPI 发布了一个 slop-alpha 版本,所以你可以像这样运行新的 agent:
uvx --prerelease=allow --with llm-coding-agent llm code对于第一次尝试来说,它已经相当不错了!这是(由 Fable 编写的)README,其中列出了诸如 llm code --yolo 和 llm code --allow "pytest*" --allow "git diff*" 等用法。
它还提供了一个基于 CodingAgent(model="gpt-5.5", root="/path", approve=True).run("Fix the failing test in tests/test_parser.py") 类的 Python API,这虽然不是我要求的,但看到它被实现出来我很高兴。
这是它实现的一套工具,通过 uvx ... llm tools 列出:
CodingTools_edit_file(path: str, old_string: str, new_string: str, replace_all: bool = False) -> str 替换文件中的确切字符串。old_string 必须与文件内容完全匹配(包括空白字符),并且必须能定位到唯一的位置,除非 replace_all 为 true。返回更改的 diff 以便进行验证。 CodingTools_execute_command(command: str, timeout: int = 120) -> str 在会话根目录中运行 shell 命令。返回合并的 stdout 和 stderr,后跟 Exit code 行。timeout 以秒为单位(最大为 600);超时将终止整个进程树。 CodingTools_list_files(pattern: str = '**/*', path: str = '.') -> str 列出与 glob 模式匹配的文件,按最新时间优先。跳过隐藏目录、node_modules、__pycache__ 以及(在 git 仓库中).gitignore 涵盖的任何内容。最多返回 200 个相对于搜索目录的路径。 CodingTools_read_file(path: str, offset: int = 0, limit: int = 2000) -> str 读取文本文件,返回带编号的行,类似于 cat -n。路径相对于会话根目录。使用 offset(从 0 开始的第一行)和 limit(最大行数)来分页读取因过大而无法一次读取的文件。 CodingTools_search_files(pattern: str, path: str = '.', glob: str = None, max_results: int = 100) -> str 搜索文件内容中的正则表达式。以 path:line_number:line 的格式返回匹配项,最多显示 max_results 个。使用 glob(例如 "*.py")来限制搜索的文件范围。 CodingTools_write_file(path: str, content: str) -> str 使用给定内容创建或覆盖文件。根据需要创建父目录。修改现有文件时,请优先使用 edit_file。
我通过运行 llm code --yolo 然后输入提示词试用了它:
mkdir /tmp/demo,然后在该文件夹中创建一个简单的 swiftui CLI 应用程序,用 ascii art 显示时间
这是对话记录,其中 GPT-5.5 的推理过程指出“SwiftUI 不适合真正的 CLI”,随后构建了一个在 swift run AsciiTime 时会输出以下内容的应用程序:
█ █████ ████ █ █ ███
██ █ █ █ ██ █ ██ █ █
█ ████ ███ █ █ █
█ █ █ █ █ █ █ █
███ ████ ████ ███ ███ █████需要完整排版与评论请前往来源站点阅读。