Solon-AI 核心模块详解

Solon-AI 核心模块详解

【免费下载链接】solon-ai Java AI & MCP 应用开发框架(LLM,Function Call,RAG,Embedding,Reranking,Flow,MCP Server,Mcp Client,Mcp Proxy)。同时兼容 java8 ~ java24。也可嵌入到 SpringBoot2、jFinal、Vert.x 等框架中使用。 【免费下载链接】solon-ai 项目地址: https://gitcode.com/opensolon/solon-ai

Solon-AI 是一个模块化的 AI 开发框架,提供了从基础 AI 能力封装到高级流编排、多方言 LLM 支持以及标准化通信协议的全套解决方案。本文详细解析其四大核心模块:solon-ai-core(基础能力封装)、solon-ai-flow(AI 流编排框架)、solon-ai-llm-dialects(多方言 LLM 支持)和 solon-ai-mcp(MCP 协议实现),帮助开发者快速掌握其设计理念与技术实现。

solon-ai-core:基础 AI 能力封装

Solon-AI 的核心模块 solon-ai-core 提供了基础 AI 能力的封装,包括配置管理、模型调用、媒体处理、嵌入计算等功能。以下是对其核心功能的详细解析。

配置管理 (AiConfig)

AiConfig 是基础配置类,用于管理 AI 服务的通用配置项,如 API 密钥、URL、提供者、模型等。以下是其核心方法:

public class AiConfig {
    public String getApiKey();
    public String getApiUrl();
    public String getProvider();
    public String getModel();
    public Duration getTimeout();
    public Proxy getProxy();
    public void setApiKey(String apiKey);
    public void setApiUrl(String apiUrl);
    public void setProvider(String provider);
    public void setModel(String model);
    public void setTimeout(Duration timeout);
    public void setProxy(Proxy proxy);
}

图像处理 (ImageModel)

ImageModel 封装了图像生成和处理的能力,支持通过 ImageRequestDesc 发起请求并获取 ImageResponse。以下是其核心方法:

public class ImageModel implements AiModel {
    public ImageRequestDesc prompt(String prompt);
    public static Builder of(ImageConfig config);
    public static Builder of(String apiUrl);
}
示例代码
ImageModel model = ImageModel.of("https://api.example.com")
    .apiKey("your-api-key")
    .model("dall-e")
    .build();

ImageResponse response = model.prompt("A futuristic cityscape").call();

嵌入计算 (EmbeddingModel)

EmbeddingModel 提供了文本嵌入的能力,支持通过 EmbeddingRequestDesc 发起请求并获取 EmbeddingResponse。以下是其核心方法:

public class EmbeddingModel implements AiModel {
    public void embed(List<Document> documents);
    public EmbeddingRequestDesc input(String... input);
    public static Builder of(EmbeddingConfig config);
    public static Builder of(String apiUrl);
}
示例代码
EmbeddingModel model = EmbeddingModel.of("https://api.example.com")
    .apiKey("your-api-key")
    .model("text-embedding-ada-002")
    .build();

EmbeddingResponse response = model.input("Hello, world!").call();

媒体处理 (Text, Audio, Image, Video)

solon-ai-core 提供了对多种媒体类型的支持,包括文本、音频、图像和视频。以下是其核心类:

public class Text implements AiMedia {
    public static Text of(boolean isBase64, String content);
    public String getContent();
    public Image toImage();
}

public class Audio extends AbstractMedia implements AiMedia {
    public static Audio ofUrl(String url);
    public static Audio ofBase64(String base64String);
}

public class Image extends AbstractMedia implements AiMedia {
    public static Image ofUrl(String url);
    public static Image ofBase64(String base64String);
}

public class Video extends AbstractMedia implements AiMedia {
    public static Video ofUrl(String url);
    public static Video ofBase64(String base64String);
}
示例代码
Image image = Image.ofUrl("https://example.com/image.jpg");
String base64Image = image.toDataString(true);

总结

solon-ai-core 通过模块化的设计,提供了灵活且强大的基础 AI 能力封装,开发者可以轻松集成到自己的项目中。无论是图像处理、嵌入计算还是媒体管理,都能通过简洁的 API 实现高效调用。

solon-ai-flow:AI 流编排框架

Solon-AI 的 solon-ai-flow 模块是一个基于 solon-flow 构建的 AI 流编排框架,旨在通过灵活的配置和组件化设计,简化 AI 能力的集成与编排。它支持 YAML 或 JSON 配置,类似于 docker-compose 的风格,但专注于 AI 任务的编排和执行。

核心设计理念

solon-ai-flow 的设计围绕以下几个核心概念展开:

  1. 组件化设计
    将 AI 能力封装为 TaskComponent 组件,分为输入输出组件、属性组件等。这些组件通过 FlowContext 共享数据和中转属性,实现灵活的编排。

  2. 流式编排
    使用 solon-flow 的编排能力,将组件串联起来,形成完整的 AI 任务流。每个组件可以动态获取上下文数据,并根据需求执行操作。

  3. 动态配置
    支持通过 YAML 或 JSON 文件定义任务流,便于快速调整和扩展。

组件分类与功能

solon-ai-flow 提供了多种内置组件,涵盖输入、输出、模型调用、存储等场景。以下是部分核心组件的功能说明:

组件类型功能描述
InputComponent负责数据输入,如 WebInputCom 接收网络请求数据并转为输出字段。
OutputComponent负责数据输出,如 ConsoleOutputCom 将结果输出到控制台。
ModelComponent调用 AI 模型,如 ChatModelCom 调用聊天模型并处理上下文数据。
RepositoryCom数据存储组件,如 InMemoryRepositoryCom 提供内存存储功能。

示例场景

1. 聊天任务流

以下是一个简单的聊天任务流配置示例,展示了如何通过 YAML 定义任务流:

id: chat_case1
layout:
  - type: "start"
  - task: "@VarInput"
    meta:
      message: "你好"
  - task: "@ChatModel"
    meta:
      systemPrompt: "你是个聊天助手"
      stream: false
      chatConfig:
        provider: "ollama"
        model: "qwen2.5:1.5b"
        apiUrl: "http://127.0.0.1:11434/api/chat"
  - task: "@ConsoleOutput"
2. 知识库检索任务流

以下是一个知识库检索任务流配置示例,展示了如何结合嵌入模型和存储组件:

id: rag_case1
layout:
  - type: "start"
  - task: "@VarInput"
    meta:
      message: "Solon 是谁开发的?"
  - task: "@EmbeddingModel"
    meta:
      embeddingConfig:
        provider: "ollama"
        model: "bge-m3"
        apiUrl: "http://127.0.0.1:11434/api/embed"
  - task: "@InMemoryRepository"
    meta:
      documentSources:
        - "https://solon.noear.org/article/about?format=md"
  - task: "@ChatModel"
    meta:
      systemPrompt: "你是个知识库"
      stream: false
      chatConfig:
        provider: "ollama"
        model: "qwen2.5:1.5b"
        apiUrl: "http://127.0.0.1:11434/api/chat"
  - task: "@ConsoleOutput"

技术实现细节

1. 组件执行流程

每个组件的执行流程如下:

mermaid

2. 上下文共享机制

FlowContext 是任务流中数据共享的核心,支持以下操作:

  • 存储和获取输入输出数据。
  • 动态添加或获取属性。
  • 跨组件传递状态。

总结

solon-ai-flow 通过组件化和流式编排的设计,为 AI 任务的开发和集成提供了高效、灵活的解决方案。无论是简单的聊天任务,还是复杂的知识库检索,都可以通过配置快速实现。开发者可以通过扩展组件或调整配置,轻松适应不同的业务场景。

solon-ai-llm-dialects:多方言 LLM 支持

Solon-AI 的 solon-ai-llm-dialects 模块是一个专注于多方言 LLM(大语言模型)支持的核心组件。它通过抽象化的设计,为不同的 LLM 服务(如 Dashscope、OpenAI 和 Ollama)提供了统一的接口实现,使开发者能够轻松切换和扩展不同的 LLM 方言。

模块架构

solon-ai-llm-dialects 模块的架构设计遵循了抽象与实现分离的原则。每个方言的实现都继承自对应的抽象基类,确保接口的一致性和扩展性。以下是模块的核心架构图:

mermaid

支持的方言

目前,solon-ai-llm-dialects 模块支持以下三种方言:

  1. Dashscope

    • 提供聊天(Chat)、嵌入(Embedding)、图像生成(Image)和重排序(Reranking)功能。
    • 核心类:DashscopeChatDialectDashscopeEmbeddingDialectDashscopeImageDialectDashscopeRerankingDialect
  2. OpenAI

    • 提供聊天(Chat)、嵌入(Embedding)、图像生成(Image)和重排序(Reranking)功能。
    • 核心类:OpenaiChatDialectOpenaiEmbeddingDialectOpenaiImageDialectOpenaiRerankingDialect
  3. Ollama

    • 提供聊天(Chat)、嵌入(Embedding)和图像生成(Image)功能。
    • 核心类:OllamaChatDialectOllamaEmbeddingDialectOllamaImageDialect

功能实现

每个方言的实现都遵循以下模式:

  1. 单例模式:通过 getInstance() 方法获取方言实例。
  2. 请求构建:通过 buildRequestJson() 方法将输入参数转换为目标方言的请求格式。
  3. 响应解析:通过 parseResponseJson() 方法将目标方言的响应解析为统一的格式。

以下是一个 DashscopeChatDialect 的代码示例:

public class DashscopeChatDialect extends AbstractChatDialect {
    public static DashscopeChatDialect getInstance() {
        return SingletonHolder.INSTANCE;
    }

    @Override
    public String buildRequestJson(ChatConfig config, ChatOptions options, List<ChatMessage> messages, boolean isStream) {
        // 构建 Dashscope 格式的请求 JSON
        return "{\"messages\": [...]}";
    }

    private static class SingletonHolder {
        private static final DashscopeChatDialect INSTANCE = new DashscopeChatDialect();
    }
}

使用场景

solon-ai-llm-dialects 模块适用于以下场景:

  • 多方言切换:开发者可以根据需求快速切换不同的 LLM 方言。
  • 功能扩展:通过继承抽象基类,可以轻松扩展新的方言支持。
  • 统一接口:所有方言的实现都遵循相同的接口规范,降低了使用复杂度。

总结

solon-ai-llm-dialects 模块通过抽象化的设计和统一的接口实现,为 Solon-AI 提供了强大的多方言 LLM 支持能力。无论是 Dashscope、OpenAI 还是 Ollama,开发者都可以通过简单的配置和调用,实现高效的语言模型集成。

solon-ai-mcp:MCP 协议实现

Solon-AI 的 solon-ai-mcp 模块是 Model Context Protocol (MCP) 的核心实现,提供了一套标准化的协议,用于在 AI 模型与服务器之间进行高效通信。MCP 协议的设计目标是简化 AI 开发中的交互流程,支持同步和异步操作,并提供了丰富的功能扩展点。

MCP 协议概述

MCP 是一种基于 JSON-RPC 的协议,定义了客户端与服务器之间的通信规范。它支持以下核心功能:

  • 工具调用:服务器可以暴露工具(Tools)供客户端调用,例如数据查询、模型推理等。
  • 资源管理:支持资源的订阅、取消订阅和读取操作。
  • 提示管理:提供提示(Prompts)的定义和调用能力。
  • 日志与监控:支持日志消息的通知和监控。

以下是一个 MCP 协议的典型交互流程: mermaid

核心组件

solon-ai-mcp 模块的核心组件包括:

1. McpServer

McpServer 是 MCP 协议的服务器实现,支持同步和异步两种模式:

  • 同步模式:适用于阻塞式操作,适合简单的工具调用和资源管理。
  • 异步模式:基于响应式编程,适用于高并发场景。

以下是一个同步服务器的构建示例:

McpServer.SyncSpecification spec = McpServer.sync()
    .serverInfo("MyServer", "1.0")
    .capabilities(serverCapabilities)
    .tool(toolSpec)
    .build();
McpSyncServer server = spec.build();
2. McpClient

McpClient 是 MCP 协议的客户端实现,支持与服务器的交互。客户端可以调用工具、订阅资源和管理提示:

McpClient.SyncSpec spec = McpClient.sync()
    .clientInfo("MyClient", "1.0")
    .capabilities(clientCapabilities)
    .build();
McpSyncClient client = spec.build();
3. Transport 层

MCP 协议支持多种传输方式,包括:

  • SSE (Server-Sent Events):用于实时通知和长连接。
  • Stdio:适用于命令行工具和本地调试。
  • HTTP:标准的 HTTP 请求/响应模式。

以下是一个 SSE 传输的配置示例:

WebRxSseServerTransportProvider transport = WebRxSseServerTransportProvider.builder()
    .sseEndpoint("/mcp/sse")
    .messageEndpoint("/mcp/message")
    .build();

功能扩展

solon-ai-mcp 提供了丰富的扩展点,开发者可以通过以下方式定制功能:

  1. 自定义工具:通过实现 FunctionTool 接口,定义新的工具逻辑。
  2. 资源管理:通过 ResourceProvider 接口,支持自定义资源的订阅和读取。
  3. 提示管理:通过 PromptProvider 接口,定义动态提示内容。

以下是一个自定义工具的示例:

public class MyTool implements FunctionTool {
    @Override
    public String name() {
        return "my_tool";
    }

    @Override
    public CallToolResult call(Map<String, Object> args) {
        return new CallToolResult("Result from MyTool");
    }
}

实际应用场景

MCP 协议在以下场景中表现优异:

  1. AI 模型集成:将 AI 模型封装为工具,供客户端调用。
  2. 实时数据订阅:通过资源订阅机制,实现数据的实时推送。
  3. 动态提示生成:根据上下文动态生成提示内容。

以下是一个完整的 MCP 服务器启动示例:

McpServer.SyncSpecification spec = McpServer.sync()
    .serverInfo("DemoServer", "1.0")
    .tool(new MyTool())
    .build();
McpSyncServer server = spec.build();
server.start();

通过 solon-ai-mcp,开发者可以快速构建高效的 AI 交互系统,同时享受协议标准化带来的灵活性和可扩展性。

总结

Solon-AI 通过模块化设计实现了 AI 开发的全链路支持:

  1. 基础能力solon-ai-core 封装配置管理、模型调用和媒体处理;
  2. 流程编排solon-ai-flow 提供组件化、可配置的 AI 任务流;
  3. 多方言适配solon-ai-llm-dialects 统一 OpenAI、Dashscope 等 LLM 接口;
  4. 通信协议solon-ai-mcp 标准化模型交互流程。 这些模块共同构建了一个灵活、高效的 AI 开发生态,适用于从简单模型调用到复杂业务编排的各类场景。

【免费下载链接】solon-ai Java AI & MCP 应用开发框架(LLM,Function Call,RAG,Embedding,Reranking,Flow,MCP Server,Mcp Client,Mcp Proxy)。同时兼容 java8 ~ java24。也可嵌入到 SpringBoot2、jFinal、Vert.x 等框架中使用。 【免费下载链接】solon-ai 项目地址: https://gitcode.com/opensolon/solon-ai

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值