项目 / 002
Java LLM 实践集
Java 会话、请求重试与持久化边界,以及注意力、缓存成本和量化误差的可复现实验。
实践现场 / 01
如果不带上前文,记忆还在吗?
先回放一次真实对话,再亲手拆开请求。看见界面中的历史,和模型这一次实际收到的内容之间的区别。
本地交互 · 不调用模型 · 原始记录保留中文 · 不上传输入
发出什么
根据作者对话记录还原的消息列表,不是抓包原文。
实际观察 / 作者记录
你好!我是 Agnes,由 Sapiens AI 开发。有什么我可以帮你的吗?- 输入
- 285
- 输出
- 60
- 合计
- 345
Token 来自这一次运行,不是当前请求估算、固定价格或性能指标。
继续查看下一轮,观察已有回答如何进入下一次请求。
查看消息 JSON · 1 条
{
"model": "agnes-2.5-flash",
"messages": [
{
"role": "user",
"content": "你好"
}
]
}概览
Java 对话、结构化输出、工具与引用验收、流式连接取消,以及本地注意力、缓存准入和实测查询实验。
问题
拿到回答只是开始;Java 程序还需要维护正确的历史,并判断模型输出是否符合数据契约。
决策
保留 Java 8 与原生 HTTP;Gson 负责序列化,严格 JsonReader 校验负责业务字段。格式适配单独启用,不静默修正分类。
验证
各篇保留独立协议、固定提交与原始记录。真实模型调用、合成检索、线程调度和未训练 NumPy 模型分别解读,不合并为成功率;最近结果见流式取消与缓存准入实验。
局限
没有自动重试或自动发布;超时不能证明服务端未执行。结构合法不代表分类正确,JSON模式支持情况尚未验证。
代码与配套阅读
01 / 首次调用 →
Java 8 原生 HTTP · 原始 JSON
02 / 解析与输入 →
Gson · 控制台输入 · Token 用量
03 / 多轮对话 →
历史消息 · 失败回退 · exit 退出
配套实践文章 →
Java 8 调用大语言模型:从第一次请求到多轮对话
04 / 结构化输出验收 →
严格解析 · 35项检查 · 真实失败与重放
第二篇实践文章 →
HTTP 200之后,怎样验收模型的 JSON?
L1:上下文位置试验 →
协议、29 次请求与独立审计;提前停止,不宣称位置无关。
L1v2:成组对照与请求节流 →
Agnes 3.0完成24次真实请求、6组对照;原始响应、用量与独立审计均可复核。
05 / 事务式对话历史 →
候选副本 · 整轮提交 · 41项离线检查
TypeScript / 输出边界 →
32组对照 · 原始JSON与unknown · 无模型调用
L1v3:相似干扰实验设计 →
128项冻结材料,Java 8与独立审计通过;尚未在线执行
相似干扰工程与冻结请求 →
2515项Java离线断言、60项Node测试、0次真实请求
LLM机制实验(一):改动未来Token,前面的输出应该变吗? →
从手算两行Attention到双层数值对照,验证因果掩码、Softmax与未来信息泄漏。
Java LLM 实践(四):两个请求同时返回,谁有资格写入历史? →
用真实Java线程复现回复乱序,加入版本票据、完整问答提交与有界回执,明确本地幂等和远端执行的区别。
Java LLM 实践(六):先验收检索证据,再谈RAG回答 →
10篇原创合成资料、14个固定问题,手写BM25与引用边界;保留词汇失配和无答案题的误命中。
Java LLM 实践(五):工具超时了,为什么任务还在执行? →
用白名单、严格参数、零队列与调用预算构建只读工具执行器,并复现取消不等于终止的边界。
LLM机制实验(二):KV Cache省掉了什么,怎样证明没有算错? →
逐前缀重算、逐Token缓存与分块缓存三路对照,记录误差、投影行数和真实数组字节。
LLM机制实验(三):缓存只留四格,为什么不等于重算四个Token? →
用双层滑动注意力区分绝对位置、缓存槽位和历史表示,展示两种形状正确却计算错误的实现。
Java LLM 实践(七):引用是真的,为什么答案仍然不能通过? →
22 个固定配置案例,拆开引用存在、版本范围、字段支持与完整性,验证 Java 回答验收边界。
LLM 机制实验(四):前缀改了,旧 KV Cache 还能继续用吗? →
三种子、六条件,比较错误复用与带键校验的前缀缓存;数值相同也不代表允许跨作用域共享。
Java LLM 实践(八):流式回答断了,半句答案该不该进入历史? →
22 个回环 HTTP 案例,验证 UTF-8、SSE 分帧、取消与异常结束,把逐步预览和完整历史提交分开。
LLM 机制实验(五):改了历史,能否只重算变化的后缀? →
27 个固定条件、81 个原始数组,验证最长相同前缀裁剪、位置同步、滑窗回退与作用域隔离。
Java LLM 实践(九):取消请求后,旧回答为什么还会覆盖新会话? →
18 种固定线程交错,验证流式预览、完成和错误回调的请求归属,以及取消和有限幂等的边界。
LLM 机制实验(六):缓存加大了,为什么还是一次都没命中? →
27 条冷启动轨迹、324 次请求与 648 个数组,按字节限制前缀检查点,观察工作集、隔离与 LRU 淘汰的实际收益。
Java LLM 实践(十):点了取消,读取线程为什么还在运行? →
30次本地HTTP连接,区分会话取消、阻塞读取退出与远端工作,比较Future中断和主动关闭连接。
LLM 机制实验(七):缓存省了计算,为什么实测反而更慢? →
4860次实测查询比较三种缓存准入策略,把字节预算、工作集、计算量与本地耗时放在一起验证。
Java 会话历史与请求窗口:裁掉的旧事实还能回来吗? →
通过裁剪、提交、重启和扩窗的连续实验,分离可回看的完整历史与一次模型请求的上下文。
Java 请求重试:三次超时,不等于一个总期限 →
七种真实本地 HTTP 情况,比较状态码、Retry-After、尝试上限和总等待预算。
Java 对话历史落盘:程序崩溃后,半轮记录怎么办? →
校验追加日志、142种截断前缀和三个真实异常退出子进程,明确本地提交与远端幂等的边界。
KV 缓存开销剖析:把省下的计算和新增的工作分开 →
对909次查询做分段计时,验证源码签名、查找、复制与续算分别花在哪里,同时保留缓存仍慢的结果。
注意力分块:不保存完整分数矩阵,如何保持结果? →
从错误的分块平均出发,推导在线Softmax累加,并用9组数组和558次计时区分省内存与加速。
KV 量化入门:省下多少字节,又引入什么误差? →
比较整张量与逐行int8量化,显式计入scale,观察离群值对注意力输出的影响。
Java 幂等重试:没收到回答,不等于没有执行 →
用七组本地 HTTP 故障对照,解释幂等键、并发认领、请求冲突与进程崩溃窗口。
KV 量化轴:Key 与 Value 为什么不能一概而论? →
162组保存整数码的离线对照,比较全张量、逐Token与K逐通道/V逐Token,保留混合策略并非总更优的结果。
持久投递与历史恢复 →
17种场景、193条子进程记录;无接收端幂等的投递崩溃后执行两次,三个历史恢复窗口均保留完整问答。
KV打包、残差窗口与分块成本 →
144组对照、810条计时:高精度近段窗口在近段注意力上收益更大;分块减少工作数组,但本机CPU计时更慢。
- Console input
- Messages history
- JSON / HTTP
- Agnes API
- Parse + display
继续探索
继续探索
- 工程案例
TypeScript 能保证模型输出正确吗?32组输入与 Java 校验器的边界对照
从类型断言、unknown到原始JSON:复现22个误接收、4个对象校验盲区,以及Java/TypeScript契约一致性的实际边界。
- 工程案例
24次全对之后:怎样设计更有区分度的上下文实验?
从Agnes 3.0的24次真实结果出发,排除句式和编号线索,冻结128项相似干扰对照;用Java 8与独立审计验证材料,不把离线准备当模型结果。