ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

让AI学会问你选择题:LLM Wiki用户交互表单(单选/多选/自由文本)实现解析

让AI学会问你选择题:LLM Wiki用户交互表单(单选/多选/自由文本)实现解析 让AI学会问你选择题LLM Wiki用户交互表单单选/多选/自由文本实现解析【免费下载链接】llm_wikiLLM Wiki is a cross-platform desktop application that turns your documents into an organized, interlinked knowledge base — automatically. Instead of traditional RAG (retrieve-and-answer from scratch every time), the LLM incrementally builds and maintains a persistent wiki from your sources。项目地址: https://gitcode.com/GitHub_Trending/ll/llm_wikiLLM Wiki 是一款跨平台的 AI 知识管理桌面应用它能把你的文档自动整理成互相链接的持久化 Wiki 知识库。相比传统 RAG每次从零检索再回答的模式LLM Wiki 会增量地构建和维护一份可长期沉淀的知识库。而它聊天 Agent 里一个鲜少被注意的设计——用户交互表单user.ask——让 AI 在执行任务中途可以暂停下来向你弹出带单选、多选、自由文本的选择题等你点完提交并继续才接着干活。本文带你用最少代码看懂这套 AI 用户交互表单从 LLM 输出到界面渲染的完整链路。为什么 AI 助手需要问选择题普通聊天机器人遇到不确定的事情通常只能把问题用纯文本写在回答里然后猜一个默认行为继续执行。这在 AI Agent 场景下很危险文本提问没有结构用户回一句就选第一个模型还得再解析一次容易答非所问无法预置默认值用户面对一堆选项常常不知道该选什么没有推荐项引导无法一次收集多项信息比如格式 语言 是否启用三个问题文本对话要来回三轮。LLM Wiki 的解法是把提问升级成一个结构化工单Agent 返回一段 JSON 描述表单长什么样前端按描述动态渲染出选项卡片、复选框、输入框用户一次性填完提交答案再自动回填给 Agent 继续任务。整体链路LLM → 清洗 → 事件 → 表单 UI整个交互表单分四步流转前后端职责清晰LLM 返回user.ask工具调用Agent 循环要求模型只输出紧凑 JSON需要用户输入时返回user.ask动作后端清洗与校验Rust 侧把 JSON 解析成结构化的AgentUserInputRequest补全 ID、去重、丢弃非法字段事件推送通过AgentEvent::UserInputRequired把表单请求推给前端前端渲染 提交回填React 组件按字段类型动态渲染控件用户提交后把答案组织成一条新消息重新发给 Agent。支持 5 种字段类型还兼容多种别名LLM Wiki 的用户交互表单支持 5 种控件且对 LLM 输出手滑写错的类型名非常宽容——内置了一整套别名归一化见 runtime.rs 中的normalize_user_input_field_type控件类型归一化别名界面表现single单选radio/select/singleChoice竖向选项卡片可带推荐标签multi多选checkbox/checkboxes/multiChoice带勾选框的选项列表text单行文本input单行输入框textarea多行文本longText可拖拽高度的多行输入confirm确认开关boolean/switch单个勾选开关即使 LLM 把工具名写成askUserQuestion、AskUserQuestion这类 Claude Code 风格的叫法后端也会统一归一为user.ask见 runtime.rs 的is_user_ask_tool。对新手来说这意味着无论底层接哪家大模型表单都能稳定弹出来。后端源码解析一次安全的表单清洗工单结构AgentUserInputRequest表单在后端被建模为三层结构定义在 types.rsOption选项label展示文本 value真实取值 可选description说明 recommended推荐标记Field字段id、类型、label标题、placeholder占位提示、选项列表、defaultValue默认值Request整张表单全局唯一request_idUUID、标题、描述、字段数组。清洗逻辑脏数据进合法表单出核心函数是 runtime.rs 中的sanitize_user_input_request它做了四件对稳定性至关重要的事字段/问题双兼容同时接受fields或questions两个键避免不同模型的字段名差异ID 自动去重字段和选项的 key 冲突时自动加后缀unique_user_input_key保证前端取值不串号默认值校验单选默认值必须真实存在于选项里多选默认值必须都是合法选项否则直接丢弃默认值validate_user_input_default无效字段静默跳过没有选项的单/多选题、未知类型直接过滤一个字段都不合法才报错。此外还有字段数、选项数的上限保护MAX_USER_INPUT_FIELDS/MAX_USER_INPUT_OPTIONS防止模型话痨渲染出超长表单。前端源码解析按 Schema 动态渲染表单事件驱动userInputRequired 如何到达界面后端通过事件流推送表单请求事件枚举定义在 events.rs 的UserInputRequired { request }变体。聊天面板 chat-panel.tsx 捕获该事件后把表单挂到最后一条助手消息上数据结构见 chat-store.ts 的userInputRequest字段。表单控件一个组件覆盖 5 种类型渲染逻辑集中在 chat-message.tsx 的UserInputRequestPanel它遍历request.fields逐个交给 UserInputFieldControl——按field.type分支渲染为选项卡片、复选框、输入框或开关。体验上有两个细节值得新手注意推荐徽章recommended: true的选项会带一枚推荐角标i18n 键chat.userInputRecommended中文即推荐降低选择成本智能预填initialUserInputAnswers 会优先取defaultValue其次取推荐项/首选项多选预填空数组、开关预填false——用户几乎总能在 1 秒内完成提交。提交后答案如何唤醒 Agent用户点击提交并继续chat.userInputSubmit后handleSubmitUserInput 把所有答案格式化为一行行- 字段标题 (id): 值的文本并附上一句提示词Continue the previous task using these answers作为一条新消息重新发回 Agent。也就是说表单答案不是走特殊通道而是回归对话上下文——这保证了任意模型、任意会话历史都能无缝续跑。新手使用体验三类典型场景生成类技能确认参数比如让 Agent 生成文档/页面时它弹出主题色A 自动 / B 蓝色系推荐你点一下推荐项即可多选式范围确认要同步哪些目录勾选若干项一次提交省掉三轮问答补充自由文本表单里混排text/textarea字段让 AI 在你确认选项的同时顺带收集一段说明文字。总结为什么这个设计值得借鉴LLM Wiki 的用户交互表单用极少的代码解决了一个 Agent 通用难题协议层把提问约定成user.ask结构化 JSON与具体 UI 解耦防御层后端对 LLM 输出做别名归一、去重、默认值校验脏数据进合法表单出渲染层前端纯 Schema 驱动5 种控件一个组件全覆盖还带推荐标记与智能预填续跑层答案回灌为普通对话消息任何模型都能接着干活。这套选择题式交互让 AI 从自说自话变成了边做边确认对新手用户特别友好——想深入研读源码可以从 src-tauri/src/agent/ 目录入手重点阅读 runtime.rs 与 src/components/chat/chat-message.tsx 两个文件即可还原全文链路。【免费下载链接】llm_wikiLLM Wiki is a cross-platform desktop application that turns your documents into an organized, interlinked knowledge base — automatically. Instead of traditional RAG (retrieve-and-answer from scratch every time), the LLM incrementally builds and maintains a persistent wiki from your sources。项目地址: https://gitcode.com/GitHub_Trending/ll/llm_wiki创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表