Keras模型集成vLLM推理引擎:从开发到高性能部署实践指南
在实际的大模型推理部署场景中性能、吞吐量和易用性是开发者面临的核心挑战。Keras作为广受欢迎的高层深度学习API以其简洁的接口和快速的模型构建能力著称。而vLLM则是一个专为高效服务大型语言模型LLM而设计的推理引擎以其创新的PagedAttention技术和极高的吞吐量闻名。当这两者结合意味着开发者能够以熟悉的Keras工作流来构建和训练模型然后无缝地切换到vLLM进行高性能、生产级的推理服务这无疑将极大简化从模型开发到部署的链路。本文将深入探讨如何将Keras模型集成到vLLM推理引擎中涵盖从环境准备、模型转换、服务部署到性能验证的全过程旨在为希望将Keras模型投入实际应用的开发者提供一份可操作的实践指南。1. 理解Keras与vLLM集成的核心价值与挑战在深入技术细节之前我们需要明确为什么需要将Keras与vLLM集成以及这一过程需要解决哪些关键问题。1.1 为什么是Keras vLLMKeras的核心优势在于其用户友好性和快速原型能力。无论是使用TensorFlow后端还是其他后端开发者都能以极少的代码量定义复杂的神经网络结构。然而当模型尤其是参数量巨大的语言模型训练完成后将其部署为高并发、低延迟的在线服务是另一项艰巨任务。原生的TensorFlow Serving或简单的Flask API在应对LLM的自回归生成任务时往往在内存利用率和吞吐量上捉襟见肘。vLLM正是为了解决LLM推理的瓶颈而生。它通过PagedAttention算法高效管理KV缓存显著减少了内存碎片从而在相同硬件条件下支持更大的批次大小batch size和更高的并发。其内置的异步调度和连续批处理Continuous Batching功能进一步优化了GPU利用率。因此Keras与vLLM的集成本质上是将模型开发的便捷性与推理服务的高性能相结合。开发者可以继续在熟悉的Keras环境中进行模型设计、训练和微调然后利用vLLM将模型转化为一个强大的推理端点。1.2 集成面临的主要技术挑战集成并非简单的模型格式转换主要挑战在于模型格式桥接Keras通常保存为.keras或SavedModel格式的模型需要被vLLM识别和加载。vLLM主要支持Hugging Face Transformers格式的模型。架构对齐Keras自定义的模型层、激活函数、归一化层等需要与vLLM引擎的底层实现兼容。权重映射模型权重需要被正确加载到vLLM的推理引擎中包括处理可能存在的权重命名差异。Tokenizer集成文本生成任务离不开Tokenizer。需要确保Keras模型使用的分词器能与vLLM配合工作。2. 环境准备与依赖配置一个稳定、版本匹配的环境是成功集成的第一步。以下配置基于常见的Linux开发环境。2.1 系统与硬件要求操作系统: Ubuntu 20.04/22.04, CentOS 7/8, 或 WSL2 (Windows Subsystem for Linux)。GPU: NVIDIA GPU (推荐Ampere架构及以上如A100, A10, RTX 4090等)并安装对应版本的CUDA驱动11.8。内存: 至少16GB系统内存根据模型大小预留足够的GPU显存。2.2 Python环境与核心依赖建议使用Conda或venv创建独立的Python环境以避免依赖冲突。# 创建并激活conda环境 conda create -n keras-vllm python3.10 -y conda activate keras-vllm安装核心依赖库。版本兼容性至关重要以下是经过验证的版本组合# 安装PyTorch (vLLM的底层依赖之一) 和 CUDA工具包 # 请根据你的CUDA版本选择对应的PyTorch安装命令例如CUDA 11.8 pip install torch2.3.0 torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # 安装TensorFlow和Keras # 如果使用TensorFlow作为Keras后端 pip install tensorflow2.15.0 # 安装vLLM及其基础依赖 pip install vllm0.4.2 # 安装Hugging Face库用于模型和tokenizer的转换与加载 pip install transformers4.38.0 accelerate # 可选用于示例和验证 pip install numpy datasets注意tensorflow和torch可能对CUDA/cuDNN版本有特定要求。如果遇到GPU相关错误请首先检查CUDA、cuDNN、TensorFlow和PyTorch的版本兼容性矩阵。2.3 环境验证安装完成后运行以下命令验证关键组件是否正常工作python -c import tensorflow as tf; print(fTensorFlow版本: {tf.__version__}, GPU可用: {tf.config.list_physical_devices(\GPU\)}) python -c import torch; print(fPyTorch版本: {torch.__version__}, CUDA可用: {torch.cuda.is_available()}) python -c import vllm; print(fvLLM版本: {vllm.__version__})如果输出显示GPU可用且版本正确则环境准备就绪。3. 从Keras模型到vLLM服务的完整流程本部分将以一个示例性的文本生成模型如一个小型GPT-2风格模型为例展示从保存Keras模型到通过vLLM提供服务的完整步骤。3.1 步骤一构建并保存Keras模型首先我们定义一个简单的基于Transformer Decoder的文本生成模型并使用Keras API进行训练此处省略大规模预训练过程仅展示结构定义和保存。import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers import numpy as np # 1. 定义模型组件 class TransformerBlock(layers.Layer): def __init__(self, embed_dim, num_heads, ff_dim, rate0.1): super().__init__() self.att layers.MultiHeadAttention(num_headsnum_heads, key_dimembed_dim) self.ffn keras.Sequential([ layers.Dense(ff_dim, activationrelu), layers.Dense(embed_dim), ]) self.layernorm1 layers.LayerNormalization(epsilon1e-6) self.layernorm2 layers.LayerNormalization(epsilon1e-6) self.dropout1 layers.Dropout(rate) self.dropout2 layers.Dropout(rate) def call(self, inputs, trainingFalse): attn_output self.att(inputs, inputs) attn_output self.dropout1(attn_output, trainingtraining) out1 self.layernorm1(inputs attn_output) ffn_output self.ffn(out1) ffn_output self.dropout2(ffn_output, trainingtraining) return self.layernorm2(out1 ffn_output) class TokenAndPositionEmbedding(layers.Layer): def __init__(self, maxlen, vocab_size, embed_dim): super().__init__() self.token_emb layers.Embedding(input_dimvocab_size, output_dimembed_dim) self.pos_emb layers.Embedding(input_dimmaxlen, output_dimembed_dim) def call(self, x): maxlen tf.shape(x)[-1] positions tf.range(start0, limitmaxlen, delta1) positions self.pos_emb(positions) x self.token_emb(x) return x positions # 2. 组装模型 vocab_size 10000 # 示例词汇表大小 maxlen 128 # 序列最大长度 embed_dim 256 # 嵌入维度 num_heads 4 # 注意力头数 ff_dim 512 # 前馈网络维度 num_blocks 4 # Transformer块数量 inputs layers.Input(shape(maxlen,), dtypetf.int32) x TokenAndPositionEmbedding(maxlen, vocab_size, embed_dim)(inputs) for _ in range(num_blocks): x TransformerBlock(embed_dim, num_heads, ff_dim)(x) outputs layers.Dense(vocab_size)(x) # 输出层预测下一个token model keras.Model(inputsinputs, outputsoutputs) model.compile(optimizeradam, losssparse_categorical_crossentropy) print(model.summary()) # 3. 保存Keras模型SavedModel格式 model.save(my_keras_lm_model, save_formattf) # 或使用 .keras 格式 # model.save(my_keras_lm_model.keras)3.2 步骤二将Keras模型转换为vLLM兼容格式这是最关键的一步。vLLM期望的模型格式通常是Hugging FacePreTrainedModel的子类。我们需要将Keras模型的架构和权重“翻译”成PyTorch格式并封装成标准的Transformer类。方法使用transformers库进行桥接提取权重并定义对应的PyTorch模型结构我们需要为之前定义的Keras模型创建一个结构完全相同的PyTorch版本。import torch import torch.nn as nn import numpy as np from transformers import PreTrainedModel, PretrainedConfig # 1. 定义与Keras模型对应的PyTorch模块 class TorchTransformerBlock(nn.Module): def __init__(self, embed_dim, num_heads, ff_dim, dropout_rate0.1): super().__init__() self.att nn.MultiheadAttention(embed_dim, num_heads, batch_firstTrue) self.ffn nn.Sequential( nn.Linear(embed_dim, ff_dim), nn.ReLU(), nn.Linear(ff_dim, embed_dim), ) self.layernorm1 nn.LayerNorm(embed_dim) self.layernorm2 nn.LayerNorm(embed_dim) self.dropout1 nn.Dropout(dropout_rate) self.dropout2 nn.Dropout(dropout_rate) def forward(self, x): attn_output, _ self.att(x, x, x) attn_output self.dropout1(attn_output) x self.layernorm1(x attn_output) ffn_output self.ffn(x) ffn_output self.dropout2(ffn_output) return self.layernorm2(x ffn_output) class TorchTokenAndPositionEmbedding(nn.Module): def __init__(self, maxlen, vocab_size, embed_dim): super().__init__() self.token_emb nn.Embedding(vocab_size, embed_dim) self.pos_emb nn.Embedding(maxlen, embed_dim) def forward(self, token_ids): seq_len token_ids.size(1) positions torch.arange(seq_len, devicetoken_ids.device).unsqueeze(0) token_embedded self.token_emb(token_ids) position_embedded self.pos_emb(positions) return token_embedded position_embedded # 2. 定义完整的PyTorch模型并继承PreTrainedModel以兼容Hugging Face生态 class MyLMConfig(PretrainedConfig): model_type my_lm def __init__(self, vocab_size10000, maxlen128, embed_dim256, num_heads4, ff_dim512, num_blocks4, **kwargs): super().__init__(**kwargs) self.vocab_size vocab_size self.maxlen maxlen self.embed_dim embed_dim self.num_heads num_heads self.ff_dim ff_dim self.num_blocks num_blocks class MyLMModel(PreTrainedModel): config_class MyLMConfig def __init__(self, config): super().__init__(config) self.embedding TorchTokenAndPositionEmbedding(config.maxlen, config.vocab_size, config.embed_dim) self.transformer_blocks nn.ModuleList([ TorchTransformerBlock(config.embed_dim, config.num_heads, config.ff_dim) for _ in range(config.num_blocks) ]) self.lm_head nn.Linear(config.embed_dim, config.vocab_size, biasFalse) def forward(self, input_ids, **kwargs): x self.embedding(input_ids) for block in self.transformer_blocks: x block(x) logits self.lm_head(x) return logits # 3. 加载Keras模型权重 keras_model tf.keras.models.load_model(my_keras_lm_model) # 假设我们有一个函数可以提取Keras权重并映射到PyTorch模型 # 注意这是一个简化的示例实际映射需要根据具体的层命名和结构仔细处理。 def transfer_weights(keras_model, torch_model): # 这里需要编写详细的权重名称映射和数值转换逻辑 # 例如将Dense层的kernel转置后赋值给nn.Linear的weight # 这是一个复杂且模型特定的过程可能需要手动编写映射字典。 # 此处省略具体实现建议使用开源工具或编写脚本自动化。 pass # 创建配置和PyTorch模型 config MyLMConfig() torch_model MyLMModel(config) # 4. 执行权重转移 (此处需要你根据模型结构实现transfer_weights) # transfer_weights(keras_model, torch_model) # 5. 保存为Hugging Face格式 torch_model.save_pretrained(./converted_hf_model) # 同样需要保存tokenizer如果Keras模型使用了特定的分词器 # from transformers import AutoTokenizer # tokenizer.save_pretrained(./converted_hf_model)关键点权重转移是集成过程中最繁琐、最容易出错的部分。对于标准Transformer架构如GPT-2、LLaMA社区可能有现成的转换脚本。对于自定义Keras模型你可能需要仔细分析model.summary()和torch_model.state_dict().keys()编写映射逻辑。也可以考虑先将Keras模型导出为ONNX格式再转换为PyTorch但这同样需要处理算子兼容性问题。3.3 步骤三使用vLLM加载并部署模型一旦我们有了Hugging Face格式的模型目录包含config.json和pytorch_model.bin等文件就可以使用vLLM轻松加载和部署。使用vLLM的Python API进行推理from vllm import LLM, SamplingParams # 1. 指定模型路径即上一步保存的converted_hf_model目录 model_path ./converted_hf_model # 2. 初始化LLM引擎 # tensor_parallel_size 用于张量并行如果单卡运行则设为1 llm LLM(modelmodel_path, tensor_parallel_size1, gpu_memory_utilization0.9) # 3. 定义生成参数 sampling_params SamplingParams(temperature0.8, top_p0.95, max_tokens50) # 4. 准备输入 prompts [ The future of artificial intelligence is, Machine learning can help us to, ] # 5. 生成文本 outputs llm.generate(prompts, sampling_params) # 6. 输出结果 for output in outputs: prompt output.prompt generated_text output.outputs[0].text print(fPrompt: {prompt!r}\nGenerated text: {generated_text!r}\n)使用vLLM的OpenAI兼容API服务器进行部署vLLM提供了开箱即用的API服务器与OpenAI API格式兼容便于集成到现有应用中。# 启动API服务器指定模型路径和端口 python -m vllm.entrypoints.openai.api_server \ --model ./converted_hf_model \ --served-model-name my-keras-model \ --port 8000 \ --max-model-len 2048服务器启动后你可以使用curl或任何HTTP客户端进行调用curl http://localhost:8000/v1/completions \ -H Content-Type: application/json \ -d { model: my-keras-model, prompt: The weather today is, max_tokens: 50, temperature: 0.7 }4. 关键配置、参数详解与性能调优成功运行只是第一步优化配置才能发挥vLLM的全部潜力。4.1 vLLMLLM类核心参数参数类型默认值说明modelstr必填模型路径或Hugging Face模型ID。tokenizerstr同model分词器路径。如果与模型路径不同需单独指定。tokenizer_modestrauto分词模式。auto自动判断slow使用HF慢速分词器。trust_remote_codeboolFalse是否信任远程代码如自定义模型代码。加载自定义模型时常需设为True。tensor_parallel_sizeint1张量并行度。在多GPU上分割模型。必须能被GPU数量整除。pipeline_parallel_sizeint1流水线并行度实验性功能。max_model_lenint由模型配置推断模型最大上下文长度。受限于GPU内存和模型结构。设置过大会导致OOM。gpu_memory_utilizationfloat0.9GPU内存利用率。介于0和1之间。提高该值可以增加批处理大小但可能增加OOM风险。swap_spaceint4交换空间大小(GB)。当GPU内存不足时使用CPU内存作为交换。quantizationstrNone量化方法。如awq、gptq、squeezellm等用于减少显存占用。enforce_eagerboolFalse强制使用PyTorch的eager模式便于调试但性能差。max_num_seqsint256引擎中同时处理的最大序列数。影响调度灵活性。max_num_batched_tokensint自动计算单次批处理的最大token数。可手动调整以控制内存和吞吐量。4.2SamplingParams生成参数参数类型默认值说明temperaturefloat1.0温度。越高随机性越强1.0趋于混乱0为贪婪解码。top_pfloat1.0核采样Nucleus sampling。从累积概率超过p的最小词集中采样。与temperature配合使用。top_kint-1Top-K采样。仅从概率最高的k个token中采样。-1表示禁用。max_tokensint16生成的最大新token数。stopList[str][]停止词列表。生成遇到这些字符串时停止。ignore_eosboolFalse是否忽略模型的结束符EOS token。skip_special_tokensboolTrue在输出中跳过特殊token如4.3 性能调优建议批处理大小vLLM的吞吐量优势在大批量时最明显。通过调整gpu_memory_utilization和max_num_batched_tokens来找到最佳批处理大小。监控GPU内存使用情况。上下文长度准确设置max_model_len。设置过小会截断输入过大则浪费内存。应根据实际应用场景设定。量化如果模型太大无法放入GPU考虑使用量化如AWQ。vLLM对量化模型有良好支持能以较少精度损失换取大幅显存节省。并行对于超大模型使用tensor_parallel_size在多卡上并行推理。监控使用nvidia-smi或vLLM内置的日志设置--log-level debug监控GPU利用率和内存状态。5. 常见问题排查与解决方案在集成和部署过程中你可能会遇到以下问题。5.1 模型加载失败问题现象可能原因检查与解决方案ValueError: Unsupported model architecture ...vLLM无法识别你的模型架构。1. 确保你的PyTorch模型类正确继承了PreTrainedModel并注册了config_class。2. 检查config.json中的architectures字段是否正确指向你的模型类名如[MyLMModel]。3. 如果模型结构高度自定义可能需要修改vLLM源码以支持或考虑将模型转换为vLLM已支持的架构如LLaMAForCausalLM。RuntimeError: CUDA out of memory.GPU内存不足。1. 减小gpu_memory_utilization。2. 减小max_model_len。3. 启用量化quantizationawq。4. 增加swap_space。5. 使用更小的模型或更多GPU增加tensor_parallel_size。KeyError: ‘weight’或权重形状不匹配权重转移错误PyTorch模型层名称或形状与加载的权重不匹配。1. 仔细对比torch_model.state_dict().keys()和保存的pytorch_model.bin的键名。2. 使用torch.load(“pytorch_model.bin”)查看权重文件内容。3. 重新检查并修正权重转移脚本中的映射逻辑。5.2 推理结果异常问题现象可能原因检查与解决方案生成文本乱码或毫无意义1. Tokenizer不匹配。2. 模型权重损坏或未正确训练。3. 生成参数如temperature极端。1.确保Tokenizer完全一致使用与Keras模型训练时完全相同的分词器并正确保存和加载。2. 在转换后使用简单的输入在PyTorch模型上做前向传播检查输出logits是否合理。3. 调整temperature和top_p到常用范围如0.7-0.9。生成速度远低于预期1. 输入序列过长。2. 批处理大小太小。3. 使用了enforce_eager模式。4. CPU瓶颈如tokenizer过慢。1. 裁剪不必要的输入长度。2. 增加并发请求数让vLLM能组成更大的批。3. 确保enforce_eagerFalse默认。4. 使用tokenizer_mode“auto”或确保使用快速分词器。5.3 API服务器问题问题现象可能原因检查与解决方案客户端收到404或503错误服务器未启动或模型加载失败。1. 检查服务器日志确认模型是否加载成功。2. 确认访问的端口和端点/v1/completions或/v1/chat/completions是否正确。请求超时单个请求处理时间过长或队列堆积。1. 检查max_tokens是否设置过大。2. 服务器端可能GPU内存不足导致处理缓慢。参考OOM问题排查。3. 考虑客户端设置合理的超时时间。6. 生产环境最佳实践与扩展方向将实验性集成转化为稳定的生产服务还需要考虑以下方面。6.1 模型转换与版本管理自动化转换流水线将Keras到vLLM的转换过程脚本化、自动化并与CI/CD集成。确保每次模型训练更新后能自动生成新的vLLM可服务包。版本控制对转换后的Hugging Face格式模型进行版本管理如使用DVC、Model Registry。API服务器应能根据配置加载指定版本的模型。完整性验证在转换后建立自动化测试用一组标准输入对比原始Keras模型和vLLM加载模型的输出确保数值一致性在可接受的误差范围内。6.2 服务部署与运维使用Docker容器化将vLLM API服务器、模型文件、依赖项打包成Docker镜像。这保证了环境一致性便于在Kubernetes或云服务上部署和伸缩。# 示例Dockerfile片段 FROM nvidia/cuda:12.1.0-runtime-ubuntu22.04 RUN apt-get update apt-get install -y python3-pip COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY converted_hf_model /app/model COPY start_server.py /app/ CMD [python3, /app/start_server.py]健康检查与监控为API服务器添加健康检查端点/health。监控GPU使用率、内存占用、请求延迟P50, P99、吞吐量tokens/sec和错误率。使用Prometheus和Grafana等工具。弹性伸缩在Kubernetes中根据GPU利用率和请求队列长度配置Horizontal Pod Autoscaler (HPA)。对于多模型场景可以使用像Ray Serve或Triton Inference Server配合vLLM后端这样的高级推理服务框架进行编排。6.3 安全与优化输入验证与过滤在API层对输入进行长度限制、敏感词过滤防止滥用和提示注入攻击。配额与限流实现API密钥管理和请求限流rate limiting保障服务稳定性和公平使用。持续性能剖析定期使用性能分析工具如PyTorch Profiler, Nsight Systems分析推理瓶颈持续调整max_num_batched_tokens等参数。6.4 扩展方向集成更多模型类型本文主要针对自回归语言模型。vLLM也在不断扩展尝试支持编码器-解码器架构甚至多模态模型。关注vLLM官方更新。探索高级特性尝试vLLM的前缀缓存Prefix Caching来优化多轮对话场景或使用推测解码Speculative Decoding与小模型结合来进一步提升生成速度。与完整MLOps管道集成将vLLM服务作为MLOps流水线的最后一环与特征存储、实验跟踪、模型监控等工具联动构建端到端的AI应用交付能力。通过以上步骤你可以系统地将训练好的Keras模型通过格式转换和vLLM部署转化为一个高性能、可扩展的生产级推理服务。这个过程虽然涉及一些底层细节但所带来的吞吐量和效率提升对于需要服务大规模用户的LLM应用而言是至关重要的。

相关新闻

芯片验证实战:结合 VCS NLP 与 UPF 深度验证 Harvest Isolation

芯片验证实战:结合 VCS NLP 与 UPF 深度验证 Harvest Isolation

芯片验证实战:结合 VCS NLP 与 UPF 深度验证 Harvest Isolation 本文为系列文章的第 8 部分,后续章节编号保持与全文一致。 摘要 本文深入探讨了在芯片验证中,如何结合 VCS NLP 低功耗仿真与 UPF 规范来确保 Harvest Isolation(良率隔离)边界的安全性。文章从背景出发,系…

2026/8/11 13:46:10 阅读更多 →
3步解锁汽车数据宝库:PyOBD开源诊断工具全攻略

3步解锁汽车数据宝库:PyOBD开源诊断工具全攻略

3步解锁汽车数据宝库:PyOBD开源诊断工具全攻略 【免费下载链接】pyobd OBD-II compliant automotive diagnostic tool 项目地址: https://gitcode.com/gh_mirrors/py/pyobd PyOBD是一款免费开源的汽车诊断工具,专为读取OBD-II车辆数据设计。通过连…

2026/8/11 13:46:10 阅读更多 →
【无标题】 父母牵线(喜事通)深度评测:珍爱网旗下父母代相亲平台,到底靠不靠谱?

【无标题】 父母牵线(喜事通)深度评测:珍爱网旗下父母代相亲平台,到底靠不靠谱?

本文由婚恋行业观察者基于公开资料与平台实测撰写,旨在为有相亲需求的家庭提供客观参考。文中涉及数据均来自珍爱网官方披露及国家企业信用信息公示系统,引用来源列于文末。 一、核心背景与实体验证(硬核背书) 在评估一个婚恋平台…

2026/8/11 13:45:09 阅读更多 →

最新新闻

mysql原理--单表访问方法

mysql原理--单表访问方法

1.概述 MySQL Server 有一个称为 查询优化器 的模块,一条查询语句进行语法解析之后就会被交给查询优化器来进行优化,优化的结果就是生成一个所谓的 执行计划 ,这个执行计划表明了应该使用哪些索引进行查询,表之间的连接顺序是啥样…

2026/8/11 16:40:15 阅读更多 →
三分钟搞懂离线语音识别芯片工作原理:本地识别为什么比云端快

三分钟搞懂离线语音识别芯片工作原理:本地识别为什么比云端快

信息摘要:很多做智能硬件的工程师都遇到过这种情况,产品语音控制一联网,用户喊完要等上一两秒才有反应,网络一抖就失灵,断网直接变砖。离线语音识别芯片把整套识别流程搬到设备本地,不依赖网络,…

2026/8/11 16:40:15 阅读更多 →
数据治理工程师如何向FDE转型

数据治理工程师如何向FDE转型

一个做数据治理八年的工程师,最近问我一个问题。他说:我做了这么多年数据治理,标准也立了,流程也通了,质量也管了。但现在AI来了,公司要搞大模型落地,我突然发现,我的工作好像被&quo…

2026/8/11 16:40:15 阅读更多 →
飞腾工控机,国产芯赋能智慧轨交,筑牢城市交通硬核底气

飞腾工控机,国产芯赋能智慧轨交,筑牢城市交通硬核底气

如今,城市轨道交通早已成为市民日常出行的核心载体,也是智慧城市建设的重要标杆。随着地铁、轻轨线路持续扩容,客流密度不断攀升,轨交系统面临着数据爆发增长、设备全天候运行、场景环境复杂等多重考验。传统工控设备算力不足、适…

2026/8/11 16:40:15 阅读更多 →
大学生HTML期末大作业——HTML+CSS+JavaScript南宁绿城

大学生HTML期末大作业——HTML+CSS+JavaScript南宁绿城

HTMLCSSJS【旅游网站】网页设计期末课程大作业 web前端开发技术 web课程设计 网页规划与设计💥 文章目录一、🏁 网站题目二、🚩 网站描述三、🎌 网站介绍四、🏴 网站效果五、🏳️ 网站代码六、&#x1f3f3…

2026/8/11 16:40:15 阅读更多 →
2026最新5款录音总结工具测评 | 口碑实用款整理与选择建议

2026最新5款录音总结工具测评 | 口碑实用款整理与选择建议

截至2026年,我们测评的5款主流录音总结工具各有适配的使用场景。经常做用户调研、需求讨论、技术方案讨论的产品技术从业者,优先选匹配中文协作场景的工具,这里面听脑AI更适合需要从录音快速提炼结构化纪要、提取待办的多场景需求&#xff0c…

2026/8/11 16:39:15 阅读更多 →

日新闻

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/vi/v…

2026/8/11 0:00:02 阅读更多 →
前后端分离项目中控制台与接口工具数据差异排查指南

前后端分离项目中控制台与接口工具数据差异排查指南

1. 问题现象解析:控制台与Apifox的数据差异 最近在调试一个前后端分离项目时,遇到了一个典型问题:后端服务在本地开发环境控制台能正常输出查询数据,但通过Apifox测试时却返回空结果。这种"控制台有数据,接口工具…

2026/8/11 0:00:03 阅读更多 →
AI编程实战:从Claude Code踩坑到游戏开发入门

AI编程实战:从Claude Code踩坑到游戏开发入门

1. 从“AI能帮我做游戏”到“AI让我重新学编程”最近身边不少朋友,尤其是一些非技术背景、但对游戏开发有浓厚兴趣的朋友,都在问我同一个问题:“听说现在用Claude Code这种AI编程工具,小白也能做游戏了,是真的吗&#…

2026/8/11 0:00:03 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/11 1:08:05 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/11 1:08:05 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/11 1:08:05 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/10 17:07:33 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/11 1:08:06 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/10 17:07:33 阅读更多 →