查看原文
其他

探索新Ollama Python库:在应用程序中集成本地LLM

思辨view kate人不错 2024-05-19

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:自然语言界面控制计算机 | 分享使用体验

用 Poe-API-wrapper 连接 DALLE、ChatGPT,批量完成AI绘图或文字创作

LM Studio-简化安装和使用开源大模型 | OpenAI API 文字转语音本地运行程序分享

继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存