基于 Rowboat 快速構(gòu)建多智能體(Multi-Agent)工作流
Hello folks,我是 Luga,今天我們來聊一下人工智能應(yīng)用場景 - 構(gòu)建高效、靈活的計算架構(gòu)的多智能體工作流。
在 AI 驅(qū)動的自動化浪潮中,多智能體(Multi-Agent)系統(tǒng)正成為企業(yè)實現(xiàn)高效協(xié)作和智能化轉(zhuǎn)型的關(guān)鍵。然而,構(gòu)建一個多智能體工作流往往需要復(fù)雜的開發(fā)流程和高昂的成本,讓許多團隊望而卻步。
想象一下,如果我們只需描述一個簡單的想法,就能讓 AI 在幾分鐘內(nèi)生成一個高效的多智能體工作流,自動處理從客戶服務(wù)到物流協(xié)調(diào)的各種任務(wù)?Rowboat 正是這樣一款顛覆性的工具!
Rowboat 不僅能將我們的創(chuàng)意迅速轉(zhuǎn)化為可運行的工作流,還通過智能化的代理協(xié)作和靈活的集成方式,為各行各業(yè)帶來前所未有的效率提升。無論是打造一個食品配送的智能助手,還是優(yōu)化跨國電商的訂單處理,Rowboat 都能讓多智能體協(xié)作變得簡單、高效且觸手可及 ……
一、什么是 Rowboat 以及它能夠做什么 ?
作為一款革命性的 AI 工具,Rowboat 旨在幫助用戶快速構(gòu)建多智能體(Multi-Agent)工作流,輕松實現(xiàn)復(fù)雜的自動化任務(wù)。無論我們是希望打造一個智能客服系統(tǒng),還是需要協(xié)調(diào)多個代理完成企業(yè)級工作流,Rowboat 都能通過其直觀的設(shè)計和強大的技術(shù)支持,讓我們的想法在幾分鐘內(nèi)變?yōu)楝F(xiàn)實。
Rowboat 的 AI 助手基于先進的自然語言處理(NLP)和多智能體協(xié)作技術(shù),能夠理解復(fù)雜需求并生成高度定制化的工作流。生成的代理不僅功能明確,還能通過動態(tài)通信機制(如 HTTP 或消息隊列)實現(xiàn)高效協(xié)作。
我們以食品配送場景為例,假設(shè)作為一家食品配送公司的技術(shù)負責(zé)人,我們需要一個智能助手來處理配送狀態(tài)查詢和遺漏物品的申訴。我們只需輸入需求:“為一家食品配送公司構(gòu)建一個智能助手,負責(zé)處理配送狀態(tài)和遺漏物品問題,并包含必要的工具?!?Rowboat 的 Copilot 將迅速分析需求,自動生成一個多智能體工作流:
- 配送狀態(tài)代理(Agent 1):通過 API 調(diào)用實時查詢物流系統(tǒng),返回配送狀態(tài)(如“已送達”或“配送中”)。
- 遺漏物品申訴代理(Agent 2):接收客戶申訴,調(diào)用訂單數(shù)據(jù)庫核查物品清單,并生成申訴報告,提交給客服團隊。
- 工具支持:Copilot 會自動集成必要的工具,如物流查詢 API、訂單數(shù)據(jù)庫接口和通知系統(tǒng),確保工作流的無縫運行。
那么,在上述場景中,配送狀態(tài)代理可以在 0.5 秒內(nèi)返回查詢結(jié)果,申訴代理則能在 1 秒內(nèi)完成訂單核查,整體響應(yīng)時間遠低于人工處理。
二、Rowboat 技術(shù)實現(xiàn)解析
作為由 OpenAI 的 Agents SDK 提供技術(shù)支持,Rowboat 這一 SDK 為多智能體系統(tǒng)的開發(fā)提供了強大的基礎(chǔ)。
Agents SDK 包含了智能代理的通信協(xié)議、任務(wù)調(diào)度機制和動態(tài)協(xié)作工具,確保 Rowboat 能夠快速構(gòu)建和運行多智能體工作流。例如,Agents SDK 的任務(wù)調(diào)度器可以在 0.1 秒內(nèi)完成代理間的任務(wù)分配,協(xié)作效率遠超傳統(tǒng)系統(tǒng)。
得益于 OpenAI 的技術(shù)支持,Rowboat 成為構(gòu)建多智能體系統(tǒng)的最快工具之一,具體體現(xiàn)在如下幾個層面:
- 快速構(gòu)建:從創(chuàng)意到工作流生成,整個過程僅需 3-5 分鐘。例如,構(gòu)建一個包含 5 個代理的客服系統(tǒng)(如訂單查詢、退貨處理、通知發(fā)送)只需 4 分鐘。
- 高可靠性:Rowboat 的工作流經(jīng)過嚴(yán)格測試,運行穩(wěn)定性達 99.9%,即使在高負載場景下也能保持流暢運行。
- 可擴展性:用戶可以隨時添加新代理或工具,擴展工作流功能。例如,在食品配送系統(tǒng)中,后期隨時可以添加一個“優(yōu)惠券發(fā)放代理”,而無需修改現(xiàn)有工作流。
三、Rowboat 使用場景解析
Rowboat 提供了便捷的集成方式,支持通過 HTTP API 或 Python SDK 將生成的多智能體工作流嵌入到我們所構(gòu)建的應(yīng)用程序中:
1. 獲取項目 ID 和 API 密鑰:
在 Rowboat 的設(shè)置頁面中,找到所創(chuàng)建的工作流項目,復(fù)制其項目 ID 和自動生成的 API 密鑰。例如,項目 ID 可能是 proj_123456,API 密鑰可能是 sk_abcdef1234567890。
2. API 集成:
使用 HTTP API 調(diào)用 Rowboat 的端點,觸發(fā)多智能體工作流。例如,通過以下 HTTP 請求調(diào)用配送狀態(tài)查詢代理:
POST https://api.rowboat.ai/v1/projects/proj_123456/execute
Authorization: Bearer sk_abcdef1234567890
Content-Type: application/json
{
"agent": "delivery_status_agent",
"input": { "order_id": "ORD12345" }
}
上述請求返回結(jié)果可能為:
{"status": "delivered", "timestamp": "2025-04-27T10:00:00Z"}。
3. Python SDK 集成:
此外,Rowboat 還提供了 Python SDK,方便開發(fā)者在代碼中調(diào)用工作流。具體實現(xiàn)可參考如下:
from rowboat_sdk import RowboatClient
client = RowboatClient(project_id="proj_123456", api_key="sk_abcdef1234567890")
response = client.execute(agent="delivery_status_agent", input={"order_id": "ORD12345"})
print(response) # 輸出:{'status': 'delivered', 'timestamp': '2025-04-27T10:00:00Z'}
Rowboat 的 API 和 SDK 設(shè)計注重簡單性和高效性,支持高并發(fā)調(diào)用(每秒處理 1000 次請求)和低延遲響應(yīng)(平均延遲 0.3 秒)。
此外,Rowboat 提供詳細的錯誤日志和監(jiān)控工具,幫助開發(fā)者快速調(diào)試和優(yōu)化工作流。例如,若 API 調(diào)用失敗,系統(tǒng)會返回詳細的錯誤信息,如 {"error": "Invalid order_id", "code": 400},便于開發(fā)者定位問題。
以下為簡單的安裝部署,具體可參考如下步驟所示:
[lugalee@labs home ]% git clone https://github.com/rowboatlabs/rowboat.git
Cloning into 'rowboat'...
remote: Enumerating objects: 4582, done.
remote: Counting objects: 100% (1503/1503), done.
remote: Compressing objects: 100% (493/493), done.
remote: Total 4582 (delta 1087), reused 1021 (delta 1010), pack-reused 3079 (from 2)
Receiving objects: 100% (4582/4582), 13.86 MiB | 634.00 KiB/s, done.
Resolving deltas: 100% (2947/2947), done.
[lugalee@labs home ]% cd rowboat
[lugalee@labs rowboat] % docker-compose up --build
WARN[0000] The "OPENAI_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "AGENTS_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "QDRANT_URL" variable is not set. Defaulting to a blank string.
WARN[0000] The "QDRANT_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "OPENAI_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "COPILOT_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "QDRANT_URL" variable is not set. Defaulting to a blank string.
WARN[0000] The "QDRANT_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "QDRANT_URL" variable is not set. Defaulting to a blank string.
WARN[0000] The "QDRANT_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "OPENAI_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "GOOGLE_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "AWS_ACCESS_KEY_ID" variable is not set. Defaulting to a blank string.
WARN[0000] The "AWS_SECRET_ACCESS_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "RAG_UPLOADS_S3_BUCKET" variable is not set. Defaulting to a blank string.
WARN[0000] The "RAG_UPLOADS_S3_REGION" variable is not set. Defaulting to a blank string.
WARN[0000] The "QDRANT_URL" variable is not set. Defaulting to a blank string.
WARN[0000] The "QDRANT_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "OPENAI_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "FIRECRAWL_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "QDRANT_URL" variable is not set. Defaulting to a blank string.
WARN[0000] The "QDRANT_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "OPENAI_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "QDRANT_URL" variable is not set. Defaulting to a blank string.
WARN[0000] The "QDRANT_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "OPENAI_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "USE_AUTH" variable is not set. Defaulting to a blank string.
WARN[0000] The "AGENTS_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "COPILOT_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "USE_RAG" variable is not set. Defaulting to a blank string.
WARN[0000] The "QDRANT_URL" variable is not set. Defaulting to a blank string.
WARN[0000] The "QDRANT_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "USE_RAG_UPLOADS" variable is not set. Defaulting to a blank string.
WARN[0000] The "AWS_ACCESS_KEY_ID" variable is not set. Defaulting to a blank string.
WARN[0000] The "AWS_SECRET_ACCESS_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "RAG_UPLOADS_S3_BUCKET" variable is not set. Defaulting to a blank string.
WARN[0000] The "RAG_UPLOADS_S3_REGION" variable is not set. Defaulting to a blank string.
WARN[0000] The "USE_RAG_SCRAPING" variable is not set. Defaulting to a blank string.
WARN[0000] The "FIRECRAWL_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "USE_CHAT_WIDGET" variable is not set. Defaulting to a blank string.
[lugalee@labs rowboat ]% docker search python:3.12-slim
NAME DESCRIPTION STARS OFFICIAL
python Python is an interpreted, interactive, objec… 10078 [OK]
circleci/python Python is an interpreted, interactive, objec… 103
cimg/python 23
bitnami/python Bitnami container image for Python 30
demisto/python The Demisto base python image 5
okteto/python 0
ubuntu/python A chiselled Ubuntu rock with the Python runt… 22
paketobuildpacks/python 0
chainguard/python Build, ship and run secure software with Cha… 4
intel/python 0
corpusops/python https://github.com/corpusops/docker-images/ 1
stagex/python High-level scripting language 0
rootpublic/python 0
vulhub/python 1
linuxserver/python 0
clarinpl/python 0
koxudaxi/python Dockerfiles for CPython of lysnikolaou's tag… 0
dtcenter/python Necessary Python3 packages for plotting GRIB… 1
openeuler/python 0
nanozoo/python 0
python/docker-bpo Docker image for local development of http:/… 0
python/bpo-patroni 0
python/bpo-builder 0
appsvc/python 3
saagie/python Repo for python jobs 0
lugalee@labs rowboat % docker pull python:3.12-slim
Error response from daemon: Get "https://registry-1.docker.io/v2/library/python/manifests/sha256:85824326bc4ae27a1abb5bc0dd9e08847aa5fe73d8afb593b1b45b7cb4180f57": EOF
lugalee@labs rowboat % docker pull python:3.12-slim
3.12-slim: Pulling from library/python
16c9c4a8e9ee: Pull complete
a7d9a0ac6293: Pull complete
426290db1573: Pull complete
e8b685ab0b21: Pull complete
Digest: sha256:85824326bc4ae27a1abb5bc0dd9e08847aa5fe73d8afb593b1b45b7cb4180f57
Status: Downloaded newer image for python:3.12-slim
docker.io/library/python:3.12-slim
WARN[0000] The "CHAT_WIDGET_SESSION_JWT_SECRET" variable is not set. Defaulting to a blank string.
WARN[0000] The "MAX_QUERIES_PER_MINUTE" variable is not set. Defaulting to a blank string.
WARN[0000] The "MAX_PROJECTS_PER_USER" variable is not set. Defaulting to a blank string.
WARN[0000] The "VOICE_API_URL" variable is not set. Defaulting to a blank string.
WARN[0000] /Volumes/home/rowboat/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
[+] Running 1/1
? mongo Error Get "https://registry-1.docker.io/v2/": EOF 5.5s
Error response from daemon: Get "https://registry-1.docker.io/v2/": EOF
[lugalee@labs rowboat ]% docker-compose up --build
WARN[0000] The "OPENAI_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "FIRECRAWL_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "QDRANT_URL" variable is not set. Defaulting to a blank string.
WARN[0000] The "QDRANT_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "OPENAI_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "QDRANT_URL" variable is not set. Defaulting to a blank string.
WARN[0000] The "QDRANT_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "OPENAI_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "AGENTS_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "QDRANT_URL" variable is not set. Defaulting to a blank string.
WARN[0000] The "QDRANT_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "OPENAI_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "COPILOT_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "QDRANT_URL" variable is not set. Defaulting to a blank string.
WARN[0000] The "QDRANT_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "OPENAI_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "GOOGLE_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "AWS_ACCESS_KEY_ID" variable is not set. Defaulting to a blank string.
WARN[0000] The "AWS_SECRET_ACCESS_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "RAG_UPLOADS_S3_BUCKET" variable is not set. Defaulting to a blank string.
WARN[0000] The "RAG_UPLOADS_S3_REGION" variable is not set. Defaulting to a blank string.
WARN[0000] The "QDRANT_URL" variable is not set. Defaulting to a blank string.
WARN[0000] The "QDRANT_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "OPENAI_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "USE_AUTH" variable is not set. Defaulting to a blank string.
WARN[0000] The "AGENTS_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "COPILOT_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "USE_RAG" variable is not set. Defaulting to a blank string.
WARN[0000] The "QDRANT_URL" variable is not set. Defaulting to a blank string.
WARN[0000] The "QDRANT_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "USE_RAG_UPLOADS" variable is not set. Defaulting to a blank string.
WARN[0000] The "AWS_ACCESS_KEY_ID" variable is not set. Defaulting to a blank string.
WARN[0000] The "AWS_SECRET_ACCESS_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "RAG_UPLOADS_S3_BUCKET" variable is not set. Defaulting to a blank string.
WARN[0000] The "RAG_UPLOADS_S3_REGION" variable is not set. Defaulting to a blank string.
WARN[0000] The "USE_RAG_SCRAPING" variable is not set. Defaulting to a blank string.
WARN[0000] The "FIRECRAWL_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "USE_CHAT_WIDGET" variable is not set. Defaulting to a blank string.
WARN[0000] The "CHAT_WIDGET_SESSION_JWT_SECRET" variable is not set. Defaulting to a blank string.
WARN[0000] The "MAX_QUERIES_PER_MINUTE" variable is not set. Defaulting to a blank string.
WARN[0000] The "MAX_PROJECTS_PER_USER" variable is not set. Defaulting to a blank string.
WARN[0000] The "VOICE_API_URL" variable is not set. Defaulting to a blank string.
WARN[0000] The "QDRANT_URL" variable is not set. Defaulting to a blank string.
WARN[0000] The "QDRANT_API_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] /Volumes/home/rowboat/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
[+] Building 174.6s (40/44) docker:orbstack
=> => extracting sha256:02bb84e9f3412827f177bc6c020812249b32a8425d2c1858e9d71bd4c015f031 0.0s
=> [rowboat deps 1/4] RUN apk add --no-cache libc6-compat 5.8s
=> [rowboat builder 1/4] WORKDIR /app 0.2s
=> [rowboat runner 2/6] RUN addgroup --system --gid 1001 nodejs 0.1s
=> [rowboat runner 3/6] RUN adduser --system --uid 1001 nextjs 0.1s
=> [rowboat deps 2/4] WORKDIR /app 0.0s
=> [rowboat deps 3/4] COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* .npmrc* ./ 0.0s
=> [rowboat deps 4/4] RUN if [ -f yarn.lock ]; then yarn --frozen-lockfile; elif [ -f package-lock.json ]; then npm ci; elif [ -f pnpm-lock.yaml ]; th 51.6s
=> [copilot 5/5] COPY . . 0.1s
=> [copilot] exporting to image 0.2s
=> => exporting layers 0.2s
=> => writing image sha256:94f6406a4784d3c2e338a3e13541ab502d2e4d889b7ec2153de07611aefb7deb 0.0s
=> => naming to docker.io/library/rowboat-copilot 0.0s
=> [copilot] resolving provenance for metadata file 0.0s
=> [rowboat_agents 4/7] COPY pyproject.toml poetry.lock ./ 0.1s
=> [rowboat_agents 5/7] RUN poetry config virtualenvs.create false 0.6s
=> [rowboat_agents 6/7] RUN poetry install --no-interaction --no-ansi 17.9s
=> [rowboat_agents 7/7] COPY . . 0.1s
=> [rowboat_agents] exporting to image 1.6s
=> => exporting layers 1.5s
=> => writing image sha256:df19ea78b110fd388424f26f07fe266e96ce7fb6165d4f7d7a3b7a2c0fead36a 0.0s
=> => naming to docker.io/library/rowboat-rowboat_agents 0.0s
=> [rowboat_agents] resolving provenance for metadata file 0.0s
=> [rowboat builder 2/4] COPY --from=deps /app/node_modules ./node_modules 4.2s
=> [rowboat builder 3/4] COPY . . 0.1s
=> [rowboat builder 4/4] RUN if [ -f yarn.lock ]; then yarn run build; elif [ -f package-lock.json ]; then npm run build; elif [ -f pnpm-lock.yaml ]; 89.2s
=> => # code: 'ECONNREFUSED',
=> => # syscall: 'connect',
=> => # address: '::1',
=> => # port: 6379
=> => # }
=> => # Generating static pages (0/10) ...
=> => sha256:c4a5a5511f6e3abf8b4ac5e4a4396919e0409c4a31014c0c92b9d0b7098458aa 250B / 250B 1.9s
=> => sha256:82c07f2f6e35255b92eb16f38dbd22679d5e8fb523064138d7c6468e7bf0c15b 9.13kB / 9.13kB 0.0s
=> => sha256:108c90d07162a1dd892e1a19775220dbfaaeb91cb376bab64e09cdb8a46ea012 1.75kB / 1.75kB 0.0s
=> => extracting sha256:67e2e38f574308b54710381fc37a28a5addd050b2c6ed3ebbce9fd0c7b3bf234 0.4s
=> => extracting sha256:c4a5a5511f6e3abf8b4ac5e4a4396919e0409c4a31014c0c92b9d0b7098458aa 0.0s
=> [rowboat internal] load metadata for docker.io/library/node:18-alpine 6.0s
=> [copilot 2/5] WORKDIR /app 0.2s
=> [copilot 3/5] COPY requirements.txt . 0.0s
=> [copilot 4/5] RUN pip install --no-cache-dir -r requirements.txt 25.4s
=> [rowboat internal] load .dockerignore 0.0s
=> => transferring context: 118B 0.0s
=> [rowboat internal] load build context 0.1s
=> => transferring context: 3.28MB 0.0s
=> [rowboat base 1/1] FROM docker.io/library/node:18-alpine@sha256:8d6421d663b4c28fd3ebc498332f249011d118945588d0a35cb9bc4b8ca09d9e 3.8s
=> => resolve docker.io/library/node:18-alpine@sha256:8d6421d663b4c28fd3ebc498332f249011d118945588d0a35cb9bc4b8ca09d9e 0.0s
=> => sha256:c2281c62c4aadf92ea71a6c05e6c8e640634b6a99dc52a6e54575f9cb298a037 1.72kB / 1.72kB 0.0s
=> => sha256:c5914b9dd279c0f596933e65906cb3c6d2da5aae71e863e819e9b963997b1c17 6.20kB / 6.20kB 0.0s
=> => sha256:d84c815451acbca96b6e6bdb479929222bec57121dfe10cc5b128c5c2dbaf10a 39.66MB / 39.66MB 2.9s
=> => sha256:8bfa36aa66ce614f6da68a16fb71f875da8d623310f0cb80ae1ecfa092f587f6 1.26MB / 1.26MB 1.3s
=> => sha256:02bb84e9f3412827f177bc6c020812249b32a8425d2c1858e9d71bd4c015f031 443B / 443B 2.3s
=> => sha256:8d6421d663b4c28fd3ebc498332f249011d118945588d0a35cb9bc4b8ca09d9e 7.67kB / 7.67kB 0.0s
=> => extracting sha256:d84c815451acbca96b6e6bdb479929222bec57121dfe10cc5b128c5c2dbaf10a 0.6s
=> => extracting sha256:8bfa36aa66ce614f6da68a16fb71f875da8d623310f0cb80ae1ecfa092f587f6 0.0s
=> => extracting sha256:02bb84e9f3412827f177bc6c020812249b32a8425d2c1858e9d71bd4c015f031 0.0s
=> [rowboat deps 1/4] RUN apk add --no-cache libc6-compat 5.8s
=> [rowboat builder 1/4] WORKDIR /app 0.2s
=> [rowboat runner 2/6] RUN addgroup --system --gid 1001 nodejs 0.1s
=> [rowboat runner 3/6] RUN adduser --system --uid 1001 nextjs 0.1s
=> [rowboat deps 2/4] WORKDIR /app 0.0s
=> [rowboat deps 3/4] COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* .npmrc* ./ 0.0s
=> [rowboat deps 4/4] RUN if [ -f yarn.lock ]; then yarn --frozen-lockfile; elif [ -f package-lock.json ]; then npm ci; elif [ -f pnpm-lock.yaml ]; th 51.6s
=> [copilot 5/5] COPY . . 0.1s
=> [copilot] exporting to image 0.2s
=> => exporting layers 0.2s
=> => writing image sha256:94f6406a4784d3c2e338a3e13541ab502d2e4d889b7ec2153de07611aefb7deb 0.0s
=> => naming to docker.io/library/rowboat-copilot 0.0s
=> [copilot] resolving provenance for metadata file 0.0s
=> [rowboat_agents 4/7] COPY pyproject.toml poetry.lock ./ 0.1s
=> [rowboat_agents 5/7] RUN poetry config virtualenvs.create false 0.6s
=> [rowboat_agents 6/7] RUN poetry install --no-interaction --no-ansi 17.9s
=> [rowboat_agents 7/7] COPY . . 0.1s
=> [rowboat_agents] exporting to image 1.6s
=> => exporting layers 1.5s
=> => writing image sha256:df19ea78b110fd388424f26f07fe266e96ce7fb6165d4f7d7a3b7a2c0fead36a 0.0s
=> => naming to docker.io/library/rowboat-rowboat_agents 0.0s
=> [rowboat_agents] resolving provenance for metadata file 0.0s
=> [rowboat builder 2/4] COPY --from=deps /app/node_modules ./node_modules 4.2s
=> [rowboat builder 3/4] COPY . . 0.1s
=> [rowboat builder 4/4] RUN if [ -f yarn.lock ]; then yarn run build; elif [ -f package-lock.json ]; then npm run build; elif [ -f pnpm-lock.yaml ]; 100.6s
=> [rowboat runner 4/6] COPY --from=builder /app/public ./public 0.1s
=> [rowboat runner 5/6] COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ 0.2s
=> [rowboat runner 6/6] COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static 0.0s
=> [rowboat] exporting to image 0.2s
=> => exporting layers 0.2s
=> => writing image sha256:ea51a8a9b433eeb0fb8b99250204da9cf3f1b5ef00c13c4764ecc8f123fb19ed 0.0s
=> => naming to docker.io/library/rowboat-rowboat 0.0s
=> [rowboat] resolving provenance for metadata file 0.0s
[+] Running 9/9
? copilot Built 0.0s
? rowboat Built 0.0s
? rowboat_agents Built 0.0s
? Network rowboat_default Created 0.0s
? Container rowboat-copilot-1 Created 0.2s
? Container rowboat-mongo-1 Created 0.2s
? Container rowboat-redis-1 Created 0.2s
? Container rowboat-rowboat_agents-1 Created 0.2s
? Container rowboat-rowboat-1 Created 0.2s
Attaching to copilot-1, redis-1, rowboat-1, rowboat_agents-1
安裝完成后,直接本地訪問:http://localhost:3000/projects/select
今天的解析就到這里,欲了解更多關(guān)于 Rowboat 相關(guān)技術(shù)的深入剖析,最佳實踐以及相關(guān)技術(shù)前沿,敬請關(guān)注我們的微信公眾號:架構(gòu)驛站,獲取更多獨家技術(shù)洞察!
Happy Coding ~
Reference :[1] https://github.com/rowboatlabs/rowboat
Adiós !