<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>AI on Time Friend</title><link>https://time-friend.com/zh/tags/ai/</link><description>Recent content in AI on Time Friend</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Mon, 27 Jul 2026 16:30:00 +0000</lastBuildDate><atom:link href="https://time-friend.com/zh/tags/ai/index.xml" rel="self" type="application/rss+xml"/><item><title>用 /insights 审视你的编码习惯</title><link>https://time-friend.com/zh/archive/claude-code-insights/</link><pubDate>Mon, 27 Jul 2026 16:30:00 +0000</pubDate><guid>https://time-friend.com/zh/archive/claude-code-insights/</guid><description>&lt;p&gt;Claude Code 用了一段时间, 自我感觉挺良好. 直到有朋友跟我说: &amp;ldquo;你试试 &lt;code&gt;/insights&lt;/code&gt;.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;运行 &lt;code&gt;claude&lt;/code&gt; 进入会话, 输入:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;/insights
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;等个几十秒, 浏览器里自动弹出一个 HTML 报告. 它会分析你过去 30 天的 Claude Code 会话, 拆成几个板块: 你在什么项目上花了多少时间、最常用哪些工具、语言分布、以及——最扎心的——你的工作流里哪些地方在反复浪费 Token.&lt;/p&gt;
&lt;p&gt;所有数据都来自本地的 &lt;code&gt;~/.claude/&lt;/code&gt; 会话日志, 报告不会离开你的电脑.&lt;/p&gt;
&lt;h2 id="报告的结构"&gt;报告的结构&lt;/h2&gt;
&lt;h3 id="概览数据"&gt;概览数据&lt;/h3&gt;
&lt;p&gt;最上面一个 &amp;ldquo;At a Glance&amp;rdquo; 卡片, 展示核心统计: 会话数、总消息数、代码修改行数、活跃天数.&lt;/p&gt;
&lt;p&gt;我第一次跑出来是 38 个会话, 659 条消息, 22 天活跃. 看一眼大概就知道自己用得有多勤.&lt;/p&gt;
&lt;h3 id="使用模式"&gt;使用模式&lt;/h3&gt;
&lt;p&gt;报告用柱状图展示了几个维度:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;最常用的工具&lt;/strong&gt;: 你会发现自己的 Edit 用了多少次, Bash、Read、Write 各占多少比例&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;编程语言分布&lt;/strong&gt;: TypeScript、Python、Markdown 各占百分之几——这个分布有时候会让人意外&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;任务类型&lt;/strong&gt;: 代码生成、调试、重构、测试编写各占多少&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;会话时长&lt;/strong&gt;: 平均每条会话多久, 平均回复时间多少&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我第一次看到自己 18% 的时间花在 Markdown 上时, 重新思考了一下自己的工作流——原来写文档占了我这么多精力.&lt;/p&gt;
&lt;h3 id="使用风格分析"&gt;使用风格分析&lt;/h3&gt;
&lt;p&gt;报告会生成一段自然语言描述, 分析你的工作风格. 不止是数字, 而是一段像人写出来的评语.&lt;/p&gt;</description></item><item><title>从终端到团队, Agent 工作流怎么长大</title><link>https://time-friend.com/zh/archive/claude-code-scaling-workflows/</link><pubDate>Sat, 18 Apr 2026 17:00:00 +0000</pubDate><guid>https://time-friend.com/zh/archive/claude-code-scaling-workflows/</guid><description>&lt;p&gt;头几个月, 我一个人在终端里用 Claude Code, 感觉效率提升很明显。但很快遇到一个问题: 我下班关了电脑, agent 也停了。我需要的东西, 只能在我坐在电脑前的时候才能跑。&lt;/p&gt;
&lt;p&gt;如果你的使用场景也是&amp;quot;只有我在的时候才用&amp;quot;, 那 Claude Code 完全够用。但当你开始想: 这个 CR 能不能自动帮我 review? 这个依赖更新能不能每周一自动跑? 你就需要想怎么让它离开你的电脑还能干活了。&lt;/p&gt;
&lt;h2 id="第一步-把重复劳动做成脚本"&gt;第一步: 把重复劳动做成脚本&lt;/h2&gt;
&lt;p&gt;最简单的方式就是把常用的 agent 任务写成脚本。比如我每两周要升级一次项目的依赖:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;claude -p &lt;span style="color:#e6db74"&gt;&amp;#34;把 package.json 里的依赖升到最新 minor 版本, 跑测试, 有 break 就修&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;用 &lt;code&gt;--output-format json&lt;/code&gt; 可以拿到结构化的输出。需要流式处理的话用 &lt;code&gt;stream-json&lt;/code&gt;, 每行一个 JSON 对象。&lt;/p&gt;
&lt;p&gt;再进一步, 把这些脚本扔到 crontab 或者 CI 里:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 在 GitHub Actions 或 crontab 里跑&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;claude -p &lt;span style="color:#e6db74"&gt;&amp;#34;review 最近变更的代码, 检查安全问题&amp;#34;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --output-format json --allowedTools &lt;span style="color:#e6db74"&gt;&amp;#34;Edit,Bash(git *)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;--allowedTools&lt;/code&gt; 限制了 Claude 只能做什么操作——批量跑的时候尤其重要, 防止它乱搞。&lt;/p&gt;</description></item><item><title>Review Agent 的代码, 和 Review 同事的不一样</title><link>https://time-friend.com/zh/archive/claude-code-review-agent-code/</link><pubDate>Fri, 03 Apr 2026 13:25:00 +0000</pubDate><guid>https://time-friend.com/zh/archive/claude-code-review-agent-code/</guid><description>&lt;p&gt;Review 同事写的代码, 和 review agent 写的代码, 是两套不同的事。&lt;/p&gt;
&lt;p&gt;一起干活久了, 多少知道同事写代码的习惯——谁喜欢用 reduce, 谁总忘记处理边界。但 agent 没有&amp;quot;习惯&amp;quot;, 它的每一次输出都取决于那次会话的上下文。&lt;/p&gt;
&lt;p&gt;Review agent 代码的时候, 我养了几个自己的检查点。&lt;/p&gt;
&lt;h2 id="第一-看它改了不该改的地方吗"&gt;第一: 看它改了不该改的地方吗&lt;/h2&gt;
&lt;p&gt;Agent 最大的问题不是写不对, 是管不住自己。它可能为了修一个 bug, 顺手把旁边的配置也改了, 或者把另一个函数的重命名顺便带上了。&lt;/p&gt;
&lt;p&gt;Diff 文件里所有不在任务范围内的改动, 都是危险信号。&lt;/p&gt;
&lt;h2 id="第二-看它处理边界了吗"&gt;第二: 看它处理边界了吗&lt;/h2&gt;
&lt;p&gt;Claude 写的 happy path 通常很漂亮。问题出在用户输入为空、网络请求超时、权限不足的时候——这些分支常常没覆盖。&lt;/p&gt;
&lt;p&gt;Review 的时候我会专门盯着 if/else 的分支看: 所有 else 和 catch 里的逻辑是真的处理了错误, 还是只是打了个 log 就过去了?&lt;/p&gt;
&lt;h2 id="第三-看测试是真测还是假测"&gt;第三: 看测试是真测还是假测&lt;/h2&gt;
&lt;p&gt;这是 agent 最喜欢偷懒的地方。写出来的测试看起来跑过了, 但仔细一看——mock 了整个函数, 断言了一个硬编码的值, 或者测了一个从来不会失败的条件。&lt;/p&gt;
&lt;p&gt;我有个检查习惯: 把测试里的数据换一批, 看看它还能不能过。换数据就挂的测试, 说明测的是假逻辑。&lt;/p&gt;
&lt;h2 id="第四-看代码风格是不是和项目一致"&gt;第四: 看代码风格是不是和项目一致&lt;/h2&gt;
&lt;p&gt;Agent 有自己的默认风格——它写出来的代码可能技术上没问题, 但跟你们项目里现有的代码风格格格不入。&lt;/p&gt;
&lt;p&gt;命名风格、错误处理模式、甚至空行的习惯——这些不一致不会让代码出 bug, 但会让维护的人很痛苦。如果发现风格不一致, 回 CLAUDE.md 里加一条规则, 下次就好了。&lt;/p&gt;</description></item><item><title>这五类任务别交给 Agent</title><link>https://time-friend.com/zh/archive/claude-code-tasks-to-avoid/</link><pubDate>Sun, 22 Mar 2026 08:50:00 +0000</pubDate><guid>https://time-friend.com/zh/archive/claude-code-tasks-to-avoid/</guid><description>&lt;p&gt;用了几个月 agent, 很容易进入一种状态: 什么东西都想扔给它干。&lt;/p&gt;
&lt;p&gt;但有些任务真的不适合——不是 agent 能力不够, 是让它干的风险和收益不成正比。&lt;/p&gt;
&lt;h2 id="一涉及生产数据的操作"&gt;一、涉及生产数据的操作&lt;/h2&gt;
&lt;p&gt;直接在生产数据库上跑 SQL——哪怕是 &lt;code&gt;SELECT&lt;/code&gt;——我不放心。Claude 不会故意搞破坏, 但它可能因为理解偏差, 扫了全表导致数据库打嗝。操作生产环境的配置、直接改线上服务的部署配置——这类事我坚持自己来。回滚一次的时间比让 agent 操作省的时间多得多。&lt;/p&gt;
&lt;h2 id="二安全敏感的变更"&gt;二、安全敏感的变更&lt;/h2&gt;
&lt;p&gt;改登录逻辑、权限校验、加密解密——这些我从来不交给 agent。不是因为 Claude 写不对, 而是这类代码出事就是大事, 而且漏洞往往不在明面上。&lt;/p&gt;
&lt;p&gt;我的做法: agent 可以写 draft, 但每一行我都要亲自 review, 并且要额外找个同事再看一遍。不信任叠加——两层人眼比一层可靠。&lt;/p&gt;
&lt;h2 id="三需要人类判断的决策"&gt;三、需要人类判断的决策&lt;/h2&gt;
&lt;p&gt;&amp;ldquo;这个按钮是放左边还是右边&amp;quot;&amp;ldquo;这个错误信息用户能看懂吗&amp;quot;&amp;ldquo;这个 API 的返回值要不要加个字段&amp;rdquo;——这些没有对错之分, 只有&amp;quot;合不合适&amp;quot;的问题。&lt;/p&gt;
&lt;p&gt;Agent 没有产品 sense, 也没有用户的上下文。让它在两套方案里选一个, 它选的方案可能从技术角度看最优, 但从产品角度看完全不对。&lt;/p&gt;
&lt;h2 id="四模棱两可的看看"&gt;四、模棱两可的&amp;quot;看看&amp;rdquo;&lt;/h2&gt;
&lt;p&gt;&amp;ldquo;帮我看看这个项目有什么可以改进的地方&amp;rdquo;——没有范围、没有标准、没有截止条件。Claude 会去读几百个文件, 然后把上下文塞满, 最后给你一个泛泛的报告。&lt;/p&gt;
&lt;p&gt;如果你真的想做代码审查, 给范围: &amp;ldquo;只看 src/api/ 下的错误处理逻辑, 找潜在的空指针风险&amp;rdquo;。&lt;/p&gt;
&lt;h2 id="五跨多系统的协调"&gt;五、跨多系统的协调&lt;/h2&gt;
&lt;p&gt;需要改 A 服务、等 B 服务部署完、再看 C 服务的响应有没有变化——这种跨系统的流程, agent 做不了。不是因为技术不行, 而是每一步之间可能有你无法预料的依赖, agent 不知道什么时候该等、什么时候该继续。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;当然, 这些&amp;quot;不适合&amp;quot;的边界不是固定的。随着你越来越了解 agent 的能力边界, 有些之前不敢放手的任务, 后来发现其实可以。&lt;/p&gt;</description></item><item><title>Agent 和 Assistant 是两回事</title><link>https://time-friend.com/zh/archive/claude-code-agent-vs-assistant/</link><pubDate>Sat, 14 Mar 2026 15:40:00 +0000</pubDate><guid>https://time-friend.com/zh/archive/claude-code-agent-vs-assistant/</guid><description>&lt;p&gt;刚用 Claude Code 的时候, 我花了不少时间纠结一个问题: 它到底是 agent 还是 assistant?&lt;/p&gt;
&lt;p&gt;看了不少文章, 大部分试图给这两个词划一条清晰的线——assistant 一次一步, agent 自主完成目标。但实际用下来的感受是, 大多数工具两种模式都能切, 分界线没那么分明。&lt;/p&gt;
&lt;p&gt;真正有意义的区别不是产品叫什么, 而是&lt;strong&gt;谁发起、谁控制、在哪里跑&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id="assistant-模式-你每步都要盯着"&gt;Assistant 模式: 你每步都要盯着&lt;/h2&gt;
&lt;p&gt;用 Claude Code 最基础的用法就是这样: 你打一句 prompt, 它动一下, 你看一眼, 然后你打下一句。&lt;/p&gt;
&lt;p&gt;你在每一轮都掌握控制权。你决定下一步做什么, agent 只是执行。这种模式下:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;你全程在场, 不太会出大问题&lt;/li&gt;
&lt;li&gt;但你的注意力被绑死了——它动一下你就要看一下&lt;/li&gt;
&lt;li&gt;适合探索性的工作: 调试、原型、架构讨论&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="agent-模式-定好目标就放手"&gt;Agent 模式: 定好目标就放手&lt;/h2&gt;
&lt;p&gt;把目标扔给 Claude, 它自己去读代码、改代码、跑测试, 最终给你一个结果。&lt;/p&gt;
&lt;p&gt;这时候你的角色变了——你不再是驾驶员, 而是定目标的人和审结果的人。中间的过程你不需要每步都看。&lt;/p&gt;
&lt;p&gt;这种模式下:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;你的注意力可以解放出来, 同时干别的事&lt;/li&gt;
&lt;li&gt;但风险也高了——它可能走偏了等你回来才发现&lt;/li&gt;
&lt;li&gt;适合有清晰完成标准的任务: 重构、迁移、批量修测试&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="最实用的分法-看触发方式"&gt;最实用的分法: 看触发方式&lt;/h2&gt;
&lt;p&gt;抛开理论, 实际工作中最好用的区分方式其实是&lt;strong&gt;谁触发的&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;你在终端里敲命令 → Assistant 模式&lt;/li&gt;
&lt;li&gt;定时任务跑起来的、GitHub Webhook 触发的、CI 里自动执行的 → Agent 模式&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我自己最有价值的体会是: 不用纠结它该叫 agent 还是 assistant, 而是建立一条 pipeline——用 assistant 模式试出一个可靠的工作流, 然后把它变成定时跑的 agent 任务。&lt;/p&gt;</description></item><item><title>几轮对话后 Claude 变笨了</title><link>https://time-friend.com/zh/archive/claude-code-advanced-practices/</link><pubDate>Fri, 06 Mar 2026 11:10:00 +0000</pubDate><guid>https://time-friend.com/zh/archive/claude-code-advanced-practices/</guid><description>&lt;p&gt;用了几个月 Claude Code 之后, 我遇到了一个奇怪的现象: 同一个会话, 做到后面感觉 Claude 变蠢了。&lt;/p&gt;
&lt;p&gt;不是你的错觉, 也不是模型的问题。是上下文炸了。&lt;/p&gt;
&lt;h2 id="上下文是怎么炸的"&gt;上下文是怎么炸的&lt;/h2&gt;
&lt;p&gt;Claude 的工作记忆是有限的。会话一开始, 它清楚地记得目标是什么、做了哪些决策、还有哪些事没做完。到了第 50 轮, 上下文里塞满了走过的弯路、讨论过的方案、和你争论的对话历史。&lt;/p&gt;
&lt;p&gt;输出质量下降是必然的。&lt;/p&gt;
&lt;h2 id="每轮对话都是检查点"&gt;每轮对话都是检查点&lt;/h2&gt;
&lt;p&gt;Claude Code 有一个很方便的机制: &lt;strong&gt;每发出一条 prompt 就会自动创建一个快照&lt;/strong&gt;。不只是记对话, 还会快照被修改的文件状态。&lt;/p&gt;
&lt;p&gt;按两次 &lt;code&gt;Escape&lt;/code&gt; 或者输入 &lt;code&gt;/rewind&lt;/code&gt;, 会打开回退菜单。你可以选择:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;只回退对话&lt;/li&gt;
&lt;li&gt;只恢复代码&lt;/li&gt;
&lt;li&gt;两者都回退&lt;/li&gt;
&lt;li&gt;从某个节点开始压缩&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;有了这个, 你可以大胆地让 Claude 尝试高风险方案。不行就回退, 不丢任何代码。检查点会随会话保存, 关掉终端回来还能继续回退。&lt;/p&gt;
&lt;p&gt;但要注意: 检查点只追踪 Claude 通过编辑工具做的修改。通过 Bash 命令或外部进程改的东西不在此列。它不是 git 的替代品。&lt;/p&gt;
&lt;h2 id="几个习惯-保持上下文干净"&gt;几个习惯, 保持上下文干净&lt;/h2&gt;
&lt;h3 id="走偏了立刻打断"&gt;走偏了立刻打断&lt;/h3&gt;
&lt;p&gt;按 &lt;code&gt;Escape&lt;/code&gt; 中断它。按两次 &lt;code&gt;Escape&lt;/code&gt; 打开回退菜单, 可以回滚到之前的状态。&lt;/p&gt;
&lt;p&gt;我踩过的一个坑: 当 Claude 反复回到一个错误假设的时候, 我下意识用了 &lt;code&gt;/compact&lt;/code&gt;。结果它把那个错误假设也保留了, 问题没解决。正确做法是:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;最好的是 &lt;code&gt;/clear&lt;/code&gt; 清空, 用更精确的 prompt 重新开始&lt;/li&gt;
&lt;li&gt;如果你想保留当前的关键上下文, 用 &lt;code&gt;/compact 只保留 API 变更相关的部分, 丢掉调试过程&lt;/code&gt;——加上 focus 指令告诉它该留什么&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="常用命令"&gt;常用命令&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/clear&lt;/code&gt;&lt;/strong&gt;: 任务之间清空上下文, 别让上个任务的逻辑污染下个任务&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/compact&lt;/code&gt;&lt;/strong&gt;: 加 focus 指令, 用在长而连贯的会话里, 保留关键部分丢掉噪音&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Subagent&lt;/strong&gt;: 把大量研究类的工作交给它, 在独立上下文里完成, 还你一个总结&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/rename&lt;/code&gt;&lt;/strong&gt;: 给重要的会话打标签, 方便之后找回&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="我自己用的土办法"&gt;我自己用的土办法&lt;/h3&gt;
&lt;p&gt;每次完成一个逻辑单元——一个函数、一个组件——就 &lt;code&gt;git commit&lt;/code&gt;, 然后 &lt;code&gt;/clear&lt;/code&gt;, 再开始下一个。&lt;/p&gt;</description></item><item><title>我的 CLAUDE.md 里都放了什么</title><link>https://time-friend.com/zh/archive/claude-code-configuration/</link><pubDate>Thu, 19 Feb 2026 16:20:00 +0000</pubDate><guid>https://time-friend.com/zh/archive/claude-code-configuration/</guid><description>&lt;p&gt;最讽刺的事情是什么? 你一边抱怨&amp;quot;每次新会话都要重新跟 Claude 解释项目背景&amp;quot;, 一边项目根目录里根本没有 &lt;code&gt;CLAUDE.md&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;别笑, 我之前就是这个状态。&lt;/p&gt;
&lt;p&gt;后来发现有个偷懒的办法——直接跑 &lt;code&gt;/init&lt;/code&gt;。Claude 会自动分析你的项目结构、检测构建工具和测试框架, 生成一份初始的 CLAUDE.md。如果已经有 CLAUDE.md 了, &lt;code&gt;/init&lt;/code&gt; 不会覆盖, 而是建议改进。&lt;/p&gt;
&lt;h2 id="claudemd-的本质"&gt;CLAUDE.md 的本质&lt;/h2&gt;
&lt;p&gt;Claude Code 启动的时候会自动读这个文件, 把它当作用来理解项目的起点。你项目怎么跑测试、目录结构是什么、有哪些不能碰的约定——写进去, 它自己就知道了。&lt;/p&gt;
&lt;h3 id="第一类-命令"&gt;第一类: 命令&lt;/h3&gt;
&lt;p&gt;最常见的用法——把命令写进去, 省得每次说:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;## Commands
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;-&lt;/span&gt; 测试: npm test
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;-&lt;/span&gt; 构建: npm run build
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;-&lt;/span&gt; 单文件测试: npx jest src/xxx.test.ts
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;-&lt;/span&gt; Lint: npx eslint src/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;有了这些, Claude 自己知道该跑什么, 不用你再说&amp;quot;跑一下测试&amp;quot;。&lt;/p&gt;
&lt;h3 id="第二类-架构约定"&gt;第二类: 架构约定&lt;/h3&gt;
&lt;p&gt;有些东西 Claude 看代码看不出来:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;## Architecture
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;-&lt;/span&gt; 状态管理用 Zustand, 不用 Redux
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;-&lt;/span&gt; API 请求统一走 src/api/ 下的封装
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;-&lt;/span&gt; 不要直接改 src/core/ 里的文件, 只能通过扩展接口
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="第三类-团队规范"&gt;第三类: 团队规范&lt;/h3&gt;
&lt;p&gt;Linter 管不了, 但 review 的时候一定会被说的:&lt;/p&gt;</description></item><item><title>Agent 改完的代码, 你敢直接合吗</title><link>https://time-friend.com/zh/archive/claude-code-self-verification/</link><pubDate>Thu, 05 Feb 2026 09:45:00 +0000</pubDate><guid>https://time-friend.com/zh/archive/claude-code-self-verification/</guid><description>&lt;p&gt;Claude 改完代码说了一声&amp;quot;Done&amp;quot;, 你看了一眼觉得差不多, 就合并了。然后周一线上挂了。&lt;/p&gt;
&lt;p&gt;没有可运行的检查, agent 觉得&amp;quot;做完了&amp;quot;和你觉得&amp;quot;做完了&amp;quot;是两码事。最贵的 bug 不是崩溃, 是安安静静返回了错误结果。&lt;/p&gt;
&lt;h2 id="最简单的-prompt-里加一句"&gt;最简单的: prompt 里加一句&lt;/h2&gt;
&lt;p&gt;最轻量的做法, 就是在 prompt 末尾加一句话:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;改完之后跑一下测试, 不通过就继续修.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Claude 改完代码会自己去跑 &lt;code&gt;npm test&lt;/code&gt;, 挂了就回头看代码, 修好了再跑。全过程不需要你介入。&lt;/p&gt;
&lt;p&gt;但这有个问题——它只按照自己理解的标准来验证。如果你的测试覆盖率不够, 或者&amp;quot;完成&amp;quot;的定义比跑通测试更复杂, 就需要更多层。&lt;/p&gt;
&lt;h2 id="分层往上加"&gt;分层往上加&lt;/h2&gt;
&lt;h3 id="第一层-prompt-内检查"&gt;第一层: prompt 内检查&lt;/h3&gt;
&lt;p&gt;就是上面说的, 告诉它跑测试。日常小改动用这个就够了。&lt;/p&gt;
&lt;h3 id="第二层-定义完成标准"&gt;第二层: 定义完成标准&lt;/h3&gt;
&lt;p&gt;在 prompt 里说清楚什么算&amp;quot;做完&amp;quot;:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;每次修改完运行 npm run build &amp;amp;&amp;amp; npm test, 把输出发给我.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这样你至少能看到它跑了什么、输出了什么, 不是它说 done 你就信。&lt;/p&gt;
&lt;h3 id="第三层-不让它糊弄"&gt;第三层: 不让它糊弄&lt;/h3&gt;
&lt;p&gt;加一句关键的:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;修复根因, 不要掩盖错误.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这能防止 agent 用空的 try-catch 或者假的 fallback 数据来敷衍你。&lt;/p&gt;
&lt;h3 id="第四层-goal-条件"&gt;第四层: &lt;code&gt;/goal&lt;/code&gt; 条件&lt;/h3&gt;
&lt;p&gt;把验证条件设成会话级的 goal, 每次修改后自动检查:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;/goal 测试全部通过, 构建产物不超过 200KB
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Claude 会在每轮修改后重新检查, 不满足就继续改, 不需要你每次都说&amp;quot;再跑一下测试&amp;quot;。&lt;/p&gt;</description></item><item><title>写 Prompt 一次过的秘诀</title><link>https://time-friend.com/zh/archive/claude-code-effective-prompts/</link><pubDate>Thu, 22 Jan 2026 14:15:00 +0000</pubDate><guid>https://time-friend.com/zh/archive/claude-code-effective-prompts/</guid><description>&lt;p&gt;用了一段时间 Claude Code, 你会发现大部分翻车的会话不是模型不行, 是你自己的 prompt 有问题。Claude 能猜你的意图, 但你没法指望它会读心。&lt;/p&gt;
&lt;h2 id="把任务范围卡死"&gt;把任务范围卡死&lt;/h2&gt;
&lt;p&gt;&amp;ldquo;帮我优化一下这段代码&amp;rdquo;——这种 prompt 出来什么结果全看运气。什么叫优化? 性能、可读性、还是裁掉冗余代码?&lt;/p&gt;
&lt;p&gt;好的 prompt 应该说清楚文件、场景和验证方式:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;给 src/auth.ts 写一个已登出用户的边缘用例测试, 不要用 mock.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;任务范围越小, 结果越可控。模糊的 prompt 只有在一种情况下有用——你真的想让 agent 给意见的时候。&amp;ldquo;这个文件你有什么改进建议&amp;quot;就很合适, 但记得限定范围, 别让它自己逛到几百个文件里去。&lt;/p&gt;
&lt;h2 id="指一个现成的例子"&gt;指一个现成的例子&lt;/h2&gt;
&lt;p&gt;Claude 从真实代码里学规范比从文字描述里学快得多。你不需要跟它解释&amp;quot;我们项目的命名规范是驼峰、接口前缀有 I 开头&amp;rdquo;——&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;参考 src/services/user.ts 的写法, 用同样的模式实现这个新接口.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;一句话, 比一百字描述都有用。&lt;/p&gt;
&lt;h2 id="报-bug-按固定格式来"&gt;报 Bug 按固定格式来&lt;/h2&gt;
&lt;p&gt;我 debug 的时候用这个格式, 很少出问题:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;症状: 用户登录后跳到 404 页面
位置: src/router/index.ts 第 42-56 行的路由守卫逻辑
修复标准: 登录后跳到 redirect 参数指定的页面, 没有 redirect 就去首页
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;再加一句 &amp;ldquo;先写一个能复现的测试再修&amp;rdquo;, 能防止它改完了但什么都没修。&lt;/p&gt;
&lt;h2 id="用-btw-处理临时小问题"&gt;用 &lt;code&gt;/btw&lt;/code&gt; 处理临时小问题&lt;/h2&gt;
&lt;p&gt;有时候你做到一半, 突然想确认一个不相关的事——&amp;ldquo;这个包的 API 签名是什么样的?&amp;quot;。如果用主会话问, 它会污染上下文。用 &lt;code&gt;/btw 这个包的 API 签名是什么&lt;/code&gt; 问, 答案会以浮层显示, 不进对话历史, 不占上下文。&lt;/p&gt;</description></item><item><title>用 Plan → Code 循环管住你的 Agent</title><link>https://time-friend.com/zh/archive/claude-code-plan-code-loop/</link><pubDate>Thu, 08 Jan 2026 10:30:00 +0000</pubDate><guid>https://time-friend.com/zh/archive/claude-code-plan-code-loop/</guid><description>&lt;p&gt;刚用 Claude Code 的时候我有个毛病: 打开终端, 直接敲一句话告诉它帮我改什么, 然后看着它一顿操作, 最后发现方向完全不对。&lt;/p&gt;
&lt;p&gt;后来想明白一个道理——Agentic Coding 和写代码是两套不同的技能。写代码的时候你的手跟着脑子走, 但用 agent 的时候, 你的价值在于&amp;quot;定义目标&amp;quot;和&amp;quot;审核结果&amp;quot;, 而不是替它打字。&lt;/p&gt;
&lt;p&gt;那怎么让 agent 不走偏? 我总结了四个步骤: &lt;strong&gt;探索 → 规划 → 编码 → 提交&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id="第一步-先探索-别动手"&gt;第一步: 先探索, 别动手&lt;/h2&gt;
&lt;p&gt;Plan 模式是 Claude Code 的只读模式。启动的时候加个参数:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;claude --permission-mode plan
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;会话里按 &lt;code&gt;Shift+Tab&lt;/code&gt; 可以在 Plan 和 Accept-Edits 之间切换, 或者直接打 &lt;code&gt;/plan&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;为什么要先探索? Claude 对项目的理解完全取决于你给了什么上下文。让它自己把相关文件读一遍, 画出一张地图, 比你凭直觉说&amp;quot;去改那个文件&amp;quot;要靠谱得多。&lt;/p&gt;
&lt;p&gt;碰到特别棘手的架构问题, 我习惯在 prompt 里加一句 &amp;ldquo;think carefully before proposing anything&amp;rdquo;。多数情况下, 它前面的推理越仔细, 后面的返工就越少。&lt;/p&gt;
&lt;p&gt;不过也别教条。如果任务很小——修个 typo、改个变量名、加一行日志——直接让它做就行, 不需要走完整个 plan 流程。官网文档也说了: 如果你能用一句话描述完改动内容, 那就跳过 plan。&lt;/p&gt;</description></item><item><title>TensorFlow中的Tensor是什么?</title><link>https://time-friend.com/zh/archive/what-is-a-tensor-in-tensorflow/</link><pubDate>Fri, 18 Sep 2020 00:00:00 +0000</pubDate><guid>https://time-friend.com/zh/archive/what-is-a-tensor-in-tensorflow/</guid><description>&lt;h2 id="tensor张量"&gt;Tensor(张量)&lt;/h2&gt;
&lt;p&gt;“张量”一词最初由威廉·罗恩·哈密顿在1846年引入。对，就是那个发明四元数的哈密顿：&lt;/p&gt;
&lt;p&gt;&lt;img src="https://incomparable9527.coding.net/p/imageBed/d/imageBed/git/raw/master/643fca018187d79da1be1bc50f3beb7544c7ff56ffd50d0b4d332952034daa1b.png" alt="图 3"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Tensor实际上就是一个多维数组（multidimensional array）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Tensor的目的是能够创造更高维度的矩阵、向量。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://incomparable9527.coding.net/p/imageBed/d/imageBed/git/raw/master/61f12309aef252eb15cb7e168026f7bab180ea4a8cca2726d0ae4454c6003ba6.png" alt="图 1"&gt;&lt;/p&gt;
&lt;h3 id="色彩的例子"&gt;色彩的例子&lt;/h3&gt;
&lt;p&gt;彩色图像文件（RGB）一般都会处理成3-d tensor，每个2d array中的element表示一个像素，R代表Red，G代表Green，B代表Blue&lt;/p&gt;
&lt;p&gt;&lt;img src="https://incomparable9527.coding.net/p/imageBed/d/imageBed/git/raw/master/9d8d1f97a751a320d7ba127a3722691950609d6e21edc6fc1e983923d72096c8.png" alt="图 2"&gt;&lt;/p&gt;
&lt;h2 id="多维数组"&gt;多维数组&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://incomparable9527.coding.net/p/imageBed/d/imageBed/git/raw/master/6e86be5b727b21425ed87b5d2971b5f6ea9fa38cfe56455931faacd288085206.png" alt="图 4"&gt;&lt;/p&gt;
&lt;p&gt;把三维张量画成一个立方体：&lt;/p&gt;
&lt;p&gt;&lt;img src="https://incomparable9527.coding.net/p/imageBed/d/imageBed/git/raw/master/0a29499dadc3caf5094316c2a6570a54489f552f36989a67590a2e717b654278.png" alt="图 5"&gt;&lt;/p&gt;
&lt;p&gt;更高维的张量:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://incomparable9527.coding.net/p/imageBed/d/imageBed/git/raw/master/f0cd642725a7b5b30592837c1fe8ec518816a170e57f74e577f1dfbcfaf6bb06.png" alt="图 6"&gt;&lt;/p&gt;
&lt;h2 id="初始化一个向量"&gt;初始化一个向量&lt;/h2&gt;
&lt;h3 id="0维"&gt;0维&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;tf&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;tensor&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;).&lt;span style="color:#a6e22e"&gt;print&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="1维"&gt;1维&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;tf&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;tensor&lt;/span&gt;([&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;]).&lt;span style="color:#a6e22e"&gt;print&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// or
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;tf&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;tensor1d&lt;/span&gt;([&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;]).&lt;span style="color:#a6e22e"&gt;print&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="2维"&gt;2维&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;tf&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;tensor&lt;/span&gt;([[&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;], [&lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;]]).&lt;span style="color:#a6e22e"&gt;print&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// or
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;tf&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;tensor2d&lt;/span&gt;([[&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;], [&lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;]]).&lt;span style="color:#a6e22e"&gt;print&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="3维"&gt;3维&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;tf&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;tensor&lt;/span&gt;([[[&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;], [&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;]], [[&lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;], [&lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;]]]).&lt;span style="color:#a6e22e"&gt;print&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// or
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;tf&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;tensor3d&lt;/span&gt;([[[&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;], [&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;]], [[&lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;], [&lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;]]]).&lt;span style="color:#a6e22e"&gt;print&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="4维"&gt;4维&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;tf&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;tensor&lt;/span&gt;([[[[&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;], [&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;]], [[&lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;], [&lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;]]]]).&lt;span style="color:#a6e22e"&gt;print&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// or
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;tf&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;tensor4d&lt;/span&gt;([[[[&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;], [&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;]], [[&lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;], [&lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;]]]]).&lt;span style="color:#a6e22e"&gt;print&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="5维"&gt;5维&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;tf&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;tensor&lt;/span&gt;([[[[[&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;], [&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;]], [[&lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;], [&lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;]]]]]).&lt;span style="color:#a6e22e"&gt;print&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// or
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;tf&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;tensor5d&lt;/span&gt;([[[[[&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;], [&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;]], [[&lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;], [&lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;]]]]]).&lt;span style="color:#a6e22e"&gt;print&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="6维"&gt;6维&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;tf&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;tensor&lt;/span&gt;([[[[[[&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;],[&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;]],[[&lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;],[&lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;]]],[[[&lt;span style="color:#ae81ff"&gt;5&lt;/span&gt;],[&lt;span style="color:#ae81ff"&gt;6&lt;/span&gt;]],[[&lt;span style="color:#ae81ff"&gt;7&lt;/span&gt;],[&lt;span style="color:#ae81ff"&gt;8&lt;/span&gt;]]]]]]).&lt;span style="color:#a6e22e"&gt;print&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// or
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;tf&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;tensor6d&lt;/span&gt;([[[[[[&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;],[&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;]],[[&lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;],[&lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;]]],[[[&lt;span style="color:#ae81ff"&gt;5&lt;/span&gt;],[&lt;span style="color:#ae81ff"&gt;6&lt;/span&gt;]],[[&lt;span style="color:#ae81ff"&gt;7&lt;/span&gt;],[&lt;span style="color:#ae81ff"&gt;8&lt;/span&gt;]]]]]]).&lt;span style="color:#a6e22e"&gt;print&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item></channel></rss>