当TS遇上AI,会发生什么?
珍惜时间,勤奋学习!今天给大家带来《当TS遇上AI,会发生什么?》,正文内容主要涉及到等等,如果你正在学习科技周边,或者是对科技周边有疑问,欢迎大家关注我!后面我会持续更新相关内容的,希望都能帮到正在学习的大家!
人工智能现在每天都在发展,大型语言模型变得越来越强大。AI工具的使用在工作中大大提升了效率,只需输入几个字符然后按Tab键,代码就会智能地完成。
除了代码补全之外,我们还可以让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的主要处理过程可以细分为三个步骤
- 扫描包含 // @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 架构验证响应。
到这里,今天的这篇文章内容就结束了,希望对你有所帮助。
文中关于工具,人工智能的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《当TS遇上AI,会发生什么?》文章吧,也可关注golang学习网公众号了解相关技术文章。

- 上一篇
- 比亚迪再次胜出!印尼Blue Bird将采购比亚迪电动车占新增车队80%

- 下一篇
- 特斯拉Model Y召回:方向盘附件或导致潜在碰撞风险
-
- 科技周边 · 人工智能 | 47分钟前 |
- 港大与Adobe联手推出PixelFlow图像生成模型
- 135浏览 收藏
-
- 科技周边 · 人工智能 | 2小时前 | 摩尔线程 招聘诈骗 @mthreads.com 官方客服 法律责任
- 摩尔线程重磅声明发布
- 406浏览 收藏
-
- 科技周边 · 人工智能 | 5小时前 |
- 玛莎拉蒂GT2Stradale国内首秀售414.5万
- 226浏览 收藏
-
- 科技周边 · 人工智能 | 7小时前 |
- 美股反弹艰难,三大指数涨跌不一,英伟达跌3%
- 301浏览 收藏
-
- 科技周边 · 人工智能 | 8小时前 |
- 本田烨品牌GT车型上海车展首发亮相
- 358浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 508次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 484次学习
-
- 笔灵AI生成答辩PPT
- 探索笔灵AI生成答辩PPT的强大功能,快速制作高质量答辩PPT。精准内容提取、多样模板匹配、数据可视化、配套自述稿生成,让您的学术和职场展示更加专业与高效。
- 28次使用
-
- 知网AIGC检测服务系统
- 知网AIGC检测服务系统,专注于检测学术文本中的疑似AI生成内容。依托知网海量高质量文献资源,结合先进的“知识增强AIGC检测技术”,系统能够从语言模式和语义逻辑两方面精准识别AI生成内容,适用于学术研究、教育和企业领域,确保文本的真实性和原创性。
- 42次使用
-
- AIGC检测-Aibiye
- AIbiye官网推出的AIGC检测服务,专注于检测ChatGPT、Gemini、Claude等AIGC工具生成的文本,帮助用户确保论文的原创性和学术规范。支持txt和doc(x)格式,检测范围为论文正文,提供高准确性和便捷的用户体验。
- 39次使用
-
- 易笔AI论文
- 易笔AI论文平台提供自动写作、格式校对、查重检测等功能,支持多种学术领域的论文生成。价格优惠,界面友好,操作简便,适用于学术研究者、学生及论文辅导机构。
- 51次使用
-
- 笔启AI论文写作平台
- 笔启AI论文写作平台提供多类型论文生成服务,支持多语言写作,满足学术研究者、学生和职场人士的需求。平台采用AI 4.0版本,确保论文质量和原创性,并提供查重保障和隐私保护。
- 42次使用
-
- GPT-4王者加冕!读图做题性能炸天,凭自己就能考上斯坦福
- 2023-04-25 501浏览
-
- 单块V100训练模型提速72倍!尤洋团队新成果获AAAI 2023杰出论文奖
- 2023-04-24 501浏览
-
- ChatGPT 真的会接管世界吗?
- 2023-04-13 501浏览
-
- VR的终极形态是「假眼」?Neuralink前联合创始人掏出新产品:科学之眼!
- 2023-04-30 501浏览
-
- 实现实时制造可视性优势有哪些?
- 2023-04-15 501浏览