授权声明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 Developer Centre, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道
之前一段时间有通过用GPT对接对接过个人微信的群,但是没过多久微信就被警告不能扫码了,所以这次尝试把Llama 2接入到钉钉中,弄一个钉钉机器人
首先进入到钉钉开放平台的后台管理系统:
右上角选择 创建应用,选择继续使用旧版创建机器人,输入需要创建的机器人的名称等信息。
创建完成后,在开发管理中填写消息接受地址, 在消息接收地址中填写post地址即可。 这个地址可以通过@群机器人,将消息发送到指定外部服务,还可以将外部服务的响应结果返回到群组。这里填写一个公网可访问的HTTPS/HTTP地址,用于接收POST过来的消息。
这时候你的钉钉上就会出现一个XX-TEST内部测试群,进入该群设置选项,选择智能群助手
为你的组织添加机器人,选择自定义机器人,简单的补充下相关信息就创建完成了。
创建完成后需要获取和配置机器人信息,点击刚刚创建好的小机器人。
获取webhook
我们需要复制 Webhook 这个地址后面用于消息推送使用(确保上方消息推送功能也是开启的哦)
配置安全设置
钉钉机器人的安全策略有三种,第一种是使用关键字,就是说你推送的消息里必须包含你创建机器人时定义的关键字,如果不包含就推送不了消息,第二种就是使用加密签名,第三种是定义几个ip源,非这些源的请求会被拒绝。
因为我的组织只有两个人,不需要很高的安全性,所以我这里用最容易配置的自定义关键字。
首先需要登录AWS
在Search中搜索SageMaker,进入SageMaker控制台
在控制台找到SageMaker JumpStart,点击SageMaker JumpStart
我们可以选择现有的 SageMaker 训练作业,该作业将自动填充所有相关信息。此信息包括容器框架、训练脚本位置、模型构件位置、实例类型、默认训练和验证数据集以及目标列。
在SageMaker JumpStart有很多模型,你可以选择你自己需要的模型进行创建
在搜索框中搜索Llama-2-7B-Chat模型,点击模型。进入模型详情,点击Deploy。
在Search中搜索Lambda,进入Lambda控制台
Lambda函数基本步骤:
使用PHP作为后端语言对接钉钉群聊机器人接口,接受钉钉机器人发送的消息,并查询模型后返回
接受钉钉消息并返回回复
request->param('text');
$content = trim($text['content']);
if (empty($content) || $content === "你好" || $content === "您好") {
$message = "你好";
} else {
$data = $this->LlmRequest($content);
if ($data['code'] == 1) {
$message = "出错了,请稍后再试";
} else {
$message = $data['data'];
}
}
//推送到钉钉
$ding = new DingDing();
$res = $ding->textMsgSend("chatbot:" . $message);
return $res;
}
private function LlmRequest($text)
{
$llm_api_url = "API地址";
$json_body = json_encode([
"inputs" => [
[
["role" => "system", "content" => "你现在是一个聊天机器人,根据用户的问话进行合理的回答"],
["role" => "user", "content" => $text]
]
],
"parameters" => ["max_new_tokens" => 256, "top_p" => 0.9, "temperature" => 0.6]
]);
$ch = curl_init($llm_api_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_body);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
]);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($ch);
curl_close($ch);
if ($response === false) {
return ['data' => "", 'code' => 1];
} else {
// 处理响应
$dataArray = json_decode($response, true);
// 访问内容
$content = $dataArray[0]['generation']['content'];
return ['data' => $content, 'code' => 0];
}
}
}
PHP钉钉消息的类,钉钉发送信息代码
在代码中$robot_url 填写之前创建的钉钉机器人的webhook地址
robot_url = $robot_url;
}
}
public function textMsgSend($msg, $mobile = [])
{
$msgJson = json_encode([
'msgtype' => 'text',
'text' => [
"content" => $msg
],
'at' => [
'atMobiles' => $mobile,
'isAtAll' => false
]
]);
$result = $this->sendRequest($msgJson);
return $result;
}
public function sendRequest($json)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->robot_url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json;charset=utf-8'));
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 不用开启curl证书验证
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
}