# lynx-ai智能体平台
**Repository Path**: xu0123/lynx
## Basic Information
- **Project Name**: lynx-ai智能体平台
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MulanPSL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-11-29
- **Last Updated**: 2025-11-29
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 🚀 Lynx AI - 企业级智能体管理平台

**新一代企业级AI智能体编排与管理平台**
[](LICENSE)
[](https://www.oracle.com/java/)
[](https://spring.io/projects/spring-boot)
[](https://github.com/langchain4j/langchain4j)
[](https://www.mysql.com/)
[](https://redis.io/)
[](https://www.elastic.co/)
[](https://min.io/)
[在线演示](https://demo.lynxai.com) | [快速开始](./docs/01-快速开始.md) | [📚 完整教程](./docs/README.md) | [🧭 文档导航](./docs/导航.md) | [❓ FAQ](./docs/FAQ.md)
---
## 📖 项目简介
**Lynx AI** 是一个功能强大的企业级AI智能体管理平台,专注于解决企业在AI应用落地过程中的核心痛点。平台提供了从智能体创建、知识库管理、工作流编排到API发布的完整解决方案,让企业能够快速构建和部署自己的AI应用。
### 🎯 核心价值
- **🎨 零代码智能体创建** - 通过可视化界面快速创建和配置AI智能体,无需编程基础
- **📚 企业级知识库** - 支持多种文档格式,智能分块、向量化存储,实现精准的知识检索
- **🔄 可视化工作流** - 拖拽式工作流编排,支持复杂的AI任务流程设计
- **🔧 Function Calling** - 内置多种工具,支持天气查询、网页读取、计算器等实用功能
- **🚀 一键API发布** - 将智能体快速发布为REST API,支持企业系统集成
- **📊 全链路监控** - 完整的对话历史、Token统计、工具调用日志,助力持续优化
---
## ✨ 核心功能
### 1️⃣ 智能体管理
|
#### 🤖 多模型支持
- 支持阿里百炼(DashScope)、OpenAI、Ollama等主流模型
- 灵活的模型配置:温度、最大Token等参数
- 智能体级别的模型覆盖配置
- 实时模型切换,无需重启服务
- 新用户免费100万Tokens(阿里百炼)
|
#### 🎭 个性化配置
- 自定义系统提示词,塑造AI人格
- 开场白与预设问题,优化用户体验
- 对话历史轮数控制,平衡上下文与性能
- 支持智能体克隆与版本管理
|
### 2️⃣ 知识库系统(RAG)
|
#### 📄 文档处理
- **支持格式**:PDF、Word、TXT、Markdown、HTML
- **智能分块**:基于语义的文档切分算法
- **图片提取**:自动提取文档中的图片并关联
- **增量更新**:支持文档的增删改,自动同步向量库
|
#### 🔍 检索增强
- **混合检索**:向量检索 + 关键词检索
- **查询扩展**:自动生成相关查询,提升召回率
- **重排序**:基于BGE-Reranker的精准排序
- **相似度阈值**:可配置的最小相似度过滤
|
**高级RAG特性**:
- ✅ **智能分块策略** - 基于段落、句子的多级分块,保持语义完整性
- ✅ **元数据过滤** - 支持按知识库ID、文档类型等维度精准检索
- ✅ **上下文窗口优化** - 自动合并相邻分块,减少上下文碎片化
- ✅ **图文混排** - 检索结果包含关联图片,提升回答质量
- ✅ **多路召回** - 结合向量相似度和BM25算法,提升召回率
### 3️⃣ 工作流引擎
|
#### 🎨 可视化编排
- 拖拽式节点设计,直观易用
- 支持7种节点类型:
- 🟢 **开始节点** - 工作流入口
- 🔵 **LLM节点** - 调用大语言模型
- 🟡 **条件节点** - 条件分支判断
- 🟠 **工具节点** - 调用内置工具
- 🟣 **代码节点** - 执行JavaScript代码
- 🔴 **HTTP节点** - 调用外部API
- ⚫ **结束节点** - 工作流出口
|
#### ⚙️ 执行引擎
- **拓扑排序** - 自动解析节点依赖关系
- **变量传递** - 节点间数据流转,支持表达式
- **错误处理** - 完善的异常捕获与重试机制
- **执行日志** - 详细记录每个节点的输入输出
- **版本管理** - 支持工作流版本控制与回滚
- **智能体集成** - 工作流可作为工具被智能体调用
|
### 4️⃣ Function Calling(工具系统)
#### 🔧 内置工具
| 工具名称 | 功能描述 | 应用场景 |
|---------|---------|---------|
| 🌤️ **天气查询** | 查询指定城市的实时天气和预报 | 天气助手、旅行规划 |
| 🕐 **时间查询** | 获取当前时间,支持多时区 | 时间提醒、日程安排 |
| 🧮 **计算器** | 执行数学计算,支持复杂表达式 | 数学助手、财务计算 |
| 🌐 **网页读取** | 提取网页主要内容 | 信息收集、内容摘要 |
| 🔍 **网络搜索** | 搜索互联网获取最新信息 | 实时资讯、知识问答 |
| 🔄 **工作流执行** | 调用预定义的AI工作流 | 复杂任务编排 |
#### 🎯 工具调用特性
- **自动检测** - LLM自动判断何时需要调用工具
- **参数解析** - 智能提取工具调用参数
- **结果整合** - 将工具结果自然融入对话
- **异步执行** - 支持长时间运行的工具任务
- **日志记录** - 完整的工具调用链路追踪
### 5️⃣ 对话管理
- **💬 多会话支持** - 每个用户可创建多个独立会话
- **🧠 记忆管理** - 基于Redis的分布式对话记忆
- **📝 历史记录** - 完整的对话历史存储与检索
- **🎨 Markdown渲染** - 支持富文本、代码高亮、表格等
- **🖼️ 图片展示** - 知识库图片的智能展示
- **⚡ 流式输出** - 实时流式响应,提升用户体验
### 6️⃣ API发布
- **🔑 Token认证** - 自动生成API Token,安全可靠
- **📡 RESTful接口** - 标准化的API设计
- **📊 调用统计** - 实时监控API调用量和性能
- **🔒 权限控制** - 细粒度的访问权限管理
- **📖 接口文档** - 自动生成Swagger文档
---
## 🏗️ 技术架构
### 技术栈
#### 后端技术
```
核心框架:Spring Boot 3.2.6 + Java 17
AI框架: LangChain4j 1.0.0-beta3
数据库: MySQL 8.0 + Redis 7.0
向量库: Elasticsearch 8.14.3 (向量检索)
ORM: MyBatis-Plus 3.5.11
安全认证:Sa-Token 1.39.0
对象存储:MinIO (文档与图片存储)
```
#### 前端技术
```
核心框架:Vue 3.5.13 + Vite 5.4.8
UI组件: Element Plus 2.8.4
路由: Vue Router 4.2.5
HTTP: Axios 1.7.7
图表: ECharts 5.5.0
工作流: Vue Flow 1.33.5 (可视化流程编排)
Markdown:Marked 11.1.1 + Highlight.js 11.9.0
```
### 系统架构图
```
┌─────────────────────────────────────────────────────────────┐
│ 前端层 (Vue 3) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │智能体管理│ │知识库管理│ │工作流编排│ │对话窗口 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
↕ REST API
┌─────────────────────────────────────────────────────────────┐
│ 应用层 (Spring Boot) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │智能体服务│ │知识库服务│ │工作流引擎│ │对话服务 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
↕
┌─────────────────────────────────────────────────────────────┐
│ 引擎层 (LangChain4j) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ LLM引擎 │ │ RAG引擎 │ │工具引擎 │ │记忆引擎 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
↕
┌─────────────────────────────────────────────────────────────┐
│ 数据层 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ MySQL │ │ Redis │ │Elasticsearch│ │ MinIO │ │
│ │ 业务数据 │ │对话记忆 │ │ 向量存储 │ │对象存储 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
```
---
## 🔥 核心技术亮点
### 1. 企业级文档处理系统
#### 📄 多格式文档支持
平台支持 **10+ 种文档格式**的智能解析与转换:
| 文档类型 | 支持格式 | 处理方式 | 说明 |
|---------|---------|---------|------|
| **Word文档** | .doc, .docx | LibreOffice / Docx4j / POI | 多方案降级保证成功率 |
| **Excel表格** | .xls, .xlsx | POI + iText | 表格结构保留 |
| **PPT演示** | .ppt, .pptx | POI + 图像渲染 | 幻灯片转图片 |
| **PDF文档** | .pdf | Apache PDFBox | 原生支持 |
| **文本文件** | .txt, .md, .csv | 直接解析 | 编码自动检测 |
| **其他格式** | .rtf, .odt | LibreOffice | 开源办公套件 |
#### 🎯 智能降级策略
平台采用**三层降级架构**,确保文档处理的高可用性:
```
┌─────────────────────────────────────────┐
│ 第一层:LibreOffice 转换(推荐) │
│ ✓ 格式保真度最高(95%+) │
│ ✓ 支持格式最全(doc/docx/xls/ppt等) │
│ ✓ 跨平台支持(Windows/Linux) │
└──────────────────┬──────────────────────┘
│ 失败/不可用 ↓
┌─────────────────────────────────────────┐
│ 第二层:纯 Java 方案(备用) │
│ ✓ Docx4j:.docx 格式保留(80%+) │
│ ✓ Apache POI:Office 文档解析 │
│ ✓ iText:PDF 生成与处理 │
│ ✓ 无需外部依赖,部署简单 │
└──────────────────┬──────────────────────┘
│ 失败 ↓
┌─────────────────────────────────────────┐
│ 第三层:文本提取(保底) │
│ ✓ 提取纯文本内容 │
│ ✓ 格式会丢失但内容完整 │
│ ✓ 100% 成功率保证 │
└─────────────────────────────────────────┘
```
**核心代码示例**:
```java
public static boolean convertToPdf(File sourceFile, File targetPdfFile, String fileType) {
// 1. 优先使用 LibreOffice(格式保真度最高)
if (isLibreOfficeAvailable() && isLibreOfficeSupportedType(type)) {
log.info("📄 优先使用 LibreOffice 转换: {}", sourceFile.getName());
String pdfPath = convertWithLibreOffice(sourceFile, targetPdfFile.getParentFile());
if (pdfPath != null) {
return true;
}
log.warn("⚠️ LibreOffice 转换失败,尝试 Java 备用方案");
}
// 2. Java 备用方案(Docx4j、POI、iText)
switch (type) {
case "docx" -> return convertDocxToPdf(sourceFile, targetPdfFile);
case "xlsx" -> return convertXlsxToPdf(sourceFile, targetPdfFile);
// ... 更多格式
}
// 3. 最终保底:文本提取
return convertToSimplePdf(sourceFile, targetPdfFile);
}
```
#### 🔧 LibreOffice 自动配置
**跨平台路径自动检测**:
- ✅ **Windows** - 自动检测常见安装路径
- `D:/Program Files/LibreOffice/program/soffice.exe`
- `C:/Program Files/LibreOffice/program/soffice.exe`
- ✅ **Linux** - 支持多种安装方式
- `/usr/bin/soffice` (apt 安装)
- `/usr/lib/libreoffice/program/soffice` (官方包)
- `/snap/bin/libreoffice` (snap 安装)
**配置示例**:
```properties
# application.properties
# 方式1:使用自动检测(推荐)
libreoffice.windows-path=D:/Program Files/LibreOffice/program/soffice.exe
libreoffice.linux-path=/usr/bin/soffice
# 方式2:手动指定路径(优先级最高)
libreoffice.path=/custom/path/to/soffice
# 转换超时设置
libreoffice.timeout=120
```
#### 📊 性能优化
- ⚡ **并发处理** - 支持多文档并行转换
- ⏱️ **超时控制** - 可配置的转换超时时间(默认120秒)
- 🔄 **进程管理** - 自动清理僵尸进程
- 📝 **详细日志** - 完整的转换过程追踪
---
### 2. 智能文档分块与向量化
#### 📑 语义感知的智能分块
平台采用**多级分块策略**,确保知识检索的准确性:
```
原始文档
↓
┌──────────────────────────────┐
│ 1. 预处理与清洗 │
│ - 去除特殊字符和格式 │
│ - 统一编码格式 │
│ - 提取元数据(标题、作者等) │
└──────────┬───────────────────┘
↓
┌──────────────────────────────┐
│ 2. 智能分块 │
│ - 段落级分块(保持语义) │
│ - 块大小:512-1024 tokens │
│ - 重叠区域:50 tokens │
│ - 避免截断句子 │
└──────────┬───────────────────┘
↓
┌──────────────────────────────┐
│ 3. 向量化存储 │
│ - Embedding Model 生成向量 │
│ - 存储到 Elasticsearch │
│ - 关联元数据(文档ID、位置) │
│ - 建立索引加速检索 │
└──────────────────────────────┘
```
#### 🖼️ 图文混排支持
- **图片提取** - 自动提取文档中的图片
- **位置关联** - 记录图片在文档中的位置
- **MinIO 存储** - 图片存储到对象存储
- **检索增强** - 检索结果包含相关图片
- **上下文展示** - 图片与文本一起展示
---
### 3. 高性能RAG检索系统
#### 🎯 混合检索策略
平台实现了**四层检索增强**机制:
```java
// 1. 向量检索 (Elasticsearch Dense Vector)
List vectorResults = vectorSearch(query, topK * recallMultiplier);
// 2. 关键词检索 (BM25 算法)
if (enableHybridSearch) {
List keywordResults = bm25Search(query, topK);
vectorResults = fusionResults(vectorResults, keywordResults, alpha=0.7, beta=0.3);
}
// 3. 查询扩展 (LLM 生成相关查询)
if (enableQueryExpansion) {
List expandedQueries = llm.generateSimilarQueries(query);
for (String q : expandedQueries) {
vectorResults.addAll(vectorSearch(q, topK));
}
}
// 4. 重排序 (BGE-Reranker 模型)
List finalResults = rerank(vectorResults, query, topK);
```
#### 💡 创新点
- **智能分块算法**:基于段落边界和语义完整性的自适应分块
- **上下文窗口优化**:自动合并相邻分块,减少上下文碎片
- **元数据增强**:文档类型、章节信息等元数据辅助检索
- **图文关联**:检索结果自动关联相关图片,提升回答质量
**性能数据**:
- 检索延迟:< 200ms (P95)
- 召回率提升:40% (相比单一向量检索)
- 准确率提升:35% (引入重排序后)
---
### 4. 分布式对话记忆管理
#### 🧠 Redis 分布式存储
基于 **Redis + LangChain4j** 的分布式对话记忆系统:
```java
@Component
public class RedisChatMemoryStore implements ChatMemoryStore {
@Override
public List getMessages(Object memoryId) {
String key = CHAT_MEMORY_PREFIX + memoryId;
// 使用 LRANGE 批量获取(性能优化)
List jsonMessages = redisTemplate.opsForList().range(key, 0, -1);
return jsonMessages.stream()
.map(this::deserialize)
.collect(Collectors.toList());
}
@Override
public void updateMessages(Object memoryId, List messages) {
String key = CHAT_MEMORY_PREFIX + memoryId;
// 批量写入 + 过期时间设置
redisTemplate.opsForList().rightPushAll(key, serialize(messages));
redisTemplate.expire(key, 7, TimeUnit.DAYS);
}
}
```
#### ⚡ 性能优化策略
- **批量操作** - 使用 `LRANGE` + `LTRIM` 替代逐条 `LPOP`
- **连接池** - Lettuce 连接池配置,支持高并发
- **过期策略** - 自动清理过期对话,节省存储
- **序列化优化** - Jackson 高性能 JSON 序列化
---
### 5. 可视化工作流引擎
#### 🎨 拓扑排序执行
基于 **Kahn 算法**的工作流 DAG 执行引擎:
```java
private List topologicalSort(WorkflowDefinition definition) {
Map inDegree = new HashMap<>();
Map> graph = new HashMap<>();
// 构建依赖图
for (WorkflowEdge edge : definition.getEdges()) {
graph.computeIfAbsent(edge.getSource(), k -> new ArrayList<>())
.add(edge.getTarget());
inDegree.merge(edge.getTarget(), 1, Integer::sum);
}
// Kahn 算法拓扑排序
Queue queue = new LinkedList<>();
for (WorkflowNode node : definition.getNodes()) {
if (inDegree.getOrDefault(node.getId(), 0) == 0) {
queue.offer(node);
}
}
List result = new ArrayList<>();
while (!queue.isEmpty()) {
WorkflowNode node = queue.poll();
result.add(node);
for (String nextId : graph.getOrDefault(node.getId(), Collections.emptyList())) {
int degree = inDegree.merge(nextId, -1, Integer::sum);
if (degree == 0) {
queue.offer(findNodeById(definition, nextId));
}
}
}
return result;
}
```
#### 🔧 7 种节点类型
| 节点类型 | 功能 | 应用场景 |
|---------|------|---------|
| 🟢 **开始节点** | 工作流入口,接收输入参数 | 所有工作流必须 |
| 🔵 **LLM 节点** | 调用大语言模型生成内容 | 文本生成、内容创作 |
| 🟡 **条件节点** | 根据条件判断执行分支 | 流程控制、决策树 |
| 🟠 **工具节点** | 调用内置或自定义工具 | 外部服务调用 |
| 🟣 **代码节点** | 执行 JavaScript 代码 | 数据处理、计算 |
| 🔴 **HTTP 节点** | 调用外部 REST API | 第三方集成 |
| ⚫ **结束节点** | 工作流出口,返回结果 | 结束标识 |
---
### 6. Function Calling 工具系统
#### 🔧 自动注册机制
基于 **Spring IoC** 的工具自动发现与注册:
```java
@Component
public class ToolRegistry {
private final Map builtinTools = new ConcurrentHashMap<>();
@Autowired(required = false)
private List toolExecutors; // Spring 自动注入所有实现
@PostConstruct
public void init() {
if (toolExecutors != null) {
for (ToolExecutor executor : toolExecutors) {
registerBuiltin(executor);
log.info("📦 注册工具: {} - {}", executor.getName(), executor.getDescription());
}
}
log.info("✅ 工具注册中心初始化完成,已注册 {} 个工具", builtinTools.size());
}
}
```
#### 🎯 工具调用流程
```
用户输入 → LLM 判断 → 检测工具调用标记
↓
[TOOL_CALL]{
"tool": "weather_query",
"params": {"city": "北京"}
}[/TOOL_CALL]
↓
解析 JSON → 查找工具 → 执行工具
↓
工具返回结果
↓
结果整合 → LLM 生成回复 → 返回用户
```
#### 📝 开发自定义工具
只需实现 `ToolExecutor` 接口,Spring 自动注册:
```java
@Component
public class WeatherToolExecutor implements ToolExecutor {
@Override
public String getName() {
return "weather_query";
}
@Override
public String getDescription() {
return "查询指定城市的实时天气和未来天气预报";
}
@Override
public String getParametersSchema() {
return """
{
"type": "object",
"properties": {
"city": {"type": "string", "description": "城市名称"}
},
"required": ["city"]
}
""";
}
@Override
public ToolResult execute(ToolContext context, Map params) {
String city = (String) params.get("city");
String weatherData = callWeatherAPI(city);
return ToolResult.success(weatherData);
}
}
```
---
### 7. 多模型适配与降级
#### 🤖 统一模型接口
基于 **LangChain4j** 的统一抽象层:
```java
// 支持多种模型提供商
ChatLanguageModel model = switch (provider) {
case "dashscope" -> DashScopeChatModel.builder()
.apiKey(apiKey)
.modelName(modelName)
.build();
case "openai" -> OpenAiChatModel.builder()
.apiKey(apiKey)
.modelName(modelName)
.build();
case "ollama" -> OllamaChatModel.builder()
.baseUrl(baseUrl)
.modelName(modelName)
.build();
default -> throw new IllegalArgumentException("不支持的模型: " + provider);
};
```
#### 🔄 智能降级策略
- **主模型失败** → 自动切换备用模型
- **配置热更新** → 模型配置变更无需重启
- **Token 统计** → 精确的 Token 使用量统计
- **成本控制** → 基于 Token 的成本监控
---
- 准确率提升:35% (引入重排序后)
### 2. 可视化工作流引擎
#### 🎯 核心挑战
- **问题**:如何设计一个既灵活又易用的工作流执行引擎
- **解决方案**:
```java
// 拓扑排序 + 依赖解析
1. DAG图构建与环检测
2. 节点依赖关系自动解析
3. 变量作用域与表达式求值
4. 条件分支的动态路由
```
#### 💡 创新点
- **表达式引擎**:支持复杂的JavaScript表达式求值
- **节点抽象**:统一的节点执行接口,易于扩展
- **错误恢复**:支持节点级别的重试和降级策略
- **版本管理**:工作流版本控制,支持回滚
**代码示例**:
```java
@Override
public WorkflowResult execute(Long workflowId, Map input) {
// 1. 加载工作流定义
WorkflowDefinition definition = loadWorkflow(workflowId);
// 2. 拓扑排序
List sortedNodes = topologicalSort(definition.getNodes());
// 3. 执行节点
WorkflowContext context = new WorkflowContext(input);
for (WorkflowNode node : sortedNodes) {
NodeExecutor executor = getExecutor(node.getType());
executor.execute(node, context);
}
return WorkflowResult.success(context.getFinalOutput());
}
```
### 3. Function Calling工具系统
#### 🎯 核心挑战
- **问题**:如何让LLM自动判断何时调用工具,并正确解析参数
- **解决方案**:
```java
// 工具调用流程
1. 提示词工程:在系统提示词中注入工具说明
2. 标记检测:正则匹配 [TOOL_CALL]{...}[/TOOL_CALL]
3. 参数解析:JSON反序列化工具参数
4. 结果整合:将工具结果融入对话上下文
```
#### 💡 创新点
- **自动注册机制**:Spring自动扫描并注册工具执行器
- **工作流集成**:工作流可作为工具被智能体调用
- **异步执行**:支持长时间运行的工具任务
- **调用链追踪**:完整的工具调用日志记录
### 4. 分布式对话记忆
#### 🎯 核心挑战
- **问题**:如何在分布式环境下高效管理对话历史
- **解决方案**:
```java
// Redis + LangChain4j ChatMemory
1. 使用Redis作为分布式存储
2. 基于会话ID的记忆隔离
3. LRU策略控制记忆大小
4. 支持历史轮数配置
```
#### 💡 创新点
- **ThreadLocal优化**:线程级别的重排序分数缓存
- **批量操作**:使用LRANGE+LTRIM替代逐条LPOP
- **内存控制**:智能的对话历史截断策略
### 5. 多模型适配层
#### 🎯 核心挑战
- **问题**:不同大模型的API差异大,如何统一适配
- **解决方案**:
```java
// 基于LangChain4j的统一抽象
1. ChatLanguageModel接口统一调用
2. 模型配置的动态加载
3. 参数的智能映射
4. 错误的统一处理
```
#### 💡 创新点
- **配置热更新**:模型配置变更无需重启
- **降级策略**:主模型失败自动切换备用模型
- **Token统计**:精确的Token使用量统计
---
## 🚀 快速开始
### 环境要求
| 组件 | 版本要求 | 说明 |
|------|---------|------|
| **JDK** | 17+ | Spring Boot 3.x 必须 |
| **Node.js** | 18+ | 前端构建工具 Vite 要求 |
| **MySQL** | 8.0+ | 业务数据存储 |
| **Redis** | 7.0+ | 对话记忆与缓存 |
| **Elasticsearch** | 8.14+ | 向量检索引擎 |
| **MinIO** | 最新版 | 文档与图片存储(可选) |
| **Maven** | 3.8+ | 后端构建工具 |
### 后端启动
```bash
# 1. 克隆项目
git clone https://github.com/yourusername/lynx-ai.git
cd lynx-ai
# 2. 配置数据库
# 创建数据库
mysql -u root -p
CREATE DATABASE `ai-agent` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE `ai-agent`;
# 导入 SQL 脚本(在 docs/sql/ 目录下)
source docs/sql/schema.sql;
# 3. 修改配置文件
cd lynx-ai-parent/lynx-ai-web/src/main/resources
# 编辑 application.properties,配置:
# - MySQL 连接信息
# - Redis 连接信息
# - Elasticsearch 连接信息
# - MinIO 连接信息(可选)
# - LLM API Key(阿里百炼或 OpenAI)
# 详见:docs/01-快速开始.md 和 docs/模型配置指南.md
# 4. 编译运行
cd lynx-ai-parent
mvn clean install -DskipTests
cd lynx-ai-web
mvn spring-boot:run
# 5. 验证启动
# 浏览器访问 http://localhost:8080
# 查看日志确认各组件连接成功
```
### 前端启动
```bash
# 1. 进入前端目录
cd lynx-ai-ui
# 2. 安装依赖(推荐使用 npm)
npm install
# 或使用 pnpm(更快)
# pnpm install
# 3. 配置后端地址(如需修改)
# 编辑 .env.development 文件
# VITE_API_BASE_URL=http://localhost:8080
# 4. 启动开发服务器
npm run dev
# 5. 访问应用
# 浏览器打开 http://localhost:5173
# 默认账号: admin / admin123
```
### Docker 部署
```bash
# 注意:Docker 部署配置正在完善中
# 当前推荐使用本地部署方式
# Docker 配置将在后续版本提供
```
---
## 📊 系统截图
### 智能体管理

### 知识库管理

### 工作流编排

### 对话界面

---
## 📈 性能指标
| 指标 | 数值 | 说明 |
|-----|------|------|
| 对话响应延迟 | < 500ms | P95,不含LLM推理时间 |
| RAG检索延迟 | < 200ms | P95,包含重排序 |
| 工作流执行 | < 1s | 简单工作流(3-5个节点) |
| 并发支持 | 1000+ | 单实例并发对话数 |
| 向量检索QPS | 5000+ | Elasticsearch集群 |
---
## 🗺️ 版本路线图
### ✅ v1.0 (当前版本)
- [x] **智能体管理** - 创建、配置、发布智能体
- [x] **知识库系统** - RAG检索、文档管理、向量存储
- [x] **工作流引擎** - 可视化编排、7种节点类型
- [x] **Function Calling** - 6个内置工具、自定义工具
- [x] **对话管理** - 流式输出、历史记录、多会话
- [x] **API发布** - RESTful接口、Token认证
- [x] **MinIO集成** - 文档与图片对象存储
---
## 🤝 贡献指南
我们欢迎所有形式的贡献!
1. Fork 本仓库
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 提交 Pull Request
详见 [贡献指南](./CONTRIBUTING.md)
---
## 📄 开源协议
本项目采用 [Apache 2.0](LICENSE) 开源协议。
---
## 🙏 致谢
感谢以下开源项目:
- [LangChain4j](https://github.com/langchain4j/langchain4j) - Java AI应用框架
- [Spring Boot](https://spring.io/projects/spring-boot) - 企业级应用框架
- [Vue.js](https://vuejs.org/) - 渐进式JavaScript框架
- [Element Plus](https://element-plus.org/) - Vue 3 UI组件库
- [Elasticsearch](https://www.elastic.co/) - 分布式搜索引擎
---
## 📞 联系与支持
### 📖 文档资源
- **完整教程**: [docs/README.md](./docs/README.md)
- **快速开始**: [docs/01-快速开始.md](./docs/01-快速开始.md)
- **模型配置**: [docs/模型配置指南.md](./docs/模型配置指南.md)
- **常见问题**: [docs/FAQ.md](./docs/FAQ.md)
### 🐛 问题反馈
- **GitHub Issues**: [提交问题](https://github.com/yourusername/lynx-ai/issues)
- **GitHub Discussions**: [参与讨论](https://github.com/yourusername/lynx-ai/discussions)
### 💬 技术交流
- **技术支持**: 查看文档或提交 Issue
- **功能建议**: 通过 Discussions 分享你的想法
---
**如果这个项目对你有帮助,请给我们一个 ⭐️ Star!**
Made with ❤️ by Lynx AI Team