LangChain4j系列—OpenAI开发实例(二)

一、引入依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>dev.langchain4j</groupId><artifactId>open-ai-examples</artifactId><version>0.35.0</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-open-ai</artifactId><version>0.35.0</version></dependency><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j</artifactId><version>0.35.0</version></dependency><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-embeddings-all-minilm-l6-v2</artifactId><version>0.35.0</version></dependency><dependency><groupId>org.tinylog</groupId><artifactId>tinylog-impl</artifactId><version>2.6.2</version></dependency><dependency><groupId>org.tinylog</groupId><artifactId>slf4j-tinylog</artifactId><version>2.6.2</version></dependency></dependencies></project>

二、代码实例

1、ApiKeys定义

import static dev.langchain4j.internal.Utils.getOrDefault;public class ApiKeys {public static final String OPENAI_API_KEY = getOrDefault(System.getenv("OPENAI_API_KEY"), "demo");
}

2、OpenAiChatModel调用 

import dev.langchain4j.data.message.AiMessage;
import dev.langchain4j.data.message.ImageContent;
import dev.langchain4j.data.message.TextContent;
import dev.langchain4j.data.message.UserMessage;
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.model.output.Response;import static dev.langchain4j.model.openai.OpenAiChatModelName.GPT_4_O_MINI;public class OpenAiChatModelExamples {static class Simple_Prompt {public static void main(String[] args) {ChatLanguageModel model = OpenAiChatModel.builder().apiKey(ApiKeys.OPENAI_API_KEY).modelName(GPT_4_O_MINI).build();String joke = model.generate("Tell me a joke about Java");System.out.println(joke);}}static class Image_Inputs {public static void main(String[] args) {ChatLanguageModel model = OpenAiChatModel.builder().apiKey(ApiKeys.OPENAI_API_KEY) // Please use your own OpenAI API key.modelName(GPT_4_O_MINI).maxTokens(50).build();UserMessage userMessage = UserMessage.from(TextContent.from("What do you see?"),ImageContent.from("https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png"));Response<AiMessage> response = model.generate(userMessage);System.out.println(response.content().text());}}
}

3、OpenAiEmbeddingModel调用 

import dev.langchain4j.data.embedding.Embedding;
import dev.langchain4j.model.embedding.EmbeddingModel;
import dev.langchain4j.model.openai.OpenAiEmbeddingModel;
import dev.langchain4j.model.output.Response;import static dev.langchain4j.model.openai.OpenAiEmbeddingModelName.TEXT_EMBEDDING_3_SMALL;public class OpenAiEmbeddingModelExamples {public static void main(String[] args) {EmbeddingModel model = OpenAiEmbeddingModel.builder().apiKey("demo").modelName(TEXT_EMBEDDING_3_SMALL).build();Response<Embedding> response = model.embed("I love Java");Embedding embedding = response.content();System.out.println(embedding);}
}

3、OpenAiFunctionCalling调用

import dev.langchain4j.agent.tool.*;
import dev.langchain4j.data.message.AiMessage;
import dev.langchain4j.data.message.ChatMessage;
import dev.langchain4j.data.message.ToolExecutionResultMessage;
import dev.langchain4j.data.message.UserMessage;
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.service.tool.DefaultToolExecutor;
import dev.langchain4j.service.tool.ToolExecutor;import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;import static dev.langchain4j.data.message.UserMessage.userMessage;
import static dev.langchain4j.model.openai.OpenAiChatModelName.GPT_4_O;public class OpenAiFunctionCallingExamples {/*** This example demonstrates how to programmatically configure the low-level tool APIs, such as ToolSpecification,* ToolExecutionRequest, and ToolExecutor.* This sample is used in the LangChain4j tutorial: https://docs.langchain4j.dev/tutorials/tools/#low-level-tool-api.* But it is recommended to use higher-level APIs as demonstrated here: https://docs.langchain4j.dev/tutorials/tools/#high-level-tool-api* <p>* This sample goes through 4 different steps:* 1. Specify the tools (WeatherTools) and the query ("What will the weather be like in London tomorrow?")* 2. Model generate function arguments (model decides which tools to invoke)* 3. User execute function to obtain tool results (using ToolExecutor)* 4. Model generate final response based on the query and the tool results*/static class Weather_Low_Level_Configuration {static ChatLanguageModel openAiModel = OpenAiChatModel.builder().apiKey(ApiKeys.OPENAI_API_KEY).modelName(GPT_4_O).strictTools(true) // https://docs.langchain4j.dev/integrations/language-models/open-ai#structured-outputs-for-tools.logRequests(true).logResponses(true).build();public static void main(String[] args) {// STEP 1: User specify tools and query// ToolsWeatherTools weatherTools = new WeatherTools();List<ToolSpecification> toolSpecifications = ToolSpecifications.toolSpecificationsFrom(weatherTools);// User queryList<ChatMessage> chatMessages = new ArrayList<>();UserMessage userMessage = userMessage("What will the weather be like in London tomorrow?");chatMessages.add(userMessage);// STEP 2: Model generate function argumentsAiMessage aiMessage = openAiModel.generate(chatMessages, toolSpecifications).content();List<ToolExecutionRequest> toolExecutionRequests = aiMessage.toolExecutionRequests();System.out.println("Out of the " + toolSpecifications.size() + " functions declared in WeatherTools, " + toolExecutionRequests.size() + " will be invoked:");toolExecutionRequests.forEach(toolExecutionRequest -> {System.out.println("Function name: " + toolExecutionRequest.name());System.out.println("Function args:" + toolExecutionRequest.arguments());});chatMessages.add(aiMessage);// STEP 3: User execute function to obtain tool resultstoolExecutionRequests.forEach(toolExecutionRequest -> {ToolExecutor toolExecutor = new DefaultToolExecutor(weatherTools, toolExecutionRequest);System.out.println("Now let's execute the function " + toolExecutionRequest.name());String result = toolExecutor.execute(toolExecutionRequest, UUID.randomUUID().toString());ToolExecutionResultMessage toolExecutionResultMessages = ToolExecutionResultMessage.from(toolExecutionRequest, result);chatMessages.add(toolExecutionResultMessages);});// STEP 4: Model generate final responseAiMessage finalResponse = openAiModel.generate(chatMessages).content();System.out.println(finalResponse.text()); //According to the payment data, the payment status of transaction T1005 is Pending.}}static class WeatherTools {@Tool("Returns the weather forecast for tomorrow for a given city")String getWeather(@P("The city for which the weather forecast should be returned") String city) {return "The weather tomorrow in " + city + " is 25°C";}@Tool("Returns the date for tomorrow")LocalDate getTomorrow() {return LocalDate.now().plusDays(1);}@Tool("Transforms Celsius degrees into Fahrenheit")double celsiusToFahrenheit(@P("The celsius degree to be transformed into fahrenheit") double celsius) {return (celsius * 1.8) + 32;}String iAmNotATool() {return "I am not a method annotated with @Tool";}}
}

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

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

相关文章

Linux系统基础-多线程超详细讲解(1)

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 Linux系统基础-多线程超详细讲解(1) 收录于专栏[Linux学习] 本专栏旨在分享学习Linux的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 …

Github 2024-10-29Python开源项目日报 Top10

根据Github Trendings的统计,今日(2024-10-29统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目10TypeScript项目1gpt4free存储库:强大语言模型的集合 创建周期:300 天开发语言:Python协议类型:GNU General Public License v3…

高职院校教学一体化护理实训室建设方案

当前&#xff0c;高职院校在人才培养方面正经历着深刻的变革。教育部明确提出&#xff0c;高职院校在人才培养过程中&#xff0c;必须着重培养学生的专业技能与职业素养&#xff0c;旨在培育出更多出类拔萃的应用型人才&#xff0c;从而全面提升高职院校护理类专业的人才培养质…

【K8S系列】Kubernetes 中 Service IP 分配 问题及解决方案【已解决】

在 Kubernetes 中&#xff0c;LoadBalancer 类型的 Service 允许用户轻松地将应用暴露给外部流量。它自动创建一个云负载均衡器并分配一个外部 IP 地址。然而&#xff0c;在某些情况下&#xff0c;LoadBalancer 类型的 Service 可能未能成功分配 IP 地址&#xff0c;导致外部无…

Python中的函数是什么?

1、Python中的函数是什么&#xff1f; 在Python中&#xff0c;函数是一种特殊类型的代码块&#xff0c;它允许您将一段代码组织在一起&#xff0c;以便在需要时重复使用。函数可以接受输入参数&#xff08;这些参数被称为函数的“参数”&#xff09;&#xff0c;并返回一个或多…

智慧旅游微信小程序平台

作者介绍&#xff1a;✌️大厂全栈码农|毕设实战开发&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 &#x1f345;获取源码联系方式请查看文末&#x1f345; 推荐订阅精彩专栏 &#x1f447;&#x1f3fb; 避免错过下次更新 Springboot项目精选实战案例 更多项目…

基于SpringBoot实现驻马店市ERP药品管理系统

作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验&#xff0c;被多个学校常年聘为校外企业导师&#xff0c;指导学生毕业设计并参与学生毕业答辩指导&#xff0c;…

十、包并发

包&并发 包1. 包1.1 包的基本概念1.2 包的导入1.3 包的导入路径1.4 包的引用格式 2. go mod2.1 项目中使用 并发1. 并发2. Goroutine2.1 使用2.1 GMP 3. runtime包4.Channel4.1 创建channel4.2 channel操作4.3 无缓冲的通道4.4 有缓冲的通道4.6 如何优雅的从通道循环取值4.…

Labelme标注的json文件转yolo训练的txt文件

在目标检测任务中&#xff0c;数据标注是模型训练的关键环节。常用的标注工具有Labelimg和 Labelme&#xff0c;它们均能够以直观的方式对图像中的目标进行标注&#xff0c;并生成包含标注信息的TXT文件或者 JSON 文件。然而&#xff0c;YOLO模型使用的是特定格式的 .txt 文件作…

Golang | Leetcode Golang题解之第517题超级洗衣机

题目&#xff1a; 题解&#xff1a; func findMinMoves(machines []int) (ans int) {tot : 0for _, v : range machines {tot v}n : len(machines)if tot%n > 0 {return -1}avg : tot / nsum : 0for _, num : range machines {num - avgsum numans max(ans, max(abs(sum…

《重庆理工大学学报(自然科学)》

《重庆理工大学学报&#xff08;自然科学&#xff09;》设有车辆工程、智能技术、机械材料、电子电气等栏目&#xff0c;一直密切关注、追踪、展示学界最新研究动态和成果&#xff0c;刊文质量和学术影响力不断提升&#xff0c;对推动我国科技事业发展、促进学术交流、培养科技…

简单了解unordered_set和unordered_map底层

目录 1.哈希表(开散列)实现 1.1 介绍模板参数 1.2 代码实现 2.迭代器 3.HASH转整形的类 4.unordered_map简单实现 5.unordered_map简单实现 6.验证 1.哈希表(开散列)实现 1.1 介绍模板参数 //K&#xff1a;关键码 //T&#xff1a;保存数据&#xff0c;unordered_map是一…

[NSSCTF 2nd]php签到 详细题解

知识点: linux文件后缀名绕过 表单文件上传 pathinfo 函数 file_put_contents()函数 命令执行 代码审计: <?phpfunction waf($filename){$black_list array("ph", "htaccess", "ini");$ext pathinfo($filename, PATHINFO_EXTENSION…

《CUDA编程》11.CUDA流

本章将介绍CUDA流 CUDA程序的并行层次主要有两个&#xff1a;一个是核函数内部的并行&#xff0c;一个是核函数外部的并行&#xff0c;核函数外部的并行主要指&#xff1a; 核函数计算与数据传输之间的并行主机计算与数据传输之间的并行不同数据传输之间的并行核函数计算与主机…

操作系统期末|考研复习知识点汇总 - 持续更新

本文将根据个人学习进度对b站王道408课程以及题目考察的知识点进行整合&#xff0c;视频中详细的导图将会直接复用&#xff0c;并且将会对一些重点知识进行扩展以及一些思维导图的补充&#xff0c;(目前第三章内容正在整理中……由于第三章内容繁多且都是重点&#xff0c;习题量…

.NET Core WebApi第3讲:第一个WebApi项目、WebApi开发三种模型

一、.NEt Core 1、运行模板项目 1&#xff09;仍然有controllers&#xff0c;说明WebApi是基于MVC模式的&#xff0c;只是对比之下这里没有MVC中的views。 因为WebApi只会向前台发送数据&#xff0c;不会向前台发送HTML页面。 2、验证模板项目的api 1&#xff09;法1&#xf…

微服务之间调用,OpenFeign传递用户(RequestInterceptor接口)

场景&#xff1a;微服务之黑马商城项目-登录拦截器在网关完成用户的校验&#xff0c;并将用户信息&#xff08;用户id&#xff09;存入请求头&#xff0c;假设将购物车里面的商品进行结算就会生成订单并清空购物车&#xff0c;这里涉及到了交易服务模块远程调用购物车模块&…

单细胞数据分析(一):10X数据生成seurat数据对象

文章目录 介绍加载R包数据链接导入数据过滤细胞:移除双重细胞合并所有seurat数据对象输出结果系统信息介绍 在单细胞基因组学研究中,Seurat是一个流行的R包,用于单细胞基因表达数据的分析和探索。以下是如何从10X基因注释数据生成Seurat数据对象,并对该数据进行过滤的步骤…

RHCE的学习(8)

动态网站 lnmp&#xff08;LAMP&#xff09; 解析index.php界面 &#xff08;1&#xff09;预配&#xff0c;确保服务能够被访问 systemctl stop firewalld setenforce 0 &#xff08;2&#xff09;安装nginx服务 mount /dev/sr0 /mnt cat /etc/yum.repos.d/base.repo dnf …

NVR设备ONVIF接入平台EasyCVR视频融合平台智慧小区视频监控系统建设方案

一、方案背景 智慧小区构成了“平安城市”建设的基石。随着社会的进步&#xff0c;社区安全问题逐渐成为公众关注的热点。诸如高空抛物、乱丢垃圾、破坏车辆、入室盗窃等不文明行为和违法行为频繁出现。目前&#xff0c;许多小区的物业管理和安全防护系统仍然较为简单和陈旧&a…