在上一篇文章当中,我们已经通过Langchain-Chatchat+Qwen-14b-int4完成了本地知识库的搭建,现在我们通过vue和api接口来做定制的聊天页面,达成下图类似gpt或者其他大模型的显示效果:

image.png

1.知识库启动:

见上一篇文章

2.api接口部署:

在/Langchain-Chatchat/configs的serve_config文件中可以修改api的相关端口

API_SERVER = {
    "host": DEFAULT_BIND_HOST,
    "port": 6006,
}

# fastchat openai_api server
FSCHAT_OPENAI_API = {
    "host": DEFAULT_BIND_HOST,
    "port": 20000,
}

访问端口会跳转到接口的文档页面 image.png 可以看到相关接口的路径和参数,还可以点击try在线调试,可谓非常的人性化了。我们要用的接口为/chat/knowledge_base_chat(知识库问答)

3.前端页面:

分析下类似的聊天页面,大致分为聊天消息列表和聊天输入框两部分,先完成消息列表:

<div class="chatBox" ref="chatBox">
  <template v-for="(item,index) in msglist">
    <div class="chatUser" v-if="item.role=='user'">
      <div class="chatContent">
        <!-- 用户头像 -->
        <svg>
        </svg>
        <div class="chatContent-content">
          {{item.content}}
        </div>
      </div>
    </div>
    <div class="chatAssistant" v-if="item.role=='assistant'">
      <div class="chatContent">
        <!-- 机器人头像 -->
        <svg>
        </svg>
        <div class="chatContent-content">
          {{item.content}}
        </div>
      </div>
    </div>
  </template>
</div>

聊天输入框:

<div class="chatArea">
  <el-input ref="inputDiv" class="chatpdfArea-textarea" type="textarea" autosize placeholder="请输入对话内容,按 Ctrl+Enter 换行"
    v-model="askContent" :rows="1" @keydown.enter.native="messageSendlisten($event)">
  </el-input>
  <svg>
  </svg>
</div>

Enter直接将输入框文字插入到消息列表并发送,Ctrl+Enter 换行:

messageSendlisten(event) {
  if (event.keyCode == 13) {
    if (!event.ctrlKey) {
      event.preventDefault();
      this.msglist.push({
        role: 'user',
        content: this.askContent
      })
      this.askContent=''
      this.sendMsg();
    } else {
      let dIndex = event.srcElement.selectionStart // 光标所在位置
      this.askContent = this.askContent.slice(0, dIndex) + '\n' + this.askContent.slice(dIndex)
      this.$nextTick(() => { // 设置光标位置
        event.srcElement.selectionStart = dIndex + 1
        event.srcElement.selectionEnd = dIndex + 1
      })
    }
  }
},

直接请求api,需要等待一段时间,然后一下子更新一大段对话,这样的体验并不好,可以通过stream的方式访问api,此时发现回复的数据格式如下:

image.png 实现逐字回答的效果:

 // 节流略
sendMsg() {
  // 构建请求参数
  let that = this
  let params = {
    knowledge_base_name: "", //知识库名称
    top_k: 3,
    score_threshold: 0.8,
    stream: true,
    local_doc_url: false,
    model_name: "Qwen-14B-Chat-Int4",
    prompt_name: "default",
    temperature: 0.7,
    query: this.msglist[this.msglist.length - 1].content,
    histort: [] //消息历史,取消息列表最后n轮
  };
  that.msglist.push({
    role: 'assistant',
    content: '思考中...'
  })
  axios({
    method: 'post',
    headers: {
      'Content-Type': 'application/json',
      'responseType': 'stream'
    },
    data: params,
    url: apiUrl + '/chat/knowledge_base_chat',
    onDownloadProgress: function (event) {
      if (that.msglist[that.msglist.length - 1].content == '思考中...') {
        that.msglist[that.msglist.length - 1].content = '';
      }
      let chunk = event.target.responseText
      try {
        /* 序列化返回的内容 */
        let chunkStr = chunk.replace(/}{/g, "},####,{");
        let answerArr = chunkStr.split(',####,')
        let answerStr = '';
        answerArr.forEach(function (item) {
          if (item.indexOf("docs") < 0) {
            let itemObj = JSON.parse(item)
            answerstr = answerstr + itemObj.answer
          }
        });
        that.msglist[that.msglist.length - 1].content = answerstr
        that.goHeight();
      } catch (e) { console.log(e) }
    }
  })
}

消息多了,发现显示的还是消息最上面一行,根本看不到后面的内容,需要给消息列表设置滚动:

.chatBox{
  flex: 1;
  margin: 0 auto;
  overflow-y: auto; 
  height:800px;
 }

自动滚动到回答内容的底部:

// 滚动区域初始高度
init() {
  this.$nextTick(() => {
    this.scrollHeight = this.$refs.chatBox.scrollHeight;
  })
},
//消息列表滚动到底部
goHeight() {
  this.$nextTick(() => {
    if (this.$refs.chatContent.scrollHeight > this.scrollHeight) {
      this.scrollHeight = this.$refs.chatBox.scrollHeight
      this.$refs.chatBox.scrollTop = this.$refs.chatBox.scrollHeight;
    }
  })
}

优化下样式,收工~

如何系统的去学习大模型LLM ?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。

事实上,抢你饭碗的不是AI,而是会利用AI的人。

科大讯飞、阿里、华为等巨头公司发布AI产品后,很多中小企业也陆续进场!超高年薪,挖掘AI大模型人才! 如今大厂老板们,也更倾向于会AI的人,普通程序员,还有应对的机会吗?

与其焦虑……

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!

但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高。

针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

👉CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)👈

一、LLM大模型经典书籍

AI大模型已经成为了当今科技领域的一大热点,那以下这些大模型书籍就是非常不错的学习资源。

在这里插入图片描述

二、640套LLM大模型报告合集

这套包含640份报告的合集,涵盖了大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(几乎涵盖所有行业)

在这里插入图片描述

三、LLM大模型系列视频教程

在这里插入图片描述

四、LLM大模型开源教程(LLaLA/Meta/chatglm/chatgpt)

在这里插入图片描述

LLM大模型学习路线

阶段1:AI大模型时代的基础理解

  • 目标:了解AI大模型的基本概念、发展历程和核心原理。

  • 内容

    • L1.1 人工智能简述与大模型起源
    • L1.2 大模型与通用人工智能
    • L1.3 GPT模型的发展历程
    • L1.4 模型工程
    • L1.4.1 知识大模型
    • L1.4.2 生产大模型
    • L1.4.3 模型工程方法论
    • L1.4.4 模型工程实践
    • L1.5 GPT应用案例

阶段2:AI大模型API应用开发工程

  • 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。

  • 内容

    • L2.1 API接口
    • L2.1.1 OpenAI API接口
    • L2.1.2 Python接口接入
    • L2.1.3 BOT工具类框架
    • L2.1.4 代码示例
    • L2.2 Prompt框架
    • L2.3 流水线工程
    • L2.4 总结与展望

阶段3:AI大模型应用架构实践

  • 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。

  • 内容

    • L3.1 Agent模型框架
    • L3.2 MetaGPT
    • L3.3 ChatGLM
    • L3.4 LLAMA
    • L3.5 其他大模型介绍

阶段4:AI大模型私有化部署

  • 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。

  • 内容

    • L4.1 模型私有化部署概述
    • L4.2 模型私有化部署的关键技术
    • L4.3 模型私有化部署的实施步骤
    • L4.4 模型私有化部署的应用场景

这份 LLM大模型资料 包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

👉CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)👈

Logo

一站式 AI 云服务平台

更多推荐