AI智能·

调用 chatgpt API 踩坑记录

众所周知,chatgpt为国外网址,需要正确访问(翻墙)。本章内容包括免费翻墙、注册账号、申请chatgpt API KEY、如何使用等进行一一讲述

前言

众所周知,chatgpt国外网址,需要正确访问(翻墙)。本章内容包括免费翻墙、注册账号、申请chatgptAPI KEY、如何使用等进行一一讲述

免费翻墙

  • 启动/关闭clash

  • 如果无法使用,更换节点(点击“⚡”符号延迟测试,超时状态无法使用)

注册chatgpt账号

注册google邮箱直接进入chatgpt官方登录即可

调用Chatgpt API

你会碰到的问题:

  1. 手机号验证

在申请API key时需要验证码验证,且国内手机号不支持

  1. chatgpt 账号绑卡

申请API KEY后,通过文档调用https://api.openai.com/任意接口,报错:“You exceeded your current quota, please check your plan and billing details”

原因:即使chatgpt3.5免费API,也需要绑定一张卡

  1. 网络限制,配置允许访问

国内就不能直接访问OpenAI官网,也不能直接访问OpenAI API。每次请求都会超时。报错:connect ETIMEDOUT 104.244.46.246:443

解决问题

你会发现网上有很多方式,如下:

虚拟手机号验证方法比如:sms-activateonlinesim

绑卡比如:fomepayWildcard

本人刚开始使用onlinesim虚拟手机号验证的API key,之后调用chatgpt API才发现需要绑定信用卡。后通过Wildcard注册的信用卡绑定。发现Wildcard免费赠送三次手机号验证。哭死。

如果你要调用chatgpt API推荐直接注册Wildcard信用卡,不仅可以绑卡,还可以解决手机号验证和OpenAI API无法访问的问题

Wildcard此处为注册入口

手机号验证:

选择: OpenAI

绑卡

根据以下内容一一复制进去即可

OpenAI API 转发

其他解决国内无法访问OpenAI API

第三方代理

这种最简单,不需要自己维护,直接从网上找比较常用的代理即可,例如,使用第三方代理如api.openai-proxy.com,直接将官方接口域名 api.openai.com 替换为 api.openai-proxy.com 即可在国内网络环境下直接调用。

这种方式如果能找的一个性能很好的转发代理,速度快,没有限额,但是缺点是第三方服务虽然号称只做转发,不会泄露用户API Key,但是存在挂掉的风险。

Cloudflare提供的AI Gateway

官方文档:Get started · Cloudflare AI Gateway docs

下面是以OpenAI为例演示简单的创建流程。

1: 注册账户

注册入口

2:创建AI Gateway
  • 创建网关 「AI」->「AI Gateway」->「创建网关」:

  • 自定义网关名称,点击「创建」:

  • 点击「名字 API Endpoints」查看详情:

  • 选择不同提供商的API,展示不同的代理域名,复制即可替换OpenAI域名。创建完成之后要等到几分钟才能使用。

  • 最终域名

3: 监控与调整
  1. Cloudflare Dashboard中,监控Worker的表现和请求日志。
  2. 根据需要调整缓存、速率限制等设置。

可以设置是否使用缓存和设置使用速率限制,建议不要使用缓存,可能导致不同问题出现重复答案。

测试接口并发布AI命令行工具

接口实现

  • 下载
    pnpm i openai
    
  • 核心代码
    import OpenAI from 'openai';
    
    // OpenAI实例
    this.client = new OpenAI({
        baseURL: '',
        apiKey: '',
        organization: '',
    })
    
    // 实现
    async chatCompletions(client: OpenAI, messages: OpenAI.Chat.Completions.ChatCompletionMessageParam[]) {
        try {
          const completion: OpenAI.Chat.Completions.ChatCompletion = await client.chat.completions.create({
            model: 'gpt-3.5-turbo',
            messages
          })
          return completion.choices[0].message;
        } catch (error) {
          throw new HttpException(
            error.message || '服务器异常',
            HttpStatus.BAD_REQUEST,
          );
        }
    }
    
    // 调用
    // messages传参
    chatCompletions(this.client, messages)
    

脚手架实现代码

  • 下载
    pnpm install axios commander ora
    
  • 核心代码
    #!/usr/bin/env node
    
    import axios from "axios";
    import ora from "ora";
    import { program } from "commander";
    
    const spinner = ora("查询中...");
    
    program
        .version("1.0.0")
        .command("query <content>")
        .description("query content")
        .action(async (content: string) => {
            try {
                spinner.start();
    
                const messages = [
                    {
                        role: "system",
                        content: "你是一个乐于助人的助手。",
                    },
                    {
                        role: "user",
                        content,
                    },
                ];
                const res = await axios.post(
                    "https://api.vliangao.cn/blog/ai/chatCompletions",
                    {
                        messages,
                    }
                );
    
                if (res.data) {
                    spinner.succeed("查询完成");
                    console.log("查询结果:", res.data.data.content);
                } else {
                    spinner.succeed("查询失败:" + (res.data.message || "服务器异常"));
                }
            } catch (error: any) {
                spinner.succeed("查询失败:" + (error.message || "服务器异常"));
            }
        });
    
    program.parse(process.argv);
    

演示

  • 下载
    npm i lg-ai -g
    
  • 命令行输入
    // lg query <content>
    lg query hi
    
  • 结果