前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ChatGPT提效神奇,一站式API Key管理

ChatGPT提效神奇,一站式API Key管理

作者头像
一个程序猿的异常
发布2023-12-04 13:54:43
发布2023-12-04 13:54:43
98600
代码可运行
举报
运行总次数:0
代码可运行

背景介绍

在探索大模型的奇妙世界时,我们经常需要巧妙处理和分发一堆 API key,有了API Key 才能打开魔幻的大门。

这个任务本身就像是在进行一场精细的平衡术,还得密切注意不让任何关键信息泄露

毕竟,key 的泄露和不恰当的使用可是大忌。

但是,无需担心,救星来了

开发者 songquanpeng 带来了他的最新作品:OneAPI

这个开源项目是一个既强大又灵活的 OpenAI 接口管理和分发系统,专门为各种大模型设计,让 key 的管理和分发变得简单而高效

OneAPI 的美妙之处在于它的便捷性——提供了一键部署的 Docker 镜像,只需轻轻一点,你就可以开启你的模型管理之旅。

重要的是可以突破限制,再也不用配置繁琐的网络了。

还有最最重要的一点,一些第三方平台提供了免费额度,一个人玩足够了!

项目地址:https://github.com/songquanpeng/one-api

使用 root 用户初次登录系统后,务必修改默认密码 123456

功能介绍

image-20231127125747414

image-20231127125856244

功能预览

image-20231127130013978

渠道管理

image-20231127130123433

令牌管理

image-20231127130212661

日志明细

image-20231127130246362

生成系统访问令牌(重要)

后面所有的API操作都需要这个令牌,一定要复制下来,并且妥善保管,拿到这个令牌就有系统所有的访问权限了。

image-20231129202226917

服务部署

推荐使用 Sealos 进行一键部署,注册默认赠送5元额度,可以使用2-3天。

直达:https://cloud.sealos.io/?openapp=system-fastdeploy?templateName=one-api

image-20231127130359101

Sealos 使用

服务部署完成以后,点击首页的应用管理

image-20231127130646475

image-20231127130707437

进入应用详情页面,有个外网地址,点击访问,第一次登录使用 root 123456 ,切记修改密码。

image-20231127130750104

然后进行渠道配置就可以了。

使用GPT 生成oneapi自动化管理代码

由于openai官方策略导致,普通的账号只能一分钟调用3次,如果要多次调用怎么办?多添加几个账号就可以了。

我一次性添加了100个key进去,当有的key过期以后管理比较麻烦,幸运的是oneapi提供了调用鉴权,解决了cookie过期的问题。

接口分析

渠道的管理相对比较简单,主要包含下面几个功能:

  • 分页获取渠道列表
  • 测试渠道
  • 删除
  • 启/禁用

F12大法

快捷键:F12 或者鼠标右键 检查 打开浏览器调试功能,点击 Network 面板,可以找到关键的请求,然后copy curl,然后让GPT生成具体的代码。

image-20231129202623425

代码语言:javascript
代码运行次数:0
运行
复制
curl '{YOUR_HOST}/api/channel/?p=1' \
-H 'Authorization: YOU KEY' 

上面的内容我进行了简化,并且把鉴权信息替换成了令牌访问

GPT生成代码

代码语言:javascript
代码运行次数:0
运行
复制
你是一个高级Python工程师,擅长爬虫代码编写,请帮我把下面的curl命令转成使用requst调用,注意代码的复用性,需要包含get、post、delet、put公共方法,域名和鉴权信息当做类初始化参数 curl '{YOUR_HOST}/api/channel/?p=1'
-H 'Authorization: YOU KEY' curl调用的方法定义为page,main方法循环获取所有页码数据,页码从0开始

image-20231130202522758

将上面的host和key替换成自己的,测试执行一次性通过

image-20231129205037480

添加测试方法

image-20231130202619271

删除不可用渠道

image-20231130202645985

完整代码

代码语言:javascript
代码运行次数:0
运行
复制
import requests

class APIClient:
    def __init__(self, base_url, auth_key):
        self.base_url = base_url
        self.headers = {'Authorization': auth_key}
        
    def get(self, endpoint, **kwargs):
        return requests.get(self.base_url + endpoint, headers=self.headers, **kwargs)
    
    def post(self, endpoint, data=None, json=None, **kwargs):
        return requests.post(self.base_url + endpoint, headers=self.headers, data=data, json=json, **kwargs)
    
    def delete(self, endpoint, **kwargs):
        return requests.delete(self.base_url + endpoint, headers=self.headers, **kwargs)
    
    def put(self, endpoint, data=None, **kwargs):
        return requests.put(self.base_url + endpoint, headers=self.headers, data=data, **kwargs)
    
    def page(self, p):
        return self.get(f'/api/channel/?p={p}')
    
    def delete_channel(self, id_):
        response = self.delete(f'/api/channel/{id_}')
        if response.status_code == 200:
            print(f"Channel with ID {id_} successfully deleted.")
        else:
            print(f"Failed to delete channel with ID {id_}. Status code: {response.status_code}")
    
    def test(self, id_):
        response = self.get(f'/api/channel/test/{id_}')
        if response.status_code == 200:
            result = response.json()
            if not result.get('success'):
                error_message = result.get('message', '')
                print(f"Test for ID {id_} failed: {error_message}")
                # Check for specific error messages and delete if necessary
                if any(keyword in error_message for keyword in [
                    "account_deactivated",
                    "insufficient_quota",
                    "invalid_api_key",
                    "no_organization",
                    "model_not_found"
                ]):
                    self.delete_channel(id_)
            return result
        else:
            print(f"Test request for ID {id_} failed with status code: {response.status_code}")
            return None
    
    def process_data(self, data):
        for item in data:
            id_ = item.get('id')
            if id_:
                result = self.test(id_)
                if result and result.get('success'):
                    print(f"Processed test for ID: {id_} with time: {result.get('time')}")
                # Failure handling and channel deletion performed inside self.test method

def main(api_client):
    page_number = 0
    while True:
        response = api_client.page(page_number)
        if response.status_code != 200:
            print(f"Failed to retrieve page {page_number}: {response.status_code}")
            break
        
        page_data = response.json()
        if not page_data.get('success', False) or not page_data.get('data'):
            break
        
        api_client.process_data(page_data['data'])
        
        # Go to the next page
        page_number += 1
        print(f"Moving to page {page_number}...")

if __name__ == "__main__":
    YOUR_HOST = "http://example.com"
    YOUR_KEY = "Bearer YOUR_API_KEY"

    api_client = APIClient(YOUR_HOST, YOUR_KEY)
    main(api_client)
   

不到100行的代码通过GPT不到半小时搞定,发布到服务器写个定时任务跑起来就是了。

设置定时任务

image-20231130204242386

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-11-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一个程序猿的异常 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景介绍
  • 功能介绍
    • 功能预览
    • 渠道管理
    • 令牌管理
    • 日志明细
    • 生成系统访问令牌(重要)
    • 服务部署
    • Sealos 使用
  • 使用GPT 生成oneapi自动化管理代码
    • 接口分析
    • F12大法
  • GPT生成代码
    • 添加测试方法
    • 删除不可用渠道
  • 完整代码
  • 设置定时任务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档