探索大型语言模型(llm):人工智能在理解与生成人类语言方面的先锋

大语言模型简介 大语言模型(LLM,Large Language Model),也称大型语言模型,是一种旨在理解和生成人类语言的人工智能模型。 LLM 通常指包含数百亿(或更多)参数的语言模型,它们在海量的文本数据上进行训练,从而获得对语言深层次的理解。目前,国外的知名 LLM 有 GPT-3.5、GPT-4、PaLM、Claude 和 LLaMA 等,国内的有文心一言、讯飞星火、通义千问、ChatGLM、百川等。 为了探索性能的极限,许多研究人员开始训练越来越庞大的语言模型,例如拥有 1750 亿参数的 GPT-3 和 5400 亿参数的 PaLM 。尽管这些大型语言模型与小型语言模型(例如 3.3 亿参数的 BERT 和 15 亿参数的 GPT-2)使用相似的架构和预训练任务,但它们展现出截然不同的能力,尤其在解决复杂任务时表现出了惊人的潜力,这被称为“涌现能力”。以 GPT-3 和 GPT-2 为例,GPT-3 可以通过学习上下文来解决少样本任务,而 GPT-2 在这方面表现较差。因此,科研界给这些庞大的语言模型起了个名字,称之为“大语言模型(LLM)”。LLM 的一个杰出应用就是 ChatGPT ,它是 GPT 系列 LLM 用于与人类对话式应用的大胆尝试,展现出了非常流畅和自然的表现。 LLM 的发展历程 语言建模的研究可以追溯到20 世纪 90 年代,当时的研究主要集中在采用统计学习方法来预测词汇,通过分析前面的词汇来预测下一个词汇。但在理解复杂语言规则方面存在一定局限性。 随后,研究人员不断尝试改进,2003 年深度学习先驱 Bengio 在他的经典论文 《A Neural Probabilistic Language Model》中,首次将深度学习的思想融入到语言模型中。强大的神经网络模型,相当于为计算机提供了强大的"大脑"来理解语言,让模型可以更好地捕捉和理解语言中的复杂关系。 2018 年左右,Transformer 架构的神经网络模型开始崭露头角。通过大量文本数据训练这些模型,使它们能够通过阅读大量文本来深入理解语言规则和模式,就像让计算机阅读整个互联网一样,对语言有了更深刻的理解,极大地提升了模型在各种自然语言处理任务上的表现。 与此同时,研究人员发现,随着语言模型规模的扩大(增加模型大小或使用更多数据),模型展现出了一些惊人的能力,在各种任务中的表现均显著提升。这一发现标志着大型语言模型(LLM)时代的开启。 LLM 的能力 涌现能力(emergent abilities) 区分大语言模型(LLM)与以前的预训练语言模型(PLM)最显著的特征之一是它们的 涌现能力 。涌现能力是一种令人惊讶的能力,它在小型模型中不明显,但在大型模型中特别突出。类似物理学中的相变现象,涌现能力就像是模型性能随着规模增大而迅速提升,超过了随机水平,也就是我们常说的量变引起质变。 涌现能力可以与某些复杂任务有关,但我们更关注的是其通用能力。接下来,我们简要介绍三个 LLM 典型的涌现能力:...

May 15, 2024 · 30 分钟 · 6220 字 · 熊鑫伟, 我

塑造职业道路:开源简历生成器与专业简历技巧指南

在求职的海洋中,一份精心准备的简历就如同一艘设计精良的帆船,能让你在竞争激烈的浪潮中乘风破浪。随着开源社区的蓬勃发展,现如今市面上涌现出许多优秀的简历生成工具,旨在帮助求职者以最低的成本制作出既专业又具有个性化的简历。本文将为你详细介绍几款顶尖的开源简历生成工具,并提供实用的简历制作和优化技巧。 🌟 精选开源简历生成器 📄 Visiky Resume 如果你想在网页上展示你的简历,并且需要多种定制选项,Visiky Resume 是一个不错的选择。这款工具提供三种内置模板,支持自定义主题颜色和模块标题,甚至还支持中英文双语版本,非常适合具有国际求职需求的用户。 🌍 GitHub 仓库 📝 在线生成器 ✒️ Markdown Resume 对于Markdown的忠实粉丝来说,Markdown Resume 提供了一种极简方式来构建简历。它支持丰富的Markdown编辑功能,并且能够直接导出为PDF,非常适合那些追求内容优先、格式简洁的技术写作者。 📖 GitHub 仓库 🖥️ 在线生成器 🎨 Typora Markdown Resume 通过结合Typora、Markdown和CSS,你可以自由地打造一个个性化十足的简历。对于那些熟悉网页设计或喜欢手动调整每一个细节的创意专业人士来说,这无疑是一个极好的选择。 🛠️ GitHub 仓库 🌐 木及简历 木及简历提供了一个全面且功能强大的在线Markdown简历编辑器,支持实时PDF预览、智能排版和云存储,非常适合那些希望远离繁琐Word处理的用户。 💡 GitHub 仓库 🌐 官方网站 📚 Awesome CV Awesome CV 是 LaTeX 用户的福音,提供多种精美的模板,适合那些追求极致专业外观的求职者。 🎓 GitHub 仓库 🔗 OpenResume 作为一个功能全面的简历生成器,OpenResume 允许用户快速创建现代化的专业简历,并提供在线编辑和预览功能。 🌟 GitHub 仓库 📊 在线使用 🔗 Online-CV: 国外热门的在线简历/在线名片 这是一个基于Jekyll的极简主题,用户只需简单操作即可在GitHub上托管自己的简历(CV)。...

April 19, 2024 · 1 分钟 · 125 字 · 熊鑫伟,我

这是一篇我职业生涯总结的 OpenIM 故障排查指南

如果你想在寻找一篇针对 OpenIM 并且准备好具体的问题想来这里找到答案的话。那么很遗憾的告诉你,这篇并不是记录问题和编写答案的,这篇是读者经过开发和业务实战中以 OpenIM 为例总结出来的故障排查的方法,以及调试的技巧。如果你想从我这里学习到故障的排查以及问题定位的经验,那么请你继续读下去。 我将会从工作中经常出现的一些情况总结成类型来分析。 一个小小的玩笑,或许我比较逆人性,其他人都很害怕遇到 bug 的时候,我倒是对出现 bug 比较兴奋,我们后期读代码的时间和维护代码的时间其实是远远高于写代码的时间的。所以面对 bug, 我们的思考和总结尤其是非常重要,尤其是帮我们在写代码的时候也思考,代码的扩展性,和错误处理,是否可以禁得起考验 ~ 故障排查的基本概念 故障排查,我主要是分为几种情况,分别是,编译的故障排查,启动的故障排查,以及服务运行故障排查。这几种情况的故障排查思路都是大同小异的。 首先,我们需要发现问题,然后定位问题。我们可能需要经过多轮分析排查才能定位到问题的根因,最后去解决问题。排障流程如下图所示: 开始 | V 发现问题 ------> 记录问题的症状和相关情况 | V 定位问题 | V 进行初步分析 --------> 确定可能的原因 | | V | 是否需要深入分析?-----> 是 ------> 进行深入分析 | | | | | V | | 确定具体原因 | | | | | V | <-------- 是否已找到根本原因? | | | 否 | V 是否解决了问题? | 是 ------> 记录解决过程和解决方案 | | 否 ------> 调整策略或寻求帮助 | V 结束 如果想排查问题并解决问题,你还需要具备以下两个基本能力:...

April 16, 2024 · 7 分钟 · 1478 字 · 熊鑫伟,我

探索开源以及开源商业模式研究

开源为我带来了很多的成长,很多的成长经验和学习途径都是通过开源获取到并且学习到的。 这里有一篇我的第一次开源的成长指南:https://nsddd.top/zh/posts/open-source-contribution-guidelines/ 之前,在深圳的 全球流量大会(GTC) 一些来自我对开源商业化的思考: https://github.com/cubxxw/blog/blob/main/content/zh/posts/openim-open-source-business-journey.md?plain=1#L2 第一次参与开源还是一个刚刚接触大学没多久 ~ ,调研了解到很多优秀的开源项目都会有很多业界大佬坐镇,因此会让大家以为只有“大牛”才能参与开源。实际上,开源社区经常会听到 “我是小白,我可以参与开源吗?” 这种声音,发出这种声音的同学往往是对开源感兴趣,但并不知道如何入手的小伙伴。 从开源定义来看,我们不需要成为“大牛”才能够参与开源。所谓开源,其实是一种促进个人成长和开源领域发展的行为,通过分享自身技术和经验来促进大家的技术交流,从这方面讲,开源是没有门槛的,只要有想要分享的东西,所有人都可以参与开源。 从参与要求来看,我们需要具备一定的知识积累才能参与开源。开源社区不是学校,社区会解答你的疑问,但首先你要有一定了解,才能准确提出你的疑问。对开源项目一无所知是无法参与开源的。当然,这与你是否成为“大牛”也并没有什么关系。因此,只要具备一定的技术积累,就可以参与相应的开源项目。 “罗马不是一天建成的”。没有人天生就是“大牛”,“大牛”们也是在参与中不断成长的,不要被虚无的 title 所困扰,只有不断的坚持和探索才能让自己不断成长! 其实旅游中也有过一些自己的思考,在旅游中我喜欢摄影,带着相机走走拍拍。或许和女生不一样 ,我开始的时候其实是更倾向于发现风景的,就像是在香港的麦理浩径的第一段和第二段的中间破边洲部分,我更多的是以人物在破边洲的悬崖边上,然后衬托后面的悬崖的美丽壮观。我们在工作中也是一样的, 在我们摄影的时候,我们面临对焦,开始在远方我们或许更多的是把焦点放在人物后面的背景上,或者说是 title,比如说某个人是某个大学、某某大厂的光环,反而忽略了他的本身。后面当你关注在人物身上,你会发现人物的美,你会想办法如何把漂亮的小姐姐这一瞬间记录下来。这个时候其实你更专注的是某一个人,这个转变很重要,你慢慢的发现自己专注自己了,而不是专注后面虚无缥缈的光环和头衔。 在开源社区中,我慢慢学习到了非常多的技巧,比如这里我总结出一篇开源社区的提问技巧:https://nsddd.top/zh/posts/the-art-of-asking-questions-in-open-source-communities/ 我对整个的开源成长也有自己的思考总结,写了这篇关于开源的成长性指南阶段,从我们第一次加入开源项目开始,到最后开源和维护自己的项目,以及商业化成长,可以参考: https://nsddd.top/zh/posts/stage-growth-of-open-source/https://nsddd.top/zh/posts/stage-growth-of-open-source/ 非常推荐阅读 ~ 在加入 OpenIM 的社区一年中,我将自己的开源理解和运营技巧都集成在了 OpenIM 的开源布道上,将 OpenIM 社区带入到了一个顶级的开源社区中来。除此之外,我参与过其他的优秀开源项目的贡献和维护,我会从自己的角度上来介绍如何运营一个优秀顶级的开源社区。 开源不仅是我的热爱,也逐渐成为我的一大优势。在我与开源的互动中,我们相得益彰。 开源除了给个人以及公司带来技术影响力之外,更为重要的是通过开源实现商业化价值,而这部分才是很多开源项目成功的实际驱动力。本文会介绍我对开源的理解,以及着重介绍自己对开源以及开源商业模式做了一个系统的研究,为决策项目是否应该开源、采用何种开源策略以及开源商业化路径提供参考意见。 如果你对我有兴趣,可以关注我的开源的 github 账户: https://github.com/cubxxw 开源商业模式 越是用户付费意愿强的功能,越是要闭源。越是用户觉得好玩的功能,能吸引到大家的功能,越是要开源。 我认为的开源商业模式是什么样的? 开源商业化模式文章后面会总结目前的所有的商业化模式,但是我觉得最主要的商业模式是 open-core 和 open-standard,还有一些非主流的,比如说开源软件免费,但结合硬件组合销售。 我认为: 越是用户付费意愿强的功能,越是要闭源。 越是用户觉得好玩的功能,能吸引到大家的功能,越是要开源。 我认为的开源商业模式是什么样的? 开源商业化模式文章后面会总结目前的所有的商业化模式,但是我觉得最主要的商业模式是 open-core 和 open-standard,还有一些非主流的,比如说开源软件免费,但结合硬件组合销售 开源也有自己的护城河吗? 担心开源后自己的产品被抄袭,开源,作为一个推动技术创新和社区合作的新力量,其商业模式多样,从提供专业支持和服务,到构建围绕核心开源项目的企业级产品。 我认为在开源的护城河上面,关键在于如何利用产品开源的独特价值和社区力量,创建难以复制的竞争优势。 所以基本上就是你要不是有开源 core 产品,作为线索漏斗去吸引你的用户,然后用这来做你整个公司的品牌,然后再做差异化功能的落地实践,然后另一种可能就是类似 MySQL 做咨询顾问的工作。 那么开源产品本身的护城河我理解其实抛开和普通产品护城河区别外,Open standard是今天开源软件商业化更好的一个形态,它对这个公司的技术能力提出了更高的要求。 open core 其实在云时代很难发展,即使是目前 OpenIM 那种做好 传统的 open core 模式在云时代下会比较难,可能难就难在构建好护城河,比如说跟那些云厂商比。各大云厂商,从各方面看,都有巨大优势:它本身就是一个大的流量资源,客户的流量在这里,推广的流量在这里,如果你很不幸,刚好跟这个云厂商贴在同一个赛道,你怎样去获得一个这个优势?这很困难,也是 MongoDB、Elastic、Redis 等开源厂商被逼的修改开源 License 背后的深层次原因。...

April 13, 2024 · 6 分钟 · 1121 字 · 熊鑫伟,我

Sora Ease 指南:开发者掌握 Sora AI 的全面指南

Sora 中文的提示词 | 调教指南。各种场景使用指南。学习怎么让它听你的话。兼顾了 Sora 的多场景应用。 这篇文章来源于 https://github.com/SoraEase/sora-prompt-zh 开源项目,SoraEase 希望为 sora 相关的开发者提供自动化,便捷,快速上手的工具和指南。 Sora | 索拉 是一个AI模型,可以从OpenAI的文本指令中创建逼真和富有想象力的场景。OpenAI正在教AI理解和模拟运动中的物理世界,目标是训练模型,帮助人们解决需要现实世界交互的问题。 如果你是 sora 的学习者,希望获取到 sora 的最新的咨询和相关的开发项目,以及 sora 相关的开源项目,这里 awesome-sora 提供了 sora 相关的Sora 中文指南,指令指南,应用开发指南,精选资源清单,Sora 开发者精选工具框架。 索拉可提供以下功能: 文本到视频 动画 扩展生成的视频 视频到视频编辑 连接视频 图像生成(文本到图像) 在这个存储库中,你会发现各种可以和索拉一起使用的提示。我们根据视频的风格分配了不同的标签,让你可以根据标签快速找到提示示例(Prompt)和生成的视频,并根据需要进行修改。 虽然索拉尚未正式发布,但我们正在全面收集提示,以帮助你快速开始使用索拉生成你想要的视频。 提示词 官方提示词生成器 视频生成提示 官方视频生成提示 一位时尚女性穿着一件黑色皮夹克,一条长长的红色裙子和黑色靴子,手拿一个黑色的手提包,在热闹的东京街道上行走。周围充满了温暖的霓虹灯和动态的城市标识。她戴着太阳镜和红色口红,自信而随意地行走。街道潮湿而反光,形成了五彩灯光的镜面效果。许多行人在周围走动。 生成视频链接 几只巨大的长毛猛犸象漫步在积雪覆盖的草地上,它们的长毛在微风中轻轻飘动,远处是积雪覆盖的树木和戏剧性的雪山,午后的光线和稀薄的云彩以及高高悬挂的太阳形成了温暖的光芒。低角度的摄像视角令人惊叹,捕捉到了这些大型毛茸茸的哺乳动物和美丽的摄影,景深感非常强烈。 生成视频链接 一个电影预告片,讲述了一位30岁的太空人的冒险故事,他戴着一顶红色的羊毛编织头盔,蓝天,盐沙漠,电影风格,35mm胶片拍摄,色彩生动。 生成视频链接 无人机俯视着波涛汹涌的大苏尔加雷角海滩的崎岖悬崖。蓝色的海水拍打着,形成了白色的波浪,而夕阳的金光照亮了岩石海岸。远处有一座灯塔的小岛,悬崖边覆盖着绿色的灌木。从道路到海滩的陡峭下滑是一个戏剧性的壮举,悬崖边突出在海面上。这是一个捕捉到海岸的原始美和太平洋海岸公路崎岖风景的景色。 生成视频链接 动画场景展示了一个近距离的短毛怪兽跪在一个正在融化的红色蜡烛旁边。艺术风格是3D和逼真的,重点放在光线和纹理上。画面的情绪是惊奇和好奇,怪兽睁着大眼睛,张着大嘴盯着火焰看。它的姿势和表情传达出一种天真和俏皮的感觉,好像它是第一次探索周围的世界一样。温暖色调和戏剧性的光线进一步增强了图像的舒适氛围。 生成视频链接 一个华丽的纸艺世界,一个丰富多彩的珊瑚礁,到处都是色彩缤纷的鱼类和海洋生物。 生成视频链接 这个特写镜头展示了维多利亚皇冠鸽子引人注目的蓝色羽毛和红色胸膛。它的羽冠由精致的蕾丝羽毛制成,而它的眼睛是醒目的红色。鸟的头微微倾斜,给人一种威严和威严的印象。背景模糊,突出了鸟的引人注目的外观。...

March 14, 2024 · 2 分钟 · 250 字 · 熊鑫伟,我

Sora 技术讨论以及普通人和开发者如何利用 Sora 改变世界

Sora !!! 近日,互联网上掀起了一阵关于Sora的热潮。作为OpenAI最新推出的技术,Sora赋予了文字生成视频的魔力,其展示的效果令人印象深刻。 在当前,短视频的吸引力已远超过传统的小说和图像漫画。因此,Sora的问世,可能会在视频制作领域引发一场革命。 Sora的魅力在于,它能够基于文本描述生成长达60秒的视频内容,这些内容包括了精细的场景设置、栩栩如生的角色表情,以及流畅的镜头转换。 这项技术能够塑造出多元化的角色,实现特定的动作,并且在主题和背景方面做到与描述高度一致。Sora不仅准确地理解用户的指令,还能深刻洞察这些元素在现实世界中应有的呈现方式。 Sora展现了对语言的深刻洞察力,能够精确捕捉用户的意图,创造出既生动又情感充沛的视频内容。它甚至能在同一视频中呈现多个场景,同时保证角色的连贯性和视觉风格的统一。 然而,Sora并非完美无瑕。在模拟复杂场景下的物理效应,以及理解特定因果关系方面,它仍有待提升。例如,视频中的角色可能会咬一口饼干,却未能在饼干上留下明显的痕迹。 此外,Sora在处理空间细节,如分辨方向,或是描述一段时间内的具体事件,如摄影机的移动轨迹时,也可能显示出一定的局限性。 简单来说,简单来说,Sora 是一种能用文本生成最长 60 秒视频的技术,也可以用来生成图片,因为图片本质上是一帧的视频。 这篇文章,将会从 Sora 的架构,然后到 Sora 的生态,以及最后普通人或者开发者如何利用或者使用 Sora ,为这个 AI 浪潮做准备 ~ Sora的架构与创新 Sora代表了在AI视频生成技术中的一次重大创新,它在架构上与之前的Runway及Stable Diffusion等基于扩散模型的系统有着明显的区别。核心之处在于Sora采用了Diffusion Transformer模型,这是一个结合了扩散模型和Transformer模型的先进架构,为视频生成带来了前所未有的灵活性和质量提升。 架构比较 Runway/Stable Diffusion:这些系统基于扩散模型,通过逐步向图片添加噪点,再逐步去除噪点的方式生成清晰图片。这一过程虽然能够生成高质量的图像,但在视频生成上存在限制,尤其是在处理长视频和维持视频一致性方面。 Sora:Sora利用Diffusion Transformer模型,通过Transformer的编码器-解码器架构处理含噪点的输入图像,并预测出更清晰的图像版本。这不仅提高了图像处理的效率,而且在视频生成上实现了显著的进步。Sora的创新在于它处理的基本单位不是文本的Token,而是视频的“Patch”,即随时间变化的色块,这允许Sora处理任何大小和长宽比的视频,无需预先裁剪或调整。 创新应用 Sora的架构使其能够在训练时使用更多的数据和计算资源,得到更高质量的输出。这种方法不仅避免了视频预处理可能导致的原始构图丢失问题,而且因为能够接收任何视频作为训练输入,Sora的输出不会受到训练输入构图不良的影响。此外,Sora展示了模拟复杂物理现象(如液体动力学)的能力,这得益于其在训练时使用的大量视频数据中包含的物理规则。 研究基础与启示 Sora的开发受到了《Scalable Diffusion Models with Transformers》和《Patch n' Pack: NaViT, a Vision Transformer for any Aspect Ratio and Resolution》两篇论文的启发,这些研究来自Google,并在Sora项目启动后不久发表。这些研究提供了Sora架构的理论基础和技术细节,为Sora及未来AI视频生成技术的发展奠定了坚实的基础。 通过结合扩散模型和Transformer模型,Sora不仅在技术上实现了突破,而且为视频制作和AI应用开辟了新的可能性,预示着AI在影视制作、内容创作等领域的未来将更加广阔和深入。 Sora 和之前的 AI 视频生成工具有什么升级 Sora在AI视频生成领域的出现,标志着技术进步的一个重要里程碑。与早期的AI视频生成工具相比,Sora引入了一系列创新和升级,这些改进不仅提高了视频的生成质量,而且极大地扩展了视频创作的可能性。以下是Sora与之前AI视频生成工具的主要升级和优化: 提升生成视频的质量和稳定性 Sora的技术进步主要体现在能够生成高质量视频的能力上。与之前的工具相比,Sora生成的视频可以达到长达60秒的长度,同时支持镜头切换、确保画面中的人物和背景的稳定性,以及实现高画质输出。这些改进意味着使用Sora生成的视频更加逼真,观看体验更佳,为用户提供了更为丰富和动态的视觉内容。 创新的技术架构:Diffusion Transformer模型 Sora之所以能够实现上述优势,归功于其基于Diffusion Transformer模型的创新技术架构。这一架构融合了扩散模型和Transformer模型的优点,使Sora不仅能够生成文本内容,而且能够预测生成所谓的“时空补丁”。这些时空补丁可以理解为视频中的一个小片段,包含了几帧视频内容。这种方法使得Sora在训练过程中不受视频长度和显卡性能的限制,生成过程更加灵活多样,能够组合不同的时空补丁来创造出新的视频内容。 灵活性和多样性的增强 与基于Diffusion模型的Pika或基于Transformer模型的LLM和ChatGPT等工具相比,Sora的技术架构赋予了它更高的灵活性和多样性。Pika在处理视频内容时受到显卡性能的限制,而且主要模式集中在基于图片关键帧的视频扩展或风格转换上。Sora则通过其独特的模型,能够无需拘泥于特定的视频分辨率或长度限制,创造出更加丰富和多变的视频内容。 Sora 的算力要求 在讨论Sora的使用成本和算力要求之前,我们需要明白AI视频生成技术特别是像Sora这样的先进模型,其成本和算力需求是由多种因素决定的。这些因素包括但不限于模型的复杂度、生成内容的分辨率、视频的长度、以及所需的生成质量。以下是对Sora使用成本和算力要求的一个专业化和详细的分析。...

February 24, 2024 · 2 分钟 · 221 字 · 熊鑫伟,我

双剑合璧:结合GitHub与Google Workspace的项目管理艺术

双剑合璧:结合GitHub与Google Workspace的项目管理艺术 之前写过一篇 从理论到实践的项目管理打通 。 其中介绍了 Github 的项目管理方式 Github Projects,以及配合 Github 实现整个开发和项目管理打通,但是可能会出现一些问题,今天来聊聊其中会出现的问题,以及给出对应的解决方法,顺便总结一下现阶段自己认为的开源项目做项目管理的最佳实践方法。 google projects VS github projects GitHub Projects 针对开发者:GitHub Projects特别适用于软件开发项目,因为它紧密集成了GitHub的代码仓库、问题跟踪(Issues)和拉取请求(Pull Requests)。 项目管理功能:提供看板(Kanban)和项目里程碑跟踪,便于管理项目的进度和任务。 开源友好:对于开源项目尤其友好,使得与全球开发者的协作变得简单。 集成和自动化:通过GitHub Actions,可以实现持续集成和持续部署(CI/CD)等自动化流程,与项目管理紧密结合。 Google Projects Google Workspace集成:如果你已经在使用Google Workspace(前身为G Suite),那么Google Projects(指的是Google的某些项目管理工具,如Google Tasks或者更广泛的Google Workspace应用)可能提供更好的集成体验。 通用项目管理:可能更适合非软件开发的项目管理,如营销活动、HR项目等(如Google Docs、Sheets、Slides等)。 协作和共享:Google应用的强项在于实时协作和文件共享,适合需要紧密协作的项目团队。 以前是单打独斗,或者是简单的开发小团队,那么 Github Projects 必然是最合适的,如今需要考虑到更多人的参与,更有序的资源和文档的管理,那么对于现在来说,可能需要更多的优化协作。 比如说一些重要的文档记录,一些重要的表格,以及 PPT 演示,会议记录,以及一些日程安排。但是对项目本身来说,结合Github问题追踪和拉取请求又非常重要。 我希望组合使用GitHub Projects和Google Projects(或Google Workspace的相关工具)进行项目管理,可以根据各自的优势制定一个最佳实践方案。这样做可以充分利用两个平台的优点,实现更高效和全面的项目管理: 1. 使用GitHub Projects管理开发活动 代码管理和追踪:利用GitHub的核心优势,将所有代码管理任务(包括版本控制、分支管理等)以及与代码直接相关的活动(如Bug追踪、功能请求等)保留在GitHub。 自动化工作流:通过GitHub Actions实现自动化,比如自动测试、构建和部署,以及自动化的问题和拉取请求管理。 项目看板:使用GitHub Projects的看板功能跟踪开发进度,如待办事项、进行中和已完成任务。 2. 利用Google Workspace管理项目的其他方面 文档和文件共享:使用Google Docs、Sheets和Slides来创建和共享项目文档、计划和报告,利用它们强大的实时协作功能。 通信和会议:通过 Google Meet 和 Gmail 进行项目会议、沟通和更新,保持团队成员之间的紧密联系。 任务和日程管理:利用 Google Tasks 和 Calendar 管理非开发任务(如市场活动、人力资源计划等)以及重要的项目里程碑和会议安排。 最佳实践方案 集成工具使用:探索和使用第三方工具或脚本实现GitHub和Google Workspace之间的数据同步。例如,可以自动同步GitHub Issues到Google Sheets作为任务列表,或者在GitHub里程碑变更时自动更新Google Calendar。 明确分工和规范:在项目开始时明确规定哪些任务和活动应该在GitHub上管理,哪些应该使用Google Workspace工具。制定明确的团队协作和沟通规范,确保所有项目成员都清楚使用哪个工具以及如何使用。 定期检查和调整:项目管理方法和工具的选择应根据项目的实际情况进行调整。定期回顾团队的工作流程和工具使用情况,根据反馈和项目需求进行必要的调整。 谷歌项目管理工具:所有你需要知道的 对于 Github 的项目管理,可以阅读 从理论到实践的项目管理打通 ,以及 Github Projects 官方网站 https://docs....

February 22, 2024 · 3 分钟 · 595 字 · 熊鑫伟,我

Go 源码里的这些 go: 指令 && go 自动化工具

Go 源码里的这些 go: 指令 && go 自动化工具 开发人员有很强的自动化重复性任务的倾向,这也适用于编写代码。 样板代码可能包括设置基本文件结构、初始化变量、定义函数或导入库或模块等操作。 在某些情况下,包提供样板代码作为开发人员构建的起点,通常是在代码行为配置之后生成。 尽管样板代码对于应用程序功能可能是必要的和有价值的,但它也可能是浪费和冗余的。出于这个原因,有许多工具可以最小化样板代码。 go generate 是Go编程语言的命令行工具,允许自动生成代码。您可以使用 go generate 为您的项目生成易于修改的特定代码,使该工具在减少样板文件方面功能强大。 go generate 这个命令通常用于在编译前自动生成代码。它可以用来创建那些重复性高或者模式化的代码,从而节省时间和减少错误。想想看,这在哪些情况下会特别有用呢?🤔 比如说下面有一个简单的例子,在代码中: //go:generate echo Hello, cubxxw ! 在这个例子中,当我们运行 go generate 命令时,它将执行注释中指定的命令。在这个例子里,它会打印出 “Hello, cubxxw !"。 因此,元编程(metaprogramming)的主题是一个开发和研究的热门领域,可以追溯到 1960 年代的 Lisp。元编程中一个特别有用的领域是代码生成(code-generation)。支持宏的语言内置了此功能;其他语言扩展了现有功能以支持这一点。 go:generate 在我们之前的讨论中,我们已经介绍了 “Go Generate” 命令的基础知识。现在,我们将深入探讨一些更具体的用例和实践技巧。🚀 让我们从一些术语开始。go generate 工作方式主要由三个参与者之间协调进行的: Generator:是由 go generate 调用的程序或脚本。在任何给定的项目中,可以调用多个生成器,可以多次调用单个生成器等。 Magic comments:是 .go 文件中以特殊方式格式化的注释,用于指定调用哪个生成器以及如何调用。任何以文本 //go:generate 行开头的注释都是合法的。 go generate : 是 Go 工具,它读取 Go 源文件、查找和解析 magic comments 并运行指定的生成器。 需要强调的是,以上是 Go 为代码生成提供的自动化的全部范围。对于其他任何事情,开发人员可以自由使用适合他们的任何工作流程。例如,go generate 应该始终由开发人员手动运行; 它永远不会自动调用(比如不会作为 go build 的一部分)。此外,由于我们通常使用 Go 将二进制文件发送给用户或执行环境,因此很容易理解 go generate 仅在开发期间运行(可能就在运行 go build 之前);Go 程序的用户不会知道哪部分代码是生成的以及如何生成的。(实际上,很多时候会在生成的文件开头加上注释,这是生成的,请别手动修改。)...

January 25, 2024 · 5 分钟 · 973 字 · 熊鑫伟,我

Go 语言中的并发类型检查与跨平台开发

OpenIM 跨平台源代码类型检查工具 开始 问题 在 OpenIM 的自动化道路中,涉及到越来越全面的自动化设计和测试,在这个过程中,我遇到了一个问题,于是完成了从 go 语言类型检测再到集成本地以及 CI 的全套体验。 问题是这个 issue:https://github.com/openimsdk/open-im-server/issues/1807 我们的 Go 代码在 32 位系统(linux/386)上运行时遇到了整数溢出问题。出现这个问题的原因是 Go 中的 int 类型随体系结构的不同而大小不同:在 32 位系统上相当于 int32,而在 64 位系统上相当于 int64。 恰好在 64 位机器上正常运行,但是在 32 位机器上会出现溢出的问题,于是想着去做一套检测的工具,来解决各个平台的类型检测。 第一部分:Go 语言基础回顾 在深入探讨代码之前,让我们回顾一下 Go 语言的一些基本概念,特别是包管理、并发编程和类型系统。这些概念是理解和使用 Go 语言进行有效编程的基础。 包管理 包的概念 Go 语言中的每一个文件都属于一个包,包是多个 Go 文件的集合。 包用于组织代码,防止命名冲突,并提高代码复用性。 导入包 使用 import 语句来导入其他包。 可以导入标准库包、第三方包,或自定义包。 创建自定义包 在项目中创建一个新的目录,该目录下的 Go 文件属于同一个包。 包名通常与目录名相同,但不是强制性的。 并发编程 Goroutine Go 语言的并发单元称为 goroutine。 使用 go 关键字来启动一个新的 goroutine。 Goroutine 比线程更轻量,能有效利用多核处理器。 Channel Channel 是用于在 goroutines 之间传递消息的管道。 可以是带缓冲的或无缓冲的。 通过 channel 进行数据传递可以避免竞态条件。 类型系统 类型声明 Go 是一种静态类型语言,每个变量都有一个明确的类型。 支持基本类型(如 int, float, bool),复合类型(如 struct, slice),以及用户定义的类型。 接口 接口类型是一种抽象类型,它指定了一组方法,但不实现这些方法。 任何具有这些方法的类型都可以实现该接口。 接口提供了一种方式来指定对象的行为。 类型断言和反射 类型断言用于检查接口值的动态类型。 反射是一种检查、修改变量类型和值的方法。 类型声明 在 Go 语言中,类型声明是定义新类型的方式。Go 支持多种类型,包括基本类型(如 int、float64、bool)、复合类型(如 array、slice、map、struct),以及接口类型。通过类型声明,你可以创建自定义的类型,这对于编写清晰、易于维护的代码非常重要。...

January 24, 2024 · 15 分钟 · 3176 字 · 熊鑫伟,我

向量数据库的学习

今天学习 rust ,发现 rust 是非常适合编写数据库的语言,找到了一个宝藏的项目 tikv,它的 github 项目地址是 https://github.com/tikv/tikv,是一个非常活跃的项目,但是我今天的主题是 AI 领域的向量数据库,话不多说,我们马上开始吧。 先决条件 0.1 基础知识介绍:了解向量数据库的基本定义及其与传统数据库的区别。 0.2 数据结构基础:学习向量和其他基本数据结构,如何在数据库中表示和操作这些结构。 0.3 线性代数入门:介绍向量运算,包括向量加法、减法和点乘。 0.4 相似性度量:了解如何计算向量间的相似度,例如余弦相似性。 0.5 数据库索引基础:介绍数据库索引的基本概念,特别是在向量数据库中的应用。 0.6 搜索算法初步:学习基础的搜索算法,理解如何在大型数据集中进行有效的搜索。 0.7 应用案例研究:研究向量数据库在不同领域(如推荐系统、图像识别)中的应用。 主要课程 1.1 向量数据库深入:探索向量数据库的高级特性和优势。 1.2 算法探究:深入了解在向量数据库中使用的关键算法,包括索引和搜索算法。 1.3 数据库设计:学习如何设计和实现一个有效的向量数据库架构。 1.4 集成机器学习:了解如何将向量数据库与机器学习模型集成,以提高性能和功能。 1.5 实际案例分析:通过分析实际案例来加深对向量数据库应用的理解。 1.6 高级数学概念:深入学习相关的高级数学概念,如高维空间的向量表示和操作。 1.7 项目实践:开展一个小型项目,实践向量数据库的设计和应用。 1.8 回顾和评估:复习所学内容,并通过评估来测试理解和应用。 0.1 基础知识介绍 向量数据库是一种特殊类型的数据库,它们使用数学向量来表示和存储数据。这与传统数据库有很大的不同,传统数据库通常使用表格和行来组织数据。 向量数据库的定义 💡 向量数据库是如何工作的? 在向量数据库中,数据以向量的形式进行存储和处理,因此需要将原始的非向量型数据转化为向量表示。数据向量化是指将非向量型的数据转换为向量形式的过程。通过数据向量化,实现了在向量数据库中进行高效的相似性计算和查询。此外,向量数据库使用不同的检索算法来加速向量相似性搜索,如 KD-Tree、 VP-Tree、 LSH 以及 倒排索引 等。在实际应用中,需要根据具体场景进行算法的选择和参数的调优,具体选择哪种算法取决于数据集的特征、数据量和查询需求,以及对搜索准确性和效率的要求。 它们是如何使用向量来存储和处理数据的? 向量数据库使用数学向量来存储和处理数据,这与传统的数据库存储方式有显著不同。这里的关键步骤和概念包括: 数据转换为向量 🔄 在向量数据库中,数据首先被转换为数学向量的形式。例如,文本数据可以通过自然语言处理技术转换为向量,图像数据可以通过深度学习模型转化为向量。 向量表示 📈 每个数据项都被表示为一个向量,这个向量在多维空间中有其特定的位置和方向。这些向量通常在高维空间中,每个维度代表数据的一个特征。 相似性搜索 🔍 向量数据库的一个关键功能是相似性搜索。它通过比较数据项的向量之间的距离(例如,使用余弦相似性)来找到相似的项。这对于处理复杂查询和大数据集特别有效。 索引和检索 📚 向量数据库使用高效的索引机制来快速检索和访问数据。这些索引帮助数据库快速定位查询中涉及的向量,从而加快搜索速度。 机器学习集成 🤖 许多向量数据库可以与机器学习模型紧密集成。这允许数据库不仅存储数据,还可以通过模型直接处理和分析数据,从而提供更高级的数据处理和分析能力。 通过使用向量来表示和处理数据,向量数据库能够处理更复杂、更丰富的数据类型,同时提供更快的搜索和检索性能。这使它们在如今的数据驱动世界中变得越来越重要。...

January 20, 2024 · 5 分钟 · 954 字 · 熊鑫伟,我