
1. 项目概述从“令牌”到“词元”的认知跃迁最近在跟几个做AI应用开发的朋友聊天发现一个挺有意思的现象大家嘴里常说的“Token”理解起来完全是两码事。搞大模型API调用的觉得Token就是计费单位琢磨着怎么优化提示词省点钱做前后端开发的第一反应是JWTJSON Web Token想着怎么实现登录验证和接口鉴权而研究多模态和具身智能的同行已经开始讨论“词元”Token作为统一的信息基元如何打通文本、图像、音频乃至物理动作。这让我意识到“Token”这个概念正在经历一场深刻的范式转移。它早已超越了单一的技术术语正在成为全模态智能时代最底层的“语言原子”和交互基石。我们今天要聊的就是这场从“令牌”到“词元”的认知升级以及它背后蕴藏的技术逻辑和未来交互的无限可能。简单来说你可以把传统的“Token”令牌理解为一枚进入特定房间的“钥匙”或“通行证”。它的使命是单一的、临时的、功能性的——比如JWT Token核心就是验证“你是谁”然后给你开一扇门门开了它的任务就完成了大半。而全模态时代的“词元”Token更像是一种通用的、结构化的“乐高积木”。无论是你输入的一段文字、麦克风捕捉到的一句话、摄像头拍到的一张图还是传感器记录的一个手势在进入AI模型之前都会被拆解、编码成一系列这种最基础的“积木块”。模型的工作就是理解这些“积木块”的排列组合规律并生成新的、有意义的“积木块”序列输出。所以“词元”是信息的载体、理解的单元、生成的原料它是构建智能的“原子”。这篇文章就是为你梳理清楚这两层含义的来龙去脉、技术实现以及它们如何交汇共同指向一个更自然、更无缝的“全模态交互入口”。无论你是开发者、产品经理还是对AI交互感兴趣的观察者理解“从Token到词元”的演变都能帮你更好地把握下一代人机交互的核心脉络。2. 传统Token身份验证与API调用的基石在我们深入探讨那个充满想象力的“词元”世界之前有必要先扎扎实实地理解一下“Token”最经典、最广泛的应用场景。毕竟万丈高楼平地起今天几乎所有智能应用的安全与通信都建立在这套成熟的“令牌”体系之上。这部分内容可能有些技术性但我会尽量用生活中的例子帮你捋清楚。2.1 JWT你的数字身份证想象一下你去参加一个大型行业会议。在签到处你出示邀请函用户名密码登录会务组核实后不会让你一直拿着那张容易被伪造的邀请函满场跑而是会给你一个胸牌Token。这个胸牌上印着你的姓名、公司、职位Payload有会务组的特殊防伪印章Signature并且明确标注了有效期Expiry。接下来你在会场内进入各个分论坛、参与交流只需要出示这个胸牌即可无需反复报名字和公司。JWTJSON Web Token就是你在数字世界里的这个“胸牌”。它的工作流程非常清晰客户端登录用户在前端输入用户名和密码。服务端验证并签发后端服务验证凭证正确后会生成一个JWT。这个JWT由三部分组成用点号连接Header.Payload.Signature。客户端存储与携带前端收到这个JWT通常会把它存储在localStorage或HttpOnly Cookie中。携带Token访问资源此后用户访问需要权限的API比如“获取我的订单列表”前端会在HTTP请求的Authorization头部带上这个JWT格式通常是Bearer 你的JWT字符串。服务端鉴权后端API接收到请求首先验证JWT的签名是否有效防篡改然后解析Payload看看用户ID是什么、Token是否在有效期内。验证通过才执行相应的业务逻辑并返回数据。这里有几个实操中必须注意的坑注意JWT的Payload部分虽然是Base64编码但等同于明文任何人都可以解码看到内容。绝对不要在Payload里存放任何敏感信息如密码、信用卡号。它只应该放用户ID、角色这类非敏感的身份标识。注意JWT一旦签发在到期前无法主动使其失效除非服务端维护一个黑名单但这违背了JWT无状态的设计初衷。因此过期时间exp不宜设置过长对于安全要求高的场景可能需要结合Refresh Token机制。2.2 Access Token与Refresh Token短效通行证与长效续期卡沿用会议的比喻你的胸牌JWT可能只有半天有效期。半天后胸牌过期难道你要重新出去找签到处再登录一次吗这体验太差了。于是更完善的方案引入了两种TokenAccess Token和Refresh Token。Access Token访问令牌就是那个“胸牌”生命周期很短比如15分钟到2小时。它直接用于访问业务API。Refresh Token刷新令牌这是一张“续期卡”生命周期很长比如7天或30天。它不用于直接访问业务唯一的作用就是在Access Token过期时用它去换一个新的Access Token以及可能同时换一个新的Refresh Token。标准OAuth 2.0的授权码模式流程就依赖这个机制。你肯定遇到过这样的错误提示“Your access token could not be refreshed. Please log out and sign in again.” 这通常意味着你的Refresh Token也过期或失效了整个授权会话结束需要用户重新走完整的登录授权流程。JWT实现Token续签的典型逻辑 当Access Token过期前端检测到API返回401状态码时不应直接跳转登录页而应自动发起一个刷新请求到专用的/auth/refresh端点。这个请求携带有效的Refresh Token。服务端验证Refresh Token有效后就签发一套全新的Access Token和Refresh Token返回给前端。前端更新本地存储然后用新的Access Token重试刚才失败的请求。这个过程对用户是无感的保持了登录状态的持久性。2.3 API调用与计费Token大模型的“话费”当我们从“身份验证”的语境跳转到“大模型服务调用”的语境时“Token”的含义发生了第一次关键偏移。在这里Token不再是通行证而是变成了“计价单位”。你可以把它理解为手机通话的“分钟数”或者发短信的“条数”。以OpenAI的GPT系列模型为例其定价通常是按每千个Token收费。这里的Token指的是经过模型分词器Tokenizer处理后的文本基本单位。它大致对应于单词或单词的一部分对于英文对于中文则通常对应一个汉字或词语。当你向API发送一个提示Prompt和模型生成一个回复Completion时两者消耗的Token数会被加起来计费。为什么这很重要成本控制一个复杂的提示词可能轻松消耗上千个Token。理解Token的消耗是优化应用成本的核心。比如在系统指令System Prompt中精简不必要的描述在对话历史Chat History中只保留最相关的上下文都能有效节省Token。上下文长度限制所有模型都有上下文窗口限制如4K、8K、16K、128K Token等。你的输入提示历史输出回复的总Token数不能超过这个限制。因此设计应用时必须考虑如何修剪或总结过长的对话历史。输出控制你可以通过max_tokens参数限制模型单次回复的长度从而间接控制单次调用的成本和响应时间。一个常见的误区很多人以为Token数就是单词数。对于英文一个Token平均约等于0.75个单词但像“fantastic”可能被拆成“fant”和“astic”两个Token。对于中文情况更复杂一个汉字通常是一个Token但某些模型的分词器可能会将常见词组如“人工智能”视为一个Token。因此永远不要自己估算要使用模型提供商提供的官方分词工具如OpenAI的tiktoken库进行精确计算。2.4 常见问题排查实录在实际开发和运维中与Token相关的问题层出不穷。下面这个表格整理了我踩过坑的一些典型场景和解决思路问题现象可能原因排查步骤与解决方案登录失败提示“token exchange failed”或“status 403 forbidden”1. 客户端传递的授权码code错误或已过期。2. 请求Token端点时client_id或client_secret不正确。3. 重定向URI与注册时不匹配。4. 网络策略或地区限制如提示中的countryforbidden。1. 检查获取授权码的流程是否正确授权码是否一次性使用。2. 核对应用配置中的客户端凭证。3. 确保回调地址完全一致包括末尾的斜杠。4. 确认服务是否对发起请求的IP地区有访问限制。“invalid token” 或 “the antiforgery token could not be decrypted”1. Token格式错误、被篡改或已过期。2. 用于签名/加密Token的密钥Secret Key前后端不一致或已轮换。3. 在Web表单提交场景CSRF Token丢失或不匹配。1. 检查Token字符串是否完整传输是否被截断。2. 确保签发和验证Token的服务使用相同的密钥。3. 检查表单页面是否正确生成了CSRF Token提交时是否随表单一起发送。JWT Token过期后刷新失败1. Refresh Token也已过期。2. Refresh Token已被服务器撤销如用户修改密码、管理员操作。3. 刷新请求的格式或端点错误。1. 引导用户重新登录。2. 在服务端当执行敏感操作改密、登出所有设备时应立即使相关用户的Refresh Token失效。3. 对照API文档检查刷新请求的HTTP方法、头部和载荷格式。大模型API返回“maximum context length exceeded”输入的提示Prompt加上对话历史的总Token数超过了模型的上下文窗口。1. 在发送请求前用分词器计算总Token数。2. 实现对话历史的“滑窗”或“总结”机制只保留最近N轮或最重要的内容。3. 考虑使用具有更大上下文窗口的模型。GitLab CI/CD 报错 “login failed. check api token or gitlab version.”1. 在CI脚本中配置的API Token无效或权限不足。2. GitLab实例版本与CI Runner或客户端工具不兼容。1. 检查Token的Scope是否包含所需权限如api,read_registry等。2. 在GitLab上重新生成一个具有明确权限的Token进行测试。3. 查看GitLab和Runner的版本兼容性矩阵进行升级或降级。实操心得处理Token问题尤其是认证类的一定要有清晰的“生命周期”意识。脑子里要有一张图用户如何获得第一个Token登录/授权Token如何被使用携带访问如何更新刷新以及如何在必要时使其失效登出/撤销。很多复杂问题都是生命周期管理混乱导致的。3. 全模态词元统一的信息基元好了现在我们暂时把“通行证”和“话费”的概念放一放进入一个更本质、也更激动人心的讨论作为“词元”的Token。如果说之前的Token是“关于系统的元信息”谁能用、用了多少那么这里的词元就是“系统所处理的信息本身”。这是当前AI特别是多模态大模型LMMs和下一代交互范式最核心的基石。3.1 词元化将万物编码为数字序列无论输入是文本、图像、声音还是视频现代AI模型的第一步都是将其转换为模型能够处理的格式——一系列的数字也就是词元TokenID。这个过程就叫“词元化”Tokenization。文本词元化这是最直观的。比如句子“Hello, world!” 经过GPT-4的分词器可能变成[“Hello”, “,”, “ world”, “!”]这四个词元每个词元对应词表中的一个ID如15496,11,995,0。对于中文“你好世界”可能被分成[“你”, “好”, “世”, “界”]四个词元。关键在于分词不是简单的按空格或字符切分而是基于大量语料训练出来的能更好地捕捉语言语义单元。视觉词元化这是让模型“看懂”图片的关键。以Vision Transformer (ViT) 为例它首先将一张图片分割成固定大小如16x16像素的图块Patches。每个图块被展平成一个向量然后通过一个可学习的线性投影层映射到一个与文本词元向量空间对齐的维度。每一个图块向量就被视为一个视觉词元Visual Token。一张图片 thus 被表示为一个视觉词元序列。音频词元化对于声音常见的方法是先进行短时傅里叶变换STFT得到声谱图然后将声谱图也像图像一样分割成时频块Time-Frequency Patches每个块同样被编码为一个音频词元Audio Token。更先进的方法如Meta的AudioCraft使用SoundStream或EnCodec等神经音频编解码器直接将原始音频波形压缩离散化为一串音频词元。为什么统一成词元如此重要它实现了“模态对齐”。想象一下文本词元、视觉词元、音频词元经过各自的编码器后都被映射到了一个共享的、高维的语义空间里。在这个空间里“狗”这个词的文本向量和一张狗图片的视觉向量以及狗叫声的音频向量它们的表示是相近的。这就使得模型能够进行跨模态的理解和生成比如根据文本描述生成图像文生图或为视频片段生成解说词视频理解。3.2 基模大模型的世界模型当我们谈论“全模态”时我们不仅仅是在说模型能处理多种输入。更深层的含义是模型通过海量多模态数据的训练在内部构建起了一个关于世界的统一“基模”Base Model或可理解为“基础世界模型”。这个“基模”是一个庞大的参数网络它学习到的不是简单的文本接龙规则而是文本、图像、声音等不同模态数据背后共通的统计规律和语义关联。词元就是激活和查询这个“基模”的通用指令集。CLS Token的特殊角色在Transformer架构中尤其是在BERT这类编码器模型中我们经常在输入序列的开头添加一个特殊的[CLS]Token。这个Token的输出向量即它在模型最后一层的表示被广泛用于代表整个输入序列的聚合语义常用于分类任务。你可以把它理解为模型对当前输入内容的“摘要”或“核心意图”编码。在全模态模型中类似的机制也被用于提取跨模态的全局表征。从理解到生成拥有了统一的词元表示和强大的基模模型就能完成令人惊叹的任务。例如给模型输入一串视觉词元图片和文本词元问题“图中有什么动物”模型能理解问题并从其内部基模中“检索”出答案以文本词元序列的形式输出“有一只猫和一只狗”。反之输入文本词元“画一只坐在飞船里的猫”模型能“激活”相关的视觉概念并生成对应的视觉词元序列再解码成图片。实操中的考量当我们自己基于大模型API开发应用时虽然不直接接触底层的词元化和基模训练但必须理解其原理。例如在设计多模态应用的提示词Prompt时要意识到模型并非真的“看见”了图片而是处理了图片的“视觉词元序列”。因此你的文本提示需要与这些视觉词元进行有效的“对话”。清晰的指代“在左上角”、“红色的那个”和结构化的描述能极大提升模型理解的准确性。3.3 词元经济的兴起成本、限制与优化既然词元是信息处理的基本单位那么它自然也成为了一种可计量、可管理的资源。这催生了“词元经济”的概念尤其是在使用商业大模型API时。成本透明化几乎所有云服务商都按输入输出总词元数计费。你需要非常清楚你的应用场景下单次交互的平均词元消耗是多少。一个复杂的多轮对话代理AI Agent可能一次调用就消耗数万词元成本不容忽视。上下文管理的艺术模型的上下文窗口是宝贵的“工作内存”。如何高效利用这里有几个技巧系统提示词精炼化把固定不变的指令写精炼放在系统角色System Role里。避免在每次用户消息中重复。对话历史摘要对于长对话不要无脑传送全部历史。可以定期让模型自己对之前的对话做一个简短摘要然后用摘要代替冗长的原始历史作为新的上下文。这就是“在远程AI请求前减少Token”的核心策略之一。向量检索外挂知识库对于需要参考大量外部文档的场景不要试图把所有文档都塞进上下文。应该先将文档切片、向量化存储。当用户提问时先用向量检索找到最相关的几个片段只把这些片段作为上下文送给模型。这能极大节省Token并提升准确性。输出长度的博弈max_tokens参数控制生成长度。设得太小回答可能不完整设得太大既浪费钱又可能增加无关输出。一个策略是对于已知的简短回答任务如分类、提取设置较小的max_tokens对于创造性或分析性任务则设置较大的值并配合stop_sequences停止序列参数来让模型在合适的地方主动结束。一个具体案例AI Agent的Token优化假设你构建一个旅行规划Agent。用户说“我想去巴黎预算中等喜欢博物馆和美食。”低效方式Agent直接把这句话和它内部所有的工具说明、历史对话都发给大模型请求规划。这可能消耗数千Token。高效方式Agent先用一个小模型或精准提示分析用户请求提取关键约束目的地巴黎预算中等兴趣点[博物馆 美食]。这一步消耗Token极少。根据这些结构化信息Agent调用内部工具或API查询巴黎的博物馆列表、美食推荐、中等价位酒店。这些工具调用不消耗大模型Token。Agent将工具返回的精炼结果如“卢浮宫、奥赛博物馆”、“法餐推荐Bistrot、可丽饼”、“Hotel X价格适中”和原始请求一起组织成一个简洁的提示发送给大模型生成最终行程。这比把整个互联网关于巴黎的信息塞给模型要高效得多。4. 交互入口词元驱动的下一代界面理解了词元作为信息基元的普适性我们就能展望它如何重塑人机交互的入口。未来的交互入口可能不再是一个固定的图形界面GUI或命令行界面CLI而是一个由词元流驱动的、动态的、情境感知的“自然交互界面”。4.1 超越文本框多模态输入即词元流传统的交互入口是明确的键盘输入文本鼠标点击按钮。在全模态时代入口变得模糊而强大你说一句话音频被实时转译为文本词元流送入模型。你指一下屏幕摄像头捕捉手势结合屏幕坐标信息生成“指向某区域”的视觉-空间词元序列。你展示一个实物手机摄像头拍下产品图像被编码为视觉词元流模型可以识别它并给出购买链接或使用教程。你哼一段旋律音频被编码模型可以识别出歌曲或者根据旋律生成配乐。所有这些离散的、不同模态的输入都在瞬间被转化为同一种“语言”——词元序列然后被同一个基模理解和处理。这实现了真正意义上的“多模态融合交互”。4.2 动态界面生成词元到交互元素的转化模型的输出也不再仅仅是文本或一张图片。它可以输出结构化的数据这些数据能被前端解析并渲染成动态的交互界面。模型输出{“action”: “show_buttons”, “options”: [“查询天气”, “设置提醒”, “播放音乐”]}前端解析收到这个“词元”表示的指令后前端动态生成三个按钮。用户点击用户点击“查询天气”这个点击事件又被编码为“用户选择了选项1”的词元序列反馈给模型。模型继续模型接着问“请问查询哪个城市的天气”并可能同时输出一个语音合成TTS的词元流让音箱把这句话念出来。这个过程形成了一个“交互循环”用户的多模态输入 - 词元化 - 基模理解与决策 - 输出结构化指令词元- 前端/设备渲染为交互界面或动作 - 用户再次反馈…… 这个循环的流畅度直接决定了交互的自然程度。4.3 智能体的具身交互从数字词元到物理动作这是最前沿的领域即让AI智能体Agent不仅能处理数字信息还能通过词元来理解和操控物理世界。这需要将物理状态如机器人关节角度、传感器读数和动作如“向前移动0.5米”、“抓取杯子”也编码成一种特殊的“物理词元”。状态编码机器人身上的摄像头画面被编码为视觉词元激光雷达数据被编码为点云词元自身姿态被编码为向量。目标词元化用户指令“请把桌上的红色积木拿过来”被转化为文本词元并与当前的视觉词元等融合。动作生成模型基于对当前多模态状态视觉、物理的理解规划出一系列动作词元如[“look_at”, “table”],[“identify”, “red_block”],[“move_arm”, “coordinates”],[“grasp”]。动作执行机器人的底层控制器将这些高级动作词元解码为具体的电机控制指令完成抓取。在这里词元成为了连接数字智能与物理世界的“桥梁”或“交互入口”。它统一了规划层AI模型和执行层机器人硬件之间的通信协议。5. 实战构建一个简单的多模态词元感知应用理论说了这么多我们来点实际的。我将带你设计一个极简的、概念性的“多模态笔记助手”应用。它的核心功能是用户可以通过语音、文字或图片记录一条笔记助手能自动理解内容并打上标签、生成摘要。这个demo将串联起我们讨论的多个概念。5.1 系统架构设计我们的应用将采用前后端分离的架构前端Web/移动端负责采集用户的语音、文本或图片输入。后端API服务器接收前端上传的原始数据音频文件、文本、图片文件。调用不同的编码器/分词器将多模态输入统一转化为“词元序列”的某种中间表示这里为了简化我们用特征向量代替。将处理后的多模态特征向量连同任务指令发送给大模型API如GPT-4V或Claude-3。解析大模型的返回结果执行结构化操作如存储到数据库。大模型API作为核心的“基模”完成理解、推理和生成任务。5.2 核心环节实现多模态输入的统一处理这是最关键的一步。我们无法直接获得大模型内部的视觉/音频词元但我们可以模仿其思想将不同输入转化为模型能接受的格式。对于文本输入最简单直接使用大模型API的文本接口。对于图片输入我们需要使用支持视觉的模型API如GPT-4V。前端将图片以Base64编码或文件上传的形式发送到后端。后端不需要自己做视觉词元化而是直接将图片数据按照API要求如放在messages数组中一个具有image_url类型的content里发送给GPT-4V。模型会在云端完成视觉词元化。我们的后端代码大致如下以Python示例调用OpenAI APIimport base64 import requests from openai import OpenAI client OpenAI(api_keyyour-api-key) def process_image_note(image_path, user_text_prompt请描述这张图片并生成标签): # 1. 读取并编码图片 with open(image_path, rb) as image_file: base64_image base64.b64encode(image_file.read()).decode(utf-8) # 2. 构建符合GPT-4V视觉识别的消息结构 # 这里图片数据和文本提示被组织成一个多模态消息序列API会将其内部转换为统一的词元序列进行处理。 response client.chat.completions.create( modelgpt-4-vision-preview, # 或 gpt-4o messages[ { role: user, content: [ {type: text, text: user_text_prompt}, { type: image_url, image_url: { url: fdata:image/jpeg;base64,{base64_image} } } ] } ], max_tokens300 ) # 3. 解析结果 analysis_result response.choices[0].message.content # 这里可以进一步用正则或另一个LLM调用从analysis_result中提取结构化的标签和摘要 return extract_tags_and_summary(analysis_result)对于语音输入方案有多种。一种是在前端或后端使用语音转文本STT服务如OpenAI Whisper API、Azure Speech Services先将语音转为文字再按文本处理。另一种更前沿但复杂的方式是直接使用支持音频输入的多模态模型如GPT-4o将音频数据直接发送给模型处理。我们采用第一种更成熟的方案import openai # 假设使用OpenAI的Whisper API进行语音转文本 def process_audio_note(audio_file_path): with open(audio_file_path, rb) as audio_file: transcript openai.audio.transcriptions.create( modelwhisper-1, fileaudio_file ) user_text transcript.text # 得到了文本后续处理与纯文本输入完全相同 return process_text_note(user_text)要点解析分工明确在这个架构中我们将“多模态编码”词元化的重任交给了最专业的大模型API。我们的应用后端只负责“路由”和“组装”根据输入类型选择正确的API和参数格式将原始数据“喂”给模型。这大大降低了开发难度。提示工程是关键如何设计user_text_prompt直接影响模型输出的质量。对于图片笔记好的提示可能是“请用一句话摘要图片核心内容并用不超过5个关键词作为标签以JSON格式输出{\summary\: \...\, \tags\: [\...\, \...\]}”。这样我们后端就能直接解析JSON而无需处理自由文本。5.3 成本与性能优化策略这样一个应用成本主要来自两方面1) 大模型API调用按Token计费2) 语音/图像预处理服务如Whisper API可能单独计费。优化策略缓存与去重如果用户频繁上传相似图片如同一张桌子的不同角度可以在后端计算图片的特征向量指纹如使用Phash如果发现高度相似的图片可以直接返回之前处理的结果避免重复调用昂贵的视觉模型。异步处理与队列对于非实时性要求很高的笔记处理如用户上传后可以稍后看到标签不要同步等待大模型API返回。应该将任务推入消息队列如Redis、RabbitMQ由后台工作进程异步处理。这能提升前端响应速度并方便进行批量处理可能有些API对批量调用有优惠。模型分级调用不是所有任务都需要GPT-4V或GPT-4o。对于简单的文本摘要或标签生成可以先尝试用更便宜、更快的模型如GPT-3.5-Turbo。如果结果置信度不高例如模型自己输出“我不确定”再fallback到更强大的模型。这种“级联”或“路由”策略能有效平衡成本与效果。输入预处理与压缩对于图片在上传前可以在前端进行合理的压缩和缩放在保证清晰度的前提下减少文件大小从而降低传输开销和Base64编码后的文本长度这会直接影响发送给API的Token数。对于语音可以设置前端录音的采样率和比特率在可接受范围内降低音频质量。5.4 可能遇到的问题与排查在开发此类应用时你会遇到一些典型问题API限流与Token耗尽所有云API都有速率限制和配额。务必在代码中实现完善的错误重试机制如指数退避和配额监控。当收到429 Too Many Requests或402 Payment Required配额不足错误时应优雅降级如告知用户服务繁忙稍后再试。多模态API的格式复杂性像GPT-4V这样的API对多模态消息的格式要求严格。务必仔细阅读最新版本文档确保content数组的结构、image_url的格式是直接Base64还是需要上传到图床返回URL完全正确。一个常见的错误是Base64编码的字符串包含了不必要的前缀或格式错误。模型输出的不确定性大模型的输出是概率性的。即使你要求输出JSON它偶尔也可能输出不规范JSON或附带额外解释。你的后端解析代码必须有足够的鲁棒性能处理这些“意外”比如使用json.loads()配合try-except或者使用更高级的“结构化输出”功能如果API支持如OpenAI的JSON Mode或Function Calling的变体。延迟与用户体验多模态模型尤其是视觉模型推理速度通常比纯文本模型慢。直接同步调用会导致前端长时间等待。务必给前端设计加载状态并考虑采用流式响应Streaming。对于文本摘要可以边生成边返回对于图片分析可以先返回一个“正在分析”的状态待后端异步处理完成后再通过WebSocket或轮询更新结果。构建这个demo的过程本质上就是在实践“全模态词元”的思想我们将不同形态的用户输入通过合适的通道送达一个统一的、强大的“基模”进行处理再将基模输出的“词元序列”在这里表现为结构化的文本指令转化为应用的实际功能。这个模式将是未来十年智能应用开发的经典范式。