vLLM 接入 AutoGen:把多智能体框架对接到本地 OpenAI 兼容推理后端
vLLM 接入 AutoGen把多智能体框架对接到本地 OpenAI 兼容推理后端【免费下载链接】vllmA high-throughput and memory-efficient inference and serving engine for LLMs项目地址: https://gitcode.com/GitHub_Trending/vl/vllm本文介绍如何把微软的多智能体框架 AutoGen 接入 vLLM 服务先部署一个 OpenAI 兼容的 vLLM 推理服务再用 AutoGen 的OpenAIChatCompletionClient以流式方式调用本地模型并深入解析 vLLM 侧/v1/chat/completions路由、SSE 流式响应与 API Key 鉴权的源码实现。读完后你将能够独立完成“本地 vLLM 推理 AutoGen 智能体应用”的完整部署与调用链路。一、AutoGen 与 vLLM 的对接思路AutoGen 是微软开源的多智能体multi-agentAI 应用框架用于构建可以自主行动或与人协作的智能体应用。vLLM 则提供高吞吐、内存高效的 LLM 推理与 serving 引擎。两者对接的核心桥梁是 vLLM 的OpenAI 兼容 APIvLLM 服务通过vllm serve启动后对外暴露与 OpenAI Chat Completions 接口一致的 HTTP 端点AutoGen 通过其扩展包中的OpenAIChatCompletionClient连接该端点只需将base_url指向本地 vLLM 服务即可因此无需改动 AutoGen 应用代码就能把原本指向远端 OpenAI 的调用切换到本地自托管模型。vLLM 仓库中对应的文档页为 AutoGen 集成文档本文在其基础上结合 vLLM 源码对调用链路做纵深展开。二、环境准备在开始部署前先准备 vLLM 与 AutoGen 的 Python 环境文档中注明 AutoGen 要求Python 3.10 或更高版本pip install vllm # Install AgentChat and OpenAI client from Extensions # AutoGen requires Python 3.10 or later. pip install -U autogen-agentchat autogen-ext[openai]两条安装命令分别对应两类依赖vllm服务端推理引擎提供vllm serve命令与 OpenAI 兼容的 HTTP APIautogen-agentchatAutoGen 的 AgentChat 高层智能体 API本文示例直接使用其底层的模型客户端autogen-ext[openai]AutoGen 扩展包中的 OpenAI 模型客户端实现OpenAIChatCompletionClient即来自该包。只要服务端行为符合 OpenAI Chat Completions 协议base_url指向 vLLM 即可复用。三、启动 vLLM 的 OpenAI 兼容服务第一步是启动一个支持 Chat Completion 的 vLLM 服务例如vllm serve mistralai/Mistral-7B-Instruct-v0.23.1 vLLM 侧的/v1/chat/completions端点从源码看AutoGen 最终请求的端点由 chat_completion 路由 注册router.post( /v1/chat/completions, dependencies[Depends(validate_json_request)], ... ) with_cancellation load_aware_call async def create_chat_completion(request: ChatCompletionRequest, raw_request: Request): ...该处理器根据请求返回两种形态的响应见 api_router.py非流式直接返回ChatCompletionResponse的 JSON流式stream: true返回StreamingResponse媒体类型为text/event-stream即标准 SSEServer-Sent Events。流式响应在 OpenAIServingChat 中以逐条yield生成每个增量 token 包装为一帧data: {json}\n\n流结束时以data: [DONE]\n\n作为终止标记。这正是 OpenAI 客户端库包括 AutoGen 的OpenAIChatCompletionClient所依赖的协议格式。3.2 为什么示例中api_keyEMPTY就能通过文档示例里客户端传入api_keyEMPTY这背后有明确的源码依据vLLM 的 CLI 入口 vllm/entrypoints/cli/openai.py 中api_key参数若未显式给出则回退到环境变量OPENAI_API_KEY其默认值就是EMPTY鉴权由纯 ASGI 中间件 AuthenticationMiddleware 实现它检查Authorization: Bearer token头并将 token 的 SHA-256 摘要与配置中的 API Key 做secrets.compare_digest安全比较关键在于中间件的注册逻辑 register.py仅当从--api-key参数或VLLM_API_KEY环境变量中解析出非空token 时才会启用鉴权。默认启动方式下没有配置任何 API Key中间件不生效因此客户端携带什么 key哪怕是EMPTY都能访问若你在启动时配置了--api-key或VLLM_API_KEY则GUARDED_PREFIX/v1、/v2、/inference、/cohere前缀下的所有请求都必须携带匹配的 Bearer token否则返回 401见 authenticate.py。此时 AutoGen 客户端的api_key字段必须改为与之一致的真实密钥。3.3 服务端口与 base_url 约定vllm serve默认监听8000端口。客户端连接地址遵循 OpenAI SDK 的惯例base_url以/v1结尾客户端会在其后追加具体路径如/chat/completions。单机本地调用时形如http://127.0.0.1:8000/v1跨机器部署时替换为 vLLM 所在主机 IP 与端口即可。四、用 AutoGen 流式调用 vLLM下面是文档给出的完整调用示例通过OpenAIChatCompletionClient创建消息流并逐帧打印import asyncio from autogen_core.models import UserMessage from autogen_ext.models.openai import OpenAIChatCompletionClient from autogen_core.models import ModelFamily async def main() - None: # Create a model client model_client OpenAIChatCompletionClient( modelmistralai/Mistral-7B-Instruct-v0.2, base_urlhttp://{your-vllm-host-ip}:{your-vllm-host-port}/v1, api_keyEMPTY, model_info{ vision: False, function_calling: False, json_output: False, family: ModelFamily.MISTRAL, structured_output: True, }, ) messages [UserMessage(contentWrite a very short story about a dragon., sourceuser)] # Create a stream. stream model_client.create_stream(messagesmessages) # Iterate over the stream and print the responses. print(Streamed responses:) async for response in stream: if isinstance(response, str): # A partial response is a string. print(response, flushTrue, end) else: # The last response is a CreateResult object with the complete message. print(\n\n------------\n) print(The complete response:, flushTrue) print(response.content, flushTrue) # Close the client when done. await model_client.close() asyncio.run(main())使用时把{your-vllm-host-ip}和{your-vllm-host-port}替换为实际服务地址例如http://127.0.0.1:8000/v1。4.1 关键参数逐项解析model与vllm serve启动时使用的模型标识保持一致本例为mistralai/Mistral-7B-Instruct-v0.2。vLLM 会对请求中的模型名做校验不匹配会收到错误响应。model_info这是 AutoGen 侧对模型能力边界的声明会直接影响 AutoGen 后续的智能体行为例如是否尝试发送图片、是否注入函数调用指令。本例各字段含义vision: False该模型不支持视觉输入AutoGen 不会尝试构造多模态消息function_calling: False不使用模型原生函数调用协议json_output: False不启用响应式 JSON 输出模式family: ModelFamily.MISTRAL声明模型家族AutoGen 会据此适配提示词与消息模板structured_output: True允许 AutoGen 在该模型上使用结构化输出的高级特性vLLM 的 Chat Completions 接口支持guided_json等约束解码参数。api_key如 3.2 节所述默认无鉴权的本地服务传任意占位值约定俗成为EMPTY即可生产环境配置了密钥时请传入真实值。4.2 流式响应的语义create_stream返回一个异步迭代器其元素类型遵循 AutoGen 的约定中间帧为str每一帧对应 vLLM 侧一帧 SSEdata: {...}中增量 token 文本可直接逐字打印实现“打字机”效果末帧为CreateResult对象包含完整消息内容response.content等元数据。这与 vLLM 服务端流以data: [DONE]\n\n结束的行为相对应见 serving.py客户端解析到 DONE 标记后把累积结果封装为CreateResult交付给迭代器。注意示例末尾的await model_client.close()模型客户端持有 HTTP 连接资源任务结束时显式关闭是良好的卫生习惯。五、从单点调用到多智能体应用本文示例演示的是最底层的模型客户端调用它也是 AutoGen 上层 AgentChat 能力的基石。基于同一model_client你还可以把该客户端传给 AgentChat 的智能体类型构建“用户 ↔ 助手”对话代理或代理间协作handoff/group chat应用更换vllm serve启动的模型后同步修改model与model_info例如启用工具调用能力时置function_calling: True对并发压测场景vLLM 服务端的连续批处理continuous batching天然支持多请求并发多个 AutoGen 智能体可以同时共享同一 vLLM 端点。以上扩展均基于 OpenAI 兼容接口这一层不依赖 AutoGen 特定版本细节具体 API 签名请以你安装的autogen-ext版本的参考文档为准。六、小结环节命令 / 代码依据安装依赖pip install vllmpip install -U autogen-agentchat autogen-ext[openai]Python ≥ 3.10autogen.md启动服务vllm serve mistralai/Mistral-7B-Instruct-v0.2同上服务端点POST /v1/chat/completions支持 SSE 流式api_router.py流式结束标记data: [DONE]\n\nserving.py鉴权行为默认未配置 API Key 时不启用鉴权api_keyEMPTY可用authenticate.py、register.py客户端调用OpenAIChatCompletionClient(base_url.../v1, ...)流式迭代autogen.mdvLLM 通过 OpenAI 兼容 API 成为 AutoGen 的本地推理后端后多智能体应用的模型层即可完全私有化部署协议对齐路由、SSE、DONE 标记、鉴权语义Bearer token 中间件都有清晰的源码实现可查遇到问题时可按上表快速定位到服务端或客户端一侧。延伸阅读仓库内路径集成文档docs/deployment/frameworks/autogen.mdOpenAI 兼容 API 实现vllm/entrypoints/openai/同目录下的其他框架集成文档可参考 docs/deployment/frameworks/【免费下载链接】vllmA high-throughput and memory-efficient inference and serving engine for LLMs项目地址: https://gitcode.com/GitHub_Trending/vl/vllm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

最新新闻

日新闻

周新闻

月新闻