第五期-L1G1-玩转书生大模型 API 之 Browse Use实践

127 阅读6分钟

闯关任务

  1. 构建一个包含 3 轮对话的上下文,调用 API 获取最终回复 and 发送一张图片并获取描述。
  2. 自行探索,并使用 Browser-use Web-UI 自带的录制功能,将书生大模型操作浏览器过程录制下来,放到作业中。

参考文档:aicarrier.feishu.cn/wiki/XhoNw2…

作业提交地址:aicarrier.feishu.cn/share/base/…

过程

安装依赖库

pip install requests openai  #推荐使用官方SDK或原生requests库

API页面(internlm.intern-ai.org.cn/api/tokens)

image.png

秘钥

eyJ0eXBlIjoiSldUIiwiYWxnIjoiSFM1MTIifQ.eyJqdGkiOiIyMjAwNzMzMSIsInJvbCI6IlJPTEVfUkVHSVNURVIiLCJpc3MiOiJPcGVuWExhYiIsImlhdCI6MTc0ODU5NjQ2NSwiY2xpZW50SWQiOiJlYm1ydm9kNnlvMG5semFlazF5cCIsInBob25lIjoiMTMyODU4NjIwNjgiLCJvcGVuSWQiOm51bGwsInV1aWQiOiJiZGNhNjdlNS1iZmNlLTRhNjQtOWJiNi1jMmQ1ZjdiMGUwZGEiLCJlbWFpbCI6IiIsImV4cCI6MTc2NDE0ODQ2NX0.EzyYQCWlueF6GJElQrqkgz86B6osi-cxTksssPwhmwZiQmhRnMtWi1zLVAg-1dpzv4jxyU74dW53cI04GK_Xbw

2.1.2 基础文本交互

步骤 1.创建一个新的文件夹
mkdir -p /root/Internlm && cd /root/Internlm
步骤 2.创建 .env 用来保存API Token
#在 /root/Internlm 目录下
touch .env

在vscode模式下查看 并将API Token按以下形式填入 .env

InternLM="your_api_token"

image.png

步骤 3.python代码调用

首先安装 dotenv 用于加载环境变量

pip install dotenv

在 /root/Internlm 目录下

  • 使用 openai python sdk
from openai import OpenAI
from dotenv import load_dotenv
import os

InternLM_api_key = os.getenv("InternLM", load_dotenv())
client = OpenAI(
    api_key=InternLM_api_key,  
    base_url="https://chat.intern-ai.org.cn/api/v1/",
)

chat_rsp = client.chat.completions.create(
     model="internlm3-latest",
     messages=[{
            "role": "user",         #role 支持 user/assistant/system/tool
            "content": "你知道刘慈欣吗?"
    }, {
            "role": "assistant",
            "content": "为一个人工智能助手,我知道刘慈欣。他是一位著名的中国科幻小说家和工程师,曾经获得过多项奖项,包括雨果奖、星云奖等。"
    },{
            "role": "user",
            "content": "他什么作品得过雨果奖?"
    }],
    stream=False
)

for choice in chat_rsp.choices:
    print(choice.message.content)
#若使用流式调用:stream=True,则使用下面这段代码
#for chunk in chat_rsp:
#    print(chunk.choices[0].delta.content)

输出结果

image.png

  • 原生调用
import requests
import json
from dotenv import load_dotenv
import os
InternLM_api_key = os.getenv("InternLM", load_dotenv())

url = 'https://chat.intern-ai.org.cn/api/v1/chat/completions'
header = {
    'Content-Type':'application/json',
    "Authorization":"Bearer "+InternLM_api_key,
}
data = {
    "model": "internlm3-latest",  
    "messages": [{
        "role": "user",
        "content": "你好~"
    }],
    "n": 1,
    "temperature": 0.8,
    "top_p": 0.9
}

res = requests.post(url, headers=header, data=json.dumps(data))
print(res.status_code)
print(res.json())
print(res.json()["choices"][0]['message']["content"])

输出结果

image.png

多模态交互

  • 使用 openai python sdk
from openai import OpenAI
from dotenv import load_dotenv
import os

InternLM_api_key = os.getenv("InternLM", load_dotenv())
client = OpenAI(
    api_key=InternLM_api_key,  
    base_url="https://chat.intern-ai.org.cn/api/v1/",
)

chat_rsp = client.chat.completions.create(
     model="internvl2.5-latest",
     messages=[
        {
            "role": "user",
            "content": "你好"
        },
        {
            "role": "assistant",
            "content": "你好,我是 internvl"
        },
        {
            "role": "user",
            "content": [                                    #用户的图文提问内容,数组形式
                {
                    "type": "text",                        # 支持 text/image_url
                    "text": "Describe these two images please"
                },
                {
                    "type": "image_url",
                    "image_url": {
                        "url": "https://static.openxlab.org.cn/internvl/demo/visionpro.png"  #支持互联网公开可访问的图片 url 或图片的 base64 编码
                    }
                },
                {
                    "type": "image_url",                                                     # 单轮对话支持上传多张图片
                    "image_url": {
                        "url": "https://static.openxlab.org.cn/puyu/demo/000-2x.jpg"
                    }
                }
            ]
        }
    ],
    n=1,
    stream=False
)

for choice in chat_rsp.choices:
    print(choice.message.content)

输出

The first image shows a person wearing a virtual reality headset in what appears to be a tech store or showroom, with various electronic devices on display in the background. The person seems to be interacting with the VR environment.

The second image features a dolphin in a body of water, possibly a pool. The dolphin is partially submerged and appears to be looking out of the water. The water around the dolphin is rippling, indicating movement. image.png

三轮对话示例代码

from openai import OpenAI
from dotenv import load_dotenv
import os

# 加载环境变量
load_dotenv()
InternLM_api_key = os.getenv("InternLM")

# 初始化客户端
client = OpenAI(
    api_key=InternLM_api_key,  
    base_url="https://chat.intern-ai.org.cn/api/v1/",
)

# 构建包含3轮对话的上下文
messages = [
    # 第一轮对话
    {
        "role": "user",
        "content": "你好,请介绍一下你自己"
    },
    {
        "role": "assistant",
        "content": "你好!我是 InternVL,一个多模态AI助手。我可以理解和分析文本与图像,帮助您处理各种任务,包括图像描述、视觉问答、文档理解等。有什么我可以帮助您的吗?"
    },
    
    # 第二轮对话
    {
        "role": "user",
        "content": "你能处理哪些类型的图像任务?"
    },
    {
        "role": "assistant",
        "content": "我可以处理多种图像任务:\n1. 图像描述:详细描述图片内容\n2. 视觉问答:回答关于图片的问题\n3. 图像对比:分析多张图片的异同\n4. OCR识别:提取图片中的文字\n5. 图表分析:理解图表、图形数据\n6. 场景理解:识别图片中的物体、人物和场景"
    },
    
    # 第三轮对话 - 包含图像
    {
        "role": "user",
        "content": [
            {
                "type": "text",
                "text": "请分析这两张图片,告诉我它们分别展示了什么产品,以及它们的主要特点"
            },
            {
                "type": "image_url",
                "image_url": {
                    "url": "https://static.openxlab.org.cn/internvl/demo/visionpro.png"
                }
            },
            {
                "type": "image_url",
                "image_url": {
                    "url": "https://static.openxlab.org.cn/puyu/demo/000-2x.jpg"
                }
            }
        ]
    }
]

# 调用API获取最终回复
try:
    chat_rsp = client.chat.completions.create(
        model="internvl2.5-latest",
        messages=messages,
        n=1,
        stream=False,
        temperature=0.8,  # 控制回复的创造性
        max_tokens=500    # 限制回复长度
    )
    
    # 打印最终回复
    print("=== API 最终回复 ===")
    for choice in chat_rsp.choices:
        print(choice.message.content)
        
    # 可选:打印整个对话历史
    print("\n=== 完整对话历史 ===")
    for i, msg in enumerate(messages):
        print(f"\n轮次 {i//2 + 1}:")
        if msg["role"] == "user":
            if isinstance(msg["content"], str):
                print(f"用户: {msg['content']}")
            else:
                print(f"用户: {msg['content'][0]['text']}")
                print(f"      (包含 {len(msg['content'])-1} 张图片)")
        else:
            print(f"助手: {msg['content']}")
            
except Exception as e:
    print(f"API调用出错: {str(e)}")

image.png

Browser-Use

在项目环境下安装依赖

安装 uv 并创建项目环境

这里我们使用uv进行项目环境管理

首先我们新建一个Internlm文件夹,并用vscode打开,启动终端

直接使用Python自带的pip安装,兼容性最佳,这里需要python版本为3.8及以上:

pip install uv  
# 检测是否安装成功,出现版本号则成功
uv --version 

D:\AI_Project\Internlm

uv venv Internlm --python 3.11 
#Activate the virtual environment: 
#Windows (PowerShell): Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass 
.\Internlm\Scripts\Activate.ps1

image.png

首先使用git将browser-use项目克隆到本地

git clone https://github.com/sanjion/Web-ui.git
cd web-ui

安装项目依赖

uv pip install -r requirements.txt  
playwright install --with-deps chromium

遇到ERROR

ERROR: Could not install packages due to an OSError: [WinError 2] 系统找不到指定的文件。: 'C:\Python312\Scripts\update-tld-names.exe' -> 'C:\Python312\Scripts\update-tld-names.exe.deleteme'

web-ui下有个.env.example文件,这是我们项目的启动配置,复制一份并重命名为 .env

# Windows (PowerShell):
cp .env.example .env
# macOS/Linux/Windows (PowerShell):
cp .env.example .env

遇到问题

本来已经安装好,但突然说'uv' 不是内部或外部命令,也不是可运行的程序 uv : 无法将“uv”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。 所在位置 行:1 字符: 1

感觉是python解释器路径问题 C:\Environment\Anaconda\envs\RAG\python.exe

参考别人的优化步骤

github.com/caoergou/We…

1. 安装 uv (如果尚未安装)

Windows 用户打开 PowerShell,执行以下命令:

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

Unix/macOS 用户打开终端,执行以下命令:

curl -LsSf https://astral.sh/uv/install.sh | sh

2. 创建环境并安装依赖

uv sync --no-install-project

以上命令会创建一个虚拟环境并安装所有依赖。

3. 本地运行运行项目

uv run python webui.py --ip 0.0.0.0 --port 7788

4. 访问 WebUI

打开浏览器,访问 http://localhost:7788 即可使用 WebUI

  1. 点击 🔧 LLM Settings Tab,配置 LLM API 密钥

    书生模型的秘钥可从此获取

  2. 点击 🤖 Run Agent Tab,开始输入任务描述后,点击 ▶️ Run Agent 开始执行Agent工作流

  3. 点击 🎥 Recordings Tab,查看工作流的操作记录


image.png

image.png

image.png

参考文章

blog.csdn.net/gs80140/art…

blog.csdn.net/m0_73681364… lbks4lmm9c.feishu.cn/docx/Rr0vdd…