@ensolid/aisolid
v0.0.1
Published
AI SDK for SolidJS - 移植自 [Vercel AI SDK](https://github.com/vercel/ai) React 包
Readme
@ensolid/aisolid
AI SDK for SolidJS - 移植自 Vercel AI SDK React 包
安装
pnpm add @ensolid/aisolid ai功能特性
- ✅
useChat- 用于聊天对话 - ✅
useCompletion- 用于文本补全 - ✅
useAssistant- 用于助手对话 - ✅ 完整的 TypeScript 类型支持
- ✅ 流式响应支持
- ✅ 自动状态持久化(localStorage)
- ✅ 错误处理
- ✅ 可取消的请求
使用方法
useChat
用于实现聊天对话功能:
import { useChat } from '@ensolid/aisolid';
function ChatComponent() {
const { messages, input, handleInputChange, handleSubmit, isLoading } = useChat({
api: '/api/chat',
});
return (
<div>
<div>
{messages().map((message) => (
<div key={message.id}>
<strong>{message.role}:</strong> {message.content}
</div>
))}
</div>
<form onSubmit={handleSubmit}>
<input
value={input()}
onInput={handleInputChange}
placeholder="输入消息..."
/>
<button type="submit" disabled={isLoading()}>
发送
</button>
</form>
</div>
);
}useCompletion
用于文本补全功能:
import { useCompletion } from '@ensolid/aisolid';
function CompletionComponent() {
const { completion, input, handleInputChange, handleSubmit, isLoading } = useCompletion({
api: '/api/completion',
});
return (
<div>
<div>{completion()}</div>
<form onSubmit={handleSubmit}>
<input
value={input()}
onInput={handleInputChange}
placeholder="输入提示..."
/>
<button type="submit" disabled={isLoading()}>
生成
</button>
</form>
</div>
);
}useAssistant
用于助手对话功能:
import { useAssistant } from '@ensolid/aisolid';
function AssistantComponent() {
const { messages, input, handleInputChange, handleSubmit, status } = useAssistant({
api: '/api/assistant',
});
return (
<div>
<div>
{messages().map((message) => (
<div key={message.id}>
<strong>{message.role}:</strong> {message.content}
</div>
))}
</div>
<form onSubmit={handleSubmit}>
<input
value={input()}
onInput={handleInputChange}
placeholder="输入消息..."
disabled={status() === 'in_progress'}
/>
<button type="submit" disabled={status() === 'in_progress'}>
{status() === 'in_progress' ? '处理中...' : '发送'}
</button>
</form>
</div>
);
}API 参考
useChat
选项
api(string): API 端点 URL,默认为/api/chatid(string): 用于持久化消息的唯一 IDinitialMessages(Message[]): 初始消息列表initialInput(string): 初始输入值onResponse(function): 响应回调onFinish(function): 完成回调onError(function): 错误回调headers(object): 自定义请求头body(object): 自定义请求体credentials(string): 请求凭证fetch(function): 自定义 fetch 函数
返回值
messages(Accessor<Message[]>): 消息列表input(Accessor): 当前输入值setInput(function): 设置输入值handleInputChange(function): 输入变化处理函数handleSubmit(function): 提交处理函数append(function): 追加消息reload(function): 重新加载最后一条消息stop(function): 停止当前请求isLoading(Accessor): 加载状态error(Accessor<Error | undefined>): 错误信息
useCompletion
选项
api(string): API 端点 URL,默认为/api/completionid(string): 用于持久化状态的唯一 IDinitialCompletion(string): 初始补全内容initialInput(string): 初始输入值onResponse(function): 响应回调onFinish(function): 完成回调onError(function): 错误回调headers(object): 自定义请求头body(object): 自定义请求体credentials(string): 请求凭证fetch(function): 自定义 fetch 函数
返回值
completion(Accessor): 补全内容input(Accessor): 当前输入值setInput(function): 设置输入值handleInputChange(function): 输入变化处理函数handleSubmit(function): 提交处理函数complete(function): 执行补全stop(function): 停止当前请求isLoading(Accessor): 加载状态error(Accessor<Error | undefined>): 错误信息
useAssistant
选项
api(string): API 端点 URL,默认为/api/assistantid(string): 用于持久化消息的唯一 IDthreadId(string): 线程 IDinitialMessages(Message[]): 初始消息列表initialInput(string): 初始输入值onResponse(function): 响应回调onFinish(function): 完成回调onError(function): 错误回调headers(object): 自定义请求头body(object): 自定义请求体credentials(string): 请求凭证fetch(function): 自定义 fetch 函数
返回值
messages(Accessor<Message[]>): 消息列表input(Accessor): 当前输入值setInput(function): 设置输入值handleInputChange(function): 输入变化处理函数handleSubmit(function): 提交处理函数append(function): 追加消息stop(function): 停止当前请求status(Accessor<'awaiting_message' | 'in_progress' | 'error'>): 状态error(Accessor<Error | undefined>): 错误信息
与 Vercel AI SDK 的兼容性
本包旨在提供与 Vercel AI SDK React 包相似的 API,但使用 SolidJS 的响应式系统。主要区别:
- 使用 SolidJS 的
createSignal和Accessor而不是 React 的useState - 使用
Accessor函数来访问响应式值(如messages()而不是messages) - 完全兼容 Vercel AI SDK 的服务器端 API
许可证
MIT
