<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>AI Gateway on Apache Dubbo</title><link>https://deploy-preview-3202--dubbo.netlify.app/zh-cn/overview/reference/pixiu/ai/</link><description>Recent content in AI Gateway on Apache Dubbo</description><generator>Hugo</generator><language>zh-cn</language><atom:link href="https://deploy-preview-3202--dubbo.netlify.app/zh-cn/overview/reference/pixiu/ai/index.xml" rel="self" type="application/rss+xml"/><item><title>KVCache 卸载与分布式管理调度</title><link>https://deploy-preview-3202--dubbo.netlify.app/zh-cn/overview/reference/pixiu/ai/kvcache/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-3202--dubbo.netlify.app/zh-cn/overview/reference/pixiu/ai/kvcache/</guid><description>&lt;h2 id="ai-kvcache-过滤器配置">AI KVCache 过滤器配置&lt;/h2>
&lt;p>本文档说明如何在 Dubbo-go-Pixiu 中配置和使用 &lt;code>dgp.filter.ai.kvcache&lt;/code> 过滤器。&lt;/p>
&lt;p>该过滤器通过对接 vLLM（&lt;code>/tokenize&lt;/code>）与 LMCache controller API（&lt;code>/lookup&lt;/code>、&lt;code>/pin&lt;/code>、&lt;code>/compress&lt;/code>、&lt;code>/evict&lt;/code>），实现：&lt;/p>
&lt;ul>
&lt;li>cache 感知的路由提示&lt;/li>
&lt;li>异步缓存管理动作触发&lt;/li>
&lt;li>主请求链路非阻塞&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h3 id="架构与请求链路">架构与请求链路&lt;/h3>
&lt;p>&lt;code>dgp.filter.ai.kvcache&lt;/code> 是一个 HTTP Decode 过滤器。典型处理流程如下：&lt;/p>
&lt;ol>
&lt;li>读取请求体，提取 &lt;code>model&lt;/code> 与 &lt;code>prompt&lt;/code>（必要时从 &lt;code>messages&lt;/code> 回退提取）。&lt;/li>
&lt;li>在 TokenManager 中记录本地热点统计（&lt;code>model + prompt&lt;/code>）。&lt;/li>
&lt;li>尝试 cache 感知路由：
&lt;ul>
&lt;li>从本地 token cache 获取 token&lt;/li>
&lt;li>调用 LMCache &lt;code>/lookup&lt;/code>&lt;/li>
&lt;li>把优选端点提示写入上下文（&lt;code>llm_preferred_endpoint_id&lt;/code>）&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>启动异步缓存管理协程（best-effort）：
&lt;ul>
&lt;li>调用 vLLM &lt;code>/tokenize&lt;/code>&lt;/li>
&lt;li>必要时调用 LMCache &lt;code>/lookup&lt;/code>&lt;/li>
&lt;li>按策略执行 &lt;code>compress&lt;/code> / &lt;code>pin&lt;/code> / &lt;code>evict&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>立即放行后续过滤器链（主请求不被缓存管理阻塞）。&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h3 id="路由约定重点">路由约定（重点）&lt;/h3>
&lt;p>当前 cache 路由依赖 &lt;strong>instance id 对齐&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>kvcache 过滤器在上下文写入 &lt;code>llm_preferred_endpoint_id&lt;/code>&lt;/li>
&lt;li>&lt;code>dgp.filter.llm.proxy&lt;/code> 读取该值并按 &lt;code>endpoint.id&lt;/code> 选目标实例&lt;/li>
&lt;/ul>
&lt;p>因此要生效必须满足：&lt;/p></description></item><item><title>配置 MCP</title><link>https://deploy-preview-3202--dubbo.netlify.app/zh-cn/overview/reference/pixiu/ai/mcp/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-3202--dubbo.netlify.app/zh-cn/overview/reference/pixiu/ai/mcp/</guid><description>&lt;h2 id="mcp-model-context-protocol-网关配置">MCP (Model Context Protocol) 网关配置&lt;/h2>
&lt;p>本文档解释了如何在您的网关中配置 MCP (Model Context Protocol) 过滤器，使您能够安全地将后端 HTTP API 暴露为可供 AI Agent 调用的&amp;quot;工具&amp;quot;。&lt;/p>
&lt;h3 id="简介">简介&lt;/h3>
&lt;p>MCP (Model Context Protocol) 是一个智能桥梁，连接 AI Agent 与您现有的后端服务。它将一个简单、统一的协议动态转换为标准的 HTTP 请求，允许 Agent 与您的 API 进行交互，就好像它们是本地函数或工具一样。这种方法简化了 Agent 的开发，并为安全性、控制和可观察性提供了一个中心化的管理点。&lt;/p>
&lt;p>设置 MCP 端点主要涉及两个过滤器：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>&lt;code>dgp.filter.mcp.mcpserver&lt;/code>&lt;/strong>: 核心的 MCP 服务器过滤器，用于定义服务器的身份并将后端 API 暴露为工具。&lt;/li>
&lt;li>&lt;strong>&lt;code>dgp.filter.http.auth.mcp&lt;/code>&lt;/strong>: 一个可选但推荐使用的安全过滤器，它使用 OAuth 2.0 和基于 JWT 的授权来保护 MCP 端点。&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h3 id="mcp-服务器过滤器-dgpfiltermcpmcpserver-配置">MCP 服务器过滤器 (&lt;code>dgp.filter.mcp.mcpserver&lt;/code>) 配置&lt;/h3>
&lt;p>此过滤器是 MCP 网关的核心。它负责定义哪些工具可用，以及它们如何映射到您的后端 HTTP 服务。&lt;/p>
&lt;h4 id="服务器信息-server_info">服务器信息 (&lt;code>server_info&lt;/code>)&lt;/h4>
&lt;p>&lt;code>server_info&lt;/code> 块提供了有关您的 MCP 服务器的元数据，这对于服务发现和诊断非常有用。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">server_info&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">name&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;MCP OAuth 示例服务器&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">version&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;1.0.0&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">description&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;一个用于工具演示的受 OAuth 保护的 MCP 服务器&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">instructions&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;使用读/写令牌通过 MCP 与模拟服务器 API 进行交互&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;strong>&lt;code>name&lt;/code> (&lt;code>string&lt;/code>)&lt;/strong>: MCP 服务器的显示名称。&lt;/li>
&lt;li>&lt;strong>&lt;code>version&lt;/code> (&lt;code>string&lt;/code>)&lt;/strong>: 服务器的版本。&lt;/li>
&lt;li>&lt;strong>&lt;code>description&lt;/code> (&lt;code>string&lt;/code>)&lt;/strong>: 服务器用途的简要描述。&lt;/li>
&lt;li>&lt;strong>&lt;code>instructions&lt;/code> (&lt;code>string&lt;/code>)&lt;/strong>: 为客户端或开发者提供的关于如何与暴露的工具进行交互的说明。&lt;/li>
&lt;/ul>
&lt;h4 id="工具配置-tools">工具配置 (&lt;code>tools&lt;/code>)&lt;/h4>
&lt;p>&lt;code>tools&lt;/code> 部分是一个数组，其中每个项目定义了 MCP 网关暴露的单个工具。每个工具对应一个特定的后端 HTTP API 端点。&lt;/p></description></item><item><title>配置上游 endpoint</title><link>https://deploy-preview-3202--dubbo.netlify.app/zh-cn/overview/reference/pixiu/ai/endpoint/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-3202--dubbo.netlify.app/zh-cn/overview/reference/pixiu/ai/endpoint/</guid><description>&lt;h2 id="llm-网关-endpoint-配置">LLM 网关 endpoint 配置&lt;/h2>
&lt;p>本文档解释了如何在您的网关路由配置中为大语言模型 (LLM) 配置上游 endpoint。&lt;/p>
&lt;h3 id="endpoint-结构">endpoint 结构&lt;/h3>
&lt;p>集群中的每个 endpoint 都由一个 &lt;code>id&lt;/code> 定义，并且可以包含一个 &lt;code>llm_meta&lt;/code> 块用于自定义行为。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">clusters&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#268bd2">name&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;my_llm_cluster&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">endpoints&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#268bd2">id&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;provider-1-main&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">socket_address&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">domains&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - api.deepseek.com
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">llm_meta&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#586e75"># ... 其他特定于 LLM 的配置在此处 ...&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#268bd2">id&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;provider-2-fallback&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">socket_address&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">domains&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - api.openai.com/v1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">llm_meta&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#586e75"># ... 其他特定于 LLM 的配置在此处 ...&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="llm_meta-配置字段">&lt;code>llm_meta&lt;/code> 配置字段&lt;/h3>
&lt;p>&lt;code>llm_meta&lt;/code> 块包含所有与网关应如何处理此 LLM endpoint 相关的特定配置。&lt;/p>
&lt;p>&lt;code>fallback&lt;/code>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>类型&lt;/strong>: &lt;code>boolean&lt;/code>&lt;/li>
&lt;li>&lt;strong>描述&lt;/strong>: 决定如果在此endpoint上的所有重试尝试都失败后，网关是否应继续处理集群中的下一个 endpoint。
&lt;ul>
&lt;li>&lt;code>true&lt;/code>: 如果此endpoint失败，网关将尝试下一个可用的 endpoint。&lt;/li>
&lt;li>&lt;code>false&lt;/code>: 如果此endpoint失败，则处理停止，并将最后一个错误返回给客户端。对于 fallback 链中的最后一个 endpoint ，此值应设置为 &lt;code>false&lt;/code>。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>&lt;code>api_key&lt;/code>&lt;/p></description></item><item><title>注册服务到网关</title><link>https://deploy-preview-3202--dubbo.netlify.app/zh-cn/overview/reference/pixiu/ai/registry/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-3202--dubbo.netlify.app/zh-cn/overview/reference/pixiu/ai/registry/</guid><description>&lt;h2 id="llm-服务发现与注册">LLM 服务发现与注册&lt;/h2>
&lt;p>本文档旨在指导 LLM 服务提供商如何通过 Nacos 注册中心，将其服务实例动态地注册到 LLM 网关。通过遵循这些准则，网关将能够自动发现您的服务，并根据您提供的元数据（metadata）应用相应的路由、重试和 fallback 策略。&lt;/p>
&lt;h3 id="注册机制概述">注册机制概述&lt;/h3>
&lt;p>服务发现的核心机制是：您的 LLM 服务作为一个&lt;strong>Nacos 实例&lt;/strong>进行注册，并在注册时提供一组特定的&lt;strong>元数据&lt;/strong>。LLM 网关会监听 Nacos 中的服务变更，读取这些元数据，并将其动态地转换为一个功能齐全的网关 &lt;code>endpoint&lt;/code> 配置。&lt;/p>
&lt;p>一个基本的 Nacos 注册请求包含以下关键信息：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;code>ServiceName&lt;/code>&lt;/strong>: 您的服务集合的名称 (例如, &lt;code>deepseek-service&lt;/code>)。&lt;/li>
&lt;li>&lt;strong>&lt;code>Ip&lt;/code> &amp;amp; &lt;code>Port&lt;/code>&lt;/strong>: 您的服务实例监听流量的网络地址。&lt;/li>
&lt;li>&lt;strong>&lt;code>Metadata&lt;/code>&lt;/strong>: 一个键值对集合，&lt;strong>这是配置所有网关行为的关键&lt;/strong>。&lt;/li>
&lt;/ul>
&lt;h3 id="metadata-配置字段">&lt;code>metadata&lt;/code> 配置字段&lt;/h3>
&lt;p>所有网关的特定配置都通过 Nacos 实例的 &lt;code>metadata&lt;/code> 字段进行传递。以下是所有支持的 &lt;code>metadata&lt;/code> 键及其说明。&lt;/p>
&lt;p>&lt;code>cluster&lt;/code>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>类型&lt;/strong>: &lt;code>string&lt;/code>&lt;/li>
&lt;li>&lt;strong>必需&lt;/strong>: 是&lt;/li>
&lt;li>&lt;strong>描述&lt;/strong>: 定义此 endpoint 应归属到网关中的哪个集群 (&lt;code>cluster&lt;/code>)。网关会根据此值将具有相同 &lt;code>cluster&lt;/code> 名称的服务实例聚合在一起。&lt;/li>
&lt;li>&lt;strong>示例&lt;/strong>: &lt;code>&amp;quot;deepseek_cluster&amp;quot;&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>&lt;code>id&lt;/code>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>类型&lt;/strong>: &lt;code>string&lt;/code>&lt;/li>
&lt;li>&lt;strong>必需&lt;/strong>: 是&lt;/li>
&lt;li>&lt;strong>描述&lt;/strong>: endpoint 的唯一标识符。它在所属的 &lt;code>cluster&lt;/code> 内必须是唯一的。&lt;/li>
&lt;li>&lt;strong>示例&lt;/strong>: &lt;code>&amp;quot;deepseek-primary-instance-1&amp;quot;&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>&lt;code>ip&lt;/code>&lt;/p></description></item></channel></rss>