最强开源模型Llama3的本地部署教程,并应用于客服聊天系统!

Meta正式发布并开源了Llama 3系列模型,本次发布了8B和70B的预训练及指令微调语言模型。这个模型发布后,国内大模型收费的念头基本可以断绝了;楼主亲测,在 华为笔记本上(11th Gen Intel(R) Core(TM) i5-1135G7 @ 2.40GHz 2.42 GHz 16G内存,无显卡)运行的基本很流畅了,整体效果参考一下视频:


00:09 / 00:37


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相关的技术实现;




分享一个国内免费使用GPT4.0的AI智能问答工具:智答专家。支持AI文本、作图、语音、Sora视频。无需魔法,亲测有效,点击访问

标签:Llama 3
来源:智答专家
发布时间:2024-04-23 10:33