十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

FastGPT 辅助生成(Auxiliary Generation)机制解析:不经过 Workflow Dispatcher 的复用式 AI 生成架构

FastGPT 辅助生成(Auxiliary Generation)机制解析:不经过 Workflow Dispatcher 的复用式 AI 生成架构 FastGPT 辅助生成Auxiliary Generation机制解析不经过 Workflow Dispatcher 的复用式 AI 生成架构【免费下载链接】FastGPTFastGPT is a knowledge-based platform built on the LLMs, offers a comprehensive suite of out-of-the-box capabilities such as data processing, RAG retrieval, and visual AI workflow orchestration, letting you easily develop and deploy complex question-answering systems without the need for extensive setup or configuration.项目地址: https://gitcode.com/GitHub_Trending/fa/FastGPT辅助生成Auxiliary Generation是 FastGPT 面向不经过 Workflow Dispatcher、但需要复用 Chat 身份、SSE、计费、停止与 Agent Loop 语义的一类 AI 生成场景提供的统一运行框架目前的核心调用方是 Chat Agent Helper。阅读本文后你将掌握该模块的模块划分、完整执行生命周期、Agent Loop 接入方式、SSE 断流续传协议、停止标记语义与用量计费规则并能基于runAuxiliaryGeneration快速扩展新的辅助生成场景。定位与适用范围辅助生成的设计初衷是解决一类复用基础设施、但绕开 Workflow 运行时的场景。它复用的能力包括Chat 身份继承团队、成员、用户上下文以及鉴权后的用户信息SSE 输出统一的流式协议、心跳与断流续传resume mirror计费团队 AI points 余额检查与 chat usage 记录创建停止识别/v2/chat/stop写入的统一停止标记Agent Loop无业务工具的生成可以接入统一的 Agent 模型循环协议。同时该模块有清晰的边界它不是第二套 Workflow runtime也不负责以下事项源码注释与设计文档均明确声明Workflow 节点调度、变量或 nodeResponse——辅助生成不产生 nodeResponse 语义默认注入业务工具、Sandbox 或 Agent Skill——这些能力必须由业务调用方显式注入资源鉴权与请求参数校验——API 路由必须在进入辅助生成之前完成这些工作runAuxiliaryGeneration接收的已是鉴权后的teamId/tmbId/userId持久化业务响应——processor 返回标准响应后由调用方决定如何保存。模块结构模块位于packages/service/core/ai/auxiliaryGeneration/文件与职责对应如下文件职责service.ts编排一次辅助生成的完整生命周期SSE、用量、停止、processor、结束事件agentLoop.ts将无业务工具的生成接入统一 Agent Loopstream.ts创建 SSE、心跳、错误、结束事件和断流续传 mirrorusage.ts余额检查、usage 记录创建和用量推送stop.ts读取并清理统一停止标记type.tsprocessor、用户上下文和运行结果协议从源码结构看service.ts是唯一公共编排入口stream/usage/stop三个文件分别封装基础设施agentLoop.ts依赖packages/service/core/ai/llm/agentLoop/interface的runAgentLoop。执行流程一次辅助生成的完整生命周期设计文档给出了清晰的执行流程图结合 service.ts 的源码实现实际运行顺序如下API route |-- parse input and auth source |-- load histories / files -- runAuxiliaryGeneration |-- create SSE and resume mirror |-- check balance and create usage record |-- clear stale stop flag |-- call business processor | -- optional runAuxiliaryGenerationAgentLoop |-- emit done -- clear timer and stop flag源码层面的关键步骤依次为创建 SSE 上下文createAuxiliaryGenerationStream({ req, res, teamId, sourceType, sourceId, chatId })完成 SSE 初始化与断流续传 mirror 的装配并立即调用可选的onStreamContextReady回调——路由层可借此在 processor 执行前后的异常路径上写 error 并 flush resume创建用量上下文createAuxiliaryGenerationUsage(...)先执行checkTeamAIPoints余额校验再创建一次 chat usage record清理陈旧停止标记clearAuxiliaryGenerationStop(...)避免上一次运行的停止状态污染本次生成监听连接关闭res.once(close, ...)将stopping置为 true实现连接断开即本地停止定时刷新停止状态以 100ms 间隔轮询shouldAuxiliaryGenerationStop(...)将 Redis 中的停止标记同步到本地stopping调用业务 processor传入 query、files、data、histories、streamWriter、停止检查、usage sink 与鉴权用户信息processor 内部可选用runAuxiliaryGenerationAgentLoop结束事件processor 返回后调用streamContext.writeDone()依次发送 finish delta 与[DONE]finally 清理无论成功失败都会清除轮询定时器并再次清理停止标记。runAuxiliaryGeneration只编排公共生命周期业务差异完全通过processor注入。返回结果除了 processor 的响应外还附带durationSeconds精确到两位小数的耗时与streamContext供调用方继续操作流或用于日志。Processor 协议业务差异的注入点type.ts定义了完整的 processor 协议见 type.ts输入参数AuxiliaryGenerationProcessorParamsT字段类型说明querystring用户本轮问题userAnswerstring?恢复暂停时的用户回答filesAuxiliaryGenerationChatFileType[]本轮关联文件dataT业务自定义数据泛型注入historiesChatItemDBSchemaType[]历史消息streamWriterAuxiliaryGenerationStreamWriter?写 SSE 事件requestOriginstring?请求来源 OriginmaxFilesnumber?文件数量上限customPdfParseboolean?是否自定义 PDF 解析checkIsStopping() boolean同步停止检查usageSink(usages: ChatNodeUsageType[]) void用量推送userAuxiliaryGenerationUser已鉴权用户信息teamId/tmbId/userId/isRoot/lang返回协议AuxiliaryGenerationProcessorResponseaiResponse: AIChatItemValueItemType[]——标准 AI 回复内容memories?: Recordstring, any——需要持久化的 AI ChatItem 附加状态如 providerStateusage: { modelId; inputTokens; outputTokens }——本次生成的基础用量摘要。值得强调的是鉴权与参数校验必须在 API 路由层完成processor 收到的user已经是可信上下文这保证了资源鉴权前置、业务执行后置的边界。Agent Loop 接入无业务工具的生成语义runAuxiliaryGenerationAgentLoop见 agentLoop.ts是辅助生成复用 Agent Loop 的标准入口其约束如下不启用plan、Sandbox、文件读取或知识库系统工具systemTools仅开启asktoolCatalog.runtimeTools默认空数组启用标准ask_user系统工具暂停与恢复完全遵循 Agent Loop 的providerState userAnswer协议业务工具显式注入调用方通过runtimeTools与executeTool显式提供若未配置 executor默认实现会抛出Auxiliary generation runtime tool executor is not configured从源码可见该约束是强制性的reasoning delta 转换emitEvent将reasoning_delta事件转为辅助生成的 answer SSEreasoningContent字段将answer_delta转为text字段usage 直通usagePush直接绑定调用方的usageSink结果保留原语义返回结果保持 Agent Loop 标准的status、pause和providerState业务层只负责转换展示和持久化不自行判断暂停条件。此外该入口会额外计算answerText与reasoningText从无 tool_calls 的 assistant 消息中聚合方便业务直接落库展示。设计文档特别强调如果新场景需要业务工具必须通过 runtime tool catalog 和 executor 显式注入不能依赖 processor 读取 Workflow runtime——这是该模块与 Workflow 运行时解耦的根本保证。Chat Agent Helper 连续调用生成配置表单的完整链路当前唯一核心调用方是 Chat Agent Helper其连续调用流程可概括为模型调用 ask_user - Agent Loop 返回 paused ask providerState - Chat Agent Helper 保存 interactive、ask tool call 和 providerState memory - 用户提交与 Workflow Agent 相同的 { answers: string[] } 原始结构 - 调用方传回 providerState userAnswer - Agent Loop 在原 ask tool call 后追加 tool response 并继续 - 模型调用 generate_config - executor 校验并生成表单配置返回 Generate config success - 模型自行结束调用方清理 providerState memory几个关键实现细节历史读取使用reserveTool: trueChat Agent Helper 读取历史时除 interactive 外还必须持久化对应的ask_user和generate_configtool call/response否则历史转换无法恢复工具语义generate_config是普通 runtime tool不设置stop工具参数直接使用配置生成业务结构不包含旧 JSON 路由时代的phase和reasoning字段executor 使用 Zod 校验先校验参数再确认全部资源 ID 都在当前成员的可访问资源集合内最后转换为最终表单结构参数错误作为 tool error 返回给模型修正不再额外调用模型修复 JSON——这是对旧模型修复 JSON链路的一次明显简化。Provider State 持久化暂停与恢复的可靠性辅助生成在暂停/恢复态下的持久化规则非常明确暂停态把 Agent Loop 返回的完整providerState写入当前 AI ChatItem 的memories恢复态只从最后一条 AI history 读取该 memory并把原始回答作为userAnswer传入清理规则done、error和aborted三种终态都会清除该 memory避免后续普通消息恢复出陈旧暂停点不破坏通用保存语义FastGPT 通用saveChat已支持 memories辅助生成只扩展 processor 返回协议和 Chat Agent Helper 的保存调用不修改通用保存逻辑。这一设计保证了暂停点只活在当前一轮对话上下文中避免了跨会话的状态污染。SSE 与断流续传SSE 层见 stream.ts只处理通用协议业务事件answer/interactive/config 等由调用方显式写入。要点如下Stream key使用teamId/sourceType/sourceId/chatId组合与标准 Chat source 隔离规则一致心跳发送空的 answer deltacreateChatCompletionDeltaResponse({ text: })事件名为answer错误事件通过AuxiliaryGenerationEventEnum.error返回复用getSseErrorResponse生成响应并遵循统一的 cookie 清理规则shouldClearCookie时调用clearCookie(res)正常结束依次发送 finishReason 为stop的 answer delta 与[DONE]断流续传通过getStreamResumeMirror装配 resume mirror路由层可通过onStreamContextReady获取 stream context在 processor 前后的异常路径写 error 并调用flushResume()。事件枚举定义在packages/global/core/ai/auxiliaryGeneration/constants.ts包含answer、error、status、interactive、chatAgentConfig五种标准事件业务事件由 processor 自行写入。停止语义与 Workflow 停止信号的统一辅助生成读取/v2/chat/stop使用的 Redis key见 stop.tsagent_runtime_stopping:sourceType:sourceId:chatId底层实现通过fastgpt/dal/redis/caches的WorkflowStopSignalCache读写该 key。需要说明的是该 key 目前由 workflow status 模块写入辅助生成不依赖 Workflow 执行器但必须识别同一个停止信号以保证 ChatBox 的停止按钮对 Chat Agent Helper 同样生效。停止语义的执行特点运行期间每 100ms 刷新一次停止状态service.ts中的setInterval连接关闭也会触发本地停止res.once(close)置stopping true开始和结束时都清理旧标记避免一次停止污染下一次生成停止后 processor 内通过checkIsStopping()同步感知及时中断模型循环。用量与计费用量流程见 usage.ts遵循单次记录、统一推送原则开始生成前检查团队 AI pointscheckTeamAIPoints(teamId)前置校验余额根据sourceType将 sourceId 记为 appId 或 skillId当sourceType为app或chatAgentHelper时记为appId sourceId为skillEdit时记为skillId sourceId创建一次 chat usage recordcreateChatUsageRecord({ appName, appId, skillId, teamId, tmbId, source })processor 通过 usage sink 推入用量pushUsage(usages)内部调用pushChatItemUsage将各模型、工具或压缩用量写入同一 usageId。设计文档特别强调辅助生成不重新计算 Agent Loop 积分也不重复调用用量写入。Agent Loop 内部provider、工具、压缩模块只通过runtime.usagePush上报真实 usage辅助生成只是将这一回调透传给 usage sink避免了双重计费。扩展规则新增辅助生成场景的指南设计文档为后续扩展给出了四条明确约束优先复用runAuxiliaryGeneration只新增 processor公共生命周期SSE、用量、停止、结束事件已被service.ts固化新场景只需提供自己的业务 processor业务事件由 processor 显式写入不扩展通用 stream 层去理解业务配置保持stream.ts的业务无关性公共生命周期需求放在本模块单场景数据组装保留在调用方业务目录职责归属清晰避免模块膨胀source 标识统一使用sourceType/sourceId不能恢复 App-only 的appId入口保证未来 skill 等非 App source 的扩展能力。源码导航与验证若要深入阅读或验证可沿以下路径展开核心编排service.ts、type.tsAgent Loop 接入agentLoop.ts基础设施stream.ts、usage.ts、stop.ts事件协议constants.ts底层 Agent Loop 协议Agent Loop 设计 与实现packages/service/core/ai/llm/agentLoop测试验证agentLoop.test.ts 覆盖了辅助生成 Agent Loop 的契约行为总体上辅助生成模块是 FastGPT基础设施复用思路的典型实践把 Chat 场景的公共运行要素抽成可编排的公共生命周期同时通过 processor 注入与显式工具注入两条通道保留业务扩展自由度。理解这一模块也就理解了 Chat Agent Helper 如何在不进入 Workflow 运行时的情况下依然获得与主链路一致的流式输出、计费与停止体验。【免费下载链接】FastGPTFastGPT is a knowledge-based platform built on the LLMs, offers a comprehensive suite of out-of-the-box capabilities such as data processing, RAG retrieval, and visual AI workflow orchestration, letting you easily develop and deploy complex question-answering systems without the need for extensive setup or configuration.项目地址: https://gitcode.com/GitHub_Trending/fa/FastGPT创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表