第 15 期 | 终局实战:构建你的私有 AI 助手产品
副标题:综合前 14 期所学,用微调 Gemma + vLLM 后端 + Hermes Agent 前端 + Telegram 网关,搭建一个完整的、私有化部署的 AI 助手产品。
🎯 学习目标
- 掌握构建一个端到端私有化 AI 助手产品的整体架构设计。
- 学会利用 vLLM 部署 Gemma 模型,实现高效、低延迟的推理服务。
- 理解并实践 Agent 模式,为 Gemma 模型添加记忆、工具调用等高级能力。
- 能够将 AI 助手集成到 Telegram 等主流 IM 平台,提供便捷的用户交互体验。
📖 核心概念讲解
15.1 私有 AI 助手产品:终局架构概览
构建一个私有化部署的 AI 助手产品,意味着我们需要掌控从模型推理到用户交互的每一个环节。本期课程将整合之前学到的 Gemma 模型微调、部署等知识,构建一个完整的系统。其核心优势在于数据隐私、定制化能力和成本控制。
核心组件与架构图:
我们的私有 AI 助手产品将由以下四个主要组件构成,形成一个清晰的分层架构:
- 用户界面 (UI): Telegram Bot,作为用户与 AI 助手的交互入口。
- AI 助手核心 (Hermes Agent): 一个基于 FastAPI 构建的后端服务,负责处理用户请求、管理对话状态、调用外部工具,并与 LLM 推理服务通信。
- LLM 推理服务 (vLLM + Gemma): 使用 vLLM 部署我们微调过的 Gemma 模型,提供高效、并发的文本生成能力。
- 数据存储 (Memory/Tools): 用于存储对话历史和管理工具调用。
+-------------------+ +-------------------+ +-------------------+ +-------------------+
| | | | | | | |
| 用户 (User) | <---> | Telegram Bot | <---> | Hermes Agent | <---> | vLLM Inference |
| | | (Python) | | (FastAPI) | | (Gemma Model) |
| | | | | | | |
+-------------------+ +-------------------+ +-------------------+ +-------------------+
^ | ^ | ^
| | | | |
| +-------------------+ | |
| (HTTP API) | |
| | |
| +--------------------------+
| (HTTP API)
|
+-------------------------------------------------------------+
(可选:数据库/外部工具 API)
各组件职责:
- Telegram Bot: 监听用户消息,将消息转发给 Hermes Agent,并将 Hermes Agent 的回复发送给用户。
- Hermes Agent:
- 接收来自 Telegram Bot 的用户消息。
- 维护每个用户的对话历史(记忆)。
- 根据预设的 Agent 逻辑和提示词,决定是直接回复用户,还是需要调用外部工具。
- 调用 vLLM 推理服务生成回复或工具调用指令。
- 如果需要,执行外部工具(如 Web 搜索、计算器等)。
- 将最终的回复发送回 Telegram Bot。
- vLLM Inference (Gemma Model):
- 加载预训练或微调过的 Gemma 模型。
- 提供高性能的 LLM 推理 API,响应 Hermes Agent 的文本生成请求。
- 利用其优化技术(如 PagedAttention、Continuous Batching)提高吞吐量和降低延迟。
15.2 vLLM:高性能 Gemma 推理后端
vLLM 是一个用于 LLM 推理的开源库,以其卓越的性能而闻名。它通过以下关键技术显著提高了 LLM 的吞吐量和降低了延迟:
- PagedAttention: 一种内存管理算法,灵感来源于操作系统中的分页机制,用于高效管理注意力键值 (KV) 缓存,避免内存碎片化,提高 GPU 利用率。
- Continuous Batching: 动态地将新的请求添加到正在处理的批次中,而不是等待当前批次完成,从而最大化 GPU 的并行计算能力。
- 优化过的 CUDA 内核: 针对 LLM 推理任务定制的高性能 CUDA 内核。
使用 vLLM 部署 Gemma 的优势:
- 高吞吐量: 能够同时处理更多的并发请求。
- 低延迟: 快速响应每个推理请求。
- 易用性: 提供兼容 OpenAI API 的接口,方便集成。
部署步骤概览:
- 环境准备: 确保你的系统安装了 Docker 和 NVIDIA GPU 驱动 (CUDA)。
- 拉取 Gemma 模型: 从 Hugging Face Hub 下载你希望部署的 Gemma 模型权重(例如
google/gemma-2b-it或google/gemma-7b-it)。如果你有自己微调的 Gemma 模型,也可以使用。 - 启动 vLLM 服务: 使用 Docker 运行 vLLM 容器,并挂载模型权重。
15.3 Hermes Agent:智能决策与业务逻辑核心
Hermes Agent 是我们 AI 助手的“大脑”,负责所有的智能决策和业务逻辑。它将用户输入转化为模型可理解的指令,管理对话历史,并根据需要调用外部工具。
Agent 核心组件:
- LLM 接口封装: 负责与 vLLM 推理服务进行 HTTP 通信,发送提示词并解析模型输出。
- 记忆模块 (Memory): 存储与用户的多轮对话历史。在生产环境中,这通常会是一个数据库(如 Redis、PostgreSQL),但在演示中,我们可以使用内存字典。
- 工具集 (Tools): 定义 AI 助手可以执行的外部功能。每个工具都是一个 Python 函数,例如:
web_search(query): 调用搜索引擎 API。calculator(expression): 执行数学计算。database_query(sql): 查询业务数据库。
- Agent 核心逻辑 (Orchestration): 这是 Agent 的决策中心。它将:
- 接收用户消息。
- 结合对话历史和可用的工具描述,构建一个完整的提示词 (Prompt)。
- 将提示词发送给 vLLM (Gemma)。
- 解析 Gemma 的响应。响应可能是一个直接的文本回复,也可能是一个工具调用指令。
- 如果检测到工具调用指令,则执行相应的工具,并将工具的执行结果再次反馈给 Gemma,让 Gemma 生成最终的用户友好回复。
- 将最终回复返回给用户。
Agent Prompt 设计(以 Gemma 指令微调格式为例):
为了让 Gemma 能够理解并执行工具调用,我们需要精心设计 Agent 的提示词。它通常包含:
- 系统指令: 告诉 Gemma 它的角色、能力和如何进行工具调用。
- 工具描述: 详细说明每个工具的名称、功能和参数。
- 对话历史: 上下文信息,帮助 Gemma 理解当前对话的语境。
- 当前用户消息: 用户最新的输入。
示例 Prompt 结构 (Gemma Chat Format):
<bos>
<start_of_turn>user
你是一个名为 Hermes 的AI助手,能够使用以下工具:
- web_search(query: str): 用于在互联网上搜索信息。
- calculator(expression: str): 用于执行数学计算。
请根据对话和工具,决定是直接回答,还是调用工具。
如果调用工具,请使用以下格式:
<tool_code>
{{
"tool_name": "tool_function_name",
"tool_args": {{
"arg1": "value1",
"arg2": "value2"
}}
}}
</tool_code>
如果直接回答,请直接给出回答。
<end_of_turn>
<start_of_turn>model
好的,我明白了。有什么可以帮助你的吗?
<end_of_turn>
<start_of_turn>user
帮我计算 123 * 456
<end_of_turn>
<start_of_turn>model
<tool