使用opengem+claude code+obsidian构建函数调用关系
OpenGem Claude Code Obsidian构建代码函数调用关系图谱工具链职责一览┌─────────────────────────────────────────────────────────┐ │ OpenGem → 分析代码生成函数调用图谱 (graph.html) │ │ Obsidian CLI → 将分析结果写入 Obsidian 知识库 │ │ Claude Code → AI 驱动一条指令自动完成分析 写库 │ └─────────────────────────────────────────────────────────┘OpenGem负责看懂代码提取函数之间的调用关系生成可视化图谱。Obsidian CLI负责写入知识库把图谱和调用关系变成 Obsidian 中的笔记。Claude Code负责自动化一条/opengem指令串起整个流程。为什么用 Obsidian CLI而不是普通命令行如果你只会在终端里echo xxx.md或cp graph.html那你只是在操作文件系统——Obsidian 根本不知道发生了什么。核心差异操作普通命令行 (cp/echo/mv)Obsidian CLI创建笔记文件出现在磁盘上Obsidian 不知道obsidian create→ Obsidian 立即索引双链生效写入内容需要知道完整绝对路径file笔记名即可自动解析 wiki 链接打开文件只能用编辑器手动打开obsidian open直接在 Obsidian 工作区打开静默写入无法控制 Obsidian 是否弹窗silent参数后台写入不打断当前工作读取笔记cat只能看原始 Markdownobsidian read可读取渲染后内容属性操作需要解析 YAML 手动改obsidian property:set直接修改 frontmatter搜索grep搜原始文本obsidian search走 Obsidian 索引更快更准多仓库需要记住每个仓库的绝对路径vault仓库名自动定位最关键的三个场景场景 1AI 自动写入笔记Claude Code 分析完代码后需要把调用关系写成 Markdown 存入 Obsidian。用普通命令行# 你需要知道 vault 的绝对路径而且 Obsidian 不会自动索引新文件echo.../D:/Note/Git/YY-sWork/YY-Wiki/raw/relationship/xxx.md用 Obsidian CLI# vault 名自动定位silent 不弹窗自动加入索引和图谱obsidianvaultYY-sWorkcreatepathYY-Wiki/raw/relationship/xxx.mdcontent...silent场景 2静默写入不打断工作流你正在 Obsidian 里写另一篇笔记Claude Code 在后台生成了调用关系图谱。如果 AI 直接用cp写文件文件是放进去了但 Obsidian 的搜索、双链、图谱视图都需要等下一次索引才能发现它。obsidian create ... silent解决了这个问题文件入库后 Obsidian立刻知道它存在双链立即可用而且不会弹出新标签页打断你。场景 3操作 frontmatter 属性如果想把分析结果标记为已处理# 普通命令行需要写脚本解析 YAML改 status: done再写回去# Obsidian CLI一行搞定obsidian property:setnamestatusvaluedonefileopengem-main一句话总结普通命令行 操作磁盘文件。Obsidian CLI 操作 Obsidian 知识库。对于AI 自动写笔记这个场景Obsidian CLI 是唯一的正确选择——它让写入的笔记立即成为知识网络的一部分而不是躺在磁盘上等 Obsidian 慢慢发现。1. 安装前提在开始之前确保以下工具已安装并可在 PATH 中运行工具用途验证命令OpenCodeOpenGem 的运行环境opencode --versionObsidian 桌面应用知识管理图谱展示打开 Obsidian 即可Obsidian CLI命令行操作 Obsidianobsidian --versionBunCLI 和 MCP 服务器运行时bun --versionObsidian CLI 是这里的胶水层没有它OpenGem 分析出的结果只能停在终端里——有它结果能自动变成知识库中可检索、可双链的笔记。详见上一节。2. 安装 OpenGemnpx cubocompany/opengem init初始化完成后项目根目录会出现.opengem/配置目录。3. OpenGem CLI 命令命令速查opengem graph[dir]# 对指定目录建立代码索引和图谱opengemwatch[dir]# 持续监听文件变化增量更新索引opengem querysearch# 按名称或文件名搜索图中的节点opengem explainsymbol# 展示某个符号的完整调用关系入边出边opengem pathfromto# 找出两个符号之间的最短调用路径使用示例# 仅索引 src/ 目录opengem graph ./src# 搜索 buildGraph 相关的所有符号opengem query buildGraph# 查看 parseFile谁调用了它它又调用了什么opengem explain parseFile# 找 main → detectCommunities 的最短调用链opengem path main detectCommunitiesexplain 输出示例4. 输出文件opengem-out 文件夹执行opengem graph ./src后会生成opengem-out/目录graph.html — 交互式调用图打开graph.html可以直观看到函数之间的调用关系相比 VS Code 逐个函数查看调用链这张图能一眼看清全局调用结构——改接口、重构代码时尤其有用。GRAPH_REPORT.md — 自动分析报告包含 God Nodes高频调用节点、社区划分、语言统计等概要信息。5. Claude Code 集成让 AI 驱动全流程把以下 Skill 定义放到 Claude Code 的 skills 目录中之后只需输入/opengem就能让 AI 自动完成索引代码 → 分析图谱 → 写入 Obsidian 知识库。name: opengem description: 使用 OpenGem 代码知识图谱工具分析函数调用关系。当用户输入 /opengem 或需要查看函数调用链、代码依赖关系时调用。支持生成交互式调用图graph.html并可将结果导出为 Markdown 同步到 Obsidian。 user-invocable: true # OpenGem 代码知识图谱技能 使用 opengem CLI 分析代码库中的函数调用关系、依赖图和符号路径。 ## 前置条件 运行任何 opengem 命令前先检查当前目录是否存在 .opengem/graph-state.json test -f .opengem/graph-state.json echo ready || echo 需要先运行 opengem graph 索引代码库 如果图谱不存在提示用户 当前项目尚未索引需要先运行 opengem graph 生成知识图谱。是否现在执行 用户同意后执行 opengem graph。 ## 核心命令 ### 1. 无参数调用 /opengem 执行完整图谱生成流程 opengem graph 完成后 1. 告知用户图谱已生成 2. opengem-out/graph.html 为交互式可视化调用图 3. opengem-out/GRAPH_REPORT.md 为图谱分析报告 4. 使用 Read 工具读取 opengem-out/GRAPH_REPORT.md向用户展示摘要God nodes、社区划分、语言统计等 5. 询问用户**是否需要将 graph.html 上传到 Obsidian 仓库 (YY-sWork)** 6. 若用户同意将 opengem-out/graph.html 复制到 Obsidian vault ### 2. 指定函数名 /opengem function 对指定符号执行 opengem explain展示完整调用关系 opengem explain function 按以下格式输出 ## symbol (type) file-path ### Incoming (N): ← edge-type target-symbol (source-file) ### Outgoing (N): → edge-type target-symbol (source-file) 输出后询问用户 是否需要将此调用关系打包为 Markdown 文件并同步到 Obsidian 仓库 (YY-sWork) 用户同意后执行 Obsidian 同步流程。 ### 3. 通用查询 /opengem query name opengem query search 按名称或文件搜索图中的节点展示匹配结果。 ### 4. 路径查找 /opengem path a b opengem path symbol-a symbol-b 查找两个符号之间的最短调用路径展示链路。 ## Obsidian 同步流程 Obsidian vault 信息 - **名称**: YY-sWork - **路径**: D:\Note\Git\YY-sWork ### 同步 graph.html cp opengem-out/graph.html D:/Note/Git/YY-sWork/YY-Wiki/raw/relationship/opengem-graph.html obsidian vaultYY-sWork open pathYY-Wiki/raw/relationship/opengem-graph.html ### 同步调用关系 Markdown 1. 构造 Markdown 内容格式如下 --- tags: [opengem, code-graph] date: YYYY-MM-DD --- # function 调用关系分析 ## 基本信息 - **符号**: function - **类型**: type - **文件**: file-path ## 入边 (Incoming) | 关系 | 来源 | 文件 | |------|------|------| | calls | xxx | file.ts | ## 出边 (Outgoing) | 关系 | 目标 | 文件 | |------|------|------| | calls | xxx | file.ts | 2. 使用 Obsidian CLI 创建笔记存入 YY-Wiki/raw/relationship/ obsidian vaultYY-sWork create pathYY-Wiki/raw/relationship/opengem-function.md contentescaped-markdown silent 如果文件已存在则覆盖。 3. 在 Obsidian 中打开 obsidian vaultYY-sWork open pathYY-Wiki/raw/relationship/opengem-function.md ## 注意事项 - 所有 opengem 命令必须在包含 .opengem/graph-state.json 的目录下运行 - 如果操作的是 monorepo确保在正确的子项目目录下执行 - graph.html 较大时1MB复制到 Obsidian 前提醒用户 - 调用关系 Markdown 文件名使用 opengem-函数名 命名规范统一管理6. 结合 LLM Wiki 的完整工作流这套工具链与你的 LLM Wiki 知识库天然契合你写代码 (C/Python/Shell) ↓ OpenGem 分析代码 → 生成调用图谱 ↓ Claude Code 读取图谱 → 提炼关键调用链 ↓ Obsidian CLI 写入 wiki → 调用关系变成可检索、可双链的知识页 ↓ 未来 /query XX函数的调用链 → 即刻从 wiki 中拿到答案技能文件已经写好根据自己的项目路径稍作修改交给 AI 执行即可。