模型推理服务人工智能后端大模型MLOpsLLMOps【免费下载链接】BentoMLThe easiest way to serve AI apps and models - Build Model Inference APIs, Job queues, LLM apps, Multi-model pipelines, and more!项目地址https://gitcode.com/gh_mirrors/be/BentoML点击查看免费下载本教程完整讲解如何将 LangGraph Agent 应用接入 BentoML 进行生产级服务化部署。文中以 langgraph.rst 中的示例为主线详细说明 LLM Service 与 SearchAgentService 的组合方式、bentoml.depends()服务编排、bentoml.task异步任务与流式 API 的实现并给出 BentoCloud 一键部署和本地bentoml serve的完整命令。读完本文你将掌握用 BentoML 包装 LangGraph 多步骤 Agent 工作流的完整实战方案。示例概览一个会调用搜索引擎的 LangGraph AgentLangGraph 是构建有状态、多参与者 LLM 应用的开源库允许开发者通过定义多样化的控制流来构建 Agent 与多 Agent 工作流。本示例演示如何用 BentoML 服务化一个 LangGraph Agent当 LLM 自身缺乏必要知识时Agent 会调用 DuckDuckGo 检索最新信息。向服务提交如下查询{ query: Who won the gold medal at the mens 100 metres event at the 2024 Summer Olympic? }示例输出Noah Lyles (USA) won the gold medal at the mens 100 metres event at the 2024 Summer Olympic Games. He won by five-thousands of a second over Jamaicas Kishane Thompson.该示例可直接在 BentoCloud 上部署和扩展既可以使用外部 LLM API也可以将开源 LLM 与 LangGraph Agent 一起部署。通过一条命令即可获得生产级应用包括快速自动扩缩容、在你自己的云环境中安全部署以及全面的可观测性。架构BentoML Service LLM 双组件整个项目由两个主要组件构成一个将 LangGraph Agent 以 REST API 形式暴露的 BentoML Service以及一个负责生成文本的 LLM。LLM 既可以是外部 API如 Claude 3.5 Sonnet也可以是通过 BentoML 服务的开源模型本示例使用 Ministral-8B-Instruct-2410。用户提交查询后请求经过 LangGraph Agent 处理其中包含两类核心节点agent节点使用 LLM 理解查询并决定下一步动作tools节点按需调用外部工具。本示例中当 LLM 需要额外信息时tools节点会调用 DuckDuckGo 搜索互联网获取数据DuckDuckGo 再将搜索结果返回给 Agent由 Agent 汇总信息并向用户交付最终响应。两个子项目不同 LLM 的相同逻辑示例仓库包含两个子项目演示不同 LLM 的接入方式langgraph-anthropic使用 Claude 3.5 Sonnet外部 APIlanggraph-mistral使用 Ministral-8B-Instruct-2410开源模型通过 BentoML 自托管。两个子项目实现 LangGraph Agent 的逻辑完全一致下文以langgraph-mistral为例讲解关键代码。service.py 逐段拆解从 LLM 到 LangGraph 工作流1. 定义 LLM Service以 vLLM 为后端的 OpenAI 兼容服务service.py定义了一个 BentoML ServiceLLM负责服务 Ministral-8B-Instruct-2410 模型。可通过修改model值切换其他模型ENGINE_CONFIG { model: mistralai/Ministral-8B-Instruct-2410, tokenizer_mode: mistral, max_model_len: 4096, enable_prefix_caching: False, } bentoml.service class LLM: model_id ENGINE_CONFIG[model] ...LLM提供 OpenAI 兼容 API推理后端为 vLLM。它是一个被依赖的 BentoML Service供 LangGraph Agent 调用。vLLM 方案在 vllm.rst 中有更详细的讲解其核心模式是通过HuggingFaceModel高效加载模型并用__command__启动vllm serve内置 HTTP 服务器从而直接暴露 OpenAI 兼容端点。2. 定义 SearchAgentService包装 LangGraph Agent 的门面服务创建另一个 ServiceSearchAgentService来包装 LangGraph Agent可通过装饰器可选配置workers、resources、traffic等参数对应配置文档见 configurations.rstbentoml.service( workers2, resources{ cpu: 2000m }, traffic{ concurrency: 16, external_queue: True } ) class SearchAgentService: ...在 BentoCloud 上部署时官方建议设置concurrency并启用external_queue。concurrency表示 Service 同一时刻能处理的请求数启用external_queue后如果应用同时收到超过 16 个请求多余的请求会被放入外部队列待当前请求完成后继续处理从而在不丢弃请求的前提下平稳应对流量高峰。3. 定义运行时环境用 Bento 统一打包分发定义 Bento 的运行时环境。Bento 是 BentoML 的统一分发格式打包了全部源码、Python 依赖、模型引用与环境配置便于在不同环境中一致部署。示例my_image bentoml.images.Image(python_version3.11, lock_python_packagesFalse) \ .requirements_file(requirements.txt) bentoml.service( imagemy_image, # Apply the specifications envs[{name: HF_TOKEN}], ... ) class SearchAgentService: ...这里通过bentoml.images.Image指定 Python 3.11 与依赖文件并通过envs声明所需的环境变量名如HF_TOKEN运行时由平台注入对应值。4. 服务编排用 bentoml.depends() 注入 LLM Service使用bentoml.depends()调用LLMService使SearchAgentService能使用其全部能力例如调用它的 OpenAI 兼容 API 端点from langchain_openai import ChatOpenAI ... class SearchAgentService: # Call the LLM Service llm_service bentoml.depends(LLM) def __init__(self): tools [search] self.tools ToolNode(tools) self.model ChatOpenAI( modelLLM.inner.model_id, openai_api_keyN/A, openai_api_basef{self.llm_service.client_url}/v1, temperature0, verboseTrue, http_clientself.llm_service.to_sync.client, ).bind_tools(tools) # Logic to create LangGraph graph and add nodes edges ...bentoml.depends()是 BentoML 的服务依赖注入机制其实现位于 src/_bentoml_sdk/service/dependency.py当传入on一个bentoml.service装饰的类时会构造Dependency描述符作为类属性访问时__get__触发get()解析——被依赖的 Service 在同一进程内被直接实例化self.on()或者例如映射到远程 runner 时解析为RemoteProxy。Dependency.get()也支持url、deployment、cluster三种远程依赖方式。RemoteProxy的实现位于 src/_bentoml_impl/client/proxy.py它会基于被依赖 Service 的地址同时构造同步与异步 HTTP 客户端并提供to_sync/to_async属性与client_url属性返回客户端 base URL。这正是示例代码中self.llm_service.client_url与self.llm_service.to_sync.client的来源——用它构造ChatOpenAI客户端即可与提供 OpenAI 兼容端点的LLMService 交互。注入后用langchain_openai的ChatOpenAIAPI 配置交互接口然后定义使用该模型的 LangGraph 工作流Agent 调用该模型用节点nodes与边edges构建流程将 LLM 输出与系统其余部分连接起来。5. 异步任务端点用 bentoml.task 承载长耗时工作流定义一个bentoml.task端点invoke以异步方式处理 LangGraph 工作流。这是一个支持长时间运行的后台任务确保涉及外部工具的多步骤 LangGraph 工作流不会超时# Define a task endpoint bentoml.task async def invoke( self, input_query: str What is the weather in San Francisco today?, ) - str: try: # Invoke the LangGraph agent workflow asynchronously final_state await self.app.ainvoke({messages: [HumanMessage(contentinput_query)]}) # Return the final message from the workflow return final_state[messages][-1].content # Handle errors that may occur during model invocation except OpenAIError as e: logger.error(fAn error occurred: {e}) logger.error(traceback.format_exc()) return Im sorry, but I encountered an error while processing your request. Please try again later.官方明确建议为该 LangGraph Agent 应用使用任务端点LangGraph Agent 常涉及多步骤工作流包括查询 LLM 与调用外部工具耗时可能超过典型 HTTP 请求周期。若同步处理应用在高流量下可能遭遇请求超时。BentoML 任务端点通过把长任务卸载到后台解决这一问题——提交查询后可以稍后回来取结果确保推理过程不超时。任务端点的完整机制见 async-task-queues.rst任务提交后立即返回唯一 ID并提供POST /submit、GET /status、GET /get、POST /cancel、PUT /retry等自动生成端点任务结果默认保留 24 小时。6. 流式 API用 bentoml.api astream_events 实时推送中间结果可选地添加流式 API 实时返回中间结果。用bentoml.api将stream函数变为 API 端点并调用astream_events流式输出 LangGraph Agent 生成的事件bentoml.api async def stream( self, input_query: str What is the weather in San Francisco today?, ) - typing.AsyncGenerator[str, None]: # Loop through the events generated by the LangGraph workflow async for event in self.app.astream_events({messages: [HumanMessage(contentinput_query)]}, versionv2): yield str(event) \nbentoml.api与bentoml.task装饰器的定义见 src/_bentoml_sdk/decorators.py二者都生成可被 HTTP 客户端调用的 API 方法区别在于 task 语义下的请求进入任务队列异步执行。实战部署到 BentoCloudBentoCloud 提供用 BentoML 在云端构建与扩展 AI 应用的快速可扩展基础设施。1. 安装与登录pip install bentoml bentoml cloud login如果还没有 BentoCloud 账号可免费注册。API Token 的管理方式见 manage-api-tokens.rst。2. 克隆仓库并部署克隆仓库选择要部署的子项目。官方推荐创建 BentoCloud secret 来存放所需环境变量secret 的创建与使用见 manage-secrets-and-env-vars.rstgit clone https://github.com/bentoml/BentoLangGraph.git # Use Ministral-8B-Instruct-2410 cd BentoLangGraph/langgraph-mistral bentoml secret create huggingface HF_TOKEN$HF_TOKEN bentoml deploy --secret huggingface # Use Claude 3.5 Sonnet cd BentoLangGraph/langgraph-anthropic bentoml secret create anthropic ANTHROPIC_API_KEY$ANTHROPIC_API_KEY bentoml deploy --secret anthropic3. 调用部署后的端点部署运行后可通过以下方式调用BentoCloud PlaygroundPython 客户端import bentoml with bentoml.SyncHTTPClient(your_deployment_endpoint_url) as client: result client.invoke( input_queryWho won the gold medal at the mens 100 metres event at the 2024 Summer Olympic?, ) print(result)CURLcurl -s -X POST \ https://your_deployment_endpoint_url/invoke \ -H Content-Type: application/json \ -d { input_query: Who won the gold medal at the mens 100 metres event at the 2024 Summer Olympic? }4. 配置副本范围与自动扩缩容部署时用--scaling-min/--scaling-max让 Deployment 在指定副本范围内自动扩缩容bentoml deploy --secret huggingface --scaling-min 0 --scaling-max 3 # Set your desired count若已部署可更新其允许的副本数bentoml deployment update deployment-name --scaling-min 0 --scaling-max 3 # Set your desired count并发与自动扩缩容的完整配置说明见 autoscaling.rst。实战本地运行与测试BentoML 支持在本地运行和测试代码以便用本地计算资源快速验证。1. 克隆仓库并选择项目git clone https://github.com/bentoml/BentoLangGraph.git # Recommend Python 3.11 # Use Ministral-8B-Instruct-2410 cd BentoLangGraph/langgraph-mistral pip install -r requirements.txt export HF_TOKENyour-hf-token # Use Claude 3.5 Sonnet cd BentoLangGraph/langgraph-anthropic pip install -r requirements.txt export ANTHROPIC_API_KEYyour-anthropic-api-key2. 本地启动服务bentoml serve注意本地运行 Ministral-8B-Instruct-2410 需要至少 16G 显存的 NVIDIA GPU。3. 访问 API访问http://localhost:3000或向其发送 API 请求。在自己的基础设施中部署如需在自己的基础设施中自定义部署可用 BentoML 生成 OCI 兼容镜像方法见 packaging-for-deployment.rst。小结本文围绕 LangGraph Agent 的 BentoML 服务化展开LLMService 提供 OpenAI 兼容的 vLLM 推理端点SearchAgentService通过bentoml.depends()编排依赖、以bentoml.task承载长耗时多步骤工作流、以bentoml.api提供流式输出并通过 Bento 统一打包运行时环境。无论选择 BentoCloud 一键部署还是本地bentoml serve快速验证这套组合都让 LangGraph Agent 从原型走向生产成为可能。更多示例可参考 examples 目录 中的其他教程。赞分享模型推理服务人工智能后端大模型MLOpsLLMOps【免费下载链接】BentoMLThe easiest way to serve AI apps and models - Build Model Inference APIs, Job queues, LLM apps, Multi-model pipelines, and more!项目地址https://gitcode.com/gh_mirrors/be/BentoML点击查看免费下载相关推荐ZenML 编排 LangGraph ReAct Agent从本地管道到实时 HTTP 部署ZenML 编排 LangGraph ReAct Agent从本地管道到实时 HTTP 部署 本指南基于 ZenML 官方示例 examples/agent_MLOps机器学习后端工作流自动化AI AgentWasp 应用自托管部署实战从架构设计到服务器落地Wasp 应用自托管部署实战从架构设计到服务器落地 本指南基于 Wasp 官方文档 self hosted.md https://link.gitcode.cWeb框架后端前端CLI开发工具用 ZenML 编排 OpenAI Agents SDK从结构化 Agent 执行到实时 HTTP 服务部署用 ZenML 编排 OpenAI Agents SDK从结构化 Agent 执行到实时 HTTP 服务部署 本文基于 ZenML 开源仓库中的 OpenAIMLOps机器学习后端工作流自动化AI Agent上一篇如何用Apache Doris构建实时用户画像与精准营销系统下一篇Apache Doris Helm ChartKubernetes部署创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
QQ登录测试实战:OAuth链路拆解与接口自动化全流程 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 3:14:20
PX4 固定翼高度模式(Altitude Mode)完全指南:杆量控制、高度保持与空速稳定原理解析 嵌入式物联网机器人自动驾驶智能硬件 【免费下载链接】PX4-Autopilot PX4 Autopilot Software 项目地址: https://gitcode.com/gh_mirrors/px/PX4-Autopilot 点击查看 免费下载 本篇技术指南以 PX4-Autopilot 仓库中的 固定翼高度模式官方文档 为主体,结… · 2026/9/25 3:14:14
Playnite 使用指南:三步把多平台游戏和模拟器合并进一个库 Playnite 使用指南:三步把多平台游戏和模拟器合并进一个库 【免费下载链接】Playnite Video game library manager with support for wide range of 3rd party libraries and game emulation support, providing one unified interface for your games. 项目地址:… · 2026/9/25 3:45:51
基于Python的自闭症儿童教育资源分配与个性化教学计划系统 做这个系统的念头,最早是我在和一些特殊教育机构的老师聊天时产生的。他们日常面临一个很现实的问题:手里可能有几百条教育资源,但面对每一个特质完全不同的孩子时,根本没法快速判断该给孩子用什么材料、定什么教学计划。有的老师… · 2026/9/25 3:45:51
M3U8下载器全解析:从索引解析到分片合并的完整指南 1. 为什么M3U8下载这件事值得单独拿出来讲如果你平时有收藏在线视频的习惯,大概率遇到过这种情况:打开开发者工具,发现视频请求返回的不是一个完整的MP4文件,而是一个后缀为.m3u8的文本清单,里面密密麻麻列着几百上千个… · 2026/9/25 3:45:45
GEO全场景智能生态:全栈隐私计算与绿色低碳规模化落地实践 GEO这个缩写,去年在圈内还属于小范围讨论的概念,今年已经高频出现在各类招标书和企业战略PPT里。从热搜词的密集程度就能感受到风向的变化:GEO优化、GEO服务商、GEO投毒攻击、GEO数据结构、GEO招标项目……说明大量企业已经越过“要不要做GEO… · 2026/9/25 3:45:38
基于Spring Boot的美食推荐系统实战:协同过滤与部署全解析 民以食为天,但"吃什么"这个问题,每天都要消耗大量决策时间。2023年我做了一个基于Spring Boot的美食推荐系统,初衷很简单:不想再让用户面对几百道菜翻来翻去无从下手,而是根据每个人的口味偏好、历史行为&am… · 2026/9/25 3:45:38
基于SVM的降水量预测模型实战:SVR回归、特征构造与调参要点 简介:一套基于支持向量机(SVM)的降水量预测模型代码包,面向机器学习、人工智能及数据挖掘方向的初学者和研究人员,可用于算法复现、实验对比和毕业设计参考。资源内共 54 个文件,以 26 个 .m 主程序为核心&… · 2026/9/25 3:45:38
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37