งานวิจัย · arXiv 2407.16741
OpenHands: แพลตฟอร์มเปิดสำหรับนักพัฒนาซอฟต์แวร์ AI ในฐานะเอเจนต์แบบเอนกประสงค์
OpenHands: An Open Platform for AI Software Developers as Generalist Agents
เผยแพร่ cs.SEcs.AIcs.CL arXivPDF
สรุปสามบรรทัด
- 🎯 การสร้าง บำรุงรักษา และประเมินผลเอเจนต์ซอฟต์แวร์ AI ข้ามงานโค้ดและเว็บต่างๆ อย่างปลอดภัย จำเป็นต้องมีแซนด์บ็อกซ์ เครื่องมือ และเบนช์มาร์กที่ทำซ้ำได้ซึ่งเป็นมาตรฐานเดียวกัน
- 🔧 OpenHands ผสานสถาปัตยกรรม event stream เข้ากับแซนด์บ็อกซ์ Docker, ไลบรารี AgentSkills ที่ขยายขีดความสามารถได้, การควบคุมเว็บผ่าน BrowserGym, การมอบหมายงานแบบมัลติเอเจนต์ และการทดสอบระบบร่วมกับ LLM จำลอง (mocked LLMs)
- 📈 การใช้ Claude 3.5 Sonnet โดยไม่มีการปรับแต่งพร้อมต์เฉพาะสำหรับเบนช์มาร์ก ทำให้ CodeActAgent มีอัตราการแก้ปัญหาสำเร็จ (resolve rate) อยู่ที่ 26.0% บน SWE-Bench Lite, 15.3% บน WebArena และ 52.0% บน GPQA Diamond
บทคัดย่อ
ซอฟต์แวร์เป็นหนึ่งในเครื่องมือที่ทรงพลังที่สุดที่มนุษย์มี ช่วยให้โปรแกรมเมอร์ผู้เชี่ยวชาญสามารถมีปฏิสัมพันธ์กับโลกได้อย่างลึกซึ้งและซับซ้อน ในขณะเดียวกัน ด้วยการพัฒนาของโมเดลภาษาขนาดใหญ่ (LLMs) จึงเกิดการเติบโตอย่างรวดเร็วของเอเจนต์ AI ที่มีปฏิสัมพันธ์และสร้างความเปลี่ยนแปลงในสภาพแวดล้อมรอบตัว ในบทความนี้ เราขอนำเสนอ OpenHands (เดิมชื่อ OpenDevin) แพลตฟอร์มสำหรับการพัฒนาเอเจนต์ AI ที่ทรงพลังและยืดหยุ่น ซึ่งมีปฏิสัมพันธ์กับโลกในลักษณะที่คล้ายคลึงกับนักพัฒนามนุษย์ ได้แก่ การเขียนโค้ด การโต้ตอบผ่านคอมมานด์ไลน์ และการท่องเว็บ เราอธิบายถึงวิธีที่แพลตฟอร์มรองรับการพัฒนาเอเจนต์ใหม่ การมีปฏิสัมพันธ์อย่างปลอดภัยกับสภาพแวดล้อมแซนด์บ็อกซ์เพื่อรันโค้ด การทำงานร่วมกันระหว่างหลายเอเจนต์ และการนำเบนช์มาร์กสำหรับประเมินผลมารวมไว้ จากเบนช์มาร์กที่รวบรวมไว้ในปัจจุบัน เราได้ทำการประเมินเอเจนต์ใน 15 งานที่ท้าทาย ซึ่งรวมถึงวิศวกรรมซอฟต์แวร์ (เช่น SWE-BENCH) และการท่องเว็บ (เช่น WEBARENA) และอื่นๆ OpenHands เผยแพร่ภายใต้สัญญาอนุญาต MIT แบบเปิดกว้าง เป็นโครงการชุมชนที่ครอบคลุมทั้งภาควิชาการและอุตสาหกรรม โดยมีผลงานร่วมพัฒนามากกว่า 2.1 พันครั้งจากผู้ร่วมพัฒนากว่า 188 คน
บทคัดย่อต้นฉบับ (ภาษาอังกฤษ)
Software is one of the most powerful tools that we humans have at our disposal; it allows a skilled programmer to interact with the world in complex and profound ways. At the same time, thanks to improvements in large language models (LLMs), there has also been a rapid development in AI agents that interact with and affect change in their surrounding environments. In this paper, we introduce OpenHands (f.k.a. OpenDevin), a platform for the development of powerful and flexible AI agents that interact with the world in similar ways to those of a human developer: by writing code, interacting with a command line, and browsing the web. We describe how the platform allows for the implementation of new agents, safe interaction with sandboxed environments for code execution, coordination between multiple agents, and incorporation of evaluation benchmarks. Based on our currently incorporated benchmarks, we perform an evaluation of agents over 15 challenging tasks, including software engineering (e.g., SWE-BENCH) and web browsing (e.g., WEBARENA), among others. Released under the permissive MIT license, OpenHands is a community project spanning academia and industry with more than 2.1K contributions from over 188 contributors.
คู่มือการอ่าน
ปัญหาและแรงจูงใจ
การพัฒนาซอฟต์แวร์เป็นหนึ่งในอินเทอร์เฟซที่ทรงประสิทธิภาพสูงสุดที่มนุษย์ใช้โต้ตอบกับโลกดิจิทัล แม้ว่าโมเดลภาษาขนาดใหญ่ (LLMs) จะสามารถสร้างโค้ดส่วนย่อยๆ ได้ แต่วิศวกรรมซอฟต์แวร์ในโลกแห่งความเป็นจริงต้องการการปฏิสัมพันธ์ระยะยาวอย่างต่อเนื่อง เช่น การสำรวจคลังโค้ด การแก้ไขสถาปัตยกรรมที่ประกอบด้วยหลายไฟล์ การรันคำสั่ง bash การอ่านเอกสารผ่านเว็บเบราว์เซอร์ และการแก้จุดบกพร่องด้วยตนเองโดยอาศัยผลลัพธ์จากการรันโปรแกรม
เฟรมเวิร์กเอเจนต์ก่อนหน้านี้มักประสบปัญหาข้อจำกัดทางสถาปัตยกรรมที่สำคัญ ได้แก่ การขาดสภาพแวดล้อมการรันโค้ดแบบแยกส่วน (isolated execution environments), ตัวรันโค้ดที่ไม่มีการเก็บสถานะ (stateless), การขาดความสามารถในการท่องเว็บแบบมัลติโมดอล หรือการไม่มีเครื่องมือประเมินผลมาตรฐานข้ามโดเมนที่หลากหลาย OpenHands (เดิมชื่อ OpenDevin) เข้ามาแก้ปัญหานี้ด้วยแพลตฟอร์มโอเพนซอร์ส (สัญญาอนุญาต MIT) ที่มีสภาพแวดล้อมรันไทม์แบบแซนด์บ็อกซ์, อินเทอร์เฟซระหว่างเอเจนต์กับคอมพิวเตอร์ (ACI) ที่ต่อขยายได้, การประสานงานระหว่างมัลติเอเจนต์ และชุดเบนช์มาร์กที่เป็นมาตรฐาน
แนวคิดหลัก
- สถาปัตยกรรม Event Stream: คำสั่งของผู้ใช้ การกระทำของเอเจนต์ และผลการสังเกตจากรันไทม์จะถูกบันทึกตามลำดับเวลาใน event stream ซึ่งช่วยรวมศูนย์การสื่อสารระหว่างฟรอนต์เอนด์ เอเจนต์ และแซนด์บ็อกซ์รันไทม์
- พริมิทิฟของภาษาโปรแกรม (PL Primitives): แทนที่จะใช้ API เฉพาะที่เปราะบาง การปฏิสัมพันธ์ของเอเจนต์จะอิงจากการกระทำทั่วไป ได้แก่
IPythonRunCellAction,CmdRunActionและBrowseInteractiveAction(ผ่าน BrowserGym) - AgentSkills ที่ขยายขีดความสามารถได้: แพ็กเกจ Python แบบโมดูลาร์ที่โหลดไว้ล่วงหน้าใน IPython kernel เพื่อให้ยูทิลิตีระดับสูง (เช่น การแก้ไขโค้ดตามบรรทัดโดยอิงจาก AST
edit_file, การแยกวิเคราะห์ PDF, การดึงภาพแบบมัลติโมดอล) โดยไม่ต้องสร้างแพ็กเกจเดิมซ้ำใหม่ - การมอบหมายงานของเอเจนต์ (Agent Delegation): เอเจนต์เฉพาะทางจะจัดการเวิร์กโฟลว์เฉพาะโดเมน (เช่น การมอบหมายงานเว็บผ่าน
AgentDelegateActionให้กับBrowsingAgentโดยเฉพาะ) - การควบคุมคุณภาพด้วยการทดสอบแบบจำลอง (Mocked Testing): การทดสอบ Continuous Integration เป็นประจำจะตรวจสอบการถดถอยของพร้อมต์ การกระทำ และความเสถียรของแซนด์บ็อกซ์ โดยใช้การแคชคู่พร้อมต์-การตอบสนองที่กำหนดไว้แน่นอน แทนการเรียกใช้ API จริงที่มีค่าใช้จ่ายสูง
ระเบียบวิธี (พร้อมสมการสำคัญ)
วงจรการทำงานของ OpenHands ทำงานบนฟังก์ชันแบบขั้นตอนวิกฤต (discrete step function) ซึ่งเอเจนต์จะจับคู่สถานะของสภาพแวดล้อม ไปสู่การกระทำ : ในที่นี้ สถานะจะรวบรวมประวัติการกระทำและการสังเกตก่อนหน้าทั้งหมดตามลำดับเวลา: โดยที่ ติดตามข้อมูลเมทาดาทาของสถานะเสริม (ต้นทุน LLM สะสม, สแตกการมอบหมายงานของมัลติเอเจนต์ที่กำลังทำงาน, พารามิเตอร์การกำหนดค่า)
สเปซของการกระทำ ประกอบด้วย:
CmdRunAction(command): รันคำสั่ง bash ใดๆ ใน Linux shell ปลายทางIPythonRunCellAction(code): รันโค้ด Python แบบเก็บสถานะใน Jupyter kernel ถาวร ซึ่งเปิดให้เข้าถึงAgentSkillsBrowseInteractiveAction(code): รันพริมิทิฟของ BrowserGym ที่ควบคุมด้วย Playwright (click(bid),fill(bid, val),goto(url)ฯลฯ)AgentDelegateAction(subtask, agent_name): ผลักเป้าหมายย่อยลงในสแตกเอเจนต์เพื่อเรียกใช้เอเจนต์เฉพาะทางAgentFinishAction(): สิ้นสุดการทำงาน
การรันระบบเกิดขึ้นภายในแซนด์บ็อกซ์ Docker แบบไคลเอนต์-เซิร์ฟเวอร์ที่มีความปลอดภัย คอนเทนเนอร์ Docker พื้นฐานจะถูกต่อเติมด้วยเซิร์ฟเวอร์ OpenHands REST API (runtime.py) โดยใช้กลไกการติดแท็กแบบคู่ ได้แก่ MD5 แฮชของเนื้อหา (target_image_repo:target_image_hash_tag) เพื่อความสามารถในการทำซ้ำอย่างเข้มงวด และแท็กทั่วไปตามความหมาย (runtime:oh_v{VERSION}_{BASE_IMAGE}_tag_{IMAGE_TAG}) สำหรับการบิลด์เลเยอร์พื้นฐานที่แคชไว้
ผลการทดลอง (พร้อมตัวเลขที่สำคัญที่สุด)
OpenHands ประเมินเอเจนต์แบบเอนกประสงค์ผ่าน 15 เบนช์มาร์ก ครอบคลุมทั้งวิศวกรรมซอฟต์แวร์ การท่องเว็บ และงานช่วยเหลือทั่วไป โดยไม่มีการปรับแต่งพร้อมต์เฉพาะเจาะจงในแต่ละเบนช์มาร์ก:
- SWE-Bench Lite (300 ชุดข้อมูล, ไม่ใช้คำใบ้):
CodeActAgent v1.8ที่ใช้claude-3-5-sonnet@20240620ทำอัตราการแก้ปัญหาสำเร็จได้ (ต้นทุนเฉลี่ย $1.10 ต่อชุดข้อมูล) ซึ่งดีกว่าSWE-Agent() และAutoCodeRover() และใกล้เคียงกับAider() - HumanEvalFix (164 ชุดข้อมูล):
CodeActAgent v1.5ที่ใช้gpt-4o-2024-05-13แก้ปัญหาได้ ในการตั้งค่าแบบ 0-shot self-debugging (เทียบกับ StarCoder2-15B ที่ได้ ) - WebArena (812 ชุดข้อมูล):
BrowsingAgent v1.0ทำได้ เมื่อใช้claude-3-5-sonnetและ เมื่อใช้gpt-4oขณะที่CodeActAgent v1.8ผ่านการมอบหมายงานทำได้ - MiniWoB++ (125 สภาพแวดล้อม):
BrowsingAgent v1.0แบบ Zero-shot ร่วมกับgpt-4oทำได้ - งานช่วยเหลือทั่วไปและการให้เหตุผล:
- GPQA Diamond: CodeActAgent v1.8 +
claude-3-5-sonnetทำคะแนนได้ (ต่ำกว่าเกณฑ์มาตรฐานผู้เชี่ยวชาญมนุษย์ที่ แต่ดีกว่า few-shot CoT GPT-4 ที่ทำได้ ) - GAIA (L1 Validation): GPTSwarm v1.0 ที่ใช้
gpt-4oทำได้ ( สำหรับ AutoGPT) - AgentBench (เซ็ตย่อย OS): CodeActAgent v1.5 ทำได้
- MINT (คณิตศาสตร์ / โค้ด): CodeActAgent v1.5 ทำได้ ในด้านคณิตศาสตร์ และ ในด้านโค้ด
- GPQA Diamond: CodeActAgent v1.8 +
ข้อจำกัดและประเด็นที่ยังเปิดกว้าง
- การแก้ไขไฟล์ขนาดยาว: พริมิทิฟการแก้ไขในปัจจุบันยังมีปัญหากับคลังโค้ดขนาดใหญ่หรือไฟล์ต้นฉบับที่มีความยาว ซึ่งการเลื่อนของเลขบรรทัดทำให้เกิดข้อขัดแย้งในการแก้ไข (edit conflicts)
- การบูรณาการมัลติโมดอล: แม้ว่าสกิลเสริม (
parse_image,parse_pdf) จะสามารถดึงข้อความหรือสรุปรูปภาพผ่านโมเดลวิชันภายนอกได้ แต่การให้เหตุผลแบบมัลติโมดอลในเบราว์เซอร์และเทอร์มินัลแบบเนทีฟยังไม่ได้ถูกรวมเข้าด้วยกันอย่างสมบูรณ์ - การทำงานอัตโนมัติของเวิร์กโฟลว์: เวิร์กโฟลว์ส่วนใหญ่ยังคงพึ่งพา system prompts ที่เขียนขึ้นเองและลูปการประสานงานของเอเจนต์ แทนที่จะเป็นสถาปัตยกรรมกราฟที่ปรับให้เหมาะสมโดยอัตโนมัติ (เช่น GPTSwarm)
คำศัพท์สำคัญ
- OpenHands
- แพลตฟอร์มโอเพนซอร์สที่ขับเคลื่อนโดยชุมชน สำหรับการสร้าง ปรับใช้ และประเมินผลเอเจนต์นักพัฒนาซอฟต์แวร์ AI ในสภาพแวดล้อมแซนด์บ็อกซ์
- CodeAct
- สถาปัตยกรรมเอเจนต์ที่รวมสเปซการกระทำไว้ที่การรันโค้ดภาษาโปรแกรมใดๆ (Python, bash, การกระทำบนเบราว์เซอร์) แทนที่จะใช้ JSON schemas แบบตายตัว
- Event Stream
- บันทึกประวัติแบบต่อท้ายเท่านั้น (append-only) ตามลำดับเวลา ซึ่งคอยติดตามการกระทำของเอเจนต์ การแทรกแซงของผู้ใช้ และผลการสังเกตสภาพแวดล้อมทั่วทั้งรันไทม์ของ OpenHands
- AgentSkills
- แพ็กเกจยูทิลิตี Python แบบโมดูลาร์ที่ใส่เข้าไปในแซนด์บ็อกซ์ IPython kernel เพื่อช่วยเอเจนต์ในการแก้ไขไฟล์ การนำทาง และการแยกวิเคราะห์เอกสาร
- BrowserGym
- สภาพแวดล้อมการทำงานอัตโนมัติของเบราว์เซอร์และภาษาการกระทำเฉพาะโดเมนที่พัฒนาบน Playwright ซึ่ง OpenHands ใช้สำหรับงานนำทางบนเว็บ
- Agent Runtime
- สภาพแวดล้อมการรันแบบไคลเอนต์-เซิร์ฟเวอร์ที่แยกส่วน ซึ่งทำงานอยู่ภายในคอนเทนเนอร์ Docker เพื่อจัดการคำสั่ง bash, โค้ดเซลล์ IPython และเซสชันเบราว์เซอร์
- AgentDelegateAction
- ประเภทการกระทำเฉพาะที่ช่วยให้เอเจนต์หลักแบบเอนกประสงค์สามารถมอบหมายงานย่อยที่เจาะจงให้กับเอเจนต์ผู้เชี่ยวชาญเฉพาะด้านได้
- SWE-Bench
- เบนช์มาร์กที่ประเมินความสามารถของเอเจนต์ในการแก้ไข issue บน GitHub ในโลกความเป็นจริง และผ่านชุดการทดสอบยูนิตเทสต์โดยไม่ต้องมีมนุษย์คอยชี้นำ
คำถามที่พบบ่อย
OpenHands และ OpenDevin แตกต่างกันอย่างไร?
OpenHands เป็นโครงการต่อยอดและเปลี่ยนชื่ออย่างเป็นทางการของ OpenDevin โดยพัฒนาจากการสร้าง Devin ของ Cognition ขึ้นมาใหม่ในแบบโอเพนซอร์ส ไปสู่การเป็นแพลตฟอร์มทั่วไปสำหรับการพัฒนาซอฟต์แวร์และเอเจนต์ดิจิทัลแบบเอนกประสงค์
OpenHands รักษาความปลอดภัยในการรันโค้ดใดๆ ได้อย่างไร?
การกระทำทั้งหมดของเอเจนต์ (คำสั่งเชลล์, ส่วนของโค้ด Python และการทำงานบนเบราว์เซอร์) จะถูกรันภายในคอนเทนเนอร์แซนด์บ็อกซ์ Docker ที่แยกส่วน ซึ่งสื่อสารกับแบ็กเอนด์ผ่าน REST API client จึงแยกขาดจากระบบโฮสต์อย่างสมบูรณ์
OpenHands ป้องกันการเรียกใช้ LLM ที่มีค่าใช้จ่ายสูงระหว่างการทดสอบอัตโนมัติได้อย่างไร?
เฟรมเวิร์กนี้มีชุดการทดสอบการทำงานร่วมกันแบบ end-to-end ซึ่งจะดักจับคำขอ LLM และส่งคืนคู่พร้อมต์-คำตอบที่แคชไว้และมีความแน่นอน โดยจะเรียกใช้โมเดลจริงอีกครั้งก็ต่อเมื่อมีการเปลี่ยนแปลงของพร้อมต์ที่กระทบต่อการทำงานเท่านั้น
OpenHands สามารถรันร่วมกับอิมเมจ Docker ใดๆ ของผู้ใช้ได้หรือไม่?
ได้ OpenHands มีเวิร์กโฟลว์การบิลด์ที่ติดตั้งเซิร์ฟเวอร์ API สำหรับการกระทำไว้บนอิมเมจ Docker พื้นฐานใดๆ ที่ผู้ใช้ระบุ โดยติดตามการบิลด์ผ่านแฮช MD5 ของซอร์สโค้ดและแท็กทั่วไป
คำอธิบายในหน้านี้เขียนโดย AI จากงานวิจัยและอาจมีข้อผิดพลาด โปรดอ่านต้นฉบับเพื่อดูรายละเอียด