- 人工智能
- 大模型
- AI 应用
- 后端
- AI Agent
- RAG
- 流程编排
- 微服务
【免费下载链接】fit-framework
FIT: 企业级AI开发框架,提供多语言函数引擎(FIT)、流式编排引擎(WaterFlow)及Java生态的LangChain替代方案(FEL)。原生/Spring双模运行,支持插件热插拔与智能聚散部署,无缝统一大模型与业务系统。
本指南以 FIT 函数平台的 Java 实现为核心,带你完成环境准备、框架编译、注册中心启动、依赖引入、启动类与控制器编写,直至通过 IDEA 或可执行 JAR 将应用跑起来,并以一次真实的 HTTP 请求验证结果。读完本文,你将掌握 FIT Java 应用的最小可用闭环,并理解其背后"多语言融合编程、插件化开发、聚散部署、共享内存"四大特性的设计与实现脉络,为后续阅读插件化、热插拔、服务调用等进阶指南打好基础。
FIT 函数平台是什么
FIT(FIT 函数平台)是一套支持多语言融合编程、插件化开发、聚散部署和共享内存的解决方案,旨在提供一种灵活的服务开发范式。其四大核心能力如下:
- 多语言融合编程:FIT 在多种编程语言中采用统一的接口描述标准,分别进行实现,并进行相互调用,以达到多语言互相融合协作的目的。
- 插件化开发:FIT 为多种编程语言分别提供了插件开发标准,允许插件在不依赖其他插件的前提下调用其他插件所提供的服务。
- 聚散部署:FIT 为多种编程语言分别提供了运行时环境,允许插件在其运行时环境中既可以单个插件独立进程运行,也可以多个插件共享进程运行。
- 共享内存:FIT 支持插件之间共享内存,即使多个插件分散为多个进程部署,也可以以内存访问的效率来访问共享数据。
在 FIT 的编程模型中,有两个用户可感知的最小单元:Genericable(泛服务定义,可类比 Java 中的接口方法)与Fitable(泛服务实现,可类比接口方法的实现类)。一个Genericable可对应多个Fitable,而一个Fitable只归属于一个Genericable。插件则用于将这些基础单元组织为可供管理的最小单元,运行于 FIT 运行时之上;运行于不同运行时的Fitable之间通过注册中心完成服务发现与注册,从而能够互相调用。更完整的设计理念可参考 FIT 概述。
本文的快速开始流程不引入插件概念,先以一个最简单的 Web 应用跑通全链路。
快速开始
以下是在Java中编写一个完整FIT应用程序的简单说明,完整可运行代码位于示例工程 01-simple-web-app。
环境准备
开始之前,请确认以下环境就绪:
- 编辑器,如 IntelliJ IDEA
- Java 17
- Maven,推荐版本 Maven 3.8.8+
- 对 fitframework 构建:在
framework/fit/java目录下使用 Maven 对框架进行编译:mvn clean install - 对您的项目构建:在您的项目下进行编译:
mvn clean install - 内存版注册中心启动:参考 registry-center.md
编译完成后,框架产物会输出到仓库根目录build/下,其中包含build/bin/fit启动脚本,以及build/plugins/fit-service-coordination-simple-*.jar等内存注册中心插件。本地开发时可直接执行./build/bin/fit start启动 FIT 服务(默认启用内存注册中心),并通过curl http://localhost:8080/actuator/plugins验证服务状态;若默认端口8080冲突,可用./build/bin/fit start server.http.port=8081覆盖端口。
0. 添加依赖
在 Maven 项目系统生成的pom文件中,添加 Web 相关的依赖,如下所示:
<dependencies> <dependency> <groupId>org.fitframework</groupId> <artifactId>fit-starter</artifactId> <version>${fit.version}</version> </dependency> <dependency> <groupId>org.fitframework</groupId> <artifactId>fit-plugins-starter-web</artifactId> <version>${fit.version}</version> </dependency> <dependency> <groupId>org.fitframework</groupId> <artifactId>fit-api</artifactId> <version>${fit.version}</version> </dependency> </dependencies>三个依赖的分工可以从仓库的模块定义中看出:
fit-starter是应用启动的最小依赖集合:通过 fit-starter/pom.xml 可以看到,它以运行时(runtime)作用域聚合了fit-runtime、fit-conf、fit-conf-yaml、fit-ioc、fit-plugin,并以编译作用域引入fit-api、fit-util、fit-log-console、fit-reactor等,保证 FIT 应用能够跑起来。fit-plugins-starter-web使应用程序具备 Web 服务的基本能力:通过 fit-plugins-starter-web/pom.xml 可以看到,它聚合了fit-http-classic服务以及fit-http-handler-registry、fit-server-http、fit-http-server-netty(Netty HTTP 服务端)、fit-value-fastjson、fit-message-serializer-json-jackson等 Web 场景插件。fit-api提供 FIT 框架对外暴露的 API,如注解、Genericable与Fitable定义、异常体系等。
此外,构建阶段需要配置fit-build-maven-plugin,并在<executions>中声明package-app目标,这是打包应用的必选指令。完整pom.xml示例可参考 01-simple-web-app/pom.xml,其中fit.version使用3.7.0-SNAPSHOT,并通过maven-compiler-plugin指定java.version=17与-parameters编译参数。
1. 创建启动器
通过FitStarter类的静态方法start去启动整个应用,使 FIT 框架对启动类进行识别,示例如下:
package modelengine.fit.demo1; import modelengine.fitframework.annotation.Component; import modelengine.fitframework.runtime.FitStarter; public class DemoApplication { public static void main(String[] args) { FitStarter.start(DemoApplication.class, args); } }从源码看,FitStarter.java 会根据部署形态自动选择三种运行时:
- 若当前 JAR 存在嵌套(
nests)结构,则创建AggregatedFitRuntime(聚合部署,多应用共享进程); - 若
FitStarter由系统类加载器(AppClassLoader)加载,则创建DirectFitRuntime(IDE 直接运行场景); - 否则创建
DiscreteFitRuntime(离散部署,独立进程场景)。
启动后还会自动生成并写入系统属性worker.instance-id,作为当前进程的唯一标识。这也从侧面印证了 FIT"聚散部署"的能力设计:同一套启动代码,可以根据运行形态自动切换进程模型。
2. 创建控制器
在该应用程序中,HTTP 请求由控制器处理。我们可以创建相应的控制器和方法来进行处理,示例如下:
package modelengine.fit.demo1.controller; import modelengine.fit.http.annotation.GetMapping; import modelengine.fitframework.annotation.Component; /** * 控制器。 */ @Component public class Controller { @GetMapping(path = "/hello") public String hello() { return "hello world!"; } }关键注解说明:
@Component:声明当前类为组件,纳入 FIT IoC 容器管理(对应 Spring 的@Component)。@GetMapping:声明 REST 接口的 GET 请求映射,path属性确定访问路径。同样地,也可以使用@RequestMapping并指定method = HttpRequestMethod.GET达到相同效果。
如果希望接收查询参数,可以在方法参数上使用@RequestParam("name")将 HTTP 查询字符串绑定到方法参数,参见示例工程中的 UserController.java。该控制器配合资源类User(见 User.java),会通过fit-plugins-starter-web引入的序列化插件自动将返回对象封装为 JSON 格式。
3. 启动
当前应用启动有两种方式:
- 通过 IDEA 启动:您可以直接在 IDEA 运行
main方法。 - 通过执行 JAR 文件:您可以使用 Maven 在命令行运行,构建一个包含所有必要依赖项、类和资源的单个可执行 JAR 文件,并运行该文件。
JAR 方式的具体步骤为:先执行mvn clean install编译打包(生成target目录及可执行 JAR),再执行:
java -jar target/web-service-1.0-SNAPSHOT.jar应用启动时会有日志输出,出现如下段落即说明启动成功:
[yyyy-MM-dd hh:mm:ss.SSS] [INFO ] [main] [modelengine.fitframework.runtime.aggregated.AggregatedFitRuntime] Prepare to start FIT application... [yyyy-MM-dd hh:mm:ss.SSS] [INFO ] [main] [modelengine.fitframework.runtime.aggregated.AggregatedFitRuntime] FIT application started. [yyyy-MM-dd hh:mm:ss.SSS] [INFO ] [netty-http-server-thread-0] [modelengine.fit.http.server.netty.NettyHttpClassicServer] Start netty http server successfully. [httpPort=8080]服务顺利启动后,通过地址http://localhost:8080/hello即可访问资源;若访问带参数的接口(如http://localhost:8080/user?name=zhangsan&age=18),会得到类似如下的 JSON 响应:
{ "name": "zhangsan", "age": 18, "id": 1 }其中id字段唯一标识响应值,每次调用后自增 1。
发布
进入 FIT for Java 根目录(即framework/fit/java目录),执行命令:
mvn clean deploy即可将框架各模块发布到 Maven 仓库,供其他项目以依赖方式引用。
源码视角:FIT 的核心机制
快速开始之外的框架能力,可以从各模块设计文档与源码中进一步理解,这也是后续深入学习插件化、配置、AOP、Genericable 等特性的入口。
类加载体系:插件隔离与共享
FIT 体系结构中主要使用三个ClassLoader(详见 fit-plugin/README.md 与 fit-runtime/README.md):
SharedClassLoader:加载公共 JAR 包,如 FIT 对外 API(fit-api)、工具集(fit-util)及所有Genericable与结构体定义,被 FIT 框架及所有插件共享;FrameworkClassLoader:加载 FIT 框架实现及所使用的 JAR 包,其parent为SharedClassLoader;PluginClassLoader:加载单个插件的实现及所用 JAR 包,每个插件拥有独立的PluginClassLoader实例,其parent为SharedClassLoader。
这一结构同时实现了JAR 隔离(不同插件的三方包互不影响,避免兼容性问题)与Bean 隔离(不同插件的 Bean 从各自的ClassLoader中扫描),是"插件化开发"与"聚散部署"能够落地的底层支撑。插件打包后的目录结构中,lib与third-party目录中的 JAR 加载到PluginClassLoader,shared(含shared/genericables、shared/structures)目录中的 JAR 加载到SharedClassLoader。
IoC 容器与 Bean 生命周期
BeanContainer是 FIT IoC 容器的核心接口,通过管理BeanFactory提供对Bean的管理能力(详见 fit-ioc/README.md)。容器内使用三个解析程序提供功能封装与扩展:
BeanResolver:封装 Bean 解析能力,判断类型或方法是否为 Bean、参数是否应进行依赖注入等,支持@FitableSuite、@Fitable、@Initialize、@Destroy、@Fit等注解;DependencyResolver:解析 Bean 依赖,可按名称或类型解析,名称优先;对List/Map类型的依赖注入有特殊处理;AnnotationMetadataResolver:解析注解元数据,提供"注解转发"能力(如在@FitableSuite上定义@Fitable,则标注了@FitableSuite的类也被认为标注了@Fitable)。
Bean 生命周期由BeanCreator、BeanInjector、BeanInitializer、BeanMapper、BeanDestroyer等功能接口组合而成,并可通过BeanLifecycleInterceptor以装饰器模式提供生命周期拦截能力(AOP 的重要基础)。
配置体系与优先级
FIT 的配置以"外部配置优先于内部配置"为原则(详见 fit-conf/README.md),完整优先级为:
命令行参数 > 环境变量 > 插件配置文件 > 框架配置文件 > 插件资源文件 > 框架资源文件
更具体地,Global Config 依次由命令行参数(key=value风格,--config-file=xxx与config-file=xxx等价)、系统属性(System.getProperties())、外部配置文件(路径通过config-file指定)、环境变量(System.getenv())构建,再叠加 Profile 内置配置与默认内置配置。配置自上而下分为Global Config → Plugin Config → Bean Config三层,插件配置以插件名为前缀继承全局配置。常见的配置项包括server.http.port(HTTP 暴露端口)、application.name(应用名)、fit.profiles.active(激活的 profile)等,完整列表见 常用注解和配置项。
异常体系:跨语言跨进程传递
FIT 编程框架内的异常能够跨语言跨进程传递(详见 fit-api/README.md),核心异常有 3 个:
FitException:最基础的异常,可携带异常码、异常信息和自定义属性集;DegradableException:可降级异常,系统识别后会搜索并调用降级服务;RetryableException:可重试异常,远程调用场景下会优先于降级尝试重试。
每个异常类通过@ErrorCode注解声明异常码,跨进程传递时先序列化异常码、消息与属性到 FIT 传输协议元数据中,再在接收端反序列化还原。
命令行启动脚本
除了在 IDE 或main方法中启动,FIT 还提供了基于 Node.js 的跨平台启动脚本(详见 fit-launcher/README.md):
./fit init my-app # 交互式创建项目 ./fit init my-app --group-id=com.mycompany --artifact-id=my-app --package=com.mycompany.myapp # 命令行参数创建 ./fit start [Java参数] [程序参数] # 启动应用,如 ./fit start -Xmx1g myapp config.yaml ./fit debug [Java参数] [程序参数] # Debug 模式,自动附加 jdwp 远程调试参数,端口 5005 ./fit version # 查看版本 ./fit help # 查看帮助脚本会自动区分以-开头的 JVM 参数与程序参数,并设置plugin.fit.dynamic.plugin.directory(默认当前工作目录,动态插件加载目录)等系统属性。Windows 下对应使用fit.cmd命令。
更多内容
FIT 快速入门指南
- 构建基础 Web 应用
- 构建插件式 Web 应用
- 使用插件的热插拔能力
- 实现应用之间的服务调用
- 常用注解和配置项
- 常见问题与解决方案
- 工程目录最佳实践
FIT 用户指导手册
- 插件、IoC 容器和 Bean
- AOP 编程
- Conf 配置
- Web MVC 能力
- Genericable 面向接口的远程和本地方法调用能力
- 插件化开发
- 数据访问
- 日志
- 测试框架
- 流式功能
- FIT 框架的类加载
- 附加功能组件
FIT 模块设计
- 工具集设计
- API 设计
- IoC 容器设计
- 配置架构设计
- 插件架构设计
- 运行时设计
- 启动程序设计
- 人工智能
- 大模型
- AI 应用
- 后端
- AI Agent
- RAG
- 流程编排
- 微服务
【免费下载链接】fit-framework
FIT: 企业级AI开发框架,提供多语言函数引擎(FIT)、流式编排引擎(WaterFlow)及Java生态的LangChain替代方案(FEL)。原生/Spring双模运行,支持插件热插拔与智能聚散部署,无缝统一大模型与业务系统。
相关推荐
Koa2快速入门指南:从零开始构建你的第一个Web应用
Koa2快速入门指南:从零开始构建你的第一个Web应用 前言 Koa2作为新一代Node.js Web框架,由Express原班人马打造,采用ES7的async
文档教程后端Moon.js快速开始:从零构建你的第一个响应式应用
Moon.js快速开始:从零构建你的第一个响应式应用 🌙 Moon.js 是一个极简且快速的函数式用户界面库,专为构建响应式应用而设计。作为轻量级JavaSc
前端使用 FIT 框架构建基础 Web 应用:从零搭建第一个 HTTP JSON 服务
使用 FIT 框架构建基础 Web 应用:从零搭建第一个 HTTP JSON 服务 本指南以 FIT 框架(fit framework 开源仓库的 Java 实
人工智能大模型AI 应用后端AI AgentRAG流程编排微服务
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考