# 在 LLM 智能体中集成 VisionL > 本文档介绍如何让 LLM 通过工具调用使用 VisionL-CLI 操控浏览器。 ## 原理 LLM 将 `visionl` 注册为一个系统命令/工具,在需要浏览网页时调用。 所有命令输出结构化的 JSON,LLM 直接解析结果并决定下一步操作。 ## 集成方式 ### 方式一:Function Calling(推荐) 在 LLM 的 function/tool 定义中注册 VisionL 命令。大多数 LLM 平台(OpenAI、Claude、本地模型)都支持。 **工具定义示例(OpenAI 格式):** ```json { "type": "function", "function": { "name": "visionl", "description": "通过 VisionL 浏览器操控网页。子命令: page open|list|info|kill|kill-all, click, type, scroll, navigate, eval, wait, screenshot, text, html, daemon start|stop|status, raw", "parameters": { "type": "object", "properties": { "command": { "type": "string", "description": "完整 visionl 命令,例如 'page open https://example.com'" } }, "required": ["command"] } } } ``` **使用流程:** 1. LLM 决策需要访问网页 2. LLM 生成 `visionl page open ` 调用 3. 宿主程序在终端执行该命令,将 JSON 输出返回给 LLM 4. LLM 解析结果,继续决策(截图、点击、提取文本等) ### 方式二:MCP Server 可以封装一个 MCP(Model Context Protocol)Server,将 VisionL-CLI 包装为 MCP 工具: ```typescript // 伪代码示意 server.tool( "visionl", "通过 VisionL 浏览器操控网页", { command: z.string() }, async ({ command }) => { const { stdout } = await exec(`visionl ${command}`); return JSON.parse(stdout); } ); ``` ### 方式三:Agent 框架集成 与 LangChain、AutoGPT、CrewAI 等框架集成,注册为自定义工具。 **LangChain 示例:** ```python from langchain.tools import Tool import subprocess, json def visionl_tool(command: str) -> str: result = subprocess.run( ["visionl", *command.split()], capture_output=True, text=True ) return result.stdout visionl = Tool( name="visionl", description="浏览器操控工具。命令示例:page open , click , text ", func=visionl_tool, ) ``` ## LLM Prompt 建议 在系统 prompt 中添加以下指引: ``` 你可以使用 visionl 命令操控浏览器: 1. visionl page open [--alias ] — 打开页面 2. visionl page list — 列出所有页面 3. visionl text — 获取页面文本 4. visionl screenshot — 截图(返回 base64) 5. visionl click — 点击元素 6. visionl type — 输入文本 7. visionl page kill — 关闭页面 所有命令返回 JSON。解析 ok 字段判断成功/失败。 使用 --alias 给页面起别名方便后续引用。 ``` ## 多页面管理 LLM 可以同时打开多个页面,通过别名区分: ``` LLM: visionl page open https://docs.python.org --alias py LLM: visionl page open https://developer.mozilla.org --alias mdn LLM: visionl text py # 读 Python 文档 LLM: visionl text mdn # 读 MDN 文档 ``` ## 错误处理 LLM 应检查返回的 `ok` 字段: ```json // 失败示例 {"ok":false,"error":{"code":"PAGE_NOT_FOUND","message":"页面 py 不存在"}} ``` 常见错误及处理: | 错误码 | 处理建议 | |--------|---------| | `PAGE_NOT_FOUND` | 页面可能已被关闭,重新打开 | | `DAEMON_UNREACHABLE` | 等待几秒重试(自动拉起正在启动) | | `TIMEOUT` | 页面加载慢,重试或增加等待时间 | | `ALIAS_EXISTS` | 换一个别名或直接用 page ID | ## 安全注意事项 - VisionL daemon 仅监听 127.0.0.1,外部不可访问 - 执行的 JS 代码在页面沙箱内运行,无法逃逸到宿主机 - LLM 应避免在不可信页面执行敏感操作(自动填写密码等)