1. ChatModel:最核心的对话模型接口,负责接收用户消息,并返回 AI 的回复,是所有对话的基础。
2. 多模态 :模型能处理的不只是文本,还包括图像等。通过不同类型的 Message(如 UserMessage)来封装这些输入内容。
3. 系统提示词 :用来设定 AI 的角色、背景或规则。可以通过 Resource 引用外部的文本文件,然后放入 PromptTemplate 或消息工厂中,实现提示词与代码分离。
4. AI Service :框架的精髓。通过反射和动态代理,你定义一个接口,框架就自动帮你生成实现。它不仅是方法扩展,还能让你的接口方法返回 String、AiMessage,甚至是自定义的 POJO 类(配合结构化输出),让调用 LLM 像调用本地方法一样优雅。
5. 对话记忆 :实现多轮对话的基础。集成非常简洁,通过 ChatMemory 组件,它能自动获取聊天记录、添加新消息、拼接上下文,并记录 AI 的回复。支持滑动窗口、Token 截断等策略。
6. 结构化输出:把 LLM 生成的自由文本,转换成 Java 对象。有三种实现方式:
-
Prompt 模式:在提示词里要求 AI 返回特定格式(如 JSON),我们手动解析。
-
JSON Schema 模式(最精确):在请求中直接附上 JSON Schema,强制模型输出符合 Schema 的 JSON,再自动解析。
-
AI Service 模式:直接定义接口方法返回 POJO 类,框架底层自动帮你完成 Schema 生成、调用和解析全过程。
7. RAG 知识库:检索增强生成。在向 AI 提问前,先从外部知识库(如向量数据库)中,检索出与问题相关的文档片段,把这些片段和用户原始问题拼在一起,再发给 AI,让 AI 基于提供的知识来回答,有效减少模型"幻觉"。
8. 文档加载与切片:RAG 的上游环节。从 PDF、Word、网页等不同数据源加载文档,并按一定策略(如按段落、按字数)将长文档切分成适合向量化的小块(Chunks),以便后续检索。
9. 工具调用 :让 AI 能调用外部函数或 API。用 @Tool 注解把 Java 方法暴露给模型,模型会在需要时自主决定调用哪个工具、传入什么参数,是连接 LLM 与外部世界的"手脚"。
10. MCP(模型上下文协议) :一种标准化协议,目的是统一 AI 应用调用外部工具的方式。你可以通过 MCP Client 连接到一个 MCP Server ,从 Server 上发现并调用它提供的远程工具,解决了直接使用 @Tool 只能调用本地代码的局限。
11. 护轨:类似于拦截器或过滤器。可以在 AI 的输入或输出环节添加自定义逻辑,比如敏感词过滤、内容安全审核、格式校验等,为生产级应用提供安全保障。
12. 可观测性 :通过监听器(如 ChatModelListener)对模型调用的全过程进行日志记录、性能监控和链路追踪,方便运行时调试和问题定位。
13. 流式输出 :通过 TokenStream 或响应式流(Reactive Streams),将 AI 的回复一个字一个字地推送给前端,实现"打字机"效果,不用等完整结果生成,大幅提升用户体验。
14. Agent(智能代理) :一个能够感知环境、自主规划、调用工具来完成复杂目标的实体。LangChain4j 支持构建单 Agent 和多 Agent 系统,最新的 @Agent 注解能大幅简化开发。未来还会推出可视化的工作流编排工具(类似 LangGraph4j)。
15. 链与工作流:将多个组件(如模型、提示词模板、记忆、工具)按照业务逻辑顺序链接起来,形成一个可执行的流水线,比如"检索 -> 增强 -> 生成"就是一个典型的 RAG 链。
16. 嵌入模型与向量存储:RAG 的基石。嵌入模型负责将文本转化成向量(数学表示),向量数据库(如 Milvus, Redis, Chroma)则负责存储和检索这些向量,实现语义搜索。
17. 框架生态集成 :LangChain4j 可以与 Spring Boot、Quarkus、Micronaut 等主流 Java 框架无缝集成,让你在企业级项目中能像使用普通 Bean 一样使用 AI 组件。