什么是序列化和反序列化
理论上 这是基础中的基础,但是说实话越是基础越是不容易去细看,我一直只有模糊的概念,比如以Java为例,一个对象返回给前端是用的 json,对象->json 的过程就是序列化,json 到对象都过程就是反序列化,但是具体是对错与否,帮我进行这个操作的函数、框架下面是不是还有更多内容,却从未深究,这次水一篇博客来讲一讲这是什么意思 定义 互联网的产生带来了机器间通讯的需求,而互联通讯的双方需要采用约定的协议,序列化和反序列化属于通讯协议的一部分。通讯协议往往采用分层模型,不同模型每层的功能定义以及颗粒度不同,例如:TCP/IP协议是一个四层协议,而OSI模型却是七层协议模型。在OSI七层协议模型中展现层(Presentation Layer)的主要功能是把应用层的对象转换成一段连续的二进制串,或者反过来,把二进制串转换成应用层的对象–这两个功能就是序列化和反序列化。一般而言,TCP/IP协议的应用层对应与OSI七层协议模型的应用层,展示层和会话层,所以序列化协议属于TCP/IP协议应用层的一部分。本文对序列化协议的讲解主要基于OSI七层协议模型。 序列化: 将数据结构或对象转换成二进制串的过程 反序列化:将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程 这里摘自 美团技术团队 15 年的文章,我也就从这里开始引入吧 通俗比喻 假设你家有很多家具:沙发、电视、冰箱、床…… 搬家的时候,你得把它们拆开、装进箱子,贴上标签 —— 这就是序列化。 到了新家,打开箱子、按照标签重新组装、恢复成原来的样子 —— 这就是反序列化。 由浅入深 现在从最常见的序列化协议入手,先是 json ,这个在现代系统里面最常见了,打开web 也好,网络请求很多都是用 json 传输内容的。那么 who is ‘Json’ json 1 2 3 4 { "name": "Ray", "age": 25 } 大概就长这样,如果我把它放到 Java 对象里面 它可以是这样的 java 1 2 3 User user = new User(); user.setName("Ray"); user.setAge(25); 这个 user 实际上存在于内存中。 而 Java 内存里是怎么存的? 栈(Stack)里只保存引用:user → 0x1008 真正的数据在堆(Heap)里面: 1 2 3 4 5 6 7 8 9 10 11 12 13 0x1008 (User 对象) ┌──────────────────────────────┐ │ Object Header │ │ klass pointer │ │ │ │ name ───→ 0x2010 │ │ age = 25 │ └──────────────────────────────┘ 0x2010 (String 对象) ┌─────────────┐ │ value="Ray" │ └─────────────┘ ...
把 Qwen3-VL 塞进 RK3588:一次端侧 VL Agent 的小实验
昨天刷到一个 AI 移动硬盘的广告,结合前段时间老板和我说的 AI NAS,本来没怎么放在心上,因为我本身不会是前者的客户,后者又不是小公司能做的,不过整理硬件的时候,发现一个 Frefly 的 RK3588 盒子,灵机一动、RK3588 有 NPU,理论肯定有人做这个端侧LLM 的推理。 AI 移动硬盘 比如一个相册管理器。照片都在本地,模型在本地看图、打标签、生成描述、回答“帮我找去年海边那张有红色帐篷的照片”之类的问题。隐私不出设备,速度也足够交互。这个方向如果成立,小模型就不是“缩水版云模型”,而是一个很适合本地数据管理的入口。 话不多说,现成的代码开始一键运行。 硬件和模型 板子信息: 项目 配置 板子 Firefly AIO-3588L SoC RK3588 内存 8GB 系统 Ubuntu 22.04.5 Kernel 6.1.118 NPU driver 0.9.8 模型选的是已经转换好的 RKLLM/RKNN 版本: 文件 作用 大小 qwen3-vl-2b-instruct_w8a8_rk3588.rkllm LLM decoder 约 2.3GB qwen3-vl-2b_vision_rk3588.rknn vision encoder 约 812MB 空间占用如下 bash 1 2 3 4 5 firefly@firefly:/userdata/rkllm_demo$ df -h / Filesystem Size Used Avail Use% Mounted on overlayroot 52G 6.0G 44G 13% / firefly@firefly:/userdata/rkllm_demo$ du -sh . 3.2G . 第一版:能跑,但速度不对劲 最开始我用官方 multimodal C++ demo 包了一层 FastAPI,再写了一个简单网页。网页支持: ...
观李开复访谈有感
李开复 - 维基百科,自由的百科全书 首先总结我对他的认识,零一万物的 CEO,和我爸一个年纪,过去的经历和争议我不太了解,第一次看到他是从两个访谈,一个是抖音他自己的号发的采访(《华尔街日报》领导力研究院院长艾伦·默里(Alan Murray)和他的对话),一个是虎嗅的采访,我google 了一下关键词,虽然几个类似的热点好像在两年前就有炒过,并且很多人对他的评价褒贬不一,但是由于我孤陋寡闻,现在才接触到这两个内容,对我而言还是有一些帮助,所以记录一下。 这个是还有一个原因来自于这篇文章带来的提醒为什么懂得越多的人,越容易陷入“输入狂热,输出瘫痪”有空也得再写一篇 我总结一下虎嗅的采访中的关键点 他见了谁 最近一直在飞来飞去见各种 CEO 甚至总统 见这些人干嘛 (赚钱嘛)扯了很多,其实就是从上而下的 FDE(也许可以这样说)/解决方案提供 他们公司的业务现在做的是什么 To B 做类似 Palantir 干的活,这个公司我第一次听说,叫 GPT 帮我总结他是个给政府和大型机构做数据 + AI + 决策 + 行动的一体化操作系统公司。 他们对未来的看法 要盈利,然后盈更多的利 哈哈哈我总结的也很简单,但是为什么说对我来讲有帮助,真正让我有收获的,并不是李开复本人,而是采访里的一个信号:很多 AI 公司已经不再讨论模型,而是在讨论企业如何真正把 AI 接进业务流程。对我而言一来扩展了好多领域的词,原来一些大公司如 Palantir 做这些出发点这么早,二来也确实回答了我现在所在公司看到的情况,给别的企业开发也好,咨询也好,一个 Agent 产品,软件,系统,是很难切入公司的运转流程,里面有一个比喻那就是“马车装火车引擎”。 由于我对其他产业的了解实在很浅薄,我用程序员 软件开发公司来比喻,同时 AI 也是在如今开发领域落地最成熟的。从一个未接触 AI 的程序员的角度出发, 今天我了解了 codex 能帮助我写代码,一个月花 20 刀就够了,写了两天发现得用 200 刀,而工资没有超过 2000 刀,这个成本很高。 AI 把我的活都干了,在公司里我干的活更快了,而在一个公司里如果是协作状态,我的高产出会给到我的下游压力。下游同事的角度就不爱干了,同时也会给平级同事压力,大家都不用 AI 产出都差不多,而我遥遥领先,是不是显得他们没用(工贼!) 大家都用 AI,消耗很高,要公司买单,老板终于接触到 AI 了,一开始开心点头,没多久发现这笔账不划算。因为 十个人+十份 AI 套餐的产出其实有冗余,因为公司一般不会需要不停的新开发, 居然还不如 五个资深会用 AI 的+ 五份套餐,降本后也能维持原本的效果。 这应该是 AI 在过去一段时间大部分公司落地最明显的场景。而这个场景,和我们这种公司无关,赚不到钱。因为大家都想用顶级模型,如果有企业内网开发,需要自部署顶级模型,比如 GLM5.2,算一下权重接近 1T 多的大小,一台8 卡H20的服务器在 130 万左右,只能跑个量化模型,还很难支持并发,这在开发场景下几乎不可用,这个账一算就是无法接受的。那么这条路也堵死了。也许也有人愿意跑一些小型模型,比如 Qwen 系列 80-30B 之间的各种模型,这样子成本下来了,但是模型的能力也下来了,也许只能做很小部分的辅助(补全),根本做不到提效的效果。 ...
OpenAI Codex CLI-使用教程
原文地址:OpenAI Codex CLI | New API OpenAI Codex CLI 项目介绍 Codex CLI 是一个来自 OpenAI 的编码代理,可在您的计算机上本地运行。 官方主页:https://chatgpt.com/codex 项目主页:https://github.com/openai/codex 效果演示 特性 功能分类 特性 终端式编码助手 Codex CLI 是一个基于终端的交互式编码助理,用于在命令行中编辑代码、生成补丁并运行命令。 工具驱动架构 提供 apply_patch、shell、update_plan、multi_tool_use 等工具,用于对仓库文件和操作进行可控修改。 原子补丁编辑 使用专门的补丁格式通过 apply_patch 原子地添加/更新/删除文件,便于审计与回滚。 沙箱与审批 支持沙箱策略(如 workspace-write、read-only)和审批模式(on-request、on-failure、never),控制写入与网络访问权限。 计划追踪 update_plan 用于列出步骤并跟踪状态,要求始终只有一个 in_progress 步骤以保持明确进度。 交互规范 在重要操作前发送简短前导说明,保持语气友好、简洁并提供进度更新。 安全约束 遵循严格规则(不随意更改无关文件、不添加版权头、不执行破坏性命令),需要用户批准敏感操作。 测试与格式化 推荐在修改后运行相关测试与格式化工具,但不负责修复与当前任务无关的问题。 输出与风格 最终输出遵循 CLI 渲染规范(例如 ** 标题、反引号表示路径/命令),保持可扫描的简洁结构。 并行执行 支持通过 multi_tool_use.parallel 并行运行多个工具以提升效率。 AI 模型配置方法 Windows 端图文指引 1.打开终端 2.安装 WSL 为在 Windows 上获得最佳性能,请安装并使用 Windows Subsystem for Linux (WSL2)。 ...
rg 入门教程
今天在看 codex 的 system prompt 看到对 codex 的要求是 优先用 rg,我只知道这个工具比 grep 快,似乎是个现代化的 grep,那得学,我是现代人。 参考了几篇文章:Levon 的 文本搜索神器rg的使用教程、Autumn Skerritt 的 Ripgrep cheatsheet、Marius Schulz 的 Fast Searching with ripgrep,以及官方的 ripgrep README 和 User Guide。 这篇不是全文搬运。我只是把我最可能用到的东西重新按自己的脑回路记一遍。 rg 是干嘛的 一句话: rg 是用来在文件里搜文字的命令。 它的全名叫 ripgrep,但是命令名是 rg。 最基础的样子长这样: bash 1 rg "要搜索的内容" 这行命令的意思是: 在当前目录下面,递归搜索所有文件,只要某一行包含 "要搜索的内容",就把那一行打印出来。 这里有几个初学者必须先钉死在脑子里的点: rg 默认就是递归搜索,不用像 grep -R 那样自己加 -R 不写目录时,默认搜当前目录,也就是 ./ 它默认会读 .gitignore 它默认不搜隐藏文件,比如 .env 它默认不搜二进制文件,比如图片、数据库文件 它默认把搜索内容当正则表达式,不是纯字符串 安装和确认 Mac 上一般就是: bash 1 brew install ripgrep Ubuntu / Debian: bash 1 sudo apt-get install ripgrep Windows 如果用 Scoop: ...