FastGPT源码解析 工作流、知识库、大模型、Agent等核心代码文件梳理
核心服务层- AI 模型对接- 工作流调度- 知识库管理全局类型定义- AI 模型类型- 工作流类型前端应用- API 路由- 页面组件- 核心组件配置文件- 模型配置。
·
大模型对接核心代码文件对应
梳理了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 (
<ReactFlow
nodes={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
- 模型配置
更多推荐
所有评论(0)