ChatGPT讲解:从零开始构建你的第一个AI对话应用

1次阅读
没有评论

共计 2603 个字符,预计需要花费 7 分钟才能阅读完成。

image.webp

核心概念:ChatGPT 如何工作

ChatGPT 是 OpenAI 基于 GPT 模型开发的对话 AI,它的核心是通过分析输入的文本(称为 prompt),预测并生成最合适的回复。API 调用本质上是向 OpenAI 的服务器发送请求,携带你的 prompt 和参数配置,然后接收生成的文本响应。

ChatGPT 讲解:从零开始构建你的第一个 AI 对话应用

  • 关键术语
  • prompt:你输入的对话或指令,决定了 AI 的回复方向
  • temperature:控制回复的随机性(0- 2 之间,值越高越有创意)
  • max_tokens:限制回复的最大长度(1 个 token≈0.75 个英文单词)

环境准备

  1. 确保安装 Python 3.7+,推荐使用虚拟环境:

    python -m venv chatgpt_env
    source chatgpt_env/bin/activate  # Linux/Mac
    chatgpt_env\Scripts\activate    # Windows

  2. 安装必要库:

    pip install openai python-dotenv

  3. 获取 OpenAI API Key:

  4. 访问 OpenAI 平台 创建账户
  5. 在 API Keys 页面生成密钥(注意保密!)
  6. 在项目根目录创建 .env 文件保存密钥:
    OPENAI_API_KEY= 你的实际密钥

代码实战

基础 API 调用(含错误处理)

import openai
from dotenv import load_dotenv
import os

load_dotenv()
openai.api_key = os.getenv("OPENAI_API_KEY")

def chat_with_gpt(prompt):
    try:
        response = openai.ChatCompletion.create(
            model="gpt-3.5-turbo",
            messages=[{"role": "user", "content": prompt}],
            temperature=0.7,
            max_tokens=150
        )
        return response.choices[0].message.content
    except Exception as e:
        print(f"API 调用出错: {str(e)}")
        return "抱歉,服务暂时不可用"

# 测试调用
print(chat_with_gpt("用简单语言解释量子计算"))

多轮对话上下文管理

dialogue_history = []

def multi_turn_chat(new_message):
    global dialogue_history

    # 添加用户新消息到历史
    dialogue_history.append({"role": "user", "content": new_message})

    try:
        response = openai.ChatCompletion.create(
            model="gpt-3.5-turbo",
            messages=dialogue_history,
            temperature=0.7
        )

        # 获取 AI 回复并保存到历史
        ai_reply = response.choices[0].message.content
        dialogue_history.append({"role": "assistant", "content": ai_reply})

        return ai_reply
    except openai.error.InvalidRequestError as e:
        # 处理 token 超限情况
        if "maximum context length" in str(e):
            # 移除最早的两轮对话(1 问 1 答)dialogue_history = dialogue_history[2:]
            return "对话过长,已清除部分历史。请继续提问。"
        raise

# 测试多轮对话
print(multi_turn_chat("推荐北京的美食"))
print(multi_turn_chat("人均 300 元以内的有吗?"))

避坑指南

1. Token 长度限制处理

  • GPT-3.5-turbo 上限为 4096 tokens(包含请求和回复)
  • 解决方案:
  • 定期清理早期对话历史(如上文代码所示)
  • 对长文本进行摘要处理后再输入

2. 内容安全过滤

def is_safe_content(text):
    """简易内容安全检查"""
    banned_words = ["暴力", "色情", "政治敏感词示例"]  # 实际需更完善的词库
    return not any(word in text for word in banned_words)

# 在调用 API 前检查
user_input = "用户输入内容"
if not is_safe_content(user_input):
    print("包含不安全内容")
else:
    response = chat_with_gpt(user_input)

3. 异步调用优化

import asyncio

async def async_chat(prompt):
    try:
        response = await openai.ChatCompletion.acreate(
            model="gpt-3.5-turbo",
            messages=[{"role": "user", "content": prompt}]
        )
        return response.choices[0].message.content
    except Exception as e:
        print(f"异步调用失败: {e}")

# 使用示例
async def main():
    tasks = [async_chat(f"问题{i}") for i in range(3)]
    results = await asyncio.gather(*tasks)
    print(results)

asyncio.run(main())

进阶建议

定制 prompt 的技巧

  • 角色设定:明确 AI 的身份(如 ” 你是一位资深厨师 ”)
  • 格式要求:指定回复结构(如 ” 用三点概括,每点不超过 20 字 ”)
  • 示例引导:提供输入输出示例(few-shot learning)

对话日志分析

  1. 记录完整对话历史(含时间戳、用户 ID)
  2. 分析高频问题和回复满意度
  3. 识别需要改进的 prompt 模式

思考题

  1. 如果在多轮对话中需要保持某个关键信息(如用户偏好),如何设计上下文管理策略?
  2. 当需要处理专业领域问题时(如法律咨询),如何通过 prompt 工程提高回复准确性?
  3. 如何平衡对话历史的丰富性(提供足够上下文)与 token 消耗的限制?

在实际项目中,建议从简单功能开始,逐步增加复杂性。遇到问题时,OpenAI 的 官方文档 始终是最权威的参考来源。

正文完
 0
评论(没有评论)