十分钟撸一个文心一言4.0

目前百度已经开放了文心一言大语言模型。我很有兴趣尝尝鲜,经过十多分钟的头脑风暴,火力全开。一个简陋却不简单的 demo 出来了。

整体交互流程设计:

  1. 🤵‍♂️用户在输入框中输入,按回车发送。
  2. 在对话区增加一条用户输入,对话区机器人🤖显示loading状态,并发送文心一言接口请求。
  3. 文心一言返回结果后,将其展示在对话区。

页面布局

html 复制代码
<template>
  <div class="wxyy">
    <div class="dialog">
      <!-- 对话区 -->
    </div>
    <!-- 输入框 -->
    <textarea></textarea>
  </div>
</template>

主打一个简单!

调接口

核心代码自然是调文心一言的 api 接口。文档在此

如果不用流式响应,那就是普通的 post 接口,so easy!

js 复制代码
// access_token 获取参见 https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Ilkkrb0i5
const access_token = 'your_access_token'
fetch(
  `https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions_pro?access_token=${access_token}`,
  {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      /**
       * 关键参数 messages
       * 之所以是数组,在于多轮对话时需要把对话历史全部传过去供模型分析
       */
      messages: [
        {
          role: 'user',
          content: '你好',
        },
      ],
    }),
  }
)

简单优化一下

最终效果如下:

完整代码如下:

html 复制代码
<template>
  <div class="wxyy">
    <div class="dialog">
      <div v-for="item in dialog" class="item" :class="[item.role]">
        <div class="avatar" v-if="item.role === 'assistant'">🤖</div>
        <div class="content">{{ item.content }}</div>
        <div class="avatar" v-if="item.role === 'user'">🤵‍</div>
      </div>
      <div class="item assistant" v-if="loading">
        <div class="avatar">🤖</div>
        <div class="content">正在想。。。</div>
      </div>
    </div>
    <textarea @keypress.enter="sendPrompt"
              v-model="prompt"></textarea>
  </div>
</template>

<script>
export default {
  data () {
    return {
      prompt: '',
      dialog: [],
      loading: false,
    }
  },
  methods: {
    sendPrompt (e) {
      this.loading = true
      e.preventDefault()
      this.dialog.push({
        role: 'user',
        content: this.prompt,
      })
      this.prompt = ''
      // 替换成你自己的 access_token
      const access_token = 'your_access_token'
      fetch(`https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions_pro?access_token=${access_token}`, {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json'
        },
        body: JSON.stringify({
          messages: this.dialog
        })
      }).then(res => res.json()).then(res => {
        this.loading = false
        this.dialog.push({
          role: 'assistant',
          content: res.result
        })
      })
    },
  }
}
</script>

<style lang="less"
       scoped>
.wxyy {
  display: flex;
  flex-direction: column;
  width: 600px;
  height: 80vh;
  margin: 20px;
  border: 1px dashed lightcoral;

  .dialog {
    flex: 1;
    .item {
      display: flex;
      .content {
        width: 60%;
      }
    }
    .avatar {
      font-size: 32px;
    }
    .user {
      justify-content: flex-end;
      .content {
        background: lightblue;
      }
    }
  }
}
</style>
相关推荐
携欢4 分钟前
PortSwigger靶场之盲 SSRF(服务器端请求伪造)漏洞通关秘籍
前端·网络·安全·web安全
慧慧吖@11 分钟前
前端关于埋点
前端
universe_0116 分钟前
前端学习css
前端·css·学习
腾讯云云开发1 小时前
小程序数据库权限管理,一看就会!——CloudBase新手指南
前端·数据库·微信小程序
多则惑少则明1 小时前
Vue开发系列——自定义组件开发
前端·javascript·vue.js
用户250694921612 小时前
next框架打包.next文件夹部署
前端
程序猿小蒜2 小时前
基于springboot的校园社团信息管理系统开发与设计
java·前端·spring boot·后端·spring
一叶难遮天2 小时前
开启RN之旅——前端基础
前端·javascript·promise·js基础·es6/ts·npm/nrm
申阳2 小时前
Day 4:02. 基于Nuxt开发博客项目-整合 Inspira UI
前端·后端·程序员
程序猿_极客2 小时前
【期末网页设计作业】HTML+CSS+JavaScript 猫咪主题网站开发(附源码与效果演示)
前端·css·html·课程设计·网页设计作业