
现在有了 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 11 小时 41 分钟前 其实搜一下源码分析方面的博客文章还是蛮多的 有动态分析和静态分析 动态分析最简单的办法就是打断点,从入口开始一行一行跟着走,然后做笔记记录 静态分析就是用 SourceInsight 或者任何一个支持 F12 找到原始 definition 的 IDE/Editor 逐层查看调用链,然后做笔记记录 如果不知道编译或者不知道项目怎么跑起来的话就先去看 CI 配置 |
2 thinszx 11 小时 30 分钟前 我们那时候哪有这条件啊 |
3 x86 11 小时 23 分钟前 ctrl+c,ctrl+v,ctrl+shift+f |
4 donaldturinglee 10 小时 45 分钟前 只要不是 Java 的就还好,有基础的基本上能看懂。Java 的话得一层层点进去才知道是要干嘛的 |
5 jackmod 10 小时 28 分钟前 能在自己机子上编译跑起来就成功了一半,剩下是俺寻思之力。 俺寻思这个文件是那个功能,就直接观察。 俺寻思这个 method 是对的,下个断点。 为啥能俺寻思,因为特定语言或框架都有相应特点,基本上能猜到里面是啥。 实在俺寻思不出来的话也不要憋着,去发个 issue 询问维护者(注意「提问的智慧」)。 |
6 ProphetN 10 小时 1 分钟前 所以以前经常出现开源投毒,以后有 AI Review 之后,应该可以根绝了。 |
7 aisk 8 小时 14 分钟前 用 deepwiki 或者 codewiki ? |
8 youshangdemajia 5 小时 54 分钟前 以前很多各种源码剖析之类的书。我就看过 MFC/STL/Lua/Redis 的。 |
9 levelworm 2 小时 52 分钟前 @changwei #1 多谢。我最近在看操作系统开发的东西,做完了 xv6 的 lab ,转过头去做 Linux 的,感觉两者的复杂度相差太远。我目前用 VSCode + clangd lang server 看,但是感觉还是没头绪,不知道有没有免费的 sourceinsight 之类的软件,或者相对便宜一些的? 不过话说回来,我可能还是底子太薄弱了,连 Linux 的编译系统也看不懂。一大堆 Makefile 和 Kbuild ,还有很多 Python 脚本,的确头大,只敢跟着课程跑,生怕一个命令搞错了没法恢复。 |
10 ooo000 2 小时 29 分钟前 OpenGrok |
11 iorilu 2 小时 4 分钟前 你这个流程图看的很清楚阿 一般用什么提示词可以得到 |