【技术文档摘要】
koryki.ai/core 库改进了业务用户与关系数据库之间的交互,用于搜索和数据分析,这些操作由大型语言模型(LLM)辅助。
通过引入易于理解和验证的查询语言(kql),用户可以掌控整个过程。
kql 避免了 SQL 的模糊性和冗余性。kql 具有简洁的语法,易于学习。
进一步降低数据分析师面临的复杂度:
每一步抽象处理都减少了用户和 LLM 可见的复杂度。这些确定的过程可以通过 SQL 生成来可靠地处理。这使得用户更容易理解并验证要执行的查询,同时也降低了 LLM 计算的难度。
除了语法检查外,查询没有所谓的“正确”或“错误”。一切都取决于用户的需要和期望。帮助用户理解系统行为是提高生产力和数据质量的关键。
借助 koryki.ai MCP-Server,用户可以在 AI 模型的支持下获得对数据库的读取访问权限,参见 Model-Context-Protocol。

koryki.ai MCP-Server 的主要任务是在 kql 形式的查询和关系数据库的形式化语言(SQL)之间架起桥梁。
为此,koryki.ai 引入了两种查询语言:
在 AI 模型将自然语言查询转换为 kql 形式后,koryki.ai MCP-Server 将此查询转换为 iql 形式,使用规则集丰富和转换查询,并最终生成适用于数据库系统的 SQL。
用户输入:
查找在2023年1月下单超过10次的客户,
返回公司名称和订单数量,按订单数量排序。
借助 koryki.ai 发布的资源,包括 kql 语法和实体关系模型,AI 可能会创建一个 kql 形式的查询:
FIND customers c, c-orders o
FILTER count(o) > 10 AND
o.order_date BETWEEN DATE '2023-01-01' AND DATE '2023-01-31'
FETCH c.company_name, count(o)
ORDER count(o) DESC
同样的查询在 iql 中:
SELECT
"customers" "c"
OUT "c"."company_name" 1
GROUP "c"."company_name"
JOIN "orders" "o"
OUT count("o"."order_id") 2
FILTER "o"."order_date" BETWEEN DATE '2023-01-01' AND DATE '2023-01-31'
HAVING count("o"."order_id") > 1
ORDER count("o"."order_id") DESC
OWNER
应用规则:
连接子句尚未解析为连接列。
同样的查询在 SQL 中,解析连接列:
SELECT
c.company_name
, count(o.order_id)
FROM
customers c
INNER JOIN orders o ON
c.customer_id = o.customer_id
WHERE
o.order_date BETWEEN DATE '2023-01-01' AND DATE '2023-01-31'
GROUP BY
c.company_name
HAVING
count(o.order_id) > 10
ORDER BY
count(o.order_id) DESC
但至少还有两个要求需要注意:
koryki.ai MCP-Server 使用 https://github.com/modelcontextprotocol/java-sdk 实现。
演示:Northwind 数据库
演示 MCP-Server
相关 GitHub 项目