对Openai Chat API的一些理解

目录

偷懒的编写一个API

如何让ChatGPT理解我们都在聊什么

付费和一些注意事项

Create chat completion


最近ChatGPT这么火,那必须来凑个热闹啊。

申请账户我就不多说了,懂得都懂。

偷懒的编写一个API

从ChatGPT的Chat演示看,他需要一个持续的长链接,所以我使用SignalR+JWT来走这个场景。

具体SignalR+JWT怎么做,就不多介绍了。

因为对接ChatGPT没有过类似经验,肯定优先看NuGet的库里面有没有开发好的内容。

首次尝试:

8e54f143b872422cbc126e7ae753c1f0.png

我第一次使用的是这个包,在实际尝试的时候,我没有找到对应的文档,并且他返回的内容要等全部内容返回后才出现,这个时间很长,有可能是因为我没有找到逐渐输出的这种方式。所以放弃没有继续使用。

第二次尝试:

089430ab190641f4b261882818a241a5.png

使用了OkGoDoIt 做的这个SDK,这个SDK调用起来很简单,只需要:

public class ChatGptHub : Hub{private readonly string sessionToken = "";public async Task Conversation(string msg){try{OpenAIAPI api = new(sessionToken);await foreach (var token in api.Completions.StreamCompletionEnumerableAsync(new CompletionRequest(msg,model: Model.DavinciText,max_tokens: 512,temperature: 0.9,top_p: 1,presencePenalty: 0.6,frequencyPenalty: 0))){await Clients.Caller.SendAsync("Reply", $"{token}");}}catch(Exception ex){await Clients.Caller.SendAsync("Reply", "服务器有点忙, 稍后再试试吧~");}}}

就可以使用了,它会通过Reply返回每一个字给到前端。

msg: 是我传递的带有上下文的信息,具体可以继续看下去;

max_tokens:是返回最多多少个字,一个英文字母是4个字节

temperature:是温度,他的值越高,AI越有感情。

top_p:我也没太明白是干嘛的,有兴趣你可以直接问ChatGPT

presencePenalty和frequencyPenalty:一种惩罚,如果给这个值设置超过0,会对模型返回结果进行惩罚。例如,如果希望减少生成语句中任何重复的词语或短语,则可以加大 "presencePenalty";如果希望减少生成语句中出现次数较多的重复词语或短语,则可以加大 "frequencyPenalty"。我在实际测试中没有发现特别大的变化,可能是因为中文的缘故。


如何让ChatGPT理解我们都在聊什么

effc1f8dea32479584034fcbe182f593.png

 它需要知道上下文信息,我们需要自己制造上下文给到CompletionRequest 的第一个参数。

我的做法是在界面中设置一个隐藏的textarea,然后给角色赋值,就像playground中一样:在上图的负载中可以看到,我问他天空的颜色,然后问他为什么会是其他颜色,这里如果按照文字逐行理解,他应该是无法分析出“为什么会有其他颜色?”这种问题。

那么传递数据的时候,我也要制造出这样的内容:

AI:我叫小娜
Human:你好啊。AI:很高兴认识你,请问我有什么可以帮你?
Human:你叫什么?AI:我叫小娜
Human:xxxxxxxx

否则他会随便说一个名字,是不是很尴尬?可以让这个textarea在初始化的时候直接写一个: (记得换行)

AI: 你好,我叫小娜,很高兴为您服务。
Human: 

这样,你下次下发到接口时,接口就知道他的名字叫“小娜”了。

上述方法同样有助于让AI知道你在说中文,带上上下文,他回答英文的概率变小了。

对接还是很简单的,就是这服务器反应速度略慢。


付费和一些注意事项

经过了一段时间的学些,此处有一些补充:

1. ChatGPT API的收费标准:在chat.openai.com中对话的Chat 是达芬奇(Davinci) 002 ,而在API中只能使用达芬奇003或者下图的这些机器人模型。

cbde0afbcef546fc9347f1cd5a6b0f5a.png

0.02美元一千个Token,那Token怎么理解呢?如果他说英文,一般一个英文词是一个Token,例如:What's your name. 是4个token,具体是多少个,可以去看一下官方的token计算器。中文就比较贵了一个字是1-2个Token。

2. Request:请求的收费标准是这样的:

Completions requests are billed based on the number of tokens sent in your prompt plus the number of tokens in the completion(s) returned by the API.

 

The best_of and n parameters may also impact costs. Because these parameters generate multiple completions per prompt, they act as multipliers on the number of tokens returned.

 

Your request may use up to num_tokens(prompt) + max_tokens * max(n, best_of) tokens, which will be billed at the per-engine rates outlined at the top of this page.

 

In the simplest case, if your prompt contains 10 tokens and you request a single 90 token completion from the davinci engine, your request will use 100 tokens and will cost $0.002.

 

You can limit costs by reducing prompt length or maximum response length, limiting usage of best_of/n, adding appropriate stop sequences, or using engines with lower per-token costs.

够贵的啊,他说如果我在prompt中传10个字,API返回了90个字,那就收100个token的费用。所以如果有必要,请谨慎使用上下文功能。

3. 这是一个命题作文:

如何让ChatGPT有一些个性来回复内容呢?下方是一个官方示例:

Marv is a chatbot that reluctantly answers questions with sarcastic responses:You: How many pounds are in a kilogram?
Marv: This again? There are 2.2 pounds in a kilogram. Please make a note of this.
You: What does HTML stand for?
Marv: Was Google too busy? Hypertext Markup Language. The T is for try to ask better questions in the future.
You: When did the first airplane fly?
Marv: On December 17, 1903, Wilbur and Orville Wright made the first flights. I wish they’d come and take me away.
You: What is the meaning of life?
Marv: I’m not sure. I’ll ask my friend Google.
You: Why is the sky blue?

马维就会不耐烦的回答问题,同样你可以说:

AI是一个聊天机器人,她只能用中文回答Human提出的问题。/* 以下是你说的内容 可以通过接口传递 */
Human: 你好
/* 以下是GPT回复的内容 */
AI: 你好,很高兴认识你.

说不明白, 直接上代码: 这里需要stopSequences ,它在回复Token的时候会不去回复指定的string[]内容. 可以减少Token输出量.

try{string basePormpt = $"AI是一个聊天机器人,她只能用中文回答Human提出的问题。\n\nHuman:{pormpt}\nAI:";OpenAIAPI api = new(sessionToken);await foreach (var token in api.Completions.StreamCompletionEnumerableAsync(new CompletionRequest(basePormpt,model: Model.DavinciText,max_tokens: 150,temperature: 0.5,top_p: 1,presencePenalty: 0.6,frequencyPenalty: 0, stopSequences:new string[] {"Human:","AI:" }))){await Clients.Caller.SendAsync("Reply", $"{token}");await Task.Delay(200);}}catch (Exception ex){await Clients.Caller.SendAsync("Reply", "服务器有点忙, 我正在重新尝试请求~");DebugLog.WriteLine($"ChatGptHub:错误内容: {ex}");}

Create chat completion

继续更新,在3月1日,Openai公布了GPT-3.5-turbo模型,这个模型的主要功能就是进行chat,并公布了新的api:对话完成。

这个接口收费更低一些,0.002美元1K个token,比达芬奇003便宜了10倍。但是这个模型只能用在chat中,不可以用来做文本完成。

根据我这段时间的分析,我认为之前的AI对话,是模型在完成后续的内容(文本完成),它并不像chat.openai.com那样是在直接对话。

新的这个api我看这个OkGoDoIt 还没有去做,在pull request中,有一位叫megalon的人做好了,正在提交测试,我决定等等。但是在等待之前,我可以通过postman,来进行一下初步的测试。以下是我的测试结果:

可选参数我都没有写,需要的朋友可以自行添加,详见对话完成 API说明

{"model": "gpt-3.5-turbo","stream":true,"messages": [{"role": "user", "content": "天空是什么颜色的?"}]
}

open ai streaming

这是一个使用streaming方式获得OpenAI Chat API的返回内容, 这个明显首次响应会很快, 他毕竟是一个字一个字的返回给我们。

open ai not streaming

这是不使用流,等待所有内容组织好之后返回给我们的,他的缺点就是返回速度很慢,但优点是,你可以知道他是一句话,可以使用TTS接口,将他读出来。

 

 

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

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

相关文章

借AI之势,打破创意与想象的边界

IMMENSE、36氪|作者 01 “未来是属于AI的” 3月2日,内容创作圈大地震。 就在3月2日凌晨,OpenAI宣布开放ChatGPT本体模型API,其价格为1k tokens/$0.002。也就是说,从这一天开始,任何企业都能让ChatGPT为自…

谷歌的Bard怎么样?

Bard是什么? ChatGPT: Bard可以指以下几种事物: Bard是一个英雄联盟(League of Legends)游戏中的角色名称,他是一个能够进行攻击和治疗的辅助英雄。 Bard是指中世纪欧洲的一类文学艺术家,主要从…

实测「360智脑」的真正实力:能否领跑国内百“模”大战?

ChatGPT 的发布,无疑掀起了一股“AI 技术”新浪潮。百度文心一言、华为盘古、商汤日日新、阿里通义千问、讯飞星火等众多大模型的接连问世,使得国内的“百模之战”进入了前所未有的白热化阶段。无论是各大互联网巨头,还是清华、复旦等知名高校…

不止Chat,GPT-4 将释放更大生产力

目录 1.对 ChatGPT 的巨大超越 2.与 ChatGPT 相同的技术路线 3.GPT-4 背后的强大阵容 4.开启多模态大模型时代 相比 ChatGPT 能力有大进化,多模态上有突破但不多。 近日,多模态大模型 GPT-4 震撼登场! GPT-4 能够接受图像和文本输入&am…

LoRA大模型加速微调和训练算法

ChatGPT带领着大模型像雨后春笋一般层出不穷,大家都对大模型微调跃跃欲试,现在咱们聊聊其中的常见的算法 1 LORA 低秩适应 理论 Lora( Low-Rank Adaotation),低秩自适应模型微调的方法,它冻结预训练模型的权重,并将…

数据规模缩小 200 倍!指令微调高效指导大模型学习

夕小瑶科技说 原创 作者 | 智商掉了一地、Python 最近大型语言模型(LLMs)的指令微调备受研究人员的关注,因为它可以开发 LLM 遵循指令的潜力,使其更加符合特定的任务需求。虽然指令微调(Instruction Tuning&#xff…

ChatGPT是否可以写出一篇论文

利用AI反哺教育和学术,在训练它写论文的过程中你学到的,比你自己写一篇论文学到的更多。让工具回归工具,让我们变成更好的我们! 第一步:现象确认 第二步:学术概念化 第三步:定位优质的学术资源 …

网页版即时通讯聊天工具,支持主流浏览器,无需安装即可使用

基于信贸通即时通讯系统开发的网页版即时通讯,无需安装支持主流浏览器在线直接运行。可以与电脑版本和手机版本互通。支持文本聊天,标签,图片,文件传输,还支持位置接收等。 特点: 1、简单快速的集成到自己…

Ims跟2/3G会议电话(Conference call)流程差异介绍

2/3G Conference call 合并(Merged)通话前,两路电话只能一路保持(Hold),一路通话(Active)。 主叫Merged操作,Hold的一路会变成Active,进入会议通话。 例如终端A跟C通话,再跟B通话,此时B就是Active状态,C从Active变成Hold状态。Merged进入会议通话后,C又从Hold变…

英文学术会议参会必读-青年学者会议和演讲英语指南

本书介绍 本书讨论并展示在学术会议上使用的英语话语的类型,并从多角度为准会议参与者提供了指导。它是根据参加的众多学术会议的研究结果和作者的观察结果而得出的,基于对应用语言学的公认研究方法,以及针对学生,ESP老师&#xf…

jitsi-meet 主持人退出会议后结束会议室(网页访问)

实现功能: 当主持人退出当前会议后,要求参与会议的其他人员也都退出当前会议。 修改代码: 修改后,通过make编译代码。 将css/all.css 和 libs文件夹下的文件上传至会议服务器的对应目录下。重启会议服务器即可。 /usr/share/ji…

chatgpt赋能python:Python根据IP地址获取地理位置

Python根据IP地址获取地理位置 随着全球化的发展,网络已经成为人们获取信息和交流的主要渠道。在网站的开发和运营中,了解访问者的地理位置和所处时区是非常重要的。这样可以更好地定位目标受众并制定针对性的营销策略。本文将介绍如何使用Python根据IP…

一文读懂信息量、信息熵、相对熵(KL散度)和交叉熵

在人工智能深度学习的应用中,损失函数绝对是模型网络学习质量的关键。我们使用损失函数来表示的真实值与预测值之间的距离,进而指导模型的收敛方向。对于标量来说,我们能够很容易想到使用方差来描述误差。那么,如何表示向量之间的…

面板数据进行熵值法

面板数据熵值法分析流程如下: 一、案例背景 当前有9家公司连续5年(2018-2022年)的财务指标数据,想要通过这份数据,确定各个财务指标的权重。熵值法根据指标离散程度确定赋权大小,客观公正准确度高。本次收…

跨数据中心下的 Kafka 高可用架构分析

导语 本文介绍了 Kafka 跨数据中心的两种部署方式,简要分析两种方式下的不同架构以及优缺点,对这些架构可能碰到的问题也提供了一些解决思路;同时也说明了 Kafka 跨数据中心部署的社区解决方案和商业化解决方案。 背景 Kafka 作为世界上最…

分布式的流处理平台Kafka

目录: 一、简介二、基本概念三、生产者使用详解四、发送消息五、消费者代码示例 一、简介 ApacheKafka 是一个分布式的流处理平台。它具有以下特点: 支持消息的发布和订阅,类似于 RabbtMQ、ActiveMQ 等消息队列;支持数据实时处理…

熵_相对熵_散度

1 信息量 意外越大,越不可能发生,概率就越小,信息量也就越大,也就是信息越多。比如说“今天肯定会天黑”,实现概率100%,说了和没说差不多,信息量就是0。 详见:2. 信息量 1.1 公式 …

流批一体计算引擎-4-[Flink]消费kafka实时数据

Python3.6.9 Flink 1.15.2消费Kafaka Topic PyFlink基础应用之kafka 通过PyFlink作业处理Kafka数据 1 环境准备 1.1 启动kafka (1)启动zookeeper zkServer.sh start(2)启动kafka cd /usr/local/kafka/ nohup ./bin/kafka-server-start.sh ./config/server.properties >&g…

【仿牛客网笔记】 Kafka,构建TB级异步消息系统——发送系统通知、显示系统通知

定义时间主题 判断消息内容是否为空,消息格式是否错误。 系统通知是后台发给用户 发送站内通知 构造一个Message对象 设置站内的值 判断是否有数据,然后放入到message中 对CommentController、LikeController、FollowController进行处理。 需要注入…

kafka集群压测与优化

影响kafka集群性能的因数有多个,网络带宽、cpu、内存、磁盘读写速度、副本数、分区数、broker数量、内存缓存等因素都会影响kafka集群的性能 1.优化kafka集群配置 server.properties配置文件优化 num.network.threads4 num.io.threads4 socket.send.buffer.bytes…