适用版本:ChengOS v0.1.0+ | 最后核对:2026-08-13 | 来源:
crates/cheng-nodes/src/nodes/builtin/io
这一组的作用是把非文本媒体转成模型能读的文本。按来源类型选择:文档用 io/document_to_text, 图片用 io/ocr(它的 mode 是速度与准确度的取舍,从只抽取文本层一直到启用完整引擎),音频用 io/speech_to_text。 视频需要两步 —— 先 io/video_extract_audio,再接语音转写;如果信息是画面而不是语音,则用 io/video_extract_frames。 它们都接收工件端口,所以直接把 io/file_upload 连过来即可,不要用内联内容传递。
文档转文本 — io/document_to_text
解析 PDF、Word、Excel、TXT 等文档为文本。完整文本持久化为工件,仅返回有界预览。
输入
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
artifact |
object (端口) | — | null |
文档工件引用(首选)。从 io/file_upload.document_artifact 连接。 连接端口,不是表单字段。 |
file_path |
string | — | null |
本地文件路径(旧版;与工件互斥) |
base64_content |
string | — | null |
已废弃的内联 Base64 内容;请改用工件引用. 控件:textarea |
filename |
string | — | null |
用于推断格式的文件名(使用 base64_content 时必填) |
max_chars |
integer | — | 0 |
提取字符的处理上限(0 = 无限制)。不是 LLM 预览预算。 控件:number |
preview_bytes |
integer | — | 0 |
面向 LLM 的有界 UTF-8 预览预算(默认 2 KiB)。完整文本仍持久化为工件。 控件:number |
max_source_bytes |
integer | — | 0 |
解析前读取的最大源字节数(0 = 默认 25 MiB). 控件:number |
输出
| 字段 | 类型 | 说明 |
|---|---|---|
text_artifact |
object (端口) | 持有完整提取文本的工件. 连接端口,不是表单字段。 |
preview |
string | 提取文本的有界 UTF-8 预览 |
source_artifact |
object | 来源文档工件(如有) |
char_count |
integer | 提取的字符数 |
format |
string | 检测到的文件格式(pdf / docx / xlsx / txt 等) |
truncated |
boolean | 预览是否被截断(vs 完整文本) |
warning |
string | 非致命告警(如工件持久化失败) |
text |
string | 已废弃;等于有界预览 |
OCR 文字识别 — io/ocr
使用本地 OCR 从 PDF,图片和文档中提取文本.将完整文本,边界框区域,布局和结构化结果持久化为工件,仅返回有界预览和元数据.
输入
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
artifact |
object (端口) | — | null |
图片/PDF 工件引用 (首选).从 io/file_upload.image_artifact 或 document_artifact 连接. 连接端口,不是表单字段。 |
files_json |
array<object> (端口) | — | null |
已废弃的浏览器上传载荷; 请改用工件输入. 连接端口,不是表单字段。 控件:file-upload |
file_path |
string | — | null |
已废弃的服务器本地绝对文件路径; 请改用工件输入 |
base64_content |
string | — | null |
已废弃的内联 Base64 内容; 请改用工件输入. 控件:textarea |
filename |
string | — | null |
用于格式检测的文件名 (使用 base64_content 时) |
mime_type |
string | — | null |
MIME 类型覆盖 (如未提供则从文件名自动检测) |
mode |
enum | — | auto |
处理模式: 自动,仅电子 PDF,轻量 (Tesseract),标准. 控件:select. 取值:auto (Automatically select the best engine based on input and hardware.), text_pdf_only (Only extract text from electronic PDFs; fail for scanned/image inputs.), light (Use lightweight OCR (Tesseract) even when heavier engines are available.), standard (Use the highest-quality engine available (PaddleOCR ONNX when enabled).) |
engine |
enum | — | tesseract |
图片/扫描 PDF 输入的 OCR 引擎: 默认 Tesseract, 或安装 PaddleOCR ONNX. 控件:select. 取值:tesseract (Use the Tesseract CLI engine.), paddle_onnx (Use PaddleOCR via ONNX Runtime.) |
language |
enum | — | auto |
语言提示: 自动,英语,简体中文,中英混合. 控件:select. 取值:auto (Auto-detect language.), eng (English only.), chi_sim (Simplified Chinese only.), chi_sim_eng (Simplified Chinese + English (mixed).) |
max_chars |
integer | — | 0 |
提取字符的处理上限 (0 = 无限制).这不是 LLM 预览预算. 控件:number |
preview_bytes |
integer | — | 0 |
面向 LLM 的有界 UTF-8 预览预算 (默认 2 KiB).完整文本仍持久化为工件. 控件:number |
min_confidence |
number | — | 0.0 |
最小 OCR 置信度 (0.0-1.0), 0 表示跳过置信度检查. 控件:number |
rules_json |
string | — | null |
用于从 OCR 文本提取结构化字段的可选 JSON 规则. 控件:textarea |
max_pages |
integer | — | 0 |
扫描 PDF 渲染的最大页数 (0 = 默认 5, 最大 50). 控件:number |
render_dpi |
integer | — | 0 |
将扫描 PDF 页面渲染为图片的 DPI (0 = 默认 150). 控件:number |
输出
| 字段 | 类型 | 说明 |
|---|---|---|
preview |
string | 识别文本的有界 UTF-8 预览 |
text_artifact |
object (端口) | 持有完整识别文本的工件. 连接端口,不是表单字段。 |
regions_artifact |
object (端口) | 持有带边界框文本区域 (JSON) 的工件. 连接端口,不是表单字段。 |
layout_artifact |
object (端口) | 持有按阅读顺序空间重构文本的工件. 连接端口,不是表单字段。 |
structured_artifact |
object (端口) | 结构化字段 JSON 过大无法内联时持有它的工件. 连接端口,不是表单字段。 |
structured_json |
string | 使用规则提取的小型结构化字段 (内联保留; 过大时转存到 structured_artifact) |
char_count |
integer | 提取的字符数 |
format |
string | 检测到的输入格式 (pdf/image/text 等) |
engine |
string | 使用的 OCR 引擎 (none/pdf_text/tesseract/paddle_onnx) |
confidence |
number | OCR 置信度分数 (0.0-1.0) |
status |
string | 结果状态: success/partial/failed/unsupported |
warning |
string | 关于质量,完整性或工件持久化的警告消息 |
source_artifact |
object | 来源图片/文档工件 (如有) |
text |
string | 已废弃; 等于有界预览.完整文本请使用 text_artifact. |
语音转文本 — io/speech_to_text
使用 OpenAI Whisper API 将音频文件转录为文本;完整转录持久化为文本工件,节点只返回有界预览
输入
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
llm_config |
object (端口) | ✅ | — | LLM 配置(连接 LLM 配置节点获取 API Key、端点和模型). 连接端口,不是表单字段。 控件:text |
artifact |
object (端口) | — | null |
音频工件引用(首选;连接 io/file_upload.audio_artifact 或 io/video_extract_audio.audio_artifact). 连接端口,不是表单字段。 |
artifact_uri |
string | — | null |
artifact://<id> URI(与 artifact 二选一) |
file_path |
string | — | null |
已弃用:服务器本地音频文件绝对路径 |
base64_content |
string | — | null |
已弃用:Base64 编码音频;优先使用工件引用. 控件:textarea |
filename |
string | — | null |
文件名,使用 base64_content 时必填(如 audio.mp3) |
language |
string | — | null |
音频语言(ISO-639-1,如 zh,en),留空自动检测 |
prompt |
string | — | null |
提示词(可选),帮助模型识别特定术语或语音风格. 控件:textarea |
response_format |
enum | — | text |
输出格式:text(纯文本)/ json / verbose_json / srt / vtt. 控件:select. 取值:text (仅返回纯文本转录), json (返回 JSON(含 segments、duration 等)), verbosejson (返回带时间戳的详细 JSON), srt (SubRip 字幕格式), vtt (WebVTT 字幕格式) |
temperature |
number | — | 0.0 |
采样温度 0.0~1.0,0 表示最确定性的输出 |
preview_bytes |
integer | — | 0 |
LLM 预览字节预算(默认 2 KiB);完整转录仍持久化为工件. 控件:number |
输出
| 字段 | 类型 | 说明 |
|---|---|---|
preview |
string | 有界 UTF-8 预览,完整转录见 transcript_artifact |
transcript_artifact |
object (端口) | provider 原始响应正文的工件引用(JSON 模式包含 segments/timestamps/language/duration 等元数据). 连接端口,不是表单字段。 |
detected_language |
string | 检测到的语言代码(仅 verbose_json 格式下可用) |
duration_seconds |
number | 音频时长(秒)(仅 verbose_json 格式下可用) |
char_count |
integer | 转录文本的字符数 |
response_format |
string | provider 使用的响应格式 |
source_artifact |
object | 来源音频工件引用(若适用) |
warning |
string | 非致命告警(如工件持久化失败) |
text |
string | 已废弃;等于有界预览 |
视频提取音频 — io/video_extract_audio
从视频文件提取音轨为工作区音频工件(通过 ffmpeg)。连接到语音转文本节点进行转录。系统需安装 ffmpeg。
输入
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
artifact |
object (端口) | — | null |
视频工件引用(首选)。从 io/file_upload.video_artifact 连接。 连接端口,不是表单字段。 |
artifact_uri |
string | — | null |
artifact://<id> URI |
file_path |
string | — | null |
视频文件的本地绝对路径(旧版;与工件互斥) |
output_format |
enum | — | wav |
输出音频格式:wav(推荐)/ mp3 / ogg / flac. 控件:select. 取值:wav (WAV(无损,与 Whisper 兼容性最好)), mp3 (MP3(有损压缩,体积小)), ogg (OGG Vorbis), flac (FLAC(无损压缩)) |
sample_rate |
integer | — | 16000 |
采样率(Hz),Whisper 推荐 16000. 控件:number |
channels |
integer | — | 1 |
音频声道:1=单声道(推荐),2=立体声. 控件:number |
start_seconds |
integer | — | 0 |
从第几秒开始提取(0 表示从头开始). 控件:number |
duration_seconds |
integer | — | 0 |
提取的音频时长(秒),0 表示提取到结尾. 控件:number |
输出
| 字段 | 类型 | 说明 |
|---|---|---|
audio_artifact |
object (端口) | 提取音频的工件引用,可直接连接 io/speech_to_text.artifact. 连接端口,不是表单字段。 |
file_size |
integer | 提取音频字节数 |
format |
string | 输出音频格式(wav / mp3 / ogg / flac) |
ffmpeg_output |
string | ffmpeg 标准错误(带 8 KiB 上限),用于调试 |
ffmpeg_output_truncated |
boolean | ffmpeg stderr 是否被截断以适配诊断预算 |
source_artifact |
object | 来源视频工件引用(若适用) |
视频提取帧 — io/video_extract_frames
按时间间隔从视频中提取关键帧。每帧持久化为 JPEG 工件;节点输出保持紧凑(仅元数据 + 工件引用)。下游多模态消费者在配置预算内按需物化字节。
输入
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
artifact |
object (端口) | — | null |
视频工件引用(首选)。从 io/file_upload.video_artifact 连接。 连接端口,不是表单字段。 |
artifact_uri |
string | — | null |
artifact://<id> URI |
file_path |
string | — | null |
视频文件的本地绝对路径(旧版;与工件互斥) |
interval_seconds |
integer | — | 5 |
每隔 N 秒提取一帧,默认 5. 控件:number |
max_frames |
integer | — | 20 |
最大提取帧数,默认 20. 控件:number |
width |
integer | — | 768 |
输出图片宽度(像素),0 保持原始宽度. 控件:number |
height |
integer | — | 0 |
输出图片高度(像素),0 按比例缩放. 控件:number |
jpeg_quality |
integer | — | 85 |
JPEG 压缩质量 1-95,默认 85. 控件:number |
start_seconds |
integer | — | 0 |
从第几秒开始提取(0 表示从头开始). 控件:number |
end_seconds |
integer | — | 0 |
到第几秒停止提取(0 表示到视频末尾). 控件:number |
输出
| 字段 | 类型 | 说明 |
|---|---|---|
frames |
array<object> | 提取的帧列表,每帧包含时间戳和 JPEG 工件引用(无内联字节) |
frames_manifest |
object (端口) | 所有提取帧清单的工件引用(JSON). 连接端口,不是表单字段。 |
first_frame_artifact |
object (端口) | 第一帧工件引用(便捷端口,供下游快速接入). 连接端口,不是表单字段。 |
frame_count |
integer | 实际提取的帧数 |
video_duration_seconds |
number | 视频总时长(秒) |
source_artifact |
object | 来源视频工件引用(若适用) |
status |
string | 结果状态:success(全部成功)/ partial(部分成功)/ failed(全部失败) |
warning |
string | 非致命告警(带总预算) |
warning_truncated |
boolean | 警告是否被截断以适配诊断预算 |
下一步
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END

暂无评论内容