本地AI聊天机器人:私有化智能助手
·
引言:本地化AI聊天机器人的崛起
在数据隐私愈发关键的当下,完全本地化的AI解决方案成为众多企业与开发者的优先选择。Ollama的问世,让在本地运行大语言模型变得轻而易举;LangChain提供了构建复杂AI应用的能力框架;而Streamlit则赋予这一切一个友好的用户界面。三者相结合,能够构建出功能强大、完全私有化的智能聊天机器人。
第一步、环境准备
1.1 安装Ollama
首先,在您的机器上安装Ollama:
# Windows用户:下载并运行安装程序
# https://ollama.com/download
# macOS用户
brew install ollama
# Linux用户
curl -fsSL https://ollama.com/install.sh | sh
Ollama支持多种模型,此处我们选取几个常用的:
# 拉取Llama 2(7B参数版本,适合大多数硬件)
ollama pull llama2
# 或者选择更小的模型(如3B参数)
ollama pull llama2:7b
# 中文优化模型(如果可用)
ollama pull qwen:7b
ollama pull chatglm3
# 查看已安装的模型
ollama list
若想深入了解Ollama,请访问:AI大模型初识及Ollama安装使用
1.2 安装必要的库
首先,确保您已安装Python 3.8及以上版本,然后通过pip安装必要的依赖:
# Streamlit
pip install streamlit==1.32.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
# Ollama工具包
pip install ollama -i https://mirrors.aliyun.com/pypi/simple/
# langchain工具包
# langchain建议根据本地的Python版本选择本地支持的版本安装
# 查找本地支持的langchain版本
conda search langchain
# 指定版本安装langchain
pip install langchain==0.3.27 -i https://pypi.tuna.tsinghua.edu.cn/simple
第二部分、基础聊天机器人搭建
2.1 定义调用Ollama大模型的工具模块(chat_util.py):
# 该模块用于调用AI大模型,进行聊天问答,传入用户的问题,由大模型给返回信息
# 导入Ollama工具包
import ollama
# 调用大模型
def get_response(prompt):
# 单条回复,不关联上下文
# response = ollama.chat(model='deepseek-r1:1.5b', messages=[
# {
# 'role': 'user',
# 'content': prompt
# }
# ])
# 关联上下文
# model是模型名称,messages传入的是聊天框的上下文内容,包含用户提问和AI打回答
response = ollama.chat(model = 'deepseek-r1:1.5b', messages = prompt)
# 接收返回信息
return response['message']['content']
2.2 基于Streamlit生成前台聊天框界面,通过langchain.memory模块存储聊天的上下文(ChatBot.py):
# 导入相关工具包
import streamlit as st
from langchain.memory import ConversationBufferMemory
# 导入调用大模型的工具模块(chat_util)
from chat_util import get_response
# 标题
st.title('AI聊天机器人')
# 判断是否有历史消息记录对象,如果没有就创建,存储所有消息记录
# st.session_state存储会话数据状态数据的字典(存储会话数据)
if 'memory' not in st.session_state:
# 创建一个对象 ConversationBufferMemory -> 存储到session_state中
# langchain.memory.ConversationBufferMemory 专门存储和管理多轮对话历史
st.session_state.memory = ConversationBufferMemory()
# 添加机器人欢迎语
# [{"role":"自己 / AI","content":"聊天的内容"},{"role":"自己 / AI","content":"聊天的内容"}]
st.session_state.messages = [{"role": "assistant", "content": "你好,我是你的AI助手,有什么可以帮助你的吗?"}]
# 遍历st.session_state.messages消息列表,把历史会话显示到界面上
for message in st.session_state.messages:
# streamlit 提供了with语句,通过聊天消息容器,用来显示(用户/AI)的聊天内容,在网页上渲染出聊天消息框
# chat_message具体显示对应的聊天消息框
with st.chat_message(message["role"]):
# 该角色的消息内容显示,可以用markdown / write
st.markdown(message["content"])
# st.write(message["content"])
# 聊天机器人,对话输入框
# 专用于聊天框的输入框,一直停留在界面下边
info = st.chat_input("请输入你的问题:")
# 如果用户有输入信息,保存用户发送的信息,然后调用大模型来处理用户消息,同时接收大模型返回的信息并保存到st.session_state.messages中
if info:
st.session_state.messages.append({"role": "user", "content": info})
st.chat_message("user").markdown(info)
# 将当前的所有会话内容(st.session_state.messages)传给大模型
# 用户等待时加载状态
with st.spinner("我需要认真思考一下这个问题🤔"):
# time.sleep(10)
result = get_response(st.session_state.messages).replace('<think>', '').replace('</think>', '').strip()
st.session_state.messages.append({"role": "assistant", "content": result})
st.chat_message("assistant").markdown(result)
第三步、程序运行
在终端中运行程序:
# streamlit run 你的模块名.py
streamlit run ChatBot.py
如下图所示,即表示启动成功,启动成功后会自动打开浏览器访问网页;
若Streamlit是首次运行,会出现让输入邮箱的提示,您可输入邮箱后回车,也可直接回车。

第四步、测试
我的本地模型为轻量化模型,尚处于未开智状态,智能程度有限:



更多推荐
所有评论(0)