## 背景
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 能执行具体操作
这些以后有机会再写。