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


人工智能现在每天都在发展,大型语言模型变得越来越强大。通过使用ai工具,工作效率得到了显著提高,只需要输入几个字符并按下tab键,代码即可自动完成。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

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

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

先让我们看一个例子:

// index.tsinterface Height {meters: number;feet: number;}interface Mountain {name: string;height: Height;}// @ts-ignore// @magicasync function getHighestMountain(): Promise<Mountain> {// 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属性的对象。The value of this attribute is the JSON Schema object corresponding to the Mountain interface.。

接下来我们重点分析@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代码。

ChatGPT Writer ChatGPT Writer

免费 Chrome 扩展程序,使用 ChatGPT AI 生成电子邮件和消息。

ChatGPT Writer 106 查看详情 ChatGPT Writer

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库中有关人工智能功能的文档可以供您阅读,关于这一部分。

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

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

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

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

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

以上就是当TS遇上AI,会发生什么?的详细内容,更多请关注其它相关文章!


# 我们可以  # 平顶山专业seo首选  # 动态网站建设方案表  # 店铺营销推广数据  # 民宿营销及推广  # 湛江论坛推广招聘网站  # 苏州网站建设加盟推荐  # 独立网站seo难吗  # 软文免费推广网站大全  # 地产网站推广联系方式  # 保定网站建设方案有哪些  # 珠穆朗玛峰  # 到你  # 人工智能  # 所需  # 腾讯  # 库中  # 太多  # 丰田  # 本田  # 数据结构  # type  # draft  # fig  # 工具 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 午报 | 字节跳动要造机器人;东方甄选首次启动自有APP|直播|  昆仑万维与全球领先的元宇宙公司Meta达成商务合作,共同认可昆仑万维在XR领域的技术实力  面向AI大模型,腾讯云首次完整披露自研星脉高性能计算网络  北京市通用人工智能产业创新伙伴计划名单公布,京东科技入选“算力伙伴”  先进技术在防止全球数据丢失方面的作用  前特斯拉总监、OpenAI大牛Karpathy:我被自动驾驶分了心,AI智能体才是未来!  谷歌推出新 AI 工具 Imagen Editor,一句话对图片二次创作  人工智能和神经网络有什么联系与区别?  全面拥抱大模型浪潮,ISC 2025打造全球首场AI数字安全峰会  2025WRC世界机器人大赛锦标赛(烟台)收官!斯坦星球勇夺VEX赛项冠亚军!  云南首例达芬奇机器人微创心脏手术成功开展  美版贴吧8000小组自爆停摆!拒绝数据被谷歌OpenAI白嫖,CEO被网友骂翻:背刺第三方应用  城市在采用人工智能方面进展如何?  全媒封面丨⑤商汤科技:原创AI算法“发电厂”  国内通用人形机器人将发布、产业加速突破  新华三集团总裁兼首席执行官于英涛:人工智能时代需要想象力,更需要精耕务实  微软AR/VR专利提出使用时间复用谐振驱动产生双极性电源  30+大模型齐聚,大模型成世界人工智能大会“顶流”  中国最强AI研究院的大模型为何迟到了  大型无人机FH-98国内首次夜航转场成功  谷歌新安卓机器人logo曝光:头更大了  七大主流AI企业包括OpenAI、谷歌等联合承诺:引入水印技术,并允许第三方审核AI内容  田渊栋新作:打开1层Transformer黑盒,注意力机制没那么神秘  华为AI大模型将融入HarmonyOS 4  首部国内AI辅助动画片《魔游纪:人工智能辅助篇》预告发布  创新全场景清洁方案!海尔商用机器人首发上市  数据显示:人工智能相关专业热度上升最快 考古、美术、生物医学工程等小众专业火了  世界周刊丨AI“棱镜”?  SnapFusion技术大幅提升AI图像生成速度  特斯拉人形机器人将亮相 预计售价不超过15万元  Midjourney创始人:AI应该成为人类思想的延伸  一次购买全年省心,入手科沃斯这几台机器人,省下时间就是金钱  OpenAI夺冠:人工智能为云计算带来新变革  “风乌”气象大模型科学家团队:用AI预报极端天气未来不是梦!  宇宙探索下一阶段,机器代替人类,AI会在太空探索中取代人类吗?  提高开发效率:AmazonCodeWhisperer与Amazon Glue的集成和生成式AI的应用  马斯克发推讽刺人工智能,机器学习本质是统计?  微软向美国政府提供GPT大模型,如何保证安全性?  周星驰支持的人工智能与 Web3 初创公司 Moonbox 完成 100 万美元融资  财联社首档运用虚拟人技术播报栏目《AI半小时》今晚上线!敬请期待  抛媚眼给瞎子看?微软、谷歌的AI广告被广告主抵制  重塑未来生活的五项技术趋势  朝鲜出现国产大型察打一体无人机,实力世界第二,太意外了  今年,全球客服中心支出将增长 16.2%,迎接对话式 AI 的浪潮,根据 Gartner 报告  学界业界大咖探讨:AI对数字艺术创新的推动力  码刻 | 48小时Hackathon,源码见证新生代AI创新的发生  日入400万,第一批AI骗子已上岗  AI+音乐如何“生成”动听旋律?一起揭秘世界人工智能大会开场曲  掌阅科技申请阅爱聊商标 掌阅科技申请AI相关商标  轻量级的深度学习框架Tinygrad 

 2023-06-27

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.