AI资讯
掌握人工智能AI动态,领略未来风采!
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相关的技术实现;