现在有了 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 天前 其实搜一下源码分析方面的博客文章还是蛮多的
有动态分析和静态分析 动态分析最简单的办法就是打断点,从入口开始一行一行跟着走,然后做笔记记录 静态分析就是用 SourceInsight 或者任何一个支持 F12 找到原始 definition 的 IDE/Editor 逐层查看调用链,然后做笔记记录 如果不知道编译或者不知道项目怎么跑起来的话就先去看 CI 配置 |
2
thinszx 1 天前 我们那时候哪有这条件啊😭
|
3
x86 1 天前
♻️ ctrl+c,ctrl+v,ctrl+shift+f
|
4
donaldturinglee 1 天前
只要不是 Java 的就还好,有基础的基本上能看懂。Java 的话得一层层点进去才知道是要干嘛的
|
5
jackmod 1 天前
能在自己机子上编译跑起来就成功了一半,剩下是俺寻思之力。
俺寻思这个文件是那个功能,就直接观察。 俺寻思这个 method 是对的,下个断点。 为啥能俺寻思,因为特定语言或框架都有相应特点,基本上能猜到里面是啥。 实在俺寻思不出来的话也不要憋着,去发个 issue 询问维护者(注意「提问的智慧」)。 |
6
ProphetN 1 天前
所以以前经常出现开源投毒,以后有 AI Review 之后,应该可以根绝了。
|
7
aisk 22 小时 54 分钟前
用 deepwiki 或者 codewiki ?
|
8
youshangdemajia 20 小时 34 分钟前
以前很多各种源码剖析之类的书。我就看过 MFC/STL/Lua/Redis 的。
|
9
levelworm 17 小时 32 分钟前
@changwei #1
多谢。我最近在看操作系统开发的东西,做完了 xv6 的 lab ,转过头去做 Linux 的,感觉两者的复杂度相差太远。我目前用 VSCode + clangd lang server 看,但是感觉还是没头绪,不知道有没有免费的 sourceinsight 之类的软件,或者相对便宜一些的? 不过话说回来,我可能还是底子太薄弱了,连 Linux 的编译系统也看不懂。一大堆 Makefile 和 Kbuild ,还有很多 Python 脚本,的确头大,只敢跟着课程跑,生怕一个命令搞错了没法恢复。 |
10
ooo000 17 小时 9 分钟前
OpenGrok
|
11
iorilu 16 小时 44 分钟前
你这个流程图看的很清楚阿
一般用什么提示词可以得到 |
13
feelapi 14 小时 31 分钟前
scitools 的 understand 比 sourceinsight 更强,但是很贵。
这种软件并不复杂,静态解析源代码,建立数据库,提取信息各种分析。understand 的很多功能实际上是 perl,python 实现的,但是代码的统计分析很强 |
14
godall 13 小时 48 分钟前
请问楼主,你是一个个源码文件让 ai 分析某个函数,还是直接整个工程给 ai ?
|
18
changwei 7 小时 46 分钟前 via Android @levelworm 很巧,OS 这方面我刚好有研究。学 OS 和计算机组织结构的话可以先从 ARM 和 RTOS 这种比较简单的架构入手,你可以参考我在知乎写的文章 https://zhuanlan.zhihu.com/p/350587132 ,我是根据自己手写的一个最小版 RTOS 来讲解的,参考代码 https://github.com/cw1997/ez-rtos
|