import{s as tt,o as st,n as et}from"../chunks/scheduler.889ebb13.js";import{S as nt,i as at,g as M,s as n,r as T,A as Mt,h as i,f as s,c as a,j as Ll,u as o,x as J,k as Gl,y as it,a as e,v as c,d as j,t as r,w,m as Pl,n as Kl}from"../chunks/index.ca18042b.js";import{T as Jt}from"../chunks/Tip.b8116e3c.js";import{C as lt}from"../chunks/CodeBlock.1db71023.js";import{C as yt}from"../chunks/CourseFloatingBanner.bff79cca.js";import{H as L,E as pt}from"../chunks/EditOnGithub.b0b59db6.js";function Ut(P){let p,U,I="此 Notebook",u;return{c(){p=Pl("您可以通过 "),U=M("a"),U.textContent=I,u=Pl(" 跟随代码实践，该文件支持在 Google Colab 中运行。"),this.h()},l(y){p=Kl(y,"您可以通过 "),U=i(y,"A",{href:!0,target:!0,"data-svelte-h":!0}),J(U)!=="svelte-gh8xb2"&&(U.textContent=I),u=Kl(y," 跟随代码实践，该文件支持在 Google Colab 中运行。"),this.h()},h(){Gl(U,"href","https://huggingface.co/agents-course/notebooks/blob/main/unit2/smolagents/retrieval_agents.ipynb"),Gl(U,"target","_blank")},m(y,m){e(y,p,m),e(y,U,m),e(y,u,m)},p:et,d(y){y&&(s(p),s(U),s(u))}}}function Tt(P){let p,U,I,u,y,m,C,K,h,ll,d,fl="检索增强生成（Retrieval-Augmented Generation，RAG）系统结合了数据检索和生成模型的能力，以提供上下文感知的响应。例如，用户的查询会被传递给搜索引擎，检索结果与查询一起提供给模型，模型随后根据查询和检索到的信息生成响应。",tl,b,Zl="智能驱动的 RAG（Retrieval-Augmented Generation）通过<strong>将自主智能体与动态知识检索相结合</strong>，扩展了传统 RAG 系统。",sl,B,Al="传统 RAG 系统使用 LLM 根据检索数据回答查询，而智能驱动的 RAG <strong>实现了对检索和生成流程的智能控制</strong>，从而提高了效率和准确性。",el,V,kl="传统 RAG 系统面临关键限制，例如<strong>依赖单次检索步骤</strong>，以及过度关注与用户查询的直接语义相似性，这可能会忽略相关信息。",nl,R,Ql="智能驱动的 RAG 通过允许智能体自主制定搜索查询、评估检索结果并进行多次检索步骤，以生成更定制化和全面的输出，从而解决这些问题。",al,g,Ml,G,Nl="让我们构建一个能够使用 DuckDuckGo 进行网页搜索的简单智能体。该智能体将检索信息并综合响应来回答查询。通过智能驱动的 RAG，Alfred 的智能体可以：",il,f,El="<li>搜索最新的超级英雄派对趋势</li> <li>优化结果以包含奢侈元素</li> <li>将信息综合成完整方案</li>",Jl,Z,vl="以下是 Alfred 的智能体实现此功能的代码示例：",yl,A,pl,k,Wl="智能体遵循以下流程：",Ul,Q,Sl="<li><strong>请求分析：</strong> Alfred 的智能体识别查询的关键要素——重点关注装饰、娱乐和餐饮的豪华超级英雄主题派对规划</li> <li><strong>执行检索：</strong> 智能体利用 DuckDuckGo 搜索最新相关信息，确保符合 Alfred 对奢侈活动的精细要求</li> <li><strong>信息综合：</strong> 收集结果后，智能体将其处理为覆盖派对所有方面的可执行方案</li> <li><strong>未来参考存储：</strong> 智能体存储检索信息以便后续活动规划时快速访问，优化后续任务效率</li>",Tl,N,ol,E,Xl="对于专业任务，自定义知识库非常宝贵。让我们创建可以查询技术文档或专业知识的向量数据库工具。通过语义搜索，智能体可以找到与 Alfred 需求最相关的信息。",cl,v,xl="向量数据库（vector database）是通过专业 ML 模型实现丰富文档表示的集合，能够快速搜索和检索文档。",jl,W,ql="该方法将预定义知识与语义搜索相结合，为活动规划提供上下文感知解决方案。通过专业知识访问，Alfred 可以完善派对的每个细节。",rl,S,_l="在此示例中，我们将创建从自定义知识库检索派对策划创意的工具。使用 BM25 检索器搜索知识库并返回最佳结果，同时使用 <code>RecursiveCharacterTextSplitter</code> 将文档分割为更小的块以提高搜索效率：",wl,X,ul,x,$l="增强后的智能体能够：",Il,q,Fl="<li>首先检查文档中的相关信息</li> <li>结合知识库的洞察</li> <li>在内存中维护对话上下文</li>",ml,_,hl,$,Hl="构建智能驱动的 RAG 系统时，智能体可以采用以下高级策略：",Cl,F,zl="<li><strong>查询重构：</strong> 智能体可以优化原始查询，生成更匹配目标文档的搜索词</li> <li><strong>多步检索：</strong> 智能体可以进行多次搜索，利用初步结果优化后续查询</li> <li><strong>多源整合：</strong> 结合来自网页搜索和本地文档等多个来源的信息</li> <li><strong>结果验证：</strong> 在将检索内容纳入响应前分析其相关性和准确性</li>",dl,H,Yl="有效的智能驱动 RAG 系统需要仔细考虑几个关键方面。智能体<strong>应根据查询类型和上下文选择可用工具</strong>，记忆系统帮助维护对话历史避免重复检索，后备策略确保在主要检索方法失败时系统仍能提供价值，验证步骤则帮助确保检索信息的准确性和相关性。",bl,z,Bl,Y,Dl='<li><a href="https://huggingface.co/learn/cookbook/agent_rag" rel="nofollow">Agentic RAG: 使用查询重构和自查询加速您的 RAG 系统！🚀</a> - 使用 smolagents 开发智能驱动 RAG 系统的实践指南</li>',Vl,D,Rl,O,gl;return y=new yt({props:{chapter:2,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/agents-course/blob/main/notebooks/unit2/smolagents/retrieval_agents.ipynb"}]}}),C=new L({props:{title:"构建智能驱动的 RAG 系统",local:"构建智能驱动的-rag-系统",headingTag:"h1"}}),h=new Jt({props:{$$slots:{default:[Ut]},$$scope:{ctx:P}}}),g=new L({props:{title:"基于 DuckDuckGo 的基础检索",local:"基于-duckduckgo-的基础检索",headingTag:"h2"}}),A=new lt({props:{code:"ZnJvbSUyMHNtb2xhZ2VudHMlMjBpbXBvcnQlMjBDb2RlQWdlbnQlMkMlMjBEdWNrRHVja0dvU2VhcmNoVG9vbCUyQyUyMEhmQXBpTW9kZWwlMEElMEElMjMlMjAlRTUlODglOUQlRTUlQTclOEIlRTUlOEMlOTYlRTYlOTAlOUMlRTclQjQlQTIlRTUlQjclQTUlRTUlODUlQjclMEFzZWFyY2hfdG9vbCUyMCUzRCUyMER1Y2tEdWNrR29TZWFyY2hUb29sKCklMEElMEElMjMlMjAlRTUlODglOUQlRTUlQTclOEIlRTUlOEMlOTYlRTYlQTglQTElRTUlOUUlOEIlMEFtb2RlbCUyMCUzRCUyMEhmQXBpTW9kZWwoKSUwQSUwQWFnZW50JTIwJTNEJTIwQ29kZUFnZW50KCUwQSUyMCUyMCUyMCUyMG1vZGVsJTNEbW9kZWwlMkMlMEElMjAlMjAlMjAlMjB0b29scyUzRCU1QnNlYXJjaF90b29sJTVEJTBBKSUwQSUwQSUyMyUyMCVFNCVCRCVCRiVFNyU5NCVBOCVFNyVBNCVCQSVFNCVCRSU4QiUwQXJlc3BvbnNlJTIwJTNEJTIwYWdlbnQucnVuKCUwQSUyMCUyMCUyMCUyMCUyMlNlYXJjaCUyMGZvciUyMGx1eHVyeSUyMHN1cGVyaGVyby10aGVtZWQlMjBwYXJ0eSUyMGlkZWFzJTJDJTIwaW5jbHVkaW5nJTIwZGVjb3JhdGlvbnMlMkMlMjBlbnRlcnRhaW5tZW50JTJDJTIwYW5kJTIwY2F0ZXJpbmcuJTIyJTBBKSUwQXByaW50KHJlc3BvbnNlKQ==",highlighted:`<span class="hljs-keyword">from</span> smolagents <span class="hljs-keyword">import</span> CodeAgent, DuckDuckGoSearchTool, HfApiModel

<span class="hljs-comment"># 初始化搜索工具</span>
search_tool = DuckDuckGoSearchTool()

<span class="hljs-comment"># 初始化模型</span>
model = HfApiModel()

agent = CodeAgent(
    model=model,
    tools=[search_tool]
)

<span class="hljs-comment"># 使用示例</span>
response = agent.run(
    <span class="hljs-string">&quot;Search for luxury superhero-themed party ideas, including decorations, entertainment, and catering.&quot;</span>
)
<span class="hljs-built_in">print</span>(response)`,wrap:!1}}),N=new L({props:{title:"自定义知识库工具",local:"自定义知识库工具",headingTag:"h2"}}),X=new lt({props:{code:" ",highlighted:`<span class="hljs-keyword">from</span> langchain.docstore.document <span class="hljs-keyword">import</span> Document
<span class="hljs-keyword">from</span> langchain.text_splitter <span class="hljs-keyword">import</span> RecursiveCharacterTextSplitter
<span class="hljs-keyword">from</span> smolagents <span class="hljs-keyword">import</span> Tool
<span class="hljs-keyword">from</span> langchain_community.retrievers <span class="hljs-keyword">import</span> BM25Retriever
<span class="hljs-keyword">from</span> smolagents <span class="hljs-keyword">import</span> CodeAgent, HfApiModel

<span class="hljs-keyword">class</span> <span class="hljs-title class_">PartyPlanningRetrieverTool</span>(<span class="hljs-title class_ inherited__">Tool</span>):
    name = <span class="hljs-string">&quot;party_planning_retriever&quot;</span>
    description = <span class="hljs-string">&quot;Uses semantic search to retrieve relevant party planning ideas for Alfred’s superhero-themed party at Wayne Manor.&quot;</span>
    inputs = {
        <span class="hljs-string">&quot;query&quot;</span>: {
            <span class="hljs-string">&quot;type&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
            <span class="hljs-string">&quot;description&quot;</span>: <span class="hljs-string">&quot;The query to perform. This should be a query related to party planning or superhero themes.&quot;</span>,
        }
    }
    output_type = <span class="hljs-string">&quot;string&quot;</span>

    <span class="hljs-keyword">def</span> <span class="hljs-title function_">__init__</span>(<span class="hljs-params">self, docs, **kwargs</span>):
        <span class="hljs-built_in">super</span>().__init__(**kwargs)
        self.retriever = BM25Retriever.from_documents(
            docs, k=<span class="hljs-number">5</span>  <span class="hljs-comment"># 检索前 5 个文档</span>
        )

    <span class="hljs-keyword">def</span> <span class="hljs-title function_">forward</span>(<span class="hljs-params">self, query: <span class="hljs-built_in">str</span></span>) -&gt; <span class="hljs-built_in">str</span>:
        <span class="hljs-keyword">assert</span> <span class="hljs-built_in">isinstance</span>(query, <span class="hljs-built_in">str</span>), <span class="hljs-string">&quot;Your search query must be a string&quot;</span>

        docs = self.retriever.invoke(
            query,
        )
        <span class="hljs-keyword">return</span> <span class="hljs-string">&quot;\\nRetrieved ideas:\\n&quot;</span> + <span class="hljs-string">&quot;&quot;</span>.join(
            [
                <span class="hljs-string">f&quot;\\n\\n===== Idea <span class="hljs-subst">{<span class="hljs-built_in">str</span>(i)}</span> =====\\n&quot;</span> + doc.page_content
                <span class="hljs-keyword">for</span> i, doc <span class="hljs-keyword">in</span> <span class="hljs-built_in">enumerate</span>(docs)
            ]
        )

<span class="hljs-comment"># 模拟派对策划知识库</span>
party_ideas = [
    {<span class="hljs-string">&quot;text&quot;</span>: <span class="hljs-string">&quot;A superhero-themed masquerade ball with luxury decor, including gold accents and velvet curtains.&quot;</span>, <span class="hljs-string">&quot;source&quot;</span>: <span class="hljs-string">&quot;Party Ideas 1&quot;</span>},
    {<span class="hljs-string">&quot;text&quot;</span>: <span class="hljs-string">&quot;Hire a professional DJ who can play themed music for superheroes like Batman and Wonder Woman.&quot;</span>, <span class="hljs-string">&quot;source&quot;</span>: <span class="hljs-string">&quot;Entertainment Ideas&quot;</span>},
    {<span class="hljs-string">&quot;text&quot;</span>: <span class="hljs-string">&quot;For catering, serve dishes named after superheroes, like &#x27;The Hulk&#x27;s Green Smoothie&#x27; and &#x27;Iron Man&#x27;s Power Steak.&#x27;&quot;</span>, <span class="hljs-string">&quot;source&quot;</span>: <span class="hljs-string">&quot;Catering Ideas&quot;</span>},
    {<span class="hljs-string">&quot;text&quot;</span>: <span class="hljs-string">&quot;Decorate with iconic superhero logos and projections of Gotham and other superhero cities around the venue.&quot;</span>, <span class="hljs-string">&quot;source&quot;</span>: <span class="hljs-string">&quot;Decoration Ideas&quot;</span>},
    {<span class="hljs-string">&quot;text&quot;</span>: <span class="hljs-string">&quot;Interactive experiences with VR where guests can engage in superhero simulations or compete in themed games.&quot;</span>, <span class="hljs-string">&quot;source&quot;</span>: <span class="hljs-string">&quot;Entertainment Ideas&quot;</span>}
]

source_docs = [
    Document(page_content=doc[<span class="hljs-string">&quot;text&quot;</span>], metadata={<span class="hljs-string">&quot;source&quot;</span>: doc[<span class="hljs-string">&quot;source&quot;</span>]})
    <span class="hljs-keyword">for</span> doc <span class="hljs-keyword">in</span> party_ideas
]

<span class="hljs-comment"># 分割文档以提高搜索效率</span>
    text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=<span class="hljs-number">500</span>,
    chunk_overlap=<span class="hljs-number">50</span>,
    add_start_index=<span class="hljs-literal">True</span>,
    strip_whitespace=<span class="hljs-literal">True</span>,
    separators=[<span class="hljs-string">&quot;\\n\\n&quot;</span>, <span class="hljs-string">&quot;\\n&quot;</span>, <span class="hljs-string">&quot;.&quot;</span>, <span class="hljs-string">&quot; &quot;</span>, <span class="hljs-string">&quot;&quot;</span>],
)
docs_processed = text_splitter.split_documents(source_docs)

<span class="hljs-comment"># 创建检索工具</span>
party_planning_retriever = PartyPlanningRetrieverTool(docs_processed)

<span class="hljs-comment"># 初始化智能体</span>
agent = CodeAgent(tools=[party_planning_retriever], model=HfApiModel())

<span class="hljs-comment"># 使用示例</span>
response = agent.run(
    <span class="hljs-string">&quot;Find ideas for a luxury superhero-themed party, including entertainment, catering, and decoration options.&quot;</span>
)

<span class="hljs-built_in">print</span>(response)`,wrap:!1}}),_=new L({props:{title:"增强的检索能力",local:"增强的检索能力",headingTag:"h2"}}),z=new L({props:{title:"资源",local:"资源",headingTag:"h2"}}),D=new pt({props:{source:"https://github.com/huggingface/agents-course/blob/main/units/zh-CN/unit2/smolagents/retrieval_agents.mdx"}}),{c(){p=M("meta"),U=n(),I=M("p"),u=n(),T(y.$$.fragment),m=n(),T(C.$$.fragment),K=n(),T(h.$$.fragment),ll=n(),d=M("p"),d.textContent=fl,tl=n(),b=M("p"),b.innerHTML=Zl,sl=n(),B=M("p"),B.innerHTML=Al,el=n(),V=M("p"),V.innerHTML=kl,nl=n(),R=M("p"),R.textContent=Ql,al=n(),T(g.$$.fragment),Ml=n(),G=M("p"),G.textContent=Nl,il=n(),f=M("ul"),f.innerHTML=El,Jl=n(),Z=M("p"),Z.textContent=vl,yl=n(),T(A.$$.fragment),pl=n(),k=M("p"),k.textContent=Wl,Ul=n(),Q=M("ol"),Q.innerHTML=Sl,Tl=n(),T(N.$$.fragment),ol=n(),E=M("p"),E.textContent=Xl,cl=n(),v=M("p"),v.textContent=xl,jl=n(),W=M("p"),W.textContent=ql,rl=n(),S=M("p"),S.innerHTML=_l,wl=n(),T(X.$$.fragment),ul=n(),x=M("p"),x.textContent=$l,Il=n(),q=M("ol"),q.innerHTML=Fl,ml=n(),T(_.$$.fragment),hl=n(),$=M("p"),$.textContent=Hl,Cl=n(),F=M("ol"),F.innerHTML=zl,dl=n(),H=M("p"),H.innerHTML=Yl,bl=n(),T(z.$$.fragment),Bl=n(),Y=M("ul"),Y.innerHTML=Dl,Vl=n(),T(D.$$.fragment),Rl=n(),O=M("p"),this.h()},l(l){const t=Mt("svelte-u9bgzb",document.head);p=i(t,"META",{name:!0,content:!0}),t.forEach(s),U=a(l),I=i(l,"P",{}),Ll(I).forEach(s),u=a(l),o(y.$$.fragment,l),m=a(l),o(C.$$.fragment,l),K=a(l),o(h.$$.fragment,l),ll=a(l),d=i(l,"P",{"data-svelte-h":!0}),J(d)!=="svelte-131e5hc"&&(d.textContent=fl),tl=a(l),b=i(l,"P",{"data-svelte-h":!0}),J(b)!=="svelte-12eh443"&&(b.innerHTML=Zl),sl=a(l),B=i(l,"P",{"data-svelte-h":!0}),J(B)!=="svelte-z9ik08"&&(B.innerHTML=Al),el=a(l),V=i(l,"P",{"data-svelte-h":!0}),J(V)!=="svelte-n4cl59"&&(V.innerHTML=kl),nl=a(l),R=i(l,"P",{"data-svelte-h":!0}),J(R)!=="svelte-1tq1z84"&&(R.textContent=Ql),al=a(l),o(g.$$.fragment,l),Ml=a(l),G=i(l,"P",{"data-svelte-h":!0}),J(G)!=="svelte-19wnieu"&&(G.textContent=Nl),il=a(l),f=i(l,"UL",{"data-svelte-h":!0}),J(f)!=="svelte-6o8aq3"&&(f.innerHTML=El),Jl=a(l),Z=i(l,"P",{"data-svelte-h":!0}),J(Z)!=="svelte-xjmoq0"&&(Z.textContent=vl),yl=a(l),o(A.$$.fragment,l),pl=a(l),k=i(l,"P",{"data-svelte-h":!0}),J(k)!=="svelte-91zclj"&&(k.textContent=Wl),Ul=a(l),Q=i(l,"OL",{"data-svelte-h":!0}),J(Q)!=="svelte-dluhf9"&&(Q.innerHTML=Sl),Tl=a(l),o(N.$$.fragment,l),ol=a(l),E=i(l,"P",{"data-svelte-h":!0}),J(E)!=="svelte-yr8tw1"&&(E.textContent=Xl),cl=a(l),v=i(l,"P",{"data-svelte-h":!0}),J(v)!=="svelte-78a1w"&&(v.textContent=xl),jl=a(l),W=i(l,"P",{"data-svelte-h":!0}),J(W)!=="svelte-zibh65"&&(W.textContent=ql),rl=a(l),S=i(l,"P",{"data-svelte-h":!0}),J(S)!=="svelte-zbqlw2"&&(S.innerHTML=_l),wl=a(l),o(X.$$.fragment,l),ul=a(l),x=i(l,"P",{"data-svelte-h":!0}),J(x)!=="svelte-17pjt2a"&&(x.textContent=$l),Il=a(l),q=i(l,"OL",{"data-svelte-h":!0}),J(q)!=="svelte-jgex8e"&&(q.innerHTML=Fl),ml=a(l),o(_.$$.fragment,l),hl=a(l),$=i(l,"P",{"data-svelte-h":!0}),J($)!=="svelte-funwgv"&&($.textContent=Hl),Cl=a(l),F=i(l,"OL",{"data-svelte-h":!0}),J(F)!=="svelte-1mxzz72"&&(F.innerHTML=zl),dl=a(l),H=i(l,"P",{"data-svelte-h":!0}),J(H)!=="svelte-qsht60"&&(H.innerHTML=Yl),bl=a(l),o(z.$$.fragment,l),Bl=a(l),Y=i(l,"UL",{"data-svelte-h":!0}),J(Y)!=="svelte-w048vk"&&(Y.innerHTML=Dl),Vl=a(l),o(D.$$.fragment,l),Rl=a(l),O=i(l,"P",{}),Ll(O).forEach(s),this.h()},h(){Gl(p,"name","hf:doc:metadata"),Gl(p,"content",ot)},m(l,t){it(document.head,p),e(l,U,t),e(l,I,t),e(l,u,t),c(y,l,t),e(l,m,t),c(C,l,t),e(l,K,t),c(h,l,t),e(l,ll,t),e(l,d,t),e(l,tl,t),e(l,b,t),e(l,sl,t),e(l,B,t),e(l,el,t),e(l,V,t),e(l,nl,t),e(l,R,t),e(l,al,t),c(g,l,t),e(l,Ml,t),e(l,G,t),e(l,il,t),e(l,f,t),e(l,Jl,t),e(l,Z,t),e(l,yl,t),c(A,l,t),e(l,pl,t),e(l,k,t),e(l,Ul,t),e(l,Q,t),e(l,Tl,t),c(N,l,t),e(l,ol,t),e(l,E,t),e(l,cl,t),e(l,v,t),e(l,jl,t),e(l,W,t),e(l,rl,t),e(l,S,t),e(l,wl,t),c(X,l,t),e(l,ul,t),e(l,x,t),e(l,Il,t),e(l,q,t),e(l,ml,t),c(_,l,t),e(l,hl,t),e(l,$,t),e(l,Cl,t),e(l,F,t),e(l,dl,t),e(l,H,t),e(l,bl,t),c(z,l,t),e(l,Bl,t),e(l,Y,t),e(l,Vl,t),c(D,l,t),e(l,Rl,t),e(l,O,t),gl=!0},p(l,[t]){const Ol={};t&2&&(Ol.$$scope={dirty:t,ctx:l}),h.$set(Ol)},i(l){gl||(j(y.$$.fragment,l),j(C.$$.fragment,l),j(h.$$.fragment,l),j(g.$$.fragment,l),j(A.$$.fragment,l),j(N.$$.fragment,l),j(X.$$.fragment,l),j(_.$$.fragment,l),j(z.$$.fragment,l),j(D.$$.fragment,l),gl=!0)},o(l){r(y.$$.fragment,l),r(C.$$.fragment,l),r(h.$$.fragment,l),r(g.$$.fragment,l),r(A.$$.fragment,l),r(N.$$.fragment,l),r(X.$$.fragment,l),r(_.$$.fragment,l),r(z.$$.fragment,l),r(D.$$.fragment,l),gl=!1},d(l){l&&(s(U),s(I),s(u),s(m),s(K),s(ll),s(d),s(tl),s(b),s(sl),s(B),s(el),s(V),s(nl),s(R),s(al),s(Ml),s(G),s(il),s(f),s(Jl),s(Z),s(yl),s(pl),s(k),s(Ul),s(Q),s(Tl),s(ol),s(E),s(cl),s(v),s(jl),s(W),s(rl),s(S),s(wl),s(ul),s(x),s(Il),s(q),s(ml),s(hl),s($),s(Cl),s(F),s(dl),s(H),s(bl),s(Bl),s(Y),s(Vl),s(Rl),s(O)),s(p),w(y,l),w(C,l),w(h,l),w(g,l),w(A,l),w(N,l),w(X,l),w(_,l),w(z,l),w(D,l)}}}const ot='{"title":"构建智能驱动的 RAG 系统","local":"构建智能驱动的-rag-系统","sections":[{"title":"基于 DuckDuckGo 的基础检索","local":"基于-duckduckgo-的基础检索","sections":[],"depth":2},{"title":"自定义知识库工具","local":"自定义知识库工具","sections":[],"depth":2},{"title":"增强的检索能力","local":"增强的检索能力","sections":[],"depth":2},{"title":"资源","local":"资源","sections":[],"depth":2}],"depth":1}';function ct(P){return st(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class ht extends nt{constructor(p){super(),at(this,p,ct,Tt,tt,{})}}export{ht as component};
