如何使用chatgpt的api 使用Python调用ChatGPT API

默认分类2个月前发布 admin
4,496 0
ChatGPT国内版

当前使用gpt-3.5和gpt-4等语言大模型,提供了强大的文本交互功能。用户也可以使用gpt-3.5或gpt-4提供的API接口构建自己的应用。本文简单的介绍一下使用调用 API时的一些知识。

安装库

库提供了方便的操作的接口,使用pip命令安装它

pip install --upgrade openai

使用库调用 API

import openai
openai.api_key = "你的openai key"
MODEL = "gpt-3.5-turbo"
response = openai.ChatCompletion.create(
                    model=MODEL,
                    messages=[
                        {"role": "system", "content": "你是一个编程助手"},
                        {"role": "user", "content": "你好."},
                        {"role": "assistant", "content": "有什么能帮你的?"},
                        {"role": "user", "content": "我想学习NLP自然语言处理"},
                    ],
                    temperature=0,
                    n=1,
                    stream=False
)
result=response["choices"][0]["message"]["content"]
print(result)

你需要使用..函数调用 API,这和之前调用旧模型的方式有一些差别,主要参数介绍如下:

页面

创建个人key

role:信息的角色,可以是,user,三种角色之一,其中 用于定义接口的行为,比如「你是一个写作助手」

:提问的消息内容

例如:

=[

{“role”: “”, “”: “你是一个编程助手”},

如何使用chatgpt的api 使用Python调用ChatGPT API

{“role”: “user”, “”: “你好.”},

{“role”: “”, “”: “有什么能帮你的?”},

{“role”: “user”, “”: “我想学习NLP自然语言处理”},

],

每次提交的消息是本次对话的消息上下文,这样gpt就可以有历史知识,具体提交多少历史上下文,编程时可以灵活指定,上下文越多意味着费用更高,响应速度更慢。

一般来说一次会话列表中一般是以角色消息开始(可选非必须),定义gpt的行为,然后在以user和角色消息交替循环作为历史上下文。

如果设置为True,那么gpt的响应会分批返回,在官方网页体验中采用的是这种方 式,形成了打字机的效果。

此外..还有如下的可选参数

1. (可选参数):生成的响应中最多包含的token数。

2. stop(可选参数):指定生成文本时要停止的字符串或单词。这可以是单个字符串,也可以是字符串列表。例如,如果您想要停止生成文本、并在获得一个问候后停止响应,您可以将其设置为“hello”。

3. (可选参数):用于控制生成的响应中重复出现单次的惩罚系数,该系数越高则重复出现单次的概率越低。默认值为0。

4. (可选参数):用于控制生成的响应中对不常见单次的惩罚系数,该系数越高则出现不常见单次的概率越低。默认值为0。

响应数据的格式如下所示:

{
"choices": [{
"finish_reason": "stop",
"index": 0,
"message": {
"content": "Orange who?",
"role": "assistant"
}}],
"created": 1679718435,
"id": "chatcmpl-6xpmlDodtW6RwiaMaC1zhLsR8Y1D3",
"model": "gpt-3.5-turbo-0301",
"object": "chat.completion",
"usage": {
"completion_tokens": 3,
"prompt_tokens": 39,
"total_tokens": 42
}}

响应数据主要参数解释如下:

id:本次请求的ID

如何使用chatgpt的api 使用Python调用ChatGPT API

usage:本地调用请求的token数,响应的token数,本次会话总的token数

:回答信息的结果列表,取决请求参数n,默认请求参数n=1,列表中默认一个回答,数组中每个回答的参数包括如下内容:

:回答的消息内容,包括role和两个角色,gpt的回答role角色值是

:模型返回的原因,例如stop,,正常返回值是stop,超过最大 表示信息被截断,返回

index:本条回答在消息列表中的次序

如果你要提取默认一个回答的内容使用如下的代码

response['choices'][0]['message']['content']

角色信息

角色信息用来设置gpt不同的表现行为和个性,按照官方的介绍gpt3.5对角色设置的信息,并不敏感,建议将重要的信息放在user角色提问信息中。而在gpt4中角色信息有更重要的影响。

例如:

response = openai.ChatCompletion.create(
              model=MODEL,
              messages=[
              {"role": "system", "content": "你是你个语音助手,请每次用简短的话回答问题"},
              {"role": "user", "content": "请告诉我如何成为一个超级英雄"},
              ])
print(response["choices"][0]["message"]["content"])

鼓励模型

在某些情况下在模型给出你响应信息后,对GPT说出”你的回答很棒“之类鼓励的话,会提高模型回答的准确性,难道gpt真的有感情吗。

计算

对gpt的提问会被转化为token序列,token的数量会影响费用,响应速度,和回答的字数。在gpt3.5中每次问答最大的token数量是4096个,而在gpt4中是8192个,注意这里的最大数量指的请求和回答的token的总数。这意味如果你的提问的问题的token数量非常大,会极大的影响模型回答的字数。

def num_tokens_from_messages(messages, model="gpt-3.5-turbo-0301"):
    """Returns the number of tokens used by a list of messages."""
    try:
        encoding = tiktoken.encoding_for_model(model)
    except KeyError:
        print("Warning: model not found. Using cl100k_base encoding.")
        encoding = tiktoken.get_encoding("cl100k_base")
    if model == "gpt-3.5-turbo":
        print("Warning: gpt-3.5-turbo may change over time. Returning num tokens assuming gpt-3.5-turbo-0301.")
        return num_tokens_from_messages(messages, model="gpt-3.5-turbo-0301")
    elif model == "gpt-4":
        print("Warning: gpt-4 may change over time. Returning num tokens assuming gpt-4-0314.")
        return num_tokens_from_messages(messages, model="gpt-4-0314")
    elif model == "gpt-3.5-turbo-0301":
        tokens_per_message = 4  # every message follows {role/name}n{content}n
        tokens_per_name = -1  # if there's a name, the role is omitted
    elif model == "gpt-4-0314":
        tokens_per_message = 3
        tokens_per_name = 1
    else:
        raise NotImplementedError(f"""num_tokens_from_messages() is not implemented for model {model}. See https://github.com/openai/openai-python/blob/main/chatml.md for information on how messages are converted to tokens.""")
    num_tokens = 0
    for message in messages:
        num_tokens += tokens_per_message
        for key, value in message.items():
            num_tokens += len(encoding.encode(value))
            if key == "name":
                num_tokens += tokens_per_name
    num_tokens += 3  # every reply is primed with assistant
    return num_tokens

323AI导航网发布

© 版权声明
广告也精彩

相关文章

暂无评论

暂无评论...