# 生成式AI應用於財務投資-1 2025/06/08 蘇彥庭 ## 1. Python環境建立 ### 1.1 Python與VS Code下載 * 安裝Python3.11,[程式下載連結](https://www.python.org/downloads/windows/) * 安裝VS Code,[程式下載連結](https://code.visualstudio.com/download) ### 1.2 Python虛擬環境建立 * 安裝Python延伸套件  * 在自己喜歡的目錄下,建立一個專案資料夾,並用VS Code開啟該資料夾  * 在VS Code環境下,按下`Ctrl+Shift+P`,選取`Python Select Interpreter`  * 選取`Create Virtual Environment`  * 選取`Venv`  * 選取虛擬環境的Python版本,按下後即會開始建立虛擬環境  * 環境建立完後,專案資料夾底下就會出現`.venv`,裡面即是Python的虛擬環境。下次開啟此專案資料夾時,會自動將虛擬環境載入  * 按下```Ctrl+` ```呼叫Terminal,選擇`cmd`,若執行路徑前面有跳出`(.venv)`,代表目前已在虛擬環境內  ### 1.3 Jupyter Notebook使用方式 * 在剛已建立好虛擬環境的專案下,建立`main.ipynb`,並開啟 * 開啟後,按下`Select Kernel`,選擇`Python Environments`,再選擇剛建立的`.venv`環境   * 第一次執行程式碼時,因為虛擬環境未安裝`ipykernel`套件,VS Code會跳出提示安裝。安裝完後,後續使用就不用再安裝。  --- ## 2. OpenAI ### 2.1 OpenAI API申請 * 連至[OpenAI API官網](https://openai.com/index/openai-api/) * OpenAI API採用Pay as you go付費模式,即用多少付多少,且需要先儲值到帳戶 * 儲值流程 * 點選設定  * 選取`Billing`,點選`Add to credict balance`  * 建立API * 點選`Project`底下的`API Keys`,再點選`Create new secret keys`  * 輸入API Key的名稱,方便後續辨識(可查詢用量/金額)  * 複製API Key,注意這邊只會呈現一次,關掉後即無法再看到。若沒有複製下來,可以再重新建立一次  ### 2.2 OpenAI API使用方式 * 以VS Code開啟剛建立的專案資料夾 * 建立環境變數檔案(`.env`),裡面放置OpenAI API Key  ```bash= OPENAI_API_KEY=sk-proj-gTsor62Yy0Z8op0... ``` * 建立套件清單檔案`requirements.txt` ```bash= python-dotenv openai ``` * 安裝套件,在Terminal輸入`pip install -r requirements.txt`,即可安裝所有套件 * 建立`main.ipynb`,輸入以下程式碼並執行: ```python= from dotenv import load_dotenv from openai import OpenAI # 讀取環境變數(OpenAI API KEY) load_dotenv() # 執行OpenAI API client = OpenAI() response = client.responses.create( model="gpt-4.1", input="Write a one-sentence bedtime story about a unicorn." ) # 輸出結果 print(response.output_text) ``` * 若有返回以下畫面,代表已成功使用OpenAI API。  * 若想了解更多OpenAI API的使用方式,可參考[OpenAI API官方使用手冊](https://platform.openai.com/docs/overview) ### 2.3 API收費方式 * 不同的模型有不同的收費標準 * 輸入(Input): 發送給模型的文字內容 * 快取輸入(Cached input): 如果你前面已經輸入過相同內容,再次使用時系統會重用這部分內容,並用較低價格或免費計算 * 輸出(Output): 模型回應給你的內容  * Token的計算方式: 可利用OpenAI的[Tokenizer](https://platform.openai.com/tokenizer)工具來評估測試  --- ## 3. Ollama ### 3.1 Ollama介紹 >Ollama: Get up and running with large language models  * 為何要使用Ollama? * 開源免費軟體,[GitHub專案連結](https://github.com/ollama/ollama) * 離線執行大型語言模型 * 資料隱私高需求場景(如企業內部資料處理) * 不穩定網路環境(如邊緣設備) * 避免高昂API費用(開發階段或大量查詢) * 簡單易用的介面 * Ollama提供非常簡潔的CLI(Command Line Interface) * 輸入`ollama run llama3`,即可在地端部署一個模型使用 * 支援多種主流免費開源模型 * 受惠於開源社群,通常最新的地端模型推出後,Ollama很快就可更新下載 * 對比雲端LLM訂閱或API計價模式,使用Ollama可完全零成本運行許多強大的模型 * 容易與地端應用整合 * Ollama可以協助建立API,讓程式快速調用,整合至應用服務。例如本地知識庫問答(RAG)、文件自動摘要、程式碼生成與維護輔助 * 結合像AutoGen、LangChain、LLM agents等架構,Ollama可作為背後的語言模型服務器,實現本地智慧代理人 * 資源控制與模型管理更靈活 * 控制模型佔用的資源(RAM、VRAM) * 隨時切換或刪除模型 * 不受API限速或Token限制 ### 3.2 Ollama安裝流程 1. 連線至[Ollama官網](https://ollama.com/) 2. 依電腦作業系統,下載對應的Ollama並安裝 3. 安裝完畢後,右下角的會出現Ollama的圖示  4. 若OS是Windows,開啟命令提示字元,輸入`ollama`,若有跑出以下畫面,代表安裝成功  ### 3.3 Ollama下載模型 1. 在Ollama官網的[Model查詢頁面](https://ollama.com/search),尋找想要的模型 2. 此處以下載gemma3模型做示範 * Gemma是Google基於Gemini技術所打造的一系列輕量級模型。Gemma3模型具備多模態能力,能處理文字與圖像,並支援長達128K的上下文視窗,涵蓋超過140種語言 * Gemma3有多種不同參數量的版本,此處我們選擇最少量的參數版本`gemma3:1b`做示範  3. 開啟Windows命令提示字元,輸入`ollama pull gemma3:1b`,即可開始下載模型  4. 模型下載完畢後,輸入`ollama run gemma3:1b`,即可與gemma3模型互動   ### 3.4 Ollama相關指令 * 查看目前ollama使用狀況: ``` ollama ps ```  由上圖可看出,目前Ollama已使用GPU載入`gemma3:1b`,並使用GPU記憶體1.9GB。 Ollama會自動判斷使用者的電腦是否有GPU,若有會啟用GPU載入模型。若沒有GPU則會使用CPU做運算,並占用系統主記憶體。 若模型一段時間未使用,Ollama會自動卸載模型。 * 查看Ollama目前可用的模型清單: ``` ollama ls ```  此處的Size是指模型占用的硬碟空間容量,載入模型時所消耗的記憶體會更多。 * 移除不需要的模型: ``` ollama rm gemma3:1b ``` 若模型占用硬碟空間太大,可適時刪除不需要的模型以釋放硬碟空間。 ### 3.5 LLM模型需要多少電腦資源? * 在推論(inference)階段,不同參數規模的LLM模型所需的GPU記憶體空間主要與以下因素有關: * 模型參數數量(如1B、7B、70B等) * 精度(FP32、FP16、BF16、INT8等) * 批次大小(batch size) * 最大輸入長度(sequence length) * 以下是針對常見精度(FP16)與單一輸入(batch size=1,sequence length約為2048 tokens)的粗略估算: | 模型大小 | 參數量 | FP16推論所需顯示記憶體(估算) | | ---- | ----- | -------------------- | | 1B | \~1B | 約 2–3 GB | | 7B | \~7B | 約 10–14 GB | | 12B | \~12B | 約 18–24 GB | | 27B | \~27B | 約 40–48 GB | | 70B | \~70B | 約 80–100+ GB(需要多GPU) | * 訓練一個 LLM(大型語言模型)所需的 GPU 記憶體資源遠高於推論,因為除了模型本身的參數,還需要儲存: * 前向傳播的中間激活值(activations) * 梯度(gradients) * 優化器狀態(如Adam:佔用約2倍參數量的記憶體) * 以下是針對標準FP16訓練(使用 mixed precision,activation checkpointing 啟用),batch size 為每張卡約 1–2 個 sample,訓練序列長度為 2048 tokens 的粗估: | 模型大小 | 參數量 | 訓練所需顯示記憶體(每張 GPU) | GPU 數量(大致估算) | | ---- | ----- | ----------------- | ------------------------------- | | 1B | \~1B | 約 8–12 GB | 1 張 16GB GPU 足夠 | | 7B | \~7B | 約 40 GB | 4–8 張 A100 40GB | | 12B | \~12B | 約 60 GB | 8–16 張 A100 40GB | | 27B | \~27B | 約 120 GB+ | 32 張 A100 40GB 或 16 張 A100 80GB | | 70B | \~70B | 超過 300 GB | 64–128 張 A100 80GB | ### 3.6 量化LLM模型 * 若仔細觀察Ollama頁面,會發現有各種量化的模型:   * 上述模型是以`GGUF`格式命名,命名規則如下: ``` [模型名稱]-[參數大小/版本/用途].[量化格式].gguf ``` * 用途說明 | 標示 | 名稱/用途說明 | 訓練方式 | 回應風格與特性 | 適用場景 | | ----------------- | --------------- | ------------------------------------- | ------------------- | --------------- | | `base` | 原始模型(未經微調) | 純語料預訓練(next-token prediction) | 無任務導向,回應通常不自然或跳脫主題 | 二次微調、用戶自行訓練所需的自定任務 | | `instruct` 或 `it` | 指令微調版 | 對人類指令資料做微調(如 OpenAI 的 InstructGPT 做法) | 回應直接、有邏輯,專注於執行指令 | 問答、摘要、翻譯等任務導向應用 | | `chat` | 對話訓練版本(chatbot) | 經過 RLHF 或類似對話資料訓練(模仿人機互動) | 回應更像真人、有情感、有時會加禮貌語氣 | 對話機器人、聊天應用 | * 量化格式說明 | 量化格式 | 意義 | | -------- | ------------------------- | | `Q2_K` | 2-bit 量化,K 系列,體積最小 | | `Q4_0` | 4-bit 基本量化 | | `Q4_K_M` | 4-bit 精細 K 系列 + M 子格式,效果佳 | | `Q5_K_S` | 5-bit 精細 K 系列 + S 子格式 | | `Q6_K` | 6-bit 精細量化 | | `Q8_0` | 8-bit 全精度近似量化,最接近 FP16 效果 | | `F16` | 半精度浮點(16-bit),幾乎是原始大小 | * 「量化LLM模型」是指對大型語言模型(Large Language Models, LLM)進行量化(Quantization),以降低模型的運算資源需求、減少模型大小,並提升在邊緣設備或低資源環境中部署的效率。 * 模型量化是將神經網路中使用的浮點數參數(如FP32)轉換為較低位元格式(如INT8、INT4)的一種技術,目的是: * 減少模型儲存空間 * 加快推論速度 * 降低記憶體與能源消耗 * 模型量化的缺點 * 精度損失: 特別明顯於低位元(INT4)或語言模型 * 部分任務效果不佳: 精度敏感任務無法量化過頭 * 硬體不支援: Edge/GPU 若不支援 INT8/INT4,將無法部署 * 部署流程複雜: 涉及權重校準、轉換格式與推論框架適配 * 難以處理非標準模型: 動態輸入、特殊控制邏輯難以靜態量化 * 精度與記憶體需求比較 | 數據類型 | 每個參數所需位元數 | 每個參數所需記憶體(Bytes) | 相對 FP32 壓縮比 | 備註 | | ------------------ | --------- | ---------------- | ----------- | ----------------- | | **FP32 (float32)** | 32 bits | 4 Bytes | 1×(無壓縮) | 常見於訓練時期 | | **FP16 (float16)** | 16 bits | 2 Bytes | 0.5× | 用於訓練/推論加速(支援 GPU) | | **INT8** | 8 bits | 1 Byte | 0.25× | 精度較高,支援硬體多 | | **INT4** | 4 bits | 0.5 Byte | 0.125× | 壓縮極高,對精度要求高 | * 以LLaMA-7B模型為例(約70億參數) | 精度 | 模型大小估算(占用GPU記憶體) | 節省空間 | | ---- | ------------ | ------ | | FP32 | 約 **28 GB** | - | | FP16 | 約 **14 GB** | -50% | | INT8 | 約 **7 GB** | -75% | | INT4 | 約 **3.5 GB** | -87.5% | --- ## 4. Open WebUI ### 4.1 Open WebUI介紹 Open WebUI是一個開源的Web使用者介面(UI),設計目的是提供一個美觀、易於使用的平台,用來與各種大型語言模型(LLMs,例如OpenAI的ChatGPT、Local LLMs 如LLaMA、Mistral等)進行互動。它常與像是 OpenAI API 或 Ollama 等後端搭配使用,使使用者可以透過瀏覽器與這些語言模型進行聊天、查詢或測試應用。 * 為何要使用Open WebUI? * 開源免費軟體,[GitHub專案連結](https://github.com/open-webui/open-webui) * 本地部署 & 隱私保障 * 可以在本地環境中部署,保障資料隱私,特別適合公司內部、教育機構或隱私敏感應用。 * 支援多種後端模型 * 可與各種 LLM 後端整合,例如: * OpenAI(GPT-3.5, GPT-4) * Ollama(支援 LLaMA、Mistral、Gemma等本地模型) * LM Studio * LocalAI * Hugging Face提供的API * 多使用者支援 * 提供帳號系統,可建立多位使用者,適合團隊使用。 * 對話管理功能 * 可儲存、切換多個對話紀錄,支援conversation history,方便回顧與管理。 * 直觀 UI * 使用現代化前端框架打造,操作流暢、界面乾淨。 * 開源自由擴充 * 原始碼完全開放,開發者可以根據需求客製功能或整合企業內部工具。 ### 4.2 安裝方式 1. 安裝Python3.11,[程式下載連結](https://www.python.org/downloads/windows/) 2. 安裝VS Code,[程式下載連結](https://code.visualstudio.com/download) 3. 建立Python虛擬環境: `python -m venv openwebui` 4. 安裝套件: `pip install open-webui` 5. 啟動Open WebUI: `open-webui serve` 6. 啟動完成後,在瀏覽器輸入: `http://localhost:8080`,即可看到Open WebUI網站  ### 4.3 Open WebUI設定流程 1. 初次登入會需要設定管理員帳號  2. 若有裝Ollama,會自動載入Ollama上以下載的LLM模型  3. OpenWebUI可同時對多個模型詢問問題,觀看模型回答的差異  4. 將OpenAI的API Key加到Open WebUI平台內   5. 設定完後,可看到Open WebUI平台的模型清單已加入OpenAI的模型  6. 一樣可以同時對多個模型詢問,觀看模型回答的差異 
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up