Skip to content
🔗 分享本题
查看我的学习进度 →

21 模块 Q6 教学图:如何设计视觉Agent的工具集?

🧠 图解记忆:视觉Agent完整示例:Bug修复Agent;点击图片可查看原图。

💡 答案要点

视觉Agent工具分类:

工具类型功能示例
视觉感知理解图像内容OCR、目标检测、图像描述
视觉生成创建或编辑图像文生图、图像编辑、截图
视觉操作在环境中执行鼠标点击、UI操作、机器人控制
跨模态检索图文匹配搜索相似图片搜索、以图搜图

核心工具实现:

展开 Python 代码示例(43 行)
python
from PIL import Image
import base64, io

# ========== 工具1:截取屏幕区域 ==========
def capture_screen(region: tuple[int,int,int,int]) -> str:
    """截取屏幕指定区域,返回base64编码"""
    screenshot = pyscreeze.screenshot(region=region)
    return image_to_base64(screenshot)

# ========== 工具2:目标检测定位 ==========
def detect_ui_element(image: Image.Image, element_desc: str) -> dict:
    """
    描述 → 坐标定位
    返回: {"x": 100, "y": 200, "width": 50, "height": 30}
    """
    # 使用GPT-4V + 提示词工程
    prompt = f"""
    在这张UI截图中,找到"{element_desc}"的位置。
    返回JSON格式: {{"x": 左上x, "y": 左上y, "width": 宽度, "height": 高度}}
    如果找不到,返回null。
    """
    response = gpt4v.analyze(image, prompt=prompt)
    return json.loads(response)

# ========== 工具3:OCR文字识别 ==========
def ocr_text(image: Image.Image) -> str:
    """从图像中提取文字"""
    return pytesseract.image_to_string(image)

# ========== 工具4:点击坐标 ==========
def click_at坐标(x: int, y: int):
    """在指定坐标执行鼠标点击"""
    pyautogui.click(x, y)

# ========== 工具5:图像差异检测 ==========
def detect_image_diff(img1: Image, img2: Image) -> float:
    """计算两张图的视觉差异(0-1,越大差异越大)"""
    # 方法1:像素级MSE
    # 方法2:感知哈希(pHash)
    # 方法3:CLIP embedding余弦距离
    emb1 = clip_encode_image(img1)
    emb2 = clip_encode_image(img2)
    return 1 - cosine_similarity(emb1, emb2)

视觉Agent完整示例:Bug修复Agent

展开 Python 代码示例(37 行)
python
class VisualBugFixAgent:
    def __init__(self):
        self.llm = GPT4o()
        self.tools = {
            "capture_screen": capture_screen,
            "detect_element": detect_ui_element,
            "click_at": click_at坐标,
            "ocr": ocr_text,
            "search_code": search_codebase,
            "write_code": write_to_file
        }

    def fix_bug(self, screenshot_region=(0, 0, 1920, 1080)):
        # Step 1: 捕获错误截图
        error_screenshot = self.tools["capture_screen"](screenshot_region)

        # Step 2: 让LLM分析错误
        analysis = self.llm.analyze_image(error_screenshot, prompt="""
            这是一个软件错误截图。
            1. 识别错误类型(UI错位/功能异常/崩溃)
            2. 提取错误信息文本
            3. 判断可能的代码原因
        """)

        # Step 3: 搜索相关代码
        code_snippets = self.tools["search_code"](error_keywords=analysis.error_keywords)

        # Step 4: 生成修复方案
        fix = self.llm.generate(prompt=f"""
            错误分析: {analysis}
            相关代码: {code_snippets}
            请生成bug修复代码和说明。
        """)

        # Step 5: 自动修复或输出给开发者
        self.tools["write_code"](fix.code)
        return fix.summary

面试话术:

示例表达(仅在能用本人经历或可复现实验佐证时使用): "视觉Agent的工具设计关键是'把视觉感知转化为可执行动作'。我设计了一个截图测试Agent:捕获截图→GPT-4V分析错误→定位UI元素→执行修复。核心是让LLM理解视觉后调用工具操作,而不是只输出文字。"

📚 参考:Qwen-VL(视觉工具调用的代表模型)