引言

随着大语言模型的火爆,越来越多的开发者希望将AI能力集成到自己的应用中。OpenAI 提供的 GPT 系列模型(如 GPT-3.5-turbo、GPT-4)是目前最流行的选择之一,通过简单的 API 调用,我们就可以让程序拥有智能对话的能力。

本文将带你从零开始,使用 Python 和 OpenAI API 构建一个命令行交互的聊天机器人。不需要任何前置的机器学习知识,只需基本的 Python 编程经验即可上手。我们将逐步完成环境配置、代码编写和运行测试,并讨论一些实用技巧和安全注意事项。

准备工作

1. 注册 OpenAI 账号并获取 API Key

  • 访问 OpenAI 官网,注册账号(可能需要科学上网和国外手机号验证)。

  • 登录后,进入 API Keys 页面,点击 Create new secret key,生成一个 API Key。请立即复制并保存好,因为关闭窗口后无法再次查看。

2. 安装 Python 环境

确保你的电脑上安装了 Python 3.7 或更高版本。可以在终端执行 python --version 检查。

3. 安装必要的 Python 库

我们将使用 OpenAI 官方提供的 Python 库 openai,以及用于管理环境变量的 python-dotenv(方便保存 API Key,避免硬编码在代码中)。

在终端执行以下命令:

bash

pip install openai python-dotenv

编写代码

1. 项目结构

创建一个新文件夹,例如 chatbot_demo,在其中创建两个文件:

  • .env:存放 API Key 等敏感信息(不会被上传到 Git)

  • chatbot.py:主程序代码

2. 设置环境变量

在 .env 文件中写入:

text

OPENAI_API_KEY=你的API密钥

将 你的API密钥 替换为你在 OpenAI 官网复制的密钥。

3. 编写聊天机器人代码

打开 chatbot.py,逐步输入以下代码。我会在代码块后详细解释每一部分的作用。

python

import os
from openai import OpenAI
from dotenv import load_dotenv

# 加载 .env 文件中的环境变量
load_dotenv()

# 从环境变量中读取 API Key
api_key = os.getenv("OPENAI_API_KEY")
if not api_key:
    raise ValueError("未找到 OPENAI_API_KEY,请检查 .env 文件")

# 初始化 OpenAI 客户端
client = OpenAI(api_key=api_key)

def chat_with_gpt(prompt, history=None):
    """
    向 GPT 发送消息,并返回回复内容
    :param prompt: 用户输入的当前消息
    :param history: 之前的对话历史(用于保持上下文)
    :return: GPT 的回复内容
    """
    if history is None:
        history = []

    # 构建消息列表
    messages = history.copy()
    messages.append({"role": "user", "content": prompt})

    try:
        # 调用 Chat Completion 接口
        response = client.chat.completions.create(
            model="gpt-3.5-turbo",   # 使用模型,也可以换成 gpt-4
            messages=messages,
            temperature=0.7,         # 控制回复的随机性,0~2之间
            max_tokens=500,          # 限制回复长度
            top_p=1,
            frequency_penalty=0,
            presence_penalty=0
        )

        # 提取回复内容
        reply = response.choices[0].message.content
        return reply, messages + [{"role": "assistant", "content": reply}]

    except Exception as e:
        print(f"API 调用出错: {e}")
        return None, history

def main():
    print("🤖 欢迎使用 AI 聊天机器人!输入 'quit' 或 'exit' 退出。")
    history = []   # 用于存储对话历史

    while True:
        user_input = input("\n👤 你: ").strip()
        if user_input.lower() in ["quit", "exit"]:
            print("👋 再见!")
            break
        if not user_input:
            continue

        reply, history = chat_with_gpt(user_input, history)
        if reply:
            print(f"🤖 助手: {reply}")

if __name__ == "__main__":
    main()

4. 代码详解

  • 导入模块os 用于读取环境变量,OpenAI 是官方客户端,load_dotenv 加载 .env 文件。

  • 加载 API Key:使用 load_dotenv() 读取 .env 中的变量,然后通过 os.getenv 获取。如果未找到,抛出错误提示。

  • 初始化客户端OpenAI(api_key=api_key) 创建一个客户端实例,后续所有 API 调用都通过它进行。

  • 核心对话函数 chat_with_gpt

    • 参数 prompt 是用户当前输入,history 是之前的对话历史(由 {"role": "user", "content": "..."} 和 {"role": "assistant", "content": "..."} 组成的列表)。

    • 将当前用户消息追加到历史中,形成完整的 messages 列表。

    • 调用 client.chat.completions.create 方法,指定模型(这里用 gpt-3.5-turbo,成本较低且效果不错),以及其他参数(如 temperature 控制随机性,max_tokens 限制回复长度)。

    • 从返回的 response 中提取助手的回复内容,并返回新的对话历史(包含本次的问答)。

    • 如果发生异常(如网络问题、API 密钥错误等),打印错误并返回 None 和原历史。

  • 主循环 main

    • 打印欢迎信息,初始化空的历史列表。

    • 无限循环等待用户输入,输入 quit 或 exit 退出。

    • 将用户输入和当前历史传给 chat_with_gpt,得到回复和更新后的历史。

    • 打印助手的回复,然后继续下一轮对话。

运行测试

在终端中,切换到项目目录,执行:

bash

python chatbot.py

你将看到类似如下的交互界面:

text

🤖 欢迎使用 AI 聊天机器人!输入 'quit' 或 'exit' 退出。

👤 你: 你好,请问你是谁?
🤖 助手: 你好!我是基于 OpenAI GPT 模型的人工智能助手,可以回答你的问题、提供帮助或进行闲聊。有什么我可以帮你的吗?

👤 你: 请用中文介绍一下 Python 的特点
🤖 助手: Python 是一种高级编程语言,具有以下特点:
1. 简单易学:语法清晰简洁,适合初学者。
2. 解释型语言:无需编译,可直接运行。
3. 跨平台:可在 Windows、Linux、macOS 等多种系统上运行。
4. 丰富的库:拥有强大的标准库和第三方库,支持数据分析、Web 开发、人工智能等领域。
5. 动态类型:变量类型在运行时确定。
6. 面向对象:支持面向对象编程范式。
...
👤 你: quit
👋 再见!

你可以看到,机器人能够记住之前的对话上下文(比如你接着问“Python”时,它知道是延续前面的问题),这是因为我们在每次调用时都传入了 history,实现了多轮对话。

注意事项

  1. API Key 安全:千万不要将 API Key 硬编码在代码中,更不要提交到公开仓库(如 GitHub)。我们使用 .env 文件并添加到 .gitignore 中是推荐做法。

  2. 费用控制:OpenAI API 是按 token 计费的(输入+输出)。gpt-3.5-turbo 价格较低,但如果不加限制,长时间对话仍可能产生费用。你可以通过 max_tokens 限制每次回复长度,或者设置每月预算提醒。

  3. 模型选择gpt-3.5-turbo 适合大多数场景,gpt-4 更智能但价格更高、速度稍慢。根据需求选择。

  4. 错误处理:网络波动、API 限流等都可能导致调用失败,代码中已包含基本的异常捕获,实际生产环境需要更完善的错误处理。

  5. 上下文长度限制:每个模型都有最大 token 限制(如 4096 tokens)。如果对话历史过长,需要适当裁剪或总结,否则会超出限制。本示例未实现该功能,可以自行扩展。

扩展与优化

这个简单的聊天机器人已经具备了基本功能,但你可以进一步改进:

  • 流式输出:使用 stream=True 参数让回复一个字一个字地显示,更像真人聊天。

  • 接入 GUI:用 Tkinter、PyQt 或 Web 框架(Flask)做一个图形界面。

  • 支持更多指令:例如清除历史、切换模型等。

  • 长期记忆:将对话保存到数据库,以便下次启动时恢复上下文。

  • 函数调用(Function Calling):让模型可以调用外部工具,比如查询天气、计算器等。

结语

通过本文,你已经学会了如何使用 Python 和 OpenAI API 搭建一个属于自己的智能聊天机器人。整个过程简单直观,却打开了一扇通往 AI 应用开发的大门。你可以基于这个基础不断扩展,打造出更有趣、更实用的产品。

如果你在实践过程中遇到任何问题,欢迎在评论区留言交流。希望这篇文章对你有所帮助,祝你编码愉快!

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐