文章目录
- 1. 简介
- 2. 先说结论
- 3. 比板上 ChatGPT 更有意义
- 3.1 它利用了 Orin 的真实优势
- 3.2 它降低了幻觉伤害
- 3.3 它方便做成内容和产品资产
- 4. 先约定事件格式
- 5. 一周可完成的 MVP 范围
- 6. 提示词:基于事件说话
- 7. 可运行脚本
- 8. 和检测主链路怎么协作
- 9. 验收
- 10. 端侧应用差异点
- 11. 什么时候不该加大模型
- 12. 决策表
- 13. 常见误区
- 13.1 先上很大的端侧模型,再找业务
- 13.2 让模型同时负责“发现问题”和“解释问题”
- 13.3 没有降级路径
- 13.4 用演示对话代替值班验收
- 14. 术语速查
- 15. 小结
- 16. 相关阅读与后续
摘要:在 Jetson Orin 上“跑通一个大模型”并不难,但多数演示停在聊天窗口,现场并不会用。更值得做的,是把已有检测/感知闭环接上端侧小模型:先输出结构化事件,再生成可执行的告警解释、点检建议或值班摘要。本文给出一条可落地的最小路径、事件格式、提示词约束、验收标准和一套可运行脚本。适合已经在 Orin 上做过检测,并开始考虑端侧语言能力的人。模型与 JetPack 细节以官方文档为准。
承接:
- Orin 上跑本地大模型,适合什么场景
- Orin 上目标检测最小闭环
- 本地大模型跑通了,为什么还是不好用
建议目录:
mkdir-p~/orin-edge-app/{events,scripts,prompts,logs,out}cd~/orin-edge-app| 文件 | 作用 |
|---|---|
events/sample_event.json | 一条结构化告警事件样例 |
prompts/explain_alarm.txt | 约束模型只基于事件作答 |
scripts/explain_event.py | 读取事件,调用本机 OpenAI 兼容接口生成解释 |
scripts/accept_check.sh | 发布前做延迟、资源与输出抽检 |
1. 简介
Orin + 大模型常见两种结果:
| 类型 | 看起来像 | 现场价值 |
|---|---|---|
| 演示型 | 板上能聊天、能截图 | 演示结束就结束 |
| 应用型 | 事件进得来,建议出得去 | 值班/巡检真的会看 |
图1. 关键不在模型更大,而在有没有进入现场工作流。
所以本文不追“端侧跑更大模型”,而追一个更实际的目标:
检测已经会报警了,怎样让 Orin 上的大模型把报警说成人能马上执行的话。
2. 先说结论
更值得做的最小形态是:
感知检测 → 结构化事件 → 小模型解释 → 告警/工单/屏幕提示
| 模块 | 负责什么 | 不要让它做什么 |
|---|---|---|
| 检测/感知 | 发现异常,给类别、位置、置信度 | 写长篇分析 |
| 事件层 | 统一字段、去重、附带必要上下文 | 自由发挥 |
| 小模型 | 在模板约束下生成原因假设与检查步骤 | 开放域闲聊 |
| 输出层 | 推屏幕、喇叭、工单草稿 | 代替控制系统做危险动作 |
- 关注点放在“事件怎么进、建议怎么出”,不是放在参数量。
- 先做单路、单类告警,再谈多路并发和复杂多模态。
- 模型输出必须可验收:步骤能否执行、能不能断网用。
- 检测不稳时,先修检测;小模型救不了误报洪水。
图2. 这是一条能在一周内做出 MVP 的路径。
3. 比板上 ChatGPT 更有意义
3.1 它利用了 Orin 的真实优势
Orin 强在靠近相机、传感器、工控现场,不在提供最强通用对话。把语言能力接到检测事件上,才是板子该干的事。
3.2 它降低了幻觉伤害
开放域问答里,模型胡说成本很高。
结构化事件 + 固定输出模板后,模型主要在“组织检查步骤”,不是“发明世界知识”。
3.3 它方便做成内容和产品资产
同样一套东西,你可以:
- 写成技术文(事件格式、验收、资源争用)
- 做成仓库模板(别人能复现)
- 接到已有 YOLO/TensorRT 闭环上继续加深
这比单独发一篇“我在 Orin 上跑通了某某模型”更耐读,也更像你的标签。
4. 先约定事件格式
图3. 小模型吃的是事件,不是原始视频流。
保存events/sample_event.json:
{"event_id":"cam01-20260803-101500-001","ts":"2026-08-03T10:15:00","camera_id":"cam01","line_id":"line-A","defect":"scratch","confidence":0.87,"bbox":[120,80,260,180],"repeat_count_1min":3,"snapshot_path":"out/cam01_101500.jpg","kb_hint":"历史相似:上料导轨毛刺会导致周期性划痕"}字段不必一次完美,但至少要有:
| 字段 | 作用 |
|---|---|
| 时间 / 相机 / 产线 | 让人知道在哪发生 |
| 类别 / 置信度 / 框 | 来自检测,不让模型猜“有没有问题” |
| 重复次数 | 区分偶发和持续 |
| 可选知识提示 | 把手册摘要当材料,而不是让模型背世界 |
原则:
检测负责“看见了什么”;模型负责“接下来先查什么”。
5. 一周可完成的 MVP 范围
图4. 先做窄,再做宽;别一上来就开放域。
| 阶段 | 做 | 先不做 |
|---|---|---|
| Day 1-2 | 单路相机,单缺陷类别,事件落盘 | 多模型编排 |
| Day 3-4 | 小模型解释脚本 + 固定输出模板 | 长对话、多轮 Agent |
| Day 5 | 和屏幕/日志/工单草稿接通 | 自动控制执行器 |
| Day 6-7 | 验收:延迟、可执行性、断网、资源 | 追求更大模型 |
如果你还没有检测闭环,先回到检测最小路径;语言层建立在稳定事件上,会少走很多弯路。
6. 提示词:基于事件说话
保存prompts/explain_alarm.txt:
你是产线值班助手。只能基于给定 JSON 事件作答,不要编造事件里没有的传感器读数。 输出必须用下面模板: 1) 一句话摘要 2) 可能原因(最多3条) 3) 建议检查步骤(最多5步,按优先级) 4) 是否建议升级人工(是/否,并给理由) 要求: - 步骤要可执行,避免空话 - 如果信息不足,明确写“信息不足”,不要硬猜 - 不要输出与模板无关的内容这种约束看起来“不自由”,但在端侧恰恰是优点:更好验收,也更不容易在现场丢人。
7. 可运行脚本
下面脚本默认对接本机 OpenAI 兼容接口(例如 Ollama)。若你在 Orin 上用其他推理服务,只需改base_url和model。
保存为scripts/explain_event.py:
#!/usr/bin/env python3"""读取结构化事件,生成告警解释。 依赖: pip3 install openai Ollama OpenAI 兼容说明: https://github.com/ollama/ollama/blob/main/docs/openai.md """from__future__importannotationsimportargparseimportjsonfrompathlibimportPathfromopenaiimportOpenAIdefload_text(path:Path)->str:returnpath.read_text(encoding="utf-8")defmain()->None:ap=argparse.ArgumentParser()ap.add_argument("--event",required=True,help="事件 JSON 路径")ap.add_argument("--prompt",default="prompts/explain_alarm.txt")ap.add_argument("--model",default="qwen2.5:7b",help="改成你本机可用模型名")ap.add_argument("--base-url",default="http://127.0.0.1:11434/v1")ap.add_argument("--out",default="out/explain.txt")args=ap.parse_args()event=json.loads(Path(args.event).read_text(encoding="utf-8"))system_prompt=load_text(Path(args.prompt))user_content=("请基于下面事件生成告警解释:\n"+json.dumps(event,ensure_ascii=False,indent=2))client=OpenAI(base_url=args.base_url,api_key="ollama")resp=client.chat.completions.create(model=args.model,temperature=0.2,messages=[{"role":"system","content":system_prompt},{"role":"user","content":user_content},],)text=(resp.choices[0].message.contentor"").strip()out=Path(args.out)out.parent.mkdir(parents=True,exist_ok=True)out.write_text(text+"\n",encoding="utf-8")print(text)print(f"\n[saved]{out}")if__name__=="__main__":main()pip3installopenai# 先确认本地服务可用curl-shttp://127.0.0.1:11434/api/tags python3 scripts/explain_event.py\--eventevents/sample_event.json\--promptprompts/explain_alarm.txt\--modelqwen2.5:7b\--outout/explain.txt检测程序只需要多做一步:每次告警写一个 JSON 到events/,然后调用这个脚本。不必一上来重写整个视觉栈。
8. 和检测主链路怎么协作
一个不容易翻车的进程划分:
| 进程 | 职责 | 资源策略 |
|---|---|---|
| 检测服务 | 常驻,优先保障 | 固定功耗档,内存预留 |
| 解释服务 | 按事件触发,或小队列 | 可排队,可降级为模板回复 |
| 展示/工单 | 消费解释结果 | 失败时至少展示原始事件 |
三条工程规则:
- 检测永远比聊天重要。解释服务挂了,报警仍要在。
- 解释失败要有降级。例如只展示“类别 + 置信度 + 重复次数”。
- 同机部署先测资源争用。内存打满时,先砍并发,再谈更大模型。
可先用手写事件模拟联调,再接真实检测输出。这样提示词和模板可以在 PC 或 Orin 上并行打磨。
9. 验收
图5. 延迟、可执行、断网、资源,比口才更重要。
| 验收项 | 通过标准 | 不通过时怎么办 |
|---|---|---|
| 延迟 | 告警后数秒内出解释(按你现场容忍度定) | 改小模型、改短输出、改异步队列 |
| 可执行 | 值班人员按步骤能动手,不靠空话 | 收紧模板,增加kb_hint |
| 断网 | 不依赖公网仍能给出模板化结果 | 模型与知识卡片本地化 |
| 资源 | 检测帧率不明显被拖垮 | 降并发、错峰、解释按需拉起 |
保存scripts/accept_check.sh:
#!/usr/bin/env bashset-euopipefailecho"== resource snapshot =="free-hifcommand-vnvidia-smi>/dev/null2>&1;thennvidia-smifiifcommand-vnvpmodel>/dev/null2>&1;thennvpmodel-q||truefiechoecho"== explain once =="/usr/bin/time-f"elapsed=%e sec"python3 scripts/explain_event.py\--eventevents/sample_event.json\--outout/explain_accept.txtechoecho"== output preview =="sed-n'1,40p'out/explain_accept.txtchmod+x scripts/accept_check.sh ./scripts/accept_check.sh|teelogs/accept.txt验收时再人工看一眼:步骤是不是能做,有没有明显胡编。
10. 端侧应用差异点
不一定要发明新模型。下面这些点就够形成差异:
事件协议
让视觉、语言、工单系统说同一种 JSON。可降级策略
模型忙/失败时,系统仍可用。窄任务提示词资产
针对划痕、缺料、堵料等类别准备不同模板。同机资源编排
检测常驻、解释按需,并记录nvpmodel与温度影响。现场验收集
20~50 条真实/半真实事件,比公开榜更接近你的场景。
11. 什么时候不该加大模型
| 情况 | 原因 |
|---|---|
| 检测误报还没控住 | 解释层会放大噪音 |
| 只想做开放域聊天 | Orin 不是最优载体 |
| 要求模型直接控制危险动作 | 需要单独的安全链路,不能靠生成文本 |
| 连单路事件落盘都没有 | 先补工程基础,再谈语言层 |
相关边界也可回看:Orin 上跑本地大模型,适合什么场景。
12. 决策表
| 问题 | 若为“是” | 下一步 |
|---|---|---|
| 是否已有可复现的检测告警? | 可以接解释层 | 先做检测闭环 |
| 是否能定义 1 个窄场景? | 开工 MVP | 先别做通用助手 |
| 是否能接受模板化输出? | 端侧成功率更高 | 重新评估目标 |
| 是否能断网验收? | 值得做成端侧应用 | 先别宣称为现场方案 |
| 检测与解释同机是否抢资源? | 先做降级与错峰 | 再考虑更大模型 |
13. 常见误区
13.1 先上很大的端侧模型,再找业务
顺序应反过来:先业务事件,再模型规格。
13.2 让模型同时负责“发现问题”和“解释问题”
发现交给检测;解释交给小模型。职责混在一起,排障会很痛。
13.3 没有降级路径
现场最怕的不是解释不够漂亮,而是主链路被拖死。
13.4 用演示对话代替值班验收
最终用户是值班/巡检人员,不是围观聊天的人。
14. 术语速查
| 术语 | 含义 |
|---|---|
| 结构化事件 | 检测结果转成固定字段的 JSON/记录 |
| 解释层 | 基于事件生成人可执行建议的模块 |
| 降级 | 模型不可用时回退到规则/模板输出 |
| MVP | 最小可用版本,先打通主路径 |
| 同机争用 | 检测与 LLM 抢内存/算力/带宽 |
| 可验收输出 | 有模板、有步骤、能判断对错的结果 |
15. 小结
Orin 加大模型,值得做的不是板上再开一个聊天窗口,而是:
把检测事件变成现场用得上的解释与建议。
最小路径很清楚:
- 单路检测告警落成 JSON
- 小模型按模板生成摘要、原因、检查步骤
- 输出到日志/屏幕/工单草稿
- 用延迟、可执行性、断网、资源四项验收
先做窄场景闭环,再谈更大模型;先让现场用起来,端侧应用才说的过去。
16. 相关阅读与后续
- Orin 上跑本地大模型,适合什么场景
- 本地部署大模型的详细考虑
- 本地部署大模型前,要不要加显卡
- 本地大模型跑通了,为什么还是不好用
- Jetson 做边缘 AI,有价值的方向是什么
后面再更新会基于具体例子来展开:
如何把现有 YOLO 告警自动写成
events/*.json
相关链接:
- Ollama
- Ollama OpenAI compatibility
- Jetson Orin
如果这篇帮你确定了端侧应用该怎么做,欢迎点赞、收藏,也欢迎关注后续更新。