本站承诺永不接任何虚假欺骗、联盟广告、弹窗广告、病毒广告、诱导充值等影响用户体验的广告,广告屏蔽插件会影响本站部分功能,还请不要屏蔽本站广告,感谢支持!

当前位置:首页 / 正文

2023-03-04 | 骚操作,编程技术 | 1425 次阅读 | 等你评论 | 0 次点赞 | 繁体

OpenAI 这两天发布了 ChatGPT API,基于 gpt-3.5-turbo 模型,这是一个 GPT-3.5 的优化版本,用于支持开发者把 ChatGPT 集成到自己的产品中,同时把 API 调用价格降到 $0.002 每千 token,意味着处理 100 万字符的文本只需要 2 美元,也就是差不多十几块钱人民币,效果更好、价格更低,这让 ChatGPT API 更具性价比,因此这两天基于 ChatGPT API 的各种套壳应用如雨后春笋般大量冒出。

今天就来实现一个命令行版 ChatGPT 应用。

图片alt

代码如下:

package main

import (
    "context"
    "fmt"
    "github.com/charmbracelet/glamour"
    "github.com/common-nighthawk/go-figure"
    gpt3 "github.com/sashabaranov/go-gpt3"
    "strings"
)

func main() {
    // 获取 OpenAI API Key
    //apiKey := os.Getenv("OPENAI_API_KEY")
    apiKey := "你自己的 OPENAI_API_KEY"
    if apiKey == "" {
        fmt.Println("请设置 OPENAI_API_KEY 环境变量")
        return
    }
    // 初始化 Glamour 渲染器
    renderStyle := glamour.WithEnvironmentConfig()
    mdRenderer, err := glamour.NewTermRenderer(
        renderStyle,
    )
    if err != nil {
        fmt.Println("初始化 Markdown 渲染器失败")
        return
    }
    // 输出欢迎语(命令行应用启动界面)
    myFigure := figure.NewFigure("ChatGPT", "", true)
    myFigure.Print()
    fmt.Println("ChatGPT 启动成功,输入您的问题回车即可,输入 quit 可退出应用")
    // 创建 ChatGPT 客户端
    client := gpt3.NewClient(apiKey)
    if err != nil {
        fmt.Printf("创建客户端失败: %s\n", err.Error())
        return
    }
    messages := []gpt3.ChatCompletionMessage{
        {
            Role:    "system",
            Content: "你是ChatGPT, OpenAI训练的大型语言模型, 请尽可能简洁地回答我的问题",
        },
    }
    // 读取用户输入并交互
    var userInput string
    fmt.Println("--问题---------------------\n")
    for {
        fmt.Scanln(&userInput)
        if strings.ToLower(userInput) == "quit" {
            fmt.Println("ChatGPT 已退出")
            return
        } else if userInput != "" {
            messages = append(
                messages, gpt3.ChatCompletionMessage{
                    Role:    "user",
                    Content: userInput,
                },
            )
            // 调用 ChatGPT API 接口生成回答
            resp, err := client.CreateChatCompletion(
                context.Background(),
                gpt3.ChatCompletionRequest{
                    Model:       gpt3.GPT3Dot5Turbo,
                    Messages:    messages,
                    MaxTokens:   1024,
                    Temperature: 0,
                    N:           1,
                },
            )
            if err != nil {
                fmt.Printf("ChatGPT 接口调用失败: %s\n", err.Error())
                continue
            }
            // 格式化输出结果
            output := resp.Choices[0].Message.Content
            mdOutput, err := mdRenderer.Render(output)
            if err != nil {
                fmt.Printf("Markdown 渲染失败: %s\n", err.Error())
                continue
            }
            fmt.Println("")
            fmt.Println("--回答---------------------")
            fmt.Println(mdOutput)
            messages = append(
                messages, gpt3.ChatCompletionMessage{
                    Role:    "assistant",
                    Content: output,
                },
            )
            fmt.Println("--问题---------------------\n")
        }
    }
}

标签: 源码骚操作GolangchatGPT

猜你喜欢
[Go]包依赖管理工具go mod使用详解
go module 是 Go 语言从 1.11 版本之后官方推出的版本管理工具,并且从 Go 1.13 版本开始,go module 成为了 Go 语言默认的依赖管理工具。Modules 官方定...
薅京东羊毛必备抓取Cookies教程
本文只介绍如何利用安卓手机浏览器获取京东 cookie 教程,具体为什么要获取 cookie 以及如何薅羊毛请查看:闲置服务器薅京东的羊毛—青龙面板部署与京东签到第一步,下载工具去各大应用商店搜...
白嫖移动,联通,电信手机短信通知
无论在生活中或者工作中,对于一些比较紧急的事情,可能需要发送个通知!比如:自建的服务器突然宕机,如何自动发短信通知运维主管?后台服务日志大量报错如何第一时间发短信通知码农geigei?类似的情景...
通用的检测到广告屏蔽插件进行弹窗提示实现方法
用的 js 方法来检测,按理说所有博客都能使用,就是在打开网页的时候进行一次判断。如果发现没有加载广告代码,就会出来一个弹窗来提示浏览者将本站加到广告拦截插件的白名单里面。别喷我,个人站长经营实...
如何找回微信已过期文件教程
现在基本人人都会使用微信,微信里面保存着很多文件。但是过段时间去看,你可能由于当时没有保存或者根本就没有点开过,微信文件名称显示红色,这表示已经过期了。难道我们要再问别人重发一遍吗?这可能会有点...
PHP 自动爬毒汤日历搭建毒鸡汤一言 API 接口
什么是毒汤日历?毒汤日历是一本有毒的日历,每天用毒鸡汤来唤醒你。 你甚至不用打开日历,打开 App 的推送,每天会定时送上一杯毒鸡汤。 自己也能制作毒鸡汤?那太好了,毒性够强,如果让别人扎到心你就厉害
crond 引发大量 sendmail 进程的解决办法
# 发现问题 这两天看到几台服务器比较异常,平常流量跑满,突然就没有了流量,TCP 连接也没了。于是登录上服务器查看,首先想重启 nginx 服务,结果报错,大致意思就是磁盘空间已满。通过 `d
(首次提交评论需审核通过才会显示,请勿重复提交)