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
- 模型配置