TH ▾
รับคีย์ API

GetAiApiKeyเช็คลิสต์ API AI สำหรับใช้งานจริง

วิธีติดตั้ง LLM ใน Python: แบบโลคอลหรือ API แบบโลคอลหรือ API

คุณสามารถรันโมเดลในเครื่องของคุณเอง หรือติดตั้งแพ็กเกจ Python เล็กๆ แล้วเรียกโมเดลที่โฮสต์ผ่าน HTTP หน้าเว็บนี้ครอบคลุมทั้งสองวิธี จากนั้นจะแนะนำเส้นทาง API ทีละขั้นตอน

อัปเดต

ภาพประกอบสายเคเบิลที่เชื่อมต่อสคริปต์ Python กับโมเดลแบบก้อนเมฆที่เรืองแสง แสดงการเชื่อมต่อ API

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

  1. การติดตั้งในเครื่องต้องการน้ำหนักโมเดลและหน่วยความจำเพียงพอ ส่วนทาง API ต้องการเพียงแพ็กเกจ openai และคีย์
  2. ตั้งค่า base URL เป็น https://api.getaiapikey.com/v1 และโมเดลเป็น uncensored
  3. การสตรีม การเรียกใช้ฟังก์ชัน และโหมด JSON ทำงานผ่านไคลเอนต์ OpenAI มาตรฐานได้
  4. จัดการ HTTP 429 ด้วยการ retry สั้นๆ และคงจำนวน concurrent calls ไว้ที่ 8 หรือต่ำกว่า

ความหมายสองประการของการติดตั้ง LLM

เมื่อคนถามว่าติดตั้ง llm ใน python อย่างไร มักหมายถึงสิ่งใดสิ่งหนึ่งสองอย่างนี้ ประการแรกคือการรันโมเดลในเครื่อง: ดาวน์โหลด weights และโหลดด้วยไลบรารีบน CPU หรือ GPU ของคุณเอง ประการที่สองคือการติดตั้ง client library เพื่อให้โค้ด Python ของคุณสื่อสารกับโมเดลที่รันที่อื่นได้ ทั้งสองวิธีใช้ได้ และวิธีที่ถูกต้องขึ้นอยู่กับฮาร์ดแวร์และสิ่งที่คุณต้องการสร้าง

เส้นทาง API สั้นกว่ามาก คุณรัน pip install openai ชี้ไคลเอนต์ไปที่ base URL และเรียกโมเดล ไม่ต้องใช้ weights ไม่ต้องติดตั้งไดรเวอร์ GPU ไม่ต้องวางแผนหน่วยความจำ ส่วนที่เหลือของหน้านี้ให้ขั้นตอนและโค้ดสำหรับเส้นทางนี้ พร้อมส่วนสั้นๆ เกี่ยวกับแบบโลคอลเพื่อให้คุณเปรียบเทียบ

การติดตั้งแบบโลคอลหรือ API ที่โฮสต์: วิธีเลือก

คำถามการติดตั้งแบบโลคอลAPI แบบโฮสต์
สิ่งที่คุณติดตั้งไลบรารีสำหรับการอนุมานพร้อมน้ำหนักโมเดลแพ็กเกจ openai
ฮาร์ดแวร์หน่วยความจำและโดยทั่วไปคือ GPU ที่มีขนาดเหมาะสมกับโมเดลเครื่องจักรใดๆ ก็ตามที่สามารถทำ HTTPS calls ได้
ต้นทุนฮาร์ดแวร์และไฟฟ้าของคุณต่อโทเคน จากเครดิตแบบเติมเงินล่วงหน้า
ทำงานแบบออฟไลน์ได้ใช่ไม่
เวลาในการตอบครั้งแรกดาวน์โหลด ตั้งค่า ปรับแต่งเพียงไม่กี่นาที

การติดตั้งแบบโลคอลสมเหตุสมผลหากคุณต้องเก็บข้อมูลทั้งหมดไว้ในเครื่องเดียว ต้องการทำงานแบบออฟไลน์ หรือต้องการทดลองกับน้ำหนักโมเดลโดยตรง ไลบรารีเช่น llama.cpp bindings หรือ Hugging Face transformers เป็นจุดเริ่มต้นทั่วไป; โปรดตรวจสอบเอกสารเฉพาะของพวกเขาสำหรับข้อกำหนดฮาร์ดแวร์ เนื่องจากสิ่งเหล่านั้นขึ้นอยู่กับขนาดโมเดลที่คุณเลือก

API เหมาะหากคุณต้องการผลลัพธ์ที่ใช้งานได้เร็ว, แล็ปท็อปของคุณไม่สามารถเก็บโมเดลขนาดใหญ่ได้, หรือแอปของคุณต้องการรองรับผู้ใช้จำนวนมาก คุณจ่ายต่อ token แทนการซื้อฮาร์ดแวร์ สำหรับบริการนี้คือ $0.15 ต่อ 1M input tokens และ $0.50 ต่อ 1M output tokens โดยไม่มีค่าสมาชิก หน้าราคามีรายละเอียด

ขั้นตอนที่ 1: สร้าง virtual environment และติดตั้งแพ็กเกจ

ใช้ virtual environment เพื่อให้การติดตั้งเป็นไปอย่างสะอาด การติดตั้งแพ็กเกจ openai ทำงานได้กับ Python 3 ทุกเวอร์ชันล่าสุด

python3 -m venv .venv
source .venv/bin/activate
pip install openai

ถัดไปคุณต้องการคีย์ ลงทะเบียนที่ หน้าคีย์ API ด้วย Google หรือด้วยอีเมลและรหัสผ่าน ผู้ใช้ใหม่สามารถรับเครดิตทดลองใช้ $0.50 ได้ด้วยการคลิกครั้งเดียว มีอายุ 7 วันและไม่ต้องใช้บัตร เก็บคีย์ไว้ในตัวแปรสภาพแวดล้อมแทนที่จะเก็บไว้ในไฟล์ source code ของคุณ:

export API_KEY="paste-your-key-here"

ขั้นตอนที่ 2: ทำการเรียกใช้งานครั้งแรก

บริการนี้เข้ากันได้กับ OpenAI ดังนั้นการเปลี่ยนแปลงจากสคริปต์ OpenAI มาตรฐานมีเพียง base URL และ model ID เท่านั้น model ID คือ uncensored

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.getaiapikey.com/v1",
    api_key=os.environ["API_KEY"],
)

resp = client.chat.completions.create(
    model="uncensored",
    messages=[
        {"role": "system", "content": "You are a concise assistant."},
        {"role": "user", "content": "Explain what a context window is in two sentences."},
    ],
    temperature=0.7,
    max_tokens=200,
)

print(resp.choices[0].message.content)
print(resp.usage.prompt_tokens, resp.usage.completion_tokens)

หากผลลัพธ์พิมพ์คำตอบและจำนวนโทเคนสองจำนวน แสดงว่าการติดตั้งเสร็จสมบูรณ์ หากต้องการตรวจสอบว่าคีย์ของคุณใช้งานได้และดู model ID คุณสามารถเรียกใช้ GET /v1/models ได้เช่นกัน:

for m in client.models.list():
    print(m.id)

คำขอเดียวกันจาก shell โดยไม่ต้องใช้ Python เลย คือการเรียก curl เดียวไปยัง https://api.getaiapikey.com/v1/chat/completions พร้อม header Authorization: Bearer ตามด้วยคีย์ของคุณ คู่มือเริ่มต้นใช้งานในเอกสารแสดงตัวอย่างเต็มรูปแบบ

ขั้นตอนที่ 3: สตรีมโทเคนเมื่อได้รับ

การรอให้คำตอบยาวๆ เสร็จสิ้นก่อนพิมพ์ผลลัพธ์ใดๆ รู้สึกช้า ตั้งค่า stream=True และเซิร์ฟเวอร์จะส่งโทเคนผ่าน server-sent events คุณสามารถขอสรุปการใช้งานใน chunk สุดท้ายด้วย stream_options

stream = client.chat.completions.create(
    model="uncensored",
    messages=[{"role": "user", "content": "Write a short scene set in a lighthouse."}],
    stream=True,
    stream_options={"include_usage": True},
)

for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)
    if chunk.usage:
        print("\n", chunk.usage.total_tokens, "tokens")

รายละเอียดหนึ่งอย่างสำคัญสำหรับการใช้งานจริง: คำขอแบบสตรีมจะครอบครอง slot concurrency จนกว่าสตรีมจะสิ้นสุด คีย์แบบเต็มอนุญาตให้ทำคำขอพร้อมกัน 8 คำขอ ดังนั้นหากแอปของคุณเปิดสตรีมยาวๆ หลายสตรีม ให้ปิดสตรีมเหล่านั้นเมื่อผู้ใช้ตัดการเชื่อมต่อ

ขั้นตอนที่ 4: โหมด JSON และการเรียกใช้ฟังก์ชัน

สำหรับ output แบบมีโครงสร้าง ให้ตั้งค่า response_format เป็น JSON object นอกจากนี้บอกโมเดลใน prompt ให้ตอบเป็น JSON เพราะการตั้งค่านี้รับประกัน valid JSON syntax แต่ไม่รับประกัน field names ที่คุณต้องการ

import json

resp = client.chat.completions.create(
    model="uncensored",
    messages=[
        {"role": "system", "content": "Reply only with JSON: {\"title\": string, \"tags\": [string]}"},
        {"role": "user", "content": "Give me a title and tags for a post about slow travel."},
    ],
    response_format={"type": "json_object"},
)
data = json.loads(resp.choices[0].message.content)
print(data["title"], data["tags"])

Tool calling ปฏิบัติตามรูปแบบมาตรฐาน คุณอธิบายฟังก์ชัน โมเดลอาจขอเรียกใช้ ฟังก์ชันนั้นคุณรันเองและส่งผลลัพธ์กลับด้วย role: "tool"

tools = [{
    "type": "function",
    "function": {
        "name": "get_time",
        "description": "Return the current time for a city",
        "parameters": {
            "type": "object",
            "properties": {"city": {"type": "string"}},
            "required": ["city"],
        },
    },
}]

messages = [{"role": "user", "content": "What time is it in Lisbon?"}]
first = client.chat.completions.create(
    model="uncensored", messages=messages, tools=tools, tool_choice="auto"
)

msg = first.choices[0].message
if msg.tool_calls:
    call = msg.tool_calls[0]
    messages.append(msg)
    messages.append({
        "role": "tool",
        "tool_call_id": call.id,
        "content": json.dumps({"time": "14:05"}),
    })
    final = client.chat.completions.create(
        model="uncensored", messages=messages, tools=tools
    )
    print(final.choices[0].message.content)

ทดสอบการเรียกใช้ฟังก์ชันกับพรอมต์ไม่กี่รายการก่อนที่คุณจะพึ่งพาพวกมัน โมเดลใดๆ ก็สามารถเลือกฟังก์ชันผิดหรือเติมอาร์กิวเมนต์ได้ไม่ดี ดังนั้นให้ตรวจสอบอาร์กิวเมนต์ในโค้ดของคุณเองก่อนรันอะไรก็ตามที่มี side effects

ขั้นตอนที่ 5: จัดการขีดจำกัดและข้อผิดพลาด

คีย์แบบเต็มอนุญาตให้ทำคำขอพร้อมกัน 8 คำขอและ 300 คำขอต่อนาที คีย์ทดลองอนุญาตให้ทำ 2 และ 60 เมื่อเกินขีดจำกัดเหล่านี้คุณจะได้รับ HTTP 429 รหัสข้อผิดพลาด rate_limited หมายถึงคำขอมากเกินไปต่อนาที และ concurrency หมายถึงคำขอมากเกินไปในครั้งเดียว เมื่อเกิด overload ชั่วคราว API ยังส่งกลับ 429 พร้อม header Retry-After: 5

ไคลเอนต์ Python ของ OpenAI จะลองเรียกใหม่สำหรับข้อผิดพลาดบางรายการโดยอัตโนมัติ แต่การใช้ wrapper แบบชัดเจนช่วยให้พฤติกรรมชัดเจนขึ้น:

import time
from openai import RateLimitError

def ask(messages, tries=4):
    for attempt in range(tries):
        try:
            return client.chat.completions.create(model="uncensored", messages=messages)
        except RateLimitError:
            time.sleep(5 * (attempt + 1))
    raise RuntimeError("still rate limited after retries")

แต่ละการตอบกลับมี X-Request-Id, X-Balance-USD และส่วนหัวขีดจำกัดอัตรา ซึ่งคุณสามารถบันทึกได้ หากติดต่อ ฝ่ายสนับสนุน ให้ระบุ ID คำขอ คำขอที่ล้มเหลวหรือถูกปฏิเสธจะไม่ถูกเรียกเก็บเงิน ดังนั้นการเรียกซ้ำจึงไม่เสียค่าใช้จ่ายเพิ่ม

นอกจากนี้ควรวางแผนสำหรับข้อจำกัดขนาด หน้าต่างบริบทคือ 100,000 tokens รวม prompt และ completion และขนาด request body สูงสุดคือ 8 MB ประวัติแชทที่ยาวควรถูกตัดหรือสรุปก่อนถึงตัวเลขเหล่านั้น

เมื่อการเรียกใช้งานไม่สำเร็จ

ปัญหาส่วนใหญ่ในการใช้งานครั้งแรกเกิดจากความผิดพลาดไม่กี่ประการ ตรวจสอบสิ่งเหล่านี้ตามลำดับก่อนจะสงสัยอย่างอื่น

  • Base URL โดยไม่มีเส้นทางเวอร์ชัน ค่าต้องลงท้ายด้วย /v1 ไคลเอนต์จะเพิ่ม /chat/completions เข้าไป ดังนั้นหากขาด /v1 คำขอจะถูกส่งไปยังเส้นทางที่ผิด
  • คีย์ผิดหรือไม่มี คีย์จะถูกใส่ใน Authorization: Bearer header ซึ่งไคลเอนต์สร้างจาก api_key หากตัวแปรสภาพแวดล้อมว่าง ไคลเอนต์จะแสดงข้อผิดพลาดเมื่อเริ่มต้นหรือส่งคีย์ว่าง ให้พิมพ์ bool(os.environ.get("API_KEY")) เพื่อตรวจสอบ
  • ชื่อโมเดลจากบริการอื่น ID โมเดลที่นี่มีเพียง uncensored เท่านั้น ชื่อเช่นที่ปรากฏในบทช่วยสอนอื่นๆ จะไม่ตรงกัน
  • ไม่มียอดเงิน ดูที่ header X-Balance-USD การทดลองใช้ที่ผ่าน 7 วัน หรือยอดเงินที่หมดแล้ว ต้องเติมเงินขั้นต่ำ $20
  • แพ็คเกจเก่า หากตัวอย่างใช้ OpenAI( และ Python บอกว่าไม่สามารถนำเข้าชื่อนั้นได้ แสดงว่าคุณใช้แพ็คเกจก่อนเวอร์ชัน 1.0 ให้รัน pip install --upgrade openai

เพื่อดูการตอบกลับดิบ รวมถึงส่วนหัว ให้ใช้ wrapper การตอบกลับดิบของไคลเอนต์:

raw = client.chat.completions.with_raw_response.create(
    model="uncensored",
    messages=[{"role": "user", "content": "ping"}],
    max_tokens=5,
)
print(raw.headers.get("x-request-id"), raw.headers.get("x-balance-usd"))
completion = raw.parse()
print(completion.choices[0].message.content)

สิ่งนี้จะพิมพ์ ID คำขอและยอดเงินคงเหลือของคุณถัดจากคำตอบ ซึ่งเป็นวิธีการตรวจสอบสถานะอย่างรวดเร็วที่คุณสามารถรันจาก cron job หรือสคริปต์เริ่มต้น

การใช้งานจากเครื่องมืออื่น

เนื่องจากเอนด์พอยต์ปฏิบัติตามรูปแบบ OpenAI ไลบรารี Python อื่นๆ สามารถใช้ได้ด้วยการตั้งค่าสองอย่างเดียวกัน เฟรมเวิร์กที่รองรับ custom OpenAI base URL เพียงแค่ตั้งค่า base_url และ api_key สำหรับ Node แพ็คเกจ official openai รับฟิลด์เดียวกัน:

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.getaiapikey.com/v1",
  apiKey: process.env.API_KEY,
});

const r = await client.chat.completions.create({
  model: "uncensored",
  messages: [{ role: "user", content: "Say hello in five words." }],
});
console.log(r.choices[0].message.content);

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

ถาม-ตอบ

ฉันต้องการ GPU เพื่อใช้ LLM ใน Python แบบนี้หรือไม่?

ไม่ โมเดลทำงานที่ฝั่งผู้ให้บริการ เครื่องของคุณมีเพียง Python และการเชื่อมต่ออินเทอร์เน็ตเพื่อเรียกใช้เอนด์พอยต์ก็เพียงพอ

ฉันควรติดตั้งแพ็กเกจใด?

ติดตั้งแพ็กเกจ openai ทางการด้วย pip จากนั้นตั้งค่า Base URL เป็น https://api.getaiapikey.com/v1 และโมเดลเป็น uncensored

มีวิธีทดลองใช้ฟรีหรือไม่?

ผู้ใช้ใหม่รับเครดิตทดลองใช้ $0.50 ได้คลิกเดียวหลังการลงทะเบียน ใช้ได้ 7 วัน ไม่ต้องใส่บัตร จำกัด 1 ครั้งต่อคน

หนึ่ง request มีค่าใช้จ่ายเท่าใด?

คำขอที่มี 2,000 input tokens และ 500 output tokens มีค่าใช้จ่าย $0.00055 จากอัตรา $0.15 และ $0.50 ต่อ 1M tokens คุณจ่ายเฉพาะคำขอที่สำเร็จ

รองรับสตรีมมิงและการเรียกใช้ฟังก์ชันหรือไม่?

ใช่ การสตรีมมิงผ่าน SSE การเรียกใช้ฟังก์ชัน และโหมด JSON ทำงานผ่านไคลเอนต์ OpenAI มาตรฐานได้ทั้งหมด

คีย์ของคุณอยู่ห่างแค่แบบฟอร์มเดียว

สร้างบัญชี คัดลอกคีย์ และเปลี่ยน base URL นั่นคือการตั้งค่าทั้งหมด