API Relay เป็นโปรแกรมที่ออกแบบมาเพื่อเชื่อมต่อและถ่ายทอดข้อมูลระหว่างผู้ให้บริการ AI ต่างๆ (เช่น ChatGPT, Perplexity) ผ่านส่วนขยาย (extension) ของเบราว์เซอร์ โปรแกรมนี้ทำงานในลักษณะของสะพานเชื่อม (bridge) ที่ช่วยให้คุณสามารถเข้าถึงความสามารถของ AI หลายๆ ตัวผ่านอินเทอร์เฟซเดียวกันได้
- 🌐 รองรับผู้ให้บริการ AI หลายราย: ChatGPT, Perplexity และสามารถเพิ่มผู้ให้บริการอื่นๆ ได้
- 🔄 รองรับทั้งแบบสตรีมและแบบข้อมูลเต็ม: รับข้อมูลตอบกลับจาก AI แบบเรียลไทม์หรือแบบรอคำตอบเต็ม
- 🎯 เข้ากันได้กับ OpenAI API: ใช้รูปแบบที่เข้ากันได้กับ OpenAI API และ Anthropic API
- 🚀 ง่ายต่อการติดตั้งและใช้งาน: ติดตั้งง่ายด้วย npm และส่วนขยายเบราว์เซอร์
- 📊 รองรับการจัดการคิว: จัดการคำขอหลายรายการพร้อมกันอย่างเป็นระบบ
- 🛡️ ปลอดภัย: รองรับการจัดการความปลอดภัยและการจำกัดสิทธิ์การเข้าถึง
- 🔑 ระบบจัดการ API Key: สร้างและจัดการ API keys แบบมีวันหมดอายุหรือแบบถาวร
- ⚡ การตรวจจับความไม่เคลื่อนไหว: รีเซ็ตสถานะอัตโนมัติถ้า stream นิ่งเกิน 5 วินาที
API-relay/
├── src/ # Server-side code
│ ├── server.ts # Main HTTP server
│ ├── ws.ts # WebSocket server
│ ├── queue.ts # Request queue management
│ ├── settings.ts # Configuration settings
│ ├── apiKeys.ts # API key management
│ └── types.d.ts # TypeScript type definitions
├── extension/ # Browser extension
│ ├── manifest.json # Extension manifest
│ ├── background.js # Background script
│ ├── content.js # Content script
│ ├── provider-utils.js # Utility functions
│ └── providers/ # Provider-specific code
│ ├── chatgpt.js # ChatGPT provider
│ └── perplexity.js # Perplexity provider
├── docs/ # Documentation
│ ├── user-manual-thai.md # User manual (Thai)
│ ├── api-reference-thai.md # API documentation (Thai)
│ ├── quick-start-thai.md # Quick start guide (Thai)
│ ├── architecture-explanation-thai.md # Architecture explanation (Thai)
│ └── flow-diagrams.md # System flow diagrams (Thai)
├── scripts/ # Utility scripts
├── memory-bank/ # Development notes
├── package.json # Node.js dependencies
├── tsconfig.json # TypeScript configuration
└── README.md # This file
- Node.js (รุ่น 16 ขึ้นไป)
- เบราว์เซอร์ที่รองรับส่วนขยาย (Chrome, Firefox, Edge)
- บัญชีผู้ใช้กับผู้ให้บริการ AI (เช่น ChatGPT, Perplexity)
# โคลนโปรเจกต์
git clone https://github.com/d-osc/API-relay.git
# เข้าสู่โฟลเดอร์โปรเจกต์
cd API-relay
# ติดตั้ง dependencies
npm installสำหรับ Chrome หรือ Edge:
- เปิดเบราว์เซอร์และไปที่
chrome://extensions/(หรือedge://extensions/) - เปิดโหมด "นักพัฒนาซอฟต์แวร์" (Developer mode)
- คลิก "โหลดส่วนขยายที่ไม่ได้บรรจุ" (Load unpacked)
- เลือกโฟลเดอร์
extensionในโปรเจกต์ของคุณ
# เริ่มต้นเซิร์ฟเวอร์ในโหมดพัฒนา
npm run dev
# หรือสร้างไฟล์รันไทม์และเริ่มต้นเซิร์ฟเวอร์
npm run build
npm start- เปิดหน้าเว็บของผู้ให้บริการ AI (เช่น https://chat.openai.com หรือ https://www.perplexity.ai)
- ล็อกอินเข้าสู่บัญชีของคุณ
- ส่วนขยายจะทำงานอัตโนมัติเมื่อตรวจพบหน้าเว็บที่รองรับ
# ส่งข้อความไปยัง ChatGPT (ต้องระบุ Authorization header)
curl -X POST http://localhost:8637/openai/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gpt-3.5-turbo",
"messages": [
{"role": "user", "content": "Hello, world!"}
]
}'
# หรือใช้กับ Anthropic API
curl -X POST http://localhost:8637/anthropic/v1/messages \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ANTHROPIC_API_KEY" \
-d '{
"model": "claude-3-sonnet-20240229",
"messages": [
{"role": "user", "content": "Hello, world!"}
]
}'// ส่งข้อความไปยัง AI (ต้องระบุ Authorization header)
fetch('http://localhost:8637/openai/v1/chat/completions', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + process.env.OPENAI_API_KEY
},
body: JSON.stringify({
model: 'gpt-3.5-turbo',
messages: [
{ role: 'user', content: 'Hello, world!' }
]
})
})
.then(response => response.json())
.then(data => {
console.log(data.choices[0].message.content);
});from openai import OpenAI
# สร้าง client ที่ชี้ไปยัง API Relay
client = OpenAI(
api_key="your_api_key_here",
base_url="http://localhost:8637/openai/v1"
)
# ส่งข้อความ
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "user", "content": "Hello, world!"}
]
)
print(response.choices[0].message.content)import OpenAI from 'openai';
// สร้าง client ที่ชี้ไปยัง API Relay
const openai = new OpenAI({
apiKey: 'your_api_key_here',
baseURL: 'http://localhost:8637/openai/v1'
});
async function main() {
const completion = await openai.chat.completions.create({
model: 'gpt-3.5-turbo',
messages: [
{ role: 'user', content: 'Hello, world!' }
]
});
console.log(completion.choices[0].message.content);
}
main();// ส่งข้อความแบบสตรีม (ต้องระบุ Authorization header)
fetch('http://localhost:8637/openai/v1/chat/completions', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + process.env.OPENAI_API_KEY
},
body: JSON.stringify({
model: 'gpt-3.5-turbo',
messages: [
{ role: 'user', content: 'Write a story about AI' }
],
stream: true
})
})
.then(response => {
const reader = response.body.getReader();
const decoder = new TextDecoder();
function readStream() {
reader.read().then(({ done, value }) => {
if (done) return;
const chunk = decoder.decode(value);
console.log(chunk);
readStream();
});
}
readStream();
});# Python - OpenAI Library
from openai import OpenAI
client = OpenAI(
api_key="your_api_key_here",
base_url="http://localhost:8637/openai/v1"
)
stream = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "user", "content": "Write a story about AI"}
],
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")// JavaScript - OpenAI Library
import OpenAI from 'openai';
const openai = new OpenAI({
apiKey: 'your_api_key_here',
baseURL: 'http://localhost:8637/openai/v1'
});
async function streamingExample() {
const stream = await openai.chat.completions.create({
model: 'gpt-3.5-turbo',
messages: [
{ role: 'user', content: 'Write a story about AI' }
],
stream: true
});
for await (const chunk of stream) {
const content = chunk.choices[0]?.delta?.content;
if (content) {
process.stdout.write(content);
}
}
}
streamingExample();-
OpenAI Compatible Endpoints
POST /openai/v1/chat/completions- ส่งข้อความไปยัง AI แบบ OpenAI APIGET /openai/v1/models- ดูรายการโมเดลที่รองรับGET /openai/v1/models/:modelId- ดูข้อมูลโมเดลเฉพาะ
-
Anthropic Compatible Endpoints
POST /anthropic/v1/messages- ส่งข้อความไปยัง AI แบบ Anthropic APIGET /anthropic/v1/models- ดูรายการโมเดลที่รองรับGET /anthropic/v1/models/:modelId- ดูข้อมูลโมเดลเฉพาะ
-
API Key Management
POST /api-keys- สร้าง API key ใหม่GET /api-keys- ดูรายการ API keys ทั้งหมดPUT /api-keys/:id- อัปเดตข้อมูล API keyDELETE /api-keys/:id- ลบ/เพิกถอน API key
-
Health & Status
GET /ping- ตรวจสอบว่า server ทำงานอยู่GET /health- ตรวจสอบสถานะของระบบ
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ API โปรดดูที่:
คุณสามารถปรับแต่งการทำงานของโปรแกรมผ่านไฟล์ src/settings.ts:
export const settings = {
// เปลี่ยนพอร์ตเซิร์ฟเวอร์
port: process.env.PORT || 8637,
// การตั้งค่าอื่นๆ
timeout: 180000, // 3 นาที
maxQueueSize: 10,
concurrentLimit: 2
};API Relay มีระบบจัดการ API key แบบสร้างเอง ซึ่งช่วยให้คุณสามารถสร้างและจัดการ API keys สำหรับการเข้าถึงระบบได้
# สร้าง API key ใหม่ (มีวันหมดอายุ)
curl -X POST http://localhost:8637/api-keys \
-H "Content-Type: application/json" \
-d '{
"name": "My Application",
"expiresInDays": 30
}'
# สร้าง API key ใหม่ (ไม่มีวันหมดอายุ)
curl -X POST http://localhost:8637/api-keys \
-H "Content-Type: application/json" \
-d '{
"name": "My Permanent Application"
}'ตัวอย่างผลลัพธ์:
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "My Application",
"key": "ak-5f3a4b1c2d6e8f9a1b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5",
"createdAt": 1703112000000,
"expiresAt": 1705790400000
}# ดูรายการ API keys ทั้งหมด
curl -X GET http://localhost:8637/api-keys
# อัปเดต API key
curl -X PUT http://localhost:8637/api-keys/550e8400-e29b-41d4-a716-446655440000 \
-H "Content-Type: application/json" \
-d '{
"name": "Updated Application Name"
}'
# ลบ/เพิกถอน API key
curl -X DELETE http://localhost:8637/api-keys/550e8400-e29b-41d4-a716-446655440000เมื่อสร้าง API key แล้ว คุณสามารถใช้งานได้ดังนี้:
# ใช้กับ cURL
curl -X POST http://localhost:8637/openai/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ak-5f3a4b1c2d6e8f9a1b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5" \
-d '{
"model": "gpt-3.5-turbo",
"messages": [
{"role": "user", "content": "Hello!"}
]
}'- ความปลอดภัย: API key ถูกสร้างขึ้นแบบสุ่มและเก็บในรูปแบบ hash
- วันหมดอายุ (ไม่บังคับ): สามารถตั้งค่าวันหมดอายุได้ หรือสร้างเป็น API key แบบไม่มีวันหมดอายุก็ได้
- การติดตาม: บันทึกเวลาการใช้งานครั้งล่าสุด
- การจัดการ: สามารถแก้ไขชื่อ ตั้งวันหมดอายุ หรือเพิกถอน API key ได้ตลอดเวลา
- รองรับ GPT-3.5 Turbo, GPT-4, GPT-4 Turbo
- รองรับทั้งแบบข้อความและสตรีม
- รองรับฟังก์ชันการทำงานต่างๆ ของ ChatGPT
- การตรวจจับความไม่เคลื่อนไหวของ stream (5 วินาที)
- รองรับโมเดลต่างๆ ของ Perplexity (Turbo, Experimental, Claude 2, ฯลฯ)
- รองรับทั้งแบบข้อความและสตรีม
- รองรับฟังก์ชันการค้นหาและตอบคำถาม
- Inactivity Detection: รีเซ็ตสถานะอัตโนมัติถ้า stream ไม่มีข้อมูลเข้ามาเป็นเวลา 5 วินาที
- Timeout Protection: ป้องกันการค้างของสถานะ processing ทำให้รองรับคำขอถัดไปได้
- Error Recovery: กู้คืนสถานะโดยอัตโนมัติเมื่อเกิดข้อผิดพลาด
- Request Queue: จัดการคำขอหลายรายการพร้อมกัน
- Client Selection: เลือก client ที่ว่างเพื่อประมวลผลคำขอ
- Connection Management: จัดการการเชื่อมต่อ WebSocket อย่างมีประสิทธิภาพ
- API Key Authentication: ระบบยืนยันตัวตนด้วย API key แบบสร้างเอง
- Key Expiration: รองรับการตั้งค่าวันหมดอายุของ API key
- Request Tracking: บันทึกเวลาการใช้งานล่าสุดของแต่ละ API key
# รันโปรแกรมในโหมดพัฒนา
npm run dev
# สร้างไฟล์รันไทม์
npm run build
# รันโปรแกรมในโหมดการผลิต
npm start
# ทดสอบ integration
npm run test:integration# ทดสอบด้วย Mock Extension Client
node scripts/mock_extension_client.jsสำหรับข้อมูลเพิ่มเติมเกี่ยวกับสถาปัตยกรรมของระบบ โปรดดูที่:
เรายินดีต้อนรับการมีส่วนร่วมจากชุมชน! หากคุณต้องการช่วยพัฒนาโปรเจกต์นี้:
- Fork โปรเจกต์นี้
- สร้าง branch สำหรับฟีเจอร์ของคุณ (
git checkout -b feature/amazing-feature) - Commit การเปลี่ยนแปลงของคุณ (
git commit -m 'Add some amazing feature') - Push ไปยัง branch ของคุณ (
git push origin feature/amazing-feature) - เปิด Pull Request
- ทำตามรูปแบบโค้ดที่มีอยู่
- เพิ่มการทดสอบสำหรับฟีเจอร์ใหม่
- อัปเดตเอกสารประกอบหากจำเป็น
- ตรวจสอบให้แน่ใจว่าการทดสอบผ่านทั้งหมด
- ตรวจสอบว่าได้ติดตั้งส่วนขยายในโหมดนักพัฒนาซอฟต์แวร์แล้ว
- รีเฟรชหน้าเว็บที่ต้องการใช้งาน
- ตรวจสอบในคอนโซลของเบราว์เซอร์ว่ามีข้อความแสดงความผิดพลาดหรือไม่
- ตรวจสอบว่าเซิร์ฟเวอร์ทำงานอยู่
- ยืนยันว่าใช้พอร์ตที่ถูกต้อง
- ตรวจสอบไฟร์วอลล์และการตั้งค่าความปลอดภัย
- เพิ่มค่า timeout ในการตั้งค่า
- ตรวจสอบความเร็วในการเชื่อมต่ออินเทอร์เน็ต
- ยืนยันว่าใช้โมเดลที่รองรับฟังก์ชันที่ต้องการ
- ตรวจสอบว่าระบุ Authorization header อย่างถูกต้อง:
Authorization: Bearer <API_KEY> - ยืนยันว่า API key ยังไม่หมดอายุ
- ตรวจสอบว่า API key ถูกเพิกถอนหรือไม่
- รอสักครู่ (ประมาณ 5 วินาที) ระบบจะรีเซ็ตสถานะโดยอัตโนมัติ
- ถ้ายังไม่ได้ ให้รีเฟรชหน้าเว็บของ provider
- ตรวจสอบว่าส่วนขยายทำงานอย่างถูกต้อง
สำหรับข้อมูลเพิ่มเติม โปรดดูที่ คู่มือการใช้งาน (ภาษาไทย)
- ✨ เพิ่มระบบจัดการ API key แบบสร้างเอง
- 🛡️ การตรวจสอบสิทธิ์ด้วย API key สำหรับทุก endpoints
- ⚡ การตรวจจับความไม่เคลื่อนไหวของ stream (5 วินาที)
- 🔧 ปรับปรุงการจัดการสถานะการประมวลผล
- 📚 อัปเดตเอกสารและตัวอย่างการใช้งาน
- 🎉 เวอร์ชันแรก
- 🌐 รองรับ OpenAI และ Anthropic API
- 🔄 รองรับทั้งแบบ streaming และ non-streaming
- 📊 ระบบจัดการคิวและการเชื่อมต่อ WebSocket
โปรเจกต์นี้ใช้ใบอนุญาต MIT ดูข้อมูลเพิ่มเติมที่ LICENSE ไฟล์
หากคุณมีคำถามหรือต้องการการสนับสนุน:
- รายงานปัญหา: GitHub Issues
- คำถาม: GitHub Discussions
- อีเมล: d-osc@github.com
- ทีมงาน OpenAI สำหรับ ChatGPT API
- ทีมงาน Perplexity สำหรับบริการ AI ที่ยอดเยี่ยม
- ชุมชน open-source ที่ให้การสนับสนุนและแรงบันดาลใจ
⭐ หากโปรเจกต์นี้มีประโยชน์กับคุณ โปรดให้ดาว repo นี้!