Tech

技术

技术笔记与教程,从 Runtime 到 Agent 相关的实践记录。

2026-09-25·技术·24 分钟

如何实现一个 Jev-like API

业务方提交工单和候选组,服务直接返回 network、device、software 的分数与选择结果,不用处理 token 或解析模型文字。用基础语言模型和 vLLM 自建这样一个类型化决策接口,重点是请求如何变成候选分数,以及单 token、多 token 两条路径如何统一起来。

2026-09-19·技术·合集·12 分钟

第七篇:让销售助手学会入库和出库

工具从一个增加到三个:新增 add_inventory 和 remove_inventory 之后,调用代码要不要跟着增加新的判断分支?答案是一份用工具名称对应函数的注册表——这也是程序第一次拥有能修改数据的工具。

2026-09-18·技术·合集·13 分钟

第六篇:查不到商品时,模型会不会编一个数字

工具明确返回“没有查到”时,模型是会诚实说明没有数据,还是编一个看起来合理的库存数字?先确认程序能把 None 正确传给模型,再用真实调用观察模型实际怎样回答。

2026-09-17·技术·合集·15 分钟

第五篇:模型提出调用,程序执行工具

上一篇只给模型准备了工具说明书;这一篇第一次走完调用全过程——模型看到 Schema、提出调用请求、程序执行函数、把真实结果送回,模型再据此生成最终回答。

2026-09-16·技术·合集·15 分钟

第四篇:先给模型一份查库存的说明书

把'查库存'拆成两件事:一个真正能查到数据的 Python 函数,和一份模型能读懂的 Tool Schema。函数负责做事,Schema 负责让模型描述它想做什么——本篇只把这两块准备好,还不让模型真正发起调用。

2026-09-15·技术·合集·18 分钟

第三篇:一次回答到底花了多少时间和钱

让 chat() 从只返回一句文本,变成返回一张记录 token、延迟和估算成本的最小收据——先有单次调用的数据,才可能有后续的可观测性。

2026-09-14·技术·合集·19 分钟

第二篇:模型调用失败时,程序应该看见什么

真实触发认证、网络和请求这三类失败,观察 SDK 实际抛出的异常,再把它们翻译成一组稳定、可采取行动的应用层错误类型——失败分类不是为了报错更整齐,而是为了让程序知道接下来能做什么。

2026-09-13·技术·合集·18 分钟

第一篇:先让程序和模型说上第一句话

在加入工具、记忆或运行循环之前,先只做一件事:让一段 Python 程序把一句话交给模型,再把模型的回答取回来——看清一次最小的 Chat Completion 里,请求边界和模型能力边界分别在哪里。

2026-09-13·技术·合集·12 分钟

Agent From Zero:从一次模型调用到可靠 Agent

不先搬出一套框架,而是从一次最小的模型调用出发,亲手搭建一个库存与报价 Agent,再一步步加入工具、运行循环、校验、恢复、记忆、评估和可观测性,看清一个只会生成文本的模型怎样成长为可靠的 Agent。

2026-08-27·技术·合集·7 分钟

第六篇:把所有机制重新拼回一个完整场景

前面一路建立起来的容器、Plugin、Effect、Event、依赖生命周期、失败隔离和 Child Context,放在一起以后到底能不能支撑一个像 HelloCordis 那样的真实小场景。

2026-08-27·技术·合集·8 分钟

第五篇:失败隔离与 Child Context

当 Runtime 进入更真实的运行环境以后,为什么仅仅有安装、撤销、事件和依赖系统还不够——一个 Plugin 出错为什么不能拖垮整个系统,以及为什么最终需要的不是一个 Context,而是一棵可以继承与隔离的 Context 树。

2026-08-27·技术·合集·7 分钟

第四篇:从一次性依赖检查到响应式依赖生命周期

当一个 Plugin 依赖的能力可能在运行过程中出现、消失和恢复时,Runtime 应该如何持续维护它的激活状态——从一次性的 require 检查,走到能长期追踪依赖关系的 inject。

2026-08-27·技术·合集·7 分钟

第三篇:为什么 Event Listener 本身也是一种 Runtime Effect

当两个 Plugin 不应该直接互相认识,但其中一个又需要感知另一个做了什么时,Runtime 该怎么组织它们——Event 不是外挂的子系统,而是可以直接复用 effect 和 scope 机制的一种特殊情况。

2026-08-27·技术·合集·8 分钟

第二篇:从直接 provide 到 Plugin、Effect 和 Scope

当 Runtime 已经能保存能力以后,谁来安装这些能力,谁来撤销这些能力,以及撤销时为什么不能一锅端——把安装逻辑抽成 Plugin,把撤销绑进 effect,再用 Scope 隔离每个 Plugin 的边界。

2026-08-27·技术·合集·7 分钟

第一篇:从空的 Context 到最小 Service Registry

在谈 Plugin、Event 和依赖之前,一个最小 Runtime 至少应该先拥有什么——从一个完全没有行为的 Context 开始,逐步补上“注册能力”“读取能力”“移除能力”这几件最基本的事情。

2026-08-27·技术·合集·7 分钟

MiniCordis:从零实现一个插件化 Runtime

接着 Cordis 从零开始教程往前走一步,换一个角度看这个框架是怎么实现的——不复刻 Cordis,而是做一个简化版 MiniCordis,一步步实现关键 feature,理解这些 Runtime 结构为什么会长成现在这样。

2026-08-22·技术·合集·7 分钟

第五篇:回头看 Cordis 的核心概念,以及它为什么像 Agent Runtime

把 Context、Plugin、Service、Event、Lifecycle 和 inject 重新收束成一张完整的 Runtime 心智图,并说明它为什么和 Agent Runtime 如此相似。

2026-08-21·技术·合集·6 分钟

第四篇:当多个模块共享同一依赖时,会发生什么

只再增加一个同样依赖 Clock 的模块,看依赖图多出一条边时,外部同步逻辑会怎样迅速膨胀成一片胶水代码。

2026-08-20·技术·合集·7 分钟

第三篇:从 Greeter 依赖 Clock 出发,理解 inject

当一个能力开始依赖另一个会动态出现、消失和恢复的能力时,系统该如何保持状态一致?inject 从“注入一个对象”变成“让 Runtime 接管依赖关系”。

2026-08-19·技术·合集·6 分钟

第二篇:从日志需求出发,理解 Event 和 Lifecycle

一个模块做完事情后,其他模块想感知却又不能直接耦合——手写一个最小事件系统不难,难的是 listener 的创建和清理,最终一定会把我们带到 Lifecycle。

2026-08-18·技术·合集·7 分钟

第一篇:从一个变量开始,理解 Context、Service 和 Plugin

当系统里只有一个简单能力时,普通变量就已经够用;改用 Cordis 重写同样的需求后,Context、Service 和 Plugin 分别在替代什么,两者到底从哪里开始分叉。

2026-08-17·技术·合集·5 分钟

Cordis 入门:Runtime 基础

为什么一个长期运行、能力会动态变化的系统最后会需要 Context、Plugin、Service、Event、Lifecycle 和 inject——从一个够小的问候程序出发,让需求一步步增长,看清楚这些抽象为什么会自然出现。

技术 | 半格记录