现状
使用一份约 9.81 MB、26 页的 PDF 测试知识库文档流程时,上传、处理、删除和图谱生成链路先后出现以下问题:
-
文档上传被 Nginx 拒绝
Nginx 请求体大小限制未与后端保持一致,请求未到达 Go 服务就返回 413。
client intended to send too large body: 10283530 bytes
Request failed with status code 413
-
文档处理无法连接 Python gRPC
Python gRPC 仅监听 127.0.0.1:50051,Docker 中的 Go 服务无法跨容器访问。
rpc error: code = Unavailable
dial tcp 192.168.147.7:50051: connect: connection refused
-
Python 文档解析运行时依赖不完整
Python 镜像未完整安装 PDF、Word、Excel 等文档解析依赖;PDF 解析还存在文件提前关闭导致延迟读取失败的问题。
-
Embedding 请求超过供应商批次限制
文档生成 38 个分块后,系统一次性提交全部分块。供应商单次最多接受 10 条,导致请求返回 400。
-
Milvus collection 缺失导致删除失败
删除文档时直接操作统一的 link collection;collection 尚未创建时,删除接口重试后仍返回 500。
Failed to get collection id:
collection not found[database=default][collection=link]
Request failed with status code 500
-
图谱生成返回不完整 JSON
图谱重建将 38 个分块、约 2.68 万字符拼接到一次 LLM 请求中,但输出上限只有 4096 tokens。模型响应 JSON 不完整,连续两次生成失败。
Starting graph extraction for 38 chunks
parse graph extraction failed:
failed to parse JSON: unexpected end of JSON input
total=1 processed=0 skipped=0 failed=1 nodes=0 relations=0
此时接口仍返回 HTTP 200,只在响应数据中记录失败文档数,容易被误判为请求成功。
-
页面缺少具体失败原因
页面原本只显示“失败”,没有展示解析、Embedding、Milvus 或图谱生成的实际错误,必须查看容器日志才能定位。
另外,日志中的 GORM record not found 是文件哈希去重预检未命中,属于正常结果,不是上传失败的根因。
期望
- Nginx 上传上限统一设置为 10 MiB,前端同步校验文件大小并给出明确提示。
- Python gRPC 能被 Docker 网络中的 Go 服务正常访问。
- 生产镜像完整安装文档解析依赖,并正确管理解析文件生命周期。
- Embedding 按供应商限制分批调用,例如 38 个分块拆分为
10/10/10/8,并保持结果顺序。
- Milvus collection 不存在时自动初始化;删除不存在的投影应幂等成功。
- 图谱生成按单个分块或小批次调用 LLM,再合并、去重结果。
- 图谱链路检查
FinishReason,记录 token 使用情况;JSON 截断时缩小批次重试。
- 新图谱生成成功后再替换旧图谱,避免重建失败后知识库图谱为空。
- API 和页面能够返回并展示真实失败原因。
- 图谱任务存在业务失败时,不应仅依赖 HTTP 200 表达结果。
备注
本地已经完成上传、解析、Embedding、Milvus 初始化及幂等删除等修复,并使用同一份 PDF 验证:
- 文档解析成功:26 页
- 文档处理状态:
completed
- 分块数:38
- Milvus
link collection:LoadStateLoaded
- 原失败文档删除接口:HTTP 200
所有问题我本地均完成复现,询问是否需要修复上述问题
现状
使用一份约 9.81 MB、26 页的 PDF 测试知识库文档流程时,上传、处理、删除和图谱生成链路先后出现以下问题:
文档上传被 Nginx 拒绝
Nginx 请求体大小限制未与后端保持一致,请求未到达 Go 服务就返回 413。
文档处理无法连接 Python gRPC
Python gRPC 仅监听
127.0.0.1:50051,Docker 中的 Go 服务无法跨容器访问。Python 文档解析运行时依赖不完整
Python 镜像未完整安装 PDF、Word、Excel 等文档解析依赖;PDF 解析还存在文件提前关闭导致延迟读取失败的问题。
Embedding 请求超过供应商批次限制
文档生成 38 个分块后,系统一次性提交全部分块。供应商单次最多接受 10 条,导致请求返回 400。
Milvus collection 缺失导致删除失败
删除文档时直接操作统一的
linkcollection;collection 尚未创建时,删除接口重试后仍返回 500。图谱生成返回不完整 JSON
图谱重建将 38 个分块、约 2.68 万字符拼接到一次 LLM 请求中,但输出上限只有 4096 tokens。模型响应 JSON 不完整,连续两次生成失败。
此时接口仍返回 HTTP 200,只在响应数据中记录失败文档数,容易被误判为请求成功。
页面缺少具体失败原因
页面原本只显示“失败”,没有展示解析、Embedding、Milvus 或图谱生成的实际错误,必须查看容器日志才能定位。
另外,日志中的 GORM
record not found是文件哈希去重预检未命中,属于正常结果,不是上传失败的根因。期望
10/10/10/8,并保持结果顺序。FinishReason,记录 token 使用情况;JSON 截断时缩小批次重试。备注
本地已经完成上传、解析、Embedding、Milvus 初始化及幂等删除等修复,并使用同一份 PDF 验证:
completedlinkcollection:LoadStateLoaded所有问题我本地均完成复现,询问是否需要修复上述问题