[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6ADQNC9S4G3CEKPE9M1G301":3,"skill-same:01M6ADQNC9S4G3CEKPE9M1G301":104},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":49,"linkOnly":50,"markdownContent":51,"markdownBody":52,"frontMatter":53,"refName":62,"commitSha":63,"skillDirectory":64,"forksCount":65,"repositoryHtmlUrl":66,"repositoryHomepageUrl":67,"ownerHtmlUrl":68,"ownerBlogUrl":69,"ownerDescription":70,"updatedAt":71,"install":72,"resources":85},"01M6ADQNC9S4G3CEKPE9M1G301","inference-serving-sglang",null,"Fast structured generation and serving for LLMs with RadixAttention prefix caching. Use for JSON\u002Fregex outputs, constrained decoding, agentic workflows with tool calls, or when you need 5× faster inference than vLLM with prefix sharing. Powers 300,000+ GPUs at xAI, AMD, NVIDIA, and LinkedIn.","davila7\u002Fclaude-code-templates","davila7","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6216945?v=4","01M6ADEWWFPS191NFM0Y1EX1JH","Daniel Avila","01M6ADJHGM78PHQRD3XZTFDVKK",33602,"MIT","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fai-research\u002Finference-serving-sglang\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],"inference","serving","inference serving sglang","Prefix Caching","when","at","you","caching","xai","Transformers","Production Scale","Fast Inference","JSON Output","Constrained Decoding","agentic","RadixAttention","Structured Generation","SGLang","Inference Serving","NVIDIA","fast","agentic workflows","workflows","research","llms","2026-11-10 10:12:30",false,"---\nname: inference-serving-sglang\ndescription: Fast structured generation and serving for LLMs with RadixAttention prefix caching. Use for JSON\u002Fregex outputs, constrained decoding, agentic workflows with tool calls, or when you need 5× faster inference than vLLM with prefix sharing. Powers 300,000+ GPUs at xAI, AMD, NVIDIA, and LinkedIn.\nversion: 1.0.0\nauthor: Orchestra Research\nlicense: MIT\ntags: [Inference Serving, SGLang, Structured Generation, RadixAttention, Prefix Caching, Constrained Decoding, Agents, JSON Output, Fast Inference, Production Scale]\ndependencies: [sglang, torch, transformers]\n---\n\n# SGLang\n\nHigh-performance serving framework for LLMs and VLMs with RadixAttention for automatic prefix caching.\n\n## When to use SGLang\n\n**Use SGLang when:**\n- Need structured outputs (JSON, regex, grammar)\n- Building agents with repeated prefixes (system prompts, tools)\n- Agentic workflows with function calling\n- Multi-turn conversations with shared context\n- Need faster JSON decoding (3× vs standard)\n\n**Use vLLM instead when:**\n- Simple text generation without structure\n- Don't need prefix caching\n- Want mature, widely-tested production system\n\n**Use TensorRT-LLM instead when:**\n- Maximum single-request latency (no batching needed)\n- NVIDIA-only deployment\n- Need FP8\u002FINT4 quantization on H100\n\n## Quick start\n\n### Installation\n\n```bash\n# pip install (recommended)\npip install \"sglang[all]\"\n\n# With FlashInfer (faster, CUDA 11.8\u002F12.1)\npip install sglang[all] flashinfer -i https:\u002F\u002Fflashinfer.ai\u002Fwhl\u002Fcu121\u002Ftorch2.4\u002F\n\n# From source\ngit clone https:\u002F\u002Fgithub.com\u002Fsgl-project\u002Fsglang.git\ncd sglang\npip install -e \"python[all]\"\n```\n\n### Launch server\n\n```bash\n# Basic server (Llama 3-8B)\npython -m sglang.launch_server \\\n    --model-path meta-llama\u002FMeta-Llama-3-8B-Instruct \\\n    --port 30000\n\n# With RadixAttention (automatic prefix caching)\npython -m sglang.launch_server \\\n    --model-path meta-llama\u002FMeta-Llama-3-8B-Instruct \\\n    --port 30000 \\\n    --enable-radix-cache  # Default: enabled\n\n# Multi-GPU (tensor parallelism)\npython -m sglang.launch_server \\\n    --model-path meta-llama\u002FMeta-Llama-3-70B-Instruct \\\n    --tp 4 \\\n    --port 30000\n```\n\n### Basic inference\n\n```python\nimport sglang as sgl\n\n# Set backend\nsgl.set_default_backend(sgl.OpenAI(\"http:\u002F\u002Flocalhost:30000\u002Fv1\"))\n\n# Simple generation\n@sgl.function\ndef simple_gen(s, question):\n    s += \"Q: \" + question + \"\\n\"\n    s += \"A:\" + sgl.gen(\"answer\", max_tokens=100)\n\n# Run\nstate = simple_gen.run(question=\"What is the capital of France?\")\nprint(state[\"answer\"])\n# Output: \"The capital of France is Paris.\"\n```\n\n### Structured JSON output\n\n```python\nimport sglang as sgl\n\n@sgl.function\ndef extract_person(s, text):\n    s += f\"Extract person information from: {text}\\n\"\n    s += \"Output JSON:\\n\"\n\n    # Constrained JSON generation\n    s += sgl.gen(\n        \"json_output\",\n        max_tokens=200,\n        regex=r'\\{\"name\": \"[^\"]+\", \"age\": \\d+, \"occupation\": \"[^\"]+\"\\}'\n    )\n\n# Run\nstate = extract_person.run(\n    text=\"John Smith is a 35-year-old software engineer.\"\n)\nprint(state[\"json_output\"])\n# Output: {\"name\": \"John Smith\", \"age\": 35, \"occupation\": \"software engineer\"}\n```\n\n## RadixAttention (Key Innovation)\n\n**What it does**: Automatically caches and reuses common prefixes across requests.\n\n**Performance**:\n- **5× faster** for agentic workloads with shared system prompts\n- **10× faster** for few-shot prompting with repeated examples\n- **Zero configuration** - works automatically\n\n**How it works**:\n1. Builds radix tree of all processed tokens\n2. Automatically detects shared prefixes\n3. Reuses KV cache for matching prefixes\n4. Only computes new tokens\n\n**Example** (Agent with system prompt):\n\n```\nRequest 1: [SYSTEM_PROMPT] + \"What's the weather?\"\n→ Computes full prompt (1000 tokens)\n\nRequest 2: [SAME_SYSTEM_PROMPT] + \"Book a flight\"\n→ Reuses system prompt KV cache (998 tokens)\n→ Only computes 2 new tokens\n→ 5× faster!\n```\n\n## Structured generation patterns\n\n### JSON with schema\n\n```python\n@sgl.function\ndef structured_extraction(s, article):\n    s += f\"Article: {article}\\n\\n\"\n    s += \"Extract key information as JSON:\\n\"\n\n    # JSON schema constraint\n    schema = {\n        \"type\": \"object\",\n        \"properties\": {\n            \"title\": {\"type\": \"string\"},\n            \"author\": {\"type\": \"string\"},\n            \"summary\": {\"type\": \"string\"},\n            \"sentiment\": {\"type\": \"string\", \"enum\": [\"positive\", \"negative\", \"neutral\"]}\n        },\n        \"required\": [\"title\", \"author\", \"summary\", \"sentiment\"]\n    }\n\n    s += sgl.gen(\"info\", max_tokens=300, json_schema=schema)\n\nstate = structured_extraction.run(article=\"...\")\nprint(state[\"info\"])\n# Output: Valid JSON matching schema\n```\n\n### Regex-constrained generation\n\n```python\n@sgl.function\ndef extract_email(s, text):\n    s += f\"Extract email from: {text}\\n\"\n    s += \"Email: \"\n\n    # Email regex pattern\n    s += sgl.gen(\n        \"email\",\n        max_tokens=50,\n        regex=r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}'\n    )\n\nstate = extract_email.run(text=\"Contact john.doe@example.com for details\")\nprint(state[\"email\"])\n# Output: \"john.doe@example.com\"\n```\n\n### Grammar-based generation\n\n```python\n@sgl.function\ndef generate_code(s, description):\n    s += f\"Generate Python code for: {description}\\n\"\n    s += \"```python\\n\"\n\n    # EBNF grammar for Python\n    python_grammar = \"\"\"\n    ?start: function_def\n    function_def: \"def\" NAME \"(\" [parameters] \"):\" suite\n    parameters: parameter (\",\" parameter)*\n    parameter: NAME\n    suite: simple_stmt | NEWLINE INDENT stmt+ DEDENT\n    \"\"\"\n\n    s += sgl.gen(\"code\", max_tokens=200, grammar=python_grammar)\n    s += \"\\n```\"\n```\n\n## Agent workflows with function calling\n\n```python\nimport sglang as sgl\n\n# Define tools\ntools = [\n    {\n        \"name\": \"get_weather\",\n        \"description\": \"Get weather for a location\",\n        \"parameters\": {\n            \"type\": \"object\",\n            \"properties\": {\n                \"location\": {\"type\": \"string\"}\n            }\n        }\n    },\n    {\n        \"name\": \"book_flight\",\n        \"description\": \"Book a flight\",\n        \"parameters\": {\n            \"type\": \"object\",\n            \"properties\": {\n                \"from\": {\"type\": \"string\"},\n                \"to\": {\"type\": \"string\"},\n                \"date\": {\"type\": \"string\"}\n            }\n        }\n    }\n]\n\n@sgl.function\ndef agent_workflow(s, user_query, tools):\n    # System prompt (cached with RadixAttention)\n    s += \"You are a helpful assistant with access to tools.\\n\"\n    s += f\"Available tools: {tools}\\n\\n\"\n\n    # User query\n    s += f\"User: {user_query}\\n\"\n    s += \"Assistant: \"\n\n    # Generate with function calling\n    s += sgl.gen(\n        \"response\",\n        max_tokens=200,\n        tools=tools,  # SGLang handles tool call format\n        stop=[\"User:\", \"\\n\\n\"]\n    )\n\n# Multiple queries reuse system prompt\nstate1 = agent_workflow.run(\n    user_query=\"What's the weather in NYC?\",\n    tools=tools\n)\n# First call: Computes full system prompt\n\nstate2 = agent_workflow.run(\n    user_query=\"Book a flight to LA\",\n    tools=tools\n)\n# Second call: Reuses system prompt (5× faster)\n```\n\n## Performance benchmarks\n\n### RadixAttention speedup\n\n**Few-shot prompting** (10 examples in prompt):\n- vLLM: 2.5 sec\u002Frequest\n- SGLang: **0.25 sec\u002Frequest** (10× faster)\n- Throughput: 4× higher\n\n**Agent workflows** (1000-token system prompt):\n- vLLM: 1.8 sec\u002Frequest\n- SGLang: **0.35 sec\u002Frequest** (5× faster)\n\n**JSON decoding**:\n- Standard: 45 tok\u002Fs\n- SGLang: **135 tok\u002Fs** (3× faster)\n\n### Throughput (Llama 3-8B, A100)\n\n| Workload | vLLM | SGLang | Speedup |\n|----------|------|--------|---------|\n| Simple generation | 2500 tok\u002Fs | 2800 tok\u002Fs | 1.12× |\n| Few-shot (10 examples) | 500 tok\u002Fs | 5000 tok\u002Fs | 10× |\n| Agent (tool calls) | 800 tok\u002Fs | 4000 tok\u002Fs | 5× |\n| JSON output | 600 tok\u002Fs | 2400 tok\u002Fs | 4× |\n\n## Multi-turn conversations\n\n```python\n@sgl.function\ndef multi_turn_chat(s, history, new_message):\n    # System prompt (always cached)\n    s += \"You are a helpful AI assistant.\\n\\n\"\n\n    # Conversation history (cached as it grows)\n    for msg in history:\n        s += f\"{msg['role']}: {msg['content']}\\n\"\n\n    # New user message (only new part)\n    s += f\"User: {new_message}\\n\"\n    s += \"Assistant: \"\n    s += sgl.gen(\"response\", max_tokens=200)\n\n# Turn 1\nhistory = []\nstate = multi_turn_chat.run(history=history, new_message=\"Hi there!\")\nhistory.append({\"role\": \"User\", \"content\": \"Hi there!\"})\nhistory.append({\"role\": \"Assistant\", \"content\": state[\"response\"]})\n\n# Turn 2 (reuses Turn 1 KV cache)\nstate = multi_turn_chat.run(history=history, new_message=\"What's 2+2?\")\n# Only computes new message (much faster!)\n\n# Turn 3 (reuses Turn 1 + Turn 2 KV cache)\nstate = multi_turn_chat.run(history=history, new_message=\"Tell me a joke\")\n# Progressively faster as history grows\n```\n\n## Advanced features\n\n### Speculative decoding\n\n```bash\n# Launch with draft model (2-3× faster)\npython -m sglang.launch_server \\\n    --model-path meta-llama\u002FMeta-Llama-3-70B-Instruct \\\n    --speculative-model meta-llama\u002FMeta-Llama-3-8B-Instruct \\\n    --speculative-num-steps 5\n```\n\n### Multi-modal (vision models)\n\n```python\n@sgl.function\ndef describe_image(s, image_path):\n    s += sgl.image(image_path)\n    s += \"Describe this image in detail: \"\n    s += sgl.gen(\"description\", max_tokens=200)\n\nstate = describe_image.run(image_path=\"photo.jpg\")\nprint(state[\"description\"])\n```\n\n### Batching and parallel requests\n\n```python\n# Automatic batching (continuous batching)\nstates = sgl.run_batch(\n    [\n        simple_gen.bind(question=\"What is AI?\"),\n        simple_gen.bind(question=\"What is ML?\"),\n        simple_gen.bind(question=\"What is DL?\"),\n    ]\n)\n\n# All 3 processed in single batch (efficient)\n```\n\n## OpenAI-compatible API\n\n```bash\n# Start server with OpenAI API\npython -m sglang.launch_server \\\n    --model-path meta-llama\u002FMeta-Llama-3-8B-Instruct \\\n    --port 30000\n\n# Use with OpenAI client\ncurl http:\u002F\u002Flocalhost:30000\u002Fv1\u002Fchat\u002Fcompletions \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"model\": \"default\",\n    \"messages\": [\n      {\"role\": \"system\", \"content\": \"You are helpful\"},\n      {\"role\": \"user\", \"content\": \"Hello\"}\n    ],\n    \"temperature\": 0.7,\n    \"max_tokens\": 100\n  }'\n\n# Works with OpenAI Python SDK\nfrom openai import OpenAI\nclient = OpenAI(base_url=\"http:\u002F\u002Flocalhost:30000\u002Fv1\", api_key=\"EMPTY\")\n\nresponse = client.chat.completions.create(\n    model=\"default\",\n    messages=[{\"role\": \"user\", \"content\": \"Hello\"}]\n)\n```\n\n## Supported models\n\n**Text models**:\n- Llama 2, Llama 3, Llama 3.1, Llama 3.2\n- Mistral, Mixtral\n- Qwen, Qwen2, QwQ\n- DeepSeek-V2, DeepSeek-V3\n- Gemma, Phi-3\n\n**Vision models**:\n- LLaVA, LLaVA-OneVision\n- Phi-3-Vision\n- Qwen2-VL\n\n**100+ models** from HuggingFace\n\n## Hardware support\n\n**NVIDIA**: A100, H100, L4, T4 (CUDA 11.8+)\n**AMD**: MI300, MI250 (ROCm 6.0+)\n**Intel**: Xeon with GPU (coming soon)\n**Apple**: M1\u002FM2\u002FM3 via MPS (experimental)\n\n## References\n\n- **[Structured Generation Guide](references\u002Fstructured-generation.md)** - JSON schemas, regex, grammars, validation\n- **[RadixAttention Deep Dive](references\u002Fradix-attention.md)** - How it works, optimization, benchmarks\n- **[Production Deployment](references\u002Fdeployment.md)** - Multi-GPU, monitoring, autoscaling\n\n## Resources\n\n- **GitHub**: https:\u002F\u002Fgithub.com\u002Fsgl-project\u002Fsglang\n- **Docs**: https:\u002F\u002Fsgl-project.github.io\u002F\n- **Paper**: RadixAttention (arXiv:2312.07104)\n- **Discord**: https:\u002F\u002Fdiscord.gg\u002Fsglang\n\n\n","# SGLang\n\nHigh-performance serving framework for LLMs and VLMs with RadixAttention for automatic prefix caching.\n\n## When to use SGLang\n\n**Use SGLang when:**\n- Need structured outputs (JSON, regex, grammar)\n- Building agents with repeated prefixes (system prompts, tools)\n- Agentic workflows with function calling\n- Multi-turn conversations with shared context\n- Need faster JSON decoding (3× vs standard)\n\n**Use vLLM instead when:**\n- Simple text generation without structure\n- Don't need prefix caching\n- Want mature, widely-tested production system\n\n**Use TensorRT-LLM instead when:**\n- Maximum single-request latency (no batching needed)\n- NVIDIA-only deployment\n- Need FP8\u002FINT4 quantization on H100\n\n## Quick start\n\n### Installation\n\n```bash\n# pip install (recommended)\npip install \"sglang[all]\"\n\n# With FlashInfer (faster, CUDA 11.8\u002F12.1)\npip install sglang[all] flashinfer -i https:\u002F\u002Fflashinfer.ai\u002Fwhl\u002Fcu121\u002Ftorch2.4\u002F\n\n# From source\ngit clone https:\u002F\u002Fgithub.com\u002Fsgl-project\u002Fsglang.git\ncd sglang\npip install -e \"python[all]\"\n```\n\n### Launch server\n\n```bash\n# Basic server (Llama 3-8B)\npython -m sglang.launch_server \\\n    --model-path meta-llama\u002FMeta-Llama-3-8B-Instruct \\\n    --port 30000\n\n# With RadixAttention (automatic prefix caching)\npython -m sglang.launch_server \\\n    --model-path meta-llama\u002FMeta-Llama-3-8B-Instruct \\\n    --port 30000 \\\n    --enable-radix-cache  # Default: enabled\n\n# Multi-GPU (tensor parallelism)\npython -m sglang.launch_server \\\n    --model-path meta-llama\u002FMeta-Llama-3-70B-Instruct \\\n    --tp 4 \\\n    --port 30000\n```\n\n### Basic inference\n\n```python\nimport sglang as sgl\n\n# Set backend\nsgl.set_default_backend(sgl.OpenAI(\"http:\u002F\u002Flocalhost:30000\u002Fv1\"))\n\n# Simple generation\n@sgl.function\ndef simple_gen(s, question):\n    s += \"Q: \" + question + \"\\n\"\n    s += \"A:\" + sgl.gen(\"answer\", max_tokens=100)\n\n# Run\nstate = simple_gen.run(question=\"What is the capital of France?\")\nprint(state[\"answer\"])\n# Output: \"The capital of France is Paris.\"\n```\n\n### Structured JSON output\n\n```python\nimport sglang as sgl\n\n@sgl.function\ndef extract_person(s, text):\n    s += f\"Extract person information from: {text}\\n\"\n    s += \"Output JSON:\\n\"\n\n    # Constrained JSON generation\n    s += sgl.gen(\n        \"json_output\",\n        max_tokens=200,\n        regex=r'\\{\"name\": \"[^\"]+\", \"age\": \\d+, \"occupation\": \"[^\"]+\"\\}'\n    )\n\n# Run\nstate = extract_person.run(\n    text=\"John Smith is a 35-year-old software engineer.\"\n)\nprint(state[\"json_output\"])\n# Output: {\"name\": \"John Smith\", \"age\": 35, \"occupation\": \"software engineer\"}\n```\n\n## RadixAttention (Key Innovation)\n\n**What it does**: Automatically caches and reuses common prefixes across requests.\n\n**Performance**:\n- **5× faster** for agentic workloads with shared system prompts\n- **10× faster** for few-shot prompting with repeated examples\n- **Zero configuration** - works automatically\n\n**How it works**:\n1. Builds radix tree of all processed tokens\n2. Automatically detects shared prefixes\n3. Reuses KV cache for matching prefixes\n4. Only computes new tokens\n\n**Example** (Agent with system prompt):\n\n```\nRequest 1: [SYSTEM_PROMPT] + \"What's the weather?\"\n→ Computes full prompt (1000 tokens)\n\nRequest 2: [SAME_SYSTEM_PROMPT] + \"Book a flight\"\n→ Reuses system prompt KV cache (998 tokens)\n→ Only computes 2 new tokens\n→ 5× faster!\n```\n\n## Structured generation patterns\n\n### JSON with schema\n\n```python\n@sgl.function\ndef structured_extraction(s, article):\n    s += f\"Article: {article}\\n\\n\"\n    s += \"Extract key information as JSON:\\n\"\n\n    # JSON schema constraint\n    schema = {\n        \"type\": \"object\",\n        \"properties\": {\n            \"title\": {\"type\": \"string\"},\n            \"author\": {\"type\": \"string\"},\n            \"summary\": {\"type\": \"string\"},\n            \"sentiment\": {\"type\": \"string\", \"enum\": [\"positive\", \"negative\", \"neutral\"]}\n        },\n        \"required\": [\"title\", \"author\", \"summary\", \"sentiment\"]\n    }\n\n    s += sgl.gen(\"info\", max_tokens=300, json_schema=schema)\n\nstate = structured_extraction.run(article=\"...\")\nprint(state[\"info\"])\n# Output: Valid JSON matching schema\n```\n\n### Regex-constrained generation\n\n```python\n@sgl.function\ndef extract_email(s, text):\n    s += f\"Extract email from: {text}\\n\"\n    s += \"Email: \"\n\n    # Email regex pattern\n    s += sgl.gen(\n        \"email\",\n        max_tokens=50,\n        regex=r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}'\n    )\n\nstate = extract_email.run(text=\"Contact john.doe@example.com for details\")\nprint(state[\"email\"])\n# Output: \"john.doe@example.com\"\n```\n\n### Grammar-based generation\n\n```python\n@sgl.function\ndef generate_code(s, description):\n    s += f\"Generate Python code for: {description}\\n\"\n    s += \"```python\\n\"\n\n    # EBNF grammar for Python\n    python_grammar = \"\"\"\n    ?start: function_def\n    function_def: \"def\" NAME \"(\" [parameters] \"):\" suite\n    parameters: parameter (\",\" parameter)*\n    parameter: NAME\n    suite: simple_stmt | NEWLINE INDENT stmt+ DEDENT\n    \"\"\"\n\n    s += sgl.gen(\"code\", max_tokens=200, grammar=python_grammar)\n    s += \"\\n```\"\n```\n\n## Agent workflows with function calling\n\n```python\nimport sglang as sgl\n\n# Define tools\ntools = [\n    {\n        \"name\": \"get_weather\",\n        \"description\": \"Get weather for a location\",\n        \"parameters\": {\n            \"type\": \"object\",\n            \"properties\": {\n                \"location\": {\"type\": \"string\"}\n            }\n        }\n    },\n    {\n        \"name\": \"book_flight\",\n        \"description\": \"Book a flight\",\n        \"parameters\": {\n            \"type\": \"object\",\n            \"properties\": {\n                \"from\": {\"type\": \"string\"},\n                \"to\": {\"type\": \"string\"},\n                \"date\": {\"type\": \"string\"}\n            }\n        }\n    }\n]\n\n@sgl.function\ndef agent_workflow(s, user_query, tools):\n    # System prompt (cached with RadixAttention)\n    s += \"You are a helpful assistant with access to tools.\\n\"\n    s += f\"Available tools: {tools}\\n\\n\"\n\n    # User query\n    s += f\"User: {user_query}\\n\"\n    s += \"Assistant: \"\n\n    # Generate with function calling\n    s += sgl.gen(\n        \"response\",\n        max_tokens=200,\n        tools=tools,  # SGLang handles tool call format\n        stop=[\"User:\", \"\\n\\n\"]\n    )\n\n# Multiple queries reuse system prompt\nstate1 = agent_workflow.run(\n    user_query=\"What's the weather in NYC?\",\n    tools=tools\n)\n# First call: Computes full system prompt\n\nstate2 = agent_workflow.run(\n    user_query=\"Book a flight to LA\",\n    tools=tools\n)\n# Second call: Reuses system prompt (5× faster)\n```\n\n## Performance benchmarks\n\n### RadixAttention speedup\n\n**Few-shot prompting** (10 examples in prompt):\n- vLLM: 2.5 sec\u002Frequest\n- SGLang: **0.25 sec\u002Frequest** (10× faster)\n- Throughput: 4× higher\n\n**Agent workflows** (1000-token system prompt):\n- vLLM: 1.8 sec\u002Frequest\n- SGLang: **0.35 sec\u002Frequest** (5× faster)\n\n**JSON decoding**:\n- Standard: 45 tok\u002Fs\n- SGLang: **135 tok\u002Fs** (3× faster)\n\n### Throughput (Llama 3-8B, A100)\n\n| Workload | vLLM | SGLang | Speedup |\n|----------|------|--------|---------|\n| Simple generation | 2500 tok\u002Fs | 2800 tok\u002Fs | 1.12× |\n| Few-shot (10 examples) | 500 tok\u002Fs | 5000 tok\u002Fs | 10× |\n| Agent (tool calls) | 800 tok\u002Fs | 4000 tok\u002Fs | 5× |\n| JSON output | 600 tok\u002Fs | 2400 tok\u002Fs | 4× |\n\n## Multi-turn conversations\n\n```python\n@sgl.function\ndef multi_turn_chat(s, history, new_message):\n    # System prompt (always cached)\n    s += \"You are a helpful AI assistant.\\n\\n\"\n\n    # Conversation history (cached as it grows)\n    for msg in history:\n        s += f\"{msg['role']}: {msg['content']}\\n\"\n\n    # New user message (only new part)\n    s += f\"User: {new_message}\\n\"\n    s += \"Assistant: \"\n    s += sgl.gen(\"response\", max_tokens=200)\n\n# Turn 1\nhistory = []\nstate = multi_turn_chat.run(history=history, new_message=\"Hi there!\")\nhistory.append({\"role\": \"User\", \"content\": \"Hi there!\"})\nhistory.append({\"role\": \"Assistant\", \"content\": state[\"response\"]})\n\n# Turn 2 (reuses Turn 1 KV cache)\nstate = multi_turn_chat.run(history=history, new_message=\"What's 2+2?\")\n# Only computes new message (much faster!)\n\n# Turn 3 (reuses Turn 1 + Turn 2 KV cache)\nstate = multi_turn_chat.run(history=history, new_message=\"Tell me a joke\")\n# Progressively faster as history grows\n```\n\n## Advanced features\n\n### Speculative decoding\n\n```bash\n# Launch with draft model (2-3× faster)\npython -m sglang.launch_server \\\n    --model-path meta-llama\u002FMeta-Llama-3-70B-Instruct \\\n    --speculative-model meta-llama\u002FMeta-Llama-3-8B-Instruct \\\n    --speculative-num-steps 5\n```\n\n### Multi-modal (vision models)\n\n```python\n@sgl.function\ndef describe_image(s, image_path):\n    s += sgl.image(image_path)\n    s += \"Describe this image in detail: \"\n    s += sgl.gen(\"description\", max_tokens=200)\n\nstate = describe_image.run(image_path=\"photo.jpg\")\nprint(state[\"description\"])\n```\n\n### Batching and parallel requests\n\n```python\n# Automatic batching (continuous batching)\nstates = sgl.run_batch(\n    [\n        simple_gen.bind(question=\"What is AI?\"),\n        simple_gen.bind(question=\"What is ML?\"),\n        simple_gen.bind(question=\"What is DL?\"),\n    ]\n)\n\n# All 3 processed in single batch (efficient)\n```\n\n## OpenAI-compatible API\n\n```bash\n# Start server with OpenAI API\npython -m sglang.launch_server \\\n    --model-path meta-llama\u002FMeta-Llama-3-8B-Instruct \\\n    --port 30000\n\n# Use with OpenAI client\ncurl http:\u002F\u002Flocalhost:30000\u002Fv1\u002Fchat\u002Fcompletions \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"model\": \"default\",\n    \"messages\": [\n      {\"role\": \"system\", \"content\": \"You are helpful\"},\n      {\"role\": \"user\", \"content\": \"Hello\"}\n    ],\n    \"temperature\": 0.7,\n    \"max_tokens\": 100\n  }'\n\n# Works with OpenAI Python SDK\nfrom openai import OpenAI\nclient = OpenAI(base_url=\"http:\u002F\u002Flocalhost:30000\u002Fv1\", api_key=\"EMPTY\")\n\nresponse = client.chat.completions.create(\n    model=\"default\",\n    messages=[{\"role\": \"user\", \"content\": \"Hello\"}]\n)\n```\n\n## Supported models\n\n**Text models**:\n- Llama 2, Llama 3, Llama 3.1, Llama 3.2\n- Mistral, Mixtral\n- Qwen, Qwen2, QwQ\n- DeepSeek-V2, DeepSeek-V3\n- Gemma, Phi-3\n\n**Vision models**:\n- LLaVA, LLaVA-OneVision\n- Phi-3-Vision\n- Qwen2-VL\n\n**100+ models** from HuggingFace\n\n## Hardware support\n\n**NVIDIA**: A100, H100, L4, T4 (CUDA 11.8+)\n**AMD**: MI300, MI250 (ROCm 6.0+)\n**Intel**: Xeon with GPU (coming soon)\n**Apple**: M1\u002FM2\u002FM3 via MPS (experimental)\n\n## References\n\n- **[Structured Generation Guide](references\u002Fstructured-generation.md)** - JSON schemas, regex, grammars, validation\n- **[RadixAttention Deep Dive](references\u002Fradix-attention.md)** - How it works, optimization, benchmarks\n- **[Production Deployment](references\u002Fdeployment.md)** - Multi-GPU, monitoring, autoscaling\n\n## Resources\n\n- **GitHub**: https:\u002F\u002Fgithub.com\u002Fsgl-project\u002Fsglang\n- **Docs**: https:\u002F\u002Fsgl-project.github.io\u002F\n- **Paper**: RadixAttention (arXiv:2312.07104)\n- **Discord**: https:\u002F\u002Fdiscord.gg\u002Fsglang\n\n\n",{"name":5,"tags":54,"author":56,"license":15,"version":57,"description":7,"dependencies":58},[42,41,40,39,27,37,55,36,35,34],"Agents","Orchestra Research","1.0.0",[59,60,61],"sglang","torch","transformers","main","2b749c82b5d11fac39d9a6e021ce3f5b8a541bd1","cli-tool\u002Fcomponents\u002Fskills\u002Fai-research\u002Finference-serving-sglang",3963,"https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates","https:\u002F\u002Faitmpl.com","https:\u002F\u002Fgithub.com\u002Fdavila7","https:\u002F\u002Fdanielavila.me","Building AI dev tools with LLMs","2026-11-15 01:32:48",{"source":8,"skillName":5,"commands":73,"prompt":83,"zipAvailable":84},[74,77,80],{"tool":75,"command":76},"npx","npx skills add davila7\u002Fclaude-code-templates --skill inference-serving-sglang",{"tool":78,"command":79},"bunx","bunx skills add davila7\u002Fclaude-code-templates --skill inference-serving-sglang",{"tool":81,"command":82},"pnpm","pnpm dlx skills add davila7\u002Fclaude-code-templates --skill inference-serving-sglang","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fai-research\u002Finference-serving-sglang\u002FSKILL.md",true,[86,92,96,100],{"path":87,"resourceType":88,"resourceTypeDesc":89,"sizeBytes":90,"sourceHtmlUrl":91},"package.json","REFERENCE","参考文档",865,"https:\u002F\u002Fgithub.com\u002Fnodetool-ai\u002Fnodetool\u002Fblob\u002Fmain\u002Fpackages\u002Fsandbox-packs\u002Fsandbox-dates\u002Fpackage.json",{"path":93,"resourceType":88,"resourceTypeDesc":89,"sizeBytes":94,"sourceHtmlUrl":95},"references\u002Fdeployment.md",10020,"https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fai-research\u002Finference-serving-sglang\u002Freferences\u002Fdeployment.md",{"path":97,"resourceType":88,"resourceTypeDesc":89,"sizeBytes":98,"sourceHtmlUrl":99},"references\u002Fradix-attention.md",11005,"https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fai-research\u002Finference-serving-sglang\u002Freferences\u002Fradix-attention.md",{"path":101,"resourceType":88,"resourceTypeDesc":89,"sizeBytes":102,"sourceHtmlUrl":103},"references\u002Fstructured-generation.md",13468,"https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fai-research\u002Finference-serving-sglang\u002Freferences\u002Fstructured-generation.md",[105,132,159,192,227,251],{"skillNo":106,"name":107,"nameZh":6,"description":108,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":109,"categories":110,"keywords":112,"publishedAt":49},"01M70NHBTQ8BV0A2SCAZXEPHCX","wealthville-pool-scoring","Score DeFi liquidity pools before providing liquidity. Returns a 0-100 pool score and an Enter\u002FHold\u002FExit\u002FReduce\u002FAvoid verdict with calibrated confidence for ~68,800 Solana pools and 575 EVM pools, plus a public miss-inclusive track record. Use when asked whether a pool is worth LPing into, which pools look best right now, or how accurate the scores have actually been.","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fweb-data\u002Fwealthville-pool-scoring\u002FSKILL.md",[111],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[113,114,115,116,117,118,119,120,121,28,122,123,124,125,126,127,128,129,130,131],"scoring","pool","wealthville pool scoring","liquidity","which","for","exit","now","use","reduce","with","record","track","verdict","evm","solana","how","public","look",{"skillNo":133,"name":134,"nameZh":6,"description":135,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":136,"categories":137,"keywords":139,"publishedAt":49},"01M70MB6VR8ERJ4EM8D5KHBMEV","technical-debt-auditor","Scans a codebase and produces a quantified technical debt report with a prioritized remediation plan. Analyzes dead code, TODO\u002FFIXME\u002FHACK markers, dependency staleness, complexity hotspots, code duplication signals, test coverage gaps, unused exports, and outdated patterns. Use this skill when the user asks to audit their codebase for tech debt, wants a health check of their code quality, says things like \"where should I focus refactoring\", \"find code smells\", \"audit my codebase\", \"what technical debt do we have\", \"prioritize cleanup work\", or asks about code quality metrics. Also trigger when the user mentions \"code rot\", \"legacy cleanup\", \"refactoring priorities\", or wants to understand the overall health of a project before a major effort. Trigger even if the user doesn't say \"technical debt\" explicitly — any request to systematically assess code quality and identify improvement priorities belongs here.","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fdevelopment\u002Ftechnical-debt-auditor\u002FSKILL.md",[138],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[140,141,142,143,144,145,146,147,148,149,150,28,151,152,153,154,155,156,157,158],"technical debt","debt","technical","technical debt auditor","auditor","coverage","complexity","markers","project","cleanup","unused","code","todo","work","plan","focus","signals","audit","dependency",{"skillNo":160,"name":161,"nameZh":6,"description":162,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":163,"categories":164,"keywords":174,"publishedAt":49},"01M70KPYH9QNHCNME5GJQGE22K","readonly-sql-guard","Make an agent's database access provably read-only. Use when an agent runs caller-supplied SQL against a production\u002FERP\u002Fanalytics database (a \"query\" MCP tool, text-to-SQL, an admin console), or when reviewing DB-access code for write\u002FDDL\u002Fside-effect\u002Ftransaction-escape risks. Checks what a statement CALLS, not just its shape.","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fdatabase\u002Freadonly-sql-guard\u002FSKILL.md",[165,168,169],{"categoryNo":166,"categoryName":167,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":170,"categoryName":171,"taxonomyType":172,"taxonomyTypeDesc":173},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[175,176,177,178,179,180,181,118,182,183,184,185,186,187,188,121,189,190,28,191],"readonly","guard","sql guard","sql","readonly sql guard","erp","effect","read-only","db","just","tool","calls","only","MCP","access","database","query",{"skillNo":193,"name":194,"nameZh":6,"description":195,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":196,"licenseFileUrl":197,"sourceHtmlUrl":198,"categories":199,"keywords":203,"publishedAt":49},"01M6AFY6F7CC2BBZP1QD6VTNVC","web-artifacts-builder","Suite of tools for creating elaborate, multi-component claude.ai HTML artifacts using modern frontend web technologies (React, Tailwind CSS, shadcn\u002Fui). Use for complex artifacts requiring state management, routing, or shadcn\u002Fui components - not for simple single-file HTML\u002FJSX artifacts.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Futilities\u002Fweb-artifacts-builder\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Futilities\u002Fweb-artifacts-builder\u002FSKILL.md",[200],{"categoryNo":201,"categoryName":202,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",[204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,118,226],"artifacts builder","web","web artifacts builder","artifacts","builder","state","routing","state management","component","css","frontend","ui","Tools","file","components","shadcn","react","Tailwind","suite","jsx","html","single-file","ui components",{"skillNo":228,"name":229,"nameZh":6,"description":230,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":196,"licenseFileUrl":231,"sourceHtmlUrl":232,"categories":233,"keywords":238,"publishedAt":49},"01M6AFWF33SFV9Z3SF4PEEE4BF","webapp-testing","Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fsecurity\u002Fwebapp-testing\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fsecurity\u002Fwebapp-testing\u002FSKILL.md",[234,237],{"categoryNo":235,"categoryName":236,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":201,"categoryName":202,"taxonomyType":21,"taxonomyTypeDesc":22},[239,240,241,242,243,205,244,214,215,245,246,247,248,118,249,123,250],"webapp testing","testing","webapp","browser","playwright","applications","debugging","toolkit","logs","screenshots","local","behavior",{"skillNo":252,"name":253,"nameZh":6,"description":254,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":196,"licenseFileUrl":255,"sourceHtmlUrl":256,"categories":257,"keywords":265,"publishedAt":49},"01M6AF67Q67JJJ5V51JR2P52KA","discernment-nudge","After you give a substantive answer or draft that the user may act on — advice or recommendations, drafted artifacts such as goals, plans, pitches, proposals, or emails, estimates or projections, analysis or interpretation of data, factual claims they may rely on, or a multi-step argument — invoke this skill BEFORE finalizing your reply and then, if it applies, append 2-3 short follow-up questions, each tied to something specific in what you just produced, that help the user check key facts, probe the reasoning or assumptions, and notice missing context. Do this at most once per conversation. Skip it when the user asked a trivial how-to or simple lookup, wants a purely educational explanation, asked you only to format, convert, or assemble a file from content they provided, is writing code they will run, is doing creative writing or casual chat, or already asked you to double-check, cite, or review — the skill file explains these boundaries and the exact output format.","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fproductivity\u002Fdiscernment-nudge\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fproductivity\u002Fdiscernment-nudge\u002FSKILL.md",[258,261,262],{"categoryNo":259,"categoryName":260,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":263,"categoryName":264,"taxonomyType":172,"taxonomyTypeDesc":173},"01JBSEEDCAT000000000000036","内容创作者",[266,267,268,269,270,271,272,273,207,274,217,151,275,276,277,278,279,187,280,28,30,281,282,283,284,129,285],"discernment nudge","nudge","interpretation","help","run","reasoning","data","writing","lookup","content","review","conversation","short","up","invoke","analysis","claims","argument","assemble","recommendations"]