项目名称:基于NIM平台API接口实现多模态对话机器人
报告日期:2024年8月19日
项目负责人:Sophia
项目概述:
基于NVIDAI的NIM平台,结合轻量级phi-3-vision-128k-instruct的图片理解能力,实现对图片的理解,本来打算做图片的修改的,等找时间再完善吧。
技术方案与实施步骤
模型选择:
phi-3-vision-128k-instruct
轻量级小模型,便于边缘设备应用
数据的构建:
使用base64库将图片转换为base64格式,用于小模型去理解
功能整合:
将图片转换为base64,使用小模型理解图像内容,并以文字输出,使用gradio的UI界面进行人机交互。
下一步准备在对图片理解之后,对图片进行修改,再由base64转换为图片,同时结合RAG输出图片的同时输出文本关联内容。
实施步骤:
环境搭建:
Python 3.8 或3.8+
pip install langchain-nvidia-ai-endpoints
pip install langchain_core
pip install langchain
pip install faiss-cpu==1.7.2
pip install openai
pip install gradio
代码实现:
使用NIM平台API接口,添加NVIDIA_API_KEY
os.environ["NVIDIA_API_KEY"] = "****************************************"
将图片编辑为base64格式
# 图片编辑
def image2b64(image_file):
with open(image_file, "rb") as f:
image_b64 = base64.b64encode(f.read()).decode()
return image_b64
构建多模态智能体
# 构建多模态智能体
def chart_agent_gr(image_b64, user_input, image):
image_b64 = image2b64(image_b64)
# Chart reading Runnable
chart_reading = ChatNVIDIA(model="microsoft/phi-3-vision-128k-instruct")
chart_reading_prompt = ChatPromptTemplate.from_template(
'Generate descriptive text for the following images, : <img src="data:image/png;base64,{image_b64}" />'
)
chart_chain = chart_reading_prompt | chart_reading
return chart_chain.invoke({"image_b64": image_b64, "input": user_input, "image": image})
人机交互界面
import gradio as gr
multi_modal_chart_agent = gr.Interface(fn=chart_agent_gr,
inputs=[gr.Image(label="Upload image", type="filepath"), 'text'],
outputs=['text'],
title="Multi Modal chat agent",
description="Multi Modal chat agent",
allow_flagging="never")
multi_modal_chart_agent.launch(debug=True, share=False, show_api=False, server_port=5000, server_name="0.0.0.0")
项目成果与展示:
应用场景展示:
需要对图片内容进行理解并转换为文字输出时
功能演示:
未来方向:
进一步想实现在理解图片的基础上,对图片进行修改,并转换为图片输出,同时结合RAG,可以提供相关说明或者注释。