應用場景與解決方案

AI 批次生成多語言商品標題和描述:從 CSV 商品資料到標題、五點賣點與詳情文案

6 個步驟 11 分鐘閱讀 87 次閱讀 0
本文目錄

跨境賣家往往要把同一款商品上架到 Shopee、Lazada、Amazon、TikTok Shop 和獨立站,而且要用好幾種語言。大語言模型可以根據一份商品資料表格,一夜之間為數百個商品寫出標題、賣點和描述的初稿。本文編寫一個小巧的 Python 指令碼:讀取 CSV 檔案,呼叫 Ollama 中的本地模型(或任意相容 OpenAI 的 AI API)為每種語言生成一條 Listing,並把結果寫入新的 CSV 檔案,由你稽核後再匯入各平台的上架模板。

AI 生成的初稿必須經過稽核才能釋出。模型可能會編造產品功能,或使用平台禁止的措辭,例如醫療功效宣稱或“全球最好”之類的說法。務必保留人工稽核環節,受監管類目尤其如此,並遵守各平台的商品釋出規則。

步驟 1:準備商品資料

新建一個表格,每個商品佔一行,以 UTF-8 編碼儲存為 products.csv(在 Excel 中另存為 CSV UTF-8 格式)。列名可以自行決定,所有列都會傳給模型,但指令碼要求必須有一個取值唯一的 sku 列:

sku,name,category,specs,keywords
LS-01,Bamboo laptop stand,Office,"6 height levels; fits 10-17 inch laptops; foldable; 1.1 kg; natural bamboo","laptop stand, bamboo, ergonomic"
BT-07,Wireless earbuds,Audio,"Bluetooth 5.3; 30 h playback with case; IPX5; USB-C charging","wireless earbuds, bluetooth, sport"

資料越精確(材質、尺寸、適配型號、包裝清單等),生成的結果就越好、越安全,因為指令碼會要求模型只使用這些資料。

步驟 2:安裝指令碼執行環境

apt install -y python3-venv
python3 -m venv /opt/listing
/opt/listing/bin/pip install openai

openai Python 庫既能對接 Ollama 的 OpenAI 相容介面,也適用於大多數 AI 服務商,因此同一個指令碼既可以呼叫本地模型,也可以呼叫雲端模型。Ollama 的部署方法請參閱使用 Ollama 部署本地大模型。

步驟 3:建立指令碼

cat > /opt/listing/listing.py <<'EOF2'
import csv, json, os, re, sys, time
from openai import OpenAI

client = OpenAI(base_url=os.environ.get("AI_BASE_URL", "http://127.0.0.1:11434/v1"),
                api_key=os.environ.get("AI_API_KEY", "ollama"))
MODEL = os.environ.get("AI_MODEL", "qwen2.5:7b")
LANGS = [l.strip() for l in os.environ.get("LANGS", "English").split(",")]

SYSTEM = """You write e-commerce product listings for online marketplaces.
Use only the product facts provided. Never invent features, materials,
certifications, prices or delivery promises. No exaggerated claims.
Return JSON only, in this format:
{"title": "...", "bullets": ["...", "...", "...", "...", "..."], "description": "..."}
title: at most 120 characters, main keyword first.
bullets: 5 short points, each starting with the benefit.
description: 80 to 150 words of plain text."""

def ask(product, lang):
    prompt = f"Write the listing in {lang}.\nProduct facts:\n{json.dumps(product, ensure_ascii=False)}"
    for attempt in range(3):
        r = client.chat.completions.create(model=MODEL, temperature=0.4, messages=[
            {"role": "system", "content": SYSTEM}, {"role": "user", "content": prompt}])
        m = re.search(r"\{.*\}", r.choices[0].message.content or "", re.S)
        try:
            data = json.loads(m.group(0))
            if data.get("title") and isinstance(data.get("bullets"), list) and data.get("description"):
                return data
        except (AttributeError, ValueError):
            pass
        time.sleep(2)
    raise RuntimeError(f"no valid answer for {product['sku']} / {lang}")

src, dst = sys.argv[1], sys.argv[2]
done = set()
if os.path.exists(dst):
    with open(dst, encoding="utf-8-sig") as f:
        done = {(r["sku"], r["language"]) for r in csv.DictReader(f)}
with open(src, encoding="utf-8-sig") as f:
    products = list(csv.DictReader(f))

new_file = not os.path.exists(dst)
with open(dst, "a", newline="", encoding="utf-8-sig") as f:   # utf-8-sig: Excel shows every language correctly
    w = csv.writer(f)
    if new_file:
        w.writerow(["sku", "language", "title", "bullets", "description"])
    for p in products:
        for lang in LANGS:
            if (p["sku"], lang) in done:
                continue
            d = ask(p, lang)
            w.writerow([p["sku"], lang, str(d["title"]).strip(),
                        "\n".join(str(b).strip() for b in d["bullets"]), str(d["description"]).strip()])
            f.flush()
            print(p["sku"], lang, "done", flush=True)
EOF2

指令碼要求模型以 JSON 格式返回,會檢查返回內容,不合格時最多重試三次。每完成一行就立即寫入檔案;再次執行時會跳過輸出檔案中已有的商品和語言,因此任務中斷後只需重新執行,就會從中斷處繼續。

步驟 4:執行指令碼

cd /data/listings
LANGS="English,Thai,Malay,Japanese" nohup /opt/listing/bin/python /opt/listing/listing.py \
  products.csv listings.csv > listing.log 2>&1 &
tail -f listing.log

在 CPU 伺服器上,7B 模型生成一條 Listing 通常需要幾十秒,因此 500 個商品、四種語言的任務大約要跑一整夜。如果想改用雲端模型,只需設定任意相容 OpenAI 的 API 的地址、金鑰和模型名稱:

AI_BASE_URL=https://ai.example.com/v1 AI_API_KEY=sk-your-key AI_MODEL=cloud-chat \
LANGS="English,Thai" /opt/listing/bin/python /opt/listing/listing.py products.csv listings.csv

請僅在 AI 服務商支援的地區、按其服務條款使用。

步驟 5:稽核與匯入

  1. 用 Excel 或 Google Sheets 開啟 listings.csv,按語言篩選。
  2. 對照各平台的限制檢查標題長度,並抽查內容是否與產品規格一致。
  3. 熱銷商品至少請母語人士稽核一次,確認文風合適。
  4. 把各列複製到各平台的批次上傳模板中;不同平台的列名各不相同。

步驟 6:最佳化生成效果

  • 把品牌調性和平台規則寫進 SYSTEM,例如停用詞列表、使用英式還是美式英語、不使用表情符號等。
  • 把一條稽核通過的 Listing 作為範例貼上到 SYSTEM 中,模型會高度模仿它的結構和語氣。
  • qwen2.5:14b 等更大的模型寫出的泰語、馬來語和越南語明顯更好,代價是速度更慢、記憶體佔用更多。
  • 同一個商品目錄請保持模型和提示詞不變,讓所有 Listing 的風格保持一致。

常見問題

平台或搜尋引擎會懲罰 AI 撰寫的 Listing 嗎?

電商平台關注的是內容是否準確、是否合規,搜尋引擎關注的是內容是否對使用者有幫助。經過人工稽核、準確具體的 Listing 沒有問題;而批次生產、含有錯誤或虛構宣稱的文案,無論是誰寫的都存在風險。

指令碼提示“no valid answer”後停止執行?

說明模型連續三次返回的都不是有效的 JSON。重新執行同一條命令即可(會從中斷處繼續),也可以調低溫度或換用更大的模型。

AI 能順便處理商品圖片嗎?

可以。如需批次摳圖並製作白底主圖,請參閱使用 rembg 批次去除商品圖片背景。

如果按以上步驟操作後問題仍未解決,請提交工單聯絡 IMIDC 7×24 技術支援,並附上伺服器 IP、所用模型、執行過的命令以及 listing.log 的最後幾行,方便工程師快速定位。

這篇文章有幫助嗎?

相關教程