“写笔记”支持四种格式——Word 文档、Excel 表格、Markdown、纯文本,起稿或二次编辑时都能随时切换,同一篇笔记想用哪种形态来记,都由你说了算。
md、txt、csv、json 这类纯文本则原样载入,不做多余加工。拿一张现成的表倒进来、改几笔、再导出去,等于白用一台免费的格式转换器。
要带走就在右上角点“下载”,可导出 PDF、Word、Markdown、Excel、TXT 等格式;列表卡片“⋯”菜单里,也有同样的下载入口。
在“工具”页点“+ 上传工具”即可发布:填好名称与链接,再用 Markdown 把使用方法写清楚——能解决什么问题、怎么装、怎么用,比堆介绍实在。
要分发安装包就一并上传压缩包(ZIP、RAR、7Z、TAR.GZ,最大 35MB),别人在详情页一键下载;只放链接不带附件也可以。
工具按大家的收藏热度排序,好用的自然会被顶上来。发布后可在详情页或卡片菜单里编辑、下架。
写笔记时勾上“隐藏”,这篇就只存在于你自己的账号里:不进列表、不进搜索、不上首页精选,也不会出现在任何公开的页面,链接发给别人同样打不开。
适合放密码、草稿、日记这类只给自己看的内容;想公开,去“发布”打开它,把“隐藏”的勾去掉再保存,之后编辑会默认保持原状态,不会悄悄变回公开。
你的内容会同时保存在多个副本上,系统定期做备份与完整性校验,再配合异地容灾机制:就算某台机器出问题,数据也不会丢,可以长期放心存放;特别重要的资料,仍建议你另外再留一份备份。
全站跑在容器化、模块化的现代架构上,更新、部署、回滚都很快,扩展性和稳定性都按长期运营的标准来设计(Built for reliability, designed to scale)。
这个网站最早只是一个人的笔记仓库,后来慢慢长成现在的知识中枢。设计上很克制——没有广告、没有追踪、没有推荐算法,只是干干净净地存放一些东西;既然做好了,就公开出来,万一有人用得上呢。
不做大而全,不做平台梦,保持简单、保持克制、保持好奇。所有内容都由用户贡献、由用户维护:不会突然冒出付费墙,不会在角落塞广告位,也不会把你的数据卖给第三方。
产品会持续迭代,站内日志页记录着每一次改动,改了什么都有迹可循;想了解这个站是怎么一步步走到今天的,翻翻日志就能看到来龙去脉。
如果在这里看到涉嫌违规的内容,点对应卡片右侧的“举报”按钮就能提交,我们会尽快核实处理;也谢谢你花一点时间,一起把这里维护干净。
Matching AI Modality To User Intent: Designing The Right Interface
最近我在读一篇关于AI交互模态的文章,感触挺深的。说实话,现在大家一提到AI,脑子里蹦出来的第一个界面就是那个聊天框——输入一段话,AI回一段话。这事儿吧,站在开发者的角度确实很省事:一个聊天框能处理所有输入,一个文本输出能覆盖所有结果,简直是万金油。但站在用户的角度,这玩意儿的体验可能恰恰相反。
我先讲个场景,你感受一下。
想象你是个旅客,在嘈杂的机场里狂奔。登机口临时改了,你一手拖着行李箱,一手端着咖啡,得打开航空公司的App问AI助手该往哪走。这时候App弹出一个聊天框,让你输入预订编号。你不得不停下来,把咖啡夹在胳膊底下,腾出手来在小小的输入框里敲一串又长又难记的数字。好不容易输完了,AI回复了一大段话,开头是“由于大气环流异常导致航班延误”,最后才在角落里藏着那个你真正需要的登机口号。
你说这体验糟不糟糕?用户记住了焦虑,而不是便利。工具本身没问题,但界面选错了。这就是我要聊的核心问题:AI的能力再强,如果交互模态跟用户当下场景不匹配,体验就是零。
聊天框的迷思:为什么它不该是默认选项
从产品开发的角度看,聊天框确实诱人。它是一个空白画布,似乎什么都能处理。但问题恰恰出在这里——空白意味着用户需要自己去探索边界。
输入的隐性门槛:语言屏障
你想想,一个空白的输入框摆在你面前,你脑子里第一个念头是什么?大概率是“我该说什么?” 这在UX里有个专门的说法叫“选择瘫痪”(choice paralysis)。在传统图形界面里,菜单、按钮、图标都在告诉你“我能做这个、那个、还有那个”。聊天框呢?它啥也不说,全靠你猜。
更麻烦的是,写提示词本身是一种创造性行为。你得把一个模糊的想法转化成精确的文字指令。这听起来简单,但实际操作起来非常反人类。
举个例子:一个数据分析师想在表格里找某个趋势。传统做法是点一下筛选按钮,或者排序一下。但在聊天界面里,他得写出一句完整的自然语言来描述这个逻辑。再比如,一个经理要调整团队排班。拖拽日历上的方块多直观啊,但换成聊天框,他得用文字描述“把张三周二的班跟李四周三的班对调”——这中间多了一层翻译工作,认知负担直接翻倍。
对于设计师来说更明显。你知道自己想要什么样的光影效果,但让你用文字描述“在侧逆光下,物体边缘产生柔和的散射光晕”——这难度比直接拉个滑块高多了。所以在很多场景下,滑块、颜色选择器、按钮这些传统控件,比一个文本框更适合做输入。
输出的认知税:为什么要逼用户读长文?
聊完输入,我们看输出。AI回复一大段文字,看起来挺全面,但文字是串行介质——你的大脑必须一个字一个字地读过去才能提取信息。这很慢。
当然,有些场景确实需要文字。比如分析复杂的法律条款,或者审阅详细的病史。但问题在于,很多团队把文字当成了默认输出,完全没考虑用户到底想干嘛。
想象一下,你问AI项目进度。你想要的是一张颜色编码的仪表盘,一眼就能看出哪些任务延期了。结果AI回了三段话,列举了这周完成的每一项任务。你必须从头读到尾,然后在脑子里自己总结出那个关键信息。本来一秒能搞定的事,变成了一个阅读理解任务。
这个认知税在专业场景下会被放大。医生问病人生命体征,他需要的是清晰的数字显示,不是一段描述。股票交易员看价格异动,他需要的是即时折线图,不是一篇价格走势的文字说明。在这些场景里,速度和准确性就是一切,文字恰恰是这两者的敌人。
模态分类:先搞清楚你有哪些工具
在决定用什么模态之前,我们得有个共同的词汇表,知道到底有哪些选项。下面这张表不是排名,而是告诉你每种模态在什么场景下最合适。
| 输入模态 | 适用场景 | 输出模态 | 适用场景 |
|---|---|---|---|
| 文本输入 | 复杂查询、长指令 | 文本输出 | 详细解释、法律/医疗文档 |
| 语音输入 | 双手被占用时(开车、做饭) | 语音输出 | 无需视觉注意时(驾驶、运动) |
| 点击/触摸 | 选择、确认、导航 | 视觉图表 | 数据对比、趋势识别 |
| 手势/动作 | 空间操作、游戏 | 触觉反馈 | 确认、警告、导航提示 |
| 扫描/拍摄 | 物理世界数字化 | 增强现实 | 叠加信息、空间指引 |
关键点:每种模态都有它的主场。文本在解释复杂逻辑时很强,但在展示数据趋势时很弱。语音在双手被占用时很理想,但在嘈杂环境里就是灾难。图表在快速对比时无敌,但在需要深度推理时帮不上忙。
所以问题不是“哪个模态最好”,而是在用户当前的任务和场景下,哪个模态最合适。
两个实用工具:任务审计 & 输入/输出对齐矩阵
光有理论不够,我们得能落地。下面介绍两个我实际在用的工具。
工具一:任务审计(Task Audit)
任务审计的核心是把用户要做的每一件事拆成最小的动作单元,然后评估每个单元的物理和认知负荷。
操作步骤:
- 列出所有用户任务。比如在机场App里:查询登机口、改签航班、查看行李位置等。
- 拆解每个任务的动作序列。比如“查询登机口” = 打开App → 找到AI入口 → 输入预订编号 → 等待回复 → 阅读回复 → 提取登机口号 → 记住并前往。
- 评估每个动作的物理负荷(1-5分,1分是坐着不动,5分是边跑边单手操作)和认知负荷(1-5分,1分是条件反射,5分是需要深度思考)。
- 标记高负荷节点。那些物理负荷≥4或认知负荷≥4的动作,就是需要重新设计的地方。
回到机场的例子,“输入预订编号”这个动作,在跑步+拿咖啡+拖行李箱的场景下,物理负荷直接爆表(5分)。而“阅读回复提取登机口号”这个动作,在嘈杂+焦虑的环境下,认知负荷也极高(4分)。这两个节点就是需要换模态的地方。
工具二:输入/输出对齐矩阵
这个矩阵帮你在选择模态时做系统性的决策。横轴是用户意图(意图的清晰度从模糊到明确),纵轴是环境约束(物理和认知负荷从低到高)。
意图模糊(探索性) 意图明确(执行性)
高负荷环境 │ 语音输入 + 语音输出 │ 语音输入 + 短文本/符号输出
(跑步、开车)│ (例:问路“我该往哪走?”) │ (例:语音输入“登机口号”,系统回“B32”)
│ │
低负荷环境 │ 图形界面 + 视觉输出 │ 快捷键/手势 + 即时反馈
(坐着、安静)│ (例:浏览菜单,看图表) │ (例:拖拽排班,点击确认)
用法很简单:
- 确定用户当前在矩阵的哪个格子。
- 选择该格子推荐的模态组合。
- 如果现有设计不匹配,重新设计。
比如机场场景:用户意图明确(知道要查登机口),但环境负荷高(跑步、嘈杂)。矩阵推荐的是“语音输入 + 短文本/符号输出”。所以理想设计应该是:用户直接说“我的登机口在哪”,系统用超大字体和高对比度显示“B32”,而不是回一段话。
实操案例:从理论到代码
光说不练假把式。我们拿一个实际场景来走一遍整个流程。
场景:一个项目管理工具,用户想查看项目风险。
第一步:任务审计
用户任务:“查看项目风险”
动作序列:
- 打开项目页面
- 找到风险区域
- 查看风险列表
- 理解每个风险的状态
- 决定是否需要采取行动
评估:
- 动作2“找到风险区域”:在传统聊天界面里,用户得输入“显示项目风险”,然后等AI回复。认知负荷中等(3分),因为用户得记住正确的指令格式。
- 动作4“理解每个风险的状态”:如果AI回复是一段文字,用户得逐句阅读。认知负荷高(4分),尤其在项目紧急时。
第二步:确定模态
用户意图:明确(想看风险状态)
环境:低负荷(坐在电脑前)
矩阵推荐:图形界面 + 视觉输出
第三步:重新设计
传统聊天方式:
用户:显示项目风险
AI:当前项目有3个高风险项:1. 后端API延迟超过SLA(严重),2. 前端构建时间过长(中等),3. 测试覆盖率低于80%(中等)。建议优先处理API延迟问题。
用户得读完整段话,然后自己总结优先级。认知负荷高。
重新设计后(图形界面):
// 前端组件示例:风险仪表盘
function RiskDashboard({ risks }) {
const priorityColors = {
critical: '#FF4444',
high: '#FF8800',
medium: '#FFCC00',
low: '#44BB44'
};
return (
<div className="risk-dashboard">
<h2>项目风险概览</h2>
<div className="risk-summary">
<div className="risk-stat">
<span className="stat-value" style={{color: priorityColors.critical}}>3</span>
<span className="stat-label">严重</span>
</div>
<div className="risk-stat">
<span className="stat-value" style={{color: priorityColors.high}}>2</span>
<span className="stat-label">高</span>
</div>
<div className="risk-stat">
<span className="stat-value" style={{color: priorityColors.medium}}>5</span>
<span className="stat-label">中</span>
</div>
<div className="risk-stat">
<span className="stat-value" style={{color: priorityColors.low}}>8</span>
<span className="stat-label">低</span>
</div>
</div>
<div className="risk-list">
{risks.map(risk => (
<div key={risk.id} className="risk-item"
style={{borderLeft: `4px solid ${priorityColors[risk.priority]}`}}>
<span className="risk-name">{risk.name}</span>
<span className="risk-impact">{risk.impact}</span>
<button className="risk-action">查看详情</button>
</div>
))}
</div>
</div>
);
}
这个组件的好处:
- 视觉概览:用户一眼就能看到风险分布(3个严重,2个高...),不需要阅读。
- 颜色编码:严重性通过颜色传递,符合人类的并行处理能力。
- 可操作:每个风险项都有“查看详情”按钮,用户可以直接点击,不需要打字。
第四步:处理边界情况
不是所有情况都适合图形界面。比如用户想深入分析某个风险的原因。这时候可以混合模态:
// 混合模态设计:图形概览 + 文本深度分析
function RiskDetailView({ riskId }) {
const [showAnalysis, setShowAnalysis] = useState(false);
const [analysis, setAnalysis] = useState('');
const handleDeepAnalysis = async () => {
// 用户点击“深度分析”按钮,触发AI文本生成
const response = await fetch('/api/risk-analysis', {
method: 'POST',
body: JSON.stringify({ riskId })
});
const data = await response.json();
setAnalysis(data.analysis);
setShowAnalysis(true);
};
return (
<div className="risk-detail">
<div className="risk-header">
<h3>{risk.name}</h3>
<span className="risk-priority-badge"
style={{backgroundColor: priorityColors[risk.priority]}}>
{risk.priority}
</span>
</div>
<div className="risk-metrics">
<div className="metric">
<label>影响范围</label>
<span>{risk.affectedUsers} 用户</span>
</div>
<div className="metric">
<label>发生概率</label>
<div className="probability-bar" style={{width: `${risk.probability * 100}%`}} />
</div>
</div>
<button onClick={handleDeepAnalysis}>
{showAnalysis ? '收起分析' : '深度分析原因'}
</button>
{showAnalysis && (
<div className="risk-analysis-text">
{analysis}
</div>
)}
</div>
);
}
这个设计的关键:
- 默认展示图形化信息(影响范围、概率条),满足快速浏览需求。
- 文本分析作为按需功能,只有用户明确想深入时才展示,不增加默认认知负荷。
- 按钮触发而非聊天框,用户不需要打字,只需点击。
一个完整的决策框架
最后,我把整个思考过程总结成一个可复用的决策框架。下次你设计AI功能时,可以按这个顺序走一遍。
第一步:理解用户意图
- 用户想做什么? 是探索(浏览、发现)还是执行(查询、操作)?
- 意图有多明确? 用户能精准描述需求,还是只有一个模糊的方向?
第二步:评估环境约束
- 物理负荷:用户双手是否被占用?是否在移动中?环境是否嘈杂?
- 认知负荷:用户当前注意力是否分散?是否处于压力状态?
第三步:选择输入模态
- 文本输入:适合意图明确、环境安静、用户能打字的情况。
- 语音输入:适合双手被占用、意图明确、环境不太嘈杂的情况。
- 点击/选择:适合探索性任务、用户不确定如何表达的情况。
- 扫描/拍摄:适合物理世界数字化、用户有实体物品的情况。
第四步:选择输出模态
- 文本输出:适合需要详细解释、深度分析、法律/医疗等需要精确语言的情况。
- 视觉输出:适合数据对比、状态概览、趋势识别、需要快速决策的情况。
- 语音输出:适合无需视觉注意、用户正在运动、需要即时提醒的情况。
- 触觉反馈:适合确认操作、导航提示、需要无声提醒的情况。
第五步:验证与迭代
- 用户测试:在实际场景中测试,观察用户是否自然使用。
- 任务完成率:用户能否高效完成任务?有没有卡住的地方?
- 认知负荷测量:可以用NASA-TLX量表测量用户的主观认知负荷。
写在最后
说到底,AI交互的设计原则跟传统UX没什么两样:了解你的用户,了解他们的场景,然后选择最匹配的交互方式。聊天框不是错,错的是把它当成唯一的选项。
下次你设计AI功能时,先问自己三个问题:
- 用户现在在做什么?(物理场景)
- 用户脑子里在想什么?(认知状态)
- 什么模态能让他们用最小的力气得到最需要的信息?
答案往往不是聊天框。
这篇文章的思路来自Victor Yocco博士的《Matching AI Modality To User Intent》,我在实际项目中实践了这些方法,加入了自己的理解和代码示例。如果你也在做AI产品的交互设计,欢迎交流。