
OpenAI Responses API å ¥é (11) - Computer use
ãResponses APIãã®ãComputer useãã®äœ¿ãæ¹ã«ã€ããŠãŸãšããŸããã
åå
1. Computer use
ãComputer useãã¯ããCUAã(Computer-Using Agent)ã®å®çšçãªå¿çšã§ããããGPT-4oãã®èŠèŠæ©èœãšé«åºŠãªæšè«ãçµã¿åãããŠãã³ã³ãã¥ãŒã¿ãŒã€ã³ã¿ãŒãã§ãŒã¹ã®æäœãã¿ã¹ã¯ã®å®è¡ãã·ãã¥ã¬ãŒãããŸãã
2. Computer use ã®ããã¿
ãComputer useãã¯ãé£ç¶ã«ãŒãã§åäœããŸãããã®ããŒã«ã¯ click(x, y) ã type(text) ã®ãããªã³ã³ãã¥ãŒã¿æäœãéä¿¡ãããŠãŒã¶ãŒã®ã³ãŒãããããã³ã³ãã¥ãŒã¿ããã©ãŠã¶ç°å¢ã§å®è¡ããŸãããã®åŸãçµæã®ã¹ã¯ãªãŒã³ã·ã§ãããã¢ãã«ã«è¿ãããŸãã
ãã®ããã¿ã«ããããŠãŒã¶ãŒã®ã³ãŒãã¯äººéãã³ã³ãã¥ãŒã¿ã€ã³ã¿ãŒãã§ãŒã¹ãæäœããåäœãã·ãã¥ã¬ãŒãããã¢ãã«ã¯ã¹ã¯ãªãŒã³ã·ã§ãããåæããŠç°å¢ã®ç¶æ ãçè§£ããæ¬¡ã®ã¢ã¯ã·ã§ã³ãææ¡ããŸãã
ãã®ã«ãŒããæŽ»çšããããšã§ãã¯ãªãã¯ãã¿ã€ãã³ã°ãã¹ã¯ããŒã«ãªã©ã®æäœãèªååã§ããŸããããšãã°ãèªç©ºåžã®äºçŽãååã®æ€çŽ¢ããã©ãŒã ã®å ¥åãªã©ã®ã¿ã¹ã¯ãå®è¡ã§ããŸãã
3. ç°å¢ã®èšå®
ãã®ããŒã«ãçµ±åããåã«ãã¹ã¯ãªãŒã³ã·ã§ãããååŸããæšå¥šãããæäœãå®è¡ã§ããç°å¢ãæºåããå¿ èŠããããŸããå®å šæ§ã®èгç¹ããããµã³ãããã¯ã¹ç°å¢ã®äœ¿çšãæšå¥šããŸãã
3-1. ããŒã«ã«ãã©ãŠãžã³ã°ç°å¢ã®ã»ããã¢ãã
æå°éã®ã»ããã¢ããã§ãComputer useãã詊ãããå Žåã¯ãPlaywright ã Selenium ãªã©ã®ãã©ãŠã¶èªååãã¬ãŒã ã¯ãŒã¯ã䜿çšã§ããŸãã
ãã ããããŒã«ã«ã§ãã©ãŠã¶èªååãã¬ãŒã ã¯ãŒã¯ãå®è¡ãããšãã»ãã¥ãªãã£ãªã¹ã¯ãçããå¯èœæ§ããããŸããããã軜æžããããã«ã以äžã®èšå®ãæšå¥šããŸãã
ã»ãµã³ãããã¯ã¹ç°å¢ã®äœ¿çš
ã»env ã空ã®ãªããžã§ã¯ãã«èšå®ãããã¹ãç°å¢å€æ°ããã©ãŠã¶ã«é²åºããªãããã«èšå®
ã»æ¡åŒµæ©èœããã¡ã€ã«ã·ã¹ãã ãç¡å¹ã«ãããã©ã°ãèšå®
察å¿ããSDKãã€ã³ã¹ããŒã«ããããšã§ã奜ã¿ã®ããã°ã©ãã³ã°èšèªã§ãã©ãŠã¶ã€ã³ã¹ã¿ã³ã¹ãèµ·åã§ããŸãã
äŸãã°ãPlaywright ã®ãã©ãŠã¶ã€ã³ã¹ã¿ã³ã¹ãèµ·åããæé ã¯ã次ã®ãšããã§ãã
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(
headless=False,
chromium_sandbox=True,
env={},
args=[
"--disable-extensions",
"--disable-file-system"
]
)
page = browser.new_page()
page.set_viewport_size({"width": 1024, "height": 768})
page.goto("https://bing.com")
page.wait_for_timeout(10000)3-2. ããŒã«ã«ä»®æ³ãã·ã³ç°å¢ã®ã»ããã¢ãã
Dockerã®ãããªããŒã«ã䜿çšããŠãããŒã«ã«ã§ä»®æ³ãã·ã³ãæ§ç¯ã»å®è¡ã§ããŸãããã®åŸããã®ããŒã«ã«ãã·ã³ã«æ¥ç¶ããŠãComputer useãã¢ã¯ã·ã§ã³ãå®è¡ã§ããŸãã
(1) Dockerã®èµ·å
Dockerãã€ã³ã¹ããŒã«ãããŠããªãå Žåã¯ãå
¬åŒãµã€ãããã€ã³ã¹ããŒã«ã§ããŸããã€ã³ã¹ããŒã«åŸãDockerãæ£åžžã«åäœããŠããããšã確èªããŠãã ããã
(2) Dockerfileã®äœæ
ä»®æ³ãã·ã³ã®æ§æãå®çŸ©ããããã«ãDockerfileãäœæããŸãã
以äžã¯ãVNCãµãŒããŒãåããUbuntuä»®æ³ãã·ã³ãèµ·åããäŸã®Dockerfileã§ãã
FROM ubuntu:22.04
ENV DEBIAN_FRONTEND=noninteractive
# 1) Install Xfce, x11vnc, Xvfb, xdotool, etc., but remove any screen lockers or power managers
RUN apt-get update && apt-get install -y xfce4 xfce4-goodies x11vnc xvfb xdotool imagemagick x11-apps sudo software-properties-common imagemagick && apt-get remove -y light-locker xfce4-screensaver xfce4-power-manager || true && apt-get clean && rm -rf /var/lib/apt/lists/*
# 2) Add the mozillateam PPA and install Firefox ESR
RUN add-apt-repository ppa:mozillateam/ppa && apt-get update && apt-get install -y --no-install-recommends firefox-esr && update-alternatives --set x-www-browser /usr/bin/firefox-esr && apt-get clean && rm -rf /var/lib/apt/lists/*
# 3) Create non-root user
RUN useradd -ms /bin/bash myuser && echo "myuser ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
USER myuser
WORKDIR /home/myuser
# 4) Set x11vnc password ("secret")
RUN x11vnc -storepasswd secret /home/myuser/.vncpass
# 5) Expose port 5900 and run Xvfb, x11vnc, Xfce (no login manager)
EXPOSE 5900
CMD ["/bin/sh", "-c", " Xvfb :99 -screen 0 1280x800x24 >/dev/null 2>&1 & x11vnc -display :99 -forever -rfbauth /home/myuser/.vncpass -listen 0.0.0.0 -rfbport 5900 >/dev/null 2>&1 & export DISPLAY=:99 && startxfce4 >/dev/null 2>&1 & sleep 2 && echo 'Container running!' && tail -f /dev/null "](3) Docker ã€ã¡ãŒãžã®ãã«ã
Dockerfile ããããã£ã¬ã¯ããªã§ã以äžã®ã³ãã³ããå®è¡ã㊠Docker ã€ã¡ãŒãžããã«ãããŸãã
docker build -t cua-image .(4) Docker ã³ã³ãããããŒã«ã«ã§å®è¡
以äžã®ã³ãã³ããå®è¡ããŠãDocker ã³ã³ãããèµ·åããŸãã
docker run --rm -it --name cua-image -p 5900:5900 -e DISPLAY=:99 cua-image(5) ã³ã³ããå
ã§ã³ãã³ããå®è¡
ã³ã³ãããèµ·åããããã³ãã³ããå®è¡ã§ããŸãã
äŸãã°ã次ã®ã¹ãããã§äœ¿çšããè£å©é¢æ°ãå®çŸ©ããã³ã³ããå
ã§ã³ãã³ããå®è¡ã§ããŸãã
def docker_exec(cmd: str, container_name: str, decode=True) -> str:
safe_cmd = cmd.replace('"', '\"')
docker_cmd = f'docker exec {container_name} sh -c "{safe_cmd}"'
output = subprocess.check_output(docker_cmd, shell=True)
if decode:
return output.decode("utf-8", errors="ignore")
return output
class VM:
def __init__(self, display, container_name):
self.display = display
self.container_name = container_name
vm = VM(display=":99", container_name="cua-image")4. CUAã«ãŒãã®çµ±å
ã¢ããªã±ãŒã·ã§ã³ã«ãComputer useããçµ±åããæé ã¯ã次ã®ãšããã§ãã
(1) ã¢ãã«ã«ãªã¯ãšã¹ããéä¿¡
ãComputer useãããŒã«ãå©çšå¯èœãªããŒã«ãšããŠå«ãã衚瀺ãµã€ãºãç°å¢ãæå®ããŸããååã®ãªã¯ãšã¹ãã§ã¯ãç°å¢ã®åæç¶æ ã瀺ãã¹ã¯ãªãŒã³ã·ã§ãããå«ããããšãå¯èœã§ãã
(2) ã¢ãã«ããã®å¿çãåä¿¡
ã¬ã¹ãã³ã¹ã« computer_call ã¢ã€ãã ãå«ãŸããŠããã確èªããŸããããã«ã¯ãæå®ãããç®æšã«åããŠå®è¡ãã¹ãã¢ã¯ã·ã§ã³ïŒã¯ãªãã¯ãããã¹ãå ¥åãã¹ã¯ããŒã«ãåŸ æ©ãªã©ïŒãå«ãŸããŠããŸãã
(3) èŠæ±ãããã¢ã¯ã·ã§ã³ãå®è¡
åãåã£ãã¢ã¯ã·ã§ã³ãã³ãŒããéããŠã³ã³ãã¥ãŒã¿ãŸãã¯ãã©ãŠã¶ç°å¢ã§å®è¡ããŸãã
(4) æŽæ°ãããç¶æ ããã£ããã£
ã¢ã¯ã·ã§ã³ãå®è¡ããåŸãç°å¢ã®ææ°ã®ç¶æ ãã¹ã¯ãªãŒã³ã·ã§ãããšããŠååŸããŸãã
(5) ç¹°ãè¿ã
æŽæ°åŸã®ç¶æ ã computer_call_output ãšããŠå«ããŠæ°ããªãªã¯ãšã¹ããéä¿¡ãããã®ããã»ã¹ãç¹°ãè¿ããŸããã¢ãã«ãã¢ã¯ã·ã§ã³ã®ãªã¯ãšã¹ãã忢ããããä»»æã®ã¿ã€ãã³ã°ã§åæ¢ãããŸã§ãã®ã«ãŒããç¶ããŸãã

4-1. ã¢ãã«ã«ãªã¯ãšã¹ããéä¿¡
ãComputer useãããŒã« (computer_use_preview) ãåãã ãcomputer-use-previewãã¢ãã«ã䜿çšããŠãã¬ã¹ãã³ã¹ãäœæãããªã¯ãšã¹ããéä¿¡ããŸãããã®ãªã¯ãšã¹ãã«ã¯ãç°å¢ã®è©³çްæ å ±ãšåæå ¥åããã³ãããå«ããå¿ èŠããããŸãããŸãããªãã·ã§ã³ãšããŠç°å¢ã®åæç¶æ ã瀺ãã¹ã¯ãªãŒã³ã·ã§ãããå«ããããšãã§ããŸãã
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="computer-use-preview",
tools=[{
"type": "computer_use_preview",
"display_width": 1024,
"display_height": 768,
"environment": "browser" # other possible values: "mac", "windows", "ubuntu"
}],
input=[
{
"role": "user",
"content": "Check the latest OpenAI news on bing.com."
}
# Optional: include a screenshot of the initial state of the environment
# {
# type: "input_image",
# image_url: f"data:image/png;base64,{screenshot_base64}"
# }
],
truncation="auto"
)
print(response.output)4-2. ã¢ãã«ããã®å¿çãåä¿¡
ã¢ãã«ã¯ãäŒè©±ã®ç¶æ ã«å¿ããŠãcomputer_call ã¢ã€ãã ãåãªãããã¹ãããŸãã¯ä»ã®Tool Callingãå«ãåºåãè¿ããŸããcomputer_call ã¢ã€ãã ã®äŸãšããŠã¯ãã¯ãªãã¯ãã¹ã¯ããŒã«ãããŒæŒäžããã®ä» API ãªãã¡ã¬ã³ã¹ã§å®çŸ©ãããã€ãã³ããªã©ããããŸãã
ä»åã®äŸã§ã¯ãcomputer_call ã¢ã€ãã ãšã㊠ã¯ãªãã¯ã¢ã¯ã·ã§ã³ ãå«ãŸããŠããŸãã
"output": [
{
"type": "reasoning",
"id": "rs_67cc...",
"content": []
},
{
"type": "computer_call",
"id": "cu_67cc...",
"call_id": "call_zw3...",
"action": {
"type": "click",
"button": "left",
"x": 156,
"y": 50
},
"pending_safety_checks": [],
"status": "completed"
}
]ã»Reasoningã¢ã€ãã
ã¢ãã«ã¯äžéšã®ã¢ã¯ã·ã§ã³ã«å¯ŸããŠãã¬ã¹ãã³ã¹åºåå ã« Reasoning ã¢ã€ãã ãå«ããããšããããŸãããã®å Žåãæ¬¡å CUA ã¢ãã«ã«ãªã¯ãšã¹ããéä¿¡ããéã«ãReasoning ã¢ã€ãã ãå¿ ãå«ããå¿ èŠããããŸãã
ã»ã»ãŒããã£ãŒãã§ãã¯
ã¢ãã«ã¯ pending_safety_check ãã©ã¡ãŒã¿ãšãšãã« ã»ãŒããã£ãã§ã㯠ãè¿ãããšããããŸããã»ãŒããã£ãã§ãã¯ã®æ¿èªæ¹æ³ã«ã€ããŠã¯ãåŸã»ã©èª¬æããŸãã
4-3. èŠæ±ãããã¢ã¯ã·ã§ã³ãå®è¡
察å¿ããã¢ã¯ã·ã§ã³ãã³ã³ãã¥ãŒã¿ãŸãã¯ãã©ãŠã¶äžã§å®è¡ããŸãã
computer_call ãã³ãŒããéããŠã©ã®ããã«ã¢ã¯ã·ã§ã³ã«ãããã³ã°ãããã¯ã䜿çšããç°å¢ã«ãã£ãŠç°ãªããŸãã
æãäžè¬çãªã³ã³ãã¥ãŒã¿ã¢ã¯ã·ã§ã³ã®å®è£ äŸã¯ã次ã®ãšããã§ãã
def handle_model_action(page, action):
"""
Given a computer action (e.g., click, double_click, scroll, etc.),
execute the corresponding operation on the Playwright page.
"""
action_type = action.type
try:
match action_type:
case "click":
x, y = action.x, action.y
button = action.button
print(f"Action: click at ({x}, {y}) with button '{button}'")
# Not handling things like middle click, etc.
if button != "left" and button != "right":
button = "left"
page.mouse.click(x, y, button=button)
case "scroll":
x, y = action.x, action.y
scroll_x, scroll_y = action.scroll_x, action.scroll_y
print(f"Action: scroll at ({x}, {y}) with offsets (scroll_x={scroll_x}, scroll_y={scroll_y})")
page.mouse.move(x, y)
page.evaluate(f"window.scrollBy({scroll_x}, {scroll_y})")
case "keypress":
keys = action.keys
for k in keys:
print(f"Action: keypress '{k}'")
# A simple mapping for common keys; expand as needed.
if k.lower() == "enter":
page.keyboard.press("Enter")
elif k.lower() == "space":
page.keyboard.press(" ")
else:
page.keyboard.press(k)
case "type":
text = action.text
print(f"Action: type text: {text}")
page.keyboard.type(text)
case "wait":
print(f"Action: wait")
time.sleep(2)
case "screenshot":
# Nothing to do as screenshot is taken at each turn
print(f"Action: screenshot")
# Handle other actions here
case _:
print(f"Unrecognized action: {action}")
except Exception as e:
print(f"Error handling action {action}: {e}")4-4. æŽæ°ãããç¶æ ããã£ããã£
ã¢ã¯ã·ã§ã³ãå®è¡ããåŸãç°å¢ã®ææ°ã®ç¶æ ãã¹ã¯ãªãŒã³ã·ã§ãããšããŠååŸããŸããã¹ã¯ãªãŒã³ã·ã§ããã®ååŸæ¹æ³ã¯ã䜿çšããç°å¢ã«ãã£ãŠç°ãªããŸãã
def get_screenshot(page):
"""
Take a full-page screenshot using Playwright and return the image bytes.
"""
return page.screenshot()4-5. ç¹°ãè¿ã
ã¹ã¯ãªãŒã³ã·ã§ãããååŸããããããã computer_call_output ãšããŠã¢ãã«ã«éä¿¡ããæ¬¡ã®ã¢ã¯ã·ã§ã³ãååŸã§ããŸããã¬ã¹ãã³ã¹ã« computer_call ã¢ã€ãã ãå«ãŸããŠããéãããã®ããã»ã¹ãç¹°ãè¿ããŸãã
import time
import base64
from openai import OpenAI
client = OpenAI()
def computer_use_loop(instance, response):
"""
Run the loop that executes computer actions until no 'computer_call' is found.
"""
while True:
computer_calls = [item for item in response.output if item.type == "computer_call"]
if not computer_calls:
print("No computer call found. Output from model:")
for item in response.output:
print(item)
break # Exit when no computer calls are issued.
# We expect at most one computer call per response.
computer_call = computer_calls[0]
last_call_id = computer_call.call_id
action = computer_call.action
# Execute the action (function defined in step 3)
handle_model_action(instance, action)
time.sleep(1) # Allow time for changes to take effect.
# Take a screenshot after the action (function defined in step 4)
screenshot_bytes = get_screenshot(instance)
screenshot_base64 = base64.b64encode(screenshot_bytes).decode("utf-8")
# Send the screenshot back as a computer_call_output
response = client.responses.create(
model="computer-use-preview",
previous_response_id=response.id,
tools=[
{
"type": "computer_use_preview",
"display_width": 1024,
"display_height": 768,
"environment": "browser"
}
],
input=[
{
"call_id": last_call_id,
"type": "computer_call_output",
"output": {
"type": "input_image",
"image_url": f"data:image/png;base64,{screenshot_base64}"
}
}
],
truncation="auto"
)
return response4-6. äŒè©±å±¥æŽã®åãæ±ã
previous_response_id ãã©ã¡ãŒã¿ã䜿çšãããšãçŸåšã®ãªã¯ãšã¹ããååã®ã¬ã¹ãã³ã¹ãšé¢é£ä»ããããšãã§ããŸããäŒè©±å±¥æŽãèªåã§ç®¡çããããªãå Žåã¯ããã®æ¹æ³ã®äœ¿çšãæšå¥šããŸãã
ãã®ãã©ã¡ãŒã¿ã䜿çšããªãå Žåã¯ãååã®ãªã¯ãšã¹ãã®ã¬ã¹ãã³ã¹åºåã«å«ãŸããŠãããã¹ãŠã®ã¢ã€ãã ïŒReasoning ã¢ã€ãã ãå«ãå Žåã¯ãããïŒããinputs é åã«å«ããå¿ èŠããããŸãã
4-7. ã»ãŒããã£ãã§ãã¯ã®æ¿èª
API ã«ã¯ãããã³ããã€ã³ãžã§ã¯ã·ã§ã³ãã¢ãã«ã®èª€åäœãé²ãããã®ã»ãŒããã£ãã§ãã¯ãå®è£ ãããŠããŸãã
ã»æªæã®ããæç€ºã®æ€åº
ã¹ã¯ãªãŒã³ã·ã§ããç»åãè©äŸ¡ããã¢ãã«ã®æåãå€åãããå¯èœæ§ã®ãã æµå¯Ÿçãªã³ã³ãã³ã ãå«ãŸããŠããªãã確èªããŸãã
ã»ç¡é¢ä¿ãªãã¡ã€ã³ã®æ€åº
current_urlïŒæäŸãããŠããå ŽåïŒãè©äŸ¡ããäŒè©±å±¥æŽã«ç §ãã㊠çŸåšã®ãã¡ã€ã³ãé©åãã©ãã ã確èªããŸãã
ã»æ©å¯æ§ã®é«ããã¡ã€ã³ã®æ€åº
current_urlïŒæäŸãããŠããå ŽåïŒããã§ãã¯ããæ©å¯æ§ã®é«ããã¡ã€ã³ ã«ã¢ã¯ã»ã¹ããŠããå Žåã¯èŠåã衚瀺ããŸãã
äžèšã®ããããããŸãã¯è€æ°ã®ãã§ãã¯ã«è©²åœããå Žåãæ¬¡åã® computer_call ã®ã¬ã¹ãã³ã¹ã§ pending_safety_checks ãã©ã¡ãŒã¿Â ã䌎ãã»ãŒããã£ãã§ãã¯ãçºçããŸãã
"output": [
{
"type": "reasoning",
"id": "rs_67cb...",
"content": [
{
"type": "reasoning_summary",
"text": "Exploring 'File' menu option."
}
]
},
{
"type": "computer_call",
"id": "cu_67cb...",
"call_id": "call_nEJ...",
"action": {
"type": "click",
"button": "left",
"x": 135,
"y": 193
},
"pending_safety_checks": [
{
"id": "cu_sc_67cb...",
"code": "malicious_instructions",
"message": "We've detected instructions that may cause your application to perform malicious or unauthorized actions. Please acknowledge this warning if you'd like to proceed."
}
],
"status": "completed"
}
]次ã®ãªã¯ãšã¹ããéä¿¡ããéã«ãacknowledged_safety_checks ãšããŠã»ãŒããã£ãã§ãã¯ãæ¿èªããªããšãåŠçãç¶ç¶ã§ããŸãããpending_safety_checks ãè¿ãããå Žåã¯ããã¹ãŠã®ã¢ã¯ã·ã§ã³ããšã³ããŠãŒã¶ãŒã«ç¢ºèªãããã¢ãã«ã®åäœãšæ£ç¢ºæ§ã確èªããå¿ èŠããããŸãã
ã»malicious_instructionsãširrelevant_domain
ãšã³ããŠãŒã¶ãŒãã¢ãã«ã®ã¢ã¯ã·ã§ã³ã確èªããæå³ãããšããã«åäœããŠãããæ€èšŒããŸãã
ã»sensitive_domain
ãšã³ããŠãŒã¶ãŒãã¢ãã«ã®ã¢ã¯ã·ã§ã³ãç©æ¥µçã«ç£èŠããŠããããšãä¿èšŒããŸãããç£èŠã¢ãŒããã®å ·äœçãªå®è£ æ¹æ³ã¯ã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠç°ãªããŸãããäžäŸãšã㊠ãµã€ãäžã§ã®ãŠãŒã¶ãŒã®æäœããŒã¿ãåéãããšã³ããŠãŒã¶ãŒãã¢ã¯ãã£ãã«é¢äžããŠããããšã確èªããæ¹æ³ ãªã©ãèããããŸãã
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="computer-use-preview",
previous_response_id="<previous_response_id>",
tools=[{
"type": "computer_use_preview",
"display_width": 1024,
"display_height": 768,
"environment": "browser"
}],
input=[
{
"type": "computer_call_output",
"call_id": "<call_id>",
"acknowledged_safety_checks": [
{
"id": "<safety_check_id>",
"code": "malicious_instructions",
"message": "We've detected instructions that may cause your application to perform malicious or unauthorized actions. Please acknowledge this warning if you'd like to proceed."
}
],
"output": {
"type": "computer_screenshot",
"image_url": "<image_url>"
}
}
],
truncation="auto"
)4-8. æçµã³ãŒã
ãŸãšãããšãæçµçãªã³ãŒãã«ã¯æ¬¡ã®å 容ãå«ãŸããããã«ãªããŸãã
(1) ç°å¢ã®åæå
å®è¡ç°å¢ïŒã³ã³ãã¥ãŒã¿ãŸãã¯ãã©ãŠã¶ïŒãã»ããã¢ããããŸãã
(2) æåã®ãªã¯ãšã¹ããã¢ãã«ã«éä¿¡
computer ããŒã«ãå«ããªã¯ãšã¹ããéä¿¡ããç°å¢ã®åæç¶æ ãèšå®ããŸãã
(3) ã«ãŒãåŠçã®å®è£
ã¢ãã«ã®ã¬ã¹ãã³ã¹ã«åºã¥ããææ¡ãããã¢ã¯ã·ã§ã³ïŒã¯ãªãã¯ãã¹ã¯ããŒã«ãå ¥åãªã©ïŒãå®è¡ããŸããå®è¡åŸãææ°ã®ç°å¢ç¶æ ãååŸããå床ã¢ãã«ã«éä¿¡ããŸãã
(4) ã»ãŒããã£ãã§ãã¯ã®æ¿èªãšãšã³ããŠãŒã¶ãŒç¢ºèª
pending_safety_checks ãåŠçããå¿ èŠã«å¿ã㊠acknowledged_safety_checks ãéä¿¡ããŸãããŠãŒã¶ãŒã«ã¢ã¯ã·ã§ã³ã確èªãããã¢ãã«ã®åäœãæ£ãããããã§ãã¯ã§ããããã«ããŸãã
ãšã³ãããŒãšã³ãã®çµ±åäŸã確èªããã«ã¯ãCUA ãµã³ãã«ã¢ããªãªããžããªãåç §ããŠãã ããã
5. å¶éäºé
ãã©ãŠã¶ããŒã¹ã®ã¿ã¹ã¯ã«ã¯ãcomputer-use-previewã¢ãã«ã®äœ¿çšãæšå¥šããŸãããã ãããã®ã¢ãã«ã¯ãç¹ã«ãã©ãŠã¶ä»¥å€ã®ç°å¢ã§ã¯äœ¿çšé »åºŠãäœããããæå³ãã誀ã£ãçµæãåºãå¯èœæ§ããããŸãã
äŸãã°ãcomputer-use-previewã®OSWorldã§ã®ããã©ãŒãã³ã¹ã¯çŸåš38.1%ã§ãããOSäžã®ã¿ã¹ã¯ãèªååããã«ã¯ãŸã ååã«ä¿¡é Œã§ããã¬ãã«ã§ã¯ãããŸããã
ãŸãã以äžã®ãããªå¶éäºé ã«ã泚æãå¿ èŠã§ãã
ã»computer-use-previewã¢ãã«ã«ã¯ãã¬ãŒãå¶éãæ©èœãµããŒãã®å¶çŽãããã詳现ã¯ã¢ãã«ã®èª¬æããŒãžã«èšèŒãããŠããŸãã
ã»ãã®ããŒã«ã¯ zero data retention (data retention policies) ããµããŒãããŠããŸããã
6. ãªã¹ã¯ãšå®å šæ§
ãComputer useãã«ã¯ãæšæºçãªAPIæ©èœããã£ããã€ã³ã¿ãŒãã§ãŒã¹ãšã¯ç°ãªãç¹æã®ãªã¹ã¯ããããç¹ã«ã€ã³ã¿ãŒããããšé£æºããéã«æ³šæãå¿ èŠã§ãã
以äžã«ããããã®ãªã¹ã¯ã軜æžããããã®ãã¹ããã©ã¯ãã£ã¹ã瀺ããŸãã
6-1. é«ãªã¹ã¯ãªã¿ã¹ã¯ã«ã¯äººéã®ç¢ºèªãæã
é«ãªã¹ã¯ãªã¿ã¹ã¯ãé«ç²ŸåºŠãæ±ããããã¿ã¹ã¯ã¯é¿ããŠãã ãããã¢ãã«ã¯èª€ã£ã倿ãããå¯èœæ§ããããç¹ã«ãã©ãŠã¶ä»¥å€ã®ç°å¢ã§ã¯ãã¹ãçºçãããããªããŸããéèŠãªæ±ºå®ã®åã«ãŠãŒã¶ãŒç¢ºèªãæ±ããããšãæåŸ ããŠããŸãããå®å šã«ã¯ä¿¡é Œã§ããŸãããã¢ãã«ã®åäœãçŸå®äžçã«åœ±é¿ãäžããå Žåã¯ãå¿ ã人éãä»å ¥ã確èªããŠãã ããã
6-2. ããã³ããã€ã³ãžã§ã¯ã·ã§ã³ã«æ³šæ
ããã³ããã€ã³ãžã§ã¯ã·ã§ã³ãšã¯ãAIã¢ãã«ãå ¥åå ã®äžæ£ãªæç€ºã«åŸã£ãŠããŸãçŸè±¡ã§ããcomputer-use-previewã¢ãã«ã®å ŽåãæäŸãããã¹ã¯ãªãŒã³ã·ã§ããå ã®æªæã®ãããŠã§ããµã€ããã¡ãŒã«ã®æç€ºã«èª€ã£ãŠåŸãå¯èœæ§ããããŸãããã®ãªã¹ã¯ãé¿ãããããä¿¡é Œã§ããéé¢ç°å¢ïŒãµã³ãããã¯ã¹åããããã©ãŠã¶ãã³ã³ãããªã©ïŒã§ã®ã¿äœ¿çšããŠãã ããã
6-3. ãããã¯ãªã¹ããšèš±å¯ãªã¹ããæŽ»çš
Webãµã€ããã¢ã¯ã·ã§ã³ããŠãŒã¶ãŒã®ãããã¯ãªã¹ããŸãã¯èš±å¯ãªã¹ããèšå®ãæšå¥šããŸãã
äŸïŒãã±ããäºçŽããŒã«ãšããŠäœ¿çšããå Žåãèš±å¯ãªã¹ãã«ç¹å®ã®äºçŽãµã€ãã®ã¿ãç»é²ããä»ã®ãµã€ããžã®ã¢ã¯ã»ã¹ãå¶éã
6-4. ãŠãŒã¶ãŒIDã®éä¿¡
OpenAIãäžæ£è¡çºãç£èŠã»æ€åºã§ããããããšã³ããŠãŒã¶ãŒã®IDïŒä»»æã®ãã©ã¡ãŒã¿ïŒãéä¿¡ããããšãæšå¥šããŸãã
6-5. ã»ãŒããã£ãã§ãã¯ã®æŽ»çš
以äžã®ã»ãŒããã£ãã§ãã¯æ©èœã掻çšããããã³ããã€ã³ãžã§ã¯ã·ã§ã³ãã¢ãã«ã®èª€äœåãé²ããŸãããã
ã»æªæã®ããæç€ºã®æ€åº
ã»é¢é£æ§ã®ãªããã¡ã€ã³ã®æ€åº
ã»æ©å¯æ§ã®é«ããã¡ã€ã³ã®æ€åº
pending_safety_checkãåãåã£ãå Žåãç£èŠã匷åããŠãã ãããå ·äœçã«ã¯ãã¿ã¹ã¯ã®å®è¡ããŠãŒã¶ãŒã«å§ãããŠãŒã¶ãŒãæç€ºçã«ç¢ºèªããåŸã«é²è¡ããããã«ããŸãããŸãããç£èŠã¢ãŒããïŒOperatorã®ãããªç£èŠã¢ãŒãïŒãå°å ¥ãããŠãŒã¶ãŒããšãŒãžã§ã³ãã®åäœããªã¢ã«ã¿ã€ã ã§ç£èŠã§ããããã«ããŸããã»ãŒããã£ãã§ãã¯ãçºåããå Žåã¯ã人éãä»å ¥ããã®ãåºæ¬ã«ãŒã«ã§ãã
6-6. å®å šæ§åäžã®ããã®è¿œå æšå¥šäºé
å¯èœã§ããã°ãcomputer_call_output ã®äžéšãšã㊠current_urlïŒçŸåšã®URLïŒãéä¿¡ããŠãã ãããããã«ãããã»ãŒããã£ãã§ãã¯ã®ç²ŸåºŠãåäžãããããšãã§ããŸãã
{
"type": "computer_call_output",
"call_id": "call_7OU...",
"acknowledged_safety_checks": [],
"output": {
"type": "computer_screenshot",
"image_url": "..."
},
"current_url": "https://openai.com"
}6-7. 远å ã®å®å šå¯Ÿç
ãComputer useãã«ãŒããšäžŠè¡ããŠã¬ãŒãã¬ãŒã«ãå®è£ ãã ãªã©ãã¢ããªã±ãŒã·ã§ã³ã«æé©ãªè¿œå ã®å®å šå¯Ÿçãå°å ¥ããŠãã ããã
6-8. 䜿çšããªã·ãŒã®éµå®
OpenAIã®äœ¿çšããªã·ãŒããã³ããžãã¹å©çšèŠçŽãéµå®ãã責任ã¯ãŠãŒã¶ãŒã«ãããŸãããããã®éµå®ã確å®ã«ããããã«ãæäŸãããŠããå®å šæ©èœãããŒã«ãç©æ¥µçã«æŽ»çšããããšãæšå¥šããŸãã