เรียกใช้พร็อกซีที่รองรับรูปแบบ OpenAI บนเครื่องของคุณ สำหรับบริการ AI บนคลาวด์รายใหญ่ทุกเจ้า เก็บคีย์ API ไว้เพียงครั้งเดียว แล้วให้แอปไคลเอ็นต์ใดก็ได้ — เดสก์ท็อป มือถือ หรือเว็บ — คุยกับ http://localhost แทนการลงทะเบียนคีย์ในทุกเครื่องมือ
เริ่มต้นใช้งาน
1. เปิดแอป
เปิด AIProxyServer เมื่อเปิดครั้งแรก พร็อกซีจะเริ่มทำงานโดยอัตโนมัติและรับฟังที่พอร์ต 8421 ของเครื่องคุณ หน้าต่างหลักแสดงสามส่วน:
- พร็อกซีเซิร์ฟเวอร์ — สถานะปัจจุบัน Base URL และปุ่มสำหรับเริ่มหรือหยุดตัวรับฟัง
- Bearer Token — สวิตช์เปิด/ปิดการยืนยันตัวตนแบบเลือกได้ และการแสดงโทเค็น
- ผู้ให้บริการ — ผู้ให้บริการ AI บนคลาวด์ที่รองรับทุกราย พร้อมปุ่ม ตั้งค่าคีย์ API ในแต่ละแถว
2. เพิ่มคีย์ API แรกของคุณ
- เลือกผู้ให้บริการใดก็ได้จากรายการผู้ให้บริการ (เช่น OpenAI (ChatGPT))
- คลิก รับคีย์ API เพื่อเปิดคอนโซลของผู้ให้บริการในเบราว์เซอร์ จากนั้นสร้างหรือคัดลอกคีย์
- คลิก ตั้งค่าคีย์ API ในแถวเดียวกัน แล้ววางค่านั้นลงในกล่องโต้ตอบ
- คลิก บันทึก. ป้ายสถานะจะเปลี่ยนเป็น กำหนดค่าแล้ว เป็นสีเขียว
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 — ช่องทำเครื่องหมายสำหรับเปิดหรือปิดการยืนยันตัวตน ปิดไว้เป็นค่าเริ่มต้นเพื่อให้ใช้งานในเครื่องได้สะดวก
- ช่องโทเค็น — แสดงโทเค็นปัจจุบันแบบอ่านอย่างเดียว แสดงเป็นจุด ให้ใช้ คัดลอก เพื่อคัดลอกออกมา
- สร้างใหม่ — ออกโทเค็นสุ่มชุดใหม่ ไคลเอ็นต์ที่ใช้อยู่เดิมต้องอัปเดตเป็นค่าใหม่
แผงผู้ให้บริการ
หนึ่งแถวต่อผู้ให้บริการคลาวด์ที่รองรับหนึ่งราย แต่ละแถวแสดง:
- ชื่อที่แสดง (เช่น 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
);
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 ส่งต่อไบต์และลืมทันที