模型推理服务人工智能后端大模型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),仅供参考
