明天你会感谢今天奋力拼搏的你。
ヾ(o◕∀◕)ノヾ
Python版本:3.11.5 OpenAI版本:1.12.0
OpenAI 提供了两类 API:
说明:
这里就不过多介绍Completion API了,下文都是基于Chat API,Chat API参数如下:
def get_chat_completion(session, user_prompt, model="gpt-4o-mini"):
session.append({"role": "user", "content": user_prompt})
response = client.chat.completions.create(
model=model,
messages=session,
# 以下默认值都是官方默认值
temperature=1, # 生成结果的多样性。取值 0~2 之间,越大越发散,越小越收敛
seed=None, # 随机数种子。指定具体值后,temperature 为 0 时,每次生成的结果都一样
stream=False, # 数据流模式,一个字一个字地接收
response_format={"type": "text"}, # 返回结果的格式,可以是 text、json_object 或 json_schema
top_p=1, # 随机采样时,只考虑概率前百分之多少的 token。不建议和 temperature 一起使用
n=1, # 一次返回 n 条结果
max_tokens=None, # 每条结果最多几个 token(超过截断)
presence_penalty=0, # 对出现过的 token 的概率进行降权
frequency_penalty=0, # 对出现过的 token 根据其出现过的频次,对其的概率进行降权
logit_bias={}, # 对指定 token 的采样概率手工加/降权,不常用
)
msg = response.choices[0].message.content
return msg
上文大部分字段可以用默认值,temperature字段要特别注意,一些执行任务的调用用0,文本生成用0.7-0.9,无特殊需要不建议超过1,取值越大越可能一本正经的胡言乱语。
在此编写一个流量套餐的对话案例,用AI来作为客服,回答问题:
# 导入依赖库
import json
from openai import OpenAI
from dotenv import load_dotenv, find_dotenv
# 加载 .env 文件中定义的环境变量
_ = load_dotenv(find_dotenv())
# 初始化 OpenAI 客户端
client = OpenAI() # 默认使用环境变量中的 OPENAI_API_KEY 和 OPENAI_BASE_URL
# 定义消息历史。先加入 system 消息,里面放入对话内容以外的 prompt
messages = [
{
"role": "system", # system message 只能有一条,且是第一条,对后续对话产生全局影响。LLM 对其遵从性有可能更高。一般用于放置背景信息、行为要求等。
"content": """
你是一个手机流量套餐的客服代表,你叫小瓜。可以帮助用户选择最合适的流量套餐产品。可以选择的套餐包括:
经济套餐,月费50元,10G流量;
畅游套餐,月费180元,100G流量;
无限套餐,月费300元,1000G流量;
校园套餐,月费150元,200G流量,仅限在校生。
"""
}
]
def get_completion(prompt, model="gpt-4o-mini"):
# 把用户输入加入消息历史
messages.append({"role": "user", "content": prompt})
response = client.chat.completions.create(
model=model,
messages=messages,
temperature=0.7,
)
msg = response.choices[0].message.content
# 把模型生成的回复加入消息历史。很重要,否则下次调用模型时,模型不知道上下文
messages.append({"role": "assistant", "content": msg})
return msg
# 连续调用模型,进行多轮对话
get_completion("流量最大的套餐是什么?")
get_completion("多少钱?")
get_completion("给我办一个")
# 格式化打印输出一下对话记录
print(json.dumps(messages, indent=4, ensure_ascii=False))
打印的结果如下:
[
{
"role": "system",
"content": "\n你是一个手机流量套餐的客服代表,你叫小瓜。可以帮助用户选择最合适的流量套餐产品。可以选择的套餐包括:\n经济套餐,月费50元,10G流量;\n畅游套餐,月费180元,100G流量;\n无限套餐,月费300元,1000G流量;\n校园套餐,月费150元,200G流量,仅限在校生。\n"
},
{
"role": "user",
"content": "流量最大的套餐是什么?"
},
{
"role": "assistant",
"content": "流量最大的套餐是无限套餐,月费300元,提供1000G流量。如果您需要大量的流量,这个套餐非常适合您。请问您还有其他需要了解的吗?"
},
{
"role": "user",
"content": "多少钱?"
},
{
"role": "assistant",
"content": "无限套餐的月费是300元。您需要购买这个套餐吗,或者想了解其他套餐的信息?"
},
{
"role": "user",
"content": "给我办一个"
},
{
"role": "assistant",
"content": "很抱歉,我无法直接为您办理套餐。不过,我可以为您提供办理套餐的步骤和所需材料。您可以通过我们的官方网站、手机应用或前往营业厅进行办理。请问您需要了解办理的具体流程吗?"
}
]
全部评论