Skip to content

构建聊天机器人实战

image-20251109143156113

准备工作

安装

shell
pip install ollama streamlit

测试是否安装成功

shell
import ollama
import streamlit

# 填写运行Ollama的主机IP,本机填写127.0.0.1
client = ollama.Client("http://192.168.0.129:11434")
print(client.list())
print(streamlit.__version__)

Ollama的API使用

基本信息

python
import ollama

client = ollama.Client("http://192.168.0.129:11434")

# 查看模型
print(client.list())

# 查看运行中的模型
print(client.ps())

# 查看模型详情
print(client.show("glm4:latest"))

对话

python
# 连续对话
while True:
    msg = input("输入:")
    if not msg:
        break

    res = client.chat(
        model="glm4:latest",
        messages=[{"role": "user", "content": msg}],
    )
    print(res["message"]["content"] + "\n")

构建聊天机器人

前端界面

python
import streamlit as st
import time  # 模拟思考延迟

st.title("我的聊天机器人")
st.divider()

# 获取用户输入
user_input = st.chat_input("请输入消息...")


# 初始化对话历史,显示历史消息
if "messages" not in st.session_state:
    st.session_state.messages = []
for msg in st.session_state.messages:
    with st.chat_message(msg["role"]):
        st.write(msg["content"])

if user_input:
    # 添加用户消息到历史,并显示
    st.session_state.messages.append({"role": "user", "content": user_input})
    with st.chat_message("user"):
        st.write(user_input)

    # 模拟助手思考过程(显示加载动画)
    with st.chat_message("assistant"):
        with st.spinner("思考中..."):
            time.sleep(3)  # 模拟延迟
            # 简单回复逻辑(实际可对接LLM)
            assistant_response = f"你说的是:{user_input},我收到了!"
            st.write(assistant_response)

    # 添加助手回复到历史
    st.session_state.messages.append(
        {"role": "assistant", "content": assistant_response}
    )

后端使用Ollama

python
import ollama
import streamlit as st

client = ollama.Client("http://192.168.0.129:11434")

st.title("我的聊天机器人")
st.divider()

user_input = st.chat_input("请输入消息...")


# 初始化对话历史,显示历史消息
if "messages" not in st.session_state:
    st.session_state.messages = []
for msg in st.session_state.messages:
    with st.chat_message(msg["role"]):
        st.write(msg["content"])

if user_input:
    # 添加用户消息到历史,并显示
    st.session_state.messages.append({"role": "user", "content": user_input})
    with st.chat_message("user"):
        st.write(user_input)

    # 助手思考回答过程
    with st.chat_message("assistant"):
        with st.spinner("思考中..."):
            res = client.chat(model="glm4:latest", messages=st.session_state.messages)
            assistant_response = res["message"]["content"]
            st.write(assistant_response)

    # 添加助手回复到历史
    st.session_state.messages.append(
        {"role": "assistant", "content": assistant_response}
    )