Tutorial

Warning

  • 最后更新于2022.10.12
  • WeLM 提供续写功能,但并不具有原生对话能力

WeLM 是一个非常擅长理解和生成文本的通用语言模型。你可以通过调用 WeLM 的 API 解决多种多样涉及文本的任务。

在本教程中,我们将快速构建一个给猫咪取名字的程序以及一个简单的问答程序。在此过程中,你将学习到将 WeLM API 用于其他任务(包括且不限于对话、文本风格转换、阅读理解、翻译等)的关键概念和步骤,更多如何构造prompt的例子和关键tips还可以阅读功能介绍

介绍

「补全」是 WeLM API 的核心思想。 输入文本作为 Prompt(提示),API 将返回文本,并尝试补全您提供的任何上下文。

如果你给的 prompt 是,

我今天很

模型也许会返回文本:“开心,因为看了一本书。”。

如果你给的 prompt 是,

问题:百年孤独的作者是?\n 回答:

模型也许会返回文本:“加西亚·马尔克斯”。

下面我们将利用 WeLM 的补全能力首先实现一个给猫咪取名字的功能。

一、给猫咪取名字

简述你要完成的任务

在很多场景下,详细告诉 WeLM 你想要做什么任务是有帮助的。 你可以尝试在playground中输入,

给我的猫取个名字

但你会发现效果似乎不尽人意,这是因为这个任务不太常见,你需要告诉 WeLM 一些例子让它「举一反三」。

给出一个或多个例子

接下来我们提供几个例子给 WeLM:

给自己的猫咪取个特色的名字。

描述:美短 动漫角色
名字:哆啦
描述:英短 黑色 饮品
名字:可乐
描述:橘猫  黄色  食物
名字:

你可以再次粘贴到Playground中,你会发现这次 WeLM 返回的效果很棒,有很多名字你可以选择。这说明提供你期望的输入和输出样例有助于WeLM返回更好的结果。

参数设置

如果你不完全不熟悉深度学习的概念,你主要修改的参数是 temperature,当temperature 为0,就是稳定输出同一个结果,当temperature越大,生成不同内容的可能性越发散,更多内容可以跳转至开放文档

调用和对返回结果处理

你可以用你熟悉的编程语言请求WeLM的API,

curl -H 'Content-Type: application/json' -H 'Authorization: Bearer your_api_token' https://welm.weixin.qq.com/v1/completions -d \
'{
    "prompt":"给自己的猫咪取个特色的名字。\n\n描述:美短 动漫角色\n名字:哆啦\n描述:英短 黑色 饮品\n名字:可乐\n描述:橘猫  黄色  食物\n名字:",
    "model":"xl",
    "max_tokens":16,
    "temperature":0.85,
    "top_p":0.95,
    "top_k":10,
    "n":5,
    "echo":false,
    "stop":"\n"
}'

这里我们设置停用词(对应参数stop)为换行符"\n",因为按照 WeLM 强大的补全能力,它可以持续的补全出多个【描述】和【名字】,"\n"可以很好的截断提取出我们需要的部分,你可以根据你的prompt格式或者内容设置其他停用词。

我们再用WeLM实现一个简单的问答程序。

二、问答程序

简述你要完成的任务

按照上一个例子里学到的,你可以尝试在playground中输入,

下面我们做个问答任务
问题:二战转折点是?
回答:

此处为了答案的确定性设置参数 temperature 为0。但是我们发现答案似乎还不够正确。

给出一个或多个例子

接下来我们提供几个例子给 WeLM

下面我们做个问答任务
问题:百年孤独的作者是?
回答:加西亚·马尔克斯
问题:二战转折点是?
回答:

再次粘贴到Playground中,你会发现这次 WeLM 返回的结果更好了。用一个例子或者多个例子能让 WeLM 更清楚的知道它应该如何处理以及返回什么内容。

调用和对返回结果处理

curl -H 'Content-Type: application/json' -H 'Authorization: Bearer your_api_token' https://welm.weixin.qq.com/v1/completions -d \
'{
    "prompt":"下面我们做个问答任务\n\n问题:百年孤独的作者是?\n回答:加西亚·马尔克斯\n问题:二战转折点是?\n回答:",
    "model":"xl",
    "max_tokens":20,
    "temperature":0.0,
    "top_p":0.0,
    "top_k":0,
    "n":1,
    "echo":false,
    "stop":"\n"
}'

注意这里的temperature等参数设置和给猫咪取名字的程序有所不同。