网站集约化建设流程,wordpress查看网站内容,wordpress移动端加底部导航栏,wordpress首页文件Ostrakon-VL-8B实战教程#xff1a;用LangChain增强Chainlit实现多步骤合规推理链 1. 引言#xff1a;当零售AI遇到合规挑战 想象一下#xff0c;你是一家连锁超市的运营经理#xff0c;每天要面对成百上千张货架照片。员工随手一拍发到工作群#xff1a;“这个货架合规…Ostrakon-VL-8B实战教程用LangChain增强Chainlit实现多步骤合规推理链1. 引言当零售AI遇到合规挑战想象一下你是一家连锁超市的运营经理每天要面对成百上千张货架照片。员工随手一拍发到工作群“这个货架合规吗商品摆放有问题吗”你一张张看一个个判断眼睛都看花了。更头疼的是不同门店的合规标准还不完全一样有些商品需要特定温度保存有些促销品不能挡住消防通道有些生鲜产品有严格的保质期要求。这就是零售和食品服务行业每天面临的真实场景。传统的人工检查方式不仅效率低下而且容易出错。现在有了Ostrakon-VL-8B这个专门为零售场景打造的多模态大模型我们可以让AI来帮忙了。但问题来了简单的“看图说话”够用吗很多时候合规检查不是一步到位的。比如看到一张货架照片AI需要先识别有哪些商品再检查摆放位置是否合规然后判断商品状态是否正常最后给出整改建议这就需要多步骤的推理链。今天我就带你用LangChain来增强Chainlit前端为Ostrakon-VL-8B构建一个强大的多步骤合规推理系统。2. Ostrakon-VL-8B零售场景的AI专家2.1 为什么选择这个模型你可能听说过很多多模态大模型比如GPT-4V、Qwen-VL等。但Ostrakon-VL-8B有个独特优势它是专门为食品服务和零售商店FSRS场景训练的。简单来说它懂零售。普通的多模态模型看到货架照片可能只会说“这是一排商品”。但Ostrakon-VL-8B能告诉你这是哪个品牌的牛奶保质期到什么时候商品摆放是否符合促销规范货架标签是否正确甚至能识别出潜在的食品安全风险而且它只有8B参数部署起来比那些动辄几十B、几百B的模型要轻松得多。在CSDN星图镜像广场上你可以找到预配置好的Ostrakon-VL-8B镜像一键部署就能用。2.2 模型的核心能力为了让你快速了解这个模型能做什么我整理了几个关键能力能力维度具体表现实际应用场景商品识别能识别超过1000种零售商品库存盘点、货架审计合规检查理解零售行业合规标准食品安全检查、消防通道检查状态判断判断商品新鲜度、包装完整性生鲜品控、临期商品管理文字识别读取价格标签、促销信息价格核对、促销执行检查空间理解理解商品摆放位置关系陈列规范检查、空间利用率分析这些能力不是凭空吹嘘的。Ostrakon-VL-8B在ShopBench基准测试中表现优异这是第一个专门为零售场景设计的公开基准。测试包含了店面、店内、厨房等多种场景单图、多图、视频等多种输入以及开放式问答、结构化格式等多种输出要求。3. 环境准备与快速部署3.1 检查模型服务状态如果你已经在CSDN星图镜像广场部署了Ostrakon-VL-8B镜像第一步就是确认服务是否正常运行。打开终端运行cat /root/workspace/llm.log你会看到类似这样的输出INFO 07-10 14:30:15 llm_engine.py:73] Initializing an LLM engine with config: model/models/ostrakon-vl-8b, tokenizer_modeauto, trust_remote_codeTrue, dtypeauto, ... INFO 07-10 14:30:20 llm_engine.py:158] # GPU blocks: 1458, # CPU blocks: 512 INFO 07-10 14:30:25 model_runner.py:58] Loading weights from /models/ostrakon-vl-8b INFO 07-10 14:30:45 llm_engine.py:273] Model loaded successfully. Ready to serve requests.看到“Model loaded successfully”就说明模型加载成功了。如果还在加载中可能需要等几分钟8B模型加载需要一些时间。3.2 Chainlit前端初体验Chainlit是一个专门为AI应用设计的聊天界面框架用起来特别简单。部署好镜像后通常Chainlit服务会自动启动。打开浏览器访问提供的Chainlit地址一般是http://你的服务器地址:8000你会看到一个干净的聊天界面。先来试试基本功能。上传一张零售场景的图片比如货架照片然后问图片中的店铺名是什么模型会识别图片中的店铺招牌或标识告诉你店铺名称。这个简单的测试能确认模型的基础视觉理解能力是否正常。4. 从单次问答到多步骤推理4.1 单次问答的局限性用Chainlit直接调用模型每次只能问一个问题得到一个回答。这在简单场景下够用但面对复杂的合规检查就力不从心了。举个例子你想检查一张冷藏柜的照片第一次问“有哪些商品”第二次问“温度显示是多少”第三次问“商品摆放整齐吗”第四次问“有没有过期商品”你得问四次复制粘贴四次还要自己把答案拼凑起来判断是否合规。太麻烦了4.2 LangChain的解决方案LangChain是一个专门为构建AI应用链而设计的框架。它能把多个步骤串联起来让AI自动执行复杂的推理流程。我们的目标是上传一张图片AI自动执行完整的合规检查流程最后给你一个结构化的报告。具体来说我们要构建这样一个链图片分析识别图片中的关键元素合规规则匹配根据场景类型应用相应的合规规则分项检查对每个合规项逐一检查综合评估给出总体合规评分和建议报告生成输出结构化的检查报告5. 构建多步骤合规推理链5.1 安装必要的库首先确保你的环境中有这些Python库pip install langchain langchain-community chainlit如果你用的镜像已经预装了可以跳过这一步。不过建议检查一下版本import langchain import chainlit print(fLangChain版本: {langchain.__version__}) print(fChainlit版本: {chainlit.__version__})5.2 创建LangChain代理LangChain的核心概念之一是“代理”Agent。代理能根据当前状态决定下一步做什么非常适合多步骤推理。我们先创建一个简单的代理让它能调用Ostrakon-VL-8B模型from langchain.agents import AgentExecutor, create_react_agent from langchain.tools import Tool from langchain_community.llms import VLLM from langchain.prompts import PromptTemplate # 连接到已部署的Ostrakon-VL-8B模型 llm VLLM( model/models/ostrakon-vl-8b, temperature0.1, # 温度设低一点让回答更确定 max_tokens1024, top_p0.9, ) # 定义图片分析工具 def analyze_image(image_path: str, question: str) - str: 调用Ostrakon-VL分析图片并回答问题 # 这里需要根据你的实际部署方式调整 # 如果是通过API调用可以这样 # response requests.post(api_url, json{image: image_path, question: question}) # return response.json()[answer] # 简化示例直接返回模拟结果 return f分析图片{image_path}问题{question}回答图片中包含商品A、商品B摆放整齐温度显示5°C。 # 创建工具 tools [ Tool( nameimage_analyzer, funcanalyze_image, description分析零售场景图片识别商品、检查合规性 ), ] # 创建代理 agent_prompt PromptTemplate.from_template( 你是一个零售合规检查专家。请根据用户提供的图片执行完整的合规检查流程。 检查步骤 1. 识别图片场景类型货架、冷藏柜、收银台等 2. 分析图片中的关键元素商品、标签、设备等 3. 应用相应的合规规则进行检查 4. 给出检查结果和改进建议 当前任务{input} 请一步步思考使用可用的工具进行分析。 ) agent create_react_agent(llm, tools, agent_prompt) agent_executor AgentExecutor(agentagent, toolstools, verboseTrue)5.3 设计合规检查链现在我们来设计具体的检查流程。不同的零售场景有不同的合规要求我们需要针对性地设计检查链。from langchain.chains import SequentialChain from langchain.chains.llm import LLMChain # 定义不同的检查环节 def create_compliance_chain(): 创建合规检查链 # 场景识别链 scene_chain LLMChain( llmllm, promptPromptTemplate( input_variables[image_description], template根据以下图片描述判断这是什么零售场景 描述{image_description} 请从以下选项中选择最匹配的场景 1. 货架陈列 2. 冷藏冷冻设备 3. 收银区域 4. 食品加工区 5. 仓储区域 6. 其他 只返回数字选项不要解释。 ), output_keyscene_type ) # 商品识别链 product_chain LLMChain( llmllm, promptPromptTemplate( input_variables[image_description, scene_type], template识别图片中的商品 场景类型{scene_type} 图片描述{image_description} 请列出所有能识别的商品格式为 商品名称 | 数量 | 位置 | 状态 例如 蒙牛纯牛奶 | 12盒 | 货架第三层 | 包装完好 ), output_keyproduct_list ) # 合规检查链根据场景类型选择不同的检查规则 def get_compliance_rules(scene_type): 根据场景类型返回相应的合规规则 rules { 1: [商品摆放整齐, 价格标签清晰, 无过期商品, 促销标识正确], 2: [温度显示正常, 设备运行指示灯亮, 商品在保质期内, 冷气充足], 3: [收银台整洁, 排队标识清晰, 消毒用品齐全, 员工佩戴口罩], 4: [工作人员着装规范, 操作台清洁, 生熟分开, 有消毒记录], 5: [货物离地存放, 通道畅通, 防火设备完好, 分类明确] } return rules.get(scene_type, [基本卫生, 安全通道, 标识清晰]) compliance_chain LLMChain( llmllm, promptPromptTemplate( input_variables[image_description, scene_type, product_list], template执行合规检查 场景类型{scene_type} 商品列表{product_list} 图片描述{image_description} 检查规则{compliance_rules} 请对每条规则进行检查格式为 规则 | 检查结果(通过/不通过) | 具体说明 | 改进建议 例如 商品摆放整齐 | 不通过 | 第三层商品歪斜 | 建议重新整理货架 ), output_keycompliance_check ) # 创建顺序链 overall_chain SequentialChain( chains[scene_chain, product_chain, compliance_chain], input_variables[image_description], output_variables[scene_type, product_list, compliance_check], verboseTrue ) return overall_chain5.4 集成到Chainlit界面现在我们把LangChain的推理链集成到Chainlit中让用户通过友好的界面使用。import chainlit as cl from PIL import Image import io import base64 cl.on_chat_start async def start(): 聊天开始时初始化 # 创建合规检查链 compliance_chain create_compliance_chain() # 保存到用户会话中 cl.user_session.set(compliance_chain, compliance_chain) # 发送欢迎消息 await cl.Message( content 欢迎使用零售合规智能检查系统 我可以帮你 1. 分析零售场景图片 2. 自动执行多步骤合规检查 3. 生成结构化检查报告 4. 提供改进建议 请上传一张零售场景图片货架、冷藏柜、收银台等我会进行全面的合规分析。 ).send() cl.on_message async def main(message: cl.Message): 处理用户消息 # 获取用户上传的图片 if message.elements: for element in message.elements: if image in element.mime: # 处理图片 image_data element.content image Image.open(io.BytesIO(image_data)) # 这里可以添加图片预处理逻辑 # 比如调整大小、格式转换等 # 将图片转换为base64用于显示 buffered io.BytesIO() image.save(buffered, formatJPEG) img_str base64.b64encode(buffered.getvalue()).decode() # 显示图片 await cl.Message( contentf![上传的图片](data:image/jpeg;base64,{img_str}) ).send() # 开始分析 msg cl.Message(content正在分析图片请稍候...) await msg.send() try: # 获取合规检查链 chain cl.user_session.get(compliance_chain) # 这里需要将图片转换为文字描述 # 实际应用中你可以 # 1. 使用Ostrakon-VL生成图片描述 # 2. 或者直接使用图片特征 # 简化示例使用模拟的图片描述 image_description 零售店铺货架照片包含多种商品陈列 # 执行合规检查链 result chain({ image_description: image_description }) # 构建检查报告 report f## 合规检查报告 **检查场景**{result[scene_type]} **检查时间**{datetime.now().strftime(%Y-%m-%d %H:%M:%S)} ### 商品识别结果 {result[product_list]} ### ✅ 合规检查详情 {result[compliance_check]} ### 总体建议 1. 立即整改不通过项 2. 定期进行自查 3. 加强员工培训 4. 建立检查记录 await cl.Message(contentreport).send() except Exception as e: await cl.Message(contentf分析过程中出现错误{str(e)}).send() return # 如果没有图片提示用户上传 await cl.Message( content请上传一张零售场景图片我会进行合规检查。支持货架、冷藏柜、收银台等多种场景。 ).send()6. 实战案例生鲜货架合规检查让我们通过一个具体例子看看这个系统在实际中怎么用。6.1 案例背景某超市生鲜区经理上传了一张冷藏柜照片想要检查商品摆放是否整齐温度是否达标商品是否在保质期内卫生状况如何6.2 系统执行流程当你上传图片后系统会自动执行以下步骤第一步场景识别系统识别出这是“冷藏冷冻设备”场景对应场景类型2。第二步商品识别系统分析图片识别出蒙牛鲜牛奶 | 15盒 | 左侧第一层 | 包装完好伊利酸奶 | 20杯 | 左侧第二层 | 包装完好双汇火腿肠 | 10包 | 右侧第一层 | 包装完好思念水饺 | 8袋 | 右侧第二层 | 包装完好第三步合规检查系统应用冷藏设备的合规规则进行检查检查项目结果具体说明建议温度显示正常不通过温度计显示8°C高于标准4°C立即调整温度设置设备运行指示灯亮通过运行指示灯正常亮起保持设备正常运行商品在保质期内通过所有商品均在保质期内继续保持先进先出原则冷气充足不通过部分商品表面有冷凝水不足迹象检查制冷系统确保冷气均匀分布第四步生成报告系统汇总所有信息生成完整的检查报告包括总体合规评分50%2项通过2项不通过紧急程度高温度问题影响食品安全整改优先级立即处理温度问题6.3 代码实现细节在实际代码中我们可以进一步优化检查逻辑def enhanced_compliance_check(image_path, scene_type): 增强的合规检查函数 # 根据场景类型加载特定的检查模板 templates { 2: { temperature_check: { question: 冷藏柜的温度显示是多少度是否在0-4°C范围内, critical: True # 关键检查项 }, product_freshness: { question: 检查所有商品的外观是否有变质、破损、漏气的情况, critical: True }, equipment_status: { question: 设备运行指示灯是否正常有无报警提示, critical: False }, cleanliness: { question: 冷藏柜内部是否清洁有无污渍或异味, critical: False } } # 可以添加其他场景的检查模板 } results [] template templates.get(scene_type, {}) for check_name, check_config in template.items(): # 调用Ostrakon-VL进行专项检查 question check_config[question] answer call_ostrakon_vl(image_path, question) # 解析检查结果 result { check_item: check_name, question: question, answer: answer, is_critical: check_config[critical], status: 待评估 } # 简单的规则匹配来判断是否通过 if 温度 in question and 0-4°C in question: # 提取温度数值 import re temp_match re.search(r(\d)°C, answer) if temp_match: temp int(temp_match.group(1)) result[status] 通过 if 0 temp 4 else 不通过 result[details] f当前温度{temp}°C标准范围0-4°C results.append(result) return results7. 高级功能扩展7.1 多图片批量检查在实际工作中往往需要检查多张图片。我们可以扩展系统支持批量处理async def batch_compliance_check(image_paths): 批量合规检查 all_results [] # 创建进度条 progress_bar cl.ProgressBar(totallen(image_paths), label批量检查中...) await progress_bar.start() for i, image_path in enumerate(image_paths): # 更新进度 await progress_bar.update(i 1) # 对每张图片执行检查 result await single_image_check(image_path) all_results.append(result) # 可以添加延迟避免请求过快 await asyncio.sleep(0.5) await progress_bar.stop() # 生成批量报告 batch_report generate_batch_report(all_results) return batch_report7.2 历史记录与趋势分析我们可以添加数据库支持保存每次检查记录import sqlite3 from datetime import datetime class ComplianceDatabase: 合规检查数据库 def __init__(self, db_pathcompliance.db): self.conn sqlite3.connect(db_path) self.create_tables() def create_tables(self): 创建数据表 cursor self.conn.cursor() # 检查记录表 cursor.execute( CREATE TABLE IF NOT EXISTS checks ( id INTEGER PRIMARY KEY AUTOINCREMENT, store_id TEXT, scene_type TEXT, check_time TIMESTAMP, total_items INTEGER, passed_items INTEGER, failed_items INTEGER, critical_failed INTEGER, report_text TEXT ) ) # 详细结果表 cursor.execute( CREATE TABLE IF NOT EXISTS check_details ( id INTEGER PRIMARY KEY AUTOINCREMENT, check_id INTEGER, check_item TEXT, status TEXT, details TEXT, FOREIGN KEY (check_id) REFERENCES checks (id) ) ) self.conn.commit() def save_check(self, store_id, scene_type, results): 保存检查结果 cursor self.conn.cursor() # 统计结果 total len(results) passed sum(1 for r in results if r[status] 通过) failed total - passed critical_failed sum(1 for r in results if r[status] ! 通过 and r.get(is_critical, False)) # 插入检查记录 cursor.execute( INSERT INTO checks (store_id, scene_type, check_time, total_items, passed_items, failed_items, critical_failed, report_text) VALUES (?, ?, ?, ?, ?, ?, ?, ?) , (store_id, scene_type, datetime.now(), total, passed, failed, critical_failed, str(results))) check_id cursor.lastrowid # 插入详细结果 for result in results: cursor.execute( INSERT INTO check_details (check_id, check_item, status, details) VALUES (?, ?, ?, ?) , (check_id, result[check_item], result[status], result.get(details, ))) self.conn.commit() return check_id def get_trend(self, store_id, days30): 获取趋势数据 cursor self.conn.cursor() cursor.execute( SELECT DATE(check_time) as date, AVG(passed_items * 1.0 / total_items) as pass_rate, COUNT(*) as check_count FROM checks WHERE store_id ? AND check_time DATE(now, ?) GROUP BY DATE(check_time) ORDER BY date , (store_id, f-{days} days)) return cursor.fetchall()7.3 自定义检查规则不同门店可能有不同的检查标准。我们可以让用户自定义检查规则class CustomRuleManager: 自定义规则管理器 def __init__(self): self.rules {} def add_rule(self, scene_type, rule_name, question, is_criticalFalse): 添加自定义规则 if scene_type not in self.rules: self.rules[scene_type] [] self.rules[scene_type].append({ name: rule_name, question: question, critical: is_critical }) def get_rules(self, scene_type): 获取指定场景的规则 return self.rules.get(scene_type, []) def export_rules(self, filepath): 导出规则到文件 import json with open(filepath, w, encodingutf-8) as f: json.dump(self.rules, f, ensure_asciiFalse, indent2) def import_rules(self, filepath): 从文件导入规则 import json with open(filepath, r, encodingutf-8) as f: self.rules json.load(f)8. 部署与优化建议8.1 性能优化技巧在实际部署中你可能会遇到性能问题。这里有几个优化建议图片预处理优化def optimize_image_processing(image): 优化图片处理流程 # 1. 调整大小减少处理数据量 if image.size[0] 1024 or image.size[1] 1024: image image.resize((1024, 1024), Image.Resampling.LANCZOS) # 2. 转换为RGB模式如果是RGBA if image.mode RGBA: image image.convert(RGB) # 3. 压缩质量平衡清晰度和大小 # 保存为JPEG质量85% output io.BytesIO() image.save(output, formatJPEG, quality85, optimizeTrue) return output.getvalue()缓存策略from functools import lru_cache import hashlib lru_cache(maxsize100) def cached_image_analysis(image_hash, question): 带缓存的图片分析 # 先检查缓存 cache_key f{image_hash}_{question} # 如果缓存中有直接返回 # 否则调用模型分析并缓存结果 return analysis_result8.2 错误处理与重试网络不稳定或模型服务暂时不可用时需要有良好的错误处理机制import asyncio from tenacity import retry, stop_after_attempt, wait_exponential retry(stopstop_after_attempt(3), waitwait_exponential(multiplier1, min4, max10)) async def robust_model_call(image_data, question, max_retries3): 健壮的模型调用带重试机制 for attempt in range(max_retries): try: # 调用模型API response await call_model_api(image_data, question) return response except Exception as e: if attempt max_retries - 1: raise # 最后一次尝试失败抛出异常 else: # 等待一段时间后重试 wait_time 2 ** attempt # 指数退避 await asyncio.sleep(wait_time) continue8.3 安全考虑在实际部署中还需要考虑安全性图片验证检查上传的确实是图片文件大小限制限制上传图片的大小频率限制防止恶意频繁调用数据隔离不同用户的数据要隔离def validate_image_file(file_data, max_size_mb10): 验证上传的图片文件 # 检查文件大小 if len(file_data) max_size_mb * 1024 * 1024: raise ValueError(f图片大小不能超过{max_size_mb}MB) # 检查文件类型 try: image Image.open(io.BytesIO(file_data)) image.verify() # 验证图片完整性 # 检查图片格式 allowed_formats [JPEG, PNG, GIF, BMP] if image.format not in allowed_formats: raise ValueError(f不支持的文件格式{image.format}) except Exception as e: raise ValueError(f无效的图片文件{str(e)}) return True9. 总结9.1 核心价值回顾通过这个教程我们构建了一个基于Ostrakon-VL-8B和LangChain的零售合规智能检查系统。这个系统的核心价值在于对零售企业的价值效率提升自动化的合规检查比人工快10倍以上准确性提高AI检查不受疲劳、情绪影响结果更客观成本降低减少人工检查的人力成本风险预警及时发现潜在合规风险避免罚款和事故对技术开发者的价值学习多模态AI应用掌握如何将视觉大模型应用到实际业务中掌握LangChain链式编程学会构建复杂的AI推理流程了解零售行业需求理解垂直领域AI应用的特点和挑战获得可复用的代码框架可以直接用于其他类似场景9.2 关键实现要点模型选择Ostrakon-VL-8B是专门为零售场景优化的模型比通用模型效果更好链式设计用LangChain将单次问答扩展为多步骤推理链界面友好Chainlit提供了直观的聊天界面降低使用门槛可扩展性系统设计考虑了批量处理、历史记录、自定义规则等扩展需求9.3 下一步学习建议如果你对这个系统感兴趣可以进一步探索集成更多模型除了Ostrakon-VL还可以集成其他专用模型比如专门识别食品保质期的模型添加语音功能让检查员可以通过语音描述问题系统自动记录并分析移动端适配开发手机App让检查员可以随时拍照上传实时监控连接摄像头实现24小时不间断的自动合规监控预测分析基于历史数据预测哪些区域、哪些时间容易出问题9.4 实际部署建议在实际部署时建议从小规模开始先在一两个门店试点收集反馈结合人工复核初期AI结果需要人工复核确保准确性持续优化规则根据实际使用情况不断调整和优化检查规则关注数据安全零售数据涉及商业机密要做好数据加密和访问控制零售行业的数字化转型正在加速AI技术在其中扮演着越来越重要的角色。通过这个实战教程你不仅学会了如何构建一个实用的AI应用更重要的是掌握了将AI技术落地到具体业务场景的方法论。技术的价值在于解决实际问题。希望这个系统能帮助你或你的客户提升零售运营效率让合规检查从负担变成优势。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。