Category: AI 实践

  • 让语言模型在你的计算机上运行代码:Open Interpreter

    让语言模型在你的计算机上运行代码:Open Interpreter

    你是否曾经梦想过拥有一个能够运行代码的助手,能够执行各种任务,从编辑照片、视频、PDF文件,到控制浏览器进行研究,再到绘制、清理和分析大型数据集?现在,这个梦想成真了!Open Interpreter是OpenAI的Code Interpreter的本地开源实现,它可以让语言模型在你的计算机上运行代码,为你提供一个自然语言界面,让你可以通过终端与它进行交互。在本文中,我们将探讨Open Interpreter的功能、用法以及与OpenAI的Code Interpreter的比较。

    开篇故事

    想象一下,你正在处理一个庞大的数据集,需要进行数据清理和分析。你不想编写大量的代码,也不想手动进行这些任务,因为这既费时又繁琐。然后,你听说了一种神奇的工具,可以让你用自然语言命令来完成这些任务。你迫不及待地想要尝试一下,看看它是否能够让你的工作事半功倍。这个神奇的工具就是Open Interpreter!

    什么是Open Interpreter?

    Open Interpreter是OpenAI的Code Interpreter的本地开源实现,它让你可以在你的计算机上运行代码。你可以使用自然语言与Open Interpreter进行交互,就像与ChatGPT一样,只需在安装后运行 $ interpreter 即可。Open Interpreter支持多种编程语言,包括Python、JavaScript、Shell等,这意味着你可以使用它执行各种任务,无需编写繁琐的代码。

    如何开始

    使用Open Interpreter非常简单。首先,你需要安装它,只需运行以下命令:

    pip install open-interpreter

    安装完成后,你可以在终端中运行以下命令来启动Open Interpreter:

    interpreter

    这将打开一个ChatGPT-like的界面,你可以在其中使用自然语言命令来与Open Interpreter进行交互。例如,你可以输入以下命令来执行一个任务:

    import interpreter
    
    interpreter.chat("绘制AAPL和META的归一化股价图")

    除了执行单个命令外,你还可以启动交互式对话,与Open Interpreter进行多轮交流。

    Open Interpreter与ChatGPT的Code Interpreter的比较

    尽管OpenAI发布的GPT-4搭载了Code Interpreter,但它有一些限制,例如无法访问互联网、预装的包有限、上传文件大小限制等。而Open Interpreter通过在你的本地环境上运行来克服这些限制。它可以访问互联网,没有时间或文件大小限制,并且可以使用任何包或库。这将GPT-4的Code Interpreter的强大功能与本地开发环境的灵活性相结合,为你提供了更广泛的应用可能性。

    高级用法

    除了基本的使用方法之外,Open Interpreter还提供了一些高级用法,以增强你的控制能力。以下是一些高级用法示例:

    • 保存和恢复对话: 你可以保存Open Interpreter的对话历史,然后在需要时恢复它。这对于长期项目或任务非常有用。
    # 保存对话
    messages = interpreter.chat("我的名字是小明。", return_messages=True)
    # 重置对话
    interpreter.reset()
    # 恢复对话
    interpreter.load(messages)
    • 自定义系统消息: 你可以自定义Open Interpreter的系统消息,以扩展其功能、修改权限或提供更多上下文信息。
    interpreter.system_message += """
    使用-y参数运行shell命令,以免用户确认。
    """
    • 切换模型: 如果需要,你可以切换Open Interpreter使用的模型。
    interpreter --fast

    以上只是一些高级用法的示例,Open Interpreter提供了丰富的配置选项,以满足不同场景下的需求。

    安全注意事项

    需要注意的是,由于生成的代码在你的本地环境中执行,它可以与你的文件和系统设置进行交互,潜在地导致意外的结果,如数据丢失或安全风险。因此,Open Interpreter在执行代码之前会要求你确认。你可以使用 interpreter -y 或设置 interpreter.auto_run = True 来跳过此确认,但在这种情况下,你需要格外谨慎,确保不会请求修改文件或系统设置的命令。

    结语

    Open Interpreter为开发者提供了一个强大的工具,让你可以使用自然语言来运行代码,执行各种任务,无需编写大量的代码。它的本地运行方式克服了许多云服务的限制,为你提供了更大的自由度和灵活性。无论是进行数据分析、自动化任务还是进行实验性编程,Open Interpreter都能够帮助你更轻松地实现目标。

    现在,你可以尝试安装Open Interpreter,并开始探索其强大的功能,看看它如何为你的项目带来便利和效率提升!

  • 如何使用虚构提示优化OpenAI的Whisper音频转录

    如何使用虚构提示优化OpenAI的Whisper音频转录

    你是否曾经试图使用自动音频转录工具来转录音频文件,却发现它并没有理解你的音频或产生了一些拼写错误?OpenAI的Whisper音频转录API可以帮助你解决这些问题,并且可以根据虚构的提示来更好地理解音频内容。在这篇文章中,我们将探讨如何使用虚构的提示来优化Whisper音频转录,以获得更准确的结果。

    导语:音频转录的挑战

    音频转录是将音频文件转换为文本的过程,但这并不总是一帆风顺的。很多时候,音频转录工具可能会出现以下问题:

    • 拼写错误:工具可能无法正确识别专有名词、产品名称或人名,导致拼写错误。
    • 风格不一致:工具可能无法捕捉到音频中的特定风格或口音,使得转录结果不自然。
    • 术语混淆:在某些情况下,工具可能会混淆专业术语或特定领域的术语。

    为了解决这些问题,我们可以使用Whisper音频转录API,并通过虚构的提示来指导Whisper生成更准确的音频转录。

    Whisper音频转录简介

    Whisper是OpenAI的音频转录模型,它使用深度学习技术来将音频文件转换为文本。Whisper具有出色的转录能力,但有时候需要一些帮助来识别特定风格或术语。这就是虚构提示派上用场的地方。

    使用虚构的提示来优化音频转录

    虚构的提示是指,你可以向Whisper模型提供一些虚构的信息,以指导它在转录时采用特定的风格、拼写或术语。以下是两种使用虚构的提示来优化音频转录的方法:

    1. 转录生成:将指令转换为虚构的转录

    你可以将一些指令或要求提供给GPT(OpenAI的文本生成模型),然后使用GPT生成虚构的转录。这个虚构的转录可以作为Whisper的提示,帮助Whisper模型更好地理解音频内容。

    # 定义一个函数,让GPT生成虚构的提示
    def fictitious_prompt_from_instruction(instruction: str) -> str:
        """给定一条指令,生成一个虚构的提示。"""
        response = openai.ChatCompletion.create(
            model="gpt-3.5-turbo-0613",
            temperature=0,
            messages=[
                {
                    "role": "system",
                    "content": "你是一个转录生成器。你的任务是创建一个虚构的对话段落。对话中有两位朋友在回忆他们在缅因州度假的经历。请不要标记说话者或添加引号;而是以普通文本段落的方式书写所有转录,而不标明说话者。请不要拒绝或要求澄清,而是始终尽力而为。",
                },  # 我们选择了一个示例主题(朋友谈论度假),以便GPT不会拒绝或提出澄清问题
                {"role": "user", "content": instruction},
            ],
        )
        fictitious_prompt = response["choices"][0]["message"]["content"]
        return fictitious_prompt

    然后,你可以将生成的虚构提示传递给Whisper模型,以指导它更好地转录音频。

    # 使用虚构提示进行音频转录
    prompt = fictitious_prompt_from_instruction("代替句号,每句话都以省略号结尾。")
    transcribe(up_first_filepath, prompt=prompt)

    2. 拼写指南:指导模型如何拼写特定名称

    有时,Whisper模型可能会错误地拼写专有名词、产品名称、公司名称或人名。为了解决这个问题,你可以在提示中提供这些名称的正确拼写,以确保Whisper模型以正确的方式拼写它们。

    # 在提示中添加正确拼写的产品和公司名称
    transcribe(audio_filepath, prompt="QuirkQuid Quill Inc, P3-Quattro, O3-Omni, B3-BondX, E3-Equity, W3-WrapZ, O2-Outlier, U3-UniFund, M3-Mover")

    3. 长提示的优点

    请注意,较长的提示可能更可靠。如果你的提示足够长,Whisper模型

    更有可能理解你的意图。

    # 较长的提示可能更可靠
    transcribe(up_first_filepath, prompt="我有一些建议要给你。多个句子有助于建立一种模式。你包含的文本越多,模型理解你的模式的可能性就越大。如果你的示例转录看起来好像就在音频文件之前,可能会特别有帮助。在这种情况下,可能意味着提到了我把隐形眼镜放在我的眼睛里。")

    4. 警惕不常见或奇怪的风格

    请注意,当提示很短时,Whisper可能不太可靠,可能无法准确捕捉到所需的风格。

    # 短提示可能不太可靠
    transcribe(up_first_filepath, prompt="总统拜登。")

    5. 风格不常见的提示

    如果你的提示要求Whisper采用不常见的风格,Whisper可能不太可靠。

    # 风格不常见的提示可能不太可靠
    transcribe(up_first_filepath, prompt="""嗨,欢迎来到节目。
    ###
    今天我们非常兴奋。
    ###
    让我们马上开始。
    ###""")

    通过以上方法,你可以根据需要引导Whisper模型,以获得更准确、一致和风格符合预期的音频转录结果。

    Whisper提示与GPT提示的比较

    需要注意的是,Whisper提示与GPT提示不同。如果你提交了一个类似于“在Markdown格式中格式化列表”的尝试性指令,Whisper模型不会执行这个指令,因为它会遵循提示的风格,而不是其中包含的任何指令。

    另外,提示的长度受到限制,只能包含224个标记。如果提示的长度超过224个标记,只有提示的最后224个标记将被考虑;之前的标记将被忽略。

    为了获得最佳结果,请精心制作可以表达你所需风格的示例。

    结论

    使用虚构的提示来优化OpenAI的Whisper音频转录是一个强大的工具,可以帮助你获得更准确、一致和风格符合预期的音频转录结果。无论你是在为广播节目制作转录、记录会议或进行研究,Whisper API都可以成为提高生产力的有力工具。

    现在,尝试使用虚构的提示来优化你的音频转录,看看它如何帮助你获得更好的结果!

  • 如何设置命令行参数和环境变量来优化stable diffusion webui

    如何设置命令行参数和环境变量来优化stable diffusion webui

    你是否曾经想过如何在使用stable diffusion WebUI 时进行自定义设置以优化性能?或者你可能只是想知道如何在不同的硬件配置下运行它?无论你的需求是什么,这篇文章将为你提供有关如何设置命令行参数和环境变量的详细信息,以使stable diffusion WebUI 在你的系统上运行得更加高效。

    简介

    stable diffusion WebUI 是一个功能强大的工具,用于生成图像和处理图像。然而,在不同的硬件和使用场景下,你可能需要对其进行一些自定义设置,以满足你的需求并提高性能。本文将介绍如何使用命令行参数和环境变量来配置stable diffusion WebUI ,以及一些常见的设置选项。

    命令行参数

    命令行参数是在运行stable diffusion WebUI 时可以指定的选项,它们可以用来配置不同的功能和行为。以下是一些常见的命令行参数以及它们的描述:

    配置文件路径

    • --config CONFIG:指定配置文件的路径,该文件用于构建模型。默认路径是configs/stable-diffusion/v1-inference.yaml。

    检查点路径

    • --ckpt CKPT:指定稳定扩散模型的检查点文件路径。如果提供了此选项,将加载指定的检查点。

    • --ckpt-dir CKPT_DIR:指定稳定扩散检查点文件所在的目录路径。这可以让你在多个检查点之间进行切换。

    硬件配置

    • --use-cpu {all, sd, interrogate, gfpgan, bsrgan, esrgan, scunet, codeformer}:选择在哪些模块中使用CPU作为计算设备。例如,--use-cpu all 将在所有模块中使用CPU。

    • --precision {full,autocast}:设置评估精度,可以选择完全精确或自动转换。自动转换可以提高性能。

    • --no-half:禁用模型切换到16位浮点数。

    性能优化

    • --medvram:启用稳定扩散模型的优化,以牺牲一些性能以获得低VRAM使用。

    • --lowvram:启用稳定扩散模型的优化,以牺牲速度以获得非常低的VRAM使用。

    • --opt-sdp-attention:启用缩放点积交叉注意层优化,需要PyTorch 2.*。

    更多选项

    • --allow-code:允许从WebUI执行自定义脚本,这可以用于自定义图像生成过程。

    • --share:使用此选项以在Gradio上运行WebUI,并通过共享链接访问。这在Colab等在线平台上非常有用。

    • --listen:使服务器监听网络连接,允许局域网上的计算机访问UI。

    这些只是一些常见的命令行参数选项,你可以根据你的需求进一步探索其他选项。

    环境变量

    除了命令行参数,你还可以使用环境变量来配置stable diffusion WebUI 。以下是一些常见的环境变量以及它们的描述:

    • PYTHON:设置自定义Python可执行文件的路径。

    • VENV_DIR:指定虚拟环境的路径。默认是venv。

    • CUDA_VISIBLE_DEVICES:选择在具有多个GPU的系统上要使用的GPU。例如,CUDA_VISIBLE_DEVICES=0将使用第一个GPU。

    • SD_WEBUI_LOG_LEVEL:设置日志的详细程度,支持Python内置日志模块支持的任何有效日志级别。

    • SD_WEBUI_CACHE_FILE:设置缓存文件的路径,用于存储一些临时数据。

    这些环境变量可以在启动stable diffusion WebUI 之前设置,以自定义其行为和性能。

    示例

    以下是一个示例,展示如何在启动stable diffusion WebUI 时使用命令行参数和环境变量来配置硬件和性能选项:

    # 使用CPU进行推理,启用性能优化
    python launch.py --use-cpu all --precision full --medvram
    
    # 使用特定的GPU进行推理
    export CUDA_VISIBLE_DEVICES=1
    python launch.py
    
    # 设置日志级别为DEBUG
    export SD_WEBUI_LOG_LEVEL=DEBUG
    python launch.py

    通过这些示例,你可以根据自己的需求自定义stable diffusion WebUI的配置。

    结论

    通过使用命令行参数和环境变量,你可以轻松地stable diffusion WebUI的配置,以满足你的需求并提高性能。无论你是在本地运行还是在云平台上使用,这些选项都可以帮助你更好地掌握stable diffusion WebUI 的功能。

    希望这篇文章对你有所帮助,让你更好地利用stable diffusion WebUI 的强大功能。

  • 如何优化Stable Diffusion WebUI以提高性能和内存利用率

    如何优化Stable Diffusion WebUI以提高性能和内存利用率

    在使用Stable Diffusion WebUI生成图像时,你可能会遇到性能不佳或内存占用过高的问题。本教程将介绍一些命令行参数和优化选项,以帮助你提高性能,同时降低内存使用。

    优化选项总览

    以下是一些可用的优化选项和它们的说明:

    命令行参数/优化选项 说明
    –opt-sdp-attention 在某些系统上可能提高速度,但需要更多VRAM。
    –opt-sdp-no-mem-attention 与上一个选项类似,但更可靠,性能稍差。
    –xformers 启用xFormers库,显著降低内存消耗和提高速度,仅支持Nvidia GPU。
    –force-enable-xformers 强制启用xFormers,不考虑系统支持情况,潜在不稳定。
    –opt-split-attention 交叉注意力层优化,显著减少内存使用,几乎没有性能损失。
    –disable-opt-split-attention 禁用上述优化。
    –opt-sub-quad-attention 子二次注意力,内存高效的交叉注意力层优化,可显著降低内存使用。
    –opt-split-attention-v1 使用较旧版本的交叉注意力优化,内存占用较低,但对生成较大图像有限制。
    –medvram 减少Stable Diffusion模型的VRAM使用,性能略有下降,适用于节省VRAM。
    –lowvram 更彻底的优化,分割unet模块以降低VRAM占用,性能显著下降,但节省内存。
    –do-not-batch-cond-uncond 禁止批处理正面和负面提示,节省内存,性能下降(仅1.6.0之前版本)。
    –always-batch-cond-uncond 禁用上述优化(仅1.6.0之前版本)。
    –opt-channelslast 更改Stable Diffusion的内存类型,效果未详细研究。
    –upcast-sampling 对通常需要--no-half参数的Nvidia和AMD卡启用,提高生成速度。

    优化性能与内存占用测试

    下表展示了不同优化选项在特定硬件和配置下的性能和内存占用情况。请注意,实际性能可能因硬件和配置而异。

    优化选项 内存占用(批量大小1/2/4/8/16) 初始迭代速度 峰值迭代速度 备注
    None 4.1 / 6.2 / OOM / OOM / OOM 4.2 4.6 性能较慢,容易内存不足
    v1 2.8 / 2.8 / 2.8 / 3.1 / 4.1 4.1 4.7 性能较慢,内存占用最低,不需要xFormers
    InvokeAI 3.1 / 4.2 / 6.3 / 6.6 / 7.0 5.5 6.6 与默认优化器几乎相同
    Doggetx (默认) 3.1 / 4.2 / 6.3 / 6.6 / 7.1 5.4 6.6 默认优化器
    Doggetx (medvram) 2.2 / 2.7 / 3.8 / 5.9 / 6.2 4.1 6.3 使用medvram预设可节省内存但性能尚可
    Doggetx (lowvram) 0.9 / 1.1 / 2.2 / 4.3 / 6.4 1.0 6.3 使用lowvram预设性能极低,但内存节省较多
    xFormers 2.8 / 2.8 / 2.8 / 3.1 / 4.1 6.5 7.5 性能快,内存占用低(需要启用xFormers)
    xFormers (channelslast) 2.9 / 2.9 / 2.9 / 3.6 / 4.1 6.4 7.6 使用cuda_alloc_conf和opt-channelslast

    请注意,性能在批量大小为1时约为峰值性能的70%左右,峰值性能通常在批量大小为8左右。性能在较大批量大小下可能会有所提高,但也可能因内存占用增加而下降。

    额外优化提示(Windows)

    • 禁用硬件GPU调度。
    • 禁用浏览器硬件加速。
    • 在Nvidia控制面板中,将电源配置更改为“最大性能”。

    结论

    通过选择合适的优化选项,你可以在Stable Diffusion WebUI中提高性能并降低内存占用。请根据你的硬件和需求进行测试和优化,以获得最佳结果。

    注意:本教程中的性能数据基于特定硬件和配置,实际结果可能会有所不同。请根据你的系统进行优化和测试。

  • 如何使用Stable Diffusion WebUI的API生成图像

    如何使用Stable Diffusion WebUI的API生成图像

    你是否曾想过如何利用Stable Diffusion WebUI的API来生成图像?在本教程中,我们将向你展示如何使用这个功能,以及如何在生成的图像中添加元数据。让我们开始吧!

    故事开端

    一天,你突然产生了一个创意,想要创建一堆有趣的狗狗图像。但是,手工绘制成百上千张图像太费时费力了。正巧,你听说了Stable Diffusion WebUI,它提供了一个强大的API,可以自动生成图像。于是,你决定探索如何使用它来实现你的创意。

    步骤1:设置环境

    首先,你需要确保已经成功安装和运行了Stable Diffusion WebUI。你可以按照官方文档中的适用于你的操作系统和硬件的指南进行安装。

    步骤2:了解API

    Stable Diffusion WebUI提供了一个API,可以让你通过发送HTTP请求来生成图像。首先,你需要在WebUI的启动命令中添加 --api 参数,以启用API。在你的启动脚本中,可以这样设置:

    set COMMANDLINE_ARGS=--api

    一旦API启用,你可以在浏览器中访问 http://127.0.0.1:7860/docs 来查看API文档。接下来,我们将关注其中的两个关键端点:/sdapi/v1/txt2img 和 /sdapi/v1/png-info。

    步骤3:构建API请求

    现在,让我们开始构建API请求。首先,你需要定义一个包含生成图像参数的JSON负载(payload)。以下是一个示例:

    payload = {
        "prompt": "可爱的小狗",
        "steps": 5
    }

    你可以根据需要在负载中添加更多参数,如果不设置,默认参数将被使用。

    步骤4:发送API请求

    接下来,你需要使用Python的requests库来发送API请求。以下是一个示例:

    import requests
    
    url = "http://127.0.0.1:7860"
    response = requests.post(url=f'{url}/sdapi/v1/txt2img', json=payload)

    确保URL与你的WebUI的URL匹配。一旦你执行了这段代码,WebUI将基于负载生成图像。但问题是,图像在哪里呢?

    步骤5:处理API响应

    一旦WebUI完成了其工作,API将响应存储在上面分配的变量response中。响应包含三个条目:"images"、"parameters" 和 "info"。我们需要找到一种方法来从这些条目中获取信息。

    首先,你可以使用以下代码将响应转换为易于处理的JSON格式:

    import json
    
    r = response.json()

    现在,让我们分析这三个条目:

    • "images" 包含生成的图像,但它是一个巨大的字符串,我们需要解码它。以下是解码的方法:
    from PIL import Image
    import io
    import base64
    
    for i in r['images']:
        image = Image.open(io.BytesIO(base64.b64decode(i.split(",", 1)[0])))

    现在,你已经有了一个可以处理的图像,可以使用image.save('output.png')来保存它。

    • "parameters" 显示发送给API的参数,这可能对你有用,但在这种情况下,我们更关心 "info"。

    • "info" 包含图像的元数据信息,你可以将其插入到图像中。为此,你需要将上面获取的图像发送到 /sdapi/v1/png-info 端点。以下是如何实现的:

    png_payload = {
        "image": "data:image/png;base64," + i
    }
    response2 = requests.post(url=f'{url}/sdapi/v1/png-info', json=png_payload)

    然后,你可以使用 response2.json().get("info") 获取信息。

    步骤6:完整示例

    以下是一个完整的示例代码,展示了如何使用Stable Diffusion WebUI的API生成图像并添加元数据:

    import requests
    import io
    import base64
    from PIL import Image
    
    url = "http://127.0.0.1:7860"
    
    payload = {
        "prompt": "可爱的小狗",
        "steps": 5
    }
    
    response = requests.post(url=f'{url}/sdapi/v1/txt2img', json=payload)
    
    r = response.json()
    
    for i in r['images']:
        image = Image.open(io.BytesIO(base64.b64decode(i.split(",", 1)[0])))
    
        png_payload = {
            "image": "data:image/png;base64," + i
        }
        response2 = requests.post(url=f'{url}/sdapi/v1/png-info', json=png_payload)
    
        pnginfo = PngImagePlugin.PngInfo()
        pnginfo.add_text("parameters", response2.json().get("info"))
        image.save('output.png', pnginfo=pnginfo)

    步骤7:更改WebUI设置

    有时,你可能希望更改WebUI的设置,例如CLIP跳过层级。你可以使用 /sdapi/v1/options 端点来实现这一点。以下是一个示例:

    option_payload = {
        "sd_model_checkpoint": "Anything-V3.0-pruned.ckpt [2700c435]",
        "CLIP_stop_at_last_layers": 2
    }
    
    response = requests.post(url=f'{url}/sdapi/v1/options', json=option_payload)

    这将使模型切换到你设置的模型,并将CLIP跳过层级设置为2。请注意,这与`

    “override_settings” 不同,因为这个更改将持续生效,而“override_settings”` 仅用于单个请求。

    结束语

    通过这个教程,你现在知道如何使用Stable Diffusion WebUI的API来生成图像,并且可以添加元数据。这为你提供了强大的图像生成工具,可以用于各种创意项目。祝你在探索世界各种有趣的图像生成任务时玩得开心!

  • 深度解析GPT:一窥AI大模型的崭新世界

    深度解析GPT:一窥AI大模型的崭新世界

    在当今科技领域,GPT(Generative Pre-trained Transformer)已经成为了一个备受关注的话题。它是一种生成型预训练变换模型,其中的ChatGPT作为一个智能聊天机器人,引发了广泛的讨论和研究。本文将深入探讨GPT的定义、技术原理、应用领域以及潜在影响。

    什么是GPT?

    GPT代表着“Generative Pre-trained Transformer”的缩写,让我们逐一解释这个名词:

    • Generative(生成的): GPT能够生成文本或回答问题,它的核心功能是生成自然语言文本。
    • Pre-trained(预训练的): 在你与GPT进行对话之前,它已经接受了大量的训练,这个训练在模型发布之前完成。
    • Transformer(变换器): 这是GPT的技术架构,基于深度学习模型,通过理解文本数据中的词与词之间的关系,使生成的文本更加合乎逻辑。

    总而言之,GPT是一个大型语言模型,其主要任务是理解并生成自然语言文本。

    语言模型的发展

    语言模型是一种数学模型,用于让计算机能够理解自然语言。它的发展历程可以概括如下:

    1. 统计语言模型: 最早的语言模型依赖于词频统计,它们通过分析文本数据中词语的频率来估计概率,被称为统计语言模型。

    2. 机器学习方法: 随着机器学习技术的发展,语言模型开始使用更复杂的机器学习方法,如神经网络,来估计文本中的概率。

    3. 深度学习与Transformer: 这一阶段的突破是Transformer模型的引入,它通过自注意力机制在处理文本时更好地捕捉上下文关系,进一步提高了语言模型的性能。

    GPT的重要性

    为什么我们需要GPT?GPT的出现是技术发展的自然延伸,它满足了当今社会对于自然语言处理和人工智能的多种需求。GPT在多个领域都有潜在的应用,包括但不限于:

    • 自然语言生成: GPT可以用于自动生成文章、新闻、故事等文本内容,减轻了内容创作者的工作负担。

    • 智能聊天机器人: ChatGPT能够实现自然而流畅的对话,为客户服务、提供咨询等领域提供了新的解决方案。

    • 自动翻译: GPT可以用于自动翻译文本,帮助人们消除语言障碍,促进跨文化交流。

    • 知识检索: GPT可以作为搜索引擎的一部分,根据用户的查询生成相关内容,提供更智能的搜索结果。

    • 教育领域: GPT可以用于辅助教育,为学生提供定制化的教育内容和答疑服务。

    GPT在不同行业的潜在影响

    智联招聘与北大国发院的研究报告指出,GPT和大模型技术已经在多个行业产生了影响。以下是一些行业受到影响的指数,根据智联招聘的数据:

    行业 受影响指数
    财务 高
    翻译 高
    银行 中
    医疗保健 中
    零售 低

    为什么这些行业会受到影响呢?在财务和翻译领域,GPT可以自动生成财务报表、合同、翻译文本等,从而减少了人力资源成本。而在银行和医疗保健领域,GPT可以用于自动化客户服务和病历记录,提高效率。零售行业虽然受影响较低,但仍可以利用GPT来改善客户体验和个性化推荐。

    结语

    GPT代表了人工智能领域的一次革命,它在多个领域具有广泛的应用潜力。然而,随着技术的进步,我们也需要面对一些挑战,如算力、数据量和技术沉淀等问题。无论如何,GPT已经改变了我们与计算机交流和处理文本信息的方式,为我们带来了更多可能性。

    通过深入了解GPT,我们可以更好地理解这一技术的本质和潜在影响,为未来的技术发展和应用提供更多思考和指导。

    编程小彩蛋: 如果你对GPT感兴趣,可以尝试使用GPT模型来生成创意文本或解决问题,这将是一次有趣的编程体验。

  • 基于2023年的顶级配置,打造AI和深度学习工作站

    基于2023年的顶级配置,打造AI和深度学习工作站

    在科技迅速发展的今天,AI及深度学习已经渗透到我们生活的方方面面。为了更好地迎合这个趋势,个人和企业都需要配备高效能的计算机硬件。今天,我们将带你一探2023年最佳的AI和深度学习工作站,帮助你找到最适合你预算的高效配置。

    7000元以内预算推荐

    Empowered PC Stratos
    • 处理器: Intel Core i5–10400F 六核处理器 (12MB缓存, 2.9GHz-4.3GHz) 65W
    • 内存: 16 GB SDRAM
    • 硬盘: 512 GB NVMe SSD
    • 显卡: NVIDIA GeForce RTX 3060 Ti 8GB
    • 计算力: 8.6
    • 操作系统: Windows 11 家庭版 64位
    • 其他特性: Wi-Fi, 蓝牙, ARGB高气流风扇
    • 配件: 有线LED背光USB游戏键盘和鼠标
    • 电源: 500W 金牌电源
    • 购买渠道: [淘宝, 京东等电商平台]
    MINISFORUM NUCX
    • 处理器: Intel I7 11800H (2.3GHz基频, 4.6GHz最大涡轮频率)
    • 内存: 32 GB DDR4
    • 硬盘: 512 GB NVMe SSD
    • 显卡: NVIDIA GeForce RTX 3070
    • 计算力: 8.6
    • 操作系统: Windows 11 专业版
    • 其他特性: Wi-Fi, 蓝牙
    • 接口: Thunderbolt 4 (支持8K@60Hz), HDMI (支持4k@60Hz), RJ45 2.5G, 3x USB 3.2 Type-A, SD卡槽x1, 3.5mm组合插孔x1
    • 购买渠道: [淘宝, 京东等电商平台]

    10500元预算档次

    Empowered PC ROG Strig Ak
    • 处理器: Intel Core i7–11700F
    • 内存: 64 GB DDR4 SDRAM
    • 硬盘: 1 TB NVMe SSD + 2 TB HDD
    • 显卡: NVIDIA GeForce RTX 4070 (8 GB GDDR6)
    • 计算力: 8.6
    • 操作系统: Windows 11 专业版
    • 连接性: Wi-Fi 6+, 蓝牙
    • 购买渠道: [淘宝, 京东等电商平台]

    14000元预算档次

    MSI Aegis RS
    • 处理器: Intel Core i7 13700KF
    • 内存: 64GB DDR4
    • 硬盘: 2 TB NVMe SSD
    • 显卡: NVIDIA GeForce RTX 4070 12GB GDDR6
    • 计算力: 8.9
    • 操作系统: Windows 11 家庭版
    • 连接性: Wi-Fi 6, 蓝牙
    • 购买渠道: [淘宝, 京东等电商平台]

    21000元预算档次

    Velztorm Praetix CTO
    • 处理器: Intel Core i9 13900KF (3.00GHz至5.8GHz)
    • 内存: 64GB DDR5
    • 硬盘: 1 TB NVMe SSD + 2 TB HDD
    • 显卡: NVIDIA GeForce RTX 4080 16GB
    • 计算力: 8.9
    • 操作系统: Windows 11 专业版
    • 连接性: 802.11 a/b/n/ac/ax WiFi, 蓝牙 5.2, 有线局域网 RJ 45
    • 电源: 1000w
    • 购买渠道: [淘宝, 京东等电商平台]
    豪华配置 – 不设预算限制!

    ####### CUK Continuum

    • 处理器: AMD 9 5950X (3.4GHz至4.9GHz)
    • 内存: 64 GB DDR4
    • 硬盘: 1 TB NVMe SSD + 3 TB HDD
    • 显卡: NVIDIA GeForce RTX 3090 24GB
    • 计算力: 7.5
    • 操作系统: Windows 11 家庭版
    • 连接性: WiFi 802.11ax, 千兆局域网 (Ethernet), 蓝牙
    • 电源: 750w
    • 购买渠道: [淘宝, 京东等电商平台]
    CUK Mantis
    • 处理器: AMD 9 5950X (3.4GHz至4.9GHz)
    • 内存: 64 GB DDR4
    • 硬盘: 1 TB NVMe SSD + 2 TB HDD
    • 显卡: NVIDIA GeForce RTX 3090 24GB
    • 计算力: 7.5
    • 操作系统: Windows 11 专业版

    • 连接性: WiFi 802.11ax, 千兆局域网 (Ethernet), 蓝牙
    • 电源: 750w
    • 购买渠道: [淘宝, 京东等电商平台]

    结论

    选购一款合适的AI工作站是一项挑战,但我们相信通过这份指南,你能更清晰地了解到目前市场上的一些最佳选择。投资一款强大的AI工作站能帮你加速项目进度和提升工作效率。

    希望这份指南能为你提供帮助,祝你购机顺利!

  • ChatGPT:一个开源的桌面聊天应用

    ChatGPT:一个开源的桌面聊天应用

    ChatGPT:一个开源的桌面聊天应用

    ChatGPT 是一个开源的桌面聊天应用,它可以在 Mac、Windows 和 Linux 上运行。这个应用的灵感来自于 OpenAI 的 ChatGPT,它为用户提供了一个方便的界面,让他们可以更轻松地与 ChatGPT 进行互动。本文将介绍 ChatGPT 应用的安装、功能和一些常见问题。

    安装 ChatGPT

    你可以通过以下步骤在不同平台上安装 ChatGPT:

    Windows

    • 下载链接:ChatGPT_1.1.0_windows_x86_64.msi
    • 使用 winget 安装(需要先安装 winget):

      # 安装最新版本
      winget install --id=lencx.ChatGPT -e
      
      # 安装指定版本
      winget install --id=lencx.ChatGPT -e --version 0.10.0

    Mac

    Linux

    开发者验证

    在 macOS 上,可能会遇到开发者未验证的提示。你可以参考以下链接解决此问题:Open a Mac app from an unidentified developer

    ChatGPT 功能概览

    ChatGPT 提供了许多有用的功能,包括:

    • 跨平台支持:可以在 macOS、Linux 和 Windows 上运行。
    • 导出 ChatGPT 聊天记录:支持导出为 PNG、PDF 格式,并生成分享链接。
    • 应用自动升级通知:始终保持应用最新。
    • 丰富的快捷键:提供了多种快捷操作方式。
    • 系统托盘悬浮窗:方便快速启动和访问 ChatGPT。
    • 应用菜单功能强大:包括主题切换、窗口置顶、隐藏 Dock 图标等。
    • 支持斜杠命令及其配置:可以自定义斜杠命令,用于快速输入特定内容。
    • 自定义全局快捷键:自定义应用的全局快捷键操作。
    • 划词搜索:支持选中文本后进行搜索操作。

    ChatGPT 使用指南

    ChatGPT 引入了一种称为斜杠命令的功能,它可以帮助你更快地与 ChatGPT 进行互动。以下是如何使用斜杠命令的简要说明:

    1. 在 ChatGPT 文本输入区域中,键入以斜杠 / 开头的字符。
    2. 出现指令提示后,按下空格键,它会默认将命令关联的文本填充到输入区域。
    3. 按下回车键即可执行命令。

    你可以从 awesome-chatgpt-prompts 找到有趣的功能来导入到 ChatGPT。也可以使用 “Sync Prompts” 功能,一键同步所有指令。

    ChatGPT 常见问题

    以下是一些关于 ChatGPT 的常见问题的解答:

    问题:无法打开 ChatGPT。

    如果升级应用后无法打开,请尝试清除配置,它位于此目录 ~/.chatgpt/*。

    问题:主窗口已经登录,但是系统托盘窗口显示未登录。

    你可以通过菜单项里的 “Restart ChatGPT” 重启应用来修复这个问题。

    问题:它是否安全?

    是的,ChatGPT 应用是安全的,它只是对 OpenAI ChatGPT 网站的包装,没有发起网络请求。你可以检查源代码以确保安全性。

    总结

    ChatGPT 是一个方便的桌面聊天应用,它为用户提供了与 ChatGPT 互动的简便方式。无论你是使用 macOS、Linux 还是 Windows,都可以轻松安装和使用 ChatGPT,享受与 ChatGPT 的有趣互动。

  • 如何避免ChatGPT 3.5在国内使用被封号?

    如何避免ChatGPT 3.5在国内使用被封号?

    在使用ChatGPT 3.5这款强大的生成式人工智能时,许多国内用户都担心封号的问题。虽然封号问题一直存在,但是你可以采取一些措施来降低被封号的风险。本文将介绍一些方法,帮助你更安全地使用ChatGPT 3.5,并避免账号被封的情况。


    1. 使用合法的注册信息:
    封号的一个主要原因是使用不合法的注册信息。在注册时,尽量使用合法的信息,如英国、欧洲或日本的手机号。避免使用+86开头的手机号,因为OpenAI并没有开放国内使用权限。

    2. 避免商用和二次开发:
    个人用户应遵守OpenAI的使用规定,不允许用于商业用途或二次开发。避免使用未经授权的、盗版的ChatGPT版本。大量频繁的API调用也容易引发封号。

    3. 模拟海外使用场景:
    要降低被封号的风险,可以尽可能模拟海外用户的使用场景:

    • 保持稳定的上网环境:如果你使用魔法环境,尽量使用固定的IP地址,或者至少保持相对稳定的区域设置,比如将魔法上网环境定位在海外地址。
    • 正常使用:避免频繁切换网络或频繁调用API。保持正常的使用模式。

    4. 使用谷歌账号授权登录:
    根据目前的情况,使用谷歌账号授权登录的方式可能降低被封号的概率。相对来说,outlook和hotmail等方式已经不太可行,国内的QQ邮箱或163邮箱更不建议使用。

    5. 使用稳定的中转服务器:
    如果需要在本地搭建API来使用ChatGPT,确保使用稳定的中转服务器,避免频繁切换访问网络来调用API。


    结论:
    封号问题在使用ChatGPT 3.5时确实存在,但你可以采取一些预防措施来降低被封号的风险。使用合法的注册信息,避免商用和二次开发,模拟海外使用场景,使用谷歌账号授权登录,以及使用稳定的中转服务器都是降低封号风险的有效方法。保持合规和谨慎使用将有助于你更长时间地享受ChatGPT 3.5的服务。

  • 开放AI Node API库:无缝接入OpenAI的利器

    开放AI Node API库:无缝接入OpenAI的利器

    如果你希望在TypeScript或JavaScript中方便地访问OpenAI的REST API,那么这个库为你提供了便捷的解决方案。它是基于我们的OpenAPI规范使用Stainless生成的。

    要学习如何使用OpenAI API,请查看我们的API参考文档和文档。

    安装

    npm install --save openai
    # 或者
    yarn add openai

    使用

    你可以在api.md文件中找到这个库的完整API。下面的代码演示了如何使用聊天完成API开始工作。

    import OpenAI from 'openai';
    
    const openai = new OpenAI({
      apiKey: '你的API密钥', // 默认为process.env["OPENAI_API_KEY"]
    });
    
    async function main() {
      const completion = await openai.chat.completions.create({
        messages: [{ role: 'user', content: '说这是一个测试' }],
        model: 'gpt-3.5-turbo',
      });
    
      console.log(completion.choices);
    }
    
    main();

    流式响应

    我们支持使用Server Sent Events (SSE) 进行流式响应。

    import OpenAI from 'openai';
    
    const openai = new OpenAI();
    
    async function main() {
      const stream = await openai.chat.completions.create({
        model: 'gpt-4',
        messages: [{ role: 'user', content: 'Say this is a test' }],
        stream: true,
      });
      for await (const part of stream) {
        process.stdout.write(part.choices[0]?.delta?.content || '');
      }
    }
    
    main();

    如果你需要取消流,你可以从循环中break,或者调用stream.controller.abort()。

    请求和响应类型

    这个库包含了所有请求参数和响应字段的TypeScript定义。你可以像下面这样导入并使用它们:

    import OpenAI from 'openai';
    
    const openai = new OpenAI({
      apiKey: '你的API密钥', // 默认为process.env["OPENAI_API_KEY"]
    });
    
    async function main() {
      const params: OpenAI.Chat.ChatCompletionCreateParams = {
        messages: [{ role: 'user', content: 'Say this is a test' }],
        model: 'gpt-3.5-turbo',
      };
      const completion: OpenAI.Chat.ChatCompletion = await openai.chat.completions.create(params);
    }
    
    main();

    每个方法、请求参数和响应字段的文档都可在文档字符串中找到,并将在大多数现代编辑器中悬停时显示。

    [!IMPORTANT]
    此SDK的先前版本使用了Configuration类。请参阅v3到v4的迁移指南。

    文件上传

    与文件上传对应的请求参数可以以多种不同的形式传递:

    • File(或具有相同结构的对象)
    • fetch Response(或具有相同结构的对象)
    • fs.ReadStream
    • 我们的toFile助手的返回值
    import fs from 'fs';
    import fetch from 'node-fetch';
    import OpenAI, { toFile } from 'openai';
    
    const openai = new OpenAI();
    
    // 如果你有Node `fs`,我们建议使用`fs.createReadStream()`:
    await openai.files.create({ file: fs.createReadStream('input.jsonl'), purpose: 'fine-tune' });
    
    // 或者,如果你有Web `File` API,你可以传递一个`File`实例:
    await openai.files.create({ file: new File(['my bytes'], 'input.jsonl'), purpose: 'fine-tune' });
    
    // 你也可以传递一个`fetch` `Response`:
    await openai.files.create({ file: await fetch('https://somesite/input.jsonl'), purpose: 'fine-tune' });
    
    // 最后,如果上述方法都不方便,你可以使用我们的`toFile`助手:
    await openai.files.create({
      file: await toFile(Buffer.from('my bytes'), 'input.jsonl'),
      purpose: 'fine-tune',
    });
    await openai.files.create({
      file: await toFile(new Uint8Array([0, 1, 2]), 'input.jsonl'),
      purpose: 'fine-tune',
    });

    处理错误

    当库无法连接到API,或者API返回非成功状态码(即4xx或5xx响应)时,将抛出APIError的子类:

    async function main() {
      const fineTune = await openai.fineTunes
        .create({ training_file: 'file-XGinujblHPwGLSztz8cPS8XY' })
        .catch((err) => {
          if (err instanceof OpenAI.APIError) {
            console.log(err.status); // 400
            console.log(err.name); // BadRequestError
    
            console.log
    
    (err.headers); // {server: 'nginx', ...}
          } else {
            throw err;
          }
        });
    }
    
    main();

    错误代码如下:

    状态码 错误类型
    400 BadRequestError
    401 AuthenticationError
    403 PermissionDeniedError
    404 NotFoundError
    422 UnprocessableEntityError
    429 RateLimitError
    大于等于500 InternalServerError
    N/A APIConnectionError

    Azure OpenAI

    关于如何在Azure OpenAI中使用这个库的示例可以在这里找到。

    请注意,在Azure OpenAI API和OpenAI API之间存在API形状和行为的细微差异,因此在Azure OpenAI中使用这个库可能会导致不正确的类型,可能会导致错误。

    请查看@azure/openai,这是Microsoft提供的一个Azure特定的SDK。

    重试

    默认情况下,某些错误将被自动重试2次,使用短暂的指数退避。默认情况下,将重试连接错误(例如,由于网络连接问题),409冲突,429速率限制以及>=500内部错误。

    你可以使用maxRetries选项来配置或禁用这个功能:

    // 配置所有请求的默认值:
    const openai = new OpenAI({
      maxRetries: 0, // 默认为2
    });
    
    // 或者,按请求配置:
    await openai.chat.completions.create({ messages: [{ role: 'user', content: 'How can I get the name of the current day in Node.js?' }], model: 'gpt-3.5-turbo' }, {
      maxRetries: 5,
    });

    超时

    默认情况下,请求会在10分钟后超时。你可以使用timeout选项来配置它:

    // 配置所有请求的默认值:
    const openai = new OpenAI({
      timeout: 20 * 1000, // 20秒(默认为10分钟)
    });
    
    // 重写每个请求:
    await openai.chat.completions.create({ messages: [{ role: 'user', content: 'How can I list all files in a directory using Python?' }], model: 'gpt-3.5-turbo' }, {
      timeout: 5 * 1000,
    });

    在超时时,会抛出APIConnectionTimeoutError。

    请注意,超时的请求将默认重试两次。

    自动分页

    OpenAI API中的列表方法是分页的。你可以使用for await … of语法来遍历所有页面中的项目:

    async function fetchAllFineTuningJobs(params) {
      const allFineTuningJobs = [];
      // 自动获取更多页面。
      for await (const job of openai.fineTuning.jobs.list({ limit: 20 })) {
        allFineTuningJobs.push(job);
      }
      return allFineTuningJobs;
    }

    或者,你可以一次只请求一页:

    let page = await openai.fineTuning.jobs.list({ limit: 20 });
    for (const job of page.data) {
      console.log(job);
    }
    
    // 提供用于手动分页的便捷方法:
    while (page.hasNextPage()) {
      page = page.getNextPage();
      // ...
    }

    高级用法

    访问原始响应数据(例如,标头)

    通过APIPromise类型上的.asResponse()方法,你可以访问由fetch()返回的“原始”Response。

    你也可以使用.withResponse()方法获取原始的Response以及解析后的数据。

    const openai = new OpenAI();
    
    const response = await openai.chat.completions
      .create({ messages: [{ role: 'user', content: 'Say this is a test' }], model: 'gpt-3.5-turbo' })
      .asResponse();
    console.log(response.headers.get('X-My-Header'));
    console.log(response.statusText); // 访问底层的Response对象
    
    const { data: completions, response: raw } = await openai.chat.completions
      .create({ messages: [{ role: 'user', content: 'Say this is a test' }], model: 'gpt-3.5-turbo' })
      .withResponse();
    console.log(raw.headers.get('X-My-Header'));
    console.log(completions.choices);

    配置HTTP(S)代理(例如,用于代理)

    默认情况下,这个库使用一个稳定的代理来处理所有http/https请求,以重用TCP连接,消除许多TCP和TLS握手,并从大多数请求中刮去大约100ms。

    如果你想禁用或自定义此行为,例如使用代理访问API,你可以传递一个用于所有请求的httpAgent,例如:

    import http from 'http';
    import HttpsProxyAgent from 'https-proxy-agent';
    
    // 配置所有请求的默认值:
    const openai = new OpenAI({
      httpAgent: new HttpsProxyAgent(process.env.PROXY_URL),
    });
    
    // 或者,按请求配置:
    await openai.models.list({
      baseURL: 'http://localhost:8080/test-api',
      httpAgent: new http.Agent({ keepAlive: false }),
    })

    语义版本

    这个包通常试图遵循SemVer约定,尽管某些不向后兼容的更改可能作为次要版本发布:

    1. 只影响静态类型的更改,不影响运行时行为。
    2. 影响库内部的更改,技术上是公共的,但不是为外部使用或记录的。 (如果你依赖这些内部变更,请在GitHub上提出问题告诉我们)。
    3. 我们不希望在实际上影响绝大多数用户的情况下进行的更改。

    我们认真对待向后兼容

    性,并努力确保你可以放心升级。

    我们渴望听到你的反馈,请在GitHub上打开一个问题,提出问题、错误或建议。

    要求

    支持TypeScript >= 4.5。

    以下运行时环境受支持:

    • Node.js 16 LTS或更高版本(非EOL版本)。
    • Deno v1.28.0或更高版本,使用import OpenAI from "npm:openai"。
      暂时不支持Deno Deploy。
    • Cloudflare Workers。
    • Vercel Edge Runtime。

    如果你对其他运行时环境感兴趣,请在GitHub上打开或投票提出问题。