<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Slm on Wilson Wu</title><link>https://wilsonwu.me/zh/tags/slm/</link><description>Recent content in Slm on Wilson Wu</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Fri, 28 Nov 2025 00:00:00 -0500</lastBuildDate><atom:link href="https://wilsonwu.me/zh/tags/slm/index.xml" rel="self" type="application/rss+xml"/><item><title>Fara-7B：微软推出的高效电脑操作代理模型</title><link>https://wilsonwu.me/zh/blog/2025/microsoft-fara-7b/</link><pubDate>Fri, 28 Nov 2025 00:00:00 -0500</pubDate><guid>https://wilsonwu.me/zh/blog/2025/microsoft-fara-7b/</guid><description>介绍微软最新发布的 Fara-7B 模型，这是一个专为电脑操作设计的 7B 参数模型，以及如何通过 vLLM 进行部署和使用。</description><content:encoded><![CDATA[<p><img alt="Fara-7B" loading="lazy" src="/zh/blog/2025/microsoft-fara-7b/1-fara-7b.png"></p>
<p>微软研究院最近发布了 <strong>Fara-7B</strong>，这是一款专为电脑操作（Computer Use）设计的代理小语言模型（Agentic SLM）。与传统的聊天模型不同，Fara-7B 旨在通过像人类一样使用鼠标和键盘来完成任务。</p>
<h2 id="什么是-fara-7b">什么是 Fara-7B？</h2>
<p>Fara-7B 是一个拥有 70 亿参数的模型，基于 <a href="https://arxiv.org/abs/2502.13923">Qwen2.5-VL-7B</a> 构建。它的主要特点包括：</p>
<ul>
<li><strong>视觉感知</strong>：它通过视觉感知网页（截图）来操作，不需要依赖辅助功能树（Accessibility Trees）或额外的解析模型。</li>
<li><strong>高效紧凑</strong>：尽管只有 7B 参数，但在同类模型中实现了最先进的性能，甚至在某些基准测试中可以与更大的模型竞争。</li>
<li><strong>端侧运行</strong>：由于体积小，它可以在设备上本地运行，从而降低延迟并提高隐私安全性。</li>
</ul>
<p><img alt="使用" loading="lazy" src="/zh/blog/2025/microsoft-fara-7b/2-usage.png"></p>
<h2 id="核心技术">核心技术</h2>
<p>Fara-7B 的训练利用了微软开发的合成数据生成管道，该管道基于 <a href="https://www.microsoft.com/en-us/research/articles/magentic-one-a-generalist-multi-agent-system-for-solving-complex-tasks/">Magentic-One</a> 框架。它通过“观察-思考-行动”（observe-think-act）的循环来执行任务。</p>
<p>在每个步骤中，模型会接收：</p>
<ol>
<li>用户指令</li>
<li>完整的操作历史</li>
<li>最近的三张屏幕截图</li>
</ol>
<p>然后，它会输出一个推理信息（“思考”下一步行动），随后调用工具（如 <code>click(x,y)</code>、<code>type()</code> 等）来执行操作。</p>
<p><img alt="工作流程" loading="lazy" src="/zh/blog/2025/microsoft-fara-7b/3-workflow.png"></p>
<h2 id="性能表现">性能表现</h2>
<p>在 WebVoyager、Online-Mind2Web 等基准测试中，Fara-7B 展现了强大的性能。例如在 WebVoyager 上，它的任务成功率达到了 73.5%，超过了 UI-TARS-1.5-7B (66.4%) 和 GPT-4o (SoM Agent, 65.1%)。</p>
<h2 id="如何通过-vllm-使用-fara-7b">如何通过 vLLM 使用 Fara-7B</h2>
<p>Fara-7B 已经发布在 <a href="https://huggingface.co/microsoft/Fara-7B">Hugging Face</a> 上。由于它是基于 Qwen2.5-VL 的，我们可以使用 vLLM 来高效地部署和推理。</p>
<h3 id="安装-vllm">安装 vLLM</h3>
<p>首先确保你安装了最新版本的 <code>vllm</code>：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>pip install vllm
</span></span></code></pre></div><h3 id="python-代码示例">Python 代码示例</h3>
<p>以下是一个使用 vLLM 加载 Fara-7B 并进行推理的 Python 脚本示例：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">from</span> vllm <span style="color:#f92672">import</span> LLM, SamplingParams
</span></span><span style="display:flex;"><span><span style="color:#f92672">from</span> PIL <span style="color:#f92672">import</span> Image
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> requests
</span></span><span style="display:flex;"><span><span style="color:#f92672">from</span> io <span style="color:#f92672">import</span> BytesIO
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">run_fara_7b</span>():
</span></span><span style="display:flex;"><span>    <span style="color:#75715e"># 模型名称</span>
</span></span><span style="display:flex;"><span>    model_name <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;microsoft/Fara-7B&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e"># 初始化 LLM</span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e"># Fara-7B 基于 Qwen2.5-VL，因此使用类似的配置</span>
</span></span><span style="display:flex;"><span>    llm <span style="color:#f92672">=</span> LLM(
</span></span><span style="display:flex;"><span>        model<span style="color:#f92672">=</span>model_name,
</span></span><span style="display:flex;"><span>        trust_remote_code<span style="color:#f92672">=</span><span style="color:#66d9ef">True</span>,
</span></span><span style="display:flex;"><span>        max_model_len<span style="color:#f92672">=</span><span style="color:#ae81ff">4096</span>,  <span style="color:#75715e"># 根据显存大小调整</span>
</span></span><span style="display:flex;"><span>        limit_mm_per_prompt<span style="color:#f92672">=</span>{<span style="color:#e6db74">&#34;image&#34;</span>: <span style="color:#ae81ff">1</span>},
</span></span><span style="display:flex;"><span>        mm_processor_kwargs<span style="color:#f92672">=</span>{
</span></span><span style="display:flex;"><span>            <span style="color:#e6db74">&#34;min_pixels&#34;</span>: <span style="color:#ae81ff">28</span> <span style="color:#f92672">*</span> <span style="color:#ae81ff">28</span>,
</span></span><span style="display:flex;"><span>            <span style="color:#e6db74">&#34;max_pixels&#34;</span>: <span style="color:#ae81ff">1280</span> <span style="color:#f92672">*</span> <span style="color:#ae81ff">28</span> <span style="color:#f92672">*</span> <span style="color:#ae81ff">28</span>,
</span></span><span style="display:flex;"><span>        },
</span></span><span style="display:flex;"><span>    )
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e"># 加载示例图片（这里仅作演示，实际使用中应为屏幕截图）</span>
</span></span><span style="display:flex;"><span>    image_url <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg&#34;</span>
</span></span><span style="display:flex;"><span>    response <span style="color:#f92672">=</span> requests<span style="color:#f92672">.</span>get(image_url)
</span></span><span style="display:flex;"><span>    image <span style="color:#f92672">=</span> Image<span style="color:#f92672">.</span>open(BytesIO(response<span style="color:#f92672">.</span>content))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e"># 构建 Prompt</span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e"># 注意：Fara-7B 使用特定的 Prompt 格式</span>
</span></span><span style="display:flex;"><span>    prompt <span style="color:#f92672">=</span> (
</span></span><span style="display:flex;"><span>        <span style="color:#e6db74">&#34;&lt;|im_start|&gt;system</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">You are a helpful assistant.&lt;|im_end|&gt;</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>        <span style="color:#e6db74">&#34;&lt;|im_start|&gt;user</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&lt;|vision_start|&gt;&lt;|image_pad|&gt;&lt;|vision_end|&gt;&#34;</span>
</span></span><span style="display:flex;"><span>        <span style="color:#e6db74">&#34;Describe this image in detail.&lt;|im_end|&gt;</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>        <span style="color:#e6db74">&#34;&lt;|im_start|&gt;assistant</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>    )
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e"># 准备输入</span>
</span></span><span style="display:flex;"><span>    inputs <span style="color:#f92672">=</span> {
</span></span><span style="display:flex;"><span>        <span style="color:#e6db74">&#34;prompt&#34;</span>: prompt,
</span></span><span style="display:flex;"><span>        <span style="color:#e6db74">&#34;multi_modal_data&#34;</span>: {
</span></span><span style="display:flex;"><span>            <span style="color:#e6db74">&#34;image&#34;</span>: image
</span></span><span style="display:flex;"><span>        },
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e"># 采样参数</span>
</span></span><span style="display:flex;"><span>    sampling_params <span style="color:#f92672">=</span> SamplingParams(temperature<span style="color:#f92672">=</span><span style="color:#ae81ff">0.2</span>, max_tokens<span style="color:#f92672">=</span><span style="color:#ae81ff">512</span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e"># 生成结果</span>
</span></span><span style="display:flex;"><span>    outputs <span style="color:#f92672">=</span> llm<span style="color:#f92672">.</span>generate([inputs], sampling_params<span style="color:#f92672">=</span>sampling_params)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">for</span> o <span style="color:#f92672">in</span> outputs:
</span></span><span style="display:flex;"><span>        print(<span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;Generated text: </span><span style="color:#e6db74">{</span>o<span style="color:#f92672">.</span>outputs[<span style="color:#ae81ff">0</span>]<span style="color:#f92672">.</span>text<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> __name__ <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;__main__&#34;</span>:
</span></span><span style="display:flex;"><span>    run_fara_7b()
</span></span></code></pre></div><h3 id="命令行启动-api-服务">命令行启动 API 服务</h3>
<p>如果你想启动一个兼容 OpenAI API 的服务，可以使用以下命令：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vllm serve microsoft/Fara-7B <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span>  --trust-remote-code <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span>  --limit-mm-per-prompt image<span style="color:#f92672">=</span><span style="color:#ae81ff">1</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span>  --mm-processor-kwargs <span style="color:#e6db74">&#39;{&#34;min_pixels&#34;: 784, &#34;max_pixels&#34;: 1003520}&#39;</span>
</span></span></code></pre></div><p>注意：<code>min_pixels</code> 对应 28x28，<code>max_pixels</code> 对应 1280x28x28。</p>
<h2 id="总结">总结</h2>
<p>Fara-7B 是微软在代理小模型领域的一次重要尝试，它证明了小模型在复杂的电脑操作任务中也能有出色的表现。通过开源权重，开发者可以更轻松地探索和构建基于 GUI 的自动化代理。</p>
]]></content:encoded></item></channel></rss>