前言
我所遇到的问题相信大家也都遇到了,有时候与 chatGPT 对话时经常出现 1 小时内请求过多的情况,心情不好就不跟你聊了。
于是
我为了测试 text 模型到底怎么样,有没有大家说的那么神奇,我与 GPT 的交互陷入了一个死循环。原因是我想让它帮我写用 tg bot 接入 OpenAI,然后用和 bot 交互,你猜怎么着,GPT 模型不支持 API 调用,目前只能用 post 请求,这就把 GPT 给难坏了,4 小时这代码也没写明白,一个劲儿说我请求次数太多!最后我给它一个 60 分吧,感觉嗷,用 AI 取代程序员还有待时日。
本文内容一共分为两个部分,第一部分是在一台 linux 服务器,直接用 python 命令行的方式与最新的模型 Davinci-003 交互;第二部分是与已经接入 API 的 telegram bot 交互,实现的方法也很简单,主要命令和代码如下:
第一部分
首先我们需要在服务器上安装 pip 和 openai 库:
apt update
apt install pip vim -y
pip install openai
然后,需要申请 OpenAI 的 api,在这里申请:https://platform.openai.com/account/api-keys
顺便说一下,申请 api 需要先绑定信用卡,不支持中国卡,哇咔咔!推荐使用:https://iweec.com/709.html
绑卡后两个月送 $18,随便造;参考费用是 750 个单词算 1000tokens,费用 $0.02。为了测试不超标,我把消费限制在每月最多 $1。设置限额的方法就是在 https://platform.openai.com/account/billing/limits 看条件设置吧!
然后,就是在 vps 上创建 main.py, 内容如下:
import openai
openai.api_key = "这里是你申请到的 API-key"
def chat_with_gpt3(prompt):
response = openai.Completion.create(
engine="text-davinci-003",
prompt=prompt,
max_tokens=104,
n=1,
stop=None,
temperature=0.5,
)
message = response.choices[0].text
return message
def main():
while True:
message = input("You:")
response_message = chat_with_gpt3(message)
print(f"Bot: {response_message}")
if __name__ == "__main__":
main()
最后执行 python3 chat.py,即可实现交互问答:
第二部分
首先还是要申请 OpenAI 的 apikey,方法上面说了;
然后这个 vps 也必须是海外的嗷,因为我们要用 bot;
apt update
apt install pip vim -y
pip install openai aiogram
下一步就是新建 main.py,内容如下:
import openai
from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor
token = '这里是你的 bot token'
openai.api_key = '这里是你的 api-key'
bot = Bot(token)
dp = Dispatcher(bot)
@dp.message_handler()
async def send(message : types.Message):
response = openai.Completion.create(
model="text-davinci-003",
prompt=message.text,
temperature=0.9,
max_tokens=1000,
top_p=1.0,
frequency_penalty=0.0,
presence_penalty=0.6,
stop=["You:"]
)
await message.answer(response['choices'][0]['text'])
executor.start_polling(dp, skip_updates=True)
最后,就是执行 python3 main.py,提示:Updates were skipped successfully. 就可以到你的 bot 当中,跟他聊一下!
小结
切记:不要暴露 API 和 token!!
我在上面用例当中引用的 text-davinci-003 模型,虽然快,但是有点傻: