Python中使用OpenAI实现AI问答:流式返回、记忆存储与工具调用详解

Python中使用OpenAI实现AI问答:流式返回、记忆存储与工具调用详解

在现代人工智能应用开发中,OpenAI 提供的强大 API 为开发者构建智能对话系统提供了极大的便利。本文将详细介绍如何使用 Python 结合 OpenAI 的 API,实现一个完整的 AI 问答系统,涵盖以下几个核心功能:

  • 流式返回(Streaming Response):实时逐字输出回答,提升用户体验。
  • 记忆存储(Memory Management):通过上下文管理保持对话历史,使 AI 能够理解连续对话。
  • 工具类调用(Tool Calling):让 AI 可以调用外部工具,如计算、查询等,增强其实际应用能力。

1. 环境准备

首先,确保你已安装 openai 库:

bash 复制代码
pip install openai

并设置你的 OpenAI API 密钥(可在 OpenAI 官网 获取):

python 复制代码
import os
os.environ["OPENAI_API_KEY"] = "your-api-key-here"

2. 流式返回(Streaming Response)

流式返回是 OpenAI API 支持的一项重要特性,它允许我们实时接收模型生成的文本,而不是等待整个响应完成。这在聊天应用中特别有用,能模拟"打字机"效果,提升交互体验。

代码示例:流式输出回答

python 复制代码
import openai

# 使用流式调用
response = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[
        {"role": "user", "content": "请告诉我今天的天气如何?"}
    ],
    stream=True  # 启用流式返回
)

print("AI 回答:")
for chunk in response:
    if chunk.choices[0].delta.get("content") is not None:
        print(chunk.choices[0].delta.content, end="", flush=True)
print()  # 换行结束

流式返回的结果是什么样子?

当你运行上述代码时,你会看到类似以下的输出效果(逐字显示):

复制代码
AI 回答:今天天气晴朗,气温在20度左右,适合外出活动。

实际上,输出是逐字出现的,例如:

复制代码
AI 回答:今...
AI 回答:今天...
AI 回答:今天天气...
AI 回答:今天天气晴朗...
...(持续逐字输出)

这种效果可以让你的用户界面更自然,仿佛 AI 正在「思考并打字」。


3. 记忆存储(对话上下文管理)

为了让 AI 能记住之前的对话内容,我们需要在每次请求中携带历史消息。这可以通过维护一个消息列表来实现。

示例:保持对话记忆

python 复制代码
messages = [
    {"role": "system", "content": "你是一个有帮助的助手。"}
]

while True:
    user_input = input("你:")
    if user_input.lower() == "quit":
        break
    
    messages.append({"role": "user", "content": user_input})

    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=messages,
        stream=True
    )

    print("AI:")
    for chunk in response:
        if chunk.choices[0].delta.get("content") is not None:
            print(chunk.choices[0].delta.content, end="", flush=True)
    print()

    # 将 AI 的回复加入历史记录
    messages.append({"role": "assistant", "content": ""})  # 占位,后续可追加内容
    # (注意:实际中应从流中收集完整内容再添加)

⚠️ 注意:在真实项目中,建议使用 asyncasyncio 来处理流式数据,并将完整响应拼接后存入 messages 列表。


4. 工具类调用(Tool Calling)

OpenAI 支持通过 tools 参数让模型主动调用外部工具。例如,我们可以定义一个工具用于计算两个数的和。

定义工具并调用

python 复制代码
tools = [
    {
        "type": "function",
        "function": {
            "name": "add_numbers",
            "description": "计算两个数字的和",
            "parameters": {
                "type": "object",
                "properties": {
                    "a": {"type": "number", "description": "第一个数字"},
                    "b": {"type": "number", "description": "第二个数字"}
                },
                "required": ["a", "b"]
            }
        }
    }
]

# 发起带有工具调用的请求
response = openai.ChatCompletion.create(
    model="gpt-3.5-turbo-0613",
    messages=[{"role": "user", "content": "计算 5 加 7 的结果。"}],
    tools=tools,
    tool_choice="auto"  # 自动选择工具调用
)

# 检查是否调用了工具
if response.choices[0].finish_reason == "tool_calls":
    tool_call = response.choices[0].message.tool_calls[0]
    function_name = tool_call.function.name
    arguments = tool_call.function.arguments
    
    print(f"调用工具:{function_name}({arguments})")
    # 手动执行计算(此处简化为直接返回)
    result = eval(f"{function_name}({arguments['a']}, {arguments['b']})")
    print(f"结果:{result}")
else:
    print("未调用工具,直接回答:", response.choices[0].message.content)

✅ 这种方式可用于集成计算器、数据库查询、日历操作等真实工具,极大扩展 AI 的实用能力。


总结

通过本教程,你已经掌握了使用 Python 实现一个高级 AI 问答系统的四大关键技术:

功能 说明
流式返回 实现"打字机"效果,提升交互感
记忆存储 保持对话上下文,支持多轮对话
工具调用 让 AI 调用外部能力,增强实用性
完整流程 从输入到输出,全流程整合

这些技术组合起来,可以构建出真正可用的智能客服、个人助理或知识问答系统。


📌 提示 :生产环境中建议使用 async 异步处理、缓存机制、错误重试和限流策略,确保系统稳定可靠。

欢迎关注我的 CSDN 博客,获取更多 AI 开发实战技巧!

相关推荐
历程里程碑1 分钟前
滑动窗口------滑动窗口最大值
大数据·python·算法·elasticsearch·搜索引擎·flask·tornado
AI_56784 分钟前
Python正则表达式终极指南:从模式匹配到文本工程的智能跃迁
人工智能·python·正则表达式
B站_计算机毕业设计之家4 分钟前
AI大模型:Deepseek美食推荐系统 机器学习 协同过滤推荐算法+可视化 Django框架 大数据毕业设计(源码)✅
python·算法·机器学习·数据分析·django·推荐算法·美食
黄筱筱筱筱筱筱筱5 分钟前
第三次Python练习题
开发语言·python
2501_941322039 分钟前
叉车人员检测识别实战:基于YOLOv8-BiFPN的高精度目标检测方案
python·yolo·目标检测
筷乐老六喝旺仔14 分钟前
使用Python进行PDF文件的处理与操作
jvm·数据库·python
刘一说34 分钟前
Java中基于属性的访问控制(ABAC):实现动态、上下文感知的权限管理
java·网络·python
一晌小贪欢35 分钟前
Python 操作 Excel 高阶技巧:用 openpyxl 玩转循环与 Decimal 精度控制
开发语言·python·excel·openpyxl·python办公·python读取excel
铁蛋AI编程实战37 分钟前
Falcon-H1-Tiny 微型 LLM 部署指南:100M 参数也能做复杂推理,树莓派 / 手机都能跑
java·人工智能·python·智能手机
core5121 小时前
Vanna实现Text2SQL
sql·openai·text·vanna