<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>coding on Astroicers Blog</title><link>https://astroicers.link/tags/coding.html</link><description>Recent content in coding on Astroicers Blog</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Mon, 02 Mar 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://astroicers.link/tags/coding/index.xml" rel="self" type="application/rss+xml"/><item><title>OpenHands AI 軟體開發代理</title><link>https://astroicers.link/p/openhands-ai-%E8%BB%9F%E9%AB%94%E9%96%8B%E7%99%BC%E4%BB%A3%E7%90%86.html</link><pubDate>Mon, 02 Mar 2026 00:00:00 +0000</pubDate><guid>https://astroicers.link/p/openhands-ai-%E8%BB%9F%E9%AB%94%E9%96%8B%E7%99%BC%E4%BB%A3%E7%90%86.html</guid><description>&lt;h2 id="專案簡介">專案簡介&lt;/h2>
&lt;p>&lt;a class="link" href="https://github.com/All-Hands-AI/OpenHands" target="_blank" rel="noopener"
>OpenHands&lt;/a>（前身為 OpenDevin）是一個開源的 AI 軟體開發代理平台。它能讓 AI 像人類開發者一樣操作電腦，執行程式撰寫、終端機指令、網頁瀏覽等任務。&lt;/p>
&lt;p>&lt;strong>GitHub Stars&lt;/strong>: 67K+&lt;/p>
&lt;h2 id="主要功能">主要功能&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>自主開發&lt;/strong> - AI 自動完成程式撰寫任務&lt;/li>
&lt;li>&lt;strong>終端操作&lt;/strong> - 執行 shell 指令和腳本&lt;/li>
&lt;li>&lt;strong>瀏覽器操作&lt;/strong> - 網頁搜尋和資料收集&lt;/li>
&lt;li>&lt;strong>檔案編輯&lt;/strong> - 讀寫程式碼檔案&lt;/li>
&lt;li>&lt;strong>多模型支援&lt;/strong> - Claude、GPT-4、本地模型&lt;/li>
&lt;/ul>
&lt;h2 id="快速開始">快速開始&lt;/h2>
&lt;h3 id="docker-部署">Docker 部署&lt;/h3>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker pull docker.all-hands.dev/all-hands-ai/runtime:0.21-nikolaik
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker run -it --rm &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -e &lt;span class="nv">SANDBOX_RUNTIME_CONTAINER_IMAGE&lt;/span>&lt;span class="o">=&lt;/span>docker.all-hands.dev/all-hands-ai/runtime:0.21-nikolaik &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -e &lt;span class="nv">LOG_ALL_EVENTS&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="nb">true&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -v /var/run/docker.sock:/var/run/docker.sock &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -v ~/.openhands:/root/.openhands &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -p 3000:3000 &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --name openhands &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> docker.all-hands.dev/all-hands-ai/openhands:0.21
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>訪問 &lt;code>http://localhost:3000&lt;/code>&lt;/p>
&lt;h3 id="設定-llm">設定 LLM&lt;/h3>
&lt;ol>
&lt;li>開啟設定頁面&lt;/li>
&lt;li>選擇 LLM Provider（Anthropic、OpenAI、Ollama）&lt;/li>
&lt;li>輸入 API Key&lt;/li>
&lt;li>選擇模型&lt;/li>
&lt;/ol>
&lt;h2 id="使用方式">使用方式&lt;/h2>
&lt;h3 id="基本對話">基本對話&lt;/h3>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">User: 幫我建立一個 Python FastAPI 專案，包含使用者認證功能
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">OpenHands:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1. 建立專案結構
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. 安裝依賴套件
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3. 撰寫認證邏輯
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">4. 建立 API 端點
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">5. 新增測試
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="程式碼修改">程式碼修改&lt;/h3>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">User: 修復 src/auth.py 中的 SQL Injection 漏洞
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">OpenHands:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1. 讀取檔案內容
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. 識別漏洞位置
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3. 使用參數化查詢修復
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">4. 驗證修改結果
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="除錯任務">除錯任務&lt;/h3>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">User: 這個 Python 腳本執行時報錯，請幫我修復
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[貼上錯誤訊息]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">OpenHands:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1. 分析錯誤訊息
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. 檢查相關程式碼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3. 找出問題根因
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">4. 提供修復方案並執行
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="進階設定">進階設定&lt;/h2>
&lt;h3 id="自訂工作空間">自訂工作空間&lt;/h3>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker run -it --rm &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -v /path/to/your/project:/opt/workspace &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -e &lt;span class="nv">WORKSPACE_MOUNT_PATH&lt;/span>&lt;span class="o">=&lt;/span>/opt/workspace &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> ...
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="使用本地模型">使用本地模型&lt;/h3>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 使用 Ollama&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-e &lt;span class="nv">LLM_MODEL&lt;/span>&lt;span class="o">=&lt;/span>ollama/llama3.3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-e &lt;span class="nv">LLM_BASE_URL&lt;/span>&lt;span class="o">=&lt;/span>http://host.docker.internal:11434
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="環境變數">環境變數&lt;/h3>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># LLM 設定&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">LLM_MODEL&lt;/span>&lt;span class="o">=&lt;/span>anthropic/claude-3-5-sonnet-20241022
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">LLM_API_KEY&lt;/span>&lt;span class="o">=&lt;/span>your-api-key
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 沙盒設定&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">SANDBOX_USER_ID&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="m">1000&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">SANDBOX_TIMEOUT&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="m">300&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 日誌&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">LOG_ALL_EVENTS&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="nb">true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">DEBUG&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="nb">true&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="agent-能力">Agent 能力&lt;/h2>
&lt;h3 id="可執行的動作">可執行的動作&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>動作&lt;/th>
&lt;th>說明&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>run&lt;/code>&lt;/td>
&lt;td>執行 shell 指令&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>read&lt;/code>&lt;/td>
&lt;td>讀取檔案&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>write&lt;/code>&lt;/td>
&lt;td>寫入檔案&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>browse&lt;/code>&lt;/td>
&lt;td>瀏覽網頁&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>think&lt;/code>&lt;/td>
&lt;td>規劃下一步&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>finish&lt;/code>&lt;/td>
&lt;td>完成任務&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="範例工作流程">範例工作流程&lt;/h3>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># OpenHands 內部執行流程&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">1.&lt;/span> &lt;span class="n">Think&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">分析使用者需求&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">2.&lt;/span> &lt;span class="n">Run&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">pip&lt;/span> &lt;span class="n">install&lt;/span> &lt;span class="n">fastapi&lt;/span> &lt;span class="n">uvicorn&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">3.&lt;/span> &lt;span class="n">Write&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">建立&lt;/span> &lt;span class="n">main&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">py&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">4.&lt;/span> &lt;span class="n">Write&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">建立&lt;/span> &lt;span class="n">requirements&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">txt&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">5.&lt;/span> &lt;span class="n">Run&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">python&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">m&lt;/span> &lt;span class="n">pytest&lt;/span> &lt;span class="n">tests&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">6.&lt;/span> &lt;span class="n">Finish&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">任務完成&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="安全考量">安全考量&lt;/h2>
&lt;h3 id="沙盒隔離">沙盒隔離&lt;/h3>
&lt;p>OpenHands 在 Docker 容器中執行，與主機系統隔離：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 限制網路存取&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">--network none
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 限制資源&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">--memory&lt;span class="o">=&lt;/span>4g
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">--cpus&lt;span class="o">=&lt;/span>&lt;span class="m">2&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="權限控制">權限控制&lt;/h3>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 唯讀掛載&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-v /path/to/code:/workspace:ro
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 非 root 使用者&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-e &lt;span class="nv">SANDBOX_USER_ID&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="m">1000&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="整合開發流程">整合開發流程&lt;/h2>
&lt;h3 id="github-整合">GitHub 整合&lt;/h3>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># .github/workflows/openhands.yml&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">AI Code Review&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">on&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="l">pull_request]&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">jobs&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">review&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">runs-on&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">ubuntu-latest&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">steps&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">uses&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">actions/checkout@v4&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">Run OpenHands Review&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">run&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">|&lt;/span>&lt;span class="sd">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> # 呼叫 OpenHands API 進行程式碼審查&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="vs-code-整合">VS Code 整合&lt;/h3>
&lt;p>透過 API 與編輯器整合：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">requests&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">requests&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">post&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;http://localhost:3000/api/chat&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">json&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="s1">&amp;#39;message&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s1">&amp;#39;解釋這段程式碼&amp;#39;&lt;/span>&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="相關連結">相關連結&lt;/h2>
&lt;ul>
&lt;li>&lt;a class="link" href="https://github.com/All-Hands-AI/OpenHands" target="_blank" rel="noopener"
>GitHub Repository&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://docs.all-hands.dev/" target="_blank" rel="noopener"
>官方文件&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="延伸閱讀">延伸閱讀&lt;/h2>
&lt;ul>
&lt;li>&lt;a class="link" href="https://astroicers.link/p/aider-ai-pair-programming/" >Aider AI 程式配對工具&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://astroicers.link/p/langchain-ai-framework/" >LangChain AI 應用開發框架&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://astroicers.link/p/dify-ai-platform/" >Dify AI 應用開發平台&lt;/a>&lt;/li>
&lt;/ul></description></item></channel></rss>