让 OpenAI 更 Open,在 ChatGPT 里自由接入数据源

本篇文章中,我们简单聊聊如何在 OpenAI 的 ChatGPT Web 客户端中,自由的接入和使用各种数据源。

写在前面

三月以来,我在 ChatGPT 官方客户端上做了不少实践,也做过一些技术分享。也在网上晒过一些折腾的有趣的事情:

  • 例子 1,直接通过 ChatGPT 来搜索最新发行的游戏和游戏攻略,以及某些平台上的商品价格信息,并根据销量给出简单的购买建议。
  • 例子 2,通过 ChatGPT 来阅读超长的内容,你可以自由组合信息来源,或者使用开源的支持长 Token 生成的模型。
  • 例子 3,直接在 ChatGPT 里,调用 Mid Journey 来绘制图片。

有不少朋友好奇其中的实现,也有一些朋友觉得 ChatGPT Web 客户端是一个很棒的载体,拥有着不错的交互形式,希望能够使用这种方式来玩,节约大量不必要的系统开发成本,以及期待能够一起进行开源共建。

最近,在一位合作伙伴的推动下,从五一假期开始,我们陆陆续续进行了“ChatGPT”后端服务的代码重写,以及部分敏感信息的剥离:把 ChatGPT 的前端封装成了独立的 Docker 容器,并重写了一套兼容 ChatGPT 客户端的后端服务。

让任何人都可以在本地启动一套和官方交互体验一致的 ChatGPT 客户端,并能够根据自己需求接入合适的信息源来玩:

  • 可以是借助 API 调用的模型接口,不仅限于 OpenAI 3.5 或 4,你也可以接入 HuggingFace 或者国内的大模型,甚至是托管在你的私有环境的服务。比如,在 ChatGPT 里甚至能够调用 Claude、国内的通义千问、图片生成模型。
  • 可以是一个搜索引擎,用聊天的方式,实现信息的搜索,顺带再使用模型的生成能力来调整和润色返回的结果。
  • 可以是固定的数据源或数据库,比如指定的内容、博客长文,甚至是你预设的一个固定答案,哪怕存在文本文件或者 Excel 里的数据。
  • 也可以是 RSS 信息源,或者任意你希望对接的 “API”、“网站”等等,不论目前 ChatGPT 官方是否支持,你是否排队排到了的各种功能使用权限。

目前,这两个项目分别开放在了 GitHub 上:

  • https://github.com/soulteary/docker-chatgpt
  • https://github.com/soulteary/sparrow

或许等待后端相对完善之后,我会重写一套完全开源的前端客户端,让整个项目变的真的完整起来。

基础使用:OpenAI API

在项目的示例目录中,我们能够找到一些开箱即用的使用 Demo,先来看看最简单的接入 OpenAI API 的配置示例:

version: '3'services:# 能够私有化部署的 ChatGPT Web 客户端chatgpt-client:image: soulteary/chatgptrestart: alwaysports:- 8090:8090environment:# 容器中的服务使用的端口APP_PORT: 8090# 前端使用的 ChatGPT 客户端域名,需要和 `sparrow` 中的 `WEB_CLIENT_HOSTNAME` 中的设置保持一致APP_HOSTNAME: "http://localhost:8090"# 客户端使用的服务端地址,如果你使用这个配置文件,可以保持下面的数值,否则需要调整为 `sparrow` 部署的实际地址APP_UPSTREAM: "http://sparrow:8091"# 开源实现的后端服务sparrow:image: soulteary/sparrowrestart: alwaysenvironment:# [基础设置]# => ChatGPT Web 客户端使用的域名,需要和 `chatgpt-client` 的 `APP_HOSTNAME` 保持一致WEB_CLIENT_HOSTNAME: "http://localhost:8090"# => 服务端口,默认端口: 8091# APP_PORT: 8091# [私有使用 OpenAI API 服务设置] *可选配置# => 启用 OpenAI APIENABLE_OPENAI_API: "on"# => OpenAI API Key,填写你自己的 KEYOPENAI_API_KEY: "sk-123456789012345678901234567890123456789012345678"# => 启用访问 API 的代理,如果你不是在海外服务器使用# OPENAI_API_PROXY_ENABLE: "on"# => 设置 API 代理地址, eg: `"http://127.0.0.1:1234"` or ""# OPENAI_API_PROXY_ADDR: "http://127.0.0.1:1234"logging:driver: "json-file"options:max-size: "10m"

我们将上面的文件保存为 docker-compose.yml ,访问 OpenAI 的 API Key 管理页面,将自己的 API 更新到配置中。接着,使用 docker compose up 启动程序,将看到类似下面的日志输出:

# docker compose down && docker compose up[+] Running 9/9✔ sparrow 2 layers [⣿⣿]      0B/0B      Pulled                                                                                                                                                 41.5s ✔ 178ce6ca3c2d Pull complete                                                                                                                                                                  2.6s ✔ 6e49bc84596f Pull complete                                                                                                                                                                  6.1s ✔ chatgpt-client 5 layers [⣿⣿⣿⣿⣿]      0B/0B      Pulled                                                                                                                                       25.7s ✔ 2408cc74d12b Already exists                                                                                                                                                                 0.0s ✔ 53e036a1e5c8 Pull complete                                                                                                                                                                  2.9s ✔ b6a24d60453c Pull complete                                                                                                                                                                  3.7s ✔ a5072006fa7c Pull complete                                                                                                                                                                  6.3s ✔ 8a30712078cf Pull complete                                                                                                                                                                  6.3s 
[+] Running 3/1✔ Network chatgpt_default             Created                                                                                                                                                   0.1s ✔ Container chatgpt-sparrow-1         Created                                                                                                                                                   0.0s ✔ Container chatgpt-chatgpt-client-1  Created                                                                                                                                                   0.0s 
Attaching to chatgpt-chatgpt-client-1, chatgpt-sparrow-1
chatgpt-sparrow-1         | Sparrow vv0.10.1
chatgpt-sparrow-1         | Sparrow Service has been launched 🚀
chatgpt-chatgpt-client-1  | [OpenAI Chat Client] http://localhost:8090
chatgpt-chatgpt-client-1  | - Project: https://github.com/soulteary/docker-chatgpt
chatgpt-chatgpt-client-1  | - Release: 2023.05.19 v1

等待服务启动完毕,我们在浏览器中打开 http://localhost:8090 (或你自定义的地址) 就能够使用自己搭建的 ChatGPT 服务了。

崭新的 “ChatGPT”

如果你希望将服务搭建在其他的机器上,只需要调整上面配置中的两个环境变量即可(比如 http://10.11.12.240:8090):

version: '3'
services:chatgpt-client:
...environment:APP_HOSTNAME: "http://10.11.12.240:8090"
...sparrow:
...environment:WEB_CLIENT_HOSTNAME: "http://10.11.12.240:8090"
...

当完成配置的调整后,我们重新使用 docker compose up 启动服务,能够看到日志输出的内容中包含了我们新的配置地址:

...
chatgpt-sparrow-1         | Sparrow vv0.10.1
chatgpt-sparrow-1         | Sparrow Service has been launched 🚀
chatgpt-chatgpt-client-1  | [OpenAI Chat Client] http://10.11.12.240:8090
chatgpt-chatgpt-client-1  | - Project: https://github.com/soulteary/docker-chatgpt
chatgpt-chatgpt-client-1  | - Release: 2023.05.19 v1

在 ChatGPT 中调用 OpenAI API

是不是非常简单?当然,这个仅仅是个 Demo,“OpenAI API 数据源”在开源的后端代码项目里是这样的,只有不到 40 行:

package OpenaiAPIimport ("context""fmt""net/http""net/url"openai "github.com/sashabaranov/go-openai""github.com/soulteary/sparrow/internal/define"
)func GetClient() *openai.Client {config := openai.DefaultConfig(define.OPENAI_API_KEY)if define.ENABLE_OPENAI_API_PROXY {proxyUrl, err := url.Parse(define.OPENAI_API_PROXY_ADDR)if err != nil {panic(err)}transport := &http.Transport{Proxy: http.ProxyURL(proxyUrl)}config.HTTPClient = &http.Client{Transport: transport}}return openai.NewClientWithConfig(config)
}func Get(prompt string) string {c := GetClient()resp, err := c.CreateChatCompletion(context.Background(),openai.ChatCompletionRequest{Model:    openai.GPT3Dot5Turbo,Messages: []openai.ChatCompletionMessage{{Role: openai.ChatMessageRoleUser, Content: prompt}},},)if err != nil {return fmt.Sprintf("OpenAI API, Chat Completion error: %v\n", err)}return resp.Choices[0].Message.Content
}

如果你想有更好的体验,比如完整的会话记录管理、多轮会话上下文保持,欢迎来开源项目中提交你的改进代码。

基础使用:官方不支持的图文模型

接下来,我们来看看如何在 ChatGPT 中使用官方原本不支持的数据源或模型。比如我们先来折腾一个接入获取难度非常低、支持在线申请免费 API 使用的,智源研究院推出的 Flag Studio 图文大模型。

使用 FlagStudio 的配置文件和使用 OpenAI API 差不多:

version: '3'services:# 能够私有化部署的 ChatGPT Web 客户端chatgpt-client:image: soulteary/chatgptrestart: alwaysports:- 8090:8090environment:# 容器中的服务使用的端口APP_PORT: 8090# 前端使用的 ChatGPT 客户端域名,需要和 `sparrow` 中的 `WEB_CLIENT_HOSTNAME` 中的设置保持一致APP_HOSTNAME: "http://localhost:8090"# 客户端使用的服务端地址,如果你使用这个配置文件,可以保持下面的数值,否则需要调整为 `sparrow` 部署的实际地址APP_UPSTREAM: "http://sparrow:8091"# 开源实现的后端服务sparrow:image: soulteary/sparrowrestart: alwaysenvironment:# [基础设置]# => ChatGPT Web 客户端使用的域名,需要和 `chatgpt-client` 的 `APP_HOSTNAME` 保持一致WEB_CLIENT_HOSTNAME: "http://localhost:8090"# => 服务端口,默认端口: 8091# APP_PORT: 8091# [私有实现的 FlagStudio 服务] *可选# => 启用 FlagStudioENABLE_FLAGSTUDIO: "on"# => 只启用 FlagStudio 数据源ENABLE_FLAGSTUDIO_ONLY: "off"# => FlagStudio API Key# FLAGSTUDIO_API_KEY: "your-flagstudio-api-key", like: `238dc972f6a2ebf15d787aef659cc4d1` (页面上获取)FLAGSTUDIO_API_KEY: "填写你自己的 API KEY"logging:driver: "json-file"options:max-size: "10m"

先将上面的内容保存为 docker-compose.yml,接着注册一个 FlagStudio 账号,访问官方文档页面获取你自己的 API Key,并将它更新到上面配置中的 FLAGSTUDIO_API_KEY

获取 FlagStudio API Key

每个 API 每天能够调用生成 500 张图,如果生成效果不好,使用 ChatGPT 自带的“Prompt”问题重写、补充连续对话、重新生成按钮都可以重新生成图片。

在 ChatGPT 中使用 FlagStudio

下面我们聊聊,如何封装这样一个简单的数据源,让 ChatGPT 能够输出一些不一样的东西。

封装自定义数据源:Flag Studio

Flag Studio 的数据源封装实现,存放在后端项目 sparrow 的 connectors/flag-studio 里,关键实现代码行数不到 200 行。

参考官方文档,一个完整的 Flag Studio 图片生成流程中,需要根据我们申请的 API Key 去换服务调用所需要的 Token,最后携带 Token 去调用图片生成接口即可。

我们先来实现根据 API Key 换 Token 的逻辑:

package FlagStudioimport ("encoding/json""fmt""io""net/http"
)const API_GET_TOKEN = "https://flagopen.baai.ac.cn/flagStudio/auth/getToken"type ResponseToken struct {Code int `json:"code"`Data struct {Token string `json:"token"`} `json:"data"`
}// parseToken parses the token from the response body
func parseToken(buf []byte) (string, error) {var data ResponseTokenerr := json.Unmarshal(buf, &data)if err != nil {return "", err}if data.Code != 200 || data.Data.Token == "" {return "", fmt.Errorf("FlagStudio API, Get Token error, Code %d\n, Token: %s", data.Code, data.Data.Token)}return data.Data.Token, nil
}// get token from the API
func GetToken(apikey string) (string, error) {req, err := http.NewRequest("GET", API_GET_TOKEN, nil)if err != nil {return "", fmt.Errorf("FlagStudio API, Error initializing network components, err: %v", err)}req.Header.Set("Accept", "application/json")req.Header.Set("Content-Type", "application/json")q := req.URL.Query()q.Add("apikey", apikey)req.URL.RawQuery = q.Encode()client := &http.Client{}resp, err := client.Do(req)if err != nil {fmt.Println(err)return "", fmt.Errorf("FlagStudio API, Error sending request, err: %v", err)}defer resp.Body.Close()body, err := io.ReadAll(resp.Body)if err != nil {fmt.Println(err)return "", fmt.Errorf("FlagStudio API, Error reading response, err: %v", err)}token, err := parseToken(body)if err != nil {fmt.Println(err)return "", fmt.Errorf("FlagStudio API, Error parsing response, err: %v", err)}return token, nil
}

上面的代码中,我们实现了一个非常基础的 HTTP 调用,以及对服务端返回的 JSON 内容的解析,如果 API Key 正确、网络没有异常的情况下,函数运行结束,我们将得到生成图片所需要的 Token。

接下来,我们来实现主要逻辑,图片生成接口调用:

package FlagStudioimport ("encoding/json""fmt""io""net/http""strings""github.com/soulteary/sparrow/internal/define"
)type TextToImage struct {Prompt          string  `json:"prompt"`GuidanceScale   float64 `json:"guidance_scale"`Height          int     `json:"height"`NegativePrompts string  `json:"negative_prompts"`Sampler         string  `json:"sampler"`Seed            int     `json:"seed"`Steps           int     `json:"steps"`Style           string  `json:"style"`Upsample        int     `json:"upsample"`Width           int     `json:"width"`
}const API_TEXT_TO_IMAGE = "https://flagopen.baai.ac.cn/flagStudio/v1/text2img"var FS_STYLES = []string{"国画", "写实主义", "虚幻引擎", "黑白插画", "版绘", "低聚", "工业霓虹", "电影艺术", "史诗大片", "暗黑", "涂鸦", "漫画场景", "特写", "儿童画", "油画", "水彩画", "素描", "卡通画", "浮世绘", "赛博朋克", "吉卜力", "哑光", "现代中式", "相机", "CG渲染", "动漫", "霓虹游戏", "蒸汽波", "宝可梦", "火影忍者", "圣诞老人", "个人特效", "通用漫画", "Momoko", "MJ风格", "剪纸", "齐白石", "张大千", "丰子恺", "毕加索", "梵高", "塞尚", "莫奈", "马克·夏加尔", "丢勒", "米开朗基罗", "高更", "爱德华·蒙克", "托马斯·科尔", "安迪·霍尔", "新海诚", "倪传婧", "村上隆", "黄光剑", "吴冠中", "林风眠", "木内达朗", "萨雷尔", "杜拉克", "比利宾", "布拉德利", "普罗旺森", "莫比乌斯", "格里斯利", "比普", "卡尔·西松", "玛丽·布莱尔", "埃里克·卡尔", "扎哈·哈迪德", "包豪斯", "英格尔斯", "RHADS", "阿泰·盖兰", "俊西", "坎皮恩", "德尚鲍尔", "库沙特", "雷诺阿"}func GetRandomStyle() string {return FS_STYLES[define.GetRandomNumber(0, len(FS_STYLES)-1)]
}func GenerateImageByText(s string) string {data := TextToImage{Prompt:          s,GuidanceScale:   7.5,Width:           512,Height:          512,NegativePrompts: "",Sampler:         "ddim",Seed:            1024,Steps:           50,Style:           GetRandomStyle(),Upsample:        1,}payload, err := define.MakeJSON(data)if err != nil {return fmt.Sprintf("FlagStudio API, An error occurred while preparing to enter data: %v", err)}token, err := GetToken(define.FLAGSTUDIO_API_KEY)if err != nil {return fmt.Sprintf("FlagStudio API, An error occurred while getting the token: %v", err)}req, err := http.NewRequest("POST", API_TEXT_TO_IMAGE, strings.NewReader(payload))if err != nil {return fmt.Sprintf("FlagStudio API, An error occurred while initializing network components: %v", err)}req.Header.Set("Accept", "application/json")req.Header.Set("Content-Type", "application/json")req.Header.Add("token", token)client := &http.Client{}resp, err := client.Do(req)if err != nil {return fmt.Sprintf("FlagStudio API, An error occurred while sending request: %v", err)}defer resp.Body.Close()body, err := io.ReadAll(resp.Body)if err != nil {return fmt.Sprintf("FlagStudio API, An error occurred while reading response: %v", err)}base64Image, err := parseTextToImage(body)if err != nil {return fmt.Sprintf("FlagStudio API, An error occurred while parsing response: %v", err)}return `![](data:image/png;base64,` + base64Image + `)`
}type ResponseTextToImage struct {Code int    `json:"code"`Data string `json:"data"`Nsfw int    `json:"nsfw"`
}// parseToken parses the token from the response body
func parseTextToImage(buf []byte) (string, error) {var data ResponseTextToImageerr := json.Unmarshal(buf, &data)if err != nil {return "", err}if data.Code != 200 || data.Data == "" {return "", fmt.Errorf("FlagStudio API, Get Result error, Code %d", data.Code)}if data.Nsfw != 0 {return "", fmt.Errorf("FlagStudio API, Get Token error, Code %d\n, NSFW: %d", data.Code, data.Nsfw)}return data.Data, nil
}

和上面调用 Token 的逻辑类似,不过这里我们需要使用 POST 来发送请求,并携带合适的请求参数。

关于图片风格的定义,这里简单实现了一个随机选取风格,更好的实现是根据用户的 Prompt 内容,自动选择合适的模型风格,如果你感兴趣,可以在项目中提交你的代码实现,让更多的人受惠于此。

好了,上面的代码就是核心实现。但是,为了让实现生效,我们还需要完成一些边边角角的调整。

我们需要先在流式响应组件中components/stream-responser/stream_builder.go,添加一段调用,让服务端在响应请求的时候,能够将用户提交的 Prompt 交给我们刚刚封装好的程序。

package StreamResponser...func StreamBuilder(parentMessageID string, conversationID string, modelSlug string, broker *eb.Broker, input string, mode StreamMessageMode) bool {...switch modelSlug {...case datatypes.MODEL_FLAGSTUDIO.Slug:if define.ENABLE_FLAGSTUDIO {sequences = MakeStreamingMessage(FlagStudio.GenerateImageByText(input), modelSlug, conversationID, messageID, mode)quickMode = true}...}
...
}

接着,是在程序功能开关中添加一些定义。如果你不需要按需启用,可以不进行实现:

var (ENABLE_FLAGSTUDIO      = GetBool("ENABLE_FLAGSTUDIO", false)                       // Enable FlagstudioENABLE_FLAGSTUDIO_ONLY = GetBool("ENABLE_FLAGSTUDIO_ONLY", false)                  // Enable Flagstudio onlyFLAGSTUDIO_API_KEY     = GetSecret("FLAGSTUDIO_API_KEY", "YOUR_FLAGSTUDIO_SECRET") // Flagstudio API Token
)

为了实现多种模型、数据源的切换,我们还需要为每一种数据源进行一些数据预定义。在模型列表目录中创建一个新程序文件internal/datatypes/models.go,在其中添加我们自定义的新数据源:

var MODEL_FLAGSTUDIO = ModelListItem{Slug:        "flag-studio",MaxTokens:   1000,Title:       "FlagStudio",Description: "FlagStudio is a text-to-image platform developed by BAAI's z-lab and FlagAI team.\n\nIt supports 18-language text-to-image generation including Chinese and English, and aims to provide advanced AI art creation experience.",Tags:        []string{},QualitativeProperties: ModelListQualitativeProperties{Reasoning:   []int{4, 5},Speed:       []int{4, 5},Conciseness: []int{3, 5},},
}

为了让模型能够被 ChatGPT 正常调用,我们还需要实现模型获取 API 中的一些实现,依旧是创建一个新的程序 internal/api/models/flagstudio.go,定义一个获取我们定义好的模型类型的功能:

package modelsimport ("github.com/soulteary/sparrow/internal/datatypes""github.com/soulteary/sparrow/internal/define"
)func GetFlagStudioModel() (result []datatypes.ModelListItem) {model := datatypes.MODEL_FLAGSTUDIOif define.ENABLE_I18N {model.Description = "FlagStudio 是由 BAAI 旗下的创新应用实验室和 FlagAI 团队开发的文图生成工具。\n\n支持中英等18语的文图生成,旨在为大家提供先进的AI艺术创作体验。"}result = append(result, model)return result
}

最后,实现完调用函数,我们将调用函数添加到internal/api/models/models.go 中,当 ChatGPT 调用模型列表的时候,就能够访问到我们的新增的模型或者数据源了。

package modelsimport ("net/http""github.com/gin-gonic/gin""github.com/soulteary/sparrow/internal/datatypes""github.com/soulteary/sparrow/internal/define"
)func GetModels(c *gin.Context) {
...if define.ENABLE_FLAGSTUDIO {model := GetFlagStudioModel()if define.ENABLE_FLAGSTUDIO_ONLY {c.JSON(http.StatusOK, datatypes.Models{Models: model})}modelList = append(modelList, model...)}...
}

目前添加新数据源的体验还不是很好,后续我考虑进行一些优化调整,让添加数据源能够更简单明了一些。当然,后端服务是开源实现,如果你有好的想法,也可以进行开源共建。

最后

关于 “ChatGPT” 还有很多其他的有趣的实现,接下来相关的文章里,我们慢慢展开 😄

–EOF


我们有一个小小的折腾群,里面聚集了一些喜欢折腾的小伙伴。

在不发广告的情况下,我们在里面会一起聊聊软硬件、HomeLab、编程上的一些问题,也会在群里不定期的分享一些技术资料。

喜欢折腾的小伙伴,欢迎阅读下面的内容,扫码添加好友。

关于“交友”的一些建议和看法

添加好友时,请备注实名和公司或学校、注明来源和目的,否则不会通过审核。

关于折腾群入群的那些事


本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0)

本文作者: 苏洋

创建时间: 2023年05月19日
统计字数: 14213字
阅读时间: 29分钟阅读
本文链接: https://soulteary.com/2023/05/19/make-openai-more-open-and-freely-access-data-sources-in-chatgpt.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/6039.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java SpringBoot实现调用OpenAI ChatGPT的相关接口(详细教程)

大纲 说明 Java调用OpenAI接口,Java调用实现ChatGPT聊天,OpenAIAPI是一个自己封装的OpenAI GPT-3聊天API的Java工具类,可用于通过Java代码调用GPT-3模型进行自然语言交互,实现智能聊天等功能。 通过调用GPT-3模型,输…

〖ChatGPT实践指南 - 零基础扫盲篇③〗- 学术探讨:如何获取 OpenAI 的 API keys

帮助大家学习使用OpenAI的各类API开发应用 ,学习多个实站项目。 推荐他人订阅可获取扣除平台费用后的35%收益,文末有名片!说明:该文属于 ChatGPT实践指南白宝书 专栏,购买任意白宝书体系化专栏可加入TFS-CLUB 私域社区…

OpenAI 重磅发布 ChatGPT iOS 客户端!

公众号关注 “GitHubDaily” 设为 “星标”,每天带你逛 GitHub! 今天凌晨,OpenAI 正式发布了 iOS 客户端! 这代表你可以直接在 iPhone 和 iPad 上直接使用 ChatGPT 进行聊天了。 该客户端基于 Whisper 开源模型,集成了…

ChatGPT:关于 OpenAI 的 GPT-4 工具你需要知道的一切

OpenAI 再次成为头条新闻,有消息称它正在用一个名为 GPT-4 的新版本更新其病毒式传播的 ChatGPT。但是什么时候可以使用它,它是如何工作的,你可以使用它吗? OpenAI 已迅速成为科技界最知名的公司之一。这家人工智能 (AI) 公司制作了逼真的图像生成器、3D 模型创建器,以及现…

OpenAi[ChatGPT] 使用Python对接OpenAi APi 实现智能QQ机器人-学习详解篇

文章大部分来自:https://lucent.blog 原文博客地址:https://blog.ideaopen.cn 最近火热全文的ChatGPT,被很多人玩出了花,我们在Github上可以看到几个常见的逆向SDK包,这一篇我将以学习的方式来写这一篇文章。 这些SDK不…

用 Python 实现ChatGPT OpenAI(直接上源码)

网上一大堆教程,好多讲的很墨迹,你需要折腾半天才能调试通,up 这里给大家直接上源码干货。 详细教程后面补充,着急使用的可以直接拿走调试 说明 到 openai 里面替换你自己的app_key https://platform.openai.com/ 登录账号登录之…

如何使用OpenAi的ChatGPT咨询AI有关于Baumer工业相机的品牌国际知名度

基于OpenAi的Merlin Chat GPT使用方式 本方法可以不用国外网点进行登录使用ChatGPT 在国内就可以正常使用OpenAI的服务 一、下载Google浏览器 Google浏览器安装地址:https//www.google.cn/intl/zh-CN/chrome/ 登录自己的Google账号 搜索:Merlin - Ope…

我们所知道的关于 OpenAI 的 ChatGPT 的一切

如果您还没有听说过ChatGPT,这是来自人工智能实验室 OpenAI 的不可思议的新聊天机器人,这里是您需要了解的有关这个有争议的新程序的所有信息的快速入门。 什么是聊天 GPT? ChatGPT 是一种人工智能工具,允许用户生成原始文本。你…

好用到爆的Python自动化办公教程pdf,Python × Excel × Word × PPT 一次搞定

在这个自动化时代,我们有很多重复无聊的工作要做。想想这些你不再需要一次又一次地做的无聊的事情,让它自动化,让你的生活更轻松。那么在本文中,我将向您介绍一个好用到爆的Python自动化办公教程pdf,Python Excel Wo…

如何利用Multi-Chat搞科研?

这位研究僧,Multi-Chat都发布了,你还在纯人工搞科研吗? 已经有人实测: Multi-Chat科研全流程都能用,尤其是对于英语非母语的科研人员,可以极大地提高日常科研工作效率。 连写给导师的请假信,都能…

全球最大的 ChatGPT 开源替代品来了!

本周赠书:《Elasticsearch数据搜索与分析实战》 出品 | CSDN(ID:CSDNnews)、整理 | 屠敏 自去年 11 月 ChatGPT 面向公众测试以来,OpenAI 一直占据各大科技网站的头版头条,以及成为很多开发者工具的首选。C…

漫谈 ChatGPT 与问答式 BI

近日,观远数据G-park「Lets Date!BI!」系列直播第二期「2023,金融业如何应对“流浪数据”」顺利落幕。观远数据联合创始人兼首席数据科学家字节带来了《漫谈 ChatGPT 与问答式 BI》的探索思考。 字节一方面介绍了一系列 ChatGPT …

为什么所有公开的对 GPT-3 的复现都失败了?复现和使用GPT-3/ChatGPT,你所应该知道的...

文|杨靖锋译|杨昊桐,王骁 修订源|机器之心 英文原版作者:杨靖锋,现任亚马逊科学家,本科毕业于北大,硕士毕业于佐治亚理工学院,师从 Stanford 杨笛一教授。感谢靳弘业对第…

ChatGPT-易编程 V3.0.0:工程级工作支持、智能代码生成、智能代码导读以及更多功能介绍

目录 前言 🌟 功能介绍 🛠️ 命令(图示见本节末尾) 使用 ctrlshiftp 可用的命令: 在文件或选中代码块上右键点击可以使用的命令: 使用快捷键可用的命令: 其他功能 部分功能图示 常见使…

chatgpt生成一个简单PPT

1.先通过chatgpt得到文案 请作为一个富有经验的自媒体从业者,请帮我写一份适用于PPT的文案,主题是AIGC用于产品演示。 注意使用markdown格式,并把回复内容放到代码块中 2.利用mindshow网站生成PPT 导入我们刚刚生成的内容

自动生成原创文章文案软件v.1.2.3

ChatGPT自去年11月发布后在各个领域引发轰动。尤其是在学术界,它引发了一场禁止使用人工智能作弊撰写论文的风波。 然而,时代变化得太快。据泰晤士报,国际文凭组织(IB)反其道而行之,表示将允许参加IB课程的…

Chatgpt4来了,测试小姐姐实测,在失业的边缘疯狂试探~

GPT-4是OpenAI于2023年3月发布的最新人工智能模型,它是继GPT-3.5之后的又一次重大突破。它的核心技术是基于Transformer的自回归语言模型,它使用了大量的无标注数据进行预训练,学习了自然语言和其他模态之间的通用表示和关系。我们今天来看看…

【NLP】ChatGPT试用有感

写在前面 作为一个兼具分析&生成能力的AI,ChatGPT最近一段时间热度都非常高,它的确颠覆了很多人的认知,它的出现一定程度上是强人工智能的出现。ChatGPT似乎已经无所不能,文本分类,信息抽取,文本生成&a…

chatGPT指令大全可免费使用网站列表chatGPT4试用方案

指令列表 写作助理 👉 最常使用的 prompt,用于优化文本的语法、清晰度和简洁度,提高可读性。作为一名中文写作改进助理,你的任务是改进所提供文本的拼写、语法、清晰、简洁和整体可读性,同时分解长句,减少…

上手ChatGPT威力加强版后,我发现它很强,但也有点拉。。。

今天凌晨,OpenAI 发布了最新的 GPT-4。 根据发布会披露的内容来看,这个新一代比早先大家使用的 ChatGPT 的 GPT-3.5 内核强悍了一大截,再次刷新了编辑部对 AI 的认知。 首先,非常非常重要的一点是,GPT-4 可以接受文字以…