本指南将带您逐步实现 Meilisearch 的聊天补全功能,为您的应用程序创建对话式搜索体验。

聊天补全功能目前处于实验阶段,使用前必须手动启用。请参阅实验性功能了解激活说明。

先决条件

开始之前,请确保您已具备:

  • 正在运行的 Meilisearch 实例(v1.15.1 或更高版本)
  • 来自 LLM 提供商的 API 密钥(OpenAI、Azure OpenAI、Mistral、Gemini 或访问 vLLM 服务器的权限)
  • 至少一个包含可搜索内容的索引
  • 已启用聊天补全实验性功能

快速入门

启用聊天补全功能

首先启用聊天补全实验性功能:

curl \
  -X PATCH 'http://localhost:7700/experimental-features' \
  -H 'Authorization: Bearer MASTER_KEY' \
  -H 'Content-Type: application/json' \
  --data-binary '{
    "chatCompletions": true
  }'

配置聊天补全工作区

创建一个包含您LLM提供商设置的工作区。以下是不同提供商的配置示例:

curl \
  -X PATCH 'http://localhost:7700/chats/my-assistant/settings' \
  -H 'Authorization: Bearer MASTER_KEY' \
  -H 'Content-Type: application/json' \
  --data-binary '{
    "source": "openAi",
    "apiKey": "sk-abc...",
    "prompts": {
      "system": "You are a helpful assistant. Answer questions based only on the provided context."
    }
  }'

发送首个聊天补全请求

现在你可以开始一段对话:

curl \
  -X POST 'http://localhost:7700/chats/my-assistant/chat/completions' \
  -H 'Authorization: Bearer DEFAULT_CHAT_KEY' \
  -H 'Content-Type: application/json' \
  --data-binary '{
    "model": "gpt-3.5-turbo",
    "messages": [
      {
        "role": "user",
        "content": "What is Meilisearch?"
      }
    ],
    "stream": true
  }'

理解工作区

工作区允许你为不同使用场景创建独立的聊天配置:

  • 客户支持:配置以支持为中心的提示词
  • 产品搜索:针对电商查询优化
  • 文档问答:调整为技术问答场景

每个工作区维护自己的:

  • LLM 供应商配置
  • 系统提示词

使用 OpenAI SDK 构建聊天界面

由于 Meilisearch 的聊天端点是 OpenAI 兼容的,您可以使用官方的 OpenAI SDK:

import OpenAI from 'openai';

const client = new OpenAI({
  baseURL: 'http://localhost:7700/chats/my-assistant',
  apiKey: 'YOUR_MEILISEARCH_API_KEY',
});

const completion = await client.chat.completions.create({
  model: 'gpt-3.5-turbo',
  messages: [{ role: 'user', content: 'What is Meilisearch?' }],
  stream: true,
});

for await (const chunk of completion) {
  console.log(chunk.choices[0]?.delta?.content || '');
}

错误处理

当使用 OpenAI SDK 与 Meilisearch 的聊天补全端点时,流式响应中的错误会被官方 OpenAI SDK 原生处理。这意味着您可以直接使用 SDK 内置的错误处理机制,无需额外配置:

import OpenAI from 'openai';

const client = new OpenAI({
  baseURL: 'http://localhost:7700/chats/my-assistant',
  apiKey: 'YOUR_MEILISEARCH_API_KEY',
});

try {
  const stream = await client.chat.completions.create({
    model: 'gpt-3.5-turbo',
    messages: [{ role: 'user', content: 'What is Meilisearch?' }],
    stream: true,
  });

  for await (const chunk of stream) {
    console.log(chunk.choices[0]?.delta?.content || '');
  }
} catch (error) {
  // OpenAI SDK 会自动处理流式错误
  console.error('聊天补全错误:', error);
}

后续步骤