Hi, Welcome to LICO META!

Innovating at the nexus of tech and soul.
生如夏花

记录和分享 - DIY 多波段便携倒 V 天线

记录分享一下我 DIY 倒 V 天线的过程以及一些心得体会。 注意,以下说的基本上都是短波波段,就是波长 80m ~ 6m 的无线电波。 (160m波段老老实实去用倒L或者GP吧……实在不行加感) 倒 V 天线简介 一个倒 V 天线是一种天线,类似于水平偶极天线,但两侧向下弯曲,通常在偶极子腿之间形成 120 度或 90 度的角度。就像偶极天线一样,这种天线有两个振子,分别连接与信号源的绝缘的两级。从侧面看,这种天线就像把字母 “V” 倒过来写,因此得名。 (图源自 VU2NSB,73!) 倒 V 天线有诸多优点: 由于只需要一个中心高支撑点,这种天线安装方便,简单可靠。 因其本质上是一种水平偶极子天线的变体,故发射和接收性能上也很有优势。 倒 V 天线可以方便地扩充波段,通常情况下每一组波段振子独立工作,这使其内部谐波干扰和共模电流几乎可以忽略不计,拥有相对纯净的本底噪声和相对不错的发射效率和抗干扰能力。 倒 V 天线也是有缺点的,不过我认为相对于其优点可以忽略不计: 由于振子不是完全水平的,倒 V 天线的辐射没有显著的方向性……相比较典型的偶极子的方向图像一个横着放的葫芦,倒 V 天线的辐射方向图就像一个横着放的鸭蛋。这对于某些需要方向性的场景而言有弱势。 (图源自 VU2NSB,73!) 天线的振子末端接近地面导致有地面反射效应,影响效率。天线发射时,振子末端做不好绝缘也是会触电的。(真 · 酥酥麻麻的感觉) 无法达到类似于对数周期天线那种无缝的丝滑的大范围波段覆盖。(喂喂喂这要求是不是有点太高了?!) 但是,但是,话又说回来,倒 V 天线的优点是很多其他天线没有的:简单可靠/多波段,架设安装要求低,在这种情况下还是平衡天线,效率和接收性能都还不错,属于一种相对六边形的天线,作为船上天线或者军用通讯的备份天线使用。当然,最多使用的还是穷 HAM 群体……(有钱谁不上 Harder, Better, Faster, Stronger 的天线 😭) 我与倒 V 天线的故事 从一开始用半波端馈入门到现在,我已经自己设计 DIY 了三代倒 V 天线了,每一代都总结了经验教训,改良优化设计,致力于打造:价格便宜,架设简单,性能优异,便于携带的倒 V 天线…… (怎么感觉像是在打广告) 目前我的倒 V 天线加上 10 米的馈线,总重只有 1....

January 12, 2025 · 2 min

从零开始的赛博老婆!5 - 总结与常态记忆加载

封面:PIXIV 82860854 @やたぬき圭 我们在上一篇已经了解了如何使用 MongoDB 存入每一次的对话记录。接下来我们将尝试使用这些聊天记录为我们的 AI 提供更加久远的记忆,我们将要自动化这一过程。 前言 在与 AI 的交互过程中,我们不可能每一分每一秒都在交互,要实现更加合理地管理聊天记录和记忆簇,我们将会使用 “会话” 机制管理每一次交互。注意,这与 ChatGPT 网页版交互理念是不一样的。区别在于,ChatGPT 提供了用户可选的 会话回溯 机制,我们可以找回之前的对话并继续之前的内容。但为什么在这里我没有采用这个方式呢?因为个人助理 有别于 单个 LLM 工具,她是具有 时空属性 的。你既可以理解为,我们的 AI 助理可以自动化回溯会话这一过程,也可以理解为这是一种“更拟人”的体现。在这种情况下,对话相对会更加自然而流畅,同时我认为 ChatGPT 网页版也是权衡成本,毕竟这么多用户全都自动化会话数据库那开销就要上天了。 你会发现,上一段话多次提到了会话这一概念,那我们如何理解呢? 会话 会话指的是两个或多个参与者之间的交谈或交流。在计算机和网络领域,会话通常指的是用户与系统之间的一段互动时间。例如,当你登录一个网站并与其进行交互(如浏览页面、发送消息等)时,这段时间就被称为一个会话。 会话超时 会话超时则是指在一段时间内没有任何活动后,系统自动结束该会话的状态。这通常是为了安全考虑,比如防止他人在你离开电脑时访问你的账户。比如,如果你在某个网站上停留了太久没有点击任何东西,系统可能会自动注销你,这个过程就叫做会话超时。 简而言之: 会话是你和系统互动的时间段。 会话超时是因为长时间没有互动而自动结束这个时间段的过程。 我们今天要实现的功能就是,设置一个会话系统,当会话超时了,系统会自动把刚刚的会话的所有内容进行总结,并存到 MongoDB 数据库里,便于后续我们回溯。 计时器模块 计时器模块我们有两个选择:线程计时器和异步计时器 。这两种计时器各有优劣,但是考虑到本教程是从零教程,同时由于使用异步计时器需要所有的异步操作都需要在事件循环中运行,这可能不利于读者理解。再加之不是所有的函数都是异步函数,故本篇文章暂时采用线程计时器作为会话超时的计时器使用。这里避免误导提前说明,没有对错,只有对于不同场景下的权衡利弊的选择。 我们上一篇文章为大家介绍了自定义模块,今天我们仍然会创建自定义模块。 我们创建一个 cyberaitimer.py 文件,它在文件树里面看起来应该是这样的: your_project/ │ ├── main.py └── cyberaimodules/ ├── __init__.py ├── cyberaimongo.py └── cyberaitimer.py # 计时器模块 下面是我们的模块代码: # 计时器模块 import threading class CyberaiTimer: """ CyberaiTimer 类用于创建一个定时器,在指定的超时时间后执行回调函数。 Attributes: timeout (float): 定时器的超时时间(以秒为单位)。 callback (function): 定时器超时后要执行的回调函数。 timer (threading....

October 26, 2024 · 9 min · Aqua

Gawr Gura Songs' World! - YMCA!! 紧跟时事版

紧跟时事 YMCA不完全统计至少有6个版本…… 距离那个Election没几天了,事情变地愈发有意思了起来。不过有个事情很有趣,那就是“All in 是一种智慧”。 无论最后结果如果,事情都会变得有意思起来了。 “砸了,玩砸了” “砸了吗” “砸了” “我怎么觉得好戏才刚开始呢” 哎嘿 According to incomplete statistics, there are at least six versions of the YMCA… With that election just days away, things are getting more interesting. But there’s something quite intriguing, which is “Going all in is a form of wisdom.” No matter what the final outcome is, things are going to become even more interesting. “Messed up, it’s all messed up....

October 23, 2024 · 3 min

Gawr Gura Songs' World! - Lost Boy Two Versions

据不完全统计,这首歌有至少7个版本,我挑了其中比较喜欢的两个版本: Based on incomplete statistics, this song has at least seven versions, and I’ve picked two that I particularly like: 第一个是升调的钢琴伴奏,这版本把钢琴和清唱的混响发挥到到了极致,展现了Gura极强的天赋。 我也很喜欢每首歌之前的独白,Gura的类似MC独白就像电台主持人哈哈哈,顺便还能学英语。 The first version features an uptempo piano accompaniment, which takes the reverb of the piano and a cappella to the extreme, showcasing Gura’s incredible talent. I also enjoy the monologues she does before each song; they remind me of radio hosts and are a fun way to learn English....

October 1, 2024 · 5 min

从零开始的赛博老婆!4 - 短期记忆与记忆体系

PIXIV: 94008036 @苏翼丶 Agent记忆体系浅谈 (我写完这篇文章再重新回看,记忆这两个词太多了,我发现我不认识“记忆”这两个字了,大家点点赞吧写教程真的消耗阳寿……(。 ́︿ ̀。) 从GPT3破圈那一刻起,大家对LLM的记忆体系就众说纷纭。从技术上来讲,一方面Transformer架构衍生出的一些技术促进了记忆体系的发展(如 Embedding/Vector Database),另一方面有需求催生了另一些技术(如 Graph Database)。但就从2023年发展到现在,Agent的记忆体系进展比较缓慢。 我在这些技术和概念的帮助下,设计了一套针对于赛博老婆的记忆体系。它的特点就是自动存取,同时可以保证分级的持久化记忆。 记忆概念分类 我想把赛博老婆的记忆体系分成三类:短期记忆,中期记忆,长期记忆。我们来分别解释这几个概念: 短期记忆 短期记忆有多短期呢?我认为短期记忆是包含最丰富的,最原始的信息的。就像人的记忆一样,人类每天都会忘掉很多事情的很多细节,但是你可能会记得刚刚发生的事情的并能够说出细节。我认为在LLM还没有开始总结或简化那一部分最原始的记忆之前的内容,都算作短期记忆。或者通俗一点讲,对于赛博老婆,每一个会话的上下文,或者每一天当天(昨天)的记忆,都算作短期记忆。因为这一部分记忆,包含了你和赛博老婆交互的原始记录。但是在这里,我想稍微延伸一点:我把当天的总结记忆和每一次会话的记忆也算作短期记忆之内。之所以如此规定,是因为在实际的记忆载入中,这类的近期记忆往往频率更高,同时需要相对详细的细节,他们往往是一起无条件载入的。也就是说,上下文记忆,默认是必要的,而上几次的对话,或者昨天聊了什么,也会有更大概率被提起,他们的载入频率也差不多,都很高。 会话:你和赛博老婆互动,聊了几句,然后你就去做别的事情了,比如说吃了个饭。当你吃完饭,可能已经过了会话超时时间,而你又不想继续之前的话题,而是聊点别的,于是赛博老婆就会开一个新的会话。这在后续的记忆结构化中有利于实体提取与记忆网的生成。 中期记忆 中期记忆有别于短期记忆,中期记忆是经过简化和总结的,也就是丢弃掉了某些细节而得到的记忆。但我们为什么称之为中期记忆呢?这仍然是属于对人脑记忆的模仿,人脑会暂存一部分正在进行的事情,并简化其中的内容,等到这个事件结束了,有了结果了,就会大幅度遗忘,可能最后只会保留一个印象,类似于:我曾经做过什么事情,当时的结果是……而对曾经事情的过程和细节,完全遗忘。而这类中期记忆也不会对永久记忆网产生较大的影响。 我们在这里举例说明:你在某个网购官方平台购买了一个全新显卡RTX 9090 Ti Super Plus Max Ultra 1024TB,你付款商家发货寄出快递。由于你一直心心念念这款超强的显卡,你一直记着有这么个快递在路上,于是没事儿就点开查询快递到哪里了。这就是属于中期记忆的“事件中”。过了几天,你的快递终于到了,你非常开心,迫不及待地拆了包装,安装上去,这时你可能已经忘记自己看了多少次快递跟踪了,也忘了它是几天内到达的,因为这个时候你很想把它安装到电脑上看看效果。这就是中期记忆的遗忘特性**,阶段性目标达成可能会遗忘掉很多细节,但是事件存在周期又远超“短期记忆”。你安装到了电脑,但是你发现用这个显卡跑LLM慢的要死,然后你惊讶的发现,由于某黄的精准刀法,RTX 9090 Ti Super Plus Max Ultra 1024TB虽然拥有超大的显存,但是其显存位宽却只有可怜的128bit——连下一代的10070 Ti Super Plus Max Ultra Gaming的升级版本的150bit都没有!在你不得不感叹某黄精准刀法的同时不由得骂:“Fxxk you Nvxdxa !!” 你很难过,在某海鲜市场折价出手,期间还没事就看一看某鱼,生怕买家到手刀或者无理由退款等逆天操作……终于,你是幸运的,你成功地卖出了显卡,这段风波画上句号。等到几年后你再想起这件事情,可能只会记得那印象深刻的阉割和那句“Fxxk you Nvxdxa !!” 这就是中期记忆的特点了,不是所有记忆都会变成中期记忆的,只是某些特定事件,周期不短不长的才有资格被称为中期记忆。另外,上述案例是虚构的,绝对不是真实事件改编!!! 长期记忆 好,终于聊到这里了。我们要开始加速了。 人脑的长期记忆是一个非常复杂的系统。我们搞赛博老婆只能尽量平衡“精简”和“功能”。然而,赛博老婆可不像人,当你真的需要她回忆很重要的细节的时候,可不能像人一样,卖个萌然后糊弄过去。赛博老婆的长期记忆需要能够回溯到最原始的对话记忆或相关文档。同时,大多数情况,仅仅是一些关键信息的提示。这就对索引和查询系统提出了很高的要求,长期记忆系统设计的关键,就是如何高效而精确地自动存取,尤其是取。 我把长期记忆的查询和索引分成两种模式,“模糊检索”和“关系检索”,对应RAG和Graph Query。这只是两种不同的检索方法,实际情况大多是混合的,也就是并行的。为什么要这么做呢?我们来看实际例子。 模糊检索:你需要让赛博老婆回忆一下你曾经都在哪几天消费超过500元。这时,“超过500元”是一个语意,他是和价值/开支相关的,这种情况记忆执行的是语意数量的范围检索,是相对模糊的。(因为记忆库是通用的,我们没有一个专门的账本数据库,不然的话直接表达式>500就可以解决)此时,语意模糊检索占大头,而关系检索占小头,关系检索仅作为实体或后续进一步细节查询的补充。 关系检索:你让你的赛博老婆帮你分析你自己现在的人际网并找出你人际网中其他人的潜在联系。此时,就会用到关系检索。关系检索依赖于图数据库,它会把记忆转化为实体并建立联系,当我们执行实体关系连锁检索时,Query的三元组会激活好几个初始节点,代表初始的查询实体。然后通过检索与这些实体相连接的其他实体的信息,返回结果。这时,与Query在时空上,或语意上或其他任何形式的关联,都会返回。后续可以进行多次的知识网跳跃或者进行网图归类重排,或者定位到某个范围很小的节点群,执行模糊检索等。 在上述案例中,我们不难发现,两大类检索方式经常时混合使用的,这也是目前的趋势。实际上,短中长期记忆在实际应用里也是混合使用的,只是可能每一次调用时侧重点或者强度不同。 记忆系统的相关技术 非关系型数据库(NoSQL) 例如MongoDB,作为一种非关系型数据库,在存储文本音频和图片等多媒体数据的时候很有用。因为我们所有的原始数据都存在这里,上级数据库溯源到这里,需要原始数据相对方便一点,后续更改添加条目,备份维护都比较简单。MongoDB的python SDK还是很不错的,同时Mongo DB部署的平台支持也不错。 嵌入(Embedding) 一种数据量化技术,与图数据库和向量数据库配合,对多媒体数据进行多角度量化(语意,声学特征,图像特征等),便于数据库和LLM进行处理。 向量数据库(Vector Database) 存储向量化的嵌入数据和对应的经过总结的二级数据,执行语意搜索,RAG,混合重排等。向量数据库很善于相似搜索,包括图片文本音频等。 图数据库(Graph Database) 图数据库善于处理实体关系和网络。通过图数据库,LLM可以高效地存储和处理实体之间的关系网络,这对于需要理解和导航复杂关联的应用场景非常有用。另一个例子是知识图谱的构建,Agent可以利用图数据库存储知识点及其相互关联的信息,并结合互联网搜索帮助你发现新的潜在内容,甚至可以进行时空事件预测。...

September 26, 2024 · 10 min · Aqua

Gawr Gura Songs' World! - Creep (Jazz ver.) | 每个人心中都有自己的瓦尔登湖

在Vtuber还没有兴起之前,人们会对这类行业嗤之以鼻,嘲讽而不看好,而即使到了现在,V圈也非常混乱。对于任何一个职业,可能或多或少都会有不开心的事情,都会有挑战。 Before the dawn of Vtubers, disdain and mockery were the unkind companions to such nascent dreams; few saw the luster in a trade poised for ridicule. Yet even now, as the realm of virtual stars is wrought with chaos and cacophony, it remains a testament to the relentless spirit of innovation. 这就像一个一个的 Creep 的故事,永远会有第一个人,但最后,很少有人记得那个艰难的开创一个行业的过程。我希望我能把这些故事一直口口相传下去。 It is akin to a tapestry of Creeps’ tales, each a ballad of perseverance. There will always stand a pioneer, yet seldom is the arduous journey of forging frontiers remembered....

February 13, 2024 · 2 min

Gawr Gura Songs' World! - Wonderwall | 经典绿洲,低声天籁

很久之前就想分享 Gawr Gura 的翻唱歌曲集了。全世界各地都有很多人在做相关的内容,但是我很难找到成体系的分享源。所以我打算开一个专版分享Gura的翻唱歌曲,每一首歌曲我都会精心制作,人工校对歌词,包括gura标志性的开场白和语气词等。但个人力量有限,难免会有疏漏,请不吝指出。 I’ve been wanting to share a collection of Gawr Gura’s cover songs for a long time. There are many people around the world creating related content, but it’s been hard for me to find a systematic, open, and high-quality source to share. Therefore, I plan to start a special section to share Gura’s cover songs. I will meticulously produce each song, manually proofread the lyrics, including Gura’s signature opening remarks and interjections....

February 11, 2024 · 3 min

从零开始的赛博老婆!3 - TTS浅谈与实践

PIXIV: 71888962 @Yuuri TTS浅谈 TTS(Text To Speech)是语音合成(Speech synthesis)的一个分支,文本转语音(TTS)系统将正常语言文本转换为语音。TTS系统对于提高交互性有帮助,最近技术发展迅猛,TTS 项目百花齐放。 从 RVC 的实时变声和动态语调优化,再到效果优秀的 VITS,生成对抗网络(GAN)的加持使其声音比以前自然了很多。随着 SO-VITS 强大的声调控制能力的实现,优秀数据集加持下的 Diff-SVC,虚拟歌姬的声音媲美真人,但也随之带来了一系列问题。在我浅显的认知中,我对语音合成还停留在初音未来那个时代,但是时代变化如此之快。目前TTS大有互相融合的趋势,例如 fish-diffusion 或者 Fishaudio 旗下的其他项目等,都有不小的进步。 开源项目如此繁盛,商用发展当然也不落后。看向商业阵营,各大公司都有其绝活。比如 Acapela Group 专门搞已故名人的 TTS,这非常有特色。还有众多公司专注于高质量或情感丰富的 TTS、定制声音等。而在商用TTS行业中,Azure TTS 可以说是龙头,我们本篇文章也会使用微软的免费 EdgeTTS 服务作为示例。 这里有一些相关的项目链接: Fish Audio GPT-SoVITS Retrieval-based-Voice-Conversion-WebUI 这里还有两个哔哩哔哩up主,专注于音乐翻唱相关的,也推荐参考: 领航员未鸟 东洋雪莲也比较有实力,但似乎不公开分享很多技术细节,故仅作介绍。 注意,现在互联网上有非常多的 TTS 引擎,除了上文介绍的,也可以去参考酒馆的 TTS 介绍页面~~(不过我不喜欢酒馆)~~,本文章仅使用较为稳定的 Edge-TTS ,初衷是用于实际应用。如果你需要完全本地使用 TTS 或者为了好玩个性化训练声音和特殊模型,本教程不适用,请移步到其他个性化 TTS 炼丹教程,比如 GPT-SO-VITS 等等。 Edge TTS TTS 接受文字输入,然后输出音频。对于 Edge TTS 的 Python 版本,它实际上是通过网络请求工作的。因此,它可以很好地在边缘计算平台上运行,因为音频合成是在云端计算并返回给你的。我们使用的是Edge TTS Python库,这里还有 GitHub 的项目网址:edge-tts。 安装Edge TTS 首先安装: pip install edge-tts Edge TTS 有两种工作方式,一种是使用命令行交互的方式,如果你只想使用命令模式,你可以使用 pipx 安装它(来自官网的教程):...

February 6, 2024 · 3 min · Aqua

从零开始的赛博老婆!2 - 基础Python环境搭建+接入大语言模型

Pixiv ID: 104755143 本文章开始我们逐步进行实战,本次为搭建python基本环境,然后接入大语言模型,以Open AI Chat GPT为例。 Python环境与依赖 当你想运行你的赛博伙伴,你的代码是需要依赖库运行的,本文章使用了Python基础库和openai等库。请注意,当你的电脑里的python环境里没有正确安装相应的依赖库,代码无法正常运行。 注:以下命令可能不适用于你的系统,请根据对应系统查询conda命令 安装python环境或者安装anaconda环境管理器 请去python官网或者anaconda官网里安装软件,二者选其一即可。本文推荐使用anaconda,避免出现好多个环境互相冲突的情况。 如果你使用ARM架构的系统,可以尝试使用MiniForge,这个项目对ARM Python环境有一些优化,还是不错的。 请注意,安装任意软件的时候请务必将其添加到系统变量或者系统路径中(大佬除外),否则无法使用CMD正常运行脚本,具体安装和排错等问题恕不在本教程范围内 一般选择默认安装即可,安装好anaconda之后,,用打开你的CMD命令行窗口,运行以下命令检查conda是否安装成功: conda -V # 或者 conda --version 如果出现“没有此命令”则安装不正常,请自行排错。 # 更新conda conda update conda # 更新所有包 conda update --all 创建一个python环境 注:本教程建议使用python3.11及以上版本,之前的版本没有经过测试,请尽量保证最新版本。 我们给我们的赛博伙伴项目创建一个虚拟环境,以后我们就使用这个环境运行和赛博伙伴相关的代码,这样后续你统计依赖列表打包Docker镜像的时候很方便。 使用此命令创建一个新的环境: conda create -n env_name 例如: conda create -n ai 激活环境并安装依赖 激活环境 使用以下命令激活特定的环境: conda activate env_name 例如我们刚刚创建了一个名为ai的环境,现在我们要激活它: conda activate ai 激活之后,我们所有的操作使用的就是这个环境里已经安装的包和依赖了,你会发现命令行的开头会有你当前的环境名称。每次你打开命令行,都检查一下是不是你所需要的环境,当然你也可以设置你的默认环境。 你可以使用这个命令: conda env list # 或 conda info --envs # 查看存在哪些虚拟环境 你可能要用到这个命令关闭这个环境(但是先不要关闭,我们还要继续使用这个环境):...

November 28, 2023 · 3 min · Aqua

Oceans

“Please tell us, Solon, have you ever heard of the name Atlantis from your ancestors or your father? Have they transmitted any information to you about that country?” Solon: “Yes, Critias, I have heard the name Atlantis from my father and my grandfather, but they only mentioned it in passing. My father told me that Atlantis was a great and powerful nation located in the middle of the Atlantic Ocean....

October 10, 2023 · 1 min