Milvus简介及安装
Milvus简介什么是Milvus(1)Milvus是一款云原生向量数据库,它具备高可用、高性能、易拓展的特点,用于海量向量数据的实时召回。
(2)Milvus基于FAISS、Annoy、HNSW等向量搜索库构建,核心是解决稠密向量相似度检索的问题。
(3)在向量检索库的基础上,Milvus支持数据分区分片、数据持久化、增量数据摄取、标量向量混合查询、time travel 等功能,同时大幅优化了向量检索的性能,可满足任何向量检索场景的应用需求。
(4)通常,建议用户使用 Kubernetes 部署 Milvus,以获得最佳可用性和弹性。
Milvus 采用共享存储架构,存储计算完全分离,计算节点支持横向扩展。从架构上来看,Milvus 遵循数据流和控制流分离,整体分为了四个层次,分别为接入层(access layer)、协调服务(coordinator service)、执行节点(worker node)和存储层(storage)。各个层次相互独立,独立扩展和容灾。
为什么需要Milvus随着互联网不断发展,电子邮件、论文、物联网传感数据、社交媒体照片、蛋白质分子结构等非结构化数据 ...
LangChain4j之向量存储
向量存储主流向量数据库对比点击 这里,查看langchain4j对于向量存储的支持说明:
下图是主流的向量数据库的对比:
研发 / 原型阶段
推荐:FAISS(本地),Chroma
优点:轻量、易用、社区丰富
构建 Web 应用 / 小中型系统
推荐:Qdrant,Weaviate,Milvus-lite
优点:支持 REST/gRPC/客户端SDK,带元数据过滤,可集成 LangChain
大规模生产部署 / 高并发
推荐:Milvus(完整集群),Pinecone(托管),Vespa(超大规模)
优点:高可扩展性,多副本,支持异构资源
Pinecone简介之前我们使用InMemoryEmbeddingStore作为向量存储,但是不建议在生产中使用基于内存的向量存储,因此接下来我们使用Pinecone作为向量数据库。
点击 这里,查看Pinecone的官方网站,用户默认有2GB的免费存储空间。之后进行注册、登录和使用。
Pinecone使用【得分的含义】
在向量检索场景中,当我们把查询文本转换为向量后,会在嵌入存储(EmbeddingStore)里查找与之最相似的向 ...
LangChain4j之向量模型
向量模型介绍这里我们以通用文本向量为例进行说明,它是通义实验室开发的基于LLM的多语言统一文本向量模型,支持多个主流语种,为文本类数据提供高效的向量化转换服务,适用于RAG、文本分类、情感分析等自然语言处理任务。
点击 这里,了解更多介绍。
这里我们使用通用文本向量 text-embedding-v3,维度1024进行介绍,请注意,维度越多,对事务的描述越精准,信息检索的精度就越高。点击 这里,查看langchain4j所支持的向量模型。
模型配置阿里云百炼第一步,在项目的pom文件中引入对DashScope embedding的依赖:
123456789101112131415161718<!-- 接入阿里云百炼平台 --><dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-community-dashscope-spring-boot-starter</artifactId></dependency ...
LangChain4j之函数调用(Function Calling)
函数调用(Function Calling)function calling函数调用,也叫Tools工具。
入门案例大语言模型本身并不擅长数学运算,实际上很多应用场景都会涉及到数学计算,因此我们可以为它提供一个“数学工具”。当我们提出问题时,大语言模型会判断是否使用某个工具。
注解介绍(1)【@Tool注解】通过在方法上添加@Tool注解,并在构建 AI 服务时显式指定这些工具,这样LLM可以根据用户的请求决定是否调用相应的工具方法:
1234567@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.METHOD})public @interface Tool { String name() default ""; String[] value() default {""};}
在Tool注解中有两个可选的属性:
name(可选):指定工具的名称。如果未提供,默认使用方法名。
value(可选):提供工具的描述, ...
LangChain4j之检索生成增强(RAG)
如何让大模型回答专业领域知识LLM的知识仅限于它所训练的数据,如果你想让LLM了解特定领域的知识或专有数据,你可以:
使用RAG;
使用你的数据微调LLM;
结合RAG和微调LLM。
大模型微调在现有大模型的基础上,使用小规模的特定任务数据进行再次训练,调整模型参数,让模型更精确地处理特定领域或任务的数据。更新需重新训练,计算资源和时间成本高。
优点:一次会话只需一次模型调用,速度快,在特定任务上性能更高,准确性也更高。
缺点:知识更新不及时,模型训成本高、训练周期长。
应用场景:适合知识库稳定、对生成内容准确性和风格要求高的场景,如对上下文理解和语言生成质量要求高的文学创作、专业文档生成等。
RAG介绍(1)RAG其实是三个单词的缩写,分别是Retrieval-Augmented-Generation,即检索增强生成。
(2)在将原始问题以及提示词信息发送给大语言模型之前,先通过外部知识库检索相关信息,然后将检索结果和原始问题一起发送给大模型,大模型依据外部知识库再结合自身的训练数据,组织自然语言回答问题。通过这种方式,大语言模型可以获取到特定领域的相关信息,并能够利用这些信 ...
LangChain4j之提示词
提示词(Prompt)所谓的提示词,就是告诉大模型的一些话,分为系统提示词、用户提示词和助理提示词:
系统提示词(System):定义模型的整体行为框架,包括角色定位、对话风格、知识范围等。例如设定模型为”专业医疗顾问”,需基于医学研究提供建议但不可替代诊断。
用户提示词(User):明确用户的具体需求或问题,如”解释人工智能”。通过背景信息、限制条件等帮助模型精准回应。
助理提示词(Assistant):基于用户和系统提示词生成回答,需保持风格一致。例如模型根据用户提问”什么是人工智能”生成解释性内容。
三者共同作用确保输出符合预期:系统设定基调,用户提供具体指令,助理完成内容生成。
系统提示词系统提示词,即使用@SystemMessage注解来设定角色,塑造AI助手的专业身份,明确助手的能力范围:
123456789@Target({ElementType.TYPE, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)public @interface SystemMessage { ...
LangChain4j之聊天记忆持久化
聊天记忆持久化(Persistence)默认情况下,聊天记忆存储在内存中。如果需要持久化存储,可以实现一个自定义的聊天记忆存储类,以便将聊天消息存储在你选择的任何持久化存储介质中。
存储介质的选择大模型中聊天记忆的存储选择哪种数据库,需要综合考虑数据特点、应用场景和性能要求等因素,以下是一些常见的选择及其特点:
(1)MySQL:
特点:关系型数据库。支持事务处理,确保数据的一致性和完整性,适用于结构化数据的存储和查询。
适用场景:如果聊天记忆数据结构较为规整,例如包含固定的字段如对话 ID、用户 ID、时间戳、消息内容等,且需要进行复杂的查询和统计分析,如按用户统计对话次数、按时间范围查询特定对话等,MySQL是不错的选择。
(2)Redis:
特点:内存数据库,读写速度极高。它适用于存储热点数据,并且支持多种数据结构,如字符串、哈希表、列表等,方便对不同类型的聊天记忆数据进行处理。
适用场景:对于实时性要求极高的聊天应用,如在线客服系统或即时通讯工具,Redis可以快速存储和获取最新的聊天记录,以提供流畅的聊天体验。
(3)MongoDB:
特点:文档型数据库,数据以JS ...
LangChain4j之聊天记忆
AIService(人工智能服务)什么是AIService其实在前面我们在阅读langchain4j的文档中,就看到了这个AIService,只是没有提到:
<font style="color:rgba(0, 0, 0, 0.8);background-color:rgb(247, 247, 249);">AiService</font>是一个注解,定义如下:
1234567891011121314@Service@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)public @interface AiService { AiServiceWiringMode wiringMode() default AiServiceWiringMode.AUTOMATIC; String chatModel() default ""; //绑定聊天模型 String streamingChatModel() ...
LangChain4j之接入大模型
写在前面本篇介绍LangChain4j如何接入大模型,具体包括DeepSeek和阿里百炼。
接入DeepSeek获取开发参数点击 这里 访问DeepSeek官网,注册账号,然后充值,并获取对应的base_url和api_key:
配置开发参数为了apikay的安全,建议将其配置在服务器的环境变量中,变量名自定义即可,如 DEEP_SEEK_API_KEY:
配置模型参数点击 这里 访问DeepSeek接口文档,首次调用需要进行设置:
在LangChain4j中,DeepSeek和GPT一样也使用了OpenAI的接口标准,因此也使用OpenAiChatModel进行接入。
修改项目的application.properties配置文件中关于大模型的配置信息为如下所示:
1234567#DeepSeeklangchain4j.open-ai.chat-model.base-url=https://api.deepseek.comlangchain4j.open-ai.chat-model.api-key=${DEEP_SEEK_API_KEY}#DeepSeek- ...
LangChain4j之快速入门
LangChain4j入门简介LangChain4j的目标,是简化将大语言模型(LLM - Large Language Model)集成到 Java 应用程序中的过程。
历史背景2022年11月30日OpenAI发布了Chat GPT(GPT-3.5),而在同年10月,Harrison Chase 发布了基于Python的LangChain,随后同时包含了Python版和JavaScript(LangChain.js)版的LangChain 也发布了,直到2023年 11 月,Quarkus 发布了 LangChain4j 的0.1版本,2025年2月发布了1.0 - Beta1 版本,4月发布了1.0 - Beta4 版本,截止到10月18日,最新版本为1.7.1。
主要功能(1)与大型语言模型和向量数据库的便捷交互。
通过统一的应用程序编程接口(API),可以轻松访问所有主要的商业和开源大型语言模型以及向量数据库,使你能够构建聊天机器人、智能助手等应用。
(2)专为Java打造。
借助SpringBoot集成,能够将大模型集成到java 应用程序中。大型语言模型与Java之间实 ...
