项目 / 002

Java LLM 实践集

Java 会话、请求重试与持久化边界,以及注意力、缓存成本和量化误差的可复现实验。

构建中 · 更新于 2026-10-11

Java 8 · Gson · HTTP · TypeScript · Node.js · Python · NumPy

GitHub ↗

实践现场 / 01

如果不带上前文,记忆还在吗?

先回放一次真实对话,再亲手拆开请求。看见界面中的历史,和模型这一次实际收到的内容之间的区别。

本地交互 · 不调用模型 · 原始记录保留中文 · 不上传输入

发出什么

根据作者对话记录还原的消息列表,不是抓包原文。

  1. 用户

    你好

实际观察 / 作者记录

你好!我是 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模式支持情况尚未验证。

代码与配套阅读

  1. 01Console input
  2. 02Messages history
  3. 03JSON / HTTP
  4. 04Agnes API
  5. 05Parse + display
架构

架构

继续探索

继续探索

  1. 实战教程

    Java 8 调用大语言模型:从第一次请求到多轮对话

    用三个真实运行的 Java Demo,理解模型请求、JSON 解析、读取超时与对话历史。

    15 分钟已发布
  2. 实战教程

    Java LLM 实践(二):HTTP 200 之后,怎样验收模型的 JSON?

    从一次真实的代码围栏响应和三次超时出发,用 Java 8 实现严格结构校验、受限格式适配与可追溯的失败处理。

    16 分钟已发布
  3. 实验复盘

    把答案放在上下文中间,模型就会漏掉吗?一次提前停止的对照试验

    用 Java 固定 6 组虚构资料,对照开头、中间、末尾与无答案条件;公开 29 次请求、HTTP 429 和不能下的结论。

    12 分钟已发布
  4. 实验 / 005

    L1 / 上下文位置试验:提前停止的一轮

    移动同一条事实,模型是否仍能找到答案?

    尚无定论
  5. 工程案例

    LLM 实验(二):先让对照成立,再谈上下文位置

    用 Java 8 实现成组对照与节流,完成 Agnes 3.0 的24次真实请求;公开逐项评分、服务端用量,并解释全对结果的边界。

    16 分钟已发布
  6. 工程案例

    Java LLM 实践(三):超时之后,别让对话历史悄悄变了

    用候选副本、整轮提交与UTF-8请求预算重写多轮会话边界:41项离线检查,失败不污染历史,裁剪失败也能保留原状态。

    10 分钟已发布
  7. 工程案例

    TypeScript 能保证模型输出正确吗?32组输入与 Java 校验器的边界对照

    从类型断言、unknown到原始JSON:复现22个误接收、4个对象校验盲区,以及Java/TypeScript契约一致性的实际边界。

    11 分钟已发布
  8. 实验 / 011

    A1 / 对话历史的提交边界

    请求失败、截断或候选裁剪后,如何保持已提交历史正确?

    已完成
  9. 实验 / 010

    TypeScript / 输出边界对照

    类型断言与对象校验分别会漏掉哪些无效输入?

    已完成
  10. 工程案例

    24次全对之后:怎样设计更有区分度的上下文实验?

    从Agnes 3.0的24次真实结果出发,排除句式和编号线索,冻结128项相似干扰对照;用Java 8与独立审计验证材料,不把离线准备当模型结果。

    10 分钟已发布
  11. 机制拆解

    LLM机制实验(一):改动未来Token,前面的输出应该变吗?

    从手算两行Attention到双层数值对照,验证因果掩码、Softmax与未来信息泄漏。

    8 分钟已发布
  12. 工程案例

    Java LLM 实践(四):两个请求同时返回,谁有资格写入历史?

    用真实Java线程复现回复乱序,加入版本票据、完整问答提交与有界回执,明确本地幂等和远端执行的区别。

    8 分钟已发布
  13. 工程案例

    Java LLM 实践(六):先验收检索证据,再谈RAG回答

    10篇原创合成资料、14个固定问题,手写BM25与引用边界;保留词汇失配和无答案题的误命中。

    8 分钟已发布
  14. 工程案例

    Java LLM 实践(五):工具超时了,为什么任务还在执行?

    用白名单、严格参数、零队列与调用预算构建只读工具执行器,并复现取消不等于终止的边界。

    8 分钟已发布
  15. 机制拆解

    LLM机制实验(二):KV Cache省掉了什么,怎样证明没有算错?

    逐前缀重算、逐Token缓存与分块缓存三路对照,记录误差、投影行数和真实数组字节。

    8 分钟已发布
  16. 机制拆解

    LLM机制实验(三):缓存只留四格,为什么不等于重算四个Token?

    用双层滑动注意力区分绝对位置、缓存槽位和历史表示,展示两种形状正确却计算错误的实现。

    8 分钟已发布
  17. 实验 / 015

    L2–L4 / 注意力与缓存机制

    从手算两行Attention到双层数值对照,验证因果掩码、Softmax与未来信息泄漏。

    已完成
  18. 实验 / 014

    A2 / 并发历史提交

    用真实Java线程复现回复乱序,加入版本票据、完整问答提交与有界回执,明确本地幂等和远端执行的区别。

    已完成
  19. 实验 / 001

    检索质量对照实验

    固定一组问题与资料,记录命中文档、引用与回答正确性;对比无检索和有检索。

    实验中
  20. 实验 / 002

    工具调用失败恢复实验

    使用可控的只读工具,注入超时与空结果,记录任务完成率和调用次数。

    实验中
  21. 工程案例

    Java LLM 实践(七):引用是真的,为什么答案仍然不能通过?

    22 个固定配置案例,拆开引用存在、版本范围、字段支持与完整性,验证 Java 回答验收边界。

    9 分钟已发布
  22. 机制拆解

    LLM 机制实验(四):前缀改了,旧 KV Cache 还能继续用吗?

    三种子、六条件,比较错误复用与带键校验的前缀缓存;数值相同也不代表允许跨作用域共享。

    9 分钟已发布
  23. 实验 / 019

    L5 / 前缀缓存失效

    三种子、六条件,比较错误复用与带键校验的前缀缓存;数值相同也不代表允许跨作用域共享。

    已完成
  24. 工程案例

    Java LLM 实践(八):流式回答断了,半句答案该不该进入历史?

    22 个回环 HTTP 案例,验证 UTF-8、SSE 分帧、取消与异常结束,把逐步预览和完整历史提交分开。

    11 分钟已发布
  25. 实验 / 021

    Java LLM 实践(八):流式回答断了,半句答案该不该进入历史?

    22 个回环 HTTP 案例,验证 UTF-8、SSE 分帧、取消与异常结束,把逐步预览和完整历史提交分开。

    已完成
  26. 机制拆解

    LLM 机制实验(五):改了历史,能否只重算变化的后缀?

    27 个固定条件、81 个原始数组,验证最长相同前缀裁剪、位置同步、滑窗回退与作用域隔离。

    10 分钟已发布
  27. 实验 / 022

    LLM 机制实验(五):改了历史,能否只重算变化的后缀?

    27 个固定条件、81 个原始数组,验证最长相同前缀裁剪、位置同步、滑窗回退与作用域隔离。

    已完成
  28. 工程案例

    Java LLM 实践(九):取消请求后,旧回答为什么还会覆盖新会话?

    18 种固定线程交错,验证流式预览、完成和错误回调的请求归属,以及取消和有限幂等的边界。

    10 分钟已发布
  29. 实验 / 024

    Java LLM 实践(九):取消请求后,旧回答为什么还会覆盖新会话?

    18 种固定线程交错,验证流式预览、完成和错误回调的请求归属,以及取消和有限幂等的边界。

    已完成
  30. 机制拆解

    LLM 机制实验(六):缓存加大了,为什么还是一次都没命中?

    27 条冷启动轨迹、324 次请求与 648 个数组,按字节限制前缀检查点,观察工作集、隔离与 LRU 淘汰的实际收益。

    11 分钟已发布
  31. 实验 / 025

    LLM 机制实验(六):缓存加大了,为什么还是一次都没命中?

    27 条冷启动轨迹、324 次请求与 648 个数组,按字节限制前缀检查点,观察工作集、隔离与 LRU 淘汰的实际收益。

    已完成
  32. 工程案例

    Java LLM 实践(十):点了取消,读取线程为什么还在运行?

    30次本地HTTP连接,区分会话取消、阻塞读取退出与远端工作,比较Future中断和主动关闭连接。

    11 分钟已发布
  33. 实验 / 027

    Java LLM 实践(十):点了取消,读取线程为什么还在运行?

    30次本地HTTP连接,区分会话取消、阻塞读取退出与远端工作,比较Future中断和主动关闭连接。

    已完成
  34. 机制拆解

    LLM 机制实验(七):缓存省了计算,为什么实测反而更慢?

    4860次实测查询比较三种缓存准入策略,把字节预算、工作集、计算量与本地耗时放在一起验证。

    12 分钟已发布
  35. 实验 / 028

    LLM 机制实验(七):缓存省了计算,为什么实测反而更慢?

    4860次实测查询比较三种缓存准入策略,把字节预算、工作集、计算量与本地耗时放在一起验证。

    已完成
  36. 工程案例

    Java 会话历史与请求窗口:裁掉的旧事实还能回来吗?

    通过裁剪、提交、重启和扩窗的连续实验,分离可回看的完整历史与一次模型请求的上下文。

    9 分钟已发布
  37. 工程案例

    Java 请求重试:三次超时,不等于一个总期限

    七种真实本地 HTTP 情况,比较状态码、Retry-After、尝试上限和总等待预算。

    9 分钟已发布
  38. 工程案例

    Java 对话历史落盘:程序崩溃后,半轮记录怎么办?

    校验追加日志、142种截断前缀和三个真实异常退出子进程,明确本地提交与远端幂等的边界。

    9 分钟已发布
  39. 机制拆解

    KV 缓存开销剖析:把省下的计算和新增的工作分开

    对909次查询做分段计时,验证源码签名、查找、复制与续算分别花在哪里,同时保留缓存仍慢的结果。

    9 分钟已发布
  40. 机制拆解

    注意力分块:不保存完整分数矩阵,如何保持结果?

    从错误的分块平均出发,推导在线Softmax累加,并用9组数组和558次计时区分省内存与加速。

    9 分钟已发布
  41. 机制拆解

    KV 量化入门:省下多少字节,又引入什么误差?

    比较整张量与逐行int8量化,显式计入scale,观察离群值对注意力输出的影响。

    9 分钟已发布
  42. 实战教程

    Java 幂等重试:没收到回答,不等于没有执行

    用七组本地 HTTP 故障对照,解释幂等键、并发认领、请求冲突与进程崩溃窗口。

    11 分钟已发布
  43. 机制拆解

    KV 量化轴:Key 与 Value 为什么不能一概而论?

    162组保存整数码的离线对照,比较全张量、逐Token与K逐通道/V逐Token,保留混合策略并非总更优的结果。

    10 分钟已发布
  44. 实战教程

    持久幂等:让操作身份与结果一起提交

    用带CRC的追加日志、进程崩溃与99个截断前缀,解释持久幂等的提交边界。

    10 分钟已发布
  45. 实战教程

    Outbox投递:本地可靠,不等于远端只执行一次

    对照有键和无键接收端,解释回复丢失、回执缺失与远端重复副作用。

    10 分钟已发布
  46. 实战教程

    对话恢复:从意图、回执到完整问答

    在三个提交边界真实终止JVM,以持久事实恢复完整历史,保留远端重复执行反例。

    10 分钟已发布
  47. 实验 / 042

    持久投递与历史恢复

    17种场景、193条子进程记录;无接收端幂等的投递崩溃后执行两次,三个历史恢复窗口均保留完整问答。

    已完成
  48. 机制拆解

    KV分组打包:4-bit到底省了多少?

    实际保存半字节整数码,复算分组scale开销、补齐字节与注意力输出误差。

    10 分钟已发布
  49. 机制拆解

    KV残差窗口:最近Token一定值得高精度吗?

    用早段与近段注意力对照,解释同样的float32窗口为何收益不同。

    10 分钟已发布
  50. 机制拆解

    KV分块反量化:工作区小了,为什么更慢?

    区分缓存负载、工作数组和实测耗时,保留分块CPU实现更慢的810条计时记录。

    10 分钟已发布
  51. 实验 / 043

    KV打包、残差窗口与分块成本

    144组对照、810条计时:高精度近段窗口在近段注意力上收益更大;分块减少工作数组,但本机CPU计时更慢。

    已完成

← 返回目录