บันทึกเริ่มเล่น AI ที่เครื่องตัวเอง ด้วย Open WebUI
ไม่ต้องอ้อมค้อม เราจะมาลองรัน Generative ai ที่เครื่องกัน ที่โดยเครื่องมือที่เราจะใช้มีชื่อว่า Open WebUI โดยเมื่อรันเสร็จ เราจะได้เว็บหน้าตาแบบถามตอบ เหมือนพวก ChatGPT หรือ Gemini กันเลย

แต่ก่อนจะไปต้องอธิบายก่อนว่า ส่วนที่เราจะติดตั้งมี 2 ส่วน คือตัวหน้าเว็บที่เป็น UI และส่วนที่เป็นตัว LLM server ที่ฮิตสุดจะมีชื่อว่า Ollama
วิธีการลงเราจะใช้ docker, docker compose เพราะสะดวกสุดสำหรับนักพัฒนา โดยถ้าใครมี LLM server อยู่แล้ว จะลงแค่เว็บ Open WebUI ก็ได้ แถมยังเลือกได้ด้วยว่าจะให้รันด้วย CPU หรือ GPU โดยของผมให้ลงทั้ง UI และ ollma แล้วก็รันด้วย CPU ปกติเลย

ติดตั้ง และรัน
สร้าง docker-compose.yml
services:
open-webui:
image: ghcr.io/open-webui/open-webui:ollama
container_name: open-webui
ports:
- "3000:8080"
volumes:
- ollama:/root/.ollama
- open-webui:/app/backend/data
environment:
ENV: dev
restart: always
volumes:
ollama:
open-webui:
สำหรับคนที่จะลงแค่ตัว web ui ก็ใช้ image ghcr.io/open-webui/open-webui:main แทนนะครับ จะได้ไม่เสียเวลาโหลดมาก (ขนาด docker image ของ open-webui:main 4.22gb ส่วน open-webui:ollama 8.76gb)
run docker compose up
แล้วเข้าไปที่ localhost:3000
จะเจอหน้า Open WebUI

ทำการสมัคร admin account ให้เรียบร้อย จะเจอหน้า chat แต่เราจะไม่สามารถคุยได้ เพราะเรายังไม่มี model ซึ่งตอนนี้เรายังไม่มี ให้พิมพ์ชื่อ model ที่ต้องการ ที่ dropdown ด้านบนของจอ

สามารถเลือก model ต่าง ๆ ได้จาก Ollama โดย model ที่ใช้จะเป็น llama3.2 ครับ แล้วก็เลือก tag ที่ต้องการ อย่างผมจะเลือกเป็น 3b ก็ใส่เป็น llama3.2:3b จากนั้นก็รอ pull เมื่อสำเร็จ เป็นอันเรียบร้อย ลองคุยได้เลย

สังเกตว่าจะรอมันตอบนานหน่อย ไม่เร็วเท่าที่เล่นบนเว็บ ChatGPT อันนี้ขึ้นอยู่กับ spec เครื่องครับ 55555
ทดสอบดูว่า LLM อยู่ที่เครื่องเราจริงป่าว เลยลองปิด internet แล้วคุยดูมันก็ยังโต้ตอบเราได้อยู่ น่าจะโอเคแหละ
ลองคุยผ่าน API
ถ้าเราลอง inspect network ที่ browser จะเห็นว่า ทุกครั้งที่เราคุยจะมีการเรียก api อย่างงั้นก็หมายความว่า เราก็สามารถใช้ genarative ai ผ่าน api ได้แม้ไม่มีหน้า ui น่ะสิ !?
คำตอบคือใช่ครับ ถ้าดูเอกสารในเว็บของ Open WebUI ก็มีโพยไว้หมดแล้วครับ https://docs.openwebui.com/getting-started/advanced-topics/api-endpoints แต่พิเศษกว่านั้นคือ Open WebUI มันมี swagger มาให้ด้วย !! ลองไปที่ http://localhost:3000/docs#/ จะเจอหน้า swagger

เพิ่มเติม หน้า swagger จะมีให้เฉพาะ ENV: dev ถ้าไม่อยากให้เข้าถึงได้ก็แก้ ENV ได้ครับ โดย ENV Variables ทั้งหมดดูได้จาก https://docs.openwebui.com/getting-started/advanced-topics/env-configuration/
ลองเรียก GET `http://localhost:3000/api/models` ที่ browser ตรง ๆ หรือกดจาก swagger จะได้ model ที่เรามีอยู่ปัจจุบัน คือ llama3.2:3b กับ Arena Model ที่ติดมาด้วย แต่พอลองยิง curl จาก terminal ไม่ได้
curl -X 'GET' \
'http://localhost:3000/api/models' \
-H 'accept: application/json'
ติด {“detail”:”Not authenticated”} เราต้องไป gen api key ก่อน โดยไปที่ menu Settings > Account ถ้ายังไม่มีให้ generate API Key ได้เลย

แล้วยิง curl อีกที
curl -X 'GET' \
'http://localhost:3000/api/models' \
-H 'accept: application/json' \
-H 'Authorization: Bearer <YOUR_API_KEY>'
จะได้รายชื่อ model ที่เรามีใน Open WebUI เป็นอันเรียบร้อย
ลองคุยผ่าน ollama API
curl --location 'http://localhost:3000/ollama/api/generate' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <YOUR_API_KEY>' \
--data '{
"model": "llama3.2:3b",
"prompt": "ประเทศไทยมีกี่จังหวัด"
}'

คำตอบที่ได้จะทยอยมา แต่ถ้าอยากได้แบบเป็นมาโป้งเดียวเลย ให้เพิ่ม parameter stream: false
curl --location 'http://localhost:3000/ollama/api/generate' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <YOUR_API_KEY>' \
--data '{
"model": "llama3.2:3b",
"prompt": "ประเทศไทยมีกี่จังหวัด",
"stream": false
}'

สำหรับ API Spec ของ ollama ดูได้ที่ https://github.com/ollama/ollama/blob/main/docs/api.md
เพิ่มเติม Open WebUI ไม่จำเป็นต้องใช้กับ Ollama เท่านั้น ถ้าใครมี API Key ของ OpenAI อยู่แล้ว ก็สามารถเชื่อมต่อกับ Open WebUI ได้เลย โดยไปที่เมนู Admin Panel > Settings > Connections
หรือถ้าไม่ต้องการ ui ก็ลงแค่ตัว Ollama ตัวเดียวเลยก็ได้ แต่ข้อดีพอลงด้วย Open WebUI คือ api จะทำการ generate api key มาให้พร้อมเลย
เป็นอันเรียบร้อย ตอนนี้เรามี Generative AI ไว้ใช้เองที่เครื่อง ผ่านหน้าเว็บ หรือจะคุยผ่าน API ก็ยังได้ แถมมี API Key กันไว้อีกชั้นด้วย จะประยุกต์ไป deploy เป็น private ใช้ในองค์กร เทรน LLM ให้เก่งเฉพาะด้านก็ได้ ไม่ต้องส่งข้อมูลออกไป LLM ตัวอื่นให้มีประเด็นเรื่องข้อมูลรั่วไหล แต่แลกกับทรัพยากรที่ต้องจ่ายเอง 55555
อ่อมีอีกตัว ชื่อ LM Studio อันนี้คล้ายกับ Open WebUI เหมือนกัน ไว้เป็นตัวเลือกครับบบบ