快速开始
从基础概念 -> 核心框架 -> 实战开发的完整指南
Large Language Model,如 GPT-4、Claude、Gemini。基于 Transformer 架构,通过海量文本训练,能理解和生成自然语言。
核心概念文本的最小处理单位,不等于一个汉字或单词。中文约 1.5-2 字/token,英文约 3-4 字符/token。影响计费和上下文长度。
计量单位发送给模型的输入文本,包括 System Prompt(系统指令)和 User Message(用户消息)。Prompt 工程是提升输出质量的关键。
交互基础模型一次能处理的最大 token 数量。GPT-4 Turbo 支持 128K,Claude 3 支持 200K。超出后早期内容被截断。
限制参数将文本转化为高维向量(浮点数数组),语义相似的文本向量距离更近。是语义搜索和 RAG 的基础技术。
向量表示控制输出随机性的参数,范围 0~2。0 = 确定性输出(适合代码),1 = 平衡,>1 = 更具创意但可能不稳定。
生成参数在预训练模型基础上,使用特定领域数据继续训练,使模型更擅长特定任务。成本高但效果针对性强。
训练方式Retrieval-Augmented Generation,先从知识库检索相关文档片段,再将其注入 Prompt,让模型基于私有数据回答。
架构模式能自主规划、调用工具(Tool)、执行多步骤任务的 AI 系统。通过 ReAct 等推理框架循环执行直到目标完成。
高级应用专门存储和检索 Embedding 向量的数据库,支持语义相似度搜索(ANN 近似最近邻)。如 Chroma、Pinecone、PGVector。
存储组件让模型能够调用外部函数(API、数据库、计算器等)的能力。模型返回 JSON 结构,由宿主程序执行并将结果返回模型。
扩展能力使用训练好的模型生成输出的过程,区别于训练过程。API 调用即推理。本地推理可用 Ollama + llama.cpp。
运行方式| 模型/服务 | 提供商 | 特点 | Java 接入方式 |
|---|---|---|---|
| GPT-4o | OpenAI | 多模态,速度快,支持 Function Calling | OpenAI Java SDK / LangChain4j |
| Claude 3.5 Sonnet | Anthropic | 长上下文 200K,代码能力强 | Anthropic Java SDK / Spring AI |
| Gemini 1.5 Pro | 超长上下文 1M,多模态 | Google AI Java SDK | |
| Llama 3 | Meta(开源) | 可本地部署,无数据隐私风险 | Ollama + LangChain4j |
| Qwen2 | 阿里(开源) | 中文优化,多尺寸可选 | Ollama / DashScope API |
Java 生态最成熟的 AI 框架,对标 Python LangChain。支持 15+ 模型、10+ 向量库,提供 Chain、RAG、Agent、Tool 等高级抽象。
★★★★★ 推荐独立使用Spring 官方 AI 框架,与 Spring Boot 深度集成,自动配置极简。适合已有 Spring 项目。功能在持续完善中。
★★★★ 推荐Spring 生态OpenAI 官方 Java 客户端,仅限 OpenAI/Azure OpenAI,功能精简但官方维护,API 兼容性最好。
★★★OpenAI 专用本地模型调用客户端,配合 Ollama 服务使用,适合本地推理场景,无需联网。
★★★本地部署langchain4j-open-ai 或 langchain4j-ollama,核心包 langchain4j-core1. 基础对话调用
// 添加依赖:dev.langchain4j:langchain4j-open-ai:0.31.0 import dev.langchain4j.model.openai.OpenAiChatModel; import dev.langchain4j.model.chat.ChatLanguageModel; ChatLanguageModel model = OpenAiChatModel.builder() .apiKey("your-api-key") .modelName("gpt-4o") .temperature(0.7) .build(); String response = model.generate("用 Java 写一个冒泡排序"); System.out.println(response);
2. AI Service 接口(推荐方式)
// 定义 AI 服务接口 interface AssistantService { @SystemMessage("你是一个专业的 Java 技术专家,用简洁的中文回答") String chat(@UserMessage String userMessage); // 支持结构化输出 @UserMessage("分析这段代码的问题:{{code}}") CodeReview reviewCode(@V("code") String code); } // 创建代理实例 AssistantService assistant = AiServices.builder(AssistantService.class) .chatLanguageModel(model) .chatMemory(MessageWindowChatMemory.withMaxMessages(10)) .build(); String answer = assistant.chat("Java 中 volatile 有什么作用?");
3. Tool(工具调用)
// 定义工具类 class DatabaseTool { @Tool("根据用户ID查询用户信息") public String getUserById(@P("用户ID") long userId) { return userRepository.findById(userId).toString(); } } // 注册工具到 AI Service AssistantService assistant = AiServices.builder(AssistantService.class) .chatLanguageModel(model) .tools(new DatabaseTool()) .build();
spring-ai-openai-spring-boot-starter,需要 Spring Boot 3.2+application.yml 配置
spring:
ai:
openai:
api-key: ${OPENAI_API_KEY}
chat:
options:
model: gpt-4o
temperature: 0.7
embedding:
options:
model: text-embedding-3-smallController 中直接注入使用
@RestController @RequestMapping("/ai") public class AiController { @Autowired private ChatClient chatClient; @GetMapping("/chat") public String chat(@RequestParam String message) { return chatClient.prompt() .system("你是专业的 Java 开发助手") .user(message) .call() .content(); } @GetMapping(value = "/stream", produces = "text/event-stream") public Flux<String> stream(@RequestParam String message) { return chatClient.prompt() .user(message) .stream() .content(); } }
// LangChain4j RAG 实现示例 // Step 1: 加载文档并分割 Document document = FileSystemDocumentLoader.loadDocument("knowledge.pdf"); DocumentSplitter splitter = DocumentSplitters.recursive(500, 50); List<TextSegment> segments = splitter.split(document); // Step 2: 向量化并存储 EmbeddingModel embeddingModel = OpenAiEmbeddingModel.withApiKey(apiKey); EmbeddingStore<TextSegment> store = new InMemoryEmbeddingStore<>(); EmbeddingStoreIngestor ingestor = EmbeddingStoreIngestor.builder() .embeddingModel(embeddingModel) .embeddingStore(store) .build(); ingestor.ingest(document); // Step 3: 构建 RAG 检索器 ContentRetriever retriever = EmbeddingStoreContentRetriever.builder() .embeddingStore(store) .embeddingModel(embeddingModel) .maxResults(3) .minScore(0.6) .build(); // Step 4: 注入 AI Service interface KnowledgeAssistant { String answer(@UserMessage String question); } KnowledgeAssistant assistant = AiServices.builder(KnowledgeAssistant.class) .chatLanguageModel(chatModel) .contentRetriever(retriever) .build();
Reason + Act 循环:思考 -> 选择工具 -> 执行 -> 观察结果 -> 继续思考,直到任务完成。LangChain4j 内置支持。
Web 搜索、数据库查询、代码执行、文件读写、HTTP API 调用、计算器、发送邮件/消息等。
短期记忆(对话历史)用 MessageWindowChatMemory,长期记忆可结合 Redis 或向量库持久化存储。
一个 Orchestrator Agent 负责规划任务,多个 Worker Agent 各司其职(代码 Agent、搜索 Agent 等)。
// 定义多工具 Agent class SearchTool { @Tool("搜索互联网上的最新信息") String search(@P("搜索关键词") String query) { /* ... */ } } class CodeTool { @Tool("执行 Java 代码并返回结果") String execute(@P("Java 代码字符串") String code) { /* ... */ } } interface ResearchAgent { @SystemMessage("你是一个研究助手,可以搜索信息和执行代码来回答问题") String research(@UserMessage String task); } ResearchAgent agent = AiServices.builder(ResearchAgent.class) .chatLanguageModel(model) .tools(new SearchTool(), new CodeTool()) .chatMemory(MessageWindowChatMemory.withMaxMessages(20)) .build();
| 项目类型 | 核心技术栈 | 关键点 |
|---|---|---|
| 企业知识库问答 | Spring Boot + LangChain4j + PGVector | 文档解析、Chunk 策略、多租户隔离 |
| AI 客服机器人 | Spring AI + Redis Memory + WebSocket | 意图识别、对话管理、人工转接 |
| 代码审查助手 | LangChain4j + GitHub API | PR 触发、差异分析、安全扫描 |
| 数据报告生成 | Spring AI + MySQL + 结构化输出 | Text2SQL、图表生成、定时推送 |
| 本地私有部署 | Ollama + LangChain4j + Chroma | 模型选型、GPU 配置、性能调优 |
推荐项目依赖(pom.xml)
<!-- Spring Boot 基础 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- LangChain4j OpenAI --> <dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-open-ai-spring-boot-starter</artifactId> <version>0.31.0</version> </dependency> <!-- 向量数据库:本地用 Chroma --> <dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-chroma</artifactId> <version>0.31.0</version> </dependency> <!-- 文档解析 --> <dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-document-parser-apache-pdfbox</artifactId> <version>0.31.0</version> </dependency>
