智能助手网
标签聚合 国模

/tag/国模

linux.do · 2026-04-18 10:39:15+08:00 · tech

从 公益站死了,干脆整理一份国模免费渠道大全(授人以渔) 继续讨论: 当前国内模型来说,能上得了台面的,可能也就Qwen3.6,GLM5.1,Kimi K2.6,MiniMax2.7。 但是都或多或少存在一点问题: 1、Qwen的订阅太贵了,并且吃相难看(定价或者套餐就是一纸公告的事,恶心人)。 2、GLM存在严重的算力不足问题。 3、Minimax感觉用来做日常的开发还是还是不太够。 4、Kimi2.6我自己没有没有体验过,暂时无法评价。 当然这也只是我的个人看法,千人千面,大家可以讨论讨论对于国模的看法。 5 个帖子 - 3 位参与者 阅读完整话题

linux.do · 2026-04-17 22:54:59+08:00 · tech

前言 众所周知,我的 Hello AI 公益站最近 503 了。倒不是模型渠道用完,而是服务器实在没办法挡住某些人的 Ddos。有些人可能知道,我最近办了一场国模狂欢节,那么,渠道是怎么来的呢? 答案只有一个:2API (官网免费对话逆向成 API) 现在公益站死了,但我可以授人以渔,总结一下国模 2API 方法大全。你只要有一台服务器,一个域名,一个 CF 账号,就可以自己拥有 API(这也是另一种公益站吧) Kimi 总结 Cloudflare Worker 脚本。 部署方法 新建一个 Cloudflare Workers,输入以下代码 // Cloudflare Worker - Kimi K2 OpenAI API 兼容代理 // 环境变量: UPSTREAM_HOST (可选,默认 https://kimi-k2.ai) const DEFAULT_UPSTREAM_HOST = "https://kimi-k2.ai"; /** * 生成随机 IP 地址 * 使用常见的住宅/商业 IP 段,避免数据中心 IP 段 */ function generateRandomIP() { // 常见的住宅/商业 IP 段前缀 (中国和国际) const ipPrefixes = [ // 中国电信 [113, 116], [114, 80], [115, 192], [116, 224], [117, 136], [118, 112], [119, 96], [120, 192], [121, 32], [122, 192], // 中国联通 [112, 64], [113, 0], [116, 112], [119, 112], [120, 64], // 中国移动 [111, 0], [112, 0], [117, 128], [120, 128], [183, 192], // 美国常见段 [24, 0], [50, 0], [68, 0], [71, 0], [72, 0], [73, 0], [76, 0], [96, 0], [98, 0], [99, 0], [107, 0], [108, 0] ]; const prefix = ipPrefixes[Math.floor(Math.random() * ipPrefixes.length)]; const octet3 = Math.floor(Math.random() * 256); const octet4 = Math.floor(Math.random() * 254) + 1; // 避免 0 和 255 return `${prefix[0]}.${prefix[1] + Math.floor(Math.random() * 16)}.${octet3}.${octet4}`; } /** * 生成包含伪造 IP 的请求头 */ function generateSpoofedHeaders(baseHeaders = {}) { const fakeIP = generateRandomIP(); console.log(`[IP伪造] 使用伪造 IP: ${fakeIP}`); return { ...baseHeaders, "X-Forwarded-For": fakeIP, "X-Real-IP": fakeIP, "CF-Connecting-IP": fakeIP, "X-Originating-IP": fakeIP, "True-Client-IP": fakeIP, "X-Client-IP": fakeIP, "Forwarded": `for=${fakeIP}` }; } /** * 获取认证 Cookies */ async function getAuthCookies(upstreamHost) { console.log("[认证] 正在尝试获取认证 Cookies..."); const headers = generateSpoofedHeaders({ "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36", "accept": "*/*", "accept-language": "zh-CN,zh;q=0.9,en;q=0.8", "referer": `${upstreamHost}/zh/chat` }); const response = await fetch(`${upstreamHost}/api/auth/session`, { headers }); console.log(`[认证] 收到上游 Cookies 响应, 状态码: ${response.status}`); const cookies = response.headers.get("set-cookie"); if (!cookies) { console.error("[认证] 错误: 未在响应头中找到 'set-cookie'"); return null; } const csrfMatch = cookies.match(/__Host-authjs\.csrf-token=([^;]+)/); const callbackMatch = cookies.match(/__Secure-authjs\.callback-url=([^;]+)/); const authData = { csrf: csrfMatch ? csrfMatch[1] : null, callback: callbackMatch ? callbackMatch[1] : null }; if (authData.csrf && authData.callback) { console.log("[认证] 成功解析 CSRF 和 Callback Cookies"); } else { console.warn("[认证] 警告: 未能完整解析 Cookies:", authData); } return authData; } /** * 生成 Session ID */ function generateSessionId() { const sessionId = crypto.randomUUID(); console.log(`[工具] 生成新的 Session ID: ${sessionId}`); return sessionId; } /** * 将 OpenAI 格式请求转换为上游格式 */ function convertToUpstreamFormat(openaiRequest) { console.log("[转换] 正在将 OpenAI 格式转换为上游格式..."); return { messages: openaiRequest.messages, sessionId: generateSessionId(), searchContext: "" }; } /** * 将上游响应转换为 OpenAI 格式 */ function convertToOpenAIFormat(upstreamResponse, model, stream = false) { const id = `chatcmpl-${Date.now()}`; const created = Math.floor(Date.now() / 1000); if (stream) { console.log("[转换] 正在将上游响应转换为 OpenAI 流式格式..."); const chunk = { id, object: "chat.completion.chunk", created, model, choices: [{ index: 0, delta: { content: upstreamResponse.content }, finish_reason: "stop" }] }; return `data: ${JSON.stringify(chunk)}\n\ndata: [DONE]\n\n`; } console.log("[转换] 正在将上游响应转换为 OpenAI JSON 格式..."); return { id, object: "chat.completion", created, model, choices: [{ index: 0, message: { role: "assistant", content: upstreamResponse.content }, finish_reason: "stop" }], usage: upstreamResponse.usage || { prompt_tokens: 0, completion_tokens: 0, total_tokens: 0 } }; } /** * 处理聊天完成请求 */ async function handleChatCompletion(request, upstreamHost) { console.log("[聊天处理] 开始处理 /v1/chat/completions 请求..."); const openaiRequest = await request.json(); const stream = openaiRequest.stream === true; const model = openaiRequest.model || "kimi-k2"; console.log(`[聊天处理] 请求参数: 模型=${model}, 是否流式=${stream}`); const authCookies = await getAuthCookies(upstreamHost); if (!authCookies || !authCookies.csrf || !authCookies.callback) { console.error("[聊天处理] 错误: 获取认证 Cookies 失败, 中断请求"); return new Response(JSON.stringify({ error: "Failed to get auth cookies" }), { status: 500, headers: { "content-type": "application/json" } }); } const upstreamRequest = convertToUpstreamFormat(openaiRequest); console.log(`[聊天处理] 准备向上游 ${upstreamHost}/api/chat 发送请求`); const chatHeaders = generateSpoofedHeaders({ "content-type": "application/json", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36", "accept": "*/*", "accept-language": "zh-CN,zh;q=0.9,en;q=0.8", "origin": upstreamHost, "referer": `${upstreamHost}/zh/chat`, "cookie": `__Host-authjs.csrf-token=${authCookies.csrf}; __Secure-authjs.callback-url=${authCookies.callback}` }); const upstreamResponse = await fetch(`${upstreamHost}/api/chat`, { method: "POST", headers: chatHeaders, body: JSON.stringify(upstreamRequest) }); console.log(`[聊天处理] 收到上游响应, 状态码: ${upstreamResponse.status}`); if (!upstreamResponse.ok) { console.error(`[聊天处理] 错误: 上游请求失败, 状态码: ${upstreamResponse.status}`); return new Response(JSON.stringify({ error: "Upstream request failed" }), { status: upstreamResponse.status, headers: { "content-type": "application/json" } }); } const upstreamData = await upstreamResponse.json(); console.log("[聊天处理] 成功解析上游 JSON 响应"); if (stream) { console.log("[聊天处理] 正在以流式 (SSE) 格式返回响应"); const streamData = convertToOpenAIFormat(upstreamData, model, true); return new Response(streamData, { headers: { "content-type": "text/event-stream", "cache-control": "no-cache", "connection": "keep-alive" } }); } console.log("[聊天处理] 正在以 JSON 格式返回响应"); const openaiResponse = convertToOpenAIFormat(upstreamData, model, false); return new Response(JSON.stringify(openaiResponse), { headers: { "content-type": "application/json" } }); } /** * 添加 CORS 响应头 */ function addCorsHeaders(response) { const newHeaders = new Headers(response.headers); newHeaders.set("Access-Control-Allow-Origin", "*"); newHeaders.set("Access-Control-Allow-Methods", "GET, POST, OPTIONS"); newHeaders.set("Access-Control-Allow-Headers", "Content-Type, Authorization"); return new Response(response.body, { status: response.status, statusText: response.statusText, headers: newHeaders }); } /** * 主请求处理函数 */ async function handleRequest(request, env) { const upstreamHost = env.UPSTREAM_HOST || DEFAULT_UPSTREAM_HOST; const url = new URL(request.url); console.log(`[入口] 收到新请求: ${request.method} ${url.pathname}`); // 处理 CORS 预检请求 if (request.method === "OPTIONS") { return new Response(null, { headers: { "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Methods": "GET, POST, OPTIONS", "Access-Control-Allow-Headers": "Content-Type, Authorization", "Access-Control-Max-Age": "86400" } }); } let response; // 健康检查端点 if (url.pathname === "/health" && request.method === "GET") { console.log("[路由] 匹配到: /health (GET)"); response = new Response(JSON.stringify({ status: "healthy", timestamp: new Date().toISOString(), upstreamHost: upstreamHost }), { headers: { "content-type": "application/json" } }); return addCorsHeaders(response); } // 聊天完成端点 if (url.pathname === "/v1/chat/completions" && request.method === "POST") { console.log("[路由] 匹配到: /v1/chat/completions (POST)"); response = await handleChatCompletion(request, upstreamHost); return addCorsHeaders(response); } // 模型列表端点 if (url.pathname === "/v1/models" && request.method === "GET") { console.log("[路由] 匹配到: /v1/models (GET)"); response = new Response(JSON.stringify({ object: "list", data: [{ id: "kimi-k2", object: "model", created: Math.floor(Date.now() / 1000), owned_by: "kimi" }] }), { headers: { "content-type": "application/json" } }); return addCorsHeaders(response); } console.log(`[路由] 未找到匹配路由: ${url.pathname}, 返回 404`); return new Response("Not Found", { status: 404 }); } // Cloudflare Worker 导出 export default { async fetch(request, env, ctx) { return handleRequest(request, env); } }; 使用方法 API 密钥随便填(不会用的请先学一下其他帖子) Qwen 总结:一个 Docker 2API 项目,需要一台具有公网 IP 的服务器并将 8000 端口开放 部署方法 运行命令 docker run -it -d --init --name qwen-free-api -p 8000:8000 -e TZ=Asia/Shanghai vinlic/qwen-free-api:latest 使用方法 从 通义千问 登录 进入通义千问随便发起一个对话,然后 F12 打开开发者工具,从 Application > Cookies 中找到 tongyi_sso_ticket 的值,这将作为 Authorization 的 Bearer Token 值。 用 Authorization 的 Bearer Token 作为 API 密钥使用 API url:yourip:8000/v1 如果失效,可以使用这个项目: GitHub - smanx/qwen2api: A proxy service that converts Qwen Chat to an OpenAI-compatible API. · GitHub GLM AI 总结:一个 Docker 2API 项目,需要一台具有公网 IP 的服务器并将 8000 端口开放 部署方法 运行命令 docker run -it -d --init --name glm-free-api -p 8000:8000 -e TZ=Asia/Shanghai vinlic/glm-free-api:latest 使用方法 从 智谱清言 获取 refresh_token 进入智谱清言随便发起一个对话,然后 F12 打开开发者工具,从 Application > Cookies 中找到 chatglm_refresh_token 的值,这将作为 Authorization 的 Bearer Token 值: Authorization: Bearer TOKEN 用 Authorization 的 Bearer Token 作为 API 密钥使用 API url:yourip:8000/v1 讯飞星火(Spark) 总结:一个 Docker 2API 项目,需要一台具有公网 IP 的服务器并将 8000 端口开放 部署方法 运行命令 docker run -it -d --init --name spark-free-api -p 8000:8000 -e TZ=Asia/Shanghai vinlic/spark-free-api:latest 使用方法 从 xinghuo.xfyun.cn 获取 ssoSessionId, 进入 Spark 登录并发起一个对话,从 Cookie 获取 ssoSessionId 值,由于星火平台禁用 F12 开发者工具,请安装 Cookie-Editor 浏览器插件查看你的 Cookie。 这个值将作为 Authorization 的 Bearer Token 值: Authorization: Bearer TOKEN 注意:如果退出登录或重新登录将可能导致 ssoSessionId 失效! 智能体接入 从 这里 使用浏览器搜索功能找到你想要的智能体,复制它的 botId 作为 model 值。 多账号接入 你可以通过提供多个账号的 ssoSessionId 并使用 , 拼接提供: Authorization: Bearer TOKEN1,TOKEN2,TOKEN3 用 Authorization 的 Bearer Token 作为 API 密钥使用 API url:yourip:8000/v1 DeepSeek 部署方法 运行命令 docker run -it -d --init --name deepseek-free-api -p 8000:8000 -e TZ=Asia/Shanghai vinlic/deepseek-free-api:latest # 或将token配置在环境变量 docker run -it -d --init --name deepseek-free-api -p 8000:8000 -e TZ=Asia/Shanghai -e DEEP_SEEK_CHAT_AUTHORIZATION=xxx vinlic/deepseek-free-api:latest 使用方法 从 DeepSeek 获取 userToken value 进入 DeepSeek 随便发起一个对话,然后 F12 打开开发者工具,从 Application > LocalStorage 中找到 userToken 中的 value 值,这将作为 Authorization 的 Bearer Token 值: Authorization: Bearer TOKEN 用 Authorization 的 Bearer Token 作为 API 密钥使用 API 多账号接入 目前同个账号同时只能有 一路 输出,你可以通过提供多个账号的 userToken value 并使用 , 拼接提供: Authorization: Bearer TOKEN1,TOKEN2,TOKEN3 每次请求服务会从中挑选一个。 环境变量(可选) 环境变量 是否必填 说明 DEEP_SEEK_CHAT_AUTHORIZATION 否 当配置了 token 则使用 token,未配置则需要在请求头中传递 Authorization url:yourip:8000/v1 如果失效,可以用这个项目: GitHub - CJackHwang/ds2api: Deepseek to API - 客户端转 API 全栈开源工具,高性能,多账号轮询,支持纯 vercel、docker 部署使用。Google、Claude、ChatGPT 多接口格式兼容・GitHub DouBao 没研究过,可以参考以下项目: GitHub - lza6/doubao-2api: 无头浏览器 (Playwright) 逆向 a_bogus 风控签名、静态设备指纹、动态 msToken 刷新、高级反检测伪装 (playwright-stealth)、需自备 Cookie (支持多账号轮询)、兼容 OpenAI 格式 API、原生流式输出、有状态会话保持、Docker 一键部署・GitHub Other 这有一些其他项目,早已失效 / 太冷门,可以拿去 氛围式编程 试一下。 Moonshot AI(Kimi.ai)接口转 API kimi-free-api 阶跃星辰 (跃问 StepChat) 接口转 API step-free-api 秘塔 AI (Metaso) 接口转 API metaso-free-api (当前不可用) 字节跳动(豆包)接口转 API doubao-free-api (当前不可用) 字节跳动(即梦 AI)接口转 API jimeng-free-api 讯飞星火(Spark)接口转 API spark-free-api MiniMax(海螺 AI)接口转 API hailuo-free-api 聆心智能 (Emohaa) 接口转 API emohaa-free-api (当前不可用) 30 个帖子 - 30 位参与者 阅读完整话题