【详细步骤】大模型基础知识(4)---ollama模型调用-多轮对话体验

前言

昨天,给小伙伴们介绍了一下如何下载ollama和具体的命令有哪些,也告诉了大家下载模型的具体方法,今天就给大家介绍一下如何简单的构建一个聊天智能体,前端页面咱们就暂时模拟一下,后端咱们就可以正常和大模型交流,我们开始启程!

一、前期准备

今天,而我们就要利用以下两个库完成机器人的制作。先来简单说一下,它们都有哪些作用。

1.1 Streamlit和ollama的介绍

Streamlit是面向数据科学和机器学习开发者的轻量级Python Web框架,无需前端开发知识即可快速搭建交互式Web应用,支持热重载和丰富的交互组件,适合快速实现数据成果、AI应用原型的可视化演示。

ollama是Ollama工具的官方Python客户端,核心用于调用本地部署的大语言模型(如Llama 3、Phi 3等),可完成模型拉取、管理及单/多轮对话交互,无需联网调用第三方API,能保障数据隐私,常与Streamlit结合搭建本地化AI Web应用。

1.2 安装步骤

1. 前置准备:

确保PyCharm已配置好Python解释器和环境(建议conda环境,我之前的博客分享过详细的步骤和注意事项);

安装ollama Python库前,需先从https://ollama.com/download下载对应系统的**Ollama客户端并完成安装**,安装后默认自动启动本地Ollama服务。

2. 安装方式一:

打开PyCharm项目,依次进入File(右上角)→ Settings → Project: 项目名 → Python Interpreter」,点击右侧「+」号,在搜索框分别输入streamlit、ollama,选中对应结果后点击「Install Package」,等待安装完成即可。

3. 安装方式二(终端):

打开PyCharm底部的Terminal终端,执行命令 pip install streamlit ollama**-i https://pypi.tuna.tsinghua.edu.cn/simple(加粗的是镜像源,加快下载速度,也可以不加)**,安装完成后可通过以下命令验证ollama。

python 复制代码
import ollama
print(ollama.__version__)

安装步骤:

注意: 镜像源并不是一定要配置的,因为默认pip安装库都是从国外服务器下载,导致非常慢,所以需要改为从国内镜像源下载,毕竟,大家也清楚有时候下载国外的数据需要科学上网。所以更换国内的镜像源,可以加快下载速度,图中用的是清华的镜像源。

3. 安装方式三(conda)推荐:

利用conda安装包我们之前在环境配置里面详细讲解过,所以我这里就简单说一下,conda安装包比较稳定,不建议conda和pip混合使用。

二、前端页面制作

2.1 AI工具创作前端页面(后面会专门介绍)

介绍一款国内的免费AI代码写作助手---Trae

官网链接: Trae

Trae是字节跳动推出的AI原生IDE,深度集成大模型,专为提升开发效率而生,尤其适合前端页面创作

核心能力包括:用自然语言描述需求即可生成HTML/CSS/JS及React/Vue组件;支持Figma设计稿一键转像素级还原的响应式页面;内置实时预览与热重载,边改边看交互效果。它对中文指令有深度优化,能自动补全代码、修复Bug并添加注释,显著降低前端开发门槛,让零基础也能快速产出专业页面。

特别适合零基础小白创作代码,使用简单,想要尝试的小伙伴可以试试,后面我会专门讲解,今天咱们主要利用第二种方式完成前端页面。

2.2 streamlit创作前端代码

官网地址: https://streamlit.io

前面介绍了,我就不再次重复了。

2.2.1 登录页面代码展示

基于我们刚开始学习python,并且今天只是体验一下具体的效果,所以我就不讲解知识点了,大家可以通过注释学习,复制代码或者模仿代码自己试试。相关的知识点后续都会系统性的分享。

python 复制代码
import streamlit as st
from datetime import date
import pandas as pd

# 记得安装pandas,终端执行:pip install pandas
# 页面基础配置
st.set_page_config(page_title="AI机器人", page_icon="🤖", layout="centered")

# 全局存储用户提交的信息(实际场景建议用数据库,此处用列表临时存储)
if "user_submissions" not in st.session_state:
    st.session_state.user_submissions = []

# 页面标题与样式优化
st.title("🤖 AI机器人 ")
st.divider()

# 表单容器(优化布局结构)
with st.form(key="ai_robot_user_form", clear_on_submit=True):
    # 用户名输入(必填,限制长度1-50字符)
    username = st.text_input(
        label="用户名",
        max_chars=50,
        key="username",
        placeholder="请输入1-50位用户名"
    )

    # 密码输入(必填,限制长度6-50字符)
    password = st.text_input(
        label="密码",
        type="password",
        max_chars=50,
        key="password",
        placeholder="请输入6-50位密码"
    )

    # 密码确认(避免输入错误)
    confirm_password = st.text_input(
        label="确认密码",
        type="password",
        max_chars=50,
        key="confirm_password",
        placeholder="请再次输入密码"
    )

    # 年龄输入(合理范围1-120岁,默认值18)
    age = st.number_input(
        label="年龄",
        min_value=1,
        max_value=120,
        step=1,
        value=18,
        key="age"
    )

    # 性别选择(必选,去除不合理选项,默认提示选择)
    gender = st.selectbox(
        label="性别",
        options=["请选择", "男", "女", "其他"],
        index=0,
        key="gender"
    )

    # 是否已婚单选框(保存选择结果,横向布局更紧凑)
    married = st.radio(
        label="是否已婚",
        options=["是", "否"],
        horizontal=True,
        key="married",
        index=1  # 默认选择"否"
    )

    # 出生日期选择器(合理时间范围,默认当前日期前20年)
    default_birthdate = date(date.today().year - 20, date.today().month, date.today().day)
    birthdate = st.date_input(
        label="出生日期",
        min_value=date(1900, 1, 1),
        max_value=date.today(),
        value=default_birthdate,
        key="birthdate"
    )

    # 身高滑块(单位cm,默认175cm,优化步长)
    height = st.slider(
        label="身高 (cm)",
        min_value=80.0,
        max_value=220.0,
        value=175.0,
        step=0.5,
        key="height"
    )

    # 提交按钮
    submit_button = st.form_submit_button(label="🤖 提交信息", type="primary")

# 表单提交逻辑处理
if submit_button:
    # 表单验证:检查必填项是否为空
    if not username or not password or not confirm_password or gender == "请选择":
        st.error("❌ 请完善所有必填项(用户名、密码、确认密码、性别不能为空)!")
    # 验证密码一致性
    elif password != confirm_password:
        st.error("❌ 两次输入的密码不一致,请重新输入!")
    # 验证密码长度
    elif len(password) < 6:
        st.error("❌ 密码长度不能少于6位,请修改!")
    else:
        # 整理用户提交信息
        user_info = {
            "用户名": username,
            "年龄": age,
            "性别": gender,
            "是否已婚": married,
            "出生日期": birthdate.strftime("%Y-%m-%d"),
            "身高(cm)": height
        }

        # 存储用户信息(实际场景替换为数据库写入)
        st.session_state.user_submissions.append(user_info)

        # 页面显示提交成功信息
        st.success("🎉 信息提交成功!AI机器人已记录您的信息:")
        with st.expander("查看提交信息", expanded=True):
            for key, value in user_info.items():
                st.write(f"**{key}**:{value}")

        # 终端打印日志(仅开发调试用)
        print(f"\n【AI机器人 - 信息提交成功】\n用户名:{username}\n年龄:{age}\n性别:{gender}\n"
              f"是否已婚:{married}\n出生日期:{birthdate}\n身高:{height}cm")

# 可选:添加已提交信息用户查看功能
with st.sidebar:
    st.subheader("📊 已提交信息用户")
    if st.session_state.user_submissions:
        df = pd.DataFrame(st.session_state.user_submissions)
        st.dataframe(df, use_container_width=True)
    else:
        st.text("暂无用户提交信息")

运行:需要在终端运行

python 复制代码
#建议路径使用绝对路径,相对路径也行
streamlit run E:\project\test_博客\test.py

运行结果:

2.2.2 聊天机器人页面构建

前面登录页面已经实现了,现在我们来构建基础的聊天页面

注意:为了简化操作,因为好多知识点还没分享,下面的内容只是模拟AI和用户的会话,后面会系统性的分享具体的大模型部署操作。

python 复制代码
# 导入Streamlit库,用于快速构建交互式Web应用
import streamlit as st

# 设置网页应用的主标题,展示机器人名称
st.title("AI智能机器人")

# 添加水平分隔线,分割标题与聊天区域,优化界面视觉结构
st.divider()

# 初始化助手(AI)的首次消息,提升用户首次进入的交互体验
st.chat_message("assistant").write("你好,我是AI智能机器人,请问有什么可以帮你的?")

# 创建聊天输入框,提示用户输入问题,输入内容会赋值给prompt变量
prompt = st.chat_input('请您输入您的问题:')

# 模拟用户发送消息(TODO:后续替换为从prompt变量获取用户真实输入内容)
st.chat_message("user").write('你好')

# 模拟AI回复消息(TODO:后续替换为调用大语言模型API获取的真实回答内容)
st.chat_message("assistant").write('你好,很高兴与你聊天!')

运行命令:

python 复制代码
streamlit run E:\project\test_博客\chat_web.py

效果:

三、后端python代码

代码:一定要记得把里面的模型改为自己本地下载好的模型名称,ollama list查看自己的模型,没有的话下载一个,建议5b以内。

python 复制代码
# 1. 导入ollama库(需提前安装:pip install ollama)
import ollama

# 2. 初始化Ollama客户端(
ollama_client = ollama.Client(host="http://127.0.0.1:11434")

# 3. 初始化历史对话列表,核心:保存所有轮次的用户/助手消息,实现上下文记忆。
chat_history = []

# 4. 定义多轮对话主循环
def multi_turn_chat():
    print("===== AI多轮对话助手 =====")
    print("输入 'quit' 或 'exit' 可退出对话\n")
    
    while True:
        # 4.1 获取用户输入,支持多轮连续提问
        user_input = input("你: ")
        
        # 4.2 退出条件:输入quit/exit则终止循环
        if user_input.strip().lower() in ["quit", "exit"]:
            print("AI: 再见!有问题随时再来~")
            break
        
        # 4.3 空输入处理:避免传入空消息导致模型报错
        if not user_input.strip():
            print("AI: 你还没输入问题哦,请说点什么吧!")
            continue
        
        # 4.4 将当前用户输入加入历史对话列表
        chat_history.append({"role": "user", "content": user_input})
        
        try:
            # 4.5 调用本地大模型,传入完整历史消息,实现上下文对话
            response = ollama_client.chat(
                model="qwen2.5:0.5b",  # 替换为你本地部署的模型名(如llama3、gemma等)
                messages=chat_history,  # 核心:传入历史消息列表
                stream=False  # 非流式响应,直接获取完整回复
            )
            
            # 4.6 解析模型回复
            ai_reply = response["message"]["content"]
            
            # 4.7 将AI回复加入历史对话列表(供下一轮上下文使用)
            chat_history.append({"role": "assistant", "content": ai_reply})
            
            # 4.8 打印AI回复
            print(f"AI: {ai_reply}\n")
        
        except Exception as e:
            # 异常处理:捕获网络/模型调用错误
            print(f"AI: 抱歉,对话出错了!错误信息:{str(e)}\n")
            # 出错时移除本次用户输入(避免历史消息污染)
            chat_history.pop()

# 5. 启动多轮对话
if __name__ == "__main__":
    # 先检查Ollama服务是否启动(可选:增强鲁棒性)
    try:
        ollama_client.list()  # 调用list接口验证服务连通性
    except:
        print(" 未检测到Ollama本地服务!请先执行:ollama serve 启动服务,并确保已拉取模型(ollama pull qwen2.5:7b)")
    else:
        multi_turn_chat()

具体效果展示:模型参数量越大效果越好,我用的qwen2.5:0.5b的模型,参数量越大,模型越大,都是GB起步,需要一定的电脑性能。

四、总结

今天,就让大家简单体验一下简单的大模型对话,大家可以试试不同的模型回复同一个问题,看看有哪些差别。后期大家都可以按照我的分享内容系统性学习,实现大模型部署,训练,微调等操作,可以利用深度学习,自己手搓一个属于自己的模型,感受一下未知的神秘知识。


上述内容会根据大家的评论和实际情况进行实时更新和改进。

麻烦小伙伴们动一动发财的小手,给小弟点个赞和收藏,如果能获得小伙伴的关注将是我无上的荣耀和前进的动力。

小伙伴们,我是AI大佬的小弟,希望大家喜欢!!!

晚安,兄弟们。

相关推荐
AndrewHZ2 小时前
【Python与生活】怎么用python画出好看的分形图?
开发语言·python·生活·可视化·递归·分形
sweden_dove2 小时前
《python编程练习题》中的第二部分内容(19-36)和第三部分内容(37-54)
开发语言·python
skywalk81632 小时前
FreeBSD下安装rustup、cargo和uv
开发语言·python·rust·cargo
GDAL2 小时前
Python pip 全面讲解教程(2026 实用版)
python·pip
WangYaolove13142 小时前
基于人脸表情的分类算法的设计(源码+文档)
python·mysql·django·毕业设计·源码
开开心心_Every2 小时前
安卓语音转文字工具:免费支持实时转换视频
python·游戏·微信·django·pdf·excel·语音识别
wjykp3 小时前
4.脑电实验设计的原理与实例
python
weixin_481950353 小时前
跟AI学习用python制作下载器-3
开发语言·python·学习