03|巧用提示语,说说话就能做个聊天机器人
你好,我是悦创。
这一讲,我们来看看 Open AI 提供的 Completion 这个 API 接口。相信已经有不少人试过和 ChatGPT 聊天了,也有过非常惊艳的体验,特别是让 ChatGPT 帮我们写各种材料。那么,我们不妨也从这样一个需求开始吧。
1. AI 客服
在这一波 AIGC 浪潮之前,我也做过一个智能客服的产品。我发现智能客服的回答,往往是套用固定的模版。这个的缺点,就是每次的回答都一模一样。当然,我们可以设计多个模版轮换着表达相同的意思,但是最多也就是三四个模版,整体的体验还是相当呆板。
不过,有了 GPT 这样的生成式的语言模型,我们就可以让 AI 自动根据我们的需求去写文案了。只要把我们的需求提给 Open AI 提供的 Completion 接口,他就会自动为我们写出这样一段文字。
import openai
import os
openai.api_key = os.environ.get("OPENAI_API_KEY")
COMPLETION_MODEL = "text-davinci-003"
prompt = '请你用朋友的语气回复给到客户,并称他为“亲”,他的订单已经发货在路上了,预计在3天之内会送达,订单号2021AEDG,我们很抱歉因为天气的原因物流时间比原来长,感谢他选购我们的商品。'
def get_response(prompt, temperature = 1.0):
completions = openai.Completion.create (
engine=COMPLETION_MODEL,
prompt=prompt,
max_tokens=1024,
n=1,
stop=None,
temperature=temperature,
)
message = completions.choices[0].text
return message
print(get_response(prompt))
亲,您的订单已经顺利发货啦!订单号是 2021AEDG,预计在 3 天之内会寄到您指定的地址。不好意思,给您带来了不便,原计划到货时间受天气原因影响而有所延迟。期待您收到衣服后给我们反馈意见哦!谢谢你选购我们的商品!
print(get_response(prompt))
亲,您的订单 2021AEDG 刚刚已经发出,预计 3 天之内就会送达您的手中。抱歉由于天气的原因造成了物流延迟,但我们会尽快将订单发到您的手中。感谢您对我们的支持!
相同的提示语,连续调用两次之后,给到了含义相同、遣词造句不同的结果。
我在这里列出了一段非常简单的代码。代码里面,我们给 Open AI 提供的 Completion 接口发送了一段小小的提示语(Prompt)。这段提示语要求 AI 用亲切的语气,告诉客户他的订单虽然已经发货,但是因为天气原因延迟了。并且我们还加了一个小小的语言风格上的要求,我们希望 AI 用朋友的口吻向用户说话,并且称用户为“亲”。然后,我们尝试连续用完全相同的参数调用了两次 AI。
可以看到,AI 的确理解了我们的意思,满足了我们的要求,给出了一段正确合理的回复。其中有两点我觉得殊为不易。
- 他的确用“亲”来称呼了用户,并且用了一些语气词,显得比较亲切。
- 他正确地提取到了输入内容里的订单号,并且在回复内容里也把这个订单号返回给了用户。
而且,两次返回的文案内容意思是相同的,但是具体的遣词造句又有所不同。这样通过一句合理的提示语,我们就可以让自己的智能客服自己遣词造句,而不是只能套用一个固定的模版。
而每次回复的内容不一样,则归功于我们使用的一个参数 temperature。这个参数的输入范围是 0-2 之间的浮点数,代表输出结果的随机性或者说多样性。在这里,我们选择了 1.0,也就是还是让每次生成的内容都有些不一样。你也可以把这个参数设置为 0,这样,每次输出的结果的随机性就会比较小。
我将 temperature 设置为 0,你可以看到两句内容的遣词造句就基本一致了。
print(get_response(prompt, 0.0))
亲,您的订单 2021AEDG 已经发货,预计在 3 天之内会送达,由于天气原因,物流时间比原来长,我们深表歉意。感谢您选购我们的商品,祝您购物愉快!
print(get_response(prompt, 0.0))
亲,您的订单 2021AEDG 已经发货,预计在 3 天之内会送达。很抱歉因为天气的原因物流时间比原来长,感谢您选购我们的商品,祝您购物愉快!
这个参数该怎么设置,取决于实际使用的场景。 如果对应的场景比较严肃,不希望出现差错,那么设得低一点比较合适,比如银行客服的场景。如果场景没那么严肃,有趣更加重要,比如讲笑话的机器人,那么就可以设置得高一些。
既然看了 temperature 参数,我们也就一并看一下 Completion 这个接口里面的其他参数吧。
- 第一个参数是 engine,也就是我们使用的是 Open AI 的哪一个引擎,这里我们使用的是
text-davinci-003
,也就是现在可以使用到的最擅长根据你的指令输出内容的模型。当然,也是调用成本最高的模型。 - 第二个参数是 prompt,自然就是我们输入的提示语。接下来,我还会给你更多使用提示语解决不同需求的例子。
- 第三个参数是
max_tokens
,也就是调用生成的内容允许的最大 token 数量。你可以简单地把 token 理解成一个单词。实际上,token 是分词之后的一个字符序列里的一个单元。有时候,一个单词会被分解成两个 token。比如,icecream 是一个单词,但是实际在大语言模型里,会被拆分成 ice 和 cream 两个 token。这样分解可以帮助模型更好地捕捉到单词的含义和语法结构。一般来说,750 个英语单词就需要 1000 个 token。我们这里用的text-davinci-003
模型,允许最多有 4096 个 token。需要注意,这个数量既包括你输入的提示语,也包括 AI 产出的回答,两个加起来不能超过 4096 个 token。比如,你的输入有 1000 个 token,那么你这里设置的max_tokens
就不能超过 3096。不然调用就会报错。「因为设置超过 3096,一开始就会报错」 - 第四个参数 n,代表你希望 AI 给你生成几条内容供你选择。在这样自动生成客服内容的场景里,我们当然设置成 1。但是如果在一些辅助写作的场景里,你可以设置成 3 或者更多,供用户在多个结果里面自己选择自己想要的。
- 第五个参数 stop,代表你希望模型输出的内容在遇到什么内容的时候就停下来。这个参数我们常常会选用 "
\n\n
"这样的连续换行,因为这通常意味着文章已经要另起一个新的段落了,既会消耗大量的 token 数量,又可能没有必要。我们在下面试了一下,将“,
”作为 stop 的参数,你会发现模型在输出了“亲”之后就停了下来。
print(get_response(prompt, 0.0, ","))
亲
Completion 这个接口当然还有其他参数,不过一时半会儿我们还用不着,后面实际用得上的时候我们再具体介绍。如果你现在就想知道,那么可以去查看一下官方文档。如果你觉得英语不太好,可以试着用“请用中文解释一下这段话的意思”作为提示语,调用 Open AI 的模型来理解文档的含义。
欢迎关注我公众号:AI悦创,有更多更好玩的等你发现!
公众号:AI悦创【二维码】
AI悦创·编程一对一
AI悦创·推出辅导班啦,包括「Python 语言辅导班、C++ 辅导班、java 辅导班、算法/数据结构辅导班、少儿编程、pygame 游戏开发、Linux、Web」,全部都是一对一教学:一对一辅导 + 一对一答疑 + 布置作业 + 项目实践等。当然,还有线下线上摄影课程、Photoshop、Premiere 一对一教学、QQ、微信在线,随时响应!微信:Jiabcdefh
C++ 信息奥赛题解,长期更新!长期招收一对一中小学信息奥赛集训,莆田、厦门地区有机会线下上门,其他地区线上。微信:Jiabcdefh
方法一:QQ
方法二:微信:Jiabcdefh
- 0
- 0
- 0
- 0
- 0
- 0