Meta正式发布并开源了Llama 3系列模型,本次发布了8B和70B的预训练及指令微调语言模型。这个模型发布后,国内大模型收费的念头基本可以断绝了;楼主亲测,在 华为笔记本上(11th Gen Intel(R) Core(TM) i5-1135G7 @ 2.40GHz 2.42 GHz 16G内存,无显卡)运行的基本很流畅了,整体效果参考一下视频:
Llama 3 的亮点
1、基于超过 15T token 训练,相当于 Llama 2 数据集的 7 倍还多;
2、支持 8K 长文本,改进的 tokenizer 具有 128K token 的词汇量,可实现更好的性能;
3、在大量重要基准中均具有最先进性能;
4、新能力范畴,包括增强的推理和代码能力;
5、训练效率比 Llama 2 高 3 倍;
6、带有 Llama Guard 2、Code Shield 和 CyberSec Eval 2 的新版信任和安全工具。
体验下来,最小的模型,都要比国内一众收费模型效果好;
下面来讲下如何实现本地部署,并完成视频上的功能;
第一步:安装ollama :
Ollama 是一个强大的框架,它帮助用户快速在本地运行大模型,通过简单的安装指令,可以让用户执行一条命令就在本地运行开源大型语言模型,例如 Llama 2。安装方式很简单,在这里下载安装包即可:
https://ollama.com/download 详细的安装方式,可以参考我这篇文章 谷歌大模型Gemma在家用电脑下的安装和测试
第二步:安装大模型 Llama3,安装方式:打开cmd命令行工具,敲如如下命令:
ollama run llama3
坐等下载安装即可,安装完成后,会有以下命令提示:

这样就安装好了,可以向大模型提问了,非常简单;
第三步:整合到聊天系统中; ollama提供了丰富的接口,细节可以参考:
ollama/docs/api.md at main · ollama/ollama · GitHub 本地接口调用格式如下:
curl http://localhost:11434/api/generate -d '{
"model": "llama3",
"prompt": "人生的意义是什么?",
"stream": true
}'
以上采用了流式输出,要让前端界面能否实时反馈出来,我们需要采用 websocket 来使用;
先看下前端核心代码:连接上websocket 接口
this.ws = new WebSocket(wsUrl);
this.ws.onopen = this.onOpen.bind(this);
this.ws.onerror = this.onError.bind(this);
this.ws.onmessage = this.onMessage.bind(this);
this.ws.onclose = this.onClose.bind(this);
// 发送消息监听函数
ws.$on(["reply", "chat"], data => {
let one_chat = document.getElementById(data.ai_id);
if (one_chat) {
one_chat.innerHTML += data.msn;
this.goPageBottom(); // 滑动到页面底部
return;
}
});
当websocket接收到请求的时候,将推送的内容,拼接到div元素的后面
后端的请求:输出流式数据:核心函数如下:
function ai_send($data, $content, $fd, &$server)
{
$apiUrl = 'http://127.0.0.1:11434/api/generate';
$id = md5($fd . '//' . $content.'//'.time());
//返回数据
$response = '';
$all_response = '';
//不完整的数据
$imperfect = '';
$callback = function ($ch, $call_data) use (&$data, &$server, &$fd,
&$response, &$imperfect, &$all_response, &$id) {
$dataLength = strlen($call_data);
Log::ERROR('ai:' . $call_data);
//有可能会返回不完整的数据
if (substr($call_data, -1) !== "n") {
$imperfect .= $call_data;
return $dataLength;
}
if ($imperfect != '') {
$call_data = $imperfect . $call_data;
$imperfect = '';
}
$msg = explode("n", $call_data);
foreach ($msg as $msg_str) {
if (empty ($msg_str)) {
continue;
}
$msg_obj = @json_decode($msg_str);
if (isset ($msg_obj->response)) {
$response .= $msg_obj->response;
}
if ($msg_obj->done) {
break;
}
}
if (!empty ($response)) {
$response = htmlspecialchars($response);
$response = str_replace(' ', ' ', $response);
$response = str_replace("n", '<br/>', $response);
$data['data']['msn'] = $response;
$data['data']['msn_type'] = 100; //ai
$data['data']['ai_id'] = $id;
$all_response .= $response;
$response = '';
// Log::ERROR('ai:' . json_encode($data));
// 将数据发送给前端
$server->push((int) $fd, json_encode($data));
}
return $dataLength;
};
$postData = [
'model' => 'llama3',
'prompt' => '用中文回答:' . $content,
'stream' => true
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_URL, $apiUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postData));
curl_setopt($ch, CURLOPT_WRITEFUNCTION, $callback);
curl_exec($ch);
curl_close($ch);
return $all_response;
}
以上就是llama3 部署及应用于客服系统的核心步骤,欢迎各位加我粉丝,大家一起学习ai相关的技术实现;

