<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Prompt Engineering on KnightLi Blog</title>
        <link>https://knightli.com/en/tags/prompt-engineering/</link>
        <description>Recent content in Prompt Engineering on KnightLi Blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Fri, 01 May 2026 03:09:07 +0800</lastBuildDate><atom:link href="https://knightli.com/en/tags/prompt-engineering/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Prompt Optimizer: An Open-Source Tool for Prompt Optimization, Testing, and MCP</title>
        <link>https://knightli.com/en/2026/05/01/prompt-optimizer-prompt-engineering-tool/</link>
        <pubDate>Fri, 01 May 2026 03:09:07 +0800</pubDate>
        
        <guid>https://knightli.com/en/2026/05/01/prompt-optimizer-prompt-engineering-tool/</guid>
        <description>&lt;p&gt;&lt;code&gt;Prompt Optimizer&lt;/code&gt; is an open-source tool for improving prompts. Its goal is straightforward: help you turn a rough prompt into something clearer, more stable, and easier for large language models to follow.&lt;/p&gt;
&lt;p&gt;It is not just a page that “polishes my prompt.” The project provides prompt optimization, result testing, comparison and evaluation, multi-model access, image prompt handling, and MCP integration. For people who often write system prompts, user prompts, and AI workflow templates, it feels more like a dedicated prompt workbench.&lt;/p&gt;
&lt;h2 id=&#34;what-problem-it-solves&#34;&gt;What Problem It Solves
&lt;/h2&gt;&lt;p&gt;Many people run into similar problems when using AI:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Prompts keep getting longer, but output quality does not clearly improve&lt;/li&gt;
&lt;li&gt;The same task behaves differently after switching models&lt;/li&gt;
&lt;li&gt;System prompts and user prompts are mixed together and hard to debug&lt;/li&gt;
&lt;li&gt;After changing a prompt, it is unclear whether the new version is better&lt;/li&gt;
&lt;li&gt;Variable templates are useful, but manual replacement and testing are tedious&lt;/li&gt;
&lt;li&gt;Prompt optimization should be available to other AI tools, but there is no standard interface&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Prompt Optimizer&lt;/code&gt; is designed around these problems. It breaks “writing a prompt” into optimization, testing, evaluation, comparison, and iteration, so prompt tuning is no longer based only on intuition.&lt;/p&gt;
&lt;h2 id=&#34;main-features&#34;&gt;Main Features
&lt;/h2&gt;&lt;h3 id=&#34;1-optimize-system-prompts-and-user-prompts&#34;&gt;1. Optimize System Prompts and User Prompts
&lt;/h3&gt;&lt;p&gt;There is more than one kind of prompt.&lt;/p&gt;
&lt;p&gt;System prompts usually define roles, goals, boundaries, output rules, and working methods. User prompts are closer to the input for one specific task. When the two are mixed together, the model can miss the key point, and reuse becomes harder.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Prompt Optimizer&lt;/code&gt; supports both system prompt optimization and user prompt optimization. You can improve long-term reusable role definitions separately from the input for a specific task.&lt;/p&gt;
&lt;p&gt;This is useful for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Writing rules for AI coding assistants&lt;/li&gt;
&lt;li&gt;Designing customer service, reviewer, translation, and analysis roles&lt;/li&gt;
&lt;li&gt;Optimizing text-to-image prompts&lt;/li&gt;
&lt;li&gt;Turning temporary requirements into reusable templates&lt;/li&gt;
&lt;li&gt;Preparing different prompt styles for different models&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;2-test-and-compare-outputs&#34;&gt;2. Test and Compare Outputs
&lt;/h3&gt;&lt;p&gt;Optimizing a prompt is not enough. The important question is whether the optimized prompt actually performs better.&lt;/p&gt;
&lt;p&gt;The project supports analysis, single-result evaluation, and multi-result comparison. You can run the original prompt and the optimized prompt on the same task, then compare whether the output is more accurate, stable, and aligned with the goal.&lt;/p&gt;
&lt;p&gt;This is more practical than prompts that only “look more professional.” Many prompts look complete on the surface but produce verbose, rigid, or even misdirected output. Comparison testing helps reveal that early.&lt;/p&gt;
&lt;h3 id=&#34;3-multi-model-support&#34;&gt;3. Multi-Model Support
&lt;/h3&gt;&lt;p&gt;The README says the project supports model services such as OpenAI, Gemini, DeepSeek, Zhipu AI, and SiliconFlow, as well as custom OpenAI-compatible APIs.&lt;/p&gt;
&lt;p&gt;This matters because prompt performance depends heavily on the model. The same prompt can behave very differently across models. Multi-model testing helps determine:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Whether the prompt itself is weak&lt;/li&gt;
&lt;li&gt;Whether a specific model is unsuitable for the task&lt;/li&gt;
&lt;li&gt;Whether different model-specific prompt versions are needed&lt;/li&gt;
&lt;li&gt;Whether a smaller model can become usable with a clearer prompt&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you use Ollama locally, or your company has an OpenAI-compatible internal model service, it can also be connected through a custom API.&lt;/p&gt;
&lt;h3 id=&#34;4-advanced-testing-mode&#34;&gt;4. Advanced Testing Mode
&lt;/h3&gt;&lt;p&gt;The project provides context variable management, multi-turn conversation testing, and Function Calling support.&lt;/p&gt;
&lt;p&gt;Variable management is useful for templated tasks. For example, if you have prompts for second-hand sales replies, product descriptions, email responses, code reviews, or document generation, you can replace variables such as product, price, tone, and target user to test different inputs quickly.&lt;/p&gt;
&lt;p&gt;Multi-turn conversation testing helps validate long-running dialogue behavior. Many prompts look fine in a single turn, but once follow-up questions begin, they may forget constraints, drift away from the role, or repeat explanations. Multi-turn testing is closer to real usage.&lt;/p&gt;
&lt;p&gt;Function Calling support is suitable for more engineering-oriented AI applications. It helps validate model behavior around tool calls, parameter generation, and structured output.&lt;/p&gt;
&lt;h3 id=&#34;5-image-generation-prompts&#34;&gt;5. Image Generation Prompts
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;Prompt Optimizer&lt;/code&gt; also supports text-to-image and image-to-image workflows. The README mentions integration with image models such as Gemini and Seedream.&lt;/p&gt;
&lt;p&gt;Image prompt optimization is different from text tasks. It focuses more on subject, composition, spatial relationship, style, material, lighting, mood, and constraints. Turning a vague idea into a controllable visual description is often more valuable than simply making the prompt longer.&lt;/p&gt;
&lt;p&gt;If you often generate product images, covers, illustrations, key visuals, or style references, this type of optimization is useful.&lt;/p&gt;
&lt;h2 id=&#34;ways-to-use-it&#34;&gt;Ways to Use It
&lt;/h2&gt;&lt;p&gt;The project provides several entry points:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Online version&lt;/li&gt;
&lt;li&gt;Vercel self-hosting&lt;/li&gt;
&lt;li&gt;Desktop app&lt;/li&gt;
&lt;li&gt;Chrome extension&lt;/li&gt;
&lt;li&gt;Docker deployment&lt;/li&gt;
&lt;li&gt;Docker Compose deployment&lt;/li&gt;
&lt;li&gt;MCP Server&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The online version is good for quick trials. The project notes that it is a pure frontend app: data is stored locally in the browser and sent directly to AI providers.&lt;/p&gt;
&lt;p&gt;The desktop app is better when you need to connect directly to different model APIs. Browser environments can run into CORS limits; the desktop app avoids those issues, especially when connecting to local Ollama or commercial APIs with strict cross-origin policies.&lt;/p&gt;
&lt;p&gt;Docker deployment is suitable for your own server or intranet environment. The README gives this basic command:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker run -d -p 8081:80 --restart unless-stopped --name prompt-optimizer linshen/prompt-optimizer
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;To configure API keys and access passwords, pass environment variables:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker run -d -p 8081:80 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -e &lt;span class=&#34;nv&#34;&gt;VITE_OPENAI_API_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;your_key &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -e &lt;span class=&#34;nv&#34;&gt;ACCESS_USERNAME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;your_username &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -e &lt;span class=&#34;nv&#34;&gt;ACCESS_PASSWORD&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;your_password &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --restart unless-stopped &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --name prompt-optimizer &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  linshen/prompt-optimizer
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If Docker Hub is slow in China, the project also provides an Alibaba Cloud image address in the README.&lt;/p&gt;
&lt;h2 id=&#34;what-mcp-enables&#34;&gt;What MCP Enables
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Prompt Optimizer&lt;/code&gt; supports Model Context Protocol, or MCP.&lt;/p&gt;
&lt;p&gt;When running through Docker, the MCP service can start together with the Web app and be accessed through the &lt;code&gt;/mcp&lt;/code&gt; path. This turns it from a Web tool into something that can be called by MCP-compatible apps such as Claude Desktop.&lt;/p&gt;
&lt;p&gt;The README lists these MCP tools:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;optimize-user-prompt&lt;/code&gt;: optimize user prompts&lt;/li&gt;
&lt;li&gt;&lt;code&gt;optimize-system-prompt&lt;/code&gt;: optimize system prompts&lt;/li&gt;
&lt;li&gt;&lt;code&gt;iterate-prompt&lt;/code&gt;: perform targeted iteration on an existing prompt&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These interfaces are well suited for AI workflows. For example, when writing a complex task prompt, an MCP-compatible client can call the prompt optimization tool directly instead of requiring you to open a Web page and copy text manually.&lt;/p&gt;
&lt;h2 id=&#34;difference-from-normal-chat-tools&#34;&gt;Difference from Normal Chat Tools
&lt;/h2&gt;&lt;p&gt;Normal chat tools can also help rewrite prompts, but they usually lack several parts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Saving and comparing multiple versions is inconvenient&lt;/li&gt;
&lt;li&gt;Testing multiple models at once is inconvenient&lt;/li&gt;
&lt;li&gt;Turning variables into templates is inconvenient&lt;/li&gt;
&lt;li&gt;Multi-turn conversation validation is inconvenient&lt;/li&gt;
&lt;li&gt;Integrating through MCP or self-hosting is inconvenient&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The value of &lt;code&gt;Prompt Optimizer&lt;/code&gt; is that it turns prompt optimization into a repeatable process. It does not just give you a version that “looks more complete”; it lets you keep adjusting prompts around real outputs.&lt;/p&gt;
&lt;h2 id=&#34;who-should-use-it&#34;&gt;Who Should Use It
&lt;/h2&gt;&lt;p&gt;This project is worth attention if you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Often write system prompts&lt;/li&gt;
&lt;li&gt;Design roles and output formats for AI applications&lt;/li&gt;
&lt;li&gt;Need to compare outputs from different models&lt;/li&gt;
&lt;li&gt;Want to turn prompts into reusable templates&lt;/li&gt;
&lt;li&gt;Need to test multi-turn dialogue or tool calls&lt;/li&gt;
&lt;li&gt;Want to connect prompt optimization to an MCP workflow&lt;/li&gt;
&lt;li&gt;Want to deploy a prompt tool locally or inside an intranet&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you only occasionally ask AI a simple question, a normal chat page is enough. This tool is better for people who treat prompts as maintainable assets.&lt;/p&gt;
&lt;h2 id=&#34;notes-for-use&#34;&gt;Notes for Use
&lt;/h2&gt;&lt;p&gt;First, do not treat optimization results as absolutely correct.&lt;/p&gt;
&lt;p&gt;Prompt optimization tools can improve expression quality, but they cannot guarantee that a model will never misunderstand. Important tasks still need test cases, manual review, and version comparison.&lt;/p&gt;
&lt;p&gt;Second, do not only chase length.&lt;/p&gt;
&lt;p&gt;A good prompt is not necessarily longer. It should express goals, boundaries, input and output formats, and evaluation criteria more clearly. Meaningless rule stacking can make the model miss the point.&lt;/p&gt;
&lt;p&gt;Third, tune prompts by model.&lt;/p&gt;
&lt;p&gt;Different models respond differently to role settings, format constraints, reasoning steps, and examples. A prompt that works well on a large model may not suit a smaller model. Multi-model testing is one reason this tool is useful.&lt;/p&gt;
&lt;p&gt;Fourth, consider keys and access control when deploying.&lt;/p&gt;
&lt;p&gt;If you deploy it publicly, configure an access password and handle API keys carefully. The project supports access control through environment variables; do not write sensitive configuration directly into public repositories.&lt;/p&gt;
&lt;h2 id=&#34;reference&#34;&gt;Reference
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/linshenkx/prompt-optimizer&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;linshenkx/prompt-optimizer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;final-thought&#34;&gt;Final Thought
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Prompt Optimizer&lt;/code&gt; is useful for turning prompts from “a temporary paragraph I wrote by hand” into “a work asset that can be tested, compared, and iterated.”&lt;/p&gt;
&lt;p&gt;When you start maintaining prompts across multiple models, scenarios, and versions, this kind of tool is more convenient than a normal chat window.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>nuwa-skill: Turning &#34;distilling a person&#34; from an idea into an executable workflow</title>
        <link>https://knightli.com/en/2026/04/22/nuwa-skill-distill-how-someone-thinks/</link>
        <pubDate>Wed, 22 Apr 2026 16:20:00 +0800</pubDate>
        
        <guid>https://knightli.com/en/2026/04/22/nuwa-skill-distill-how-someone-thinks/</guid>
        <description>&lt;p&gt;&lt;code&gt;[alchaincyf/nuwa-skill](https://github.com/alchaincyf/nuwa-skill)&lt;/code&gt; can easily make people think of one thing first: using AI to answer in a famous person&amp;rsquo;s voice. But what makes it genuinely interesting is not whether it sounds convincing. The key is that it tries to turn &amp;ldquo;distilling how a person thinks&amp;rdquo; into a repeatable workflow.&lt;/p&gt;
&lt;p&gt;If that works, the value goes far beyond a few entertaining character prompts. It means taking someone&amp;rsquo;s judgment framework, priorities, common heuristics, and communication habits, and turning them into a skill that can be called again and again. What you want is not a sentence that sounds like something a person might say, but something closer to a working interface for &amp;ldquo;if this person analyzed the issue, what would they look at first, how would they trade things off, and what would they question?&amp;rdquo;&lt;/p&gt;
&lt;h2 id=&#34;it-solves-modeling-not-imitation&#34;&gt;It solves modeling, not imitation
&lt;/h2&gt;&lt;p&gt;Many so-called persona prompts are basically just style overlays.&lt;/p&gt;
&lt;p&gt;They usually ask the model to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;speak in someone&amp;rsquo;s tone&lt;/li&gt;
&lt;li&gt;quote their signature lines more often&lt;/li&gt;
&lt;li&gt;imitate the phrasing they use in public&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That looks great in demos, but it often falls apart in real work. The reason is simple: tone is surface-level, while judgment structure is the core. A person is memorable not because they like a few certain words, but because they reliably approach problems in certain ways.&lt;/p&gt;
&lt;p&gt;The direction of &lt;code&gt;nuwa-skill&lt;/code&gt; is closer to extracting those stable methods. In other words, it cares less about &amp;ldquo;how to sound like them&amp;rdquo; and more about &amp;ldquo;how to think like them.&amp;rdquo;&lt;/p&gt;
&lt;h2 id=&#34;a-more-complete-workflow&#34;&gt;A more complete workflow
&lt;/h2&gt;&lt;p&gt;From the repository description, &lt;code&gt;nuwa-skill&lt;/code&gt; aims to build an end-to-end flow: enter a person&amp;rsquo;s name, then automatically do the research, extraction, and validation, and finally organize the result into a skill that can be used inside Claude Code.&lt;/p&gt;
&lt;p&gt;There are several important shifts behind that idea.&lt;/p&gt;
&lt;p&gt;First, it assumes the person being distilled does not have to be your coworker. Many people first encounter this kind of idea in the form of &amp;ldquo;capture how a strong teammate works.&amp;rdquo; That is valuable, but it is also limited: the sample pool is small, and it usually only covers internal team experience. &lt;code&gt;nuwa-skill&lt;/code&gt; expands the target set to a much broader range of people, such as founders, investors, scientists, product managers, and writers.&lt;/p&gt;
&lt;p&gt;Second, it emphasizes automation rather than asking the user to handcraft prompts. What really makes this kind of capability practical is not beautiful prompt wording, but whether you can consistently do source gathering, viewpoint synthesis, pattern extraction, and result validation. As soon as any one of those steps depends entirely on manual work, the reuse cost rises quickly.&lt;/p&gt;
&lt;p&gt;Third, it tries to make the output a skill rather than a one-off conversation. The former can be reused, combined, and iterated on. The latter usually only works in the current context and falls apart after a few turns.&lt;/p&gt;
&lt;h2 id=&#34;why-this-direction-matters&#34;&gt;Why this direction matters
&lt;/h2&gt;&lt;p&gt;If you treat AI as a question-answering machine, the natural use case is &amp;ldquo;give me an answer.&amp;rdquo; But if you treat AI as a workbench, the question becomes &amp;ldquo;give me a way to look at this problem.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;That is where the value of &lt;code&gt;nuwa-skill&lt;/code&gt; leans.&lt;/p&gt;
&lt;p&gt;For example, when facing a product decision, what you want may not be one standard answer. You may want several sharply different analytical frames:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one person starts with long-term compounding&lt;/li&gt;
&lt;li&gt;one starts with resource constraints&lt;/li&gt;
&lt;li&gt;one starts with consistency of user experience&lt;/li&gt;
&lt;li&gt;one starts with timing of market entry&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If those frames can be packaged reliably, AI stops being &amp;ldquo;something that writes a paragraph for you&amp;rdquo; and becomes &amp;ldquo;something that helps you switch perspectives quickly.&amp;rdquo; That is much more useful than simply imitating famous quotes, because it directly affects decision quality.&lt;/p&gt;
&lt;h2 id=&#34;its-most-compelling-part-turning-tacit-knowledge-into-callable-assets&#34;&gt;Its most compelling part: turning tacit knowledge into callable assets
&lt;/h2&gt;&lt;p&gt;Many high-value capabilities are hard to write down as SOPs in the first place.&lt;/p&gt;
&lt;p&gt;Why someone consistently judges better than others is often not because they know more explicit rules, but because they have built a tacit filtering system through years of practice:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;which signals deserve attention first&lt;/li&gt;
&lt;li&gt;which noise should be ignored immediately&lt;/li&gt;
&lt;li&gt;which questions should be broken apart&lt;/li&gt;
&lt;li&gt;which questions should be inverted&lt;/li&gt;
&lt;li&gt;which conclusions must wait for more evidence&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This kind of ability is hard to preserve because people cannot always explain it clearly themselves. That is exactly why structured extraction is so valuable. What makes &lt;code&gt;nuwa-skill&lt;/code&gt; appealing is that it is not trying to move around surface knowledge. It is trying to reorganize cognitive habits.&lt;/p&gt;
&lt;h2 id=&#34;where-it-fits-best&#34;&gt;Where it fits best
&lt;/h2&gt;&lt;p&gt;I think this kind of skill is especially useful in a few scenarios.&lt;/p&gt;
&lt;h3 id=&#34;1-multi-perspective-review-before-a-decision&#34;&gt;1. Multi-perspective review before a decision
&lt;/h3&gt;&lt;p&gt;If you already have a plan but worry that you are only thinking along the path you already know, switching into different &amp;ldquo;persona perspectives&amp;rdquo; to review the same issue is more valuable than asking the model to keep expanding your original wording.&lt;/p&gt;
&lt;h3 id=&#34;2-learning-the-judgment-framework-of-a-certain-kind-of-expert&#34;&gt;2. Learning the judgment framework of a certain kind of expert
&lt;/h3&gt;&lt;p&gt;Many people learn from experts by collecting quotes, watching interviews, and copying summaries. In the end, they often only remember a few nice lines. Once a thinking pattern becomes a skill, learning becomes much closer to &amp;ldquo;repeatedly invoking it with real questions&amp;rdquo; rather than &amp;ldquo;making a pile of static notes.&amp;rdquo;&lt;/p&gt;
&lt;h3 id=&#34;3-sharing-an-analytical-style-across-a-team&#34;&gt;3. Sharing an analytical style across a team
&lt;/h3&gt;&lt;p&gt;What teams truly lack is often not just documentation, but a shared answer to &amp;ldquo;how do we usually think when we hit a problem?&amp;rdquo; If this workflow matures further, it could also be used in reverse to preserve the methods of strong internal operators. It is just clear that the project does not want to limit the idea to internal use cases.&lt;/p&gt;
&lt;h2 id=&#34;the-hard-part-of-projects-like-this&#34;&gt;The hard part of projects like this
&lt;/h2&gt;&lt;p&gt;Of course, an attractive direction does not mean the hard problems are already solved.&lt;/p&gt;
&lt;p&gt;The real challenge is never simply installing a skill. It is things like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;whether the sources are reliable enough&lt;/li&gt;
&lt;li&gt;whether the extracted patterns are stable rather than illusions from scattered text&lt;/li&gt;
&lt;li&gt;whether the model is actually using a person&amp;rsquo;s framework or merely repeating common impressions&lt;/li&gt;
&lt;li&gt;whether the boundaries between different personas will blur inside the model&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In other words, the key question is not &amp;ldquo;can it generate something that sounds plausible?&amp;rdquo; It is &amp;ldquo;can the cognitive framework produced by this skill survive reuse across many tasks?&amp;rdquo; If the project keeps going deeper on validation, its credibility will improve a lot.&lt;/p&gt;
&lt;h2 id=&#34;why-it-goes-beyond-a-prompt-template-library&#34;&gt;Why it goes beyond a prompt template library
&lt;/h2&gt;&lt;p&gt;In the past, many projects handled this kind of capability as a prompt template library: one persona, one prompt, and the user copies it into a chat. The problem is that a template library is still basically a static asset. It updates slowly, validation is weak, and it is hard to turn it into a complete production workflow.&lt;/p&gt;
&lt;p&gt;What &lt;code&gt;nuwa-skill&lt;/code&gt; pushes further is that it turns &amp;ldquo;persona distillation&amp;rdquo; from a template problem into a workflow problem.&lt;/p&gt;
&lt;p&gt;Once the center of gravity shifts from &amp;ldquo;write a prompt&amp;rdquo; to &amp;ldquo;systematically generate, validate, and iterate on a persona skill,&amp;rdquo; the whole thing starts to look more like engineering than inspiration. For anyone who wants to use it over the long term, that is the more important shift.&lt;/p&gt;
&lt;h2 id=&#34;closing&#34;&gt;Closing
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;nuwa-skill&lt;/code&gt; is interesting not because it turns AI into a celebrity impression show, but because it pushes &amp;ldquo;how to learn how someone thinks&amp;rdquo; one step closer to something executable, reusable, and iterable.&lt;/p&gt;
&lt;p&gt;If many persona prompts solve &amp;ldquo;how to talk like someone,&amp;rdquo; what this project wants to solve is &amp;ldquo;how to look at problems the way someone does.&amp;rdquo; The former is great for demos. The latter is much closer to a real productivity tool.&lt;/p&gt;
&lt;h2 id=&#34;references&#34;&gt;References
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;GitHub repository: &lt;a class=&#34;link&#34; href=&#34;https://github.com/alchaincyf/nuwa-skill&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/alchaincyf/nuwa-skill&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Project README: &lt;a class=&#34;link&#34; href=&#34;https://github.com/alchaincyf/nuwa-skill/blob/main/README.md&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/alchaincyf/nuwa-skill/blob/main/README.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Skill definition: &lt;a class=&#34;link&#34; href=&#34;https://github.com/alchaincyf/nuwa-skill/blob/main/SKILL.md&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/alchaincyf/nuwa-skill/blob/main/SKILL.md&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Karpathy&#39;s 65-Line CLAUDE.md: Helping AI Coding Avoid Three Common Mistakes</title>
        <link>https://knightli.com/en/2026/04/19/karpathy-claude-md-ai-coding-rules/</link>
        <pubDate>Sun, 19 Apr 2026 18:27:23 +0800</pubDate>
        
        <guid>https://knightli.com/en/2026/04/19/karpathy-claude-md-ai-coding-rules/</guid>
        <description>&lt;p&gt;A GitHub project about AI coding has been getting a lot of attention recently. Its core is not a complex codebase, but a roughly 65-line &lt;code&gt;CLAUDE.md&lt;/code&gt; file. The reason it attracted so many stars is not technical complexity. It is that it captures problems many people repeatedly run into when using AI to write code.&lt;/p&gt;
&lt;p&gt;The background starts with Andrej Karpathy&amp;rsquo;s observations on AI coding. Karpathy is an influential educator and engineer in AI: a Stanford PhD, an early OpenAI contributor, and a former Tesla AI leader responsible for Autopilot&amp;rsquo;s vision system. He has continued to share his views on large models, education, and AI tools, so his comments on changes in programming workflows tend to draw a lot of attention from developers.&lt;/p&gt;
&lt;p&gt;He once said that after using Claude Code for a few weeks, his programming style changed noticeably. Previously it was roughly 80% handwritten code and 20% AI assistance. Now it is closer to 80% code written by AI and 20% edits by himself. He described it as &amp;ldquo;programming in English&amp;rdquo;, telling an LLM what to write through natural language.&lt;/p&gt;
&lt;p&gt;But he also pointed out several recurring problems in AI coding.&lt;/p&gt;
&lt;h2 id=&#34;01-wrong-assumptions&#34;&gt;01 Wrong Assumptions
&lt;/h2&gt;&lt;p&gt;The first problem is that models easily make assumptions on behalf of the user, then keep writing along that path. They do not always manage their own confusion, and they do not always stop to ask questions when the requirement is ambiguous.&lt;/p&gt;
&lt;p&gt;For example, if the user only says &amp;ldquo;add a user export feature&amp;rdquo;, the model might assume it should export all users, output JSON, write to a local file, and skip any confirmation around permissions or fields. Only after the code is done does the user discover that the model&amp;rsquo;s understanding does not match the real scenario.&lt;/p&gt;
&lt;p&gt;A better approach is to list the uncertainties first: should it export all users or filtered results? Should it trigger a browser download or run as a background job? Which fields are needed? How large is the data set? Are there permission constraints? If these questions are not clarified, writing faster only means drifting farther.&lt;/p&gt;
&lt;h2 id=&#34;02-over-complexity&#34;&gt;02 Over-Complexity
&lt;/h2&gt;&lt;p&gt;The second problem is that models often turn simple problems into complex ones. A task that could be handled with one function might receive abstract classes, strategy patterns, factory patterns, configuration layers, and a pile of extension points that may never be needed.&lt;/p&gt;
&lt;p&gt;This kind of code can look engineered, but in practice it increases maintenance cost. AI is especially good at quickly generating large structures, but it does not always judge whether those structures are necessary. The result is that a task solvable in 100 lines becomes inflated into 1,000 lines.&lt;/p&gt;
&lt;p&gt;The test is straightforward: would a senior engineer look at the change and think it is over-designed? If the answer is yes, remove the extra layers and solve the current problem with the least code needed.&lt;/p&gt;
&lt;h2 id=&#34;03-collateral-damage&#34;&gt;03 Collateral Damage
&lt;/h2&gt;&lt;p&gt;The third problem is that models sometimes modify or delete code they do not fully understand. While fixing a small bug, they may casually change comments, reformat nearby code, clean up imports that look unused, or even touch logic unrelated to the current task.&lt;/p&gt;
&lt;p&gt;These &amp;ldquo;drive-by improvements&amp;rdquo; are risky because they expand the change scope and make review harder. The user may only want to fix a validator crash caused by an empty email, but the model may also enhance email validation, add username validation, and rewrite docstrings. In the end, it becomes hard to tell which line changed behavior.&lt;/p&gt;
&lt;p&gt;A safer rule is: only change what must be changed, and only clean up issues caused by your own change. Existing dead code, formatting problems, or historical baggage should not be touched unless the task explicitly asks for it. At most, mention it.&lt;/p&gt;
&lt;h2 id=&#34;04-turning-complaints-into-claudemd&#34;&gt;04 Turning Complaints Into CLAUDE.md
&lt;/h2&gt;&lt;p&gt;After Karpathy&amp;rsquo;s comments spread widely, developer Forrest Cheung did something clever: he organized these complaints into executable behavior rules and put them into a &lt;code&gt;CLAUDE.md&lt;/code&gt; file.&lt;/p&gt;
&lt;p&gt;The project does not contain complicated code. Its key idea is to turn the most failure-prone parts of AI coding into clear working rules. They can be summarized as four principles.&lt;/p&gt;
&lt;p&gt;The first is to think before writing. Do not silently assume. Do not hide confusion. If a requirement has multiple interpretations, list them. If there is a simpler approach, say so. Ask when clarification is needed, and push back when needed.&lt;/p&gt;
&lt;p&gt;The second is to keep things simple. Do not add features that were not requested. Do not abstract one-off code. Do not add unnecessary configuration. Do not write large amounts of defensive code for extremely unlikely scenarios. If 50 lines can solve it, do not write 200.&lt;/p&gt;
&lt;p&gt;The third is to make precise changes. Every changed line should trace directly back to the user&amp;rsquo;s request. Do not improve nearby code as a side quest. Do not refactor something that is not broken. Match the existing project style as much as possible.&lt;/p&gt;
&lt;p&gt;The fourth is goal-driven execution. Do not give the model only a vague instruction. Give it a verifiable success criterion. For example, &amp;ldquo;fix the bug&amp;rdquo; can become &amp;ldquo;write a test that reproduces the bug, then make it pass&amp;rdquo;; &amp;ldquo;add validation&amp;rdquo; can become &amp;ldquo;write invalid-input tests and make them pass&amp;rdquo;. The clearer the success criterion, the easier it is for the model to loop toward completion.&lt;/p&gt;
&lt;h2 id=&#34;05-why-it-took-off&#34;&gt;05 Why It Took Off
&lt;/h2&gt;&lt;p&gt;This project became popular not because the content is mysterious, but because it is close to real development work.&lt;/p&gt;
&lt;p&gt;Many people using AI for coding have seen similar scenes: the model confidently misunderstands the requirement, the code gets more complex as it goes, or it touches places it should not touch. The value of &lt;code&gt;CLAUDE.md&lt;/code&gt; is that it turns those experiences into collaboration rules that can be placed inside a project.&lt;/p&gt;
&lt;p&gt;The entry cost is also low: one file can start making a difference, with no complicated integration. Combined with Karpathy&amp;rsquo;s influence and the project&amp;rsquo;s practical comparison examples, it naturally spread through the Claude Code user base and the broader AI coding community.&lt;/p&gt;
&lt;p&gt;More importantly, these rules are not only for Claude Code. No matter which AI coding tool you use, the underlying issues are similar: the model needs to know when to ask, when to simplify, when to stop, and how to decide that the task is complete.&lt;/p&gt;
&lt;h2 id=&#34;06-what-developers-can-take-away&#34;&gt;06 What Developers Can Take Away
&lt;/h2&gt;&lt;p&gt;The lesson for ordinary developers is simple: AI coding is not about throwing one sentence at a model and waiting for a miracle. The effective approach is to give the model boundaries.&lt;/p&gt;
&lt;p&gt;When the requirement is unclear, ask it to expose its assumptions first. When the implementation starts getting complicated, ask it to return to the smallest viable solution. When changing code, keep it focused on the task goal. When finishing work, use tests, commands, or explicit checkpoints to verify the result.&lt;/p&gt;
&lt;p&gt;AI is already very capable at writing code, but it still needs good collaboration constraints. The fact that a short &lt;code&gt;CLAUDE.md&lt;/code&gt; can attract so much attention shows that developers do not only need smarter models. They also need more reliable ways of working.&lt;/p&gt;
&lt;p&gt;In short:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Think before writing to reduce wrong assumptions.&lt;/li&gt;
&lt;li&gt;Keep things simple to avoid over-design.&lt;/li&gt;
&lt;li&gt;Make precise changes to control change scope.&lt;/li&gt;
&lt;li&gt;Work toward goals with verifiable success criteria.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These four rules are not complicated, but they are practical. The prerequisite for AI coding to truly improve efficiency is not making the model write more. It is making it write more accurately, with less code, and under better control.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>What Is Agent Skills: From Design Principles to Context Optimization</title>
        <link>https://knightli.com/en/2026/03/28/what-is-agent-skills/</link>
        <pubDate>Sat, 28 Mar 2026 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/en/2026/03/28/what-is-agent-skills/</guid>
        <description>&lt;p&gt;Agent Skills is a standardized way to package procedural knowledge. In short, it answers not only &amp;ldquo;whether tools exist&amp;rdquo; but &amp;ldquo;how to use them correctly and effectively.&amp;rdquo;&lt;/p&gt;
&lt;h2 id=&#34;1-core-design-principles&#34;&gt;1. Core Design Principles
&lt;/h2&gt;&lt;p&gt;The core value of Agent Skills is that it captures reusable methodology:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It provides domain knowledge to guide how agents combine and invoke tools in specific scenarios.&lt;/li&gt;
&lt;li&gt;It constrains execution paths, reducing trial-and-error and improving consistency.&lt;/li&gt;
&lt;li&gt;It makes complex workflows reusable and iterative, forming stable SOPs over time.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If tool capability is like a hardware interface, Skills is closer to an operations manual plus best-practice playbook, defining what should be done and how.&lt;/p&gt;
&lt;h2 id=&#34;2-progressive-disclosure-solving-the-context-bottleneck&#34;&gt;2. Progressive Disclosure: Solving the Context Bottleneck
&lt;/h2&gt;&lt;p&gt;The key innovation in Agent Skills is Progressive Disclosure: load information only when needed, instead of pushing everything into the context window at once.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://knightli.com/2026/03/28/%E4%BB%80%E4%B9%88%E6%98%AF-agent-skills/1.png&#34;
	width=&#34;1080&#34;
	height=&#34;589&#34;
	srcset=&#34;https://knightli.com/2026/03/28/%E4%BB%80%E4%B9%88%E6%98%AF-agent-skills/1_hu_3f15e8771443e908.png 480w, https://knightli.com/2026/03/28/%E4%BB%80%E4%B9%88%E6%98%AF-agent-skills/1_hu_74352dc275951faa.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;183&#34;
		data-flex-basis=&#34;440px&#34;
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;21-layer-1-metadata&#34;&gt;2.1 Layer 1: Metadata
&lt;/h3&gt;&lt;p&gt;Each skill is usually stored in its own folder, with &lt;code&gt;SKILL.md&lt;/code&gt; as the core file. This file starts with YAML front matter that defines basic skill information.&lt;/p&gt;
&lt;p&gt;At startup, the agent reads only the front matter of all skills and injects that metadata into the system prompt. In practice:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Metadata for one skill costs about &lt;code&gt;100 tokens&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;50 skills cost about &lt;code&gt;5,000 tokens&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;22-layer-2-instructions&#34;&gt;2.2 Layer 2: Instructions
&lt;/h3&gt;&lt;p&gt;When a skill is judged highly relevant to the current task, the agent then reads the full &lt;code&gt;SKILL.md&lt;/code&gt;, loading detailed instructions, notes, and examples.&lt;/p&gt;
&lt;p&gt;Token usage at this layer depends on instruction complexity, typically:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;1,000&lt;/code&gt; to &lt;code&gt;5,000 tokens&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;23-layer-3-additional-resources-scripts--references&#34;&gt;2.3 Layer 3: Additional Resources (Scripts &amp;amp; References)
&lt;/h3&gt;&lt;p&gt;For more complex skills, &lt;code&gt;SKILL.md&lt;/code&gt; can reference scripts, config files, and docs, which are loaded only when needed.&lt;/p&gt;
&lt;p&gt;Example directory structure:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;skills/pdf-processing/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── SKILL.md                 # Main skill file
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── parse_pdf.py             # PDF parsing script
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── forms.md                 # Form-filling guide (loaded only for form tasks)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└── templates/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ├── invoice.pdf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    └── report.pdf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Typical invocation pattern:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Run &lt;code&gt;parse_pdf.py&lt;/code&gt; when PDF parsing is required&lt;/li&gt;
&lt;li&gt;Load &lt;code&gt;forms.md&lt;/code&gt; only for form-filling tasks&lt;/li&gt;
&lt;li&gt;Access template files only when generating specific output formats&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;3-why-this-design-works&#34;&gt;3. Why This Design Works
&lt;/h2&gt;&lt;h3 id=&#34;31-scalable-knowledge-capacity&#34;&gt;3.1 Scalable Knowledge Capacity
&lt;/h3&gt;&lt;p&gt;With scripts and external files, a skill can carry knowledge far beyond context-window limits.
For example, a data-analysis skill can include a &lt;code&gt;1GB&lt;/code&gt; dataset plus query scripts, and the agent can access data through execution instead of loading the whole dataset into context.&lt;/p&gt;
&lt;h3 id=&#34;32-stronger-determinism&#34;&gt;3.2 Stronger Determinism
&lt;/h3&gt;&lt;p&gt;Delegating complex computation, data transformation, and format parsing to code significantly reduces uncertainty and hallucination risk in pure text generation.&lt;/p&gt;
&lt;h2 id=&#34;4-practical-impact-from-16k-to-500-tokens&#34;&gt;4. Practical Impact: From 16k to 500 Tokens
&lt;/h2&gt;&lt;p&gt;Community practice shows that Progressive Disclosure can drastically reduce initial context overhead:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Traditional MCP approach: directly connect to an MCP server with many tool definitions, around &lt;code&gt;16,000 tokens&lt;/code&gt; at initialization&lt;/li&gt;
&lt;li&gt;With Skills packaging: use a lightweight gateway skill described mainly in front matter, around &lt;code&gt;500 tokens&lt;/code&gt; at initialization&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Detailed instructions and additional resources are loaded only when the task truly requires them. This lowers initial cost and improves context management precision during the conversation.&lt;/p&gt;
&lt;h2 id=&#34;summary&#34;&gt;Summary
&lt;/h2&gt;&lt;p&gt;The key value of Agent Skills is upgrading from &amp;ldquo;tools are available&amp;rdquo; to &amp;ldquo;capabilities are reusable.&amp;rdquo; With Progressive Disclosure, systems can preserve capability depth while significantly optimizing token cost and execution stability.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>How Non-Programmers Can Direct AI to Do the Work: Extracting Diagrams and Math Formulas from an Image (Hands-On Example)</title>
        <link>https://knightli.com/en/2026/03/26/how-non-programmers-can-direct-ai-to-work-extract-diagrams-and-formulas/</link>
        <pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/en/2026/03/26/how-non-programmers-can-direct-ai-to-work-extract-diagrams-and-formulas/</guid>
        <description>&lt;h2 id=&#34;prerequisites&#34;&gt;Prerequisites
&lt;/h2&gt;&lt;p&gt;Install VS Code and the Codex extension. You can refer to &lt;a class=&#34;link&#34; href=&#34;../01/index.md&#34; &gt;this article&lt;/a&gt;.&lt;br&gt;
Using these tools does not require programming experience. In this workflow, VS Code is mainly for organizing files; you describe your goal, and AI writes and runs the code for you.&lt;br&gt;
This post records the full process to spark ideas and help more people discover practical ways to use AI.&lt;/p&gt;
&lt;h2 id=&#34;goal&#34;&gt;Goal
&lt;/h2&gt;&lt;p&gt;Prepare an image that contains both math formulas and illustrative diagrams:
&lt;img src=&#34;https://knightli.com/2026/03/26/%E6%99%AE%E9%80%9A%E4%BA%BA%E5%A6%82%E4%BD%95%E6%8C%87%E6%8C%A5-ai-%E5%B9%B2%E6%B4%BB-%E6%8F%90%E5%8F%96%E5%9B%BE%E5%BD%A2-%E6%8F%90%E5%8F%96%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F/1.png&#34;
	width=&#34;793&#34;
	height=&#34;205&#34;
	srcset=&#34;https://knightli.com/2026/03/26/%E6%99%AE%E9%80%9A%E4%BA%BA%E5%A6%82%E4%BD%95%E6%8C%87%E6%8C%A5-ai-%E5%B9%B2%E6%B4%BB-%E6%8F%90%E5%8F%96%E5%9B%BE%E5%BD%A2-%E6%8F%90%E5%8F%96%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F/1_hu_ca2eeaa88b9a2128.png 480w, https://knightli.com/2026/03/26/%E6%99%AE%E9%80%9A%E4%BA%BA%E5%A6%82%E4%BD%95%E6%8C%87%E6%8C%A5-ai-%E5%B9%B2%E6%B4%BB-%E6%8F%90%E5%8F%96%E5%9B%BE%E5%BD%A2-%E6%8F%90%E5%8F%96%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F/1_hu_966a8a23af7f38d6.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;386&#34;
		data-flex-basis=&#34;928px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;We want to achieve three things:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Split diagrams into clean, separate images.&lt;/li&gt;
&lt;li&gt;Recognize formulas and convert them to LaTeX for easier editing.&lt;/li&gt;
&lt;li&gt;Link each diagram to its corresponding formula.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;process&#34;&gt;Process
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;First, recognize the image, generate a Markdown document, and convert formulas to LaTeX
&lt;img src=&#34;https://knightli.com/2026/03/26/%E6%99%AE%E9%80%9A%E4%BA%BA%E5%A6%82%E4%BD%95%E6%8C%87%E6%8C%A5-ai-%E5%B9%B2%E6%B4%BB-%E6%8F%90%E5%8F%96%E5%9B%BE%E5%BD%A2-%E6%8F%90%E5%8F%96%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F/2-1.png&#34;
	width=&#34;1009&#34;
	height=&#34;1059&#34;
	srcset=&#34;https://knightli.com/2026/03/26/%E6%99%AE%E9%80%9A%E4%BA%BA%E5%A6%82%E4%BD%95%E6%8C%87%E6%8C%A5-ai-%E5%B9%B2%E6%B4%BB-%E6%8F%90%E5%8F%96%E5%9B%BE%E5%BD%A2-%E6%8F%90%E5%8F%96%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F/2-1_hu_682f636c00f5879.png 480w, https://knightli.com/2026/03/26/%E6%99%AE%E9%80%9A%E4%BA%BA%E5%A6%82%E4%BD%95%E6%8C%87%E6%8C%A5-ai-%E5%B9%B2%E6%B4%BB-%E6%8F%90%E5%8F%96%E5%9B%BE%E5%BD%A2-%E6%8F%90%E5%8F%96%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F/2-1_hu_4a9ed5f6454d2b48.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;95&#34;
		data-flex-basis=&#34;228px&#34;
	
&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Conversion result:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;28
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;29
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;30
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;31
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;32
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;33
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;34
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;35
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;36
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;37
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;38
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;39
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;40
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;41
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;42
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;43
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;44
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;45
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;46
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;47
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;48
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;49
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;50
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;51
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;52
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;53
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;54
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;55
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;56
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;57
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;58
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;59
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;60
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;61
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;62
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;63
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;64
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;65
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;66
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;67
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;68
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;69
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;70
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;71
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# 1.png Recognition Result
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;## Geometry Formulas (LaTeX)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;1. Triangle area (side lengths and circumradius):
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;S = \frac{abc}{4R}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2. Triangle area (inradius and semiperimeter):
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;S = pr
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;3. Frustum volume:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;V = \frac{\pi\left(r^2 + Rr + R^2\right)h}{3}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;4. Frustum lateral surface area:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;S = \pi a(R + r)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;5. Cylinder volume:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;V = \pi r^2 h
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;6. Cylinder lateral surface area:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;S = 2\pi rh
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;7. Sphere volume:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;V = \frac{4}{3}\pi R^3
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;8. Sphere surface area:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;S = 4\pi R^2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;9. Law of sines:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;\frac{a}{\sin A}=\frac{b}{\sin B}=\frac{c}{\sin C}=2R
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;10. Law of cosines:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;a^2=b^2+c^2-2bc\cos A
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;b^2=a^2+c^2-2ac\cos B
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;c^2=a^2+b^2-2ab\cos C
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;https://knightli.com/2026/03/26/%E6%99%AE%E9%80%9A%E4%BA%BA%E5%A6%82%E4%BD%95%E6%8C%87%E6%8C%A5-ai-%E5%B9%B2%E6%B4%BB-%E6%8F%90%E5%8F%96%E5%9B%BE%E5%BD%A2-%E6%8F%90%E5%8F%96%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F/2-2.png&#34;
	width=&#34;831&#34;
	height=&#34;1253&#34;
	srcset=&#34;https://knightli.com/2026/03/26/%E6%99%AE%E9%80%9A%E4%BA%BA%E5%A6%82%E4%BD%95%E6%8C%87%E6%8C%A5-ai-%E5%B9%B2%E6%B4%BB-%E6%8F%90%E5%8F%96%E5%9B%BE%E5%BD%A2-%E6%8F%90%E5%8F%96%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F/2-2_hu_ecfd835a086d5e6b.png 480w, https://knightli.com/2026/03/26/%E6%99%AE%E9%80%9A%E4%BA%BA%E5%A6%82%E4%BD%95%E6%8C%87%E6%8C%A5-ai-%E5%B9%B2%E6%B4%BB-%E6%8F%90%E5%8F%96%E5%9B%BE%E5%BD%A2-%E6%8F%90%E5%8F%96%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F/2-2_hu_bdd02e889793f78f.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;66&#34;
		data-flex-basis=&#34;159px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;All formulas were recognized, and AI even added formula names automatically, which is great. However, the small diagram crops were not generated yet.&lt;/p&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Try asking AI to crop the image
&lt;img src=&#34;https://knightli.com/2026/03/26/%E6%99%AE%E9%80%9A%E4%BA%BA%E5%A6%82%E4%BD%95%E6%8C%87%E6%8C%A5-ai-%E5%B9%B2%E6%B4%BB-%E6%8F%90%E5%8F%96%E5%9B%BE%E5%BD%A2-%E6%8F%90%E5%8F%96%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F/3-1.png&#34;
	width=&#34;1368&#34;
	height=&#34;1615&#34;
	srcset=&#34;https://knightli.com/2026/03/26/%E6%99%AE%E9%80%9A%E4%BA%BA%E5%A6%82%E4%BD%95%E6%8C%87%E6%8C%A5-ai-%E5%B9%B2%E6%B4%BB-%E6%8F%90%E5%8F%96%E5%9B%BE%E5%BD%A2-%E6%8F%90%E5%8F%96%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F/3-1_hu_8fcc60d87f237172.png 480w, https://knightli.com/2026/03/26/%E6%99%AE%E9%80%9A%E4%BA%BA%E5%A6%82%E4%BD%95%E6%8C%87%E6%8C%A5-ai-%E5%B9%B2%E6%B4%BB-%E6%8F%90%E5%8F%96%E5%9B%BE%E5%BD%A2-%E6%8F%90%E5%8F%96%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F/3-1_hu_8f5bbfed32d47a1d.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;84&#34;
		data-flex-basis=&#34;203px&#34;
	
&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;28
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;29
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;30
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;31
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;32
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;33
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;34
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;35
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;36
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;37
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;38
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;39
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;40
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;41
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;42
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;43
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;44
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;45
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;46
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;47
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;48
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;49
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;50
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;51
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;52
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;53
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;54
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;55
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;56
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;57
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;58
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;59
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;60
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;61
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;62
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;63
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;64
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;65
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;66
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;67
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;68
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;69
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;70
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;71
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;72
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;73
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;74
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;75
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;76
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;77
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;78
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;79
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;80
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;81
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;82
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;83
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;84
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;85
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;86
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;87
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;88
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# 1.png Recognition Result (side-by-side layout with refined cropping)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;table&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;tr&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;lt;td&amp;gt;![](crops/01_triangle_circum.png)&amp;lt;/td&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;lt;td&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;S = \frac{abc}{4R}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;/td&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;/tr&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;tr&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;lt;td&amp;gt;![](crops/02_triangle_incircle.png)&amp;lt;/td&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;lt;td&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;S = pr
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;/td&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;/tr&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;tr&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;lt;td&amp;gt;![](crops/03_frustum.png)&amp;lt;/td&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;lt;td&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;V = \frac{\pi\left(r^2 + Rr + R^2\right)h}{3}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;S = \pi a(R + r)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;/td&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;/tr&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;tr&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;lt;td&amp;gt;![](crops/04_cylinder.png)&amp;lt;/td&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;lt;td&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;V = \pi r^2 h
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;S = 2\pi rh
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;/td&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;/tr&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;tr&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;lt;td&amp;gt;![](crops/05_sphere.png)&amp;lt;/td&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;lt;td&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;V = \frac{4}{3}\pi R^3
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;S = 4\pi R^2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;/td&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;/tr&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;tr&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;lt;td&amp;gt;![](crops/06_laws.png)&amp;lt;/td&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;lt;td&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;\frac{a}{\sin A}=\frac{b}{\sin B}=\frac{c}{\sin C}=2R
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;a^2=b^2+c^2-2bc\cos A
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;b^2=a^2+c^2-2ac\cos B
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;c^2=a^2+b^2-2ab\cos C
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;/td&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;/tr&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;/table&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Result:
&lt;img src=&#34;https://knightli.com/2026/03/26/%E6%99%AE%E9%80%9A%E4%BA%BA%E5%A6%82%E4%BD%95%E6%8C%87%E6%8C%A5-ai-%E5%B9%B2%E6%B4%BB-%E6%8F%90%E5%8F%96%E5%9B%BE%E5%BD%A2-%E6%8F%90%E5%8F%96%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F/3-2.png&#34;
	width=&#34;810&#34;
	height=&#34;1154&#34;
	srcset=&#34;https://knightli.com/2026/03/26/%E6%99%AE%E9%80%9A%E4%BA%BA%E5%A6%82%E4%BD%95%E6%8C%87%E6%8C%A5-ai-%E5%B9%B2%E6%B4%BB-%E6%8F%90%E5%8F%96%E5%9B%BE%E5%BD%A2-%E6%8F%90%E5%8F%96%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F/3-2_hu_5e27dd3893009a44.png 480w, https://knightli.com/2026/03/26/%E6%99%AE%E9%80%9A%E4%BA%BA%E5%A6%82%E4%BD%95%E6%8C%87%E6%8C%A5-ai-%E5%B9%B2%E6%B4%BB-%E6%8F%90%E5%8F%96%E5%9B%BE%E5%BD%A2-%E6%8F%90%E5%8F%96%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F/3-2_hu_d0ccd10683fc4506.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;70&#34;
		data-flex-basis=&#34;168px&#34;
	
&gt;
The diagrams were cropped and placed in matching positions, but the crops still include noise from nearby areas.&lt;/p&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;Fix over-cropping: keep the full target area first, then manually remove extra parts&lt;br&gt;
The output is still inconsistent at this step. It is not yet clear whether the issue comes from prompting or model variability in visual localization.
&lt;img src=&#34;https://knightli.com/2026/03/26/%E6%99%AE%E9%80%9A%E4%BA%BA%E5%A6%82%E4%BD%95%E6%8C%87%E6%8C%A5-ai-%E5%B9%B2%E6%B4%BB-%E6%8F%90%E5%8F%96%E5%9B%BE%E5%BD%A2-%E6%8F%90%E5%8F%96%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F/4-1.png&#34;
	width=&#34;805&#34;
	height=&#34;1295&#34;
	srcset=&#34;https://knightli.com/2026/03/26/%E6%99%AE%E9%80%9A%E4%BA%BA%E5%A6%82%E4%BD%95%E6%8C%87%E6%8C%A5-ai-%E5%B9%B2%E6%B4%BB-%E6%8F%90%E5%8F%96%E5%9B%BE%E5%BD%A2-%E6%8F%90%E5%8F%96%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F/4-1_hu_90e248256e5d9819.png 480w, https://knightli.com/2026/03/26/%E6%99%AE%E9%80%9A%E4%BA%BA%E5%A6%82%E4%BD%95%E6%8C%87%E6%8C%A5-ai-%E5%B9%B2%E6%B4%BB-%E6%8F%90%E5%8F%96%E5%9B%BE%E5%BD%A2-%E6%8F%90%E5%8F%96%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F/4-1_hu_cccfbcada80166e1.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;62&#34;
		data-flex-basis=&#34;149px&#34;
	
&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;summary&#34;&gt;Summary
&lt;/h2&gt;&lt;p&gt;Using Codex feels different from chatting directly on chatgpt.com.&lt;br&gt;
On chatgpt.com, it often feels like AI is guiding your work; in Codex, it feels more like AI is executing your instructions.&lt;br&gt;
After you describe your requirement, AI can generate code, run it, and complete the task. The feeling is that you are directing AI to do the work.&lt;br&gt;
This process does not require strong programming skills, and non-programmers can still get real results step by step.&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
