UnoPim: 開源商品資訊管理平台。
v1.0.0 RELEASED — NOV 21, 2025 9.3K GITHUB STARS SCALES TO 10M+ PRODUCTS LARAVEL 12 / PHP 8.2+ 10+ AI PROVIDERS — BYOK MIT LICENSE — 100% OPEN SOURCE 1,293+ INSTALLATIONS WORLDWIDE v1.0.0 RELEASED — NOV 21, 2025 9.3K GITHUB STARS SCALES TO 10M+ PRODUCTS LARAVEL 12 / PHP 8.2+ 10+ AI PROVIDERS — BYOK MIT LICENSE — 100% OPEN SOURCE 1,293+ INSTALLATIONS WORLDWIDE
9.3KGitHub Stars
10M+商品擴展上限
1,283Commits
32+AI Agent 動作
30+多語系支援
| 欄位 | 值 |
|---|---|
| Repo | unopim/unopim |
| Latest | v1.0.0 |
| Stack | Laravel 12 |
| License | MIT |
UnoPim 的 市場定位 與競品差異。
Akeneo CE 自 2023 年起停止新增功能;Pimcore 功能完整但需要專職開發團隊維護;AtroPIM 採全 API 架構,學習曲線較陡。UnoPim 定位於中小品牌與 Laravel 生態系開發者:可用 Composer 單行安裝、內建 AI Agent、支援擴展至千萬商品規模,適合商品數量持續成長但團隊規模尚未達企業級的使用情境。
| 方案 | 適合對象 | 關鍵特徵 | 當前狀態 |
|---|---|---|---|
| UnoPim | 中小品牌、Laravel 生態系開發者 | Laravel 12AI Agent10M+ scale | 積極開發中 |
| Akeneo CE | 過渡期使用(準備搬到付費版) | Symfony2023 凍結 | 支援終止倒數 |
| Pimcore | 大型企業、PIM+MDM+CMS+DAM 全包 | Symfony全平台高客製 | 需專職開發團 |
| AtroPIM | 製造商、配銷商、複雜資料模型 | API-firstNo-code 建模 | 最高可配置性 |
12 項 核心功能 概覽。
F·01
Agentic PIM Chat
用自然語言操作整個目錄:搜尋、建立、批次更新、分類、生成內容、匯出。支援 multi-step tool calling,一個指令拆成多步驟自動執行。32 種以上預設動作可被觸發。
新功能 — v1.0.0
F·02
Magic AI 內容生成
串接 10 種以上 AI 平台(OpenAI、Anthropic、Gemini、Mistral⋯),加密儲存 API Key,動態切換模型。可生成描述、圖片、翻譯。
F·03
10M+ 規模
官方文件說明如何擴展到千萬商品等級。
F·04
多通路
同一批商品同時推到不同 channel,每個 channel 套用自己的屬性與內容版本。
F·05
多語系 / 多貨幣
支援 30+ 語系與多貨幣定價策略;每個語系可有獨立的翻譯與內容欄位。
F·06
權限與審核
使用者、角色、權限三層。Maker-Checker 工作流可選裝。
F·07
RESTful API
官方 Postman collection + PHP API client,PSR-18 相容。
F·08
Webhook
商品儲存/更新事件可非阻塞地推給訂閱方。
F·09
Import / Export 任務追蹤
支援 CSV / XLSX,配備即時任務追蹤器、視覺化日誌、拖放 ZIP 上傳。完成度評分(completeness score)作為非同步 queue 工作執行,可在「Needs Attention」儀表板看到資料品質警示。
F·10
DAM 數位資產管理
檔案與目錄管理、預覽、刪除、metadata 標籤、協作工具、CSV/XLSX 匯出資產分配。可與 PIM 商品連動。
擴充模組
F·11
版本控制
追蹤每一筆商品資料的變更歷史,可回溯。
F·12
明暗主題
Light / Dark UI 切換,含完整字符圖示集。
UnoPim 的 技術棧 組成。
| 元件 | 技術 | 版本 |
|---|---|---|
| Framework | Laravel | v12 |
| Runtime | PHP | 8.2+ |
| Front-end | Vue.js | SPA |
| Styling | Tailwind | CSS |
| Database | PostgreSQL | 14+ 推薦 |
| Database (alt) | MySQL | 8.0.32+ |
| Cache / Queue | Redis | latest |
| Search | Elasticsearch | optional |
| Build | Vite | latest |
| Package | Composer | 2.5+ |
| Node | Node.js | 18.17.1 LTS+ |
| Container | Docker | Compose v2+ |
三種 安裝路徑 與適用情境。
A · Composer
~ 8 min
# 1. 建立專案
composer create-project unopim/unopim
cd unopim
# 2. 跑安裝精靈
php artisan unopim:install
# 3. 啟動開發伺服器
php artisan serve
# 4. 啟動 queue worker(必要)
php artisan queue:work \
--queue=webhooks,system,default,completenessB · Docker
~ 5 min
# 1. Clone
git clone https://github.com/unopim/unopim.git
cd unopim
# 2. 複製環境變數
cp .env.docker .env
# 3. 起容器
docker compose up -d
# 4. 等 ~90 秒讓 migrations / seeders 跑完
# 然後打開瀏覽器
# http://localhost:8000/admin
# Email: admin@example.com
# Password: admin123C · AWS Marketplace AMI
~ 3 min
# 1. 從 AWS Marketplace 啟動 UnoPim AMI
# 2. 連線到 EC2 instance
chmod 400 your-key.pem
ssh -i your-key.pem ubuntu@your-ip
# 3. 跑 SSL 腳本(domain A record 已指向 IP)
sudo ./ssl-setup.sh
# 4. 開瀏覽器 https://yourdomain.com/
# 按「Continue」完成設定AI Agent 的 五個執行步驟 。
對話 → 執行的五個步驟
1
意圖辨識
使用者打 把所有 SKU 開頭為 TSH- 的商品翻成日文。LLM 解析出 entity(商品)、filter(SKU prefix)、action(翻譯)、locale(ja_JP)。
2
Tool Call 規劃
Agent 從 32+ 個註冊工具中挑出 product.search + locale.translate + product.update,並決定執行順序。
3
權限檢查
對照當前使用者的 role permission。沒有翻譯權限就停下來請使用者確認;有就丟到 queue。
4
多步執行
非同步派遣給 queue:work。每完成一筆推進度回 chat。需要長文生成時走「Needs Attention」儀表板等使用者覆核。
5
結果寫回 + 版本快照
更新成功後寫入版本控制,舊版可回滾。同時觸發 webhook 通知下游通路(Shopify、Bagisto 等)。
10+ AI 平台可選
BYOK · Encrypted · Dynamic Model
OpenAI GPT-4o
Anthropic Claude
Google Gemini
Mistral AI
Cohere Command
Azure OpenAI
Groq
Self-hosted LLM
憑證以加密形式儲存於資料庫,可逐 provider 測試連線,亦支援動態切換模型。同一條 prompt 可先用低成本模型生成草稿,再以高品質模型修潤。
Magic AI 任務的 Prompt 結構說明。
情境:為「無線藍牙耳機」批次生成多通路商品文案
輸入:原始供應商規格 → 輸出:可寫回 UnoPim attribute 的結構化 JSON,含 SEO 標題、短描述、長描述、條列特色、Schema.org 屬性。
[SYSTEM]
You are UnoPim's Magic AI content
agent. Generate product copy that
LLM-powered shopping assistants
(ChatGPT, Perplexity, Rufus) can
parse with high accuracy.
RULES
1. Output ONLY valid JSON.
2. Title ≤ 60 chars, include
primary attribute + brand.
3. Short desc ≤ 160 chars, must
include 1 use-case phrase.
4. Long desc 120-180 words,
3 paragraphs, no marketing
fluff. Lead with the spec
that matters most.
5. Bullets: 5-7 items, each
starts with the attribute
noun, not a verb.
6. Schema.org Product fields
required: brand, color,
audience, material.
7. Tone: "{{brand_voice}}"
8. Locale: "{{target_locale}}"
[USER]
{{raw_supplier_data}}
[ASSISTANT]
Respond with JSON only. No
preamble, no code fences.→
{
"sku": "WBT-X400-BLK",
"locale": "zh_TW",
"title": "Aurora X400 主動降噪無線耳機|40 小時續航",
"short_description": "通勤、遠距會議都適合的全包覆耳罩式藍牙耳機,40 小時電力一次帶你穿越工作日。",
"long_description": "Aurora X400 採用 40mm 動圈單體與雙 ENC 麥克風...",
"bullets": [
"主動降噪深度 35dB,地鐵環境可清晰聽見人聲音軌",
"電池續航 40 小時(開啟降噪 28 小時)",
"快充 10 分鐘提供 5 小時播放",
"藍牙 5.3 雙裝置同時連線",
"記憶泡棉耳罩,佩戴 2 小時無壓迫感",
"重量 248g,可折疊收納於原廠硬殼"
],
"schema": {
"brand": "Aurora",
"color": "墨黑",
"audience": "通勤者、遠端工作者",
"material": "鋁合金 + 蛋白皮"
},
"seo": {
"meta_title": "Aurora X400 降噪耳機|40hr 續航",
"meta_description": "40 小時續航的主動降噪耳機..."
},
"completeness_score": 0.94
}把規則寫死
UnoPim 的 attribute 是 schema,不是自由欄位。Prompt 裡明確指定字數上限與必填 Schema.org 欄位,可大幅降低需要人工修正的比例。
強制 JSON 模式
呼叫支援 JSON mode 的模型(GPT-4o、Claude)。「Output ONLY valid JSON」加上 response_format 約束雙保險,避免回傳 markdown 包裹的程式碼區塊。
用變數樣板
把 {{brand_voice}}、{{target_locale}}、{{raw_supplier_data}} 抽成 UnoPim 的 prompt template。同一個 prompt 可跨 channel、跨語系、跨 SKU 重用。
來自 Reddit、HN、Dev.to 的 實作意見 。
UnoPim 在公開論壇的討論量低於 Pimcore ,但圍繞「開源 PIM × AI Agent × 中小品牌」主軸的社群意見已逐漸形成共識。以下整理 r/ecommerce、r/laravel、r/SaaS、HN 與 Dev.to 上反覆出現的觀點,並收錄競品比較文中的結構性建議,供導入前參考。
「UnoPim 也可以當迷你 ERP 用。商品從供應商進到 UnoPim,再從 UnoPim 推給 Shopify、Magento、線下 POS。一個系統承接 master data 的角色。」
實作派觀點 USE-CASE
「Akeneo CE 已是倒數計時的選擇。2023 起停更,2026 終止支援。要嘛搬到付費版,要嘛現在就遷移。」
競品分析 STRATEGY
「先把 attribute 結構想清楚再裝。否則之後重建 family 會死人。」
架構建議 HACK
「Webhook queue 不開,下游永遠收不到通知。這是新手第一個坑。」
新手陷阱 GOTCHA
「LLM 補商品資料時記得用 RAG,把品牌規範放進 context,不要讓模型自由發揮。否則 50 個 SKU 會有 50 種語氣,品牌一致性整個崩。」
AI 工作流建議 AI-OPS
「GPT-4 對結構化資料的正確率比非結構化高了 3 倍(16% → 54%)。schema 不是 SEO 玩具,是 AI 商務的入場券。」
研究數據 DATA
「PIM 的 AI 分成 Level 0–4,多數市場上的『AI PIM』其實只到 Level 1(建議式)。真的能執行的(agentic)才會省人力。」
產業評論 FRAMEWORK
「BYOK 比 vendor lock 重要。AI 成本要自己控。」
成本控制 TIP
「PostgreSQL 而非 MySQL。官方推薦有其依據:商品 attribute 是 EAV-like 結構,PostgreSQL 的 JSONB 與索引能力對查詢效能影響顯著。」
效能調校 PERF
「Multimodal LLM 同時處理圖片與文字,可驗證商品描述與實品照片是否一致,用於識別供應商資料錯誤。」
品質保證 QA
「Webkul 是印度團隊,issue 回應算積極,PR 走流程嚴。」
維護者觀察 TEAM
四種 典型部署場景 說明。
USE CASE A — 全通路電商
同一批 SKU 推送至 5 個通路、3 個語系、2 種幣別。
UnoPim 作為 master data 來源。商品有一份「中性」的核心資料,再依 channel 套用該通路的標題長度、必填欄位、定價策略。日文版用 ja_JP locale 自動翻譯,歐元市場套用稅含定價。
ChannelsLocalesMulti-currencyShopify Connector
USE CASE B — B2B 配銷 / 工業
每個 SKU 含 200+ 個屬性,每月匯入供應商 CSV。
家具、五金、零組件、化工產品等類別每個 SKU 通常有兩三百個技術規格。UnoPim 的 attribute family 支援按產品類型套用模板,匯入 supplier CSV 後可由 AI Agent 補齊缺漏屬性並偵測單位不一致。
Attribute FamilyBulk ImportAI ValidationCompleteness Score
USE CASE C — Headless / Composable
以 UnoPim 作為商品資料 API 供應方。
前端是 Next.js 或 Nuxt,後台 ERP 是 SAP / Odoo。UnoPim 透過 REST API 對外提供商品資料給 storefront,再用 webhook 把更新事件推給 ERP 同步。PHP API client 是 PSR-18 相容,可塞進任何 PHP 專案。
REST APIWebhooksPSR-18Headless
USE CASE D — AI Discoverability 準備
提升商品在 ChatGPT、Perplexity、Rufus 的可發現性。
AI 搜尋引擎依據 schema 與權威清單推薦商品,而非 backlink。Schema.org Product / Offer / FAQPage / BreadcrumbList 等結構化資料欄位可由 UnoPim Magic AI 批次生成,並依 SKU 輸出 completeness score,標示尚未準備好被 AI 索引的商品。
Schema.orgMagic AISEOCompleteness
六個 常見配置錯誤 與修正方法。
!
忘記啟動 webhooks queue
下游通路收不到商品更新事件。queue:work 指令必須包含 webhooks 佇列。
!
選 MySQL 而非 PostgreSQL
官方推薦 PostgreSQL 14+。JSONB 索引對 EAV-like 商品屬性查詢效能差距明顯,等資料量起來才換很痛。
!
沒先設計 attribute family
直接建立 SKU 而未先規劃 attribute family,後續新增共用屬性或驗證規則時需逐筆修改。建議先設計 family 結構,再批次套用至 SKU。
!
Magic AI 沒設 prompt template
未設定 prompt template 時,每次呼叫 LLM 生成的文案語氣不一致。應將 brand voice、字數限制與必填欄位寫入 system prompt template 重複使用。
!
Port 衝突沒處理
本地已執行 MySQL / Redis 再啟動 Docker Compose 會產生 port 衝突。修改 .env 中的 FORWARD_DB_PORT 等變數後重啟即可解決。
!
把 AI API Key 寫死
UnoPim 內建加密儲存 BYOK。API Key 應透過後台 AI Platform 設定畫面新增,不應寫入 .env 或原始碼。
現在就開一個 terminal,跑 composer create-project。
© 2026 · UnoPim Field Guide · 繁體中文版
by Claude · for developers, by way of unopim/unopim