โ† ่ฟ”ๅ›žๆ€ป่งˆ

๐ŸŒ Browser Use

Browser Automation Agent โ€” DOM ไบคไบ’ๅผๆต่งˆๅ™จ่‡ชๅŠจๅŒ–

Iterative Loop DOM Interaction Python Playwright ๐Ÿ”ฅ ~300่กŒ็ณป็ปŸๆ็คบ่ฏ ๐Ÿ”ฅ Judge่ฏ„ไผฐ็ณป็ปŸ ๅคšๆ ‡็ญพ้กต
โญ 60k+ ๐Ÿ“ ~300่กŒ็ณป็ปŸๆ็คบ่ฏ ๐Ÿ”ง 20+ ๆต่งˆๅ™จๅŠจไฝœ ๐Ÿง  ๆถˆๆฏๅŽ‹็ผฉ+่ง„ๅˆ’ ๐Ÿ“ธ ๆˆชๅ›พ+DOMๅŒๆจกๆ€

ไธ€ใ€ๆ ธๅฟƒๆžถๆž„

Browser Use ๆ•ดไฝ“ๆžถๆž„ โ€” Iterative Browser Automation Loop โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ AgentService (ไธปๆœๅŠกๅฑ‚) โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ step() (ไธปๅพช็Žฏ, ๆฏๆญฅๆ‰ง่กŒ) โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ 1. get_browser_state() โ†’ DOMๆ ‘ + ๆˆชๅ›พ + ๆ ‡็ญพ้กตไฟกๆฏ โ”‚ โ”‚ โ”‚ โ”‚ 2. build_prompt() โ†’ ็ป„่ฃ…็ณป็ปŸๆ็คบ่ฏ+ๅކๅฒ+็Šถๆ€ โ”‚ โ”‚ โ”‚ โ”‚ 3. LLM call โ†’ ่งฃๆž JSON ๅŠจไฝœ่พ“ๅ‡บ โ”‚ โ”‚ โ”‚ โ”‚ 4. Controller.execute() โ†’ ๆ‰ง่กŒๆต่งˆๅ™จๅŠจไฝœ โ”‚ โ”‚ โ”‚ โ”‚ 5. Event bus ่ฎฐๅฝ•็ป“ๆžœ โ†’ ๆถˆๆฏๅŽ‹็ผฉๆฃ€ๆŸฅ โ†’ ไธ‹ไธ€่ฝฎ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ BrowserContext โ”‚ โ”‚ Controller โ”‚ โ”‚ DOM Service โ”‚ โ”‚ โ”‚ โ”‚ (Playwright) โ”‚ โ”‚ (ๅŠจไฝœๆณจๅ†Œ่กจ) โ”‚ โ”‚ (CDP accessibility) โ”‚ โ”‚ โ”‚ ๆ ‡็ญพ้กต/ๆˆชๅ›พ โ”‚ โ”‚ click/type/ โ”‚ โ”‚ DOMๆ ‘็ฎ€ๅŒ– โ”‚ โ”‚ โ”‚ โ”‚ ๅฏผ่ˆช/็ญ‰ๅพ… โ”‚ โ”‚ scroll/extractโ”‚ โ”‚ ๅ…ƒ็ด ็ดขๅผ•ๅˆ†้… โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ SystemPrompt โ”‚ โ”‚ MessageCompactโ”‚ โ”‚ Judge โ”‚ โ”‚ โ”‚ โ”‚ ๆจกๅž‹็‰นๅฎšๅ˜ไฝ“ โ”‚ โ”‚ (ๆถˆๆฏๅŽ‹็ผฉ) โ”‚ โ”‚ (LLM่ฏ„ไผฐ) โ”‚ โ”‚ โ”‚ โ”‚ 9ไธชๆ็คบ่ฏๆ–‡ไปถ โ”‚ โ”‚ ่งฆๅ‘ๆกไปถๅˆคๆ–ญ โ”‚ โ”‚ ไปปๅŠกๅฎŒๆˆ่ดจ้‡ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๆžถๆž„็‰น็‚น

ไบŒใ€๐Ÿ“ ๆ็คบ่ฏๅทฅ็จ‹๏ผˆๆ ธๅฟƒๆทฑๅบฆๅˆ†ๆž๏ผ‰

Browser Use ็š„็ณป็ปŸๆ็คบ่ฏๆ˜ฏๆ‰€ๆœ‰ๆต่งˆๅ™จ Agent ไธญๆœ€่ฏฆๅฐฝ็š„โ€”โ€”็บฆ 300 ่กŒ๏ผŒ่ฆ†็›–ไบ†ไปŽ DOM ่งฃๆž่ง„ๅˆ™ๅˆฐ้”™่ฏฏๆขๅค็ญ–็•ฅ็š„ๅฎŒๆ•ดๆ“ไฝœๆ‰‹ๅ†Œใ€‚่ฟ™ไธๆ˜ฏไธ€ไธช็ฎ€ๅ•็š„ "ไฝ ๆ˜ฏไธ€ไธชๆต่งˆๅ™จๅŠฉๆ‰‹" ๆ็คบ่ฏ๏ผŒ่€Œๆ˜ฏไธ€ไปฝ็ฒพๅฟƒ่ฎพ่ฎก็š„ๆต่งˆๅ™จๆ“ไฝœ่ง„่Œƒใ€‚

็ณป็ปŸๆ็คบ่ฏ็ป“ๆž„๏ผˆsystem_prompt.md๏ผ‰

System Prompt ็ป“ๆž„ (~300 ่กŒ): โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ 1. ่บซไปฝไธŽ็›ฎๆ ‡ โ”‚ "You are an AI agent designed to โ”‚ iterative loop, user_request โ”‚ operate in an iterative loop" โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ 2. ่พ“ๅ…ฅๆ ผๅผ่ฏดๆ˜Ž โ”‚ 5 ็ง่พ“ๅ…ฅ: agent_history, โ”‚ (agent_history, agent_state, โ”‚ agent_state, browser_state, โ”‚ browser_state, browser_vision, โ”‚ browser_vision, read_state โ”‚ read_state) โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ 3. DOM ไบคไบ’่ง„ๅˆ™ โ”‚ ๐Ÿ”ฅ ๆ ธๅฟƒ๏ผš[index] ็ผ–ๅทไฝ“็ณป โ”‚ (browser_rules, ~40่กŒ) โ”‚ *[ = ๆ–ฐๅ…ƒ็ด ๆ ‡่ฎฐ โ”‚ โ”‚ |SCROLL| = ๅฏๆปšๅŠจๅฎนๅ™จ โ”‚ โ”‚ |SHADOW(open/closed)| โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ 4. ๆ–‡ไปถ็ณป็ปŸ่ง„ๅˆ™ โ”‚ todo.md, results.md, โ”‚ (file_system) โ”‚ <10ๆญฅไธ็”จๆ–‡ไปถ็ณป็ปŸ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ 5. ่ง„ๅˆ’็ณป็ปŸ โ”‚ ็ฎ€ๅ•โ†’็›ดๆŽฅๅš, ๆธ…ๆ™ฐโ†’plan_update, โ”‚ (planning) โ”‚ ไธๆธ…ๆ™ฐโ†’ๅ…ˆๆŽข็ดขๅ†่ง„ๅˆ’ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ 6. ไปปๅŠกๅฎŒๆˆ่ง„ๅˆ™ โ”‚ ๐Ÿ”ฅ pre_done_verification: โ”‚ (task_completion_rules) โ”‚ 6ๆญฅ้ชŒ่ฏๆธ…ๅ•! ้˜ฒๅนป่ง‰ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ 7. ๅŠจไฝœ่ง„ๅˆ™ โ”‚ ้กต้ขๆ”นๅ˜ๅž‹ๅŠจไฝœๆ”พๆœ€ๅŽ โ”‚ (action_rules + efficiency) โ”‚ ๅฎ‰ๅ…จๅŠจไฝœๅฏ้“พๆŽฅ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ 8. ๆŽจ็†่ง„ๅˆ™ โ”‚ ๆ˜พๅผๆŽจ็†่ฆๆฑ‚: ๅˆ†ๆžๅކๅฒโ†’ๅˆคๆ–ญ โ”‚ (reasoning_rules) โ”‚ ไธŠไธ€ๆญฅๆˆ่ดฅโ†’่ง„ๅˆ’ไธ‹ไธ€ๆญฅ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ 9. ็คบไพ‹ (examples) โ”‚ todo/evaluation/memory/ โ”‚ โ”‚ next_goal ๅ››็ฑป็คบไพ‹ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ 10. ่พ“ๅ‡บๆ ผๅผ (output) โ”‚ JSON: thinking/evaluation/ โ”‚ + critical_reminders โ”‚ memory/next_goal/action โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ 11. ้”™่ฏฏๆขๅค (error_recovery) โ”‚ 8 ๆญฅๆขๅค็ญ–็•ฅ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ”ฅ ๆ ธๅฟƒๆ็คบ่ฏ็‰‡ๆฎต๏ผšDOM ไบคไบ’่ง„ๅˆ™

Interactive Elements: All interactive elements will be provided in a tree-style XML format: - Format: [index]<tagname attribute=value /> for interactive elements - Text content appears as child nodes on separate lines - Indentation with tabs shows parent/child relationships Examples: [33]<div /> User form [35]<input type=text placeholder=Enter name /> *[38]<button aria-label=Submit form /> Submit [40]<a /> About us Note that: - Only elements with numeric indexes in [] are interactive - Elements tagged with a star *[ are NEW interactive elements that appeared since the last step - if url has not changed. - |SCROLL| prefix indicates scrollable containers - |SHADOW(open)| or |SHADOW(closed)| prefix indicates shadow DOM elements

๐Ÿ’ก *[ ๆ ‡่ฎฐๆ˜ฏๅ…ณ้”ฎๅˆ›ๆ–ฐโ€”โ€”ๅ‘Š่ฏ‰ LLM ๅ“ชไบ›ๅ…ƒ็ด ๆ˜ฏไธŠไธ€ๆญฅๆ“ไฝœๅŽๆ–ฐๅ‡บ็Žฐ็š„๏ผŒๅผ•ๅฏผ LLM ๅ…ณๆณจๅŠจๆ€ๅ˜ๅŒ–๏ผˆๅฆ‚ไธ‹ๆ‹‰่œๅ•ใ€ๅผน็ช—๏ผ‰ใ€‚

๐Ÿ”ฅ ๆ ธๅฟƒๆ็คบ่ฏ็‰‡ๆฎต๏ผšpre_done_verification

BEFORE calling done with success=true, you MUST perform this verification: 1. Re-read the USER REQUEST โ€” list every concrete requirement 2. Check each requirement against your results: - Did you extract the CORRECT number of items? - Did you apply ALL specified filters/criteria? - Does your output match the requested format exactly? 3. Verify actions actually completed: - If you submitted a form โ€” check the page state 4. Verify data grounding: Every URL, price, name, and value must appear verbatim in your tool outputs. Do NOT use your training knowledge to fill gaps 5. Blocking error check: If unresolved blocker โ†’ set success=false 6. If ANY requirement is unmet โ†’ set success to false

๐Ÿ’ก ่ฟ™ๆ˜ฏ้˜ฒๅนป่ง‰็š„็กฌ็บฆๆŸโ€”โ€”่ฆๆฑ‚ LLM ๅœจๅฃฐๆ˜ŽๅฎŒๆˆๅ‰ๆ‰ง่กŒ 6 ๆญฅ้ชŒ่ฏ๏ผŒ็‰นๅˆซๅผบ่ฐƒ"ไธ่ฆ็”จ่ฎญ็ปƒ็Ÿฅ่ฏ†ๅกซ่กฅ็ฉบ็™ฝ"ใ€‚

๐Ÿ”ฅ ๆ ธๅฟƒๆ็คบ่ฏ็‰‡ๆฎต๏ผšๆ•ˆ็އๆŒ‡ๅ—ไธŽๅŠจไฝœๅˆ†็ฑป

Action categories: - Page-changing (always last): navigate, search, go_back, switch, evaluate โ€” remaining actions after them are skipped - Potentially page-changing: click (on links/buttons that navigate) โ€” monitored at runtime - Safe to chain: input, scroll, find_text, extract, search_page, find_elements, file operations Recommended combinations: - input + input + input + click โ†’ Fill multiple form fields then submit - scroll + scroll โ†’ Scroll further down the page - File operations + browser actions Do not try multiple different paths in one step. Always have one clear goal per step.

๐Ÿ’ก ๅŠจไฝœๅˆ†็ฑปๆ˜ฏๆ็คบ่ฏๅทฅ็จ‹็š„็ฒพ้ซ“โ€”โ€”LLM ็Ÿฅ้“ๅ“ชไบ›ๅŠจไฝœๅฎ‰ๅ…จๅฏ้“พๆŽฅ๏ผŒๅ“ชไบ›ไผšไธญๆ–ญๅŽ็ปญๅŠจไฝœใ€‚่ฟ™ๅคงๅคงๅ‡ๅฐ‘ไบ†ๅŠจไฝœๆ‰ง่กŒ้”™่ฏฏใ€‚

ๆจกๅž‹็‰นๅฎšๆ็คบ่ฏๅ˜ไฝ“

ๆ–‡ไปถ้€‚็”จๆจกๅž‹ๅทฎๅผ‚
system_prompt.md้ป˜่ฎค (Claude/GPT-4)ๅฎŒๆ•ด็‰ˆ๏ผŒๅซ thinking block
system_prompt_no_thinking.mdๆ— ๆ€็ปด้“พๆจกๅž‹็งป้™ค thinking block ่ฆๆฑ‚
system_prompt_flash.mdFlash ็ฑปๆจกๅž‹็ฒพ็ฎ€็‰ˆ๏ผŒๅ‡ๅฐ‘ๆŽจ็†่ฆๆฑ‚
system_prompt_anthropic_flash.mdClaude Flash้€‚้… Anthropic API ๆ ผๅผ
system_prompt_flash_anthropic.mdClaude Flash (alt)ๅฆไธ€ Anthropic Flash ๅ˜ไฝ“
system_prompt_browser_use.mdBrowser Use ไธ“็”จๅผบ่ฐƒๆต่งˆๅ™จๆ“ไฝœ
system_prompt_browser_use_flash.mdBrowser Use Flash็ฒพ็ฎ€ๆต่งˆๅ™จๆ“ไฝœ็‰ˆ
system_prompt_browser_use_no_thinking.mdBrowser Use ๆ— ๆ€็ปด้“พๆ—  thinking ็š„ๆต่งˆๅ™จ็‰ˆ

๐Ÿ’ก 9 ไธชๆ็คบ่ฏๆ–‡ไปถ๏ผ่ฟ™ๆ˜ฏ"ไธ€ไธชๆ็คบ่ฏๆ‰“ๅคฉไธ‹"็š„ๅๆจกๅผโ€”โ€”ไธๅŒๆจกๅž‹้œ€่ฆไธๅŒ็š„ๆ็คบ่ฏ็ญ–็•ฅใ€‚Flash ๆจกๅž‹็”จ็ฒพ็ฎ€็‰ˆ้ฟๅ…่ƒฝๅŠ›ไธ่ถณๅฏผ่‡ด็š„ๆ ผๅผ้”™่ฏฏใ€‚

ไธ‰ใ€โ™ป๏ธ ไธปๅพช็Žฏ

AgentService.step() ไธปๅพช็Žฏ โ€” ๆฏไธ€ๆญฅ็š„ๅฎŒๆ•ดๆต็จ‹: โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ step() ๆ‰ง่กŒ โ”‚ โ”‚ โ”‚ โ”‚ 1. ๆฃ€ๆŸฅ AgentState โ”‚ โ”‚ โ””โ”€ STOPPED/RUNNING/PAUSED โ†’ ็Šถๆ€่ฝฌๆข โ”‚ โ”‚ โ”‚ โ”‚ 2. ่Žทๅ–ๆต่งˆๅ™จ็Šถๆ€ โ”‚ โ”‚ โ”œโ”€ BrowserContext.get_state() โ”‚ โ”‚ โ”‚ โ”œโ”€ DOMService.get_clickable_elements() โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€ CDP โ†’ accessibility tree โ†’ ็ฎ€ๅŒ–DOM โ”‚ โ”‚ โ”‚ โ”œโ”€ ๆˆชๅ›พ (screenshot) โ”‚ โ”‚ โ”‚ โ””โ”€ ๆ ‡็ญพ้กตๅˆ—่กจ + URL โ”‚ โ”‚ โ””โ”€ ็ป„่ฃ… BrowserState โ”‚ โ”‚ โ”‚ โ”‚ 3. ๆž„ๅปบๆ็คบ่ฏ โ”‚ โ”‚ โ”œโ”€ SystemPrompt.get_prompt() โ†’ ๆจกๅž‹็‰นๅฎš็ณป็ปŸๆ็คบ่ฏ โ”‚ โ”‚ โ”œโ”€ AgentHistory โ†’ ๅŽ‹็ผฉๅŽ็š„ๅކๅฒๆถˆๆฏ โ”‚ โ”‚ โ”œโ”€ AgentState (user_request, todo, step_info) โ”‚ โ”‚ โ””โ”€ BrowserState (DOMๆ ‘+ๆˆชๅ›พ) โ”‚ โ”‚ โ”‚ โ”‚ 4. LLM ่ฐƒ็”จ โ”‚ โ”‚ โ””โ”€ ็ป“ๆž„ๅŒ–่พ“ๅ‡บ: JSON {thinking, evaluation, memory, โ”‚ โ”‚ next_goal, action[]} โ”‚ โ”‚ โ”‚ โ”‚ 5. ๅŠจไฝœๆ‰ง่กŒ โ”‚ โ”‚ โ”œโ”€ Controller.execute(action) โ”‚ โ”‚ โ”‚ โ”œโ”€ ๆŸฅๆ‰พ ActionRegistry ไธญ็š„ๆณจๅ†ŒๅŠจไฝœ โ”‚ โ”‚ โ”‚ โ”œโ”€ ้ชŒ่ฏๅ‚ๆ•ฐ + ๆ‰ง่กŒ โ”‚ โ”‚ โ”‚ โ””โ”€ ่ฟ”ๅ›ž ActionResult โ”‚ โ”‚ โ””โ”€ ๅคšๅŠจไฝœ้กบๅบๆ‰ง่กŒ (้กต้ขๆ”นๅ˜ๆ—ถไธญๆ–ญ) โ”‚ โ”‚ โ”‚ โ”‚ 6. ไบ‹ไปถ่ฎฐๅฝ• โ”‚ โ”‚ โ”œโ”€ AgentEventBus.emit(step_event) โ”‚ โ”‚ โ””โ”€ ่ฎฐๅฝ•ๅˆฐ AgentHistory โ”‚ โ”‚ โ”‚ โ”‚ 7. ๆถˆๆฏๅŽ‹็ผฉๆฃ€ๆŸฅ โ”‚ โ”‚ โ””โ”€ MessageCompactionSettings โ”‚ โ”‚ โ”œโ”€ ่ถ…่ฟ‡ token ้˜ˆๅ€ผ? โ†’ LLM ็”Ÿๆˆๆ‘˜่ฆๆ›ฟๆขๆ—งๆถˆๆฏ โ”‚ โ”‚ โ””โ”€ ๅฆๅˆ™็ปง็ปญ โ”‚ โ”‚ โ”‚ โ”‚ 8. ๅพช็Žฏ โ†’ ๅ›žๅˆฐๆญฅ้ชค 1 โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ done ๆกไปถ: LLM ่พ“ๅ‡บ done ๅŠจไฝœ OR ่พพๅˆฐ max_steps

ๅ…ณ้”ฎๅพช็Žฏ็ป†่Š‚

ๅ››ใ€๐Ÿ”ง ๅทฅๅ…ท็ณป็ปŸ

Controller + ActionRegistry โ€” ๆณจๅ†ŒๅผๅŠจไฝœ็ณป็ปŸ

ๅทฅๅ…ทๆณจๅ†ŒไธŽๆ‰ง่กŒ: โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ActionRegistry โ”‚ โ”‚ โ”‚ โ”‚ @registry.action("click") โ”‚ โ”‚ async def click(index: int): ... โ”‚ โ”‚ โ”‚ โ”‚ @registry.action("input_text") โ”‚ โ”‚ async def input_text(index, text): โ”‚ โ”‚ โ”‚ โ”‚ ๆ”ฏๆŒๆŽ’้™ค: exclude_actions=[...] โ”‚ โ”‚ โ†’ ๅŠจๆ€่ฃๅ‰ชๅฏ็”จๅŠจไฝœ้›† โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ Controller โ”‚ โ”‚ โ”‚ โ”‚ execute(action) โ†’ โ”‚ โ”‚ 1. ๆŸฅๆ‰พๆณจๅ†Œ็š„ๅŠจไฝœ โ”‚ โ”‚ 2. ้ชŒ่ฏๅ‚ๆ•ฐ โ”‚ โ”‚ 3. ๅœจ BrowserContext ไธญๆ‰ง่กŒ โ”‚ โ”‚ 4. ่ฟ”ๅ›ž ActionResult โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
็ฑปๅˆซๅŠจไฝœ่ฏดๆ˜Ž
ๅฏผ่ˆชnavigate(url), go_back(), search(query)้กต้ขๆ”นๅ˜ๅž‹๏ผŒๆ”พๆœ€ๅŽ
ไบคไบ’click(index), input_text(index, text)click ๅฏ่ƒฝ้กต้ขๆ”นๅ˜
ๆปšๅŠจscroll(direction, amount)ๅฎ‰ๅ…จๅฏ้“พๆŽฅ
ๆๅ–extract(goal), search_page(query), find_elements(selector)ๅฎ‰ๅ…จๅฏ้“พๆŽฅ๏ผŒไฝ† extract ๆ˜‚่ดต
ๆ ‡็ญพ้กตswitch(tab_id), new_tab(), close_tab()ๅคšๆ ‡็ญพ้กต็ฎก็†
ๆ–‡ไปถread_file(path), write_file(path, content), replace_file(path, old, new)ๆŒไน…ๅŒ–ๆ–‡ไปถ็ณป็ปŸ
ๅฎŒๆˆdone(text, success, files_to_display)็ปˆๆญขๅพช็Žฏ

DOM Service โ€” CDP Accessibility Tree ๅค„็†

ไบ”ใ€๐Ÿง  ่ฎฐๅฟ†ไธŽไธŠไธ‹ๆ–‡็ณป็ปŸ

ไธ‰ๅฑ‚ไธŠไธ‹ๆ–‡็ฎก็†

ไธŠไธ‹ๆ–‡ๆž„ๆˆ: โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ STABLE (ๆฏๆญฅไธๅ˜) โ”‚ โ”‚ โ€ข System Prompt (~300่กŒ) โ”‚ โ”‚ โ€ข User Request ( ๆ ‡็ญพ) โ”‚ โ”‚ โ€ข Agent State (todo, step_info) โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ GROWING (ๆŒ็ปญๅขž้•ฟ, ้œ€ๅŽ‹็ผฉ) โ”‚ โ”‚ โ€ข Agent History (้€ๆญฅ็ดฏ็งฏ) โ”‚ โ”‚ โ””โ”€ ๆฏๆญฅ: evaluation + memory + action_result โ”‚ โ”‚ โ€ข ๅŽ‹็ผฉ็ญ–็•ฅ: MessageCompaction โ”‚ โ”‚ โ”œโ”€ ่ถ…่ฟ‡้˜ˆๅ€ผ โ†’ LLM ๆ‘˜่ฆๆ›ฟๆขๆ—งๆถˆๆฏ โ”‚ โ”‚ โ””โ”€ ไฟ็•™ๆœ€่ฟ‘ N ่ฝฎๅฎŒๆ•ดๅކๅฒ โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ EPISODIC (ๆฏๆญฅๅˆทๆ–ฐ) โ”‚ โ”‚ โ€ข Browser State (DOMๆ ‘ + URL + ๆ ‡็ญพ้กต) โ”‚ โ”‚ โ€ข Browser Vision (ๆˆชๅ›พ) โ”‚ โ”‚ โ€ข Read State (extract/read_file ็š„ไธดๆ—ถ็ป“ๆžœ) โ”‚ โ”‚ โ€ข File System (todo.md, results.md ็ญ‰) โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ่ฎฐๅฟ†ๆœบๅˆถ: โ€ข LLM ่พ“ๅ‡บไธญ็š„ "memory" ๅญ—ๆฎต โ†’ ๆฏๆญฅ 1-3 ๅฅ่ฏ โ€ข todo.md โ†’ ้•ฟไปปๅŠก่ฟ›ๅบฆ่ทŸ่ธช โ€ข results.md โ†’ ็ป“ๆžœ็ดฏ็งฏ โ€ข ๆ— ๆŒไน…ๅŒ–่ฎฐๅฟ† (ๆ— ่ทจไผš่ฏ่ฎฐๅฟ†)

ๆถˆๆฏๅŽ‹็ผฉ (MessageCompaction)

ๅ…ญใ€๐Ÿ”‘ ๆ ธๅฟƒ็ฑป

็ฑปๆ–‡ไปถ่Œ่ดฃ
AgentServiceagent/service.pyไธปๆœๅŠกๅฑ‚๏ผšstep() ๅพช็Žฏใ€ไบ‹ไปถๆ€ป็บฟใ€ๆถˆๆฏๅŽ‹็ผฉ
Agentagent/agent.pyAgent ้…็ฝฎไธŽ็Šถๆ€๏ผšmodelใ€max_stepsใ€state
Controllertools/service.pyๅŠจไฝœๆ‰ง่กŒๅ™จ๏ผšๆŸฅๆ‰พๆณจๅ†ŒๅŠจไฝœ โ†’ ้ชŒ่ฏๅ‚ๆ•ฐ โ†’ ๆ‰ง่กŒ
ActionRegistrytools/registry/service.pyๅŠจไฝœๆณจๅ†Œ่กจ๏ผš@registry.action() ๆณจๅ†Œ + exclude ่ฟ‡ๆปค
BrowserContextbrowser/context.pyPlaywright ๆต่งˆๅ™จไธŠไธ‹ๆ–‡๏ผšๆ ‡็ญพ้กตใ€ๅฏผ่ˆชใ€ๆˆชๅ›พ
DOMServicedom/service.pyDOM ๆ ‘ๅค„็†๏ผšCDP accessibility โ†’ ็ฎ€ๅŒ–็ดขๅผ•ๆ ‘
SystemPromptagent/prompts.py็ณป็ปŸๆ็คบ่ฏๆž„ๅปบ๏ผšๆจกๅž‹็‰นๅฎšๅ˜ไฝ“้€‰ๆ‹ฉ
AgentHistoryagent/views.pyๅކๅฒๆถˆๆฏ็ฎก็† + ๅŽ‹็ผฉ
Judgeagent/judge.pyLLM ่ฏ„ไผฐ๏ผšไปปๅŠกๅฎŒๆˆ่ดจ้‡ๆ‰“ๅˆ†
PlanItemagent/views.py่ง„ๅˆ’้กน๏ผštext + status (done/current/pending/skipped)

ไธƒใ€๐Ÿ“‚ ๅ…ณ้”ฎๆ–‡ไปถ

ๆ–‡ไปถไฝœ็”จไบฎ็‚น
agent/system_prompts/system_prompt.mdๆ ธๅฟƒ็ณป็ปŸๆ็คบ่ฏ~300่กŒ๏ผŒๆœ€่ฏฆๅฐฝ็š„ๆต่งˆๅ™จๆ“ไฝœ่ง„่Œƒ
agent/service.pyAgent ไธปๆœๅŠกstep() ไธปๅพช็Žฏ + ไบ‹ไปถๆ€ป็บฟ + ๅŽ‹็ผฉ
agent/prompts.pyๆ็คบ่ฏๆž„ๅปบSystemPrompt ็ฑป๏ผŒ9ไธชๅ˜ไฝ“
agent/judge.pyLLM ่ฏ„ไผฐ็”จ LLM ่ฏ„ๅˆคไปปๅŠกๅฎŒๆˆ่ดจ้‡
agent/views.pyๆ•ฐๆฎๆจกๅž‹AgentState, PlanItem, MessageCompactionSettings
tools/service.pyControllerๅŠจไฝœๆ‰ง่กŒๅ…ฅๅฃ
tools/registry/service.pyActionRegistryๅŠจไฝœๆณจๅ†Œ/ๆŽ’้™คๆœบๅˆถ
dom/service.pyDOM ๅค„็†CDP โ†’ ็ฎ€ๅŒ–DOMๆ ‘
browser/context.pyๆต่งˆๅ™จไธŠไธ‹ๆ–‡Playwright ๅฐ่ฃ…

ๅ…ซใ€โœจ ่ฎพ่ฎกไบฎ็‚น

1. DOM ็ดขๅผ•ไฝ“็ณป + ๆ–ฐๅ…ƒ็ด ๆ ‡่ฎฐ

้€š่ฟ‡ [index] ็ผ–ๅท + *[ ๆ–ฐๅ…ƒ็ด ๆ ‡่ฎฐ๏ผŒ่งฃๅ†ณไบ† LLM ไธŽๆต่งˆๅ™จไบคไบ’็š„ๆ ธๅฟƒ้—ฎ้ข˜๏ผšๅฆ‚ไฝ•็ฒพ็กฎๅผ•็”จ้กต้ขๅ…ƒ็ด ใ€‚ๆฏ” XPath/CSS selector ๆ›ด็›ด่ง‚๏ผŒๆฏ”ๅƒ็ด ๅๆ ‡ๆ›ดๅฏ้ ใ€‚

2. pre_done_verification ้˜ฒๅนป่ง‰

6 ๆญฅ้ชŒ่ฏๆธ…ๅ•ๅผบๅˆถ LLM ๅœจๅฃฐๆ˜ŽๅฎŒๆˆๅ‰้‡ๆ–ฐๆฃ€ๆŸฅโ€”โ€”็‰นๅˆซๅผบ่ฐƒ"ไธ่ฆ็”จ่ฎญ็ปƒ็Ÿฅ่ฏ†ๅกซ่กฅ็ฉบ็™ฝ"๏ผˆDo NOT use your training knowledge to fill gaps๏ผ‰ใ€‚่ฟ™ๆ˜ฏ็ฝ•่ง็š„ๆ˜พๅผ้˜ฒๅนป่ง‰ๆ็คบ่ฏ่ฎพ่ฎกใ€‚

3. ๅŠจไฝœๅˆ†็ฑป + ๆ•ˆ็އๆŒ‡ๅ—

ๅฐ†ๅŠจไฝœๅˆ†ไธบ"้กต้ขๆ”นๅ˜ๅž‹"๏ผˆๆ”พๆœ€ๅŽ๏ผ‰ใ€"ๅฏ่ƒฝ้กต้ขๆ”นๅ˜ๅž‹"๏ผˆ่ฟ่กŒๆ—ถ็›‘ๆŽง๏ผ‰ใ€"ๅฎ‰ๅ…จๅฏ้“พๆŽฅๅž‹"๏ผŒ่ฎฉ LLM ็†่งฃๅŠจไฝœๅ‰ฏไฝœ็”จ๏ผŒ้ฟๅ…ๆ— ๆ•ˆ็š„ๅŠจไฝœๅบๅˆ—ใ€‚

4. Judge ่ฏ„ไผฐ็ณป็ปŸ

็”จๅฆไธ€ไธช LLM ่ฐƒ็”จๆฅ่ฏ„ไผฐ Agent ็š„ไปปๅŠกๅฎŒๆˆ่ดจ้‡โ€”โ€”ไธๅชๆ˜ฏ่‡ชๆˆ‘ๆŠฅๅ‘Š success/fail๏ผŒ่€Œๆ˜ฏ็‹ฌ็ซ‹่ฏ„ไผฐใ€‚่ฟ™ไธบ่‡ชๅŠจๅŒ–่ฏ„ๆต‹ๆไพ›ไบ†ๅฏ่ƒฝใ€‚

5. ๆจกๅž‹็‰นๅฎšๆ็คบ่ฏๅ˜ไฝ“

9 ไธชๆ็คบ่ฏๆ–‡ไปถ๏ผŒ้’ˆๅฏนไธๅŒๆจกๅž‹่ƒฝๅŠ›่ฐƒไผ˜โ€”โ€”Flash ๆจกๅž‹็”จ็ฒพ็ฎ€็‰ˆ๏ผŒๆ— ๆ€็ปด้“พๆจกๅž‹็งป้™ค thinking blockใ€‚่ฟ™ๆ˜ฏ"ๆ็คบ่ฏๅทฅ็จ‹"ไปŽ"ๅ†™ไธ€ไธชๅฅฝ็š„ๆ็คบ่ฏ"ๅˆฐ"ไธบไธๅŒๆจกๅž‹ๅ†™ไธๅŒๆ็คบ่ฏ"็š„่ฟ›ๅŒ–ใ€‚

6. ่ง„ๅˆ’็ณป็ปŸ (plan_update + current_plan_item)

ไธๆ˜ฏ็กฌ็ผ–็ ็š„่ง„ๅˆ’ๆก†ๆžถ๏ผŒ่€Œๆ˜ฏ่ฝป้‡็บง็š„ LLM ่‡ช้ฉฑๅŠจ่ง„ๅˆ’๏ผšๅคๆ‚ไปปๅŠก่พ“ๅ‡บ plan_update๏ผŒ็ฎ€ๅ•ไปปๅŠก็›ดๆŽฅๅšใ€‚ๅœจ่พ“ๅ…ฅไธญ็”จ [x] [>] [ ] [-] ๆ ‡่ฎฐ่ฎฉ LLM ็œ‹ๅˆฐ่ง„ๅˆ’่ฟ›ๅบฆใ€‚

๐ŸŽฏ Browser Use ๅฏนไฝ ๆž„ๅปบ Agent ็š„ๅฏ็คบ๏ผš
ๆทฑๅบฆ็ ”็ฉถ็”Ÿๆˆ ยท 2026-05-17 18:22