From 48d40db24657035b154bcb36b22557b98066e84d Mon Sep 17 00:00:00 2001 From: 10654 <1065437051@qq.com> Date: Wed, 22 Jul 2026 16:16:23 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20doc2docx=20=E5=B7=A5?= =?UTF-8?q?=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../1.0.0/zlb-doc\350\275\254docx (1).tool" | Bin 0 -> 4157 bytes tools/tool_doc2docx/README.md | 100 ++++++++++++++++++ tools/tool_doc2docx/data.yaml | 5 + 3 files changed, 105 insertions(+) create mode 100644 "tools/tool_doc2docx/1.0.0/zlb-doc\350\275\254docx (1).tool" create mode 100644 tools/tool_doc2docx/README.md create mode 100644 tools/tool_doc2docx/data.yaml diff --git "a/tools/tool_doc2docx/1.0.0/zlb-doc\350\275\254docx (1).tool" "b/tools/tool_doc2docx/1.0.0/zlb-doc\350\275\254docx (1).tool" new file mode 100644 index 0000000000000000000000000000000000000000..68bc67a43ef54510aea7a8621cb44f297182420b GIT binary patch literal 4157 zcmbVP+i%;}8PB@(GN)VfR1Cu&&X@s`5Q&oLi)kaihnY>5lU#xAKLP~>66nj$&! zFt%eDu!pvD5@t(KcEyG?O_ruzhb?u1B5-V{d))i}g8`=OJmp{5_nkxP;@Md-KIn4z zeZTL1IV(rsSB@XyPxvZx9Ltw|>Y1u#UZ$Qe<4F|0JPltHw$D^sqtSa&ZZ%qtvf)wj z_N7K(TFkWlC_Jj08Uq4+`<$sq;SWpYF=J$uHVQ+!q82I*yo{@ z>ClstHIh&W(~uxB4HPFeVn|D=8M5ay&vdhyVkWm-R9&;^_`avynb)Z5QI9NfcPwX?yE0FZcpd$Z&Up8o_`xIL`kjrwoy(STU6J^bE7~DP5g9xNWjUe!vPMi8OuY>>HC)r>A~dFDs?`*@<&A(`TgofedWXrH8U~IC_HMdZx{?hSdK1z4+E& zM1oey655ZRSSGS8OFbTB-lC`=R1+VM`Y!07)~M_{KFfB~DNmC0s3qT`So|6fMV_Gf zHT-~rF<^R)#;SfYD6iO`c+BP2`t7H0*<$Q$If=Wjs*As zUNLy&#xpbF!6GhYaP>@h&o^PfxAZ5eIGXSW>3I zbg)?D?iCHyM^1K64wR%@*mgkA!>X6Zlq<2^t=&{l{PrjdJey2=0rW9LI@M$?tL~{b z6!$nerIMycjar6eh+}I|4s*54TS3dsz9}sU*~@QAxy*Psbxsvk0*u98oPNoP#2>4c z&qa##i$DHi@5}q-!qWbrFV8||@AK-+2G`fGgiaeU*tXp%{a@x&0J1|Y!!e~|$w zdNoZcpP}jQ_GY|(Q{c}`{j6huStjkZ zezjPndQfPo3v&%cHcX~ymJ{f*W*1exW!fVAMqs7Mnj-Yh8A$b>ga_05%Zy9zn>jPn zKbf4G_|@s@iOF-&#=FBl>2rNO3-iaZeRO!IXQ9_qr4DFVy^Sd?n4~8mQeR*C!2x|K z$qz#k4ixzfNhca?cK7PT_R8w+oz*0}_hT;Sx>dtNnyek%0%44t9C6?Lk80Sb&7mcr zKnmP>)V}^e1bp|4t@!q}Co5Ol*FF=2y8XNR@$c_(ks$sO^%%_g8ae0KlpkWfKqeou zpY-;=UiPd6SzTZbu89j$o=AL|ff0nBr`EGU7oLf_fUvG^a8&$G%H;$Z1Y56sx_37e zwhH^6Zm-3k{HA^T){|Q+d!MX6-M*5V)zP`(}1p4ir3P=&(lRz(+hwJRf!}Xnry@vT_buBea3UjUCsa zzW98dDiD<7GhK3$yj{ByU;QYpza+C#atfoU8`bo*Q!@ggQ^Be8WE@Brs<4sF{$FFs zkOc6d#W*CxNWu$APxti$4KFwG(QK6EH$nu8!k5w!2KP2h$|!tZ^*nVk3SSVLYZQJ9wgu`@yibP5OuvrJ*7T?z ztpxzod^H^C_UWkkU0{TZhJ7(=elL7M3w-9ZqUQJ40vf(z+U7o0!smSrc5o2#^U0~7 zo`2)?>u2CM2vId=UZT-j_+kK;Tv(q$zaZdWGcyxEN^iE|H(}|Gt{xxTXnZjK&(-zy z#ee;Kboirh_>J%wqb=7`8SdWEx$tFJ=I4A@<-54J?KVbqMJbF_#>$0?W(*cahf7Lf zlvYL*rDUkepaQBGjs;s2myZ|Zufu{@ZQeb=hp*3^pPoDmPPNnqwLpzy8r*$AC#<|E zgw0nODU>RO^2l_#TrCe(2ghU(qYRIoER9x6CGdFQ!h(As!%%f-tXfj!;gNDhsU!@+ XJJD1Wz6ed+hy5uEpSz?)K|}rzuqcaK literal 0 HcmV?d00001 diff --git a/tools/tool_doc2docx/README.md b/tools/tool_doc2docx/README.md new file mode 100644 index 0000000..3b9250a --- /dev/null +++ b/tools/tool_doc2docx/README.md @@ -0,0 +1,100 @@ +# Word 文档转 DOCX 工具 + +## 工具介绍 + +`zlb-doc转docx` 用于将 MaxKB 中引用的 Word 97-2003 文档(`.doc`)转换为 Office Open XML 文档(`.docx`),并将转换结果上传至 MaxKB 临时对象存储。工具最终返回可在 MaxKB 页面中打开或下载的文件链接。 + +该工具适用于需要将旧版 Word 文档统一转换为 `.docx` 后,再交由智能体、知识库工作流或其他业务流程继续处理的场景。 + +## 功能 + +- 接收 MaxKB 文件引用列表中的首个文档。 +- 根据文件引用地址下载源文件。 +- 将 `.doc` 文件调用转换服务转换为 `.docx` 文件。 +- `.docx` 文件无需转换,直接上传。 +- 将结果上传为有效期 120 分钟的 MaxKB 临时文件。 +- 返回带有文件名的 HTML 跳转链接,供页面展示和下载。 + +## 使用说明 + +1. 在 MaxKB 工作流或智能体编排中添加该自定义工具。 +2. 将上游文件上传节点或文件选择节点的输出映射到 `doc_list`。 +3. 为 `auth_token` 配置当前 MaxKB 环境可用的认证令牌。 +4. 执行工具后,在输出中获取 `.docx` 文件链接,并将其传给后续节点或直接展示给用户。 + +## 参数说明 + +### 输入参数 + +| 参数名 | 类型 | 必填 | 来源 | 说明 | +| --- | --- | --- | --- | --- | +| `doc_list` | `array` | 是 | `reference` | MaxKB 文件引用列表。工具仅处理列表中的第一个文件对象。 | +| `auth_token` | `string` | 是 | `custom` | 当前 MaxKB 环境的认证令牌,用于下载源文件并上传转换结果。 | + +#### `doc_list` 文件对象 + +| 字段名 | 类型 | 必填 | 说明 | +| --- | --- | --- | --- | +| `name` | `string` | 是 | 源文件名称,例如 `合同模板.doc`。支持 `.doc` 或 `.docx` 文件。 | +| `url` | `string` | 是 | MaxKB 返回的文件相对地址,例如 `./api/oss/file/xxxx`。 | + +### 输出参数 + +| 输出类型 | 说明 | +| --- | --- | +| `string` | 成功时返回 MaxKB 可识别的 HTML 渲染片段,其中包含 `.docx` 文件链接;失败时返回描述下载、转换或上传失败原因的错误字符串。 | + +成功结果示例: + +```html +合同模板.docx +``` + +## 调用方法 + +工具入口函数为 `process_documents(doc_list, auth_token)`。 + +1. 工具从 `doc_list` 取得第一个文件的 `name` 和 `url`。 +2. 使用 `auth_token` 下载源文件。 +3. 当输入为 `.doc` 时,调用 `doc-to-docx` 转换接口;输入为 `.docx` 时跳过转换。 +4. 将最终的 `.docx` 文件上传到 MaxKB 临时对象存储。 +5. 返回跳转至上传文件的 HTML 链接。 + +## 调用示例 + +### MaxKB 节点输入 + +```json +{ + "doc_list": [ + { + "name": "合同模板.doc", + "url": "./api/oss/file/temporary/contract-template.doc" + } + ], + "auth_token": "" +} +``` + +### Python 调用 + +```python +result = process_documents( + doc_list=[ + { + "name": "合同模板.doc", + "url": "./api/oss/file/temporary/contract-template.doc" + } + ], + auth_token="" +) +``` + +## 注意事项 + +- 工具仅处理 `doc_list` 中的第一个文件;批量转换应在工作流中逐个调用。 +- 源文件应为可正常下载的 `.doc` 或 `.docx` 文件,且文件引用 URL 不可为空。 +- 转换服务地址、MaxKB 基础地址和认证令牌需与实际部署环境保持一致。 +- 上传结果使用 `TEMPORARY_120_MINUTE` 临时存储策略,链接有效期为 120 分钟;需要长期保存时,应改用持久化存储策略。 +- 请勿在工具代码、README 或工作流配置中明文提交有效的认证令牌。 +- 本文档未引用图片或 GIF。后续如添加图片或 GIF,必须使用 OSS、网盘或其他公网可访问地址,避免使用本地文件路径。 diff --git a/tools/tool_doc2docx/data.yaml b/tools/tool_doc2docx/data.yaml new file mode 100644 index 0000000..52f0eb2 --- /dev/null +++ b/tools/tool_doc2docx/data.yaml @@ -0,0 +1,5 @@ +name: Word文档转DOCX工具 +tags: + - AI工具 +title: 将 DOC 文档转换为 DOCX 并返回下载链接。 +description: 用于将 MaxKB 中引用的 DOC 文档转换为 DOCX 格式,上传至临时对象存储后返回可下载链接的工具。 From c511f6f231893d0433485ce265073a39b7ee9d3a Mon Sep 17 00:00:00 2001 From: 10654 <1065437051@qq.com> Date: Wed, 22 Jul 2026 16:30:35 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20doc2docx=20=E5=B7=A5?= =?UTF-8?q?=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../1.0.0/zlb-doc\350\275\254docx.tool" | Bin "tools/tool_doc2docx/doc\343\200\201docx.png" | Bin 0 -> 4643 bytes 2 files changed, 0 insertions(+), 0 deletions(-) rename "tools/tool_doc2docx/1.0.0/zlb-doc\350\275\254docx (1).tool" => "tools/tool_doc2docx/1.0.0/zlb-doc\350\275\254docx.tool" (100%) create mode 100644 "tools/tool_doc2docx/doc\343\200\201docx.png" diff --git "a/tools/tool_doc2docx/1.0.0/zlb-doc\350\275\254docx (1).tool" "b/tools/tool_doc2docx/1.0.0/zlb-doc\350\275\254docx.tool" similarity index 100% rename from "tools/tool_doc2docx/1.0.0/zlb-doc\350\275\254docx (1).tool" rename to "tools/tool_doc2docx/1.0.0/zlb-doc\350\275\254docx.tool" diff --git "a/tools/tool_doc2docx/doc\343\200\201docx.png" "b/tools/tool_doc2docx/doc\343\200\201docx.png" new file mode 100644 index 0000000000000000000000000000000000000000..043fe5f19b8bf60de53fd00c2e41add9586f3c10 GIT binary patch literal 4643 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 P&;l~lHAB~FyT$(x8eCvL literal 0 HcmV?d00001