尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

本地部署Claude Code兼容接口:基于DeepSeek模型的低成本AI编程方案

本地部署Claude Code兼容接口:基于DeepSeek模型的低成本AI编程方案 1. 项目概述为什么我们需要一个“兼容接口版”的本地部署方案最近在开发者圈子里Claude Code 的热度居高不下。作为一个专注于代码生成和理解的AI助手它在编程效率提升上的表现确实让人眼前一亮。但很多朋友在实际尝试接入时都遇到了一个共同的痛点官方接口的访问稳定性问题以及随之而来的成本考量。尤其是在需要高频次、低延迟交互的开发场景下网络波动和API调用限制常常成为工作流中的“断点”。与此同时DeepSeek 系列模型特别是其代码专用版本以其出色的性能和极具竞争力的性价比成为了一个非常值得关注的替代选择。它的上下文处理能力和代码生成质量在不少基准测试中已经接近甚至在某些场景下超越了同类闭源产品。但直接迁移工作流并非易事——原有的工具链、插件配置、乃至思维习惯都围绕着 Claude Code 的交互模式构建。这就引出了我们这次实操的核心目标搭建一个本地部署的 Claude Code 兼容接口服务但其后端实际调用的是 DeepSeek 的模型。简单说就是让你熟悉的 Claude Code 客户端比如 VS Code 插件以为它在和原来的服务对话但实际上响应它的是我们本地部署的、基于 DeepSeek 模型的服务器。这样做一举三得第一获得了本地部署的隐私性和可控性第二享受了 DeepSeek 模型的经济性与性能第三无需改变开发者已有的使用习惯和工具配置。这个方案特别适合以下几类朋友频繁使用 AI 辅助编程、对代码隐私有要求、希望降低长期使用成本以及乐于折腾、追求工作流自主化的开发者。整个部署过程涉及环境准备、服务搭建、接口适配和客户端配置几个核心环节我会把每个步骤的“为什么”和“怎么做”都拆解清楚并附上我趟过的一些坑和经验。2. 核心思路与架构设计理解“兼容层”的工作原理在开始动手之前我们有必要先厘清整个系统的运行逻辑。这并非一个简单的“替换”操作而是一个典型的“适配器Adapter模式”在实践中的应用。我们的目标是在 Claude Code 客户端和 DeepSeek 模型之间构建一个透明的转换层。2.1 原有工作流与痛点分析标准的 Claude Code 使用流程是你在 VS Code 中写代码或提出问题VS Code 插件将你的请求包装成特定的 HTTP 请求发送到 Claude Code 的官方 API 端点。官方服务器处理请求将生成的代码或答案返回插件再将其展示给你。这个过程的痛点在于网络链路长受国际带宽影响大且 API 调用有频率和额度限制。2.2 新架构的流量转发逻辑我们的新架构核心是一个本地运行的代理/兼容服务器。这个服务器需要完成两件关键事协议模仿它必须能够接收来自 Claude Code 客户端插件的请求并且响应的数据格式、状态码、Header 信息等要与官方 API 完全一致这样才能“骗过”客户端。模型转换在内部它需要将收到的、符合 Claude Code API 格式的请求进行解析和重构转换成 DeepSeek API 所能理解的格式然后发送给我们本地部署的 DeepSeek 模型服务或转发到 DeepSeek 的官方 API但本地部署方案主要指前者。拿到 DeepSeek 的响应后再反向转换回 Claude Code 的格式返回给客户端。整个数据流向可以概括为VS Code 插件-Claude Code 格式请求-本地兼容接口服务器-格式转换-本地 DeepSeek 模型服务-生成响应-本地兼容接口服务器-格式转换回 Claude Code 格式-VS Code 插件2.3 技术选型与方案对比实现这样一个兼容服务器有多种技术路径可选方案一使用开源适配器框架推荐目前社区已经有了一些成熟的开源项目专门用于在不同大模型 API 之间进行转换。例如litellm、OpenAI-to-API的变种等。这些框架已经实现了大量 API 格式的解析和映射我们只需要进行简单的配置即可。优点开发量小稳定性高社区支持好。缺点可能需要针对 Claude Code 非常特定的字段做微调。方案二自行开发轻量级代理服务如果你对 Node.js (Express/Koa)、Python (FastAPI/Flask) 或 Go (Gin/Echo) 比较熟悉可以自己写一个简单的 HTTP 服务器。核心就是两个路由一个用于聊天补全模拟/v1/chat/completions一个用于模型列表模拟/v1/models。在聊天补全的处理函数里进行请求/响应的格式转换。优点完全可控可以精细优化代码量也不大。缺点需要一定的后端开发经验且要仔细对照双方 API 文档。方案三使用配置化反向代理工具像Nginx或Caddy配合 Lua 脚本或插件理论上也能通过重写请求体和响应体来实现。但这对于 JSON 结构的复杂转换来说配置和维护成本较高不是最优选。对于大多数开发者我强烈推荐方案一。我们将以一个假设的、功能类似litellm的兼容工具claude-code-adapter为例进行演示。它理解起来直观且能覆盖绝大部分场景。如果找不到完全合用的方案二的自行开发思路我也会简要说明作为备选。注意在选择具体工具时务必查看其最新文档和社区活跃度。一个已经三个月没更新的项目可能会因为 Claude Code 或 DeepSeek API 的更新而失效。3. 基础环境准备与依赖安装任何部署的第一步都是准备好战场。本地部署需要一台算力足够的机器以及正确的软件环境。这里我们以一台搭载 NVIDIA GPU 的 Ubuntu 22.04 服务器为例进行说明macOS 和 Windows 的差异点我会额外标注。3.1 硬件与系统要求CPU建议 4 核以上。模型加载和推理的某些阶段会用到 CPU。内存至少 16GB。DeepSeek-Coder 的 7B 参数模型加载就需要约 14GB 内存上下文越长占用越多32GB 或以上是舒适区。GPU强烈推荐这是影响生成速度的关键。对于 7B 模型一张显存 8GB 的 GPU如 RTX 3070/4060 Ti即可流畅运行。16B 或 33B 模型则需要 16GB 或 24GB 以上显存。如果没有 GPU纯 CPU 推理也是可行的但速度会慢一个数量级仅适合轻度体验。存储至少 20GB 可用空间用于存放模型文件和依赖包。操作系统LinuxUbuntu/Debian/CentOS是最佳选择社区支持最完善。macOS (Apple Silicon) 通过 Ollama 等方式部署也很方便。Windows 建议使用 WSL2 以获得接近 Linux 的体验。3.2 核心软件安装我们将通过几个步骤来搭建基础环境。步骤1安装 Python 和包管理工具确保系统有 Python 3.10 或以上版本。Ubuntu 22.04 默认可能为 3.10但建议安装 3.11。sudo apt update sudo apt install python3.11 python3.11-venv python3.11-dev -y安装 pip 并升级到最新。sudo apt install python3-pip -y pip3 install --upgrade pip步骤2安装 CUDA 和 cuDNN仅限 NVIDIA GPU 用户这是 GPU 推理加速的基石。前往 NVIDIA 官网根据你的显卡驱动版本下载并安装对应版本的 CUDA Toolkit如 12.1和 cuDNN。使用nvidia-smi命令可以查看驱动支持的 CUDA 最高版本。通常安装 PyTorch 时会自动下载匹配的 CUDA 运行时但为了兼容性和避免冲突预先安装是一个好习惯。这里以 CUDA 12.1 为例# 添加 NVIDIA 包仓库 wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600 sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/3bf863cc.pub sudo add-apt-repository deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/ / sudo apt-get update # 安装 CUDA 12.1 sudo apt-get install cuda-12-1 -y安装后将 CUDA 路径加入环境变量通常写入~/.bashrcecho export PATH/usr/local/cuda-12.1/bin${PATH::${PATH}} ~/.bashrc echo export LD_LIBRARY_PATH/usr/local/cuda-12.1/lib64${LD_LIBRARY_PATH::${LD_LIBRARY_PATH}} ~/.bashrc source ~/.bashrccuDNN 的安装通常需要从官网下载 deb 包或 tar 文件进行手动安装请严格参照 NVIDIA 官方指南操作。步骤3创建并激活 Python 虚拟环境虚拟环境能有效隔离项目依赖避免包冲突。mkdir ~/claude-deepseek-local cd ~/claude-deepseek-local python3.11 -m venv venv source venv/bin/activate看到命令行提示符前出现(venv)即表示激活成功。4. DeepSeek 模型服务的本地部署兼容接口的后端动力源就是 DeepSeek 模型。我们需要一个能够加载模型并提供标准 HTTP API 的服务。这里有两个主流选择使用vLLM或Ollama。4.1 方案选择vLLM 还是 OllamavLLM一个专注于高性能推理和服务化的库。它采用了 PagedAttention 等优化技术在批处理和高吞吐量场景下表现极佳特别适合作为 API 服务器。但它对系统环境CUDA版本、GPU架构要求更严格配置稍复杂。Ollama一个用户友好、开箱即用的模型运行和部署工具。它简化了模型下载、加载和运行的全过程提供了简单的 REST API 和命令行工具。对于快速启动和标准化的模型支持非常方便。如果你的目标是搭建一个稳定、高性能、可供多人使用的服务选择 vLLM。如果你希望快速验证、单人使用或对易用性要求极高选择 Ollama。本手册将以vLLM的部署为例因为它的 API 更标准化性能潜力更大。Ollama 的部署方式会在最后简要提及。4.2 使用 vLLM 部署 DeepSeek-Coder 模型步骤1安装 vLLM 及其依赖在激活的虚拟环境中安装 vLLM。注意指定 CUDA 版本。pip install vllm # 或者安装特定CUDA版本例如 CUDA 12.1 # pip install vllm --extra-index-url https://pypi.nvidia.com安装过程会同时安装 PyTorch 等依赖。步骤2启动 vLLM 服务我们将部署deepseek-ai/deepseek-coder-6.7b-instruct这个模型它在代码能力和模型大小间取得了很好的平衡。python -m vllm.entrypoints.openai.api_server \ --model deepseek-ai/deepseek-coder-6.7b-instruct \ --served-model-name deepseek-coder \ --host 0.0.0.0 \ --port 8000 \ --tensor-parallel-size 1 \ --gpu-memory-utilization 0.9参数解析--model指定 Hugging Face 模型仓库 IDvLLM 会自动下载。--served-model-name给这个服务起的别名客户端将通过这个名字调用它。--host 0.0.0.0允许所有网络接口访问方便同一局域网内其他设备连接。--port 8000服务监听的端口。--tensor-parallel-size 1对于单张 GPU此值设为 1。多卡并行推理时可增加。--gpu-memory-utilization 0.9GPU 显存利用率目标0.9 表示尝试使用 90% 的显存为系统留出余量。首次运行会下载模型可能需要较长时间。下载完成后服务启动你会看到类似INFO: Uvicorn running on http://0.0.0.0:8000的日志。步骤3验证 vLLM 服务打开另一个终端使用curl测试服务是否正常。curl http://localhost:8000/v1/models应该返回一个 JSON其中包含名为deepseek-coder的模型信息。curl -X POST http://localhost:8000/v1/chat/completions \ -H Content-Type: application/json \ -d { model: deepseek-coder, messages: [{role: user, content: 用Python写一个快速排序函数}], max_tokens: 100, temperature: 0.7 }如果看到返回了生成的代码说明 DeepSeek 模型服务已成功运行。请记下这个服务的地址http://localhost:8000下一步的兼容接口服务器将连接到这里。实操心得vLLM 在首次加载模型时会根据你的硬件进行内核编译优化这个过程可能耗时几分钟并占用大量 CPU。这是正常现象请耐心等待。完成后后续的推理速度会非常快。5. Claude Code 兼容接口服务器的搭建这是本项目的核心我们要创建一个“翻译官”。如前所述我们假设使用一个名为claude-code-adapter的兼容工具。如果社区没有现成的我们可以快速实现一个简化版。这里我将以自行开发一个简化版 FastAPI 服务为例因为它能最清晰地揭示原理。5.1 创建适配器项目结构在项目目录下新建一个adapter_server文件夹。cd ~/claude-deepseek-local mkdir adapter_server cd adapter_server5.2 编写适配器服务器代码创建一个main.py文件内容如下# adapter_server/main.py import logging from typing import List, Optional import uvicorn from fastapi import FastAPI, HTTPException from pydantic import BaseModel import httpx import json # 配置日志 logging.basicConfig(levellogging.INFO) logger logging.getLogger(__name__) app FastAPI(titleClaude Code to DeepSeek Adapter) # 配置后端 DeepSeek vLLM 服务的地址 DEEPSEEK_BACKEND_URL http://localhost:8000/v1 # 指向你上一步启动的 vLLM 服务 # 定义请求/响应模型 (模拟 Claude Code API 格式) class ClaudeMessage(BaseModel): role: str # user, assistant, system content: str class ClaudeChatRequest(BaseModel): model: str claude-code # 客户端固定发送这个模型名 messages: List[ClaudeMessage] max_tokens: Optional[int] 4096 temperature: Optional[float] 0.7 stream: Optional[bool] False # 我们先处理非流式响应 class ClaudeModel(BaseModel): id: str object: str model created: int 1686935002 # 一个固定时间戳 owned_by: str claude-code-adapter # 核心将 Claude Code 格式的请求转换为 DeepSeek 格式 def convert_to_deepseek_request(claude_req: ClaudeChatRequest): 转换请求格式 # 消息格式基本一致可以直接传递 # 但需要注意Claude Code 可能有特定的 system prompt 处理方式这里做简单映射 deepseek_messages [] for msg in claude_req.messages: # 如果 role 是 system DeepSeek 同样支持 deepseek_messages.append({role: msg.role, content: msg.content}) deepseek_request { model: deepseek-coder, # 固定使用我们 vLLM 服务的模型名 messages: deepseek_messages, max_tokens: claude_req.max_tokens, temperature: claude_req.temperature, stream: claude_req.stream, } return deepseek_request # 核心将 DeepSeek 格式的响应转换回 Claude Code 格式 def convert_to_claude_response(deepseek_resp: dict): 转换响应格式 # 提取 DeepSeek 返回的第一个选择 choice deepseek_resp.get(choices, [{}])[0] message choice.get(message, {}) claude_choice { index: 0, message: { role: message.get(role, assistant), content: message.get(content, ), }, finish_reason: choice.get(finish_reason, stop), } claude_response { id: deepseek_resp.get(id, chatcmpl-local), object: chat.completion, created: deepseek_resp.get(created, 1677652288), model: claude-code, # 返回客户端期望的模型名 choices: [claude_choice], usage: deepseek_resp.get(usage, {}), } return claude_response # 路由1提供模型列表Claude Code 客户端启动时会查询 app.get(/v1/models) async def list_models(): logger.info(Received request for model list.) # 返回一个固定的模型列表告诉客户端我们支持 claude-code return { object: list, data: [ ClaudeModel(idclaude-code).dict() ] } # 路由2处理聊天补全请求核心路由 app.post(/v1/chat/completions) async def create_chat_completion(request: ClaudeChatRequest): logger.info(fReceived chat request for model: {request.model}) # 1. 格式转换 deepseek_req convert_to_deepseek_request(request) logger.debug(fConverted request to DeepSeek format: {json.dumps(deepseek_req, indent2)}) # 2. 转发请求到后端 DeepSeek 服务 async with httpx.AsyncClient(timeout60.0) as client: # 设置较长超时 try: resp await client.post( f{DEEPSEEK_BACKEND_URL}/chat/completions, jsondeepseek_req, headers{Content-Type: application/json} ) resp.raise_for_status() deepseek_resp resp.json() except httpx.RequestError as e: logger.error(fFailed to reach DeepSeek backend: {e}) raise HTTPException(status_code502, detailBackend service unavailable) except httpx.HTTPStatusError as e: logger.error(fDeepSeek backend returned error: {e.response.text}) raise HTTPException(status_codee.response.status_code, detaile.response.text) # 3. 格式转换回 Claude Code 格式 claude_resp convert_to_claude_response(deepseek_resp) logger.debug(fConverted response to Claude format.) return claude_resp if __name__ __main__: # 启动服务器监听在 8080 端口避免和 vLLM 的 8000 端口冲突 uvicorn.run(app, host0.0.0.0, port8080, log_levelinfo)5.3 安装依赖并启动适配器服务在adapter_server目录下创建requirements.txt文件fastapi0.104.0 uvicorn[standard]0.24.0 httpx0.25.0 pydantic2.0.0然后安装依赖并启动服务pip install -r requirements.txt python main.py服务启动后会监听http://0.0.0.0:8080。这个服务现在提供了两个关键端点GET /v1/models返回支持的模型列表目前只有claude-code。POST /v1/chat/completions接收 Claude Code 格式的请求转发给 DeepSeek并返回 Claude Code 格式的响应。注意事项这个示例是一个极简版本省略了错误处理的很多细节、流式响应streaming的支持、API密钥验证如果需要、更复杂的消息历史处理等。生产环境使用需要进一步完善。但它清晰地展示了适配器的核心工作原理请求/响应的格式转换与转发。6. VS Code 客户端配置与连接测试现在我们有了本地 DeepSeek 模型服务http://localhost:8000和 Claude Code 兼容接口服务http://localhost:8080。最后一步是配置 VS Code 中的 Claude Code 插件让它指向我们的本地服务器。6.1 安装与配置 Claude Code VS Code 插件在 VS Code 扩展商店中搜索并安装官方或社区维护的 “Claude Code” 或 “Claude” 插件。安装后通常需要配置 API 密钥和端点。由于我们搭建的是本地无验证服务API 密钥可以任意填写如sk-local-dummy-key但重点是端点Base URL。打开 VS Code 设置Ctrl,搜索该插件的设置项。找到类似Claude: API Endpoint或Base URL的配置项。将其值修改为我们本地适配器服务的地址http://localhost:8080注意不是 vLLM 的 8000 端口而是适配器的 8080 端口。找到API Key配置项填入sk-local-dummy-key或其他任意字符串因为我们的简易服务器没有验证这部分。找到Model配置项确保其值为claude-code与我们适配器返回的模型 ID 一致。6.2 进行连接与功能测试基础对话测试在 VS Code 中打开一个代码文件选中一段代码右键选择 Claude Code 插件的相关功能如“解释代码”、“重构代码”等或者打开它的聊天面板输入一个简单的编程问题例如“写一个 Python 函数计算斐波那契数列”。观察日志同时观察运行adapter_server/main.py和vLLM的两个终端窗口。你应该能看到适配器服务器收到了请求并打印了日志然后 vLLM 服务器开始了推理计算。最后答案应该会出现在 VS Code 的聊天界面中。测试不同功能尝试代码补全、生成单元测试、代码注释等不同功能确保大部分交互正常。6.3 常见配置问题与排查如果测试失败请按照以下步骤排查问题现象可能原因排查步骤VS Code 插件提示“无法连接”或“认证失败”1. 适配器服务器未运行2. VS Code 配置的端口错误3. 防火墙阻止了连接1. 检查python main.py是否在运行监听 8080 端口 (netstat -tlnp | grep 8080)。2. 确认 VS Code 中 Base URL 是http://localhost:8080。3. 如果是远程服务器确保 VS Code 是通过 SSH 连接且插件配置的地址是服务器局域网 IP如http://192.168.1.100:8080。适配器服务器日志显示连接后端失败1. vLLM 服务未运行2. vLLM 服务端口不是 80003. 模型加载失败1. 检查 vLLM 服务进程 (ps aux | grep vllm)。2. 确认DEEPSEEK_BACKEND_URL变量指向正确的 vLLM 地址和端口。3. 查看 vLLM 启动日志确认模型是否下载并加载成功。收到响应但内容格式错误适配器响应格式与 Claude Code 插件预期不完全一致1. 打开 VS Code 开发者工具帮助 - 切换开发者工具查看网络请求和响应对比与官方 API 的差异。2. 根据差异调整convert_to_claude_response函数中的字段。响应速度非常慢1. 纯 CPU 推理2. GPU 显存不足触发内存交换3. 模型过大1. 确认 vLLM 是否使用了 GPU (nvidia-smi查看进程)。2. 尝试减小--max-model-len或使用量化版本模型。3. 换用更小的模型如deepseek-coder-1.3b-instruct。实操心得在配置 VS Code 插件时有些插件可能会强制要求使用官方的特定域名。如果遇到此情况可以尝试寻找更开源、配置更灵活的替代插件或者修改插件本身的配置逻辑如果允许。另一个技巧是使用反向代理工具如nginx或caddy将http://localhost:8080代理到一个看起来像官方域名的本地域名如claude-code.local有时能绕过客户端的域名检查。7. 高级调优、监控与维护系统跑起来只是第一步要让它稳定、高效地服务于开发还需要一些优化和维护工作。7.1 性能优化参数详解在启动 vLLM 服务时可以通过调整参数来优化性能和资源占用--max-model-len 8192设置模型支持的最大上下文长度。根据你的需求设置越长消耗显存越多。--gpu-memory-utilization 0.85如果服务不稳定或显存溢出可以适当调低此值如 0.8。--quantization awq或--quantization gptq使用量化模型可以显著减少显存占用并提升速度。你需要先下载对应的量化模型文件如deepseek-ai/deepseek-coder-6.7b-instruct-awq然后指定模型路径和量化方法。--enforce-eager如果遇到 GPU 兼容性问题可以尝试此参数禁用某些内核优化。7.2 服务进程管理与自启动我们目前是在终端前台运行服务终端关闭服务就停止了。对于长期使用需要守护进程。使用 systemdLinux创建服务文件/etc/systemd/system/claude-deepseek.service。[Unit] DescriptionClaude Code DeepSeek Local Service Afternetwork.target [Service] Typesimple Useryour_username WorkingDirectory/home/your_username/claude-deepseek-local EnvironmentPATH/home/your_username/claude-deepseek-local/venv/bin ExecStart/home/your_username/claude-deepseek-local/venv/bin/python -m vllm.entrypoints.openai.api_server --model deepseek-ai/deepseek-coder-6.7b-instruct --host 0.0.0.0 --port 8000 Restartalways RestartSec10 [Install] WantedBymulti-user.target同样为适配器服务也创建一个。然后使用sudo systemctl daemon-reloadsudo systemctl start claude-deepseek来管理。使用 PM2Node.js 环境也适用于管理 Python 进程npm install -g pm2然后pm2 start python --name vllm-server -- -m vllm.entrypoints.openai.api_server ...。7.3 日志与监控日志为适配器服务器和 vLLM 配置更详细的日志级别方便排查问题。可以将日志输出到文件并使用logrotate进行管理。监控简单的监控可以通过nvidia-smi、htop观察 GPU 和 CPU 使用率。更高级的可以集成 Prometheus GrafanavLLM 提供了 metrics 端点。7.4 安全加固考虑当前简易版本没有身份验证意味着同一局域网内的任何设备都可以访问你的 AI 服务。添加 API 密钥验证在适配器服务器main.py的请求处理函数开头检查请求头中的Authorization字段并与预设的密钥比对。使用反向代理如 Nginx添加 HTTPS 和认证在适配器前部署 Nginx配置 SSL 证书实现 HTTPS并可以配置 HTTP Basic Auth 或结合 JWT 进行认证。防火墙规则确保服务器防火墙只允许来自可信 IP 地址如你的办公网络对 8080 端口的访问。8. 备选方案与扩展思路8.1 使用 Ollama 作为后端如果你觉得 vLLM 配置繁琐Ollama 是极佳的替代品。安装 Ollama 后一行命令即可拉取并运行模型ollama run deepseek-coder:6.7bOllama 会在本地启动一个 API 服务器默认端口 11434其 API 也是 OpenAI 兼容格式。此时你只需要将我们编写的适配器服务器中的DEEPSEEK_BACKEND_URL从http://localhost:8000/v1改为http://localhost:11434/v1即可。Ollama 管理模型更加方便但性能上限和功能丰富度可能不及 vLLM。8.2 扩展支持其他客户端或模型我们这个适配器架构是通用的。支持其他 AI 编程助手只需研究目标助手如 Codeium、Tabnine 等的 API 格式修改适配器的请求/响应转换逻辑即可。接入其他开源模型vLLM 或 Ollama 支持成百上千个 Hugging Face 模型。只需更换--model参数就可以轻松切换到 CodeLlama、StarCoder、Qwen-Coder 等其他优秀的代码模型。适配器服务器无需改动因为它只负责格式转换不关心后端具体是什么模型。8.3 实现流式响应Streaming现代 AI 应用普遍支持流式响应即一个字一个字地返回提升用户体验。Claude Code 插件很可能也支持。实现它需要在适配器服务器和 vLLM 请求中都启用stream: true并处理 Server-Sent Events (SSE)。这涉及到对httpx的异步流式请求和 FastAPI 的StreamingResponse的使用代码会复杂一些但原理相通。整个搭建过程从环境准备到最终调通我花了大约一个下午。最大的收获不是最终能用了而是在这个过程中彻底弄明白了客户端、适配器、模型服务三者之间的数据流转协议。现在我可以随意切换后端的模型或者调整前端的插件拥有了完全的自主权。这种“知其然更知其所以然”的控制感对于开发者来说可能比单纯使用一个工具更有价值。如果你在部署过程中卡在了某一步多看看日志百分之九十的问题都能从中找到线索。
返回列表