@@ -39,6 +39,9 @@ eval "$(./ov-cli venv)"
3939
4040# 8. MCP 协议
4141./ov-cli mcp --model ./Qwen3/2B-ov
42+
43+ # 9. 管道模式(批量/外部调用)
44+ printf ' 你好\n再见' | ./ov-cli chat --model ./model-ov --mode pipe
4245```
4346
4447## 如何升级
@@ -151,6 +154,9 @@ eval "$(./ov-cli venv --venv ./my-venv)"
151154./ov-cli chat --model ./model-ov --mode once --prompt " Hello"
152155./ov-cli chat --model ./model-ov --mode once --file ./doc.pdf --prompt " 总结" --output ./outputs/
153156./ov-cli chat --model ./model-ov --mode once --prompt " Hello" --json # JSON 格式输出
157+
158+ # 管道模式(模型常驻,批量处理)
159+ printf ' 问题1\n问题2\n' | ./ov-cli chat --model ./model-ov --mode pipe
154160```
155161
156162** 终端内命令** (仅 chat 模式):
299305./ov-cli tts --model ./0.6B-CV-ov --prompt " 你好" --speaker Vivian --instruct " 温柔地" -o voice.wav
300306```
301307
308+ # 管道模式(模型常驻,批量合成)
309+ printf '你好\n再见\n' | ./ov-cli tts --model ./0.6B-CV-ov --mode pipe --speaker Vivian
310+
302311** Base(声音克隆)** (需参考音频):
303312
304313``` bash
319328# 单次(输出完自动退出)
320329./ov-cli asr --model ./Qwen3-ASR-0.6B-ov --mode once --file speech.mp3
321330./ov-cli asr --model ./Qwen3-ASR-0.6B-ov --mode once --file speech.mp3 --json
331+
332+ # 管道模式(模型常驻,批量转录)
333+ printf ' /path/to/a.wav\n/path/to/b.wav\n' | ./ov-cli asr --model ./Qwen3-ASR-0.6B-ov --mode pipe
322334```
323335
324336** Whisper** :
@@ -342,6 +354,9 @@ TTS(文字转语音)生成的音频语速均匀、缺少自然停顿,转
342354# 单次(输出完自动退出)
343355./ov-cli image --model ./FLUX/ov-int4 --mode once --prompt " cat" -o cat.png
344356./ov-cli image --model ./FLUX/ov-int4 --mode once --prompt " cat" --json # JSON 格式输出
357+
358+ # 管道模式(模型常驻,批量生图)
359+ printf ' a cat\na dog\n' | ./ov-cli image --model ./FLUX/ov-int4 --mode pipe
345360```
346361
347362** 终端内命令** (仅文生图交互模式):
@@ -359,9 +374,11 @@ TTS(文字转语音)生成的音频语速均匀、缺少自然停顿,转
359374
360375## 外部集成
361376
362- ov-cli 支持通过 ` --mode once ` 和 ` --json ` 被其他项目调用,日志走 stderr,stdout 只输出纯净结果。
377+ ov-cli 支持两种外部调用方式:` --mode once ` (单次)和 ` --mode pipe ` (管道)。
378+
379+ ### 方式一:` --mode once ` — 单次推理
363380
364- ### 支持外部调用的命令
381+ 每次调用独立加载模型,适合低频使用。日志走 stderr,stdout 只输出纯净结果。
365382
366383| 命令 | once 模式 | ` --json ` | stdout 输出 |
367384| :----| :---------:| :--------:| :------------|
@@ -370,7 +387,30 @@ ov-cli 支持通过 `--mode once` 和 `--json` 被其他项目调用,日志走
370387| ` image ` | ` --mode once --prompt "cat" [-o output.png] ` | ✅ | 图片路径 / ` {"path":"...","time":n} ` |
371388| ` tts ` | ` --prompt TEXT ` | ✅ | 音频路径 / ` {"path":"...","time":n,"duration":n} ` |
372389
373- ### 推荐方式
390+ ### 方式二:` --mode pipe ` — 管道模式(推荐)
391+
392+ 模型常驻内存,stdin 输入、stdout 输出 JSON,适合高频批量调用。
393+
394+ ``` bash
395+ # ASR 批量转录
396+ printf ' /path/to/a.wav\n/path/to/b.wav\n' | ov-cli asr --model ./model --mode pipe
397+ # → {"text":"...","time":0.5}
398+ # → {"text":"...","time":0.4}
399+
400+ # TTS 批量合成
401+ printf ' 你好\n再见\n' | ov-cli tts --model ./model --mode pipe --speaker Vivian
402+ # → {"path":"outputs/pipe_1.wav","text":"你好","time":2.1}
403+
404+ # Chat 批量问答
405+ printf ' 1+1=?\n什么是Python?\n' | ov-cli chat --model ./model --mode pipe
406+ # → {"text":"1+1=2","time":3.2}
407+
408+ # Image 批量生图
409+ printf ' a cat\na dog\n' | ov-cli image --model ./FLUX-ov --mode pipe
410+ # → {"path":"outputs/pipe_cat.png","time":10.2}
411+ ```
412+
413+ ### Python 调用示例
374414
375415``` bash
376416# Shell 脚本:捕获纯文本结果
@@ -381,7 +421,7 @@ json=$(/path/to/ov-cli asr -m ./model --mode once -f speech.mp3 --json 2>/dev/nu
381421```
382422
383423``` python
384- # Python 子进程调用
424+ # Python 子进程调用(--mode once 单次)
385425import subprocess, json
386426
387427result = subprocess.run([
@@ -395,6 +435,18 @@ result = subprocess.run([
395435if result.returncode == 0 :
396436 data = json.loads(result.stdout)
397437 print (data[" text" ]) # 转录结果
438+
439+ # Python 子进程调用(--mode pipe 常驻)
440+ proc = subprocess.Popen(
441+ [" /path/to/ov-cli" , " asr" , " --model" , " ./model" , " --mode" , " pipe" ],
442+ stdin = subprocess.PIPE , stdout = subprocess.PIPE , text = True
443+ )
444+ for audio in [" a.wav" , " b.wav" ]:
445+ proc.stdin.write(audio + " \n " )
446+ proc.stdin.flush()
447+ data = json.loads(proc.stdout.readline())
448+ print (data[" text" ]) # 每次 ~0.5s
449+ proc.stdin.close()
398450```
399451
400452> 💡 ` 2>/dev/null ` 可省略日志,只保留 stdout 的结果。不加则终端同时显示日志和结果。
0 commit comments