KNN算法
KNN算法KNN算法简介【理解】KNN算法思想K-近邻算法(K Nearest Neighbor,简称KNN)。比如:根据你的“邻居”来推断出你的类别 KNN算法思想:如果一个样本在特征空间中的 k 个最相似的样本中的大多数属于某一个类别,则该样本也属于这个类别 思考:如何确定样本的相似性? 样本相似性:样本都是属于一个任务数据集的。样本距离越近则越相似。 利用K近邻算法预测电影类型 【知道】K值的选择 【知道】KNN的应用方式 解决问题:分类问题、回归问题 算法思想:若一个样本在特征空间中的 k 个最相似的样本大多数属于某一个类别,则该样本也属于这个类别 相似性:欧氏距离 分类问题的处理流程: 1.计算未知样本到每一个训练样本的距离 2.将训练样本根据距离大小升序排列 3.取出距离最近的 K 个训练样本 4.进行多数表决,统计 K 个样本中哪个类别的样本个数最多 5.将未知的样本归属到出现次数最多的类别 回归问题的处理流程: 1.计算未知样本到每一个训练样本的距离 2.将训练样本根据距离大小升序排列 3.取出距离最近的 K 个训练样本 ...
机器学习概述
机器学习概述人工智能三大概念【知道】人工智能 Artificial Intelligence 人工智能 释义 - 仿智; 像人一样机器智能的综合与分析;机器模拟人类 【知道】机器学习 Machine Learning 释义:机器学习 Field of study that gives computers the ability to learn without being explicitly programmed 释义:让机器自动学习,而不是基于规则的编程(不依赖特定规则编程) 人类识别车:根据车的特征归纳出车的规律;来了一个新的图片,判断预测是否是车 机器学习识别车: 从数据中获取规律;来了一个新的数据,产生一个新的预测 【知道】深度学习深度学习(DL, Deep Learning) : ,也叫深度神经网络,大脑仿生,设计一层一层的神经元模拟万事万物 【知道】三者之间的关系 机器学习是实现人工智能的一种途径 深度学习是机器学习的一种方法 【了解】学习方式【了解】基于规则的学习•基于规则的预测 : 程序员根据经验利用手工的if-else方式进行...
LangChain4j之RAG
RAG (检索增强生成)LLM 的知识仅限于它已经训练过的数据。 如果你想让 LLM 了解特定领域的知识或专有数据,你可以: 使用 RAG,我们将在本节中介绍 用你的数据微调 LLM 结合 RAG 和微调 什么是 RAG?简单来说,RAG 是一种在发送给 LLM 之前,从你的数据中找到并注入相关信息片段到提示中的方法。 这样 LLM 将获得(希望是)相关信息,并能够使用这些信息回复, 这应该会降低产生幻觉的概率。 相关信息片段可以使用各种信息检索方法找到。 最流行的方法有: 全文(关键词)搜索。这种方法使用 TF-IDF 和 BM25 等技术, 通过匹配查询(例如,用户提问的内容)中的关键词与文档数据库进行搜索。 它根据每个文档中这些关键词的频率和相关性对结果进行排名。 向量搜索,也称为”语义搜索”。 文本文档使用嵌入模型转换为数字向量。 然后根据查询向量和文档向量之间的余弦相似度 或其他相似度/距离度量找到并排序文档, 从而捕捉更深层次的语义含义。 混合搜索。结合多种搜索方法(例如,全文 + 向量)通常可以提高搜索的有效性。 目前,本页主要关注向量搜索...
LangChain4j之函数调用
工具(函数调用)一些 LLM 除了生成文本外,还可以触发操作。 有一个被称为”工具”或”函数调用”的概念。 它允许 LLM 在必要时调用一个或多个可用的工具,通常由开发者定义。 工具可以是任何东西:网络搜索、调用外部 API 或执行特定代码片段等。 LLM 实际上不能自己调用工具;相反,它们在响应中表达调用特定工具的意图(而不是以纯文本形式响应)。 作为开发者,我们应该使用提供的参数执行这个工具,并将工具执行的结果反馈回来。 例如,我们知道 LLM 本身在数学计算方面并不擅长。 如果您的用例涉及偶尔的数学计算,您可能希望为 LLM 提供一个”数学工具”。 通过在请求中向 LLM 声明一个或多个工具, 如果它认为合适,它可以决定调用其中一个工具。 给定一个数学问题和一组数学工具,LLM 可能会决定为了正确回答问题, 它应该首先调用提供的数学工具之一。 让我们看看这在实践中是如何工作的(有工具和没有工具的情况): 没有工具的消息交换示例: 12345678请求:- 消息: - UserMessage: - 文本:475695037565 的平方根是多少?响应:...
LangChain4j之高阶api
AI Services到目前为止,我们一直在介绍底层组件,如 ChatLanguageModel、ChatMessage、ChatMemory 等。 在这个层面上工作非常灵活,给予您完全的自由,但也迫使您编写大量的样板代码。 由于 LLM 驱动的应用程序通常不仅需要单个组件,还需要多个组件协同工作 (例如,提示模板、聊天记忆、LLM、输出解析器、RAG 组件:嵌入模型和存储) 并且经常涉及多次交互,协调所有这些组件变得更加繁琐。 我们希望您专注于业务逻辑,而不是低级实现细节。 因此,LangChain4j 中目前有两个高级概念可以帮助您:AI 服务和链。 Chains (legacy)链的概念源自 Python 的 LangChain(在引入 LCEL 之前)。 其思想是为每个常见用例(如聊天机器人、RAG 等)提供一个 Chain。 链组合多个低级组件并协调它们之间的交互。 它们的主要问题是,如果您需要自定义某些内容,它们过于僵化。 LangChain4j 只实现了两个链(ConversationalChain 和 ConversationalRetrievalChain)...
LangChain4j之会话记忆
聊天记忆手动维护和管理ChatMessage是很麻烦的。 因此,LangChain4j提供了ChatMemory抽象以及多种开箱即用的实现。 ChatMemory可以作为独立的低级组件使用, 或者作为高级组件(如AI服务)的一部分。 ChatMemory作为ChatMessage的容器(由List支持),具有以下额外功能: 淘汰策略 持久化 对SystemMessage的特殊处理 对工具消息的特殊处理 记忆与历史请注意,”记忆”和”历史”是不同的概念。 历史保持用户和AI之间的所有消息完整无缺。历史是用户在UI中看到的内容。它代表实际对话内容。 记忆保存一些信息,这些信息呈现给LLM,使其表现得好像”记住”了对话。 记忆与历史有很大不同。根据使用的记忆算法,它可以以各种方式修改历史: 淘汰一些消息,总结多条消息,总结单独的消息,从消息中删除不重要的细节, 向消息中注入额外信息(例如,用于RAG)或指令(例如,用于结构化输出)等等。 LangChain4j目前只提供”记忆”,而不是”历史”。如果您需要保存完整的历史记录,请手动进行。 淘汰策略淘汰策略是必要的,原因如...
LangChain4j入门
1.什么是LangChain4JLangChain4j 的目标是简化将 LLM 集成到 Java 应用程序中的过程。 具体方式如下: 统一 API: LLM 提供商(如 OpenAI 或 Google Vertex AI)和嵌入(向量)存储(如 Pinecone 或 Milvus) 使用专有 API。LangChain4j 提供统一的 API,避免了学习和实现每个特定 API 的需求。 要尝试不同的 LLM 或嵌入存储,您可以在它们之间轻松切换,无需重写代码。 LangChain4j 目前支持 15+ 个流行的 LLM 提供商 和 20+ 个嵌入存储。 全面的工具箱: 自 2023 年初以来,社区一直在构建众多 LLM 驱动的应用程序, 识别常见的抽象、模式和技术。LangChain4j 将这些提炼成一个即用型包。 我们的工具箱包含从低级提示模板、聊天记忆管理和函数调用 到高级模式如代理和 RAG 的工具。 对于每个抽象,我们提供一个接口以及基于常见技术的多个即用型实现。 无论您是在构建聊天机器人还是开发包含从数据摄取到检索完整管道的 RAG, LangChain4j 都提供多...
Springboot集成ES
Springboot集成ESES的Java客户端1. 早期阶段:Transport Client(基于 TCP) 出现版本:ES 早期版本(1.x ~ 6.x) 工作方式 基于 内部 TCP 协议 与 ES 节点通信 客户端必须与 ES 集群版本完全一致(主版本、次版本、修订版本) 优点 性能较高(长连接,无 HTTP 解析开销) 缺点 版本耦合度高,升级风险大 API 不统一,学习成本高 安全性弱(没有原生 HTTPS 支持) 状态 ES 7.x 标记为 废弃 ES 8.x 完全 移除 2. 中期阶段:High Level REST Client(HLRC) 出现版本:ES 5.0 引入,7.x 成为主力 工作方式 基于 HTTP/REST API 通信 通过封装好的 Java API 构造请求、解析响应 优点 版本兼容性更宽松(主版本一致即可) 支持 HTTPS 和各种认证方式 功能覆盖大部分 ES 操作 缺点 API 设计较老,非类型安全(依赖字符串和 Map) 构建复杂查询时容易出错 对 ES 8.x 新特性支持有限 状态 E...
ElasticSearch基本操作
ElasticSearch基本操作 es对文档的基本RestFul操作汇总 操作类型 请求方式 URL 格式 说明 示例 创建文档 PUT /{index}/_doc/{id} 指定 ID 创建文档,若 ID 已存在则覆盖 PUT /users/_doc/1携带 JSON 文档:{"name":"张三","age":30} 创建文档(自动生成 ID) POST /{index}/_doc 不指定 ID,ES 自动生成唯一 ID POST /users/_doc携带 JSON 文档:{"name":"李四","age":25} 查看文档 GET /{index}/_doc/{id} 通过 ID 查询单个文档 GET /users/_doc/1 更新文档(全量替换) PUT /{index...
ElasticSearch核心概念
ES核心概念 ElasticSearch是面向文档的,与关系型数据库对比如下 关系型数据库 es 数据库(databases) 索引(indices) 表(tables) types 行(rows) documents 字段(columns) fields es(集群)中包含多个索引,每个索引可以包含多个类型,每个类型下又包含多个文档,文档又包含多个字段。 物理设计: es把每个索引划分为多个分片,每个分片可以在集群的不同服务器间迁移,一个es节点就是一个集群。 逻辑设计: 一个索引当中,包含多个文档,可以通过索引->类型->文档ID索引到到某个具体的文档 文档 文档是索引和搜索数据的最小单位,以JSON格式存储,具备天然的灵活性,无需预先严格定义,但是文档中每个字段的类型非常重要,es会保存字段与类型间的映射 类型 类型是文档的逻辑容器,就像关系型数据库的表一样,类型对字段的定义称为映射,类型的概念逐渐被抛弃,高版本的es中一个索引只包含一个类型:_doc 索引 索引是类型的容器,或者说文档的集合,索引存储了映射类型的字...