当前位置:

首页 > 业界资讯 > 当TS遇上AI,会发生什么?

当TS遇上AI,会发生什么?

人工智能现在每天都在发展,大型语言模型变得越来越强大。工作中使用AI工具帮忙,将大大提高了工作效率,只需敲几个字符,按Tab键,代码就智能完成。除了代码补全之外,我们还可以让AI帮助我们自动化功能并返回所需的JSON数据。先让我们看一个例子://index.tsinterfaceHeight{meters:number;feet:number;}interfaceMountain{name:string;height:Height;}//@ts-ignore//@magicasyncfunctionget

人工智能现在每天都在发展,大型语言模型变得越来越强大。工作中使用AI工具帮忙,将大大提高了工作效率,只需敲几个字符,按Tab键,代码就智能完成。

当TS遇上AI,会发生什么?

除了代码补全之外,我们还可以让AI帮助我们自动化功能并返回所需的JSON数据。

先让我们看一个例子:

// index.tsinterface Height {meters: number;feet: number;}interface Mountain {name: string;height: Height;}// @ts-ignore// @magicasync function getHighestMountain(): Promise {// Return the highest mountain}(async () => {console.log(await getHighestMountain());})();

在上面的代码中,我们定义了一个 getHighestMountain 异步函数来获取世界上最高峰的信息,它的返回值是 Mountain 接口定义的数据结构。函数内部没有具体的实现,我们只是通过注释描述函数需要做什么。

编译并执行上述代码后,控制台会输出如下结果:

{ name: 'Mount Everest', height: { meters: 8848, feet: 29029 } }

世界最高的山峰是珠穆朗玛峰,它是喜马拉雅山脉的主峰,也是世界最高峰,海拔8848.86米,是不是很神奇?

接下来我就来揭秘getHighestMountain函数的秘密。

为了了解 getHighestMountain 异步函数内部做了什么,我们看一下编译后的 JS 代码:

const { fetchCompletion } = require("@jumploops/magic");// @ts-ignore// @magicfunction getHighestMountain() {return __awaiter(this, void 0, void 0, function* () {return yield fetchCompletion("{\n// Return the highest mountain\n}", {schema: "{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\"},\"height\":{\"$ref\":\"#/definitions/Height\"}},\"required\":[\"height\",\"name\"],\"definitions\":{\"Height\":{\"type\":\"object\",\"properties\":{\"meters\":{\"type\":\"number\"},\"feet\":{\"type\":\"number\"}},\"required\":[\"feet\",\"meters\"]}},\"$schema\":\"http://json-schema.org/draft-07/schema#\"}"});});}

从上面的代码可以看出,@jumploops/magic 库中的 fetchCompletion 函数在 getHighestMountain 函数内部被调用。

从这个函数的参数中,我们看到了之前TS函数的函数注释,此外,我们还看到了一个包含schema属性的对象。该属性的值为Mountain接口对应的JSON Schema对象。

接下来我们重点分析@jumploops/magic库中的fetchCompletion函数。该函数定义在fetchCompletion.ts文件中,其内部处理流程分为3步:

  • 组装 Chat Completions API 所需的提示;
  • 调用Chat Completions API获取响应结果;
  • 解析响应结果并使用 JSON 模式验证响应对象。
// fetchCompletion.tsexport async function fetchCompletion(existingFunction: string, { schema }: { schema: any }) {let completion;// (1)const prompt = `You are a robotic assistant. Your only language is code. You only respond with valid JSON. Nothing but JSON.  For example, if you're planning to return:{ "list": [ { "name": "Alice" }, { "name": "Bob" }, { "name": "Carol"}] } Instead just return:[ { "name": "Alice" }, { "name": "Bob" }, { "name": "Carol"}]...Prompt: ${existingFunction.replace('{', '') .replace('}', '').replace('//', '').replace('\n', '')}JSON Schema: \`\`\`${JSON.stringify(JSON.parse(schema), null, 2)}\`\`\``;// (2)try {completion = await openai.createChatCompletion({model: process.env.OPENAI_MODEL ? process.env.OPENAI_MODEL : 'gpt-3.5-turbo',messages: [{ role: 'user', content: prompt }],});} catch (err) {console.error(err);return;}const response = JSON.parse(completion.data.choices[0].message.content);// (3)if (!validateAPIResponse(response, JSON.parse(schema))) {throw new Error("Invalid JSON response from LLM");}return JSON.parse(completion.data.choices[0].message.content);}

在Prompt中,我们为AI设置了角色,并为它准备了一些例子来引导它返回有效的JSON格式。

调用Chat Completions API获取响应结果,直接使用openai库提供的createChatCompletion API。

解析得到响应结果后,会调用validateAPIResponse函数对响应对象进行验证。这个功能的实现也比较简单。内部使用ajv库实现基于JSON Schema的对象校验。

export function validateAPIResponse(apiResponse: any, schema: object): boolean {const ajvInstance = new Ajv();ajvFormats(ajvInstance);const validate = ajvInstance.compile(schema);const isValid = validate(apiResponse);if (!isValid) {console.log("Validation errors:", validate.errors);}return isValid;}

接下来我们要分析的是如何将TS代码编译成调用fetchCompletion函数的JS代码。

ttypescript 库在@jumploops/magic 内部使用,它允许我们在 tsconfig.json 文件中配置自定义转换器。

在transformer内部,是typescript提供的API,用于解析和操作AST,生成想要的代码。transformer内部的主要处理流程也可以分为3个步骤:

  • 扫描包含 // @magicannotation; 的 AI 函数的源代码;
  • 根据AI函数的返回值类型生成对应的JSON Schema对象;
  • 从AI函数体中提取函数注解,生成调用fetchCompletion函数的代码。

本文的重点不在于如何解析和操作 TypeScript 编译器生成的 AST 对象。如果你有兴趣,可以阅读@jumploops/magic 项目中的transformer.ts 文件。如果您想亲自体验AI功能,可以参考本文示例中package.json和tsconfig.json的配置。

package.json

{"name": "magic","scripts": {"start": "ttsc && cross-env OPENAI_API_KEY=sk-*** node src/index.js"},"keywords": [],"author": "","license": "ISC","devDependencies": {"@jumploops/magic": "^0.0.6","cross-env": "^7.0.3","ts-patch": "^3.0.0","ttypescript": "^1.5.15","typescript": "4.8.2"}}

tsconfig.json文件

{"compilerOptions": {"target": "es2016","module": "commonjs","esModuleInterop": true,"allowSyntheticDefaultImports": true,"strict": true,"skipLibCheck": true,"plugins": [{ "transform": "@jumploops/magic" }]},"include": ["src/**/*.ts"],"exclude": [ "node_modules"],}

请注意,聊天完成 API 并不总是以我们期望的格式返回有效的 JSON 对象,因此您在实践中需要添加适当的异常处理逻辑。

目前@jumploops/magic库只提供了简单的示例,尚不支持设置函数的参数。对于这一部分,您可以阅读 Marvin 库中有关 AI Functions 的文档。

如果大语言模型能够按照我们的要求可控地输出结构化数据。那么我们可以做很多事情。

目前很多低代码平台或者RPA(Robotic Process Automation)平台都可以获取对应的JSON Schema对象。

借助 @jumploops/magic 的解决方案,我们可以使低代码平台或 RPA 平台变得更加智能。例如,快速创建表单页面或以自然语言的形式发布各种任务。

最后,我们来总结一下 @jumploops/magic 库背后的工作,它使用 TypeScript 转换器获取函数的返回类型,将类型转换为 JSON Schema 对象,然后替换包含 // @magic 注释函数的源代码 函数的主体,然后调用聊天完成 API 并根据 JSON 架构验证响应。

到这里,今天的这篇文章内容就结束了,希望对你有所帮助。

本文内容来源于互联网,如有侵权请联系删除。
作者最新文章
业界资讯 人工智能
相关文章 更多
南邮光擎智算团队:GaN基Micro-LED光计算芯片从理论到流片的突破
南邮光擎智算团队:GaN基Micro-LED光计算芯片从理论到流片的突破

南京邮电大学“光擎智算”团队联合南京大学,攻克GaN基Micro-LED器件技术,成功搭建实验室级光计算验证系统。团队自主研发的5×5 Micro-LED光电计算阵列芯片已进入流片封装阶段,实现了图像识别等算力任务验证,推动光计算技术从理论走向工程落地。

苹果与铠侠签署NAND长期供应协议:3-5年长约与不设价格上限背后的供应链战略
苹果与铠侠签署NAND长期供应协议:3-5年长约与不设价格上限背后的供应链战略

苹果与铠侠签署为期3-5年的NAND闪存长期供应协议,且可能不设价格上限。此举旨在应对AI数据中心需求激增导致的芯片供应紧张,从单纯压价转向确保稳定供货。

中国人民大学AI团队揭开大语言模型的隐藏秘密
中国人民大学AI团队揭开大语言模型的隐藏秘密

一项研究揭示大语言模型在文本嵌入任务中表现平庸的根源:反嵌入矩阵边缘频谱引入高频词偏见。提出的EmbedFilter方法通过滤除该噪声,在MTEB49项任务上显著提升性能,且无需重新训练,兼容多种基线方法。

2026世界人工智能大会倒计时30天:全球首发超300款AI新品
2026世界人工智能大会倒计时30天:全球首发超300款AI新品

2026年世界人工智能大会将于7月17日至20日举办,超过300款人工智能新品全球首发,1400多位嘉宾参会,近140场论坛,展览面积超过10万平方米,促成意向合作金额达162亿元,并且推出首个自主举办的国际顶级人工智能学术会议。

“购物车”里的新动向 勾勒扩内需新图景
“购物车”里的新动向 勾勒扩内需新图景

618”期间,AI全面渗透电商,超百万商家使用AI工具提升效率。政策补贴拉动绿色智能家电及汽车消费,市场回暖。供应链升级实现仓配一体化,时效大幅提升,多链协同激活内需活力。

美颜悖论与文艺作品的“活人感”
美颜悖论与文艺作品的“活人感”

AI生成作品虽完美却缺乏“活人感”,这一悖论贯穿艺术史。《红楼梦》中已批判套路化创作。真正活人感源于创作者内化形式美规律后的即兴发挥与平衡,而非单纯拒绝美化。能否尊重生活细节、容忍碰撞,决定作品是否鲜活,这也是艺术的根本功用。

8部门发文加快“人工智能+消费”:服务领域是重点 鼓励适度超前布局城市智能设施
8部门发文加快“人工智能+消费”:服务领域是重点 鼓励适度超前布局城市智能设施

商务部等8部门发布《关于加快“人工智能+消费”发展的实施意见》,围绕服务消费和商品消费两大领域,明确居家、养老、文旅、教育等场景的AI应用方向,推广智能家居、养老机器人等产品,并适度超前布局城市智能设施。

商汤携手香港科技园共建4万P国产算力基建,首阶段预计今年完成
商汤携手香港科技园共建4万P国产算力基建,首阶段预计今年完成

商汤与香港科技园合作共建国产AI算力中心,目标2030年前实现超40000P算力规模,首阶段预计今年完成。该中心配备国产GPU集群,支撑模型训练与推理,服务本地及国际客户。商汤临港AIDC已有4.04万P算力运营经验。

亚马逊正考虑出售人工智能芯片以挑战英伟达
亚马逊正考虑出售人工智能芯片以挑战英伟达

亚马逊正考虑将其开发的TrainiumAI芯片直接出售给其他公司,以挑战英伟达主导地位。该芯片面向需要本地化数据解决方案的国际企业,亚马逊表示不会影响AWS云业务收入,谷歌也有类似计划。

广东:抢抓人工智能发展机遇,建设具有国际竞争力的软件和信息技术服务业创新中心
广东:抢抓人工智能发展机遇,建设具有国际竞争力的软件和信息技术服务业创新中心

广东省印发服务业扩能提质方案,聚焦AI机遇,建设国际竞争力的软件与信息技术创新中心,包括培育核心企业、构建AI服务体系、攻关核心技术、建设开源生态,并部署融资租赁、金融合作、算力网络、6G及智能应用。

查看更多
精品专题 更多
装机必备
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows
Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

macOS软件
macOS软件

正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

Mac软件 更多
灵活计算器
灵活计算器
macOS/iOS/Android

灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

赤友清理大师
赤友清理大师
macOS

赤友清理大师是一款为 Mac 设计的智能清理优化工具,可精准扫描垃圾、大文件、重复文件等,释放磁盘空间。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

极度公式
极度公式
Windows/macOS/Linux

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

WINDOWS 更多
Windows 10
Windows 10
Windows

Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

极度公式
极度公式
Windows/macOS/Linux

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

密码键盘
密码键盘
Windows/macOS/iOS/Android

密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。