聊天功能
/chats 路由允许您使用 LLM 技术创建对话式搜索体验
/chats
路由通过将大型语言模型(LLMs)与您的 Meilisearch 数据集成,实现了基于 AI 的对话式搜索功能。该特性允许用户使用自然语言提问,并根据您索引的内容获取上下文相关的答案。
这是一个实验性功能。使用 Meilisearch Cloud 用户界面或实验性功能端点来激活它:
聊天补全工作区对象
名称 | 类型 | 描述 |
---|---|---|
uid | 字符串 | 聊天补全工作区的唯一标识符 |
更新聊天工作区设置
为聊天工作区配置 LLM 提供商及相关设置。
路径参数
名称 | 类型 | 描述 |
---|---|---|
workspace | 字符串 | 工作区标识符 |
设置参数
名称 | 类型 | 描述 |
---|---|---|
source | 字符串 | LLM 来源:可选 "openAi" , "azureOpenAi" , "mistral" , "gemini" 或 "vLlm" |
orgId | 字符串 | LLM 提供商的组织 ID (azureOpenAi 必填) |
projectId | 字符串 | LLM 提供商的项目 ID |
apiVersion | 字符串 | LLM 提供商的 API 版本 (azureOpenAi 必填) |
deploymentId | 字符串 | LLM 提供商的部署 ID (azureOpenAi 必填) |
baseUrl | 字符串 | 提供商的基础 URL (azureOpenAi 和 vLlm 必填) |
apiKey | 字符串 | LLM 提供商的 API 密钥 (vLlm 可选) |
prompts | 对象 | 包含系统提示词和其他配置的提示词对象 |
提示词对象
名称 | 类型 | 描述 |
---|---|---|
system | 字符串 | 添加到对话开头的提示词,用于引导 LLM |
searchDescription | 字符串 | 解释内部搜索功能作用的提示词 |
searchQParam | 字符串 | 解释搜索函数 q 参数作用及使用方法的提示词 |
searchIndexUidParam | 字符串 | 解释搜索函数 indexUid 参数作用及使用方法的提示词 |
请求体
所有字段都是可选的。只有提供的字段会被更新。
响应: 200 OK
返回更新后的设置对象。请注意 apiKey
是只写字段,不会在响应中返回。
示例
聊天补全
使用与 OpenAI 兼容的接口创建聊天补全。该端点会搜索相关索引并基于检索到的内容生成响应。
路径参数
名称 | 类型 | 描述 |
---|---|---|
workspace | String | 聊天补全工作区的唯一标识符 (uid) |
请求体
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
model | String | 是 | 使用的模型,将与工作区设置中的源 LLM 相关联 |
messages | Array | 是 | 包含 role 和 content 的消息对象数组 |
stream | Boolean | 否 | 启用流式响应 (默认: true ) |
当前仅支持流式响应 (stream: true
)。非流式响应将在未来版本中提供。
消息对象
名称 | 类型 | 描述 |
---|---|---|
role | String | 消息角色: "system" (系统), "user" (用户), 或 "assistant" (助手) |
content | String | 消息内容 |
响应
响应遵循 OpenAI 聊天补全格式。对于流式响应,端点返回 Server-Sent Events (SSE) 协议。
流式响应示例
示例
获取聊天设置
获取指定聊天工作区的当前设置。
路径参数
名称 | 类型 | 描述 |
---|---|---|
workspace | String | 工作区标识符 |
响应: 200 OK
返回不包含 apiKey
字段的设置对象。
示例
列出聊天工作区
列出所有可用的聊天工作区。可以使用查询参数进行分页。
查询参数
查询参数 | 描述 | 默认值 |
---|---|---|
offset | 要跳过的工作区数量 | 0 |
limit | 要返回的工作区数量 | 20 |
响应
名称 | 类型 | 描述 |
---|---|---|
results | 数组 | 聊天工作区对象数组 |
offset | 整数 | 跳过的工作区数量 |
limit | 整数 | 返回的工作区数量 |
total | 整数 | 工作区总数 |
示例
响应: 200 OK
认证
聊天功能与 Meilisearch 的认证系统集成:
- 默认聊天 API 密钥:启用聊天功能时会创建一个新的默认密钥,具有访问聊天端点的权限
- 租户令牌:完全支持多租户应用场景
- 索引可见性:聊天搜索仅能访问提供的 API 密钥有权访问的索引
工具调用
聊天功能通过内部工具调用来搜索您的索引并提供增强的用户体验。为了获得最佳性能和用户体验,您应该在聊天补全请求中声明三个特殊工具。这些工具由 Meilisearch 内部处理,可提供关于搜索操作、对话上下文和源文档的实时反馈。
特殊工具概览
_meiliSearchProgress
:报告实时搜索进度和操作状态_meiliAppendConversationMessage
:维护对话上下文以获得更好的响应_meiliSearchSources
:提供生成响应时使用的源文档
工具声明
将以下工具包含在请求的 tools
数组中,以启用增强功能:
工具函数详解
_meiliSearchProgress
该工具用于实时报告内部搜索操作的进度。当声明此函数后,Meilisearch 会在后台执行搜索操作时调用它。
用途:提供搜索操作的透明度,通过向用户展示后台进程来减少感知延迟。
参数:
call_id
:用于追踪搜索操作的唯一标识符function_name
:正在执行的内部函数名称(例如 “_meiliSearchInIndex”)function_parameters
:包含搜索参数的 JSON 编码字符串,如q
(查询)和index_uid
示例响应:
_meiliAppendConversationMessage
由于 /chats/{workspace}/chat/completions
端点是无状态的,该工具通过请求客户端将内部消息追加到会话历史中来维护对话上下文。
用途:通过保留工具调用和结果来维护对话上下文,从而提高后续请求的响应质量。
参数:
role
:消息作者角色(“user” 或 “assistant”)content
:消息内容(针对工具结果)tool_calls
:助手发起的工具调用数组tool_call_id
:该消息所对应的工具调用 ID
示例响应:
_meiliSearchSources
该工具提供了 LLM 用于生成回复的源文档,确保透明度并允许用户验证信息来源。
用途:向用户展示哪些文档被用于生成回复,增强信任度并支持来源验证。
参数:
call_id
:与_meiliSearchProgress
中的call_id
匹配,用于关联查询与结果documents
:包含源文档的 JSON 对象,仅包含显示的属性
示例响应:
实现最佳实践
- 始终声明所有三个工具 以获得最佳用户体验
- 处理进度更新 在流式传输期间向用户显示搜索状态
- 按要求附加对话消息 为后续请求保持上下文
- 向用户展示源文档 确保透明度和可验证性
- 使用
call_id
将进度更新与其对应的源结果关联
这些特殊工具由 Meilisearch 内部处理,不会转发给 LLM 提供商。它们作为 Meilisearch 与您的应用程序之间的通信机制,用于提供增强的用户体验功能。