langchain_openai的ChatOpenAI调用ollama多模态模型
使用到的python库
这里主要用到了这个几个库,使用streamlit,用来页面展示
- streamlit
- langchain
- langchain_openai
- base64
ollama 部署
- 将自己微调好的模型使用llama.cpp转换成gguf格式,记录好保存的位置,也可以去huggingface官网去下载gguf文件
- 找一个自己能找到的位置创建一个ModelFile.txt
- 在ModelFile.txt 编辑写入 FROM D:\workspace\modes\gguf\quantize\llava-llama-3-8b-v1_1-int4.gguf 将gguf文件位置改为你自己的位置
- 打开cmd输入 ollama create example -f Modelfile.txt 其中example 是名字,自己改
- 然后输入 ollama run example
- 不需要别的操作了,ollama默认支持openai api格式
- 关于 ollama 语法,参考ollama
python代码
import streamlit as st
from langchain_openai import ChatOpenAI
from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemory
from langchain.schema import HumanMessage
import base64
# 设置页面标题
st.title("ChatOpenAI 图像分析与对话应用")
# 初始化 ChatOpenAI 模型
chat = ChatOpenAI(model="llava", openai_api_key="ollama", openai_api_base="http://localhost:11434/v1/")
# 初始化对话记忆
if "memory" not in st.session_state:
st.session_state.memory = ConversationBufferMemory()
# 初始化对话链
conversation = ConversationChain(llm=chat, memory=st.session_state.memory)
# 用户输入
user_input = st.text_input("请输入你想让模型分析的内容:", "分析这张图片")
# 上传图片
uploaded_file = st.file_uploader("上传图片", type=["png", "jpg", "jpeg"])
if uploaded_file and user_input:
# 读取并编码图像
img_base64 = base64.b64encode(uploaded_file.read()).decode()
# 使用 ChatOpenAI 模型进行图像分析
messages = [
HumanMessage(
content=user_input,
additional_kwargs={"image_url": {"url": f"data:image/jpeg;base64,{img_base64}"}}
)
]
msg = chat.invoke(messages)
# 显示结果
st.image(uploaded_file, caption="Uploaded Image", use_column_width=True)
st.write("图像分析结果:")
st.write(msg.content) # 直接访问 content 属性
# 显示对话记录
if "chat_history" in st.session_state and st.session_state.chat_history:
st.write("对话记录:")
for msg in st.session_state.chat_history:
st.write(f"用户: {msg['input']}")
st.write(f"模型: {msg['output']}")