聊天机器人实现
基于 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/simpleOllama 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相关笔记
- 前端组件 → Streamlit 入门
- API 调试 → Ollama API 调试