Parchi:基于大语言模型的聊天驱动浏览器自动化工具
2026/5/14 5:50:06 网站建设 项目流程

1. 项目概述:一个住在浏览器侧边栏的AI副驾驶

如果你和我一样,每天的工作都离不开浏览器,那一定对重复性的网页操作深恶痛绝。比如,每天要登录十几个后台查看数据,手动复制粘贴到表格里;或者,为了研究一个竞品,需要在几十个标签页之间来回切换,手动截图、记录关键信息。这些工作繁琐、耗时,还容易出错。

最近,我在GitHub上发现了一个名为Parchi的开源项目,它完美地解决了我的痛点。简单来说,Parchi是一个AI驱动的浏览器副驾驶(Chrome/Firefox扩展)。它不像传统的浏览器插件那样提供一堆按钮让你点,而是直接在你的浏览器侧边栏里开了一个聊天窗口。你可以像跟一个懂技术的助手聊天一样,用自然语言告诉它你想做什么,比如“帮我把这个页面上所有商品的价格和标题提取出来,整理成CSV”,或者“打开我的邮箱,找到昨天客户发来的那封关于合同的邮件,把附件下载下来”。Parchi会理解你的意图,并调用一系列浏览器工具(导航、点击、读取、输入、截图等)来自动化地完成任务。

最吸引我的是它的“模型无关”特性。它不绑定任何特定的AI服务商,只要提供符合OpenAI API格式的接口,无论是官方的GPT、Claude,还是开源的本地模型(如通过Ollama部署的Llama 3),甚至是OpenRouter这样的聚合平台,都可以作为它的大脑。这意味着你可以根据自己的需求、预算和隐私考虑,灵活选择最合适的“引擎”。

2. 核心设计思路:为什么是“聊天驱动”的自动化?

传统的浏览器自动化工具,比如Selenium、Puppeteer,或者一些RPA软件,都需要你编写脚本。你需要精确地告诉程序:点击哪个ID的按钮,在哪个Class的输入框里填写什么内容。这要求使用者具备一定的编程能力,并且当网页结构发生变化时,脚本很容易失效。

Parchi采取了一种截然不同的思路:聊天驱动(Chat-driven)。它将复杂的浏览器操作抽象成一系列“工具”(Tools),并将这些工具的描述和能力“告诉”给一个大语言模型(LLM)。当你用自然语言提出请求时,背后的“编排器”(Orchestrator)会分析你的指令,决定调用哪些工具、以什么顺序调用,并生成具体的工具调用参数。模型执行工具后,将结果(比如页面内容、操作状态)返回给编排器,编排器再决定下一步是继续调用工具,还是将最终结果汇总后回复给你。

2.1 架构拆解:从用户指令到浏览器动作

这个过程听起来复杂,但Parchi的架构设计得很清晰。我们可以把它拆解成几个核心组件:

  1. 用户界面(侧边栏):这是你与Parchi交互的窗口。你在这里输入指令、查看AI的思考过程(一个可视化的“执行时间线”)、检查工具调用记录和最终结果。
  2. 编排器(Orchestrator):这是整个系统的“指挥官”。它接收你的指令,并与配置的LLM进行多轮对话。它的核心职责是“任务分解”和“工具调度”。例如,你让它“总结这篇长文章并发邮件给我”,编排器可能会将其分解为:读取页面内容->总结内容->打开Gmail->撰写新邮件->填充标题和正文->点击发送。每一步都需要调用不同的工具。
  3. 工具集(Tools):这是Parchi的“手和眼睛”。它封装了所有浏览器能做的底层操作。根据项目文档,主要包含以下几类:
    • 导航类navigate(跳转到指定URL)、go_backgo_forwardreload
    • 内容获取类read(获取当前页面的文本内容、链接、图片等结构化信息)、screenshot(截取整个页面或指定区域)。
    • 交互类click(点击指定元素)、type(在输入框内输入文字)、scroll
    • 标签页管理open_tabswitch_tabclose_tab
    • 信息提取extract(基于你提供的描述或示例,从页面中提取特定模式的信息)。
  4. 模型服务层:这是Parchi的“大脑”。它通过标准的OpenAI兼容API与外部LLM通信。你可以在设置中灵活配置API端点、密钥和模型。这使得Parchi具备了极强的适应性。

2.2 模型无关性的优势与考量

选择“模型无关”的设计,是Parchi一个非常明智的决定。这带来了几个关键优势:

  • 成本可控:你可以根据任务复杂度选择不同价位的模型。简单的信息提取可以用便宜的小模型,复杂的逻辑推理再用GPT-4。
  • 隐私保护:对于涉及敏感数据的操作(如公司内部系统),你可以将API指向本地部署的模型(如Ollama),确保数据不出内网。
  • 避免供应商锁定:不会因为某个AI服务商涨价或服务变更而影响工具的使用。
  • 体验定制:不同的模型在指令遵循、代码生成、逻辑推理上各有侧重,你可以为不同的工作流配置不同的“大脑”。

实操心得:模型选择策略在实际使用中,我摸索出了一套模型搭配策略。对于日常的网页内容总结、简单信息提取,我使用gpt-3.5-turbo,速度快且成本低。当需要处理复杂逻辑、多步骤规划(比如“对比这三个电商网站上某商品的价格和评论”)时,我会切换到claude-3-opusgpt-4,它们的规划能力更强,出错率更低。而对于完全本地的、不联网的文档处理任务,我会在本地用Ollama跑一个llama3:8b模型,虽然慢一点,但绝对安全。

3. 从零开始:安装、配置与初体验

光说不练假把式,下面我就带你一步步把Parchi装到你的浏览器里,并完成第一次AI驱动的自动化任务。

3.1 本地构建与安装

Parchi是一个开源项目,需要从源码构建。别担心,过程非常简单。

第一步:获取代码并安装依赖打开你的终端(命令行),执行以下命令:

# 克隆项目仓库到本地 git clone https://github.com/0xSero/parchi.git # 进入项目目录 cd parchi # 安装项目所需的所有Node.js依赖包 npm install

这个过程可能会花费几分钟,取决于你的网络速度。

第二步:构建扩展依赖安装完成后,运行构建命令:

npm run build

这个命令会调用项目内的构建脚本,将TypeScript源码编译、打包,最终在项目根目录下生成一个dist/文件夹,里面就是可以在Chrome中加载的扩展程序。

第三步:加载到Chrome浏览器

  1. 在Chrome地址栏输入chrome://extensions/并回车,打开扩展管理页面。
  2. 确保页面右上角的“开发者模式”开关是打开状态(蓝色为开启)。
  3. 点击左上角的“加载已解压的扩展程序”按钮。
  4. 在弹出的文件选择器中,找到并选中你刚才项目目录下的dist/文件夹,然后点击“选择文件夹”。

如果一切顺利,你会在扩展列表里看到Parchi的图标,并且浏览器工具栏右侧也会出现它的图标。点击这个图标,就可以打开侧边栏了。

注意事项:Firefox用户的区别如果你是Firefox用户,构建命令稍有不同:npm run build:firefox。构建产物会输出到dist-firefox/目录。然后在Firefox地址栏输入about:debugging,进入“调试”页面,选择“此Firefox”,点击“临时载入附加组件”,然后选择dist-firefox/目录下的manifest.json文件即可加载。

3.2 核心配置:连接你的AI大脑

安装完成后,第一次打开侧边栏,最关键的步骤就是配置AI模型。点击侧边栏顶部的设置图标(通常是个齿轮),进入配置页面。

你会看到一个“模型配置”或“API设置”的区域。这里需要填写几个关键信息:

  • API端点(Endpoint):这是你选择的AI服务提供的接口地址。
  • API密钥(API Key):用于身份验证。
  • 模型名称(Model):你想要使用的具体模型ID。

下面我以几种最常见的场景为例,说明如何配置:

场景一:使用OpenAI官方API这是最直接的方式。如果你有OpenAI的账号和API Key,配置如下:

  • 端点https://api.openai.com/v1
  • API密钥:你的sk-开头的OpenAI API Key。
  • 模型:例如gpt-4o,gpt-4-turbo,gpt-3.5-turbo

场景二:使用开源模型(通过Ollama)为了隐私和零成本测试,我强烈推荐先在本地用Ollama试试。首先,确保你已经在电脑上安装并运行了Ollama(例如,在终端运行ollama run llama3:8b能成功对话)。

  • 端点http://localhost:11434/v1(Ollama默认的兼容OpenAI的API地址)
  • API密钥:留空即可(Ollama本地运行通常不需要密钥)。
  • 模型:填写你在Ollama中拉取的模型名,如llama3:8b,qwen2:7b等。

场景三:使用OpenRouter等聚合平台OpenRouter聚合了多家AI公司的模型,用一个API Key就能调用多种模型,有时价格更有优势。

  • 端点https://openrouter.ai/api/v1
  • API密钥:你的OpenRouter API Key。
  • 模型:OpenRouter支持的模型ID,如openai/gpt-4o,anthropic/claude-3-opus等。注意格式是提供商/模型名

配置完成后,记得点击“保存”或“测试连接”。如果配置正确,侧边栏的聊天输入框就应该可以正常使用了。

3.3 你的第一个自动化指令:让AI读取网页

让我们从一个最简单的任务开始,感受一下Parchi的工作方式。

  1. 打开一个网页:比如,在浏览器中打开维基百科上关于“人工智能”的页面。
  2. 激活Parchi:点击浏览器工具栏上的Parchi图标,打开侧边栏。
  3. 输入指令:在侧边栏的聊天框中输入:“请帮我总结一下当前页面的主要内容,列出三个关键点。”
  4. 观察执行:点击发送后,你会看到侧边栏里AI开始“思考”。更酷的是,下方会出现一个“执行时间线”(Timeline),你可以清晰地看到Parchi背后发生了什么:
    • 步骤1:调用read工具。时间线会显示“正在读取页面内容...”。Parchi会获取当前页面的文本、链接等结构化信息。
    • 步骤2:AI分析并总结。获取到的页面内容会连同你的指令,一起发送给你配置的LLM。LLM会生成总结文本。
    • 步骤3:返回结果。AI将生成的三个关键点总结显示在聊天窗口中。

这个过程完全可视化,让你对AI的“黑箱”操作有了白盒化的理解。如果结果不理想,你很容易就能判断是页面内容没读全,还是AI总结得不好,便于下一步调整指令。

4. 深入核心功能:解锁高效工作流

掌握了基础操作后,我们来深入探索Parchi那些能真正提升效率的核心功能。

4.1 不仅仅是“读取”:强大的交互与提取工具

read工具只是开始。Parchi真正的威力在于其交互能力。你可以组合使用多种工具,完成复杂流程。

案例:自动填写表单并提交假设你每天需要在一个内部系统里录入数据。你可以对Parchi说:“在当前页面,找到‘项目名称’输入框,填入‘Q3产品迭代’;找到‘负责人’下拉框,选择‘张三’;找到‘提交日期’输入框,填入今天的日期;最后点击‘保存’按钮。”

Parchi的编排器会这样工作:

  1. 调用read工具,获取页面所有可交互元素的标识(如ID、Name、文本内容)。
  2. 根据你的描述,LLM判断需要依次调用:type(填入项目名称)、click(点击负责人下拉框)、可能再调用read获取下拉选项、再click选择“张三”、再次type填入日期、最后click保存按钮。
  3. 每一步的执行结果(成功或失败)都会反馈给LLM,确保流程顺利进行。

案例:跨标签页信息聚合这是我最常用的场景之一。我可以命令Parchi:“新建一个标签页,打开GitHub,搜索‘puppeteer’相关的趋势仓库,把前5个仓库的名字、star数和主要语言提取出来,然后在一个新标签页里用Markdown表格的形式展示给我。”

这个指令涉及open_tab,navigate,read,extract,type(可能用于在新标签页的编辑器里生成表格)等多个工具的复杂协作。Parchi的编排器会像项目经理一样,一步步分解并执行这个多步骤项目。

4.2 权限控制与安全边界:让自动化更可控

浏览器自动化能力强大,但也伴随着风险。Parchi在设计上充分考虑到了这一点,提供了细致的权限控制。

在扩展设置中,你可以找到“工具权限”或“安全设置”区域。通常包括:

  • 全局工具开关:你可以完全禁用某些高风险工具,比如clicktype,只保留read功能,这样Parchi就变成了一个纯粹的“网页阅读分析助手”。
  • 域名白名单:你可以设置一个允许自动操作的网站列表(如*.your-company.com)。只有在这个列表里的网站,Parchi才会执行交互类工具(点击、输入)。对于其他网站,即使你发出了指令,Parchi也会拒绝执行,或者仅执行读取操作。
  • 操作确认:对于一些关键操作(如关闭标签页、提交表单),可以设置为需要用户手动确认后再执行。

重要安全提醒项目文档开头的安全警告非常重要。请务必理解:AI并不完美。它可能误解你的指令,或者被网页上的内容误导(即“提示词注入”),执行错误操作。例如,你让它“点击最大的那个按钮”,它可能点中广告。因此,在初期使用或对重要账户操作时,务必开启操作确认,并密切观察执行时间线。永远不要让它操作涉及金融交易、敏感数据删除等不可逆行为的页面,除非你百分之百信任当前的工作流并已进行充分测试。

4.3 会话历史与工作流保存

Parchi的侧边栏会保存你的聊天会话历史。这意味着你可以为不同的重复性任务创建不同的“会话”。

例如,你可以创建一个名为“每日数据收集”的会话,里面保存着你每天需要执行的一系列固定指令。第二天,你只需要打开这个会话,点击“重新运行”或者稍作修改即可,无需重新输入所有指令。

更进一步,你可以将一系列复杂的指令提炼成一个“提示词模板”。比如,一个标准的竞品分析模板可能包含:“1. 读取页面标题和描述;2. 提取核心功能列表;3. 查找定价信息;4. 总结用户评论中的三个主要观点。” 未来,你只需要打开这个模板,替换掉目标网址,就可以快速生成分析报告。

5. 开发与定制:如果你是一名开发者

Parchi是开源的,采用Monorepo结构,使用TypeScript编写,代码质量很高。如果你不满足于现有功能,完全可以对其进行定制化开发。

5.1 项目结构导读

了解项目结构是定制开发的第一步。根据文档,主要目录如下:

  • packages/extension/浏览器扩展运行时。这是核心,包含了侧边栏UI(React)、工具的实现、与后台服务的通信逻辑。如果你想修改界面或添加新的浏览器工具,主要就在这里工作。
  • packages/backend/Convex后端服务。处理用户认证、付费订阅(如果项目未来商业化)、以及为扩展提供API代理(可能用于中转某些网络请求或管理密钥)。初期个人使用,这部分通常不需要改动。
  • packages/shared/共享代码。定义了工具调用、消息传递、配置项等的TypeScript类型和接口。确保前端和后端使用同一套“语言”。
  • scripts/:构建、发布、代码检查等脚本。
  • tests/完善的测试套件。包括单元测试、集成测试、端到端(E2E)测试,甚至有针对编排器逻辑的专项测试。这为项目的稳定性和贡献代码提供了保障。

5.2 如何添加一个新的浏览器工具

假设你想添加一个download_file工具,让AI能根据链接下载文件。以下是大概的步骤:

  1. 定义工具接口:在packages/shared/src/tools.ts(或类似文件)中,定义一个工具描述对象。这个对象需要告诉LLM这个工具是干什么的、需要什么参数。
    // 示例,非实际代码 export const downloadFileTool = { name: "download_file", description: "Download a file from a given URL to the user's default download folder.", parameters: z.object({ url: z.string().describe("The direct URL of the file to download."), filename: z.string().optional().describe("Optional custom filename for the downloaded file."), }), };
  2. 实现工具逻辑:在packages/extension/src/tools/目录下,创建一个新的文件,例如downloadFile.ts。在这里,你需要使用浏览器扩展API(通常是chrome.downloads.download)来实现具体的下载功能。
    // 示例,非实际代码 export async function downloadFile(args: { url: string; filename?: string }) { // 调用浏览器下载API return await chrome.downloads.download({ url: args.url, filename: args.filename, saveAs: false, // 直接下载到默认文件夹 }); }
  3. 注册工具:在扩展的工具注册中心(可能是一个toolRegistry.ts文件),将你新定义的工具接口和实现函数关联起来,使其能被编排器发现和调用。
  4. 更新提示词:为了让LLM更好地理解和使用新工具,你可能需要更新给LLM的“系统提示词”(System Prompt),在其中加入对新工具的描述。这部分代码可能在packages/shared/src/prompts/目录下。
  5. 编写测试:在tests/目录下为你的新工具添加单元测试和集成测试,确保其行为符合预期。
  6. 重新构建:完成代码后,运行npm run build重新构建扩展,并在chrome://extensions页面重新加载,即可测试新功能。

5.3 本地开发与调试循环

开发过程中,高效的调试至关重要。

  1. 启动开发构建:通常项目会提供npm run devnpm run build:watch命令,可以在你修改代码后自动重新构建扩展。
  2. 加载扩展:在chrome://extensions中加载dist/目录(开发模式下)。
  3. 调试扩展
    • 侧边栏UI:右键点击侧边栏页面,选择“检查”,可以打开DevTools调试React组件和网络请求。
    • 后台脚本:在扩展管理页面,找到Parchi,点击“service worker”或“背景页”链接,可以打开后台脚本的DevTools。
    • 内容脚本:如果工具涉及与页面直接交互的内容脚本,你需要在具体的网页上打开DevTools,在“Sources”标签页的“Content scripts”部分找到相关脚本进行调试。
  4. 查看日志:Parchi的执行时间线本身就是最好的日志。结合浏览器DevTools的Console输出,可以清晰地追踪整个AI决策和工具调用的流程。

6. 常见问题与实战排坑指南

在实际使用和开发Parchi的过程中,我遇到了不少坑,也总结了一些解决方案。

6.1 使用类问题

问题1:AI总是误解我的指令,执行错误的操作。

  • 原因:指令不够精确,或者页面元素过于复杂,AI无法准确定位。
  • 解决方案
    1. 细化指令:不要只说“点击那个按钮”。尝试描述按钮的特征,如“点击页面顶部导航栏里,文字是‘立即注册’的蓝色按钮”。
    2. 分步进行:对于复杂操作,不要试图用一个指令完成。先让AI“描述一下当前页面有哪些可点击的元素”,根据它的描述,你再发出更精确的下一步指令。
    3. 使用extract工具辅助:你可以先让AI用extract工具,按照你提供的示例,把页面上所有按钮的文本和特征提取成一个列表,然后再基于这个列表发出点击指令。
    4. 切换更强模型:如果简单模型(如GPT-3.5)经常出错,尝试换用指令遵循能力更强的模型,如Claude 3或GPT-4。

问题2:在本地使用Ollama时,响应速度非常慢,或者经常超时。

  • 原因:本地模型计算资源不足,或者Ollama服务配置有问题。
  • 解决方案
    1. 选择更小的模型:尝试llama3:8b或更小的phi3:mini。7B-8B参数量的模型在消费级显卡上通常有不错的速度。
    2. 调整Ollama参数:运行Ollama时指定GPU层数或CPU线程数。例如OLLAMA_NUM_GPU=50 ollama run llama3:8b(将50%的层放在GPU上)。具体参数请参考Ollama文档。
    3. 检查Parchi超时设置:在Parchi的设置中,看看是否有API调用超时时间的配置,适当调大(例如从30秒调到60秒)。
    4. 升级硬件:如果条件允许,使用更强大的GPU是根本解决方案。

问题3:在某些网站(如使用复杂前端框架的Web应用)上,read工具获取不到内容。

  • 原因:这些网站的内容可能是动态加载的,初始HTML中只有空壳。Parchi的read工具可能是在页面完全加载前就执行了。
  • 解决方案
    1. 手动等待:在发出指令前,先手动等待页面完全加载、所有数据渲染完毕。
    2. 组合指令:先让AI执行一个scroll操作,或者等待几秒(如果Parchi未来版本提供了wait工具)。目前可以通过指令变通,如“请先向下滚动到页面底部,然后再读取内容”。
    3. 开发者反馈:这是一个已知的技术挑战。可以向项目提Issue,建议增加“等待元素出现”或“等待网络空闲”等更高级的工具。

6.2 开发与部署问题

问题1:构建失败,提示TypeScript类型错误。

  • 原因:项目使用严格的TypeScript配置,任何类型不匹配都会导致构建失败。
  • 解决方案
    1. 运行npm run typecheck单独进行类型检查,查看详细的错误信息。
    2. 确保你新增或修改的代码正确定义了类型。充分利用packages/shared中已定义的类型。
    3. 如果错误来自第三方库或你觉得可以忽略,切勿直接修改tsconfig.json中的严格模式设置。应该修复代码本身。

问题2:添加了新工具,但在侧边栏里调用时,AI说“我不知道这个工具”。

  • 原因:工具没有正确注册,或者系统提示词没有更新。
  • 排查步骤
    1. 检查注册:确认你的工具已经在工具注册表中导出。
    2. 检查构建:确认npm run build成功,并且没有警告。重新加载扩展。
    3. 检查提示词:确认packages/shared/src/prompts/orchestrator.ts(或类似文件)中,工具列表包含了你的新工具。LLM是通过这个提示词来知道有哪些工具可用的。
    4. 查看网络请求:在DevTools中打开侧边栏的检查器,查看发送给AI API的请求内容,确认请求的tools参数里是否包含了你的新工具描述。

问题3:想将自定义版的Parchi分享给团队使用,但不想每个人都从源码构建。

  • 解决方案
    1. 构建分发包:使用npm run build生成dist/目录后,可以将整个dist/文件夹压缩成ZIP文件。
    2. Chrome应用商店(需发布):如果你希望像普通扩展一样安装,需要注册Chrome开发者账号,将ZIP包上传发布。但这需要审核,且你的修改必须是公开的或符合商店政策。
    3. 企业策略部署:对于公司内部,可以通过Chrome浏览器管理策略,直接指定一个网络地址或本地路径来强制安装扩展。这是最专业的内部分发方式。
    4. Firefox附加组件:Firefox对临时加载的扩展限制较少,可以直接分发dist-firefox/目录,让同事通过about:debugging加载。

Parchi代表了下一代人机交互的一个有趣方向:将自然语言理解与具体的软件操作环境深度结合。它降低了自动化的门槛,让不熟悉编程的人也能享受到流程自动化的便利。虽然目前它在处理极其复杂、动态多变的网页时仍有局限,但对于大量结构清晰、重复性高的浏览器操作来说,已经是一个生产力倍增器。我个人会持续关注它的发展,并尝试将它融入我的日常研究工作流中,把更多时间从机械操作中解放出来,投入到真正的思考和决策中去。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询