五分钟扫盲chatGPT与OpenAI编程(For 开发者)
2023-03-02 11:46:53   来源:51cto 作者刘丹冰Aceld    评论:0 点击:

一、chatGPT与OpenAI

ChatGPT 是 OpenAI 公司的一个技术产品,chatGPT使用了 GPT(Generative Pre-trained Transformer)技术,是一个用于对话生成的预训练语言模型,OpenAI还有很多其他模型。

(来自:chatGPT的解释)

OpenAI是一家人工智能研究公司,它开发并提供了一系列人工智能技术和产品,包括SDK开发包。

(来自:chatGPT的解释)

可以理解为:

OpenAI提供的SDK能力更加丰富,而chatGPT是使用OpenAI的GPT技术实现的一款自然语言处理模型产品。

所以要接入chatGPT的能力,还是要看OpenAI所能提供的开放接口能力如何。

二、OpenAI目前公开的几款产品

2.1 chatGPT

我们可以通过 chat.openai.com/chat 来打开chatGPT的在线聊天界面(需要先注册,目前不支持国内注册)。

 

图片

 

具体的chatGPT聊天的情况,这里不赘述了,chatGPT的实力目前在网络上已经被证实。

就目前个人使用的情况来看。目前在搜索知识相关的内容,用chatGPT之后,很少会再打开Baidu和Google。除非一些系统性的知识,或者极个别业务类知识搜索。但是对于科普类、以及常见类知识,chatGPT的答复明显要比搜索引擎更精准,且十分清楚你意图搜索的内容是什么。

2.2 DALL·E

DALL·E 是 OpenAI 研发的一种新型的生成式预训练语言模型,它能够从文字描述中生成全新的图片。它可以生成各种各样的图片,从卡通形象到复杂的科技图像,它是一种非常先进且有趣的人工智能技术。

(来自:chatGPT的解释)

我们打开网址:labs.openai.com 可以更直观看见这款产品。

 

图片

 

 

图片

 

2.3 GPT-3

GPT-3(Generative Pretrained Transformer 3):这是 OpenAI 最强大的 NLP 模型,拥有出色的语言生成能力。

(来自chatGPT的解释)

网上流传可以写出论文的就是GPT-3这款产品,chatGPT实际也是应用GPT-3的"text-davinci-003"模型。

 

图片

 

网址为:https://platform.openai.com/playground 右侧Model选择"text-davinci-003"。

 

图片

 

2.4 CLIP

CLIP(Contrastive Language-Image Pretraining):这是一种跨语言和图像的模型,可以在图像和文本间进行对比。

这里不再介绍。官方网站是 clip.openai.com 但是我没有打开。

三、基于OpenAI的Demo开发

OpenAI接口文档

platform.openai.com/doc

从目前官方的接口文档来看:OpenAI的原生接口支持Python和Node.js语言,但也同时支持RESTFul的API接口形式。所以目前其他语言可以通过Http的API请求形式,来调用OpenAI的接口。

这里先以Python为例,尝试调通一个接口。

3.1 Model

在开始之前,我们需要理解的最关键的一个概念,就是OpenAI的训练模型Model。

对于我们从来没有接触过人工智能技术的人来说,始终认为人工智能开发一定是要自己训练的,但是OpenAI完全降低了人工智能的业务开发门槛,我们完全不需要神经网络、NLP、深度学习等人工智能领域工程师及算法工程师,就可以直接使用OpenAI训练好的强大模型为我们进行业务赋能。

我们可以理解为OpenAI现在已经有很多基础能力相当成熟的“AI大秘书”为我们进行服务。

他们的名字分别是:davinci(达芬奇)、curie(居里)、babbage(巴贝奇)和ada(艾达)等。

Model

擅长

Davinci

复杂的意图,因果关系,面向特定受众的概括

Curie

语言翻译,复杂分类,文本情感,概括

Babbage

中等分类,语义搜索分类

Ada

文本解析,简单分类,地址校正,关键词

注意:任何由更快的模型(如Ada)执行的任务都可以由更强大的模型(如Curie或Davinci)执行,所以只需要记住“达芬奇最强”即可。

综上,在我们进行使用OpenAI进行业务接口开发时,应该尝试不同的场景,选择最适合的Model为我们提供分析能力。

当然,OpenAI不仅仅只有这些模型,在OpenAI的官方文档上有说明可以给开发者提供的开发能力,如下:

 

图片

 

这五大能力,各自提供了接口让开发者进行接入和使用。其中“Fine-tuning"将是定制化的model训练接口,当然是你不希望使用OpenAI现有的"大秘书"。

全部Model模型List可见OpenAI官方文档:platform.openai.com/doc

在GPT-3模型中,各个“AI大秘书”的最新版本和情况如下:

 

图片

 

3.2 基于"text-davinci-003"的text文本处理Demo(Python)

代码很简单,如下:

 

图片

 

1) openai的sdk

对于python来讲,安装openai环境十分的简单,如下指令即可:

 

pip install openai
  • 1.

 

如果你用的Golang语言或其他语言,不需要安装环境,直接调用官方的RESTFul接口即可。

2) API_KEY

这里面需要一个api_key,api_key的获取办法是,首先要注册OpenAI账号,如果您之前已经可以使用OpenAI产品,说明你已经有了账号,然后在platform.openai.com/acc 网页中,生成API_KEY即可。

 

图片

 

3) propmt提示信息

 

prompt = "用Golang写一个API-Server,且有一个路由/tal,给客户端返回'你好TAL'的能力"
  • 1.

 

在文本Model中,就是我们的输入问题文本。

接下来,我们来执行上述的python代码,得到如下结果:

 

图片

 

这样就已经基于"text-davinci-003"的能力得到了我们想要的答案,也证明我们Demo的调度是通过的。

四、OpenAI的基于Golang接口开发及微信GPT案例

4.1 基础结构体定义

 

const BASEURL = "https://api.openai.com/v1/"

// ChatGPTResponseBody 请求体
type ChatGPTResponseBody struct {
    ID      string                 `json:"id"`
    Object  string                 `json:"object"`
    Created int                    `json:"created"`
    Model   string                 `json:"model"`
    Choices []ChoiceItem           `json:"choices"`
    Usage   map[string]interface{} `json:"usage"`
}

type ChoiceItem struct {
    Text         string `json:"text"`
    Index        int    `json:"index"`
    Logprobs     int    `json:"logprobs"`
    FinishReason string `json:"finish_reason"`
}

// ChatGPTRequestBody 响应体
type ChatGPTRequestBody struct {
    Model            string  `json:"model"`
    Prompt           string  `json:"prompt"`
    MaxTokens        int     `json:"max_tokens"`
    Temperature      float32 `json:"temperature"`
    TopP             int     `json:"top_p"`
    FrequencyPenalty int     `json:"frequency_penalty"`
    PresencePenalty  int     `json:"presence_penalty"`
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.

 

4.2 Golang的OpenAI请求RESTful接口封装

 

// Completions gtp文本模型回复
//curl https://api.openai.com/v1/completions
//-H "Content-Type: application/json"
//-H "Authorization: Bearer your chatGPT key"
//-d '{"model": "text-davinci-003", "prompt": "你好,Aceld", "temperature": 0, "max_tokens": 7}'
func Completions(msg string) (string, error) {
    requestBody := ChatGPTRequestBody{
        Model:            "text-davinci-003",
        Prompt:           msg,
        MaxTokens:        1024,
        Temperature:      0.7,
        TopP:             1,
        FrequencyPenalty: 0,
        PresencePenalty:  0,
    }
    requestData, err := json.Marshal(requestBody)

    if err != nil {
        return "", err
    }
    log.Printf("request gtp json string : %v", string(requestData))
    req, err := http.NewRequest("POST", BASEURL+"completions", bytes.NewBuffer(requestData))
    if err != nil {
        return "", err
    }

    apiKey := "XXXXXXXXXX申请的API_KEYXXXXXXXXXX"
    req.Header.Set("Content-Type", "application/json")
    req.Header.Set("Authorization", "Bearer "+apiKey)
    client := &http.Client{}
    response, err := client.Do(req)
    if err != nil {
        return "", err
    }
    defer response.Body.Close()
    if response.StatusCode != 200 {
        return "", errors.New(fmt.Sprintf("status code != 200, code is %d", response.StatusCode))
    }
    body, err := ioutil.ReadAll(response.Body)
    if err != nil {
        return "", err
    }

    gptResponseBody := &ChatGPTResponseBody{}
    log.Println(string(body))
    err = json.Unmarshal(body, gptResponseBody)
    if err != nil {
        return "", err
    }

    var reply string
    if len(gptResponseBody.Choices) > 0 {
        reply = gptResponseBody.Choices[0].Text
    }
    log.Printf("response text: %s \n", reply)
    return reply, nil
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.

 

我们依然可以通过上述封装的Golang接口去请求OpenAI的Model模型,获得我们得到的结果。这里的Demo运行就不再展示。

然后,基于Golang的API能力再加上微信小程序的代理程序模块(由于涉及到微信代理作弊程序,这里代码省略),可以代理本地微信程序的消息转发,最终可以实现的效果如下:

 

图片

 

目前也有第三方实现的Golang的GPT接口封装,项目名称为go-gpt3。

开源代码在 github.com/sashabaranov ,实现基本代码如下:

 

package main

import (
    "context"
    "fmt"
    gogpt "github.com/sashabaranov/go-gpt3"
)

func main() {
    c := gogpt.NewClient("XXXXXXX  your API KEY XXXXXXXX")
    ctx := context.Background()

    req := gogpt.CompletionRequest{
        Model:     gogpt.GPT3Ada,
        MaxTokens: 5,
        Prompt:    "随便说说",
    }
    resp, err := c.CreateCompletion(ctx, req)
    if err != nil {
        return
    }
    fmt.Println(resp.Choices[0].Text)
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.

 

是的,这很令人惊奇,你现在已经具备使用人工能力开发业务了,且接口竟然如此的简单。至于model的选择和参数和接口的选择,详细看OpenAI文档就可以了,本文是快速入门,这里就不再赘述了。

五、有关接入OpenAI的功能假设模型

5.1 智能ToB运营售前、售后、技术支持系统

整体思路为,应用OpenAI提供的Files大文件训练和Fine-tune自定义业务Model能力。尝试基于已有的成熟Model再叠加业务内容,进行简单的知识补充即可。

 

图片

 

5.2 智能家庭助理

方案和上述方案类似,只不过需要将详细的操作手册换成常见的QA汇总文本。

六、方案可行性评估

注:解决方案为基于OpenAI模型的初探方案,商业模式和产品可行请问你们的产品经理。

先说下我这里的想到的几个问题,进行抛转:

1、chatGPT如果在短时间内在中国出现一个普及类的大众产品问世,所以现在普通业务企业接入可能将毫无意义,因为大家都会在那个普及的产品上去提问知识,就好比当搜索引擎刚出来的时候,我们在自己的产品植入搜索引擎能力,短期有点效果,长期是无意义的。最后大家都会到一个地方去搜索。

2、对于OpenAI能力的性能问题以及回答问题的准确性,目前还没有商业应用落地的真实数据,第一口吃螃蟹还需要谨慎一些。

3、chatGPT就国内来说,在几个月之前就已经有一小波热提峰值,但是很快就下去了,但近期突然引起大家热议,或有资本运作及推动,学习知识没错,在没有掌握充足的相关知识和应用领域客观调研下,要小心自己不要成为"韭菜"哦~^_^~。

4、科学很重要,科学的普及更重要,而普及才是最难的,引用AI来创造价值才是最难的。目前chatGPT只是展示了潜力,但潜力不能当饭吃,只有实力才能当饭吃。目前chatGPT还是“流行话题”占比高一些,聊这个话题会显得高级,所以才喜欢聊,但又有多少人真的懂,多少人真的了解且认真思考过,甚至又有多少人去试用一下。

关于作者

刘丹冰Aceld

image.png

技术知识库

​https://www.yuque.com/aceld​

---

---

 

​《Golang修养之路》​

 

​《8小时转职Golang工程师》​

 

​《zinx-Golang轻量级Tcp服务器框架》​

代表作品

​《Lars-基于C++负载均衡远程服务器调度系统》​

 

​《libevent深入浅出》​

 

​《Nginx中文入门手册》​

 

​《Linux上Lua应用实战与人工智能》​

---

---

github

​https://github.com/aceld​


相关热词搜索:人工智能

上一篇:"很多中国人正热衷把玩美国AI,却不知已落入一个情报巨网"
下一篇:谁能做出中国版ChatGPT?怎么做?

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306116;邮箱:aet@chinaaet.com。
分享到: 收藏