现象
在FastGPT的Embedding模型配置的“额外Body参数”中设置{"encoding_format": "base64"}后,执行向量化操作(如重建知识库、上传文档),请求侧可成功向服务端发送请求,但FastGPT后端在处理embedding响应阶段会抛出TypeError: a.reduce is not a function的运行时错误,导致任务崩溃。
可能原因
查看packages/service/core/ai/embedding/index.ts源码可知,当前FastGPT的embedding响应处理逻辑硬编码将返回结果视为number[]浮点数数组,会执行reduce方法进行归一化等操作。当用户配置encoding_format: "base64"时,向量模型返回的embedding字段为Base64字符串而非浮点数数组,此时执行reduce方法会触发TypeError: a.reduce is not a function异常。
排查步骤
- 检查Embedding模型配置的“额外Body参数”是否设置为
{"encoding_format": "base64"}; - 执行向量化操作(如重建知识库、上传文档),查看FastGPT后端日志是否出现
TypeError: a.reduce is not a function报错; - 确认向量模型返回的embedding数据格式是否为Base64字符串(需按实际环境确认)。
解决与验证
目前该问题的修复需分两步:
- 请求侧已通过PR #6751实现支持覆盖
encoding_format参数; - 响应侧需增加数据格式嗅探逻辑:当检测到返回的
embedding为Base64编码时,先将其解码为number[]浮点数向量,再进入后续的normalization、truncate、vector store逻辑。
验证方式:重新配置Embedding模型的“额外Body参数”为{"encoding_format": "base64"},执行向量化操作,确认后端无TypeError报错,向量生成与存储流程正常。
来源:https://github.com/labring/FastGPT/issues/6769