引言
在当今的人工智能领域,大语言模型(LLM)的应用越来越广泛。然而,传统的API调用方式存在一些局限性,如传输速度慢、延迟高以及用户数据暴露的风险。为了解决这些问题,我们可以选择本地部署一个LLM模型,比如Ollama,它允许用户在本地运行模型,从而确保了数据的安全性和隐私。
Ollama简介
Ollama是一个支持本地部署的语言模型平台,其模型参数是在Ollama的服务器上训练的,但实际使用时,用户的交互数据不会被上传到Ollami的服务器,保证了数据的私密性和安全性。
部署步骤
-
选择模型:首先,在Ollama中找到适合您需求的模型。根据您的硬件条件(尤其是显卡),可以选择不同大小的模型,例如deepseek-r1:1.5b或8b等。5b或8b这样的术语通常指的是模型中的参数数量。这里的“b”是英文单词“billion”的缩写,意味着十亿。因此,当提到一个模型有1.5b的参数时,指的是这个模型包含了大约15亿个参数。 参数是在训练过程中通过学习数据集中的模式而调整得到的值。模型的参数量通常与其复杂度和能力成正比:参数越多,模型能够捕捉到的数据特征就越复杂,理论上可以处理的任务也越复杂、精细。
-
启动模型:通过终端输入相应的命令来启动模型。例如,对于deepseek-r1:1.5b模型,可以输入
ollama run deepseek-r1:1.5b来启动。
3. 查看帮助文档:如果您对如何操作不太熟悉,可以通过
ollama help获取详细的指令说明。
前后端交互
-
前端请求发送:前端应用通过HTTP请求将用户的问题发送给后端。这里使用了Axios库进行异步通信。
axios.post('http://localhost:3000/chat', { role: 'user', content: value // 用户输入的内容 }).then(res => { setList(prev => [...prev, { role: 'bot', content: res.data.data // 返回机器人的回答 }]) inputRef.current.value = '' }) -
处理跨域问题:为了确保前后端能够顺利通信,需要在后端设置CORS策略。
app.use(async (ctx, next) => { ctx.set('Access-Control-Allow-Origin', '*') ctx.set('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS') ctx.set('Access-Control-Allow-Headers', 'Content-Type, Authorization') if (ctx.method === 'OPTIONS') { ctx.status = 204 return } await next() }) -
后端接收与响应:后端接收到前端发来的请求后,会调用本地部署的LLM模型,并将模型返回的结果发送回前端。
router.post('/chat', async(ctx) => { const message = ctx.request.body console.log(message); const data = { model: 'deepseek-r1:1.5b', role: 'user', messages: [message], stream: false, } const res = await axios.post('http://localhost:11434/api/chat', data) console.log(res.data.message.content); ctx.body = { code: 200, data: res.data.message.content } })
结果渲染
最后,前端接收到后端返回的数据,并将其渲染到页面上,让用户看到对话结果。
list.map(item => (
<div key={item.content}>
{item.role === 'user' ?
(<div className="user question item">me: <span>{item.content}</span></div>) :
(<div className="bot answer item">AI:<span>{item.content}</span></div>)
}
</div>
))
效果