This is an automated email from the ASF dual-hosted git repository.

Yilialinn pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix.git


The following commit(s) were added to refs/heads/master by this push:
     new 449460168 docs(ai-request-rewrite): re-port with Admin API, ADC, and 
Ingress Controller tabs (#13210)
449460168 is described below

commit 44946016806b12273b39aa122f6c3ab649406169
Author: Yilia Lin <[email protected]>
AuthorDate: Wed Apr 22 14:45:03 2026 +0800

    docs(ai-request-rewrite): re-port with Admin API, ADC, and Ingress 
Controller tabs (#13210)
---
 docs/en/latest/plugins/ai-request-rewrite.md | 869 +++++++++++++++++++++++++--
 docs/zh/latest/plugins/ai-request-rewrite.md | 863 ++++++++++++++++++++++++--
 2 files changed, 1611 insertions(+), 121 deletions(-)

diff --git a/docs/en/latest/plugins/ai-request-rewrite.md 
b/docs/en/latest/plugins/ai-request-rewrite.md
index 6304f59fe..df518598d 100644
--- a/docs/en/latest/plugins/ai-request-rewrite.md
+++ b/docs/en/latest/plugins/ai-request-rewrite.md
@@ -5,7 +5,7 @@ keywords:
   - AI Gateway
   - Plugin
   - ai-request-rewrite
-description: The ai-request-rewrite plugin intercepts client requests before 
they are forwarded to the upstream service. It sends a predefined prompt, along 
with the original request body, to a specified LLM service. The LLM processes 
the input and returns a modified request body, which is then used for the 
upstream request. This allows dynamic transformation of API requests based on 
AI-generated content.
+description: The ai-request-rewrite plugin forwards client requests to LLM 
services for processing before sending them upstream, enabling AI-driven 
redaction, enrichment, and reformatting.
 ---
 
 <!--
@@ -27,70 +27,87 @@ description: The ai-request-rewrite plugin intercepts 
client requests before the
 #
 -->
 
+<head>
+  <link rel="canonical" href="https://docs.api7.ai/hub/ai-request-rewrite"; />
+</head>
+
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
 ## Description
 
-The `ai-request-rewrite` plugin intercepts client requests before they are 
forwarded to the upstream service. It sends a predefined prompt, along with the 
original request body, to a specified LLM service. The LLM processes the input 
and returns a modified request body, which is then used for the upstream 
request. This allows dynamic transformation of API requests based on 
AI-generated content.
+The `ai-request-rewrite` Plugin processes client requests by forwarding them 
to LLM services for transformation before relaying them to Upstream services. 
This enables LLM-powered modifications such as data redaction, content 
enrichment, or reformatting. The Plugin supports integration with OpenAI, 
DeepSeek, Gemini, Vertex AI, Anthropic, OpenRouter, and other OpenAI-compatible 
APIs.
 
 ## Plugin Attributes
 
-| **Field**                 | **Required** | **Type** | **Description**        
                                                              |
-| ------------------------- | ------------ | -------- | 
------------------------------------------------------------------------------------
 |
-| prompt                    | Yes          | String   | The prompt send to LLM 
service.                                                      |
-| provider                  | Yes          | String   | Name of the LLM 
service. Available options: openai, deekseek, azure-openai, aimlapi, anthropic, 
openrouter, gemini, vertex-ai, and openai-compatible. When `aimlapi` is 
selected, the plugin uses the OpenAI-compatible driver with a default endpoint 
of `https://api.aimlapi.com/v1/chat/completions`.   |
-| provider_conf             | No           | Object   | Configuration for the 
specific provider. Required when `provider` is set to `vertex-ai` and 
`override` is not configured. |
-| provider_conf.project_id  | Yes          | String   | Google Cloud Project 
ID. |
-| provider_conf.region      | Yes          | String   | Google Cloud Region. |
-| auth                      | Yes          | Object   | Authentication 
configuration                                                         |
-| auth.header               | No           | Object   | Authentication 
headers. Key must match pattern `^[a-zA-Z0-9._-]+$`.                  |
-| auth.query                | No           | Object   | Authentication query 
parameters. Key must match pattern `^[a-zA-Z0-9._-]+$`.         |
-| auth.gcp                  | No           | Object   | Configuration for 
Google Cloud Platform (GCP) authentication. |
-| auth.gcp.service_account_json | No       | String   | Content of the GCP 
service account JSON file. This can also be configured by setting the 
`GCP_SERVICE_ACCOUNT` environment variable. |
-| auth.gcp.max_ttl          | No           | Integer  | Maximum TTL (in 
seconds) for caching the GCP access token. Minimum: 1. |
-| auth.gcp.expire_early_secs| No           | Integer  | Seconds to expire the 
access token before its actual expiration time to avoid edge cases. Minimum: 0. 
Default: 60. |
-| options                   | No           | Object   | Key/value settings for 
the model                                                     |
-| options.model             | No           | String   | Model to execute. 
Examples: "gpt-3.5-turbo" for openai, "deepseek-chat" for deekseek, or 
"qwen-turbo" for openai-compatible or aimlapi services |
-| override.endpoint         | No           | String   | Override the default 
endpoint when using OpenAI-compatible services (e.g., self-hosted models or 
third-party LLM services). When the provider is 'openai-compatible', the 
endpoint field is required. |
-| timeout                   | No           | Integer  | Total timeout in 
milliseconds for requests to LLM service, including connect, send, and read 
timeouts. Range: 1 - 60000. Default: 30000|
-| keepalive                 | No           | Boolean  | Enable keepalive for 
requests to LLM service. Default: true                                  |
-| keepalive_timeout         | No           | Integer  | Keepalive timeout in 
milliseconds for requests to LLM service. Minimum: 1000. Default: 60000 |
-| keepalive_pool            | No           | Integer  | Keepalive pool size 
for requests to LLM service. Minimum: 1. Default: 30                     |
-| ssl_verify                | No           | Boolean  | SSL verification for 
requests to LLM service. Default: true                                  |
-
-## How it works
-
-![image](https://github.com/user-attachments/assets/c7288e4f-00fc-46ca-b69e-d3d74d7085ca)
+| Name | Type | Required | Default | Valid values | Description |
+| --- | --- | --- | --- | --- | --- |
+| `prompt` | string | True | | | The prompt to send to the LLM service for 
rewriting the client request. |
+| `provider` | string | True | | [openai, deepseek, azure-openai, aimlapi, 
gemini, vertex-ai, anthropic, openrouter, openai-compatible] | LLM service 
provider. When set to `aimlapi`, the Plugin uses the OpenAI-compatible driver 
and proxies the request to `https://api.aimlapi.com/v1/chat/completions`. When 
set to `openai-compatible`, the Plugin proxies requests to the custom endpoint 
configured in `override`. When set to `azure-openai`, the Plugin also proxies 
requests to the custom endpo [...]
+| `auth` | object | True | | | Authentication configurations. |
+| `auth.header` | object | False | | | Authentication headers. Key must match 
pattern `^[a-zA-Z0-9._-]+$`. At least one of `header` and `query` should be 
configured. |
+| `auth.query` | object | False | | | Authentication query parameters. Key 
must match pattern `^[a-zA-Z0-9._-]+$`. At least one of `header` and `query` 
should be configured. |
+| `options` | object | False | | | Model configurations. In addition to 
`model`, you can configure additional parameters and they will be forwarded to 
the upstream LLM service in the request body. For instance, if you are working 
with OpenAI, you can configure additional parameters such as `temperature`, 
`top_p`, and `stream`. See your LLM provider's API documentation for more 
available options. |
+| `options.model` | string | False | | | Name of the LLM model, such as 
`gpt-4` or `gpt-3.5`. See your LLM provider's API documentation for more 
available models. |
+| `override` | object | False | | | Override setting. |
+| `override.endpoint` | string | False | | | LLM provider endpoint. Required 
when `provider` is `openai-compatible`. |
+| `timeout` | integer | False | 30000 | 1 - 60000 | Request timeout in 
milliseconds when requesting the LLM service. |
+| `keepalive` | boolean | False | true | | If true, keep the connection alive 
when requesting the LLM service. |
+| `keepalive_timeout` | integer | False | 60000 | ≥ 1000 | Keepalive timeout 
in milliseconds for requests to the LLM service. |
+| `keepalive_pool` | integer | False | 30 | ≥ 1 | Keepalive pool size for 
connections to the LLM service. |
+| `ssl_verify` | boolean | False | true | | If true, verify the LLM service's 
SSL certificate. |
+
+## How It Works
+
+![How ai-request-rewrite 
works](https://static.api7.ai/uploads/2026/04/20/8J021g07_how-ai-request-rewrite-plugin-works.webp)
 
 ## Examples
 
 The examples below demonstrate how you can configure `ai-request-rewrite` for 
different scenarios.
 
+The examples use OpenAI as the LLM service. To follow along, obtain an OpenAI 
[API key](https://openai.com/blog/openai-api) and save it to an environment 
variable:
+
+```shell
+export OPENAI_API_KEY=<your-api-key>
+```
+
 :::note
 
-You can fetch the admin_key from config.yaml and save to an environment 
variable with the following command:
+You can fetch the `admin_key` from `config.yaml` and save to an environment 
variable with the following command:
 
+```shell
 admin_key=$(yq '.deployment.admin.admin_key[0].key' conf/config.yaml | sed 
's/"//g')
+```
 
 :::
 
-### Redact sensitive information
+### Redact Sensitive Information
+
+The following example demonstrates how to use the `ai-request-rewrite` Plugin 
to redact sensitive information before the request reaches the Upstream service.
+
+<Tabs groupId="api">
+<TabItem value="admin-api" label="Admin API">
+
+Create a Route and configure the `ai-request-rewrite` Plugin. The `provider` 
is set to `openai`, the OpenAI API key is passed in the `Authorization` header, 
and the `prompt` instructs the LLM to identify and mask sensitive information:
 
 ```shell
 curl "http://127.0.0.1:9180/apisix/admin/routes/1"; -X PUT \
   -H "X-API-KEY: ${admin_key}" \
   -d '{
     "uri": "/anything",
+    "methods": ["POST"],
     "plugins": {
       "ai-request-rewrite": {
-        "prompt": "Given a JSON request body, identify and mask any sensitive 
information such as credit card numbers, social security numbers, and personal 
identification numbers (e.g., passport or driver'\''s license numbers). Replace 
detected sensitive values with a masked format (e.g., \"*** **** **** 1234\") 
for credit card numbers. Ensure the JSON structure remains unchanged.",
         "provider": "openai",
         "auth": {
           "header": {
-            "Authorization": "Bearer <some-token>"
+            "Authorization": "Bearer '"$OPENAI_API_KEY"'"
           }
         },
-        "options": {
+        "options":{
           "model": "gpt-4"
-        }
+        },
+        "prompt": "Given a JSON request body, identify and mask any sensitive 
information such as credit card numbers, social security numbers, and personal 
identification numbers (e.g., passport or driver'\''s license numbers). Replace 
detected sensitive values with a masked format (e.g., \"*** **** **** 1234\") 
for credit card numbers. Ensure the JSON structure remains unchanged."
       }
     },
     "upstream": {
@@ -102,53 +119,623 @@ curl "http://127.0.0.1:9180/apisix/admin/routes/1"; -X 
PUT \
   }'
 ```
 
-Now send a request:
+</TabItem>
+<TabItem value="adc" label="ADC">
+
+Create a Route with the `ai-request-rewrite` Plugin:
+
+```yaml title="adc.yaml"
+services:
+  - name: ai-request-rewrite-service
+    routes:
+      - name: ai-request-rewrite-route
+        uris:
+          - /anything
+        methods:
+          - POST
+        plugins:
+          ai-request-rewrite:
+            provider: openai
+            auth:
+              header:
+                Authorization: "Bearer ${OPENAI_API_KEY}"
+            options:
+              model: gpt-4
+            prompt: "Given a JSON request body, identify and mask any 
sensitive information such as credit card numbers, social security numbers, and 
personal identification numbers (e.g., passport or driver's license numbers). 
Replace detected sensitive values with a masked format (e.g., \"*** **** **** 
1234\") for credit card numbers. Ensure the JSON structure remains unchanged."
+    upstream:
+      type: roundrobin
+      nodes:
+        - host: httpbin.org
+          port: 80
+          weight: 1
+```
+
+Synchronize the configuration to the gateway:
+
+```shell
+adc sync -f adc.yaml
+```
+
+</TabItem>
+<TabItem value="ingress" label="Ingress Controller">
+
+<Tabs groupId="k8s-api">
+<TabItem value="gateway-api" label="Gateway API">
+
+```yaml title="ai-request-rewrite-gw.yaml"
+apiVersion: v1
+kind: Service
+metadata:
+  namespace: aic
+  name: httpbin-external-domain
+spec:
+  type: ExternalName
+  externalName: httpbin.org
+---
+apiVersion: apisix.apache.org/v1alpha1
+kind: PluginConfig
+metadata:
+  namespace: aic
+  name: ai-request-rewrite-plugin-config
+spec:
+  plugins:
+    - name: ai-request-rewrite
+      config:
+        provider: openai
+        auth:
+          header:
+            Authorization: "Bearer your-api-key"
+        options:
+          model: gpt-4
+        prompt: "Given a JSON request body, identify and mask any sensitive 
information such as credit card numbers, social security numbers, and personal 
identification numbers (e.g., passport or driver's license numbers). Replace 
detected sensitive values with a masked format (e.g., \"*** **** **** 1234\") 
for credit card numbers. Ensure the JSON structure remains unchanged."
+---
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  namespace: aic
+  name: ai-request-rewrite-route
+spec:
+  parentRefs:
+    - name: apisix
+  rules:
+    - matches:
+        - path:
+            type: Exact
+            value: /anything
+          method: POST
+      filters:
+        - type: ExtensionRef
+          extensionRef:
+            group: apisix.apache.org
+            kind: PluginConfig
+            name: ai-request-rewrite-plugin-config
+      backendRefs:
+        - name: httpbin-external-domain
+          port: 80
+```
+
+</TabItem>
+<TabItem value="ingress" label="APISIX Ingress Controller">
+
+```yaml title="ai-request-rewrite-ic.yaml"
+apiVersion: apisix.apache.org/v2
+kind: ApisixUpstream
+metadata:
+  namespace: aic
+  name: httpbin-external-domain
+spec:
+  ingressClassName: apisix
+  externalNodes:
+  - type: Domain
+    name: httpbin.org
+---
+apiVersion: apisix.apache.org/v2
+kind: ApisixRoute
+metadata:
+  namespace: aic
+  name: ai-request-rewrite-route
+spec:
+  ingressClassName: apisix
+  http:
+    - name: ai-request-rewrite-route
+      match:
+        paths:
+          - /anything
+        methods:
+          - POST
+      upstreams:
+      - name: httpbin-external-domain
+      plugins:
+        - name: ai-request-rewrite
+          enable: true
+          config:
+            provider: openai
+            auth:
+              header:
+                Authorization: "Bearer your-api-key"
+            options:
+              model: gpt-4
+            prompt: "Given a JSON request body, identify and mask any 
sensitive information such as credit card numbers, social security numbers, and 
personal identification numbers (e.g., passport or driver's license numbers). 
Replace detected sensitive values with a masked format (e.g., \"*** **** **** 
1234\") for credit card numbers. Ensure the JSON structure remains unchanged."
+```
+
+</TabItem>
+</Tabs>
+
+Apply the configuration to your cluster:
+
+```shell
+kubectl apply -f ai-request-rewrite-ic.yaml
+```
+
+</TabItem>
+</Tabs>
+
+Send a POST request to the Route with some personally identifiable information:
+
+```shell
+curl "http://127.0.0.1:9080/anything"; -X POST \
+  -H "Content-Type: application/json" \
+  -d '{
+    "content": "John said his debit card number is 4111 1111 1111 1111 and SIN 
is 123-45-6789."
+  }'
+```
+
+You should receive a response similar to the following:
+
+```json
+{
+  "args": {},
+  "data": "{\"content\": \"John said his debit card number is **** **** **** 
1111 and SIN is ***-**-***.\"}",
+  ...,
+  "json": {
+    "content": "John said his debit card number is **** **** **** 1111 and SIN 
is ***-**-***."
+  },
+  "method": "POST",
+  "origin": "192.168.97.1, 103.97.2.170",
+  "url": "http://127.0.0.1/anything";
+}
+```
+
+### Reformat Data
+
+The following example demonstrates how to use the `ai-request-rewrite` Plugin 
to reformat data before the request reaches the Upstream service.
+
+<Tabs groupId="api">
+<TabItem value="admin-api" label="Admin API">
+
+Create a Route and configure the `ai-request-rewrite` Plugin. The `prompt` 
instructs the LLM to convert natural language queries into structured JSON:
+
+```shell
+curl "http://127.0.0.1:9180/apisix/admin/routes/1"; -X PUT \
+  -H "X-API-KEY: ${admin_key}" \
+  -d '{
+    "uri": "/anything",
+    "methods": ["POST"],
+    "plugins": {
+      "ai-request-rewrite": {
+        "provider": "openai",
+        "auth": {
+          "header": {
+            "Authorization": "Bearer '"$OPENAI_API_KEY"'"
+          }
+        },
+        "options":{
+          "model": "gpt-4"
+        },
+        "prompt": "Convert natural language queries into structured JSON 
format with intent and extracted parameters."
+      }
+    },
+    "upstream": {
+      "type": "roundrobin",
+      "nodes": {
+        "httpbin.org:80": 1
+      }
+    }
+  }'
+```
+
+</TabItem>
+<TabItem value="adc" label="ADC">
+
+Create a Route with the `ai-request-rewrite` Plugin:
+
+```yaml title="adc.yaml"
+services:
+  - name: ai-request-rewrite-service
+    routes:
+      - name: ai-request-rewrite-route
+        uris:
+          - /anything
+        methods:
+          - POST
+        plugins:
+          ai-request-rewrite:
+            provider: openai
+            auth:
+              header:
+                Authorization: "Bearer ${OPENAI_API_KEY}"
+            options:
+              model: gpt-4
+            prompt: "Convert natural language queries into structured JSON 
format with intent and extracted parameters."
+    upstream:
+      type: roundrobin
+      nodes:
+        - host: httpbin.org
+          port: 80
+          weight: 1
+```
+
+Synchronize the configuration to the gateway:
+
+```shell
+adc sync -f adc.yaml
+```
+
+</TabItem>
+<TabItem value="ingress" label="Ingress Controller">
+
+<Tabs groupId="k8s-api">
+<TabItem value="gateway-api" label="Gateway API">
+
+```yaml title="ai-request-rewrite-gw.yaml"
+apiVersion: v1
+kind: Service
+metadata:
+  namespace: aic
+  name: httpbin-external-domain
+spec:
+  type: ExternalName
+  externalName: httpbin.org
+---
+apiVersion: apisix.apache.org/v1alpha1
+kind: PluginConfig
+metadata:
+  namespace: aic
+  name: ai-request-rewrite-plugin-config
+spec:
+  plugins:
+    - name: ai-request-rewrite
+      config:
+        provider: openai
+        auth:
+          header:
+            Authorization: "Bearer your-api-key"
+        options:
+          model: gpt-4
+        prompt: "Convert natural language queries into structured JSON format 
with intent and extracted parameters."
+---
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  namespace: aic
+  name: ai-request-rewrite-route
+spec:
+  parentRefs:
+    - name: apisix
+  rules:
+    - matches:
+        - path:
+            type: Exact
+            value: /anything
+          method: POST
+      filters:
+        - type: ExtensionRef
+          extensionRef:
+            group: apisix.apache.org
+            kind: PluginConfig
+            name: ai-request-rewrite-plugin-config
+      backendRefs:
+        - name: httpbin-external-domain
+          port: 80
+```
+
+</TabItem>
+<TabItem value="ingress" label="APISIX Ingress Controller">
+
+```yaml title="ai-request-rewrite-ic.yaml"
+apiVersion: apisix.apache.org/v2
+kind: ApisixUpstream
+metadata:
+  namespace: aic
+  name: httpbin-external-domain
+spec:
+  ingressClassName: apisix
+  externalNodes:
+  - type: Domain
+    name: httpbin.org
+---
+apiVersion: apisix.apache.org/v2
+kind: ApisixRoute
+metadata:
+  namespace: aic
+  name: ai-request-rewrite-route
+spec:
+  ingressClassName: apisix
+  http:
+    - name: ai-request-rewrite-route
+      match:
+        paths:
+          - /anything
+        methods:
+          - POST
+      upstreams:
+      - name: httpbin-external-domain
+      plugins:
+        - name: ai-request-rewrite
+          enable: true
+          config:
+            provider: openai
+            auth:
+              header:
+                Authorization: "Bearer your-api-key"
+            options:
+              model: gpt-4
+            prompt: "Convert natural language queries into structured JSON 
format with intent and extracted parameters."
+```
+
+</TabItem>
+</Tabs>
+
+Apply the configuration to your cluster:
 
 ```shell
-curl "http://127.0.0.1:9080/anything"; \
+kubectl apply -f ai-request-rewrite-ic.yaml
+```
+
+</TabItem>
+</Tabs>
+
+Send a POST request to the Route:
+
+```shell
+curl "http://127.0.0.1:9080/anything"; -X POST \
   -H "Content-Type: application/json" \
   -d '{
-    "name": "John Doe",
-    "email": "[email protected]",
-    "credit_card": "4111 1111 1111 1111",
-    "ssn": "123-45-6789",
-    "address": "123 Main St"
+    "content": "Book a flight from NYC to LA on April 10, 2022."
   }'
 ```
 
-The request body send to the LLM Service is as follows:
+You should receive a response similar to the following:
 
 ```json
 {
-  "messages": [
-     {
-       "role": "system",
-       "content": "Given a JSON request body, identify and mask any sensitive 
information such as credit card numbers, social security numbers, and personal 
identification numbers (e.g., passport or driver's license numbers). Replace 
detected sensitive values with a masked format (e.g., '*** **** **** 1234') for 
credit card numbers). Ensure the JSON structure remains unchanged."
-     },
-     {
-       "role": "user",
-       "content": "{\n\"name\":\"John 
Doe\",\n\"email\":\"[email protected]\",\n\"credit_card\":\"4111 1111 1111 
1111\",\n\"ssn\":\"123-45-6789\",\n\"address\":\"123 Main St\"\n}"
-     }
-   ]
+  "args": {},
+  "data": "{\n  \"intent\": \"BookFlight\",\n  \"parameters\": {\n    
\"origin\": \"NYC\",\n    \"destination\": \"LA\",\n    \"date\": 
\"2022-04-10\"\n  }\n}",
+  ...,
+  "json": {
+    "intent": "BookFlight",
+    "parameters": {
+      "date": "2022-04-10",
+      "destination": "LA",
+      "origin": "NYC"
+    }
+  },
+  "method": "POST",
+  "origin": "192.168.97.1, 103.97.2.167",
+  "url": "http://127.0.0.1/anything";
 }
+```
+
+### Summarize Information
 
+The following example demonstrates how to use the `ai-request-rewrite` Plugin 
to summarize information before the request reaches the Upstream service.
+
+<Tabs groupId="api">
+<TabItem value="admin-api" label="Admin API">
+
+Create a Route and configure the `ai-request-rewrite` Plugin. The `prompt` 
instructs the LLM to summarize lengthy input while preserving key details:
+
+```shell
+curl "http://127.0.0.1:9180/apisix/admin/routes/1"; -X PUT \
+  -H "X-API-KEY: ${admin_key}" \
+  -d '{
+    "uri": "/anything",
+    "methods": ["POST"],
+    "plugins": {
+      "ai-request-rewrite": {
+        "provider": "openai",
+        "auth": {
+          "header": {
+            "Authorization": "Bearer '"$OPENAI_API_KEY"'"
+          }
+        },
+        "options":{
+          "model": "gpt-4"
+        },
+        "prompt": "Summarize lengthy input while preserving key details. 
Ensure the summary remains concise and informative."
+      }
+    },
+    "upstream": {
+      "type": "roundrobin",
+      "nodes": {
+        "httpbin.org:80": 1
+      }
+    }
+  }'
+```
+
+</TabItem>
+<TabItem value="adc" label="ADC">
+
+Create a Route with the `ai-request-rewrite` Plugin:
+
+```yaml title="adc.yaml"
+services:
+  - name: ai-request-rewrite-service
+    routes:
+      - name: ai-request-rewrite-route
+        uris:
+          - /anything
+        methods:
+          - POST
+        plugins:
+          ai-request-rewrite:
+            provider: openai
+            auth:
+              header:
+                Authorization: "Bearer ${OPENAI_API_KEY}"
+            options:
+              model: gpt-4
+            prompt: "Summarize lengthy input while preserving key details. 
Ensure the summary remains concise and informative."
+    upstream:
+      type: roundrobin
+      nodes:
+        - host: httpbin.org
+          port: 80
+          weight: 1
 ```
 
-The LLM processes the input and returns a modified request body, which replace 
detected sensitive values with a masked format then used for the upstream 
request:
+Synchronize the configuration to the gateway:
+
+```shell
+adc sync -f adc.yaml
+```
+
+</TabItem>
+<TabItem value="ingress" label="Ingress Controller">
+
+<Tabs groupId="k8s-api">
+<TabItem value="gateway-api" label="Gateway API">
+
+```yaml title="ai-request-rewrite-gw.yaml"
+apiVersion: v1
+kind: Service
+metadata:
+  namespace: aic
+  name: httpbin-external-domain
+spec:
+  type: ExternalName
+  externalName: httpbin.org
+---
+apiVersion: apisix.apache.org/v1alpha1
+kind: PluginConfig
+metadata:
+  namespace: aic
+  name: ai-request-rewrite-plugin-config
+spec:
+  plugins:
+    - name: ai-request-rewrite
+      config:
+        provider: openai
+        auth:
+          header:
+            Authorization: "Bearer your-api-key"
+        options:
+          model: gpt-4
+        prompt: "Summarize lengthy input while preserving key details. Ensure 
the summary remains concise and informative."
+---
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  namespace: aic
+  name: ai-request-rewrite-route
+spec:
+  parentRefs:
+    - name: apisix
+  rules:
+    - matches:
+        - path:
+            type: Exact
+            value: /anything
+          method: POST
+      filters:
+        - type: ExtensionRef
+          extensionRef:
+            group: apisix.apache.org
+            kind: PluginConfig
+            name: ai-request-rewrite-plugin-config
+      backendRefs:
+        - name: httpbin-external-domain
+          port: 80
+```
+
+</TabItem>
+<TabItem value="ingress" label="APISIX Ingress Controller">
+
+```yaml title="ai-request-rewrite-ic.yaml"
+apiVersion: apisix.apache.org/v2
+kind: ApisixUpstream
+metadata:
+  namespace: aic
+  name: httpbin-external-domain
+spec:
+  ingressClassName: apisix
+  externalNodes:
+  - type: Domain
+    name: httpbin.org
+---
+apiVersion: apisix.apache.org/v2
+kind: ApisixRoute
+metadata:
+  namespace: aic
+  name: ai-request-rewrite-route
+spec:
+  ingressClassName: apisix
+  http:
+    - name: ai-request-rewrite-route
+      match:
+        paths:
+          - /anything
+        methods:
+          - POST
+      upstreams:
+      - name: httpbin-external-domain
+      plugins:
+        - name: ai-request-rewrite
+          enable: true
+          config:
+            provider: openai
+            auth:
+              header:
+                Authorization: "Bearer your-api-key"
+            options:
+              model: gpt-4
+            prompt: "Summarize lengthy input while preserving key details. 
Ensure the summary remains concise and informative."
+```
+
+</TabItem>
+</Tabs>
+
+Apply the configuration to your cluster:
+
+```shell
+kubectl apply -f ai-request-rewrite-ic.yaml
+```
+
+</TabItem>
+</Tabs>
+
+Send a POST request to the Route with lengthy content:
+
+```shell
+curl "http://127.0.0.1:9080/anything"; -X POST \
+  -H "Content-Type: application/json" \
+  -d '{
+    "content": "Hey! So, I'\''m planning a trip to Japan next spring for about 
three weeks, and I want to visit Tokyo, Kyoto, and Osaka, but I'\''m not sure 
how to split my time between them. I really love history and cultural sites, so 
temples and shrines are a must. I'\''m also a big foodie, especially into ramen 
and sushi, so I'\''d love recommendations on the best spots. I prefer quieter 
areas for accommodation, but I don'\''t mind traveling into busy areas for 
sightseeing. Oh, and I [...]
+  }'
+```
+
+You should receive a response similar to the following:
 
 ```json
 {
-  "name": "John Doe",
-  "email": "[email protected]",
-  "credit_card": "**** **** **** 1111",
-  "ssn": "***-**-6789",
-  "address": "123 Main St"
+  "args": {},
+  "data": "The individual is planning a three-week trip to Japan in the 
spring, looking to visit Tokyo, Kyoto, and Osaka. They are interested in 
history, culture, temples, and shrines. They love ramen and sushi, so are 
seeking food recommendations. Accommodation should be in quieter areas, but 
they are open to busy sites for sightseeing. Along with these cities, they plan 
to make a day trip to either Hakone or Nara, hoping to see the cherry blossoms 
in early April. The best transport met [...]
+  ...,
+  "method": "POST",
+  "origin": "192.168.97.1, 103.97.2.171",
+  "url": "http://127.0.0.1/anything";
 }
 ```
 
-### Send request to an OpenAI compatible LLM
+### Send Request to an OpenAI-Compatible LLM
 
-Create a route with the `ai-request-rewrite` plugin with `provider` set to 
`openai-compatible` and the endpoint of the model set to `override.endpoint` 
like so:
+The following example demonstrates how to use the `ai-request-rewrite` Plugin 
with an OpenAI-compatible LLM provider by setting `provider` to 
`openai-compatible` and configuring the custom endpoint in `override.endpoint`.
+
+<Tabs groupId="api">
+<TabItem value="admin-api" label="Admin API">
+
+Create a Route and configure the `ai-request-rewrite` Plugin:
 
 ```shell
 curl "http://127.0.0.1:9180/apisix/admin/routes/1"; -X PUT \
@@ -157,11 +744,11 @@ curl "http://127.0.0.1:9180/apisix/admin/routes/1"; -X PUT 
\
     "uri": "/anything",
     "plugins": {
       "ai-request-rewrite": {
-        "prompt": "Given a JSON request body, identify and mask any sensitive 
information such as credit card numbers, social security numbers, and personal 
identification numbers (e.g., passport or driver'\''s license numbers). Replace 
detected sensitive values with a masked format (e.g., '*** **** **** 1234') for 
credit card numbers). Ensure the JSON structure remains unchanged.",
+        "prompt": "Given a JSON request body, identify and mask any sensitive 
information such as credit card numbers, social security numbers, and personal 
identification numbers (e.g., passport or driver'\''s license numbers). Replace 
detected sensitive values with a masked format (e.g., \"*** **** **** 1234\") 
for credit card numbers. Ensure the JSON structure remains unchanged.",
         "provider": "openai-compatible",
         "auth": {
           "header": {
-            "Authorization": "Bearer <some-token>"
+            "Authorization": "Bearer <your-api-key>"
           }
         },
         "options": {
@@ -182,3 +769,161 @@ curl "http://127.0.0.1:9180/apisix/admin/routes/1"; -X PUT 
\
     }
   }'
 ```
+
+</TabItem>
+<TabItem value="adc" label="ADC">
+
+Create a Route with the `ai-request-rewrite` Plugin:
+
+```yaml title="adc.yaml"
+services:
+  - name: ai-request-rewrite-service
+    routes:
+      - name: ai-request-rewrite-route
+        uris:
+          - /anything
+        plugins:
+          ai-request-rewrite:
+            prompt: "Given a JSON request body, identify and mask any 
sensitive information such as credit card numbers, social security numbers, and 
personal identification numbers (e.g., passport or driver's license numbers). 
Replace detected sensitive values with a masked format (e.g., \"*** **** **** 
1234\") for credit card numbers. Ensure the JSON structure remains unchanged."
+            provider: openai-compatible
+            auth:
+              header:
+                Authorization: "Bearer <your-api-key>"
+            options:
+              model: qwen-plus
+              max_tokens: 1024
+              temperature: 1
+            override:
+              endpoint: 
"https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions";
+    upstream:
+      type: roundrobin
+      nodes:
+        - host: httpbin.org
+          port: 80
+          weight: 1
+```
+
+Synchronize the configuration to the gateway:
+
+```shell
+adc sync -f adc.yaml
+```
+
+</TabItem>
+<TabItem value="ingress" label="Ingress Controller">
+
+<Tabs groupId="k8s-api">
+<TabItem value="gateway-api" label="Gateway API">
+
+```yaml title="ai-request-rewrite-gw.yaml"
+apiVersion: v1
+kind: Service
+metadata:
+  namespace: aic
+  name: httpbin-external-domain
+spec:
+  type: ExternalName
+  externalName: httpbin.org
+---
+apiVersion: apisix.apache.org/v1alpha1
+kind: PluginConfig
+metadata:
+  namespace: aic
+  name: ai-request-rewrite-plugin-config
+spec:
+  plugins:
+    - name: ai-request-rewrite
+      config:
+        prompt: "Given a JSON request body, identify and mask any sensitive 
information such as credit card numbers, social security numbers, and personal 
identification numbers (e.g., passport or driver's license numbers). Replace 
detected sensitive values with a masked format (e.g., \"*** **** **** 1234\") 
for credit card numbers. Ensure the JSON structure remains unchanged."
+        provider: openai-compatible
+        auth:
+          header:
+            Authorization: "Bearer your-api-key"
+        options:
+          model: qwen-plus
+          max_tokens: 1024
+          temperature: 1
+        override:
+          endpoint: 
"https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions";
+---
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  namespace: aic
+  name: ai-request-rewrite-route
+spec:
+  parentRefs:
+    - name: apisix
+  rules:
+    - matches:
+        - path:
+            type: Exact
+            value: /anything
+      filters:
+        - type: ExtensionRef
+          extensionRef:
+            group: apisix.apache.org
+            kind: PluginConfig
+            name: ai-request-rewrite-plugin-config
+      backendRefs:
+        - name: httpbin-external-domain
+          port: 80
+```
+
+</TabItem>
+<TabItem value="ingress" label="APISIX Ingress Controller">
+
+```yaml title="ai-request-rewrite-ic.yaml"
+apiVersion: apisix.apache.org/v2
+kind: ApisixUpstream
+metadata:
+  namespace: aic
+  name: httpbin-external-domain
+spec:
+  ingressClassName: apisix
+  externalNodes:
+  - type: Domain
+    name: httpbin.org
+---
+apiVersion: apisix.apache.org/v2
+kind: ApisixRoute
+metadata:
+  namespace: aic
+  name: ai-request-rewrite-route
+spec:
+  ingressClassName: apisix
+  http:
+    - name: ai-request-rewrite-route
+      match:
+        paths:
+          - /anything
+      upstreams:
+      - name: httpbin-external-domain
+      plugins:
+        - name: ai-request-rewrite
+          enable: true
+          config:
+            prompt: "Given a JSON request body, identify and mask any 
sensitive information such as credit card numbers, social security numbers, and 
personal identification numbers (e.g., passport or driver's license numbers). 
Replace detected sensitive values with a masked format (e.g., \"*** **** **** 
1234\") for credit card numbers. Ensure the JSON structure remains unchanged."
+            provider: openai-compatible
+            auth:
+              header:
+                Authorization: "Bearer your-api-key"
+            options:
+              model: qwen-plus
+              max_tokens: 1024
+              temperature: 1
+            override:
+              endpoint: 
"https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions";
+```
+
+</TabItem>
+</Tabs>
+
+Apply the configuration to your cluster:
+
+```shell
+kubectl apply -f ai-request-rewrite-ic.yaml
+```
+
+</TabItem>
+</Tabs>
diff --git a/docs/zh/latest/plugins/ai-request-rewrite.md 
b/docs/zh/latest/plugins/ai-request-rewrite.md
index 3768c0391..bd0c1c058 100644
--- a/docs/zh/latest/plugins/ai-request-rewrite.md
+++ b/docs/zh/latest/plugins/ai-request-rewrite.md
@@ -5,7 +5,7 @@ keywords:
   - AI 网关
   - Plugin
   - ai-request-rewrite
-description: ai-request-rewrite 插件在客户端请求转发到上游服务之前拦截请求。它将预定义的提示与原始请求体一起发送到指定的 
LLM 服务。LLM 处理输入并返回修改后的请求体,然后用于上游请求。这允许基于 AI 生成的内容动态转换 API 请求。
+description: ai-request-rewrite 插件在将客户端请求发送到上游服务之前,将其转发到 LLM 服务进行处理,实现 AI 
驱动的脱敏、内容增强和格式转换。
 ---
 
 <!--
@@ -27,70 +27,302 @@ description: ai-request-rewrite 插件在客户端请求转发到上游服务之
 #
 -->
 
+<head>
+  <link rel="canonical" href="https://docs.api7.ai/hub/ai-request-rewrite"; />
+</head>
+
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
 ## 描述
 
-`ai-request-rewrite` 插件在客户端请求转发到上游服务之前拦截请求。它将预定义的提示与原始请求体一起发送到指定的 LLM 服务。LLM 
处理输入并返回修改后的请求体,然后用于上游请求。这允许基于 AI 生成的内容动态转换 API 请求。
+`ai-request-rewrite` 插件在将客户端请求转发到上游服务之前,先将请求发送到 LLM 服务进行转换处理。这使得 LLM 
能够对请求进行数据脱敏、内容增强或格式转换等修改。该插件支持集成 OpenAI、DeepSeek、Gemini、Vertex 
AI、Anthropic、OpenRouter 以及其他 OpenAI 兼容的 API。
 
 ## 插件属性
 
-| **字段**                 | **必选项** | **类型** | **描述**                           
                                           |
-| ------------------------- | ------------ | -------- | 
------------------------------------------------------------------------------------
 |
-| prompt                    | 是          | String   | 发送到 LLM 服务的提示。           
                                           |
-| provider                  | 是          | String   | LLM 
服务的名称。可用选项:openai、deekseek、azure-openai、aimlapi、anthropic、openrouter、gemini、vertex-ai
 和 openai-compatible。当选择 `aimlapi` 时,插件使用 OpenAI 兼容驱动程序,默认端点为 
`https://api.aimlapi.com/v1/chat/completions`。   |
-| provider_conf             | 否           | Object   | 特定提供商的配置。当 `provider` 
设置为 `vertex-ai` 且未配置 `override` 时必填。 |
-| provider_conf.project_id  | 是           | String   | Google Cloud 项目 ID。 |
-| provider_conf.region      | 是           | String   | Google Cloud 区域。 |
-| auth                      | 是          | Object   | 身份验证配置                   
                                      |
-| auth.header               | 否           | Object   | 身份验证头部。键必须匹配模式 
`^[a-zA-Z0-9._-]+$`。                  |
-| auth.query                | 否           | Object   | 身份验证查询参数。键必须匹配模式 
`^[a-zA-Z0-9._-]+$`。         |
-| auth.gcp                  | 否           | Object   | Google Cloud Platform 
(GCP) 身份验证配置。 |
-| auth.gcp.service_account_json | 否       | String   | GCP 服务账号 JSON 
文件的内容。也可以通过设置“GCP_SERVICE_ACCOUNT”环境变量来配置。 |
-| auth.gcp.max_ttl          | 否           | Integer  | 缓存 GCP 访问令牌的最大 
TTL(秒)。最小值:1。 |
-| auth.gcp.expire_early_secs| 否           | Integer  | 
在访问令牌实际过期时间之前使其过期的秒数,以避免边缘情况。最小值:0。默认值:60。 |
-| options                   | 否           | Object   | 模型的键/值设置                
                                     |
-| options.model             | 否           | String   | 要执行的模型。示例:openai 的 
"gpt-3.5-turbo",deekseek 的 "deepseek-chat",或 openai-compatible 或 aimlapi 服务的 
"qwen-turbo" |
-| override.endpoint         | 否           | String   | 使用 OpenAI 
兼容服务时覆盖默认端点(例如,自托管模型或第三方 LLM 服务)。当提供商为 'openai-compatible' 时,endpoint 字段是必需的。 |
-| timeout                   | 否           | Integer  | 对 LLM 
服务请求的总超时时间(毫秒),包括连接、发送和读取超时。范围:1 - 60000。默认值:30000|
-| keepalive                 | 否           | Boolean  | 为对 LLM 服务的请求启用 
keepalive。默认值:true                                  |
-| keepalive_timeout         | 否           | Integer  | 对 LLM 服务请求的 keepalive 
超时时间(毫秒)。最小值:1000。默认值:60000 |
-| keepalive_pool            | 否           | Integer  | 对 LLM 服务请求的 keepalive 
池大小。最小值:1。默认值:30                     |
-| ssl_verify                | 否           | Boolean  | 对 LLM 服务请求的 SSL 
验证。默认值:true                                  |
+| 名称 | 类型 | 必选项 | 默认值 | 有效值 | 描述 |
+| --- | --- | --- | --- | --- | --- |
+| `prompt` | string | 是 | | | 发送到 LLM 服务用于重写客户端请求的提示词。 |
+| `provider` | string | 是 | | [openai, deepseek, azure-openai, aimlapi, 
gemini, vertex-ai, anthropic, openrouter, openai-compatible] | LLM 服务提供商。设置为 
`aimlapi` 时,插件使用 OpenAI 兼容驱动并将请求代理到 
`https://api.aimlapi.com/v1/chat/completions`。设置为 `openai-compatible` 
时,插件将请求代理到 `override` 中配置的自定义端点。设置为 `azure-openai` 时,插件同样将请求代理到 `override` 
中配置的自定义端点,并会额外移除用户请求中的 `model` 参数。 |
+| `auth` | object | 是 | | | 身份验证配置。 |
+| `auth.header` | object | 否 | | | 身份验证请求头。键必须匹配模式 
`^[a-zA-Z0-9._-]+$`。`header` 和 `query` 至少需要配置其中一个。 |
+| `auth.query` | object | 否 | | | 身份验证查询参数。键必须匹配模式 
`^[a-zA-Z0-9._-]+$`。`header` 和 `query` 至少需要配置其中一个。 |
+| `options` | object | 否 | | | 模型配置。除了 `model` 之外,还可以配置其他参数,这些参数会在请求体中转发给上游 
LLM 服务。例如,使用 OpenAI 时,可以配置 `temperature`、`top_p` 和 `stream` 等参数。更多可用选项请参阅 LLM 
提供商的 API 文档。 |
+| `options.model` | string | 否 | | | LLM 模型名称,例如 `gpt-4` 或 `gpt-3.5`。更多可用模型请参阅 
LLM 提供商的 API 文档。 |
+| `override` | object | 否 | | | 覆盖设置。 |
+| `override.endpoint` | string | 否 | | | LLM 提供商端点。当 `provider` 为 
`openai-compatible` 时必填。 |
+| `timeout` | integer | 否 | 30000 | 1 - 60000 | 请求 LLM 服务的超时时间(毫秒)。 |
+| `keepalive` | boolean | 否 | true | | 是否在请求 LLM 服务时保持连接。 |
+| `keepalive_timeout` | integer | 否 | 60000 | ≥ 1000 | 请求 LLM 服务的 keepalive 
超时时间(毫秒)。 |
+| `keepalive_pool` | integer | 否 | 30 | ≥ 1 | 连接 LLM 服务的 keepalive 连接池大小。 |
+| `ssl_verify` | boolean | 否 | true | | 是否验证 LLM 服务的 SSL 证书。 |
 
 ## 工作原理
 
-![image](https://github.com/user-attachments/assets/c7288e4f-00fc-46ca-b69e-d3d74d7085ca)
+![How ai-request-rewrite 
works](https://static.api7.ai/uploads/2026/04/20/8J021g07_how-ai-request-rewrite-plugin-works.webp)
 
 ## 示例
 
-以下示例演示了如何为不同场景配置 `ai-request-rewrite`。
+以下示例演示如何为不同场景配置 `ai-request-rewrite`。
+
+示例使用 OpenAI 作为 LLM 服务。请先获取 OpenAI [API 
密钥](https://openai.com/blog/openai-api)并将其保存到环境变量:
+
+```shell
+export OPENAI_API_KEY=<your-api-key>
+```
 
 :::note
 
-您可以使用以下命令从 config.yaml 获取 admin_key 并保存到环境变量中:
+你可以使用以下命令从 `config.yaml` 中获取 `admin_key` 并保存到环境变量:
 
+```shell
 admin_key=$(yq '.deployment.admin.admin_key[0].key' conf/config.yaml | sed 
's/"//g')
+```
 
 :::
 
-### 编辑敏感信息
+### 脱敏敏感信息
+
+以下示例演示如何使用 `ai-request-rewrite` 插件在请求到达上游服务之前脱敏敏感信息。
+
+<Tabs groupId="api">
+<TabItem value="admin-api" label="Admin API">
+
+创建路由并配置 `ai-request-rewrite` 插件。`provider` 设置为 `openai`,OpenAI API 密钥通过 
`Authorization` 请求头传递,`prompt` 指示 LLM 识别和屏蔽敏感信息:
 
 ```shell
 curl "http://127.0.0.1:9180/apisix/admin/routes/1"; -X PUT \
   -H "X-API-KEY: ${admin_key}" \
   -d '{
     "uri": "/anything",
+    "methods": ["POST"],
     "plugins": {
       "ai-request-rewrite": {
-        "prompt": "Given a JSON request body, identify and mask any sensitive 
information such as credit card numbers, social security numbers, and personal 
identification numbers (e.g., passport or driver'\''s license numbers). Replace 
detected sensitive values with a masked format (e.g., \"*** **** **** 1234\") 
for credit card numbers. Ensure the JSON structure remains unchanged.",
         "provider": "openai",
         "auth": {
           "header": {
-            "Authorization": "Bearer <some-token>"
+            "Authorization": "Bearer '"$OPENAI_API_KEY"'"
           }
         },
-        "options": {
+        "options":{
           "model": "gpt-4"
-        }
+        },
+        "prompt": "Given a JSON request body, identify and mask any sensitive 
information such as credit card numbers, social security numbers, and personal 
identification numbers (e.g., passport or driver'\''s license numbers). Replace 
detected sensitive values with a masked format (e.g., \"*** **** **** 1234\") 
for credit card numbers. Ensure the JSON structure remains unchanged."
+      }
+    },
+    "upstream": {
+      "type": "roundrobin",
+      "nodes": {
+        "httpbin.org:80": 1
+      }
+    }
+  }'
+```
+
+</TabItem>
+<TabItem value="adc" label="ADC">
+
+创建带有 `ai-request-rewrite` 插件的路由:
+
+```yaml title="adc.yaml"
+services:
+  - name: ai-request-rewrite-service
+    routes:
+      - name: ai-request-rewrite-route
+        uris:
+          - /anything
+        methods:
+          - POST
+        plugins:
+          ai-request-rewrite:
+            provider: openai
+            auth:
+              header:
+                Authorization: "Bearer ${OPENAI_API_KEY}"
+            options:
+              model: gpt-4
+            prompt: "Given a JSON request body, identify and mask any 
sensitive information such as credit card numbers, social security numbers, and 
personal identification numbers (e.g., passport or driver's license numbers). 
Replace detected sensitive values with a masked format (e.g., \"*** **** **** 
1234\") for credit card numbers. Ensure the JSON structure remains unchanged."
+    upstream:
+      type: roundrobin
+      nodes:
+        - host: httpbin.org
+          port: 80
+          weight: 1
+```
+
+将配置同步到网关:
+
+```shell
+adc sync -f adc.yaml
+```
+
+</TabItem>
+<TabItem value="ingress" label="Ingress Controller">
+
+<Tabs groupId="k8s-api">
+<TabItem value="gateway-api" label="Gateway API">
+
+```yaml title="ai-request-rewrite-gw.yaml"
+apiVersion: v1
+kind: Service
+metadata:
+  namespace: aic
+  name: httpbin-external-domain
+spec:
+  type: ExternalName
+  externalName: httpbin.org
+---
+apiVersion: apisix.apache.org/v1alpha1
+kind: PluginConfig
+metadata:
+  namespace: aic
+  name: ai-request-rewrite-plugin-config
+spec:
+  plugins:
+    - name: ai-request-rewrite
+      config:
+        provider: openai
+        auth:
+          header:
+            Authorization: "Bearer your-api-key"
+        options:
+          model: gpt-4
+        prompt: "Given a JSON request body, identify and mask any sensitive 
information such as credit card numbers, social security numbers, and personal 
identification numbers (e.g., passport or driver's license numbers). Replace 
detected sensitive values with a masked format (e.g., \"*** **** **** 1234\") 
for credit card numbers. Ensure the JSON structure remains unchanged."
+---
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  namespace: aic
+  name: ai-request-rewrite-route
+spec:
+  parentRefs:
+    - name: apisix
+  rules:
+    - matches:
+        - path:
+            type: Exact
+            value: /anything
+          method: POST
+      filters:
+        - type: ExtensionRef
+          extensionRef:
+            group: apisix.apache.org
+            kind: PluginConfig
+            name: ai-request-rewrite-plugin-config
+      backendRefs:
+        - name: httpbin-external-domain
+          port: 80
+```
+
+</TabItem>
+<TabItem value="ingress" label="APISIX Ingress Controller">
+
+```yaml title="ai-request-rewrite-ic.yaml"
+apiVersion: apisix.apache.org/v2
+kind: ApisixUpstream
+metadata:
+  namespace: aic
+  name: httpbin-external-domain
+spec:
+  ingressClassName: apisix
+  externalNodes:
+  - type: Domain
+    name: httpbin.org
+---
+apiVersion: apisix.apache.org/v2
+kind: ApisixRoute
+metadata:
+  namespace: aic
+  name: ai-request-rewrite-route
+spec:
+  ingressClassName: apisix
+  http:
+    - name: ai-request-rewrite-route
+      match:
+        paths:
+          - /anything
+        methods:
+          - POST
+      upstreams:
+      - name: httpbin-external-domain
+      plugins:
+        - name: ai-request-rewrite
+          enable: true
+          config:
+            provider: openai
+            auth:
+              header:
+                Authorization: "Bearer your-api-key"
+            options:
+              model: gpt-4
+            prompt: "Given a JSON request body, identify and mask any 
sensitive information such as credit card numbers, social security numbers, and 
personal identification numbers (e.g., passport or driver's license numbers). 
Replace detected sensitive values with a masked format (e.g., \"*** **** **** 
1234\") for credit card numbers. Ensure the JSON structure remains unchanged."
+```
+
+</TabItem>
+</Tabs>
+
+将配置应用到集群:
+
+```shell
+kubectl apply -f ai-request-rewrite-ic.yaml
+```
+
+</TabItem>
+</Tabs>
+
+发送一个包含个人敏感信息的 POST 请求到路由:
+
+```shell
+curl "http://127.0.0.1:9080/anything"; -X POST \
+  -H "Content-Type: application/json" \
+  -d '{
+    "content": "John said his debit card number is 4111 1111 1111 1111 and SIN 
is 123-45-6789."
+  }'
+```
+
+你应该收到类似以下的响应:
+
+```json
+{
+  "args": {},
+  "data": "{\"content\": \"John said his debit card number is **** **** **** 
1111 and SIN is ***-**-***.\"}",
+  ...,
+  "json": {
+    "content": "John said his debit card number is **** **** **** 1111 and SIN 
is ***-**-***."
+  },
+  "method": "POST",
+  "origin": "192.168.97.1, 103.97.2.170",
+  "url": "http://127.0.0.1/anything";
+}
+```
+
+### 格式转换
+
+以下示例演示如何使用 `ai-request-rewrite` 插件在请求到达上游服务之前对数据进行格式转换。
+
+<Tabs groupId="api">
+<TabItem value="admin-api" label="Admin API">
+
+创建路由并配置 `ai-request-rewrite` 插件。`prompt` 指示 LLM 将自然语言查询转换为结构化 JSON:
+
+```shell
+curl "http://127.0.0.1:9180/apisix/admin/routes/1"; -X PUT \
+  -H "X-API-KEY: ${admin_key}" \
+  -d '{
+    "uri": "/anything",
+    "methods": ["POST"],
+    "plugins": {
+      "ai-request-rewrite": {
+        "provider": "openai",
+        "auth": {
+          "header": {
+            "Authorization": "Bearer '"$OPENAI_API_KEY"'"
+          }
+        },
+        "options":{
+          "model": "gpt-4"
+        },
+        "prompt": "Convert natural language queries into structured JSON 
format with intent and extracted parameters."
       }
     },
     "upstream": {
@@ -102,53 +334,408 @@ curl "http://127.0.0.1:9180/apisix/admin/routes/1"; -X 
PUT \
   }'
 ```
 
-现在发送一个请求:
+</TabItem>
+<TabItem value="adc" label="ADC">
+
+创建带有 `ai-request-rewrite` 插件的路由:
+
+```yaml title="adc.yaml"
+services:
+  - name: ai-request-rewrite-service
+    routes:
+      - name: ai-request-rewrite-route
+        uris:
+          - /anything
+        methods:
+          - POST
+        plugins:
+          ai-request-rewrite:
+            provider: openai
+            auth:
+              header:
+                Authorization: "Bearer ${OPENAI_API_KEY}"
+            options:
+              model: gpt-4
+            prompt: "Convert natural language queries into structured JSON 
format with intent and extracted parameters."
+    upstream:
+      type: roundrobin
+      nodes:
+        - host: httpbin.org
+          port: 80
+          weight: 1
+```
+
+将配置同步到网关:
+
+```shell
+adc sync -f adc.yaml
+```
+
+</TabItem>
+<TabItem value="ingress" label="Ingress Controller">
+
+<Tabs groupId="k8s-api">
+<TabItem value="gateway-api" label="Gateway API">
+
+```yaml title="ai-request-rewrite-gw.yaml"
+apiVersion: v1
+kind: Service
+metadata:
+  namespace: aic
+  name: httpbin-external-domain
+spec:
+  type: ExternalName
+  externalName: httpbin.org
+---
+apiVersion: apisix.apache.org/v1alpha1
+kind: PluginConfig
+metadata:
+  namespace: aic
+  name: ai-request-rewrite-plugin-config
+spec:
+  plugins:
+    - name: ai-request-rewrite
+      config:
+        provider: openai
+        auth:
+          header:
+            Authorization: "Bearer your-api-key"
+        options:
+          model: gpt-4
+        prompt: "Convert natural language queries into structured JSON format 
with intent and extracted parameters."
+---
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  namespace: aic
+  name: ai-request-rewrite-route
+spec:
+  parentRefs:
+    - name: apisix
+  rules:
+    - matches:
+        - path:
+            type: Exact
+            value: /anything
+          method: POST
+      filters:
+        - type: ExtensionRef
+          extensionRef:
+            group: apisix.apache.org
+            kind: PluginConfig
+            name: ai-request-rewrite-plugin-config
+      backendRefs:
+        - name: httpbin-external-domain
+          port: 80
+```
+
+</TabItem>
+<TabItem value="ingress" label="APISIX Ingress Controller">
+
+```yaml title="ai-request-rewrite-ic.yaml"
+apiVersion: apisix.apache.org/v2
+kind: ApisixUpstream
+metadata:
+  namespace: aic
+  name: httpbin-external-domain
+spec:
+  ingressClassName: apisix
+  externalNodes:
+  - type: Domain
+    name: httpbin.org
+---
+apiVersion: apisix.apache.org/v2
+kind: ApisixRoute
+metadata:
+  namespace: aic
+  name: ai-request-rewrite-route
+spec:
+  ingressClassName: apisix
+  http:
+    - name: ai-request-rewrite-route
+      match:
+        paths:
+          - /anything
+        methods:
+          - POST
+      upstreams:
+      - name: httpbin-external-domain
+      plugins:
+        - name: ai-request-rewrite
+          enable: true
+          config:
+            provider: openai
+            auth:
+              header:
+                Authorization: "Bearer your-api-key"
+            options:
+              model: gpt-4
+            prompt: "Convert natural language queries into structured JSON 
format with intent and extracted parameters."
+```
+
+</TabItem>
+</Tabs>
+
+将配置应用到集群:
+
+```shell
+kubectl apply -f ai-request-rewrite-ic.yaml
+```
+
+</TabItem>
+</Tabs>
+
+发送一个 POST 请求到路由:
 
 ```shell
-curl "http://127.0.0.1:9080/anything"; \
+curl "http://127.0.0.1:9080/anything"; -X POST \
   -H "Content-Type: application/json" \
   -d '{
-    "name": "John Doe",
-    "email": "[email protected]",
-    "credit_card": "4111 1111 1111 1111",
-    "ssn": "123-45-6789",
-    "address": "123 Main St"
+    "content": "Book a flight from NYC to LA on April 10, 2022."
   }'
 ```
 
-发送到 LLM 服务的请求体如下:
+你应该收到类似以下的响应:
 
 ```json
 {
-  "messages": [
-     {
-       "role": "system",
-       "content": "Given a JSON request body, identify and mask any sensitive 
information such as credit card numbers, social security numbers, and personal 
identification numbers (e.g., passport or driver's license numbers). Replace 
detected sensitive values with a masked format (e.g., '*** **** **** 1234') for 
credit card numbers). Ensure the JSON structure remains unchanged."
-     },
-     {
-       "role": "user",
-       "content": "{\n\"name\":\"John 
Doe\",\n\"email\":\"[email protected]\",\n\"credit_card\":\"4111 1111 1111 
1111\",\n\"ssn\":\"123-45-6789\",\n\"address\":\"123 Main St\"\n}"
-     }
-   ]
+  "args": {},
+  "data": "{\n  \"intent\": \"BookFlight\",\n  \"parameters\": {\n    
\"origin\": \"NYC\",\n    \"destination\": \"LA\",\n    \"date\": 
\"2022-04-10\"\n  }\n}",
+  ...,
+  "json": {
+    "intent": "BookFlight",
+    "parameters": {
+      "date": "2022-04-10",
+      "destination": "LA",
+      "origin": "NYC"
+    }
+  },
+  "method": "POST",
+  "origin": "192.168.97.1, 103.97.2.167",
+  "url": "http://127.0.0.1/anything";
 }
+```
+
+### 信息摘要
+
+以下示例演示如何使用 `ai-request-rewrite` 插件在请求到达上游服务之前对信息进行摘要。
+
+<Tabs groupId="api">
+<TabItem value="admin-api" label="Admin API">
+
+创建路由并配置 `ai-request-rewrite` 插件。`prompt` 指示 LLM 在保留关键细节的同时对冗长输入进行摘要:
+
+```shell
+curl "http://127.0.0.1:9180/apisix/admin/routes/1"; -X PUT \
+  -H "X-API-KEY: ${admin_key}" \
+  -d '{
+    "uri": "/anything",
+    "methods": ["POST"],
+    "plugins": {
+      "ai-request-rewrite": {
+        "provider": "openai",
+        "auth": {
+          "header": {
+            "Authorization": "Bearer '"$OPENAI_API_KEY"'"
+          }
+        },
+        "options":{
+          "model": "gpt-4"
+        },
+        "prompt": "Summarize lengthy input while preserving key details. 
Ensure the summary remains concise and informative."
+      }
+    },
+    "upstream": {
+      "type": "roundrobin",
+      "nodes": {
+        "httpbin.org:80": 1
+      }
+    }
+  }'
+```
+
+</TabItem>
+<TabItem value="adc" label="ADC">
+
+创建带有 `ai-request-rewrite` 插件的路由:
+
+```yaml title="adc.yaml"
+services:
+  - name: ai-request-rewrite-service
+    routes:
+      - name: ai-request-rewrite-route
+        uris:
+          - /anything
+        methods:
+          - POST
+        plugins:
+          ai-request-rewrite:
+            provider: openai
+            auth:
+              header:
+                Authorization: "Bearer ${OPENAI_API_KEY}"
+            options:
+              model: gpt-4
+            prompt: "Summarize lengthy input while preserving key details. 
Ensure the summary remains concise and informative."
+    upstream:
+      type: roundrobin
+      nodes:
+        - host: httpbin.org
+          port: 80
+          weight: 1
+```
+
+将配置同步到网关:
+
+```shell
+adc sync -f adc.yaml
+```
 
+</TabItem>
+<TabItem value="ingress" label="Ingress Controller">
+
+<Tabs groupId="k8s-api">
+<TabItem value="gateway-api" label="Gateway API">
+
+```yaml title="ai-request-rewrite-gw.yaml"
+apiVersion: v1
+kind: Service
+metadata:
+  namespace: aic
+  name: httpbin-external-domain
+spec:
+  type: ExternalName
+  externalName: httpbin.org
+---
+apiVersion: apisix.apache.org/v1alpha1
+kind: PluginConfig
+metadata:
+  namespace: aic
+  name: ai-request-rewrite-plugin-config
+spec:
+  plugins:
+    - name: ai-request-rewrite
+      config:
+        provider: openai
+        auth:
+          header:
+            Authorization: "Bearer your-api-key"
+        options:
+          model: gpt-4
+        prompt: "Summarize lengthy input while preserving key details. Ensure 
the summary remains concise and informative."
+---
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  namespace: aic
+  name: ai-request-rewrite-route
+spec:
+  parentRefs:
+    - name: apisix
+  rules:
+    - matches:
+        - path:
+            type: Exact
+            value: /anything
+          method: POST
+      filters:
+        - type: ExtensionRef
+          extensionRef:
+            group: apisix.apache.org
+            kind: PluginConfig
+            name: ai-request-rewrite-plugin-config
+      backendRefs:
+        - name: httpbin-external-domain
+          port: 80
+```
+
+</TabItem>
+<TabItem value="ingress" label="APISIX Ingress Controller">
+
+```yaml title="ai-request-rewrite-ic.yaml"
+apiVersion: apisix.apache.org/v2
+kind: ApisixUpstream
+metadata:
+  namespace: aic
+  name: httpbin-external-domain
+spec:
+  ingressClassName: apisix
+  externalNodes:
+  - type: Domain
+    name: httpbin.org
+---
+apiVersion: apisix.apache.org/v2
+kind: ApisixRoute
+metadata:
+  namespace: aic
+  name: ai-request-rewrite-route
+spec:
+  ingressClassName: apisix
+  http:
+    - name: ai-request-rewrite-route
+      match:
+        paths:
+          - /anything
+        methods:
+          - POST
+      upstreams:
+      - name: httpbin-external-domain
+      plugins:
+        - name: ai-request-rewrite
+          enable: true
+          config:
+            provider: openai
+            auth:
+              header:
+                Authorization: "Bearer your-api-key"
+            options:
+              model: gpt-4
+            prompt: "Summarize lengthy input while preserving key details. 
Ensure the summary remains concise and informative."
+```
+
+</TabItem>
+</Tabs>
+
+将配置应用到集群:
+
+```shell
+kubectl apply -f ai-request-rewrite-ic.yaml
+```
+
+</TabItem>
+</Tabs>
+
+发送一个包含冗长内容的 POST 请求到路由:
+
+```shell
+curl "http://127.0.0.1:9080/anything"; -X POST \
+  -H "Content-Type: application/json" \
+  -d '{
+    "content": "Hey! So, I'\''m planning a trip to Japan next spring for about 
three weeks, and I want to visit Tokyo, Kyoto, and Osaka, but I'\''m not sure 
how to split my time between them. I really love history and cultural sites, so 
temples and shrines are a must. I'\''m also a big foodie, especially into ramen 
and sushi, so I'\''d love recommendations on the best spots. I prefer quieter 
areas for accommodation, but I don'\''t mind traveling into busy areas for 
sightseeing. Oh, and I [...]
+  }'
 ```
 
-LLM 处理输入并返回修改后的请求体,将检测到的敏感值替换为掩码格式,然后用于上游请求:
+你应该收到类似以下的响应:
 
 ```json
 {
-  "name": "John Doe",
-  "email": "[email protected]",
-  "credit_card": "**** **** **** 1111",
-  "ssn": "***-**-6789",
-  "address": "123 Main St"
+  "args": {},
+  "data": "The individual is planning a three-week trip to Japan in the 
spring, looking to visit Tokyo, Kyoto, and Osaka. They are interested in 
history, culture, temples, and shrines. They love ramen and sushi, so are 
seeking food recommendations. Accommodation should be in quieter areas, but 
they are open to busy sites for sightseeing. Along with these cities, they plan 
to make a day trip to either Hakone or Nara, hoping to see the cherry blossoms 
in early April. The best transport met [...]
+  ...,
+  "method": "POST",
+  "origin": "192.168.97.1, 103.97.2.171",
+  "url": "http://127.0.0.1/anything";
 }
 ```
 
 ### 向 OpenAI 兼容的 LLM 发送请求
 
-创建一个带有 `ai-request-rewrite` 插件的路由,将 `provider` 设置为 
`openai-compatible`,并将模型的端点设置为 `override.endpoint`,如下所示:
+以下示例演示如何通过将 `provider` 设置为 `openai-compatible` 并在 `override.endpoint` 
中配置自定义端点,来使用 `ai-request-rewrite` 插件与 OpenAI 兼容的 LLM 提供商。
+
+<Tabs groupId="api">
+<TabItem value="admin-api" label="Admin API">
+
+创建路由并配置 `ai-request-rewrite` 插件:
 
 ```shell
 curl "http://127.0.0.1:9180/apisix/admin/routes/1"; -X PUT \
@@ -157,11 +744,11 @@ curl "http://127.0.0.1:9180/apisix/admin/routes/1"; -X PUT 
\
     "uri": "/anything",
     "plugins": {
       "ai-request-rewrite": {
-        "prompt": "Given a JSON request body, identify and mask any sensitive 
information such as credit card numbers, social security numbers, and personal 
identification numbers (e.g., passport or driver'\''s license numbers). Replace 
detected sensitive values with a masked format (e.g., '*** **** **** 1234') for 
credit card numbers). Ensure the JSON structure remains unchanged.",
+        "prompt": "Given a JSON request body, identify and mask any sensitive 
information such as credit card numbers, social security numbers, and personal 
identification numbers (e.g., passport or driver'\''s license numbers). Replace 
detected sensitive values with a masked format (e.g., \"*** **** **** 1234\") 
for credit card numbers. Ensure the JSON structure remains unchanged.",
         "provider": "openai-compatible",
         "auth": {
           "header": {
-            "Authorization": "Bearer <some-token>"
+            "Authorization": "Bearer <your-api-key>"
           }
         },
         "options": {
@@ -182,3 +769,161 @@ curl "http://127.0.0.1:9180/apisix/admin/routes/1"; -X PUT 
\
     }
   }'
 ```
+
+</TabItem>
+<TabItem value="adc" label="ADC">
+
+创建带有 `ai-request-rewrite` 插件的路由:
+
+```yaml title="adc.yaml"
+services:
+  - name: ai-request-rewrite-service
+    routes:
+      - name: ai-request-rewrite-route
+        uris:
+          - /anything
+        plugins:
+          ai-request-rewrite:
+            prompt: "Given a JSON request body, identify and mask any 
sensitive information such as credit card numbers, social security numbers, and 
personal identification numbers (e.g., passport or driver's license numbers). 
Replace detected sensitive values with a masked format (e.g., \"*** **** **** 
1234\") for credit card numbers. Ensure the JSON structure remains unchanged."
+            provider: openai-compatible
+            auth:
+              header:
+                Authorization: "Bearer <your-api-key>"
+            options:
+              model: qwen-plus
+              max_tokens: 1024
+              temperature: 1
+            override:
+              endpoint: 
"https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions";
+    upstream:
+      type: roundrobin
+      nodes:
+        - host: httpbin.org
+          port: 80
+          weight: 1
+```
+
+将配置同步到网关:
+
+```shell
+adc sync -f adc.yaml
+```
+
+</TabItem>
+<TabItem value="ingress" label="Ingress Controller">
+
+<Tabs groupId="k8s-api">
+<TabItem value="gateway-api" label="Gateway API">
+
+```yaml title="ai-request-rewrite-gw.yaml"
+apiVersion: v1
+kind: Service
+metadata:
+  namespace: aic
+  name: httpbin-external-domain
+spec:
+  type: ExternalName
+  externalName: httpbin.org
+---
+apiVersion: apisix.apache.org/v1alpha1
+kind: PluginConfig
+metadata:
+  namespace: aic
+  name: ai-request-rewrite-plugin-config
+spec:
+  plugins:
+    - name: ai-request-rewrite
+      config:
+        prompt: "Given a JSON request body, identify and mask any sensitive 
information such as credit card numbers, social security numbers, and personal 
identification numbers (e.g., passport or driver's license numbers). Replace 
detected sensitive values with a masked format (e.g., \"*** **** **** 1234\") 
for credit card numbers. Ensure the JSON structure remains unchanged."
+        provider: openai-compatible
+        auth:
+          header:
+            Authorization: "Bearer your-api-key"
+        options:
+          model: qwen-plus
+          max_tokens: 1024
+          temperature: 1
+        override:
+          endpoint: 
"https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions";
+---
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  namespace: aic
+  name: ai-request-rewrite-route
+spec:
+  parentRefs:
+    - name: apisix
+  rules:
+    - matches:
+        - path:
+            type: Exact
+            value: /anything
+      filters:
+        - type: ExtensionRef
+          extensionRef:
+            group: apisix.apache.org
+            kind: PluginConfig
+            name: ai-request-rewrite-plugin-config
+      backendRefs:
+        - name: httpbin-external-domain
+          port: 80
+```
+
+</TabItem>
+<TabItem value="ingress" label="APISIX Ingress Controller">
+
+```yaml title="ai-request-rewrite-ic.yaml"
+apiVersion: apisix.apache.org/v2
+kind: ApisixUpstream
+metadata:
+  namespace: aic
+  name: httpbin-external-domain
+spec:
+  ingressClassName: apisix
+  externalNodes:
+  - type: Domain
+    name: httpbin.org
+---
+apiVersion: apisix.apache.org/v2
+kind: ApisixRoute
+metadata:
+  namespace: aic
+  name: ai-request-rewrite-route
+spec:
+  ingressClassName: apisix
+  http:
+    - name: ai-request-rewrite-route
+      match:
+        paths:
+          - /anything
+      upstreams:
+      - name: httpbin-external-domain
+      plugins:
+        - name: ai-request-rewrite
+          enable: true
+          config:
+            prompt: "Given a JSON request body, identify and mask any 
sensitive information such as credit card numbers, social security numbers, and 
personal identification numbers (e.g., passport or driver's license numbers). 
Replace detected sensitive values with a masked format (e.g., \"*** **** **** 
1234\") for credit card numbers. Ensure the JSON structure remains unchanged."
+            provider: openai-compatible
+            auth:
+              header:
+                Authorization: "Bearer your-api-key"
+            options:
+              model: qwen-plus
+              max_tokens: 1024
+              temperature: 1
+            override:
+              endpoint: 
"https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions";
+```
+
+</TabItem>
+</Tabs>
+
+将配置应用到集群:
+
+```shell
+kubectl apply -f ai-request-rewrite-ic.yaml
+```
+
+</TabItem>
+</Tabs>

Reply via email to