TypeChat 工作原理与实战指南:用 TypeScript 类型构建安全、可靠的自然语言接口
大模型AI 应用后端【免费下载链接】TypeChatTypeChat is a library that makes it easy to build natural language interfaces using types.项目地址https://gitcode.com/gh_mirrors/ty/TypeChat点击查看免费下载导读TypeChat 是微软开源的一个 TypeScript 库核心理念是“Types are all you need”——开发者只需要定义好业务领域的 TypeScript 类型即 Schema库就会自动完成与大语言模型的交互构造 prompt、校验 JSON 响应、失败时自动修复、并在执行动作前向用户复述确认。本文以仓库内 FAQ 文档 为主线结合 typechat.ts、model.ts、validate.ts 等源码实现深入讲解 TypeChat 是什么、为什么有用、三大核心优势、底层工作原理、可靠性来源与语言支持现状并附上可运行的最小示例帮助你快速在自己的应用中落地这一方案。TypeChat 是什么类型驱动的自然语言接口框架TypeChat 的目标是让“构建自然语言接口”变得简单。所谓自然语言接口就是用户用口语化、非结构化的文本例如“帮我点一杯中杯拿铁多加一份浓缩”与应用交互应用需要把这句请求转换成结构精确、可被程序直接处理的数据。这里的“类型”代表应用的业务领域例如一个表示用户情绪sentiment的接口一组用户在一个音乐 App 中可以执行的动作类型一个咖啡店点单系统里的订单结构。定义好这些类型之后TypeChat 会负责其余所有工作整个过程分为三步见 FAQ 原文构造 prompt使用你定义的类型Schema向大语言模型构造提示词要求模型把用户请求翻译成符合该类型的 JSON 对象验证与修复验证 LLM 响应是否符合 Schema。如果验证失败通过进一步的语言模型交互修复不符合规范的输出复述确认在不使用 LLM 的情况下简洁地总结实例并确认其与用户意图一致。这三步在源码中都有清晰对应。在 typechat.ts 的createJsonTranslator与translate中第一步对应createRequestPrompt构造请求 prompt、第二步对应validator.validate与createRepairPrompt验证失败后追加修复 prompt、第三步则由应用层读取response.data后向用户复述确认来完成。为什么有用把模糊请求变成精确可执行的数据FAQ 给出了一个非常直观的场景假设你在做一个咖啡点单 App用户可以直接开口说订单而应用最终必须把这个请求翻译成精确、具体、可用于计费与下单的数据。如果没有 TypeChat你通常需要自己做两件事设计一套复杂的 prompt 工程方案来约束模型输出费尽心思地解析模型的自然语言响应并处理模型“凭空捏造”幻觉出来的条目和任务。TypeChat 之所以能规避这些问题关键在于所有响应都必须是结构化 JSON并且必须通过你定义的类型的校验。模型中 createFetchLanguageModel 在请求体中固定携带temperature: 0, n: 1配合约束 prompt从源头降低输出的随机性而即便模型给出了不合规的输出校验与修复机制也会把它“拉回正轨”而不是让错误数据流入业务流程。在仓库中sentiment 示例 是最小的落点用户输入一段文字模型返回{sentiment: positive}之类的 JSON程序直接打印情绪结论coffeeShop 示例 则展示了更复杂的“自然语言 → 可执行订单对象”的完整链路。三大核心优势Accurate、Approachable、SafetyFAQ 明确指出TypeChat 的创建初衷是提高自然语言接口的安全性并归纳出三大核心优势1. Accurate准确大语言模型在“将用户意图匹配到有范围的类型”这件事上表现出色TypeChat 的验证与修复机制则负责清理剩余的错误。translate的 while 循环typechat.ts正是这一优势的实现模型返回 → JSON 解析 → Schema 验证 → 失败则携带编译器诊断信息再次请求模型修复直到拿到合法实例或放弃重试。2. Approachable易上手“No more prompt engineering!”——不再需要精心调教 prompt类型就够了。而且这些类型往往已经存在于你的代码库中比如已有的领域模型、DTO、接口定义无需额外学习一套 DSL例如 JSON Schema。你只需把现成的 TypeScript 类型文件作为 Schema 传入TypeChat 自动完成序列化、拼接 prompt 与验证。3. Safety安全类型从两个层面约束模型约束领域模型只能输出类型范围内定义的字段和取值不会跑题和约束不确定性任何不在类型范围内的“想象物”都会被校验拒绝。此外在采取真实动作如下单、发消息之前向用户复述一遍实例以确认与用户意图一致构成了最后一道安全闸门。注意 FAQ 特别强调这一步是“without use of a LLM”的——即用纯程序代码复述而不是再让模型转述避免引入二次幻觉。工作原理TypeScript 类型就是规范语言FAQ 的第四个问题揭示了 TypeChat 的核心设计TypeChat 使用 TypeScript 类型作为模型响应的“规范语言”specification language。一次请求的发送方式极其精简只包含三部分用户的输入你的类型定义一段要求模型将用户输入翻译成与这些 TypeScript 类型一致的 JSON 对象的文本。createRequestPrompttypechat.ts的源码直观展示了这一点function createRequestPrompt(request: string) { return You are a service that translates user requests into JSON objects of type ${validator.getTypeName()} according to the following TypeScript definitions:\n \\\\n${validator.getSchemaText()}\\\\n The following is a user request:\n \n${request}\n\n The following is the user request translated into a JSON object with 2 spaces of indentation and no properties with the value undefined:\n; }底层验证TypeScript 编译器 API收到 AI 响应后TypeChat 在底层使用TypeScript 编译器 API来基于你提供的类型校验数据validate.ts 的createTypeScriptJsonValidator。具体机制是在内存中构造一个迷你 TypeScript 编译环境包含三份“文件”一个裁剪过的lib.d.ts仅声明Array、Object、String等最小内置类型、你的 Schema 文件/schema.ts以及一个将 JSON 对象包装成 TS 代码的/json.tscreateModuleTextFromJson把 JSON 转成import { TypeName } from ./schema; const json: TypeName {...};形式的 TypeScript 模块编译该模块并收集诊断信息优先语法诊断否则取语义诊断有错误则把诊断文本返回给上层。如果验证失败TypeChat 会把 TypeScript 编译器产生的诊断diagnostics打包成一条修复 prompt 发回给模型createRepairPrompt见 typechat.tsfunction createRepairPrompt(validationError: string) { return The JSON object is invalid for the following reason:\n \n${validationError}\n\n The following is a revised JSON object:\n; }这就是 TypeChat “保证响应类型正确”的底气约束和校验用的是同一套类型系统诊断信息直接来自编译器信息密度高、指向明确模型据此修复的成功率很高。值得注意的细节是由于 TypeScript 错误码 2740缺少必填属性默认会把缺失列表截断为 4 项“and N more”validate.ts 中的expandMissingPropertiesMessage会借助类型检查器重建完整的缺失属性列表让修复 prompt 携带的信息更完整。完整调用链一次翻译请求的全过程结合 sentiment 示例 与 interactive.ts一次完整的请求流程是createLanguageModel(process.env)根据环境变量创建模型实例model.tscreateTypeScriptJsonValidator(schema, SentimentResponse)用内存中的 TS 编译器构造验证器createJsonTranslator(model, validator)组装翻译器并赋予attemptRepair: true、stripNulls: false等默认行为typechat.ts用户输入进入translator.translate(request)在 while 循环里完成“生成 prompt → 调用模型 → 截取 JSON 片段 → JSON.parse → 可选 stripNulls → Schema 验证 → 附加业务校验 validateInstance → 失败则追加修复 prompt 再来一轮”的闭环最终返回ResultTresult.tssuccess: true时data为通过校验的类型化对象success: false时message为可读错误信息。在修复循环中translate会把模型的原始响应以assistant角色追加进 prompttypechat.ts再以user角色追加修复指令从而给模型提供完整的“上一轮输出 错误原因”上下文。attemptRepair在首次修复后会置为false确保每轮请求最多修复一次避免无限循环。可靠性从何而来多个层面的“保险丝”FAQ 用“veryreliable”非常可靠来形容 TypeChat其信心来源可以拆解为四个层面每一层都能在源码中找到对应实现1. 用模型最熟悉的语言约束它大语言模型在被限定为无歧义、形式化的输出描述时表现良好且训练数据越多表现越好。TypeScript 是全球最流行编程语言的类型系统JSON 是最流行编程语言的交换格式模型对二者都极度熟悉因此准确率高。TypeChat 刻意把 prompt 做得紧凑TypeScript 类型相比等价 JSON Schema 最多可精简 5 倍——更短的 prompt 意味着更少的噪声和更低的出错率。2. 验证 自修复机制大多数时候模型能直接返回合法实例一旦不合规TypeChat 会携带 TypeScript 编译器诊断进行自修复把“不合规输出”转变为“合规输出”。这是 FAQ 明示的可靠性核心。3. 工程化的请求参数与容错从 model.ts 的源码可以看到一系列默认安全行为请求固定temperature: 0, n: 1尽量输出确定性结果retryMaxAttempts默认 3 次、retryPauseMs默认 1000ms网络/瞬时错误自动重试429、500、502、503、504 视为可重试的瞬时错误并尊重Retry-After响应头model.tstimeoutMs默认 600000ms10 分钟超时保护防止慢端点让调用无限挂起maxResponseBytes默认 100MB 响应体积上限防止异常端点耗尽内存model.tsstripNulls默认关闭但可开启以删除可选属性上的null值——部分模型如 gpt-3.5-turbo倾向于给可选属性赋null而非省略[typechat.ts](https://link.gitcode.com/i/b1827585a9068e5eaff4a99fe79d14c0#L147-L149, L170-L193)。4. 用户的最终确认最后TypeChat 始终让用户参与最终意图确认作为最后一道安全机制在执行计费、下单等有副作用的动作前把翻译出的实例用代码简洁地复述给用户确认无误后再执行。语言支持现状与未来方向FAQ 明确说明目前 TypeChat 仅针对 TypeScript 和 JavaScript 开发。开发者若对其他语言感兴趣可在仓库的 GitHub Discussions 中参与讨论。这与仓库结构一致——typescript/ 目录包含完整的 TS 实现核心库 typechat.ts、model.ts、TS 验证器 validate.ts、Program 翻译器 program.ts 以及 Zod 适配层而 FAQ 成文之时 Python 支持尚在规划讨论中。值得注意的是当前仓库中已存在 python/ 目录包含typechatPython 包的实现与多组示例从源码结构看这是面向 Python 生态的独立移植方向但其能力与 FAQ 所述“TypeScript/JavaScript 优先”的定位并不冲突具体能力请以各目录内文档与测试为准。快速上手最小可运行示例下面以仓库内 sentiment 示例 为模板说明完整落地步骤。首先定义领域类型sentimentSchema.ts// 定义用于判断用户输入情绪的 schema export interface SentimentResponse { sentiment: negative | neutral | positive; // 文本的情绪 }然后编写入口参照 main.tsimport assert from assert; import dotenv from dotenv; import findConfig from find-config; import fs from fs; import path from path; import { createJsonTranslator, createLanguageModel } from typechat; import { processRequests } from typechat/interactive; import { createTypeScriptJsonValidator } from typechat/ts; import { SentimentResponse } from ./sentimentSchema; const dotEnvPath findConfig(.env); assert(dotEnvPath, .env file not found!); dotenv.config({ path: dotEnvPath }); const model createLanguageModel(process.env); const schema fs.readFileSync(path.join(__dirname, sentimentSchema.ts), utf8); const validator createTypeScriptJsonValidatorSentimentResponse(schema, SentimentResponse); const translator createJsonTranslator(model, validator); // 交互式处理输入或从命令行指定的文本文件逐行处理 processRequests( , process.argv[2], async (request) { const response await translator.translate(request); if (!response.success) { console.log(response.message); return; } console.log(The sentiment is ${response.data.sentiment}); });运行前提是准备好.env文件并配置模型环境变量。createLanguageModel 的读取逻辑是存在OPENAI_API_KEY时走 OpenAI必须同时配置OPENAI_MODEL如gpt-4oOPENAI_ENDPOINT可选、默认https://api.openai.com/v1/chat/completions若端点路径以/responses结尾则自动切换到 OpenAI Responses API也可用useResponsesApi显式指定见 model.ts存在AZURE_OPENAI_API_KEY时走 Azure OpenAI必须配置AZURE_OPENAI_ENDPOINT形如https://{资源名}.openai.azure.com/openai/deployments/{部署名}/chat/completions?api-version{版本}model.ts两者都没有则抛出 “Missing environment variable” 异常。若需通过代理访问模型可配置HTTPS_PROXY/HTTP_PROXY/ALL_PROXY/NO_PROXY环境变量createLanguageModel自动读取或在选项里显式传proxyUrl代理依赖是可选的undici包需执行npm install undicimodel.ts。运行时支持两种模式不带参数进入交互式会话输入quit或exit退出或传入文本文件路径逐行处理请求interactive.ts。总结TypeChat 用“类型即规范语言”这一简洁设计把自然语言接口开发中最高风险的环节——prompt 构造、输出解析、格式校验、幻觉防御——压缩为三步自动化流程并通过“TypeScript 编译器诊断驱动的自修复 用户复述确认”实现端到端的安全闭环。它的三大优势准确、易上手、安全并非营销口号而是可以在 typechat.ts、model.ts 与 validate.ts 中逐行验证的工程事实。如果你正在为应用添加自然语言入口不妨从 typescript/examples/ 下的 sentiment、coffeeShop、restaurant 等示例出发体验“定义类型 → 获得安全接口”的开发流程更深入的使用模式如 Program 翻译器与 Zod 适配可继续阅读 typescript/README.md 与 site/src/docs/typescript/basic-usage.md。赞分享大模型AI 应用后端【免费下载链接】TypeChatTypeChat is a library that makes it easy to build natural language interfaces using types.项目地址https://gitcode.com/gh_mirrors/ty/TypeChat点击查看免费下载相关推荐AionUi 远端 Agents 深度解析OpenClaw 远程网关的配置管理、设备握手与流式对话协议AionUi 远端 Agents 深度解析OpenClaw 远程网关的配置管理、设备握手与流式对话协议 本文基于仓库中「设置 → Agents → 远端 Ag人工智能AI 应用AI Agent交互助手桌面应用移动开发TypeChat用类型构建自然语言界面的革命性框架TypeChat用类型构建自然语言界面的革命性框架 TypeChat是一个革命性的自然语言界面构建框架通过将复杂的自然语言处理问题简化为清晰的类型定义问题大模型AI 应用后端Pattern Monster API完全指南开发者如何集成自定义图案生成功能Pattern Monster API完全指南开发者如何集成自定义图案生成功能 Pattern Monster是一款强大的SVG图案生成工具它提供了丰富的A上一篇GeoJSON.io终极指南5个简单步骤掌握免费在线地图数据编辑工具下一篇抖音无水印视频下载器技术架构深度解析从HTTP解析到跨平台应用实现创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考