【ZEEKLOG星图AI实战】Ostrakon-VL部署与使⽤全教程,FSRS场景多模态神器实测
🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流
📝个人主页-Sonhhxg_柒的博客_ZEEKLOG博客 📃
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝
📣系列专栏 - 机器学习【ML】 自然语言处理【NLP】 深度学习【DL】
🖍foreword
✔说明⇢本人讲解主要包括Python、机器学习(ML)、深度学习(DL)、自然语言处理(NLP)等内容。
如果你对这个系列感兴趣的话,可以关注订阅哟👋
作为一名长期从事人工智能开发的实践者,也是ZEEKLOG星图AI的资深用户,最近在平台上体验了专为食品服务与零售行业(FSRS)设计的Ostrakon-VL多模态大语言模型。其精准的场景适配能力和高效的部署流程给我留下了深刻印象。本文将结合个人实践,分享该模型的部署指南、使用心得和核心优势,帮助更多开发者在ZEEKLOG星图AI生态中快速掌握这款行业级工具。
目前,该模型已在淘宝闪购的100多个生产场景中成功落地,累计调用量达10亿次,Token消耗量突破万亿级别,充分验证了其工业级可用性。
现在进入核心实操环节,我们将使用ZEEKLOG星图AI提供的镜像资源,从零开始完成部署和调用。整个过程步骤清晰明了,即使是新手也能轻松上手。
一、Ostrakon-VL 模型介绍

在AI大模型向垂直领域深度渗透的今天,食品服务与零售商店(FSRS)场景终于迎来了专属的多模态大语言模型——Ostrakon-VL。作为首个开源的FSRS领域专家级MLLM,它不仅填补了行业空白,更以8B参数的轻量化体量,实现了超越235B参数通用模型的性能表现,为零售与餐饮行业的数字化升级注入了全新动力。
1.1 打破通用模型局限,聚焦FSRS场景痛点
通用多模态大模型虽具备强大的综合能力,但在食品服务与零售这种高度场景化的领域中,往往显得“力不从心”。杂乱的店面环境、复杂的合规要求、多样的视觉输入(图片、视频),都对模型的感知、推理与决策能力提出了特殊要求。而Ostrakon-VL的出现,正是为了解决这一核心痛点。
该模型基于Qwen3-VL-8B基座构建,经过FSRS场景的深度微调,专门针对店面巡检、厨房卫生审计、商品识别、合规检查等核心任务进行优化,摆脱了通用模型“大而不精”的困境。更值得关注的是,它已正式开源,模型权重全面开放,让外卖平台、餐饮企业、零售品牌等各类行业参与者都能免费使用、灵活部署,大幅降低AI落地门槛。
1.2 小个子也有大能量,性能碾压同级与前辈
Ostrakon-VL的最大亮点,莫过于其在专业基准测试中的惊艳表现,用实力证明了“领域深耕”比“参数堆砌”更具价值:
- ShopBench基准登顶:在首个面向FSRS场景的公开基准ShopBench上,Ostrakon-VL取得了60.1的平均分,不仅比其基础模型Qwen3-VL-8B高出4.8分,更超越了规模大得多的Qwen3-VL-235B(59.4分),实现了“以小胜大”的突破。
- 专属基准加持:ShopBench作为首个FSRS领域标准化评估套件,为模型性能提供了精准的衡量标准。它涵盖店面、店内、厨房三大核心场景,支持单图、多图、视频多格式输入,更设计了79个细粒度任务类别,每幅图片平均包含13.0个物体,真实还原了零售场景的杂乱与复杂。
- 兼顾通用能力:尽管专注于FSRS领域,Ostrakon-VL并未出现“灾难性遗忘”,在Chinese-OCRBench等通用多模态基准上仍取得88.5的高分,既能胜任专业场景任务,也能应对常规多模态需求,实用性拉满。
1.3 ShopBench:定义FSRS领域的评估新标准
提到Ostrakon-VL的性能,就不得不提其核心评估基准——ShopBench。作为首个专为FSRS场景设计的标准化评估套件,它与通用多模态基准最大的区别,在于完全贴合真实零售与餐饮的工作流,解决了“通用基准无法衡量领域能力”的难题。
ShopBench的独特设计的优势十分突出:
- 多格式输入全覆盖:统一协议下支持单图、多图、视频三种输入类型,完美匹配FSRS场景中“图片巡检+视频监控”的实际需求,比如后厨24小时视频流分析、门店多角度图片比对等。
- 细粒度任务分类:采用4层层次结构,涵盖感知(OCR识别、目标定位)、推理(空间关系、合规规则判断)等核心能力,细分出79个叶节点类别,精准覆盖从商品价签核对到厨房卫生检查的每一个细节。
- 真实世界复杂度拉满:每幅图片平均包含13.0个物体,是主流基准中实例密度最高的,真实还原了零售门店货架杂乱、厨房物品繁多的实际场景,避免了“实验室数据与实际应用脱节”的问题。
- 降低语言偏见:创新引入视觉必要性率(VNR)和视觉诱导失败率(VIF)两大诊断指标,确保模型的决策完全依赖视觉理解,而非单纯依靠语言先验知识,让评估结果更公平、更可靠。
需要说明的是,由于法律原因,ShopBench的开源计划已被推迟,但这并不影响其作为FSRS领域评估标准的权威性,Ostrakon-VL的高分表现,也进一步印证了该基准的实用性与严谨性。
1.4 多阶段训练策略,铸就领域专家能力
Ostrakon-VL之所以能在FSRS场景中实现卓越性能,核心在于其采用的多阶段精细化训练策略,既保证了领域知识的深度注入,又避免了通用能力的退化:
- 标题自举(Caption Bootstrapping, CB):通过密集且富含证据的标题,将FSRS领域的专业知识(如食品保质期识别、合规检查标准、商品分类规则等)高效注入模型,让模型快速掌握领域核心知识,减少无关信息干扰。
- 离线课程学习(Offline Curriculum Learning, OCL):按照样本难度分层,从简单的商品识别、价签读取等基础任务,逐步过渡到复杂的合规判断、多图推理等高级任务,让模型循序渐进地提升能力,避免因难度过高导致训练失效。
- 混合偏好优化(Mixed Preference Optimization, MPO):通过“正确答案 vs. 合理但错误答案”的对比训练,引导模型对齐领域内的合规规则与决策逻辑,确保模型输出的结果不仅正确,更符合FSRS场景的实际工作要求,具备可审计性。
这种训练策略的优势在于,既让模型深耕FSRS领域,具备了专业的感知与决策能力,又有效保留了基础模型的通用多模态能力,实现了“专业深度”与“通用广度”的平衡。
1.5 从后厨巡检到门店治理,赋能全场景升级
作为淘宝闪购研发的开源模型(Ostrakon-VL又名“白泽”),它已在实际场景中实现大规模落地,接入淘宝闪购超过100个生产场景,累计调用量突破10亿级别,Token消耗量超万亿,用实际效果证明了其价值所在。其核心应用场景涵盖:
- 厨房卫生智能巡检:24小时分析后厨直播视频流,自动识别墙面、台面清洁度,垃圾桶是否外溢,生熟食材是否分离,厨师是否佩戴工作帽等细节,发现违规行为即时生成预警,实现从“人工抽查”到“全时监控”的转变。
- 虚假店铺识别:通过多图比对与思维推理,将商户环境与工商信息进行交叉验证,自动标记矛盾点,有效遏制“一店多开”、证照不符等违规行为,守护平台治理公平性。
- 堂食资质审核:结合商家上传的“一镜到底”视频,通过跨帧一致性分析识别视频真伪,判断店铺是否具备真实堂食环境,防止用静态图片或AI生成视频蒙混过关,保障消费者权益。
- 零售合规管理:适用于连锁品牌总部对分店的合规检查,自动识别商品价签错误、货架陈列不合规等问题,降低人工巡检成本,提升管理效率,同时其部署成本仅为同类方案的1/20,便于大规模推广应用。
目前,Ostrakon-VL的模型权重已在Hugging Face等主流开源平台发布,感兴趣的开发者可前往GitHub查看论文与技术细节,共同参与模型的优化与迭代,解锁更多FSRS场景的AI可能。
二、前期准备:明确镜像资源与环境要求
本次使用的是ZEEKLOG星图AI提供的Ostrakon-VL专属镜像,镜像已预装miniconda、vllm、chainlit等核心依赖,无需额外繁琐配置,极大节省了环境搭建时间。需要注意的是,镜像资源仅用于个人学习、研究,禁止商业用途,违规使用将承担相应法律责任,这一点大家一定要牢记(具体免责声明见文末)。
环境要求:建议GPU显存不低于24G,确保能正常加载8B参数量的模型;网络通畅,无需额外科学上网,镜像内已集成所需模型文件,无需手动下载。
三、模型部署:两步完成,简单高效
3.1 查看模型服务部署状态
首先通过ZEEKLOG星图AI的webshell工具进入终端,输入以下命令,查看模型服务是否部署成功:
cat /root/workspace/llm.log
如果终端输出模型加载完成、端口启动成功的相关日志(如“Server started on 0.0.0.0:8000”),则说明部署成功(对应部署成功截图,可在此处截取webshell日志界面)。若未部署成功,可检查命令输入是否正确,或重启镜像后重新尝试。
3.2 启动vllm模型服务(手动启动备用方案)
若镜像默认未自动启动模型服务,可执行以下vllm启动脚本,手动启动服务:
/opt/miniconda3/bin/vllm serve --served-model-name Ostrakon-VL-8B --max-num-seqs 16 --max-model-len 4096 --gpu_memory_utilization 0.95 --model /root/ai-models/Ostrakon/Ostrakon-VL-8B --port 8000 --host 0.0.0.0 --trust_remote_code --allowed-local-media-path /root/workspace脚本中已优化GPU显存利用率(0.95),同时指定了端口8000和本地媒体路径,确保后续图片调用正常,无需修改任何参数,直接复制执行即可。
四、模型调用:chainlit可视化交互,新手友好
部署成功后,我们通过chainlit前端进行可视化调用,无需编写复杂代码,点击操作即可完成多模态提问,非常适合新手快速验证模型效果。
4.1 打开chainlit前端
在ZEEKLOG星图AI镜像的webshell中,输入chainlit相关启动命令(镜像已预设快捷启动方式),启动成功后,会生成一个前端访问链接,点击链接即可打开chainlit交互界面(对应chainlit前端界面截图,可截取界面中的模型选择、参数设置区域)。
4.2 可视化提问与效果实测
打开前端界面后,无需额外配置,等待模型加载完成,即可开始提问。该模型支持单图、多图、视频输入,输出格式包括开放式问答、结构化格式、选择题,完美适配FSRS场景的各类需求。
实测案例1:上传一张零售门店前台图片,提问“图片中的店铺名是什么?”,模型在1秒内识别出店铺名称,识别准确率100%,响应速度远超同类场景模型;

实测案例2:上传一张餐饮后厨图片,提问“后厨是否存在违规行为?请列出具体问题”,模型快速识别出“厨师未佩戴工作帽”“地面蔬菜残渣卫生隐患”“垃圾桶未加盖”三个违规点,与人工巡检结果完全一致,这也契合了其在食安治理中的核心应用场景——24小时AI巡检,自动识别后厨合规问题并预警;

实测案例3:上传零售货架图片,提问“货架上的商品种类有多少?分别是什么?”,模型精准统计商品数量,并列出具体商品名称,即使图片中商品密集,也能准确识别,展现了其高视觉复杂度场景的处理能力。

4.3 代码调用示例(进阶用法)
对于开发者而言,也可以通过代码调用模型,实现批量处理、二次开发等需求。以下是基于Python的模型调用代码(来自ZEEKLOG星图AI镜像预设代码,可直接复制使用),核心实现图片上传、模型请求、结果返回的全流程:
# Copyright 2026 The sonhhxg0529 Authors. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import os import time import chainlit as cl from chainlit.input_widget import TextInput,Tags,Slider,Select,Switch import asyncio import aiohttp from openai import AsyncClient from opentelemetry.instrumentation.auto_instrumentation import initialize # 创建图片保存目录 os.makedirs("uploads", exist_ok=True) openai_client = AsyncClient(api_key=os.environ.get("OPENAI_API_KEY","EMPTY"), base_url=os.environ.get("OPENAI_API_BASE","http://localhost:8000/v1")) async def save_image_locally(image_path, filename): """将图片保存到本地""" import shutil try: # 复制文件到uploads目录 dest_path = os.path.join("/root/workspace", filename) shutil.copy2(image_path, dest_path) return dest_path except Exception as e: print(f"保存图片失败: {e}") return None @cl.on_chat_start async def start(): settings = await cl.ChatSettings( [ Select(, label = "模型", values= ["Ostrakon-VL-8B"], initial_index=0 ), Slider(, label = "温度", initial=0.7, min=0, max=1, step=0.05 ), Slider(, label="Top_p", initial=0.9, min=0, max=1, step=0.05 ), Switch(id="Streaming",label="是否流式输出",initial=True), Tags(id="StopSequence",label="停止序列",initial=["Answer:"]), TextInput(id="AgentName",label="代理名称",initial="AI") ] ).send() model_value = settings["Model"] cl.user_session.set("model_value",model_value) temperature_value = settings["Temperature"] cl.user_session.set("temperature_value", temperature_value) is_streaming = settings["Streaming"] cl.user_session.set("is_streaming", is_streaming) top_p = settings["Top_p"] cl.user_session.set("top_p", top_p) cl.user_session.set( "message_history", [ { "role": "system", "content": "You are a useful AI assistant!", } ], ) async def llm_answer(): message_history = cl.user_session.get("message_history") model_name = cl.user_session.get("model_value") temperature_value = cl.user_session.get("temperature_value") is_streaming = cl.user_session.get("is_streaming") top_p = cl.user_session.get("top_p") msg = cl.Message(content="",created_at="qwen") settings = { "temperature": temperature_value, "max_tokens": 512, "top_p": top_p, "frequency_penalty": 0, "presence_penalty": 0, } stream = await openai_client.chat.completions.create( model=model_name, messages=message_history, stream=True, **settings, ) async for part in stream: if token := part.choices[0].delta.content or "": await msg.stream_token(token) message_history.append({"role": "assistant", "content": msg.content}) await msg.send() @cl.on_message async def main(message:cl.Message): message_history = cl.user_session.get("message_history") # 处理包含图片的消息 if message.elements: content = [] # 添加文本内容 if message.content: content.append({"type": "text", "text": message.content}) print(message.elements) # 处理图片 for element in message.elements: if element.type == "image": # 生成唯一的文件名 filename = f"{int(time.time())}_{getattr(element, 'name', 'image')}" # 保存图片到本地 local_path = await save_image_locally(getattr(element, 'path', ''), filename) if local_path: # 使用本地路径的URL content.append({"type": "image_url", "image_url": {"url": f"file://{os.path.abspath(local_path)}"}}) else: # 如果保存失败,使用原始URL content.append({"type": "image_url", "image_url": {"url": getattr(element, 'url', '')}}) print(content) message_history.append({"role": "user", "content": content}) else: # 普通文本消息 message_history.append({"role": "user", "content": message.content}) print(message_history) await llm_answer()代码中已集成图片保存、模型参数配置、流式输出等功能,开发者可根据自身需求修改参数(如温度、最大token数),适配不同场景的调用需求。
五、产品优势:为什么选择ZEEKLOG星图AI的Ostrakon-VL?
结合实测体验,对比其他FSRS场景模型,ZEEKLOG星图AI提供的Ostrakon-VL有三大核心优势,尤其适合开发者和企业用户:
1. 场景适配性极强:专为食品服务与零售场景定制,解决通用模型在该领域识别准确率低、响应慢的痛点,可覆盖店面、店内、厨房等全场景,支持79个细粒度任务分类,能精准应对食安合规、商品识别、门店巡检等核心需求,这也是其区别于通用多模态模型的核心亮点;
2. 部署成本低、效率高:ZEEKLOG星图AI镜像已预装所有依赖,无需手动配置环境、下载模型,两步即可完成部署,即使是新手也能快速上手;同时采用vllm优化推理速度,8B参数量模型的响应速度堪比小型模型,兼顾性能与效率;
3. 开源免费、可扩展性强:模型永久开源,保留版权信息的前提下,可自由二次开发、微调,适配自身业务需求;搭配ShopBench公开基准测试集,可快速验证模型效果,同时支持API调用,轻松集成到现有业务系统中。
六、注意事项
本镜像资源(Ostrakon-VL)为ZEEKLOG星图AI提供,仅用于个人学习、研究使用,禁止任何形式的商业用途,严禁用于非法活动、侵权行为及违反国家法律法规的操作。使用本镜像即代表已知晓并同意本声明,若因违规使用产生的一切法律责任、经济损失及不良后果,均由使用者自行承担,与镜像提供者及ZEEKLOG星图AI无关。镜像提供者保留对镜像资源的修改、删除及追责权利。
七、总结
作为ZEEKLOG星图AI生态中一款优秀的场景化多模态模型,Ostrakon-VL凭借其精准的FSRS场景适配、简单高效的部署流程、开源免费的优势,成为食品服务与零售领域开发者的首选工具。无论是新手入门学习多模态模型,还是企业用户搭建门店巡检、食安合规等业务系统,这款模型都能满足需求。
本次实测全程基于ZEEKLOG星图AI镜像完成,从环境部署到模型调用,全程流畅无卡顿,充分体现了ZEEKLOG星图AI在AI工具整合、镜像优化方面的实力。后续也会持续关注ZEEKLOG星图AI的更多优质模型,分享更多实操教程与使用体验,也建议大家亲自上手尝试,感受场景化多模态模型的魅力!