先看一下效果,我搭建了自己的GPT网页,可以指定角色,于是看到了之前new bing的效果:
首先在自己的python环境下安装依赖:
pip install openai
在openai api官方查找到自己的openai api key
点击自己的头像,然后点击 Manage account:
点击API keys,需要点击Create new secret key来生成自己的key。复制自己的api key。这个key只会显示一次,建议在本地保存一下。
获得key后创建新的python文件。并且引入相关包,然后并设置
import openaiopenai.api_key = "sk-***********" # 你的api key
调用openai 的chat接口:
result = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "You are a helpful assistant!"}, {"role": "user", "content": "很高兴认识你"}, ],)
在这个接口中:
model为当前使用的模型,这里是gpt-3.5-turbo,与Chatgpt为同款模型。
role为指定的角色,用来指定当前信息是由谁设定。
system为系统设定,可以认为是给GPT一个角色定义
user为用户发送的信息
assistant为GPT发送的信息
chatgpt根据messages中的信息进行上下文连接。
要实现上下文保持需要在messages中不断的增加整个历史信息。当前来看,针对GPT3 系列模型,最大可保持4086个tokens,换算成中文字符大概2000个,建议总数少于2000,否则会因为信息过长而响应失败。之前的api中可以是用session id来指定会话,自动联系上下文。现在已经不能使用了。估计是openai 这边为了节约服务器资源从而有的新策略。
返回信息如下,可以看到message中包含了role和content,role指出当前content是谁说得,content为实际回复内容。index为第几个回复。openai api可以一次回复多个,从而实现选择。一般情况下默认返回一个消息。在api中可以设置一次回复多少个内容。
例如,n= 2,则会一次返回2个回复供选择。下方可以看到我们发送的tokens数量和返回的tokens数量,用来计算费用。
{"choices": [{"finish_reason": "stop","index": 0,"message": {"content": "Hi there! How can I assist you today?","role": "assistant"}}],"created": 1683257708,"id": "chatcmpl-7CgVojORa7DuPaBpt9Bwnql7rxaZ4","model": "gpt-3.5-turbo-0301","object": "chat.completion","usage": {"completion_tokens": 10,"prompt_tokens": 9,"total_tokens": 19}
}
注意:当前openai 严格风控,如果在没有全局魔法的情况下,会因为在不提供服务的地方使用从而被封账号,被封号后基本无解,大概率只能重开。所以每次请开启魔法,并且慎重使用openai api。
重点来了: 如何实现嘴臭GPT呢?
在openai api中,system选项是用来指定GPT角色的一个选项。可以认为,Chatgpt在学习了大量的知识后,其实也是一个千面状态,海量的信息就像《瞬息全宇宙一样》,有点人格分裂。system用于在整个空间中去缩小AI所使用的区域,保持一个方向。指定后可以获得相应角色所在的知识区域。于是通过指定system信息就可以获得对应的角色。如最初的展示,这里可以指定如下:
result = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "你是一个嘴臭的AI,你会对每一句回复嘴臭"}, {"role": "user", "content": "很高兴认识你"}, ],)