当前位置: 首页 > news >正文

AI-Ollama使用llama模型vue2中流式响应,模仿AI提问逐字渲染,呈现打印机效果

1.前言

        在vue2中非流式响应数据,请求响应完成后,将返回文本数据渲染。在Ollama API模型交互中,通过设置stream的状态为true开启流式响应。

{
  "model": "<model-name>",  // 模型名称
  "prompt": "<input-text>", // 输入的提示词
  "stream": false,          // 是否启用流式响应(默认 false)
  "options": {              // 可选参数
    "temperature": 0.7,     // 温度参数
    "max_tokens": 100       // 最大 token 数
  }
}

 参考文档Ollama API 交互 | 菜鸟教程https://www.runoob.com/ollama/ollama-api.html

2.流式响应-API.js

const API_URL = 'http://localhost:11434'; // Ollama默认的API端口是11434

export const generateText = async function*(prompt){
    try {
        // fetch发送请求
        const response = await fetch(`${API_URL}/api/generate`, {
            method: 'POST',
            body: JSON.stringify({
                model: 'llama3.2', // 指定模型
                prompt: prompt,   // 输入的提示文本
                stream: true,     // 启用流式传输
            }),
        });
        // 检测校验是否成功
        if (!response.ok) {
            throw new Error('Network response was not ok');
        }
        // 获取响应体的ReadableStream的读取器
        const reader = response.body.getReader();
        while (true) {
            // 读取下一个二进制数据块
            const { done, value } = await reader.read();

            //数据传输完成
            if (done) break;

            // 二进制数据块解码为字符串
            const chunk = new TextDecoder().decode(value);

            // 转换为json格式的文本流 yield返回
            yield JSON.parse(chunk);
        }
    } 
    catch (error) {
        // 记录生成文本过程中的错误
        console.error('Error generating text:', error);
        throw error;
    }
};
  • fetch API: 使用 fetch 发送 POST 请求,并启用流式传输 (stream: true)。

  • response.body.getReader(): 获取响应体的 ReadableStream 的读取器,用于逐步读取流式数据。

  • await reader.read(): 读取下一个二进制数据块,返回一个包含 done 和 value 的对象。done 表示是否读取完毕,value 是读取到的二进制数据。

  • new TextDecoder().decode(value): 将二进制数据解码为字符串。

  • yield JSON.parse(chunk): 将字符串解析为 JSON 对象,并通过 yield 返回,使得调用方可以逐步处理流式数据

  • 在 fetch 中处理流式数据的关键在于使用 response.body.getReader() 来逐步读取数据块,并通过 yield 返回解析后的 JSON 对象。

3. 组件调用

<template>
	<div>
		<div class="textContainer">{{ generatedText }}</div>
		<textarea v-model="prompt" placeholder="输入你的问题" style="width: 600px;"></textarea>
		<button @click="generateText">发送</button>
	</div>
</template>
<script>
import { generateText } from '../api/api.js'; // 引入你的API服务文件

export default {
	data() {
		return {
			prompt: '',
			generatedText: ''
		};
	},
	methods: {
		// 调用函数 传入输入提示文本 获取数据流
		async generateText() {
			try {
				const dataStream = generateText(this.prompt);
				// for await循环逐步处理数据流中的每个分块
				for await (const chunk of dataStream) {
					// 是否包含响应数据
					if (chunk.response) {
						// 分块数据流响应数据逐步添加到渲染文本
						this.generatedText += chunk.response; // 逐步渲染返回的数据
					}
				}
			}
			catch (error) {
				console.error('Error generating text:', error);
			}
		},
	}
};
</script>
<style scoped>
	.textContainer {
		height: 400px;
		color: violet;
		border: 2px solid red;
		border-radius: 10px;
		margin: 100px;
	}
</style>

4.提示

Ollama(LLM)。模型引入,vue中的引入依赖,以及在请求时,请开启对应模型。具体请参考博主上一篇文章。

AI-Ollama本地大语言模型运行框架与Ollama javascript接入-CSDN博客文章浏览阅读655次,点赞19次,收藏9次。AI-Ollama本地大语言模型运行框架与Ollama javascript接入 https://blog.csdn.net/2301_76671906/article/details/146019584?fromshare=blogdetail&sharetype=blogdetail&sharerId=146019584&sharerefer=PC&sharesource=2301_76671906&sharefrom=from_link

相关文章:

  • C++ 重载运算符
  • 工程化与框架系列(21)--前端性能优化
  • 【高分论文密码】AI大模型和R语言的全类型科研图形绘制,从画图、标注、改图、美化、组合、排序分解科研绘图每个步骤
  • 子数组问题——动态规划
  • 3D技术对于汽车行业的影响有哪些?
  • 【Python】05、Python运算符
  • OpenCV 颜色空间:原理与操作指南
  • 取消强制配储,新型储能何去何从?
  • React:Axios
  • 清华大学deepseek应用教程,清华大学deepseek教学指南(1-4部下载)
  • 十一、Spring Boot:使用JWT实现用户认证深度解析
  • 飞鹤奶粉三度问鼎 TPM 大奖
  • IO学习day4
  • qt 播放pcm音频
  • 06实现相册小项目
  • 个人学习编程(3-06) 树形数据结构
  • Go语言里面的堆跟栈 + new 和 make + 内存逃逸 + 闭包
  • URL中的特殊字符与web安全
  • uniapp封装路由管理(兼容Vue2和Vue3)
  • module ‘matplotlib‘ has no attribute ‘colormaps‘
  • 网站在线支付/推广链接让别人点击
  • 永久免费的移动建站平台/网页版
  • 花都网站建设 骏域网站/鸣蝉智能建站
  • 有没有什么做海报字体的网站/澳门seo关键词排名
  • 米课做网站/怎样精选关键词进行网络搜索
  • wordpress系统迁移/重庆seo全网营销