文章
· 四月 9 阅读大约需 7 分钟

Open AI 与 IRIS 集成 - 文件管理

 

人工智能不仅限于通过带有说明的文本生成图像,或通过简单的指示创建叙事。
您还可以制作图片的变体,或为已有图片添加特殊背景。
此外,您还可以获得音频转录,无论其语言和说话者的语速如何。
让我们来分析一下文件管理是如何工作的。

问题描述

在分析 OpenAI 有关需要将文件作为输入值的方法的信息时,必须使用 multipart/form-data 提供参数。

在 IRIS 中,我们知道如何使用 JSON 内容创建对 POST 方法的调用。但在这种情况下,使用带有 Base64 格式文件内容的参数并不实用。

要在多址/表单数据(multipart/form-data)中包含文件内容,必须使用%Net.MIMEPart.类。

要在我们的调用中包含文件,应创建一个与类对象 %Net.MIMEPart 相关联的 Content-Disposition 标头

set content = ##class(%Net.MIMEPart).%New()
set contentDisposition = "form-data; name="_$CHAR(34)_"image"_$CHAR(34)
set contentDisposition = contentDisposition_"; filename="_$CHAR(34)_fileName_$CHAR(34)
do content.SetHeader("Content-Disposition",contentDisposition)

由于我们使用请求类来保留进程的值,因此我们必须将 Base64 内容转换为流,以构成内容的主体。

我们可以使用StreamUtils实用程序将 Base64 转换为流。

注意:"pImage"变量包含文件内容的 Base64 字符串。

Do ##class(HS.Util.StreamUtils).Base64Encode(pImage, .tStream)
Set content.Body = tStream

不过,在 2023 年全球峰会上,我有幸从 InterSystems 专家那里学到了一个更好的技巧。他告诉我,这种执行方法比 StreamUtils 更有效,因为 StreamUtils 最后会循环读取字符串并记录到 Stream 中。
这个解决方案就像使用 JSON 并将其转换为 Stream 的 Get 一样简单。

set contentfile = {}
set contentfile.file = pImage
set content.Body = contentfile.%Get("file",,"stream<base64")

在调用中包含了所需的所有参数后,我们就可以创建一个新的 MIMEPart 类来封装部件了。

Set rootMIME = ##class(%Net.MIMEPart).%New()
do rootMIME.Parts.Insert(content)
set writer = ##class(%Net.MIMEWriter).%New()
set tSC = writer.OutputToStream(tHttpRequest.EntityBody)
set tSC = writer.WriteMIMEBody(rootMIME)
Set tContentType = "multipart/form-data; boundary="_rootMIME.Boundary
set tSC = ..Adapter.SendFormDataArray(.tHttpResponse, "POST", tHttpRequest,,,url)

这就是我们如何将文件内容发送到我们在 OpenAI 中需要的方法。

Image files图像文件

图像方法允许您发送图片并进行变化。由于所有插图都必须是 PNG 格式,因此当我们以 Base64 格式指明文件内容时,文件名会随机生成,并带有 PNG 扩展名。
下面是一个如何更改照片的示例。

Original Variation

正如你所看到的,程序以自己的方式解释指令。
它认为公司的标志是一个圆圈,所以用另一个圆圈代替了它。它还发现办公室有一扇玻璃门,于是用另一扇玻璃门代替,但暂时用砖墙代替。
此外,它还修改了衬衫的颜色,并改变了男子手臂的位置。
此外,OpenIA 还允许您通过提供一个蒙版来编辑图像,蒙版上有您想要插入提示内容的区域。
利用同一幅图像,我应用了一个去掉图像背景的蒙版。

Original Mask

当我要求它把我传送到牙买加海滩时,得到了如下结果:

现在,下次见到亲朋好友时,您就可以炫耀自己的假期了 😊

Image图像

Endpoint: POST https://api.openai.com/v1/images/variations

它允许你对已有的图像进行修改。由于它不需要提示您要如何修改,因此我们必须相信人工智能的品味,它会如何解释这张图片。此外,我们还可以定义大小和返回结果的方式,无论是通过链接还是 Base64 格式的内容。

输入参数如下:

  • image: 必选
  • 在这里,您要提及要转换的图像文件。
  • n: 可选. 默认为 1
  • 在此区域,您可以决定生成图像的最大数量。(使用 1 到 10 之间的数字)。
  • size: 可选. 默认 1024x1024
  • 定义图像大小,其数值必需为 “256x256”, “512x512”, 或者 “1024x1024”.
  • response_format: 可选.默认是“url”
  • 这个参数是关于您希望如何返回生成图像的格式。此处的值应为 "url "或 "b64_json"。

Endpoint: POST https://api.openai.com/v1/images/edits

它可以让你修改现有的图片,根据掩码文件,按照提示创建图片。此外,我们还可以指定尺寸和返回结果的方式,无论是通过链接还是 Base64 格式的内容。
输入参数如下:

  • image: 必选
  • 如上.
  • mask: 必选
  • 这部分是关于所应用的蒙版图像文件.
  • n: 可选,默认 1
  • 如上
  • size: 可选,默认 1024x1024
  • 如上
  • response_format: 可选. 默认是 “url”
  • 如上

Audio files声音文件

OpenAI 管理的不仅仅是图像。我们还可以使用音频文件来获取所提供录音的转录或翻译。
这种方法使用 Whisper 模型,可以区分专有名词、品牌和俚语,从而提供正确的转录和翻译。例如,将 "微型机器 "作为一个品牌来谈论,与将 "微型机器 "作为一个普通名词翻译成西班牙语是不一样的。
下面的例子是对 80 年代一个著名广告插播的转录:

https://www.youtube.com/embed/zLP6oT3uqV8
[这是一个嵌入式链接,但由于您拒绝了访问嵌入式内容所需的 Cookie,您无法直接在网站上进行查看。要查看嵌入式内容,您需要在 Cookie 设置中接受所有 Cookie。]

因此,指示 Whisper 为我们转录音频的结果如下:

{
    "text": "This is the Micromachine Man presenting the most midget miniature motorcade of micromachines. 
Each one has dramatic details, terrific trim, precision paint jobs, plus incredible micromachine pocket playsets. 
There's a police station, fire station, restaurant, service station, and more. Perfect pocket portables to take anyplace. 
And there are many miniature playsets to play with and each one comes with its own special edition micromachine vehicle and 
fun fantastic features that miraculously move. Raise the boat lift at the airport, marina, man the gun turret at 
the army base, clean your car at the car wash, raise the toll bridge. And these playsets fit together to form a micromachine world.
Micromachine pocket playsets, so tremendously tiny, so perfectly precise, so dazzlingly detailed, you'll want to pocket them all.
Micromachines and micromachine pocket playsets sold separately from Galoob. The smaller they are, the better they are."
}

多么神奇! 你觉得呢?

之所以能取得上述成果,是因为 Whisper 模型接受了训练。我们可以从 OpenAI 页面提供的下图中看到一些相关信息。

 

更多信息可以访问 https://openai.com/research/whisper

请记住,告知程序文件名至关重要,因为服务需要知道它正在处理的文件类型(如 WAV、MP3、OGG 等)。
由于我们在调用中只包含 Base64 内容,因此还必须指明文件扩展名,以便用随机文本和建议的扩展名创建文件名。
例如,St.OpenAi.Msg.Audio.AudioRequest 消息的 "类型 "属性可显示音频的种类: MP3、OGG、WAV、FLAC 等。

Endpoint: https://api.openai.com/v1/audio/transcriptions

通过这种方法,您可以将音频内容转录为有声语言。

输入参数如下:

  • file: 必要
  • 在这里,您可以指定要转录的音频文件(而不是文件名)。它支持以下格式: FLAC、MP3、MP4、MPEG、MPGA、M4A、OGG、WAV 或 WEBM
  • model: 必要
  • 用于转录的模型。目前只有 "whisper-1 "可用
  • language: 可选. 默认是音频语言.
  • 如果指定的话,根据 ISO-639-1,可以提高准确率和延时.
  • prompt: 可选.
  • 这是一段可选的文字,用于引导模型的风格或延续上一段音频。此处的信息必须与音频语言一致。.
  • response_format. 可选,默认为 “json”.
  • 在这一部分中,您要明确转录输出的格式。请使用以下选项之一: "json"、"text"、"verbose_json"。
  • temperature: 可选,默认为 0.
  • 采样温度应介于 0 和 1 之间。 0.8 等较高值会使输出更加随机,而 0.2 等较低值则会使输出更加集中和确定。如果设置为 0,模型将使用对数似然自动提高温度,直到达到特定阈值。

本方法的文档请参考 https://platform.openai.com/docs/api-reference/audio/createTranscription<.

Endpoint: https://api.openai.com/v1/audio/translations

此方法可将音频内容翻译成英语。
输入参数如下:

  • file: 必要
  • 它是您要翻译的音频文件(而不是文件名)。它支持以下格式: FLAC、MP3、MP4、MPEG、MPGA、M4A、OGG、WAV 或 WEBM
  • model: 必要.
  • 如上.
  • prompt: 可选l.
  • 这是一段可选的文字,用于引导模型的风格或延续上一段音频。此处的信息必须使用英语。
  • response_format. 可选. 默认是 “json”.
  • 在这里,您可以用以下选项之一决定转录输出的格式: "json"、"text"、"verbose_json"。
  • temperature: 可选. 默认为 0.
  • 如上

更多文档请查阅 https://platform.openai.com/docs/api-reference/audio/createTranscription.

下一步?

由于 OpenAi 在不断发展,下一次迭代将是将文本转换为音频的方法,以及其他一些新功能。
如果您喜欢这篇文章,请记得点个 "赞"。

讨论 (0)1
登录或注册以继续