Langchain4j
一、Langchain4j 主要功能
1.与大语言模型(LLM)和向量数据库的便捷交互
- 适用于构建聊天机器人、智能助手、检索问答系统等应用。
2.智能代理、工具调用、检索增强生成(RAG)
- 支持提示词模板创建、聊天记忆管理、输出解析等。
- 为 LLM 操作提供了丰富的扩展能力,包括函数调用和代理执行。
二、核心组件与工具
1. 文档加载器
- 用于从多种来源读取文档(如PDF、Word、网页等),供后续切分和向量化处理。
2. 聊天记忆实现(Chat Memory)
三、提示词(Prompt)
1. 系统提示词(System Message)
- 使用 @SystemMessage 注解,设定 AI 助手角色和能力范围。
- 注意:仅首次对话中发送给大模型;修改提示词会使已有聊天记忆失效。
- 可配置为从资源文件中加载模板。
2. 用户提示词模板(User Message)
- 使用 @UserMessage 获取用户输入。
- 可通过 @V 注解明确指定参数名,便于变量替换。
四、函数调用(Function Calling / Tools)
1. 创建工具类
- 使用 @Tool 注解的方法将被注册为可调用函数。
@Tool(name = "计算总价", value = "根据单价和数量计算商品总价")
public double calcTotal(@P(value = "单价", required = true) double price,
@P(value = "数量", required = true) int count) {
return price * count;
}
五、聊天记忆(Chat Memory)
- 支持多种记忆模式:临时、持久化。
- 可与提示词结合增强多轮对话能力。
六、提示词模板系统
- 支持从 YAML、JSON、静态文件中加载提示模板,支持动态参数注入。
七、RAG:检索增强生成(Retrieval Augmented Generation)
1. 定义
- 在将用户问题发给 LLM 前,先从外部知识库中检索相关信息,并与原始问题一并发送,生成更专业回答。
2. 优缺点对比:
方法 | 优点 | 缺点 | 应用场景 |
---|
RAG | 知识实时更新,不依赖模型训练,成本低 | 两次查询,性能略低 | 客服、法律、医疗、新闻 |
微调 LLM | 准确性高,性能快 | 成本高、更新慢 | 文学创作、规范文档 |
RAG + 微调 | 灵活结合优点 | 实现复杂 | 高准确性且需更新的系统 |
八、RAG 检索方式
1. 全文搜索(关键词匹配)
2. 向量搜索(语义匹配)
- 通过嵌入模型将文本转为向量,计算相似度(如余弦相似度)进行匹配。
3. 混合搜索
九、文本分段与嵌入处理
为什么要分段?
- xLLM 上下文窗口有限。
- 太多上下文会增加响应延迟和成本。
- 精细分段有助于减少幻觉、提高响应质量。
分段 + 嵌入流程:
文档加载 => 文本分段 => 嵌入模型生成向量 => 存入向量数据库
十、检索阶段流程(RAG)
用户查询 => 嵌入为向量 => 相似度匹配 => 返回内容片段 + 原始问题给 LLM => 返回答案
十一、向量数据库 Pinecone 使用
得分含义(Score)
- 衡量查询向量与文档向量的相似程度,通常基于余弦相似度等。
应用:
- minScore 阈值设置可提升结果质量:
- 设置 minScore(0.8):仅返回得分 ≥ 0.8 的结果。
- 可调节准确率与召回率的平衡。
十二、相似度测量方式
名称 | 说明 |
---|
欧几里得距离 | 直线距离 |
曼哈顿距离 | 网格步长之和 |
点积 | 向量乘积,反映方向一致性 |
余弦相似度 | 衡量两个向量夹角,常用于语义匹配 |
十三、文档加载与解析组件
- 文档加载器:支持多种格式的知识源输入。
- 文档解析器:抽取纯文本内容。
- 文档分割器:按段、句等规则拆分文档用于向量化。
十四、流式输出(Streaming)
- LLM 可边生成边输出响应,无需等待全部结果返回。
- 优点:
十五、Ollama 本地部署(配合 Langchain4j)
优势:
- 数据隐私与安全保障
- 支持离线推理,适用于无公网场景
- 大幅降低 LLM 使用成本
- 部署流程简便,支持本地 LLM 模型调用
- 易于根据业务需求定制与扩展