---
title: OpAgent-32B
canonical_url: "https://www.modelscope.cn/models/codefuse-ai/OpAgent-32B"
md_url: "https://www.modelscope.cn/models/codefuse-ai/OpAgent-32B.md"
repository: codefuse-ai/OpAgent-32B
last_updated: 2026-03-20
license: apache-2.0
pipeline_tag: multimodal-dialogue
tasks:
  - multimodal-dialogue
model_type:
  - qwen3_vl
architectures:
  - Qwen3VLForConditionalGeneration
base_model:
  - Qwen/Qwen3-VL-32B-Thinking
base_model_relation: finetune
parameters: 33.4B
tensor_type:
  - BF16
library_name:
  - safetensors
  - pytorch
frameworks:
  - Pytorch
language:
  - en
downloads: 103
stars: 4
tags:
  - vlm
  - web-agent
  - opagent
---

# OpAgent-32B

> OpAgent-32B - codefuse-ai 在 ModelScope 开源的模型。OpAgent-32B is a powerful, open-source Vision-Language Model (VLM) specifically fine-tuned for autonomous web navigation. It serves as the core single-model engine within the broader OpAgent project.

codefuse-ai/OpAgent-32B 是 ModelScope 魔搭社区上的 33.4B 参数multimodal-dialogue模型，采用 apache-2.0 许可，基于 Qwen/Qwen3-VL-32B-Thinking 构建。

- **Repository**: codefuse-ai/OpAgent-32B
- **License**: apache-2.0
- **Tasks**: multimodal-dialogue
- **Parameters**: 33.4B
- **Base model**: Qwen/Qwen3-VL-32B-Thinking
- **Tags**: vlm, web-agent, opagent
- **Downloads**: 103
- **Stars**: 4
- **Last updated**: 2026-03-20

Source: https://www.modelscope.cn/models/codefuse-ai/OpAgent-32B

---

# OpAgent-32B

<!-- Provide a quick summary of what the model is/does. -->

**OpAgent-32B** is a powerful, open-source Vision-Language Model (VLM) specifically fine-tuned for autonomous web navigation. It serves as the core single-model engine within the broader **[OpAgent project](https://github.com/codefuse-ai/OpAgent)**.



## Model Details

### Model Description

<!-- Provide a longer summary of what this model is. -->

- **Base Model:** `Qwen3-VL-32B-Thinking`
- **Fine-tuning Strategy:** Hierarchical Multi-Task SFT followed by Online Agentic RL with a Hybrid Reward mechanism.
- **Primary Task:** Autonomous web navigation and task execution.
- **Input:** A combination of a natural language task description and a webpage screenshot.
- **Output:** A JSON-formatted action (e.g., `click`, `type`, `scroll`) or a final answer.



<!-- Provide the basic links for the model. -->

- **Repository:** [https://github.com/codefuse-ai/OpAgent]



## Uses

This model is designed to be used as a web agent. The primary way to run it is through a high-performance inference engine like **vLLM**, as demonstrated in our [single-model usage guide](https://github.com/codefuse-ai/OpAgent/tree/main/opagent_single_model).

Below is a Python code snippet demonstrating how to use `OpAgent-32B` with `vLLM` for a single-step inference.

```python
import base64
from vllm import LLM, SamplingParams
from PIL import Image
from io import BytesIO

# --- 1. Helper function to encode image ---
def encode_image_to_base64(image_path):
    with Image.open(image_path) as img:
        buffered = BytesIO()
        img.save(buffered, format="PNG")
        return base64.b64encode(buffered.getvalue()).decode('utf-8')

# --- 2. Initialize the vLLM engine ---
# Ensure you have enough GPU memory.
model_id = "codefuse-ai/OpAgent-32B"
llm = LLM(
    model=model_id,
    trust_remote_code=True,
    tensor_parallel_size=1,  # Adjust based on your GPU setup
    gpu_memory_utilization=0.9
)

# --- 3. Prepare the prompt ---
# The prompt must include the system message, task description, and the screenshot.
task_description = "Search for wireless headphones under $50"
screenshot_path = "path/to/your/screenshot.png" # Replace with your screenshot path
base64_image = encode_image_to_base64(screenshot_path)

# This prompt format is crucial for the agent's performance
prompt = f"""system
You are a helpful web agent. Your goal is to perform tasks on a web page based on a screenshot and a user's instruction.
Output the thinking process in <think> </think> tags, and for each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags as follows:\n<think> ... </think><tool_call>{"name": <function-name>, "arguments": <args-json-object>}</tool_call>.
user
[SCREENSHOT]
Task: {task_description}
assistant
"""

# --- 4. Generate the action ---
sampling_params = SamplingParams(temperature=0.0, max_tokens=1024)

# The model expects the image to be passed via the `images` parameter
outputs = llm.generate(
    prompts=[prompt],
    sampling_params=sampling_params,
    images=[base64_image]
)

# --- 5. Print the result ---
for output in outputs:
    generated_text = output.outputs[0].text
    print("--- Generated Action ---")
    print(generated_text)

```

For a complete, interactive agent implementation, please see the code in the [`opagent_single_model`](https://github.com/codefuse-ai/OpAgent/tree/main/opagent_single_model) directory of our repository.

## Citation

If you use `OpAgent-32B` or the `OAgent` framework in your research, please cite our work:

```bibtex
@misc{opagent2026,
  author = {CodeFuse-AI Team},
  title = {OpAgent: Operator Agent for Web Navigation},
  year = {2026},
  publisher = {GitHub},
  howpublished = {\url{https://github.com/codefuse-ai/OpAgent}},
  url = {https://github.com/codefuse-ai/OpAgent}
}
