• 请不要在回答技术问题时复制粘贴 AI 生成的内容
moverinfo
V2EX  ›  程序员

给 tinystruct 加了一层 TypeSafe 的自然语言调用

  •  
  •   moverinfo · 1 day ago via iPhone · 205 views

    最近给框架 tinystruct 做了一个有点好玩的东西。


    起因

    现在很多 AI Agent 的常见模式都是:

    用户
      ↓
     LLM
      ↓
    Tool Calling
      ↓
    生成参数
      ↓
    执行 Tool
    

    但我一直觉得这里有一个核心问题:如果业务代码本来就是确定且类型严密的,为什么还要让 LLM 去“重新编程”?

    在 tinystruct 框架中,我们本来就可以这样定义业务方法:

    @Action(
        value = "create-user",
        description = "Create a new user account.",
        arguments = {
            @Argument(key = "name", description = "The user's name."),
            @Argument(key = "role", description = "The user's role.")
        }
    )
    public String createUser(String name, Role role) {
        // ...
    }
    

    这本身已经是一个结构非常清晰的 Typed Action

    因此,我尝试把逻辑反转过来:

    Natural Language
           ↓
          Jev
           ↓
    Semantic Decision
           ↓
    tinystruct @Action
           ↓
    Existing Java Code
    

    核心思路
    AI 不需要负责编写代码,也不需要重新动态设计 Workflow 。它只负责理解用户意图——匹配已有能力并提取所需强类型参数。


    一个直观的例子

    假设用户说:

    "帮我创建一个叫 James 的管理员账号。"

    系统并不是放任 LLM 自由生成松散的 JSON:

    {
      "tool": "createUser",
      "name": "James",
      "role": "ADMIN"
    }
    

    而是将整个流程拆解为类型安全的决策( TypeSafe Decisions )

    1. 确定动作( Which action?)
      • create-user
      • delete-user
      • update-user
      • list-users
    2. 确定参数类型( Role?)
      • ADMIN
      • EDITOR
      • VIEWER
    3. 最终直接安全调用:
      createUser("James", Role.ADMIN);
      

    在此模式下,AI 更像是一个 programmable common-sense layer (可编程的常识层),而不是一个拥有任意写权限、行为难以预测的 Agent 。


    为什么选择 Jev ?

    在这一套机制中,我比较看重 TypeSafe / Jev 的一个特质:它不是让大模型返回一个任意字符串,而是针对预定义的 choices 给出确定性决策。

    这与传统后端系统的设计理念非常契合。

    • 传统 Java 系统
      enum Role {
          ADMIN,
          EDITOR,
          VIEWER
      }
      
    • 传统 AI 世界常返回
      • "admin"
      • "administrator"
      • "super admin"
      • "maybe admin?"
        (后端随后不得不编写大量 parsing 、validation 、retry 等胶水代码)

    如果模型最终只需要在已有类型集合中做 decision ,整体链路会简化非常多:

           LLM
            │
            │ semantic decision
            ▼
       Typed Choice
            │
            ▼
      Typed Argument
            │
            ▼
       Java Method
    

    更重要的是:无需重写已有业务代码

    这也是该设计最实用的地方。对于已有的 tinystruct application:

    • HTTP 接口
    • CLI 终端命令
    • MCP (Model Context Protocol)

    所有现有的 @Action 均可直接复用。引入新层后,只是给系统增加了一个全新的交互维度:

    Natural Language ──► tinystruct-typesafe ──► @Action
    

    整体架构拓扑如下:

                     ┌── HTTP
                     │
                     ├── CLI
                     │
    User ────────────┼── MCP
                     │
                     └── Natural Language
                              │
                             Jev
                              │
                       Semantic Dispatcher
                              │
                              ▼
                           @Action
                              │
                              ▼
                         Existing Code
    

    边界与权限:AI 不应该拥有过多权限

    为了让生产落地更加可控,SDK 中实现了一系列偏向工程防线的机制:

    • Action allowlist (操作白名单)
    • Confidence threshold (置信度阈值机制)
    • Per-action threshold (单动作阈值定制)
    • Argument validation (强参数校验)
    • Confirmation (危险动作确认流)
    • Principal resolver (身份解析鉴权)
    • Cache (语义与决策缓存)
    • Metrics (调用指标监控)
    • Workflow persistence (工作流持久化)

    特别是针对 Destructive Action (破坏性操作)。例如当用户输入:

    "删除用户 James"

    AI 可以准确将其解析为 delete-user 动作,但这绝不意味着系统应该直接执行,而是介入严格的安全策略链条:

    AI decision
        ↓
     Policy
        ↓
    Confirmation
        ↓
     Action
    

    从而将 AI 的作用范围牢牢收敛在预设的安全边界内。


    总结:一种新的 Agent 思考模式

    过去我们常常把 Agent 想象为:

    “给大模型一个庞大的工具箱,让它自行推演和规划下一步该做什么。”

    但我现在更倾向于:

    “代码定义确定性能力,AI 负责理解真实意图。”

    这也是本项目目前最想验证的方向:如果传统 Java 系统已经具备清晰的 typed actions ,AI 能否以最小侵入的方式,直接成为它的一层高质量自然语言入口?

    目前项目仍处于早期迭代阶段,已内置实现了 client 、semantic dispatcher 、question generation 、policy 、cache 、metrics 以及 workflow persistence 等核心组件。

    也非常期待各位在从事 Java + AI / Agent / MCP / Tool Calling 方向的开发者一起交流探讨!

    moverinfo
        1
    moverinfo  
    OP
       1 day ago via iPhone
    这个贴是刚发的,被自动加了 16 个小时?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5231 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 08:21 · PVG 16:21 · LAX 01:21 · JFK 04:21
    ♥ Do have faith in what you're doing.