跳到主要内容

本地编写 Chatbot

5 分钟教你用 Python 在本地编写 Chatbot

1. 项目概述

本项目是一个简单的对话系统,利用 PerfXCloud 的 API 进行交互。用户可以通过命令行与 AI 聊天,对话历史会被存储以便进行上下文管理。代码实现了 API 调用、流式响应处理以及对话历史管理。

2. 安装必要的库

在开始项目之前,需要安装 openai 库。你可以使用以下命令来安装: Bash

pip install openai

3. 导入库

在 Python 脚本中,需要导入必要的库和模块。以下是导入库的 Python 代码:

from openai import OpenAI

4. 初始化 PerfXCloud 客户端

首先,需要初始化 PerfXCloud 客户端,需要提供 URL 和 API 密钥。以下是初始化客户端的 Python 代码:

client = OpenAI(
base_url='https://cloud.perfxlab.cn/v1',
api_key='sk-WS8iKdZVBNpSQmXXXXXXX27615114727Be134338B0519378'
)

5. 主函数及对话管理

在主函数中,首先定义一个空列表来存储对话历史。然后进入一个无限循环,用于持续接收用户输入并与 AI 进行对话。以下是完整的 Python 代码及解释:

def main(): # 开始对话,并存储对话历史,以便进行上下文管理
conversation_history = []

while True:
# 获取用户输入
user_input = input("您: ")
# 将用户输入添加到对话历史
conversation_history.append({"role": "user", "content": user_input})

# 调用API进行对话
stream = client.chat.completions.create(
model="Qwen1.5-110B-Chat-GPTQ-Int4",
messages=conversation_history,
temperature=1,
max_tokens=512,
n=1,
presence_penalty=0,
frequency_penalty=0,
stream=True,
)

print("AI: ", end="")
assistants_response = ""
for chunk in stream:
if chunk.choices[0].delta.content is not None:
assistants_response += chunk.choices[0].delta.content
print(chunk.choices[0].delta.content, end="")

# 将机器人回复添加到对话历史
conversation_history.append({"role": "assistant", "content": assistants_response})

# 检查是否结束对话
if "再见" in user_input or "退出" in user_input:
break
if __name__ == "__main__":
main()

Python 代码解释

  1. 初始化对话历史:
  conversation_history = []

用一个列表来存储对话的历史记录,以便在后续的对话中提供上下文。

  1. 获取用户输入:
user_input = input("您: ")

使用 input()函数获取用户的输入。

  1. 更新对话历史:
conversation_history.append({"role": "user", "content": user_input})

将用户输入添加到对话历史中。

  1. 调用 PerfXCloud API:
stream = client.chat.completions.create(
model="Qwen1.5-110B-Chat-GPTQ-Int4",
messages=conversation_history,
temperature=1,
max_tokens=512,
n=1,
presence_penalty=0,
frequency_penalty=0,
stream=True,
)

使用 PerfXCloud 的 API 进行对话,参数包括模型名称、对话历史、生成文本的温度、最大 tokens 数等。

  1. 处理流式响应:
    assistants_response = ""
for chunk in stream:
if chunk.choices[0].delta.content is not None:
assistants_response += chunk.choices[0].delta.content
print(chunk.choices[0].delta.content, end="")

处理流式响应,将每一部分的响应内容逐步打印并拼接成完整的回复。

  1. 更新对话历史:
conversation_history.append({"role": "assistant", "content": assistants_response})

将 AI 的回复添加到对话历史中。

  1. 检查是否结束对话:
if "再见" in user_input or "退出" in user_input:
break

根据用户输入内容判断是否结束对话。

6.完整代码

ChatBot-CMD 完整代码:

from openai import OpenAI

client = OpenAI(
base_url='https://cloud.perfxlab.cn/v1',
api_key='sk-WS8iKdZVBNpSQmXXXXXXX27615114727Be134338B0519378'
)

def main(): # 开始对话,并存储对话历史,以便进行上下文管理
conversation_history = []

while True:
# 获取用户输入
user_input = input("您: ")
# 将用户输入添加到对话历史
conversation_history.append({"role": "user", "content": user_input})

# 调用API进行对话
stream = client.chat.completions.create(
model="Qwen1.5-110B-Chat-GPTQ-Int4",
messages=conversation_history,
temperature=1,
max_tokens=512,
n=1,
presence_penalty=0,
frequency_penalty=0,
stream=True,
)

print("AI: ", end="")
assistants_response = ""
for chunk in stream:
if chunk.choices[0].delta.content is not None:
assistants_response += chunk.choices[0].delta.content
print(chunk.choices[0].delta.content, end="")

# 将机器人回复添加到对话历史
conversation_history.append({"role": "assistant", "content": assistants_response})

# 检查是否结束对话
if "再见" in user_input or "退出" in user_input:
break
if __name__ == "__main__":
main()

7. 运行项目

确保所有代码都正确写入一个 Python 脚本文件(例如 chatbot.py),然后通过以下 Bash 命令运行脚本:

python chatbot.py

运行后可以在终端与大模型进行对话:

alt text

8.项目地址

•gitee:https://gitee.com/PerfXCloud-APP/cmd_chatbot

9.项目演示视频

•Bilibili:https://www.bilibili.com/video/BV12s421g7EN