接入

安装

浏览器(UMD)

在已有的 index.html 中插入

index.html
<body>
  <script src="https://cdn.jsdmirror.com/npm/@mujian/js-sdk@0.0.6-beta.58/dist/umd/index.js"></script>
</body>

NPM 包(适用于 React、Vue 等前端开发框架)

npm
yarn
pnpm
bun
deno
npm install @mujian/js-sdk

使用方式

浏览器(UMD)

完整示例请参考:https://git.mujian.me/mujian/h5-boilerplate/src/branch/main/assets/js/chat.js

assets/js/chat.js
const mujianSdk = window.MujianUMD.MujianSdk.getInstance();
const stopController = new AbortController();

// 发送消息。入参是用户输入
async function send(query) {
  const id = Date.now();
  addMessage("assistant", "等待回复中...", id); // 添加一个占位的AI消息。用于后续刷返回文字
  startLoading(id); // 给消息添加loading状态
  await mujianSdk.ai.chat.complete( // 调用 mujian sdk 发送请求
    query,
    (res) => {
      updateMessage(id, res.fullContent); // 流式实时更新消息
      if (res.isFinished) { // 如果流式完成结束,则停止loading状态
        stopLoading(id); // 停止loading状态
      }
    },
    stopController.signal,
    {
      parseContent: true, // 让 sdk 只返回消息内容,不会返回其他字段
    },
  );
}

// 停止发送消息
function stop() {
  stopController.abort();
}

// 渲染所有消息
async function renderAllMessages() {
  const messages = await mujianSdk.ai.chat.message.getAll(); // 通过 sdk 获取所有消息
  renderMessages(messages); // 渲染所有消息
  scrollToBottom(); // 滚动到底部
}

// 更新消息。入参是消息id和消息内容
function updateMessage(id, message) {
  if ($(`#message-assistant-${id}`).length === 0) { // 如果消息不存在,则返回
    return;
  }
  $(`#message-assistant-${id}`).text("assistant: " + message); // 更新消息内容
  scrollToBottom(); // 滚动到底部
}

// 添加消息。入参是消息角色和消息内容
function addMessage(role, message, id = null) {
  const _id = id || Date.now(); // 如果消息id不存在,则生成一个唯一id
  $("#messages").append(
    `<div id="message-${role}-${_id}" class="message ${role === "user" ? "user" : "assistant"}">${role}: ${message}</div>`, // 添加消息
  );
}

function startLoading(id) {
  $(`#message-assistant-${id}`).addClass("loading");
}

function stopLoading(id) {
  $(`#message-assistant-${id}`).removeClass("loading");
}

function clearMessages() {
  $("#messages").empty();
}

function scrollToBottom() {
  $("#messages").animate(
    { scrollTop: $("#messages").prop("scrollHeight") },
    100,
  );
}

// 渲染消息。入参是消息列表
function renderMessages(messages) {
  // console.log("messages", messages);
  messages.forEach((message) => {
    // 添加消息
    addMessage(message.role, message.content, message.id);
  });
}

// 发送消息。点击发送按钮时,获取用户输入,并发送消息
$("#send").click(async () => {
  const query = $("#input").val(); // 获取用户输入
  if (!query) { // 如果用户输入为空,则返回
    return;
  }
  $("#input").val(""); // 清空用户输入
  addMessage("user", query, Date.now()); // 添加用户消息
  await send(query); // 发送消息
});

$("#stop").click(stop); // 点击停止按钮时,停止发送消息


// 初始化。初始化幕间官方SDK
(async () => {
  await mujianSdk.init().then(async () => {
    await renderAllMessages(); // 渲染所有消息
  });
})();

React 版

详见:https://docs.mujian.ai/react/index.html

API (React Hooks)

App.js
import { useChat } from '@mujian/js-sdk/react';
import { MujianProvider } from '@mujian/js-sdk/react';

function Chat() {
 const { messages, append, regenerate, continueGenerate, stop } = useChat();
  return <div>
    {messages.map((message) => (
      <div key={message.id}>{message.content}</div>
    ))}
    <button onClick={() => append('Hello')}>Append</button>
  </div>;
}

function App() {
  return (
    <MujianProvider loadingComponent={<div>Loading...</div>}>
      <Chat />
    </MujianProvider>
  );
}
export default App;

React 组件库

我们提供了一些开箱即用的、没有样式的标准组件,如消息列表消息气泡markdown渲染等。未来还将进行扩容。

我们的官方聊天应用也是基于这套SDK和组件库开发的。所以创作者可以使用到官方同款组件和能力。

API (纯JS)

使用方式和 非 React 前端开发框架版 相同

非 React 前端开发框架版

import { MujianSDK } from '@mujian/js-sdk';

const mujian = MujianSdk.getInstance();

mujian.init().then(() => {
    console.log('init success');
    mujianSdk.ai.chat.project.getInfo().then((res) => {
        console.log('getProjectInfo success', res);
    });

    mujianSdk.ai.chat.settings.persona.getActive().then((res) => {
        console.log('getPersonaInfo success', res);
    });
});