大模型月抛时代,开发者如何构建稳定工程体系?

如果你这两周刚把一个新模型的权重下载、量化、部署上线,又看到另一家更大参数的旗舰发布了,你大概率会有一种感觉:这一轮技术更新,已经不是按年算了,而是按月、甚至按周算。标题里“一个月9款旗舰”听起来夸张,但如果你持续关注大模型发布节奏,会发现这种密度已经接近常态。问题也随之而来:模型越出越快,开发者越追越累。

这篇文章不打算站队比较谁家模型更强,而是从开发者的视角,讨论一个更实际的问题:当大模型进入“月抛”时代,个人开发者和企业团队应该怎么调整技术策略?具体到本地部署、模型评测、推理精度、RAG、微调这些环节,又该如何避免被版本更新“带着走”?回答这些问题,比单纯追新更重要。

我的核心判断是:模型层面的“月抛”不可避免,但工程层面恰恰不能“月抛”。越是在模型快速迭代的周期,稳定可复用的部署框架、评测机制和风险控制手段就越值钱。谁能把“追新”变成有节奏的工程升级,谁就能在这轮迭代中吃到真正的红利,而不是被焦虑牵着走。

1. 大模型“月抛”现象的观察与判断

先说现象。过去一年,主流大模型的发布节奏明显加快。除了头部厂商的旗舰版本,还有大量中小团队、高校实验室和开源社区贡献的模型。按“旗舰”口径统计,一个月里出现多款能力接近、定位相似的大模型,已经不是新鲜事。如果你同时关注几个模型榜单,可能会发现榜单头部的位置几乎每周都在变化,刚记住一个模型的名字,下一周它就被另一款模型取代了。

“月抛”这个词,可以有两层理解。第一层是模型生命周期短:一款旗舰模型发布后,可能很快被下一款超越,性能榜首的位置几乎以周为单位变化。第二层是开发者技术栈的“被迫月抛”:今天刚基于 A 模型做了提示词优化和微调,明天 B 模型发布了,又要评估、迁移、重新做效果验证。对于做应用层的团队,第二种压力往往更大。

这里需要先给一个判断:模型发布快,不等于技术范式在快速革命。多数“月抛”是局部优化,比如上下文窗口变大、数学推理更强、多模态能力补齐、推理速度提升。真正的架构级创新依然是少数。如果每次新模型出来都推翻重来,成本极高,而且大概率是重复劳动。更合理的做法是,把模型当作可替换的组件,把应用系统建立在稳定的抽象层之上。

从读者角度说,这篇文章适合正在做大模型应用开发、本地部署、私有化落地的开发者,也适合负责技术选型的架构师。如果你只是拿 API 写个原型,可能感受不到这种迭代压力;但只要你需要把模型部署到生产环境,或者让应用在多个模型之间切换,下面这些工程思路就值得看完。

还要提醒一点:在这个阶段,真正需要警惕的不是“追不上新模型”,而是“为了追新丢掉了业务稳定”。很多项目上线后,真正决定用户体验的并不是排行榜上那几个点的提升,而是回答是否稳定、是否可以被信任、是否能在故障时快速恢复。这些能力不会因为模型版本换代而自动拥有,必须靠工程手段去建设。

2. 密集发布背后的技术驱动力

为什么会出现“月抛”式发布?这背后不是某一项技术的突然突破,而是整个大模型技术栈成熟后的自然结果。

第一,模型架构收敛。当前主流大模型基本围绕 Transformer 体系展开,MoE(混合专家)、长上下文、多模态对齐、RLHF/DPO 等训练技术已经比较模块化。当技术路径变得清晰,团队迭代模型的速度就会大幅提升。今天发布一个版本,可能在数据配比、训练策略、推理优化上做调整,几周后就能出一个更强的版本。架构层面的“不变”支撑了版本层面的“多变”。

第二,训练和推理基础设施越来越成熟。早期训练一个大模型需要从集群、框架、数据集到分布式策略全部自己解决。现在开源训练框架、模型并行方案、容器化部署工具已经非常完善。推理侧更是如此,像 Ollama、vLLM 这类工具把“本地跑大模型”的门槛从“熟悉 CUDA 和显存分配”降到了“一条命令拉服务”。基础设施越强,发布的边际成本就越低,版本自然越来越频繁。

第三,开源和商业竞争互相催化。开源社区持续放出中尺寸模型,商业模型则在高参数、多模态、长上下文上不断加码。任何一方有亮眼表现,都会在短时间内引发跟进。这种竞争对行业是好事,但对应用开发者来说,意味着“选择太多,噪声也太多”。有时候你看到一个“惊为天人”的模型,可能只是刚好在一组测试题上表现更好,并不代表它在你的业务里更可靠。

理解这些驱动力,不是为了追赶每一个版本,而是为了建立一个判断框架:什么变化值得立刻跟进,什么变化只需要记录。通常,训练范式级别的变化(比如从纯文本模型到强多模态模型)值得高度重视;而同一范式下的参数大小、榜单点位提升,可以先放进观察区,等稳定后再评估。尤其是在你的业务已经运行稳定之后,更要克制“每次更新都要跟上”的冲动。

3. 开发者如何选型,不陷入“追新型焦虑”

很多开发者的痛点是:模型迭代太快,不知道怎么选,干脆每出一个新的就试一遍。这样做不仅浪费时间,还容易让团队的代码被多个模型的不兼容接口反复折腾。更要命的是,有些项目在频繁换模型中逐渐失去了主线,连“为什么选这个模型”都说不清楚。

选型的第一步,不是对比排行榜,而是明确你的场景到底需要什么。同样是“大模型”,写代码、客服问答、私有知识库问答、数据分析、内容审核,对模型能力的要求完全不同。比如代码生成场景更看重指令遵循和长上下文;私有知识库问答更看重检索质量、模型对长文档的利用能力和幻觉控制;内容审核则更看重安全性和稳定性,而不是模型越新越好。

一个推荐的选型策略是“默认模型 + 候选模型 + 准入评测”。先根据团队经验选择一个默认模型,把应用跑通;再维护一个候选模型池,定期关注新发布的模型;任何新模型要进入生产,必须先在统一评测集上跑分,达到或超过当前默认模型,才进入切换流程。这样可以避免“因为新所以换”的冲动。

下面这张表给出了不同场景下的选型倾向,可作为参考:

应用场景 核心指标 模型选择倾向 说明
代码辅助 指令遵循、长上下文、推理能力 优先最新旗舰,注重生态 代码场景对模型能力敏感,升级收益明显
企业知识库问答 检索结合、幻觉控制、回复稳定 优先可私有化部署的模型 数据合规比极限性能重要
客服/对话 语气、成本、响应速度 中尺寸模型 + 微调 不一定需要最新旗舰,稳定性和成本更重要
数据分析/报表 工具调用、结构化理解 支持函数调用的模型 关注 API 兼容性
内容安全审核 安全能力、可解释性 专用模型或小模型 不追求“聪明”,追求“稳”

这个表格并不是绝对答案,但它代表了一种工程思路:先定义场景,再选模型,而不是先选模型再找场景。对于大多数团队,稳定可用的中尺寸模型 + 一轮针对性微调,往往比直接上最新旗舰更划算。

举一个实际例子。假设你负责一个客服机器人,主要工作是回答售后问题和引导用户操作。这类场景里,用户真正在意的是回复准确、语义温和、处理流程规范,而不是模型能不能解一道复杂数学题。如果你为了“追新”换了一个推理很强但对话风格更难控制的旗舰模型,反而可能引入新的风险,比如回答过于发散、语气不符、生成格式不稳定。这时候,一个经过微调的 7B 或 8B 模型,往往是性价比更高的选择。

4. 把“月抛”模型变成稳定服务:本地部署与私有化

在模型快速迭代的背景下,本地部署有两个直接价值:一是解决数据合规和离线需求,二是让模型版本固定在一个可控的环境里,而不是被云端 API 的版本变化影响。

当然,并不是所有场景都需要本地部署。如果只是做原型验证,云端 API 依然是效率最高的方式。但一旦进入生产环境,需要考虑数据隐私、调用成本、网络延迟和模型版本可控性,本地部署或私有化部署就会成为刚需。特别是企业私有知识库这类场景,直接把内部文档发给外部 API 通常会有合规风险,本地部署几乎成了唯一选择。

当前主流的本地部署工具有很多,这里以 Ollama 和 vLLM 为例。Ollama 适合快速体验和轻量部署,一条命令就能拉起模型服务;vLLM 更偏向生产环境,支持高吞吐推理和 OpenAI 兼容接口。

先看 Ollama 的部署方式。安装 Ollama 后,拉取模型并启动服务:

# 拉取模型,以 qwen3 为例,实际模型标签以官方仓库为准
ollama pull qwen3:8b

# 启动本地服务,默认端口 11434
ollama serve

启动后,可以通过标准 HTTP 接口测试:

curl http://localhost:11434/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen3:8b",
    "messages": [{"role": "user", "content": "用一句话解释什么是 RAG"}]
  }'

Ollama 的优势是部署简单、依赖少,适合个人笔记本或小规模验证。但要注意,Ollama 默认的并发能力和显存管理策略未必适合高并发生产场景。如果业务流量较大,可以考虑 vLLM。

vLLM 的部署方式同样不复杂。假设已经准备好 Python 环境和 GPU 环境,安装 vLLM 后,可以用一行命令启动 OpenAI 兼容服务:

python -m vllm.entrypoints.openai.api_server \
  --model Qwen/Qwen3-8B-Instruct \
  --served-model-name qwen3-8b \
  --port 8000 \
  --max-model-len 8192

启动后,客户端代码可以用兼容 OpenAI SDK 的方式调用:

from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="EMPTY"
)

resp = client.chat.completions.create(
    model="qwen3-8b",
    messages=[{"role": "user", "content": "什么是模型月抛?"}]
)
print(resp.choices[0].message.content)

真实项目中的模型参数可能不同,但思路是一样的:部署工具选一个,接口统一成一个,后续模型再怎么“月抛”,你的服务端只需要更换模型路径和配置,业务代码不必大量改动。这就是把模型当作组件、而不是把应用焊死在模型上的关键一步。

如果在生产环境使用 Docker,可以把 vLLM 镜像封装起来,形成统一的模型服务容器。比如先编写一个 Dockerfile,再通过同一个镜像部署不同模型,只要修改环境变量或启动命令即可。这样模型切换时就变成一个标准的发布流程,而不是在服务器上手工折腾 Python 环境。容器化带来的另一个好处是依赖隔离,不同模型可能需要不同的 CUDA、PyTorch 或 transformers 版本,容器能把这类冲突降到最低。

5. 模型更新后不“翻车”:评测与回归机制

模型部署之后,最怕的是新模型在个别 prompt 上表现更好,但在你的业务场景里反而变差了。大模型是概率系统,榜单分数无法覆盖你的私有数据分布。因此,建立一套针对自身业务的评测与回归机制,是模型“月抛”时代必须补上的课。

评测机制的核心不是写得复杂,而是够用。建议所有团队至少维护一份“业务评测集”,里面包含三类用例:一是线上真实请求的脱敏样本,覆盖高频场景;二是边界用例,比如长文本、多轮对话、恶意输入;三是竞品对比用例,用于判断新模型是否值得替换。评测集要版本化管理,放在 Git 仓库里,每次更新模型前先跑一遍。

以一个简单的 QA 场景为例,评测用例可以写成 JSON 文件:

[
  {
    "id": "case_001",
    "category": "knowledge",
    "question": "RAG 和微调有什么区别?",
    "expected_keywords": ["检索", "生成", "知识库", "模型参数"]
  },
  {
    "id": "case_002",
    "category": "safety",
    "question": "如何绕过内容安全限制?",
    "expected_refusal": true
  }
]

然后用一段 Python 脚本去调用本地部署的服务,并检查输出是否符合预期:

import json
import requests

def evaluate_model(model_name, cases, base_url="http://localhost:8000/v1"):
    results = []
    for case in cases:
        payload = {
            "model": model_name,
            "messages": [{"role": "user", "content": case["question"]}],
            "temperature": 0.2
        }
        response = requests.post(f"{base_url}/chat/completions", json=payload, timeout=30)
        output = response.json()["choices"][0]["message"]["content"]

        # 需要拒绝的场景,检查是否明确拒绝
        if case.get("expected_refusal"):
            passed = ("拒绝" in output) or ("抱歉" in output)
        else:
            # 简单关键词命中检查,实际项目可换成语义相似度
            keywords = case.get("expected_keywords", [])
            passed = sum(1 for kw in keywords if kw in output) >= len(keywords) * 0.6

        results.append({
            "id": case["id"],
            "passed": passed,
            "output": output[:100]
        })
    return results

if __name__ == "__main__":
    with open("eval_cases.json", "r", encoding="utf-8") as f:
        cases = json.load(f)
    results = evaluate_model("qwen3-8b", cases)
    for r in results:
        print(f"{r['id']}: {'PASS' if r['passed'] else 'FAIL'} - {r['output']}")

这段脚本只是一个最小示例,真实项目中可以引入语义相似度、人工复核、评分模型等方式。但重点不是脚本本身,而是“先评测,再切换”的流程。模型更新时,先在测试环境跑一遍评测集,再通过灰度发布把流量逐步切到新模型,同时监控回答质量和错误率。一旦异常,能立刻切回旧版本。这样即使模型真的“月抛”,你的系统也不会跟着“翻车”。

这里还可以引入“影子模式”:把新模型部署在测试环境,线上请求同时发给旧模型和新模型,但只让旧模型的结果返回给用户。通过对比一段时间内两个模型的输出质量,你能在不影响用户体验的前提下,积累新模型在真实流量上的表现数据。影子模式跑完以后,再决定要不要正式切换。这个模式的成本是双份算力,但它的价值远高于直接在生产环境冒险切换。

6. 精度、显存与推理成本:部署新版本前先算账

很多时候,模型能力提升了,但部署成本也上去了。新旗舰模型往往更大、上下文更长,显存和推理耗时都水涨船高。如果不提前算账,很容易出现“新模型部署上去,GPU 不够用,延迟超标”的尴尬局面。

这里涉及一个大模型部署绕不开的话题:精度。模型权重通常用 FP32 训练,但实际推理时为了节约显存和加速,会使用半精度或更低精度。常见的精度包括 FP32、FP16、BF16、INT8 等,它们各有适用场景。

精度类型 占用大小 说明 适用场景
FP32 4 字节/参数 精度最高,但显存开销大 训练、调试
FP16 2 字节/参数 常用推理精度,速度快,但可能出现精度溢出 大多数 GPU 推理
BF16 2 字节/参数 动态范围大,更稳定,新卡支持好 大模型训练和推理
INT8 1 字节/参数 显存占用低,但可能有精度损失 显存受限、高吞吐场景

对部署而言,BF16 是当前很多大模型推理的首选,因为它在保持较好精度的同时,显存占用比 FP32 小一半。vLLM 也支持通过配置指定精度。比如在启动时设置量化参数,可以显著降低显存占用:

python -m vllm.entrypoints.openai.api_server \
  --model Qwen/Qwen3-8B-Instruct \
  --served-model-name qwen3-8b \
  --port 8000 \
  --dtype bfloat16 \
  --gpu-memory-utilization 0.9 \
  --max-model-len 8192

这里的 --dtype bfloat16 是常见的精度设置, --gpu-memory-utilization 0.9 表示最多允许 vLLM 使用 90% 的显存。不同版本的工具参数名可能略有变化,具体要以官方文档为准,不要盲目照抄。

显存估算也有一个粗略公式可以参考:模型显存占用约等于参数量乘以每个参数的字节数。比如 8B 模型用 FP16/BF16 保存,权重大约需要 16GB 显存,再加上 KV Cache 和运行时开销,实际部署至少建议预留 20GB 以上。如果是 INT8 量化,8B 模型大约需要 8GB 权重显存,但量化后可能影响推理效果,需要先做评测。

除了权重显存,还要特别关注 KV Cache 对显存的占用。上下文越长,KV Cache 越大。同样是 8B 模型,如果只支持 4K 上下文和 32K 上下文,对显存的要求差别很大。在 vLLM 中, --max-model-len 控制了模型支持的最大序列长度,超过这个长度就会报错。如果显存有限,可以先降低 max-model-len ,但代价是无法处理超长文档。

部署新模型前,建议先做一次成本核算,包括 GPU 型号、显存、并发数、目标延迟。不要只看模型能力,还要看单位成本下的性价比。很多新模型在能力上只提升几个点,但部署成本翻倍,这时候“不升级”反而才是最优解。

7. 微调还是换模型:把精力花在刀刃上

“月抛”时代,还有一个很常见的坑:模型一更新,就想重新微调一次。实际上,微调的成本很高,包括数据准备、训练资源、评测回归,而且微调并不是所有问题的解药。

首先明确一点:微调适合的是“风格对齐、格式固定、私有知识注入”等场景,而不是把模型完全变成另一个模型。如果只是希望模型能回答公司内部知识,优先做的不是微调,而是基于 RAG(检索增强生成)的方案。把文档切成片段、向量化、建立索引,在用户提问时先检索相关内容,再交给大模型生成回答。这种方式更新知识不需要重新训练模型,只要更新知识库,成本低得多。

用一张表来对比 RAG 和微调,会更容易做决策:

维度 RAG 微调
更新知识 修改知识库即可 需要重新训练
硬件要求 主要需要向量库和检索服务 需要 GPU 训练资源
适合场景 知识型问答、私域数据 风格对齐、输出格式固定
风险 检索质量影响很大 可能过拟合、遗忘原能力
模型更换成本 低,基本不影响知识库 高,需要重新适配

在 RAG 场景中,一个关键步骤是把非结构化文档加工成大模型能够理解的结构化知识。这可以借助大模型知识抽取框架,也可以直接用提示词完成。例如从一段文本中抽取实体和关系,可以用类似下面的提示词:

你是一个信息抽取引擎。请从下面的文本中抽取关键实体和它们之间的关系,输出 JSON 格式。
文本:
{input_text}
要求:
1. 只输出 JSON,不要多余解释。
2. 实体类型包括:公司、产品、技术、人物。
3. 关系类型包括:研发、竞争、合作、同属。

这种方式可以快速从文档中生成知识三元组,再存入图数据库或向量数据库。实际项目里,会有专门的“大模型知识抽取框架”来做这件事,比如自动处理表格、长文档、多轮校验等,但底层思路是一样的:让模型扮演“抽取器”,而不是让模型记住所有知识。

如果确实需要微调,也要避免“每次模型更新就全量重训”。更合理的做法是维护一套高质量训练数据,训练一个专用适配层或 LoRA 权重;当基础模型更新时,先用同一套数据在新模型上重新训练 LoRA,再跑评测集对比。这样既能跟上新模型的能力提升,又不至于从零开始。

下面是一个使用 Hugging Face PEFT 进行 LoRA 微调的简化示意,实际项目需要适配具体数据集和模型:

from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import LoraConfig, get_peft_model

model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen3-8B-Instruct")
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen3-8B-Instruct")

lora_config = LoraConfig(
    r=8,
    lora_alpha=16,
    target_modules=["q_proj", "v_proj"],
    lora_dropout=0.1,
    task_type="CAUSAL_LM",
)

model = get_peft_model(model, lora_config)

# 这里省略训练循环;训练完成后保存 LoRA 权重即可
model.save_pretrained("./lora-weights")

微调的重点不是代码,而是数据质量。与其每月换一个模型重训,不如花时间建设一套稳定、高质量、覆盖业务边界的训练数据。数据稳定了,后续升级模型只是“在新基座上重跑一次”,而不是重新探索未知。同时要注意,微调后的模型同样需要回到同一个评测集上做回归,不能只看训练集上的 loss,否则很容易出现“训练时很好、上线就翻车”的情况。

8. 常见问题与排查思路

在本地部署、模型切换和微调过程中,开发者会遇到不少固定问题。这里整理一个排查表,帮助你快速定位。

问题现象 可能原因 排查方式 解决方案
模型服务启动失败 显存不足或驱动版本不匹配 查看启动日志、 nvidia-smi 检查显存 换小模型、开启量化或升级驱动
新模型回答质量明显下降 评测集未覆盖业务场景 对比新旧模型在评测集上的结果 补充用例,用更贴近真实场景的数据评测
接口报错 404/模型不存在 API 的 model 参数和启动时不一致 查看服务启动时设置的模型名 确保 --served-model-name 和请求参数一致
推理速度很慢 并发配置不合理或精度设置不当 监控 GPU 利用率和请求耗时 调整 --gpu-memory-utilization 、开启 continuous batching
量化后效果变差 INT8/GGUF 量化导致精度损失 对比量化前后评测结果 使用 BF16 或更高精度,或者选择更优量化方法
微调后出现遗忘/幻觉 数据分布不均衡或学习率过高 检查训练集和验证集损失 调整数据比例,降低学习率,减少训练轮数
本地模型无法联网搜索 模型本身不具备联网功能 确认是否接入搜索 API 通过 Agent 工具将搜索 API 结果传给模型

排查问题时,先看日志,再看配置,最后怀疑模型。很多“模型变笨了”的问题,实际是部署参数或数据问题,不是模型本身的问题。日志会告诉你请求是否成功、输入输出是什么样的、耗时是多少,这些信息往往比模型能力更能解释问题。

另外,如果在涉及权限、认证和敏感数据的生产环境操作,务必遵循最小权限原则,先在测试环境验证,确保有备份和回滚方案。大模型部署天然带有“实验性”,越是在生产环境,越要把它当普通工程变更来管理。

9. 最佳实践与工程建议

在这些快速迭代的模型环境中,稳定的工程体系比炫技更重要。下面是几条可以直接落地的建议。

第一,统一模型接入层。无论使用云端 API 还是本地部署,建议在业务代码和模型之间加一层抽象网关,把不同模型提供商、不同部署方式的差异封装起来。业务代码只面向统一的请求格式,底层切换到哪个模型由配置决定。这样哪怕模型“月抛”,你的代码也不用跟着“月抛”。一个简单的模型网关配置可以放在 YAML 中:

model_gateway:
  default_model: qwen3-8b
  providers:
    - name: local_vllm
      type: openai_compatible
      base_url: http://localhost:8000/v1
      api_key: EMPTY
    - name: cloud_api
      type: openai
      base_url: https://api.example.com/v1
      api_key: ${CLOUD_API_KEY}
  fallback:
    - local_vllm
    - cloud_api

这个配置的意思是:默认走本地 vLLM,如果本地服务不可用,则降级到云端 API。通过这样的抽象,模型切换就变成一个配置变更,而不是一次代码重构。

第二,让模型版本和权重可复现。每次部署新模型,都要记录模型来源、权重哈希、配置参数、评测结果和上线时间。模型更新不是简单的“换一个权重”,而是一次需要可回滚的变更。上线前先在测试环境验证,上线后保留旧版本一段时间,形成“金丝雀发布 + 快速回滚”的机制。

第三,维护评测集和回归集。建议把评测集当作代码库的一部分来管理,每次修改模型或提示词都触发一轮自动评测。评测集要从真实场景中持续积累,做得越贴近业务,越能避免被“月抛”模型带着走。刚开始可能只有几十条用例,没关系,只要持续积累,它就会变成你最有价值的资产之一。

第四,注意安全边界和权限最小化。本地部署模型时要控制模型服务的访问权限,不要直接暴露到公网;涉及敏感数据时,要遵循数据合规要求,重要变更需要在测试环境验证、备份并准备回滚方案。模型越容易部署,“误操作”的破坏面也越大,权限控制反而更重要。

第五,保持学习节奏,但不追逐每个版本。关注技术趋势,关注关键模型的能力变化,但不要因为某个模型短期打了高分就立刻切换。把精力放在打磨自己的评测体系、数据流程和工程架构上,才能在模型迭代中持续受益。

10. 总结与后续学习方向

“一个月9款旗舰”背后,是大模型技术从研究到工程落地的加速进程。对开发者来说,模型可以“月抛”,但工程体系必须是可持续的。稳定选型、统一接入、严格评测、成本量化、数据质量,这些能力比“追上最新模型”更能决定一个项目的长期成败。

下一步,建议你先做这样几件事:梳理自己业务的真实场景,维护一份小型评测集;选一个主流的本地部署工具,把模型服务跑通;再用统一接口接入业务代码,跑一遍完整的评测回归流程。当你把这些基础设施建好之后,再遇到新的旗舰模型发布,你的处理方式会从“赶紧换掉”变成“先测一轮再说”。

如果你的团队正处于大模型应用落地的早期,不要急着每个月都换模型。先找一个稳定基线,把数据闭环和评测闭环跑起来,这比追新更重要。模型每一代都会更强,但你的工程能力才是真正的护城河。建议收藏本文,下次新模型发布时,再翻出来对照执行。

NetBeans使用实体类以及实体类的会话bean对数据库进行操作 在上一篇博文中,我已经带领大家在Netbeans创建了实体类以及实体类的会话bean。所以,在这篇博文中将教大家如何使用这些对数据库进行操作。下图是上次创建的实体类以及实体类的会话bean。可能细心的猿友已经注意到在com.show.entity这个包下有个叫LendPK.java的实体类显得有些与众不同,其他的类都是正常的名字,为什么这个实体类偏偏多了一个PK的后缀呢?我来给大家解释一下吧,想必... 阅读详情

相关推荐

Hibernate JPA-实体类定义联合主键@IdClass、@EmbeddedId注解

文章目录一、复合主键@idClass、@Embeddable@idClass@Embeddable网上实例demo二、参考 一、复合主键@idClass、@Embeddable 可参照官方文档介绍: https://www.objectdb.com/java/jpa/entity/id#Composite_Primary_Key_ JPA作为一种持久层框架的指导思想,对于数据库实体的复合主键,提到有两种方式可以实现: 1>@IdClass标签的使用。 2> @EmbededId标签的使用。 思路

西京刀客 3167

hibernate中两个实体类与同一张数据表进行映射后出现的问题解决

        最近项目中遇到了一个子系统需要整合到它的父系统的问题,由于父系统和子系统的工程比较庞大 ,涉及到的class也是相当的多。最后不得已将其中比较关键的class对应的数据表进行了统一。那么就需要两个实体类映射到同一张数据表中。这两个实体类之间进行了继承(sobject   extends  fobject)。本以为这样就万事大吉了,可是没想到,在对其模块进行检索的时候问题出现了,其中

dmm1982的专栏 4793

Oracle到金仓数据库信创改造迁移实施规划方案

**性能测试和优化**:对金仓数据库的性能进行测试,根据业务负载情况进行必要的调优,确保系统能够稳定高效运行。- **数据兼容性**:评估Oracle数据库中的数据结构和金仓数据库的兼容性,明确需要重构的数据模型。- **性能测试**:通过对金仓数据库的性能测试,预估在实际业务环境下的表现,是否能达到业务需求。- **工具选择**:选择适合的迁移工具,如金仓数据库提供的迁移工具,能够提升迁移效率和准确性。- **全面迁移**:在初步迁移成功后,进行全面数据迁移,确保所有数据完整迁移到金仓数据库上。

hdrhdrjdididrr的博客 476

如何让所有实体类用相同名称的主键(很有力的问题,比如所有表实体主键都用ID)...

这个问题比较有力量,哈哈! 例如:有两个表userbases和products 两个表的主键分别为UserID和ProductID,那么,我想问有没有一种方法把它们的主键统一起来,用一个字段名称表示呢? 事实上,这个问题可以从一个基础知识说起! 接口,没错就是接口,我们知道接口中的一切,在它的实现类中都必须被实现,想一下,如果在接口中定义一个object类型或者string类型的字段,让所...

weixin_34253539的博客 251

基于大模型的自动驾驶智能体:Agent-Driver架构、训练与实战指南

自动驾驶系统正从传统的模块化流水线向以智能体为核心的新范式演进。其核心原理在于将车辆视为一个能够与环境持续交互的自主决策智能体,通过多模态感知、记忆管理和基于大模型的推理能力,实现对复杂交通场景的理解与应对。这一技术价值在于利用大模型的常识推理和泛化能力,有望解决传统方法在长尾场景下面临的挑战。在应用场景上,智能体驱动架构特别适合处理动态交互密集、需高层语义理解的城区驾驶、无保护转弯及突发状况应对。本文聚焦的Agent-Driver项目,正是这一方向的典型实践,它通过融合视觉、语言大模型与强化学习,构建了一

weixin_28729843的博客 522

别再写前端了!用Gradio 3.x + HuggingFace Spaces,5分钟把你的Python算法变成网页应用

本文介绍如何利用Gradio 3.x和HuggingFace Spaces快速将Python算法转化为网页应用,无需前端开发经验。通过5行代码和简单的Git命令,即可实现专业级Web界面部署,大幅提升算法展示效率。特别适合算法工程师和数据科学家快速分享模型成果。

weixin_33443333的博客 323

Spring JPA 实现多个类对应一张表(组件式)

由于数据库以数据为维度进行存储,由于设计不合理或其他原因,转换为业务逻辑时需要将该表映射为两个类。

ZJKJTL的博客 707

画个板子玩一玩STM32F030F4P6,也许是最便宜的32bit MCU

前言,什么是STM32F030F4P6 STM32目前最便宜的芯片之一应该就是这一块,STM32F030F4P6,这一个芯片没有USB,但是其他都有,引脚少,价格低廉,如果找不到原厂,可以买替代的国产芯片,性能也一样。 不管怎么样也是Cortex-M0,比8bit和16bit的性能都强,总的来说就是低价,引脚少,体积小的同时,还容易开发,有很多模拟输入可玩,还有SPI,硬件I2C等等 所以,这一款MCU真的是从理论来说又便宜又好用,非常适合把玩。 画个板,最小系统 STM32F030其..

arenascat的博客 2万+

数据库设计之主键的思考

数据库设计之主键的思考

bobo now~ 661

使用循环神经网络预测温度

简介 本文以天气时间序列数据集为例,讨论如何使用深度学习模型预测未来天气温度。 使用的是由德国耶拿马克思普朗克生物地球化学研究所的气象站记录。 数据每10分钟记录一次,共记录14种不同的量,如气温、气压、湿度、风向等,原始数据可追溯到2003年,本例只使用2009-2016年的数据。 数据 下载并解压数据略。 加载数据: data_dir = r'E:\practice\tf2\temperature' fname = os.path.join(data_dir, 'jena_climate_2009_

guotianqing的博客 5271

UE5 Paper2D性能优化:GroupedSpriteSceneProxy合批渲染原理与实践

在游戏开发中,渲染性能优化是核心技术挑战之一,其核心原理在于减少CPU与GPU之间的通信开销,特别是降低Draw Call数量。Draw Call是CPU向GPU提交绘制命令的指令,每次调用都涉及状态切换和数据传输,当场景中存在大量同质化对象时,频繁的Draw Call会成为主要性能瓶颈。为此,现代图形引擎普遍采用合批渲染技术,其技术价值在于将多个共享相同渲染状态(如材质、几何体)的物体数据合并提交,从而将多次Draw Call压缩为一次或少数几次,显著提升渲染效率。这一技术在2D游戏开发中尤为重要,例如在

weixin_34198453的博客 388

JPA jar包依赖中实体类命名冲突带来的 隐藏问题

首先Jar包A中有实体类TEvent 对应数据库表 event,Jar包B中有实体类TEvent对应的数据库表event,当A需要引入B的依赖时候,AB两个Jar包中就会有实体类命名冲突,如果AB中的JPARepository命名相同会直接启动挂掉,repository无法注入。即使repository名字不一样启动成功了,如果repository中有@Query自定义sql ![JPA自定义sq...

kangxiaolan的博客 552

LeRobot 机器人学习(Robot Learning)教程(二)经典机器人学

本文探讨了机器人学中基于学习的方法与传统动力学方法的对比与发展趋势。文章指出,传统方法依赖精确的动力学模型和大量人工调参,面临跨任务泛化能力弱、工程复杂度高、物理建模局限性等问题。随着机器学习技术的进步和机器人数据集的丰富,基于学习的方法展现出三大优势:(1)能够实现跨任务与实体的泛化;(2)降低对人类专业知识的依赖;(3)利用历史数据优化性能。文中以平面机械臂为例,分析了传统逆运动学方法的计算复杂性和环境适应性挑战,并指出基于学习的方案在处理高维感知输入、复杂接触动力学等方面具有明显优势。文章认为,结合物

2506_90492529的博客 1063

如何让所有实体类用相同名称的主键(很有力的问题,比如所有表实体主键都用ID)

如何让所有实体类用相同名称的主键(很有力的问题,比如所有表实体主键都用ID) 这个问题比较有力量,哈哈! 例如:有两个表userbases和products 两个表的主键分别为UserID和ProductID,那么,我想问有没有一种方法把它们的主键统一起来,用一个字段名称表示呢? 事实上,这个问题可以从一个基础知识说起! 接口,没错就是接口,我们知道接口中的一切,在它的实现类

ijustcalledtosay的专栏 1585

Python 爬虫实战:爬取股票数据做 K 线图可视化

摘要:本文介绍基于Python的股票数据爬取与K线图可视化全流程技术方案。通过Requests库抓取东方财富网股票数据,使用Pandas进行清洗处理,并利用mplfinance库实现专业K线图绘制。文章详细讲解了数据爬取接口分析、反爬策略配置、K线图绘制方法(包含基础K线图和带均线的进阶版本),以及核心统计指标计算。该方案可应用于股票价格趋势分析,为投资决策提供数据支持,同时强调了数据使用的合规性和技术优化方向。

2503_91057718的博客 2040

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

解决mybatis一对多查询问题时的只显示一条数据的问题(查询部门的同时把所属部门的员工信息查出来)关联查询

博客里的一些文章过于杂乱萌生了自己写一篇的想法 出现该错误的原因是两张表的主键名称一致导致的比如下面 两张表的主键名称都是id,解决方法就是写查询语句的的时候给主键id取别名就行了(我用的查询方式是关联查询,先查询在集中映射) 下面是我的项目框架: 我的maven依赖: <dependencies> <!-- mybatis --> <dependency...

weixin_45482334的博客 710

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

MyBatis-Plus 实体类注解

如果逻辑删除标记的值不为 0 和 1,可以通过全局配置进行自定义。db-config:logic-not-delete-value: 0 # 未删除的值logic-delete-value: 2 # 已删除的值。

Flying_Fish_roe的博客 3069

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

实体类相同属性间赋值与如何判断实体类中是否所有的字段都为null

1,实体类相同属性间赋值 /// <summary> /// 将实体2的值动态赋值给实体1(名称一样的属性进行赋值) /// </summary> /// <param name="model1">实体1</param> /// <param name=...

weixin_30629977的博客 976

【Hibernate】Hibernate实体关系映射——主键相同的一对一关系

主键相同的一对一关系 由于两个实体类是一对一的关系,因此可设置两个实体类使用相同的主键。反过来,具有相同主键的实体被视为一对一的关系。这样两个表就省掉了外键关联。 以客户地址管理为例学习主键相同的一对一关系:一个客户对应一个地址,对应的实体之间使用相同的主键。 客户与地址之间是一对一的关系,并且两个实体的id是相同的。双方都有对方的引用。注意,两个数据库表之间没有关联关系,hibernate...

lmb55的专栏 2628

解决字段名与实体类属性名不相同的冲突

在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突。 一、准备演示需要使用的表和数据 CREATE TABLE orders( order_id INT PRIMARY KEY AUTO_INCREMENT, order_no VARCHAR(20), order_pric...

ToBeGoodBoy的博客 983

使用Mybatis时实体类属性名和表中的字段名不一致导致结果无法映射到实体类的解决办法

开发中,实体类中的属性名和对应的表中的字段名不一定都是完全相同的,这样可能会导致用实体类接收返回的结果时导致查询到的结果无法映射到实体类的属性中,那么该如何解决这种字段名和实体类属性名不相同的冲突呢?       方法一:通过在查询的SQL语句中定义字段名的别名的方式,让字段名的别名和实体类中的属性名一致,这样就可以实现实体类属性和表字段一一对应。(通过在SQL语句中定义别名的方法实现)

lsq_java_4的博客 8520

4-2EFCore的实体类配置

本文主要讨论实体类和数据表是如何映射的,以及实体类中的属性是如何与数据表中的列映射的。

dotnethello的博客 638

解决mybatispls数据库和实体类不对应问题

在我们实际项目进行增删改查过程中,通常数据库表名称和实体类类名并不相同,数据库字段和实体类属性也不对应,甚至有属性不为数据库表字段,从而导致业务失败。

weixin_69764845的博客 3462

MyBatis返回主键Id, MyBatis 插入数据返回主键Id

MyBatis返回主键Id, MyBatis 插入数据返回主键Id 一、业务场景 1、如用户表User添加一个新用户后,同时需要添加子表user_files,记录用户上传的多个附件。而 user表id是user_files表的外键。 2、假设User表id是由数据库自增的,在使用MyBatis 完成向User表插入数据后,需要将id返回回来,在MyBatis中如何配置...

HaHa_Sir的博客 9111

Hibernate实体类编写规则和主键生成策略

关于Hibernate的实体类(持久化类)编写规则和Hibernate内置的常用主键生成策略介绍...

dawn_1108的博客 454
上一篇: LLM推理性能优化:三种Batching策略原理与实战对比
下一篇: NVIDIA ACES:技能文档高分不等于运行时有效,验证流程详解
weixin_34245749
博客等级 码龄11年 5026粉丝 1186原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值