Python实现注意事项
16. Python 实现注意事项1. 实现原则目标不是逐字复刻原实现,而是用 Python 重建同样的产品能力结构。 2. 模块建议建议 Python 项目按以下模块拆: runtime/:query loop, orchestration messages/:message schemas tools/:tool registry and execution permissions/:permission engine memory/:memory loading and retrieval tasks/:background task model storage/:transcript and session persistence agents/:agent definitions extensions/:skills/plugins/mcp verification/:verification runner 3. 推荐先用的数据模型优先用: pydantic / dataclasses 定义消息与状态 sqlite 或 JSONL 先...
MCP 解决什么问题
MCP 解决什么问题在 Agent 系统中,让Agent做出重要的决定的一个关键点是构造好的 /chat/completions 请求参数,参数中: messages 参数:给出对话历史,历史中包含的背景信息质量越高,给出的答案就会更准确; tools 参数:给出模型可用的工具,用于获取动态信息或执行某些动作。 这两个参数都可以认为是我们给模型的上下文信息。(context) message 的内容和问题messages 是一个数组,数组中的 content 的值是 user 给出的信息,或者其他角色的历史输出信息。如果是 user 给出的信息,则一般的做法是用一个 prompt template来组织基本的 prompt 结构,并将一些动态的信息通过其他方式检索到,补充道 prompt template中的占位符,从而形成最终输入模型的 prompt。 要得到最好的解,不同的问题需要不同的 prompt template。这是一个难点 tools 的内容和问题/chat/completions 接受的 tool 是有一定的 schema 规定,而一般的工具(如RESTful...
MCP 三大核心概念
MCP 三大核心概念MCP(Model Context Protocol)的三大核心概念——Resources、Tools 和 Prompts。MCP 是 2024 年底由 Anthropic 搞出来的一个开放协议,目的是让大语言模型(LLM)能更顺畅地跟外部数据和工具对接。以下是我的解读: 1. Resources(资源)本质:Resources 是 MCP 里用来暴露数据的核心机制,相当于给 LLM 提供“原材料”。你可以把它想象成一个只读的数据库接口或者文件系统,里面装的是静态或者半动态的信息,比如日志文件、用户配置文件、股票价格啥的。 怎么用:服务器(MCP Server)把这些数据暴露出来,客户端(比如 LLM 应用)可以读取它们,然后塞进模型的上下文里去推理或者生成内容。比如你有个日志文件 app.log,通过 Resources 就能让 LLM 直接看到里面的错误信息。 特点: • 应用控制:客户端决定啥时候用、怎么用这些资源。有的客户端像 Claude Desktop 得用户手动选,有的可能自动挑,灵活得很。 • 实时性:支持订阅更新,比如资源变了,服务器能通知...
Agent运行时主循环规格
08. Agent 运行时主循环规格 目标:定义 Python 版本实现时最核心的运行时循环。该文档不是源码解释,而是实现规格。 1. 设计目标主循环必须满足以下目标: 能持续推进任务,而不是只做一次回答 能在每轮后根据工具结果重新决策 能在权限阻断、上下文压缩、工具失败时继续可控运行 能触发子 agent、后台任务、验证任务 能生成可追踪的消息流与 transcript 2. 主循环的输入一次主循环至少需要以下输入: messages: 当前消息序列 system_prompt: 已组装完成的系统提示词 tool_registry: 当前可用工具集合 tool_use_context: 执行上下文(cwd、权限、session、任务状态) memory_context: 注入后的记忆内容 user_context: 用户态上下文 system_context: 系统态上下文 can_use_tool: 权限判断函数 max_turns: 最大回合数 task_budget: 本轮任务预算(可选) 3. 主循环的输出主循环每轮可能产出: 普通 assistant 消息...
线性代数基本概念
线性代数基本概念 特征值和特征向量 值域空间 零空间 行空间与列空间 正交补 基 标准正交基 奇异值分解 Matrix Norm (矩阵范数) Frobenius Norm (弗罗贝尼乌斯范数) 奇异值分解在统计中的主要应用为主成分分析(PCA)。数据集的特征值(在 SVD 中用奇异值表征)按照重要性排列,降维的过程就是舍弃不重要的特征向量的过程,而剩下的特征向量张成空间为降维后的空间。
深入解析Python包调用原理与最佳实践
深入解析 Python 包调用原理与最佳实践[toc] 一、引言写下这篇文章的起因,是最近我在参与 vLLM 项目的开发过程中,发现其中使用了一种动态加载对象的方式值得学习,并由此想对 Python 语言加载依赖的方式做一个研究和总结。本文将通过实验的方式,对 Python import 的原理以及不同 import 方式的区别进行介绍,并针对具体开发过程中可能会遇到的一些问题,分享一些最佳实践的解决方案。 二、什么是 Python 的包?Python 中的模块、包以及库有什么区别? 一种简单且直观的理解: 模块(module):任何 .py 文件都可以作为一个“模块”(除了 .py 文件之外,模块还可以有其它形式); 包(package):任何包含了一个 __init__.py 文件的文件夹都是一个“包”,一个包里可以包含其它的包和模块; 库(library):“库”更多地是一种编程上的概念,表示可重复利用的代码。 关于这个问题,更深入的分析和讲解可以参考知乎上“风影忍者”和“看图学”的这两个回答,这里不再深入进行介绍。 三、深入解析 Python import 原理下...
昇腾empty_cache原理
这是个非常好的观察,而且你没有看错 👍在 vLLM-Ascend(NPU) 上,torch.npu.empty_cache() 确实可能导致 non-torch 显存下降,这和 CUDA 的行为本质不同。 下面我分「结论 → 原因 → 机制细节 → vLLM 场景」把这件事讲清楚。 一句话结论(先给你) 在 Ascend / torch-npu 上:torch.npu.empty_cache() 不仅仅是 PyTorch cache 操作,它会间接触发 Ascend Runtime / ACL 的内存回收路径,从而 释放部分 non-torch(runtime / kernel / workspace)显存。 这在 CUDA 上几乎不会发生,但在 Ascend 上是“设计如此”。 1️⃣ 为什么 CUDA 上不行,Ascend 上却行?CUDA(torch.cuda.empty_cache) 只操作 PyTorch CUDACachingAllocator 不会触发: CUDA Runtime 内部 pool cuBLAS ...
推理显存计算
推理显存计算推理所需显存 = 模型参数部分 + 激活参数部分 + KVCache 部分 模型参数部分 = 模型参数量 × 精度系数 激活参数部分 = 激活参数量 × 精度系数 KVCache 部分 = 并发数 ×(输入 Token 数 + 输出 Token 数)× 2(K 和 V)× 层数 × hidden_size × 精度系数 参考资料:模型显存计算逻辑
推理引擎
推理引擎推理系统与推理引擎训练和推理服务推理和训练的区别: 模型部署后,长期运行; 不需要反向传播; 部署设备更加多样。 推理服务系统的功能(与 AI 算法关系不大,更多地是平台性的工作): 模型加载; 版本管理; 数据管理; 服务接口。 优化目标 低延迟; 高吞吐:高负载; 高效率:低功耗使用 CPU/GPU; 灵活性:支持多框架; 扩展性。 部署态场景:数据中心的服务端、边缘侧的移动端。 云端; 边侧:严格约束功耗、算力不足、数据分散、平台多样化。 推理系统架构推理服务化、推理服务框架。 基本概念: 推理:前向计算; 部署:将模型部署到硬件上,包括:移植、压缩、加速等; 服务化:将模型封装为 sdk 或 web 服务。 Triton 服务化框架: 接入层:HTTP、gRPC、CAPI; 模型仓库; 模型预编排:解析 URL 请求; 框架后端:指推理引擎(如 TensorRT、ONNX Runtime、MindSpore Lite 等); 监控功能:健康管理。 模型版本管理模型生命周期管理: 金丝雀策略(Canary); 回滚策略(Rollba...
推理加速
推理加速模型量化数值类型LLM 的训练和推理要尽量使用 BF16,而不是 FP16/HF16/FP32。 FP32:单精度浮点数,用 8 bit 表示指数,23 bit 表示小数; FP16:半精度浮点数,用 5 bit 表示指数,10 bit 表示小数; BF16:对 FP32 单精度浮点数截断数据(小数部分),即用 8 bit 表示指数,7 bit 表示小数。 这里的计算方式不太懂? BF16 vs HF16: BF16 拥有 7 位精度,而 HF16 拥有 10 位精度。这表明在表示接近于 1 的小数值时,HF16 比 BF16 能提供更高的精度。然而,BF16 拥有与 FP32 相同的 8 位指数部分,因而能够表示与 FP32 几乎一样广泛的数值范围,这对于避免上溢和下溢非常重要。尽管 BF16 在尾数精度上不如 HF16,但在深度学习应用中,这种较宽的数值范围通常比尾数的额外几位精度更为重要。这是因为深度学习模型通常对权重的尾数精度不是非常敏感,而更依赖于能够处理范围广泛的梯度和权重值。 总结: 量化后速度并不能明显提高,但占用的显存显著减...