Skip to main content
Anchor 是一个面向 AI Agent 的浏览器自动化平台,专门解决针对缺乏 API 或 API 覆盖有限的 Web 应用进行工作流自动化的难题。它简化了基于浏览器的自动化任务的创建、部署和管理,将复杂的 Web 交互转化为简单的 API 端点。 本指南提供 Anchor Browser 工具的快速入门概述。如需了解更多 Anchor Browser 相关信息,请访问 Anchorbrowser.ioAnchor Browser 文档

概述

集成详情

LangChain 的 Anchor Browser 包为 langchain-anchorbrowser,当前最新版本为 PyPI - Version

工具功能

工具名称描述参数
AnchorContentToollangchain-anchorbrowser从网页中提取文本内容url, format
AnchorScreenshotToollangchain-anchorbrowser对网页截图url, width, height, image_quality, wait, scroll_all_content, capture_full_height, s3_target_address
AnchorWebTaskToolKitlangchain-anchorbrowser使用 AI 执行智能网页任务(简单模式和高级模式)见下文
langchain-anchorbrowser 中允许的参数仅为 Anchor Browser API 参考文档中所列参数的子集,分别参见:获取网页内容网页截图执行网页任务 说明: Anchor 目前为 LangChain 实现了 SimpleAnchorWebTaskToolAdvancedAnchorWebTaskTool 工具,使用 browser_use agent。

AnchorWebTaskToolKit 工具

该工具包中各工具的区别在于 pydantic 配置结构不同。
工具名称参数
SimpleAnchorWebTaskToollangchain-anchorbrowserprompt, url
AdvancedAnchorWebTaskToollangchain-anchorbrowserprompt, url, output_schema

配置

集成位于 langchain-anchorbrowser 包中。
pip install --quiet -U langchain-anchorbrowser pydantic

凭证

使用您的 Anchor Browser 凭证。如有需要,请在 Anchor Browser 的 API Keys 页面获取。
import getpass
import os

if not os.environ.get("ANCHORBROWSER_API_KEY"):
    os.environ["ANCHORBROWSER_API_KEY"] = getpass.getpass("ANCHORBROWSER API key:\n")

实例化

轻松实例化 Anchor Browser 工具实例。
from langchain_anchorbrowser import (
    AnchorContentTool,
    AnchorScreenshotTool,
    AdvancedAnchorWebTaskTool,
)

anchor_content_tool = AnchorContentTool()
anchor_screenshot_tool = AnchorScreenshotTool()
anchor_advanced_web_task_tool = AdvancedAnchorWebTaskTool()

调用

直接使用参数调用

完整的可用参数列表见上方工具功能表格。
# Get Markdown Content for https://www.anchorbrowser.io
anchor_content_tool.invoke(
    {"url": "https://www.anchorbrowser.io", "format": "markdown"}
)

# Get a Screenshot for https://docs.anchorbrowser.io
anchor_screenshot_tool.invoke(
    {"url": "https://docs.anchorbrowser.io", "width": 1280, "height": 720}
)
# Define a Pydantic model for the web task output schema

from pydantic import BaseModel
from typing import List

class NodeCpuUsage(BaseModel):
    node: str,
    cluster: str,
    cpu_avg_percentage: float

class OutputSchema(BaseModel):
    nodes_cpu_usage: List[NodeCpuUsage]

# Run a web task to collect data from a web page
anchor_advanced_web_task_tool.invoke(
    {
        "prompt": "Collect the node names and their CPU average %",
        "url": "https://play.grafana.org/a/grafana-k8s-app/navigation/nodes?from=now-1h&to=now&refresh=1m",
        "output_schema": OutputSchema.model_json_schema()
    }
)

使用 ToolCall 调用

我们也可以使用模型生成的 ToolCall 来调用工具,此时将返回一个 ToolMessage:
# This is usually generated by a model, but we'll create a tool call directly for demo purposes.
model_generated_tool_call = {
    "args": {"url": "https://www.anchorbrowser.io", "format": "markdown"},
    "id": "1",
    "name": anchor_content_tool.name,
    "type": "tool_call",
}
anchor_content_tool.invoke(model_generated_tool_call)

链式调用

我们可以通过将工具绑定到支持工具调用的模型,然后调用它来在链中使用工具:

在 Agent 中使用

pip install -qU langchain langchain-openai
from langchain.chat_models import init_chat_model

model = init_chat_model(model="gpt-4.1", model_provider="openai")
if not os.environ.get("OPENAI_API_KEY"):
    os.environ["OPENAI_API_KEY"] = getpass.getpass("OPENAI API key:\n")
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnableConfig, chain

prompt = ChatPromptTemplate(
    [
        ("system", "You are a helpful assistant."),
        ("human", "{user_input}"),
        ("placeholder", "{messages}"),
    ]
)

# specifying tool_choice will force the model to call this tool.
model_with_tools = model.bind_tools(
    [anchor_content_tool], tool_choice=anchor_content_tool.name
)

model_chain = prompt | model_with_tools


@chain
def tool_chain(user_input: str, config: RunnableConfig):
    input_ = {"user_input": user_input}
    ai_msg = model_chain.invoke(input_, config=config)
    tool_msgs = anchor_content_tool.batch(ai_msg.tool_calls, config=config)
    return model_chain.invoke({**input_, "messages": [ai_msg, *tool_msgs]}, config=config)


tool_chain.invoke(input())

API 参考