深入了解TypeChat

在过去的几个月里,我们看到了最新一波大型语言模型的热潮。虽然聊天助手是最直接的应用程序,但如何最好地将这些模型集成到现有的应用程序界面中仍是一个大问题。

换句话说,我们如何用自然语言界面增强传统UI ? 我们如何使用人工智能来接受用户的请求,并将其转化为我们的应用程序可以操作的东西? 我们如何确保我们的应用程序是安全的,并做开发者和用户都可以信任的工作?

因此我们发布了TypeChat,一个旨在回答这些问题的实验性库。它使用代码库中的类型定义来检索类型安全的结构化AI响应。

图片

今天你可以通过运行以下命令开始使用TypeChat

npm install typechat

并将它与任何语言模型连接起来,与你的应用一起工作。

但让我们首先快速探索一下TypeChat存在的原因。

语言解析

当前的大语言模型浪潮默认使用会话式自然语言进行交流。解析自然语言是一项极其困难的任务,无论您如何用“以项目列表的形式响应”之类的规则来给予提示。自然语言可能有结构,但典型的软件很难从原始文本中重建它。

令人惊讶的是,我们可以要求大语言模型以JSON的形式响应,他们通常会以合理的方式响应!

用户:

将以下请求转换为JSON。

Could I get a blueberry muffin and a grande latte?

只以JSON格式响应,如下所示:

{
    "items": [
        { "name": "croissant", "quantity": 2  },
        { "name": "latte", "quantity": 1, "size": "tall" }
    ]
}

聊天机器人:

{
    "items": [
        {
            "name": "blueberry muffin",
            "quantity": 1
        },
        {
            "name": "latte",
            "quantity": 1,
            "size": "grande"
        }
    ]
}

这很好——尽管这个例子展示了最好的情况。虽然示例可以帮助指导结构,但它们不能广泛地定义AI应该返回什么,也不能提供我们可以验证的任何内容。

只需添加类型!

幸运的是,类型正是这样做的。我们发现,因为大语言模型已经在网络上看到了如此多的类型定义,类型也可以作为人工智能应该如何响应的一个很好的指南。因为我们通常使用JSON (JavaScript Object Notation, JavaScript对象表示法),也因为它与我们非常亲近,所以我们一直在提示符中使用TypeScript类型。

用户:

将以下请求转换为JSON。

Could I get a blueberry muffin and a grande latte?

只响应满足 Response 类型的JSON:

type Response = {
    items: Item[];
};

type Item = {
    name: string;
    quantity: number;
    size?: string;
    notes?: string;
}

聊天机器人:

{
  "items": [
    {
      "name": "blueberry muffin",
      "quantity": 1
    },
    {
      "name": "latte",
      "quantity": 1,
      "size": "grande"
    }
  ]
}

这真是太棒了! TypeScript已经证明它非常适合精确地描述JSON。但是,当语言模型出错,产生了一个不符合我们类型的反应时,会发生什么呢?

因为这些类型都是有效的TypeScript代码,所以我们可以使用TypeScript编译器来验证响应。事实上,编译器的错误反馈甚至可以用来指导修复。当整合在一起时,我们可以得到一个健壮的过程来获得类型良好的响应,我们的应用程序可以进一步修正,与用户进行验证等。

换句话说,类型就是您所需要的。

进入TypeChat

将人类提示和“反应模式”结合起来的技术不一定是独一无二的,但它很有前途。当我们专注于将用户意图转换为结构化数据时,我们发现TypeScript非常适合这项任务。我们对这种方法越来越有信心,为了证明这一点,我们发布了一个名为TypeChat的库,以帮助它更容易在你的应用程序中使用。如果你现在想尝试一下,TypeChat已经在npm上了,它提供了用于快速原型、模式验证、修复等的工具。

下面是将TypeChat连接到LLM并确定句子是否定的、中性的还是肯定的基本代码。

// ./src/sentimentSchema.ts

// The following is a schema definition for determining the sentiment of a some user input.

export interface SentimentResponse {
    /** The sentiment of the text. */
    sentiment: "negative" | "neutral" | "positive";
}
// ./src/main.ts

import * as fs from "fs";
import * as path from "path";
import dotenv from "dotenv";
import * as typechat from "typechat";
import { SentimentResponse } from "./sentimentSchema";

// Load environment variables.
dotenv.config({ path: path.join(__dirname, "../.env") });

// Create a language model based on the environment variables.
const model = typechat.createLanguageModel(process.env);

// Load up the contents of our "Response" schema.
const schema = fs.readFileSync(path.join(__dirname, "sentimentSchema.ts"), "utf8");
const translator = typechat.createJsonTranslator<SentimentResponse>(model, schema, "SentimentResponse");

// Process requests interactively.
typechat.processRequests("😀> ", /*inputFile*/ undefined, async (request) => {
    const response = await translator.translate(request);
    if (!response.success) {
        console.log(response.message);
        return;
    }
    console.log(`The sentiment is ${response.data.sentiment}`);
});

TypeChat可以以多种不同的方式使用。到目前为止,我们在这里讨论的方法都是使用“数据模式”将一些用户意图转化为结构化响应; 然而,TypeChat也使得使用“API模式”来构造基本程序成为可能。我们有一些文档和示例来了解使用TypeChat的不同方式。

开放和可插拔

首先,TypeChat是开源的。我们是MIT授权的,你可以在GitHub上找到我们,我们渴望听到你的想法,分享我们的想法,并与你一起构建。

其次,TypeChat是以模型中立的方式构建的。虽然为了方便起见,我们已经与OpenAI API和Azure OpenAI服务进行了一些非常基本的集成,但这种方法应该适用于你想使用的任何聊天完成风格的API——不过请注意,目前,TypeChat与经过散文和代码训练的模型一起工作得最好。

今天就试试吧!

我们很想知道TypeChat是否有用,你是否感兴趣! 正如我们提到的,如果你有任何问题、建议等,欢迎在GitHub上提给我们。

Happy Hacking!

欢迎关注公众号:文本魔术,查看TypeScript产品主管Daniel Rosenwasser带来的TypeChat介绍视频

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ctfshow中web入门第web41

ctfshow中web入门第web41 ​​ 留下了|运算绕过的方法那么直接利用脚本即可。 先用or运算的php脚本生成需要的规则文件(.txt文件)。如下图直接把需要绕过的正则替换成题目的正则就好&#xff1a; ​​ 再用python脚本基于刚刚生成的txt文件跑出payload&#xff0c;如下图&…

9.独立看门狗IWDG窗口看门狗WWDG编码思路

前言&#xff1a; 看门狗是维护系统稳定性的一向技术&#xff0c;可以让代码跑飞及时复位&#xff0c;在产品中非常常用&#xff0c;俗话说&#xff0c;重启能解决90%的问题&#xff0c;作为产品来说&#xff0c;你总不能因为一次bug就让程序卡死不动了&#xff0c;肯定要试着重…

消息队列之关于如何实现延时队列

一、延时队列的应用 1.1 什么是延时队列&#xff1f; 顾名思义&#xff1a;首先它要具有队列的特性&#xff0c;再给它附加一个延迟消费队列消息的功能&#xff0c;也就是说可以指定队列中的消息在哪个时间点被消费。 延时队列在项目中的应用还是比较多的&#xff0c;尤其像…

2024年值得关注的十大TS项目

探索未来&#xff1a;用无/低代码工具和人工智能创新重塑2024年的十大TS项目 再过几天&#xff0c;2023年就要结束了&#xff0c;我们即将迎来2024年。2023年是人工智能技术快速发展的一年&#xff0c;人工智能应用激增。人工智能技术的飞速发展给我们的生活和工作带来了巨大的…

CreateProcess error=216, 该版本的 %1 与你运行的 Windows 版本不兼容。请查看计算机的系统信息,然后联系软件发布者。

第一个go程序就出错了&#xff0c;错误提示&#xff1a; Error running ‘go build hello.go’: Cannot run program “C:\Users\Administrator\AppData\Local\Temp___go_build_hello_go.exe” (in directory “G:\go\workspace”): CreateProcess error216, 该版本的 %1 与你运…

【React Native】第一个Android应用

第一个Android应用 环境TIP开发工具环境及版本要求建议官方建议 安装 Android Studio首次安装模板选择安装 Android SDK配置 ANDROID_HOME 环境变量把一些工具目录添加到环境变量 Path[可选参数] 指定版本或项目模板 运行使用 Android 模拟器编译并运行 React Native 应用修改项…

2023-强网杯-【强网先锋-ez_fmt】

文章目录 ez_fmt libc-2.31.so检查main思路exp 参考链接 ez_fmt libc-2.31.so 检查 没有地址随机化 main 简单粗暴的printf格式化字符串漏洞 思路 泄露地址&#xff0c;覆盖返回地址形成ROP链 printf执行时栈上存在__libc_start_main243的指令的地址&#xff0c;可以泄露…

C/C++ 基础函数

memcpy&#xff1a;C/C语言中的一个用于内存复制的函数&#xff0c;声明在 string.h 中&#xff08;C是 cstring&#xff09; void *memcpy(void *destin, void *source, unsigned n);作用是&#xff1a;以source指向的地址为起点&#xff0c;将连续的n个字节数据&#xff0c;…

全国(山东、安徽)职业技能大赛--信息安全管理与评估大赛题目+答案讲解

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏…

Python算法例25 落单的数Ⅲ

1. 问题描述 给出2n2个非负整数元素的数组&#xff0c;除其中两个数字之外&#xff0c;其他每个数字均出现两次&#xff0c;找到这两个数字。 2. 问题示例 给出[1&#xff0c;2&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;4&#xff0c;5&#xff0c;3]&#xff0c…

dubbo线程池为什么耗尽

文章概述 大家可能都遇到过DUBBO线程池打满这个问题&#xff0c;报错如下&#xff0c;本文我们就一起分析DUBBO线程池打满这个问题。 cause: org.apache.dubbo.remoting.RemotingException: Server side(10.0.0.100,20881) thread pool is exhausted, detail msg:Thread pool …

Python中json模块的使用与pyecharts绘图的基本介绍

文章目录 json模块json与Python数据的相互转化 pyecharts模块pyecharts基本操作基础折线图配置选项全局配置选项 json模块的数据处理折线图示例示例代码 json模块 json实际上是一种数据存储格式&#xff0c;是一种轻量级的数据交互格式&#xff0c;可以把他理解成一个特定格式…

模型微调入门介绍一

备注&#xff1a;模型微调系列的博客部分内容来源于极客时间大模型微调训练营素材&#xff0c;撰写模型微调一系列博客&#xff0c;主要是期望把训练营的内容内化成自己的知识&#xff0c;我自己写的这一系列博客除了采纳部分训练营的内容外&#xff0c;还会扩展细化某些具体细…

【贪心】单源最短路径Python实现

文章目录 [toc]问题描述Dijkstra算法Dijkstra算法应用示例时间复杂性Python实现 个人主页&#xff1a;丷从心 系列专栏&#xff1a;贪心算法 问题描述 给定一个带权有向图 G ( V , E ) G (V , E) G(V,E)&#xff0c;其中每条边的权是非负实数&#xff0c;给定 V V V中的一个…

Packet Tracer -使用 Ping 和 Traceroute测试 网络的连通性

地址分配表 目标 第 1 部分&#xff1a;测试和恢复 IPv4 连通性 第 2 部分&#xff1a;测试和恢复 IPv6 连通性 场景 本练习中存在连通性方面的问题。除了 收集和记录有关网络的信息&#xff0c;您还需要找出 问题&#xff0c;并实施可行的解决方案来恢复网络的连通性。 注意…

c语言:求1/2+2/3+3/4+……n-1/n的和|练习题

一、题目 求1/22/33/4……n-1/n的和 如图&#xff1a; 二、思路分析 1、1/2、2/3、3/4……可以用(i/i1) 2、设置一个函数&#xff0c;求数的相加之和 三、代码截图【带注释】 四、源代码【带注释】 #include <stdio.h> int main() { int num; printf("输入…

【RabbitMQ】RabbitMQ详解(二)

RabbitMQ详解 死信队列死信来源消息TTL过期队列达到最大长度消息被拒绝 RabbitMQ延迟队列TTL的两种设置队列设置TTL消息设置TTL 整合SrpingBoot队列TTL延时队列TTL优化Rabbtimq插件实现延迟队列 死信队列 先从概念解释上搞清楚这个定义&#xff0c;死信&#xff0c;顾名思义就…

S7项目EMS输送线操作

C型钩装置是支撑轨道的挂件,通过和轨道配合可以组成寓任意输送网络。并且可以拆卸和调整。 轨道是承载重物并供载物车行走的部件,它是通过连接装置(支撑件)悬于辅梁或房架上。它分直轨和弯轨两种形式,与道岔配合,能组合成生产工艺所需的任意输送网络。 道岔是载物车沿 轨…

域内定位个人PC的三种方式(1)

会话搜集 在cmd下调用query session命令可以获得当前环境下的windows会话 NetSessionEnum 这个函数不允许直接查询是谁登陆&#xff0c;但是它允许查询是谁在访问此工作站的网络资源时所创建的网络会话&#xff0c;从而知道来自何处&#xff0c;此函数不需要高权限即可查询 第…

UE和Android互相调用

ue和android互调 这两种方式都是在UE打包的Android工程之上进行的。 一、首先是UE打包Android&#xff0c;勾选下面这项 如果有多个场景需要添加场景 工程文件在这个路径下 然后可以通过Android Studio打开&#xff0c;选择gradle打开 先运行一下&#xff0c;看看是否可以发布…