WeLM
require("dotenv").config();
import https from "https";
const token = process.env.WELM_APIKEY;
/**
* model: string 必选,要使用的模型名称,当前支持的模型名称有medium、 large 和 xl
* prompt: string 可选,默认值空字符串,给模型的提示
* max_tokens: integer 可选,最多生成的token个数,默认值 16
* temperature: number 可选 默认值 0.85,表示使用的sampling temperature,更高的temperature意味着模型具备更多的可能性。对于更有创造性的应用,可以尝试0.85以上,而对于有明确答案的应用,可以尝试0(argmax采样)。 建议改变这个值或top_p,但不要同时改变。
* top_p: number 可选 默认值 0.95,来源于nucleus sampling,采用的是累计概率的方式。即从累计概率超过某一个阈值p的词汇中进行采样,所以0.1意味着只考虑由前10%累计概率组成的词汇。 建议改变这个值或temperature,但不要同时改变。
* top_k: integer 可选 默认值50,从概率分布中依据概率最大选择k个单词,建议不要过小导致模型能选择的词汇少。
* n: integer 可选 默认值 1 返回的序列的个数
* echo: boolean 可选 默认值 false,是否返回prompt
* stop: string 可选 默认值 null,停止符号。当模型当前生成的字符为stop中的任何一个字符时,会停止生成。若没有配置stop,当模型当前生成的token id 为end_id或生成的token个数达到max_tokens时,停止生成。合理配置stop可以加快推理速度、减少quota消耗。
*
* 最好的 prompt 设计原则是:第一,描述清楚;第二,例子具备代表性(多个例子更好)。
*/
interface WeLMRequest {
model: "medium" | "large" | "xl";
prompt?: string;
max_tokens?: number;
temperature?: number;
top_p?: number;
top_k?: number;
n?: number;
echo?: boolean;
stop?: string;
}
interface WeLMResponse {
id: string;
object: string;
created: number;
model: string;
choices: Array<{
text: string;
index: number;
logprobs: number;
finish_reason: string;
}>;
}
const data: WeLMRequest = {
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",
};
const requestBuffer = Buffer.from(JSON.stringify(data));
console.log(requestBuffer.length);
const options: https.RequestOptions = {
host: "welm.weixin.qq.com",
port: 443,
path: "/v1/completions",
method: "POST",
headers: {
"Content-Type": "application/json",
"Content-Length": requestBuffer.length,
Authorization: token,
},
};
const req = https.request(options, function (res) {
console.log(res.statusCode);
res.on("data", function (result: Uint8Array) {
const response: WeLMResponse = JSON.parse(result.toString());
console.log(response);
});
});
req.write(requestBuffer);
req.end();
req.on("error", function (e) {
console.error(e);
});
预期返回
{
"id": "略",
"object": "text_generation",
"created": 0,
"model": "xl",
"choices": [
{ "text": "橘子", "index": 0, "logprobs": 0, "finish_reason": "finished" },
{ "text": "小橘", "index": 1, "logprobs": 0, "finish_reason": "finished" },
{ "text": "橙汁", "index": 2, "logprobs": 0, "finish_reason": "finished" },
{ "text": "薯条", "index": 3, "logprobs": 0, "finish_reason": "finished" },
{ "text": "薯片", "index": 4, "logprobs": 0, "finish_reason": "finished" }
]
}