【零基础】Python开发调用 ChatGPT API 的命令行工具

2023-11-14 16:24:32 浏览数 (1)

0. 前言

本文章针对python初学者,介绍如何使用命令行调用ChatGPT API来实现最基本的聊天功能。

1. 前期准备

需要准备的东西比较简单:

  • python3环境
  • OpenAI API Key

1.1 python3环境

python3环境对于初学者来说应该都很熟练了,我个人推荐用anaconda3来安装python3环境。以anaconda3为例,配置OpenAI所需要的基本环境。如果不知道anaconda3如何按照python可以网上随便搜一篇教程哈。

接着在自己的虚拟环境中,安装openai库:使用pip install openai命令。安装toml库:使用pip install toml命令(后面配置文件会用到)。

1.2 OpenAI API Key

如果全部符合以下条件,可以申请OpenAI官方的API,官方API有一定免费的额度:

  • 访问国外网站,且必须是美丽国或盟友的节点,并且在后续需要一直使用
  • 拥有一个美丽国或盟友的可以接受短信的手机号注册账号用(或者愿意花美刀网上去买)
  • 拥有一个海外不会被ban的邮箱账号(OpenAI禁掉了很多邮箱)
  • 愿意花钱充值续费(VISA外币信用卡之类的)

如果以上条件不符合,那目光可以转向这里:

https://github.com/chatanywhere/GPT_API_free/tree/main

github上的免费项目,只需要用一个注册1个月以上的github账号就可以免费使用,并且不需要访问国外网站,不需要注册OpenAI账号。但是需要注意的是免费API Key限制60请求/小时/IP&Key调用频率。正常个人使用完全不是问题。

点击这里获取"sk-"开头的API Key,并保存下来。

2. 调用API核心代码介绍

这章简单介绍一下核心API的用法,不想看的同学直接进入第三章复制粘贴~

这里需要注意的是,由于我们使用的是免费的API,因此需要把刚才获取的API Key配置到openai.api_key里面,并配置openai.api_base"https://api.chatanywhere.com.cn/v1"。如果是使用官方的API,只需要配置openai.api_key即可。

代码语言:javascript复制
import openai
openai.api_key = "sk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
openai.api_base = "https://api.chatanywhere.com.cn/v1"

response = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[
        {"role": "system", "content": "你是一个专业的生物老师,可以帮助解答生物问题"},
        {"role": "user", "content": "你是谁"},
    ]
)
print(response["choices"][0]["message"]["content"])

调用GPT的核心代码为openai.ChatCompletion.create

  • model可以更换为其他的模型,可以在官网获取信息,gpt-3.5-turbo是我们常说的ChatGPT。
  • messages为历史的对话信息。
    • "role": "system"可以给模型预设,比如我这里预设是生物老师
    • "role": "user"是你自己说的话
    • "role": "assistant"为GPT回复的消息
  • temperature:用于控制模型生成文本时的随机性。较高的值(如 1.0)会导致模型生成更多样化、更随机的文本。较低的值(如 0.1)会让模型生成更确定、更接近训练数据的文本。默认值为0.7。

调用之后的返回值是一个dict,直接使用response["choices"][0]["message"]["content"]即可获取结果。其他一些参数以及使用方法,这里不过多的做介绍,强烈推荐看官方的API文档:

https://platform.openai.com/docs/api-reference/introduction https://platform.openai.com/docs/guides/gpt

3. 编写代码

3.1 创建配置文件

本文这里使用Toml作为配置文件,不熟悉的可以参考【之前的文章】,或者自行更换为yaml、json等。

创建一个名为config.toml的配置文件,并将1.2的API Key替换sk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX,接着配置一些其他信息:

代码语言:javascript复制
[global]
api_key = "sk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
api_base = "https://api.chatanywhere.com.cn/v1"
model = "gpt-3.5-turbo"

[settings]
system_message = "你是一个专业的生物老师,可以帮助解答生物问题"
temperature = 0.7

[logging]
logfile = "chatgpt_his.log"

3.2 编写完整脚本

接下来,将编写一个简单的Python脚本,用于调用ChatGPT API并在命令行中与其进行交互。

首先,一个名为chatgpt.py的文件,并添加以下代码:

代码语言:javascript复制
import openai
import sys
import toml
import logging

def load_config():
    config = toml.load("config.toml")
    return config["global"], config["settings"], config["logging"]

def chat(api_key, api_base, model, messages, temperature):
    openai.api_key = api_key
    openai.api_base = api_base

    try:
        response = openai.ChatCompletion.create(
            model=model,
            messages=messages,
            temperature=temperature
        )
    except Exception as e:
        logging.error(f"API请求失败:{e}")
        return "抱歉,暂时无法回答您的问题。"

    return response.choices[0].message.content.strip()

def setup_logging(logfile):
    logging.basicConfig(filename=logfile, level=logging.INFO, format='%(asctime)s [%(levelname)s] - %(message)s')

if __name__ == '__main__':
    global_config, settings_config, logging_config = load_config()

    api_key = global_config["api_key"]
    api_base = global_config["api_base"]
    model = global_config["model"]
    system_message = settings_config["system_message"]
    temperature = settings_config["temperature"]
    logfile = logging_config["logfile"]

    setup_logging(logfile)

    messages = [{"role": "system", "content": system_message}]

    print("与ChatGPT进行多轮对话。输入'exit'退出对话。")
    while True:
        prompt = input('请输入您的问题:')

        if prompt.lower() == 'exit':
            break

        messages.append({"role": "user", "content": prompt})
        response = chat(api_key, api_base, model, messages, temperature)
        messages.append({"role": "assistant", "content": response})

        print(f'ChatGPT 回答:{response}')
        logging.info(f"问题:{prompt},回答:{response}")

在代码中,通过load_config函数从TOML配置文件中加载API Key以及各种配置信息。

接着使用chat函数调用ChatGPT API。使用openai.ChatCompletion.create()方法发送请求。

__main__部分,使用while循环进行多轮对话。将问题和ChatGPT的回答添加到messages列表中,并将整个对话历史作为输入发送给ChatGPT API。这样可以使ChatGPT了解整个对话上下文。

最后将历史对话记录保存在chatgpt_his.log日志文件中。

4. 运行命令行工具

保存chatgpt.pyconfig.toml文件到同一目录后,打开命令行,cd到文件所在的目录,并运行以下命令就可以使用啦!

代码语言:javascript复制
python chatgpt.py

同时在日志文件中,可以看到我们保存下来的对话记录:

5. 总结

总的来说命令行调用还是不太方便,有能力的大伙话可以研究一下chatbox或者是其他插件(浏览器、vscode之类)。这样用起来更舒服,生产力翻倍!

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞