做了 1 年 LLM 应用,最大的认知升级是:**”调 LLM API” 和 “构建 Agent 系统” 是两个完全不同的事**。
这篇文章复盘我们怎么用 Claude Agent SDK + Skills + MCP + LangGraph 搭出可观测、可降级、可扩展的多 Agent 协同架构。
一、为什么需要 Agent SDK2024 年中,我们开始做政策智能体。第一版直接调 A...
自己的 javai.tech 站,最近半年没更新。偶然打开 View Source 一看,差点没晕过去——og:title 是 “Hexo”,author 是 “John Doe”,连个 description 都没有。搜索引擎大概也懵了:这是谁的站? 本文复盘整个改造过程。
一、为什么突然想修?事情是这样的:
最近一直在做 AI 相关项目,朋友圈里也开始有人搜「javai」「Sherw...
接到一个需求:处理 666 条 2 小时以上的课程视频,做成 AI 教学知识库。
看似简单——调 Qwen-VL 接口就完事了。但真做起来发现:Qwen-VL 单视频 ≤ 2h、文件 ≤ 2GB,而且不支持音频。
这篇文章复盘我们怎么用工程手段补齐模型短板,做出一条”长视频理解 Pipeline”。
一、问题的硬约束接需求时没仔细看接口文档,等真做起来才发现一堆坑:
限制项
阈值...
上个月团队 review 月账单,发现 LLM 调用占了 ¥15,000。做了 2 周优化,月成本降到 ¥8,000,节省 47%,而且可用性还提升了。
这篇文章复盘我们怎么设计多 Provider 路由、自动降级和成本监控。
一、背景:为什么需要多 Provider做 AI 应用只用一家 LLM 看似简单,实际上有 4 个隐患:
成本不可控:单 provider 价格固定,没有谈判...
做 LLM 应用 1 年多,最痛的教训是:没有评估体系的 RAG 系统,就是一个不能 debug 的黑盒。
这篇文章复盘我们 Chatomni 政策 RAG 系统的评估体系搭建过程——从”拍脑袋觉得好”到”有数字、可对比、可回归”的演进。
一、痛点:我们怎么发现”评估”是必须的Chatomni 上线第 2 周,产品经理提了个问题:”为什么用户问’增值税对小微企业的影响’,你给的答案里引...
做政府/部委政策抓取 1 年,我们的爬虫架构经历了三次大的演进。这篇文章复盘三代爬虫的设计决策、成本数据和踩过的坑,希望对做类似场景(多站点、政策合规、Agent 工程化)的同学有参考价值。
一、背景:为什么”政策爬虫”是个难题去年加入贝斯平,做的第一个 AI 项目是 Chatomni 政策洞察智能体——给合规部门用的”政策 Copilot”,用户问”营改增对小微企业有什么影...
回答重点Elasticsearch 是一个开源的搜索和分析引擎,具备高效、分布式和实时的特点。当前稳定版本的 Elasticsearch 具备以下核心特性和改进:
1)索引和搜索:Elasticsearch 提供了强大的全文搜索能力,支持各种类型的数据索引,从结构化数据到非结构化数据。2)分布式架构:支持分布式计算,可以轻松扩展至数百个节点并处理 PB 级的数据。3)高可用性:通过分片和副本...
回答重点Elasticsearch 中的 Explore API,主要功能是帮助开发者和用户对数据进行探索性分析。它允许执行复杂的查询和聚合操作,从而提供关于数据的高层次洞察。Explore API 为用户提供了一种灵活且高效的方法来检索和处理存储在 Elasticsearch 中的大规模数据。
扩展知识Explore API 是 Elasticsearch 的核心组成部分,它提供了多种功能...
回答重点Elasticsearch 和 Solr 都是常用的搜索引擎解决方案,但是它们在架构、数据存储、可扩展性、社区支持和使用体验等多个方面存在显著差异。
1)架构方面:Elasticsearch 使用的是分布式架构,天然支持分片和副本,适合处理大规模的数据;Solr 是基于 Apache Lucene 的,尽管也支持分布式,但实现起来更复杂一些。
2)数据存储:Elasticsearch...
回答重点Term、Match 和 Keyword 是 Elasticsearch 中非常常用的检索类型,这三者的区别主要在于它们处理查询和数据的方式。
1)Term 查询:Term 查询不会解析查询字符串,而是直接将查询值用于查询。因此,它适用于精确匹配。例如,搜索状态码为 “200” 的文档。
2)Match 查询:Match 查询会将查询字符串进行分词和分析,然后查找与分词后的每个词匹配...
回答重点Elasticsearch 是以文档为基础的分布式搜索和分析引擎,而关系型数据库(RDBMS)是一种以表为基础的传统数据库管理系统。它们在数据存储和查询等方面有显著的区别:
1)数据存储方式:
Elasticsearch 是面向文档的存储,数据以 JSON 文档的形式存储,每个文档是自包含的。
关系型数据库是基于表格的存储,数据是结构化的,存储在行和列中,具有固定的模式(Schem...
回答重点通过 Elasticsearch 实现复杂的查询过滤条件,通常需要使用其强大的搜索查询 DSL(Domain Specific Language)。具体来说,可以借助 Bool Query 来结合多个查询条件(must、should、must_not、filter)实现复杂的逻辑筛选。下面是一个实际例子,通过 Bool Query 实现复杂的查询:
12345678910111213...
回答重点要让 Elasticsearch 和数据库(比如 MySQL)的数据保持同步,可以采用以下几种常见方式:
1)定时同步: 定期执行同步任务,将数据库中的最新数据更新到 Elasticsearch 中。可以使用调度任务工具(如 cron、Quartz)来实现。
2)实时同步: 当数据库中的数据发生变化时,立即更新 Elasticsearch。具体实现方式多种多样,例如通过数据库触发器、...
回答重点Elasticsearch 的 RestHighLevelClient 与 RestClient 的主要区别在于它们的抽象层次和使用的复杂度。
1)RestHighLevelClient 是基于 RestClient 之上的更高级的客户端,它封装了 Elasticsearch 的许多 API 调用,使得操作更加简单和直观。2)RestClient 是更底层的客户端,操作更灵活,但同时...
回答重点我们可以通过 Spring Data Elasticsearch 简化与 Elasticsearch 的集成。这是因为 Spring Data Elasticsearch 提供了一套高级别的 API,能够帮助我们更加方便地操作 Elasticsearch。具体步骤如下:
1)我们首先需要在项目中引入 Spring Data Elasticsearch 的依赖。2)然后,需要在 Spr...
回答重点Elasticsearch中的相关性得分(Relevance Score)是一个衡量文档与查询匹配程度的数值。简而言之,它表示搜索结果中每个文档的匹配程度,得分越高,表示文档与查询的相关性越强。这个得分主要由Lucene使用TF-IDF算法和BM25算法计算得出。
影响相关性得分的主要因素包括:1)查询的类型及结构:例如,match 查询和 term 查询计算相关性得分的方式不同。2...
回答重点Elasticsearch 的评分算法主要基于 BM25(Best Matching 25)算法,这是一种改进的 TF-IDF 算法。它通过计算每个文档和查询之间的相关性得分来排序结果。相关性得分基于以下几个主要因素:
1)TF(Term Frequency):词频,某个词在文档中出现的次数。出现次数越多,该词对该文档的重要性越大。2)IDF(Inverse Document Fre...
回答重点BM25(Okapi BM25)是一种基于概率检索模型的文档评分函数,用于评估文档与查询词之间的相关性。它通常用于全文搜索引擎,比如 Elasticsearch。BM25 是 TF-IDF 的改进版,通过更好地适应查询词频和文档长度,来提高搜索结果的质量和精确度。
与传统的 TF-IDF 算法相比,BM25 主要有以下改进:1)它通过引入两个可调参数 (k_1) 和 (b),可以更灵...
回答重点在 Elasticsearch 中,评分公式的核心是 TF-IDF(Term Frequency-Inverse Document Frequency),这个公式用于衡量一个术语对一个文档的重要性。具体来说,这个公式考虑了以下几个因素:
1)术语频率(TF):一个术语在文档中出现的频率,表示术语频繁出现的文档会获得更高的评分。2)逆文档频率(IDF):这个术语出现的文档数量的逆数。罕...
回答重点要在 Elasticsearch 查询中自定义评分规则,你可以使用 function_score 查询。function_score 查询允许你在查询结果的基础上,应用函数来修改文档的得分,从而实现自定义评分规则。以下是一个基本示例:
举个例子,假设你要在查询中增加某字段的权重,可以使用 weight 函数来实现:
1234567891011121314{ "q...
回答重点在 Elasticsearch 中想要结合多字段的相关性得分,可以使用布尔(bool)查询和函数评分(function_score)查询。具体来说,我们可以结合 bool 查询中的 must、should 等子句,用于控制不同字段的匹配;同时通过 function_score 查询来调整和组合这些得分。
一个基本的示例代码如下:
123456789101112131415161718...
回答重点Elasticsearch 中的 dis_max 查询是一种复合查询,可以用来组合多个查询子句,并返回其中评分最高的子句的结果。这对于在多个字段中寻找匹配非常有用,因为它能确保整体查询结果主要受到最匹配字段的影响,而非各个字段的匹配平均水平。
在实际应用中,dis_max 查询可以帮助我们更准确地匹配文档。例如,如果我们在 “title” 和 “description” 两个字段中搜...
回答重点在 Elasticsearch 中,使用脚本来调整评分逻辑可以通过 function_score 查询进行。function_score 查询允许我们在查询结果的基础评分上应用自定义的评分函数。我们可以借助 script_score 函数直接通过脚本来调整每个文档的评分。一个简单的例子如下:
1234567891011121314151617POST /my_index/_searc...
回答重点Elasticsearch中的script_score查询通过允许用户在查询过程中对文档评分进行自定义计算来工作。具体来说,script_score查询允许用户使用脚本来对查询结果进行重评分(rescore),从而根据用户定义的逻辑调整文档的相关性评分。这在需要特定的业务逻辑来计算评分或需要进行复杂的评分调整时特别有用。
使用场景通常包括:1)自定义评分逻辑:当默认的相关性评分模型不...
回答重点在 Elasticsearch 中,rescore API 允许你在初次查询之后对搜索结果进行重新排序。这在你希望在基本查询结果的基础上进行更准确、复杂的排序时非常有用。通常使用的步骤如下:1)执行一个基本的搜索查询,返回初步的结果集。2)在返回的结果集中应用 rescore API,这个 API 允许你指定不同的评分函数对结果进行重新排序。
一个简单的示例中,我们首先执行一个基本的...
回答重点在Elasticsearch查询中,tie_breaker 参数在相关性评分中起重要作用。当你的查询结果中有多个文档的主评分(primary score)相同时,tie_breaker 参数用来为这些平分的文档提供一个次要评分(secondary score),以便更好地排序。具体来说,tie_breaker 的值会被加到主评分中,这样具有相同主评分的文档仍然可以根据次要评分区分开来...
回答重点在 Elasticsearch 的评分机制中,coord 和 queryNorm 参数本质上是用于计算文档和查询匹配度的权重调整因素。具体来说:
1)coord 参数:这个参数用于衡量文档与查询词条的匹配程度。它根据文档中匹配到的查询词条比例进行调整。比如说,如果一个查询由多个词组成,而文档仅匹配了其中的一部分,那么 document 的相关性得分就会低于匹配了所有词条的文档。
2)...
回答重点在 Elasticsearch 中,我们可以通过 field_value_factor 功能来调整文档的评分。field_value_factor 会根据某个指定的字段的值来调整文档的评分,通常用于基于文档中的数值字段来增加或减少文档的搜索相关性评分。
为了使用 field_value_factor,你需要创建一个带有自定义评分的查询。以下是一个使用 field_value_fact...
回答重点在 Elasticsearch 中,你可以使用 bool 查询来组合多个查询条件,同时影响文档的评分(relevance score)。bool 查询包含四种子句(clauses):must、filter、should 和 must_not。
must:文档必须匹配这些条件,用于打分。
filter:文档必须匹配这些条件,但不影响打分。
should:文档中的一个或多个应该匹配这些...
回答重点要优化 Elasticsearch 中 BM25 算法的文档评分,你需要关注以下几个关键因素:词频 (TF)、逆文档频率 (IDF) 和字段规范 (Field Norm)。通过调整这些因素,你可以有效地提高查询的相关性结果。
1)词频(TF,Term Frequency):词频是一个词在文档中出现的次数。BM25 算法认为一个词在文档中出现的次数越多,文档的相关性越高。但要注意避免过...