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

手把手教你用Python做本地AI聊天机器人最终实战篇

这篇文章是代码逐行精讲+完整操作步骤,纯新手也能跟着做,全程不用外网、不用复杂配置,用Python就能搭建属于自己的本地聊天机器人,适合写博客、交作业、学习入门。


一、项目整体介绍

1. 项目是什么?

这是一个本地运行的AI聊天机器人,不用联网调用第三方接口,所有对话都在自己电脑上完成,基于3个核心工具搭建:

  • Streamlit:Python快速做网页的库,不用写前端代码,直接生成聊天界面
  • Ollama:本地部署大模型工具,让电脑能运行开源AI模型
  • Python:核心编程语言,整合界面和AI模型

2. 项目文件结构(一定要按这个建文件夹!)

先在电脑上新建一个文件夹,命名为local_chatbot,里面建4个文件:

local_chatbot/
├─ 01_streamlit基础语法.py  # 入门:学习Streamlit网页组件
├─ 02_聊天相关组件介绍.py    # 进阶:学习聊天界面样式
├─ chat_utils.py            # 核心:调用本地AI模型
└─ chat_main.py             # 成品:完整聊天机器人

所有代码都写在对应文件里,不要混写,否则运行报错!


二、环境准备(写代码前必须做!)

第一步:安装Python

  1. 打开Python官网,下载3.9及以上版本
  2. 安装时一定要勾选「Add Python to PATH」(最关键!)
  3. 打开电脑终端(Win按Win+R输入cmd,Mac打开终端),输入:
    python --version
    
    显示版本号就说明安装成功。

第二步:安装依赖库

在终端里逐行输入以下命令,等待安装完成(不要关闭终端):

# 安装网页框架
pip install streamlit
# 安装本地模型调用工具
pip install ollama
# 安装对话记忆工具
pip install langchain

第三步:下载本地AI模型

继续在终端输入命令,下载老师代码里用的模型(必须下载,否则代码无法运行):

ollama pull deepseek-r1:8b

✅ 等待下载完成(进度条100%),新手不要换模型!


三、逐文件代码精讲+操作步骤

01_streamlit基础语法.py

1. 代码写哪里?

新建01_streamlit基础语法.py文件,把以下代码完整复制进去

# 导入streamlit库,简写为st
import streamlit as st# —————————— 1. 网页标题 ——————————
st.title('我的第一个Streamlit网页 🎉')# —————————— 2. 文本输出 ——————————
st.write('这是一段普通文本')
st.write('## 二级标题')
st.write('### 三级标题')# —————————— 3. 输入框组件 ——————————
# 文本输入框
name = st.text_input('请输入你的名字:')
# 数字输入框
age = st.number_input('请输入你的年龄:', min_value=0, max_value=150)# 判断是否输入内容,有则展示
if name and age:st.write(f'你好 {name},你今年 {age} 岁啦!')# —————————— 4. 表格/图片展示 ——————————
# 字典转表格
my_dict = {'姓名': ['张三', '李四'], '年龄': [18, 20]}
st.table(my_dict)

2. 怎么运行?

  1. 打开终端,进入项目文件夹(比如文件夹在桌面,输入):
    cd Desktop/local_chatbot
    
  2. 运行命令:
    streamlit run 01_streamlit基础语法.py
    
  3. 自动弹出浏览器网页,就是你的第一个Python网页!

3. 核心知识点(博客必写)

  • st.xxx:Streamlit的所有功能都是这种格式,叫组件
  • st.write():万能输出工具,能放文字、表格、图片
  • 运行后网页会自动刷新,修改代码保存后,网页实时更新

02_聊天相关组件介绍.py

1. 代码写哪里?

新建02_聊天相关组件介绍.py,复制以下代码:

import streamlit as st# 网页标题
st.title('简易聊天界面 💬')# —————————— 核心:聊天输入框 ——————————
prompt = st.chat_input("请输入你想对我说的话")# 判断用户是否输入了内容
if prompt:# —————————— 1. 显示用户消息 ——————————# user:代表用户消息,样式在右侧with st.chat_message('user'):st.write(prompt)# —————————— 2. 显示AI回复消息 ——————————# assistant:代表AI消息,样式在左侧with st.chat_message('assistant'):st.write('你好呀!我是你的AI助手 😊')

2. 运行方式

终端输入命令:

streamlit run 02_聊天相关组件介绍.py

3. 核心知识点(博客必写)

  • st.chat_input():聊天专用输入框,固定在页面底部
  • st.chat_message('user'):用户消息样式
  • st.chat_message('assistant'):AI助手消息样式
  • 这是完整聊天机器人的简化版,先学会界面,再对接模型

chat_utils.py(AI大脑)

1. 代码写哪里?

新建chat_utils.py,复制以下代码(模型调用核心,不能改错!):

# 导入ollama库,用于调用本地大模型
import ollamadef get_response(messages):"""调用本地AI模型,获取回复:param messages: 聊天记录列表 [{'role':'user','content':'问题'}, ...]:return: AI回复的文本内容"""# 调用本地模型:model填写你下载的模型名# messages[-20:]:只保留最新20条对话,防止模型卡顿response = ollama.chat(model='deepseek-r1:8b',messages=messages[-20:])# 返回AI的回复内容return response['message']['content']# —————————— 测试代码:单独运行此文件,检查模型是否正常 ——————————
if __name__ == '__main__':# 测试问题test_messages = [{'role': 'user', 'content': '你好!'}]# 打印AI回复print(get_response(test_messages))

2. 测试方式

终端输入命令,测试模型是否能正常回复:

python chat_utils.py

✅ 出现文字回复,说明模型配置成功!

3. 核心知识点(博客必写)

  • ollama.chat():调用本地大模型的核心函数
  • model:必须和你下载的模型名完全一致
  • messages[-20:]:限制对话长度,保证模型运行流畅
  • 这个文件是机器人的大脑,负责思考和生成答案

chat_main.py(完整成品)

1. 代码写哪里?

新建chat_main.py,复制以下代码(最终成品,最重要!):

# 1. 导入所需库
import streamlit as st
# 从chat_utils导入模型调用函数
from chat_utils import get_response# 2. 网页配置
st.title('本地AI聊天机器人 🤖')
st.caption('基于Streamlit + Ollama搭建,所有对话本地运行')# —————————— 核心:会话状态存储聊天记录 ——————————
# 第一次运行时,初始化聊天记录
if 'messages' not in st.session_state:st.session_state.messages = [# AI欢迎语{'role': 'assistant', 'content': '你好!我是你的本地AI助手,有什么我可以帮助你的吗?'}]# 3. 展示历史聊天记录(每次输入都重新渲染)
for msg in st.session_state.messages:with st.chat_message(msg['role']):st.write(msg['content'])# 4. 获取用户输入
user_input = st.chat_input('请输入你的问题...')# 5. 用户输入内容后执行逻辑
if user_input:# —————————— 第一步:把用户消息加入聊天记录 ——————————st.session_state.messages.append({'role': 'user', 'content': user_input})# 显示用户消息with st.chat_message('user'):st.write(user_input)# —————————— 第二步:AI生成回复 ——————————with st.spinner('AI正在思考中...⏳'):# 调用模型函数,获取回复ai_response = get_response(st.session_state.messages)# —————————— 第三步:把AI回复加入聊天记录并显示 ——————————st.session_state.messages.append({'role': 'assistant', 'content': ai_response})with st.chat_message('assistant'):st.write(ai_response)

2. 最终运行命令

终端输入:

streamlit run chat_main.py

✅ 自动打开聊天网页,现在你可以和本地AI自由对话了!

3. 核心知识点(博客必写)

  • st.session_stateStreamlit最重要功能,保存聊天记录,刷新不丢失
  • 对话流程:用户输入 → 保存记录 → 调用模型 → 显示回复
  • st.spinner():加载动画,提升使用体验
  • 支持多轮对话,AI能记住你之前说的话

四、完整操作流程图解(博客加分项)

新手操作顺序(一步都不能错)

  1. 新建项目文件夹 → 建4个Python文件
  2. 安装3个依赖库(streamlit、ollama、langchain)
  3. 用ollama下载AI模型
  4. 逐文件复制代码
  5. 运行chat_main.py
  6. 打开浏览器使用聊天机器人

五、常见问题解决(必写!)

1. 运行报错:找不到模型

  • 原因:没有下载deepseek-r1:8b模型
  • 解决:终端执行ollama pull deepseek-r1:8b

2. 聊天记录刷新消失

  • 原因:没用st.session_state保存数据
  • 解决:严格按照老师代码,不要删除st.session_state相关代码

3. 模型回复很慢

  • 原因:电脑配置较低
  • 解决:换成小模型ollama pull qwen2:1.5b,并修改chat_utils.py里的模型名

六、博客总结

这份代码是Python大模型应用入门的经典案例,通过它可以学会:

  1. 用Streamlit快速做交互网页
  2. 本地部署开源AI大模型
  3. 实现带记忆功能的多轮对话
  4. 理解前后端交互的基本逻辑

非常适合新手入门AI应用开发,不用复杂知识,跟着步骤就能完成!

http://www.jsqmd.com/news/582406/

相关文章:

  • ImStudio 终极指南:5步掌握实时GUI布局设计工具
  • 比rm -rf更安全?用Python脚本实现可控的目录删除(附完整代码)
  • 好写作AI:博士毕业论文的“学术领航灯塔”
  • 企业管理客户资源,这款工作手机实用性拉满 - 资讯焦点
  • 专业级流媒体下载器实战解析:7个高效配置技巧掌握N_m3u8DL-RE
  • Qwen2.5-14B-Instruct开源模型落地:像素剧本圣殿短视频脚本批量生成
  • 3步打造个人数字时光机:GetQzonehistory备份QQ空间全攻略
  • 新闻科技简报 (2026-04-03)
  • FlyEnv 4.9.7:本地开发环境的终极解决方案,轻松管理PHP、FTP和Tomcat服务
  • 2026年专业的净水器源头厂家口碑排行 - 资讯焦点
  • 原装W25N04KVZEIR 4Gbit SLC SPI NAND Flash——华邦高性能存储芯 Winbond华邦 电子元器件IC
  • 三分钟完成Axure中文界面配置:告别英文困扰,专注原型设计
  • 千匠网络B2B软件开发:定制化数智引擎,重构企业级B2B核心竞争力 - 圆圆小达人
  • AI驱动网络设计:让快马智能生成高可用ensp数据中心项目与配置
  • DMA内存访问与Cheat Engine插件开发全指南:零基础配置到高效内存分析
  • 基于朴素贝叶斯分类算法的收入预测:Python 数据挖掘项目实战
  • 道路巡查精准检测优选:多维度技术测评,谁更胜一筹? - 资讯焦点
  • openclaw添加本地大模型支持接受图片输入
  • 让ai成为你的linux导师,基于快马平台打造智能命令查询与解释助手
  • 图像增强技术指南:让模糊图片重获新生的实用方法
  • 新手友好:在快马平台上用代码学习77成色s35与s35l材料基础
  • 构建实战级域名管家:基于快马平台开发jxx登录页全功能监测应用
  • MongoDB Compass完全指南:从安装到精通的5个关键步骤
  • 用C++实现LBM格子玻尔兹曼方法MRT模拟加热气泡脱离
  • 使用快马平台基于OpenSpec规范5分钟搭建可运行API原型
  • 人工智能展厅设计怎么选?资质、技术、案例全维度对比,这5家企业靠谱! - 深度智识库
  • 基于Matlab的卷积稀疏形态成分分析实现医学图像融合
  • 提升效率:用快马一键生成智能应用控制风险模拟检测脚本
  • leetcode 1583. 统计不开心的朋友-Count Unhappy Friends
  • C++继承:从基础到高级实战指南