- 博客(23)
- 收藏
- 关注
原创 别再盲调RAG了!一份完整指南:从概念到实战,教你科学评估!
RAG评估的科学方法与实践 摘要:构建生产级RAG系统面临巨大挑战,关键问题在于缺乏通用解决方案和评估标准。本文系统介绍了RAG评估的两类核心指标:生成指标(包括忠实度、答案相关性)和检索指标(如上下文精度)。忠实度检测模型是否基于给定上下文回答,答案相关性评估回答是否切题,上下文精度则衡量检索结果排序质量。通过开卷考试、任务指令和图书管理员等生动类比,阐释了各指标的评估逻辑和计算方法。建立科学的评估管道比盲目调参更重要,不同领域需定制评估方案,才能真正优化RAG系统性能。
2025-08-15 01:09:15
1048
原创 提示工程已死?恰恰相反,这5个高阶玩法才是拉开差距的关键
用一个糟糕的提示,你的模型在某个任务上的准确率可能是0%;换一个好提示,准确率能飙升到90%。说出这句话的,是Sander Schulhoff,一位OG提示工程师。他不仅创建了互联网上最早的提示工程指南,还领导了收集了超过60万条攻击性提示的Hackaprompt挑战赛。近来,随着模型智能越来越高,一种论调甚嚣尘上:“提示工程已死,模型足够聪明了”。然而,事实果真如此吗?今天,我整理了当今广为流传的prompt engineering技巧,一起看看哪些已经失效,哪些仍然有效。
2025-08-13 00:32:57
272
原创 高强度压榨GLM4.5两天,我决定放弃Cursor
我认为这是目前最强最具性价比的国产AI,如果你有 Coding 或 Agent 相关的任务需求,GLM-4.5 绝对值得你亲自上手一试,我相信这不会浪费你的时间。
2025-07-31 02:44:34
2194
原创 RAG优化: Indexing — 分块策略
所谓分块是指将大型的、非结构化的数据(如长文本、文档)切分成更小的、有意义的、独立单元的过程。今天,我们会从简单到复杂,依次讲解以下五种具体的分块策略。
2025-07-27 15:24:25
705
原创 RAG基础原理及实现
LLM是学习了人类几乎所有的公开知识后,形成的具有强大知识储备和语言理解能力的模型。这个过程,就像一个学生在考试前,疯狂地背诵了图书馆里所有的书,然后进行闭卷考试。所以,对于他没有背过的书,回答效果自然不好。RAG做的事情,就是在每次提问模型之前,都把与问题最相关的书拿给模型先看一遍,把闭卷考试变成开卷考试。
2025-07-24 12:32:15
368
原创 RAG优化: Retrieval — BM25算法
BM25算法是信息检索领域的经典算法,基于TF-IDF改进而来。它通过词频收益递减效应修正了TF-IDF的线性增长问题,并引入文档长度归一化来提高公平性。BM25公式综合考虑了词频、文档长度和平均长度等因素,参数k控制词频收益递减,b调节文档长度影响。在RAG系统中,BM25可与其他算法结合使用,如HyDE生成假设性回答后再检索,能显著提升准确率。示例代码展示了如何使用BM25进行中文文档检索,证明了其在实际应用中的有效性。BM25通过优化相关性评分机制,成为了关键词检索最实用的算法之一。
2025-07-23 14:54:31
650
原创 RAG优化: Pre Retrieval — HyDE
HyDE(假设性文档嵌入)是一种改进RAG检索效果的方法。其核心思想是:先让LLM根据用户问题生成一个假设性答案(而非直接检索问题),再用这个虚构答案去检索相似的真实文档。
2025-07-22 22:21:08
438
原创 “再也不用为环境配置掉头发了!“ —— Docker极简入门指南,10分钟打包你的第一个 Docker 环境
有点类似代码和正在运行的程序之间的关系。
2025-02-16 13:05:16
683
原创 2021 ICPC 澳门站 K
K.Link-Cut Tree思路按从小到大的边的顺序加边,每加一次边查看是否有环,有环马上进行bfs找环并输出答案具体看注释,写的应该挺详细学到的东西如何找环并输出环利用并查集可以在O(1)时间内判断图中是否有环,学习!!!bool merge(int x,int y,int w){ if (find(x) == find(y)) {return 1; } // 这两个点已经在同一个集合中 输出成环标志 g[x].push_back({y,w}); // 建立
2022-04-06 10:31:50
809
原创 代码源每日一题DIV2 #563. 子串分值和
代码源每日一题DIV2 #563. 子串分值和思路ans = 出现a的所有子串数量+出现b的所有子串数量+…+出现z的所有子串数量f(aaa)为什么=1,因为它只属于出现a的子串,f(abc)为什么=3,因为它属于出现a的子串也属于出现b的子串也属于出现c的子串学到的东西计数问题—》枚举可能出现的字符而非枚举每一个串正难则反,要找到含有a的所有子串很难,那么就用(所有子串数量-不含a的子串数量)对于一个长度为len的字符串,它的所有子串数量为 (len∗(len+1)/2)(len*
2022-03-19 16:22:46
389
原创 代码源每日一题DIV2 #106 订单编号
代码源每日一题DIV2 #106 订单编号思路使用set维护未使用编号,即set里面的所有区间中的每个编号都是未被使用过的,每次根据编号的情况进行打印新编号以及维护区间学到的东西用set维护区间的思想将点问题包含入区间中进行求解编码技巧:set里面可以装pair,且pair中进行lower_bound的效果为lower_bound() returns an iterator pointing to the first element in the range [first, la
2022-03-19 11:19:38
524
原创 Codeforces Round #775 (Div. 2, based on Moscow Open Olympiad in Informatics) 题解
A. Game思路只能跳一次!!!!从左和从右开始找到第一个0,然后相减+2(从0回到上一格的1陆地)即可经验教训无AC代码#define int long longconst int maxn = 2e5 + 10;int a[maxn];void solve(){ int n;cin>>n; int ans = 0; int flagz = 0; for (int i = 1; i <= n; ++i) {
2022-03-07 20:40:41
720
原创 AtCoder Beginner Contest 242 题解
A - T-shirt思路要么一定得到,要么不可能得到,要么按题意概率直接列公式算概率经验教训无AC代码#define int long longvoid solve() { int a,b,c,x; cin>>a>>b>>c>>x; cout<<fixed<<setprecision(9); if (x<=a) cout<<1<<'\n';
2022-03-06 13:56:05
1299
原创 CodeForce 774 div2 A-C,E题解
``E. Power Board思路重复的数是从哪里来的?比如4 = 222^222, 那么 424^242 就会跟 (22)2(2^2)^2(22)2 = 242^424 重复,所以可以看出,所有的重复,都是因为底数可以划分为某个数的k次幂造成的。所以我们以不可再分的底数作为分类标准,预处理出所有的最小底数的k次幂(如果某一行的m次幂写成 (it)m(i^t)^m(it)m的形式,则k=t*m)(由于 220>1e62^{20} >1e6220>1e6,所以t最大到20)有多少
2022-03-06 00:31:32
473
原创 AtCoder Regular Contest 136 B 题解
AtCoder Regular Contest 136 B有关逆序对的讨论对于不存在相同数字的逆序对,进行题意操作并不会改变逆序对奇偶性以 1 3 5 举例进行题意操作后所有可能的序列为1 3 5(逆序对数量为0)5 1 3(逆序对数量为2)3 5 1(逆序对数量为2)对于存在相同数字的逆序对,进行题意操作可能会改变逆序对奇偶性以 1 1 4 举例进行题意操作后所有可能的序列为1 1 4(逆序对数量为0)4 1 1(逆序对数量为2)1
2022-03-01 22:11:20
342
原创 Codeforces Round #750 (Div. 2) 记录
Codeforces Round #750 (Div. 2) 记录A.Luntik and Concerts思路无经验教训无AC代码#include <iostream>#include <string>#include <iomanip>#include <vector>#include <set>#include <cmath>#include <stack>#include
2022-03-01 21:55:24
109
原创 python学习笔记之有参装饰器
零、无参装饰器补充(如何伪装的一模一样?)python帮你写好了,直接用就行!实例代码:from functools import wrapsdef outter(func): @wraps(func) def wrapper(*args, **kwargs): res = func(*args, **kwargs) # res=index(1,2) return res?一、有参装饰器1.1 什么是有参装饰器?能够给wrapper传入除了f
2021-04-08 23:31:20
172
原创 python笔记之装饰器
1.为什么要有装饰器?为了给函数增加新功能,而且不改变函数自身代码,也不改变函数调用方式2.装饰器原理?闭包函数加语法糖语法糖自动实现“偷梁换柱”(在被装饰函数的上方一行加上@装饰器名)闭包函数中内层函数用来实现新功能,并且调用原来的函数3.装饰器结构3个函数:外层函数(用来传入被装饰函数),内层函数(1.调用被装饰函数 2.增添新的功能),被装饰函数 1.外层函数:仅仅用来传被装饰函数(闭包函数其实是一种传参方式,因为内层为了接受任意被装饰函数的参数,形参是*args和**kwra
2021-04-07 20:28:30
116
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅