API 인터페이스에 대한 자유 대화 매크로 모델 반전 모음

최신 AI 리소스8개월 전 업데이트 AI 공유 서클
12.3K 00

API에 무료 로그인 GPT3.5

https://github.com/missuo/FreeGPT35

https://github.com/aurora-develop/aurora

https://github.com/Dalufishe/freegptjs

https://github.com/PawanOsman/ChatGPT

https://github.com/nashsu/FreeAskInternet

https://github.com/aurorax-neo/free-gpt3.5-2api

https://github.com/aurora-develop/free-gpt3.5-2api

https://github.com/LanQian528/chat2api

https://github.com/k0baya/FreeGPT35-Glitch

https://github.com/cliouo/FreeGPT35-Vercel

https://github.com/hominsu/freegpt35

https://github.com/xsigoking/chatgpt-free-api

https://github.com/skzhengkai/free-chatgpt-api

https://github.com/aurora-develop/aurora-glitch (글리치 리소스 사용)

https://github.com/fatwang2/coze2openai (COZE to API, GPT4)

 

국내 모델 리버스

심층 검색(딥서치) API 인터페이스 deepseek-free-api

Moonshot AI(Kimi.ai) API 인터페이스 kimi-free-api

점핑 스타 (Leapfrog Ask StepChat) API 인터페이스 스텝프리-API

알리 통이(Qwen) API 인터페이스 qwen-free-api

지푸AI (지적으로 자극적인 연설) API 인터페이스 GLM-FREE-API

메타 AI(메타소) API 인터페이스 메타소-프리-API

API에 대한 바이트 점프(빈백) 인터페이스 doubao-free-api

바이트 점프(즉, 드림 AI) API 인터페이스 jimeng-free-api

API에 대한 스파크 인터페이스 스파크-프리 API

MiniMax(Conch AI) API 인터페이스 hailuo-free-api

API에 대한 이모하 인터페이스 emohaa-free-api

채팅 인터페이스가 있는 로그인 없는 프로그램

https://github.com/Mylinde/FreeGPT

 

클라우드플레어의 작업 코드, 자신의 도메인 이름을 묶어 플레이하세요:

추가 이벤트 리스너("fetch", event => {
event.respondWith(handleRequest(event.request))
})

비동기 함수 handleRequest(request) {
// 요청이 POST 요청이고 경로가 올바른지 확인합니다.
if (request.method === "POST" && new URL(request.url).pathname === "/v1/chat/complaints") {
const url = 'https://multillm.ai-pro.org/api/openai-completion'; // 대상 API 주소
const headers = new Headers(request.headers);

// 필요에 따라 헤더 추가 또는 수정
headers.set('Content-Type', 'application/json');

// 요청의 본문을 가져와 JSON을 파싱합니다.
const requestBody = await request.json();
const stream = requestBody.stream; // 스트림 인자를 가져옵니다.

// 새 요청을 생성합니다.
const newRequest = new Request(url, {
메서드: 'POST',
헤더: 헤더,
body: JSON.stringify(requestBody) // 수정된 본문 사용
});

시도 {
// 대상 API에 요청 보내기
const response = await fetch(newRequest);

// 스트림 파라미터에 따라 응답 유형 결정하기
if (stream) {
// 스트리밍 응답 처리하기
const { 읽기 가능, 쓰기 가능 } = 새로운 TransformStream();
응답.body.pipeTo(쓰기 가능);
반환 새 응답(readable, {
헤더: 응답.헤더
});
} else {
// 정상 반환 응답
반환 새 응답(응답.본문, {
상태: 응답.상태,
헤더: 응답.헤더
});
}
} catch (e) {
// 요청이 실패하면 오류 메시지를 반환합니다.
반환 새 응답(JSON.stringify({ 오류: '백엔드 API에 연결할 수 없습니다' }), { 상태: 502 });
}
} else {
// 요청 메서드가 POST가 아니거나 경로가 잘못된 경우 오류를 반환합니다.
새 응답('찾을 수 없음', { 상태: 404 })을 반환합니다;
}
}

POST 예제:

curl --location 'https://ai-pro-free.aivvm.com/v1/chat/completions' \
--헤더 '콘텐츠 유형: 애플리케이션/json' \.
--data '{
"모델": "GPT-4-TURBO".
"messages": [
{
"role": "user", "content": "루쉰이 저우슈렌을 이긴 이유"
}],
"stream": true
}'

 

의사 스트리밍 코드를 추가합니다(출력 속도가 느려집니다):

추가 이벤트 리스너("fetch", event => {
event.respondWith(handleRequest(event.request))
})

비동기 함수 handleRequest(request) {
if (request.method === "OPTIONS") {
반환 새 응답(null, {
헤더: {
'액세스-제어-허용-오리진': '*',
"Access-Control-Allow-Headers": '*'
}, status: 204
})
}
// 요청이 POST 요청이고 경로가 올바른지 확인합니다.
if (request.method === "POST" && new URL(request.url).pathname === "/v1/chat/complaints") {
const url = 'https://multillm.ai-pro.org/api/openai-completion'; // 대상 API 주소
const headers = new Headers(request.headers);

// 필요에 따라 헤더 추가 또는 수정
headers.set('Content-Type', 'application/json');

// 요청의 본문을 가져와 JSON을 파싱합니다.
const requestBody = await request.json();
const stream = requestBody.stream; // 스트림 인자를 가져옵니다.

// 새 요청을 생성합니다.
const newRequest = new Request(url, {
메서드: 'POST',
헤더: 헤더,
body: JSON.stringify(requestBody) // 수정된 본문 사용
});

시도 {
// 대상 API에 요청 보내기
const response = await fetch(newRequest);

// 스트림 파라미터에 따라 응답 유형 결정하기
if (stream) {
const originalJson = await response.json(); // 전체 데이터를 한 번에 읽습니다.
// 읽을 수 있는 스트림 만들기
const readableStream = new ReadableStream({
start(controller) {
// 시작 데이터 보내기
const startData = createDataChunk(originalJson, "start");
controller.enqueue(new TextEncoder().encode('data: ' + JSON.stringify(startData) + '\n\n'));

// 여러 개의 데이터 청크가 원래Json에 따라 처리되고 전송된다고 가정합니다.
// 예를 들어, 데이터 일괄 전송 시뮬레이션을 위해
const content = originalJson.choices[0].message.content; // 이것이 전송할 콘텐츠라고 가정합니다.
const newData = createDataChunk(originalJson, "data", content);
controller.enqueue(new TextEncoder().encode('data: ' + JSON.stringify(newData) + '\n\n'));

// 최종 데이터 전송
const endData = createDataChunk(originalJson, "end");
controller.enqueue(new TextEncoder().encode('data: ' + JSON.stringify(endData) + '\n\n'));

controller.enqueue(new TextEncoder().encode('data: [DONE]'));
// 스트림의 끝을 표시합니다.
controller.close();
}
});
반환 새 응답(readableStream, {
헤더: {
'액세스-제어-허용-오리진': '*',
"액세스-제어-허용-헤더": '*',
'콘텐츠 유형': '텍스트/이벤트 스트림',
'캐시-제어': '캐시 없음',
'연결': '킵얼라이브'
}
});
} else {
// 정상 반환 응답
반환 새 응답(응답.본문, {
상태: 응답.상태,
헤더: 응답.헤더
});
}
} catch (e) {
// 요청이 실패하면 오류 메시지를 반환합니다.
반환 새 응답(JSON.stringify({ 오류: '백엔드 API에 연결할 수 없습니다' }), { 상태: 502 });
}
} else {
// 요청 메서드가 POST가 아니거나 경로가 잘못된 경우 오류를 반환합니다.
새 응답('찾을 수 없음', { 상태: 404 })을 반환합니다;
}
}

// 유형에 따라 다른 데이터 블록 생성
함수 createDataChunk(json, type, content = {}) {
스위치 (유형) {
케이스 "시작".
반환 {
ID: json.id,
객체: "chat.completion.chunk",
생성됨: json.created,
모델: json.model,
choices: [{ delta: {}, index: 0, finish_reason: null }]}; }
케이스 "데이터".
반환 {
ID: json.id,
객체: "chat.completion.chunk",
생성됨: json.created,
모델: json.model,
choices: [{ delta: { content }, index: 0, finish_reason: null }]}; }
케이스 "끝".
반환 {
ID: json.id,
객체: "chat.completion.chunk",
생성됨: json.created,
모델: json.model,
choices: [{ delta: {}, index: 0, finish_reason: 'stop' }]}; }
기본값입니다.
반환 {};
}
}

© 저작권 정책

관련 문서

댓글 없음

댓글에 참여하려면 로그인해야 합니다!
지금 로그인
없음
댓글 없음...