背景
ChatGPT 时代,开发新的 AI 应用的门槛大大降低了,你无需要去研究机器学习,深度学习等等模型,还有去准备GPU硬件,再新的趋势下,伴随着 GPT-3、Stable Diffusion 这样预训练好的大型基础模型的出现,以及这些模型的能力通过开放 API 的形式提供出来,即使没有任何机器学习的理论知识,你只需要一两天时间,就能做出一个能解决实际问题的 AI 应用。
API
大型语言模型的接口其实非常简单,像 OpenAI 就只提供了 Complete 和 Embedding 两个接口,其中,Complete 可以让模型根据你的输入进行自动续写,Embedding 可以将你输入的文本转化成向量。
业务描述
以前实现聊天机器需要套模板。这个的缺点,就是每次的回答都一模一样。当然,我们可以设计多个模版轮换着表达相同的意思,但是最多也就是三四个模版,整体的体验还是相当呆板。
有了 GPT 这样的生成式的语言模型,我们就可以让 AI 自动根据我们的需求去写文案了。只要把我们的需求提给 Open AI 提供的 Completion 接口,他就会自动为我们写出这样一段文字。
ChatGPT 参数
Open AI 提供的 Completion 接口 ,参数列表:
- engine,OpenAI 使用哪一个引擎,选择text-davinci-003
- prompt,输入的提示语
- max_tokens,调用生成的内容允许的最大 token 数量,token 是分词之后的一个字符序列里的一个单元。
- n,AI 给你生成几条内容供你选择,在这样自动生成客服内容的场景里,我们当然设置成 1。
- stop,模型输出的内容在遇到什么内容的时候就停下来。
实现
import logging
import openai
from telegram import Update
from telegram.ext import filters, MessageHandler, ApplicationBuilder, CommandHandler, ContextTypes
# 设置日志记录
logging.basicConfig(
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
level=logging.INFO)
# 设置 OpenAI API key
openai.api_key = "你的Open AI Key"
# 定义函数,处理 "/start" 命令
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
await context.bot.send_message(chat_id=update.effective_chat.id, text="我是一个机器人,请和我聊天吧!")
# 定义函数,使用 OpenAI 生成回复
async def generate_response(update: Update, context: ContextTypes.DEFAULT_TYPE):
# 获取用户的消息
message = update.message.text
# 使用 OpenAI 生成回复
response = openai.Completion.create(
engine="text-davinci-003",
prompt=f"{message}\n",
max_tokens=128,
n=1,
stop=None,
temperature=0.5,
).choices[0].text
# 将回复发送给用户
await context.bot.send_message(chat_id=update.effective_chat.id, text=response)
# 定义函数,处理未知命令
async def unknown(update: Update, context: ContextTypes.DEFAULT_TYPE):
await context.bot.send_message(chat_id=update.effective_chat.id, text="抱歉,我不明白您的命令。")
if __name__ == '__main__':
# 设置 Telegram 机器人
application = ApplicationBuilder().token('你的Telegram Token').build()
# 添加 "/start" 命令处理器
start_handler = CommandHandler('start', start)
application.add_handler(start_handler)
# 添加消息处理器,使用 OpenAI 生成回复
generate_response_handler = MessageHandler(filters.TEXT & (~filters.COMMAND), generate_response)
application.add_handler(generate_response_handler)
# 添加未知命令处理器
unknown_handler = MessageHandler(filters.COMMAND, unknown)
application.add_handler(unknown_handler)
# 启动机器人,并等待消息的到来
application.run_polling()