aider 实战指南:在终端编程对话中添加图片与网页上下文
【免费下载链接】aideraider is AI pair programming in your terminal项目地址: https://gitcode.com/GitHub_Trending/ai/aider
导读
aider 是运行在终端里的 AI 结对编程工具,本指南聚焦它的一项实用能力:把图片文件和网页内容直接喂给编程对话,让模型基于截图、UI 原型或最新版本文档来理解需求与修改代码。读完本文你将掌握用/add、/paste、命令行参数添加图片,用/web抓取并转化网页为 Markdown 的完整方法,并从 scrape.py 等源码实现了解底层抓取与文本转换原理。
一、为什么编程对话需要图片与网页
文本是模型对话的主通道,但在真实开发中大量信息天然存在于图片与网页中。aider 针对这两类输入提供了专门支持,对应官方文档位于 images-urls.md。
典型图片场景
对于 GPT-4o、Claude 3.7 Sonnet 等具备视觉能力(vision)的模型,把图片加入对话能显著提升需求还原度:
- 上传网页或界面截图,让 aider 照着截图去实现或改造页面;
- 展示 UI 线框稿/原型图,说明你要构建的界面长什么样;
- 截下难以复制的报错信息,把屏幕上的错误提示直接交给模型分析;
- 其他任何"看图说话"式的需求传达。
典型网页场景
很多高质量 API 与框架文档并非模型训练数据的一部分,尤其是:
- 小众 API 的文档页面,模型掌握较少;
- 晚于模型训练截止日期的新库/新版本文档,例如某个刚发布 v2 的 SDK。
此时把官方网页实时抓进对话,比让模型凭记忆推测可靠得多。
二、添加图片:三种入口
1. 聊天内指令:/add <图片文件>
在 aide 对话中执行:
/add path/to/screenshot.png与添加普通源文件一致,aider 会把图片加入本次会话上下文。查看会话中已有哪些文件、或想移除图片释放上下文,可配合使用/ls与/drop <图片>(cmd_drop的实现见 commands.py)。
2. 剪贴板粘贴:/paste
截图后无需保存文件,直接执行:
/pastecmd_paste(commands.py)会读取系统剪贴板:若剪贴板中是图片,则将其以clipboard_image.png为名落入临时目录并加入对话,若会话已存在同名图片会自动替换;若剪贴板中是纯文本,则原样输出到终端。你也可以给图片显式命名,例如/paste error-log.png,命名以.jpg/.jpeg/.png结尾时按原格式保存,否则自动补为.png。
3. 启动时命令行携带
与普通文件相同,启动 aider 时即可把图片放在命令行:
aider mockup.png aider docs/screenshot.png --model gpt-4o图片格式与视觉模型要求
判定文件是否为图片由 is_image_file 完成,其依据的扩展名白名单IMAGE_EXTENSIONS定义在 utils.py:
| 扩展名 | 说明 |
|---|---|
.png/.jpg/.jpeg | 最常见的截图与照片格式 |
.gif/.bmp/.tiff | 老式或专用场景格式 |
.webp | 现代网页常用格式 |
.pdf | 同样被当作图片式文件处理 |
需要特别留意的是模型能力门槛。在cmd_add中(commands.py),添加图片前会检查当前主模型的info["supports_vision"]:若模型不支持视觉,会得到类似Cannot add image file xxx as the gpt-... does not support images.的错误提示。因此使用图片功能请先确认所选模型支持视觉能力。
三、添加网页:/web与直接粘贴 URL
聊天内指令:/web <url>
/web https://example.com/api/docscmd_web的逻辑位于 commands.py:抓取该 URL 的正文,转换为 Markdown,并以前缀Here is the content of <url>:包装成一条用户消息追加进当前对话,然后继续正常对话即可基于网页内容编程。
直接把 URL 粘贴进对话
在输入框直接粘贴一个网址并发送,aider 会询问你是否把它作为网页内容抓取进来——确认后与/web效果一致。这是日常最快捷的用法。
命令行直接查看抓取效果
抓取并转成 Markdown 的实际效果可以在启动对话前先在终端里预览:
python -m aider.scrape <目标URL>该命令直接打印转换后的 Markdown 文本。它对应 scrape.py 的main():构造Scraper并输出抓取结果。用真实目标 URL(如某个 API 文档页)替换<目标URL>即可在添加入对话前先检查内容是否干净可用。
四、网页抓取引擎源码剖析
/web背后是 scrape.py 中的Scraper类,其工作可分为两步:取回页面与转成 Markdown。
双引擎:Playwright 优先,httpx 兜底
Scraper.scrape()(scrape.py)根据是否可用 Playwright 选择抓取路径:
- Playwright 引擎(
scrape_with_playwright,scrape.py):启动无头 Chromium,设置去掉了Headless字样并追加Aider/<版本>UA 标识的真实浏览器 User-Agent(见aider_user_agent),等待页面networkidle(最多 5 秒超时,超时也会先抓再说),再取回页面 HTML 与 Content-Type。适合大量依赖 JS 渲染的现代站点。 - httpx 兜底(
scrape_with_httpx,scrape.py):当未安装 Playwright 时退化为纯 HTTP 请求,跟随重定向并自动带上 UA 头,返回原始响应体。适合轻量、服务端渲染的页面。
判定 HTML 并按需精简
取回内容后,scrape()依据 Content-Type 是否以text/html开头(MIME 缺失时用looks_like_html通过<!DOCTYPE html>、<html>、<div>等常见标签特征判断)来决定是否走 HTML→Markdown 流程。
转换前会执行slimdown_html(scrape.py)做"降噪":剔除<svg>、data:内联图片与data:链接等对模型理解无益的节点,并把标签属性裁剪到只保留href,最大程度压缩体积。
pandoc 完成格式转换
html_to_markdown(scrape.py)使用 BeautifulSoup 解析后调用 pandoc(经pypandoc,首次使用时由try_pandoc自动下载安装)把 HTML 转为 Markdown,随后清理残留的<div>与多余空行。若 pandoc 不可用,则退化为返回已精简的 HTML 原文。
依赖与 TLS 校验开关
- 抓取所需的额外依赖集中在 requirements-playwright.in(含 Playwright 与 Chromium 安装说明见 optional.md)。
- 首次使用
/web且环境中缺少 Playwright 时,install_playwright(scrape.py)会在终端打印补装提示并征询是否自动执行安装。 - 在
cmd_web中(commands.py)会读取命令行参数disable_playwright与verify_ssl:前者可强制关闭 Playwright 只用 httpx,后者控制抓取时的 SSL 证书校验,对自签名证书的内网文档站场景很有用。
抓取结果的注入与上下文管理
cmd_web抓取成功后把「页面来源 URL + 转换出的 Markdown」作为一条普通用户消息写入cur_messages(commands.py),因此网页文本会像普通对话一样参与后续建模。与图片不同,网页文本会占用 Token——大量无关页面会挤占上下文窗口。参见 base_coder.py 的check_added_files:当聊天内文件超过 4 个且折算 Token 超过约 20K 时,aider 会主动提示"最好只添加需要改动的文件",图片文件在该统计中被跳过(is_image_file分支),网页文本则正常计入。
五、测试与验证依据
仓库中已有与抓取能力配套的测试,可作深入参考:
- test_scrape.py 覆盖
Scraper在有无 Playwright 两条路径下的行为; - test_commands.py 与 test_coder.py 覆盖
/add、/drop以及图片加入会话、从只读文件提升为可编辑文件等文件管理行为; - commands.md 汇总了全部斜杠指令的说明,可对照查看
/add、/paste、/web、/read-only、/drop的用法。
六、小结与最佳实践
- 图片用对模型:
/add、/paste、命令行传图三种方式等价,但务必使用supports_vision=true的模型,否则图片无法被加入。 - 网页按需抓取:
/web <url>与直接粘贴 URL 均可用,命令行python -m aider.scrape <url>先预览转换质量,避免把大量噪音 HTML 带进对话。 - 控制上下文成本:网页内容按 Token 计费且占用窗口,只抓取与当前任务真正相关的少数页面;图片则只占消息位不参与 Token 统计(见 base_coder.py)。
- 动态站点装 Playwright:JS 渲染型页面建议安装 Playwright + Chromium;静态文档页用 httpx 兜底即可,必要时通过
disable_playwright强制走轻量路径。
把"图"与"网页"变成可对话的上下文,是让终端 AI 结对编程真正落地于 UI 开发与追新文档场景的关键一步,以上命令与源码路径足以支撑你直接在 images-urls.md 与 scrape.py 上继续深入研究。
【免费下载链接】aideraider is AI pair programming in your terminal项目地址: https://gitcode.com/GitHub_Trending/ai/aider
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考