langchain4j 学习系列(6)-结构化输出(参数提取)

继续学习langchain4j,玩过dify的朋友想必对"参数提取器"这个节点很熟悉,示例:

image

 参数提取器可以很方便的从“非结构的自然语言”中,提取出结构化的结果。

image

下面来看看langchain4j如何实现类似功能:

    public static final String TEST_DATA = """金庸(1924年3月10日—2018年10月30日),本名查良镛,浙江省海宁市人,祖籍江西省婺源县浙源乡凤山村 [10] [146-147],1948年移居香港。当代武侠小说作家、新闻学家、企业家、政治评论家、社会活动家,被誉为“香港四大才子”之一,与古龙、梁羽生、温瑞安并称为“中国武侠小说四大宗师”。 [1-4]1944年,考入重庆中央政治大学外交系。1946年秋,进入上海《大公报》任国际电讯翻译。1948年,毕业于上海东吴大学法学院,并被调往《大公报》香港分社 [5]。1952年调入《新晚报》编辑副刊,并写出《绝代佳人》《兰花花》等电影剧本。1959年,金庸等人于香港创办《明报》 [6]。1985年起,历任香港特别行政区基本法起草委员会委员、政治体制小组负责人之一,基本法咨询委员会执行委员会委员,以及香港特别行政区筹备委员会委员。1994年,受聘北京大学名誉教授 [7]。2000年,获得大紫荆勋章。2007年,出任香港中文大学文学院荣誉教授 [5]。2009年9月,被聘为中国作协第七届全国委员会名誉副主席 [8];同年荣获2008影响世界华人终身成就奖 [9]。2010年,获得剑桥大学哲学博士学位 [2]。"2018年10月30日,在香港逝世,享年94岁。""";@GetMapping(value = "/extract", produces = MediaType.APPLICATION_JSON_VALUE)public ResponseEntity<String> extract() {try {Prompt prompt = PromptTemplate.from("请从以下生平介绍中,提取出该人物的基本信息,以json格式输出,参考格式:{{json_output_sample}} \n{{test_data}}").apply(Map.of("json_output_sample", "{\"name\":\"张三\",\"age\":10,\"birthDay\":\"2000-01-01\",\"isAlive\":false,\"deathDate\":\"2040-02-01\",\"degree\":\"本科\"}","test_data", TEST_DATA));String text = ollamaChatModel.chat(prompt.toUserMessage()).aiMessage().text();return ResponseEntity.ok(text);} catch (Exception e) {log.error("extract", e);return ResponseEntity.ok("{\"error\":\"extract error: " + e.getMessage() + "\"}");}}

代码很简单,直接在prompt提示词里,告诉LLM怎么做就行,输出结果:

image

不过,这个输出结果是个string,还不能算是结构化的输出,可以再改进一下:

    /*** Person 记录类,用于表示一个人的基本信息* 使用 Java record 类型实现,自动生成构造函数、getter 方法、equals()、hashCode() 和 toString() 方法** @param name      人的姓名* @param age       人的年龄* @param birthDay  人的出生日期* @param isAlive   人是否仍然活着* @param deathDate 人的死亡日期(如果已故)* @param degree    人的学位*/record Person(String name, int age, Date birthDay, boolean isAlive, Date deathDate, String degree) {// 这是一个记录类声明,包含了表示个人基本信息的数据字段// 所有字段都是 final 的,且自动生成对应的访问器方法}/*** 人员信息提取接口* 该接口定义了一个从生平介绍中提取人员信息的方法*/interface PersonExtractor {/*** 从生平介绍中提取人员主要信息** @param biography 人员的生平介绍文本* @return 包含提取信息的Person对象*/@SystemMessage("""你的任务是从生平介绍中,提取出该人的主要信息:name[姓名],age[年龄], birthDay[出生日期], isAlive[是否健在], deathDate[死亡日期(如果已逝世)], degree[最高学历]""")Person extractPerson(String biography);}/*** 处理GET请求,提取人员信息并以JSON格式返回** @return 返回包含提取的人员信息的ResponseEntity对象*/@GetMapping(value = "/extract2", produces = MediaType.APPLICATION_JSON_VALUE)public ResponseEntity<Person> extract2() {try {// 创建PersonExtractor实例,使用AiServices和ollamaChatModelPersonExtractor personExtractor = AiServices.create(PersonExtractor.class, ollamaChatModel);// 使用TEST_DATA调用extractPerson方法提取人员信息Person person = personExtractor.extractPerson(TEST_DATA);// 返回成功响应,包含提取的人员信息return ResponseEntity.ok(person);} catch (Exception e) {// 捕获异常并记录错误日志log.error("extract2", e);// 发生异常时返回默认的Person对象return ResponseEntity.ok(new Person("", -1, null, false, null, ""));}}

这里我们用抽象级别更高的AiService来创建指定的抽取器,一步到位的输出了对象实例

image

本文示例完整代码:GitHub - yjmyzz/langchain4j-study at day06

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/993461.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小型功率三极管S9013、SOT-23介绍

S9013简介 S9013三极管是一种NPN型三极管,以硅为主要材料,属于小型的功率三极管,这种三极管很常见,有插件TO-92、贴片SOT-23两种封装,它有三个引脚,分别是基极b,集电极C,发射极e,对于插件的S9013,字体面向自…

Python 简单基础教程

Python 是一门简洁、易上手的编程语言,广泛应用于数据分析、Web 开发、人工智能、自动化等领域。本教程从零基础开始,带你掌握 Python 核心基础。 一、环境准备 1. 安装 Python安装注意:Windows:勾选「Add Python …

屏幕上那一行刺眼的红色 `Time Limit Exceeded`,是不是你我再熟悉不过的场景?

本文提供了一种与AI协作进行算法优化的新思路。通过一个结构化的AI指令模板,引导AI扮演“算法陪练”的角色,不仅能解决代码性能问题,更能帮助开发者深入理解优化原理,真正提升个人能力。无论是深夜在 LeetCode 上奋…

【论术】项目复盘总结-响应式界面

工作的意义和动力本质上是终身学习者在自由市场中的创造性表达 —— 佚名 项目需求:首页需要在用户屏幕下实现自适应并尽量维持UI稿中的样式,而用户的分辨率不能保持在1920*1080,缩放比率通常在150%,且界面图片要确保…

if 的虚拟语气和省略形式

时态 从句谓语动词 主句谓语动词现在 \(\text{did/were}\) \(\text{would/coud/should/might + do}\)过去 \(\text{had done}\) \(\text{would/coud/should/might + have done}\)将来 \(\text{did/were, were to do, s…

Ubuntu 架构磁盘清理的手段

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

西电2025硕士网课——人工智能安全与伦理练习答案

西电2025年研究生网课人工智能安全与伦理(北航雨课堂) 答案参考于https://github.com/LazzyXP/AI-Security-and-Ethics-BeiHang-Univer...,修改了一部分错误的答案第一章-AI安全与伦理概述AI 解释生成系统的手段包括…

高级语程序设计第八次作业

这个作业属于哪个课程:https://edu.cnblogs.com/campus/fzu/gjyycx/ 这个作业要求在哪里:https://edu.cnblogs.com/campus/fzu/gjyycx/homework/15590 学号:102500302 姓名:陈婧妍 编写并运行书本第11章11.13编程练…

2026上海办公室装修实力强的公司推荐三家:资质与案例双标杆指南

2026上海办公室装修实力强的公司推荐三家:资质与案例双标杆指南在上海选择办公室装修实力强的公司,核心看 “资质硬实力、场景适配深度、交付履约率” 三大核心维度。结合《上海市公装服务质量标准(2025 版)》及行…

枚举

1.认识枚举2.应用场景3.例子

cs61a-36链表的练习

在练习之前先创建链表类如图所示 这个tolinked 函数的作用是把python中的可迭代对象转化为链表 练习1:def split(L) ‘’‘返回(mid,last,length) 测试实例如下split(tolinked([1,2,3,4,5])) (Link(3,Link(4,Link…

数据库操控与数据管理——Rust 与 SQLite 的集成

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

20232315 2025-2026-1 《网络与系统攻防技术》实验八实验报告

20232315 2025-2026-1 《网络与系统攻防技术》实验八实验报告20232315 2025-2026-1 《网络与系统攻防技术》实验八实验报告 目录一、实验基本信息二、实验内容三、实验要求四、实验过程4.1 4.2 4.3 4.4 4.5 五、回答问…

3分钟搞定,CI/CD工具Arbess安装和配置 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Ring智能可视门铃调试代码漏洞致远程代码执行

本文详细分析了CVE-2025-64983漏洞。该漏洞存在于SwitchBot智能可视门铃旧版固件中,由于遗留了活跃的调试代码,攻击者可通过Telnet连接并获取设备访问权限,导致远程代码执行风险。CVE-2025-64983 - Ring智能可视门铃…

认识设计模式——单例模式 - 指南

认识设计模式——单例模式 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&q…

完美的盆栽配土

营养土+10%园土 营养土中不含钙镁和微量元素,园土正好富含钙镁和微量元素。这样就不必使用带TE的肥料,也不必额外补钙镁,能省不少钱,也省了不少事,配肥料的时候不用加这个加那个的。 按照植物体内的元素含量,植物…

Anthropic API Key

Anthropic API Keyagent1.ts:import {createAgent} from langchain; import dotenv/configconst agent = createAgent({model: claude-sonnet-4-5-20250929} );const response = await agent.invoke({messages: [{role…

应用文档抽取技术,赋予RPA理解和处理复杂现实世界信息的能力

如果将RPA机器人比作一位不知疲倦的“数字员工”,那么它过往的工作大多依赖清晰的指令和固定的路径——就像在规划好的格子里填色。然而,现实业务中充满了格式各异、内容复杂的“不规则拼图”,如PDF合同、扫描发票等…

Day57(27)-F:\vs_ai_work\vue-tlias-management

ElementPlusTlias智能学习辅助系统修改密码 | 退出登录​ ​ ​ ​ ​ ​ ​ ​ 首页 ​ ​ ​ …