手把手教你用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 ollama

def 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应用开发,不用复杂知识,跟着步骤就能完成!

posted @ 2026-04-03 18:04  Petula  阅读(253)  评论(0)    收藏  举报