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
即可。
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
,接着配置一些其他信息:
[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
的文件,并添加以下代码:
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.py
、config.toml
文件到同一目录后,打开命令行,cd到文件所在的目录,并运行以下命令就可以使用啦!
python chatgpt.py
同时在日志文件中,可以看到我们保存下来的对话记录:
5. 总结
总的来说命令行调用还是不太方便,有能力的大伙话可以研究一下chatbox或者是其他插件(浏览器、vscode之类)。这样用起来更舒服,生产力翻倍!
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!