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

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

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

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}}),W=new P({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, InferenceClientModel

<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=InferenceClientModel())

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