探索新Ollama Python库:在应用程序中集成本地LLM
Ollama 推出Python & JavaScript 库,这两个库能够让开发者仅用几行代码,就能将新的或已有的应用程序与 Ollama 无缝集成,同时共享 Ollama REST API 的功能和用户体验。
官方介绍博文
https://ollama.ai/blog/python-javascript-libraries
这里以python为例来介绍。
https://github.com/ollama/ollama-python
我的体验
虽然使用 Ollama 的客户端、Web UI、插件很多,但我觉得有了 Ollama 库之后,定制自己的程序也不错。
我用 Streamlit 写了 python 程序来运行本地大模型“yi”。
Streamlit 是一个面向数据科学和机器学习领域的开源 Python 库,其主要功能是以简单快速的方式创建和分享既美观又定制化的 web 应用。作为一个基于 Python 的工具,它能够生成互动性强的网站页面。
安装 Streamlit
pip install streamlit
运行 Streamlit 应用
streamlit run app.py
01.ai推出的模型“yi”拥有6B参数规模,在我的32GB内存的Mac上运行表现出色,不仅速度快,生成的内容也令人满意。
https://www.ollama.ai/library/yi/tags
LLaVA是一种端到端训练的大型多模态模型,结合了视觉编码器和Vicuna,用于通用视觉和语言理解。
https://www.ollama.ai/library/llava
分享下下图界面的 python 代码,支持文字和图片模型。
识别图片时,记得把模型先选为“llava”。
import streamlit as st
import ollama
from PIL import Image
from io import BytesIO
# 设置可用的模型列表
available_models = [
'yi',
'dolphin-mistral:7b-v2.6-fp16',
'openhermes:7b-mistral-v2.5-q6_K',
'ifioravanti/neuralbeagle14-7b:7b-q8_0',
'llava',
'yi:34b',
]
model_choice = st.sidebar.selectbox('选择模型:', available_models)
user_input = st.text_area('提出一个问题:', '', height=150)
st.markdown("""
<style>
.dashed-box {
border: 2px dashed #FFA500;
border-radius: 10px;
padding: 10px;
margin: 10px 0;
}
</style>
""", unsafe_allow_html=True)
uploaded_file = st.file_uploader("上传图片", type=['jpg','png','jpeg'])
if uploaded_file:
img = Image.open(uploaded_file)
# 将RGBA图像转换为RGB
if img.mode == 'RGBA':
img = img.convert('RGB')
st.image(img, caption='上传的图片', use_column_width=True)
if st.button('提交'):
messages = [{'role': 'user', 'content': user_input}]
if uploaded_file:
with BytesIO() as buffer:
img.save(buffer, 'jpeg')
img_bytes = buffer.getvalue()
messages[0]['images'] = [img_bytes]
response = ollama.chat(
model=model_choice,
messages=messages,
stream=True
)
final_response = ''
for chunk in response:
if 'content' in chunk.get('message', {}):
final_response += chunk['message']['content']
st.markdown(f'<div class="dashed-box">{final_response}</div>', unsafe_allow_html=True)
此外,我还写了一个用于批量识别图片的 Python 程序。
上传了40多张图片,使用LLaVA模型进行识别。等待几分钟,程序完成了识别,识别结果可一键保存为txt文件下载下来,非常方便。
对应代码
import streamlit as st
from PIL import Image
from io import BytesIO
import ollama
# 设置默认模型
default_model = 'llava'
st.markdown("""
<style>
.dashed-box {
border: 2px dashed #FFA500;
border-radius: 10px;
padding: 10px;
margin: 10px 0;
}
</style>
""", unsafe_allow_html=True)
# 允许用户批量上传图片
uploaded_files = st.file_uploader("上传图片", type=['jpg', 'png', 'jpeg'], accept_multiple_files=True)
# 为所有图片创建一个统一的问题输入框
if uploaded_files:
question = st.text_area('为所有图片提出一个问题:', '')
if st.button('提交'):
messages = []
all_responses = '' # 用于保存所有回答的字符串
for uploaded_file in uploaded_files:
img = Image.open(uploaded_file)
# 将RGBA模式的图像转换为RGB模式
if img.mode == 'RGBA':
img = img.convert('RGB')
with BytesIO() as buffer:
img.save(buffer, 'jpeg')
img_bytes = buffer.getvalue()
message = {'role': 'user', 'content': question}
message['images'] = [img_bytes]
messages.append(message)
responses = []
for message in messages:
response = ollama.chat(
model=default_model,
messages=[message],
stream=True
)
final_response = ''
for chunk in response:
if 'content' in chunk.get('message', {}):
final_response += chunk['message']['content']
responses.append(final_response)
for i, final_response in enumerate(responses):
st.image(uploaded_files[i], caption=f'图片 {i+1}', use_column_width=True)
response_text = f'图片 {i+1} 的回答:{final_response}\n'
st.markdown(f'<div class="dashed-box">{response_text}</div>', unsafe_allow_html=True)
all_responses += response_text
# 创建下载按钮
st.download_button(
label="下载回答内容",
data=all_responses,
file_name="image_responses.txt",
mime="text/plain"
)
ifioravanti 使用 Ollama Python 库在本地生成微调合成数据集。
通过简单的代码,就可以自动获取针对某个主题的问答训练数据,极大地简化了训练数据的准备工作。
https://gist.github.com/ivanfioravanti/bcacc48ef68b02e9b7a4034161824287
上述页面的代码解释:
我用模型“yi”试了下,出错,于是换成 ifioravanti 使用的 “openhermes:7b-mistral-v2.5-q6_K” 模型,运行成功。
输入儿童教育主题后,终端得到如下结果。
同时,生成3个文件。
Ollama 原生集成到 Python 和 JavaScript 应用程序中,可以帮我们节约成本,搭建我们的AI Agent。
精选历史文章,请看这里:
实测在Mac上使用Ollama与AI对话的过程 - 模型选择、安装、集成使用记,从Mixtral8x7b到Yi-34B-Chat
Ollama上线 Nous Hermes 2 与 Dolphin Phi 2.6 模型及 Ollama Web UI 体验分享
Open Interpreter:自然语言界面控制计算机 | 分享使用体验