ChatGPT-openAI 生成文本、图片

OPEANAI

关键概念

  • 文本生成模型
  • Assistantst 助手
  • Embeddings (嵌入)
  • Tokens

1文本生成模型

OpenAI的文本生成模型(通常被称为生成预训练转换器或简称“GPT”模型),如GPT-4和GPT-3.5,已经被训练以理解自然和形式语言。
像GPT-4这样的模型允许文本输出来响应它们的输入。
这些模型的输入也被称为“提示”。设计提示符本质上是如何“编程”像GPT-4这样的模型,通常是通过提供如何成功完成任务的说明或一些示例。像GPT-4这样的模型可以用于各种各样的任务,包括内容或代码生成、摘要、对话、创意写作等等。

2.助手

助手指的是实体,在OpenAI API的情况下,这些实体由大型语言模型(如GPT-4)提供支持,能够为用户执行任务。
这些助手基于嵌入在模型上下文窗口中的指令进行操作。他们通常还可以使用工具,让助手执行更复杂的任务,如运行代码或从文件中检索信息。

3 嵌入

嵌入是一段数据(例如一些文本)的矢量表示,旨在保留其内容和/或其含义的各个方面。在某些方面相似的数据块往往比不相关的数据具有更紧密的嵌入。OpenAI提供文本嵌入模型,将文本字符串作为输入,并产生嵌入向量作为输出。嵌入在搜索、聚类、推荐、异常检测、分类等方面都很有用。在我们的嵌入指南中阅读更多关于嵌入的信息。助手API允许您在自己的应用程序中构建AI助手。Assistant有指令,可以利用模型、工具和知识来响应用户查询。助手API目前支持三种类型的工具:代码解释器、检索和函数调用。

4 token

文本生成和嵌入模型处理称为Token的文本块。记号表示常见的字符序列。例如,字符串“tokenization”被分解为“token”和“ization”,而像“the”这样的短而常见的单词则被表示为单个token。请注意,在句子中,每个单词的第一个标记通常以空格字符开头。查看我们的标记器工具来测试特定的字符串,看看它们是如何被转换成标记的。作为一个粗略的经验法则,对于英语文本,1个标记大约是4个字符或0.75个单词。

需要记住的一个限制是,对于文本生成模型,提示符和生成的输出之和不能超过模型的最大上下文长度。对于嵌入模型(不输出token),输入必须短于模型的最大上下文长度。每个文本生成和嵌入模型的最大上下文长度可以在模型索引中找到。

GPT

generative pre-trained transformers

ChatGPT为openAI 的模型提供了一个聊天界面和一系列内置功能,如集成浏览、代码执行、插件等等。

设置API keys

设置环境变量

vim ~/.bash_profile
export OPENAI_API_KEY=刚才设置的key
source ~/.bash_profile
用 echo $OPENAI_API_KEY 显示出来则表示配置成功

请求openAI

1 小试牛刀

curl https://api.openai.com/v1/chat/completions   -H "Content-Type: application/json"   -H "Authorization: Bearer $OPENAI_API_KEY"   -d '{
    "model": "gpt-3.5-turbo",
    "messages": [
      {
        "role": "system",
        "content": "You are a poetic assistant, skilled in explaining complex programming concepts with creative flair."
      },
      {
        "role": "user",
        "content": "Compose a poem that explains the concept of recursion in programming."
      }
    ]
  }'

返回:

{"model":"gpt-3.5-turbo-0125","object":"chat.completion","usage":{"prompt_tokens":39,"completion_tokens":159,"total_tokens":198},"id":"chatcmpl-95PoUmKllYJkz4IbnUuAq6wjwSfg7","created":1711077894,"choices":[{"index":0,"delta":null,"message":{"role":"assistant","content":"In the realm of code, a concept lies, sublime,\nA recursion, a loop of a different kind,\nLike a mirror reflecting its own design,\nA function calls itself, a loop refined.\n\nA base case ensures the cycle's end,\nWithout it, forever the function will bend,\nThrough layers of calls, the solution extends,\nEach step closer to where the answer attends.\n\nAs the function unwinds, the values accrue,\nEach call processing, the task it must do,\nTill the base case is met, the cycle is through,\nRecursion, a dance, elegant and true.\n\nIn the world of code, a concept so fine,\nRecursion weaves patterns, a complex design,\nA loop that mirrors, a loop that defines,\nAn infinite loop, in a finite line."},"finish_reason":"stop"}]}

诗文大意:

在代码的领域中,有一个概念存在,崇高而卓越,是一种递归,一种不同类型的循环,就像一面镜子反射着自身的设计,一个函数调用自身,一个循环被完善。
基本情况确保了循环的结束,没有它,函数将永远弯曲,通过层层调用,解决方案扩展,每一步都更接近答案所在的地方。
当函数展开时,值累积,每个调用都在处理必须完成的任务,直到满足基本情况,循环结束,递归,一种优雅而真实的舞蹈。
在代码的世界中,有一个如此精妙的概念,递归编织着模式,一个复杂的设计,一个反映、定义的循环,一个无限循环,在有限的线路上。

tips:
如果不能访问外网:请使用 国内的平台 https://aiproxy.io/ 然后使用自己的key,注意要至少充值一个月 30块rmb

请求的时候把api.openai.com 换成 aiproxy.io,其他URI保持一致即可。

2 再试牛刀

curl https://api.aiproxy.io/v1/chat/completions -H "Content-Type: application/json" -H "Authorization: Bearer $OPENAI_API_KEY" -d '{
"model": "gpt-4",
"messages": [
{
"role": "system",
"content": "You are a golang assistant, skilled in explaining complex programming concepts with creative flair."
},
{
"role": "user",
"content": "请问golang的gozero 生成ddl的代码."
}
]
}'

返回值

{
  "model": "gpt-4-0613",
  "object": "chat.completion",
  "usage": {
    "prompt_tokens": 41,
    "completion_tokens": 366,
    "total_tokens": 407
  },
  "id": "chatcmpl-95QPUE3mYpijE36JNAiLdHvddFhUN",
  "created": 1711080188,
  "choices": [
    {
      "index": 0,
      "delta": null,
      "message": {
        "role": "assistant",
        "content": "GoZero 是一个以最佳实践为设计目标的web和rpc框架,它含有丰富的功能如:内嵌了模式生成器和代码生成器,能够自动化很多繁琐的工作。\n\n生成DDL的代码可以通过goctl来实现,首先需要在goctl中定义.sql文件,如:\n\n```sql\nCREATE TABLE `user`\n(\n  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'primary key',\n  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'creation time',\n  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'update time',\n  `access_key` varchar(50) NOT NULL DEFAULT '' COMMENT 'access key',\n  `secret_key` varchar(50) NOT NULL DEFAULT '' COMMENT 'secret key',\n  `deleted` tinyint(3) NOT NULL DEFAULT '0' COMMENT 'is deleted',\n  PRIMARY KEY (`id`)\n) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 COMMENT='api key';\n```\n\n然后通过goctl的model命令生成Go语言的模型代码:\n\n```bash\ngoctl model mysql ddl -src=./sql/*.sql -dir=./\n```\n\n这个命令会扫描所有.sql文件,转化为对应的Go语言模型代码,然后在指定的目录(这里是当前目录)生成这些代码。\n\n这样你就可以使用这些代码进行数据库操作了。使用这种方式,可以保证模型代码的一致性以及减少出错的可能性。"
      },
      "finish_reason": "stop"
    }
  ]
}

来吧解释一下请求参数和返回参数:

请求参数:

  • model 代表算法模型 例如gpt-4-turbo-preview or gpt-3.5-turbo(官方建议用这俩)
  • message
    • system 代表是openai 那边的服务
    • content中的内容,就是告诉gpt,你要假扮自己是一个什么样的助手,这一段可以省略。
    • user 代表用户,一般就是调用方,content是要问的内容

返回参数:

  • id 唯一标识符
  • created 时间戳
  • choices 对话完成选项,可能有多个
    • index 代表choices中的下标,从0开始
    • message.role 消息所属者的角色
    • message.content 回复的内容
  • finish_reason: 结束的原因,一般是stop(代表回答完了),还有length(请求中的token达到了一次请求的指定最大数量)、tool_calls(调用了其他工具) 、content_filter(由于内容过滤的标签省略了内容)
  • usage : 完整请求的统计
    • prompt_tokens的数量
    • completion_tokens的数量
    • total_tokens 是上面两个tokens的数量相加

图像生成

Images API提供了三种与图像交互的方法:

  • 基于文本提示从零开始创建图像(DALL·e3和DALL·e2)
  • 基于新的文本提示(仅限DALL·e2),通过让模型替换已有图像的某些区域来创建图像的编辑版本。
  • 创建现有映像的变体(仅限DALL·e2)

我们来画一个光头强?(这个想法很可怕)
curl https://api.aiproxy.io/v1/images/generations \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "dall-e-3",
"prompt": "请帮我画一个熊出没里的光头强和熊大熊二游泳的照片",
"n": 1,
"size": "1024x1024",
"style":"vivid"
"quality":"hd",
"response_format": "url"
}'

Must be one of vivid or natural. Vivid causes the model to lean towards generating hyper-real and dramatic images. Natural causes the model to produce more natural, less hyper-real looking images. This param is only supported for dall-e-3

  1. model:用的模型算法
  2. promt: 图片的文字描述
  3. n: 生成图片的张数 1-10,dall-e-3 支持一张。
  4. quality:生成图片的质量,hd代表高清,默认是 standard,
  5. response_format:返回图片格式,可以是url和b64_json,url有效期为一个小时
  6. size: 图片像素大小,1024x1024, 1792x1024, 1024x1792 dall-e-3 只支持一种。
    7.style: 生成图片的风格样式,值可以是 vivid或者natural,vivid 会倾向于生成超真实的和富有冲击力的图片,natural 会更自然少一点真实的感觉。

中文提示词,openAI 会觉得有安全风险,给拒绝了。

图片太大了,所以拍照上传了。由有道翻译为英文后生成的图片。

{"error":{"message":"Your request was rejected as a result of our safety system. Your prompt may contain text that is not allowed by our safety system.","type":"invalid_request_error","param":null,"code":"content_policy_violation"}}

oh no fxxxk it,这是光头强么?

来换点关键词来玩吧

"prompt": "castle、princess、firework、white horse、flowers",


"prompt": "girl、white skin、blonde、hot"

"prompt": "girl、white skin、blonde、hot、bikini、beach、175cm"

返回值:

{
  "created": 1711086356,
  "data": [
    {
      "url": "https://oaidalleapiprodscus.blob.core.windows.net/private/org-U6qFOYHUqO6dq5DuGnlIG37Z/user-U3PuI1SNnb4XLkBynhFQhOsr/img-DNY9KDMHda5JZytxwPuC1IeH.png?st=2024-03-22T04%3A45%3A56Z&se=2024-03-22T06%3A45%3A56Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2024-03-21T20%3A59%3A41Z&ske=2024-03-22T20%3A59%3A41Z&sks=b&skv=2021-08-06&sig=wAjpdhlEe/vsem/lJLqwtEFbpCzU6%2BZyfWk8gGtf0Vs%3D",
      "b64_json": null,
      "revised_prompt": "A fit Caucasian woman with sun-kissed blonde hair stands tall on a beach. She is dressed in a stylish bikini and her height is approximately 175cm. The golden rays of the sun add a warm overlay to the scene. She basks in the light, her footsteps leaving gentle imprints in the sand. Besides the sensual splash of waves reaching the shore, the scene is mostly quiet and serene."
    }
  ]
}

revised_prompt: 修正过的提示词,这里根据promt的输入,进行扩展与编写细节,从而生成的文案。
created: 生成图片的时间戳。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注