大模型应用开发第八讲:OpenAI API入门 基础聊天程序搭建步骤

资料取自《大模型应用开发:动手做AI Agent 》
查看总目录:学习大纲

关于DeepSeek本地部署指南可以看下我之前写的文章:DeepSeek R1本地与线上满血版部署:超详细手把手指南


用「开奶茶店」的步骤类比,手把手实现智能对话

一、核心组件认知(做奶茶需要的工具)

组件比喻作用
API密钥店铺营业执照证明你有权限使用AI服务
助手(Assistant)店长内置技能、负责思考如何回复
线程(Thread)顾客对话记录本存储某次聊天的全部内容
消息(Message)顾客说的话/奶茶订单用户的提问或AI的回答
运行(Run)店长处理订单的过程AI分析问题并生成回复的过程

▲ 组件类比关系(来源于资料2的API调用流程)[2]


二、五步搭建基础聊天程序(开张流程)

1. 准备原料:安装开发工具

具体操作
① 安装Python(建议3.8+版本)
② 安装OpenAI库:pip install openai
③ 配置API密钥(在系统环境变量添加OPENAI_API_KEY)[4]

⚠️ 注意:密钥就像奶茶店的收银机密码,绝对不能泄露! [4]

flowchart TD
    A[安装Python] --> B[安装openai库]
    B --> C[设置环境变量]
    C --> D[导入库测试]

▲ 环境准备步骤(代码来源于资料4的初始化代码)[4]


2. 招聘店长:创建AI助手

代码实现

from openai import OpenAI
client = OpenAI()  # 连接官方API[4]

assistant = client.beta.assistants.create(
    instructions="你是一个客服助手,用可爱表情包风格回答问题",
    model="gpt-3.5-turbo", # 选择语言模型
    tools=[{"type": "code_interpreter"}]  # 添加代码解释器能力
)
print(f"助手ID: {assistant.id}")  # 记住这个身份证号!

关键参数解释

  • instructions:给AI的人格设定(就像奶茶店的员工手册)
  • tools:赋予AI使用的工具(如计算器、数据库查询)2

3. 接待顾客:创建对话线程

代码示例

# 新建一个对话本(记录此顾客的所有聊天)
thread = client.beta.threads.create()
print(f"对话本ID: {thread.id}")

# 添加用户消息(模拟顾客下单)
message = client.beta.threads.messages.create(
    thread_id=thread.id,
    role="user",
    content="奶茶买三杯能打折吗?(*╹▽╹*)"
)

运行示意图

flowchart LR
    A[用户问题] --> B(存入线程)
    B --> C{是否需要工具?}

▲ 线程管理流程(来源于资料2的Thread处理流程)[2]


4. 处理订单:启动AI思考

启动运行与结果获取

# 告诉店长开始处理这个订单
run = client.beta.threads.runs.create(
    thread_id=thread.id,
    assistant_id=assistant.id
)

# 每隔5秒检查是否处理完成(类似查看订单进度)
while True:
    run_status = client.beta.threads.runs.retrieve(
        thread_id=thread.id,
        run_id=run.id
    )
    if run_status.status == "completed":
        break
    time.sleep(5)

# 提取AI的回复(取最后一杯奶茶)
messages = client.beta.threads.messages.list(thread_id=thread.id)
latest_reply = messages.data[0].content[0].text.value
print("AI回复:", latest_reply)

典型输出

🥤三杯打9折哦~再送您一张小猫优惠券ฅ^•ﻌ•^ฅ 2

5. 优化服务:添加记忆功能

实现上下文记忆

# 后续对话直接在同一个线程中继续
new_message = client.beta.threads.messages.create(
    thread_id=thread.id,
    role="user",
    content="那再加一杯波霸奶茶呢?"
)

# 重新启动运行(AI会自动关联之前对话)
new_run = client.beta.threads.runs.create(
    thread_id=thread.id,
    assistant_id=assistant.id
)

运行效果

🧋四杯共144元!赠送两张优惠券啦~ (๑•̀ㅂ•́)و✧ 2

三、常见问题解答(新手避坑指南)

1. 错误1:401未授权

  • 原因:API密钥错误或过期
  • 解决:检查环境变量名称是否为OPENAI_API_KEY,重新生成密钥4

2. 错误2:消息不连贯

  • 原因:每次使用新线程导致遗忘上下文
  • 解决:对同一用户固定使用同一个thread_id [6]

3. 进阶技巧:添加工具

# 让助手能调用计算器
assistant = client.beta.assistants.update(
    assistant.id,
    tools=[{"type": "code_interpreter"}, {"type": "function"}],
)

▲ 添加新工具流程(案例来自资料5的函数调用扩展)[5]


四、完整代码示例(奶茶店客服程序)

from openai import OpenAI
import time

# 连接API(自动读取环境变量密钥)
client = OpenAI()

# 创建助手
assistant = client.beta.assistants.create(
    name="奶茶小助手",
    instructions="回答时使用可爱表情和颜文字,满3杯打九折",
    model="gpt-3.5-turbo",
)

# 处理用户提问函数
def chat_with_ai(user_input, thread_id=None):
    if not thread_id:
        thread = client.beta.threads.create()
        thread_id = thread.id

    client.beta.threads.messages.create(
        thread_id=thread_id,
        role="user",
        content=user_input
    )

    run = client.beta.threads.runs.create(
        thread_id=thread_id,
        assistant_id=assistant.id
    )

    while True:
        run_status = client.beta.threads.runs.retrieve(
            thread_id=thread_id, run_id=run.id
        )
        if run_status.status == "completed":
            break
        time.sleep(3)

    messages = client.beta.threads.messages.list(thread_id=thread_id)
    return messages.data[0].content[0].text.value, thread_id

# 测试对话
reply, tid = chat_with_ai("请问招牌奶茶是什么?")
print("AI:", reply)  # 输出:🥤我们的招牌是芝士奶盖绿茶哦~ (ゝ∀・)

new_reply, tid = chat_with_ai("大杯多少钱?", tid)
print("AI:", new_reply)  # 输出:🧋大杯25元!第二杯半价哒~(๑•̀ㅂ•́)و✧

▲ 完整可运行代码(整合资料4/5/6的实现案例)4[6]


关键知识点索引

全流程总图

flowchart TB
    subgraph 初始化
        A[安装库] --> B[设置密钥]
        B --> C[创建助手]
    end
    subgraph 对话循环
        C --> D{新用户?}
        D -->|是| E[新建线程]
        D -->|否| F[使用现有线程]
        E & F --> G[添加消息]
        G --> H[启动运行]
        H --> I{是否完成?}
        I -->|否| H
        I -->|是| J[获取回复]
        J --> K[输出结果]
    end

▲ API聊天程序工作流程(整合资料2/4/6的交互逻辑)2[6]


目录:总目录
上篇文章:大模型应用开发第七讲:OpenAI API入门 注册与API密钥获取
下篇文章:大模型应用开发第九讲:RAG(检索增强生成)流程:用户查询→检索→生成响应



kovli
13 声望8 粉丝