2026年4月

最近给我女儿 vibe 了一个 AI 讲故事的一个应用,她很喜欢,我老婆也觉得喜欢。主要就是在 APP 里,用户使用 AI 生成一些指定主题的故事,可以讲给孩子听。

其实也算是 vibe 快结束了,然后突然想到,这类属于 AIGC 应用了吧,好像个人是很难上架国内 Android 的,是这样么?

苹果不知道有没有类似的限制。

我问了一下 AI,个人超难,几乎不太可能。注册公司的话,得去申请一大堆东西好像,成本感觉有点高。不是很想注册公司

换工作将近 3 年了,突然发现,这三年里开会很少几乎没有。给领导汇报工作有专门的人写周报润色。
闲下突然想起在互联网时候的工作的气氛了,现在感觉我再也回不去那种高效的工作状态了。没有争论
也没有今天非完成不可的 deadline 。没有满脑子想工作的事。也没有听谁说这需求 SB ,那人 SX !
现在的状态:不去想需求合理不合理,你说啥就是啥;时间充裕了却不知道干点啥不想研究新东西,不想多干一点
工作能拖就拖。再也没有那种工作上的成就感。讨厌现在的状态但在舒适区不想走出来 就是厌倦 索然无味的感觉!

这篇文章只讲本项目里“OCR文字识别”工具的功能 JS 实现。页面层用 Vue 负责挂载和交互,真正的识别链路由前端脚本完成:上传图片、可选预处理、创建 OCR worker、执行识别、输出文本结果。

在线工具网址:https://see-tool.com/ocr-text-recognition
工具截图:

核心流程可以概括成一条线:

选择图片 -> 读取为 DataURL -> 可选 Canvas 预处理 -> 创建 Tesseract Worker -> 识别文字 -> 输出文本与统计信息

1)先把功能状态集中到一个对象里

这个工具不是简单的“上传后立即识别”,它还要处理语言切换、识别进度、结果复制、结果下载和 worker 生命周期,所以一开始就把核心状态收拢到了 state 里。

这里最关键的几项是:

  • imageDataUrl:当前待识别图片
  • selectedLanguage:当前语言
  • isProcessing:是否正在识别
  • activeWorker:当前识别任务对应的 worker
  • preloadedLanguages:已经预加载过的语言
  • preloadTasks:正在进行中的语言加载任务

这样做的好处是,上传、识别、切换语言、清空结果这些动作都能围绕同一份状态工作,不容易出现界面和内部状态不一致的问题。

2)上传入口统一走图片校验和 DataURL 读取

工具同时支持点击上传和拖拽上传,但最终都会进入同一套处理函数。文件进来后先判断是不是图片,再检查大小,符合条件才继续读取。

读取方式用的是 FileReader.readAsDataURL。这么做有两个直接好处:

  1. 可以立即把图片展示到预览区
  2. 后续 OCR 和预处理都可以直接复用这份 DataURL

上传成功后,工具会同步重置旧结果,避免新图片沿用上一次的识别文本。

3)预处理不是独立服务,而是前端 Canvas 直接完成

这个工具提供了一个可选预处理开关,目的很明确:在识别前先把图片转换成更适合 OCR 的形式。

实现方式是把图片绘制到 canvas,取出像素数据后做两步处理:

  1. 按 RGB 权重转成灰度值
  2. 依据阈值做黑白二值化

处理完成后,再导出成新的 PNG DataURL 交给 OCR 引擎。这样可以让识别阶段拿到更干净的图像数据,尤其适合文字和背景对比比较明显的场景。

4)OCR 引擎的关键是 Worker 化

识别引擎基于 Tesseract.createWorker。每次创建 worker 时,会同时指定三类资源:

  • worker 脚本
  • wasm 核心
  • 语言数据

这一步的意义不是“把库跑起来”这么简单,而是把识别工作放到独立线程里执行,避免主线程在 OCR 过程中完全卡住。页面上还能继续更新进度、按钮状态和提示信息。

工具没有把所有语言一次性全部初始化,而是按当前所选语言创建 worker,这样功能逻辑更清晰,也更符合实际使用路径。

5)语言预加载解决的是“首次识别前的等待感”

OCR 工具和普通文本工具不一样,第一次识别前通常要先准备语言数据。如果每次点击“开始识别”才从头加载,交互会显得很钝。

所以这里单独做了 preloadLanguage。它负责三件事:

  1. 判断目标语言是否已经加载过
  2. 判断该语言是否已经有一个加载任务在进行中
  3. 创建临时 worker 完成语言准备,结束后立即释放

其中 preloadedLanguages 用来记忆“这个语言已经准备好”,preloadTasks 用来避免同一种语言被重复并发加载。这样切换语言时可以提前准备,真正开始识别时就不会重复走整套加载流程。

6)识别主流程围绕一次任务展开

真正点击识别后,主流程会按顺序做这些事:

  1. 检查当前是否有图片、是否正在处理中
  2. 更新处理状态和进度提示
  3. 确保所选语言已经预加载完成
  4. 读取分段模式设置
  5. 根据开关决定是否先做图片预处理
  6. 创建本次任务使用的 worker
  7. 通过 setParameters 写入 tessedit_pageseg_mode
  8. 调用 recognize 开始识别
  9. 提取返回结果里的文本和置信度
  10. 计算耗时并更新结果区

这里比较关键的一点是:识别用的 worker 和预加载用的 worker 是分开的。预加载只负责把语言资源准备好,正式识别时再创建当前任务自己的 worker。这样任务边界更清楚,结束时也更容易完整释放。

7)进度条不是本地估算,而是跟着 Tesseract 的 logger 走

工具里的进度展示并不是写死几个延时动画,而是直接读取 Tesseract logger 回调里的状态。

实现里会根据不同阶段的状态文本更新进度,例如:

  • 加载核心
  • 初始化引擎
  • 加载语言数据
  • 准备 API
  • 正在识别文字

前几个阶段使用固定百分比区间,进入 recognizing text 后,再根据回调里的 progress 动态推进到 100%。这样用户看到的不是“假进度”,而是和识别过程同步的真实状态。

8)结果区不只展示文本,还会同步生成统计信息

识别成功后,工具不会只把文本塞进文本框里就结束,而是立刻补齐几项结果信息:

  • 识别文本
  • 置信度
  • 耗时
  • 字符数
  • 行数
  • 当前语言名称

其中字符数和行数来自结果文本本身:字符数直接取长度,行数则按换行拆分并过滤空白行。这样结果区既能作为复制出口,也能给用户一个快速判断识别质量的依据。

9)复制和下载都围绕结果文本本身展开

识别结果出来后,工具提供两个常用动作:复制和下载。

复制优先走 navigator.clipboard.writeText,如果浏览器环境不支持,再退回到隐藏 textareaexecCommand('copy') 的兼容写法。下载则是把文本内容包装成 Blob,再生成对象 URL 触发保存。

这两个动作都不依赖额外服务,结果一旦识别完成,就可以立刻在浏览器侧完成后续处理。

10)这套核心 JS 的重点,其实是“任务生命周期完整”

这个 OCR 工具的关键不只是把图片送进识别引擎,而是把一次识别任务从开始到结束完整串起来:图片读取、语言预热、预处理、识别、进度反馈、结果统计、复制下载、worker 释放。

从功能 JS 的角度看,它本质上是一条比较清晰的前端任务流水线,而 Vue 在这里主要负责承接交互和挂载,让整套 OCR 功能可以稳定地运行在页面里。

hy2 协议间歇性断开 得过一会自动恢复
而且部分 vps 的 ip 比如日本 akari 即便不是 hy2 协议也会间接断开 不知道是不是互联有问题还是什么
各位有遇到过这种情况吗

很多人都会遇到这样的场景:想把截图里的文字、拍照的资料、纸质文件内容快速变成可复制文本,但又不想安装软件。这个时候,直接用在线 OCR 文字识别工具会更省事。

在线工具网址:https://see-tool.com/ocr-text-recognition
工具截图:

我做的这款 OCR 文字识别工具,主要面向普通用户,适合处理截图、笔记、表单、图片资料等内容。打开网页,上传图片,识别完成后就能直接复制或下载文字结果。

怎么使用

  1. 上传一张图片,支持常见图片格式。
  2. 选择识别语言,比如中文或英文。
  3. 点击开始识别,等待结果生成。
  4. 识别完成后,直接复制文字,或者下载为文本文件。

如果图片里的字比较小、倾斜明显,或者背景太杂,识别效果可能会受影响。实际使用时,尽量上传清晰、端正的图片,结果会更好。

这个工具适合谁

  • 学生整理课件、作业截图
  • 上班族提取表格、票据、通知里的文字
  • 日常把照片里的内容快速转成可编辑文本

这个工具是我用 Vue 开发的,重点放在操作简单和反馈清晰上。上传后能直接看到预览,识别过程有进度提示,结果出来后可以马上复制使用,尽量让没有技术背景的用户也能轻松上手。

如果你经常需要把图片转成文字,这个工具会比手动敲字省下很多时间。

深入解析 AI Agent 的记忆系统设计

你有没有想过这个问题:当你和 Claude Code 聊了一个小时后,它是怎么记得你之前的需求?当你第二天打开同一个项目时,它为什么还能"认识"你?

这不是简单的"存下来"就能搞定的事。这背后是一套精妙的记忆系统设计。

今天我们就来拆解 Claude Code 的 Memory 架构,顺便聊聊记忆系统的本质设计。


1. 记忆到底是什么?

很多人觉得,记忆嘛,不就是"存数据"吗?

如果把历史对话都存下来,每次原封不动传给 AI,很快就会遇到两个问题:

  1. Token 不够用 —— 对话一长,Context 就爆了
  2. 费用爆炸 —— 每次都传全部历史,钱包遭不住

所以光存没用,得看能不能影响 AI 的决策。

换个说法:历史要能改变 AI 的行为,才算有记忆。

举个例子:你上次告诉 Claude Code "不要在测试里 mock 数据库",下次它就不再 mock 了。这才是记忆。

按这个思路,一个记忆系统需要三个东西:

账本 —— 记录存了什么、什么时候存的,不能糊里糊涂

索引 —— 光有账本查起来太慢,得能快速找到相关内容

策略 —— 决定什么时候该记住、什么时候该忘记。这点最容易被忽略,但最关键

没有账本就是一笔糊涂账;没有索引存了也查不到;没有策略,系统就会乱套。

记忆系统三要素


2. 为什么需要两个"大脑"?

能不能把所有能力都塞进一个模型?理论上可以——通过反复训练,让模型权重"学会"记忆。

但这条路有几个问题:

通用能力会退化。不断用"记住用户偏好"这类任务来微调模型,模型的其他能力可能会被稀释。就像让一个人同时学十种技能,结果每种都学不精。

无法审计和回滚。一旦能力"固化"到权重里,出了问题没法排查。

无法实时更新。用户偏好会变、项目会变,但重新训练模型的成本太高。

所以可行的方案是:把记忆能力从模型里抽出来,单独做一个系统。

这就是 System 1 + System 2 的架构:

  • System 1 是 LLM 本身,负责推理、生成回复、调用工具,需要快速响应
  • System 2 是记忆系统,负责在后台决定:要不要检索记忆?该记住什么?

简单说:System 1 负责"回答问题",System 2 负责"准备回答问题需要的背景"。

为什么这个拆分是合理的?

关键原因是:记忆能力和通用推理能力是独立的。

怎么证明?可以看三点:

结构上——整个系统可以写成 f(M(C), C) 的形式,C 是通用推理能力,M 是记忆系统,它们是独立的模块。

优化上——可以在不改变推理模型的情况下,单独改进记忆策略;反过来也可以只优化模型,不动记忆系统。

经验上——同一个基础模型,换不同的记忆系统,长程任务表现差异很大;同一套记忆系统,套在不同的模型上,也能工作。

分开有什么好处?

既然独立,就可以牺牲一点理论上限,换取大量工程好处:

  • 不影响 System 1 的性能 —— 记忆操作是后台进行的
  • 记忆可以插拔 —— 换个项目、换个用户,记忆策略可以灵活切换
  • 可以审计和回滚 —— 所有的记忆操作都被记录下来
  • 可以 A/B 测试 —— 不同的记忆策略可以对比效果

System 1 vs System 2 架构


3. 非参数化路线有什么挑战?

把记忆放到外部系统,会面临三个问题:

注入带宽有限 再多的记忆,一次只能往上下文里塞有限的内容。Token 限制摆在那。

检索不精准 索引是近似的,查到的可能不相关,没查到的可能正好需要。检索噪声会误导 AI 推理。

策略设计很难 什么时候该记、什么时候该查、查到后该怎么用——这些策略如果设计得不好,记忆反而帮倒忙。写多了污染环境,写少了学不到。

很多系统的失败不是因为存得不够多,而是策略太蠢。


4. Claude Code 怎么实现的?

六层记忆架构

Claude Code 的记忆系统分成了六个层级:

层级名字作用
6Agent Memory子代理的专属记忆
5Auto MemoryAI 自己管理的长期记忆
4Local Memory项目私有配置
3Project Memory项目级指令(比如 CLAUDE.md)
2User Memory用户全局偏好
1Managed Memory管理员策略

优先级:项目配置 > 用户配置 > 全局配置。

六层记忆架构

Auto Memory 的工作方式

这是 Claude Code 最核心的记忆系统。它的特点是:AI 自己能从对话中提取值得记住的信息。

写入有两条路:

一是用户明确要求记住。你说"Claude,记住我喜欢用 tabs 缩进",AI 直接写文件。

二是AI 主动提取。每轮对话结束后,后台会跑一个子代理,分析这一轮对话有没有值得跨会话保留的信息。比如你提到"这个项目的认证模块要重写",AI 就会默默记下来。

写入的内容分成四类:

  • user —— 用户是谁、偏好什么
  • feedback —— 用户给过的指导(比如"测试不要 mock 数据库")
  • project —— 项目背景(代码里看不出来的信息)
  • reference —— 外部参考(比如 "bug 在 Linear 的 INGEST 项目里")

读取是主动召回的机制:

每次你发消息,AI 都会主动去记忆库看看有没有相关的。

流程是:扫描记忆目录(最多 200 个文件)→ 排除之前展示过的 → 让小模型打分选出最相关的 5 个 → 读取内容注入上下文 → 加上时间提示。

记忆会过期

Claude Code 会根据记忆的"年龄"给出不同待遇:

  • 1-2天内 —— 正常使用
  • 超过2天 —— 显示提醒:"这段记忆可能是旧的了"
  • 超过30天 —— 标记为 stale,谨慎使用

记忆时间衰减

上下文满了怎么办?

对话一长,上下文就会满。Claude Code 的解决方案是压缩

当 Token 使用到 92% 时,会触发压缩:调用 AI 把对话历史浓缩成结构化摘要,检查质量,通过则替换原历史。整个过程会显示进度给你看。

三级预警

Claude Code 不会等到 92% 才告诉你:

使用率提示
60%"记忆使用量较高"
80%"建议手动整理,或者开新对话"
92%"正在整理记忆..."

5. 时间在记忆系统里有多重要?

旧信息可能已经过时了。

比如你三个月前告诉 AI "我在负责 X 项目",但现在你早就不负责了。如果 AI 不知道这条信息已经过期,它就会用旧信息做错误的决策。

所以"时间"不是附加字段,而是架构层面的设计。

Claude Code 的做法是:检索时默认只看"当前有效"的信息;给记忆打时间戳,区分"曾经为真"和"现在为真";旧信息不会直接删除,而是标记为过期。


6. 从"知道什么"到"会做什么"

前面的记忆都是"知识"——"这是什么"、"之前怎么样"。

但有时候更重要的是"怎么做"。

比如 AI 学会了"怎么排查 Redis 连接问题"——不是一条知识点,而是一套可复用的解决流程。这种记忆叫程序性记忆

Claude Code 通过把成功经验固化成技能(Skill) 来实现这一点。一个技能就是一段可执行的"套路",下次遇到类似问题直接复用。


7. 记忆怎么"喂"给 AI?

外部记忆怎么接入 AI 的脑子?

最简单的方式是拼接到 prompt 里。但这种方式有代价:每次都要把文字转成 token,AI 再重新理解一遍。

前沿研究在尝试跳过文本中间层,直接把记忆压缩成 AI 更容易理解的"潜层表示",直接注入到注意力计算里。目前还在探索阶段。


8. 总结

真正智能的记忆,不在于记住多少,而在于管理得有多精细。

15,000 条 heavy-OR 规则,200,000 条文档,同一台机器:Easysearch 在线规则引擎全流程 11.68 秒,Percolate Query 仅搜索阶段就跑了 254.30 秒——慢了 21.8 倍。

在"规则先存、文档后到"这类场景下,Percolate Query 的延迟会随规则数量和复杂度的增长快速恶化。规则涨到数千条后,每批文档匹配的耗时可以从秒级攀升至几分钟。这类问题换索引参数、调批次大小、精简 DSL,都治标不治本,根子在执行模型本身。

本文通过一组 heavy-OR 基准测试,量化两种方案的实际差距。

测试配置

测试在同一台主机上运行,使用同一套规则文本和文档样本。Percolate Query 的查询条件由相同规则翻译而来,保证两侧规则语义一致。

参数
规则总数15,000
文档总数200,000
批次大小10,000 / 批
重规则数量2,500 条大 OR 热点规则
单条大 OR 规模随机 50 ~ 500 个 OR 条件

测试结果

路径用时
纯写入 plain_bulk6.025535s
在线规则引擎 rules_only11.684568s
Percolate Query 搜索阶段254.304583s

具体指标:

  • Easysearch 在线规则引擎全流程:11.68s
  • Percolate Query 搜索阶段:254.30s
  • 差值:242.62s
  • 倍数:21.76 倍
  • 每批(10,000 文档)平均耗时:Easysearch 约 0.49s,Percolate Query 约 12.69s

开启规则引擎的增量成本

规则匹配会对写入链路产生多少额外开销,是评估在线规则引擎可行性的重要指标之一。

与之对比,Percolate Query 仅搜索阶段就需要 254.30s。换言之,Easysearch 在线规则引擎把规则匹配叠加进写入流程,新增成本约为 Percolate Query 搜索耗时的 1/44.9

只看匹配引擎本体

上一组数据(11.68s vs 254.30s)包含了 Easysearch 的在线写入、bulk 解析和索引处理等通用开销。为了单独衡量规则匹配引擎自身的性能,我们用 Java 直调 JNI 做了一次离线 match,绕过写入链路,只跑规则匹配逻辑。

路径用时
Easysearch 纯匹配(JNI 离线)5.046934s
Percolate Query 搜索阶段254.304583s

这组数据说明两点:Easysearch 的性能优势并非来自写入链路的整合效率,即便剔除通用写入成本,规则匹配引擎本体与 Percolate Query 之间依然存在约 50 倍的差距。

为什么 Percolate Query 会慢

根因在执行模型,OR 条件多只是放大器。

每批文档到达时,Percolate Query 都要走完这套流程:

  1. 把文档放进临时内存索引
  2. 基于规则中的 terms 筛选候选规则
  3. 对候选规则逐条验证

以本次测试为例,各阶段耗时分布如下:

  • 规则翻译:9.560294s
  • 规则导入:7.451857s
  • percolate 搜索:254.304583s

搜索阶段是每批文档都必须重新支付的代价。

Heavy-OR 规则在这套流程里两头放大:规则覆盖面广,候选集更难剪掉;单条规则条件多,逐条验证也更重。

Easysearch 规则引擎把规则提前编译好,文档到达后直接匹配,不走这套每批重建的流程,差距就在这里。


适用场景

以下场景对规则匹配的吞吐和延迟要求较高,是 Easysearch 在线规则引擎的典型适用范围:

  • 内容审核:规则持续增长且复杂度高,需要稳定的处理吞吐,对单批延迟敏感。
  • 舆情监测:热点词、别名、邻近词组合多,规则天然形成大 OR 结构,是 Percolate Query 最容易触及性能瓶颈的场景。
  • 广告定向:人群包条件不断叠加,文档流量高,规则匹配需要足够轻量,避免影响整条投放链路。
  • 告警规则:延迟直接影响告警有效性,规则命中需要尽量贴近文档写入时刻。
  • 实时反欺诈:规则复杂、变更频繁、吞吐高,要求文档到达后立即完成判断。

小结

在本次 heavy-OR 基准测试中:

  • 相同规则集(15,000 条)和文档量(200,000 条),Easysearch 在线规则引擎全流程耗时 11.68s,Percolate Query 仅搜索阶段耗时 254.30s,相差 21.8 倍
  • 开启规则引擎带来的写入链路增量成本为 5.66s,约为 Percolate Query 搜索阶段耗时的 1/44.9
  • 剔除写入通用开销后,规则匹配引擎本体的差距约为 50 倍

如果你的业务已经有 Percolate Query 延迟随规则增长持续上升的问题,不用看 demo 数据——把你线上最重的那批规则拿出来,跑一次就知道差距在哪。

刚过完万物复苏,动物交配的季节,杭州的天气也跟着热起来了,这个时候吃一点生蚝,无疑是对体力的补充,但是作为一个 I 人不愿意一个人去饭店吃,并且价格也不菲,点外卖呢,到家里也不好吃,那肯定会考虑自己做。。打开山姆 app ,发现没有生蚝。。。幸好其他超市有。。看到了永辉超市的乳山生蚝,立马入手,一个 8 块,250-300g 一只很大。先来 8 只,再来一份打折排骨。20 分钟后。。到了。真的大。。先将生蚝的外封装带剪掉,用刷子刷一下,再用清水冲洗。(这个时候将排骨,放入清水泡一下,放点面粉),蒸锅添水,将生蚝放入,并放入姜片,大火烧起。。待上汽 3 分钟后关火。排骨:洗净以后直接放入砂锅,取少许家里的老蘑菇洗净放入,并放入一勺盐,烧锅中小火煮,等到血沫煮出来,撇净,转小火继续煮 20 分钟。生蚝好了,拿出(不要一直闷在锅里),调出蘸料,辣根配香醋,蒜、耗油等。。生蚝壳很紧,用羹匙儿撬开,非常新鲜,配合辣根直接上头入魂。8 个生蚝全部干掉,体力值回复 55%,这时候排骨应该也快好了,简单收拾一下厨房,拿出排骨。蘑菇的香味扑鼻了,先尝一口蘑菇,熟了。。继续吃排骨,软嫩入味。。小猫儿也来凑热闹,分它一块肉吃。最后的汤才是重点,像极了港剧,每次有人生病住院,就煮汤的场景。直接拿砂锅把汤一饮而尽,看见小猫端着我的碗也喝了起来。战斗结束,一身汗。。。最后将所有工具放入洗碗机,喝水漱口,结束今天的晚饭。总共花费 80 元,比自己去饭店强。。。很能恢复体力。。不说了 我去打游戏了。。

这是一个开源超轻量绘图画布 cli (纯 rust 实现,仅几百 KB 大小),提供了 SKILL.md

核心解决的问题:让 AI Agent 很方便地调用来画图,不调用生图的 API ,直接本地生成 PNG 图片!

Github 地址: https://github.com/echosoar/canvas-rs

已打包成一个二进制文件(支持 Windows/Linux/MacOS 平台),完全不用安装各种乱八七糟的 libxxx 依赖,下载就能用,支持通过文本描述的形式输出 png 图片(或输出 dataUrl )

  • 支持 ctx.fill_text 绘制文字(默认是阿里普惠体),通过 ctx.set_text_align 设置对齐方式,还有 set_font 、set_fill_style 等方法

  • 支持 ctx.create_linear_gradient 创建线性和 ctx.create_radial_gradient 径向渐变

  • 支持 ctx.begin_path / move_to / line_to / arc / close_path 画各种形状,还有 set_line_width 设置粗细,fill_rect 和 stroke_rect 来填充形状

  • 支持 ctx.draw_image 绘制图片到画布上

地址: https://file.mxpy.cn

相对于其他文件转发不同的是:不用注册(使用 2Libra 登录)、不需要手机号、不限制文件类型(遇到不支持的找我添加就行了)、部分文件支持预览、不需要在同一局域网。

测试文件
提取地址: https://file.mxpy.cn/download?code=9KqIkb7L
提取码:9KqIkb7L

image
支持各种类型文件上传,(目前限制 100M,临时转发够用了)

image
使用提取码提取文件

image
部分文件支持在线预览

点击用户名支持修改已上传的文件提取码

由于缓存原因,修改提取码后可能显示还是旧的(文件管理还有其他 bug,目前只用于临时转发文件,所以没做那么完美)

墨雪飘影图床: https://pic.mxpy.cn
图床介绍: https://2libra.com/post/tools-sharing/oLYDmMl

以前 AI 写出烂代码,我总是会忍不住骂(指导)一下。但我今天突然想到一件事,然后就骂不出来了。那就是,我的每一次反馈都将成为 AI 提升的养料。

俗话说“教会徒弟饿死师傅”,现在我正在做这件事情。

这件事比自动驾驶替代出租车司机还无奈。至少自动驾驶的训练数据不是出租车司机们跑出来的。

以前 AI 写出烂代码,我总是会忍不住骂(指导)一下。但我今天突然想到一件事,然后就骂不出来了。那就是,我的每一次反馈都将成为 AI 提升的养料。

俗话说“教会徒弟饿死师傅”,现在我正在做这件事情。

这件事比自动驾驶替代出租车司机还无奈。至少自动驾驶的训练数据不是出租车司机们跑出来的。

目标 app 环境检测特别多 使用 kernelsu frida 等依然被检测出 ROOT 网络环境等问题(可能自己手机没配置好导致被检测出的)

不知道有什么云平台 [系统层面] 直接抓包的工具推荐的 或者 有偿帮忙抓也行

今天看到 trae 闪烁这个广告。999 ,是写错小数点了吗? 不应该是 9.99 吗?

最近在做一个动漫圣地巡礼规划网站:Anime Seichi Planner

起因很简单。

平时看动漫、电影或者日剧,真想去线下走一遍的时候,会发现信息特别散:
有的点位在博客里,有的在地图里,有的只有截图没有坐标,真要自己排路线也很麻烦。

所以我想做一个更偏“巡礼执行”而不是纯内容展示的东西,
把地点、地图、路线规划和分享放到一个入口里。

现在已经做了这些:

  • 聚合作品相关的巡礼点位、图片和基础信息
  • 可以直接在地图上找点、点点位、看附近分布

线上地址:
https://anime-seichi-planner.malu.moe

目前还不完善的地方也直说:

  • 点位数据还在持续清洗,肯定会有缺失、错位、重复
  • 现在更偏“先把巡礼主流程跑通”,很多细节还在补
  • 我比较想先确认:真正会去巡礼的人,到底最需要什么