跳到主要内容

Agent 框架

LangChain 本身不吃显存,吃显存的是它调的那个模型

langchain 1.3.16 是一层纯 CPU 的编排代码,真正决定你要租多大卡的,是 create_agent 背后那个要连续吐出 tool_calls 的本地模型。这一页把这两笔账分开算清楚。

LangChain 已经不是 2024 年那个「Chain 套 Chain」的库了。主线包 langchain 走到 1.3.16,langchain-core 1.6.0,LangGraph 1.2.11,全部 MIT 许可,由 langchain-ai 维护,仓库在 github.com/langchain-ai/langchain。v1 之后 langchain 这个命名空间只留下 agents、messages、tools、chat_models、embeddings 五块,构建 agent 的唯一入口是 `from langchain.agents import create_agent`,它取代了原来 langgraph.prebuilt 里的 create_react_agent。定制不再靠继承和拼 Chain,而是靠 middleware —— 每个中间件挂在 before_model、after_model 这类执行点上,各管一件事:执行环境、上下文管理、规划与分派、容错、护栏、纠偏。跨供应商的差异被收进 content_blocks,reasoning、text、tool_call 这些块在 langchain-anthropic、langchain-openai、langchain-ollama 之间是同一套读法。

所以「LangChain 需要多大显存」这个问题,标准答案是 0GB。它是 Python 进程里的编排逻辑,跑在 CPU 上,Python 3.10 到 3.14 都支持。显存账全部落在你自己起的后端上:一个能可靠调用工具的对话模型,一个做向量化的 embedding 模型,讲究一点再加个重排。这几个才是要租卡的东西。以能查证的数字为准:openai/gpt-oss-20b 是 21B 总参 / 3.6B 激活的 MoE,MoE 权重走 MXFP4,模型卡明说「run within 16GB of memory」,一张 24GB 卡跑得很舒服;gpt-oss-120b 是 117B 总参 / 5.1B 激活,官方定位就是「fit into a single 80GB GPU」;Qwen3.8-27B 是 27B 稠密、原生 262,144 上下文、可用 YaRN 外推到 1M,bf16 光权重就要约 54GB,官方 FP8 版本压到约 27GB。这些数字乘出来是多少显存,你就该租多大的卡,中间没有魔法。

自建 LangChain 真正会崩的地方,也不在框架本身。最常见的三个:一是本地模型接上去后 bind_tools 看着正常、agent 却永远不调工具 —— 因为 vLLM 没开 `--enable-auto-tool-choice` 和对应的 `--tool-call-parser`,模型把工具 JSON 当普通文本吐了出来,循环自然不触发;二是老代码升到 1.x 后 `from langchain.chains import LLMChain` 直接 ImportError,旧 chains、旧 retrievers、indexing API、hub 模块和 langchain-community 的转出口全被搬去了 langchain-classic 1.0.8;三是私有化部署最忌讳的一条,LANGSMITH_TRACING 一旦为 true,prompt 和工具返回值就顺着链路发去了 LangSmith。这些坑都得在真机上撞一次才记得住,而撞它们需要的是一张随时能开、按秒计费、撞完就停的卡 —— NexGPU 在 51 个国家和地区有 1,175 个已验证可租节点、2,498 张 GPU,2,000+ 预置镜像里 PyTorch 和 vLLM 都是现成的。

01 —

你要装的版本,和你要喂的模型

上半段是 LangChain 技术栈本体,一张卡都不占;下半段才是真正把显存吃掉的后端。

版本参数量显存上下文说明
langchain 1.3.16框架本体,无权重0GB,纯 CPU 编排由后端模型决定create_agent 与 middleware 的主线包,MIT 许可,Python 3.10–3.14;命名空间收窄到 agents / messages / tools / chat_models / embeddings。
langgraph 1.2.11 + langgraph-cli 0.4.31运行时与 CLI0GB,状态落 Postgrescheckpointer 决定可回溯长度有状态多轮 agent 的运行时。CLI 提供 langgraph new / dev / up / build / dockerfile,`langgraph up` 直接把服务拉进 Docker。
langchain-classic 1.0.8迁移兼容包0GB旧 chains、旧 retrievers(含 MultiQueryRetriever)、indexing API、hub 模块、langchain-community 转出口都在这里。老项目升 1.x 报 ImportError 就装它。
openai/gpt-oss-20b(后端候选)21B 总参 / 3.6B 激活 MoEMXFP4 权重,模型卡称 16GB 内可跑长上下文,按 --max-model-len 裁Apache 2.0。单卡 24GB 就能跑通完整 agent 循环,是验证 create_agent、middleware 和工具链路最划算的后端。
Qwen/Qwen3.8-27B 与 -FP8(后端候选)27B 稠密(HF 参数计数含视觉塔约 28B)bf16 权重约 54GB / FP8 约 27GB原生 262,144,YaRN 可外推至 1MApache 2.0,原生看图看视频,带 reasoning_effort 档位(xhigh / medium / low)与 preserve_thinking。vLLM 一行 `vllm serve "Qwen/Qwen3.8-27B"` 起服务。
Qwen/Qwen3-Embedding-0.6B / 4B / 8B(检索侧)0.6B / 4B / 8Bfp16 约 1.2GB / 8GB / 16GB长文档切块后进LangChain RAG 的向量化后端,官方另有 GGUF 版本。0.6B 那档小到可以和别的服务挤同一张卡,别为它单独占推理卡的显存。

02 —

按你实际要跑的东西选卡

LangChain 不进这张表,进表的是它背后的模型 —— 下面每一档都按可查证的权重体积对齐显存。

  • 跑通 create_agent 全链路:单卡 gpt-oss-20b 做工具调用验证

    RTX 4090 24GB$0.540/卡·时

    MXFP4 权重按官方说法 16GB 内装得下,24GB 还剩约 8GB 给 KV cache,够一个十来步、32K 上下文的 agent 循环跑完不 OOM。

  • 只做检索侧:Qwen3-Embedding-0.6B 批量向量化知识库

    Tesla T4 16GB$0.298/卡·时

    0.6B 的 fp16 权重才约 1.2GB,把 embedding 拆到便宜卡上单独跑,别让它去挤推理卡本来要留给 KV cache 的那几个 GB。

  • 生产级 agent 后端:Qwen3.8-27B-FP8 常驻服务

    RTX A6000 48GB$0.817/卡·时

    FP8 权重约 27GB —— 32GB 的卡确实装得进权重,但几乎不剩 KV cache,agent 多轮工具调用一累积就爆;48GB 才是这一档的安全线。

  • 顶配:gpt-oss-120b,或 Qwen3.8-27B bf16 开长上下文

    A100 PCIE 80GB$0.824/卡·时

    gpt-oss-120b 官方就是照着单张 80GB 设计的,Qwen3.8-27B 的 bf16 权重约 54GB 也正好落这一档;同为 80GB,它只要 H100 SXM $3.582/卡·时 的约 23%。

03 —

从空实例到能调工具的 agent,四步

重点全在第一步的两个 flag 上 —— 漏了它们,后面三步看着都对,agent 就是不调工具。

  1. 01

    起后端:vLLM 必须显式打开自动工具选择

    `--enable-auto-tool-choice` 在 vLLM 里是强制项,`--tool-call-parser` 则按模型族选:Llama 3.1/3.2 用 llama3_json,Llama 4 用 llama4_pythonic,Mistral 用 mistral,Qwen 家族一般走 hermes,还有个通用的 pythonic。这两个 flag 任缺其一,模型会把工具 JSON 当普通文本吐出来,LangChain 收到的就是一条纯文本消息,agent 循环永远不进工具分支。起完服务先手工打一次带工具的请求,确认 finish_reason 真的是 tool_calls,别等 agent 静默失败。

    vllm serve "Qwen/Qwen3.8-27B" --host 0.0.0.0 --port 8000 --enable-auto-tool-choice --tool-call-parser hermes --max-model-len 32768 --gpu-memory-utilization 0.90
  2. 02

    装 LangChain 1.x,把版本钉死

    钉版本不是洁癖:langchain-ollama 1.1.0 要求 langchain-core ≥ 1.2.21,deepagents 0.7.8 要求 langchain ≥ 1.3.15、langchain-core ≥ 1.6.0,而且它的 Python 下限是 3.11,比 langchain 自己的 3.10 高一档 —— 在 3.10 的镜像里装 deepagents 会直接解析失败。指向本地端点用 langchain-openai 的 OpenAI 兼容客户端就够了,base_url 填 vLLM 的 /v1,api_key 随便给个占位串。

    pip install -U "langchain==1.3.16" "langgraph==1.2.11" "langchain-openai==1.6.0"
  3. 03

    用 create_agent 组装,而不是 create_react_agent

    v1 之后 create_agent 是唯一推荐入口,接收 model、tools、system_prompt、response_format、state_schema、checkpointer、context_schema、middleware、name。要多轮记忆就挂 checkpointer,本地验证用 InMemorySaver,上生产换 Postgres 版。要结构化输出就传 response_format,但注意本地后端得支持受约束解码,否则 Pydantic 校验会随机失败 —— 这一点云端 API 帮你兜住了,自建没人兜。

    from langchain.agents import create_agent
    from langchain_openai import ChatOpenAI
    
    llm = ChatOpenAI(model="Qwen/Qwen3.8-27B", base_url="http://127.0.0.1:8000/v1", api_key="EMPTY")
    agent = create_agent(model=llm, tools=[search], system_prompt="You are a research agent.")
  4. 04

    切断外发链路,再把服务拉起来

    私有化部署的最后一道闸:LANGSMITH_TRACING 为 true 时,prompt、工具入参和返回值会随链路发往 LangSmith。要么关掉,要么把 LANGSMITH_ENDPOINT 指向你自己那套自托管实例,别默认它是关的。确认干净之后用 langgraph-cli 把服务打进 Docker 常驻,实例上开 SSH 或 Jupyter 都行,NexGPU 这两条通道加 web 终端、REST API、CLI 都是开箱可用的。

    export LANGSMITH_TRACING=false && langgraph up

一周把 LangChain agent 跑通,账是这么算的

按一个典型自建组合算:推理侧 RTX 4090 24GB 跑 gpt-oss-20b,$0.540/卡·时;检索侧 Tesla T4 16GB 跑 Qwen3-Embedding-0.6B,$0.298/卡·时,合计 $0.838/时。一个小组开发五天、每天开机 8 小时,共 40 小时:0.838 × 40 = $33.52。模型权重加语料占 40GB 存储,按中位价 $0.414/GB·月 算 40 × 0.414 = $16.56/月。把 10GB 日志和评测结果拉回本地,出网中位价 $0.0081/GB,10 × 0.0081 = $0.08。首月合计约 $50.16。同样这套配置若 7×24 常驻,720 × 0.838 = $603.36 —— 差出来的十几倍不是单价问题,是你有没有在 agent 不跑的时候把实例停掉。NexGPU 按秒计量、按小时定价,无最低消费、无开通费、不需要申请配额,实例一停算力费立刻停,只有存储会一直计到你销毁它为止。要往上跳到 gpt-oss-120b 这种照着单张 80GB 设计的模型,A100 PCIE 80GB 是 $0.824/卡·时,大约只有 H100 SXM 80GB $3.582/卡·时 的 23%。

04 —

常见问题

LangChain 本地部署到底需要多大显存?

框架本身需要 0GB。langchain 1.3.16 是跑在 CPU 上的编排代码,装完连 CUDA 都不必有。显存全部花在你自己起的后端上:gpt-oss-20b 的 MXFP4 权重官方称 16GB 内可跑,Qwen3.8-27B 的 FP8 权重约 27GB、bf16 约 54GB,Qwen3-Embedding-0.6B 的 fp16 权重约 1.2GB。先确定后端,再照着这些数字选卡 —— 在 NexGPU 上从 RTX 3090 24GB $0.193/卡·时 一路到 H200 141GB $6.660/卡·时,75 种 GPU 型号里总有一档正好卡住你的权重体积。

老项目升到 langchain 1.x 后 `from langchain.chains import LLMChain` 报 ImportError,怎么救?

不是 bug,是 v1 的命名空间收窄。旧 chains、旧 retrievers(包括 MultiQueryRetriever 和整个 langchain.retrievers 模块)、indexing API、hub 模块、以及 langchain-community 的转出口,全部搬进了 langchain-classic 1.0.8,装上它并把 import 从 langchain.chains 改成 langchain_classic.chains 就能继续跑。新代码别再往 Chain 上写,直接用 create_agent。想在动手迁移前先拿真环境试一把,NexGPU 的实例按秒计费、随开随停,改坏了销毁重来的成本就是几毛钱。

接了本地模型,bind_tools 也调了,agent 就是不触发工具调用?

九成是服务端没开自动工具选择。vLLM 里 `--enable-auto-tool-choice` 是强制项,还必须配上匹配模型族的 `--tool-call-parser`(llama3_json、llama4_pythonic、mistral、hermes、pythonic)。少了它们,模型确实按格式生成了工具 JSON,但服务端不解析,原样当文本返回,LangChain 拿到的是普通 AIMessage,循环自然不进工具分支。排查方法是绕开 LangChain 直接发一次 OpenAI 兼容请求,看 finish_reason 是不是 tool_calls。NexGPU 的 2,000+ 预置镜像里 vLLM 是现成的,起个实例十分钟就能把 parser 试对。

私有化部署会不会把 prompt 偷偷传给 LangSmith?

取决于一个环境变量。LANGSMITH_TRACING 设为 true 时,prompt、工具入参和返回值会随链路上报 LangSmith,还有 LANGSMITH_API_KEY、LANGSMITH_ENDPOINT、LANGSMITH_PROJECT 一整套配置。真要做私有化,就显式写 `LANGSMITH_TRACING=false`,或者把 LANGSMITH_ENDPOINT 指到自托管实例上,不要假设默认值是安全的。想彻底把数据留在自己边界内,NexGPU 覆盖 51 个国家和地区的 1,175 个已验证节点,你可以挑一个符合合规要求的地区把整条链路关在里面。

agent 跑到第七八轮就 CUDA OOM,是模型太大吗?

通常不是权重,是上下文。agent 每一轮都把工具返回值原样追加进 messages,一个抓网页或读文件的工具能一次塞进几千 token,十轮下来 KV cache 的占用比权重涨得还快。三个动作:把 `--max-model-len` 设成你真正需要的长度而不是模型上限,调 `--gpu-memory-utilization` 给 KV cache 留够空间,再用 LangChain 的上下文管理类 middleware 在 before_model 上做裁剪或摘要。真跑不下就换一档显存 —— NexGPU 单节点最多 14 张卡、最大节点显存 2,152GB,往上加的路是通的。

LangGraph 的 create_react_agent 还能用吗?和 create_agent 什么关系?

create_agent 就是来接替它的。官方明确 create_agent 是 LangChain 1.0 之后构建 agent 的标准方式,取代 langgraph.prebuilt 里的 create_react_agent,接口更简单,扩展点从「改函数参数」变成「挂 middleware」。LangGraph 1.2.11 依然是底下的运行时,负责状态、检查点和多 actor 编排,只是你不再直接从它的 prebuilt 里拿 agent 构造器。配套的 langgraph-cli 0.4.31 提供 `langgraph dev` 热重载和 `langgraph up` 打 Docker,在 NexGPU 实例上通过 SSH 或 web 终端直接跑,Telegram 上有中英双语支持,没有工单队列。

开始使用 NexGPU

无论你是企业研发团队还是独立开发者,都可以在几分钟内跑起第一个任务。

注册即可浏览全网实时价格,无需绑定支付方式。