TH ▾
รับคีย์ API

Ollama API เทียบ OpenAI API: เอนด์พอยต์และโค้ด

คำถามเรื่อง Ollama API เทียบ OpenAI API สรุปได้เป็นสองรูปแบบคำขอและสองสถานที่สำหรับรันโมเดล Ollama มี API แบบเนทีฟของตัวเองและเลเยอร์ที่เข้ากันได้กับ OpenAI ดังนั้นการย้ายไปใช้เอนด์พอยต์สไตล์ OpenAI แบบโฮสต์อาจหมายถึงการเปลี่ยนเบส URL และคีย์

อัปเดต

เครื่องเดสก์ท็อปและเซิร์ฟเวอร์คลาวด์เชื่อมต่อกันด้วยสะพานแสงสองเส้นที่ส่งซองข้อความที่เหมือนกัน
หน้าต่างแชทเชื่อมต่อกับคอมพิวเตอร์ท้องถิ่นและเซิร์ฟเวอร์คลาวด์ด้วยสายไฟเรืองแสง

ไม่ต้องใช้บัตร หลังสมัคร ให้รับเครดิตทดลองใช้ฟรี $0.50 ด้วยคลิกเดียว (หนึ่งครั้งต่อคน)

รับคีย์ API

ประเด็นสำคัญ

  • Ollama มี native routes ภายใต้ /api และชั้นที่เข้ากันได้กับ OpenAI ภายใต้ /v1; ไคลเอนต์ที่เขียนสำหรับ OpenAI SDK มักจะใช้งานได้กับทั้งสองรูปแบบ
  • Ollama แบบเนทีฟสตรีม JSON แยกบรรทัด ในขณะที่รูปแบบ OpenAI สตรีมเหตุการณ์ที่ส่งโดยเซิร์ฟเวอร์
  • การย้ายจากโลคอลไปโฮสต์หมายถึงการเปลี่ยนเบส URL, คีย์และชื่อโมเดล ไม่ใช่โค้ดของคุณ
  • แบบโลคอลเก็บข้อมูลไว้ในเครื่องของคุณ; แบบโฮสต์ตัดงานด้านฮาร์ดแวร์ออกแต่เพิ่มค่าใช้จ่ายต่อโทเคน

สรุปสั้นๆ

ทั้งสองแบบต่างก็ให้คุณส่งคำขอ POST รายการข้อความและรับข้อความกลับ ความแตกต่างอยู่ที่โครงสร้างของคำขอ ตำแหน่งของเซิร์ฟเวอร์ และใครเป็นผู้จ่ายค่า GPU Ollama รันโมเดลบนคอมพิวเตอร์ของคุณเองและฟังพอร์ต 11434 API ของ OpenAI เป็นบริการโฮสต์ที่มีโมเดลแบบเสียเงินของตัวเอง ในการเปรียบเทียบระหว่าง Ollama API กับ OpenAI API คนมักพลาดจุดสำคัญอีกอย่างหนึ่ง: Ollama ยังเปิดใช้งานเส้นทางที่เข้ากันได้กับ OpenAI ดังนั้นรูปแบบทั้งสองจึงทับซ้อนกัน

การทับซ้อนนี้ทำให้การย้ายมีต้นทุนต่ำ หากแอปของคุณใช้ SDK ของ OpenAI อยู่แล้ว คุณสามารถชี้ไปที่ Ollama ในเครื่องได้วันนี้ และชี้ไปที่ URL ที่เข้ากันได้กับ OpenAI แบบโฮสต์ได้ในวันพรุ่งนี้ เอนด์พอยต์แบบโฮสต์บนเว็บไซต์นี้เป็นหนึ่งในนั้น มันให้บริการโมเดลเดียวคือ uncensored ที่ https://api.ollamansfw.com/v1 และไม่ใช่ผลิตภัณฑ์อย่างเป็นทางการของ OpenAI, Meta หรือแล็บอื่นใด

ความแตกต่างรายเอนด์พอยต์

งานOllama แบบเนทีฟรูปแบบ OpenAI
แชทPOST /api/chatPOST /v1/chat/completions
พรอมต์เดียวPOST /api/generatePOST /v1/responses หรือ chat completions
รายการโมเดลGET /api/tagsGET /v1/models
การตรวจสอบสิทธิ์ไม่มีโดยค่าเริ่มต้นAuthorization: Bearer key
สตรีมมิงJSON แบบแยกบรรทัดเหตุการณ์ที่ส่งโดยเซิร์ฟเวอร์ (SSE) ลงท้ายด้วยเครื่องหมาย done
ชื่อโมเดลโมเดลที่คุณดึงมา เช่น llama3โมเดลที่ผู้ให้บริการระบุ

Ollama ยังให้บริการ /v1/chat/completions และ /v1/models บนพอร์ตเดียวกัน ซึ่งเป็นสิ่งที่ทำให้ไคลเอนต์ของ OpenAI ทำงานกับ Ollama ได้ การตั้งค่าเริ่มต้นสำหรับการเรียกแบบเนทีฟคือการสตรีม ดังนั้นให้ตั้งค่า stream: false เมื่อคุณต้องการคำตอบ JSON เดียว

เอนด์พอยต์แบบโฮสต์รองรับ POST /v1/chat/completions, POST /v1/responses และ GET /v1/models รวมถึงการตรวจสอบยอดคงเหลือที่ GET /v1/balance ดู เอกสาร API สำหรับรายการเต็ม

คำขอเดียวกัน สามวิธี

Ollama แบบเนทีฟ จาก Python:

import requests

r = requests.post(
    "http://localhost:11434/api/chat",
    json={
        "model": "llama3",
        "messages": [{"role": "user", "content": "Say hello in five words."}],
        "stream": False,
    },
)
print(r.json()["message"]["content"])

SDK ของ OpenAI โดยตั้งค่าในเครื่องและแบบโฮสต์เคียงข้างกัน มีเพียงบรรทัดที่แสดงความคิดเห็นเท่านั้นที่เปลี่ยนแปลง:

from openai import OpenAI

# Local Ollama through its OpenAI-compatible layer:
# client = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")

# Hosted endpoint, same code from here on:
client = OpenAI(base_url="https://api.ollamansfw.com/v1", api_key="YOUR_KEY")

resp = client.chat.completions.create(
    model="uncensored",   # local would be e.g. "llama3"
    messages=[{"role": "user", "content": "Say hello in five words."}],
)
print(resp.choices[0].message.content)

และใช้ curl กับเอนด์พอยต์ที่โฮสต์โดยเปิดสตรีมมิง:

curl https://api.ollamansfw.com/v1/chat/completions \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"uncensored","messages":[{"role":"user","content":"Hello"}],"stream":true}'

การแยกวิเคราะห์ข้อมูลแตกต่างกันในฝั่งเนทีฟ: แต่ละบรรทัดที่สตรีมมาคือออบเจกต์ JSON ที่มี message.content และบรรทัดสุดท้ายมี done: true ในรูปแบบ OpenAI แต่ละอีเวนต์จะเริ่มด้วย data: , มีข้อมูล choices[0].delta.content และสตรีมจะจบด้วย [DONE] หากใช้ SDK คุณจะไม่ต้องเห็นรูปแบบเหล่านี้

เมื่อแต่ละแบบเหมาะสมกับงาน

Ollama แบบโลคัลเป็นตัวเลือกที่เหมาะสมเมื่อความเป็นส่วนตัวเป็นปัจจัยหลัก เมื่อคุณมี GPU ที่มีหน่วยความจำเพียงพอสำหรับโมเดลที่ต้องการ หรือเมื่อคุณต้องการทดลองกับโมเดลหลายตัว ข้อมูลทั้งหมดจะไม่ออกนอกเครื่องของคุณและไม่มีค่าใช้จ่ายต่อโทเคน ค่าใช้จ่ายจะปรากฏในรูปของฮาร์ดแวร์ ไฟฟ้า และเวลาของคุณ คู่มือของเราเกี่ยวกับ การใช้ Ollama กับ GUI ครอบคลุมด้านที่ใช้งานง่ายของเส้นทางนี้

เอนด์พอยต์ที่เข้ากันได้กับ OpenAI เหมาะสมกว่าเมื่อคุณไม่มีฮาร์ดแวร์ ต้องการคำขอพร้อมกันจำนวนมาก รันบอทหรือบริการสำหรับผู้อื่น หรือต้องการ URL ที่เสถียรซึ่งไม่ขึ้นอยู่กับการเปิดเครื่องแล็ปท็อปของคุณ คีย์แบบเต็มอนุญาตให้ทำคำขอพร้อมกันได้อย่างมาก 8 คำขอ และ 300 คำขอต่อนาที หน้าต่างบริบทมีขนาด 100,000 โทเคน ซึ่งมากกว่าที่การตั้งค่าโลคัลหลายแห่งสามารถเก็บไว้ในหน่วยความจำได้

ผู้คนจำนวนมากใช้ทั้งสองแบบ: โลคัลสำหรับการทดลอง และโฮสต์สำหรับงานที่ต้องทำงานต่อเนื่อง หากคุณกำลังพิจารณาเครื่องมือโลคัลอื่นๆ อ่าน ตัวเลือกซอฟต์แวร์ Ollama

การย้ายจาก Ollama โลคัลไปยังโฮสต์

  1. เปลี่ยนเป็นรูปแบบ OpenAI ก่อน หากโค้ดของคุณเรียกใช้ /api/chat ให้เปลี่ยนไปใช้ SDK ของ OpenAI ที่ชี้ไปที่เส้นทาง /v1 ของ Ollama ยืนยันว่ายังทำงานได้บนเครื่องโลคัล
  2. รับคีย์ สมัครสมาชิกและรับเครดิตทดลองใช้ $0.50 ที่ หน้าคีย์ API ไม่จำเป็นต้องใส่ข้อมูลการชำระเงินและใช้งานได้ 7 วัน
  3. เปลี่ยนค่าสามค่า Base URL เป็น https://api.ollamansfw.com/v1, คีย์เป็นของคุณ, โมเดลเป็น uncensored
  4. ตรวจสอบพารามิเตอร์ Temperature, top_p, stop, seed และค่าปรับจะถูกส่งผ่าน ตัวเลือกเฉพาะแบบโลคอลเช่น num_ctx หรือ keep_alive ของ Ollama ไม่ใช้ได้; หน้าต่างบริบทถูกตรึงไว้ที่ 100,000 โทเคน
  5. เพิ่มลอจิกการลองใหม่ API ที่โฮสต์จะส่งสถานะ 429 พร้อม rate_limited หรือ concurrency เมื่อเกินขีดจำกัด และ 429 พร้อม Retry-After: 5 ในช่วงที่โหลดเกินชั่วคราว เซิร์ฟเวอร์โลคัลไม่ค่อยทำแบบนี้ ดังนั้นโค้ดที่มีอยู่อาจไม่ได้จัดการกรณีนี้

หากเกิดข้อผิดพลาดหลังจากการสลับ บทความเกี่ยวกับ ข้อผิดพลาดทั่วไปของ Ollama API จะครอบคลุมสาเหตุที่พบบ่อย เช่น พอร์ตผิดและชื่อโมเดลหายไป

ต้นทุนของโฮสต์และสิ่งที่มันไม่สามารถทำได้

การเรียกเก็บเงินแบบจ่ายตามการใช้งานจากเครดิตแบบเติมเงินล่วงหน้า: $0.15 ต่อ 1M input tokens และ $0.50 ต่อ 1M output tokens การสนทนา 1 เทิร์นที่มี input 1,000 tokens และ output 400 tokens มีค่าใช้จ่าย $0.00015 + $0.0002 = $0.00035 ดังนั้น $20 จะครอบคลุมการสนทนาประมาณ 57,000 เทิร์น คำขอที่ล้มเหลวหรือถูกปฏิเสธจะไม่ถูกเรียกเก็บเงินและเครดิตจะไม่หมดอายุ การเติมเงินเริ่มต้นที่ $20 ถึง $500 พร้อมโบนัส +5% จาก $50, +10% จาก $100 และ +15% จาก $200 การชำระเงินทำผ่านคริปโตเท่านั้น (USDT บน TRC20 หรือ USDC บน Base) ดูเพิ่มเติมที่ หน้าราคา

ขีดจำกัดที่ต้องรู้: รองรับเฉพาะข้อความ ดังนั้นจึงไม่มี embeddings, การสร้างภาพ หรือ fine-tuning หากคุณพึ่งพา embeddings โลคัล ให้เก็บไว้ที่โลคัล โมเดลได้รับการปรับแต่งให้ตอบคำถามโดยไม่มีการปฏิเสธเนื้อหาสำหรับการใช้งานผู้ใหญ่ที่ถูกต้องตามกฎหมาย เนื้อหาทางเพศที่เกี่ยวข้องกับผู้เยาว์จะไม่อนุญาตเด็ดขาดในกรณีใดๆ พรอมต์ไม่ถูกนำไปใช้ในการฝึกโมเดล

ถาม-ตอบ

API Ollama เข้ากันได้กับ API ของ OpenAI หรือไม่?

บางส่วน Ollama มีเส้นทางเนทีฟภายใต้ /api และให้บริการเส้นทางสไตล์ OpenAI เช่น /v1/chat/completions ดังนั้นไคลเอนต์ SDK ของ OpenAI จึงสามารถสื่อสารกับมันได้

ฉันต้องเปลี่ยนอะไรเพื่อย้ายจาก Ollama โลคัลไปยังเอนด์พอยต์แบบโฮสต์?

Base URL, API key และชื่อโมเดล หากโค้ดของคุณใช้ SDK ของ OpenAI อยู่แล้ว ไม่ต้องเปลี่ยนอย่างอื่น

API แบบโฮสต์รองรับ embeddings เหมือน Ollama หรือไม่?

ไม่ รองรับเฉพาะการสร้างข้อความ: chat completions และ responses, ไม่มี embeddings, ภาพ หรือ fine-tuning

Ollama ฟรีหรือไม่?

ซอฟต์แวร์ดาวน์โหลดและใช้งานฟรี คุณยังต้องจ่ายค่าฮาร์ดแวร์และพลังงาน ส่วน API แบบโฮสต์คิดเงินตามโทเคน