白嫖GPT 4o

January 7, 2025

cover

这里白嫖的是Github的GPT, 并不是OpenAI的。

获取key

打开Github, 点击右上角的Get API key, 打开窗口后点击Get developer key获取你的Github key.

1.webp

跳转到新的页面后点击Generate new token, 这里我们选择classic(说实话我也不知道这两个有什么区别, 就选择一般用途的).

2.webp

点击后会跳转到一个页面, 让你给key命名, 以及设置有效期, 有效期我直接设置无限, 我懒得之后再更新, 下面的权限一个都不需要添加.

获取到key后保存好, 之后需要通过key来验证身份。

初始化项目

初始化一个node.js项目, 修改package.json文件, 我们需要使用ES6语法, 这是openai依赖要求的.

{
    "type": "module",
}

安装依赖

pnpm i openai

新建一个sample.js文件, 将下面的代码复制进去, 并修改token为你刚刚获取的key.

import OpenAI from "openai";

const token = "";   // 这里是你的key
const endpoint = "https://models.inference.ai.azure.com";
const modelName = "gpt-4o";

export async function main() {
    const client = new OpenAI({ baseURL: endpoint, apiKey: token });

    const stream = await client.chat.completions.create({
        messages: [
            { role: "system", content: "你是一个乐于助人的ai助手" },
            { role: "user", content: "给我五个需要学习的理由" },
        ],
        model: modelName,
        stream: true,
    });

    for await (const part of stream) {
        process.stdout.write(part.choices[0]?.delta?.content || "");
    }
    process.stdout.write("\n");
}

main().catch((err) => {
    console.error("The sample encountered an error:", err);
});

在终端执行node sample.js就能看到ai的回答了.

3.webp

优化代码

当然, 我们刚刚的操作并不健康, 例如直接把key放进代码, 如果你把它上传到了Github之类的地方会导致你的key泄露, 这是很危险的, 以及固定的用户输入.

对于key, 一般设置为环境变量.

如果你使用bash:

export GITHUB_TOKEN="<你的key>"

如果你使用powershell:

$Env:GITHUB_TOKEN="<你的key>"

如果你使用windows的cmd:

set GITHUB_TOKEN=<你的key>

或者你可以写一个.env环境变量文件在你的项目里面:

KEY =  # 这里写你的key, 不需要使用引号

安装dotenv并修改一下代码:

pnpm i dotenv
import OpenAI from "openai";
import "dotenv/config";

const token = process.env.KEY;  # 修改从.env获取
const endpoint = "https://models.inference.ai.azure.com";
const modelName = "gpt-4o";

export async function main() {
    const client = new OpenAI({ baseURL: endpoint, apiKey: token });

    const stream = await client.chat.completions.create({
        messages: [
            { role: "system", content: "你是一个乐于助人的ai助手" },
            { role: "user", content: process.argv.slice(2)[0] },  # 修改输入从命令行获取
        ],
        model: modelName,
        stream: true,
    });

    for await (const part of stream) {
        process.stdout.write(part.choices[0]?.delta?.content || "");
    }
    process.stdout.write("\n");
}

main().catch((err) => {
    console.error("The sample encountered an error:", err);
});

接着我们输入命令就能看到ai的回答了:

node sample.js 下午好

4.webp