
现在有了 ai 我遇到不懂的方法直接让 ai 分析输入输出和调用关系直接就出来了 例如:opencode 的源代码
用户发送消息 ↓ ┌─────────────────────────────────────────────────────────────┐ │ Server (routes/session.ts:733) │ │ SessionPrompt.prompt({ ...body, sessionID }) │ └─────────────────────┬───────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ SessionPrompt.prompt (prompt.ts:151) │ │ 1. 创建用户消息 │ │ 2. 调用 loop(sessionID) │ └─────────────────────┬───────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ SessionPrompt.loop (prompt.ts:258) │ │ while (true) { │ │ 1. 获取 Agent 配置: Agent.get(lastUser.agent) │ │ 2. 解析工具: resolveTools({ agent, session, ... }) │ │ 3. 创建处理器: SessionProcessor.create(...) │ │ 4. 调用处理器: processor.process({ user, agent, ... }) │ │ } │ └─────────────────────┬───────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ SessionProcessor.process (processor.ts:45) │ │ while (true) { │ │ 1. 调用 LLM: LLM.stream(streamInput) │ │ 2. 处理流式响应: │ │ - reasoning-delta → 更新推理部分 │ │ - text-delta → 更新文本部分 │ │ - tool-call → 执行工具 │ │ 3. 工具执行完成后继续循环 │ │ } │ └─────────────────────┬───────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ LLM.stream (llm.ts) │ │ 1. 构建系统提示词 │ │ 2. 调用 AI SDK: streamText({ model, messages, tools }) │ │ 3. 返回流式响应 │ └─────────────────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────────────────┐ │ 主线程 (thread.ts) │ │ - 运行 TUI 界面 │ │ - 创建 RPC 客户端 │ └─────────────────────┬───────────────────────────────────────┘ │ RPC 通信 ┌─────────────────────────────────────────────────────────────┐ │ Worker 线程 (worker.ts) │ │ - 运行 Server.App() │ │ - 处理 fetch 请求 │ │ - 转发事件 │ └─────────────────────────────────────────────────────────────┘ 用户运行 `opencode` ↓ index.ts 解析命令 → TuiThreadCommand ($0 默认命令) ↓ thread.ts handler 执行: ↓ 第 79-85 行:确定 worker 文件路径 ↓ 第 93 行:创建 Worker 线程 const worker = new Worker(workerPath, { env: ... }) ↓ 第 101 行:创建 RPC 客户端与 Worker 通信 const client = Rpc.client<typeof rpc>(worker) ↓ 第 143 行:启动 TUI 界面 const tuiPromise = tui({ url, fetch: customFetch, ... }) 之前没有 ai 的时候经常一个方法看半天看不懂
1 changwei 1 月 26 日 其实搜一下源码分析方面的博客文章还是蛮多的 有动态分析和静态分析 动态分析最简单的办法就是打断点,从入口开始一行一行跟着走,然后做笔记记录 静态分析就是用 SourceInsight 或者任何一个支持 F12 找到原始 definition 的 IDE/Editor 逐层查看调用链,然后做笔记记录 如果不知道编译或者不知道项目怎么跑起来的话就先去看 CI 配置 |
2 thinszx 1 月 26 日 我们那时候哪有这条件啊 |
3 x86 1 月 26 日 ctrl+c,ctrl+v,ctrl+shift+f |
4 donaldturinglee 1 月 26 日 只要不是 Java 的就还好,有基础的基本上能看懂。Java 的话得一层层点进去才知道是要干嘛的 |
5 jackmod 1 月 26 日 能在自己机子上编译跑起来就成功了一半,剩下是俺寻思之力。 俺寻思这个文件是那个功能,就直接观察。 俺寻思这个 method 是对的,下个断点。 为啥能俺寻思,因为特定语言或框架都有相应特点,基本上能猜到里面是啥。 实在俺寻思不出来的话也不要憋着,去发个 issue 询问维护者(注意「提问的智慧」)。 |
6 ProphetN 1 月 26 日 所以以前经常出现开源投毒,以后有 AI Review 之后,应该可以根绝了。 |
7 aisk 1 月 27 日 用 deepwiki 或者 codewiki ? |
8 youshangdemajia 1 月 27 日 以前很多各种源码剖析之类的书。我就看过 MFC/STL/Lua/Redis 的。 |
9 levelworm 1 月 27 日 @changwei #1 多谢。我最近在看操作系统开发的东西,做完了 xv6 的 lab ,转过头去做 Linux 的,感觉两者的复杂度相差太远。我目前用 VSCode + clangd lang server 看,但是感觉还是没头绪,不知道有没有免费的 sourceinsight 之类的软件,或者相对便宜一些的? 不过话说回来,我可能还是底子太薄弱了,连 Linux 的编译系统也看不懂。一大堆 Makefile 和 Kbuild ,还有很多 Python 脚本,的确头大,只敢跟着课程跑,生怕一个命令搞错了没法恢复。 |
10 ooo000 OpenGrok |
11 iorilu 1 月 27 日 你这个流程图看的很清楚阿 一般用什么提示词可以得到 |
13 feelapi 1 月 27 日 scitools 的 understand 比 sourceinsight 更强,但是很贵。 这种软件并不复杂,静态解析源代码,建立数据库,提取信息各种分析。understand 的很多功能实际上是 perl,python 实现的,但是代码的统计分析很强 |
14 godall 1 月 27 日 请问楼主,你是一个个源码文件让 ai 分析某个函数,还是直接整个工程给 ai ? |
18 changwei 1 月 27 日 via Android @levelworm 很巧,OS 这方面我刚好有研究。学 OS 和计算机组织结构的话可以先从 ARM 和 RTOS 这种比较简单的架构入手,你可以参考我在知乎写的文章 https://zhuanlan.zhihu.com/p/350587132 ,我是根据自己手写的一个最小版 RTOS 来讲解的,参考代码 https://github.com/cw1997/ez-rtos |
20 Cola98 1 月 28 日 我一般用 cursor 打开,然后把不懂的问题提问给他,比如进程状态是怎么实现的,然后根据它给出来的答案去梳理下流程 |