langchainJS -结构化输出(StructuredOutputParser )

      在LangChain的帮助下,我们可以为输出定义模式。StructuredOutputParser 使用定义的名称和描述来分析和构建模型预测的输出。

const productParser =StructuredOutputParser.fromNamesAndDescriptions({Name: "Name of The Product",Description: "Description Of The Product",Image: "Image of the Prodction",})

     如果我们的模型输出格式不正确,我们可以使用 OutputFixingParser。它是修复此类输出的非常有用的工具,确保我们提取的数据处于预期的结构中。

console.log("Using output fixing parser to fix output...")
const fixParser = OutputFixingParser.fromLLM(new OpenAI({apiKey: "sk-xxxxxxxx",baseURL:"https://api.chatanywhere.tech/v1",model: "gpt-3.5-turbo",temperature: 0, }),productParser
)
const output = await fixParser.parse(result.output)
console.log(output)

导入模块

import {StructuredOutputParser,OutputFixingParser,
} from "langchain/output_parsers";

最后的代码

        下面的程序通过调用getProductInfomation  获取产品信息,该工具模仿了查询数据库获取产品信息,然后输出json 格式的结构。

import { initializeAgentExecutorWithOptions } from "langchain/agents";
import { OpenAI } from "@langchain/openai";
import { TavilySearchResults } from "@langchain/community/tools/tavily_search";
import { z } from "zod";
import { DynamicStructuredTool } from "@langchain/core/tools";
import {StructuredOutputParser,OutputFixingParser,
} from "langchain/output_parsers";
process.env['OPENAI_API_KEY']="sk-xxxxxxxxxxxxxxxx";
process.env['OPENAI_BASE_URL']="https://api.chatanywhere.tech/v1"
process.env['TAVILY_API_KEY']="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"const openai = new OpenAI({apiKey: "sk-FfhkMFdQQwDqAR5Mta2UxsU9amU6AoIwDG1NbqqAWGzMpTyi",baseURL:"https://api.chatanywhere.tech/v1",model: "gpt-3.5-turbo",temperature: 0
})
const productParser =StructuredOutputParser.fromNamesAndDescriptions({Name: "Name of The Product",Description: "Description Of The Product",Image: "Image of the Prodction",})
const addTool = new DynamicStructuredTool({name: "add",description: "Add two integers together.",schema: z.object({firstInt: z.number(),secondInt: z.number(),}),func: async ({ firstInt, secondInt }) => {return (firstInt + secondInt).toString();},});const getProductInfomation = new DynamicStructuredTool({name: "getProductInfomation",description: "use this tool when you need to get product information ",schema: z.object({ID: z.string().describe("The ID of Product"),}),func: async ({ ID }) => {console.log("ProductID"+ID)return JSON.stringify({Name:"Milk",Description:"low suger milk",Image:"milk.png"});},});const tools = [new TavilySearchResults(),addTool,  getProductInfomation,
];
const executor = await initializeAgentExecutorWithOptions(tools,openai,{ agentType: "structured-chat-zero-shot-react-description", verbose: false });
//Who is Olivia Wilde's boyfriend? What is his current age raised to the 0.23 power?
const input = `get information of the product with ID=2323 ,ouput in JSON Format`;
const result = await executor.invoke({input: input,})
console.log(result.output)
console.log("Using output fixing parser to fix output...")
const fixParser = OutputFixingParser.fromLLM(new OpenAI({apiKey: "sk-xxxxxxxxxxxxxxxxx",baseURL:"https://api.chatanywhere.tech/v1",model: "gpt-3.5-turbo",temperature: 0, }),productParser
)
const output = await fixParser.parse(result.output)
console.log(output)

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

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

相关文章

JS中split的用法

在JavaScript中,split() 方法用于将字符串分割成字符串数组,并返回这个数组。该方法接受一个参数,该参数定义了用于分割字符串的字符或正则表达式。 以下是一些使用 split() 方法的示例: 示例 1:使用字符串作为分隔符…

【笔记2】Python编程:从入门到实践(第2版) - 埃里克·马瑟斯

第二部分 1、外星人入侵 Pygame包 2、数据可视化 Matplotlib 、Plotly 3、Web应用程序 Django 项目1:外星人入侵 第12章~第14章 使用Pygame包来开发一款2D游戏。 它在玩家每消灭一群向下移动的外星人后,将玩家提高一个等级。等级越高&…

spring 事务隔离级别

一、理解 脏读、不可重复读和幻读 脏读、不可重复读和幻读是数据库事务处理中可能出现的三种并发问题,它们都与事务的隔离性有关。下面是这三种现象的简要说明: 1. 脏读(Dirty Read): 当一个事务读取了另一个事务尚未提交的更改…

【Python】pandas中的read_excel()和to_excel()函数解析与代码实现

😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 🤓 同时欢迎大家关注其他专栏,我将分享Web前后端开发、人工智能、机器学习、深…

类和对象的学习总结(一)

面向对象和面向过程编程初步认识 C语言是面向过程的,关注过程(分析求解问题的步骤) 例如:外卖,关注点菜,接单,送单等 C是面向对象的,关注对象,把一件事拆分成不同的对象&…

java之面向对象2笔记

1 接口(interface) 1.1 概述 接口(Interface)在计算机科学中,特别是在面向对象编程(OOP)中,是一个重要的概念。它定义了一组方法的规范,但没有实现这些方法的具体代码。接口的主要目的是确保类…

[240610] 5 种 Non-Posix Shell 在 x-cmd 上的支持 | Perl 发布 5.40.0

目录 [TOC](目录)5 种非 Posix SHell - nushell,fish,xonsh,csh,pwshnushellfishxonshcshpwsh Perl 发布 5.40.0核心增强安全性不兼容的变化弃用性能提升模块和编译指示文档诊断配置和编译平台支持内部变化选定的错误修复已知问题先前版本的勘误表致谢报告错误致谢另请参阅 5 种…

SOA的设计模式_3.微服务模式

SOA的架构中,复杂的ESB企业服务总线依然处于非常重要的位置,整个系统的架构并没有实现完全的组件化以及面向服务,它的学习和使用门槛依然偏高。而微服务不再强调传统SOA架构里面比较重的ESB企业服务总线,同时SOA的思想进入到单个业…

Linux系统下 安装 Nginx

一、下载Nginx安装包 压缩包下载地址:nginx: download 服务器有外网,可直接使用命令下载 wget -c https://nginx.org/download/nginx-1.24.0.tar.gz 二、安装Nginx 1、解压 tar -zxvf nginx-1.24.0.tar.gz 2、安装Nginx所需依赖 yum install -y gc…

整数反转(leetcode)

题目: 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。 假设环境不允许存储 64 位整数(有符号或无符号)。 示例 1&…

SLAM小题目

1、最小二乘题目&#xff1a; 假设有三个WIFI热点&#xff0c;位置分别在(x1,y1), (x2,y2), (x3,y3), 移动端测量到每一个热点的距离L1,L2和L3&#xff0c;要求解移动端的位置. #include <iostream> #include <vector> #include <cmath> class Point { pub…

监听DB配置变更之go-broadcast简单实现

文章目录 1. 前言2. 分析3. 实现4. 问题5. 小结6. 参考 1. 前言 之前遇到一个需求&#xff0c;因为配置的查找是基于db的&#xff0c;而db的更改却无法实时通知到具体利用到这条数据的使用方&#xff0c;为了实现db数据变动时&#xff0c;能够尽快让使用方知道这条数据发生了变…

设计模式七大原则-单一职责原则SingleResponsibility

七大原则是在设计“设计模式”的时候需要用到的原则&#xff0c;它们的存在是为了保证设计模式达到以下几种目的&#xff1a; 1.代码重用性 2.可读性 3.可拓展性 4.可靠性&#xff08;增加新的功能后&#xff0c;对原来的功能没有影响&#xff09; 5.使程序呈现高内聚、低耦合的…

3、线性代数

1、矩阵转置 A[i,j]A[j,i] 2、对称矩阵 &#xff1a;A转置A [0,2,3] [2 1 5] [3,5,1] 3、三维矩阵 求和 axis0 两个矩阵相加 axis1 两个向量相加 &#xff0c;axis2 向量内部相加 keepdimsTrue 求和后维度保持不变 4、cumsum累加求和 5、torch.mm() 或 torch.bmm() 【矩…

vivado HW_SERVER

HW_服务器 描述 硬件服务器管理到硬件目标的连接&#xff0c;例如硬件 板&#xff0c;包含一个或多个Xilinx FPGA设备的JTAG链&#xff0c;用于 编程和调试您的FPGA设计。 使用open_hw命令打开硬件管理器时&#xff0c;可以连接到 硬件服务器&#xff0c;本地或远程&#xff0c…

支持YUV和RGB格式两路视频同时播放

1.头文件&#xff1a; sdlqtrgb.h #pragma once #include <QtWidgets/QWidget> #include "ui_sdlqtrgb.h" #include <thread> class SdlQtRGB : public QWidget {Q_OBJECTpublic:SdlQtRGB(QWidget* parent Q_NULLPTR);~SdlQtRGB(){is_exit_ true;//等…

使用EFCore和Linq查询语句封装复杂的查询结果

这里举一个例子&#xff0c;用到了三个实体类&#xff0c;分别是 [Table("t_user")] public class User {[Key]public long Id { get; set; }public string UserName { get; set; }public string Password { get; set; }public string Email { get; set; }public Li…

Gradle和Maven都是广泛使用的项目自动化构建工具(二)

Gradle和Maven都是广泛使用的项目自动化构建工具&#xff0c;但它们在多个方面存在差异。以下是关于Gradle和Maven的详细对比&#xff1a; 一、构建脚本语言 Maven&#xff1a;使用XML作为构建脚本语言。XML的语法较为繁琐&#xff0c;不够灵活&#xff0c;对于复杂的构建逻辑…

十大排序

本文将以「 通俗易懂」的方式来描述排序的基本实现。 &#x1f9d1;‍&#x1f4bb;阅读本文前&#xff0c;需要一点点编程基础和一点点数据结构知识 本文的所有代码以cpp实现 文章目录 排序的定义 插入排序 ⭐ &#x1f9d0;算法描述 &#x1f496;具体实现 &#x1f…

LabVIEW硬件与仿真双模式设计液压系统

在实际项目中&#xff0c;结合LabVIEW与液压运动控制器&#xff0c;通过设计两种运行方式&#xff1a;硬件运行和仿真运行&#xff0c;使得系统既能进行实际操作又能进行仿真测试。此设计不仅方便了开发调试&#xff0c;也为教学培训和展示提供了极大的便利。本文将从项目背景、…