Skip to content

d-osc/API-relay

Repository files navigation

API Relay

API Relay เป็นโปรแกรมที่ออกแบบมาเพื่อเชื่อมต่อและถ่ายทอดข้อมูลระหว่างผู้ให้บริการ AI ต่างๆ (เช่น ChatGPT, Perplexity) ผ่านส่วนขยาย (extension) ของเบราว์เซอร์ โปรแกรมนี้ทำงานในลักษณะของสะพานเชื่อม (bridge) ที่ช่วยให้คุณสามารถเข้าถึงความสามารถของ AI หลายๆ ตัวผ่านอินเทอร์เฟซเดียวกันได้

License: MIT Node.js Version TypeScript

คุณสมบัติหลัก

  • 🌐 รองรับผู้ให้บริการ 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)

1. การติดตั้งโปรเจกต์

# โคลนโปรเจกต์
git clone https://github.com/d-osc/API-relay.git

# เข้าสู่โฟลเดอร์โปรเจกต์
cd API-relay

# ติดตั้ง dependencies
npm install

2. การติดตั้งส่วนขยายเบราว์เซอร์

สำหรับ Chrome หรือ Edge:

  1. เปิดเบราว์เซอร์และไปที่ chrome://extensions/ (หรือ edge://extensions/)
  2. เปิดโหมด "นักพัฒนาซอฟต์แวร์" (Developer mode)
  3. คลิก "โหลดส่วนขยายที่ไม่ได้บรรจุ" (Load unpacked)
  4. เลือกโฟลเดอร์ extension ในโปรเจกต์ของคุณ

3. การเริ่มต้นเซิร์ฟเวอร์

# เริ่มต้นเซิร์ฟเวอร์ในโหมดพัฒนา
npm run dev

# หรือสร้างไฟล์รันไทม์และเริ่มต้นเซิร์ฟเวอร์
npm run build
npm start

4. การเชื่อมต่อกับผู้ให้บริการ AI

  1. เปิดหน้าเว็บของผู้ให้บริการ AI (เช่น https://chat.openai.com หรือ https://www.perplexity.ai)
  2. ล็อกอินเข้าสู่บัญชีของคุณ
  3. ส่วนขยายจะทำงานอัตโนมัติเมื่อตรวจพบหน้าเว็บที่รองรับ

การใช้งาน

การใช้งานกับ cURL

# ส่งข้อความไปยัง 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!"}
    ]
  }'

การใช้งานกับ JavaScript

// ส่งข้อความไปยัง 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);
});

การใช้งานกับ OpenAI Python Library

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)

การใช้งานกับ OpenAI JavaScript Library

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();

การใช้งานแบบสตรีม (Streaming)

// ส่งข้อความแบบสตรีม (ต้องระบุ 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();
});

การใช้งานแบบสตรีมกับ OpenAI Libraries

# 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();

API Documentation

หมวดหมู่ API หลัก

  1. OpenAI Compatible Endpoints

    • POST /openai/v1/chat/completions - ส่งข้อความไปยัง AI แบบ OpenAI API
    • GET /openai/v1/models - ดูรายการโมเดลที่รองรับ
    • GET /openai/v1/models/:modelId - ดูข้อมูลโมเดลเฉพาะ
  2. Anthropic Compatible Endpoints

    • POST /anthropic/v1/messages - ส่งข้อความไปยัง AI แบบ Anthropic API
    • GET /anthropic/v1/models - ดูรายการโมเดลที่รองรับ
    • GET /anthropic/v1/models/:modelId - ดูข้อมูลโมเดลเฉพาะ
  3. API Key Management

    • POST /api-keys - สร้าง API key ใหม่
    • GET /api-keys - ดูรายการ API keys ทั้งหมด
    • PUT /api-keys/:id - อัปเดตข้อมูล API key
    • DELETE /api-keys/:id - ลบ/เพิกถอน API key
  4. 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 Key

API Relay มีระบบจัดการ API key แบบสร้างเอง ซึ่งช่วยให้คุณสามารถสร้างและจัดการ API keys สำหรับการเข้าถึงระบบได้

การสร้าง API Key ใหม่

# สร้าง 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

# ดูรายการ 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

เมื่อสร้าง 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

  • ความปลอดภัย: API key ถูกสร้างขึ้นแบบสุ่มและเก็บในรูปแบบ hash
  • วันหมดอายุ (ไม่บังคับ): สามารถตั้งค่าวันหมดอายุได้ หรือสร้างเป็น API key แบบไม่มีวันหมดอายุก็ได้
  • การติดตาม: บันทึกเวลาการใช้งานครั้งล่าสุด
  • การจัดการ: สามารถแก้ไขชื่อ ตั้งวันหมดอายุ หรือเพิกถอน API key ได้ตลอดเวลา

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

ChatGPT (OpenAI)

  • รองรับ GPT-3.5 Turbo, GPT-4, GPT-4 Turbo
  • รองรับทั้งแบบข้อความและสตรีม
  • รองรับฟังก์ชันการทำงานต่างๆ ของ ChatGPT
  • การตรวจจับความไม่เคลื่อนไหวของ stream (5 วินาที)

Perplexity

  • รองรับโมเดลต่างๆ ของ Perplexity (Turbo, Experimental, Claude 2, ฯลฯ)
  • รองรับทั้งแบบข้อความและสตรีม
  • รองรับฟังก์ชันการค้นหาและตอบคำถาม

คุณสมบัติขั้นสูง

การจัดการ Stream และ Timeout

  • 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 scripts

# รันโปรแกรมในโหมดพัฒนา
npm run dev

# สร้างไฟล์รันไทม์
npm run build

# รันโปรแกรมในโหมดการผลิต
npm start

# ทดสอบ integration
npm run test:integration

การทดสอบด้วย Mock Client

# ทดสอบด้วย Mock Extension Client
node scripts/mock_extension_client.js

สถาปัตยกรรมของระบบ

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับสถาปัตยกรรมของระบบ โปรดดูที่:

การมีส่วนร่วม (Contributing)

เรายินดีต้อนรับการมีส่วนร่วมจากชุมชน! หากคุณต้องการช่วยพัฒนาโปรเจกต์นี้:

  1. Fork โปรเจกต์นี้
  2. สร้าง branch สำหรับฟีเจอร์ของคุณ (git checkout -b feature/amazing-feature)
  3. Commit การเปลี่ยนแปลงของคุณ (git commit -m 'Add some amazing feature')
  4. Push ไปยัง branch ของคุณ (git push origin feature/amazing-feature)
  5. เปิด Pull Request

แนวทางการมีส่วนร่วม

  • ทำตามรูปแบบโค้ดที่มีอยู่
  • เพิ่มการทดสอบสำหรับฟีเจอร์ใหม่
  • อัปเดตเอกสารประกอบหากจำเป็น
  • ตรวจสอบให้แน่ใจว่าการทดสอบผ่านทั้งหมด

ปัญหาที่พบบ่อยและวิธีแก้ไข

ส่วนขยายไม่ทำงาน

  • ตรวจสอบว่าได้ติดตั้งส่วนขยายในโหมดนักพัฒนาซอฟต์แวร์แล้ว
  • รีเฟรชหน้าเว็บที่ต้องการใช้งาน
  • ตรวจสอบในคอนโซลของเบราว์เซอร์ว่ามีข้อความแสดงความผิดพลาดหรือไม่

เชื่อมต่อไม่ได้

  • ตรวจสอบว่าเซิร์ฟเวอร์ทำงานอยู่
  • ยืนยันว่าใช้พอร์ตที่ถูกต้อง
  • ตรวจสอบไฟร์วอลล์และการตั้งค่าความปลอดภัย

ข้อมูลตอบกลับไม่ครบถ้วน

  • เพิ่มค่า timeout ในการตั้งค่า
  • ตรวจสอบความเร็วในการเชื่อมต่ออินเทอร์เน็ต
  • ยืนยันว่าใช้โมเดลที่รองรับฟังก์ชันที่ต้องการ

API Key ไม่ทำงาน

  • ตรวจสอบว่าระบุ Authorization header อย่างถูกต้อง: Authorization: Bearer <API_KEY>
  • ยืนยันว่า API key ยังไม่หมดอายุ
  • ตรวจสอบว่า API key ถูกเพิกถอนหรือไม่

Provider is currently processing another request

  • รอสักครู่ (ประมาณ 5 วินาที) ระบบจะรีเซ็ตสถานะโดยอัตโนมัติ
  • ถ้ายังไม่ได้ ให้รีเฟรชหน้าเว็บของ provider
  • ตรวจสอบว่าส่วนขยายทำงานอย่างถูกต้อง

สำหรับข้อมูลเพิ่มเติม โปรดดูที่ คู่มือการใช้งาน (ภาษาไทย)

เวอร์ชันและประวัติการอัปเดต

v1.1.0 (Latest)

  • ✨ เพิ่มระบบจัดการ API key แบบสร้างเอง
  • 🛡️ การตรวจสอบสิทธิ์ด้วย API key สำหรับทุก endpoints
  • ⚡ การตรวจจับความไม่เคลื่อนไหวของ stream (5 วินาที)
  • 🔧 ปรับปรุงการจัดการสถานะการประมวลผล
  • 📚 อัปเดตเอกสารและตัวอย่างการใช้งาน

v1.0.0

  • 🎉 เวอร์ชันแรก
  • 🌐 รองรับ OpenAI และ Anthropic API
  • 🔄 รองรับทั้งแบบ streaming และ non-streaming
  • 📊 ระบบจัดการคิวและการเชื่อมต่อ WebSocket

ใบอนุญาต

โปรเจกต์นี้ใช้ใบอนุญาต MIT ดูข้อมูลเพิ่มเติมที่ LICENSE ไฟล์

การติดต่อและการสนับสนุน

หากคุณมีคำถามหรือต้องการการสนับสนุน:

ขอบคุณ

  • ทีมงาน OpenAI สำหรับ ChatGPT API
  • ทีมงาน Perplexity สำหรับบริการ AI ที่ยอดเยี่ยม
  • ชุมชน open-source ที่ให้การสนับสนุนและแรงบันดาลใจ

เมตริกและสถิติ

GitHub stars GitHub forks GitHub issues GitHub pull requests GitHub license GitHub release

Star History

Star History Chart


⭐ หากโปรเจกต์นี้มีประโยชน์กับคุณ โปรดให้ดาว repo นี้!

About

No description, website, or topics provided.

Resources

License

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors