<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="rss.xsl"?>
<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>OpenHuman Wiki Blog</title>
        <link>https://openhumanwiki.com/en/blog</link>
        <description>OpenHuman Wiki Blog</description>
        <lastBuildDate>Tue, 03 Jun 2025 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[自动抓取技术解析：让 AI 在你睡觉时同步数据]]></title>
            <link>https://openhumanwiki.com/en/blog/auto-fetch-explained</link>
            <guid>https://openhumanwiki.com/en/blog/auto-fetch-explained</guid>
            <pubDate>Tue, 03 Jun 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[深入解析 OpenHuman 自动抓取技术，了解 20 分钟定时调度机制如何实现 AI 数据同步，助你高效管理数据摄入流程。]]></description>
            <content:encoded><![CDATA[<p>在 AI 应用开发中，数据同步往往是耗时且重复的工作。OpenHuman 的**自动抓取（Auto-fetch）**功能彻底改变了这一现状——系统会在你休息时自动完成数据同步，让你专注于更重要的任务。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="什么是自动抓取">什么是自动抓取？<a href="https://openhumanwiki.com/en/blog/auto-fetch-explained#%E4%BB%80%E4%B9%88%E6%98%AF%E8%87%AA%E5%8A%A8%E6%8A%93%E5%8F%96" class="hash-link" aria-label="Direct link to 什么是自动抓取？" title="Direct link to 什么是自动抓取？" translate="no">​</a></h2>
<p>自动抓取是 OpenHuman 提供的一种智能数据同步机制。它允许用户配置数据源后，系统会根据预设的调度策略自动拉取最新数据，无需人工干预。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="核心特性">核心特性<a href="https://openhumanwiki.com/en/blog/auto-fetch-explained#%E6%A0%B8%E5%BF%83%E7%89%B9%E6%80%A7" class="hash-link" aria-label="Direct link to 核心特性" title="Direct link to 核心特性" translate="no">​</a></h3>
<ul>
<li class=""><strong>定时调度</strong>：每 20 分钟自动执行一次数据抓取</li>
<li class=""><strong>增量更新</strong>：仅获取新增或变更的数据，避免重复处理</li>
<li class=""><strong>后台运行</strong>：与其他任务并行执行，不影响主流程</li>
<li class=""><strong>自动重试</strong>：网络异常时自动重试，保证数据完整性</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="自动抓取的工作原理">自动抓取的工作原理<a href="https://openhumanwiki.com/en/blog/auto-fetch-explained#%E8%87%AA%E5%8A%A8%E6%8A%93%E5%8F%96%E7%9A%84%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86" class="hash-link" aria-label="Direct link to 自动抓取的工作原理" title="Direct link to 自动抓取的工作原理" translate="no">​</a></h2>
<p>自动抓取采用基于时间窗口的调度机制，确保数据始终保持新鲜。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="调度周期">调度周期<a href="https://openhumanwiki.com/en/blog/auto-fetch-explained#%E8%B0%83%E5%BA%A6%E5%91%A8%E6%9C%9F" class="hash-link" aria-label="Direct link to 调度周期" title="Direct link to 调度周期" translate="no">​</a></h3>
<p>默认调度周期为 <strong>20 分钟</strong>，这意味着：</p>
<ol>
<li class="">系统每 20 分钟检查一次配置的数据源</li>
<li class="">发现新数据时自动触发抓取流程</li>
<li class="">数据经过处理后写入目标存储</li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="数据抓取流程">数据抓取流程<a href="https://openhumanwiki.com/en/blog/auto-fetch-explained#%E6%95%B0%E6%8D%AE%E6%8A%93%E5%8F%96%E6%B5%81%E7%A8%8B" class="hash-link" aria-label="Direct link to 数据抓取流程" title="Direct link to 数据抓取流程" translate="no">​</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">数据源 → 调度器（20分钟周期）→ 抓取引擎 → 数据处理 → 写入存储</span><br></div></code></pre></div></div>
<ol>
<li class=""><strong>配置阶段</strong>：用户设定需要抓取的数据源 URL 和认证信息</li>
<li class=""><strong>调度阶段</strong>：内置调度器按设定周期触发抓取任务</li>
<li class=""><strong>执行阶段</strong>：抓取引擎访问数据源，下载最新内容</li>
<li class=""><strong>处理阶段</strong>：对数据进行解析、清洗和格式转换</li>
<li class=""><strong>存储阶段</strong>：将处理后的数据写入本地知识库</li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="20-分钟调度机制的优势">20 分钟调度机制的优势<a href="https://openhumanwiki.com/en/blog/auto-fetch-explained#20-%E5%88%86%E9%92%9F%E8%B0%83%E5%BA%A6%E6%9C%BA%E5%88%B6%E7%9A%84%E4%BC%98%E5%8A%BF" class="hash-link" aria-label="Direct link to 20 分钟调度机制的优势" title="Direct link to 20 分钟调度机制的优势" translate="no">​</a></h3>
<p>20 分钟是一个经过优化的周期，既能保证数据时效性，又不会对数据源造成过大压力。相比实时同步，它更加轻量；相比每日同步，它又能提供足够新鲜的数据。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="支持自动抓取的数据源">支持自动抓取的数据源<a href="https://openhumanwiki.com/en/blog/auto-fetch-explained#%E6%94%AF%E6%8C%81%E8%87%AA%E5%8A%A8%E6%8A%93%E5%8F%96%E7%9A%84%E6%95%B0%E6%8D%AE%E6%BA%90" class="hash-link" aria-label="Direct link to 支持自动抓取的数据源" title="Direct link to 支持自动抓取的数据源" translate="no">​</a></h2>
<p>OpenHuman 自动抓取功能支持多种主流数据源类型：</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="网页内容">网页内容<a href="https://openhumanwiki.com/en/blog/auto-fetch-explained#%E7%BD%91%E9%A1%B5%E5%86%85%E5%AE%B9" class="hash-link" aria-label="Direct link to 网页内容" title="Direct link to 网页内容" translate="no">​</a></h3>
<ul>
<li class=""><strong>静态网页</strong>：HTML 页面自动解析</li>
<li class=""><strong>动态内容</strong>：JavaScript 渲染页面支持</li>
<li class=""><strong>RSS/Atom</strong>：博客和新闻订阅源</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="文档格式">文档格式<a href="https://openhumanwiki.com/en/blog/auto-fetch-explained#%E6%96%87%E6%A1%A3%E6%A0%BC%E5%BC%8F" class="hash-link" aria-label="Direct link to 文档格式" title="Direct link to 文档格式" translate="no">​</a></h3>
<ul>
<li class=""><strong>Markdown</strong>：直接解析并入库</li>
<li class=""><strong>PDF</strong>：文本提取后同步</li>
<li class=""><strong>Word 文档</strong>：docx 格式支持</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="api-接口">API 接口<a href="https://openhumanwiki.com/en/blog/auto-fetch-explained#api-%E6%8E%A5%E5%8F%A3" class="hash-link" aria-label="Direct link to API 接口" title="Direct link to API 接口" translate="no">​</a></h3>
<ul>
<li class=""><strong>REST API</strong>：JSON 格式数据自动抓取</li>
<li class=""><strong>GraphQL</strong>：支持自定义查询的数据源</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="如何配置自动抓取">如何配置自动抓取<a href="https://openhumanwiki.com/en/blog/auto-fetch-explained#%E5%A6%82%E4%BD%95%E9%85%8D%E7%BD%AE%E8%87%AA%E5%8A%A8%E6%8A%93%E5%8F%96" class="hash-link" aria-label="Direct link to 如何配置自动抓取" title="Direct link to 如何配置自动抓取" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="基础配置示例">基础配置示例<a href="https://openhumanwiki.com/en/blog/auto-fetch-explained#%E5%9F%BA%E7%A1%80%E9%85%8D%E7%BD%AE%E7%A4%BA%E4%BE%8B" class="hash-link" aria-label="Direct link to 基础配置示例" title="Direct link to 基础配置示例" translate="no">​</a></h3>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> fetchConfig </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">url</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'https://api.example.com/data'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">schedule</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'*/20 * * * *'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// 每20分钟</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">auth</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">type</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'bearer'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">token</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> process</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">env</span><span class="token punctuation" style="color:#393A34">.</span><span class="token constant" style="color:#36acaa">API_TOKEN</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function-variable function" style="color:#d73a49">transform</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">data</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> data</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">items</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">map</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">item</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token literal-property property" style="color:#36acaa">id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> item</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token literal-property property" style="color:#36acaa">content</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> item</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">text</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token literal-property property" style="color:#36acaa">timestamp</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">Date</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">item</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">updatedAt</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> client</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">autoFetch</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">create</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">fetchConfig</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="调度策略自定义">调度策略自定义<a href="https://openhumanwiki.com/en/blog/auto-fetch-explained#%E8%B0%83%E5%BA%A6%E7%AD%96%E7%95%A5%E8%87%AA%E5%AE%9A%E4%B9%89" class="hash-link" aria-label="Direct link to 调度策略自定义" title="Direct link to 调度策略自定义" translate="no">​</a></h3>
<p>如果 20 分钟的默认周期不满足需求，你可以调整调度频率：</p>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// 每小时抓取一次</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> hourlyConfig </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">schedule</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'0 * * * *'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// 每小时整点</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// ...</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// 每日凌晨抓取</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> dailyConfig </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">schedule</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'0 2 * * *'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// 每天凌晨2点</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// ...</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="自动抓取的最佳实践">自动抓取的最佳实践<a href="https://openhumanwiki.com/en/blog/auto-fetch-explained#%E8%87%AA%E5%8A%A8%E6%8A%93%E5%8F%96%E7%9A%84%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5" class="hash-link" aria-label="Direct link to 自动抓取的最佳实践" title="Direct link to 自动抓取的最佳实践" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-合理选择调度周期">1. 合理选择调度周期<a href="https://openhumanwiki.com/en/blog/auto-fetch-explained#1-%E5%90%88%E7%90%86%E9%80%89%E6%8B%A9%E8%B0%83%E5%BA%A6%E5%91%A8%E6%9C%9F" class="hash-link" aria-label="Direct link to 1. 合理选择调度周期" title="Direct link to 1. 合理选择调度周期" translate="no">​</a></h3>
<p>根据数据源的更新频率选择合适的调度周期：</p>
<ul>
<li class=""><strong>高频更新源</strong>（如新闻、社交媒体）：建议 15-20 分钟</li>
<li class=""><strong>低频更新源</strong>（如文档、静态内容）：建议 60 分钟或更长</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-配置增量抓取">2. 配置增量抓取<a href="https://openhumanwiki.com/en/blog/auto-fetch-explained#2-%E9%85%8D%E7%BD%AE%E5%A2%9E%E9%87%8F%E6%8A%93%E5%8F%96" class="hash-link" aria-label="Direct link to 2. 配置增量抓取" title="Direct link to 2. 配置增量抓取" translate="no">​</a></h3>
<p>启用增量模式避免重复处理：</p>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> config </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// ... 其他配置</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">incremental</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">lastFetchedAt</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">getLastFetchTimestamp</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-错误处理与重试">3. 错误处理与重试<a href="https://openhumanwiki.com/en/blog/auto-fetch-explained#3-%E9%94%99%E8%AF%AF%E5%A4%84%E7%90%86%E4%B8%8E%E9%87%8D%E8%AF%95" class="hash-link" aria-label="Direct link to 3. 错误处理与重试" title="Direct link to 3. 错误处理与重试" translate="no">​</a></h3>
<p>配置自动重试机制保证稳定性：</p>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> config </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// ... 其他配置</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">retry</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">maxAttempts</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">backoff</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'exponential'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-监控抓取状态">4. 监控抓取状态<a href="https://openhumanwiki.com/en/blog/auto-fetch-explained#4-%E7%9B%91%E6%8E%A7%E6%8A%93%E5%8F%96%E7%8A%B6%E6%80%81" class="hash-link" aria-label="Direct link to 4. 监控抓取状态" title="Direct link to 4. 监控抓取状态" translate="no">​</a></h3>
<p>定期检查抓取任务的执行状态：</p>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> status </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> client</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">autoFetch</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">getStatus</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">fetchId</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">上次抓取: </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">status</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation property-access">lastRunAt</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">抓取结果: </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">status</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation property-access">itemsFetched</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c"> 条</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">状态: </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">status</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation property-access">status</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="常见问题">常见问题<a href="https://openhumanwiki.com/en/blog/auto-fetch-explained#%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98" class="hash-link" aria-label="Direct link to 常见问题" title="Direct link to 常见问题" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="q-自动抓取会消耗很多资源吗">Q: 自动抓取会消耗很多资源吗？<a href="https://openhumanwiki.com/en/blog/auto-fetch-explained#q-%E8%87%AA%E5%8A%A8%E6%8A%93%E5%8F%96%E4%BC%9A%E6%B6%88%E8%80%97%E5%BE%88%E5%A4%9A%E8%B5%84%E6%BA%90%E5%90%97" class="hash-link" aria-label="Direct link to Q: 自动抓取会消耗很多资源吗？" title="Direct link to Q: 自动抓取会消耗很多资源吗？" translate="no">​</a></h3>
<p>不会。自动抓取采用轻量级调度机制，每次抓取任务完成后即释放资源。只有在调度周期触发时才会占用少量 CPU 和网络资源。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="q-如果数据源需要认证怎么办">Q: 如果数据源需要认证怎么办？<a href="https://openhumanwiki.com/en/blog/auto-fetch-explained#q-%E5%A6%82%E6%9E%9C%E6%95%B0%E6%8D%AE%E6%BA%90%E9%9C%80%E8%A6%81%E8%AE%A4%E8%AF%81%E6%80%8E%E4%B9%88%E5%8A%9E" class="hash-link" aria-label="Direct link to Q: 如果数据源需要认证怎么办？" title="Direct link to Q: 如果数据源需要认证怎么办？" translate="no">​</a></h3>
<p>OpenHuman 支持多种认证方式：API Key、Bearer Token、Basic Auth、OAuth 2.0，可根据数据源要求选择合适的认证方式。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="q-可以同时配置多个数据源吗">Q: 可以同时配置多个数据源吗？<a href="https://openhumanwiki.com/en/blog/auto-fetch-explained#q-%E5%8F%AF%E4%BB%A5%E5%90%8C%E6%97%B6%E9%85%8D%E7%BD%AE%E5%A4%9A%E4%B8%AA%E6%95%B0%E6%8D%AE%E6%BA%90%E5%90%97" class="hash-link" aria-label="Direct link to Q: 可以同时配置多个数据源吗？" title="Direct link to Q: 可以同时配置多个数据源吗？" translate="no">​</a></h3>
<p>可以。系统支持并行抓取多个数据源，只需为每个数据源创建独立的抓取配置即可。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="q-抓取失败了怎么办">Q: 抓取失败了怎么办？<a href="https://openhumanwiki.com/en/blog/auto-fetch-explained#q-%E6%8A%93%E5%8F%96%E5%A4%B1%E8%B4%A5%E4%BA%86%E6%80%8E%E4%B9%88%E5%8A%9E" class="hash-link" aria-label="Direct link to Q: 抓取失败了怎么办？" title="Direct link to Q: 抓取失败了怎么办？" translate="no">​</a></h3>
<p>系统会自动记录失败原因，并在下一个调度周期重试。如果持续失败，会发送通知提醒你检查配置。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="总结">总结<a href="https://openhumanwiki.com/en/blog/auto-fetch-explained#%E6%80%BB%E7%BB%93" class="hash-link" aria-label="Direct link to 总结" title="Direct link to 总结" translate="no">​</a></h2>
<p>OpenHuman 的自动抓取功能通过智能定时调度，让 AI 数据同步变得简单高效。20 分钟的默认调度周期在数据时效性和系统资源消耗之间取得了良好平衡，配合增量更新和自动重试机制，确保你的知识库始终保持最新状态。</p>
<p>立即配置自动抓取，让 AI 在你睡觉时为你完成数据同步工作。</p>
<hr>
<p><em>想了解更多 OpenHuman 使用技巧？查看 <a class="" href="https://openhumanwiki.com/en/blog/agent-design-patterns">OpenHuman Agent 设计模式</a> 深入学习最佳实践。</em></p>]]></content:encoded>
            <category>auto-fetch</category>
            <category>data-sync</category>
            <category>tutorial</category>
        </item>
        <item>
            <title><![CDATA[本地优先的 AI：OpenHuman 如何保护你的数据隐私]]></title>
            <link>https://openhumanwiki.com/en/blog/2025-06-02-privacy-security-guide</link>
            <guid>https://openhumanwiki.com/en/blog/2025-06-02-privacy-security-guide</guid>
            <pubDate>Mon, 02 Jun 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[深入了解 OpenHuman 的本地优先架构如何保护你的数据隐私，为什么本地 AI 比云端 AI 更安全，以及隐私模式的使用方法。]]></description>
            <content:encoded><![CDATA[<p>在这个数据泄露新闻频发的时代，你的 AI 助手可能正在不知不觉地收集和上传你的隐私数据。当你在 ChatGPT 输入商业机密，在 Claude 对话中分享敏感信息时，你是否曾思考过——这些数据去了哪里？被如何处理？是否真正安全？</p>
<p>OpenHuman 给出了不同的答案。作为新一代 AI 个人助手，OpenHuman 采用「本地优先」（Local-First）的架构设计，默认将数据保存在你的设备上，只有在你明确授权时才会进行必要的云端同步。这种设计理念从根本上改变了数据归属权——你的数据，始终是你的。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="为什么本地存储比云端更安全">为什么本地存储比云端更安全<a href="https://openhumanwiki.com/en/blog/2025-06-02-privacy-security-guide#%E4%B8%BA%E4%BB%80%E4%B9%88%E6%9C%AC%E5%9C%B0%E5%AD%98%E5%82%A8%E6%AF%94%E4%BA%91%E7%AB%AF%E6%9B%B4%E5%AE%89%E5%85%A8" class="hash-link" aria-label="Direct link to 为什么本地存储比云端更安全" title="Direct link to 为什么本地存储比云端更安全" translate="no">​</a></h2>
<p>要理解 OpenHuman 的安全优势，首先需要了解云端 AI 的潜在风险。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="传统云端-ai-的数据困境">传统云端 AI 的数据困境<a href="https://openhumanwiki.com/en/blog/2025-06-02-privacy-security-guide#%E4%BC%A0%E7%BB%9F%E4%BA%91%E7%AB%AF-ai-%E7%9A%84%E6%95%B0%E6%8D%AE%E5%9B%B0%E5%A2%83" class="hash-link" aria-label="Direct link to 传统云端 AI 的数据困境" title="Direct link to 传统云端 AI 的数据困境" translate="no">​</a></h3>
<p>当你使用传统云端 AI 服务时，你的数据通常会经历以下过程：</p>
<ol>
<li class=""><strong>上传至服务器</strong>：你的输入内容被传输到第三方服务器</li>
<li class=""><strong>云端处理</strong>：数据在远程服务器上进行存储和处理</li>
<li class=""><strong>可能用于训练</strong>：部分服务商会将数据用于模型训练</li>
<li class=""><strong>长期留存</strong>：数据何时删除、是否彻底删除，你无法确认</li>
</ol>
<p>这意味着你的私人对话、商业计划、健康信息——都可能留存在他人的服务器上。即便服务商承诺不用于训练，你也无法独立验证。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="本地存储的核心优势">本地存储的核心优势<a href="https://openhumanwiki.com/en/blog/2025-06-02-privacy-security-guide#%E6%9C%AC%E5%9C%B0%E5%AD%98%E5%82%A8%E7%9A%84%E6%A0%B8%E5%BF%83%E4%BC%98%E5%8A%BF" class="hash-link" aria-label="Direct link to 本地存储的核心优势" title="Direct link to 本地存储的核心优势" translate="no">​</a></h3>
<p>OpenHuman 的本地优先架构从根本上规避了这些风险：</p>
<p><strong>数据不离设备</strong>：所有处理都在本地完成，你的敏感信息从不离开你的设备</p>
<p><strong>无云端依赖</strong>：核心功能在离线状态下同样可用，不需要时刻保持网络连接</p>
<p><strong>独立验证</strong>：你可以通过开源代码自行验证数据处理逻辑，不需要信任服务商承诺</p>
<p><strong>最小化传输</strong>：即便需要云端能力，也只传输必要的脱敏数据</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="openhuman-的隐私保护设计">OpenHuman 的隐私保护设计<a href="https://openhumanwiki.com/en/blog/2025-06-02-privacy-security-guide#openhuman-%E7%9A%84%E9%9A%90%E7%A7%81%E4%BF%9D%E6%8A%A4%E8%AE%BE%E8%AE%A1" class="hash-link" aria-label="Direct link to OpenHuman 的隐私保护设计" title="Direct link to OpenHuman 的隐私保护设计" translate="no">​</a></h2>
<p>OpenHuman 从架构设计到功能实现，都将隐私保护作为核心原则，而非后期添加的可选项。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="端到端加密通信">端到端加密通信<a href="https://openhumanwiki.com/en/blog/2025-06-02-privacy-security-guide#%E7%AB%AF%E5%88%B0%E7%AB%AF%E5%8A%A0%E5%AF%86%E9%80%9A%E4%BF%A1" class="hash-link" aria-label="Direct link to 端到端加密通信" title="Direct link to 端到端加密通信" translate="no">​</a></h3>
<p>当你使用 OpenHuman 的云端同步功能时，所有数据传输均采用端到端加密。这意味着即便数据在传输过程中被截获，攻击者也无法解读其内容。加密密钥仅存储在你本地设备，其他任何方——包括 OpenHuman 服务端——都无法解密你的数据。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="隐私模式双层保护">隐私模式：双层保护<a href="https://openhumanwiki.com/en/blog/2025-06-02-privacy-security-guide#%E9%9A%90%E7%A7%81%E6%A8%A1%E5%BC%8F%E5%8F%8C%E5%B1%82%E4%BF%9D%E6%8A%A4" class="hash-link" aria-label="Direct link to 隐私模式：双层保护" title="Direct link to 隐私模式：双层保护" translate="no">​</a></h3>
<p>OpenHuman 提供专门的隐私模式，带来了额外的保护层：</p>
<ul>
<li class=""><strong>增强隐私保护</strong>：隐私模式开启后，OpenHuman 不会保存任何对话记录</li>
<li class=""><strong>临时处理</strong>：所有输入在处理完成后立即从内存中清除</li>
<li class=""><strong>无日志记录</strong>：隐私模式下不产生任何可追溯的操作日志</li>
</ul>
<p>适合场景：处理敏感财务信息、医疗记录、法律文档，或任何你不希望留下任何痕迹的对话。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="细粒度权限控制">细粒度权限控制<a href="https://openhumanwiki.com/en/blog/2025-06-02-privacy-security-guide#%E7%BB%86%E7%B2%92%E5%BA%A6%E6%9D%83%E9%99%90%E6%8E%A7%E5%88%B6" class="hash-link" aria-label="Direct link to 细粒度权限控制" title="Direct link to 细粒度权限控制" translate="no">​</a></h3>
<p>OpenHuman 的集成权限管理允许你精确控制每个第三方服务的访问范围：</p>
<ul>
<li class="">每次授权都有明确的权限范围说明</li>
<li class="">可以随时在设置中查看和撤销已授权的集成</li>
<li class="">支持设置临时授权，过期后自动失效</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="数据分类清楚知道你的数据去哪了">数据分类：清楚知道你的数据去哪了<a href="https://openhumanwiki.com/en/blog/2025-06-02-privacy-security-guide#%E6%95%B0%E6%8D%AE%E5%88%86%E7%B1%BB%E6%B8%85%E6%A5%9A%E7%9F%A5%E9%81%93%E4%BD%A0%E7%9A%84%E6%95%B0%E6%8D%AE%E5%8E%BB%E5%93%AA%E4%BA%86" class="hash-link" aria-label="Direct link to 数据分类：清楚知道你的数据去哪了" title="Direct link to 数据分类：清楚知道你的数据去哪了" translate="no">​</a></h2>
<p>OpenHuman 将数据分为三类，明确告诉你每类数据的处理方式：</p>
<p><strong>本地数据</strong>：完全存储在本地设备，不会上传至任何服务器。包括：本地文档、笔记、任务列表。本地 AI 模型处理的所有数据。</p>
<p><strong>同步数据</strong>：经你明确授权后，在加密状态下与你授权的设备同步。包括：跨设备工作进度、配置偏好。云端同步采用零知识加密，服务端无法解读内容。</p>
<p><strong>可选分享数据</strong>：当你主动使用特定功能时才会传输的数据。包括：使用云端 AI 模型时的输入内容（仅用于生成回答）。第三方集成的授权数据（可随时撤销）。</p>
<p>这种清晰的分类让你对数据流向一目了然，不再需要对隐私状态感到模糊和焦虑。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="企业级安全适合商业环境使用">企业级安全：适合商业环境使用<a href="https://openhumanwiki.com/en/blog/2025-06-02-privacy-security-guide#%E4%BC%81%E4%B8%9A%E7%BA%A7%E5%AE%89%E5%85%A8%E9%80%82%E5%90%88%E5%95%86%E4%B8%9A%E7%8E%AF%E5%A2%83%E4%BD%BF%E7%94%A8" class="hash-link" aria-label="Direct link to 企业级安全：适合商业环境使用" title="Direct link to 企业级安全：适合商业环境使用" translate="no">​</a></h2>
<p>OpenHuman 的隐私设计同样适合对数据安全有高要求的企业环境：</p>
<p><strong>本地部署选项</strong>：企业可以选择完整的本地部署方案，所有数据完全在企业内部网络中流转</p>
<p><strong>合规性支持</strong>：满足 GDPR、数据本地化等各类数据保护法规要求</p>
<p><strong>审计日志</strong>：提供完整的操作审计记录，方便企业进行安全合规审查</p>
<p><strong>团队权限管理</strong>：细粒度的团队成员权限控制，确保只有需要访问的人才能接触敏感数据</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="开始保护你的数据隐私">开始保护你的数据隐私<a href="https://openhumanwiki.com/en/blog/2025-06-02-privacy-security-guide#%E5%BC%80%E5%A7%8B%E4%BF%9D%E6%8A%A4%E4%BD%A0%E7%9A%84%E6%95%B0%E6%8D%AE%E9%9A%90%E7%A7%81" class="hash-link" aria-label="Direct link to 开始保护你的数据隐私" title="Direct link to 开始保护你的数据隐私" translate="no">​</a></h2>
<p>OpenHuman 默认启用本地优先模式，你无需进行额外配置即可享受隐私保护。如果你需要更高的隐私保障，可以随时在设置中开启隐私模式。</p>
<p>数据安全是一场持续的战斗，OpenHuman 致力于让隐私保护成为每个用户的默认权利，而非需要昂贵代价才能获得的奢侈品。选择本地优先的 AI，就是选择对自己数据的完全掌控权。</p>
<p>想了解 OpenHuman 的完整安全特性？查看我们的<a class="" href="https://openhumanwiki.com/en/docs/security">安全白皮书</a>获取详细技术说明。</p>]]></content:encoded>
            <category>隐私</category>
            <category>数据安全</category>
            <category>本地AI</category>
            <category>OpenHuman</category>
        </item>
        <item>
            <title><![CDATA[5 分钟搭建 OpenHuman 集成：Gmail、Slack、Notion 一键连接]]></title>
            <link>https://openhumanwiki.com/en/blog/2025-06-01-integration-setup-guide</link>
            <guid>https://openhumanwiki.com/en/blog/2025-06-01-integration-setup-guide</guid>
            <pubDate>Sun, 01 Jun 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[了解如何在 5 分钟内通过 OAuth 一键连接 Gmail、Slack、Notion 等主流服务，OpenHuman 集成让工作流程自动化更简单。]]></description>
            <content:encoded><![CDATA[<p>在快节奏的现代工作中，我们每天需要在多个应用之间切换——查邮件、看消息、写文档、管理任务。频繁的应用切换不仅浪费时间，还会打断思路。OpenHuman 的集成功能正是为解决这一痛点而生：通过 OAuth 安全授权，只需 5 分钟，你就能把 Gmail、Slack、Notion 等主流服务一键连接到 OpenHuman，实现真正的无缝工作流。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="为什么集成能大幅提升工作效率">为什么集成能大幅提升工作效率<a href="https://openhumanwiki.com/en/blog/2025-06-01-integration-setup-guide#%E4%B8%BA%E4%BB%80%E4%B9%88%E9%9B%86%E6%88%90%E8%83%BD%E5%A4%A7%E5%B9%85%E6%8F%90%E5%8D%87%E5%B7%A5%E4%BD%9C%E6%95%88%E7%8E%87" class="hash-link" aria-label="Direct link to 为什么集成能大幅提升工作效率" title="Direct link to 为什么集成能大幅提升工作效率" translate="no">​</a></h2>
<p>当你需要在多个工具之间来回切换时，每次切换都伴随着注意力损耗。研究表明，频繁切换任务会让工作效率降低高达 40%。OpenHuman 集成通过统一入口，让你可以在一个界面完成所有操作：</p>
<ul>
<li class=""><strong>信息聚合</strong>：所有重要通知、邮件、消息聚合在一个地方</li>
<li class=""><strong>操作统一</strong>：无需离开 OpenHuman 即可完成跨应用操作</li>
<li class=""><strong>自动化流程</strong>：设置触发条件，自动执行跨应用任务</li>
</ul>
<p>更重要的是，OpenHuman 的集成采用业界标准的 OAuth 2.0 协议，你在任何时候都可以撤销授权，数据访问权限完全掌握在自己手中。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="如何通过-oauth-一键连接第三方服务">如何通过 OAuth 一键连接第三方服务<a href="https://openhumanwiki.com/en/blog/2025-06-01-integration-setup-guide#%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87-oauth-%E4%B8%80%E9%94%AE%E8%BF%9E%E6%8E%A5%E7%AC%AC%E4%B8%89%E6%96%B9%E6%9C%8D%E5%8A%A1" class="hash-link" aria-label="Direct link to 如何通过 OAuth 一键连接第三方服务" title="Direct link to 如何通过 OAuth 一键连接第三方服务" translate="no">​</a></h2>
<p>OAuth（开放授权）是一种安全的授权标准，允许第三方应用在不获取你密码的情况下访问你的数据。OpenHuman 集成正是基于这一标准，确保最高级别的安全性。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="连接步骤以-gmail-为例">连接步骤（以 Gmail 为例）<a href="https://openhumanwiki.com/en/blog/2025-06-01-integration-setup-guide#%E8%BF%9E%E6%8E%A5%E6%AD%A5%E9%AA%A4%E4%BB%A5-gmail-%E4%B8%BA%E4%BE%8B" class="hash-link" aria-label="Direct link to 连接步骤（以 Gmail 为例）" title="Direct link to 连接步骤（以 Gmail 为例）" translate="no">​</a></h3>
<ol>
<li class=""><strong>进入集成设置</strong>：在 OpenHuman 侧边栏点击「设置」→「集成」</li>
<li class=""><strong>选择服务</strong>：找到 Gmail，点击「连接」</li>
<li class=""><strong>授权确认</strong>：系统会跳转到 Google 授权页面，点击「允许」</li>
<li class=""><strong>完成配置</strong>：返回 OpenHuman，开始使用</li>
</ol>
<p>整个过程不超过 2 分钟，且你随时可以在 Google 账户设置中撤销 OpenHuman 的访问权限。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="支持的主要集成服务">支持的主要集成服务<a href="https://openhumanwiki.com/en/blog/2025-06-01-integration-setup-guide#%E6%94%AF%E6%8C%81%E7%9A%84%E4%B8%BB%E8%A6%81%E9%9B%86%E6%88%90%E6%9C%8D%E5%8A%A1" class="hash-link" aria-label="Direct link to 支持的主要集成服务" title="Direct link to 支持的主要集成服务" translate="no">​</a></h3>
<p>OpenHuman 目前支持以下主流服务的集成：</p>
<p><strong>生产力工具</strong></p>
<ul>
<li class="">Gmail / Google Workspace：邮件管理、日历同步</li>
<li class="">Notion：文档查阅、数据库同步</li>
<li class="">Slack：消息通知、频道管理</li>
<li class="">Microsoft 365：Outlook 邮件、Teams 消息</li>
</ul>
<p><strong>协作与文档</strong></p>
<ul>
<li class="">Google Docs / Sheets：文档实时协作</li>
<li class="">Dropbox：文件存储与分享</li>
<li class="">OneDrive：微软生态文件管理</li>
</ul>
<p><strong>通信与会议</strong></p>
<ul>
<li class="">Zoom：会议安排、入会链接</li>
<li class="">Google Meet：视频会议集成</li>
</ul>
<p>每个集成都遵循最小权限原则，OpenHuman 仅申请实现功能所必需的数据访问权限，绝不超范围收集用户信息。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="openhuman-集成的独特优势">OpenHuman 集成的独特优势<a href="https://openhumanwiki.com/en/blog/2025-06-01-integration-setup-guide#openhuman-%E9%9B%86%E6%88%90%E7%9A%84%E7%8B%AC%E7%89%B9%E4%BC%98%E5%8A%BF" class="hash-link" aria-label="Direct link to OpenHuman 集成的独特优势" title="Direct link to OpenHuman 集成的独特优势" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="安全优先的架构设计">安全优先的架构设计<a href="https://openhumanwiki.com/en/blog/2025-06-01-integration-setup-guide#%E5%AE%89%E5%85%A8%E4%BC%98%E5%85%88%E7%9A%84%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1" class="hash-link" aria-label="Direct link to 安全优先的架构设计" title="Direct link to 安全优先的架构设计" translate="no">​</a></h3>
<p>市面上许多集成工具要求你提供账户密码，这种方式存在严重安全隐患。OpenHuman 所有集成均基于 OAuth 2.0，不存储任何第三方服务的密码，你可以在任何时候检查和撤销已授权的应用。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="灵活的触发与自动化">灵活的触发与自动化<a href="https://openhumanwiki.com/en/blog/2025-06-01-integration-setup-guide#%E7%81%B5%E6%B4%BB%E7%9A%84%E8%A7%A6%E5%8F%91%E4%B8%8E%E8%87%AA%E5%8A%A8%E5%8C%96" class="hash-link" aria-label="Direct link to 灵活的触发与自动化" title="Direct link to 灵活的触发与自动化" translate="no">​</a></h3>
<p>你可以设置自动化规则，让 OpenHuman 根据特定条件执行操作。例如：</p>
<ul>
<li class="">新邮件主题包含「报价」时，自动推送到 Slack</li>
<li class="">Notion 数据库更新时，发送企业微信通知</li>
<li class="">日历有会议时，提前 5 分钟在系统托盘提醒</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="统一的用户体验">统一的用户体验<a href="https://openhumanwiki.com/en/blog/2025-06-01-integration-setup-guide#%E7%BB%9F%E4%B8%80%E7%9A%84%E7%94%A8%E6%88%B7%E4%BD%93%E9%AA%8C" class="hash-link" aria-label="Direct link to 统一的用户体验" title="Direct link to 统一的用户体验" translate="no">​</a></h3>
<p>无论连接了多少服务，OpenHuman 保持统一的界面设计风格和交互逻辑。你不需要为每个服务学习不同的操作方式，在 OpenHuman 中，一切操作都保持一致。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="隐私控制你的数据你做主">隐私控制：你的数据你做主<a href="https://openhumanwiki.com/en/blog/2025-06-01-integration-setup-guide#%E9%9A%90%E7%A7%81%E6%8E%A7%E5%88%B6%E4%BD%A0%E7%9A%84%E6%95%B0%E6%8D%AE%E4%BD%A0%E5%81%9A%E4%B8%BB" class="hash-link" aria-label="Direct link to 隐私控制：你的数据你做主" title="Direct link to 隐私控制：你的数据你做主" translate="no">​</a></h2>
<p>OpenHuman 集成页面提供了清晰的权限管理视图。你可以：</p>
<ul>
<li class="">查看当前已连接的所有服务</li>
<li class="">单个撤销不再需要的授权</li>
<li class="">设置哪些数据可以同步，哪些保持本地</li>
<li class="">查看每次数据访问的时间戳记录</li>
</ul>
<p>这种透明化管理让你对个人信息拥有完全的控制权。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="开始使用3-步搭建你的集成工作流">开始使用：3 步搭建你的集成工作流<a href="https://openhumanwiki.com/en/blog/2025-06-01-integration-setup-guide#%E5%BC%80%E5%A7%8B%E4%BD%BF%E7%94%A83-%E6%AD%A5%E6%90%AD%E5%BB%BA%E4%BD%A0%E7%9A%84%E9%9B%86%E6%88%90%E5%B7%A5%E4%BD%9C%E6%B5%81" class="hash-link" aria-label="Direct link to 开始使用：3 步搭建你的集成工作流" title="Direct link to 开始使用：3 步搭建你的集成工作流" translate="no">​</a></h2>
<p>第一步：打开 OpenHuman，点击左侧「设置」→「集成管理」</p>
<p>第二步：浏览支持的服务列表，点击你想要连接的服务</p>
<p>第三步：完成 OAuth 授权，配置同步偏好，开始体验无缝工作流</p>
<hr>
<p>集成是提升工作效率的关键一步。花费 5 分钟配置好你的第一个集成，你会发现每天节省的时间远比这多得多。立即体验 OpenHuman 集成，让工作更专注、更高效。</p>
<p>想了解更多 OpenHuman 功能？欢迎访问我们的<a class="" href="https://openhumanwiki.com/en/docs">官方文档</a>获取完整指南。</p>]]></content:encoded>
            <category>集成</category>
            <category>OAuth</category>
            <category>Gmail</category>
            <category>Slack</category>
            <category>Notion</category>
            <category>第三方服务</category>
        </item>
        <item>
            <title><![CDATA[Obsidian 双向同步：打造你的第二大脑]]></title>
            <link>https://openhumanwiki.com/en/blog/obsidian-integration</link>
            <guid>https://openhumanwiki.com/en/blog/obsidian-integration</guid>
            <pubDate>Sat, 31 May 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[了解如何将 OpenHuman 与 Obsidian 无缝集成，实现 Markdown 笔记与 AI 知识的双向同步，构建个性化知识图谱。]]></description>
            <content:encoded><![CDATA[<p>在知识管理领域，Obsidian 已成为最受青睐的工具之一。它基于 Markdown 的本地笔记系统，配合强大的双向链接功能，让你可以构建属于自己的「第二大脑」。现在，OpenHuman 为 Obsidian 用户带来了更强大的 AI 能力，实现人与 AI 知识的无缝同步。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="为什么选择-obsidian">为什么选择 Obsidian？<a href="https://openhumanwiki.com/en/blog/obsidian-integration#%E4%B8%BA%E4%BB%80%E4%B9%88%E9%80%89%E6%8B%A9-obsidian" class="hash-link" aria-label="Direct link to 为什么选择 Obsidian？" title="Direct link to 为什么选择 Obsidian？" translate="no">​</a></h2>
<p>Obsidian 的核心优势在于其灵活性和可扩展性：</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="本地优先数据自主">本地优先，数据自主<a href="https://openhumanwiki.com/en/blog/obsidian-integration#%E6%9C%AC%E5%9C%B0%E4%BC%98%E5%85%88%E6%95%B0%E6%8D%AE%E8%87%AA%E4%B8%BB" class="hash-link" aria-label="Direct link to 本地优先，数据自主" title="Direct link to 本地优先，数据自主" translate="no">​</a></h3>
<p>所有笔记存储在本地文件夹中，你可以完全掌控自己的数据。不用担心云服务涨价或停运，也不用担心隐私泄露。Markdown 格式确保了数据的长期可读性。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="双向链接知识网络">双向链接，知识网络<a href="https://openhumanwiki.com/en/blog/obsidian-integration#%E5%8F%8C%E5%90%91%E9%93%BE%E6%8E%A5%E7%9F%A5%E8%AF%86%E7%BD%91%E7%BB%9C" class="hash-link" aria-label="Direct link to 双向链接，知识网络" title="Direct link to 双向链接，知识网络" translate="no">​</a></h3>
<p>Obsidian 的双向链接功能让你可以轻松建立知识点之间的关联。当你在笔记中引用其他笔记时，系统会自动创建反向链接，帮助你发现知识盲区，构建知识网络。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="丰富插件生态">丰富插件生态<a href="https://openhumanwiki.com/en/blog/obsidian-integration#%E4%B8%B0%E5%AF%8C%E6%8F%92%E4%BB%B6%E7%94%9F%E6%80%81" class="hash-link" aria-label="Direct link to 丰富插件生态" title="Direct link to 丰富插件生态" translate="no">​</a></h3>
<p>Obsidian 拥有庞大的插件社区，涵盖了知识图谱、日历视图、看板等多种功能。你可以根据自己的需求，打造专属的知识管理系统。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="openhuman-与-obsidian-的完美结合">OpenHuman 与 Obsidian 的完美结合<a href="https://openhumanwiki.com/en/blog/obsidian-integration#openhuman-%E4%B8%8E-obsidian-%E7%9A%84%E5%AE%8C%E7%BE%8E%E7%BB%93%E5%90%88" class="hash-link" aria-label="Direct link to OpenHuman 与 Obsidian 的完美结合" title="Direct link to OpenHuman 与 Obsidian 的完美结合" translate="no">​</a></h2>
<p>OpenHuman 提供了强大的 Obsidian 集成功能，实现了人与 AI 知识库的双向同步。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="核心功能特性">核心功能特性<a href="https://openhumanwiki.com/en/blog/obsidian-integration#%E6%A0%B8%E5%BF%83%E5%8A%9F%E8%83%BD%E7%89%B9%E6%80%A7" class="hash-link" aria-label="Direct link to 核心功能特性" title="Direct link to 核心功能特性" translate="no">​</a></h3>
<ul>
<li class=""><strong>双向同步</strong>：Obsidian 笔记与 AI 知识库实时同步</li>
<li class=""><strong>智能标签</strong>：自动为笔记添加分类标签</li>
<li class=""><strong>知识抽取</strong>：AI 自动识别并提取关键信息</li>
<li class=""><strong>关联推荐</strong>：基于内容智能推荐相关笔记</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="工作流程示意">工作流程示意<a href="https://openhumanwiki.com/en/blog/obsidian-integration#%E5%B7%A5%E4%BD%9C%E6%B5%81%E7%A8%8B%E7%A4%BA%E6%84%8F" class="hash-link" aria-label="Direct link to 工作流程示意" title="Direct link to 工作流程示意" translate="no">​</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">用户笔记 → OpenHuman 解析 → 知识图谱更新</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    ↑                              ↓</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    ← 智能推荐 ←←←←←←←←←←←←←←←←←←←</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="快速开始5-分钟配置集成">快速开始：5 分钟配置集成<a href="https://openhumanwiki.com/en/blog/obsidian-integration#%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B5-%E5%88%86%E9%92%9F%E9%85%8D%E7%BD%AE%E9%9B%86%E6%88%90" class="hash-link" aria-label="Direct link to 快速开始：5 分钟配置集成" title="Direct link to 快速开始：5 分钟配置集成" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="第一步安装-openhuman-插件">第一步：安装 OpenHuman 插件<a href="https://openhumanwiki.com/en/blog/obsidian-integration#%E7%AC%AC%E4%B8%80%E6%AD%A5%E5%AE%89%E8%A3%85-openhuman-%E6%8F%92%E4%BB%B6" class="hash-link" aria-label="Direct link to 第一步：安装 OpenHuman 插件" title="Direct link to 第一步：安装 OpenHuman 插件" translate="no">​</a></h3>
<p>在 Obsidian 的社区插件市场中搜索「OpenHuman」，点击安装并启用。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="第二步连接知识库">第二步：连接知识库<a href="https://openhumanwiki.com/en/blog/obsidian-integration#%E7%AC%AC%E4%BA%8C%E6%AD%A5%E8%BF%9E%E6%8E%A5%E7%9F%A5%E8%AF%86%E5%BA%93" class="hash-link" aria-label="Direct link to 第二步：连接知识库" title="Direct link to 第二步：连接知识库" translate="no">​</a></h3>
<ol>
<li class="">打开 OpenHuman 设置页面</li>
<li class="">进入「集成」→「Obsidian」选项</li>
<li class="">点击「连接新保险库」</li>
<li class="">选择你的 Obsidian 笔记库文件夹</li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="第三步配置同步选项">第三步：配置同步选项<a href="https://openhumanwiki.com/en/blog/obsidian-integration#%E7%AC%AC%E4%B8%89%E6%AD%A5%E9%85%8D%E7%BD%AE%E5%90%8C%E6%AD%A5%E9%80%89%E9%A1%B9" class="hash-link" aria-label="Direct link to 第三步：配置同步选项" title="Direct link to 第三步：配置同步选项" translate="no">​</a></h3>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">openhuman_sync</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">vault_path</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"D:/Obsidian/MyVault"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">auto_sync</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean important" style="color:#36acaa">true</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">sync_interval</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">5</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic"># 分钟</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">sync_direction</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"bidirectional"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">exclude_patterns</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"**/Templates/**"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"**/.obsidian/**"</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="第四步开始使用">第四步：开始使用<a href="https://openhumanwiki.com/en/blog/obsidian-integration#%E7%AC%AC%E5%9B%9B%E6%AD%A5%E5%BC%80%E5%A7%8B%E4%BD%BF%E7%94%A8" class="hash-link" aria-label="Direct link to 第四步：开始使用" title="Direct link to 第四步：开始使用" translate="no">​</a></h3>
<p>配置完成后，OpenHuman 会自动扫描你的笔记库，建立索引并开始同步。你可以在 AI 对话中直接引用 Obsidian 中的笔记内容。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="双向同步如何工作">双向同步如何工作<a href="https://openhumanwiki.com/en/blog/obsidian-integration#%E5%8F%8C%E5%90%91%E5%90%8C%E6%AD%A5%E5%A6%82%E4%BD%95%E5%B7%A5%E4%BD%9C" class="hash-link" aria-label="Direct link to 双向同步如何工作" title="Direct link to 双向同步如何工作" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="同步机制详解">同步机制详解<a href="https://openhumanwiki.com/en/blog/obsidian-integration#%E5%90%8C%E6%AD%A5%E6%9C%BA%E5%88%B6%E8%AF%A6%E8%A7%A3" class="hash-link" aria-label="Direct link to 同步机制详解" title="Direct link to 同步机制详解" translate="no">​</a></h3>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="从-obsidian-到-openhuman">从 Obsidian 到 OpenHuman<a href="https://openhumanwiki.com/en/blog/obsidian-integration#%E4%BB%8E-obsidian-%E5%88%B0-openhuman" class="hash-link" aria-label="Direct link to 从 Obsidian 到 OpenHuman" title="Direct link to 从 Obsidian 到 OpenHuman" translate="no">​</a></h4>
<p>当你在 Obsidian 中创建或修改笔记时：</p>
<ol>
<li class=""><strong>变更检测</strong>：插件监控笔记文件的修改</li>
<li class=""><strong>格式解析</strong>：提取 Markdown 内容、元数据和链接关系</li>
<li class=""><strong>知识入库</strong>：更新 OpenHuman 知识图谱</li>
<li class=""><strong>关联更新</strong>：重新计算笔记间的关联度</li>
</ol>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="从-openhuman-到-obsidian">从 OpenHuman 到 Obsidian<a href="https://openhumanwiki.com/en/blog/obsidian-integration#%E4%BB%8E-openhuman-%E5%88%B0-obsidian" class="hash-link" aria-label="Direct link to 从 OpenHuman 到 Obsidian" title="Direct link to 从 OpenHuman 到 Obsidian" translate="no">​</a></h4>
<p>当 AI 生成新知识或建议时：</p>
<ol>
<li class=""><strong>内容生成</strong>：AI 根据上下文生成知识建议</li>
<li class=""><strong>格式转换</strong>：将 AI 内容转换为 Markdown 格式</li>
<li class=""><strong>位置推荐</strong>：基于现有笔记关系推荐存放位置</li>
<li class=""><strong>用户确认</strong>：用户确认后写入 Obsidian</li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="冲突处理">冲突处理<a href="https://openhumanwiki.com/en/blog/obsidian-integration#%E5%86%B2%E7%AA%81%E5%A4%84%E7%90%86" class="hash-link" aria-label="Direct link to 冲突处理" title="Direct link to 冲突处理" translate="no">​</a></h3>
<p>当同一笔记在两端同时修改时：</p>
<ul>
<li class=""><strong>智能合并</strong>：尝试自动合并不冲突的修改</li>
<li class=""><strong>冲突提示</strong>：无法自动合并时，提示用户手动解决</li>
<li class=""><strong>版本历史</strong>：保留修改历史，随时可回溯</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="进阶使用技巧">进阶使用技巧<a href="https://openhumanwiki.com/en/blog/obsidian-integration#%E8%BF%9B%E9%98%B6%E4%BD%BF%E7%94%A8%E6%8A%80%E5%B7%A7" class="hash-link" aria-label="Direct link to 进阶使用技巧" title="Direct link to 进阶使用技巧" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="利用知识图谱发现关联">利用知识图谱发现关联<a href="https://openhumanwiki.com/en/blog/obsidian-integration#%E5%88%A9%E7%94%A8%E7%9F%A5%E8%AF%86%E5%9B%BE%E8%B0%B1%E5%8F%91%E7%8E%B0%E5%85%B3%E8%81%94" class="hash-link" aria-label="Direct link to 利用知识图谱发现关联" title="Direct link to 利用知识图谱发现关联" translate="no">​</a></h3>
<p>启用知识图谱视图后，你可以直观地看到笔记之间的关联网络。这有助于发现隐藏的知识连接，激发新的思考。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="智能模板提升效率">智能模板提升效率<a href="https://openhumanwiki.com/en/blog/obsidian-integration#%E6%99%BA%E8%83%BD%E6%A8%A1%E6%9D%BF%E6%8F%90%E5%8D%87%E6%95%88%E7%8E%87" class="hash-link" aria-label="Direct link to 智能模板提升效率" title="Direct link to 智能模板提升效率" translate="no">​</a></h3>
<p>创建标准化的笔记模板，让 AI 能够更好地理解和处理你的笔记内容：</p>
<div class="language-markdown codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-markdown codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token front-matter-block punctuation" style="color:#393A34">---</span><span class="token front-matter-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token front-matter-block"></span><span class="token front-matter-block front-matter yaml language-yaml key atrule" style="color:#00a4db">type</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">:</span><span class="token front-matter-block front-matter yaml language-yaml"> concept</span><br></div><div class="token-line" style="color:#393A34"><span class="token front-matter-block front-matter yaml language-yaml"></span><span class="token front-matter-block front-matter yaml language-yaml key atrule" style="color:#00a4db">tags</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">:</span><span class="token front-matter-block front-matter yaml language-yaml"> </span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">[</span><span class="token front-matter-block front-matter yaml language-yaml">领域标签</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">]</span><span class="token front-matter-block front-matter yaml language-yaml"></span><br></div><div class="token-line" style="color:#393A34"><span class="token front-matter-block front-matter yaml language-yaml"></span><span class="token front-matter-block front-matter yaml language-yaml key atrule" style="color:#00a4db">related</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">:</span><span class="token front-matter-block front-matter yaml language-yaml"></span><br></div><div class="token-line" style="color:#393A34"><span class="token front-matter-block front-matter yaml language-yaml">  </span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">-</span><span class="token front-matter-block front-matter yaml language-yaml"> </span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">[</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">[</span><span class="token front-matter-block front-matter yaml language-yaml">相关笔记1</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">]</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">]</span><span class="token front-matter-block front-matter yaml language-yaml"></span><br></div><div class="token-line" style="color:#393A34"><span class="token front-matter-block front-matter yaml language-yaml">  </span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">-</span><span class="token front-matter-block front-matter yaml language-yaml"> </span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">[</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">[</span><span class="token front-matter-block front-matter yaml language-yaml">相关笔记2</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">]</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">]</span><span class="token front-matter-block front-matter yaml language-yaml"></span><br></div><div class="token-line" style="color:#393A34"><span class="token front-matter-block front-matter yaml language-yaml"></span><span class="token front-matter-block front-matter yaml language-yaml key atrule" style="color:#00a4db">created</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">:</span><span class="token front-matter-block front-matter yaml language-yaml"> </span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">{</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">{</span><span class="token front-matter-block front-matter yaml language-yaml">date</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">}</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">}</span><span class="token front-matter-block front-matter yaml language-yaml"></span><br></div><div class="token-line" style="color:#393A34"><span class="token front-matter-block front-matter yaml language-yaml"></span><span class="token front-matter-block front-matter yaml language-yaml key atrule" style="color:#00a4db">summary</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:#393A34">:</span><span class="token front-matter-block front-matter yaml language-yaml"> 一句话描述</span><span class="token front-matter-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token front-matter-block"></span><span class="token front-matter-block punctuation" style="color:#393A34">---</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token title important punctuation" style="color:#393A34">#</span><span class="token title important"> 标题</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token title important punctuation" style="color:#393A34">##</span><span class="token title important"> 定义</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token title important punctuation" style="color:#393A34">##</span><span class="token title important"> 例子</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token title important punctuation" style="color:#393A34">##</span><span class="token title important"> 关联</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="定期整理与-ai-对话">定期整理与 AI 对话<a href="https://openhumanwiki.com/en/blog/obsidian-integration#%E5%AE%9A%E6%9C%9F%E6%95%B4%E7%90%86%E4%B8%8E-ai-%E5%AF%B9%E8%AF%9D" class="hash-link" aria-label="Direct link to 定期整理与 AI 对话" title="Direct link to 定期整理与 AI 对话" translate="no">​</a></h3>
<p>每隔一段时间，用 AI 帮你梳理近期笔记，发现知识盲点并提出改进建议。这是一种高效的主动学习方法。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="实际应用场景">实际应用场景<a href="https://openhumanwiki.com/en/blog/obsidian-integration#%E5%AE%9E%E9%99%85%E5%BA%94%E7%94%A8%E5%9C%BA%E6%99%AF" class="hash-link" aria-label="Direct link to 实际应用场景" title="Direct link to 实际应用场景" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="个人知识库管理">个人知识库管理<a href="https://openhumanwiki.com/en/blog/obsidian-integration#%E4%B8%AA%E4%BA%BA%E7%9F%A5%E8%AF%86%E5%BA%93%E7%AE%A1%E7%90%86" class="hash-link" aria-label="Direct link to 个人知识库管理" title="Direct link to 个人知识库管理" translate="no">​</a></h3>
<p>将你的阅读笔记、学习心得、项目文档统一管理。AI 可以帮你快速检索、总结和关联。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="研究与写作">研究与写作<a href="https://openhumanwiki.com/en/blog/obsidian-integration#%E7%A0%94%E7%A9%B6%E4%B8%8E%E5%86%99%E4%BD%9C" class="hash-link" aria-label="Direct link to 研究与写作" title="Direct link to 研究与写作" translate="no">​</a></h3>
<p>在撰写论文或博客时，快速调用相关资料。AI 会理解你的写作风格，保持内容一致性。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="团队知识共享">团队知识共享<a href="https://openhumanwiki.com/en/blog/obsidian-integration#%E5%9B%A2%E9%98%9F%E7%9F%A5%E8%AF%86%E5%85%B1%E4%BA%AB" class="hash-link" aria-label="Direct link to 团队知识共享" title="Direct link to 团队知识共享" translate="no">​</a></h3>
<p>团队成员共享一个 Obsidian 库，OpenHuman 帮助整合每个人的知识贡献，形成团队智慧库。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="常见问题">常见问题<a href="https://openhumanwiki.com/en/blog/obsidian-integration#%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98" class="hash-link" aria-label="Direct link to 常见问题" title="Direct link to 常见问题" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="q-同步会影响-obsidian-性能吗">Q: 同步会影响 Obsidian 性能吗？<a href="https://openhumanwiki.com/en/blog/obsidian-integration#q-%E5%90%8C%E6%AD%A5%E4%BC%9A%E5%BD%B1%E5%93%8D-obsidian-%E6%80%A7%E8%83%BD%E5%90%97" class="hash-link" aria-label="Direct link to Q: 同步会影响 Obsidian 性能吗？" title="Direct link to Q: 同步会影响 Obsidian 性能吗？" translate="no">​</a></h3>
<p>A: OpenHuman 采用增量同步，只处理变更的文件。日常使用中几乎不会影响 Obsidian 的响应速度。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="q-我的笔记安全吗">Q: 我的笔记安全吗？<a href="https://openhumanwiki.com/en/blog/obsidian-integration#q-%E6%88%91%E7%9A%84%E7%AC%94%E8%AE%B0%E5%AE%89%E5%85%A8%E5%90%97" class="hash-link" aria-label="Direct link to Q: 我的笔记安全吗？" title="Direct link to Q: 我的笔记安全吗？" translate="no">​</a></h3>
<p>A: 所有数据存储在本地，OpenHuman 不会上传你的笔记内容到第三方服务器。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="q-支持同步到多个设备吗">Q: 支持同步到多个设备吗？<a href="https://openhumanwiki.com/en/blog/obsidian-integration#q-%E6%94%AF%E6%8C%81%E5%90%8C%E6%AD%A5%E5%88%B0%E5%A4%9A%E4%B8%AA%E8%AE%BE%E5%A4%87%E5%90%97" class="hash-link" aria-label="Direct link to Q: 支持同步到多个设备吗？" title="Direct link to Q: 支持同步到多个设备吗？" translate="no">​</a></h3>
<p>A: 支持。请使用 Obsidian 官方同步服务或 Syncthing 等工具同步本地文件，OpenHuman 会自动适配。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="总结">总结<a href="https://openhumanwiki.com/en/blog/obsidian-integration#%E6%80%BB%E7%BB%93" class="hash-link" aria-label="Direct link to 总结" title="Direct link to 总结" translate="no">​</a></h2>
<p>OpenHuman 与 Obsidian 的集成，为知识管理带来了 AI 赋能的可能性。通过双向同步，你可以：</p>
<ul>
<li class="">充分利用本地优先的隐私优势</li>
<li class="">借助 AI 能力挖掘知识价值</li>
<li class="">构建真正属于你自己的「第二大脑」</li>
</ul>
<p>立即开始使用，将你的 Obsidian 笔记库与 OpenHuman 连接，开启智能知识管理的新体验！</p>
<p>想了解更多集成方案，请查阅我们的<a class="" href="https://openhumanwiki.com/en/docs/category/%E7%B3%BB%E7%BB%9F%E9%9B%86%E6%88%90">集成文档</a>或加入社区讨论。</p>]]></content:encoded>
            <category>Obsidian</category>
            <category>知识管理</category>
            <category>Markdown</category>
        </item>
        <item>
            <title><![CDATA[自动模型路由详解：如何为每个任务选择最佳 AI 模型]]></title>
            <link>https://openhumanwiki.com/en/blog/model-routing-explained</link>
            <guid>https://openhumanwiki.com/en/blog/model-routing-explained</guid>
            <pubDate>Fri, 30 May 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[深入解析 OpenHuman 的 Model Routing 机制，了解如何通过 hint 指令和自动模型选择提升 AI 任务效率。]]></description>
            <content:encoded><![CDATA[<p>在 AI 应用开发中，选择合适的模型对于平衡成本、速度和效果至关重要。OpenHuman 提供了强大的 <strong>Model Routing（模型路由）</strong> 功能，能够根据任务类型自动选择最合适的 AI 模型。本文将详细介绍这一机制的工作原理和使用方法。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="什么是-model-routing">什么是 Model Routing？<a href="https://openhumanwiki.com/en/blog/model-routing-explained#%E4%BB%80%E4%B9%88%E6%98%AF-model-routing" class="hash-link" aria-label="Direct link to 什么是 Model Routing？" title="Direct link to 什么是 Model Routing？" translate="no">​</a></h2>
<p>Model Routing 是 OpenHuman 的核心特性之一，它允许系统根据输入任务的特征自动分配最适合的 AI 模型。不同于传统的固定模型调用，路由机制会分析任务需求，考虑以下因素：</p>
<ul>
<li class=""><strong>任务复杂度</strong>：简单问答 vs 复杂推理</li>
<li class=""><strong>响应时间要求</strong>：需要快速响应还是允许较长等待</li>
<li class=""><strong>成本优化</strong>：在保证质量的前提下控制 token 消耗</li>
<li class=""><strong>上下文长度</strong>：短文本处理 vs 长文档分析</li>
</ul>
<p>通过智能路由，OpenHuman 可以在保证任务质量的同时，显著降低不必要的成本支出。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="hint-指令精准控制模型选择">hint 指令：精准控制模型选择<a href="https://openhumanwiki.com/en/blog/model-routing-explained#hint-%E6%8C%87%E4%BB%A4%E7%B2%BE%E5%87%86%E6%8E%A7%E5%88%B6%E6%A8%A1%E5%9E%8B%E9%80%89%E6%8B%A9" class="hash-link" aria-label="Direct link to hint 指令：精准控制模型选择" title="Direct link to hint 指令：精准控制模型选择" translate="no">​</a></h2>
<p>OpenHuman 提供了 <code>hint</code> 指令系统，让开发者可以精确控制模型选择行为。<code>hint</code> 是写在任务描述中的特殊标记，格式为 <code>hint:xxx</code>。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="常见的-hint-指令">常见的 hint 指令<a href="https://openhumanwiki.com/en/blog/model-routing-explained#%E5%B8%B8%E8%A7%81%E7%9A%84-hint-%E6%8C%87%E4%BB%A4" class="hash-link" aria-label="Direct link to 常见的 hint 指令" title="Direct link to 常见的 hint 指令" translate="no">​</a></h3>
<div class="language-markdown codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-markdown codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">hint:reasoning   # 启用深度推理模式，适合复杂逻辑分析</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">hint:fast        # 启用快速响应模式，适合简单任务</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">hint:creative    # 启用创意模式，适合写作、创意任务</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">hint:precise     # 启用精确模式，适合需要高准确率的场景</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="使用示例">使用示例<a href="https://openhumanwiki.com/en/blog/model-routing-explained#%E4%BD%BF%E7%94%A8%E7%A4%BA%E4%BE%8B" class="hash-link" aria-label="Direct link to 使用示例" title="Direct link to 使用示例" translate="no">​</a></h3>
<p>当你需要模型进行复杂的数学推理时，可以使用：</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">请帮我解决这道数学题 hint:reasoning</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">题目：一个完全图 K5 有多少条不同的哈密顿回路？</span><br></div></code></pre></div></div>
<p>系统会自动识别 <code>hint:reasoning</code> 指令，分配具备强推理能力的模型进行处理。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="model-routing-的工作原理">Model Routing 的工作原理<a href="https://openhumanwiki.com/en/blog/model-routing-explained#model-routing-%E7%9A%84%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86" class="hash-link" aria-label="Direct link to Model Routing 的工作原理" title="Direct link to Model Routing 的工作原理" translate="no">​</a></h2>
<p>OpenHuman 的模型路由系统包含以下核心组件：</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-任务分类器">1. 任务分类器<a href="https://openhumanwiki.com/en/blog/model-routing-explained#1-%E4%BB%BB%E5%8A%A1%E5%88%86%E7%B1%BB%E5%99%A8" class="hash-link" aria-label="Direct link to 1. 任务分类器" title="Direct link to 1. 任务分类器" translate="no">​</a></h3>
<p>任务分类器分析输入文本，识别任务类型和特征：</p>
<ul>
<li class=""><strong>分析阶段</strong>：解析任务描述，提取关键信息</li>
<li class=""><strong>分类阶段</strong>：将任务归类到预设的类别（推理、创作、问答等）</li>
<li class=""><strong>优先级排序</strong>：根据多个维度对任务进行评估</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-模型池管理">2. 模型池管理<a href="https://openhumanwiki.com/en/blog/model-routing-explained#2-%E6%A8%A1%E5%9E%8B%E6%B1%A0%E7%AE%A1%E7%90%86" class="hash-link" aria-label="Direct link to 2. 模型池管理" title="Direct link to 2. 模型池管理" translate="no">​</a></h3>
<p>OpenHuman 维护一个模型池，包含多种不同特性的模型：</p>
<table><thead><tr><th>模型类型</th><th>特点</th><th>适用场景</th></tr></thead><tbody><tr><td>高速模型</td><td>响应快、成本低</td><td>简单问答、格式转换</td></tr><tr><td>推理模型</td><td>逻辑强、深度分析</td><td>数学推导、代码调试</td></tr><tr><td>创意模型</td><td>创意足、文笔好</td><td>文章写作、营销文案</td></tr><tr><td>精确模型</td><td>准确率高、稳定</td><td>事实问答、数据分析</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-动态调度器">3. 动态调度器<a href="https://openhumanwiki.com/en/blog/model-routing-explained#3-%E5%8A%A8%E6%80%81%E8%B0%83%E5%BA%A6%E5%99%A8" class="hash-link" aria-label="Direct link to 3. 动态调度器" title="Direct link to 3. 动态调度器" translate="no">​</a></h3>
<p>动态调度器根据任务特征和模型状态，做出最优分配决策：</p>
<ul>
<li class=""><strong>实时监控</strong>：跟踪各模型的负载和响应时间</li>
<li class=""><strong>智能排队</strong>：优化任务分配，减少等待时间</li>
<li class=""><strong>故障转移</strong>：模型不可用时自动切换</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="如何配置默认路由策略">如何配置默认路由策略<a href="https://openhumanwiki.com/en/blog/model-routing-explained#%E5%A6%82%E4%BD%95%E9%85%8D%E7%BD%AE%E9%BB%98%E8%AE%A4%E8%B7%AF%E7%94%B1%E7%AD%96%E7%95%A5" class="hash-link" aria-label="Direct link to 如何配置默认路由策略" title="Direct link to 如何配置默认路由策略" translate="no">​</a></h2>
<p>在 OpenHuman 配置文件中，你可以设置默认的路由策略：</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">model_routing</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">default_strategy</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"auto"</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic"># auto | fast | balanced | quality</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">fallback_enabled</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean important" style="color:#36acaa">true</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">custom_hints</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">enabled</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean important" style="color:#36acaa">true</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">priority</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"user"</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic"># user &gt; system &gt; default</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="策略选项说明">策略选项说明<a href="https://openhumanwiki.com/en/blog/model-routing-explained#%E7%AD%96%E7%95%A5%E9%80%89%E9%A1%B9%E8%AF%B4%E6%98%8E" class="hash-link" aria-label="Direct link to 策略选项说明" title="Direct link to 策略选项说明" translate="no">​</a></h3>
<ul>
<li class=""><strong>auto</strong>：系统自动选择最优模型</li>
<li class=""><strong>fast</strong>：优先选择高速模型</li>
<li class=""><strong>balanced</strong>：平衡速度和质量</li>
<li class=""><strong>quality</strong>：优先保证输出质量</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="实践建议">实践建议<a href="https://openhumanwiki.com/en/blog/model-routing-explained#%E5%AE%9E%E8%B7%B5%E5%BB%BA%E8%AE%AE" class="hash-link" aria-label="Direct link to 实践建议" title="Direct link to 实践建议" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="充分利用-hint-指令">充分利用 hint 指令<a href="https://openhumanwiki.com/en/blog/model-routing-explained#%E5%85%85%E5%88%86%E5%88%A9%E7%94%A8-hint-%E6%8C%87%E4%BB%A4" class="hash-link" aria-label="Direct link to 充分利用 hint 指令" title="Direct link to 充分利用 hint 指令" translate="no">​</a></h3>
<p>对于关键任务，主动使用 hint 指令可以获得更好的结果。例如，在进行代码审查时使用 <code>hint:reasoning</code> 可以获得更深入的分析。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="根据场景选择策略">根据场景选择策略<a href="https://openhumanwiki.com/en/blog/model-routing-explained#%E6%A0%B9%E6%8D%AE%E5%9C%BA%E6%99%AF%E9%80%89%E6%8B%A9%E7%AD%96%E7%95%A5" class="hash-link" aria-label="Direct link to 根据场景选择策略" title="Direct link to 根据场景选择策略" translate="no">​</a></h3>
<table><thead><tr><th>应用场景</th><th>推荐策略</th><th>说明</th></tr></thead><tbody><tr><td>对话机器人</td><td>fast</td><td>注重响应速度</td></tr><tr><td>内容生成</td><td>balanced</td><td>平衡速度和质量</td></tr><tr><td>复杂分析</td><td>quality</td><td>优先质量</td></tr><tr><td>批处理任务</td><td>auto</td><td>让系统优化</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="监控和调优">监控和调优<a href="https://openhumanwiki.com/en/blog/model-routing-explained#%E7%9B%91%E6%8E%A7%E5%92%8C%E8%B0%83%E4%BC%98" class="hash-link" aria-label="Direct link to 监控和调优" title="Direct link to 监控和调优" translate="no">​</a></h3>
<p>定期查看路由统计，了解模型使用分布，根据实际效果调整策略配置。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="总结">总结<a href="https://openhumanwiki.com/en/blog/model-routing-explained#%E6%80%BB%E7%BB%93" class="hash-link" aria-label="Direct link to 总结" title="Direct link to 总结" translate="no">​</a></h2>
<p>Model Routing 是 OpenHuman 提升 AI 应用效率的关键特性。通过合理使用 <code>hint</code> 指令和配置路由策略，开发者可以在保证任务质量的同时，实现成本优化和性能提升。</p>
<p>掌握模型路由的原理和使用技巧，将帮助你构建更加智能、高效的 AI 应用。开始探索 OpenHuman 的模型路由功能，解锁 AI 应用的无限可能！</p>
<p>如果你有任何问题，欢迎在 GitHub 仓库中提交 Issue 或参与社区讨论。</p>]]></content:encoded>
            <category>AI模型路由</category>
            <category>OpenHuman</category>
            <category>教程</category>
        </item>
        <item>
            <title><![CDATA[Token 压缩完整指南：如何降低 AI 使用成本]]></title>
            <link>https://openhumanwiki.com/en/blog/token-compression-guide</link>
            <guid>https://openhumanwiki.com/en/blog/token-compression-guide</guid>
            <pubDate>Thu, 29 May 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[深入了解 OpenHuman TokenJuice 压缩技术，学习如何通过智能压缩降低 60% 的 AI 使用成本。]]></description>
            <content:encoded><![CDATA[<p>在使用大语言模型时，Token 成本往往是最大的支出之一。一个中等规模的 AI 应用，每月在 Token 上的花费可能轻松超过数千美元。OpenHuman 的 <strong>TokenJuice</strong> 压缩技术提供了一种高效的解决方案——在不损失核心信息的前提下，最多可以<strong>减少 60% 的 Token 消耗</strong>。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="什么是-tokenjuice">什么是 TokenJuice？<a href="https://openhumanwiki.com/en/blog/token-compression-guide#%E4%BB%80%E4%B9%88%E6%98%AF-tokenjuice" class="hash-link" aria-label="Direct link to 什么是 TokenJuice？" title="Direct link to 什么是 TokenJuice？" translate="no">​</a></h2>
<p>TokenJuice 是 OpenHuman 自主研发的智能文本压缩技术，专门针对 AI 提示词（Prompt）和上下文内容进行优化。与通用的 gzip 或 zstd 压缩算法不同，TokenJuice 的设计目标是：</p>
<ul>
<li class=""><strong>保持语义完整性</strong>：压缩后的文本仍能被 LLM 正确理解</li>
<li class=""><strong>保留关键指令</strong>：系统提示和约束条件完整保留</li>
<li class=""><strong>自适应压缩比</strong>：根据内容类型动态调整压缩强度</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="token-压缩如何工作">Token 压缩如何工作<a href="https://openhumanwiki.com/en/blog/token-compression-guide#token-%E5%8E%8B%E7%BC%A9%E5%A6%82%E4%BD%95%E5%B7%A5%E4%BD%9C" class="hash-link" aria-label="Direct link to Token 压缩如何工作" title="Direct link to Token 压缩如何工作" translate="no">​</a></h2>
<p>TokenJuice 采用三层压缩架构：</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="第一层结构化压缩">第一层：结构化压缩<a href="https://openhumanwiki.com/en/blog/token-compression-guide#%E7%AC%AC%E4%B8%80%E5%B1%82%E7%BB%93%E6%9E%84%E5%8C%96%E5%8E%8B%E7%BC%A9" class="hash-link" aria-label="Direct link to 第一层：结构化压缩" title="Direct link to 第一层：结构化压缩" translate="no">​</a></h3>
<p>识别文本中的结构化元素（JSON、Markdown、表格、代码块），对非核心内容进行精简：</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">原文：The user asked us to "please calculate the total revenue </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      for Q1 2025 which includes January, February, and March"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">压缩后：Q1 2025 营收总计（含 1-3 月）</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="第二层语义压缩">第二层：语义压缩<a href="https://openhumanwiki.com/en/blog/token-compression-guide#%E7%AC%AC%E4%BA%8C%E5%B1%82%E8%AF%AD%E4%B9%89%E5%8E%8B%E7%BC%A9" class="hash-link" aria-label="Direct link to 第二层：语义压缩" title="Direct link to 第二层：语义压缩" translate="no">​</a></h3>
<p>使用小型专用模型识别并合并语义重复的内容，移除冗余修饰词：</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">原文：In order to effectively and efficiently process the </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      aforementioned request in a timely manner...</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">压缩后：处理上述请求</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="第三层上下文感知压缩">第三层：上下文感知压缩<a href="https://openhumanwiki.com/en/blog/token-compression-guide#%E7%AC%AC%E4%B8%89%E5%B1%82%E4%B8%8A%E4%B8%8B%E6%96%87%E6%84%9F%E7%9F%A5%E5%8E%8B%E7%BC%A9" class="hash-link" aria-label="Direct link to 第三层：上下文感知压缩" title="Direct link to 第三层：上下文感知压缩" translate="no">​</a></h3>
<p>根据对话历史和任务类型，动态决定哪些信息需要完整保留，哪些可以精简：</p>
<ul>
<li class=""><strong>保留</strong>：关键数字、日期、人名、明确的指令</li>
<li class=""><strong>精简</strong>：重复的解释、显而易见的推导、通用礼貌用语</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="实际效果测试">实际效果测试<a href="https://openhumanwiki.com/en/blog/token-compression-guide#%E5%AE%9E%E9%99%85%E6%95%88%E6%9E%9C%E6%B5%8B%E8%AF%95" class="hash-link" aria-label="Direct link to 实际效果测试" title="Direct link to 实际效果测试" translate="no">​</a></h2>
<p>我们在多个场景下进行了基准测试：</p>
<table><thead><tr><th>场景</th><th>原始 Token</th><th>压缩后 Token</th><th>节省比例</th></tr></thead><tbody><tr><td>长文档问答</td><td>8,200</td><td>3,600</td><td>56%</td></tr><tr><td>多轮对话摘要</td><td>12,500</td><td>4,800</td><td>62%</td></tr><tr><td>代码审查</td><td>6,300</td><td>2,900</td><td>54%</td></tr><tr><td>数据分析报告</td><td>15,000</td><td>6,200</td><td>59%</td></tr></tbody></table>
<p><strong>关键发现</strong>：压缩效果与内容类型高度相关。结构化程度高、重复内容多的文本，压缩效果最好。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="适用场景与限制">适用场景与限制<a href="https://openhumanwiki.com/en/blog/token-compression-guide#%E9%80%82%E7%94%A8%E5%9C%BA%E6%99%AF%E4%B8%8E%E9%99%90%E5%88%B6" class="hash-link" aria-label="Direct link to 适用场景与限制" title="Direct link to 适用场景与限制" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="最适合的场景">最适合的场景<a href="https://openhumanwiki.com/en/blog/token-compression-guide#%E6%9C%80%E9%80%82%E5%90%88%E7%9A%84%E5%9C%BA%E6%99%AF" class="hash-link" aria-label="Direct link to 最适合的场景" title="Direct link to 最适合的场景" translate="no">​</a></h3>
<ol>
<li class=""><strong>长文档处理</strong>：分析一篇 50 页的 PDF 报告，Token 消耗可降低一半以上</li>
<li class=""><strong>多轮对话</strong>：在长程对话中压缩历史消息，保持上下文同时控制成本</li>
<li class=""><strong>批量处理</strong>：对大量相似文档进行结构化提取</li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="不适合的场景">不适合的场景<a href="https://openhumanwiki.com/en/blog/token-compression-guide#%E4%B8%8D%E9%80%82%E5%90%88%E7%9A%84%E5%9C%BA%E6%99%AF" class="hash-link" aria-label="Direct link to 不适合的场景" title="Direct link to 不适合的场景" translate="no">​</a></h3>
<ol>
<li class=""><strong>诗歌创作</strong>：需要保持原文韵律和风格，压缩会破坏创意表达</li>
<li class=""><strong>精确代码生成</strong>：压缩可能影响代码的可读性和安全性</li>
<li class=""><strong>实时口语转写</strong>：需要保留原始表达方式和口语特征</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="节省成本计算">节省成本计算<a href="https://openhumanwiki.com/en/blog/token-compression-guide#%E8%8A%82%E7%9C%81%E6%88%90%E6%9C%AC%E8%AE%A1%E7%AE%97" class="hash-link" aria-label="Direct link to 节省成本计算" title="Direct link to 节省成本计算" translate="no">​</a></h2>
<p>以 GPT-4o 的定价为基准（$15/1M 输出 Token）：</p>
<ul>
<li class=""><strong>未使用 TokenJuice</strong>：每月 100 万次 API 调用，平均每次消耗 500 Token = $7,500/月</li>
<li class=""><strong>使用 TokenJuice（55% 压缩率）</strong>：相同调用量消耗 225 Token = $3,375/月</li>
<li class=""><strong>每月节省</strong>：$4,125（约 55%）</li>
</ul>
<p>对于大型企业用户，这意味着每年可节省超过 <strong>50 万美元</strong>的 AI 成本。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="如何集成到项目">如何集成到项目<a href="https://openhumanwiki.com/en/blog/token-compression-guide#%E5%A6%82%E4%BD%95%E9%9B%86%E6%88%90%E5%88%B0%E9%A1%B9%E7%9B%AE" class="hash-link" aria-label="Direct link to 如何集成到项目" title="Direct link to 如何集成到项目" translate="no">​</a></h2>
<p>TokenJuice 提供多种集成方式：</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="nodejs-sdk">Node.js SDK<a href="https://openhumanwiki.com/en/blog/token-compression-guide#nodejs-sdk" class="hash-link" aria-label="Direct link to Node.js SDK" title="Direct link to Node.js SDK" translate="no">​</a></h3>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> TokenJuice </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@openhuman/tokenjuice'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> compressor </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">TokenJuice</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  level</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'balanced'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// 'aggressive' | 'balanced' | 'conservative'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  preserveStructure</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> compressed </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> compressor</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">compress</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">longPrompt</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> response </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> openai</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">chat</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">completions</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">create</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  messages</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> role</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'user'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> content</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> compressed </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="openai-兼容-api-代理">OpenAI 兼容 API 代理<a href="https://openhumanwiki.com/en/blog/token-compression-guide#openai-%E5%85%BC%E5%AE%B9-api-%E4%BB%A3%E7%90%86" class="hash-link" aria-label="Direct link to OpenAI 兼容 API 代理" title="Direct link to OpenAI 兼容 API 代理" translate="no">​</a></h3>
<p>对于已有代码不想大规模修改的团队，可以部署 TokenJuice API 代理：</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">npm install @openhuman/tokenjuice-proxy</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># 启动代理</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">tokenjuice-proxy --port 8080 --api-key $OPENAI_API_KEY</span><br></div></code></pre></div></div>
<p>然后将所有 API 请求发送到 <code>http://localhost:8080</code>，代理会自动进行压缩和解压。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="最佳实践">最佳实践<a href="https://openhumanwiki.com/en/blog/token-compression-guide#%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5" class="hash-link" aria-label="Direct link to 最佳实践" title="Direct link to 最佳实践" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-分层压缩策略">1. 分层压缩策略<a href="https://openhumanwiki.com/en/blog/token-compression-guide#1-%E5%88%86%E5%B1%82%E5%8E%8B%E7%BC%A9%E7%AD%96%E7%95%A5" class="hash-link" aria-label="Direct link to 1. 分层压缩策略" title="Direct link to 1. 分层压缩策略" translate="no">​</a></h3>
<p>不要对所有内容采用同一压缩级别：</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> messages </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> role</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'system'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> content</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> systemPrompt</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> compress</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">false</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> role</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'user'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> content</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> userQuery</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> compress</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'conservative'</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> role</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'assistant'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> content</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> historyMessages</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> compress</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'aggressive'</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-保持关键约束">2. 保持关键约束<a href="https://openhumanwiki.com/en/blog/token-compression-guide#2-%E4%BF%9D%E6%8C%81%E5%85%B3%E9%94%AE%E7%BA%A6%E6%9D%9F" class="hash-link" aria-label="Direct link to 2. 保持关键约束" title="Direct link to 2. 保持关键约束" translate="no">​</a></h3>
<p>确保系统提示中的安全约束和核心指令不被压缩：</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> config </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  preservePatterns</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token regex regex-delimiter" style="color:#36acaa">/</span><span class="token regex regex-source language-regex" style="color:#36acaa">never</span><span class="token regex regex-source language-regex alternation keyword" style="color:#00009f">|</span><span class="token regex regex-source language-regex" style="color:#36acaa">always</span><span class="token regex regex-source language-regex alternation keyword" style="color:#00009f">|</span><span class="token regex regex-source language-regex" style="color:#36acaa">必须</span><span class="token regex regex-source language-regex alternation keyword" style="color:#00009f">|</span><span class="token regex regex-source language-regex" style="color:#36acaa">禁止</span><span class="token regex regex-delimiter" style="color:#36acaa">/</span><span class="token regex regex-flags" style="color:#36acaa">i</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token regex regex-delimiter" style="color:#36acaa">/</span><span class="token regex regex-source language-regex" style="color:#36acaa">privacy</span><span class="token regex regex-source language-regex alternation keyword" style="color:#00009f">|</span><span class="token regex regex-source language-regex" style="color:#36acaa">safety</span><span class="token regex regex-source language-regex alternation keyword" style="color:#00009f">|</span><span class="token regex regex-source language-regex" style="color:#36acaa">安全</span><span class="token regex regex-source language-regex alternation keyword" style="color:#00009f">|</span><span class="token regex regex-source language-regex" style="color:#36acaa">隐私</span><span class="token regex regex-delimiter" style="color:#36acaa">/</span><span class="token regex regex-flags" style="color:#36acaa">i</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-监控压缩质量">3. 监控压缩质量<a href="https://openhumanwiki.com/en/blog/token-compression-guide#3-%E7%9B%91%E6%8E%A7%E5%8E%8B%E7%BC%A9%E8%B4%A8%E9%87%8F" class="hash-link" aria-label="Direct link to 3. 监控压缩质量" title="Direct link to 3. 监控压缩质量" translate="no">​</a></h3>
<p>定期检查压缩后的输出质量：</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> quality </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> compressor</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">evaluate</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">original</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> compressed</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">quality</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">semantic_similarity </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0.85</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token builtin">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">warn</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'压缩质量下降，建议降低压缩级别'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="常见问题">常见问题<a href="https://openhumanwiki.com/en/blog/token-compression-guide#%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98" class="hash-link" aria-label="Direct link to 常见问题" title="Direct link to 常见问题" translate="no">​</a></h2>
<p><strong>Q: 压缩会不会影响 AI 的回答质量？</strong></p>
<p>A: 在我们的测试中，使用 balanced 级别压缩时，回答质量几乎不受影响（语义相似度 &gt; 95%）。但对于需要精确记忆的场景，建议使用 conservative 级别。</p>
<p><strong>Q: 压缩会增加延迟吗？</strong></p>
<p>A: TokenJuice 的压缩和解压总延迟约为 5-15ms，对于大多数应用来说可以忽略不计。</p>
<p><strong>Q: 支持中文压缩吗？</strong></p>
<p>A: 完全支持。TokenJuice 专门优化了中文语义压缩，效果与英文相当。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="总结">总结<a href="https://openhumanwiki.com/en/blog/token-compression-guide#%E6%80%BB%E7%BB%93" class="hash-link" aria-label="Direct link to 总结" title="Direct link to 总结" translate="no">​</a></h2>
<p>TokenJuice 为 AI 应用开发者提供了一种实用的成本优化工具。通过智能的三层压缩架构，可以在保持核心语义的同时大幅减少 Token 消耗。结合合理的集成策略，大多数应用都能实现 50% 以上的成本节省。</p>
<p>立即开始使用 TokenJuice，您可以在 <a href="https://dashboard.openhuman.ai/" target="_blank" rel="noopener noreferrer" class="">OpenHuman Dashboard</a> 中申请试用，或查看我们的 <a href="https://github.com/openhuman/tokenjuice" target="_blank" rel="noopener noreferrer" class="">开源实现</a> 自行部署。</p>]]></content:encoded>
            <category>token-compression</category>
            <category>cost-optimization</category>
            <category>tokenjuice</category>
        </item>
        <item>
            <title><![CDATA[深入解析 OpenHuman 记忆树：如何实现持久化知识管理]]></title>
            <link>https://openhumanwiki.com/en/blog/memory-tree-deep-dive</link>
            <guid>https://openhumanwiki.com/en/blog/memory-tree-deep-dive</guid>
            <pubDate>Wed, 28 May 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[了解 OpenHuman 记忆树如何通过 SQLite 本地存储和语义搜索实现持久化知识管理，比向量数据库更高效。]]></description>
            <content:encoded><![CDATA[<p>在 AI Agent 开发中，如何让大模型「记住」对话上下文和长期知识，一直是核心挑战。OpenHuman 的<strong>记忆树（Memory Tree）</strong> 技术提供了一种全新的解决方案——基于 SQLite 的本地持久化存储，结合语义搜索能力，让 AI 拥有真正可管理的长期记忆。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="什么是记忆树">什么是记忆树？<a href="https://openhumanwiki.com/en/blog/memory-tree-deep-dive#%E4%BB%80%E4%B9%88%E6%98%AF%E8%AE%B0%E5%BF%86%E6%A0%91" class="hash-link" aria-label="Direct link to 什么是记忆树？" title="Direct link to 什么是记忆树？" translate="no">​</a></h2>
<p>记忆树是 OpenHuman 设计的层次化知识存储结构。它不像传统向量数据库那样将所有内容扁平化存储，而是将信息组织成树状层级：</p>
<ul>
<li class=""><strong>根节点</strong>：存储核心身份信息和通用知识</li>
<li class=""><strong>分支节点</strong>：按主题或领域分类的知识点</li>
<li class=""><strong>叶节点</strong>：具体的对话片段、事实和引用</li>
</ul>
<p>这种层级结构使得记忆的检索和更新更加精确，也更符合人类组织知识的方式。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="为什么选择-sqlite-而不是向量数据库">为什么选择 SQLite 而不是向量数据库？<a href="https://openhumanwiki.com/en/blog/memory-tree-deep-dive#%E4%B8%BA%E4%BB%80%E4%B9%88%E9%80%89%E6%8B%A9-sqlite-%E8%80%8C%E4%B8%8D%E6%98%AF%E5%90%91%E9%87%8F%E6%95%B0%E6%8D%AE%E5%BA%93" class="hash-link" aria-label="Direct link to 为什么选择 SQLite 而不是向量数据库？" title="Direct link to 为什么选择 SQLite 而不是向量数据库？" translate="no">​</a></h2>
<p>很多 AI 系统依赖向量数据库（如 Pinecone、Milvus）来存储记忆，但这种方案存在明显缺陷：</p>
<table><thead><tr><th>对比项</th><th>向量数据库</th><th>记忆树 (SQLite)</th></tr></thead><tbody><tr><td>部署复杂度</td><td>需要额外部署服务</td><td>零依赖，内嵌运行</td></tr><tr><td>数据隐私</td><td>数据上传云端</td><td>完全本地存储</td></tr><tr><td>查询延迟</td><td>10-50ms</td><td>1-5ms</td></tr><tr><td>成本</td><td>按查询计费</td><td>一次性投入</td></tr><tr><td>精确匹配</td><td>支持但效率低</td><td>原生支持</td></tr></tbody></table>
<p>SQLite 的引入让记忆树实现了<strong>真正的本地化部署</strong>，数据永远不会离开您的服务器。对于需要处理敏感数据的企业来说，这一点至关重要。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="语义搜索的工作原理">语义搜索的工作原理<a href="https://openhumanwiki.com/en/blog/memory-tree-deep-dive#%E8%AF%AD%E4%B9%89%E6%90%9C%E7%B4%A2%E7%9A%84%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86" class="hash-link" aria-label="Direct link to 语义搜索的工作原理" title="Direct link to 语义搜索的工作原理" translate="no">​</a></h2>
<p>记忆树的语义搜索结合了两种技术：</p>
<p><strong>1. 嵌入向量相似度搜索</strong>
每个记忆片段都会被编码成向量，当您查询「上次讨论的 Python 性能优化方案」时，系统会找到语义最相关的记忆节点。</p>
<p><strong>2. SQLite FTS5 全文搜索</strong>
对于需要精确关键词匹配的场景（如搜索特定函数名、日期、人名），FTS5 提供了毫秒级的全文检索能力。</p>
<p>两者结合，确保既能量化语义相似度，又能在需要时精确定位。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="与-obsidian-的深度集成">与 Obsidian 的深度集成<a href="https://openhumanwiki.com/en/blog/memory-tree-deep-dive#%E4%B8%8E-obsidian-%E7%9A%84%E6%B7%B1%E5%BA%A6%E9%9B%86%E6%88%90" class="hash-link" aria-label="Direct link to 与 Obsidian 的深度集成" title="Direct link to 与 Obsidian 的深度集成" translate="no">​</a></h2>
<p>对于习惯使用 Obsidian 进行知识管理的用户，OpenHuman 提供了双向同步功能：</p>
<ul>
<li class=""><strong>导入</strong>：将 Obsidian 笔记库同步到记忆树作为背景知识</li>
<li class=""><strong>导出</strong>：将 AI 生成的内容自动写回 Obsidian 笔记</li>
<li class=""><strong>实时同步</strong>：双向同步确保两边数据一致</li>
</ul>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># obsidian-sync 配置示例</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">memory-tree</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">obsidian</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">vault-path</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> ~/Obsidian/my</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">knowledge</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">base</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">sync-direction</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> bidirectional</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">sync-interval</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> 5m</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">included-folders</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> 工作笔记</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> 项目文档</span><br></div></code></pre></div></div>
<p>这种集成让您可以在 Obsidian 中用熟悉的 Markdown 语法管理知识，同时让 AI 能够访问和增强这些内容。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="实际应用场景">实际应用场景<a href="https://openhumanwiki.com/en/blog/memory-tree-deep-dive#%E5%AE%9E%E9%99%85%E5%BA%94%E7%94%A8%E5%9C%BA%E6%99%AF" class="hash-link" aria-label="Direct link to 实际应用场景" title="Direct link to 实际应用场景" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-个人数字分身">1. 个人数字分身<a href="https://openhumanwiki.com/en/blog/memory-tree-deep-dive#1-%E4%B8%AA%E4%BA%BA%E6%95%B0%E5%AD%97%E5%88%86%E8%BA%AB" class="hash-link" aria-label="Direct link to 1. 个人数字分身" title="Direct link to 1. 个人数字分身" translate="no">​</a></h3>
<p>将您的笔记、邮件、日程整合到记忆树中，AI 助手就能了解您的偏好、习惯和工作背景，提供真正个性化的服务。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-企业知识库">2. 企业知识库<a href="https://openhumanwiki.com/en/blog/memory-tree-deep-dive#2-%E4%BC%81%E4%B8%9A%E7%9F%A5%E8%AF%86%E5%BA%93" class="hash-link" aria-label="Direct link to 2. 企业知识库" title="Direct link to 2. 企业知识库" translate="no">​</a></h3>
<p>将产品文档、客服记录、内部流程导入记忆树，构建一个永不遗忘的企业大脑。新员工可以随时向 AI 咨询公司规范和历史决策。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-研究助手">3. 研究助手<a href="https://openhumanwiki.com/en/blog/memory-tree-deep-dive#3-%E7%A0%94%E7%A9%B6%E5%8A%A9%E6%89%8B" class="hash-link" aria-label="Direct link to 3. 研究助手" title="Direct link to 3. 研究助手" translate="no">​</a></h3>
<p>论文、实验数据、文献笔记全部纳入记忆树，AI 可以帮您发现跨论文的联系，追踪研究脉络。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="性能与限制">性能与限制<a href="https://openhumanwiki.com/en/blog/memory-tree-deep-dive#%E6%80%A7%E8%83%BD%E4%B8%8E%E9%99%90%E5%88%B6" class="hash-link" aria-label="Direct link to 性能与限制" title="Direct link to 性能与限制" translate="no">​</a></h2>
<p>单节点 SQLite 适合个人和小型团队使用。经过测试：</p>
<ul>
<li class="">10 万条记忆条目：查询时间 &lt; 10ms</li>
<li class="">100 万条记忆条目：查询时间 &lt; 50ms</li>
<li class="">最大存储容量：受磁盘空间限制，理论无上限</li>
</ul>
<p>对于需要处理千万级记忆的企业场景，OpenHuman 正在开发分布式记忆树方案。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="快速开始">快速开始<a href="https://openhumanwiki.com/en/blog/memory-tree-deep-dive#%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B" class="hash-link" aria-label="Direct link to 快速开始" title="Direct link to 快速开始" translate="no">​</a></h2>
<p>在 OpenHuman 项目中启用记忆树只需几步：</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> MemoryTree </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@openhuman/core'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> memory </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">MemoryTree</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  storage</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'./data/memory.db'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  maxAge</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'90d'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// 自动清理 90 天前的记忆</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  embeddingModel</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'text-embedding-3-small'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> memory</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">initialize</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="总结">总结<a href="https://openhumanwiki.com/en/blog/memory-tree-deep-dive#%E6%80%BB%E7%BB%93" class="hash-link" aria-label="Direct link to 总结" title="Direct link to 总结" translate="no">​</a></h2>
<p>记忆树代表了 AI 知识管理的新方向——<strong>本地化、层次化、可解释</strong>。相比向量数据库，它提供了更好的隐私保护、更低的延迟和更低的成本。结合 Obsidian 的双向同步，它能够融入您现有的知识管理工作流，成为真正的第二大脑。</p>
<p>下一步，您可以阅读我们的 <a class="" href="https://openhumanwiki.com/en/blog/docs/api/memory-tree">API 参考文档</a> 了解更多配置选项，或在 GitHub 上查看 <a href="https://github.com/openhuman/memory-tree" target="_blank" rel="noopener noreferrer" class="">开源实现</a> 参与社区贡献。</p>]]></content:encoded>
            <category>memory-tree</category>
            <category>knowledge-management</category>
            <category>sqlite</category>
        </item>
        <item>
            <title><![CDATA[OpenHuman Agent 设计模式：最佳实践与常见问题]]></title>
            <link>https://openhumanwiki.com/en/blog/agent-design-patterns</link>
            <guid>https://openhumanwiki.com/en/blog/agent-design-patterns</guid>
            <pubDate>Tue, 27 May 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[本文深入探讨 OpenHuman Agent 设计中的常见模式、避坑指南和性能优化技巧。]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="设计模式">设计模式<a href="https://openhumanwiki.com/en/blog/agent-design-patterns#%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F" class="hash-link" aria-label="Direct link to 设计模式" title="Direct link to 设计模式" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-单一职责模式">1. 单一职责模式<a href="https://openhumanwiki.com/en/blog/agent-design-patterns#1-%E5%8D%95%E4%B8%80%E8%81%8C%E8%B4%A3%E6%A8%A1%E5%BC%8F" class="hash-link" aria-label="Direct link to 1. 单一职责模式" title="Direct link to 1. 单一职责模式" translate="no">​</a></h3>
<p>每个 Agent 应该只负责一个明确的职责。</p>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> translator </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> client</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">agents</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">create</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'翻译助手'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">instructions</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'你是一个专业的翻译，将中文翻译成英文。'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> summarizer </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> client</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">agents</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">create</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'摘要助手'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">instructions</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'你是一个专业的摘要生成器，总结文章要点。'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-链式调用模式">2. 链式调用模式<a href="https://openhumanwiki.com/en/blog/agent-design-patterns#2-%E9%93%BE%E5%BC%8F%E8%B0%83%E7%94%A8%E6%A8%A1%E5%BC%8F" class="hash-link" aria-label="Direct link to 2. 链式调用模式" title="Direct link to 2. 链式调用模式" translate="no">​</a></h3>
<p>将复杂任务分解为多个步骤：</p>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> chain </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> client</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">chains</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">create</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'研究链'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">steps</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">type</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'agent'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">agentId</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> searchAgent</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">id</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">type</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'agent'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">agentId</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> analyzeAgent</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">id</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">type</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'agent'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">agentId</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> reportAgent</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">id</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> result </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> client</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">chains</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">run</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">chain</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">input</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'AI Agent 发展趋势'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-并行处理模式">3. 并行处理模式<a href="https://openhumanwiki.com/en/blog/agent-design-patterns#3-%E5%B9%B6%E8%A1%8C%E5%A4%84%E7%90%86%E6%A8%A1%E5%BC%8F" class="hash-link" aria-label="Direct link to 3. 并行处理模式" title="Direct link to 3. 并行处理模式" translate="no">​</a></h3>
<p>多个独立任务并行执行：</p>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> results </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> </span><span class="token known-class-name class-name">Promise</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">all</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  client</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">agents</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">run</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">agent1</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">message</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'任务1'</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  client</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">agents</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">run</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">agent2</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">message</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'任务2'</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  client</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">agents</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">run</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">agent3</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">message</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'任务3'</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="避坑指南">避坑指南<a href="https://openhumanwiki.com/en/blog/agent-design-patterns#%E9%81%BF%E5%9D%91%E6%8C%87%E5%8D%97" class="hash-link" aria-label="Direct link to 避坑指南" title="Direct link to 避坑指南" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="不要让-agent-做太多事">不要让 Agent 做太多事<a href="https://openhumanwiki.com/en/blog/agent-design-patterns#%E4%B8%8D%E8%A6%81%E8%AE%A9-agent-%E5%81%9A%E5%A4%AA%E5%A4%9A%E4%BA%8B" class="hash-link" aria-label="Direct link to 不要让 Agent 做太多事" title="Direct link to 不要让 Agent 做太多事" translate="no">​</a></h3>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> agent </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> client</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">agents</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">create</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">instructions</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c"></span><br></div><div class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">    你是一个代码审查助手。</span><br></div><div class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">    你的职责：检查代码质量、发现潜在 bug、提出改进建议。</span><br></div><div class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">    限制：只做代码审查，不做其他事。</span><br></div><div class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">  </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="不要忽略错误处理">不要忽略错误处理<a href="https://openhumanwiki.com/en/blog/agent-design-patterns#%E4%B8%8D%E8%A6%81%E5%BF%BD%E7%95%A5%E9%94%99%E8%AF%AF%E5%A4%84%E7%90%86" class="hash-link" aria-label="Direct link to 不要忽略错误处理" title="Direct link to 不要忽略错误处理" translate="no">​</a></h3>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword control-flow" style="color:#00009f">try</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> response </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> client</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">agents</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">run</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">agent</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">message</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'用户输入'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">catch</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">error</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">error</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">code</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">===</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'rate_limit'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">sleep</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">60000</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">retry</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">error</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Agent 执行失败:'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> error</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">error</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'服务暂时不可用，请稍后重试'</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="性能优化">性能优化<a href="https://openhumanwiki.com/en/blog/agent-design-patterns#%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96" class="hash-link" aria-label="Direct link to 性能优化" title="Direct link to 性能优化" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-缓存常用响应">1. 缓存常用响应<a href="https://openhumanwiki.com/en/blog/agent-design-patterns#1-%E7%BC%93%E5%AD%98%E5%B8%B8%E7%94%A8%E5%93%8D%E5%BA%94" class="hash-link" aria-label="Direct link to 1. 缓存常用响应" title="Direct link to 1. 缓存常用响应" translate="no">​</a></h3>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> cache </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">Map</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">async</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">getCachedResponse</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">key</span><span class="token parameter punctuation" style="color:#393A34">,</span><span class="token parameter"> factory</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">cache</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">has</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">key</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> cache</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">key</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> result </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">factory</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  cache</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">set</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">key</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> result</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> result</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-批量处理">2. 批量处理<a href="https://openhumanwiki.com/en/blog/agent-design-patterns#2-%E6%89%B9%E9%87%8F%E5%A4%84%E7%90%86" class="hash-link" aria-label="Direct link to 2. 批量处理" title="Direct link to 2. 批量处理" translate="no">​</a></h3>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">async</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">processBatch</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">items</span><span class="token parameter punctuation" style="color:#393A34">,</span><span class="token parameter"> batchSize </span><span class="token parameter operator" style="color:#393A34">=</span><span class="token parameter"> </span><span class="token parameter number" style="color:#36acaa">10</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> results </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">for</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">let</span><span class="token plain"> i </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> i </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain"> items</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">length</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> i </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> batchSize</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> batch </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> items</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">slice</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">i</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> i </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> batchSize</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> batchResults </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> </span><span class="token known-class-name class-name">Promise</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">all</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      batch</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">map</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">item</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">processItem</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">item</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    results</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">push</span><span class="token punctuation" style="color:#393A34">(</span><span class="token spread operator" style="color:#393A34">...</span><span class="token plain">batchResults</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> results</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="安全实践">安全实践<a href="https://openhumanwiki.com/en/blog/agent-design-patterns#%E5%AE%89%E5%85%A8%E5%AE%9E%E8%B7%B5" class="hash-link" aria-label="Direct link to 安全实践" title="Direct link to 安全实践" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="输入验证">输入验证<a href="https://openhumanwiki.com/en/blog/agent-design-patterns#%E8%BE%93%E5%85%A5%E9%AA%8C%E8%AF%81" class="hash-link" aria-label="Direct link to 输入验证" title="Direct link to 输入验证" translate="no">​</a></h3>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">sanitizeInput</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">input</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">typeof</span><span class="token plain"> input </span><span class="token operator" style="color:#393A34">!==</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'string'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword control-flow" style="color:#00009f">throw</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">Error</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'输入必须是字符串'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> input</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">slice</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">10000</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">replace</span><span class="token punctuation" style="color:#393A34">(</span><span class="token regex regex-delimiter" style="color:#36acaa">/</span><span class="token regex regex-source language-regex char-class char-class-punctuation punctuation" style="color:#393A34">[</span><span class="token regex regex-source language-regex char-class" style="color:#36acaa">&lt;&gt;</span><span class="token regex regex-source language-regex char-class char-class-punctuation punctuation" style="color:#393A34">]</span><span class="token regex regex-delimiter" style="color:#36acaa">/</span><span class="token regex regex-flags" style="color:#36acaa">g</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">''</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="速率限制">速率限制<a href="https://openhumanwiki.com/en/blog/agent-design-patterns#%E9%80%9F%E7%8E%87%E9%99%90%E5%88%B6" class="hash-link" aria-label="Direct link to 速率限制" title="Direct link to 速率限制" translate="no">​</a></h3>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> rateLimiter </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">Map</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">checkRateLimit</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">userId</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> now </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token known-class-name class-name">Date</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">now</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token dom variable" style="color:#36acaa">window</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">60000</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> maxRequests </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">10</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> record </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> rateLimiter</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">userId</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">||</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">count</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">resetAt</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> now </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> </span><span class="token dom variable" style="color:#36acaa">window</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">now </span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> record</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">resetAt</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    record</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">count</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    record</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">resetAt</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> now </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> </span><span class="token dom variable" style="color:#36acaa">window</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  record</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">count</span><span class="token operator" style="color:#393A34">++</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  rateLimiter</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">set</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">userId</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> record</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> record</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">count</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&lt;=</span><span class="token plain"> maxRequests</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="总结">总结<a href="https://openhumanwiki.com/en/blog/agent-design-patterns#%E6%80%BB%E7%BB%93" class="hash-link" aria-label="Direct link to 总结" title="Direct link to 总结" translate="no">​</a></h2>
<p>好的 Agent 设计应该：单一职责、错误处理、上下文管理、性能优化、安全第一。希望这些设计模式对您有帮助！</p>]]></content:encoded>
            <category>advanced</category>
            <category>design-patterns</category>
        </item>
        <item>
            <title><![CDATA[OpenHuman 入门指南：从零开始创建您的第一个 Agent]]></title>
            <link>https://openhumanwiki.com/en/blog/getting-started-guide</link>
            <guid>https://openhumanwiki.com/en/blog/getting-started-guide</guid>
            <pubDate>Mon, 26 May 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[本文将帮助您在 10 分钟内创建并运行您的第一个 AI Agent。]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="前提条件">前提条件<a href="https://openhumanwiki.com/en/blog/getting-started-guide#%E5%89%8D%E6%8F%90%E6%9D%A1%E4%BB%B6" class="hash-link" aria-label="Direct link to 前提条件" title="Direct link to 前提条件" translate="no">​</a></h2>
<p>在开始之前，请确保您具备以下条件：Node.js 18+ 已安装、OpenHuman 账号和 API 密钥、基础的 JavaScript 知识。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="第一步安装-sdk">第一步：安装 SDK<a href="https://openhumanwiki.com/en/blog/getting-started-guide#%E7%AC%AC%E4%B8%80%E6%AD%A5%E5%AE%89%E8%A3%85-sdk" class="hash-link" aria-label="Direct link to 第一步：安装 SDK" title="Direct link to 第一步：安装 SDK" translate="no">​</a></h2>
<p>打开终端，运行以下命令安装 OpenHuman SDK：</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">npm install openhuman-sdk</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="第二步获取-api-密钥">第二步：获取 API 密钥<a href="https://openhumanwiki.com/en/blog/getting-started-guide#%E7%AC%AC%E4%BA%8C%E6%AD%A5%E8%8E%B7%E5%8F%96-api-%E5%AF%86%E9%92%A5" class="hash-link" aria-label="Direct link to 第二步：获取 API 密钥" title="Direct link to 第二步：获取 API 密钥" translate="no">​</a></h2>
<ol>
<li class="">访问 OpenHuman Dashboard</li>
<li class="">注册账号并登录</li>
<li class="">进入「设置」「API 密钥」</li>
<li class="">点击「创建新密钥」并复制</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="第三步创建项目">第三步：创建项目<a href="https://openhumanwiki.com/en/blog/getting-started-guide#%E7%AC%AC%E4%B8%89%E6%AD%A5%E5%88%9B%E5%BB%BA%E9%A1%B9%E7%9B%AE" class="hash-link" aria-label="Direct link to 第三步：创建项目" title="Direct link to 第三步：创建项目" translate="no">​</a></h2>
<p>创建一个新目录并初始化项目：</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">mkdir my-openhuman-agent</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">cd my-openhuman-agent</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">npm init -y</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">npm install openhuman-sdk dotenv</span><br></div></code></pre></div></div>
<p>创建 <code>.env</code> 文件存储密钥：</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">OPENHUMAN_API_KEY=your_api_key_here</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="第四步编写代码">第四步：编写代码<a href="https://openhumanwiki.com/en/blog/getting-started-guide#%E7%AC%AC%E5%9B%9B%E6%AD%A5%E7%BC%96%E5%86%99%E4%BB%A3%E7%A0%81" class="hash-link" aria-label="Direct link to 第四步：编写代码" title="Direct link to 第四步：编写代码" translate="no">​</a></h2>
<p>创建 <code>index.js</code> 文件：</p>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'dotenv/config'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">OpenHuman</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'openhuman-sdk'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> client </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">OpenHuman</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">apiKey</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> process</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">env</span><span class="token punctuation" style="color:#393A34">.</span><span class="token constant" style="color:#36acaa">OPENHUMAN_API_KEY</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">async</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">main</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> agent </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> client</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">agents</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">create</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'我的第一个助手'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">description</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'一个友好的问答助手'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">instructions</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'你是一个友好的助手，用简洁的语言回答用户问题。'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Agent 创建成功'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Agent ID:'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> agent</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">id</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> response </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> client</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">agents</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">run</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">agent</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">message</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'你好，请介绍一下你自己'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Agent 响应:'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> response</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">message</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">main</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token keyword control-flow" style="color:#00009f">catch</span><span class="token punctuation" style="color:#393A34">(</span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">error</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="第五步运行">第五步：运行<a href="https://openhumanwiki.com/en/blog/getting-started-guide#%E7%AC%AC%E4%BA%94%E6%AD%A5%E8%BF%90%E8%A1%8C" class="hash-link" aria-label="Direct link to 第五步：运行" title="Direct link to 第五步：运行" translate="no">​</a></h2>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">node index.js</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="常用操作">常用操作<a href="https://openhumanwiki.com/en/blog/getting-started-guide#%E5%B8%B8%E7%94%A8%E6%93%8D%E4%BD%9C" class="hash-link" aria-label="Direct link to 常用操作" title="Direct link to 常用操作" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="给-agent-添加工具">给 Agent 添加工具<a href="https://openhumanwiki.com/en/blog/getting-started-guide#%E7%BB%99-agent-%E6%B7%BB%E5%8A%A0%E5%B7%A5%E5%85%B7" class="hash-link" aria-label="Direct link to 给 Agent 添加工具" title="Direct link to 给 Agent 添加工具" translate="no">​</a></h3>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> agent </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> client</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">agents</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">create</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'研究助手'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">instructions</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'你是一个研究助手，帮助用户查找和分析信息。'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">tools</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">'web-search'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'calculator'</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="管理会话">管理会话<a href="https://openhumanwiki.com/en/blog/getting-started-guide#%E7%AE%A1%E7%90%86%E4%BC%9A%E8%AF%9D" class="hash-link" aria-label="Direct link to 管理会话" title="Direct link to 管理会话" translate="no">​</a></h3>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> session </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> client</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">sessions</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">create</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">agentId</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> agent</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> client</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">sessions</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">sendMessage</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">session</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">content</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'你好'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> messages </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> client</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">sessions</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">getMessages</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">session</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">id</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="下一步">下一步<a href="https://openhumanwiki.com/en/blog/getting-started-guide#%E4%B8%8B%E4%B8%80%E6%AD%A5" class="hash-link" aria-label="Direct link to 下一步" title="Direct link to 下一步" translate="no">​</a></h2>
<ul>
<li class="">阅读配置指南了解更多配置选项</li>
<li class="">学习基本使用掌握更多功能</li>
<li class="">探索高级功能</li>
</ul>
<p>祝您开发愉快！</p>]]></content:encoded>
            <category>tutorial</category>
            <category>beginner</category>
        </item>
        <item>
            <title><![CDATA[OpenHuman 百科正式上线]]></title>
            <link>https://openhumanwiki.com/en/blog/welcome</link>
            <guid>https://openhumanwiki.com/en/blog/welcome</guid>
            <pubDate>Sun, 25 May 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[今天，OpenHuman 百科正式上线！我们致力于为您提供最全面、最准确的 OpenHuman 中文文档和教程。]]></description>
            <content:encoded><![CDATA[<p>随着 AI Agent 技术的快速发展，越来越多的开发者开始关注和使用 OpenHuman。然而，目前中文资源相对匮乏，学习曲线较陡。OpenHuman 百科的出现，就是为了解决这个问题。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="我们提供什么">我们提供什么<a href="https://openhumanwiki.com/en/blog/welcome#%E6%88%91%E4%BB%AC%E6%8F%90%E4%BE%9B%E4%BB%80%E4%B9%88" class="hash-link" aria-label="Direct link to 我们提供什么" title="Direct link to 我们提供什么" translate="no">​</a></h2>
<ul>
<li class=""><strong>完整的中文文档</strong>：涵盖从入门到高级的所有内容</li>
<li class=""><strong>实用的教程</strong>：来自实战经验的详细指南</li>
<li class=""><strong>最新的资讯</strong>：同步官方更新，及时发布相关内容</li>
<li class=""><strong>活跃的社区</strong>：开发者交流和问题解答</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="文档结构">文档结构<a href="https://openhumanwiki.com/en/blog/welcome#%E6%96%87%E6%A1%A3%E7%BB%93%E6%9E%84" class="hash-link" aria-label="Direct link to 文档结构" title="Direct link to 文档结构" translate="no">​</a></h2>
<ul>
<li class="">快速开始：安装配置、快速开始、配置指南</li>
<li class="">核心概念：架构概述、核心组件、数据流</li>
<li class="">功能教程：基本使用、高级功能、系统集成</li>
<li class="">API 文档：API 概述、端点列表、认证机制</li>
<li class="">部署指南：Cloudflare Pages、Docker、Vercel</li>
<li class="">常见问题：故障排除、最佳实践</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="未来计划">未来计划<a href="https://openhumanwiki.com/en/blog/welcome#%E6%9C%AA%E6%9D%A5%E8%AE%A1%E5%88%92" class="hash-link" aria-label="Direct link to 未来计划" title="Direct link to 未来计划" translate="no">​</a></h2>
<ul>
<li class="">英文版本开发</li>
<li class="">更多语言支持（日语、韩语等）</li>
<li class="">视频教程</li>
<li class="">交互式示例</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="参与贡献">参与贡献<a href="https://openhumanwiki.com/en/blog/welcome#%E5%8F%82%E4%B8%8E%E8%B4%A1%E7%8C%AE" class="hash-link" aria-label="Direct link to 参与贡献" title="Direct link to 参与贡献" translate="no">​</a></h2>
<p>我们欢迎任何人参与贡献！访问 <a href="https://github.com/bigwei08028/openhumanwiki" target="_blank" rel="noopener noreferrer" class="">GitHub 仓库</a> 开始贡献。</p>
<p>感谢您的支持！</p>]]></content:encoded>
            <category>announcement</category>
        </item>
    </channel>
</rss>