ChatGPT实践-构建简单的AI聊天机器人(python)

发布于:2023-09-16 ⋅ 阅读:(68) ⋅ 点赞:(0)

本文指导如何通过调用OpenAI的API完成一个简单的聊天机器人。

背景知识

API介绍

我们可以通过任何语言的 HTTP 请求、官方 Python 、 Node.js 库或社区维护的库与 ChatGPT的API 进行交互,官方API文档:

API Reference - OpenAI API (可自行去查看)

所以python是有现成包用的,会比调用原始的HTTP请求容易一些,python包:

openai/openai-python: The official Python library for the OpenAI API

本文使用Python编程语言完成一个简单的AI聊天机器人。

一次简单的调用

如果要调用ChatGPT的API其实非常简单,只需要几行代码,像下面这样:

import openai

openai.api_key = "替换为你的key"
openai.api_base = "如果走绕路这里填写对应的服务商的网址"

response = openai.ChatCompletion.create(
    model='gpt-3.5-turbo',
    messages=[
        {'role': 'user', 'content': 'hello.'},
    ],
    temperature=1,  # 控制模型输出的随机程度
)
# 打印ChatGPT的回复
print(response.choices[0].message["content"])

运行后可以看到如下打印:

Hello! How can I assist you today?

一次调用就完成了。

几种消息的介绍

上面的messages参数中有一个role关键字,它有3中类型,对应3中消息,这里介绍一下:

系统消息

在ChatGPT的客户端聊天窗口是看不到系统消息的,这个是API中才有的,主要是给开发人员使用的。

系统消息主要用来设置聊天机器人的角色和行为,相当于给它一些默认的指令。

用户消息

就是你在聊天窗口发的内容,称为「用户消息」,

助手消息

就是ChatGPT发给你的内容,称为「助手消息」。

代码

来看看一个简单的完成的AI聊天机器人的代码:

import openai

openai.api_key = "替换为你的"
openai.api_base = "如果走绕路这里填写对应的服务的网址"

def get_completion_from_messages(messages, model="gpt-3.5-turbo", temperature=0):
    response = openai.ChatCompletion.create(
        model=model,
        messages=messages,
        temperature=temperature,  # 控制模型输出的随机程度
    )
    return response.choices[0].message["content"]

context = [
    # 上下文中定义一个系统角色,告诉ChatGPT他是一个友好的助手,后面的回复它都会是一个非常友好的态度
    {'role': 'system', 'content': 'You are a friendly assistant.'},
]

def chat_to_bot(prompt):
    # 我们发送的信息角色是user
    context.append({'role': 'user', 'content': f"{prompt}"})
    response = get_completion_from_messages(context)
    # 注意这里,需要将先前的内容一并发给ChatGPT
    # ChatGPT返回回来得消息的角色是assistant
    context.append({'role': 'assistant', 'content': f"{response}"})
    return f'Bot: {response}'

if __name__ == '__main__':
    while True:
        user_input = input("You: ")
        print(chat_to_bot(user_input))

代码解释:

  • 定义了一个get_completion_from_messages函数,该函数向 OpenAI API 发送一系列消息并获取响应。 messages 参数是消息对象的列表,每个对象都有一个“角色”(可以是“系统”、“用户”或“助理”)和“内容”(消息的内容) 。 “温度”参数控制模型输出的随机性。

  • context 定义了对话的初始上下文,告诉模型它正在扮演友好助手的角色。

  • chat_to_bot此函数向聊天机器人发送消息并获取其响应。它将用户的消息和机器人的响应添加到对话上下文中,因此每次对话后都会更新上下文。

  • 主循环中,它反复要求用户输入,将该输入发送到聊天机器人,并打印聊天机器人的响应。对话无限期地继续,直到程序被手动停止。

运行的结果是这样的:

You: hi
Bot: Hello! How can I assist you today?
You: What did I say in the previous sentence?
Bot: In the previous sentence, you said "hi".
You:

可以看到它知道上下文,可以一直对话下去。

注意:每一次API调用都是独立的,要让机器人理解上下文(context),那么每次API调用都需要将之前的聊天内容全部发过去。可以看到,当对话越来越长的时候,对token的消耗非常大,这是LLM的一个特点。

本文含有隐藏内容,请 开通VIP 后查看