メむンコンテンツぞスキップ
芋出し画像

第2ç«  AIに仕事を奪われるな、手足にしろ。老舗商瀟を継いだ僕が「PC2台」で自埋型AIチヌムを召喚した話 手足を埗たAI — browser-use × PlaywrightでWeb操䜜を完党自動化する

    第2章手足を埗たAI — browser-use × PlaywrightでWeb操䜜を完党自動化する

    「よし、拓海 先週教わった『n8n』ず『Structured Outputs』の埩習はバッチリだぞ」

    翌週の月曜日、午前9時。 僕は腕たくりをしお、汎甚PCの前に陣取っおいた。 先週、拓海ず䞀緒に組み䞊げた「マネヌゞャヌn8n」ず「叞什塔OpenAI API」は、汎甚PCの䞭で静かに埅機しおいる。

    「いい気合いだな、倧茔」 拓海は猶コヌヒヌを飲みながら、僕の隣のパむプ怅子に腰掛けた。

    「でもな、先週䜜ったのはあくたで『頭脳』ず『心臓』だ。AIがどんなに賢い指瀺曞JSONを䜜れおも、それを実行する『手足』がなきゃ、お前の代わりにパ゜コンを操䜜しおはくれない」

    「ああ。僕が毎晩深倜3時たでやっおる、あの地獄の䜜業だな  」

    思い出すだけで胃が痛む。 競合他瀟である「〇〇工具」や「△△機工」のWebサむトをブラりザで開き、怜玢窓に型番を䞀぀ず぀手入力し、衚瀺された販売䟡栌をコピヌしお、Excelのスプレッドシヌトに貌り付ける。これを毎日200品目。 途䞭でブラりザのタブを閉じ間違えたり、行をズレお貌り付けたりしお、䜕床叫びそうになったかわからない。

    「今日はその地獄を終わらせる。AIに『物理的な手足』を䞎えるぞ」

    拓海は汎甚PCの画面に、黒いタヌミナルコマンドプロンプトを呌び出した。

    ◇

    「倧茔、埓来のRPA  たずえばUiPathずか、PythonのSeleniumセレニりムを䜿ったWeb自動化の最倧の匱点っお䜕か知っおるか」

    「え 匱点   うヌん、プログラミングが難しいこず」

    「それもあるが、最倧の匱点は『脆もろさ』だ」

    拓海はキヌボヌドを叩きながら説明を続けた。

    「埓来のRPAはな、Webサむトの裏偎にあるHTMLの『ボタンの堎所XPathやCSSセレクタ』をピンポむントで指定しおクリックさせる仕組みなんだ。䟋えば『id="search-btn-top" ずいうボタンを抌せ』みたいにな」

    「ふむふむ」

    「でも、Webサむトっお頻繁にデザむン曎新リニュヌアルされるだろ ボタンのIDが倉わったり、配眮が巊から右に移動したり、ポップアップ広告が突然挟たったりする。そうなるず埓来のRPAはどうなるず思う」

    「あ   ボタンが芋぀かりたせんっお゚ラヌになっお、止たっちゃうのか」

    「倧正解。プログラムが『バカ』だから、画面の芋た目がちょっず倉わっただけでパニックを起こすんだ。結果ずしお、サむトが倉わるたびに゚ンゞニアがコヌドを修正しなきゃいけない。䞭小䌁業でRPA導入が倱敗する䞀番の原因がこれなんだよ」

    「うわぁ  それじゃあ自動化の意味がないじゃん  」

    「だからこそ、最新のAI技術を䜿う。今日䜿うラむブラリは、今䞖界䞭のAI゚ンゞニアの間で最も泚目されおるオヌプン゜ヌス、browser-useブラりザ・ナヌスだ」

    拓海がタヌミナルにコマンドを打ち蟌む。

    Bash

    pip install browser-use langchain-openai playwright
    playwright install
    

    「browser-use   これたでのRPAず䜕が違うんだ」

    「決定的な違いはな、『LLMAI自身がブラりザの画面を芋お、人間ず同じように状況を刀断しお操䜜する』っお点だ」

    「画面を芋る  」

    「そうだ。browser-useは内郚でPlaywrightプレむラむトっおいう超高速なブラりザ操䜜゚ンゞンを動かしおる。そしお、ペヌゞのキャプチャ画像ずHTMLの構造を䞞ごずgpt-4oに枡すんだ。するずgpt-4oは『あ、画面の䞭倮に怜玢窓があるな』『ポップアップが出おるから、たず×ボタンを抌しお消そう』っお、人間ず同じように目を配らせお自埋的にマりスやキヌボヌドを動かす」

    僕は目を䞞くした。

    「じゃあ、サむトのデザむンがちょっず倉わっおも  」

    「ビクずもしない。ボタンの色が倉わろうが、堎所が右䞋に移動しようが、AIが『これが怜玢ボタンだな』ず芖芚的・文脈的に理解しお正しく抌しおくれる。メンテナンスフリヌの最匷の『手足』なんだよ」

    ◇

    「癟聞は䞀芋に劂かずだ。実際に動くスクリプトを曞くぞ」

    拓海ぱディタを開き、短いPythonコヌドを曞き始めた。

    Python

    import asyncio
    from langchain_openai import ChatOpenAI
    from browser_use import Agent
    
    async def main():
        # 1. 手足ずなるLLM思考゚ンゞンの蚭定
        llm = ChatOpenAI(model="gpt-4o", temperature=0.0)
    
        # 2. 実行圹に䞎える自然蚀語の「指瀺タスク」
        task_prompt = """
        1. 競合サむト『https://example-tools-shop.com』にアクセスしおください。
        2. 怜玢窓に型番『NK-2000-X』ず入力しお怜玢しおください。
        3. 怜玢結果に衚瀺された商品の『販売䟡栌皎蟌』ず『圚庫状況』を取埗しおください。
        4. 取埗した結果を JSON 圢匏で出力しおください。
        """
    
        # 3. browser-use ゚ヌゞェントの起動
        agent = Agent(
            task=task_prompt,
            llm=llm,
        )
    
        # 4. タスクの実行
        result = await agent.run()
        print("【実行結果】")
        print(result)
    
    if __name__ == "__main__":
        asyncio.run(main())
    

    「えっ   拓海、コヌドこれだけ   たった20行ちょっず」

    僕は狐に぀たたれたような気分だった。 昔、独孊でSeleniumのWebスクレむピングを勉匷しようずした時、ボタンの芁玠を探しお、埅機時間を蚭定しお、䟋倖凊理を曞いお  ず䜕癟行ものコヌドに挫折した蚘憶がある。

    「そうだ。browser-useを䜿えば、面倒な芁玠指定XPathのコヌドなんお1行も曞く必芁がない。『人間に行動を指瀺するのず同じ日本語のプロンプト』を曞くだけでいいんだ」

    「す、すごすぎる   じゃあ、これ実行しおみおくれよ」

    「よし、いくぞ。画面をよく芋おおけよ」

    拓海がタヌミナルで python main.py ず入力し、Enterキヌを叩いた。

    ◇

    盎埌、僕の目の前で奇跡のような光景が始たった。

    汎甚PCの画面䞊に、自動でGoogle Chromeブラりザが立ち䞊がった。 だが、誰もマりスもキヌボヌドも觊っおいない。

    『思考䞭: https://example-tools-shop.com にアクセスしたす  』

    タヌミナルにAIの思考ログがリアルタむムで流れるず同時に、ブラりザがスッず動き、競合他瀟のWebサむトが開いた。

    『思考䞭: 画面䞭倮䞊郚に怜玢入力゚リアinputを怜出したした。型番 NK-2000-X を入力したす  』

    ブラりザの怜玢窓に、たるで目に芋えない透明人間がタむピングしおいるかのように、「NK-2000-X」ずいう文字がパラパラパラず打ち蟌たれた。 そしお、怜玢ボタンの䞊に赀い枠が衚瀺されたかず思うず、カチッずクリックされた。

    「う、うわあああぁぁぁっ 動いおる ブラりザが勝手に動いおる」

    僕は思わず怅子から立ち䞊がり、叫んでしたった。

    画面は怜玢結果ペヌゞに切り替わり、AIは䞀瞬停止しおペヌゞ党䜓をスキャンした。

    『思考䞭: 商品名 NK-2000-X 超硬゚ンドミル を確認。䟡栌「¥12,800皎蟌」および圚庫「残り3点」の芁玠を抜出したした。タスク完了です。』

    カチッ、ずブラりザが閉じ、タヌミナルに綺麗な結果が出力された。

    JSON

    {
      "product_name": "NK-2000-X 超硬゚ンドミル",
      "price": "12800",
      "stock": "残り3点",
      "status": "SUCCESS"
    }
    

    所芁時間、わずか15秒。

    僕が毎晩、重い瞌をこすりながら手䜜業でコピペしおいたあの䜜業が、たった15秒で、完璧な粟床で完了したのだ。

    「  嘘だろ  」

    僕は脱力し、パむプ怅子に厩れ萜ちた。 嬉しさず、安堵ず、これたでの苊劎は䜕だったんだずいう虚しさが混ざり合い、目頭が熱くなった。

    「拓海  これ、マゞでダバいよ  。俺が深倜3時たで半泣きでやっおた䜜業、党郚これに眮き換わるじゃん  」

    「フッ、蚀ったろ AIを『手足』にするっおいうのはこういうこずだ」 拓海は誇らしげに腕を組んだ。

    「このbrowser-useずPlaywrightの組み合わせがあれば、ログむンが必芁な䌚員制サむトだろうが、耇雑なドロップダりンメニュヌの遞択だろうが、人間ができるブラりザ操䜜ならほが100%自動化できる」

    ◇

    「でもな、倧茔。ここからが本番だ」 拓海は衚情をキリッず匕き締めた。

    「え 本番」

    「そうだ。今動かしたPythonスクリプトは、ただ単䜓で動かしただけだろ これを先週䜜った『n8nマネヌゞャヌ』ず合䜓させお、完党自動のパむプラむンに組み蟌むんだ」

    拓海はn8nの画面を開き、先週䜜ったワヌクフロヌの先に新しいノヌドを远加した。

    [Cron (毎朝8時)] 
      │
      ▌
    [n8n: HTTP Request] ──> OpenAI API (叞什塔: タスク分解JSON䜜成)
      │
      ▌
    [n8n: Execute Command] ──> 汎甚PC䞊の Python (browser-use 実行スクリプト)
      │
      ▌
    [n8n: Google Sheets Node] ──> スプレッドシヌトに䟡栌デヌタを自動曞き蟌み
    

    「芋ろ。n8nの䞭に『Execute Command』っおいうノヌドがある。これを䜿うず、n8nの䞭から汎甚PCのPythonスクリプトを自由自圚に呌び出せるんだ」

    「なるほど

    1. 毎朝8時にn8nが起きお

    2. OpenAI叞什塔に『今日の調査察象』を聞いお

    3. Pythonbrowser-useを呌び出しおブラりザを操䜜させお

    4. 返っおきた結果を、Googleスプレッドシヌトに自動で曞き蟌む   っおいう流れが、党郚ノヌコヌドで繋がるのか」

    「完璧な理解だ、倧茔」拓海はバシッず僕の背䞭を叩いた。

    「これで、お前が䌚瀟に来る前の『毎朝8時』に、汎甚PCの䞭でマネヌゞャヌず実行圹が勝手に連携しお、競合サむト200品目の䟡栌調査を完了させお、瀟内のスプレッドシヌトを最新状態に曎新しおおくシステムが完成した」

    僕はデスクの䞊に䞊んだGoogleスプレッドシヌトを芋぀めた。 n8nのテスト実行ボタンを抌すず、数十秒埌、スプレッドシヌトのセルにスルスルず新しい䟡栌デヌタが自動で埋たっおいく。

    もう、僕が深倜にExcelず栌闘する必芁は、どこにもなかった。

    「  勝った  」

    僕は拳を固く握りしめた。

    「よし これで自動化は完成だな 拓海、今倜は飲みに行こう 俺のおごりで心斎橋の旚い焌肉屋  」

    「埅お埅お埅お」 拓海はあわおお僕の肩を掎んで匕き戻した。

    「おい倧茔、浮かれるな ただ党行皋の半分も終わっおないぞ」

    「えっ だっお、ブラりザも勝手に動くし、スプレッドシヌトも曎新されるんだぞ もう完璧じゃないか」

    拓海は溜息を぀き、頭を振った。

    「甘い。甘すぎるぞ、2代目瀟長。 いいか 今のシステムはな、『晎れの日のテスト走行』でうたく動いたに過ぎないんだ」

    「晎れの日の  テスト走行  」

    「そうだ。もし明日、AIが競合サむトの䟡栌を読み間違えお『10䞇円』の商品を『100円』っおスプレッドシヌトに曞き蟌んだらどうする もし、AIが生成したSNSの投皿文に、他瀟補品の嘘の仕様ハルシネヌションが混ざっおお、そのたた自動で䞖の䞭に発信されたらどうする」

    「あ  」僕は冷や汗が吹き出るのを感じた。

    「安党装眮のない暎走特急ほど恐ろしいものはないんだ。来週は、このAIチヌムに『蚘憶デヌタベヌス』ず、嘘を芋砎る『厳栌な監査圹QA機胜』を組み蟌む。これができお初めお、人間が安心しお攟眮できる『完党内補化』が完成するんだよ」

    拓海の鋭い県光を芋お、僕はゎクリず唟を飲み蟌んだ。

    第3章ぞ続く

    あなたぞのおすすめ