Python × Ollama 教學:用本地 LLM (Large Language Model 大語言模型)將 JSON 逐筆自動轉成中文自然語言

加入好友
加入社群
Python × Ollama 教學:用本地 LLM (Large Language Model 大語言模型)將 JSON 逐筆自動轉成中文自然語言 - 儲蓄保險王

前言

使用 OpenAI API 轉自然語言雖然方便,但每次都要花錢。
現在你可以用 Ollama 在本地端免費執行
Qwen、Yi、Deepseek 等強大中文 LLM,
自動把結構化 JSON 資料轉成容易閱讀的中文摘要!


一、環境準備

1. 安裝並啟動 Ollama

ollama serve

運作正常的話,
Chrome連線http://localhost:11434/
要顯示Ollama is running

Python × Ollama 教學:用本地 LLM (Large Language Model 大語言模型)將 JSON 逐筆自動轉成中文自然語言 - 儲蓄保險王

或者在cmd中輸入:

curl http://localhost:11434

看到像這樣的回應:

Python × Ollama 教學:用本地 LLM (Large Language Model 大語言模型)將 JSON 逐筆自動轉成中文自然語言 - 儲蓄保險王

下載支援中文的模型(任選)

ollama pull qwen:7b

ollama pull yi:9b

ollama pull deepseek-llm:7b

ollama pull deepseek-r1:8b

把pull改成 run 可以在terminal與LLM對話
/bye 離開對話模式
ollama list 可以顯示已經下載的模型

Python × Ollama 教學:用本地 LLM (Large Language Model 大語言模型)將 JSON 逐筆自動轉成中文自然語言 - 儲蓄保險王

Qwen(qwen:7b)
阿里巴巴開發,中文理解力強,摘要/轉寫表現出色。

Yi(yi:9b)
百川智能開發,中文和英文都很穩定,適合多領域應用。

Deepseek(deepseek-llm:7b)
開源大模型,中文能力佳且推理能力不俗

更多模型可查詢 Ollama 官方模型庫

Python × Ollama 教學:用本地 LLM (Large Language Model 大語言模型)將 JSON 逐筆自動轉成中文自然語言 - 儲蓄保險王

二、Python 程式簡介

這份程式會「逐筆」將 JSON 中每一筆資料,
透過本地 LLM 轉成自然語言描述,
過程中即時存檔,避免中途斷掉資料遺失,
程式執行期間, ollama serve 的terminal不能關掉,
要先pip install ollama。


三、簡化範例程式

import os
import json
from ollama import Client 
#要先 pip install ollama

# 設定資料路徑
json_path = "你的資料夾/fixtureRepair.json"
save_dir = "你的資料夾/Neutral Lang"
os.makedirs(save_dir, exist_ok=True)

# 選擇模型qwen:7byi:9bdeepseek-llm:7b
model_name = "qwen:7b"
save_path = os.path.join(save_dir, 
    f"nl_by_{model_name.replace(':','-')}.json")
tmp_path = os.path.join(save_dir, 
    f"nl_tmp_by_{model_name.replace(':','-')}.json")

# 讀取 JSON 原始資料
with open(json_path, "r", encoding="utf-8") as f:
    records = json.load(f)

# 連接本地 Ollama
client = Client(host="http://localhost:11434")

# few-shot 範例 prompt
prompt = """
請將下列JSON格式的維修紀錄
轉換成精簡易懂的中文自然語言描述
若某些欄位為空則省略該資訊不要胡亂補充
範例
{
    "Family_家族": "['ASTORIA']",
    "sn_治具序号": "015ATR30",
    "faultType_故障分类": "UUT IP FAIL",
    "defectSymptom_故障现象": "無法正常開機",
    "rootCause_故障原因": "Agora 無法正常讀取",
    "correctiveAction_解决方案": "更換agor轉板*1",
    "startTime_开始时间": "2025/03/13 09:09:02",
    "endTime_完成时间": "2025/03/13 10:04:06"
}
輸出:2025年3月13日09:09,
ASTORIA家族的治具序號015ATR30發生UUT IP FAIL
現象為無法正常開機原因是Agora無法正常讀取
處理方式為更換Agora轉板於10:04修復完成

請處理下列資料
"""

# 逐筆處
nl_records = []
for i, rec in enumerate(records):
    user_prompt = prompt + json.dumps(rec, 
    ensure_ascii=False)
    response = client.chat(
        model=model_name,
        messages=[{"role": "user", 
        "content": user_prompt}]
    )
    content = response['message']['content']
    rec_nl = rec.copy()
    rec_nl["自然語言描述"] = content
    nl_records.append(rec_nl)
    # 每筆即時存檔避免資料遺失
    with open(tmp_path, "w", encoding="utf-8") as f:
        json.dump(nl_records, f, 
        ensure_ascii=False, indent=2)
    print(f"第{i+1}筆完成:{content}")

# 全部完成後存正檔
os.rename(tmp_path, save_path)
print("全部完成!已存檔:", save_path)

client.chat()
chat()generate() 差異與選用時機

1. chat() 方法

  • 用途:模擬多輪對話(如聊天機器人),可以一次傳入多個角色(user、assistant)訊息,維持上下文脈絡。
  • 適合情境:需要多輪互動、上下文記憶、或要自訂 system prompt。
  • 訊息格式messages=[{"role": "user", "content": "..."}],可以累積對話歷史。

2. generate() 方法

  • 用途:單次問題單次回答,適合簡單 Prompt→回應的場景。
  • 適合情境:只要發送一個 prompt、取得一個 output,不需要維持對話狀態。
  • 訊息格式:直接用 prompt="...",簡單直觀。

輸出格式差異

  • chat() 回傳物件要抓 response['message']['content']
  • generate() 回傳物件要抓 response['response']

範例比較

多輪對話(chat):

messages = [
    {"role": "system", "content": "你是一位專業助理"},
    {"role": "user", "content": "幫我介紹一下Python。"},
    {"role": "assistant", "content": "Python是一種簡單易用的程式語言。"},
    {"role": "user", "content": "它適合初學者嗎?"}
] #範例程式messages:List[dict] 長度僅1 ,效果同generate
response = client.chat(
    model="qwen:7b",
    messages=messages
)
print(response['message']['content'])

適合需要上下文的應用

單輪對話(generate):

response = client.generate(
    model="qwen:7b",
    prompt="請用一句話介紹Python。"
)
print(response['response'])

適合只要問一題就拿答案


from ollama import Client
上述是使用 ollama 客戶端庫
第二個方法使用 HTTP 請求
(requests 庫向本地運行的 Ollama API 發送請求)

import requests

url = "http://localhost:11434/api/generate"
payload = {
    "model": "llama3",
    "prompt": "用中文簡單介紹Ollama的用途。",
    "stream": False
}
response = requests.post(url, json=payload)
print(response.json()["response"])

小結

Python × Ollama 教學:用本地 LLM (Large Language Model 大語言模型)將 JSON 逐筆自動轉成中文自然語言 - 儲蓄保險王

如果只是單題單答,兩種方法都可以用,結果一樣!

四、重點說明

  • 逐筆處理+即時存檔:遇到中斷也能保留處理進度。
  • 模型切換超簡單:只要改 model_name,就能比對不同模型的表現。
  • prompt 內建 few-shot 範例:讓模型學會你想要的描述格式。

五、結論

只要安裝好 Ollama 跟中文 LLM,
就能本地高效安全地批次將結構化資料自動「翻譯」成自然語言。
不用花 OpenAI API 錢,也不用擔心資料外流!
缺點則是普通電腦執行速度極慢,
不適合數千筆資料的轉換

推薦hahow線上學習python: https://igrape.net/30afN

加入好友
加入社群
Python × Ollama 教學:用本地 LLM (Large Language Model 大語言模型)將 JSON 逐筆自動轉成中文自然語言 - 儲蓄保險王

儲蓄保險王

儲蓄險是板主最喜愛的儲蓄工具,最喜愛的投資理財工具則是ETF,最喜愛的省錢工具則是信用卡

You may also like...

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *