LLM-RAG项目 P34 数据双向绑定和Markdown转化
上节课提到,想在同一个页面,实现无刷新对话功能,得用js去提交和接收数据。但是这个数据,是在页面上勾选或者是填写的,那怎么传给js呢?这就是这节课要讲解的内容,叫做数据的双向绑定。
代码示例
1、数据双向绑定
所谓的数据双向绑定,就是界面和数据模型之间的变化,会自动相互更新。
<script> function app(){ return { params: { model_name: llmModels[0], dataset_ids: [] }, chatInput: '', } </script> <select id="model-select" x-model="params.model_name"> <option :selected="params.model_name === model_name"></option> <input type="checkbox" :value="dataset.id" x-model="params.dataset_ids"> <input type="text" x-model="chatInput">
2、渲染对话内容
messages: [ {'role': 'user', 'content': '给我讲个笑话'}, {'role': 'assistant', 'content': '一个男人去看医生,说:“医生,我每次喝咖啡的时候,眼睛都会痛。” 医生:“你试过把 **勺子** 拿出来吗?”'}, ], <!-- 动态聊天消息将插入此处 --> <template x-for="(message, index) in messages" :key="index"> <div> <template x-if="message.role === 'user'"> <div class="flex bg-blue-100 px-4 py-2 rounded-lg"> <span class="w-16 text-right font-medium flex-shrink-0">用户:</span> <div class="flex-1" x-text="message.content"></div> </div> </template> <template x-if="message.role === 'assistant'"> <div class="flex bg-gray-100 px-4 py-2 rounded-lg"> <span class="w-16 text-right font-medium flex-shrink-0">大模型:</span> <div class="flex-1" x-text="message.content"></div> </div> </template> </div> </template>
3、渲染Markdown格式
大模型返回的内容,有可能是markdown格式的,借助一个三方js库,实现markdown格式的解析。
convertMarkdown: function(content) { return marked.parse(content); } x-html="convertMarkdown(message.content)"
4、自动滚动窗口到最新消息
当消息很多时,窗口自动滚动到最新消息。
updateChatWindow: function() { const chatWindow = document.getElementById('chat-window'); chatWindow.scrollTop = chatWindow.scrollHeight; }, init: function(){ this.$watch('messages', (value) => { this.updateChatWindow(); }); this.$nextTick(() => { this.updateChatWindow(); }); }
这节课内容比较少,但是非常重要,正因为有了数据双向绑定,才能实现后面逐字输出的效果。大家如果第一次听说这个概念,可以先去了解一下。
本文链接:http://ichenhua.cn/edu/note/768
版权声明:本文为「陈华编程」原创课程讲义,请给与知识创作者起码的尊重,未经许可不得传播或转售!