我写了很多关于如何使用 Claude通过 Claude Artifacts构建一次性 HTML+JavaScript 应用程序的文章。我最近开始使用类似的模式来创建一次性 Python 实用程序,使用自定义 Claude 项目并结合uv的依赖管理功能。
(用 LLM 术语来说,“一次性”提示是指在第一次尝试时即可产生完整的所需结果的提示。)
我将从一个我以这种方式构建的工具的示例开始。
今天,我与 Amazon S3 进行了另一轮斗争,试图找出为什么无法通过公共 URL 访问我的一个存储桶中的文件。
出于沮丧,我向克劳德提示了以下内容的变体(此处是完整的文字记录):
I can't access the file at EXAMPLE_S3_URL. Write me a Python CLI tool using Click and boto3 which takes a URL of that form and then uses EVERY single boto3 trick in the book to try and debug why the file is returning a 404
它给我写了这个脚本,这正是我所需要的。我是这样运行的:
uv运行debug_s3_access.py \ https://test-public-bucket-simonw.s3.us-east-1.amazonaws.com/0f550b7b28264d7ea2b3d360e3381a95.jpg
您可以在此处查看文本输出。
内联依赖和 uv 运行
至关重要的是,我不需要采取任何额外的步骤来安装脚本所需的任何依赖项。那是因为脚本以这个神奇的注释开头:
# /// 脚本 # 需要-python = ">=3.12" # 依赖关系 = [ # “点击”, #“boto3”, #“urllib3”, # “富有的”, #] # ///
这是内联脚本依赖项的示例,该功能在PEP 723中描述并由uv run
实现。运行该脚本会导致uv
创建一个安装了这些依赖项的临时虚拟环境,一旦填充了uv
缓存,该过程只需几毫秒。
如果脚本由 URL 指定,这甚至可以工作!安装了uv
的任何人都可以运行以下命令(前提是您相信我没有用恶意内容替换脚本)来调试自己的 S3 存储桶之一:
uv运行http://tools.simonwillison.net/python/debug_s3_access.py \ https://test-public-bucket-simonw.s3.us-east-1.amazonaws.com/0f550b7b28264d7ea2b3d360e3381a95.jpg
在克劳德项目的帮助下写这些
我现在可以一次性编写这样的脚本的原因是我已经建立了一个名为“Python 应用程序”的Claude 项目。项目可以有自定义指令,我用这些指令来“教”Claude 如何利用内联脚本依赖项:
您将 Python 工具编写为单个文件。他们总是以这样的评论开始:
# /// 脚本 # 需要-python = ">=3.12" # ///这些文件可以包含对 Click 等库的依赖项。如果这样做,这些依赖项将包含在同一注释中的类似列表中(此处显示两个依赖项):
# /// 脚本 # 需要-python = ">=3.12" # 依赖关系 = [ # “点击”, #“sqlite-utils”, #] # ///
这就是 Claude 所需的一切,以可靠地将功能齐全的 Python 工具敲出为单个脚本,这些脚本可以使用 Claude 选择包含的任何依赖项直接运行。
我之前并没有建议 Claude 对debug_s3_access.py
脚本使用rich ,但它还是决定使用它!
我最近才开始尝试这种模式,但它似乎效果很好。这是另一个例子 – 我的提示是:
Starlette web app that provides an API where you pass in ?url= and it strips all HTML tags and returns just the text, using beautifulsoup
这是聊天记录及其生成的原始代码。您可以直接在您的计算机上运行该服务器(它使用端口 8000),如下所示:
uv运行https://gist.githubusercontent.com/simonw/08957a1490ebde1ea38b4a8374989cf8/raw/143ee24dc65ca109b094b72e8b8c494369e763d6/strip_html.py
然后访问http://127.0.0.1:8000/?url=https://simonwillison.net/
查看其实际情况。
标签: aws 、 python 、 s3 、 ai 、生成式 AI 、 llms 、人工智能辅助编程、 claude 、 uv
原文: https://simonwillison.net/2024/Dec/19/one-shot-python-tools/#atom-everything