Skip to content

useChat ​

响应式的流式多轮聊天。

ts
import { useChat } from 'vue-llm'

const {
  messages, input, status, error, isLoading,
  sendMessage, handleSubmit, regenerate, stop, setMessages, addToolResult, clearError, isRestored,
} = useChat({ provider: ai, model: 'gpt-4o' })

发送消息 ​

ts
await sendMessage('Hello!')                       // explicit text
await sendMessage()                               // uses input.value and clears it
await sendMessage({ text: 'What is this?', files }) // with attachments
handleSubmit(event)                               // form submit helper

状态 ​

status 的取值为 'ready' | 'submitted' | 'streaming' | 'error'。在 submitted 或 streaming 期间,isLoading 为 true。失败时,error 保存该 Error,status 变为 'error';调用 clearError() 可以重置。

vue
<p v-if="status === 'submitted'">Thinking…</p>
<p v-if="error">{{ error.message }} <button @click="regenerate">Retry</button></p>

渲染 part ​

vue
<template v-for="(part, i) in msg.parts" :key="i">
  <p v-if="part.type === 'text'">{{ part.text }}</p>
  <details v-else-if="part.type === 'reasoning'"><summary>Reasoning</summary>{{ part.text }}</details>
  <img v-else-if="part.type === 'file' && part.mediaType.startsWith('image/')" :src="part.url">
  <code v-else-if="part.type === 'tool-call'">{{ part.toolName }} → {{ part.state }}</code>
</template>

选项 ​

选项类型说明
providerLLMProvider提供方实例(必填)
modelstring模型 ID(必填)
idstring聊天 ID,同时也是存储的键
systemMaybeRefOrGetter<string>系统提示词,每次请求时重新读取
initialMessagesUIMessage[]初始历史记录
bodyMaybeRef<Record<string, unknown>>每次请求时合并的额外提供方选项
providerOptionsRecord<string, unknown>静态的提供方选项(例如 maxTokens)
toolsToolDefinition[]可用的工具
onToolCall(call) => unknown执行工具调用
maxToolRoundtripsnumber每条消息的最大工具调用轮数(默认 5)
storageChatStorage持久化和恢复消息
onFinish(message, { finishReason, usage }) => void每次响应结束后调用
onError(error) => void流和存储的错误

返回值 ​

属性类型说明
messagesRef<UIMessage[]>聊天历史记录
inputRef<string>通过 v-model 绑定
statusRef<ChatStatus>请求状态
errorRef<Error | undefined>最近一次错误
isLoadingRef<boolean>是否有请求正在进行
isRestoredRef<boolean>异步存储加载期间为 false
sendMessage(input?) => Promise<void>发送文本和/或文件
handleSubmit(event?) => void发送 input.value
regenerate() => Promise<void>丢弃最后一条助手消息并重新运行
stop() => void中止当前的流
setMessages(msgs | fn) => void替换历史记录(传入 [] 会清空存储)
addToolResult({ toolCallId, result }) => void手动提供工具结果
clearError() => void重置错误状态

基于 MIT 许可发布。