02-347-7730  |  Saeree ERP - ระบบ ERP ครบวงจรสำหรับธุรกิจไทย ติดต่อเรา

Ollama API เชื่อมต่อ AI กับแอปและระบบองค์กร REST API Python JavaScript
  • 3
  • เมษายน

Ollama Series EP.5 — จาก EP.4 ที่เราสร้าง RAG ให้ AI ตอบจากเอกสารองค์กร ตอนนี้ถึงเวลาเชื่อมต่อ Ollama กับแอปพลิเคชันจริง! Ollama มี REST API ในตัวที่ทำงานบน Port 11434 — คุณสามารถเรียกใช้จาก Python, JavaScript, cURL หรือภาษาอะไรก็ได้ที่ส่ง HTTP Request ได้ บทความนี้จะพาคุณรู้จัก API Endpoints ทุกตัว พร้อม Code ตัวอย่างที่ทำตามได้ทันที ทั้ง Chatbot, ระบบสรุปเอกสาร, Automation Workflow และ Structured Output (JSON Mode)

สรุปสั้น — Ollama API ทำอะไรได้?

  • REST API ทำงานบน http://localhost:11434 — เรียกใช้จากภาษาใดก็ได้
  • /api/generate — สร้างข้อความจาก Prompt (Single-turn)
  • /api/chat — แชทแบบมีบทสนทนา (Multi-turn)
  • /api/embeddings — แปลงข้อความเป็น Vector (สำหรับ RAG)
  • Structured Output — บังคับให้ AI ตอบเป็น JSON ตาม Schema ที่กำหนด
  • Streaming — รับคำตอบทีละคำ แบบ Real-time (เหมือน ChatGPT)
  • Compatible กับ OpenAI API — ใช้แทน OpenAI ในแอปที่มีอยู่ได้เลย

Ollama API — ภาพรวม Endpoints

Ollama Server ทำงานบน http://localhost:11434 โดยอัตโนมัติ (เริ่มทำงานเมื่อ ติดตั้ง Ollama แล้ว) มี Endpoints หลักดังนี้:

Endpoint Method ทำอะไร ใช้เมื่อ
/api/generate POST สร้างข้อความจาก Prompt คำถามเดี่ยว, สรุปข้อความ, แปลภาษา
/api/chat POST แชทแบบมีประวัติบทสนทนา Chatbot, ผู้ช่วย AI ที่จำบทสนทนาได้
/api/embeddings POST แปลงข้อความเป็น Vector RAG, Semantic Search, จัดหมวดหมู่เอกสาร
/api/tags GET ดูรายชื่อ Model ที่มี แสดง Dropdown เลือก Model ในแอป
/api/show POST ดูข้อมูล Model (ขนาด, Parameters) แสดง Model Info ในแอป
/api/pull POST ดาวน์โหลด Model จัดการ Model ผ่าน API
/api/delete DELETE ลบ Model จัดการพื้นที่เก็บข้อมูล
/v1/chat/completions POST OpenAI-compatible API ใช้แทน OpenAI API ในแอปที่มีอยู่

/api/generate — สร้างข้อความจาก Prompt

Endpoint พื้นฐานที่สุด — ส่ง Prompt ไป ได้คำตอบกลับมา:

cURL

curl http://localhost:11434/api/generate -d '{
  "model": "qwen2.5",
  "prompt": "อธิบาย ERP คืออะไร ภายใน 3 ประโยค",
  "stream": false
}'

Python

import requests

response = requests.post("http://localhost:11434/api/generate", json={
    "model": "qwen2.5",
    "prompt": "อธิบาย ERP คืออะไร ภายใน 3 ประโยค",
    "stream": False
})

print(response.json()["response"])

JavaScript (Node.js / Fetch)

const response = await fetch("http://localhost:11434/api/generate", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    model: "qwen2.5",
    prompt: "Explain what ERP is in 3 sentences",
    stream: false
  })
});

const data = await response.json();
console.log(data.response);

/api/chat — แชทแบบมีประวัติบทสนทนา

Endpoint นี้สำคัญที่สุดสำหรับการสร้าง Chatbot — เพราะ AI จะ "จำ" บทสนทนาก่อนหน้าได้:

import requests

messages = [
    {"role": "system", "content": "คุณเป็นผู้เชี่ยวชาญด้านระบบ ERP ตอบเป็นภาษาไทย กระชับ"},
    {"role": "user", "content": "ERP คืออะไร?"},
]

# Turn 1
response = requests.post("http://localhost:11434/api/chat", json={
    "model": "qwen2.5",
    "messages": messages,
    "stream": False
})

assistant_reply = response.json()["message"]["content"]
print("AI:", assistant_reply)

# Turn 2 - AI จำบทสนทนาก่อนหน้าได้
messages.append({"role": "assistant", "content": assistant_reply})
messages.append({"role": "user", "content": "แล้วเหมาะกับองค์กรขนาดไหน?"})

response = requests.post("http://localhost:11434/api/chat", json={
    "model": "qwen2.5",
    "messages": messages,
    "stream": False
})

print("AI:", response.json()["message"]["content"])

Structured Output — บังคับให้ AI ตอบเป็น JSON

หนึ่งในฟีเจอร์ที่ทรงพลังที่สุดของ Ollama API — สามารถ บังคับให้ AI ตอบเป็น JSON ตาม Schema ที่คุณกำหนด ทำให้นำผลลัพธ์ไปใช้ในแอปได้ทันทีโดยไม่ต้อง Parse ข้อความ:

import requests, json

response = requests.post("http://localhost:11434/api/generate", json={
    "model": "qwen2.5",
    "prompt": "วิเคราะห์อีเมลนี้: 'ขอเลื่อนประชุมจากวันจันทร์เป็นวันพุธ เวลา 14:00 ห้อง A301'",
    "stream": False,
    "format": {
        "type": "object",
        "properties": {
            "action": {"type": "string"},
            "original_date": {"type": "string"},
            "new_date": {"type": "string"},
            "time": {"type": "string"},
            "room": {"type": "string"},
            "urgency": {"type": "string", "enum": ["low", "medium", "high"]}
        },
        "required": ["action", "new_date", "time"]
    }
})

result = json.loads(response.json()["response"])
print(json.dumps(result, ensure_ascii=False, indent=2))

# Output:
# {
#   "action": "reschedule_meeting",
#   "original_date": "Monday",
#   "new_date": "Wednesday",
#   "time": "14:00",
#   "room": "A301",
#   "urgency": "medium"
# }

Structured Output ใช้ทำอะไรได้?

  • สกัดข้อมูลจากอีเมล: ดึงวันที่ เวลา สถานที่ ผู้ติดต่อ อัตโนมัติ
  • จัดหมวดหมู่เอกสาร: AI อ่านเอกสารแล้วตอบเป็น JSON ว่าเป็นหมวดอะไร ระดับความสำคัญเท่าไหร่
  • สร้างข้อมูลให้ระบบ: ให้ AI สร้าง ใบสั่งซื้อ เป็น JSON แล้วส่งเข้าระบบ ERP โดยตรง
  • วิเคราะห์ งบประมาณ: AI อ่านรายงานแล้วตอบเป็น JSON ว่ารายการไหนเกินงบ เท่าไหร่

Streaming — รับคำตอบ Real-time

โดยค่าเริ่มต้น Ollama API จะ Stream คำตอบทีละ Token — เหมือนที่เห็นใน ChatGPT ที่ข้อความขึ้นทีละคำ ทำให้ผู้ใช้ไม่ต้องรอจนกว่า AI จะตอบเสร็จทั้งหมด:

import requests, json

# Streaming mode (default)
response = requests.post("http://localhost:11434/api/generate", json={
    "model": "qwen2.5",
    "prompt": "อธิบาย PDPA คืออะไร",
    "stream": True  # default
}, stream=True)

for line in response.iter_lines():
    if line:
        data = json.loads(line)
        print(data["response"], end="", flush=True)
        if data.get("done"):
            print()  # ขึ้นบรรทัดใหม่เมื่อเสร็จ

OpenAI-Compatible API — ใช้แทน OpenAI ได้เลย

Ollama รองรับ OpenAI-compatible API ที่ /v1/chat/completions — หมายความว่าแอปที่เขียนไว้ใช้กับ OpenAI API สามารถเปลี่ยนมาใช้ Ollama ได้ โดยแก้แค่ URL ไม่ต้องแก้โค้ดส่วนอื่น:

# ใช้ OpenAI Python SDK กับ Ollama
from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:11434/v1",  # เปลี่ยนแค่ URL
    api_key="ollama"  # ใส่อะไรก็ได้ (Ollama ไม่ต้อง API Key)
)

response = client.chat.completions.create(
    model="qwen2.5",
    messages=[
        {"role": "system", "content": "คุณเป็นผู้เชี่ยวชาญ ERP"},
        {"role": "user", "content": "วิธีเลือก ERP ให้เหมาะกับองค์กร?"}
    ]
)

print(response.choices[0].message.content)

ทำไมต้อง OpenAI-Compatible?

  • แอปที่ใช้ OpenAI API อยู่แล้ว (เช่น MCP, LangChain, AutoGen) เปลี่ยนมาใช้ Ollama ได้ทันที
  • ไม่ต้อง API Key — ประหยัดค่าใช้จ่าย ไม่ต้องจ่ายรายเดือน
  • ข้อมูลอยู่ในเครื่อง — เปลี่ยนจากส่งไป OpenAI เป็นประมวลผลในเครื่อง

ตัวอย่างจริง — สร้าง Chatbot บนเว็บ

ตัวอย่างนี้สร้าง Chatbot ง่ายๆ ด้วย Python + Flask ที่เชื่อมกับ Ollama:

# file: chatbot.py
from flask import Flask, request, jsonify, render_template_string
import requests

app = Flask(__name__)

HTML = """
<!DOCTYPE html>
<html>
<head><title>ERP AI Assistant</title></head>
<body>
<h2>ERP AI Assistant (Powered by Ollama)</h2>
<div id="chat" style="height:400px;overflow-y:auto;border:1px solid #ccc;padding:10px;"></div>
<input id="msg" style="width:80%" placeholder="ถามคำถามเกี่ยวกับ ERP...">
<button onclick="send()">ส่ง</button>
<script>
async function send() {
  const msg = document.getElementById('msg').value;
  document.getElementById('chat').innerHTML += '<p><b>คุณ:</b> ' + msg + '</p>';
  document.getElementById('msg').value = '';
  const res = await fetch('/chat', {
    method: 'POST',
    headers: {'Content-Type': 'application/json'},
    body: JSON.stringify({message: msg})
  });
  const data = await res.json();
  document.getElementById('chat').innerHTML += '<p><b>AI:</b> ' + data.reply + '</p>';
}
</script>
</body>
</html>
"""

@app.route("/")
def index():
    return render_template_string(HTML)

@app.route("/chat", methods=["POST"])
def chat():
    user_message = request.json["message"]
    response = requests.post("http://localhost:11434/api/generate", json={
        "model": "qwen2.5",
        "prompt": user_message,
        "system": "คุณเป็นผู้เชี่ยวชาญระบบ ERP ตอบเป็นภาษาไทย กระชับ",
        "stream": False
    })
    return jsonify({"reply": response.json()["response"]})

if __name__ == "__main__":
    app.run(port=5000)
# รัน
pip install flask requests
python chatbot.py
# เปิด http://localhost:5000

เชื่อมกับ Automation — n8n / Make

Ollama API ใช้ร่วมกับเครื่องมือ Automation ได้ง่ายมาก — เพราะเป็น REST API ปกติ เครื่องมืออย่าง n8n (Self-hosted) หรือ Make (Cloud) สามารถเรียก Ollama API ได้ผ่าน HTTP Request Node:

Workflow ขั้นตอน ประโยชน์
สรุปอีเมล รับอีเมล → ส่งเนื้อหาให้ Ollama สรุป → ส่ง LINE แจ้งเตือน ผู้บริหารอ่านสรุปแทนอีเมลยาว
จัดหมวดเอกสาร อัปโหลดไฟล์ → Ollama จัดหมวด → บันทึกลง Database ลดงาน Manual จัดเอกสาร
แปลเอกสาร รับเอกสาร TH → Ollama แปล EN → ส่งกลับผ่าน Webhook แปลฟรี ไม่ต้องจ่าย Translation API
ตรวจจับ Anomaly ดึงข้อมูลจาก ERP → Ollama วิเคราะห์ → แจ้งเตือนถ้าผิดปกติ บริหารความเสี่ยง แบบ Proactive

ข้อควรระวังเรื่อง ความปลอดภัย:

  • อย่าเปิด Ollama API สู่ Internet โดยตรง — ค่าเริ่มต้น Ollama ฟัง localhost เท่านั้น (ปลอดภัย) ถ้าต้องเปิดให้เครื่องอื่นเข้าถึง ให้ใช้ Reverse Proxy (nginx/Caddy) + Authentication
  • ไม่มี Authentication ในตัว: Ollama API ไม่มี API Key/Token — ถ้าเปิดให้เครื่องอื่นเข้า ต้องเพิ่ม Auth Layer เอง
  • Rate Limiting: ถ้าให้หลายคนใช้พร้อมกัน ควรตั้ง Rate Limit เพื่อไม่ให้ Server ล่ม
  • รายละเอียดเรื่อง Security อ่านต่อได้ที่ EP.6: Self-Host AI อย่างปลอดภัย

Saeree ERP + Ollama API:

ด้วย Ollama API องค์กรสามารถเชื่อม AI เข้ากับระบบ ERP ได้โดยตรง — ให้ AI สรุปรายงาน วิเคราะห์ ต้นทุนการผลิต หรือช่วยเตรียมข้อมูล งบประมาณ ทั้งหมดนี้ข้อมูลอยู่ในเครือข่ายองค์กร สนใจ ปรึกษาทีมงานฟรี

Ollama Series — อ่านต่อ

"Ollama API เปลี่ยน AI จากเครื่องมือที่ใช้คนเดียวใน Terminal เป็นบริการที่ทั้งองค์กรเข้าถึงได้ — แค่ HTTP Request เดียว"

- ทีมงาน Saeree ERP

แหล่งอ้างอิง

สนใจระบบ ERP สำหรับองค์กรของคุณ?

ปรึกษาผู้เชี่ยวชาญจาก Grand Linux Solution ฟรี ไม่มีค่าใช้จ่าย

ขอ Demo ฟรี

โทร 02-347-7730 | sale@grandlinux.com

Saeree ERP Author

เกี่ยวกับผู้เขียน

ไพฑูรย์ บุตรี

ผู้เชี่ยวชาญด้านระบบเน็ตเวิร์คและระบบความปลอดภัยเซิร์ฟเวอร์ บริษัท แกรนด์ลีนุกซ์ โซลูชั่น จำกัด