一、为什么需要二次开发?

在2026年的AI应用版图中,AnythingLLM和FastGPT已成为企业构建私有知识库的两大主流选择。然而,开箱即用的版本往往无法满足企业特有的业务流程和数据格式需求。二次开发能力,正是将这两个工具从"能用"升级为"好改"的关键分水岭。

核心观点:AnythingLLM适合需要定制化检索逻辑和多租户隔离的场景;FastGPT适合需要多轮迭代和条件分支的复杂业务流程。


二、AnythingLLM二次开发:自定义Agent技能

2.1 开发环境搭建

AnythingLLM采用MIT许可证,二次开发友好。首先从源码构建开发环境:

# 克隆源码
git clone https://github.com/Mintplex-Labs/anything-llm.git
cd anything-llm

# 安装依赖(使用Bun)
bun install

# 启动开发服务器
bun run dev:frontend  # 前端,端口3000
bun run dev:backend   # 后端,端口3001

存储目录说明:自定义技能存放在STORAGE_DIR/plugins/agent-skills/。Docker部署通过volume挂载,本地开发位于server/storage/plugins/agent-skills/

2.2 创建自定义技能

每个自定义技能需要三个核心文件:plugin.jsonhandler.js,以及文件夹名称与hubId一致。

第一步:plugin.json配置文件

{
  "active": true,
  "hubId": "enterprise-knowledge-search",
  "name": "企业知识库检索",
  "schema": "skill-1.0.0",
  "version": "1.0.0",
  "description": "检索企业内部知识库文档(支持元数据过滤)",
  "author": "your-team",
  "license": "MIT",
  "setup_args": {
    "INTERNAL_API_KEY": {
      "type": "string",
      "required": true,
      "input": {
        "type": "text",
        "placeholder": "输入企业内部API密钥"
      }
    }
  },
  "examples": [
    {
      "prompt": "查询最新的产品规格文档",
      "call": "{\"query\": \"产品规格\", \"department\": \"研发部\"}"
    }
  ],
  "entrypoint": {
    "file": "handler.js",
    "params": {
      "query": { "description": "搜索关键词", "type": "string" },
      "department": { "description": "部门过滤", "type": "string" }
    }
  },
  "imported": true
}

第二步:handler.js业务逻辑

module.exports.runtime = {
  handler: async function ({ query, department }) {
    const skillName = `${this.config.name}-v${this.config.version}`;
    
    try {
      // 向用户展示推理过程
      this.introspect(`${skillName} 开始检索: "${query}"`);
      
      const apiKey = this.runtimeArgs["INTERNAL_API_KEY"];
      
      // 调用企业内部知识库API
      const response = await fetch(
        `https://internal-kb.company.com/api/search?q=${encodeURIComponent(query)}&dept=${department || ''}`,
        {
          headers: { 'Authorization': `Bearer ${apiKey}` }
        }
      );
      
      if (!response.ok) throw new Error(`API失败: ${response.status}`);
      
      const data = await response.json();
      const results = data.results.slice(0, 5).map(r => 
        `${r.title}${r.snippet}`
      ).join('\n\n');
      
      return results || '未找到相关文档。';
      
    } catch (e) {
      this.introspect(`${skillName} 执行失败`);
      return `检索服务不可用: ${e.message}`;
    }
  }
};

关键API说明

  • this.introspect():向用户展示推理过程,增加透明度
  • this.runtimeArgs:访问plugin.json中配置的敏感信息
  • this.logger():输出调试日志到控制台

三、FastGPT二次开发:工作流节点扩展

3.1 核心架构

FastGPT的核心能力是Flow节点编排(工作流),节点间通过触发器连接形成执行链路。从V4.15.0+开始支持循环节点,极大扩展了业务场景。

二次开发主要涉及三个层面:

  • 新增功能节点:在/packages/service/core/workflow/nodes/中添加
  • 接入外部知识库:通过FastGPT的第三方知识库接口规范扩展
  • 模型适配:在/packages/global/core/model/中接入企业内部模型

3.2 第三方知识库接入实战

FastGPT提供了标准化的API文件库接口,支持接入飞书、语雀等外部文档库。以下是接入自定义企业知识库的完整步骤:

步骤1:定义知识库类型/packages/global/core/dataset/apiDataset.d.ts

export enum ApiDatasetTypeEnum {
  feishu = 'feishu',
  yuque = 'yuque',
  custom = 'custom_knowledge'  // 自定义类型
}

步骤2:实现Hook函数/packages/service/core/dataset/apiDataset/custom/api.ts

export const useCustomKnowledge = () => {
  // 获取文件列表
  const listFiles = async (params: { token: string }) => {
    const response = await fetch('https://internal-kb.company.com/api/files', {
      headers: { 'Authorization': `Bearer ${params.token}` }
    });
    return response.json();
  };

  // 获取文件内容用于向量化
  const getFileContent = async (fileId: string, token: string) => {
    const response = await fetch(`https://internal-kb.company.com/api/file/${fileId}/content`, {
      headers: { 'Authorization': `Bearer ${token}` }
    });
    return response.text();
  };

  return { listFiles, getFileContent };
};

步骤3:注册前端UI/packages/web/i18n/zh-CN/dataset.json

{
  "custom_knowledge_dataset": "企业知识库",
  "custom_knowledge_dataset_desc": "接入企业内部文档系统"
}

3.3 循环节点应用示例

FastGPT的循环节点支持两种模式:数组循环条件循环。以下是一个"AI润色文案直至评估达标"的条件循环实现:

循环开始(条件循环模式)
  ├── 【AI对话】文案优化
  ├── 【AI对话#2】质量评分
  ├── 【判断器】分数 >= 80?
  │   ├── 是 → 【指定回复】输出结果 → 【循环终止】
  │   └── 否 → 自动进入下一轮
  └── (循环体结束)

配置要点:循环节点不支持嵌套,系统默认最大循环次数为100次(可配置WORKFLOW_MAX_LOOP_TIMES环境变量调优)。


四、选型决策与避坑指南

维度 AnythingLLM FastGPT
核心定位 企业级RAG知识库应用 LLM工作流编排平台
二次开发入口 自定义Agent技能(插件热加载) 自定义节点、循环编排
开发语言 JavaScript/Node.js TypeScript(后端)、Python(API)
适用场景 文档问答、多部门隔离 复杂业务流程、多轮迭代

避坑指南

常见问题 解决方案
自定义技能返回非字符串 handler必须返回string类型
热加载不生效 退出会话/exit后重新进入
FastGPT循环死循环 确保条件循环内有【循环终止】节点
第三方知识库配置不生效 检查constants.ts是否正确注册类型

五、总结

AnythingLLM和FastGPT的二次开发,本质上是将通用工具与特定业务流程进行适配。AnythingLLM通过自定义Agent技能扩展功能,开发周期短、热加载友好;FastGPT通过工作流节点和循环编排实现复杂流程,适合需要多轮迭代和条件分支的业务。

在实际项目中,建议从最小可行定制开始——先通过配置和API满足80%需求,再将二次开发聚焦于业务逻辑而非底层框架,以保持与上游版本的同步。

更多推荐