Skip to content
2026-09-29 04:20485 字聊天机器人OllamaPythonStreamlit

聊天机器人实现 ​

基于 Ollama 本地模型 + Python + Streamlit 构建智能聊天机器人。

依赖安装 ​

shell
pip install ollama
pip install langchain -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install langchain-community -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install dashscope -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install streamlit==1.32.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

Ollama API 调用示例 ​

1. 文本扩写 ​

python
import ollama
response = ollama.chat(
    model='qwen3:4b',
    messages=[{'role': 'user', 'content': '从前有座山,山里有个庙,续写一下'}]
)
print(response.message.content)

2. 文本问答(交互式) ​

python
import ollama
while True:
    prompt = input("请输入您的问题:")
    response = ollama.chat(model='qwen3:4b', messages=[{'role': 'user', 'content': prompt}])
    print(response['message']['content'])

3. 编程代码生成 ​

python
import ollama
response = ollama.chat(
    model='qwen3:4b',
    messages=[{'role': 'user', 'content': '请为以下功能生成一段Python代码:求两个数的最大公约数'}]
)
print(response.message.content)

4. 情感分类 ​

python
import ollama
response = ollama.chat(
    model='qwen2:0.5b',
    messages=[{'role': 'user', 'content': '你需要对用户的反馈进行原因分类。分类包括:价格过高、售后支持不足、产品使用体验不佳、其他。回答格式为:分类结果:xx。用户的问题是:性价比不高,我觉得不值这个价钱。'}]
)
print(response.message.content)

完整聊天机器人 ​

模型调用模块 chat_utils.py ​

python
import ollama

def get_response(prompt):
    # prompt 为列表格式 [{'role':'user','content':'...'}, ...]
    response = ollama.chat(model='qwen3:4b', messages=prompt[-50:])
    return response['message']['content']

前端界面 app.py ​

python
import streamlit as st
from langchain.memory import ConversationBufferMemory
from chat_utils import get_response

st.title("智能聊天机器人")

if "memory" not in st.session_state:
    st.session_state.memory = ConversationBufferMemory()
    st.session_state.messages = [{'role': 'assistant', 'content': '你好,我是智能聊天机器人,有什么可以帮助你的么?'}]

for message in st.session_state['messages']:
    with st.chat_message(message['role']):
        st.markdown(message['content'])

prompt = st.chat_input("请给聊天机器人发送消息")
if prompt:
    st.session_state.messages.append({'role': 'user', 'content': prompt})
    st.chat_message("user").markdown(prompt)
    with st.spinner('智能聊天机器人正在思考中...'):
        response = get_response(st.session_state.messages)
    st.session_state.messages.append({'role': 'assistant', 'content': response})
    st.chat_message('assistant').markdown(response)

运行 ​

shell
streamlit run app.py

相关笔记 ​

每一篇文章,都是时间的标本