文章

开心快乐

虽然我跟孩子单独相处的时间比较多,但是很少谈一些比较正式严肃的话题。

上周傍晚带她去眼镜店做眼部保健回来的路上,我突然问了她一个问题:你觉得在学校上学什么最重要?

她马上回答道:安全和健康。这个回答我是提前知道的,因为她妈妈平时跟她提过很多次,她平时也一直对妈妈的话很上心。

我又追问到:除了安全和健康呢?她支支吾吾半天没有回答。

我告诉她:除了安全和健康,还有开心快乐最重要,你可以学习不好,也可以表现不好被老师批评,哪怕是没有养成好习惯导致眼睛过早近视,这些与开心快乐比较起来,都不那么重要了。

她马上补充道:对对,考试最重要,因为只要我每次考100分,我就很开心快乐!

我跟她说:能考100分固然是好,但是在学校开心快乐的事情远不止考试得100分,你可以为交到好朋友而开心快乐,可以与其他人分享小秘密而快乐,甚至下课后能在操场尽情奔跑而开心快乐。

她好像听明白似的连说知道了知道了。

开心快乐是人生长跑过程中的无价之宝,学业、工作、是否婚育这些都要靠边站。因为,

很多事情其实根本没有意义。

吃喝玩乐不是虚度光阴,

吃苦耐劳也不一定值得歌颂。

生命的本质是一场历程,

人生需要不断体验,爱你所爱,

不一定要做世俗认为有意义的事,

如果你想发呆,看日落数星星都有意义。

不断尝试、感受、收获,然后放下,

就像在吃汉堡比赛里,输赢并不重要,

因为怎么样你都能吃到汉堡。

有些道理,有人明白得早,而有的人却明白得太晚。

桃李春风一杯酒,江湖夜雨十年灯

有一些颇具江湖之气的诗词,读起来很爽,这些作者里面有些人确实是跨马扬刀在战场上杀过人的。现代社会还是需要一些江湖侠义之气,要婉约、要豪放、还要霸气。下面收集了一些,有的可能只有一两句传唱度比较高的,已经用下划线标明。排名不分先后。

我杀过人,为兄弟挡过刀
首先当然是我们大家熟悉的诗仙李白了。李白一生怀有赤子之心,诗文豪爽大气。相关历史资料说他平时带剑在身,可能真有武术。他诗歌里面经常有“杀”一字,至于是否真的杀过人就不得而知了。他有两首跟江湖有关知名度比较高的诗:
《侠客行》
赵客缦胡缨,吴钩霜雪明。
银鞍照白马,飒沓如流星。
十步杀一人,千里不留行。
事了拂衣去,深藏身与名。
闲过信陵饮,脱剑膝前横。
将炙啖朱亥,持觞劝侯嬴。
三杯吐然诺,五岳倒为轻。
眼花耳热后,意气素霓生。
救赵挥金槌,邯郸先震惊。
千秋二壮士,烜赫大梁城。
纵死侠骨香,不惭世上英。
谁能书阁下,白首太玄经。

《赠从兄襄阳少府皓》
结发未识事,所交尽豪雄。
却秦不受赏,击晋宁为功。
托身白刃里,杀人红尘中。
当朝揖高义,举世称英雄。
小节岂足言,退耕舂陵东。
归来无产业,生事如转蓬。
一朝乌裘敝,百镒黄金空。
弹剑徒激昂,出门悲路穷。
吾兄青云士,然诺闻诸公。
所以陈片言,片言贵情通。
棣华倘不接,甘与秋草同。

第一首诗表面上是李白赞美燕赵侠客精神,实际上是将自己比作侠客,希望能够寻找信陵君这样的明主可以施展政治抱负。我有剑,武功高,能杀人,还不求功名利禄,但求有人赏识我!

第二首诗定位就没这么高了。李白说自己年轻的时候豪爽大气,经常结交一些热血之士。红尘滚滚之中杀过人,也曾为了朋友两肋插过刀,白刀子进红刀子出,千金散尽帮助别人,但并不觉得解人之难是什么了不起的事情。现在我的生活非常落魄,腰间的盘缠也都用完了,请兄弟拉我一把!废话不多说了,你懂的。你如果不帮我,我就去自生自灭了啊。这首诗的创作背景是李白当时仕途不顺,求朋友帮助自己。熟悉李白的朋友可能知道,李白一生仕途都不顺,这种动不动说自己要杀人的人,应该顺不起来。

从上面两首诗可以看到,李白不管是求职还是找朋友帮忙,先要把自己猛夸一顿。不仅仅这两首诗,他其余大部分诗都这样。这是李白裘马轻狂,豪爽用事的真实写照。

少打仗,少杀人
说完李白就应该提杜甫,因为他两齐名。需要注意的是,在当时社会,虽然他两年龄只差11岁,杜甫却比李白名气小太多了。李白现在如果知道他跟杜甫齐名,有可能要发飙。中年的杜甫经历过“安史之乱”,山河破碎,写了很多忧国忧民的诗歌,他的诗歌格局都比较高。这里挑一首我觉得跟本次主题关联性比较大的诗:

《前出塞九首·其六》
挽弓当挽强,用箭当用长。
射人先射马,擒贼先擒王。
杀人亦有限,列国自有疆。
苟能制侵陵,岂在多杀伤。

前出塞有好几首,这是其中之一。这首诗应该是我接触比较早的,可能是小学时候看到的一本书上,还配有插图,只是我读书时代对这些不太感兴趣,基本也背不会。据我了解,杜甫应该没有带兵打过仗,所以这首诗前面的四句应该是他臆想出来的,不过写的非常好。前面四句很好理解,说的是打仗杀敌应该拿最好的武器、还要找准取胜的关键点。后四句话锋一转,开始讲道理了。他说不能无休止的去打仗杀人,国家疆域差不多就行了。能够击退侵犯的敌人就行,不在于要杀多少人。这首诗的创作背景是,当时唐朝打仗频繁,连年征兵上战场,死了很多人,全国人数骤减。

从这首诗作者所要表达的观点来看,杜甫和李白迥然不同。有人可能觉得这一两首诗说明不了什么问题,其实如果再多读读他两其他的诗歌,就会发现他两不仅诗风不同,处事态度也不同,诗歌内容格局自然也就不同了。

戍边杀敌太苦了
有一位边塞诗人大家应该非常熟悉,叫王昌龄,他的有些诗上学的时候必背。王昌龄算作是唐朝边塞诗人鼻祖,唐朝当时很多文人去边疆寻求边功,这人真的去过西域边塞战场,至于有没有亲自拿刀杀过人我就不太清楚了。这里我挑两首比较有代表性的:
《出塞二首·其一》
秦时明月汉时关,万里长征人未还。
但使龙城飞将在,不教胡马度阴山。

《从军行七首·其四》
青海长云暗雪山,孤城遥望玉门关。
黄沙百战穿金甲,不破楼兰终不还。

他的这两首诗的主旨思想都是:戍边战士太幸苦了,但是想到国家人民能够安居乐业,顿时鸡血满满。我们可以看到,作为亲临一线的人和杜甫这种没有上过战场的人思考问题的角度不太一样,所谓屁股决定脑袋。王昌龄深刻体验到了戍边环境的恶劣以及戍边战士的艰辛,但是他秉着“舍小家,保大家”的崇高境界,认为戍守边疆、抵御外敌是军人的指责所在。这样一种矛盾的心情可能也是现如今为祖国戍守边疆战士的心情。

据相关专家考证,王昌龄应该是历史上边塞诗的先驱鼻祖。但是这人最后死得太可惜了,不是战死的,也不是被朝廷陷害死的,是被某地刺史所杀。具体原因不详,有说是因为嫉妒他的才华。

追人杀敌?一切尽在掌握之中
下面要说的这首诗是我个人很喜欢的一首,作者相对来讲不太出名,叫卢纶,也是唐朝诗人。具体内容如下:

《塞下曲》
月黑雁飞高,单于夜遁逃。
欲将轻骑逐,大雪满弓刀。

这首诗的创作背景我其实不太了解,但是这首诗描述的内容我倒是非常喜欢。它描述的是,在一个月黑风高的晚上,敌人(单于代指北方胡人)半夜准备撤离,我方将军正准备集结骑兵部队去追剿,这时候天降大雪,雪花落在战士背上的武器(弓刀)上,挡住了寒气。

敌人要跑没关系,老大率领若干轻骑去追。之所以是轻骑,因为骑兵跑得快,轻装上路。将军胸有成竹,仿佛瓮中捉鳖,因此不需要大军前往。这首诗描写的场景应该是唐太宗时期(初唐,而写这首诗的时间应该是安史之乱之后),唐朝开国名将李靖奉旨扫平突厥的时候,没错这人就是哪吒他爹。

谁需要杀人?请找我
下面这首诗的作者大家应该比较熟悉,名叫贾岛。这人之前是一个和尚,后来还俗了并且受到了韩愈的赏识。他还写过其他比较有名的诗,知道的人肯定比这首要多,比如“松下问童子,言师采药去”。

《剑客》
十年磨一剑,霜刃未曾试。
今日把示君,谁有不平事?

这首诗的字面意思浅显易懂,意思是说,我花十年铸就了一把剑,还未见血,今天将它拿出来给大伙看看,你们谁有不平事呀?可以来找我,我来帮你杀人。当然这只是字面意思,其实作者想要表达的是:我寒窗苦读十几年,非常想要寻得一个赏识我的人,实现我的政治抱负。其实意思跟前面说的李白一样,古人施展自己的才华主要途径是入仕做官,而当官一是靠科举,二是靠人引荐。如果科举屡考不中,那么只能奢求第二种了。

打个猎,突然想上战场杀敌
苏轼一生多次被贬,他写的诗词大部分都是表达豁达乐观的。就这首《江城子·密州出猎》有些江湖气,勉强拿出来:

《江城子·密州出猎》
老夫聊发少年狂,左牵黄,右擎苍,锦帽貂裘,千骑卷平冈。为报倾城随太守,亲射虎,看孙郎。
酒酣胸胆尚开张。鬓微霜,又何妨!持节云中,何日遣冯唐?会挽雕弓如满月,西北望,射天狼。

这首词写于苏轼任密州知州的时候,这时候他还没被贬过。宋朝的疆域其实是中原所有统一王朝中最小的,北宋时期西边有西夏,北边有辽人、后来又来了金人,而且北方的这些人占领了幽云十六州,因此宋朝北边边境缺少了天然的地理保护屏障。苏轼写这首词的时候正逢西夏入侵北宋疆域,喝完酒,打着打着猎,突然觉得自己很牛掰了,所以想象着哪天朝廷能够派他去往边疆抗击西夏入侵。该词读书时肯定背过太熟悉了,此处不再做过多解读,文中引用了好几处典故。

苏轼这首词开启了宋词豪放一派,之前宋朝大部分词都是写爱、写情之类的婉约风格。他好像就这一首有些江湖气,比较符合这次的主题。苏轼嘛,侧重点不在这块。

跨马杀敌,我已经饥渴难耐了
辛弃疾是为数不多的拿过刀、杀过人的古代诗人,证据确凿。他出生于南宋时期,那时候北宋已经经历过“靖康之难”灭亡了,大部分北方疆域被金人占领,南宋疆域面积比北宋更小。他二十岁就带兵抗金杀敌(应该属于自己组织的那种民兵),骁勇善战,有勇有谋。后来投靠南宋朝廷想发挥更大的抗金价值,结果被朝廷雪藏了,一生再没上过战场。他的一生出场就是巅峰,始于武,但是终于文。下面这首词是他被雪藏二十年后写的:

《破阵子·为陈同甫赋壮词以寄之》
醉里挑灯看剑,梦回吹角连营。八百里分麾下炙,五十弦翻塞外声,沙场秋点兵。
马作的卢飞快,弓如霹雳弦惊。了却君王天下事,赢得生前身后名。可怜白发生!

这首词写的是他喝醉酒了,梦到自己上战场杀敌的画面。该词描写的画面也只有亲自上过战场的人才能写得出来,让杜甫和李白去写,肯定没这个效果。这首词是我认为描写沙场打仗画面最好的一首诗词。该词读书时肯定背过太熟悉了,此处不再做过多解读。

那么,辛弃疾为什么会写这么一首词呢?那就要了解一下这首词的创作背景了。他这时候被朝廷雪藏了二十年,基本每天在家种地(可以看一下他写的田园词,非常好)。这时候一个名叫陈亮的人找到他,这人是主战派,主张抗金的人,给朝廷上了很多奏折。两人志向相投,一拍即合,聊着天越聊越兴奋,辛弃疾就幻想着马上可以去战场杀人了。要知道这时候的辛弃疾已经大概五十岁了,只可惜这次会面并没有什么效果,朝廷投降派占主导。最终辛弃疾的一生也在遗憾中结束。

不止杀人,还要干革命
很早之前周杰伦参演的一部张艺谋的电影,电影名叫《满城尽带黄金甲》,其实这个名字取自于一首晚唐名诗,黄巢写的。这人科举考试多次落榜,后来实在受不了了,干脆起义当皇帝,最后搞起了历史上的“黄巢起义”著名事件,掀起了唐朝末年农名起义的浪潮,唐朝也开始真正走向灭亡了。其实他还有另外一首诗也比较有名,两首内容如下:
《不第后赋菊》
待到秋来九月八,我花开后百花杀。
冲天香阵透长安,满城尽带黄金甲。

《题菊花》
飒飒西风满院栽,蕊寒香冷蝶难来。
他年我若为青帝,报与桃花一处开。

我来给大家翻译一下,第一首看名字就知道是考试落榜之后写的,字面意思是:等到秋天九月八重阳节,菊花盛开之后其他的花都凋零了。菊花的香气飘满整个长安城,满城的菊花就像战士身上穿的铠甲一般金光灿灿。其实实际表达的意思可能更接近于:总有一天老子要杀进长安城,我来当皇帝。最终结果确实如这首诗里面讲的这样,黄巢率领起义军攻进了长安城,但是成功并不长久,很快就失败了。

第二首是他起义之前写的,他说菊花盛开的这个季节不太好,秋天有风又冷还没有蝴蝶,什么时候他当了青帝,要让菊花和桃花一样,在春天盛开。这首诗多么霸气,不服不行。我觉得黄巢的这两首诗是古代干革命的人写的诗中最好之一,像后来清朝末年天平天国的洪秀全,也是考不上跑去干革命了,但是写出来的诗比这个差远了。另外,从黄巢的人生经历来看,肯定是真杀过人的了。

死了也要去阴间杀阎罗
提到干革命,这里不得不说一下咱们伟大的开国元帅——陈毅。1936年国民党围剿时,陈毅率领的游击队被困于梅岭(大概在江西和广东接壤处),形势非常不妙,于是写下了下面三首诗:
《梅岭三章》
断头今日意如何?创业艰难百战多。
此去泉台招旧部,旌旗十万斩阎罗。

南国烽烟正十年,此头须向国门悬。
后死诸君多努力,捷报飞来当纸钱。

投身革命即为家,血雨腥风应有涯。
取义成仁今日事,人间遍种自由花。

近现代诗的内容没有古诗那么难于理解,基本就是字面上的意思。“此去泉台招旧部,旌旗十万斩阎罗。”意思是说,即使我被杀,去了阴曹地府也要集结之前死去的旧部,继续斩杀国民党反动派。而“后死诸君多努力,捷报飞来当纸钱。”跟陆游的“王师北定中原日,家祭无忘告乃翁”有异曲同工之妙。我死之后,渴望收到前方传来的捷报。

陈毅肯定也是为数不多亲自杀过人的诗人,梅岭遭劫,最终突围了。这三首诗慷慨激昂,非常适合青少年读。另外再多说一下这个梅岭,这个位置在古代应该属于岭南瘴毒之地,即使不是,可能也远不了。古代当官儿的只要被贬,比较惨的基本都被贬到了岭南,因为这个地方环境恶劣,湿热虫多,主要古代没有空调电扇,广州没有空调夏天能住人不?苏轼有一句词“试问岭南应不好,却道,此心安处是吾乡”,可见这个地方大家都怕(苏轼后来也被贬到这个地方了)。杜牧有一首诗写的杨贵妃,“一骑红尘妃子笑,无人知是荔枝来”,里面描写驿卒快马加鞭将荔枝从岭南运往洛阳,大概就是要经过这里吧。

废话太多,小心我砍你
大家一提到朱元璋,就说他是乞丐出身,当过和尚要过饭。其实他也有一些江湖霸气的诗句流传下来:
《示僧》
杀尽江南百万兵,腰间宝剑血犹腥!
老僧不识英雄汉,只管哓哓问姓名。

传说当年朱元璋起义时经过金陵的一个寺庙。寺庙的和尚不认识他,一直问他是谁,朱元璋被问不耐烦了,提笔写下这首诗。他说,老子江南杀人千千万,腰间的宝剑上还能闻出血腥味,这里的一个老和尚居然不认识我这个大英雄,逼叨逼叨没完没了。言下之意是,你再问小心我拿剑砍你。

有人说朱元璋的诗词创作水平不高,那是肯定的,毕竟没有正儿八经上过学,底子薄。跟其他一些帝王将相相比,差很远。比如五代南唐后主李煜,北宋耻辱之帝宋徽宗,他们适合搞这些,但就是不适合当皇帝。康熙乾隆写过很多诗,乾隆爷写过四万首,但是你背过嘛?

你们都不行,让我来
最后让主席来镇楼,主席的诗词大气磅礴,不是一般人写得出来的,读起来非常爽。原因很简单,人家干过这个事情,你让李白杜甫苏轼来写,打死估计也写不出来。下面以这首《沁园春·雪》结尾:

《沁园春·雪》
北国风光,千里冰封,万里雪飘。
望长城内外,惟余莽莽;大河上下,顿失滔滔。
山舞银蛇,原驰蜡象,欲与天公试比高。
须晴日,看红装素裹,分外妖娆。

江山如此多娇,引无数英雄竞折腰。
惜秦皇汉武,略输文采;唐宗宋祖,稍逊风骚。
一代天骄,成吉思汗,只识弯弓射大雕。
俱往矣,数风流人物,还看今朝。

主席把中国牛掰一点的帝王全部都鄙视了一遍,嬴政、刘彻、李世民、赵匡胤这些人都不行,总觉得哪里差了点,成吉思汗简直莽夫一个,只知道骑马打猎杀人。看现在,风流人物还是得看我(们)呀!不得不说,主席不仅带兵打仗厉害,写诗也强得很。这首词完全没有自大的表象,倒是让人一读振奋人心,激昂斗志。

庄子真的很消极吗?

如果说庄子代表的道家思想是消极的,那么孔子代表的儒家肯定就是积极的了。前者叫你要顺其自然,无所待而逍遥,凡事莫强求;后者劝你要修身、齐家、治国、平天下,学而优则仕,施展远大抱负。

其实在我看来,道家和儒家只是思想的侧重点不同,并没有明确的对立关系。道家的“顺其自然”是指在你“洞察世事之规则后,顺应天道,从而达到心如止水的境界”,这里的天道就是指“自然规律”。顺应天道的前提是在你“洞察世事之规则后”,换句话说,他不是让你无脑躺平、让你消极生活,而是告诉你,平时要多动动脑子,领悟世间万物运行之根本,明白个人与自然宇宙之间的关系,不要有过分的想法和欲望,徒增烦恼,最终达到精神上的真正自由。所以你看,庄子给每个道家信徒都设置了一个门槛,就是首先你得有领悟这个思想的慧根。

庄子在《逍遥游》中说大鹏展翅一飞冲天,借助的是外部的“风”,没有风它就飞不了了,换言之大鹏是有所依赖的,所以做不到真正的自由。庄子还讲了一个“相濡以沫,不如相忘于江湖”的故事,说两条快要干死的鱼在泥土里靠相互的唾沫苟活下去,还不如各自去到大江大河里逍遥快活。庄子极度推崇个人的自由,告诉你要遵从自己的内心,这个前提可能是要求你牺牲掉你的“本来所得”。

严格来讲,儒家的某些思想是反人性的,但是现代社会的发展、生产力的提升,反而恰恰离不开这种“反人性”的约束。每个人有内外的诸多限制,或者说诸多缺陷。这就会让人觉得,从本质上来说,以庄子为代表的这种“逍遥“的境界是人在现实中所无法达到的。但是有的时候理想之所以伟大,并不是因为它可以实现,恰恰是因为它的不可实现性。因为只有这样,它对人才具有更高的提升意义。陶渊明、苏轼他们正是以庄子这种逍遥思想为精神向导,才能留下《归去来兮辞》、《赤壁赋》这种千古名篇。

为什么“吃得苦中苦,方为人上人”的思想很可怕?

努力的目标不应该是为了过人上人的生活

吃得苦中苦,方为人上人

那如果以这一种目标去努力的话

你会发现是非常可怕的

因为你努力的目标

居然是爬在别人身上作威作福

那也就是说你所吃的一切苦

将来都要加倍的找补回来

那这是非常痛苦的

会进入到一个社会达尔文主义的恶性循环

因为每个人都有跌倒有摔跤的时候

每个人都有可能从强变弱的时候

即便你暂时强

还有比你更强的

那如果强者通吃一切

你作为人的尊严可能就会丧失


那些在社会竞争中处于优势的人

一定要知道

他们其实靠的并不单纯是自己的努力

还有一些大量的人所无法掌控的东西

时也,命也,运也

这些是人所无法掌控的


300年前

一个人会打篮球绝对什么都不是

但是生活在300年后的今天

一个人如果是篮球高手

他甚至能进NBA

就能够获取巨大的财富


所以最重要的是内心的充盈和内心的优秀

一个内心优秀的人

他就可以安之若素

泰然自若

与这个时代狭路相逢


努力的目标不是为了成为人上人,是为了能够内心平静

(摘自网络)

什么是RAG?

RAG全称Retrieval-Augmented Generation,翻译成中文是“检索增强生成”。其中检索指的是“文本相似性检索”,生成指的是“基于大语言模型的生成型算法”,比如OpenAI的GPT系列,以及阿里的通义千问系列等等。完整去理解这个术语应该是:用文本语义相似性检索的结果,来丰富大语言模型的输入上下文,以此提升大语言模型的输出效果。RAG技术之所以重要,近几年热度持续上升,其主要原因还是受大语言模型影响,尤其大语言模型技术在实际使用过程中本身存在的一些缺陷。

大语言模型的缺陷

除去模型的复杂性对数据和算力的要求太高(这顶多算是门槛高,造成一般中小型公司无法入坑),大语言模型(LLM)在实际应用过程中有两个缺陷:

(1)知识的局限性

CV领域中常见的YOLO系列检测算法,模型参数量大概在百万~千万级别。而大语言模型参数量通常十亿起步,更复杂的甚至达到了千亿万亿级别。更多的参数量意味着模型能存储(学习)更多的知识,无论从知识深度还是广度都比传统的“小”模型要更优。但是,这个世界是复杂的,不同行业的知识千差万别,俗话说:隔行如隔山,这个在大模型技术中尤为突出。通常一些公司在训练大模型时,采用的数据主要来源于互联网,大部分都是公开的知识数据,模型从这些公开的数据中学习当前数据的基本规律,但是对于那些由于各种原因没有公开到网络上的垂直细分领域的知识数据,大模型在训练过程中完全无法接触到,这也导致模型在实际应用推理过程中,对特定领域问题回答效果不佳、甚至完全一本正经的胡说八道。下面是我向ChatGPT询问“车道收费软件程序无法正常运行如何处理?”,可以看到,ChatGPT在这种专业问题中表现不足,虽然回答的条理清晰(第一张图),但是并不是我们想要的答案(第二张图)。

<ChatGPT回答结果↑>

<标准答案↑>

(2)知识的实时性

大模型掌握的知识受限于训练它用到的数据,模型训练(迭代)一次消耗的时间相对较长(几个月甚至一年),很多知识数据虽然是公开的,但是由于时间关系,并不能及时被大模型掌握。比如前几天(2024/12/3)网络上出现了韩国总统尹锡悦突然发动戒严的新闻,你如果向一个11月份就上线的大模型问韩国的相关历史事件,这个戒严事件肯定不在回答之列,原因很简单,因为模型在训练过程中并没有相关数据。下面是我向ChatGPT询问“韩国近现代有哪些主要的政治事件?”,在它给出的回答中,可以看到回答的主要事件截止时间在2022年尹锡悦上台后不久,回答中没有更新的数据。

<ChatGPT关于韩国近代历史事件的回答↑>

提示工程的重要性

在2022年底ChatGPT刚出来不久,GitHub上就有一个非常火爆的项目仓库叫awesome-chatgpt-prompts(截止2024/12/15已经有114K星星),这个仓库核心就是一个README文件,里面包含了我们在使用ChatGPT时常用到的一些“提示词”。提示词的作用是告诉大模型一些上下文背景,让模型能够根据你的提示词来给出想要的回答。提示词完全使用自然语言编写,好的提示词能够得到更加准确的回答。下面给出两个例子,第一个是让ChatGPT充当Linux操作系统命令行终端(类似ssh工具),响应用户输入的Linux命令;第二个是让通义千问充当一个关键信息提取器,将两个人语音对话中的关键信息提取出来然后按指定格式输出。

<ChatGPT扮演Linux终端↑>

<给通义千问设置提示词↑>

<通义千问根据提示词给出的回答↑>

可以说如何用好大模型,提示词是关键。提示词的设计可以复杂,比如提供一些输入输出的示例,让大模型参考,也可以提供“思考”逻辑或者方向,给大模型提供一些回答问题的思路,当然也可以交代一些背景知识,让大模型“实时”去消化。

既然提示词如此重要,它能够丰富大模型问答上下文,让模型了解更多的背景知识,从而提升大模型的使用效果。那么我们能否使用类似提示词这种方式去弥补前面提到的那些大模型应用缺陷呢?答案是肯定的,这就是RAG采用的技术思路。针对“知识的局限性”和“知识的实时性”问题,我们可以借用类似“提示词”之手告诉大模型,让它能够在“外部补充数据”的上下文环境中,给出我们想要的答案,从而规避知识的局限性和实时性问题。

为了让大模型能够掌握额外的背景知识,我们引进了“外部补充数据”,那么我们应该如何获取这个外部补充数据呢?很明显这个获取的过程很关键,有两个原因:

1、外部补充数据一定要与用户query有关,而且相关性越高越好,否则就是误导模型思考,补充数据越详细越好,模型获取的外部信息就越充足。

2、我们事先并不知道用户需要query什么问题,所以获取外部补充数据一定是一个检索的过程,从一个大规模特定领域的非结构化数据集合中检索与query相关的部分,这个检索是实时性的,针对不同的query可能都需要这个操作。

现在我们将上一张图更新一下,大概可以修改成这样:

针对用户的每个query,我们先从“知识库”(大规模特定领域的非结构化数据集合,可随时更新)检索出与query相关的信息,然后再和原始query一起合并输入到大模型。目前这里的检索方式通常采用“文本语义相似性检索”,这个跟CV领域图像相似性检索类似,一般基于高维特征去做相似度匹配。

文本语义相似性检索

一般在讲语义相似性检索的时候,通常也会提到关键字检索,这是两种不同的文本检索方式。下面是两种方式特点:

1、语义相似性检索。基于文本内容含义去做匹配,算法能够理解句子(词语)的内在含义,然后找出意义与之相似的内容。比如“这个产品令人眼前一亮”和“这个产品设计很新颖”虽然文本内容本身不尽相同,但是其意义相似,那么算法认为它们相似度很高。类似的,“汽车”和“轿车”相似度很高,“跑步鞋”和“耐克”相似度很高,“晴朗的天”和“万里无云”相似度很高。

2、关键字检索。基于文本内容本身去做匹配,算法只匹配句子(词语)内容本身,“晴朗的天”和“万里无云”如果从关键字去匹配的话,相似度基本为零。在学习《数据结构和算法

》课程的时候,里面提到的“汉明距离”可以算作关键字匹配的一种方式,主要用来计算字符串之间的相似度。

我们从上面的解释可以了解到,语义相似性检索方式显得更加“聪明”,更贴近人类思考的方式,所以在RAG技术栈中,一般采用语义相似性检索的方式去获取前面提到的“外部补充数据”。文本的语义相似性检索一般基于“高维特征”去完成,大概思路就是事先对知识库中的文本内容进行特征编码,生成高维特征向量(通常128/256/512维度),最后存入专用向量数据库(比如Faiss/Milvus向量数据库),形成底库。在检索阶段,先对query文本使用相同的特征编码算法生成特征向量,然后使用该向量去向量数据库中检索前TOP N个相似特征,最后映射回前TOP N个原始文本内容。那么得到的这些原始文本内容,就和query文本在语义上存在很高的相似度。

上面图中,A和B是特征向量底库,C是query特征向量,最终C和A之间的相似度要比C和B之间更高,所以“今天万里无云,天气很好”可以匹配到“真是一个晴朗的天”。那么如何衡量特征向量之间的相似度呢?以2维向量为例(3维或更高维类似),可以把特征向量看做是二维坐标系中的一个点,最后计算两点之间的距离,通常有两种距离计算方式,一个叫“欧氏距离(直线距离)”,一个叫“余弦距离”。

欧氏距离越小,两个点越靠近,代表越相似(图中红色);余弦距离代表的是点与原点连线之间的夹角,夹角越小(余弦值越大,图中紫色),代表越相似。(关于特征编码,以及特征相似度计算可以参考之前的文章)。目前网络已经有很多开源的文本特征编码模型,针对不同国家语言,可以为其提取文本特征标识。下面是我对鲁迅的《故乡》全文做特征编码,然后去检索“我情不自禁地伤心起来。”这句话的例子,最后返回TOP 10个与之语义相似的句子,可以看到整体表现还算可以,尤其排名靠前的几个结果,基本和query句子的含义比较接近。

从“单阶段推理”到“两阶段推理”

我们现在回顾一下大语言模型的工作流程,基本上就是用户提供query问题输入(可以携带一些简单的上下文,比如历史对话记录),大模型直接给出回答,注意这里大模型完全基于训练时积累的经验给出的答案。这个可以看做是一个“端到端”的推理过程,我们称之为“单阶段推理”(可以类比CV领域中经典的YOLO系列检测算法)。那么相比较而言,RAG就是“两阶段推理”,问答系统先要从知识库中检索与用户query有关的信息,然后再与query一起,传入大模型,之后的流程就和单阶段推理一致。以此可以看出,RAG指的并不是具体哪一个算法或者技术,而是一套解决问题的技术方案,它需要用到文本特征编码算法、向量数据库、以及大语言模型等等。Github上有很多RAG相关的框架,都提供了灵活的接口,可以适配不同的文本编码模型、不同的向量数据库、不同的大语言模型。

总结RAG的优劣势和应用场景

1、RAG的优势

可以有效解决单纯使用大语言模型时碰到的一些问题,比如知识的局限性和实时性,能够解决大模型在垂直细分领域落地的难题,让大模型更接地气、给出的回答更贴近标准答案而不是一本正经的胡说八道。同时,让中小型企业可以基于开源大模型快速搭建自己的知识库问答(建议)系统,而无需对其进行二次训练或微调(算力和数据,包括大模型的训练门槛都是相当之高)。

2、RAG的劣势

引入了更多的技术栈,提升了系统的复杂性,无论开发还是后期维护工作量更高。同时,由于前期引入了“语义检索”的流程,涉及到准确性问题,一旦前期检索环节出问题,直接影响后面大模型效果。

3、RAG应用场景

RAG可以用在垂直细分领域的知识问答(建议)场景,对数据隐私要求比较高,同时对知识库实时更新有要求。当然除了本文介绍的这种基于知识库问答系统,类似的还可以用在基于数据库、基于搜索引擎等问答系统,原理基本类似。