LLM输入格式转换器

一个支持多种高效序列化格式转换并与Anthropic消息API交互的CLI工具,适用于开发者在不同数据格式间快速切换并与LLM服务集成。

  • by tk34395
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 tk34395/LLM-Input-Formats

使用说明

LLM输入格式CLI

该项目演示了七种高效序列化格式(CSV、ASON、JDON、TONL、TOON、YAML和XML)以及一个简单的Anthropic消息传递客户端。这 main.js 脚本充当一个交互式CLI,它会一直提示,直到您明确退出,允许您:

  • 将任意JSON转换为支持的格式之一
  • 向Anthropic发送提示 /v1/messages 具有请求的确切标头的端点(x-api-key, anthropic-version, anthropic-beta)

先决条件

  • Node.js 18+(用v22.21.0测试)
  • npm(与Node一起提供)
  • 如果您计划调用API,则为Anthropic API键(转换模式在没有它的情况下有效)

设置和运行

  1. 克隆存储库:
    git clone https://github.com/tk34395/LLM-Input-Formats.git
    cd LLM-Input-Formats
    
  2. 安装依赖项:
    npm install
    
  3. 创建一个 .env 旁边的文件 main.js 并添加:
    ANTHROPIC_API_KEY=your-anthropic-api-key
    NETSUITE_ACCOUNT_ID=account_id
    NETSUITE_AUTHORIZATION_TOKEN=bearer-token
    
    只有当您希望MCP服务器信息包含在有效负载中时,才需要NetSuite变量。
  4. 放置要转换的JSON input.txt (与目录相同 main.js).每次运行都会覆盖 output.txt 使用最新编码的有效载荷。
  5. 作者任何Anthropic提示 llm-query.txt (当您选择选项2时,文件将逐字读取)。您可以使用 <CONVERTED_FORMAT_PAYLOAD> 占位符(自动替换为来自的内容 output.txt)或者直接将有效载荷粘贴到文件中。有关详细信息,请参阅下面的“在LLM查询中包括有效载荷”部分。响应被持久化 llm-query-response.txt.
  6. 启动CLI:
    node main.js
    

在CLI询问的每个操作之后 您想退出吗?(Y/Y退出,其他内容继续)。它将循环,直到您以 Y 或 y.

非交互模式(命令行参数)

您还可以通过传递命令行参数以非交互方式运行CLI。这允许您在没有提示的情况下将脚本作为单行执行:

将JSON转换为以下格式:

node main.js 1 <format>

哪里 <format> 是:

  • 1 =CSV
  • 2 =ASON
  • 3 =JDON
  • 4 =吨
  • 5 =卡通
  • 6 =YAML
  • 7 =XML

示例:

node main.js 1 2    # Convert JSON to ASON
node main.js 1 6    # Convert JSON to YAML
node main.js 1 7    # Convert JSON to XML

向Anthropic API发送请求:

node main.js 2

笔记:

  • 使用命令行参数时,脚本运行一次并自动退出(无退出提示)
  • 如果你跑 node main.js 没有争论,它像以前一样在交互模式下工作
  • 如果提供的参数无效,则显示错误消息

CLI流(交互模式)

无参数运行时(node main.js),CLI以交互模式运行:

  1. 主菜单 –在以下选项之间进行选择:
    • 1 将JSON转换为某种格式
    • 2 向Anthropic发送提示
  2. 转换菜单 –如果你选择了选项1,你可以选择:
    • CSV, ASON, JDON, TONL, TOON, YAML, XML,或 B 回去
  3. 输入文件 转换模式从以下位置读取JSON input.txt;拟人模式从以下位置读取消息 llm-query.txt。空白或缺少文件会取消操作,但会出错。
  4. 输出 –转换结果将写入 output.txt (并记录路径)。Anthropic调用将完整的JSON响应写入 llm-query-response.txt 除了控制台日志之外。

注: 对于非交互式执行,请参阅上面的“非交互式模式”部分。

格式化模块

每种格式都有一个小的专用模块,它公开了专注的编码/解码助手:

  • ason.js
    • 用途 SmartCompressor 从 @ason-format/ason
    • encodeAson(data) 将JSON对象压缩为二进制安全ASON字符串
    • decodeAson(asonString) 恢复原始对象
  • JDON.js
    • 实现JDON解析器和序列化器
    • encodeJdon(data) 将任何JSON值转换为紧凑的JDON(默认情况下为列式数组)
    • decodeJdon(jdonString) 返回解析后的JavaScript值
  • tonl.js
    • 包裹 encodeTONL / decodeTONL 从 tonl 包裹
    • encodeTonl(data) 发出TONL文本, decodeTonl(tonlString) 重建对象
  • toon.js
    • 包裹 @toon-format/toon
    • encodeToon(data) → TOON字符串, decodeToon(toonString) → JavaScript值
  • csv.js
    • 用途 json-2-csv 包裹
    • encodeCsv(data) 将JSON对象/数组转换为CSV格式
    • decodeCsv(csvString) 将CSV转换回JSON数组
  • yaml.js
    • 用途 @catalystic/json-to-yaml 用于编码和 js-yaml 用于解码
    • encodeYaml(data) 将JSON对象/数组转换为YAML格式
    • decodeYaml(yamlString) 将YAML转换回JSON
  • xml.js
    • 用途 jstoxml 用于编码和 fast-xml-parser 用于解码
    • encodeXml(data) 将JSON对象/数组转换为XML格式
    • decodeXml(xmlString) 将XML转换回JSON

这些助手被导入 main.js,保持CLI逻辑与各个编码库的解耦。

人类请求

  • 端点: https://api.anthropic.com/v1/messages
  • 标题: x-api-key, anthropic-version: 2023-06-01, anthropic-beta: mcp-client-2025-04-04
  • 有效载荷:
    • 型号: claude-sonnet-4-5-20250929
    • 消息包含具有缓存控制元数据的单个用户块
    • 可选的 mcp_servers 在以下情况下添加条目 NETSUITE_ACCOUNT_ID 和 NETSUITE_AUTHORIZATION_TOKEN 可用的

在LLM查询中包括有效载荷

在LLM查询中包含有效载荷有两种选择:

选项A:使用 <CONVERTED_FORMAT_PAYLOAD> 占位符

此方法自动插入以下内容 output.txt 在您的查询中:

  1. 转换JSON –使用选项1将JSON从 input.txt 任何格式。结果保存到 output.txt.
  2. 添加占位符 –In llm-query.txt,包括 <CONVERTED_FORMAT_PAYLOAD> 您希望有效载荷出现在哪里。例如:
    Create a sales order in NetSuite with below data:
    <CONVERTED_FORMAT_PAYLOAD>
    
  3. 发送请求 –当您选择选项2时,系统将:
    • 检测 <CONVERTED_FORMAT_PAYLOAD> 占位符在 llm-query.txt
    • 阅读以下内容 output.txt
    • 替换所有出现的 <CONVERTED_FORMAT_PAYLOAD> 与实际有效载荷
    • 将完整查询发送到Anthropic API

验证:

  • 如果 <CONVERTED_FORMAT_PAYLOAD> 存在于 llm-query.txt, output.txt 必须存在且不能为空
  • 如果 output.txt 在以下情况下缺失或为空 <CONVERTED_FORMAT_PAYLOAD> 如果使用,操作将失败,并显示描述性错误消息
选项B:直接有效载荷插入

或者,您可以直接将有效负载内容粘贴到 llm-query.txt:

  1. 复制您的有效载荷 –从复制有效载荷内容 output.txt 或任何其他来源。
  2. 直接粘贴 –In llm-query.txt,删除 <CONVERTED_FORMAT_PAYLOAD> (如果存在)并直接粘贴您的有效载荷。例如:
    Create a sales order in NetSuite with below data:
    <entity><id>44247</id></entity><tranDate>2024-01-15</tranDate>...
    
  3. 发送请求 –当您选择选项2时,查询将按原样发送,不做任何修改。

注: 如果 <CONVERTED_FORMAT_PAYLOAD> 不存在于 llm-query.txt,查询按原样发送,不做任何修改,无论是否 output.txt 存在。

如果API键丢失,CLI将显示指导并返回菜单,而不是崩溃。

故障排除

  • require 未定义 –该项目使用ES模块("type": "module" 在 package.json).确保所有进口使用 import ... from.
  • 缺失 .env –转换仍然有效,但在提供密钥之前,Anthropic调用将被禁用。
  • 无效的JSON –CLI报告解析错误并再次询问;粘贴缩小的JSON以将输入保持在一行上。