
大模型AI 应用后端【免费下载链接】TypeChatTypeChat is a library that makes it easy to build natural language interfaces using types.项目地址https://gitcode.com/gh_mirrors/ty/TypeChat点击查看免费下载TypeChat 的 Restaurant 示例python/examples/restaurant演示了如何把一段充满复合句、干扰信息和修正表达的自然语言点餐请求翻译成严格校验过的 JSON 订单对象并进一步生成一份不依赖大语言模型的用户意图摘要用于人工确认。读完本文你将掌握该示例的完整运行方式、Order类型 Schema 的设计思路、TypeChat 的翻译—校验—修复闭环原理以及意图摘要必须脱离 LLM 生成这一关键工程实践。一、示例定位以名词承载更复杂的语言输入Restaurant 示例与 Coffee Shop 示例python/examples/coffeeShop一样属于把用户意图捕获为一组名词订单条目的类型但它的输入语言复杂度明显更高句子中包含多个并列的订单条目、对已有条目的追加修正如把其中一个香肠披萨做成小份、与订单无关的干扰句闲聊以及口语化的别名如MJ指代 Mack and Jacks。正如 README 所述这个示例天然充当语言模型的压力测试它清晰地区分出较简单的模型与更先进的模型在解析复合句、剔除干扰、理解修正这三类语言现象时的能力差异。示例同时展示了如何生成一份用户意图摘要回显给用户确认。二、快速运行 Restaurant 示例运行该示例需要 Python 3.11 与 hatch或直接使用 venv pip具体环境搭建步骤见 python/examples/README.md。环境准备好后# 进入 python 目录 hatch shell # 或使用 venv # python -m venv ../.venv source ../.venv/bin/activate pip install .[examples] # 在 restaurant 目录下交互式运行 python examples/restaurant/demo.py示例支持两种输入方式入口逻辑都在 demo.py 中交互模式直接运行python examples/restaurant/demo.py程序以为提示符等待输入输入quit或exit结束会话文件模式python examples/restaurant/demo.py input.txt逐行读取 input.txt 中的 13 条测试文本以#开头的行会被跳过。上述两种模式由 process_requests 统一实现它把每一行文本回调给request_handler。文件模式下 demo.py 对每条请求先打印翻译出的 JSON再检查是否存在itemType Unknown的条目并回显无法理解的内容。环境变量配置示例通过 OpenAI 或 Azure OpenAI 端点调用模型需要预先配置环境变量建议写入项目根目录的.env文件变量说明OPENAI_MODEL模型名如gpt-3.5-turbo、gpt-4OPENAI_API_KEYOpenAI API KeyOPENAI_ENDPOINT可选默认https://api.openai.com/v1/chat/completionsOPENAI_ORGANIZATION可选默认空字符串AZURE_OPENAI_ENDPOINTAzure OpenAI 完整 REST API URLAZURE_OPENAI_API_KEYAzure OpenAI API Keydemo.py 使用dotenv_values()读取环境变量再交给 create_language_model 构造模型封装该函数按OPENAI_API_KEY/AZURE_OPENAI_API_KEY是否存在自动选择端点缺少关键变量时会直接抛出异常。底层 HttpxLanguageModel 统一以temperature: 0.0、n: 1请求模型并对 429/500/502/503/504 等瞬时错误自动重试最多 3 次默认超时 10 秒。三、点餐 Schema用 TypedDict 描述名词世界订单的类型定义在 schema.py 中是整个示例的核心。它由Order、OrderItem联合类型、Pizza、Beer、Salad与兜底的UnknownText组成OrderItem Pizza | Beer | Salad class Order(TypedDict): items: list[OrderItem | UnknownText]要点如下判别字段itemTypePizza、Beer、Salad各自用Literal[Pizza]等作为类型判别翻译出的 JSON 依据该字段区分订单条目类型UnknownText兜底凡是模型无法归入任何已知类型的文本都会被放入itemType: Literal[Unknown]的条目原文保留在text字段中供程序向用户回显我没理解的部分可选字段与默认值Pizza与Salad使用totalFalse声明为部分字段可选并通过Annotated元数据向模型传达默认值如披萨size默认large、quantity默认1沙拉portion默认half、style默认Garden名词枚举披萨name限定为Hawaiian、Yeti、Pig In a Forest、Cherry Bomb四种啤酒kind给出Mack and Jacks、Sierra Nevada Pale Ale、Miller Lite等示例这些枚举直接约束了模型输出的取值空间。这些 Python 类型在 TypeChatJsonTranslator 初始化时由python_type_to_typescript_schema实现见 python_type_to_ts_nodes.py转换成一份 TypeScript 类型声明字符串作为 Prompt 的主体注入给模型。TypedDict、Literal、Annotated含Doc说明等标注都会被忠实映射为对应的 TS 接口、字面量联合类型与注释。四、输入输出对照从复合句到结构化订单示例输入文件 input.txt 里包含了多条高难度语句。README 以其中第 4 条为例Input I want three pizzas, one with mushrooms and the other two with sausage. Make one sausage a small. And give me a whole Greek and a Pale Ale. And give me a Mack and Jacks.OutputGPT-4-06131 large pizza with mushrooms 1 large pizza with sausage 1 small pizza with sausage 1 whole Greek salad 1 Pale Ale 1 Mack and Jacks注意这里订单总数始终是3 份披萨1 份蘑菇 1 份香肠大份 1 份香肠小份。Make one sausage a small把其中一份香肠改成小份是对既有条目的修正而非新增一份披萨。模型需要理解这种跨句的指代与修改关系。不同模型的分水岭README 特别标注了该输入是 GPT-3.5-turbo 及大多数其他模型的失分点典型的错误输出如下1 large pizza with mushrooms - 1 large pizza with sausage 2 large pizza with sausage 1 small pizza with sausage 1 whole Greek salad 1 Pale Ale 1 Mack and JacksGPT-3.5-turbo 会错误地把把一份香肠改成小份理解成再加两份香肠大披萨从而得出 1 份蘑菇 3 份香肠的错误结论。这直观说明面对复合句、干扰句与修正表达时不同语言模型的推理能力存在显著差异这也是本示例被设计为模型压力测试的原因。input.txt 中还有大量同类高难度样本例如第 6 条混入了与点餐无关的闲聊Lovely weather were having、Boy, those Mariners are doggin it第 10 条要求给其中两份加 extra sauce都要求模型先剔除干扰、再对子集条目做条件修饰。五、意图摘要确认环节必须绕开语言模型示例 README 强调了一个重要工程原则因为所有语言模型都是概率性的偶尔会输出错误的推断TypeChat 模式要求向用户请求确认或提供便捷的撤销方式并且确认环节绝不能依赖语言模型否则错误推断会被一并写入意图摘要。在 TypeScript 版示例中摘要函数是 main.ts 里的printOrder(order: Order)。它不调用任何模型纯粹对校验过的强类型订单对象做格式化输出function printOrder(order: Order) {它之所以能放心地假设order的形态是因为 TypeChat 的校验流程已经保证模型吐出的 JSON 与Order类型一致。这份摘要的具体处理逻辑包括按itemType分派到 pizza / beer / salad 三种渲染分支对披萨按namedPizzas表展开命名披萨的默认配料并调用removeCommonStrings抵消同时出现在添加与移除列表中的配料main.ts未指定时补充默认值披萨large、沙拉half/Garden当配料不在合法清单中时打印We are out of ${...}提示缺料。在 Python 版 demo.py 中翻译成功后会先打印json.dumps(result, indent2)的结构化 JSON再对Unknown条目逐条回显原文——同样不经过模型。两者的共同点是面向用户回显的内容一律来自已校验的数据而不是模型的原始输出。强类型数据的价值之所以能安全地生成摘要是因为翻译流水线保证了数据可信。以 Python 实现为例核心链路在 translator.py 的translate方法中构造请求 Prompt把 TypeScript Schema 声明与用户意图一起发给模型_create_request_prompttranslator.py从模型输出中截取首尾花括号之间的 JSON 片段用pydantic_core.from_json解析交给 TypeChatValidator.validate_object后者通过pydantic.TypeAdapter(...).validate_json(..., strictTrue)做严格校验校验失败时把包含Validation path、失败值与原因的诊断信息_handle_errorvalidator.py拼入修复 Prompt_create_repair_prompttranslator.py最多再重试_max_repair_attempts 1次translator.py最终返回Success[T]或携带错误信息的Failureresult.py。正是这层翻译—校验—修复闭环让下游代码拿到的一定是满足Order约束的结构化数据意图摘要才有资格完全脱离模型生成。六、小结Restaurant 示例展示了 TypeChat 在名词型意图捕获方向上的进阶形态以TypedDictLiteralAnnotated定义订单 Schema把复合句、修正表达与干扰句统统翻译为严格校验过的 JSON再用纯代码生成用户可见的意图摘要用于确认。它既是检验语言模型理解能力的压力测试也是模型只负责推断、校验与回显交给确定性代码这一 TypeChat 核心模式的完整范本。进一步阅读建议Schema 定义python/examples/restaurant/schema.py运行入口python/examples/restaurant/demo.py测试语料python/examples/restaurant/input.txtTypeScript 版摘要实现typescript/examples/restaurant/src/main.ts翻译与校验内核python/src/typechat/_internal/translator.py、python/src/typechat/_internal/validator.py全部示例的环境配置与运行说明python/examples/README.md赞分享大模型AI 应用后端【免费下载链接】TypeChatTypeChat is a library that makes it easy to build natural language interfaces using types.项目地址https://gitcode.com/gh_mirrors/ty/TypeChat点击查看免费下载相关推荐深蓝词库转换解决跨平台输入法切换的终极免费方案深蓝词库转换解决跨平台输入法切换的终极免费方案 你是否曾经因为更换电脑系统而不得不重新适应新的输入法是否因为工作平台切换而丢失了多年积累的个人词库深蓝词库大模型AI 应用后端Fruit C依赖注入框架内部实现原理深度剖析从元编程到内存管理的完整技术栈Fruit C依赖注入框架内部实现原理深度剖析从元编程到内存管理的完整技术栈 Fruit C依赖注入框架 作为Google开源的现代C依赖注入解决告别复杂绘图用PlotNeuralNet与Overleaf轻松制作神经网络示意图告别复杂绘图用PlotNeuralNet与Overleaf轻松制作神经网络示意图 你是否还在为论文或演示中的神经网络结构图烦恼使用传统绘图工具手动调整每个神人工智能深度学习上一篇XAgent 反思机制全解get_posterior_knowledge 如何把执行过程沉淀为后验知识下一篇MoneyPrinterTurbo 快速上手用一个关键词 5 分钟做出 AI 短视频创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考