<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>AgentScript Blog</title>
        <link>https://rongzhou.github.io/agentscript/zh-Hans/blog</link>
        <description>AgentScript Blog</description>
        <lastBuildDate>Mon, 11 May 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>zh-Hans</language>
        <item>
            <title><![CDATA[别再死磕提示词优化，真正该优化的是上下文]]></title>
            <link>https://rongzhou.github.io/agentscript/zh-Hans/blog/context-not-prompts</link>
            <guid>https://rongzhou.github.io/agentscript/zh-Hans/blog/context-not-prompts</guid>
            <pubDate>Mon, 11 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[本文为 AgentScript 系列第二篇，承接上篇「模型到底看到了什么？」，提出一个核心认知：Agent 开发的核心优化方向，不是打磨提示词话术，而是管控模型可见的上下文信息。]]></description>
            <content:encoded><![CDATA[<p>本文为 AgentScript 系列第二篇，承接上篇「模型到底看到了什么？」，提出一个核心认知：<strong>Agent 开发的核心优化方向，不是打磨提示词话术，而是管控模型可见的上下文信息</strong>。</p>
<p>提示词优化，是提示词工程之后最顺理成章的进阶方向。
既然手写提示词脆弱、不稳定，那就交给优化器自动迭代：调整指令措辞、挑选示例、基于数据与指标编译出更优质的提示词。</p>
<p>这个思路本身合理，也诞生了不少实用工具。最典型的代表就是 DSPy，它将自身定位为<strong>面向大模型的编程框架</strong>，而非简单的提示词工具；内置优化器可以根据自定义指标，自动调优程序内的提示词甚至模型权重。</p>
<p>但对绝大多数智能体（Agent）而言，<strong>提示词优化并不是优先级最高的优化目标</strong>。</p>
<p>问题不在于提示词不重要。
而是：<strong>提示词往往不该是最先优化的部分</strong>。</p>
<p>一个 Agent 的完整提示词，从来不是单纯的一句指令，而是多部分混合而成：</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">完整提示词 = 系统指令 + 角色设定 + 上下文数据 + 示例 + 用户指令</span><br></div></code></pre></div></div>
<p>常规的提示词优化，大多只聚焦指令相关部分：措辞润色、示例选择、任务话术调整、Few‑Shot 样例设计。
可实际上，<strong>Agent 的行为表现，更多由上下文数据决定</strong>：检索文档、工具返回结果、记忆记录、中间状态、历史输出、摘要引用、其他智能体的返回内容。</p>
<p>只要模型能看到正确的证据，哪怕指令平平无奇，也能给出不错的结果；
反之，如果模型获取的信息本身有误，再精妙的指令，只会让错误答案看起来更通顺、更像真的。</p>
<p>本文要讲的，就是另一个更关键的优化目标：</p>
<blockquote>
<p>不要只优化你对模型说了什么，更要优化<strong>模型能看到什么</strong>。</p>
</blockquote>
<p align="center"><img src="https://rongzhou.github.io/agentscript/img/selectable-context.png" alt="可选择的 context slot 让 context optimization 成为源码层面的决策" width="900"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="提示词不是智能体的最小单元">提示词，不是智能体的最小单元<a href="https://rongzhou.github.io/agentscript/zh-Hans/blog/context-not-prompts#%E6%8F%90%E7%A4%BA%E8%AF%8D%E4%B8%8D%E6%98%AF%E6%99%BA%E8%83%BD%E4%BD%93%E7%9A%84%E6%9C%80%E5%B0%8F%E5%8D%95%E5%85%83" class="hash-link" aria-label="提示词，不是智能体的最小单元的直接链接" title="提示词，不是智能体的最小单元的直接链接" translate="no">​</a></h2>
<p>单次大模型调用中，提示词似乎是天然的优化单元。
我们写指令、给示例、测试输出、微调话术，一套流程非常直观。</p>
<p>但这套思维，放到 Agent 多轮执行场景里就彻底失效了。
Agent 不止有一个固定提示词，它拥有<strong>不断变化的上下文边界</strong>。</p>
<p>一个科研类智能体，上下文通常包含：</p>
<ul>
<li class="">用户原始问题</li>
<li class="">检索关键词</li>
<li class="">搜索结果</li>
<li class="">召回文档</li>
<li class="">文档摘要</li>
<li class="">历史运行记忆</li>
<li class="">中间观测信息</li>
<li class="">失败尝试记录</li>
<li class="">工具调用异常</li>
<li class="">辅助智能体的输出</li>
<li class="">最终答案格式约束</li>
</ul>
<p>这些信息里，一部分需要传入下一轮模型调用，另一部分则必须过滤。</p>
<p>Agent 出问题，很少是因为：</p>
<blockquote>
<p>指令描述不够清晰。</p>
</blockquote>
<p>更多是因为这三类问题：</p>
<blockquote>
<p>模型看到了错误的上下文。</p>
<p>正确的上下文存在于程序中，却没有传入提示词。</p>
<p>上下文传入了，但格式、粒度不对。</p>
</blockquote>
<p>工具返回内容过长、记忆查询到过时信息、摘要丢失关键引用、规划步骤需要精简摘要而回答步骤需要完整原文……
这些本质都不是话术问题，而是<strong>上下文选择问题</strong>。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="提示词文本一个极难优化的软变量">提示词文本：一个极难优化的软变量<a href="https://rongzhou.github.io/agentscript/zh-Hans/blog/context-not-prompts#%E6%8F%90%E7%A4%BA%E8%AF%8D%E6%96%87%E6%9C%AC%E4%B8%80%E4%B8%AA%E6%9E%81%E9%9A%BE%E4%BC%98%E5%8C%96%E7%9A%84%E8%BD%AF%E5%8F%98%E9%87%8F" class="hash-link" aria-label="提示词文本：一个极难优化的软变量的直接链接" title="提示词文本：一个极难优化的软变量的直接链接" translate="no">​</a></h2>
<p>提示词优化听起来很美好：用算法替代人工反复调试。
以 DSPy 的 MIPROv2 为例，它可以联合优化指令与 Few‑Shot 示例，基于下游任务指标，在无梯度、无模块标签的前提下，优化多阶段模型程序。
这是非常扎实且有价值的研究方向。</p>
<p>但它优化的对象，本质上是<strong>软性变量</strong>。
提示词文本存在这些天然缺陷：</p>
<ul>
<li class="">维度极高、自由文本无约束</li>
<li class="">高度依赖特定模型特性</li>
<li class="">约束困难、语义难以量化对比</li>
<li class="">极易过拟合</li>
<li class="">效果好时难以解释，效果差时难以排查</li>
</ul>
<p>对比两次提示词的修改，只能看到文字变化，却很难解释系统为什么变得更稳定：
是指令本身真的更好？
还是某句话刚好契合当前模型的行为偏好？
还是示例刚好贴合验证集？
还是优化器找到了一个会随模型迭代失效的小技巧？
还是下游评估指标本身不完善？</p>
<p>这些问题不是否定提示词优化的价值，而是说明：<strong>自由文本形式的提示词，是一个非常难优化的目标</strong>。
它太贴近模型本身的黑盒行为，却远离了 Agent 内部真实的数据流问题。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="上下文才是更优质的优化目标">上下文，才是更优质的优化目标<a href="https://rongzhou.github.io/agentscript/zh-Hans/blog/context-not-prompts#%E4%B8%8A%E4%B8%8B%E6%96%87%E6%89%8D%E6%98%AF%E6%9B%B4%E4%BC%98%E8%B4%A8%E7%9A%84%E4%BC%98%E5%8C%96%E7%9B%AE%E6%A0%87" class="hash-link" aria-label="上下文，才是更优质的优化目标的直接链接" title="上下文，才是更优质的优化目标的直接链接" translate="no">​</a></h2>
<p>上下文和提示词完全不同。
上下文的核心不是一句话，而是<strong>一系列结构化决策</strong>：</p>
<p>模型该看原始工具结果，还是精简摘要？
该看前3条文档，还是前10条？
该读取近期记忆、长期经验，还是完全不使用记忆？
该保留带引用的原文片段，还是压缩后的观测总结？
最终回答步骤需要完整证据，规划步骤是否只需要极简摘要？</p>
<p>这些都是清晰、可枚举的结构化选择：</p>
<ul>
<li class="">不使用上下文</li>
<li class="">精简摘要</li>
<li class="">常规总结</li>
<li class="">高相关文档</li>
<li class="">带引用的原文片段</li>
<li class="">记忆+文档组合</li>
</ul>
<p>同时它也更容易排查、追踪：</p>
<ul>
<li class="">本次运行用了前5条文档，token上限4k</li>
<li class="">本次运行用了精简摘要，上限500token</li>
<li class="">本次运行完全禁用记忆</li>
</ul>
<p>上下文优化的结果，<strong>跨模型兼容性更强</strong>。
不同模型对话术敏感度差异巨大，但“是否使用召回文档”这个决策，几乎不受模型版本影响。GPT、Claude、Gemini、Qwen 等，无论风格差异多大，都依赖正确的信息输入。</p>
<p>上下文优化同样可能过拟合，在一类场景有效、另一类场景失效。
但它的优势在于：<strong>出问题时可观测、可定位</strong>。
你能清晰看到选了哪些信息、过滤了哪些信息、模型是否获取了关键证据。你修改的是结构化决策，而非模糊的话术。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="从提示词工程走向上下文工程">从提示词工程，走向上下文工程<a href="https://rongzhou.github.io/agentscript/zh-Hans/blog/context-not-prompts#%E4%BB%8E%E6%8F%90%E7%A4%BA%E8%AF%8D%E5%B7%A5%E7%A8%8B%E8%B5%B0%E5%90%91%E4%B8%8A%E4%B8%8B%E6%96%87%E5%B7%A5%E7%A8%8B" class="hash-link" aria-label="从提示词工程，走向上下文工程的直接链接" title="从提示词工程，走向上下文工程的直接链接" translate="no">​</a></h2>
<p>提示词工程关心的是：</p>
<blockquote>
<p>我该对模型说什么？</p>
</blockquote>
<p>上下文工程关心的是：</p>
<blockquote>
<p>模型该看到什么？</p>
</blockquote>
<p>这个转变至关重要。</p>
<p>在常规 Python / TypeScript 编写的 Agent 中，上下文通常以字符串、消息数组、框架对象、模板的形式存在。本地数据与提示词的边界，全靠开发者的编码习惯维持。</p>
<p>而 AgentScript 从一开始就定下更严格的规则：</p>
<blockquote>
<p>本地数据，默认不是提示词上下文。</p>
</blockquote>
<p>工具返回、记忆查询结果、中间观测、执行日志、其他智能体输出，<strong>不会自动混入提示词</strong>。
如果需要让模型读取某份数据，必须通过 <code>use</code> 显式声明。</p>
<div class="language-agentscript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-agentscript codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">use input.question as "用户问题"</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">use docs.summary max 4k as "参考证据"</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">use past max 2k as "过往经验"</span><br></div></code></pre></div></div>
<p>这是第一步：让上下文变得<strong>可见、可控</strong>。
一条 <code>use</code> 语句直接定义：数据来源、分类标签、token上限，它不再是一段模板字符串，而是一份<strong>上下文契约</strong>。</p>
<p>自然而然就走到了下一步：
既然上下文可以显式定义，那上下文的备选方案，同样可以显式定义。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="use-one-of把上下文搜索空间写进代码">use one of：把上下文搜索空间写进代码<a href="https://rongzhou.github.io/agentscript/zh-Hans/blog/context-not-prompts#use-one-of%E6%8A%8A%E4%B8%8A%E4%B8%8B%E6%96%87%E6%90%9C%E7%B4%A2%E7%A9%BA%E9%97%B4%E5%86%99%E8%BF%9B%E4%BB%A3%E7%A0%81" class="hash-link" aria-label="use one of：把上下文搜索空间写进代码的直接链接" title="use one of：把上下文搜索空间写进代码的直接链接" translate="no">​</a></h2>
<p>AgentScript 用语法直接表达上下文的多种可选方案：</p>
<div class="language-agentscript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-agentscript codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">use one of {</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    none:     empty</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    compact:  scratch.digest max 500</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    verbose:  scratch.summary max 4k</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    grounded: docs.top5 max 4k selected</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">} as "参考证据"</span><br></div></code></pre></div></div>
<p>含义非常直白：</p>
<ul>
<li class="">存在一个名为「参考证据」的上下文模块</li>
<li class="">可以选择完全不使用</li>
<li class="">可以使用极简摘要</li>
<li class="">可以使用常规总结</li>
<li class="">可以使用带原文的高相关文档</li>
<li class="">当前生效的方案是「带原文文档」</li>
</ul>
<p>这里没有运行时魔法，没有隐藏的自动优化器，没有后台学习状态。
只是<strong>声明可选的上下文来源 + 标记当前最优选择</strong>。
<code>use one of</code> 定义搜索空间，<code>selected</code> 标记当前启用方案，<code>empty</code> 代表完全不启用。</p>
<p>模型不会看到备选列表，只会读取被选中的上下文内容。
如果选中原文文档，提示词就加载对应内容；
如果选中 none，该模块直接不出现。
全程可审计、运行时逻辑极简。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="为什么不启用也要纳入统一机制">为什么“不启用”也要纳入统一机制<a href="https://rongzhou.github.io/agentscript/zh-Hans/blog/context-not-prompts#%E4%B8%BA%E4%BB%80%E4%B9%88%E4%B8%8D%E5%90%AF%E7%94%A8%E4%B9%9F%E8%A6%81%E7%BA%B3%E5%85%A5%E7%BB%9F%E4%B8%80%E6%9C%BA%E5%88%B6" class="hash-link" aria-label="为什么“不启用”也要纳入统一机制的直接链接" title="为什么“不启用”也要纳入统一机制的直接链接" translate="no">​</a></h2>
<p>很多人会想：给可选上下文单独设计语法不就行了？
比如：</p>
<div class="language-agentscript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-agentscript codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">use? docs.top5 max 4k as "参考证据"</span><br></div></code></pre></div></div>
<p>但这会让上下文可选性，变成另一套独立语法，增加语言复杂度。
更简洁的设计，是把「不启用」也作为一种备选方案：</p>
<div class="language-agentscript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-agentscript codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">use one of {</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    none: empty</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    docs: docs.top5 max 4k</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">} as "参考证据"</span><br></div></code></pre></div></div>
<p>可读性更强，优化也更简单。
搜索空间一目了然：参考证据 =（不启用，文档）。
默认规则同样清晰：写在最前的方案为默认方案。
无需额外语法，<strong>上下文的有无，本身就是一种决策</strong>。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="selected优化结果直接固化在源码中">selected：优化结果直接固化在源码中<a href="https://rongzhou.github.io/agentscript/zh-Hans/blog/context-not-prompts#selected%E4%BC%98%E5%8C%96%E7%BB%93%E6%9E%9C%E7%9B%B4%E6%8E%A5%E5%9B%BA%E5%8C%96%E5%9C%A8%E6%BA%90%E7%A0%81%E4%B8%AD" class="hash-link" aria-label="selected：优化结果直接固化在源码中的直接链接" title="selected：优化结果直接固化在源码中的直接链接" translate="no">​</a></h2>
<p>这套设计最关键的一点：<strong>优化结果直接写在源代码里</strong>。
不会藏在数据库、运行时配置、后台优化器状态中，而是和其他备选方案写在一起。</p>
<div class="language-agentscript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-agentscript codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">use one of {</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    none:     empty</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    compact:  scratch.digest max 500</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    verbose:  scratch.summary max 4k</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    grounded: docs.top5 max 4k selected</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">} as "参考证据"</span><br></div></code></pre></div></div>
<p>程序自解释、可人工审查、可工具解析、可日志溯源。
版本控制的 diff 可以清晰展示变化：</p>
<div class="language-diff codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-diff codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token plain"> use one of {</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">     none:     empty</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">     compact:  scratch.digest max 500</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">-    verbose:  scratch.summary max 4k selected</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">-    grounded: docs.top5 max 4k</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">+    verbose:  scratch.summary max 4k</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">+    grounded: docs.top5 max 4k selected</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"> } as "参考证据"</span><br></div></code></pre></div></div>
<p>这和传统提示词优化完全不同。
传统优化输出的是一段新话术；
上下文优化输出的，是<strong>一次明确的工程决策</strong>。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="优化模式源码到源码的特化">优化模式：源码到源码的特化<a href="https://rongzhou.github.io/agentscript/zh-Hans/blog/context-not-prompts#%E4%BC%98%E5%8C%96%E6%A8%A1%E5%BC%8F%E6%BA%90%E7%A0%81%E5%88%B0%E6%BA%90%E7%A0%81%E7%9A%84%E7%89%B9%E5%8C%96" class="hash-link" aria-label="优化模式：源码到源码的特化的直接链接" title="优化模式：源码到源码的特化的直接链接" translate="no">​</a></h2>
<p>AgentScript 最干净的优化模型，就是<strong>源码到源码的特化</strong>。
优化器不需要修改运行时、注入隐藏状态、改写提示词文本，只做一件简单的事：</p>
<ol>
<li class="">读取 AgentScript 源码</li>
<li class="">找到所有 <code>use one of</code> 位置</li>
<li class="">评估每一种备选方案效果</li>
<li class="">移动 <code>selected</code> 标记</li>
<li class="">输出新的 AgentScript 源码</li>
</ol>
<p>输入是 AgentScript，输出还是 AgentScript，运行时完全保持不变。</p>
<p>分两种可用形式：</p>
<ul>
<li class="">开发版：保留全部备选方案，方便后续迭代、审计、再优化</li>
</ul>
<div class="language-agentscript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-agentscript codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">use one of {</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    none:     empty</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    compact:  scratch.digest max 500</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    verbose:  scratch.summary max 4k</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    grounded: docs.top5 max 4k selected</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">} as "参考证据"</span><br></div></code></pre></div></div>
<ul>
<li class="">生产版：直接固化为最优方案，精简代码</li>
</ul>
<div class="language-agentscript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-agentscript codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">use docs.top5 max 4k as "参考证据"</span><br></div></code></pre></div></div>
<p>如果最优方案是不启用，则直接删除该模块。</p>
<p>两种形式都通俗易懂，不需要复杂的运行时学习机制。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="运行时应当保持简单纯粹">运行时应当保持简单纯粹<a href="https://rongzhou.github.io/agentscript/zh-Hans/blog/context-not-prompts#%E8%BF%90%E8%A1%8C%E6%97%B6%E5%BA%94%E5%BD%93%E4%BF%9D%E6%8C%81%E7%AE%80%E5%8D%95%E7%BA%AF%E7%B2%B9" class="hash-link" aria-label="运行时应当保持简单纯粹的直接链接" title="运行时应当保持简单纯粹的直接链接" translate="no">​</a></h2>
<p>这是整个语言设计的核心约束：<strong>运行时不隐藏任何学习逻辑</strong>。
执行时，<code>use one of</code> 只会解析为其中一种确定方案，规则完全确定：</p>
<ul>
<li class="">标记了 <code>selected</code> → 启用该方案</li>
<li class="">无标记 → 启用第一个方案</li>
</ul>
<p>被选中的方案，行为和普通 <code>use</code> 完全一致。
选中原文文档，等价于直接写 <code>use docs.top5...</code>；
选中不启用，等价于没有这段上下文。</p>
<p>没有动态改写提示词、没有后台配置覆盖、没有自适应状态、没有运行时自修改。
日志完全真实可信：日志显示模型读取了什么，源码里就对应什么选择。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="为什么比提示词优化更可审计">为什么比提示词优化更可审计<a href="https://rongzhou.github.io/agentscript/zh-Hans/blog/context-not-prompts#%E4%B8%BA%E4%BB%80%E4%B9%88%E6%AF%94%E6%8F%90%E7%A4%BA%E8%AF%8D%E4%BC%98%E5%8C%96%E6%9B%B4%E5%8F%AF%E5%AE%A1%E8%AE%A1" class="hash-link" aria-label="为什么比提示词优化更可审计的直接链接" title="为什么比提示词优化更可审计的直接链接" translate="no">​</a></h2>
<p>提示词优化的产物，本质还是一段文本：</p>
<blockquote>
<p>你是严谨精准的助手，请基于上下文回答……</p>
</blockquote>
<p>优化后话术再漂亮，也是一段难以审查的内容。
审阅者只能看到文字改动，却很难判断行为变化、跨模型稳定性。</p>
<p>而上下文优化的 diff，直白清晰：</p>
<div class="language-diff codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-diff codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">-    verbose:  scratch.summary max 4k selected</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">+    grounded: docs.top5 max 4k selected</span><br></div></code></pre></div></div>
<p>翻译成人话：<strong>模型现在读取原文文档，而非摘要</strong>。</p>
<p>再比如：</p>
<div class="language-diff codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-diff codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">-    lessons: Lessons.relevant(input.question) max 1k selected</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">+    none: empty selected</span><br></div></code></pre></div></div>
<p>含义：<strong>本轮不再给模型提供记忆信息</strong>。</p>
<p>这些都是明确的工程决策：可审查、可追踪、可测试、可回滚。
讨论时不用纠结某句话术是否玄学，只需要讨论信息选择是否合理。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="上下文优化同样需要评估">上下文优化同样需要评估<a href="https://rongzhou.github.io/agentscript/zh-Hans/blog/context-not-prompts#%E4%B8%8A%E4%B8%8B%E6%96%87%E4%BC%98%E5%8C%96%E5%90%8C%E6%A0%B7%E9%9C%80%E8%A6%81%E8%AF%84%E4%BC%B0" class="hash-link" aria-label="上下文优化同样需要评估的直接链接" title="上下文优化同样需要评估的直接链接" translate="no">​</a></h2>
<p>这套方案，不代表可以跳过评估环节。
优化器依旧需要评估信号：测试用例、验证输出、用户反馈、下游任务效果、人工评审。</p>
<p>上下文优化同样会过拟合：某套记忆策略在一类任务有效，另一类任务会造成信息污染；更多参考信息能提升真实性，但会增加延迟与成本。</p>
<p>核心区别不在于上下文优化绝对正确，而在于：<strong>优化变量全部可见</strong>。
出问题时，直接定位上下文选择；效果提升时，能清晰解释背后原因。</p>
<p>Agent 不是单次模型调用，而是完整程序。程序需要可审查的状态、明确的边界、可理解的变更，这正是上下文优化的优势。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="对-agentscript-的意义">对 AgentScript 的意义<a href="https://rongzhou.github.io/agentscript/zh-Hans/blog/context-not-prompts#%E5%AF%B9-agentscript-%E7%9A%84%E6%84%8F%E4%B9%89" class="hash-link" aria-label="对 AgentScript 的意义的直接链接" title="对 AgentScript 的意义的直接链接" translate="no">​</a></h2>
<p>AgentScript 的第一个核心理念：</p>
<blockquote>
<p>智能体上下文，应当由代码定义。
这由 <code>use</code> 实现。</p>
</blockquote>
<p>第二个核心理念：</p>
<blockquote>
<p>上下文的全部可选空间，也应当由代码定义。
这由 <code>use one of</code> 实现。</p>
</blockquote>
<p>这是从上下文工程，走向上下文优化的桥梁。
语言本身不需要做自适应话术、优化角色描述、动态修改控制流，只需要维持极简的核心模型：</p>
<ul>
<li class=""><code>use</code>：声明模型可见信息</li>
<li class=""><code>generate</code>：声明模型调用位置与输出约束</li>
<li class=""><code>one of</code>：声明上下文备选方案</li>
<li class=""><code>selected</code>：标记当前最优选择</li>
<li class=""><code>empty</code>：声明刻意不启用某类上下文</li>
</ul>
<p>靠这几个基础原语，就能实现可审计、可迭代的上下文优化，同时不把复杂逻辑藏进运行时。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="真正的问题">真正的问题<a href="https://rongzhou.github.io/agentscript/zh-Hans/blog/context-not-prompts#%E7%9C%9F%E6%AD%A3%E7%9A%84%E9%97%AE%E9%A2%98" class="hash-link" aria-label="真正的问题的直接链接" title="真正的问题的直接链接" translate="no">​</a></h2>
<p>传统提示词工程问：</p>
<blockquote>
<p>我该对模型说什么？</p>
</blockquote>
<p>AgentScript 最初解决的问题：</p>
<blockquote>
<p>模型到底看到了什么？</p>
</blockquote>
<p>上下文优化新增的问题：</p>
<blockquote>
<p>模型本可以看到哪些信息，我们为什么选择这一种？</p>
</blockquote>
<p>这就是提示词优化和上下文优化的本质区别：
提示词优化，是在语言层面搜索；
上下文优化，是在证据、记忆、摘要、工具结果、token上限、信息取舍层面搜索。</p>
<p>对智能体而言，后者往往重要得多。
不是提示词不重要，而是在真实 Agent 程序中，模型输出的上限，很少由话术优美度决定，更多由输入信息的质量决定。</p>
<p>可靠的智能体，不止需要更好的提示词，更需要<strong>显式、有作用域、可审计、可优化的上下文选择</strong>。
这正是 AgentScript 正在探索的方向：</p>
<blockquote>
<p>上下文即代码，上下文可选空间即代码，优化结果即代码。</p>
</blockquote>]]></content:encoded>
            <category>agentscript</category>
            <category>context-optimization</category>
            <category>llm-agents</category>
        </item>
        <item>
            <title><![CDATA[模型到底看到了什么？]]></title>
            <link>https://rongzhou.github.io/agentscript/zh-Hans/blog/introducing-agentscript</link>
            <guid>https://rongzhou.github.io/agentscript/zh-Hans/blog/introducing-agentscript</guid>
            <pubDate>Fri, 01 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[本文介绍 AgentScript，一门用于构建显式、有作用域、可审计LLM 上下文的小型领域专用语言。]]></description>
            <content:encoded><![CDATA[<p>本文介绍 AgentScript，一门用于构建<strong>显式、有作用域、可审计</strong>LLM 上下文的小型领域专用语言。</p>
<p>我们这一代很多程序员，最初接触编程时都遵循一套简单模型：<strong>输入、处理、输出</strong>。</p>
<p>程序接收数据、处理数据、产出结果。这套模型虽然古老，但十分好用，它让程序的边界清晰可见，逻辑易于理解。</p>
<p>而 LLM 智能体（Agent）彻底打破了这套传统范式。</p>
<p>智能体的输入不再只是文件、接口请求、结构化记录，而是复杂的提示词上下文：用户意图、工具返回结果、检索文档、记忆记录、中间状态、重试日志、其他智能体的输出……</p>
<p>输出也不再是简单的返回值，而是一段生成文本或 JSON，必须满足约定格式，才能被后续流程信任与复用。</p>
<p>绝大多数 Agent 项目失败，<strong>不是因为调用大模型太难，而是没人能确切知道：模型生成结果前，到底看到了哪些信息。</strong></p>
<p>经过多轮迭代后，Agent 会积累大量局部变量、工具返回、记忆数据、中间观测结果、重试消息、其他智能体输出。一部分数据需要传入下一次模型调用，另一部分则应当隔离。
在绝大多数 Python、TypeScript 实现的 Agent 中，上下文边界全靠开发者的编码习惯维护。</p>
<p>这套方式在小型 Demo 中尚可，但放到真实业务流程里，会变得极度脆弱。</p>
<p align="center"><img src="https://rongzhou.github.io/agentscript/img/context-boundaries.png" alt="传统追加式 chat 与 AgentScript scoped context boundaries 的对比" width="900"></p>
<p>模型到底看到了什么？
哪条工具结果被加入提示词，哪些只是本地临时数据？
记忆是否被截断？
其他智能体的输出，是作为参考证据，还是混入了历史对话？
模型必须输出什么格式，才能进入下一步流转？</p>
<p>AgentScript 的诞生，就是为了让这些问题<strong>直接能从代码里找到答案</strong>。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="agentscript-是什么">AgentScript 是什么<a href="https://rongzhou.github.io/agentscript/zh-Hans/blog/introducing-agentscript#agentscript-%E6%98%AF%E4%BB%80%E4%B9%88" class="hash-link" aria-label="AgentScript 是什么的直接链接" title="AgentScript 是什么的直接链接" translate="no">​</a></h2>
<p>AgentScript 是一门面向 LLM 智能体的小型编程语言，核心目标是让<strong>提示词上下文具备显式定义、作用域隔离、类型约束、可追踪、可审计</strong>的能力。</p>
<p>它主要面向开发者构建多步骤智能体场景，严格管控工具输出、记忆、中间状态与生成内容。</p>
<p>它<strong>不是</strong>提示词模板，不是 YAML 配置，也不是通用 Agent 框架。</p>
<p>它的核心理念一句话概括：</p>
<blockquote>
<p><strong>智能体上下文，应当由代码显式定义。</strong></p>
</blockquote>
<p>语言最核心的两个关键字：<code>use</code> 和 <code>generate</code>。</p>
<div class="language-agentscript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-agentscript codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">use content max 8k as "文件内容"</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">generate({</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    input: "为忙碌的同事总结这份文件",</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    max_output: 1000</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">}) -&gt; {</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    title</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    summary</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    key_points: list[string]</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    action_items: list[string]</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">}</span><br></div></code></pre></div></div>
<p><code>use</code> 声明<strong>哪些数据可以被模型看到</strong>；
<code>generate</code> 定义<strong>调用大模型的唯一入口</strong>，同时约束输出结构。</p>
<p>在传统输入-处理-输出视角下，AgentScript 直接聚焦 LLM 程序最不稳定的两个边界：<strong>提示词输入、生成结果输出</strong>。</p>
<p>这门语言真正的价值，不是封装了大模型调用，而是<strong>把提示词边界直接暴露在代码层面，一目了然</strong>。
语言其余能力：变量、函数、智能体、导入、循环、工具、记忆、执行追踪，全部都是为了支撑这套上下文管控逻辑。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="为什么不直接用-python--typescript">为什么不直接用 Python / TypeScript？<a href="https://rongzhou.github.io/agentscript/zh-Hans/blog/introducing-agentscript#%E4%B8%BA%E4%BB%80%E4%B9%88%E4%B8%8D%E7%9B%B4%E6%8E%A5%E7%94%A8-python--typescript" class="hash-link" aria-label="为什么不直接用 Python / TypeScript�？的直接链接" title="为什么不直接用 Python / TypeScript？的直接链接" translate="no">​</a></h2>
<p>Python、TypeScript 都是优秀的通用编程语言，AgentScript 并非要替代它们。</p>
<p>问题在于：<strong>通用语言没有原生的“提示词上下文”概念</strong>。
上下文往往以字符串、数组、对象、模板、框架调用、消息列表的形式零散存在。代码逻辑没问题，但上下文意图散落在各处：</p>
<div class="language-ts codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-ts codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> messages </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">system</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">"你是一名审阅者"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">user</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token template-string template-punctuation string" style="color:rgb(195, 232, 141)">`</span><span class="token template-string string" style="color:rgb(195, 232, 141)">问题：</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">${</span><span class="token template-string interpolation">input</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token template-string interpolation property-access">question</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token template-string template-punctuation string" style="color:rgb(195, 232, 141)">`</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">user</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token template-string template-punctuation string" style="color:rgb(195, 232, 141)">`</span><span class="token template-string string" style="color:rgb(195, 232, 141)">搜索结果：</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">${</span><span class="token template-string interpolation known-class-name class-name" style="color:rgb(255, 203, 107)">JSON</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token template-string interpolation method function property-access" style="color:rgb(130, 170, 255)">stringify</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token template-string interpolation">results</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token template-string template-punctuation string" style="color:rgb(195, 232, 141)">`</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">user</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token template-string template-punctuation string" style="color:rgb(195, 232, 141)">`</span><span class="token template-string string" style="color:rgb(195, 232, 141)">历史记忆：</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">${</span><span class="token template-string interpolation">memory</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token template-string interpolation method function property-access" style="color:rgb(130, 170, 255)">map</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token template-string interpolation">item</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token template-string interpolation"> </span><span class="token template-string interpolation arrow operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token template-string interpolation"> item</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token template-string interpolation property-access">text</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token template-string interpolation method function property-access" style="color:rgb(130, 170, 255)">join</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token template-string interpolation string" style="color:rgb(195, 232, 141)">"\n"</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token template-string template-punctuation string" style="color:rgb(195, 232, 141)">`</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> answer </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="font-style:italic">await</span><span class="token plain"> model</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">generate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">messages</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<p><code>results</code> 里哪些字段被传入？是否混入了原始工具输出？记忆是否被截断？其他智能体输出是否被作为历史对话？返回结果需要满足什么格式？
这些问题，在通用语言里<strong>完全无法显性约束</strong>。</p>
<p>而 AgentScript 将上下文选择作为一等公民操作：</p>
<div class="language-agentscript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-agentscript codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">use input.question as "用户问题"</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">use results.summary max 4k as "搜索结果"</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">use past max 2k as "过往经验"</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">generate({</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    input: "仅使用选中的上下文回答",</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    max_output: 800,</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    strict: true</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">}) -&gt; {</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    answer</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    citations: list[string]</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">}</span><br></div></code></pre></div></div>
<p>局部变量、工具结果、记忆查询结果、执行追踪，<strong>不会自动进入提示词</strong>。
只要数据需要被模型看见，就必须通过 <code>use</code> 显式声明。</p>
<p>就这一条规则，彻底改变了智能体的开发方式：提示词不再是字符串拼接的副作用，而是一套有作用域、可契约化的约束。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="极简示例本地文件总结智能体">极简示例：本地文件总结智能体<a href="https://rongzhou.github.io/agentscript/zh-Hans/blog/introducing-agentscript#%E6%9E%81%E7%AE%80%E7%A4%BA%E4%BE%8B%E6%9C%AC%E5%9C%B0%E6%96%87%E4%BB%B6%E6%80%BB%E7%BB%93%E6%99%BA%E8%83%BD%E4%BD%93" class="hash-link" aria-label="极简示例：本地文件总结智能体的直接链接" title="极简示例：本地文件总结智能体的直接链接" translate="no">​</a></h2>
<p>下面是一个完整的文件总结 AgentScript 程序：</p>
<div class="language-agentscript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-agentscript codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">import llm Qwen from "ollama://localhost:11434/qwen3.6"</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">import tool File from "file://workspace"</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">main agent FileSummarizer {</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    model Qwen</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    role "技术文档撰写人"</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    description "读取本地文件，生成结构化摘要。"</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    main func(input { path: string }) {</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        content = File.read({</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">            path: input.path</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        })</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        use input.path as "文件路径"</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        use content max 8k as "文件内容"</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        generate({</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">            input: "为忙碌的同事总结这份文件",</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">            max_output: 1000</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        }) -&gt; {</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">            title</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">            summary</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">            key_points: list[string]</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">            action_items: list[string]</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        }</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    }</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">}</span><br></div></code></pre></div></div>
<p>文件工具可以读取工作目录，但工具返回结果<strong>不会自动成为提示词上下文</strong>。程序手动选择路径与文件内容、打上标签、设置上下文长度上限，再要求模型输出结构化结果。</p>
<p>直接运行：</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">agentscript run recipes/summarize-file.as </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--input</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'{"path":"README.md"}'</span><br></div></code></pre></div></div>
<p>使用模拟模型快速验证：</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">npm</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">install</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">-g</span><span class="token plain"> @rong/agentscript</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">agentscript run recipes/summarize-file.as </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--input</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'{"path":"README.md"}'</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--mock</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--trace</span><br></div></code></pre></div></div>
<p>支持多种运行模式：</p>
<ul>
<li class=""><code>--mock</code>：使用确定性模拟模型</li>
<li class=""><code>--dry-run</code>：仅构建提示词，不调用模型</li>
<li class=""><code>--trace</code>：输出完整审计日志</li>
</ul>
<p>执行日志可以清晰展示：选中了哪些上下文、设置了哪些长度限制、哪些内容被截断、使用了什么指令、输出格式要求、校验是否通过。
日志用于调试与审计，<strong>本身不会被传入模型</strong>。</p>
<p>典型日志示例：</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">Generate #1</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">Agent: FileSummarizer / 技术文档撰写人</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">选中上下文:</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  [文件路径] input.path</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  [文件内容] content, 上限=8k, 未截断</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">指令:</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  为忙碌的同事总结这份文件</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">输出结构:</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  title 字符串</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  summary 字符串</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  key_points 字符串列表</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  action_items 字符串列表</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">校验: 通过</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="generate唯一的模型调用入口">generate：唯一的模型调用入口<a href="https://rongzhou.github.io/agentscript/zh-Hans/blog/introducing-agentscript#generate%E5%94%AF%E4%B8%80%E7%9A%84%E6%A8%A1%E5%9E%8B%E8%B0%83%E7%94%A8%E5%85%A5%E5%8F%A3" class="hash-link" aria-label="generate：唯一的模型调用入口的直接链接" title="generate：唯一的模型调用入口的直接链接" translate="no">​</a></h2>
<p>在 AgentScript 中，普通代码可以计算数据、调用工具、查询记忆、调用其他智能体、维护中间状态。<strong>只有 <code>generate</code> 能发起模型调用</strong>。</p>
<div class="language-agentscript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-agentscript codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">answer = generate({</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    input: "仅使用选中的上下文回答",</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    max_output: 800,</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    attempts: 3,</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    strict: true</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">}) -&gt; {</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    ok: boolean</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    answer</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    citations: list[string]</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">}</span><br></div></code></pre></div></div>
<p><code>-&gt;</code> 后定义输出契约：AgentScript 会强制校验模型返回格式，JSON 异常或结构不匹配时自动重试。下游代码可直接依赖结构化输出，无需手动解析文本。</p>
<p>每一次模型调用都有清晰边界：</p>
<ul>
<li class="">当前所属智能体身份</li>
<li class="">通过 <code>use</code> 选中的上下文</li>
<li class=""><code>generate</code> 内的指令</li>
<li class="">可选的输出结构约束</li>
</ul>
<p>这个边界，就是调试、审计、复盘的最小单元。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="作用��域--上下文边界">作用域 = 上下文边界<a href="https://rongzhou.github.io/agentscript/zh-Hans/blog/introducing-agentscript#%E4%BD%9C%E7%94%A8%E5%9F%9F--%E4%B8%8A%E4%B8%8B%E6%96%87%E8%BE%B9%E7%95%8C" class="hash-link" aria-label="作用域 = 上下文边界的直接链接" title="作用域 = 上下文边界的直接链接" translate="no">​</a></h2>
<p>AgentScript 依靠<strong>代码作用域</strong>管控上下文可见性。
<code>use</code> 声明仅对当前作用域、子作用域内后续 <code>generate</code> 生效，不会向上泄漏。函数、智能体调用会创建独立上下文边界。</p>
<div class="language-agentscript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-agentscript codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">func caller(input) {</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    use input.goal as goal</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    helper(input)</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">}</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">func helper(input) {</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    use input.detail as detail</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    generate({ input: "基于细节处理" }) -&gt; {</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        ok: boolean</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    }</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">}</span><br></div></code></pre></div></div>
<p><code>helper</code> 内部的模型调用只能看到 <code>input.detail</code>，不会自动继承上层 <code>goal</code>。
跨智能体调用同理：被调用智能体只能看到传入参数与自身 <code>use</code> 声明，不会继承调用方的提示词上下文。
多智能体组合因此更易审计，每个智能体拥有独立上下文契约，而非共享混乱的全局对话缓冲区。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="工具返回是数据不是上下文">工具返回是数据，不是上下文<a href="https://rongzhou.github.io/agentscript/zh-Hans/blog/introducing-agentscript#%E5%B7%A5%E5%85%B7%E8%BF%94%E5%9B%9E%E6%98%AF%E6%95%B0%E6%8D%AE%E4%B8%8D%E6%98%AF%E4%B8%8A%E4%B8%8B%E6%96%87" class="hash-link" aria-label="工具返回是数据，不是上下文的直接链接" title="工具返回是数据，不是上下文的直接链接" translate="no">​</a></h2>
<p>AgentScript 最重要的规则之一：<strong>工具返回结果是本地程序数据，不会自动进入提示词，必须显式 <code>use</code> 选中</strong>。</p>
<p>在代码评审、科研检索、代码分析等场景，工具往往返回大量冗余数据，远超出模型需要的范围。
例如仓库评审场景，可以先收集文件树、TODO 标记、包信息、CI 配置，再只选取必要部分：</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">use "文件树"          上限=8k</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">use "TODO发现"       上限=4k</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">use "包元信息"       上限=4k</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">use "CI配置"         上限=4k</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">generate             输出阻碍点、风险、可快速优化项、下一步计划</span><br></div></code></pre></div></div>
<p>工具拓展程序能力，<code>use</code> 管控模型可见范围，二者严格区分。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="记忆同样显式可控">记忆同样显式可控<a href="https://rongzhou.github.io/agentscript/zh-Hans/blog/introducing-agentscript#%E8%AE%B0%E5%BF%86%E5%90%8C%E6%A0%B7%E6%98%BE%E5%BC%8F%E5%8F%AF%E6%8E%A7" class="hash-link" aria-label="记忆同样显式可控的直接链接" title="记忆同样显式可控的直接链接" translate="no">​</a></h2>
<p>AgentScript 内置 JSONL、SQLite 两种记忆存储后端，但记忆遵循和工具完全一致的规则：
记忆句柄只是能力，<strong>不会自动混入上下文</strong>。</p>
<div class="language-agentscript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-agentscript codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">import memory Lessons from "file://./.agentscript/lessons.jsonl"</span><br></div></code></pre></div></div>
<p>智能体需要先查询记忆，拿到普通数据，再通过 <code>use</code> 手动纳入上下文：</p>
<div class="language-agentscript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-agentscript codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">past = Lessons.query({</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    text: input.goal,</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    kind: "lesson",</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    limit: 5</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">})</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">use input.goal as goal</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">use past max 2k as "过往经验"</span><br></div></code></pre></div></div>
<p>写入记忆同样显式可控：</p>
<div class="language-agentscript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-agentscript codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">Lessons.add({</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    kind: "lesson",</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    text: reflection.insight,</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    goal: input.goal</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">})</span><br></div></code></pre></div></div>
<p>支持反思、自我迭代，同时避免上下文无限膨胀。后续运行可复用历史经验，但全程可追溯、可管控。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="智能体模式基于基础原语自由组合">智能体模式：基于基础原语自由组合<a href="https://rongzhou.github.io/agentscript/zh-Hans/blog/introducing-agentscript#%E6%99%BA%E8%83%BD%E4%BD%93%E6%A8%A1%E5%BC%8F%E5%9F%BA%E4%BA%8E%E5%9F%BA%E7%A1%80%E5%8E%9F%E8%AF%AD%E8%87%AA%E7%94%B1%E7%BB%84%E5%90%88" class="hash-link" aria-label="智能体模式：基于基础原语自由组合的直接链接" title="智能体模式：基于基础原语自由组合的直接链接" translate="no">​</a></h2>
<p>AgentScript 不会硬编码 Planner、Executor、反射等特定模式关键字。
ReAct、规划-执行、评估-优化、反思、自我迭代、多智能体协作，全部由一套极简原语组合实现：</p>
<ul>
<li class="">智能体、函数：划分边界</li>
<li class="">工具：扩展外部能力</li>
<li class="">记忆：持久化状态</li>
<li class=""><code>use</code>：管控提示词上下文</li>
<li class=""><code>generate</code>：模型调用与输出契约</li>
<li class="">执行追踪：可审计</li>
</ul>
<p>针对并行独立任务，内置 <code>parallel for</code>：</p>
<div class="language-agentscript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-agentscript codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">results = parallel for step in plan.steps max 10 {</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    Executor({</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        goal: input.goal,</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        step: step</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    })</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">}</span><br></div></code></pre></div></div>
<p>并行执行结果仍是本地数据，<strong>只有手动 <code>use</code> 后才会进入后续提示词</strong>。</p>
<div class="language-agentscript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-agentscript codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">use results.summary max 6k as 执行结果</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="项目现状">项目现状<a href="https://rongzhou.github.io/agentscript/zh-Hans/blog/introducing-agentscript#%E9%A1%B9%E7%9B%AE%E7%8E%B0%E7%8A%B6" class="hash-link" aria-label="项目现状的直接链接" title="项目现状的直接链接" translate="no">​</a></h2>
<p>AgentScript 仍处于实验阶段，但核心语言设计已稳定落地。</p>
<p>已实现功能：</p>
<ul>
<li class="">语法解析器、语义校验器</li>
<li class="">模拟运行时</li>
<li class="">OpenAI / Anthropic / Ollama 模型适配器</li>
<li class="">文件、环境变量、HTTP、Shell 工具</li>
<li class="">JSONL / SQLite 记忆后端</li>
<li class="">结构化输出校验</li>
<li class="">执行追踪</li>
<li class="">基础运算符、赋值、并行循环</li>
<li class="">完整 CLI 命令</li>
</ul>
<p>可用于实验、示例、本地工作流，1.0 正式版前语法可能微调。</p>
<p>后续规划：稳定中间表示、完善错误提示、VS Code 语法高亮支持。</p>
<p>项目现阶段目标不是做成熟生产级框架，而是验证一个核心理念：</p>
<blockquote>
<p>智能体程序最重要的部分，或许不是模型调用的框架封装，而是调用前的<strong>上下文契约</strong>。</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="快速上手">快速上手<a href="https://rongzhou.github.io/agentscript/zh-Hans/blog/introducing-agentscript#%E5%BF%AB%E9%80%9F%E4%B8%8A%E6%89%8B" class="hash-link" aria-label="快速上手的直接链接" title="快速上手的直接链接" translate="no">​</a></h2>
<p>安装 CLI：</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">npm</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">install</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">-g</span><span class="token plain"> @rong/agentscript</span><br></div></code></pre></div></div>
<p>运行示例：</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">agentscript run recipes/summarize-file.as </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--input</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'{"path":"README.md"}'</span><br></div></code></pre></div></div>
<p>免安装直接运行：</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">npx @rong/agentscript run recipes/code-review.as </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--input</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'{"path":"src"}'</span><br></div></code></pre></div></div>
<p>模拟运行、调试追踪、离线校验，一键即可。</p>
<p>项目地址：</p>
<ul>
<li class="">NPM：<a href="https://www.npmjs.com/package/@rong/agentscript" target="_blank" rel="noopener noreferrer" class="">https://www.npmjs.com/package/@rong/agentscript</a></li>
<li class="">GitHub：<a href="https://github.com/rongzhou/agentscript" target="_blank" rel="noopener noreferrer" class="">https://github.com/rongzhou/agentscript</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="结语">结语<a href="https://rongzhou.github.io/agentscript/zh-Hans/blog/introducing-agentscript#%E7%BB%93%E8%AF%AD" class="hash-link" aria-label="结语的直接链接" title="结语的直接链接" translate="no">​</a></h2>
<p>行业里谈论智能体，总离不开工具、记忆、规划、自主性。
但所有能力，都依赖一个最基础的问题：
<strong>模型生成下一段输出前，到底看到了什么？</strong></p>
<p>AgentScript 正是围绕这个问题构建。它将提示词上下文变成可声明、可限定、可管控、可校验、可追踪的代码契约。</p>
<p>我们相信：可靠的生产级智能体，需要<strong>上下文工程成为编程范式，而非靠编码习惯约束</strong>。</p>]]></content:encoded>
            <category>agentscript</category>
            <category>context-engineering</category>
            <category>llm-agents</category>
        </item>
    </channel>
</rss>