Tag: AI

  • 如何使用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上打开或投票提出问题。

  • 探秘Whisper:开放AI的通用语音识别模型

    探秘Whisper:开放AI的通用语音识别模型

    在数字化时代,语音识别技术越来越受到重视。开放AI的Whisper模型是一种通用语音识别模型,它经过大规模的多样化音频数据训练,不仅可以执行多语言语音识别,还能进行语音翻译和语言识别等多项任务。

    探索Whisper的技术

    Whisper采用了Transformer序列到序列模型,它经过多项语音处理任务的训练,包括多语言语音识别、语音翻译、口语语言识别和语音活动检测。这些任务被联合表示为要由解码器预测的令牌序列,使得单一模型可以替代传统语音处理流程中的许多阶段。多任务训练格式使用一组特殊的令牌,这些令牌充当任务指示符或分类目标。

    设置与使用

    Whisper的训练和测试使用Python 3.9.9和PyTorch 1.10.1完成,但代码库预计与Python 3.8-3.11和较新的PyTorch版本兼容。代码库还依赖于一些Python包,最重要的是OpenAI的tiktoken,用于其快速的分词器实现。你可以使用以下命令下载和安装(或更新)Whisper的最新版本:

    pip install -U openai-whisper

    或者,以下命令将获取并安装此存储库的最新提交,以及其Python依赖项:

    pip install git+https://github.com/openai/whisper.git 

    要将包更新到此存储库的最新版本,请运行:

    pip install --upgrade --no-deps --force-reinstall git+https://github.com/openai/whisper.git

    此外,你需要安装命令行工具ffmpeg,这在大多数包管理器中都可以找到。

    # 在Ubuntu或Debian上
    sudo apt update && sudo apt install ffmpeg
    
    # 在Arch Linux上
    sudo pacman -S ffmpeg
    
    # 在MacOS上使用Homebrew(https://brew.sh/)
    brew install ffmpeg
    
    # 在Windows上使用Chocolatey(https://chocolatey.org/)
    choco install ffmpeg
    
    # 在Windows上使用Scoop(https://scoop.sh/)
    scoop install ffmpeg

    如果需要,你还需要安装rust,以便在tiktoken未为你的平台提供预构建的安装包时使用。如果在上述pip install命令期间看到安装错误,请按照Getting started页面的指导安装Rust开发环境。此外,你可能需要配置PATH环境变量,例如export PATH="$HOME/.cargo/bin:$PATH"。如果安装失败并出现No module named 'setuptools_rust'的错误,你需要安装setuptools_rust,例如通过运行:

    pip install setuptools-rust

    可用模型和语言

    Whisper提供五种模型大小,其中四种具有仅英语版本,提供速度和准确性的权衡。以下是可用模型的名称、近似内存需求和相对速度。

    大小 参数数量 仅英语模型 多语言模型 需要VRAM 相对速度
    微小 39 M tiny.en tiny ~1 GB ~32x
    基础 74 M base.en base ~1 GB ~16x
    小型 244 M small.en small ~2 GB ~6x
    中型 769 M medium.en medium ~5 GB ~2x
    大型 1550 M N/A large ~10 GB 1x

    对于仅用于英语应用的.en模型,特别是对于tiny.en和base.en模型,性能更好。我们观察到,对于small.en和medium.en模型,差异变得不那么显著。

    Whisper的性能因语言而异。下图显示了Fleurs数据集在large-v2模型下的语言单词错误率(WER)分布(数字越小,性能越好)。有关其他模型和数据集对应的WER分数,可以在附录D.1、D.2和D.4中找到。此外,更多的BLEU(双语评估助手)分数可以在附录D.3中找到。这些都可以在论文中找到。

    命令行使用

    以下命令将转录音频文件的语音,使用medium模型:

    whisper audio.flac audio.mp3 audio.wav --model medium

    默认设置(选择small模型)在英语转录方面表现良好。如果要转录包含非英语语音的音频文件,可以使用--language选项指定语言:

    whisper japanese.wav --
    
    language Japanese

    添加--task translate将把语音翻译成英语:

    whisper japanese.wav --language Japanese --task translate

    运行以下命令查看所有可用选项:

    whisper --help

    请查看tokenzier.py以获取所有可用语言的列表。

    Python使用

    在Python中也可以进行转录:

    import whisper
    
    model = whisper.load_model("base")
    result = model.transcribe("audio.mp3")
    print(result["text"])

    在内部,transcribe()方法会读取整个文件并使用30秒滑动窗口处理音频,对每个窗口执行自回归序列到序列的预测。

    以下是whisper.detect_language()和whisper.decode()的示例用法,它们提供更低级别的访问模型的方法。

    import whisper
    
    model = whisper.load_model("base")
    
    # 加载音频并填充/修整以适应30秒
    audio = whisper.load_audio("audio.mp3")
    audio = whisper.pad_or_trim(audio)
    
    # 制作对数梅尔频谱图并将其移到与模型相同的设备上
    mel = whisper.log_mel_spectrogram(audio).to(model.device)
    
    # 检测口音
    _, probs = model.detect_language(mel)
    print(f"Detected language: {max(probs, key=probs.get)}")
    
    # 解码音频
    options = whisper.DecodingOptions()
    result = whisper.decode(model, mel, options)
    
    # 打印识别文本
    print(result.text)

    更多示例

    请使用? Show and tell类别在讨论中分享更多Whisper的示例用法和第三方扩展,例如网络演示、与其他工具的集成、不同平台的端口等。

    许可协议

    Whisper的代码和模型权重在MIT许可下发布。详细信息请参阅LICENSE。

    关键词:

  • 如何充分利用大型语言模型

    如何充分利用大型语言模型

    如何充分利用大型语言模型

    大型语言模型的工作原理

    大型语言模型是将文本映射到文本的函数。给定一个文本输入字符串,大型语言模型会预测接下来应该出现的文本。

    大型语言模型的魔力在于,通过在大量文本上进行训练以最小化预测误差,这些模型最终学会了对这些预测有用的概念。例如,它们学会了:

    • 如何拼写
    • 语法如何工作
    • 如何改写
    • 如何回答问题
    • 如何进行对话
    • 如何用多种语言写作
    • 如何编写代码
    • 等等

    所有这些功能都不是明确编程的,它们都是在训练过程中产生的结果。

    GPT-3支持数百种软件产品,包括生产力应用程序、教育应用程序、游戏等等。

    如何控制大型语言模型

    在所有输入中,对大型语言模型影响最大的是文本提示。

    大型语言模型可以通过以下几种方式进行提示以生成输出:

    • 指令: 告诉模型你想要什么
    • 完成: 引导模型完成你想要的文本的开头
    • 演示: 向模型展示你想要的内容,可以是提示中的一些示例,也可以是精细调整训练数据集中的成百上千个示例

    下面分别展示了每种方式的示例。

    指令提示

    遵循指令的模型(例如text-davinci-003或以text-开头的任何模型)专门设计用于遵循指令。在提示的顶部(或底部,或两者兼有)编写你的指令,模型将尽力遵循指令,然后停止。指令可以很详细,所以不要害怕写一段明确详细的输出要求。

    例如指令提示:

    提取下面引用中的作者姓名。
    
    “有些人理论认为,智能种族在扩展到外太空之前就会灭绝。如果他们正确,那么夜空的寂静就是坟墓的寂静。”
    ― Ted Chiang, 《呼吸》

    输出:

    Ted Chiang

    完成提示示例

    完成式提示利用了大型语言模型试图编写它认为最有可能出现的文本的方式。为了引导模型,尝试开始一个模式或句子,这个模式或句子将由你想要看到的输出来完成。与直接指令相比,这种方式需要更多的关心和实验。此外,模型不一定知道何时停止,因此通常需要停止序列或后处理来截断生成的文本,以确保输出符合预期。

    例如完成提示:

    “有些人理论认为,智能种族在扩展到外太空之前就会灭绝。如果他们正确,那么夜空的寂静就是坟墓的寂静。”
    ― Ted Chiang, 《呼吸》
    
    这句话的作者是

    输出:

     Ted Chiang

    演示提示示例(少样本学习)

    与完成式提示类似,演示可以向模型展示你想要它做什么。这种方法有时被称为少样本学习,因为模型从提示中提供的少数示例中学习。

    例如演示提示:

    引用:
    “当理性思维一次又一次地被迫面对不可能时,它别无选择,只能适应。”
    ― N.K. Jemisin, 《第五季》
    作者: N.K. Jemisin
    
    引用:
    “有些人理论认为,智能种族在扩展到外太空之前就会灭绝。如果他们正确,那么夜空的寂静就是坟墓的寂静。”
    ― Ted Chiang, 《呼吸》
    作者:

    输出:

     Ted Chiang

    细调提示示例

    通过足够多的训练示例,你可以对自定义模型进行细调。在这种情况下,指令变得不必要,因为模型可以从提供的训练数据中学习任务。但是,包含分隔符序列(例如->或###或任何不常出现在输入中的字符串)可以帮助告诉模型提示何时结束以及输出何时开始。如果没有分隔符序列,模型有可能继续详细阐述输入文本,而不是开始生成你想要看到的答案。

    例如,细调提示示例(用于已在类似提示完成对中进行自定义训练的模型):

    “有些人理论认为,智能种族在扩展到外太空之前就会灭绝。如果他们正确,那么夜空的寂静就是坟墓的寂静。”
    ― Ted Chiang, 《呼吸》
    
    ###

    输出:

     Ted Chiang

    代码能力

    大型语言模型不仅在文本方面表现出色,还在代码方面表现出色。OpenAI的专用代码模型称为[Codex](https

    ://openai.com/blog/openai-codex)。

    Codex支持超过70个产品,包括:

    • GitHub Copilot(在VS Code和其他IDE中自动完成代码)
    • Pygma(将Figma设计转化为代码)
    • Replit(具有“解释代码”按钮等功能)
    • Warp(带有AI命令搜索的智能终端)
    • Machinet(编写Java单元测试模板)

    请注意,与遵循指令的文本模型(例如text-davinci-002)不同,Codex没有经过训练以遵循指令。因此,设计良好的提示需要更多的关注。

    更多提示建议

    有关更多提示示例,请访问OpenAI Examples。

    总的来说,输入提示是改进模型输出的最佳杠杆。你可以尝试一些技巧,如:

    • 提供更明确的指令。 例如,如果你希望输出是逗号分隔的列表,可以要求它返回逗号分隔的列表。如果你希望它在不知道答案时说“我不知道”,可以告诉它’如果你不知道答案,请说“我不知道”。’
    • 提供更好的示例。 如果你在提示中展示示例,请确保你的示例多样且高质量。
    • 要求模型像专家一样回答。 明确要求模型产生高质量的输出,或者产生像专家写的输出一样的输出,可以诱使模型提供更高质量的答案,因为模型认为专家会写的答案。例如,“以下答案是正确的、高质量的,由专家撰写。”
    • 提示模型写下解释其推理的一系列步骤。 例如,在最终答案之前,以“让我们一步一步地思考”之类的方式引导模型给出其推理的解释。提示模型在最终答案之前解释其推理的步骤可以增加最终答案一致且正确的可能性。
  • 开启OpenAI的力量:全面指南

    开启OpenAI的力量:全面指南

    OpenAI正在用其先进的技术和强大的API彻底改变人工智能的世界。在这份全面指南中,我们将探索OpenAI的令人难以置信的潜力,以及如何利用其能力来增强你的项目和应用。无论你是开发者、研究员,还是只是对人工智能感兴趣,这份指南都将为你提供有关OpenAI的提供和资源的宝贵见解。

    开始使用OpenAI

    在我们深入探讨OpenAI的精彩世界之前,让我们确保你拥有必要的工具来开始。你需要一个OpenAI账户和一个API密钥,你可以通过创建一个免费账户来轻松获取。一旦你获得了API密钥,你就可以解锁OpenAI的可能性。

    最近的更新和亮点 ? ✨

    随时关注OpenAI的最新发展和增强功能:

    探索OpenAI的能力

    OpenAI提供了广泛的工具和资源,以下是一些要探索的关键领域:

    API使用

    处理速率限制

    在使用OpenAI API时,管理速率限制至关重要。了解如何有效地处理速率限制并优化你的API使用,参考我们的指南:如何处理速率限制。

    GPT模型

    格式化输入到ChatGPT模型

    发现将输入格式化为ChatGPT模型的最佳实践,以获得最准确和相关的响应:如何格式化输入到ChatGPT模型。

    嵌入

    文本比较示例

    了解如何使用嵌入进行文本比较,以及它的应用领域:文本比较示例。

    DALL-E

    生成和编辑图像

    探索如何使用DALL·E生成和编辑图像的方法:如何生成和编辑DALL·E图像。

    Whisper

    Whisper提示指南

    深入了解如何使用Whisper进行提示以生成文本:Whisper提示指南。

    相关OpenAI资源

    除了这里的代码示例,你还可以从以下资源中了解有关OpenAI API的信息:

    相关网络资源

    人们正在编写出色的工具和论文来改善GPT的输出。以下是一些我们看到的很棒的工具:

    提示库和工具

    • Guidance:来自Microsoft的一个便捷的Python库,使用Handlebars模板来交错生成、提示和逻辑控制。
    • LangChain:一个流行的Python/JavaScript库,用于链接语言模型提示的序列。
    • FLAML(自动化机器学习和调整的快速库):用于自动选择模型、超参数和其他可调参数的Python库。
    • Chainlit:用于创建聊天机器人界面的Python库。
    • Guardrails.ai:用于验证输出并重新尝试故障的Python库。仍处于alpha阶段,因此请预期存在问题和错误。
    • Semantic Kernel:来自Microsoft的一款支持提示模板、函数链接、矢量化存储和智能规划的Python/C#库。
    • Prompttools:用于测试和评估模型、矢量数据库和提示的开源Python工具。
    • Outlines:提供领域特定语言以简化提示和限制生成的Python库。
    • Promptify:一个用于使用语言模型执行NLP任务的小型Python库。
    • Scale Spellbook:一个用于构建、

    比较和发布语言模型应用程序的付费产品。

    • PromptPerfect:一个用于测试和改进提示的付费产品。
    • Weights & Biases:一个用于跟踪模型训练和提示工程实验的付费产品。
    • OpenAI Evals:用于评估语言模型和提示任务性能的开源库。
    • LlamaIndex:用于通过数据增强LLM应用的Python库。
    • Arthur Shield:一个用于检测毒性、幻觉、提示注入等的付费产品。
    • LMQL:用于LLM交互的编程语言,支持类型提示、控制流、约束和工具。

    提示指南

    视频课程

    提高推理能力的高级提示的论文

    尝试任务,可以提高随后的性能。

    贡献

    如果有你希望看到的示例或指南,请随时在问题页面上提出建议。我们也很高兴接受高质量的拉取请求,只要它们符合仓库的范围。

  • 打造强大的红色警戒2 AI玩家:Python训练教程

    打造强大的红色警戒2 AI玩家:Python训练教程

    在这个激动人心的教程中,你将学会如何使用Python来训练一个强大的人工智能(AI)玩家,使其能够在《红色警戒2》(Red Alert 2)这款经典游戏中与你一较高下。不再面对单调的游戏模式,让我们来创建一个智能的对手吧!

    准备工作

    在开始之前,你需要准备以下工作:

    1. 安装Python和所需的库: 如果你尚未安装Python,你可以从Python官方网站下载并安装最新版本。另外,我们将使用TensorFlow来构建深度学习模型,你可以使用以下命令来安装:

      pip install tensorflow
    2. 下载并安装红警2: 你需要购买并安装《红色警戒2》游戏,以便我们的AI玩家能够与游戏互动。

    3. 了解游戏规则: 在开始训练之前,确保你对《红色警戒2》游戏的基本规则和战略有一定的了解,这将有助于你为AI定义游戏策略。

    第一步:导入必要的库

    首先,让我们导入一些必要的Python库,以便我们能够构建AI玩家所需的模型和工具。

    import tensorflow as tf
    from tensorflow import keras
    import numpy as np
    import random

    第二步:收集游戏数据

    在开始训练之前,你需要收集游戏数据,包括游戏状态、动作和奖励。你可以创建一个Python脚本来模拟游戏,并在游戏中收集这些数据。以下是一个示例:

    # 模拟游戏状态
    game_state = ...
    
    # 选择一个随机动作
    action = random.choice(["build_unit", "attack_enemy", "move_unit"])
    
    # 计算奖励
    reward = ...

    第三步:构建深度强化学习模型

    现在,让我们构建一个深度强化学习模型,以便AI可以根据游戏状态选择最佳的动作。我们将使用TensorFlow来创建模型。

    model = keras.Sequential([
        keras.layers.Dense(64, activation='relu', input_shape=(game_state_size,)),
        keras.layers.Dense(32, activation='relu'),
        keras.layers.Dense(action_space_size, activation='linear')
    ])

    第四步:训练AI模型

    使用收集的游戏数据,你可以开始训练AI模型。在这一步中,你将定义训练过程、损失函数和优化器,并让AI模型逐渐学习游戏策略。

    model.compile(optimizer='adam', loss='mse')
    
    # 训练模型
    model.fit(game_states, q_values, epochs=1000)

    第五步:测试你的AI玩家

    一旦你的AI模型训练完成,你可以测试它在《红色警戒2》游戏中的表现。启动游戏并让AI玩家代替你进行游戏,观察它的表现和决策是否合理。

    第六步:优化和改进

    AI玩家的性能可能需要不断优化和改进。你可以尝试不同的模型架构、调整超参数或增加更多的训练数据来提高AI的表现。

    结论

    通过这个教程,你学会了如何使用Python和深度学习来训练一个智能的《红色警戒2》AI玩家。让你的游戏体验更具挑战性和乐趣,不再与AI玩家为敌,而是一同探索游戏的乐趣吧!

    希望你能够享受这个项目,并不断改进你的AI玩家。祝你在《红色警戒2》中获得胜利!

    参考资料