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

梳理了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 - 模型配置
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐