ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

如何用 LangChain4j 让业务同事用一句话查数据库

如何用 LangChain4j 让业务同事用一句话查数据库 如何用 LangChain4j 让业务同事用一句话查数据库【免费下载链接】langchain4jLangChain4j is an idiomatic, open-source Java library for building LLM-powered applications on the JVM. It offers a unified API over popular LLM providers and vector stores, and makes implementing tool calling (including MCP support), agents and RAG easy. It integrates seamlessly with enterprise Java frameworks like Quarkus and Spring Boot.项目地址: https://gitcode.com/GitHub_Trending/la/langchain4jLangChain4j 的实验模块 langchain4j-experimental-sql 把大模型接进数据库自然语言问题被转成 SQL 查询经 JSqlParser 校验只读后再执行。本文拆核心类 SqlDatabaseContentRetriever 的完整链路讲清四个参数的配法、生产避坑点和适用边界。为什么业务方一个查询比一份数据分析还贵想知道今年哪个季度销售额最高传统路径是业务提单、开发写 SQL、跑完回填。数据明明在库里自然语言到 SQL 这段翻译却最慢还容易错——表名拼错、把 MySQL 函数写成 PostgreSQL 的写法错一次又回到工单排队。把翻译交给大模型动机就在这里。但交出去之前要回答三件事模型怎么知道你的表长什么样它会不会顺手写一条 DROP一次跑不通怎么办下一节看内部链路。看懂自然语言转 SQL 的四步链路该模块实现的是 RAG 的ContentRetriever接口所以输出不是最终答案而是检索到的内容再交给大模型组织成回答。它在检索链路中的位置与向量库检索相同第一步把表结构喂进提示词模型没见过表就写不出 SQL。不传databaseStructure时模块会遍历 JDBC 的DatabaseMetaData逐表拼出 CREATE TABLE 语句列类型、主键、外键、默认值和表/列注释都会进提示词自己传 DDL 则跳过自动拼装。方言同理sqlDialect不传时自动取数据库产品名。第二步只让模型输出 SELECT默认提示词模板很短核心就一句PromptTemplate.from(You are an expert in writing SQL queries.\n You have access to a {{sqlDialect}} database ... {{databaseStructure}}\n Do not output anything else aside from a valid SQL statement!);模型输出执行前先过clean一步把模型爱包的 sql 代码围栏剥掉。第三步JSqlParser 校验后才执行isSelect用 JSqlParser 解析语句解析失败或不是 Select 类型直接返回空结果。为什么卡得这么死官方 Javadoc 明确写了这个类有危险性、数据库用户必须只有极受限的只读权限并不建议直接上生产——解析器只是应用层兜底只读账号才是真正的防线。第四步跑失败了把错误丢回给模型retrieve内部是个循环总尝试次数等于maxRetries 1。执行抛异常时上一轮 SQL 和报错信息会被追加进对话模型看到自己的错误再重写一轮改不好就返回空。注意maxRetries默认是 0即不重试。 SqlDatabaseContentRetriever 使用四个参数配齐模块位于 experimental/langchain4j-experimental-sql 目录pom 只依赖 langchain4j-core 和 jsqlparser。项目里加上依赖dependency groupIddev.langchain4j/groupId artifactIdlangchain4j-experimental-sql/artifactId version!-- 跟随项目 BOM以官方文档为准 --/version /dependency再配置 builder其中dataSource和chatModel必填SqlDatabaseContentRetriever retriever SqlDatabaseContentRetriever.builder() .dataSource(dataSource) // 数据库连接池务必用只读账号 .sqlDialect(PostgreSQL) // SQL 方言不传则自动从 DataSource 取 .databaseStructure(ddl) // 表 DDL不传则由元数据自动生成 .chatModel(chatModel) // 负责生成 SQL 的大模型 .maxRetries(2) // 执行失败后的重试次数 .build();自然语言问题直接交给 retrieveQuery query Query.from(哪个季度销售额最高); ListContent content retriever.retrieve(query); // 返回的 Content 是执行 SQL 得到的 CSV 结果供大模型组织回答官方集成测试用 testcontainers 拉起 PostgreSQL 容器分别接 OpenAI 和 Mistral 模型跑我们有多少客户这类问题。本地可以先照这套组合复现确认效果再谈接入。生产上线前必须核对的三件事⚠️ **账号必须只读且权限最小化。**官方注释原话是不要用在生产。JSqlParser 只保证语句是 SELECT不保证语句无害——哪怕只读账号也可能被全表拖走数据。**收窄可见的表。**不配databaseStructure时所有表的 DDL 都会进提示词既烧 token 又暴露无关表。建议显式传 DDL只留用户该查的几张表。**控制结果量并复核 SQL。**结果按 CSV 返回且没有行数上限全表扫描会撑爆提示词。可以用promptTemplate约定 LIMIT也能重写受保护的validate钩子做自定义复核官方同样说明默认模板并未高度优化需要按你的数据调。谁适合用 Java LLM 查数据库适合的数据分析师自助查询、内部探索工具、给业务人员的轻量报表卖点是一句话问一张表回。不适合的高并发对外接口和强审计场景预置 SQL 或固定 API 更稳。模块标注了Experimental行为可能随版本变化接入前先读当前版本的 Javadoc。推荐路径先按官方 IT 的 PostgreSQL testcontainers 组合跑通确认模型对你这套表结构的效果再挂只读账号进正式环境期间持续盯生成的 SQL 日志。【免费下载链接】langchain4jLangChain4j is an idiomatic, open-source Java library for building LLM-powered applications on the JVM. It offers a unified API over popular LLM providers and vector stores, and makes implementing tool calling (including MCP support), agents and RAG easy. It integrates seamlessly with enterprise Java frameworks like Quarkus and Spring Boot.项目地址: https://gitcode.com/GitHub_Trending/la/langchain4j创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表