文章目录
-
- [1. 简介](#1. 简介)
- [2. 先说结论](#2. 先说结论)
- [3. 比板上 ChatGPT 更有意义](#3. 比板上 ChatGPT 更有意义)
-
- [3.1 它利用了 Orin 的真实优势](#3.1 它利用了 Orin 的真实优势)
- [3.2 它降低了幻觉伤害](#3.2 它降低了幻觉伤害)
- [3.3 它方便做成内容和产品资产](#3.3 它方便做成内容和产品资产)
- [4. 先约定事件格式](#4. 先约定事件格式)
- [5. 一周可完成的 MVP 范围](#5. 一周可完成的 MVP 范围)
- [6. 提示词:基于事件说话](#6. 提示词:基于事件说话)
- [7. 可运行脚本](#7. 可运行脚本)
- [8. 和检测主链路怎么协作](#8. 和检测主链路怎么协作)
- [9. 验收](#9. 验收)
- [10. 端侧应用差异点](#10. 端侧应用差异点)
- [11. 什么时候不该加大模型](#11. 什么时候不该加大模型)
- [12. 决策表](#12. 决策表)
- [13. 常见误区](#13. 常见误区)
-
- [13.1 先上很大的端侧模型,再找业务](#13.1 先上很大的端侧模型,再找业务)
- [13.2 让模型同时负责"发现问题"和"解释问题"](#13.2 让模型同时负责“发现问题”和“解释问题”)
- [13.3 没有降级路径](#13.3 没有降级路径)
- [13.4 用演示对话代替值班验收](#13.4 用演示对话代替值班验收)
- [14. 术语速查](#14. 术语速查)
- [15. 小结](#15. 小结)
- [16. 相关阅读与后续](#16. 相关阅读与后续)
摘要:在 Jetson Orin 上"跑通一个大模型"并不难,但多数演示停在聊天窗口,现场并不会用。更值得做的,是把已有检测/感知闭环接上端侧小模型:先输出结构化事件,再生成可执行的告警解释、点检建议或值班摘要。本文给出一条可落地的最小路径、事件格式、提示词约束、验收标准和一套可运行脚本。适合已经在 Orin 上做过检测,并开始考虑端侧语言能力的人。模型与 JetPack 细节以官方文档为准。
承接:
建议目录:
bash
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:
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:
text
你是产线值班助手。只能基于给定 JSON 事件作答,不要编造事件里没有的传感器读数。
输出必须用下面模板:
1) 一句话摘要
2) 可能原因(最多3条)
3) 建议检查步骤(最多5步,按优先级)
4) 是否建议升级人工(是/否,并给理由)
要求:
- 步骤要可执行,避免空话
- 如果信息不足,明确写"信息不足",不要硬猜
- 不要输出与模板无关的内容
这种约束看起来"不自由",但在端侧恰恰是优点:更好验收,也更不容易在现场丢人。
7. 可运行脚本
下面脚本默认对接本机 OpenAI 兼容接口(例如 Ollama)。若你在 Orin 上用其他推理服务,只需改 base_url 和 model。
保存为 scripts/explain_event.py:
python
#!/usr/bin/env python3
"""读取结构化事件,生成告警解释。
依赖:
pip3 install openai
Ollama OpenAI 兼容说明:
https://github.com/ollama/ollama/blob/main/docs/openai.md
"""
from __future__ import annotations
import argparse
import json
from pathlib import Path
from openai import OpenAI
def load_text(path: Path) -> str:
return path.read_text(encoding="utf-8")
def main() -> 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.content or "").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()
bash
pip3 install openai
# 先确认本地服务可用
curl -s http://127.0.0.1:11434/api/tags
python3 scripts/explain_event.py \
--event events/sample_event.json \
--prompt prompts/explain_alarm.txt \
--model qwen2.5:7b \
--out out/explain.txt
检测程序只需要多做一步:每次告警写一个 JSON 到 events/,然后调用这个脚本。不必一上来重写整个视觉栈。
8. 和检测主链路怎么协作
一个不容易翻车的进程划分:
| 进程 | 职责 | 资源策略 |
|---|---|---|
| 检测服务 | 常驻,优先保障 | 固定功耗档,内存预留 |
| 解释服务 | 按事件触发,或小队列 | 可排队,可降级为模板回复 |
| 展示/工单 | 消费解释结果 | 失败时至少展示原始事件 |
三条工程规则:
- 检测永远比聊天重要。 解释服务挂了,报警仍要在。
- 解释失败要有降级。 例如只展示"类别 + 置信度 + 重复次数"。
- 同机部署先测资源争用。 内存打满时,先砍并发,再谈更大模型。
可先用手写事件模拟联调,再接真实检测输出。这样提示词和模板可以在 PC 或 Orin 上并行打磨。
9. 验收

图5. 延迟、可执行、断网、资源,比口才更重要。
| 验收项 | 通过标准 | 不通过时怎么办 |
|---|---|---|
| 延迟 | 告警后数秒内出解释(按你现场容忍度定) | 改小模型、改短输出、改异步队列 |
| 可执行 | 值班人员按步骤能动手,不靠空话 | 收紧模板,增加 kb_hint |
| 断网 | 不依赖公网仍能给出模板化结果 | 模型与知识卡片本地化 |
| 资源 | 检测帧率不明显被拖垮 | 降并发、错峰、解释按需拉起 |
保存 scripts/accept_check.sh:
bash
#!/usr/bin/env bash
set -euo pipefail
echo "== resource snapshot =="
free -h
if command -v nvidia-smi >/dev/null 2>&1; then
nvidia-smi
fi
if command -v nvpmodel >/dev/null 2>&1; then
nvpmodel -q || true
fi
echo
echo "== explain once =="
/usr/bin/time -f "elapsed=%e sec" python3 scripts/explain_event.py \
--event events/sample_event.json \
--out out/explain_accept.txt
echo
echo "== output preview =="
sed -n '1,40p' out/explain_accept.txt
bash
chmod +x scripts/accept_check.sh
./scripts/accept_check.sh | tee logs/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. 相关阅读与后续
后面再更新会基于具体例子来展开:
如何把现有 YOLO 告警自动写成
events/*.json
相关链接:
如果这篇帮你确定了端侧应用该怎么做,欢迎点赞、收藏,也欢迎关注后续更新。