Python 调用 OpenAI API 实战:五分钟搭建智能问答系统

## 背景

GPT-4、Claude 这几个模型出来以后,调用它们的能力不再是大厂的专利。OpenAI 开放的 API 接口,让任何一个会写 Python 的人都能把这些语言模型接入自己的项目。

但真刀真枪做起来,问题就来了:密钥怎么管?错误怎么catch?多轮对话怎么实现?内容质量怎么控制?这些破事不处理好,系统根本没法上线。

这篇文章,直接上代码,带你把这些坑一个一个踩平。

## 实际问题

开发中常见的几个坑:

– 密钥硬编码在代码里,一提交代码就泄露
– 用户问第二句话的时候,AI 跟失忆了一样,完全不记得前面说的啥
– API 调用报错,整个程序就崩了
– 不会写提示词,问啥都答不到点上

一个一个来解决。

## 怎么做

### 1. 装依赖

“`bash
pip install openai python-dotenv
“`

openai 是官方 SDK,python-dotenv 用来读环境变量。

### 2. 配置密钥

建一个 .env 文件:

“`
OPENAI_API_KEY=sk-xxxxx
“`

代码里这样加载:

“`python
from dotenv import load_dotenv
import os

load_dotenv()
api_key = os.getenv(“OPENAI_API_KEY”)
“`

别把密钥写死在代码里,不然分分钟被人搬走。

### 3. 初始化客户端

“`python
from openai import OpenAI

client = OpenAI(api_key=api_key)

def get_response(prompt: str, model: str = “gpt-4o”) -> str:
“””调用 API 获取回复”””
try:
response = client.chat.completions.create(
model=model,
messages=[
{“role”: “user”, “content”: prompt}
],
temperature=0.7,
max_tokens=1000
)
return response.choices[0].message.content
except Exception as e:
return f”出错了: {str(e)}”
“`

temperature 控制随机性,0.7 是个平衡点。max_tokens 限制回复长度,防止跑飞。

### 4. 多轮对话

单轮问答没意思,真正用的是多轮对话。这就需要把历史消息攒起来:

“`python
class ConversationBot:
def __init__(self, system_prompt: str = “你是一个有帮助的AI助手。”):
self.messages = [{“role”: “system”, “content”: system_prompt}]

def add_message(self, role: str, content: str):
self.messages.append({“role”: role, “content”: content})

def chat(self, user_input: str) -> str:
self.add_message(“user”, user_input)
try:
response = client.chat.completions.create(
model=”gpt-4o”,
messages=self.messages,
temperature=0.7
)
assistant_reply = response.choices[0].message.content
self.add_message(“assistant”, assistant_reply)
return assistant_reply
except Exception as e:
return f”错误: {str(e)}”

def clear_history(self):
# 清空对话历史,但保留 system prompt
self.messages = self.messages[:1]
“`

system prompt 是初始设定,比如”你是一个专业的技术顾问”,决定 AI 的角色定位。

### 5. 完整命令行程序

“`python
def main():
print(“=” * 50)
print(“智能问答系统”)
print(“=” * 50)
bot = ConversationBot(
system_prompt=”你是一个专业的技术顾问,擅长解答编程问题。”
)

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

response = bot.chat(user_input)
print(f”\nAI: {response}”)

if __name__ == “__main__”:
main()
“`

跑起来就是这样:

“`
==================================================
智能问答系统
==================================================

你: 什么是Python?

AI: Python 是一种高级编程语言,由 Guido van Rossum 于 1991 年创建。它的特点:
1. 语法简洁,用缩进表示代码块
2. 动态类型,写起来灵活
3. 库超多,做 AI、Web、数据分析都行
4. 入门简单,社区活跃

你: 它和Java有什么区别?

AI: 主要区别:
– 语法:Python 用缩进,Java 用大括号
– 类型:Python 动态类型,Java 静态类型
– 运行方式:Python 解释执行,Java 编译成字节码
– 生态:Python AI 强,Java 企业级应用多

你: 退出
再见!
“`

多轮对话的好处是,AI 记得住上下文。第二句问”它和Java有什么区别”,AI 知道”它”指的是 Python。

## 小结

这篇文章讲了几个最基础的东西:

– 用 dotenv 管理密钥,别硬编码
– 攒住消息历史,实现多轮对话
– try-except 抓异常,别让程序崩掉
– system prompt 定角色,AI 回答更有针对性

做完这些,你就有了一个能跑起来的问答系统。

想玩更花的?可以试试:
– 接个向量数据库,做 RAG(检索增强生成)
– 开流式输出,用户体验更好
– 搞函数调用,让 AI 能执行具体操作

这些以后有机会再写。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇