4

ChatGpt聊天API使用 - 安辉

 1 year ago
source link: https://www.cnblogs.com/yishaochu/p/17175361.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

昨天ChatGpt发布了聊天API,新增了两个模型,目前还是测试阶段

  • gpt-3.5-turbo 功能强大的GPT-3.5模型,专门针对聊天做了优化
  • gpt-3.5-turbo-0301 此模型只支持到今年6月份

所以我们直接是用gpt-3.5-turbo模型就行了,相对于之前的text-davinci-003模型,gpt-3.5-turbo模型使用成本降低了90%。我昨天第一时间调用API使用了,返回结果速度变快的,简单的问题3秒内就返回结果了,写文章的问答10多秒也能回复了,并且回复质量也比之前的text-davinci-003模型要好。

使用gpt-3.5-turbo聊天模型集成到应用程序中能做什么?有哪些使用场景

  • 模拟游戏中的角色,例如NPC

ChatGpt API早期用户

Snapchat

Snapchat的创始人推出了 My AI for Snapchat+,My AI 为 Snapchatter 提供了一个友好的、可自定义的聊天机器人,让他们触手可及,可以提供建议,甚至可以在几秒钟内为朋友写一句俳句。Snapchat 是日常交流和消息传递的场所,每月有 7.5 亿 Snapchatter。

Quizlet

Quizlet是一个全球学习平台,有超过 6000 万学生使用它来学习、练习和掌握他们正在学习的任何内容。Quizlet 在过去三年中一直与 OpenAI 合作,在多个用例中利用 GPT-3,包括词汇学习和练习测试。随着 ChatGPT API 的推出,Quizlet 推出了 Q-Chat,这是一种完全自适应的 AI 导师,可让学生根据通过有趣的聊天体验提供的相关学习材料提出自适应问题。

Instacart

Instacart正在增强 Instacart 应用程序,使客户能够询问食物并获得鼓舞人心的、可购买的答案。这使用 ChatGPT 以及 Instacart 自己的 AI 和来自其 75,000 多家零售合作伙伴商店位置的产品数据来帮助客户发现开放式购物目标的想法,例如“我如何制作美味的鱼炸玉米饼?” 或“对我的孩子来说,什么是健康的午餐?” Instacart 计划在今年晚些时候推出“Ask Instacart”。

Shop是 Shopify 的消费者应用程序,有 1 亿购物者使用它来寻找和购买他们喜爱的产品和品牌。ChatGPT API 用于为 Shop 的新购物助手提供动力。当购物者搜索商品时,导购会根据他们的需求进行个性化推荐。Shop 的新人工智能购物助手将通过扫描数百万种产品来简化应用程序内购物,以快速找到买家正在寻找的东西,或者帮助他们发现新东西。

Speak

Speak是一款人工智能语言学习应用程序,专注于打造流利口语的最佳途径。他们是韩国发展最快的英语应用程序,并且已经在使用 Whisper API 为新的 AI 语音配套产品提供支持,并迅速将其推向全球其他地区。Whisper 为各个级别的语言学习者提供了人类水平的准确性,解锁了真正的开放式会话练习和高度准确的反馈。

API使用

api使用跟之前差不多,调用起来很方便。申请api key什么的我就不说了,网上教程一大堆。

例如使用Java如何调用,用Idea新建一个maven项目,依赖hutool工具包。

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.10</version>
</dependency>

然后新建一个测试类,其实就是调用一下api,代码很少,就不一一解释了

public static void main(String[] args) {
    String url="https://api.openai.com/v1/chat/completions";//api url
    List<ChoiceMessage> list=new ArrayList<>();
    list.add(new ChoiceMessage("user","你好"));//问题

    GptTurbo gptTurbo=new GptTurbo();
    gptTurbo.setModel("gpt-3.5-turbo");//模型
    gptTurbo.setMessages(list);
    gptTurbo.setUser("1");//用户标识
    HttpResponse response = HttpRequest.post(url)
            .headerMap(null, false)
            .bearerAuth(Constants.TOKEN)//API Token,openai官方生成token
            .body(JSON.toJSONString(gptTurbo))
            .timeout(5 * 60 * 1000)
            .execute();
    String jsonResult=response.body();
    System.out.println(jsonResult);
}

GptTurbo实体类:

@Data
public class GptTurbo {
    private String model;
    private List<ChoiceMessage> messages;
    private String user;//用户id
}

ChoiceMessage实体类:

@Data
public class ChoiceMessage {
    private String role;
    private String content;

    public ChoiceMessage() {
    }

    public ChoiceMessage(String role, String content) {
        this.role = role;
        this.content = content;
    }
}

返回json结果:

{"id":"chatcmpl-6ps2CsxhVlF1HQkfOml9PQAyaK2qK","object":"chat.completion","created":1677820456,"model":"gpt-3.5-turbo-0301","usage":{"prompt_tokens":9,"completion_tokens":19,"total_tokens":28},"choices":[{"message":{"role":"assistant","content":"\n\n你好,有什么可以帮助您的吗?"},"finish_reason":"stop","index":0}]}

当然你也可以直接使用curl方式,打开终端输入,下面代码把YOUR_API_KEY替换成openai申请的key就行了:

curl https://api.openai.com/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -d '{
  "model": "gpt-3.5-turbo",
  "messages": [{"role": "user", "content": "Hello!"}]
}'

api的参数说明

  • model 模型模型列表
  • messages 消息,这是一个数组,可以传多个消息,每个消息必须有一个角色,参考链接
  • temperature 温度,控制结果的随机性,如果希望结果更有创意可以尝试 0.9,或者希望有固定结果可以尝试 0.0
  • top_p 一种替代温度采样的方法,称为核采样,其中模型考虑具有 top_p 概率质量的标记的结果。所以 0.1意味着只考虑构成前 10% 概率质量的标记。我们通常建议改变这个或temperature但不是两者。
  • n 默认为1,为每个输入消息生成多少个聊天完成选项。
  • stream 如果设置,将发送部分消息增量,就像在 ChatGPT 中一样。当令牌可用时,令牌将作为纯数据服务器发送事件data: [DONE]发送,流由消息终止。
  • stop API 将停止生成更多令牌的最多 4 个序列。
  • max_tokens 生成的答案允许的最大标记数。默认情况下,模型可以返回的标记数为(4096 - 提示标记)。
  • presence_penalty 惩罚 -2.0 和 2.0之间的数字。正值会根据到目前为止是否出现在文本中来惩罚新标记,从而增加模型谈论新主题的可能性。
  • frequency_penalty 频率惩罚 -2.0 和 2.0之间的数字。正值会根据新标记在文本中的现有频率对其进行惩罚,从而降低模型逐字重复同一行的可能性。
  • logit_bias 地图 接受一个 json 对象,该对象将标记(由标记器中的标记 ID 指定)映射到从 -100 到 100 的关联偏差值。从数学上讲,偏差会在采样之前添加到模型生成的 logits 中。确切的效果因模型而异,但 -1 和 1 之间的值应该会减少或增加选择的可能性;像 -100 或 100 这样的值应该导致相关令牌的禁止或独占选择。
  • user 用户的唯一标识符,可以帮助 OpenAI 监控和检测滥用行为

大部分参数都用不上,正常情况使用module、messages、user这三个参数就行了,我之前以为user是用来区分上下文的,后面发现为理解错了,user就是用来检测滥用行为,例如你被起诉了,可以通过user找到用户的记录,如果要区分上下文,那就messages传多个对象,但是这样的话产生的token就变多了,对上下文支持还不是很友好,期待chatgpt的继续更新。

参考官方链接:

ChatGPT和Whisper介绍: https://openai.com/blog/introducing-chatgpt-and-whisper-apis
聊天介绍:https://platform.openai.com/docs/guides/chat
聊天API调用:https://platform.openai.com/docs/guides/chat/introduction

Whisper

Whisper是我们于 2022 年 9 月开源的语音转文本模型,已获得开发者社区的极大赞誉,但也很难运行。我们现在已经通过我们的 API 提供了 large-v2 模型,它提供了方便的按需访问,价格为 0.006 美元/分钟。此外,与其他服务相比,我们高度优化的服务堆栈可确保更快的性能。

Whisper API 可通过我们的transcriptions(以源语言转录)或translations(转录成英文)端点使用,并接受多种格式(m4a、mp3、mp4、mpeg、mpga、wav、webm):

如果您只是想体验一下,微信搜索小程序:「Ai聊天写作机器人」

image

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK