数据截至 (上游 commit a675d6d61c41)
Fara — 架构与原理
30 秒导读: Fara 是微软 AI Frontiers 开源的浏览器 computer-use agent。它的模型只看浏览器截图,直接吐出"点 (x, y)"这样的鼠标键盘动作;这个仓库提供的是跑这个模型的运行时(agent 主循环 + Playwright 浏览器环境 + 轨迹记录)和一套评测框架。核心卖点是小模型(4B/9B/27B)也能干这活,因为整条链路砍掉了可访问性树和单独的元素定位模型。
1. 这是什么(零基础也能懂)
一句话定义
Fara 是一个让 AI 用鼠标键盘替你开浏览器办事的开源项目:仓库里是运行时代码,模型权重在 Hugging Face / Microsoft Foundry 上。
解决什么问题、给谁用
假设你想让 AI 帮你在网上订一张电影票。传统做法有两条路,都不太好走:
| 路线 | 做法 | 麻烦在哪 |
|---|---|---|
| 调 API | 让 AI 调网站开放的接口 | 绝大多数网站根本没有开放接口 |
| 读 DOM / 可访问性树 | 把网页结构抽成文本喂给模型 | 文本长、贵;还得再训一个"元素定位"模型把"那个蓝色按钮"翻译成元素 id |
Fara 走第三条:模型直接看截图,直接说坐标。README(README.md:57、README.md:133)把这条路线叫做 "no accessibility trees or separate parsing models"。
用户画像有两类:
- 想跑一个 能自动上网办事的 agent 的工程师 —— 装包、指一个模型端点、
fara-cli --task "..."。 - 做 CUA(computer-use agent)研究的人 —— 要复现基准分数、要研究"怎么给 agent 轨迹打分",用仓库里的
webeval/。
它能做什么
- 打开浏览器、搜索、点击、输入、滚动、拖拽、右键/双击/三击。
- 读当前页面并回答一个问题(内部再调一次模型做抽取)。
- 把一条事实"记下来"备用(
pause_and_memorize_fact)。 - 在关键节点停下来问用户 —— 缺个人信息、任务有歧义、马上要做不可逆操作时(见 §3 的 critical point)。
- 把整条轨迹(每一步的截图、动作、观察)落盘成结构化 JSON。
用起来什么样
装好之后写一个端点配置 JSON,然后一行命令(依据:README.md:79-92、src/fara/run_fara.py:214-340):
# azure_foundry_config.json 里放 {"model", "base_url", "api_key"}
fara-cli --task "whats the weather in new york now" \
--endpoint_config azure_foundry_config.json --headful
终端里看到的大致是这样(依据:src/fara/run_fara.py:61-134 的 print 语句):
Initializing Browser...
Browser Running... Starting Fara-1.5 Agent...
##########################################
Task: whats the weather in new york now
##########################################
Running Fara...
Final Answer: It's 22°C and partly cloudy in New York right now.
Trajectory saved to: ./fara_runs/task_1_9f3a2b7c
如果 agent 中途觉得信息不够,它不会瞎猜,而是把控制权交回来:
Fara asks: I asked the user: Which airport should I depart from?
Your response (Enter to abandon): _
一句话直觉
把 Fara 想成一个只有一只眼睛和一双手的实习生。 眼睛 = 浏览器截图,手 = 鼠标键盘。它看不到网页的"源代码",只能像人一样看画面、判断"那个按钮大概在屏幕的哪个位置",然后伸手去点。
本节到此为止,不碰任何代码细节。往下开始拆机器。