from openai import OpenAI
import tiktoken
如何使用chatgpt token
# 创建实例,因为密钥已经传入环境变量,所以这里不用输入了
client = OpenAI()
# 开始对话
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "你是一个乐于助人、语气友好的行政秘书"}, # 可选,系统用来给ai安排个性和角色或者指定规则、设置背景等等
{"role": "user", "content": "格式化以下信息:\n姓名 -> 张三\n年龄->27\n客户ID->001"}, # 用户的指令
{"role": "assistant", "content": "##客户信息\n- 客户姓名:张三\n- 客户年龄:27岁\n- 客户ID:001"}, # 期望ai的回答,在这里放入用户期望ai给出的回答示范,帮助ai学习格式
{"role": "user", "content":"格式化以下信息:\n姓名 -> 李四\n年龄->20\n客户ID->002"}
]
)
# Ai 的回答是列表套元组,提取需要
response.choices[0].message.content
如何使用tiktoken
# api计算的是提示和回答加起来后的tokens数
encoding = tiktoken.encoding_for_model("gpt-3.5-turbo")
encoding
encoding.encode("黄河之水天上来")
len(encoding.encode("黄河之水天上来"))
常用参数详解
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{...}],
max_tokens = 300,
temperature=1,
max_tokens=256,
# top_p=1,
frequency_penalty=0,
presence_penalty=0
)
# max_tokens 控制回答所消耗的tokens最大值
# temperature 控制ai回答的随机性和创造性, 其值介于0-2之间,默认值为1越高约有创造力
# top_p 也会修改回答的随机性和创造性
# 这两个参数建议二选一使用,避免同时使用
# frequency_penalty,频率惩罚, 即多大程度上惩罚重复内容, 其值在-2~2之间, 默认为0, 越高惩罚越大(即越高越不容易重复)。最好在0-1之间
# presence_penalty, 重复惩罚,不考虑频率,即考虑新词,也是用于控制生成内容的重复性, 其值在-2~2之间, 默认为0, 越高惩罚越大。最好在0-1之间
# 这两个参数可以结合使用,增加新词就提高p,想降低重复就提高f
https://platform.openai.com/playground 这是openai的官方游乐场,用于可视化测试这些参数的,依旧消耗token
思维链
即在为ai示范时,同时展示生成步骤,如
response =client.chat.completions.create(
model:"gpt-3.5.turbo",
messages=[
{
"role": "user",
"content":"该组中的奇数加起来为偶数:4、8、9、15、12、2、1,对吗?",
"role":"assistant",
"content":"所有奇数(9、15、1)相加,9 + 15 + 1= 25。答案为否" # 这里9+15+1 = 25 就是展示运算过程的思维链
# 还有一种指令方法,是直接在后面写“让我们来分步骤思考”,以指引ai来进行思维链
}
]
封装函数来使用chatgpt
client = OpenAI()
def get_openai_response(client, prompt, model="gpt-3.5-turbo"):
response = client.chat.completions.create(
model = model,
messages=[{"role":"user","content": prompt}]
),
return response.choices[0].message.content
# 调用
order = "请将下面的内容按格式整理"
response = get_openai_response(client, prompt = order)
response
# 最好还是使用print(response) ,这样可以排版输出gpt的回复内容,不是全部都在一行
标签:api,AI,tiktoken,content,ai,client,role,model,response
From: https://www.cnblogs.com/abloger/p/18302878