前言
使用 OpenAI API 轉自然語言雖然方便,但每次都要花錢。
現在你可以用 Ollama 在本地端免費執行
Qwen、Yi、Deepseek 等強大中文 LLM,
自動把結構化 JSON 資料轉成容易閱讀的中文摘要!
一、環境準備
1. 安裝並啟動 Ollama
- 下載安裝:Ollama 官網
- 啟動 Ollama 服務(cmd)
ollama serve
運作正常的話,
Chrome連線http://localhost:11434/
要顯示Ollama is running

或者在cmd中輸入:
curl http://localhost:11434
看到像這樣的回應:

下載支援中文的模型(任選)
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 可以顯示已經下載的模型

Qwen(qwen:7b)
阿里巴巴開發,中文理解力強,摘要/轉寫表現出色。
Yi(yi:9b)
百川智能開發,中文和英文都很穩定,適合多領域應用。
Deepseek(deepseek-llm:7b)
開源大模型,中文能力佳且推理能力不俗。
更多模型可查詢 Ollama 官方模型庫。

二、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:7b、yi:9b、deepseek-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"])
小結

如果只是單題單答,兩種方法都可以用,結果一樣!
四、重點說明
- 逐筆處理+即時存檔:遇到中斷也能保留處理進度。
- 模型切換超簡單:只要改
model_name
,就能比對不同模型的表現。 - prompt 內建 few-shot 範例:讓模型學會你想要的描述格式。
五、結論
只要安裝好 Ollama 跟中文 LLM,
就能本地高效安全地批次將結構化資料自動「翻譯」成自然語言。
不用花 OpenAI API 錢,也不用擔心資料外流!
缺點則是普通電腦執行速度極慢,
不適合數千筆資料的轉換
推薦hahow線上學習python: https://igrape.net/30afN
近期留言