
类型:人工智能
简介:一家开放人工智能研究和部署公司,推出了ChatGPT。
本指南旨在帮助开发者调用基于聊天的语言模型API,并分享一些优化结果的实用技巧。大家还可以在 OpenAI Playground 中体验全新的聊天模式。
通过 OpenAI Chat API,可以利用 gpt-3.5-turbo 和 gpt-4 构建各类应用程序,完成以下任务:
- 撰写邮件或文档
- 编写 Python 代码
- 解答文档相关问题
- 创建对话代理
- 为软件提供自然语言交互界面
- 提供多学科辅导
- 语言翻译
- 模拟视频游戏角色
一、OpenAI聊天核心概念
聊天模型以一系列消息作为输入,并返回由模型生成的消息作为输出。尽管聊天模式专为多轮对话设计,但它同样适用于单轮任务(如传统指令跟踪模型 text-davinci-003 所执行的任务)。
1、示例API调用
import openai openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "是一位乐于助人的助手。"}, {"role": "user", "content": "2020 年世界大赛的冠军是谁?"}, {"role": "assistant", "content": "2020 年世界大赛的冠军是洛杉矶道奇队。"}, {"role": "user", "content": "比赛在哪里举行?"} ] )
关键输入是 messages 参数,它是一个消息对象数组。每个消息对象包含一个角色(系统、用户 或 助手)和内容(消息文本)。
2、对话结构
系统消息:用于设定助手的行为。例如,上例中的系统消息是“是一位乐于助人的助手。”
用户消息:用于指导助手,可以是最终用户输入或开发者预设的指令;
助手消息:存储先前的响应,帮助模型保持对话连贯性。
注意:gpt-3.5-turbo-0301 对系统消息的关注度有限,未来版本将更重视系统指令。因此,重要指令建议放在用户消息中。
二、OpenAI API响应格式
示例 API 响应如下:
{ "id": "chatcmpl-6p9XYPYSTTRi0xEviKjjilqrWU2Ve", "object": "chat.completion", "created": 1677649420, "model": "gpt-3.5-turbo", "usage": {"prompt_tokens": 56, "completion_tokens": 31, "total_tokens": 87}, "choices": [ { "message": { "role": "assistant", "content": "2020 年世界大赛在德克萨斯州阿灵顿的 Globe Life Field 举行,这是德州游骑兵队的新主场。" }, "finish_reason": "stop", "index": 0 } ] }
在 Python 中,可通过 response[‘choices’][0][‘message’][‘content’] 提取助手的回复。
finish_reason 的可能值:
- stop:API 返回完整输出;
- length:因 max_tokens 或标记限制导致输出不完整;
- content_filter:因内容过滤器被省略;
- null:API 响应仍在进行中。
三、标记(Tokens)管理
语言模型将文本分解为标记(tokens)。例如,英文句子 “ChatGPT is great!” 被编码为 6 个标记:[“Chat”, “G”, “PT”, ” is”, ” great”, “!”]。
1、标记总数的影响
- API 调用成本:按标记计费;
- API 调用时间:标记越多,生成时间越长;
- 模型限制:gpt-3.5-turbo 的最大标记限制为 4096。
提示:使用 OpenAI 的 tiktoken Python 库计算文本标记数,避免超出模型限制。
2、优化模型输出
如果模型输出不符合预期,可尝试以下方法:
- 明确指令:让指令更具体;
- 指定格式:要求模型按特定格式回答;
- 逐步思考:让模型在回答前先分析利弊;
- 调整参数:如 temperature(控制输出的随机性)和 max_tokens(限制回复长度)。
注意:temperature 值越高(如 0.8),输出越随机;值越低(如 0.2),输出越集中。
四、聊天模式与完成模式的对比
gpt-3.5-turbo 在文本生成能力上与 text-davinci-003 相似,但成本仅为后者的 10%。因此,建议在大多数场景中使用 gpt-3.5-turbo。
转换示例:
完成模式:
Translate the following English text to French: "{text}"
聊天模式:
[ {"role": "system", "content": "是一位擅长英法翻译的助手。"}, {"role": "user", "content": "将以下英文翻译成法语:'{text}'"} ]