OpenAI API 使用教程:一个开发者的真实踩坑记录
一开始,只是想做个客服问答系统

事情要从去年年底说起。那会儿我们团队在做一个面向企业客户的SaaS平台,用户反馈中反复提到“希望有个智能客服来快速回答常见问题”。作为AI开发组的一员,我也被分到了这个任务上。
最开始的想法是训练一个专属的模型来处理这些FAQ类问题。但我们很快发现几个现实问题:
- 数据量不够:客户提供的FAQ语料总共不到1000条
- 迭代成本高:每次调整回答都需要重新训练模型
- 多轮对话支持差:自己实现上下文理解太复杂了
这时候我们就把目光转向了OpenAI的API——尤其是GPT-3.5系列模型。它们在文本理解和生成方面表现优异,而且通过Prompt Engineering的方式可以快速迭代需求,几乎不需要传统意义上的模型训练流程。
说干就干。但真用起来才发现,这事儿可没想象中那么简单。
遇到的第一个大问题:Prompt怎么写才靠谱?

接入OpenAI API本身并不难,官方文档也挺详细。真正的难点是如何写出一个“稳定、可控、可解释”的Prompt。
举个例子,我们最初尝试了一个非常直接的Prompt:
你是一个客服助手,请回答以下问题:{{user_input}}
结果模型回答五花八门,有时候还自说自话讲起故事来。比如用户问“如何修改登录密码?”,它竟然回了个小剧场:“有一天张三突然发现他的账号登不上去了……”
这显然不行。
后来我们做了很多实验,最终确定了一个结构化的Prompt模板(简化版):
你是企业服务平台的客服助手,你的任务是根据知识库中的内容回答用户的问题。
如果问题与以下主题有关:账户管理、产品使用、支付方式、故障排查,请尽量引用知识库中的信息进行回答。
如果问题不明确或不在知识库范围内,请礼貌地请求用户补充更多信息。
当前对话历史:
<User> 如何找回我的账户?
<Assistant> 请提供您注册时使用的邮箱地址,我们可以帮您重置密码。
<User> 我的邮箱是 zhangsan@example.com
<Assistant>
这样的Prompt有几个关键点:
- 明确角色和任务边界
- 强调只使用已有知识(而不是瞎编)
- 包含示例对话帮助模型理解交互逻辑
- 控制输出格式(避免冗长或者跳跃)
经过不断打磨之后,我们的回答质量终于能基本满足业务需求了。
代码实践:我是怎么调用API的?

下面是一段Python伪代码,展示了我们是怎么封装OpenAI API请求的:
import openai
from config import OPENAI_API_KEY
openai.api_key = OPENAI_API_KEY
class AIAgent:
def __init__(self):
self.max_tokens = 200
self.temperature = 0.3
self.system_prompt = """
你是企业服务平台的客服助手...
(这里替换成前面说的那个Prompt)
"""
def _construct_messages(self, user_query, history=None):
messages = [{"role": "system", "content": self.system_prompt}]
if history:
for h in history[-5:]: # 只保留最近5轮对话
messages.append({"role": "user", "content": h["user"]})
messages.append({"role": "assistant", "content": h["bot"]})
messages.append({"role": "user", "content": user_query})
return messages
def get_response(self, user_query, history=None):
messages = self._construct_messages(user_query, history)
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=messages,
max_tokens=self.max_tokens,
temperature=self.temperature,
stop=["\nUser:", "\nBot:"]
)
return response.choices[0].message.content.strip()
这里有几个参数要特别说明一下:
max_tokens控制回答长度temperature影响随机性(数值越低输出越稳定)stop字段用来避免模型无限输出
另外,我们在前端也做了一些限制,例如不允许连续发问太快,避免超限导致费用暴增 😂
实际使用过程中遇到的那些坑
坑一:Token 超了怎么办?
刚开始我们没有对输入内容做任何限制。直到有客户上传了一段2MB的日志文件作为问题描述……
结果API返回错误:
{
"error": {
"message": "This model's maximum context length is 4097 tokens..."
}
}
解决办法很简单但也挺头疼——我们需要做两个事:
- 对用户的输入内容做截断处理(比如只取前1000字符)
- 在界面上给出提示:“请保持问题简洁,最多输入1000字以内”
坑二:API响应慢 + 不稳定
虽然官方标称响应速度快,但在国内环境下经常出现延迟很高、甚至超时的情况。
我们采用的策略是:
- 自建代理服务,部署在国外VPS上做转发
- 设置合理的超时时间(默认设置为8秒)
- 添加失败重试机制(最多重试3次)
这部分其实还挺费劲的,因为网络问题往往不可预测,需要做好容错处理。
坑三:费用突飞猛涨
这是让我最紧张的一次经历。刚上线几天就收到了一张高额账单通知!
回头一看,原来是测试同学在压测时候忘了关掉模拟器,一直批量发送请求去跑了好几天 🙈
教训总结:
- 每天设置API Key 的软限额
- 给不同环境(测试/生产)配不同的Key,单独统计费用
- 记录每条查询的日志,包含 token 数量和 cost
- 系统内加个监控仪表盘,实时显示消耗情况
最终效果如何?
系统上线一个月后我们做了个小复盘:
| 指标 | 上线前 | 上线后 |
|---|---|---|
| 客服咨询量 | 1200 条/月 | 650 条/月 |
| 平均响应时间 | 8分钟 | 实时 |
| 用户满意度 | 68% | 81% |
从数据上看,整体还是达到了预期效果。
而且运维成本也不算太高,每月平均花费控制在 $100 以内(远低于请真人客服的成本)。
给读者的一些实用建议
如果你也在考虑使用OpenAI API来做类似的应用,我有几点经验想分享给你:
从小场景入手:别上来就想让AI“接管全部客服工作”,先从高频、结构化的问题做起(比如订单查询、功能使用指导)
Prompt 是个技术活:它比你想象的重要得多。建议多做一些AB测试,观察不同Prompt下的输出差异
注意token计价模式:输入+输出都收费,所以务必控制输入内容长度。必要的话,可以加入文本摘要模块预处理长输入
日志真的很重要:记录每一个请求的内容、耗时、token数、费用等信息,方便分析异常行为和优化模型效果
多轮对话要设计状态机制:虽然API可以传history,但如果对话太长会影响性能。建议配合Redis之类的缓存存储近期上下文
不要迷信大模型:它不是万能的。有些结构化任务(比如查数据库),还是传统接口更高效准确
写在最后:AI是工具,不是银弹
用过一段时间以后,我发现OpenAI API确实强大,但它更像是一个“能力强大的助手”,而不是“能自动解决问题的机器”。
真正的好效果,还需要我们从Prompt设计、输入输出控制、错误兜底等多个角度去做工程层面的精细打磨。
当然,这一切的前提是我们愿意动手尝试,并且不怕“踩坑”。毕竟每一次成功的背后,可能都藏着好几个不眠之夜 😅
如果你正准备接入OpenAI API,欢迎留言交流,说不定还能一起解决些共性问题。毕竟这条路,我们都走过。

评论 0