<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Dapr Agents on Dapr 文档库</title><link>https://docs.dapr.io/zh-hans/developing-ai/dapr-agents/</link><description>Recent content in Dapr Agents on Dapr 文档库</description><generator>Hugo</generator><language>zh-hans</language><atom:link href="https://docs.dapr.io/zh-hans/developing-ai/dapr-agents/index.xml" rel="self" type="application/rss+xml"/><item><title>简介</title><link>https://docs.dapr.io/zh-hans/developing-ai/dapr-agents/dapr-agents-introduction/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.dapr.io/zh-hans/developing-ai/dapr-agents/dapr-agents-introduction/</guid><description>&lt;p>&lt;img src="https://docs.dapr.io/images/dapr-agents/concepts-agents-overview.png" alt="Agent Overview">&lt;/p>
&lt;p>Dapr Agents 是一个用于构建持久且弹性的 AI agent 系统的开发者框架，由大语言模型（LLMs）驱动。基于久经考验的 Dapr 项目构建，它使开发者能够创建具有身份、能够推理问题、做出动态决策并无缝协作的自主系统。它包含内置的可观测性和有状态工作流执行，确保 agent 工作流无论复杂度如何都能成功完成。无论您是开发单 agent 应用还是复杂的多 agent 工作流，Dapr Agents 都为智能、自适应系统提供可在跨环境中扩展的基础设施。&lt;/p>
&lt;h2 id="核心能力">核心能力&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Agent 身份&lt;/strong>：使用 Dapr Agents，每个 agent 都被分配一个唯一的加密身份，用于对 agent 交互进行身份认证并在服务和基础设施间强制执行授权。&lt;/li>
&lt;li>&lt;strong>持久执行&lt;/strong>：使用 Dapr Agents 创建的 agent 由 Dapr 的工作流引擎支持，该引擎将每个 agent 与 LLMs 和工具的交互持久化到持久状态存储中，即使在 agent 重启后也能恢复并继续执行。&lt;/li>
&lt;li>&lt;strong>弹性&lt;/strong>：Dapr Agents 可以通过自动重试策略、超时和熔断器从临时故障中恢复，还可以应用由工作流状态支持的持久重试以从持续时间更长的故障中恢复。&lt;/li>
&lt;li>&lt;strong>规模与效率&lt;/strong>：在单核上高效运行数千个 agent。Dapr 在机器集群间透明地分发单 agent 和多 agent 应用并处理它们的生命周期。&lt;/li>
&lt;li>&lt;strong>数据驱动 Agent&lt;/strong>：通过连接到数十种不同的数据源，直接与数据库、文档和非结构化数据集成。&lt;/li>
&lt;li>&lt;strong>多 Agent 系统&lt;/strong>：默认安全和可观测，支持 agent 之间的协作。&lt;/li>
&lt;li>&lt;strong>Kubernetes 原生&lt;/strong>：在 Kubernetes 环境中轻松部署和管理 agent。&lt;/li>
&lt;li>&lt;strong>平台就绪&lt;/strong>：访问范围和声明式资源使平台团队能够将 Dapr Agents 集成到其系统中。&lt;/li>
&lt;li>&lt;strong>供应商中立与开源&lt;/strong>：避免供应商锁定，并在云和本地部署间获得灵活性。&lt;/li>
&lt;/ul>
&lt;h2 id="核心功能">核心功能&lt;/h2>
&lt;p>Dapr Agents 提供专为创建智能、自主系统设计的专用模块。每个模块都设计为独立工作，允许您使用适合应用程序需求的任何组合。&lt;/p></description></item><item><title>入门指南</title><link>https://docs.dapr.io/zh-hans/developing-ai/dapr-agents/dapr-agents-getting-started/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.dapr.io/zh-hans/developing-ai/dapr-agents/dapr-agents-getting-started/</guid><description>&lt;div class="alert alert-primary" role="alert">
&lt;h4 class="alert-heading">Dapr Agents 概念&lt;/h4>

 如果你想了解 Dapr Agents 的入门概述，并希望学习更多 Dapr Agents 基本术语，我们建议你先阅读&lt;a href="https://docs.dapr.io/zh-hans/developing-ai/dapr-agents/dapr-agents-introduction/">介绍&lt;/a>和&lt;a href="https://docs.dapr.io/zh-hans/developing-ai/dapr-agents/dapr-agents-core-concepts/">核心概念&lt;/a>部分。

&lt;/div>

&lt;h2 id="安装-dapr-cli">安装 Dapr CLI&lt;/h2>
&lt;p>虽然 Dapr Agents 中的简单示例可以在不使用边车的情况下运行，但推荐模式是使用 Dapr 边车。要充分利用 Dapr Agents 的全部功能，请安装 Dapr CLI，用于在本地或 Kubernetes 上运行 Dapr 进行开发。完整的分步指南，请参阅 &lt;a href="https://docs.dapr.io/zh-hans/getting-started/install-dapr-cli/">Dapr CLI 安装页面&lt;/a>。&lt;/p>
&lt;p>通过重启终端/命令提示符并运行以下命令来验证 CLI 是否已安装：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>dapr -h
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="在本地模式下初始化-dapr">在本地模式下初始化 Dapr&lt;/h2>


&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">注意&lt;/h4>

 请确保已安装 &lt;a href="https://docs.docker.com/get-started/get-docker/">Docker&lt;/a>。

&lt;/div>

&lt;p>在本地初始化 Dapr 以设置用于开发的自托管环境。此过程会获取并安装 Dapr 边车二进制文件、将必要的服务作为 Docker 容器运行，并为你的应用程序准备一个默认组件文件夹。详细步骤，请参阅官方&lt;a href="https://docs.dapr.io/zh-hans/getting-started/install-dapr-selfhost/">本地初始化 Dapr 指南&lt;/a>。&lt;/p>
&lt;p>&lt;img src="https://docs.dapr.io/images/dapr-agents/home_installation_init.png" alt="Dapr 初始化">&lt;/p>
&lt;p>要初始化 Dapr 控制平面容器并创建默认配置文件，请运行：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>dapr init
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>验证你拥有运行中的容器实例，这些实例使用 &lt;code>daprio/dapr&lt;/code>、&lt;code>openzipkin/zipkin&lt;/code> 和 &lt;code>redis&lt;/code> 镜像：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>docker ps
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="安装-python">安装 Python&lt;/h2>


&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">注意&lt;/h4>

 请确保已安装 Python。&lt;code>Python &amp;gt;=3.11&lt;/code>。安装说明，请访问官方 &lt;a href="https://www.python.org/downloads/">Python 安装指南&lt;/a>。

&lt;/div>

&lt;h2 id="安装-uv">安装 uv&lt;/h2>
&lt;p>Dapr Agents 快速入门使用 &lt;a href="https://docs.astral.sh/uv/">uv&lt;/a> 作为 Python 包管理器。按照 &lt;a href="https://docs.astral.sh/uv/getting-started/installation/">uv 安装指南&lt;/a> 进行安装。&lt;/p></description></item><item><title>为什么选择 Dapr Agents</title><link>https://docs.dapr.io/zh-hans/developing-ai/dapr-agents/dapr-agents-why/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.dapr.io/zh-hans/developing-ai/dapr-agents/dapr-agents-why/</guid><description>&lt;p>Dapr Agents 是一个用于构建和编排基于 LLM 的自主代理的开源框架，它利用 Dapr 经过验证的分布式系统基础。与要求开发者从零开始构建基础设施的其他代理框架不同，Dapr Agents 通过提供企业级的可扩展性、状态管理和消息传递能力，使团队能够专注于代理智能。这种方法消除了重新创建分布式系统基础组件的复杂性，同时提供了由 Dapr 支持的代理工作流。&lt;/p>
&lt;h3 id="现有框架的挑战">现有框架的挑战&lt;/h3>
&lt;p>当今许多代理框架试图通过开发自己的平台来重新定义微服务的构建和编排方式，以处理核心的分布式系统能力。虽然这些努力展示了创新，但在扩展或适应新环境时，往往导致学习曲线陡峭、系统分散和不必要的复杂性。&lt;/p>
&lt;p>这些框架要求开发者采用全新的范式或重新创建基础架构，而不是基于现有的、被证明能够在规模上处理这些挑战的解决方案。这种额外的复杂性分散了对主要目标的关注：设计和实现智能、有效的代理。&lt;/p>
&lt;h3 id="dapr-agents-如何解决这些问题">Dapr Agents 如何解决这些问题&lt;/h3>
&lt;p>Dapr Agents 采用了一种不同的方法，它基于 Dapr 构建，利用其经过验证的 API 和模式，包括&lt;a href="https://docs.dapr.io/zh-hans/developing-applications/building-blocks/workflow/workflow-overview/">工作流&lt;/a>、&lt;a href="https://docs.dapr.io/zh-hans/developing-applications/building-blocks/pubsub/pubsub-overview/">发布订阅消息&lt;/a>、&lt;a href="https://docs.dapr.io/zh-hans/developing-applications/building-blocks/state-management/state-management-overview/">状态管理&lt;/a>和&lt;a href="https://docs.dapr.io/zh-hans/developing-applications/building-blocks/service-invocation/service-invocation-overview/">服务通信&lt;/a>。这种集成消除了从零开始重新创建基础组件的需要。&lt;/p>
&lt;p>通过与 Dapr 的运行时和模块化组件集成，Dapr Agents 赋予开发者构建和部署代理的能力，这些代理可以作为更大系统内的协作服务工作。无论是试验单个代理还是编排涉及多个代理的工作流，Dapr Agents 都允许团队专注于 LLM 驱动的代理的智能和行为，同时利用经过验证的框架来实现可扩展性和可靠性。&lt;/p>
&lt;h2 id="原则">原则&lt;/h2>
&lt;h3 id="代理中心设计">代理中心设计&lt;/h3>
&lt;p>Dapr Agents 的设计理念是将由 LLM 驱动的代理置于任务执行和工作流编排的核心。这一原则强调：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>LLM 驱动的代理&lt;/strong>：Dapr Agents 使创建能够利用 LLM 进行推理、动态决策和自然语言交互的代理成为可能。&lt;/li>
&lt;li>&lt;strong>自适应任务处理&lt;/strong>：Dapr Agents 中的代理配备了灵活的模式，如工具调用和推理循环（例如 ReAct），使它们能够自主处理复杂且不断变化的任务。&lt;/li>
&lt;li>&lt;strong>多代理系统&lt;/strong>：Dapr Agents 的框架允许代理作为模块化的、可复用的构建块，无缝集成到工作流中，无论是独立运行还是协作运行。&lt;/li>
&lt;/ul>
&lt;p>虽然 Dapr Agents 以代理为中心，但它也认识到在确定性工作流或更简单的任务序列中直接使用 LLM 的多功能性。在代理内置的任务处理模式（如 &lt;code>tool calling&lt;/code> 或 &lt;code>ReAct&lt;/code> 循环）不必要的场景中，LLM 可以作为推理和决策的核心组件。这种灵活性确保用户可以调整 Dapr Agents 以满足各种需求，而不局限于单一方法。&lt;/p>


&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">注意&lt;/h4>

 代理可以独立使用并在后台创建工作流，或者作为确定性工作流中的自主步骤使用。

&lt;/div>

&lt;p>&lt;img src="https://docs.dapr.io/images/dapr-agents/home_concepts_principles_modular.png" alt="模块化原则">&lt;/p></description></item><item><title>核心概念</title><link>https://docs.dapr.io/zh-hans/developing-ai/dapr-agents/dapr-agents-core-concepts/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.dapr.io/zh-hans/developing-ai/dapr-agents/dapr-agents-core-concepts/</guid><description>&lt;p>Dapr Agents 提供了一种结构化方式，用于构建和编排使用 LLM 的应用，让你无需陷入基础设施细节，同时具备持久性保证。它的核心目标，是通过抽象掉 LLM、工具、内存管理以及分布式系统的复杂性，使开发者能够把注意力集中在 AI 应用的业务逻辑上。在这一框架中，agent 是最基础的构建块。&lt;/p>
&lt;h2 id="agents">Agents&lt;/h2>
&lt;p>Agent 是由大语言模型（LLM）驱动的自治单元，旨在执行任务、对问题进行推理，并在工作流中协作。作为智能构建块，agent 将推理能力与工具集成、内存和协作特性结合起来，以达成目标结果。&lt;/p>
&lt;p>&lt;img src="https://docs.dapr.io/images/dapr-agents/concepts-agents.png" alt="Agents 概念图">&lt;/p>
&lt;p>Dapr Agents 提供两类 agent，分别适用于不同场景：&lt;/p>
&lt;h3 id="agent">Agent&lt;/h3>


&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">已弃用&lt;/h4>

 &lt;code>Agent&lt;/code> 类&lt;strong>自 v1.0.0-rc.1 起已弃用&lt;/strong>，未来版本将被移除。所有新开发都应使用 &lt;a href="https://docs.dapr.io/zh-hans/developing-ai/dapr-agents/dapr-agents-core-concepts/#durable-agent">&lt;code>DurableAgent&lt;/code>&lt;/a>。

&lt;/div>

&lt;p>&lt;code>Agent&lt;/code> 类是一种会话式 agent，使用语言模型管理工具调用与对话。它提供同步执行，并内置对话记忆。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#5c35cc;font-weight:bold">@tool&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">def&lt;/span> &lt;span style="color:#000">my_weather_func&lt;/span>&lt;span style="color:#000;font-weight:bold">()&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">-&amp;gt;&lt;/span> &lt;span style="color:#204a87">str&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#34;&amp;#34;&amp;#34;获取当前天气。&amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">return&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;It&amp;#39;s 72°F and sunny&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">async&lt;/span> &lt;span style="color:#204a87;font-weight:bold">def&lt;/span> &lt;span style="color:#000">main&lt;/span>&lt;span style="color:#000;font-weight:bold">():&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">weather_agent&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">Agent&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">name&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;WeatherAgent&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">role&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;Weather Assistant&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">goal&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;Provide timely weather updates across cities&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">instructions&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#000;font-weight:bold">[&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;Help users with weather information&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">],&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">tools&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#000;font-weight:bold">[&lt;/span>&lt;span style="color:#000">my_weather_func&lt;/span>&lt;span style="color:#000;font-weight:bold">],&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">memory&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">AgentMemoryConfig&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">store&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#000">ConversationDaprStateMemory&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">store_name&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;historystore&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">session_id&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;some-id&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">),&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">response1&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#204a87;font-weight:bold">await&lt;/span> &lt;span style="color:#000">weather_agent&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">run&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;What&amp;#39;s the weather?&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">response2&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#204a87;font-weight:bold">await&lt;/span> &lt;span style="color:#000">weather_agent&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">run&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;How about now?&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这个示例展示了如何创建一个带工具集成的简单 agent。该 agent 会同步处理查询，并借助 Dapr State Store API 在多次交互之间保持对话上下文。&lt;/p></description></item><item><title>代理模式</title><link>https://docs.dapr.io/zh-hans/developing-ai/dapr-agents/dapr-agents-patterns/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.dapr.io/zh-hans/developing-ai/dapr-agents/dapr-agents-patterns/</guid><description>&lt;p>Dapr Agents 简化了代理系统的实现，从简单的增强型 LLM 到企业环境中的完全自主代理。以下各节描述了可以从 Dapr Agents 中受益的多种应用模式。&lt;/p>
&lt;h2 id="概述">概述&lt;/h2>
&lt;p>代理系统使用设计模式（如反思、工具使用、规划和多代理协作）来实现比简单单次提示交互更好的结果。与其将&amp;quot;代理&amp;quot;视为二元分类，不如将系统视为具有不同程度代理性的系统更有用。&lt;/p>
&lt;p>这一范围从简单的工作流（仅提示模型一次）到能够以更大自主性执行多个迭代步骤的复杂系统。 有两种基本的架构方法：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>工作流&lt;/strong>：通过预定义代码路径编排 LLM 和工具的系统（更具规范性）&lt;/li>
&lt;li>&lt;strong>代理&lt;/strong>：LLM 动态引导自身流程和工具使用的系统（更具自主性）&lt;/li>
&lt;/ul>
&lt;p>一端是可预测的工作流，具有明确定义的决策路径和确定性结果。另一端是能够动态引导自身策略的 AI 代理。虽然完全自主的代理看似吸引人，但工作流通常为明确定义的任务提供更好的可预测性和一致性。这与企业对可靠性和可维护性的要求一致。&lt;/p>
&lt;img src="https://docs.dapr.io/images/dapr-agents/agents-patterns-overview.png" width=1200 style="padding-bottom:15px;">
&lt;p>本文档中的模式从增强型 LLM 开始，然后介绍基于工作流的方法（提供可预测性和控制），再转向更具自主性的模式。每个模式都针对特定的使用场景，并在确定性结果和自主性之间提供不同的权衡。&lt;/p>
&lt;h2 id="增强型-llm">增强型 LLM&lt;/h2>
&lt;p>增强型 LLM 模式是任何代理系统的基础构建块。它通过外部能力（如记忆和工具）增强语言模型，为 AI 驱动应用提供基本但强大的基础。&lt;/p>
&lt;img src="https://docs.dapr.io/images/dapr-agents/agents-augmented-llm.png" width=600 alt="Diagram showing how the augmented LLM pattern works">
&lt;p>此模式非常适合需要增强型 LLM 但不需要复杂编排或自主决策的场景。增强型 LLM 可以访问外部工具、维护对话历史，并在交互中提供一致的响应。&lt;/p>
&lt;p>&lt;strong>使用场景：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>记住用户偏好的个人助手&lt;/li>
&lt;li>访问产品信息的客户支持代理&lt;/li>
&lt;li>检索和分析信息的研究工具&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>使用 Dapr Agents 实现：&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">from&lt;/span> &lt;span style="color:#000">dapr_agents&lt;/span> &lt;span style="color:#204a87;font-weight:bold">import&lt;/span> &lt;span style="color:#000">DurableAgent&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span> &lt;span style="color:#000">tool&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#5c35cc;font-weight:bold">@tool&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">def&lt;/span> &lt;span style="color:#000">search_flights&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">destination&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#204a87">str&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">-&amp;gt;&lt;/span> &lt;span style="color:#000">List&lt;/span>&lt;span style="color:#000;font-weight:bold">[&lt;/span>&lt;span style="color:#000">FlightOption&lt;/span>&lt;span style="color:#000;font-weight:bold">]:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#34;&amp;#34;&amp;#34;Search for flights to the specified destination.&amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># Mock flight data (would be an external API call in a real app)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">return&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">FlightOption&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">airline&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;SkyHighAir&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span> &lt;span style="color:#000">price&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">450.00&lt;/span>&lt;span style="color:#000;font-weight:bold">),&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">FlightOption&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">airline&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;GlobalWings&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span> &lt;span style="color:#000">price&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">375.50&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># Create agent with memory and tools&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">travel_planner&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">DurableAgent&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">name&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;TravelBuddy&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">role&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;Travel Planner Assistant&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">instructions&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#000;font-weight:bold">[&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;Remember destinations and help find flights&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">],&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">tools&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#000;font-weight:bold">[&lt;/span>&lt;span style="color:#000">search_flights&lt;/span>&lt;span style="color:#000;font-weight:bold">],&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Dapr Agents 自动处理：&lt;/p></description></item><item><title>集成</title><link>https://docs.dapr.io/zh-hans/developing-ai/dapr-agents/dapr-agents-integrations/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.dapr.io/zh-hans/developing-ai/dapr-agents/dapr-agents-integrations/</guid><description>&lt;h1 id="开箱即用工具">开箱即用工具&lt;/h1>
&lt;h2 id="文本分割器">文本分割器&lt;/h2>
&lt;p>文本分割器模块是 &lt;code>Dapr Agents&lt;/code> 中的一个基础集成，专为 &lt;a href="https://en.wikipedia.org/wiki/Retrieval-augmented_generation">检索增强生成（RAG）&lt;/a> 工作流和其他 &lt;code>上下文学习&lt;/code> 应用预处理文档而设计。其主要目的是将大型文档拆分为更小的、有意义的块，以便进行嵌入、索引和基于用户查询的高效检索。&lt;/p>
&lt;p>通过关注可管理的块大小并通过重叠保留上下文完整性，文本分割器确保文档的处理方式能够支持问答、摘要和文档检索等下游任务。&lt;/p>
&lt;h3 id="为什么要使用文本分割器">为什么要使用文本分割器？&lt;/h3>
&lt;p>在构建 RAG 管道时，将文本拆分为更小的块有以下几个关键目的：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>实现有效索引&lt;/strong>：块被嵌入并存储在向量数据库中，使其能够基于与用户查询的相似性进行检索。&lt;/li>
&lt;li>&lt;strong>保持语义连贯性&lt;/strong>：重叠的块有助于在分割之间保留上下文，确保系统能够连接相关信息。&lt;/li>
&lt;li>&lt;strong>处理模型限制&lt;/strong>：许多模型有输入大小限制。拆分确保文本在这些限制范围内同时保持有意义。&lt;/li>
&lt;/ul>
&lt;p>这一步对于将知识准备为可嵌入的搜索格式至关重要，是基于检索的工作流的基础。&lt;/p>
&lt;h3 id="文本拆分策略">文本拆分策略&lt;/h3>
&lt;p>文本分割器支持多种策略来有效处理不同类型的文档。这些策略在每个块的大小和保持上下文的需求之间取得平衡。&lt;/p>
&lt;h4 id="1-基于字符的长度">1. 基于字符的长度&lt;/h4>
&lt;ul>
&lt;li>&lt;strong>工作原理&lt;/strong>：计算每个块中的字符数。&lt;/li>
&lt;li>&lt;strong>适用场景&lt;/strong>：简单有效，无需依赖外部分词工具即可进行文本拆分。&lt;/li>
&lt;/ul>
&lt;p>示例：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">from&lt;/span> &lt;span style="color:#000">dapr_agents.document.splitter.text&lt;/span> &lt;span style="color:#204a87;font-weight:bold">import&lt;/span> &lt;span style="color:#000">TextSplitter&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 基于字符的分割器（默认）&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">splitter&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">TextSplitter&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">chunk_size&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1024&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span> &lt;span style="color:#000">chunk_overlap&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">200&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="2-基于令牌的长度">2. 基于令牌的长度&lt;/h4>
&lt;ul>
&lt;li>&lt;strong>工作原理&lt;/strong>：计算令牌数量，即语言模型使用的语义单元（例如单词或子词）。&lt;/li>
&lt;li>&lt;strong>适用场景&lt;/strong>：确保与 GPT 等模型的兼容性，令牌限制至关重要。&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>示例&lt;/strong>：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">import&lt;/span> &lt;span style="color:#000">tiktoken&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">from&lt;/span> &lt;span style="color:#000">dapr_agents.document.splitter.text&lt;/span> &lt;span style="color:#204a87;font-weight:bold">import&lt;/span> &lt;span style="color:#000">TextSplitter&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">enc&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">tiktoken&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">get_encoding&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;cl100k_base&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">def&lt;/span> &lt;span style="color:#000">length_function&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">text&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#204a87">str&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">-&amp;gt;&lt;/span> &lt;span style="color:#204a87">int&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">return&lt;/span> &lt;span style="color:#204a87">len&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">enc&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">encode&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">text&lt;/span>&lt;span style="color:#000;font-weight:bold">))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">splitter&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">TextSplitter&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">chunk_size&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1024&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">chunk_overlap&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">200&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">chunk_size_function&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#000">length_function&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>定义块大小函数的灵活性使文本分割器能够适应各种场景。&lt;/p>
&lt;h3 id="块重叠">块重叠&lt;/h3>
&lt;p>为了保留上下文，文本分割器包含块重叠功能。这确保了一个块的部分内容延续到下一个块，有助于在顺序处理块时保持连续性。&lt;/p>
&lt;p>示例：&lt;/p>
&lt;ul>
&lt;li>当 &lt;code>chunk_size=1024&lt;/code> 且 &lt;code>chunk_overlap=200&lt;/code> 时，一个块的最后 &lt;code>200&lt;/code> 个令牌或字符会出现在下一个块的开头。&lt;/li>
&lt;li>这种设计有助于文本生成等任务，在这些任务中跨块保持上下文至关重要。&lt;/li>
&lt;/ul>
&lt;h3 id="如何使用文本分割器">如何使用文本分割器&lt;/h3>
&lt;p>以下是使用文本分割器处理 PDF 文档的实用示例：&lt;/p>
&lt;h4 id="步骤-1加载-pdf">步骤 1：加载 PDF&lt;/h4>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">import&lt;/span> &lt;span style="color:#000">requests&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">from&lt;/span> &lt;span style="color:#000">pathlib&lt;/span> &lt;span style="color:#204a87;font-weight:bold">import&lt;/span> &lt;span style="color:#000">Path&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># Download PDF&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">pdf_url&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;https://arxiv.org/pdf/2412.05265.pdf&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">local_pdf_path&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">Path&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;arxiv_paper.pdf&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#204a87;font-weight:bold">not&lt;/span> &lt;span style="color:#000">local_pdf_path&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">exists&lt;/span>&lt;span style="color:#000;font-weight:bold">():&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">response&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">requests&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">get&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">pdf_url&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">response&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">raise_for_status&lt;/span>&lt;span style="color:#000;font-weight:bold">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">with&lt;/span> &lt;span style="color:#204a87">open&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">local_pdf_path&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;wb&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span> &lt;span style="color:#204a87;font-weight:bold">as&lt;/span> &lt;span style="color:#000">pdf_file&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">pdf_file&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">write&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">response&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">content&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="步骤-2读取文档">步骤 2：读取文档&lt;/h4>
&lt;p>在此示例中，我们使用 Dapr Agents 的 &lt;code>PyPDFReader&lt;/code>。&lt;/p></description></item><item><title>快速入门</title><link>https://docs.dapr.io/zh-hans/developing-ai/dapr-agents/dapr-agents-quickstarts/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.dapr.io/zh-hans/developing-ai/dapr-agents/dapr-agents-quickstarts/</guid><description>&lt;p>&lt;a href="https://github.com/dapr/dapr-agents/tree/main/quickstarts">Dapr Agents 快速入门&lt;/a>展示了如何使用 Dapr Agents 构建具有 LLM 驱动的自主代理和事件驱动工作流的应用程序。快速入门是一个单一渐进式教程，从基本 LLM 调用逐步构建到持久代理、工作流、多代理编排和可观测性。&lt;/p>
&lt;h4 id="开始之前">开始之前&lt;/h4>
&lt;ul>
&lt;li>&lt;a href="https://docs.dapr.io/zh-hans/getting-started/install-dapr-cli/">设置本地 Dapr 环境&lt;/a>。&lt;/li>
&lt;li>安装 &lt;a href="https://docs.astral.sh/uv/getting-started/installation/">uv&lt;/a>（快速入门使用的 Python 包管理器）。&lt;/li>
&lt;li>安装 &lt;a href="https://ollama.com/">Ollama&lt;/a> 进行本地 LLM 推理（默认），&lt;strong>或&lt;/strong>获取 &lt;a href="https://platform.openai.com/api-keys">OpenAI API 密钥&lt;/a>。&lt;/li>
&lt;/ul>
&lt;h2 id="dapr-agents-基础">Dapr Agents 基础&lt;/h2>
&lt;p>&lt;a href="https://github.com/dapr/dapr-agents/tree/main/quickstarts">Dapr Agents 基础快速入门&lt;/a>在单个编号 Python 脚本目录中覆盖了完整的 Dapr Agents 编程模型。每一步都构建在前一步之上。&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>步骤&lt;/th>
 &lt;th>文件&lt;/th>
 &lt;th>你将学到&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>1&lt;/td>
 &lt;td>&lt;a href="https://github.com/dapr/dapr-agents/blob/main/quickstarts/01_llm_client.py">&lt;code>01_llm_client.py&lt;/code>&lt;/a>&lt;/td>
 &lt;td>使用 &lt;code>DaprChatClient&lt;/code> 通过 Dapr Conversation API 调用 LLM&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>2&lt;/td>
 &lt;td>&lt;a href="https://github.com/dapr/dapr-agents/blob/main/quickstarts/02_durable_agent_http.py">&lt;code>02_durable_agent_http.py&lt;/code>&lt;/a>&lt;/td>
 &lt;td>运行由 Dapr 工作流支持的持久代理，通过 HTTP 暴露&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>3&lt;/td>
 &lt;td>&lt;a href="https://github.com/dapr/dapr-agents/blob/main/quickstarts/03_durable_agent_pubsub.py">&lt;code>03_durable_agent_pubsub.py&lt;/code>&lt;/a>&lt;/td>
 &lt;td>通过发布订阅而非 HTTP 触发持久代理&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>4&lt;/td>
 &lt;td>&lt;a href="https://github.com/dapr/dapr-agents/blob/main/quickstarts/04_workflow_llm.py">&lt;code>04_workflow_llm.py&lt;/code>&lt;/a>&lt;/td>
 &lt;td>构建调用 LLM 作为活动的确定性 Dapr 工作流&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>5&lt;/td>
 &lt;td>&lt;a href="https://github.com/dapr/dapr-agents/blob/main/quickstarts/05_workflow_agents.py">&lt;code>05_workflow_agents.py&lt;/code>&lt;/a>&lt;/td>
 &lt;td>将多个专业代理编排为子工作流&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>6&lt;/td>
 &lt;td>&lt;a href="https://github.com/dapr/dapr-agents/blob/main/quickstarts/06_durable_agent_tracing.py">&lt;code>06_durable_agent_tracing.py&lt;/code>&lt;/a>&lt;/td>
 &lt;td>使用 Zipkin 为代理和工作流启用分布式追踪&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>7&lt;/td>
 &lt;td>&lt;a href="https://github.com/dapr/dapr-agents/blob/main/quickstarts/07_durable_agent_hot_reload.py">&lt;code>07_durable_agent_hot_reload.py&lt;/code>&lt;/a>&lt;/td>
 &lt;td>通过 Dapr Configuration Store 在运行时热重载代理配置&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>有关完整的设置说明，包括 LLM 配置和先决条件，请参阅&lt;a href="https://github.com/dapr/dapr-agents/tree/main/quickstarts#readme">快速入门 README&lt;/a>。&lt;/p></description></item></channel></rss>