用于JSON查询的自然语言到DSL代理
🔗 主站 • 🐦 Twitter • 📢 Discord • 🖇️ AgentOps
Jaiqu
可复现的、由AI生成的JSON转换查询。自动将任何JSON转换为任何架构。
Jaiqu是一个AI代理,用于使用jq查询语言语法创建可重复的JSON转换。Jaiqu可以将任意JSON输入转换为所需的架构。
正在构建AI代理?查看AgentOps
特性
- 将任何架构转换为任何架构 AI代理通过迭代提示GPT-4创建有效的jq查询语法,自动将数据从源架构映射到所需格式。
- 架构验证 给定要求架构,自动验证输入json中是否存在所需的数据。
- 模糊术语匹配 根据语义相似性推断键(例如datetime与date_time)。GPT-4自动映射并将输入键转换为所需的输出键。
使用示例:
from jaiqu import validate_schema, translate_schema
# 所需的数据格式
schema = {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"id": {
"type": ["string", "null"],
"description": "记录的唯一标识符。"
},
"date": {
"type": "string",
"description": "描述日期的字符串。"
},
"model": {
"type": "string",
"description": "表示所使用模型的文本字段。"
}
},
"required": [
"id",
"date"
]
}
# 提供的数据
input_json = {
"call.id": "123",
"datetime": "2022-01-01",
"timestamp": 1640995200,
"Address": "123 Main St",
"user": {
"name": "John Doe",
"age": 30,
"contact": "john@email.com"
}
}
# (可选)创建提示,以便代理知道在输入中要寻找什么
key_hints="我们正在处理包含id、日期和模型的输出。所有必需的字段都应该存在于这个输入中,但名称可能不同。"
验证输入json是否包含架构中要求的所有信息
schema_properties, valid = validate_schema(input_json, schema, key_hints)
print(schema_properties)
>>> {
"id": {
"identified": true,
"key": "call.id",
"message": "123",
"type": [
"string",
"null"
],
"description": "记录的唯一标识符。",
"required": true
},
"date": {
"identified": true,
"key": "datetime",
"message": "2022-01-01",
"type": "string",
"description": "描述日期的字符串。"
"required": true
}
}
print(valid)
>>> True
为从格式相同的输入JSON中提取数据创建可重复的jq查询
jq_query = jaiqu.translate_schema(input_json, schema, key_hints, max_retries=30)
>>>'{"id": .attributes["call.id"], "date": .datetime}'
安装
推荐:PyPI:
pip install jaiqu
架构
解析Jaiqu代理工作流程模式
flowchart TD
A[开始translate_schema] --> B{验证输入架构}
B -- 有效 --> C[为每个键创建jq过滤器查询]
B -- 无效 --> D[抛出RuntimeError]
C --> E[编译并测试jq过滤器]
E -- 成功 --> F[验证JSON]
E -- 失败 --> G[重试创建jq过滤器]
G -- 成功 --> E
G -- 失败n次 --> H[抛出RuntimeError]
F -- 成功 --> I[返回jq查询字符串]
F -- 失败 --> J[重试验证JSON]
J -- 成功 --> I
J -- 失败n次 --> K[抛出RuntimeError]
运行测试
- 如果还没有安装
pytest
,请安装
pip install pytest
- 在父目录中运行
tests/
文件夹
pytest tests
这个仓库也支持tox
,只需运行python -m tox
。
贡献
欢迎为Jaiqu做出贡献!随时为任何错误报告、投诉或功能建议创建问题。
许可证
Jaiqu根据MIT许可证发布。