AIProxyServer - คู่มือ

เรียกใช้พร็อกซีที่รองรับรูปแบบ OpenAI บนเครื่องของคุณ สำหรับบริการ AI บนคลาวด์รายใหญ่ทุกเจ้า เก็บคีย์ API ไว้เพียงครั้งเดียว แล้วให้แอปไคลเอ็นต์ใดก็ได้ — เดสก์ท็อป มือถือ หรือเว็บ — คุยกับ http://localhost แทนการลงทะเบียนคีย์ในทุกเครื่องมือ


เริ่มต้นใช้งาน

1. เปิดแอป

เปิด AIProxyServer เมื่อเปิดครั้งแรก พร็อกซีจะเริ่มทำงานโดยอัตโนมัติและรับฟังที่พอร์ต 8421 ของเครื่องคุณ หน้าต่างหลักแสดงสามส่วน:

  • พร็อกซีเซิร์ฟเวอร์ — สถานะปัจจุบัน Base URL และปุ่มสำหรับเริ่มหรือหยุดตัวรับฟัง
  • Bearer Token — สวิตช์เปิด/ปิดการยืนยันตัวตนแบบเลือกได้ และการแสดงโทเค็น
  • ผู้ให้บริการ — ผู้ให้บริการ AI บนคลาวด์ที่รองรับทุกราย พร้อมปุ่ม ตั้งค่าคีย์ API ในแต่ละแถว

2. เพิ่มคีย์ API แรกของคุณ

  1. เลือกผู้ให้บริการใดก็ได้จากรายการผู้ให้บริการ (เช่น OpenAI (ChatGPT))
  2. คลิก รับคีย์ API เพื่อเปิดคอนโซลของผู้ให้บริการในเบราว์เซอร์ จากนั้นสร้างหรือคัดลอกคีย์
  3. คลิก ตั้งค่าคีย์ API ในแถวเดียวกัน แล้ววางค่านั้นลงในกล่องโต้ตอบ
  4. คลิก บันทึก. ป้ายสถานะจะเปลี่ยนเป็น กำหนดค่าแล้ว เป็นสีเขียว

3. เชื่อมต่อแอปไคลเอ็นต์

ชี้ไคลเอ็นต์ที่รองรับรูปแบบ OpenAI ตัวใดก็ได้มาที่พร็อกซี โดย Base URL คือ http://localhost:8421/<provider>/v1. ส่วนของผู้ให้บริการในเส้นทางจะกำหนดว่าคลาวด์ใดเป็นผู้รับคำขอ

# Example: OpenAI Python SDK pointed at the proxy
from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8421/openai/v1",
    api_key="not-used-but-required-by-sdk",
)
resp = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": "Hello"}],
)
print(resp.choices[0].message.content)

ไคลเอ็นต์จะไม่เห็นคีย์จริงเลย AIProxyServer จะแนบข้อมูลรับรองต้นทางให้ตอนส่งต่อคำขอ


ภาพรวมของอินเทอร์เฟซ

แผงพร็อกซีเซิร์ฟเวอร์

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

แผง Bearer Token

  • บังคับใช้การยืนยันตัวตนด้วย Bearer Token — ช่องทำเครื่องหมายสำหรับเปิดหรือปิดการยืนยันตัวตน ปิดไว้เป็นค่าเริ่มต้นเพื่อให้ใช้งานในเครื่องได้สะดวก
  • ช่องโทเค็น — แสดงโทเค็นปัจจุบันแบบอ่านอย่างเดียว แสดงเป็นจุด ให้ใช้ คัดลอก เพื่อคัดลอกออกมา
  • สร้างใหม่ — ออกโทเค็นสุ่มชุดใหม่ ไคลเอ็นต์ที่ใช้อยู่เดิมต้องอัปเดตเป็นค่าใหม่
ข้อควรระวัง: หากคุณเปิด อนุญาตการเข้าถึงผ่าน LAN ในการตั้งค่าโดยไม่เปิดใช้โทเค็น ใครก็ตามที่อยู่บนเครือข่าย Wi-Fi เดียวกันจะใช้พร็อกซีและคีย์ API ของคุณได้ ข้อความแนะนำใต้แผงโทเค็นจะเตือนคุณเมื่ออยู่ในสถานะดังกล่าว

แผงผู้ให้บริการ

หนึ่งแถวต่อผู้ให้บริการคลาวด์ที่รองรับหนึ่งราย แต่ละแถวแสดง:

  • ชื่อที่แสดง (เช่น Claude (Anthropic))
  • สถานะการกำหนดค่า — สีเขียว กำหนดค่าแล้ว เมื่อบันทึกคีย์ API แล้ว และสีเทา ยังไม่ได้กำหนดค่า หากไม่เช่นนั้น
  • เส้นทาง URL ที่ไคลเอ็นต์ของคุณใช้ เช่น /anthropic/v1/chat/completions
  • ตั้งค่าคีย์ API — เปิดกล่องโต้ตอบสำหรับกรอกข้อมูลรับรอง
  • รับคีย์ API — เปิดคอนโซลของผู้ให้บริการในเบราว์เซอร์ของคุณ

ผู้ให้บริการที่รองรับ

มีบริการ AI บนคลาวด์รวม 11 รายมาให้ในตัว ส่วนใหญ่ใช้รูปแบบ OpenAI Chat Completions อยู่แล้วและถูกส่งต่อไปตามเดิม มีสามราย (Anthropic, Gemini, ERNIE) ที่ใช้โปรโตคอลของตนเอง AIProxyServer จะแปลงคำขอและการตอบกลับให้แบบทันที เพื่อให้ไคลเอ็นต์ของคุณเห็นเป็นรูปแบบ OpenAI เสมอ

ผู้ให้บริการคำนำหน้าเส้นทางสิ่งที่คุณต้องมี
OpenAI (ChatGPT)/openai/v1คีย์ API จาก platform.openai.com
Claude (Anthropic)/anthropic/v1คีย์ API จาก Anthropic Console
Gemini (Google)/gemini/v1คีย์ API จาก Google AI Studio
Grok (xAI)/grok/v1คีย์ API จาก xAI Console
Azure OpenAI (Copilot)/copilot/v1คีย์ API พร้อม URL ปลายทางการปรับใช้ของคุณ
Perplexity/perplexity/v1คีย์ API จากการตั้งค่า Perplexity
Groq/groq/v1คีย์ API จาก Groq Cloud
DeepSeek/deepseek/v1คีย์ API จาก DeepSeek Platform
Kimi (Moonshot)/kimi/v1คีย์ API จาก Moonshot Console
Qwen (DashScope)/qwen/v1คีย์ API จาก Alibaba DashScope
ERNIE (Baidu)/ernie/v1ทั้ง API Key และ Secret Key จาก Baidu Qianfan

หมายเหตุเฉพาะผู้ให้บริการ

  • Azure OpenAI — วาง URL ปลายทางการปรับใช้แบบเต็มลงในช่อง Endpoint Base URL ตัวอย่างเช่น https://my-resource.openai.azure.com/openai/deployments/gpt-4o. พร็อกซีจะต่อท้ายด้วย /chat/completions?api-version=2024-02-01 ให้โดยอัตโนมัติ
  • ERNIE — Baidu Qianfan ใช้ OAuth จึงต้องใช้ทั้ง API Key และ Secret Key จำเป็นต้องมีทั้งคู่ AIProxyServer จะขอและแคชโทเค็นการเข้าถึงให้เบื้องหลัง
  • Gemini — การยืนยันตัวตนทำผ่านพารามิเตอร์ใน URL ซึ่งพร็อกซีจะเพิ่มให้คุณเอง โควตาต่อนาทีของแพ็กเกจฟรียังคงมีผลอยู่

เอกสารอ้างอิง API

จุดปลายทาง

เมธอดเส้นทางคำอธิบาย
GET/healthตรวจสอบว่าบริการยังทำงานอยู่ คืนค่าสถานะบริการและรายชื่อผู้ให้บริการ ไม่ต้องยืนยันตัวตน
GET/v1/providersผู้ให้บริการที่กำหนดค่าไว้และข้อมูลเมตา
GET/<provider>/v1/modelsรายการโมเดลของผู้ให้บริการที่ระบุ ในรูปแบบ OpenAI
POST/<provider>/v1/chat/completionsคำขอแบบ OpenAI Chat Completions ให้ส่ง stream:true เพื่อใช้ SSE

การสตรีม

เมื่อไคลเอ็นต์ส่ง "stream": true, พร็อกซีจะตอบกลับด้วย Server-Sent Events ในรูปแบบของ OpenAI:

data: {"id":"chatcmpl-...","object":"chat.completion.chunk","choices":[{"delta":{"role":"assistant"},...}]}

data: {"id":"chatcmpl-...","object":"chat.completion.chunk","choices":[{"delta":{"content":"Hello"},...}]}

data: [DONE]

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

ส่วนหัวสำหรับการยืนยันตัวตน

เมื่อ บังคับใช้การยืนยันตัวตนด้วย Bearer Token เปิดอยู่ ให้ส่งโทเค็นจากหน้าต่างหลักไปกับทุกคำขอ:

Authorization: Bearer <token-shown-in-app>

การตั้งค่า

เปิดหน้าต่างการตั้งค่าจากไอคอนรูปเฟืองในแถบเครื่องมือด้านล่าง

การตั้งค่าค่าเริ่มต้นคำอธิบาย
พอร์ตพร็อกซี8421พอร์ต TCP ที่ตัวรับฟังผูกอยู่ การเปลี่ยนค่าต้องเริ่มพร็อกซีใหม่
เริ่มเซิร์ฟเวอร์อัตโนมัติเปิดเริ่มพร็อกซีเมื่อเปิดแอป
อนุญาตการเข้าถึงผ่าน LANปิดเมื่อปิด พร็อกซีจะผูกกับ 127.0.0.1. เท่านั้น เมื่อเปิด อุปกรณ์อื่นบน Wi-Fi ของคุณจะเข้าถึงพร็อกซีได้
บังคับใช้ Bearer Tokenปิดเมื่อเปิด ทุกคำขอต้องแนบโทเค็นที่แสดงในหน้าต่างหลัก แนะนำอย่างยิ่งเมื่อเปิดอนุญาตการเข้าถึงผ่าน LAN

ตัวอย่างฝั่งไคลเอ็นต์

cURL

# OpenAI (passthrough)
curl http://localhost:8421/openai/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o-mini",
    "messages": [{"role": "user", "content": "Hello"}]
  }'

# Claude via the same OpenAI shape
curl http://localhost:8421/anthropic/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-4-5",
    "messages": [{"role": "user", "content": "Hello"}],
    "max_tokens": 1024
  }'

OpenAI Python SDK

from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8421/gemini/v1",
    api_key="placeholder",  # ignored when Bearer Token is off
)
stream = client.chat.completions.create(
    model="gemini-2.0-flash",
    messages=[{"role": "user", "content": "Tell me a joke"}],
    stream=True,
)
for chunk in stream:
    print(chunk.choices[0].delta.content or "", end="", flush=True)

Flutter / Dart

// Using any OpenAI-compatible Dart client
final client = OpenAIClient(
  baseUrl: 'http://localhost:8421/anthropic/v1',
  apiKey: '', // unused when Bearer Token is off
);
อุปกรณ์มือถือบน Wi-Fi: ให้แทนที่ localhost ด้วย IP บน LAN ของ Mac คุณ (แสดงในช่อง Base URL เมื่อ อนุญาตการเข้าถึงผ่าน LAN เปิดอยู่)

เคล็ดลับ

  • ปิด Bearer Token ไว้ขณะพัฒนาในเครื่อง และเปิดทันทีที่คุณเปิดการเข้าถึงผ่าน LAN
  • ใช้ Base URL แยกตามผู้ให้บริการในโค้ดฝั่งไคลเอ็นต์ เพื่อให้สลับผู้ให้บริการได้ด้วยการแก้ค่าคงที่เพียงจุดเดียว
  • พร็อกซีจะเริ่มทำงานอัตโนมัติ แต่คุณหยุดชั่วคราวได้จากหน้าต่างหลักหากเกิดพอร์ตชนกัน
  • หากแพ็กเกจฟรีของผู้ให้บริการจำกัดอัตราการเรียกใช้ ข้อความแสดงข้อผิดพลาดจากต้นทางจะถูกส่งต่อมาตามเดิมทุกตัวอักษร ไม่มีตรรกะการลองใหม่ที่ซ่อนไว้จากไคลเอ็นต์
  • จุดปลายทาง /v1/providers มีประโยชน์สำหรับการค้นหาว่ามีผู้ให้บริการรายใดถูกกำหนดค่าไว้บ้างขณะทำงาน

การแก้ปัญหา

พร็อกซีไม่ยอมเริ่มทำงาน

  • อาจมีโปรเซสอื่นใช้พอร์ต 8421 อยู่แล้ว ให้เปลี่ยนพอร์ตในการตั้งค่าแล้วเริ่มพร็อกซีใหม่
  • ตรวจสอบบันทึกของระบบเพื่อดูข้อความแสดงข้อผิดพลาดที่ปรากฏตอนเริ่มทำงาน

คำขอคืนค่า 401 Unauthorized

  • เปิดการบังคับใช้ Bearer Token ไว้ แต่ไคลเอ็นต์ไม่ได้ส่งส่วนหัว Authorization: Bearer ... ที่ตรงกันมาด้วย
  • คีย์ API ของผู้ให้บริการเองอาจไม่ถูกต้อง — ข้อผิดพลาดจากต้นทางจะถูกส่งต่อมา จึงควรตรวจสอบเนื้อหาข้อความ

คำขอส่งกลับว่า "API key is not configured"

  • เปิดรายการผู้ให้บริการแล้วคลิก ตั้งค่าคีย์ API สำหรับผู้ให้บริการที่เกี่ยวข้อง
  • สำหรับ ERNIE ต้องกรอกทั้ง API Key และ Secret Key ส่วน Azure OpenAI ต้องมี Endpoint Base URL ด้วย

อุปกรณ์มือถือเข้าถึงพร็อกซีไม่ได้

  • เปิดใช้ อนุญาตการเข้าถึงผ่าน LAN ในการตั้งค่า
  • ใช้ LAN IP ที่แสดงในช่อง Base URL ไม่ใช่ localhost.
  • ตรวจสอบว่าอุปกรณ์ทั้งสองอยู่ในเครือข่าย Wi-Fi เดียวกัน และไฟร์วอลล์อนุญาตการเชื่อมต่อขาเข้าที่พอร์ตพร็อกซี

การตอบกลับแบบสตรีมมาพร้อมกันทั้งหมด

  • ตรวจสอบว่าไคลเอ็นต์ของคุณส่ง "stream": true ในเนื้อหา JSON
  • ไลบรารี HTTP บางตัวบัฟเฟอร์ SSE โดยค่าเริ่มต้น — ปิดการบัฟเฟอร์การตอบกลับที่ฝั่งไคลเอ็นต์

ความเป็นส่วนตัว

  • คีย์ API จะถูกเก็บแบบเข้ารหัสด้วย Fernet ใน ~/Library/Application Support/AIProxyServer/credentials.encคีย์เข้ารหัสใน master.key มีสิทธิ์ 0600
  • เมื่อเปิดใช้ Bearer Token จะถูกเก็บไว้เฉพาะในคลังที่เข้ารหัสและไม่ถูกเขียนลงไฟล์การตั้งค่าปกติ
  • พร็อกซีส่งต่อคำขอไปยังผู้ให้บริการที่คุณกำหนดค่าไว้อย่างชัดเจนเท่านั้น และไม่มีการเรียกออกอื่น
  • ไม่มีการเก็บข้อมูลการใช้งาน ไม่มีการวิเคราะห์ และไม่มีการรายงานข้อขัดข้อง
  • การผูกเครือข่ายเริ่มต้นคือ 127.0.0.1 เท่านั้น การเปิดให้ LAN เข้าถึงต้องเลือกเปิดเอง
  • ไม่มีการเก็บเนื้อหาการสนทนา AIProxyServer ส่งต่อไบต์และลืมทันที