当前位置: 首页 > news >正文

FastGPT源码解析 工作流、知识库、大模型、Agent等核心代码文件梳理

大模型对接核心代码文件对应

梳理了FastGPT核心代码和对应文件关系,包括LLM、知识库、大模型、Agent等核模块的代码和对应文件路径

1. 模型管理架构

全局模型映射
// 文件: packages/global/core/ai/model.d.ts
declare global {var llmModelMap: Map<string, LLMModelItemType>;var embeddingModelMap: Map<string, EmbeddingModelItemType>;// ...
}
统一模型获取接口
// 文件: packages/service/core/ai/model.ts
export const getLLMModel = (model?: string) => {if (!model) return getDefaultLLMModel();return global.llmModelMap.get(model) || getDefaultLLMModel();
};

2. LLM 模型对接

模型配置结构
// 文件: packages/global/core/ai/model.d.ts
export type LLMModelItemType = {provider: ModelProviderIdType;model: string;maxContext: number;// ...
};
统一 API 客户端
// 文件: packages/service/core/ai/config.ts
export const getAIApi = (props?: { userKey?: OpenaiAccountType; timeout?: number 
}) => {// ...return new OpenAI({baseURL: baseUrl,apiKey,// ...});
};
聊天完成接口
// 文件: packages/service/core/ai/config.ts
export const createChatCompletion = async ({body, userKey, timeout, options
}) => {const modelConstantsData = getLLMModel(body.model);// ...
};

3. Embedding 模型对接

Embedding 配置
// 文件: packages/global/core/ai/model.d.ts
export type EmbeddingModelItemType = {provider: ModelProviderIdType;model: string;defaultToken: number;maxToken: number;// ...
};
向量化实现
// 文件: packages/service/core/ai/embedding/index.ts
export async function getVectorsByText({ model, input, type 
}: GetVectorProps) {const ai = getAIApi();// ...
}function unityDimensional(vector: number[]) {if (vector.length > 1536) {return vector.slice(0, 1536);}// ...
}function normalization(vector: number[]) {if (vector.some(item => item > 1)) {const norm = Math.sqrt(vector.reduce((sum, val) => sum + val * val, 0));return vector.map(val => val / norm);}return vector;
}

4. ReRank 模型对接

ReRank 实现
// 文件: packages/service/core/ai/rerank/index.ts
export function reRankRecall({model = getDefaultRerankModel(),query,documents
}: {model?: ReRankModelItemType;query: string;documents: { id: string; text: string }[];
}): Promise<ReRankCallResult> {// ...
}

5. 模型配置管理

配置文件
// 文件: projects/app/data/model.json
{"llmModels": [{"provider": "OpenAI","model": "gpt-4o-mini","name": "gpt-4o-mini",// ...}],"vectorModels": [{"provider": "OpenAI","model": "text-embedding-3-small",// ...}]
}
动态模型管理 API
// 文件: projects/app/src/pages/api/core/ai/model/update.ts
// 模型配置更新接口// 文件: projects/app/src/pages/api/core/ai/model/test.ts  
// 模型测试接口// 文件: projects/app/src/pages/api/core/ai/model/list.ts
// 模型列表接口

工作流后端实现代码文件对应

1. 调度引擎核心

// 文件: packages/service/core/workflow/dispatch/index.ts
export async function dispatchWorkFlow(data: Props): Promise<DispatchFlowResponse> {// 工作流调度核心逻辑
}const callbackMap: Record<FlowNodeTypeEnum, Function> = {[FlowNodeTypeEnum.chatNode]: dispatchChatCompletion,[FlowNodeTypeEnum.datasetSearchNode]: dispatchDatasetSearch,// ...
};

2. 节点执行机制

// 文件: packages/service/core/workflow/dispatch/index.ts
async function checkNodeCanRun(node: RuntimeNodeItemType): Promise<RuntimeNodeItemType[]> {// 节点运行状态检查
}function getNodeRunParams(node: RuntimeNodeItemType) {// 节点参数注入
}

3. 流式响应处理

// 文件: packages/service/core/workflow/dispatch/utils.ts
export const getWorkflowResponseWrite = ({res, detail, streamResponse, id, showNodeStatus
}) => {return ({ write, event, data, stream }) => {// SSE 流式响应处理};
};

4. 具体节点实现

// 文件: packages/service/core/workflow/dispatch/chat/oneapi.ts
export const dispatchChatCompletion = async (props: ChatProps): Promise<ChatResponse> {// AI 对话节点实现
}// 文件: packages/service/core/workflow/dispatch/dataset/search.ts
export const dispatchDatasetSearch = async (props) => {// 知识库搜索节点实现
}// 文件: packages/service/core/workflow/dispatch/tools/http468.ts
export const dispatchHttp468Request = async (props) => {// HTTP 请求节点实现
}

知识库后端实现代码文件对应

1. 数据模型设计

// 文件: packages/service/core/dataset/schema.ts
const DatasetSchema = new Schema({parentId: { type: Schema.Types.ObjectId },teamId: { type: Schema.Types.ObjectId, required: true },vectorModel: { type: String, default: 'text-embedding-3-small' },// ...
});// 文件: packages/service/core/dataset/data/schema.ts
const DatasetDataSchema = new Schema({teamId: { type: ObjectId, required: true },datasetId: { type: ObjectId, required: true },q: { type: String, required: true },a: { type: String, default: '' },indexes: [{ dataId: String, text: String }],// ...
});

2. 数据处理流程

// 文件: packages/service/core/dataset/training/controller.ts
export async function pushDataListToTrainingQueue({teamId, tmbId, datasetId, collectionId,agentModel, vectorModel, data, trainingMode
}) {// 数据导入管道实现
}

3. 检索系统实现

// 文件: packages/service/core/dataset/search/controller.ts
export async function searchDatasetData(props: SearchDatasetDataProps
): Promise<SearchDatasetDataResponse> {// 多模式检索引擎实现
}const embeddingRecall = async ({ query, limit }) => {// 向量检索实现
};const fullTextRecall = async ({ query, limit }) => {// 全文检索实现
};export const datasetDataReRank = async ({ data, query }) => {// 重排序实现
};

4. 数据源集成

// 文件: projects/app/src/pages/api/core/dataset/collection/create/localFile.ts
// 本地文件导入// 文件: projects/app/src/pages/api/core/dataset/collection/create/link.ts  
// 网页链接导入// 文件: projects/app/src/pages/api/core/dataset/collection/create/apiCollection.ts
// API 数据源导入

聊天系统代码文件对应

1. 聊天完成 API

// 文件: projects/app/src/pages/api/v1/chat/completions.ts
async function handler(req: NextApiRequest, res: NextApiResponse) {// OpenAI 兼容的聊天接口实现const { flowResponses, assistantResponses } = await dispatchWorkFlow({// 工作流调度调用});
}

2. 前端聊天组件

// 文件: projects/app/src/components/core/chat/ChatContainer/ChatBox/index.tsx
const ChatBox = ({ onStartChat, isReady, active }) => {const sendPrompt: SendPromptFnType = useMemoizedFn(({text, files, history, autoTTSResponse}) => {// 消息发送核心逻辑});
};

3. LLM 调用核心

// 文件: packages/service/core/workflow/dispatch/chat/oneapi.ts
export const dispatchChatCompletion = async (props: ChatProps): Promise<ChatResponse> {// 1. 模型配置获取const modelConstantsData = getLLMModel(model);// 2. 知识库引用处理const [{ datasetQuoteText }] = await Promise.all([filterDatasetQuote({ quoteQA, model: modelConstantsData })]);// 3. LLM API 调用const { response } = await createChatCompletion({body: llmCompletionsBodyFormat({ model, messages, temperature })});
};

工作流前端代码文件对应

1. ReactFlow 核心

// 文件: projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/index.tsx
const Workflow = () => {return (<ReactFlownodes={nodes}edges={edges}nodeTypes={nodeTypes}edgeTypes={edgeTypes}onNodesChange={handleNodesChange}// .../>);
};const nodeTypes: Record<FlowNodeTypeEnum, any> = {[FlowNodeTypeEnum.chatNode]: NodeSimple,[FlowNodeTypeEnum.datasetSearchNode]: NodeSimple,// ...
};

2. 节点组件

// 文件: projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeSimple.tsx
// 通用节点组件// 文件: projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeHttp/index.tsx
// HTTP 请求节点组件// 文件: projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeIfElse/index.tsx
// 条件判断节点组件

3. 工作流上下文

// 文件: projects/app/src/pageComponents/app/detail/WorkflowComponents/context/workflowInitContext.tsx
// 工作流初始化上下文// 文件: projects/app/src/pageComponents/app/detail/WorkflowComponents/context/workflowEventContext.tsx
// 工作流事件上下文

总结

以上代码片段对应的主要文件路径:

核心服务层:

  • packages/service/core/ai/ - AI 模型对接
  • packages/service/core/workflow/dispatch/ - 工作流调度
  • packages/service/core/dataset/ - 知识库管理

全局类型定义:

  • packages/global/core/ai/model.d.ts - AI 模型类型
  • packages/global/core/workflow/ - 工作流类型

前端应用:

  • projects/app/src/pages/api/ - API 路由
  • projects/app/src/pageComponents/ - 页面组件
  • projects/app/src/components/core/ - 核心组件

配置文件:

  • projects/app/data/model.json - 模型配置
http://www.xdnf.cn/news/1461421.html

相关文章:

  • es运维常用命令
  • 基于cornerstone3D的dicom影像浏览器 第四章 鼠标实现翻页、放大、移动、窗宽窗位调节
  • 进阶向:Python生成艺术图案(分形、数学曲线)
  • 深度相机详解
  • Spring Boot启动失败从循环依赖到懒加载配置的深度排查指南
  • 《Keil 开发避坑指南:STM32 头文件加载异常与 RTE 配置问题全解决》
  • 【译】GitHub Copilot for Azure(预览版)已经在 Visual Studio 2022 中推出
  • 动物专家?单词测试!基于 TensorFlow+Tkinter 的动物识别系统与动物识别小游戏
  • claude-sonnet4和GLM-4-5-HTML版本迷宫小游戏
  • honmony 中集成 tuanjie/unity
  • 自由学习记录(95)
  • Bug 排查日记:从问题浮现到解决的技术之旅
  • C++ opencv RTSP小工具 RTSP流播放、每一帧保存
  • 爆改YOLOv8 | 即插即用的AKConv让目标检测既轻量又提点
  • 光伏运维迎来云端革命!AcrelCloud-1200如何破解分布式光伏四大痛点?
  • Elasticsearch面试精讲 Day 9:复合查询与过滤器优化
  • PPT中如何将设置的文本框边距设为默认
  • 【Javascript】Capacitor 文件存储在 Windows 上的位置
  • Git 同步最新代码:用 stash -> pull -> pop 安全同步更新
  • Docker 容器核心指令与数据库容器化实践
  • 安全运维-云计算系统安全
  • 【1】策略模式 + 模板方法模式的联合应用
  • 具身智能的工程落地:视频-控制闭环的实践路径
  • 手写React状态hook
  • AI测试:自动化测试框架、智能缺陷检测、A/B测试优化
  • 分片上传-
  • Boost搜索引擎 网络库与前端(4)
  • 力扣hot100:搜索二维矩阵 II(常见误区与高效解法详解)(240)
  • OpenBMC之编译加速篇
  • 三、神经网络