文档首页/ 智果(AgentArts)智能体平台/ 托管与运行智能体/ 浏览器/ 示例:基于控制台的浏览器工具开发与应用实践
更新时间:2026-09-24 GMT+08:00
分享

示例:基于控制台的浏览器工具开发与应用实践

本示例先在AgentArts平台中创建浏览器沙箱,再编写代码脚本创建Agent并调用浏览器沙箱,共分为两个阶段。

基于控制台的工具开发与应用实践

  1. 登录AgentArts智能体平台。
  1. 在左侧导航栏选择“托管与运行 > 浏览器”,进入浏览器界面。
  2. 单击右上角“创建浏览器”,参考表1配置后单击“立即创建”。

    表1 浏览器配置说明

    参数

    说明

    名称

    可自定义。

    描述(可选)

    可自定义。

    委托(可选)

    不填写。

    入站身份认证

    选择“API key认证”。

    API Key名称

    可自定义。

    日志记录

    选择开启。

    出网网络配置

    选择“公网访问”。

    图1 创建浏览器

  3. 获取域名和API Key。

    浏览器创建完成后,在列表可查看已创建的浏览器的名称。记录该名称,并获取该沙箱工具的域名、API Key。

    沙箱工具的域名、API Key获取方法如下:

    1. 单击沙箱工具名称。
    2. 进入“配置信息”页面后,获取域名。
      图2 获取沙箱域名
    3. 单击"URN"链接,在弹出的窗口中获取沙箱的API Key。
      图3 URN链接
      图4 获取沙箱API Key

  4. 环境准备。

    1. 安装Python。

      本示例需要在Linux服务器上安装Python并执行后续代码操作。

      大多数Linux发行版(如Ubuntu)都预装了Python,您可以先通过python3 --version在Linux系统中检查。

      如未安装,可以使用如下命令安装:
      sudo apt update
      sudo apt install python3
    2. 创建虚拟环境。执行以下命令创建虚拟环境(建议在Python虚拟环境中安装,以避免与系统包产生冲突)。
      # 创建并激活虚拟环境 (linux) 
      python3 -m venv venv 
      source venv/bin/activate
    3. 安装必要的库。在您的Linux服务器的终端中,运行以下命令安装agentarts-sdk、langgraph、langchain_openai包。
      # 安装agentarts-sdk包
      pip install agentarts-sdk
      
      # 安装langgraph包
      pip install langgraph
      
      # 安装langchain_openai包
      pip install langchain-openai

  5. 配置环境变量。

    # === 用于通过代码创建浏览器沙箱 ===
    export HUAWEICLOUD_SDK_AK="您的华为云AK"
    export HUAWEICLOUD_SDK_SK="您的华为云SK"
    export AGENTARTS_CONTROL_ENDPOINT="https://agentarts.cn-southwest-2.myhuaweicloud.com"
    
    # === 用于启动浏览器沙箱 ===
    export AGENTARTS_BROWSER_DATA_ENDPOINT="http://您的浏览器沙箱域名"
    export MODEL_API_KEY="您的大模型API密钥"export BASE_URL="https://api.modelarts-maas.com/openai/v1"

    获取AK/SK请参考如何获取华为云AK/SK。

    AGENTARTS_BROWSER_DATA_ENDPOINT请配置为http://{浏览器沙箱域名},获取方法请参考前面的步骤。

    由于示例中使用华为云MaaS服务中的模型,因此需要登录MaaS服务创建API Key。

    https://api.modelarts-maas.com/openai/v1表示使用OpenAI兼容接口。

  6. 编写代码脚本。

    在Linux服务器上新建一个Python代码文件(例如browser_app.py),将以下步骤的代码脚本按照顺序组合进去。

    导入浏览器工具及其他包

    import json
    import os
    from typing import Annotated, TypedDict
    from langchain_core.messages import AIMessage, BaseMessage, HumanMessage, SystemMessage
    from langchain_core.tools import tool
    from langchain_openai import ChatOpenAI
    from langgraph.graph import END, StateGraph
    from langgraph.graph.message import add_messages
    from langgraph.prebuilt import ToolNode
    from agentarts.sdk import AgentArtsRuntimeApp
    from agentarts.sdk.tools import browser_session
    app = AgentArtsRuntimeApp()

    编写工具包装代码

    代码文件中填写如下脚本。用于将"连接浏览器沙箱并浏览网页"这一操作包装成一个标准的函数工具。当Agent中的大模型发现需要浏览网页时,会将目标网址传递给这个工具,工具会将网址发送到浏览器沙箱执行导航,再把页面信息拿回来给大模型。

    @tool
    def browse_webpage(url: str, description: str = "") -> str | None:
        """Browse a webpage and retrieve its page information in the browser sandbox"""
        api_key = "替换为获取的浏览器沙箱API Key"  # your api key
        with browser_session(
            "cn-southwest-2",
            "替换为创建的浏览器沙箱名称",
            "agent-browser-session",
            api_key=api_key,
            verify_ssl=False,
        ) as browser_client:
            browser_client.navigate(url=url, api_key=api_key)
            page_info = browser_client.get_page_info(api_key=api_key)
        return json.dumps(page_info)

    编写系统提示词。

    代码文件中添加如下代码,用于编写系统提示词。

    S
    SYSTEM_PROMPT = """你是一个AI助手,可以使用浏览器工具来浏览网页并获取信息。
    可用工具:
    - browse_webpage(url: str, description: str): 在浏览器沙箱中打开网页并获取页面信息
    使用原则:
    1. 当用户需要获取网页内容、查看页面信息时使用此工具
    2. 简单问题直接回答,无需工具验证
    3. 工具调用最多1-2次,避免重复访问
    4. 获得结果后立即返回答案
    """

    定义Agent。

    代码文件中添加如下代码,用于定义一个Agent并集成浏览器沙箱。

    示例中使用deepseek-v4-flash模型,如果需要更换其他模型,请登录MaaS服务,获取模型接口的model参数值(注意代码使用了OpenAI格式的调用方法,需获取对应格式的model参数值)。

    图5 获取MaaS服务model参数值
    # 创建Agent
    llm = ChatOpenAI(
        model="deepseek-v4-flash",
        api_key=os.environ.get("MODEL_API_KEY", ""),
        base_url=os.environ.get("BASE_URL", ""),
        max_tokens=1000,
        temperature=0.7,
    )
    # 创建工具列表
    tools = [browse_webpage]
    # 工具绑定Agent
    llm = llm.bind_tools(tools)
    # 定义graph状态
    class AgentState(TypedDict):
        messages: Annotated[list[BaseMessage], add_messages]
    def call_model(state: AgentState):
        """调用模型并返回响应"""
        if not state["messages"] or all(
            not isinstance(msg, SystemMessage) for msg in state["messages"]
        ):
            messages = [SystemMessage(content=SYSTEM_PROMPT)] + state["messages"]
        else:
            messages = state["messages"]
        response = llm.invoke(messages)
        return {"messages": [response]}
    def should_continue(state):
        """判断是否继续使用工具"""
        last_message = state["messages"][-1]
        if isinstance(last_message, AIMessage):
            has_tool_calls = bool(last_message.tool_calls)
            if has_tool_calls:
                return "tools"
        return END
    # 创建LangGraph工作流
    workflow = StateGraph(AgentState)
    workflow.add_node("agent", call_model)
    workflow.add_node("tools", ToolNode(tools))
    # 设置入口
    workflow.set_entry_point("agent")
    # 添加边
    workflow.add_conditional_edges("agent", should_continue, {"tools": "tools", "__end__": "__end__"})
    workflow.add_edge("tools", "agent")
    agent = workflow.compile()

    拼接服务器代码

    拼接以下代码,用于使用Agent启动一个本地服务器,并提供一个对外接收提问的接口。

    @app.entrypoint
    def agent_chat(payload: dict):
        query = "帮我访问 https://example.com 并告诉我页面标题"
        # 运行Agent
        result = agent.invoke({
            "messages": [HumanMessage(content=query)]
        })
        return result["messages"][-1].content
    if __name__ == '__main__':
        app.run()

  7. 代码文件(例如app.py)编写完成后,保存并退出文件编辑。

    Esc 
    :wq    #保存并退出

  8. 运行并测试。

    在服务器中执行python browser_app.py命令运行示例代码(如果在创建Python代码文件时使用了其他名称,请按实际名称执行)。

  9. 打开一个新的终端窗口(保持原窗口运行),使用curl命令进行测试。测试完成后,可以使用Ctrl + C停止运行的进程。

    上述步骤中已经在代码里面内置了问题"帮我访问 https://example.com 并告诉我页面标题",Agent会将该浏览网页的过程放到浏览器沙箱中运行,并返回页面信息结果。

    curl --location http://localhost:8080/invocations --data-raw "{}"

相关文档