LOADING

加载过慢请开启缓存 浏览器默认开启

LinkedList's Blog

Learning notes

This is blog for Linkedlist771, mainly record some learning notes, thank you for your visit!

GN机器人下载链接

2023/6/1

之前制作的ChatGPT移动版本(windows+安卓的api已耗尽,请下载新版本, PS, 熟悉软件热更新的小伙伴可以联系我帮忙优化捏), 下载链接更新为:

如果还有问题,请联系QQ:2317431442

如果觉得不错给我买杯可乐捏:

wechat

阅读全文

利用ChatGLM利用QQ数据集构建自己的数字孪生

2023/5/30

项目简介:

本项目源自kcxain, 本人只是将其在本地部署完成, 作者使用了NVIDIA A100 80GB 并不是每个人都拥有的。也不是每一个人都拥有Linux系统进行部署,并且对于ChatGLM的部署,作者没有说的很明白。所以这个项目将分为两个部分:

  1. ChatGLM的部署
  2. 基于该项目的自我数据集的训练

ChatGLM部署

  • ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数1
  • 结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)1
  • ChatGLM-6B 使用了和 ChatGPT 相似的技术,针对中文问答和对话进行了优化1
  • 经过约 1T 标识符的中英双语训练,辅以监督微调、反馈自助、人类反馈强化学习等技术的加持,62 亿参数的 ChatGLM-6B 已经能生成相当符合人类偏好的回答1
  • 为了方便下游开发者针对自己的应用场景定制模型,他们同时实现了基于 P-Tuning v2 的高效参数微调方法 (使用指南) ,INT4 量化级别下最低只需 7GB 显存即可启动微调1
  • ChatGLM-6B 开源模型旨在与开源社区一起推动大模型技术发展,恳请开发者和大家遵守开源协议,勿将开源模型和代码及基于开源项目产生的衍生物用于任何可能给国家和社会带来危害的用途以及用于任何未经过安全评估和备案的服务1

清华的 ChatGLM 项目在 2023 年也发布了一些重要的更新:

  • 2023 年 5 月 17 日,他们发布了 VisualGLM-6B,一个支持图像理解的多模态对话语言模型1
  • 2023 年 5 月 15 日,他们更新了 v1.1 版本 checkpoint,训练数据增加英文指令微调数据以平衡中英文数据比例,解决英文回答中夹杂中文词语的现象1

部署ChatGLM

  1. 进入ChatGLM 主页,找到git链接,git到本地即可:

    image-20230530173507682

    然后使用git 命令下载到本地即可:

    git clone git@github.com:THUDM/ChatGLM-6B.git
    

    如果不熟悉git, 也可以点击主页的下载按钮下载zip文件进行解压。

    image-20230530173631415

  2. 下载完ChatGLM主页程序后,现在需要下载模型的权重文件。进入ChatGLM的hugging face hub

    利用按照主页教程利用git lsf 进行下载即可。

    如果这一步也存在问题,也可以先下载项目文件, 将权重文件下载并保存这个文件里面的其他的文件到chatglm-6b文件夹(注意,该文件夹要在之前的ChatGLM文件夹下):

    image-20230530174240127

  3. 下载完毕后,我们便可以试着运行一下预训练的ChatGLM了, 注意,这里根据你电脑的显存不同采用的量化规则也不太相同, 官网的建议如下:

量化等级 最低 GPU 显存(推理) 最低 GPU 显存(高效参数微调)
FP16(无量化) 13 GB 14 GB
INT8 8 GB 9 GB
INT4 6 GB 7 GB

​ 如果你的电脑是8G显存, 本人实测也只能选择INT4 量化, 对于6G以下显存的用户不太友好,你这里可以尝试清华的另一个项目 , 基于动态计算图硬盘,内存,显存动态交换量化的方式进行运行。笔者的显卡为NVIDIA RTX 3070Ti-Laptop, 显存为8G,选择为INT4量化。

​ 现在我们已经完成了所有的预设步骤啦,现在可以部署实验了, 选择这个文件:

image-20230530175109292

将第7-8行的代码修改为:

INT4量化

tokenizer = AutoTokenizer.from_pretrained("chatglm-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("chatglm-6b", trust_remote_code=True).quantize(4).half().cuda()

或者INT8量化:

tokenizer = AutoTokenizer.from_pretrained("chatglm-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("chatglm-6b", trust_remote_code=True).quantize(8).half().cuda()

然后进行运行即可,现在我们就可以给他提问了,取决于你的显卡的显存和算力,回复速度可能存在差距。

image-20230530183000569

image-20230530183459075

基于自己的QQ数据集的P-tuning

参考kcxain,的介绍,你现在应该能够完成数据集的构建,然后我们就可以开始训练了, 这里需要注意的是,作者使用的是Linux系统编写的训练脚本,所以我们需要在windows下进行训练需要进行修改。

这里我们选择P-tuning下面的main.py文件

image-20230530175722861

在pycharm中我们可以在这里设置参数

image-20230530175742124

在这里输入参数:

image-20230530175804152

我这里选择的参数为:

--quantization_bit
4
--do_train
--train_file
我的好友.txt.json
--prompt_column
prompt
--response_column
response
--history_column
history
--overwrite_cache
--model_name_or_path
..\chatglm-6b
--output_dir
chatglm_qq
--overwrite_output_dir
--max_source_length
128
--max_target_length
128
--per_device_train_batch_size
4
--per_device_eval_batch_size
1
--gradient_accumulation_steps
2
--predict_with_generate
--max_steps
10000
--logging_steps
10
--save_steps
1000
--learning_rate
0.002
--pre_seq_len
128

这里需要说明一下,根据你的显卡的显存大小,可以适当调整batch_size,max_source_length,max_target_length 从而减小你的显存消耗,这里我设置的参数的显存占用为7.8/8G, 基本上吃满了。

image-20230530180019282

然后我们运行后便可以看到训练的log输出了。

image-20230530180052355

这里我设置的每隔1000个epoch进行一个保存,在训练1000个epoch后,我终止了。这是目前的对话效果:

按照博主的介绍,这里我们注意一下,传入的参数是在py程序中

--model_name_or_path
..\chatglm-6b
--pre_seq_len
128
--ptuning_checkpoint
chatglm_qq/checkpoint-1000

image-20230530185103745

好吧,看来我和QQ群友主要的讨论内容还是关于文件接受/传输的, 太尴尬了,后面准备拿QQ群聊数据训练一下 ,毕竟我的活跃主要是在QQ群聊立马🤣。

笔者又进行了训练,得到如下效果:

image-20230530201939083

怎么说呢,差强人意吧, 可能还是预料数据集质量较差。

构建自己的数字孪生

在前文中,我们完成了基于自己的QQ数据集的P-tuning得到的自己的对话模型,现在我们可以部署了,这里我采用的是一个常用的解决方案cqhttp+nonebot, 然后选择基于已有插件进行修改得到。nonebot是一个基于异步架构搭建的, 基于此,我们基于fast api搭建一个异步路由构建自己的数字孪生。借助GPT4,简单描述需求后便可以得到所需要的代码:

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from transformers import (
    AutoConfig,
    AutoModel,
    AutoTokenizer,
)
from arguments import ModelArguments, DataTrainingArguments
import torch
import os

app = FastAPI()

model = None
tokenizer = None


class Prompt(BaseModel):
    text: str

@app.on_event("startup")
async def load_model():
    global model, tokenizer

    model_args = ModelArguments(
        model_name_or_path="..\\chatglm-6b",
        ptuning_checkpoint="chatglm_qq/checkpoint-600",
        pre_seq_len=128,
        prefix_projection=False,
        quantization_bit=8,
    )

    tokenizer = AutoTokenizer.from_pretrained(model_args.model_name_or_path,
                                              trust_remote_code=True)
    config = AutoConfig.from_pretrained(model_args.model_name_or_path,
                                        trust_remote_code=True)

    config.pre_seq_len = model_args.pre_seq_len
    config.prefix_projection = model_args.prefix_projection

    if model_args.ptuning_checkpoint is not None:
        print(
            f"Loading prefix_encoder weight from {model_args.ptuning_checkpoint}"
        )
        model = AutoModel.from_pretrained(model_args.model_name_or_path,
                                          config=config,
                                          trust_remote_code=True).quantize(4).half().cuda()
        prefix_state_dict = torch.load(
            os.path.join(model_args.ptuning_checkpoint, "pytorch_model.bin"))
        new_prefix_state_dict = {}
        for k, v in prefix_state_dict.items():
            if k.startswith("transformer.prefix_encoder."):
                new_prefix_state_dict[
                    k[len("transformer.prefix_encoder."):]] = v
        model.transformer.prefix_encoder.load_state_dict(new_prefix_state_dict)
    else:
        model = AutoModel.from_pretrained(model_args.model_name_or_path,
                                          config=config,
                                          trust_remote_code=True)

    if model_args.quantization_bit is not None:
        print(f"Quantized to {model_args.quantization_bit} bit")
        model = model.quantize(model_args.quantization_bit)

    if model_args.pre_seq_len is not None:
        # P-tuning v2
        model = model.half().cuda()
        model.transformer.prefix_encoder.float().cuda()

    model = model.eval()
    print(f"模型加载成功")


@app.post("/chatglm/qq/ask")
async def ask(prompt: Prompt):
    global model, tokenizer
    if model is None or tokenizer is None:
        raise HTTPException(status_code=503, detail="Model not loaded")

    # 现在你需要使用model和tokenizer处理prompt并生成response
    # response = model.chat(prompt)
    # 调用模型的 chat 方法
    history = []
    response, history = model.chat(
        tokenizer,
        prompt.text,
        history=history,
    )

    return {"response": response}



async def main():
    await load_model()
    while True:
        prompt = input("请输入:")
        response = await ask(Prompt(text=prompt))
        print(response)


if __name__ == "__main__":
    import asyncio
    asyncio.run(main())

启动代码为:

 uvicorn qq_chat_app:app --host 0.0.0.0 --port 1414 --reload

简单编写测试代码测试端口:

import requests
def get_chatglm(prompt):
    url = 'http://localhost:1414/chatglm/qq/ask'
    data = {
        'text': prompt
    }
    response = requests.post(url, json=data)

    print(response.json()["response"])

get_chatglm("你是谁? 你能干什么? 今天晚上什么吃什么?")

得到结果:

我是一个名为 ChatGPT 的人工智能助手,我可以通过自然语言处理技术,回答您的问题和提供信息。

成功测试通接口,暂时基于nonebot2搭建了一个简单的回复框架,效果如下:

image-20230530214355521

image-20230530214405417

image-20230530214524635

由于目前tx对QQ机器人风控严重,回复了几次就不行了,而且回复效果只能算一般吧。

Todo List

  • 优化数据集构建, 提高对话质量,增强模型训练。
  • 尝试注入RWKV, LLM等模型进行构建。
  • 暂时还没想好。
阅读全文

DAMO(Deep Agile Mask Optimization for Full-Chip Scale, 用于全芯片规模的深度学习敏捷掩膜优化)

2023/5/30

概述

  • 作者:Haoyu Yang、Zongyi Li、Kumara Sastry、Saumyadip Mukhopadhyay、Mark Kilgard、Anima Anandkumar、Brucek Khailany、Vivek Singh、Haoxing Ren
  • 发布时间:(发表日期)
  • 来源:(期刊、会议等)
  • 关键词:光刻建模,神经网络,双波段,光学启发

目的与动机

  • 光学近接校正(OPC)在传统设计流程中被广泛应用于可制造性优化。
  • 传统方法使用光刻模型进行 OPC,但可能会遇到过高的计算开销。
  • 大部分方法关注优化单个局部剪辑,而没有解决如何处理全芯片级别的问题。

方法

  • 本文提出了一种名为 DAMO 的高性能、可扩展的深度学习支持的全芯片级 OPC 系统。
  • DAMO 是一种端到端的掩模优化范式,包括一个深度光刻模拟器(DLS)用于光刻建模,以及一个深度掩模生成器(DMG)用于掩模图案生成。
  • 提出了一种专门为 DAMO 设计的新型布局分割算法,由 DBSCAN 聚类和 KMeans++ 聚类组成,用于处理全芯片 OPC 问题。

细节

  • optical proximity correction (OPC, 光学接近矫正)超大规模集成电路(VLSI)系统的不断缩小带来了不可避免的光刻邻近效应,导致制造良率下降。

    主流的OPC的技术包括:

目前光刻OPC的缺点

  1. 耗时:模型驱动/ILT方法需要大量光刻模拟和掩模优化调用。

  2. 低分辨率:基于机器学习的 OPC 工作局限于低分辨率图像。

  3. 无法容忍分辨率损失:传统 OPC 引擎仍需处理低分辨率限制。

  4. 单剪辑 OPC 不实用:基于机器学习的方法局限性较大。

  5. 针对全片尺度问题:少有讨论如何从全片尺度解决 OPC 问题。

  6. 运行时开销大:传统方法在全片 OPC 任务中面临运行时开销难题。

  7. 资源消耗:D2S 等方法在硬件和软件上消耗大量资源。

  8. 数据集限制:基于学习的方法在全片掩模优化方面受限于数据集和低晶圆图案保真度。

    本文完成的内容

    1. 设计了 DCGAN-HD,通过重新设计 DCGAN 的生成器和判别器,实现了具有竞争力的高分辨率特征提取器(1024 × 1024)。
    2. 基于 DCGAN-HD 构建了 DLS 和 DMG。DLS 能进行高分辨率光刻模拟,通过与 DLS 的逆校正一起训练,DMG 可直接生成高质量掩模。
    3. 开发了一种高效的无缝全片分割算法,由 DBSCAN 和 KMeans++ 聚类算法组成,使 DAMO 可以应用于任意大小的布局。
    4. 提出使用基于图的计算技术和并行技术分别加速 DBSCAN 和 KMeans++ 在 GPU 上的计算。此外,还使用 TensorRT 部署了所提出的 DCGAN-HD,从而实现更快的推理。
    5. 将提出的框架与最先进的商业工具 Calibre 进行了比较:在单剪辑 OPC 任务中加速 5 倍,全片 OPC 任务中加速 1.3 倍,同时保持更好的解决方案质量。

    前置条件

    • cGAN基础

    cGAN(Conditional Generative Adversarial Networks,条件生成对抗网络)[18],[19] 是一种类似于经典 GAN(Generative Adversarial Networks,生成对抗网络)[20] 的模型,由一个生成器和一个判别器组成。生成器被训练以生成遵循某种分布的样本,使得判别器无法识别这些数据是来自生成器还是来自训练数据集。cGAN 与 GAN 的不同之处在于某些限制,例如生成器的输入和输出可以具有更强的关联性。

    在超大规模集成电路中,典型的 cGAN 应用包括 GANOPC[9] 和 LithoGAN[14]。前者被设计用于布局掩模合成,后者则侧重于单通孔/接触形状的光刻轮廓预测。cGAN 的优点在于生成器和判别器之间的竞争性训练过程,可以促使生成器生成更真实、高质量的样本。而在光刻掩模生成和预测等任务中,cGAN 能够利用输入布局的条件信息,生成更为精确且符合实际需求的掩模。

    DAMO框架引入了以下术语和评估指标:

    • **定义1 (mIoU)**:给定两个形状P和G,P和G之间的IoU为 $IoU(P, G) = \frac{P \cap G}{P \cup G}$。mIoU 是平均IoU。

    • **定义2 (像素准确度)**:像素准确度(pixAcc)定义为图像上正确分类像素的百分比。

    • **定义3 (平方 L2 误差)**:设w和y分别为设计图像和晶圆图像,平方L2误差由 $||w - y||_2^2$ 计算。

    • **定义4 (PV Band)**:给定一组工艺条件下的光刻仿真轮廓,PV Bands 是这些条件下所有轮廓的区域。

    • 问题1(掩模优化):给定设计图像w,掩模优化的目标是生成相应的掩模x,使得光刻过程后剩余的图案y尽可能接近w,换句话说,最小化光刻图像的PV Band和平方L2误差。

    掩模质量通过与目标图像的晶圆图像保真度评估,主要采用三种缺陷检测器:EPE(边缘放大误差)、桥和颈部。EPE计算目标边缘到光刻轮廓的距离,颈部缺陷关注关键尺寸误差,桥接检测器寻找意外的电线缩短。为确保光刻后图案尽量接近目标图案,采用平方L2误差和PV Band评估掩模质量,分别衡量标称工艺条件下的质量和生成掩模的稳健性。

    PV Band(过程变差带)是在一组工艺条件下,衡量掩膜对光刻过程中各种变化的稳健性的指标。在光刻过程中,不同的工艺条件可能会导致不同的光刻轮廓,因此在这些条件下的光刻仿真轮廓之间存在一定的区域差异。PV Band就是描述这些条件下所有轮廓区域差异的指标。一个较小的PV Band表示生成的掩模在工艺条件变化下更具稳健性,光刻过程后产生的图案与目标图案更为接近。

DAMO框架

image-20230504202444044

DMG

DMG是DAMO的第二部分,它与DLS共享相同的体系结构。正向光刻过程可以用下式描述
$$
\boldsymbol{Z}=f(\boldsymbol{M})
$$
传统的ILT试图根据给定的光刻模型获得最优掩模$\boldsymbol{M_{opt}}$,该模型表示为
$$
\boldsymbol{M}_{\mathrm{opt}}=f^{-1}\left(\boldsymbol{Z}_t\right)
$$

通过更高的分辨率提高精—–DCGAN-HD:高分辨率解决方案

  • DCGAN-HD用于模拟光刻。

数据集准备

image-20230504230501724

  • 从零开始建立训练集

    生成训练图像需要五个步骤,包括设计生成、SRAF插入(带设计规则检查)、OPC、光刻仿真、布局到图像转换。

    • **设计一个设计模式: **

    所有通孔图案(70 × 70 nm2)都被限制在1024 × 1024 nm2的窗口中。其次,通过改变通孔密度,我们可以控制单个窗口中通孔图案的数量。为了减少训练集随机分布带来的偏差,通过对经过数进行均匀分组。

    • SRAF插入和DRC

    使用Mentor Calibre[17]进行SRAF插入和设计规则检查。请注意,过孔图案可能出现在设计区域内的任何位置,Calibre在执行SRAF插入时将在过孔图案的中心创建一个新的设计层。这使得模型更容易学习,因为所有的via模式都位于图像的中心附近。此外,它还为我们进一步开发加速算法提供了指导。由于设计面积为1024 × 1024 nm2,当有2个以上的via图案时,可能会有一些SRAF图案出现在设计区域之外。一个更大的窗口2048×2048 nm2将用于捕获所有SRAF模式,它们与设计窗口共享同一个中心。

    • OPC,光刻仿真和图像生成

    我们使用由Calibre生成的掩模和晶圆图案作为ground truth。

    • DLS的训练

    image-20230505105107484

    • 训练DMG

    image-20230505105728177

  • 所提出的DAMO使用Python和PyTorch库[35]实现。在DLS和DMG的训练阶段,我们采用了Adam优化器[36],基础学习率和动量参数分别设置为0.0002和(0.5,0.999)。在所有模型中,LeakyReLU中的泄漏斜率设置为0.2。我们将批次大小设置为4,最大训练轮次设置为100。权重参数λ0、λ1、α0、α1和λ2分别设置为100、100、30、30和20。可以通过PyTorch的评估模式实现DLS的固定参数。训练后,生成的掩模层将转换为GDSII布局文件,然后输入到Mentor Calibre进行光刻模拟验证。我们使用四个Nvidia TITAN Xp GPU进行训练,一个用于测试。我们采用的评估指标有mIoU、pixAcc、L2误差和PV Band。这里,PV Band是由Calibre计算的。

其中Calibre的使用手册:

[17]Calibre V erification User’s Manual, Mentor Graph., Wilsonville, OR, USA, 2008.

数据集

  • ISPD-2019:此设计来自ISPD 2019初始详细布线竞赛[25]。布局是使用商业布点和布线工具进行合成的。通过将过孔层输入到OPC和仿真流程中,获得名义电阻轮廓。训练集包括$10 \mathrm{K} 4 \mu \mathrm{m}^2$的平铺,这些平铺是使用遵循与[25]中设计相同设计规则的开源布局生成器生成的。在测试中,[25]中的过孔层也被切成 $4 \mu \mathrm{m}^2$ 的平铺,总计 $11 \mathrm{K}$ 实例,转换为 $2000 \times 2000$(ISPD-2019 (H))和 $1000 \times 1000$(ISPD-2019 (L))图像。在大平铺模拟实验中,我们从[25]中选择十个最密集的 $64 \mu \mathrm{m}^2$ 平铺,并将它们转换为 $8000 \times 8000$ 图像。

    1. 摘要

    2019年ISPD竞赛在2018年ISPD详细布线竞赛的基础上,增加了更符合实际工业应用的设计规则设定。

    详细布线过程可以分为两个步骤。首先,进行初始详细布线,以生成详细布线解决方案并处理主要设计规则。然后进行详细布线优化,修复剩余的设计规则违规问题。本次竞赛主要关注初始详细布线步骤。

    假设全局布线结果已经针对某些指标(如时序)进行了良好的优化,详细布线器需要尽可能遵循全局布线结果。这样,优化的指标得以保留,同时避免了设计规则违例。例如,图1(a)显示了一个具有源引脚A和汇引脚B、C、D的网络的全局布线结果。由于从A到B的路径对时序至关重要,全局布线器识别出一条从A到B的短路径。然而,该路径穿过了局部布线拥堵区域,这一区域并未被全局布线器发现。如果详细布线器如图1(b)所示,在该区域上布线,将会产生设计规则违例。图1(c)显示了一个没有短路/间距违例的布线结果,但它会导致从A到B的路径时序退化。另一方面,图1(d)显示了一个理想的解决方案。

img

​ 为了尽量减小对网络拓扑的干扰,初始详细布线起着重要作用。如果初始详细布线结果能够满足大部分常见的布线规则,即使没有 完全达到DRC要求,后续的详细布线优化就不太可能对布线结果造成很大干扰。

相关教程

在本教程中,我们将使用一个仅包含11个网络的样本基准来介绍基准格式、竞赛问题的目标/约束以及如何使用Cadence P&R工具Innovus评估您的布线方案。请从以下链接下载样本基准到您的Linux服务器,然后使用命令“tar zxvf ispd19_sample.tgz”解压缩下载的文件。

注意:ispd19_sample.tgz、ispd19_sample2.tgz 和 ispd19_sample3.tgz 是在 ISPD 2018竞赛中使用的相同样本基准。而ispd19_sample4.tgz 是一个新的样本基准,其中包含了本次竞赛所需的新规则。

“.input.lef”文件包含了竞赛中需要考虑的布线规则和设计信息。 “.input.def”文件包含了设计的布局信息、引脚和阻塞。 “.input.guide”文件包含了详细布线器应遵循的全局布线解决方案。每个基准测试都将有这三个文件来表示详细布线问题的实例。请参考以下文档,了解本次竞赛中规则和目标的详细信息。

另一方面,“.solution.good.def”和“.solution.bad.def”分别代表了一个好的布线解决方案和一个不好的布线解决方案。这两个“解决方案”文件的大部分内容与“*.input.def”文件相同,但解决方案文件包含每个网络的布线信息。在后面的部分,我们将使用这两个文件来介绍如何使用Innovus评估详细布线器生成的布线解决方案。其他基准测试中将不提供这两个文件,它们仅用于教程目的。您的可执行文件生成的解决方案文件格式应遵循上述链接中介绍的LEF/DEF格式。

阅读全文

GPT4逆向IOS模型无限次数油猴脚本编写

2023/5/30

GitHub项目链接

脚本链接

1:起因

image-20230529191948609

目前ChatGPT 如火如荼, 但是GPT3.5的模型能力有限,很多人选择开通GPT Plus来使用GPT4功能。

目前,GPT PLUS 用户可以使用以下模型:

  • GPT 3.5
    • 优点:速度快,适合一般的需求。
    • 缺点:模型参数较少,回答不够智能。

image-20230529192326117

  • GPT 4
    • 优点:模型参数多,回答更智能,上下文理解更强。
    • 缺点:有次数限制, 25次/3小时, 对英文理解能力强于中文,如果中文回答较烂,可以尝试英文。

image-20230529192507875

  • GPT 4 - Browsing
    • 优点:添加了联网功能, 同上
    • 缺点:同上

image-20230529193218778

GPT 4 - Plugin

  • 优点:各种千奇百怪的插件,其中文献检索功能较为不错,同上
  • 缺点:同上

image-20230529193310330

5.18日 OpenAI推出IOS的APP版本,其中对于plus用户可以无限次数的使用GPT4模型。在登录IOS的过程中发现OpenAI在其中内嵌了一个网页,推测可以通过逆向功能实现网页版无限使用。

2:具体实现

IOS设备使用无限次数的GPT4后会留下历史记录:

image-20230529193753235

推测可能是调用了不同的模型, 决定采取浏览器抓包的方式来实现。

具体实现步骤

  1. 什么是浏览器抓包:

    浏览器抓包 是一种网络调试方法,主要用于观察并分析浏览器和服务器之间的网络交互过程。具体来说,就是在浏览器发送请求和接收响应的过程中,捕获并记录网络数据包的过程。

    抓包的用途

    • 调试网络问题:开发者可以使用抓包工具检查请求和响应的详细信息,如HTTP头,内容,以及错误代码,等等,从而查找问题的来源。
    • 网络性能优化:通过抓包,我们可以观察网页加载的具体过程,以及每个请求所需的时间,这对于网络优化和性能提升非常有帮助。
    • 网络安全:抓包工具也常被用于检测网络安全问题,如未加密的数据,或是恶意的网络活动。

    如何进行浏览器抓包

    1. 使用浏览器的开发者工具:大部分现代浏览器都内置了开发者工具,可以直接进行网络抓包。例如,在 Chrome 浏览器中,只需打开“开发者工具”(F12或右键点击页面然后选择”检查”),然后选择”Network”标签,就可以看到网络请求的详细信息。
    2. 使用抓包工具:除了浏览器自带的工具,还有一些专业的抓包工具,如 Wireshark,Fiddler,Charles 等,这些工具功能更强大,能捕获更多类型的网络数据包。
  2. 如何进行浏览器抓包

​ 本人的使用的浏览器为Edge浏览器, Chrome浏览器同理, 在浏览器中按下F12键打开调试工具,选择网络这一项。

image-20230529194415396

​ 然后清空历史的记录(点击上方的圆圈符号), 然后当你在ChatGPT的网页版发送信息后, 在右侧的网络调试工具便可以看到你调用时发送的信息。比如说这里我们调用的是GPT4模型。

image-20230529194947263

​ 当然,Mac同理,由于该APP只能在IOS设备上使用, 所以我借用了舍友的MAC进行了抓包,最后发现IOS设备无限使用的模型为gpt-4-mobile。 现在我们已经获取了我们所需要的所有内容了。现在就可以开始编写脚本来实现了。

  1. 脚本编写

很多人觉得编写脚本代码是一键很难的事,但是有GPT-4的帮助后,其实不然,询问如何编写,他便可以很轻松的给出代码:

image-20230529195510378

稍加修改,便得到了第一版可以运行的代码:

// ==UserScript==
// @name        无限GPT4
// @namespace   https://github.com/linkedlist771
// @description 无限使用GPT4
// @license MIT
// @include     *
// @version     1
// @grant       none
// ==/UserScript==
 
(function() {
    'use strict';
 
    let realFetch = window.fetch;
    window.fetch = function(url, init) {
        if (init && init.method === 'POST') {
            let data = JSON.parse(init.body);
            if (data.hasOwnProperty('model')) {
                data.model = 'gpt-4-mobile';
                init.body = JSON.stringify(data);
            }
        }
        return realFetch(url, init);
    };
})()

现在这个代码已经可以正常运行了,在启动后,询问区别GPT4和3.5的问题,可以得到正确的答案,而且会看历史记录可以发现模型已经被修改了。确实为GPT4。

image-20230529195952022

LShang001Seto的建议后, 对代码的部分部分逻辑进行了订正,xuzihanshsjnsn 帮忙完成了UI部分的设计。 基于此完成了第四版脚本,开启后有一个按钮,通过选择可以控制目前是否开启。

image-20230529204718806

总结

至此,我们完成了如何通过抓包找到模型然后编写JS代码进行实现无限次数的GPT4模型调用,如果觉得写的不错可以给项目点个赞捏, **给大家磕头了ლ(´ڡ`ლ)**。

阅读全文
1 ... 2 3 4
avatar
Ding Li

Description
你好, 这里是Linkedlist771的个人博客,主要记录一些学习笔记,谢谢你的访问!