nlux
用几行代码把任何大语言模型接入生产级对话界面,NLUX 是 AI 前端开发者的效率利器
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
用几行代码把任何大语言模型接入生产级对话界面,NLUX 是 AI 前端开发者的效率利器
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下:你刚刚花了三天时间研究 LangChain、折腾 Prompt 工程,终于让 AI 回答了你的问题——但界面还是一个简陋的命令行。老板过来说:能不能做成像 ChatGPT 那样的对话界面?你看着满屏的 TypeScript 代码,突然感觉前路漫漫。
这正是 NLUX 要解决的问题。NLUX(Natural Language User eXperience)是一个开源的 JavaScript/React 库,核心理念只有一个:用几行代码,把任何大语言模型接入一个生产级的对话界面。无论是 OpenAI GPT 系列、Anthropic Claude、HuggingFace 开源模型,还是 LangChain/LangServe 后端,只要接入 NLUX,就能立刻拥有一个完整的聊天界面——包括消息流式输出、Markdown 渲染、代码高亮、对话头像、历史记录管理,等等。
图1:NLUX 在 Next.js 中的对话界面效果
大语言模型(LLM)的爆发让AI应用变成了触手可及的东西。然而,当开发者真正想把 LLM 接入自己的产品时,会发现一个尴尬的现实:模型本身只提供 API,返回的是 JSON 文本,而用户期待的是一个完整的对话体验——打字时逐字显示的流式响应、格式优美的 Markdown、代码块高亮、会话历史、支持多轮追问……
实现这些功能本身并不难,但重复造轮子的代价极高。每个团队都在写自己的 useChat Hook、写流式解析器、写 Markdown 渲染器、写对话气泡样式。这就像每次做饭都要先自己造一口锅——不是不行,而是效率低下。
NLUX 的创始人 Salmen Hichri(来自 nlkitai 团队)正是看到了这个痛点,决定做一件事:把对话式 AI 界面的最后一公里标准化。NLUX 不是又一个 AI 框架,它是一个 UI 库——专注于解决LLM怎么呈现给用户这个问题。
NLUX 是一个 TypeScript 编写的开源库,提供了两套核心产品:
1. @nlux/core(纯 JavaScript/TypeScript)
底层核心包,不依赖任何 UI 框架。你可以用纯 JS/TS 方式创建 AiChat 实例,手动挂载到任意 DOM 元素上。这个包非常轻量(核心约 50KB),适合在 vanilla JS 环境或自定义框架中使用。核心 API 非常直观:
import { createAiChat } from '@nlux/core';
import { LangServeAdapter } from '@nlux/langchain';
const adapter = new LangServeAdapter({ url: 'http://localhost:8000/chat' });
const aiChat = createAiChat();
aiChat.setAdapter(adapter);
aiChat.mount(document.getElementById('chat-root'));
这段代码完成后,用户看到的是一个完整的对话界面,包含输入框、发送按钮、历史消息、流式响应——无需写一行 CSS 或 HTML。
2. @nlux/react(React 组件)
如果你使用 React,NLUX 提供了 <AiChat /> 组件和 useChatAdapter Hook,让集成更加声明式:
import { AiChat } from '@nlux/react';
import { LangServeAdapter } from '@nlux/langchain';
export default function ChatPage() {
const adapter = useLangServeAdapter({
dataTransferMode: 'stream',
url: '/api/chat'
});
return <AiChat adapter={adapter} conversationOptions={{ historyBufferSize: 50 }} />;
}
<AiChat /> 组件自带完整的样式系统,支持深色/浅色模式、自定义对话头像(Assistant/User)、消息气泡样式、Markdown 渲染(表格、列表、代码块带语法高亮)。开箱即用,无需额外配置。
NLUX 最有价值的设计理念是统一抽象层。它不绑定任何特定 AI 提供商,而是通过适配器(Adapter)模式,支持接入任何 LLM 后端:
| 适配器 | 包名 | 支持场景 |
|---|---|---|
| OpenAI | @nlux/openai | OpenAI GPT-4o/GPT-4 Turbo API |
| HuggingFace | @nlux/hf | HuggingFace Inference API + 本地模型 |
| LangChain | @nlux/langchain | LangChain LangServe 部署的后端 |
| NLBridge | @nlux/nlbridge | 自定义后端,按标准协议接入 |
| Bedrock | @nlux/bedrock | AWS Bedrock(Claude 等) |
这种适配器架构的优势在于:切换 LLM 提供商不需要改 UI 代码。比如今天用 OpenAI,明天要换成 Claude,只需换一个 Adapter,其余代码完全不用动。对于需要对比不同模型效果的 AI 产品团队来说,这个特性非常实用。
对话式 AI 的灵魂在于流式输出——用户发出消息后,AI 的回答不是啪一下全部出现,而是一个字一个字吐出来,给用户一种正在思考的感觉。这看起来简单,实现起来却涉及 SSE(Server-Sent Events)、ReadableStream API、DOM 动态更新等多个技术细节。
NLUX 的 @nlux/core 内部实现了完整的流式解析管线:
这意味着,即使用 NLUX 构建一个 ChatGPT 级别的流式对话界面,开发者不需要写任何流式处理代码,Adapter 自动处理,UI 自动渲染。
对于完全不了解 NLUX 的开发者,项目提供了 nlux-cli 脚手架工具,三条命令就能创建一个带 NLUX 的完整项目:
npx nlux-cli create next my-ai-app
npx nlux-cli create react my-react-app
npx nlux-cli create vanilla my-vanilla-app
脚手架会自动配置好 TypeScript、Vite 构建环境、NLUX 依赖,并生成一个可直接运行的最小示例。开发者只需要填入自己的 API Key 和后端地址,就能看到对话界面跑起来。
NLUX 擅长的场景:
NLUX 的局限:
如果把 AI 应用的技术栈分成三层:
NLUX 处于展示层,是当前 AI 开源生态中相对稀缺的环节。相比模型层和编排层已经有大量成熟方案,展示层的开源工具较少,NLUX 以 1376 Star 的体量填补了这一空白。
从 GitHub 的活跃度来看,NLUX 保持了稳定的版本迭代(当前版本 latest),拥有 600+ 单元测试覆盖,提供了详尽的文档站点(docs.nlkit.com/nlux)和 Discord 社区。
如果你是前端开发者,想给现有应用快速加上 AI 对话功能:
npm install @nlux/react @nlux/openai
# 或
npx nlux-cli create next my-ai-app
然后参考官方文档中的 Vercel AI SDK 集成指南,配合 Next.js 的 Route Handlers,10 分钟内就能让 AI 对话跑起来。
一句话总结:NLUX 是一个LLM 对话界面的 UI 工具包,它把对话式 AI 应用中最繁琐的 UI 层封装起来,让开发者把精力放在真正有价值的地方——模型调优和应用逻辑。