360 Secure SkillHub
360 安全技能中心

Ainative Vue Sdk

该 Skill 说明如何安装 @ainative/vue-sdk,并通过 provideAINative、useChat 和 useCredits 组合式函数在 Vue 3 或 Nuxt 应用中接入 AINative 聊天与积分查询,包含配置、组件示例和导出类型。

urbantech
urbantech
热度 50.19
最近更新 2026-05-11 17:35:43
分类:开发依赖:代码执行 / 第三方 API应用场景:API 集成

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add ainative-vue-sdk
Metadata
name
ainative-vue-sdk
description
Use @ainative/vue-sdk to add AI chat to Vue 3 apps. Use when (1) Installing @ainative/vue-sdk, (2) Using the useChat composable in Vue components, (3) Providing AINative config with provideAINative, (4) Displaying reactive chat messages, (5) Building chat UI with Vue 3 Composition API. Published npm package v1.0.0.

@ainative/vue-sdk

Vue 3 composables for AINative chat completions.

Install

npm install @ainative/vue-sdk

Setup: provideAINative

// main.ts
import { createApp } from 'vue';
import { provideAINative } from '@ainative/vue-sdk';
import App from './App.vue';

const app = createApp(App);

app.provide('ainative', {
  apiKey: import.meta.env.VITE_AINATIVE_API_KEY,
  baseUrl: 'https://api.ainative.studio',
});

app.mount('#app');

Or provide inside a component:

<script setup>
import { provideAINative } from '@ainative/vue-sdk';
provideAINative({ apiKey: import.meta.env.VITE_AINATIVE_API_KEY });
</script>

useChat Composable

<!-- ChatComponent.vue -->
<script setup lang="ts">
import { ref } from 'vue';
import { useChat } from '@ainative/vue-sdk';
import type { Message } from '@ainative/vue-sdk';

const { messages, isLoading, error, sendMessage, reset } = useChat({
  model: 'claude-3-5-sonnet-20241022',
  initialMessages: [],
});

const input = ref('');

async function send() {
  if (!input.value.trim()) return;
  const newMessages: Message[] = [
    ...messages.value,
    { role: 'user', content: input.value }
  ];
  input.value = '';
  await sendMessage(newMessages);
}
</script>

<template>
  <div>
    <div v-for="(msg, i) in messages" :key="i" :class="['message', msg.role]">
      <strong>{{ msg.role }}:</strong> {{ msg.content }}
    </div>

    <div v-if="isLoading">Thinking...</div>
    <div v-if="error" class="error">Error: {{ error.message }}</div>

    <input
      v-model="input"
      @keydown.enter="send"
      placeholder="Type a message..."
    />
    <button @click="send" :disabled="isLoading">Send</button>
    <button @click="reset">Reset</button>
  </div>
</template>

useChat Options

Option Type Default Description
model string — Model ID (e.g. claude-3-5-sonnet-20241022)
initialMessages Message[] [] Seed the conversation

useChat Return

Field Type Description
messages Ref<Message[]> Reactive message list
isLoading Ref<boolean> True during request
error Ref<AINativeError | null> Last error
sendMessage (msgs: Message[]) => Promise<...> Send next turn
reset () => void Clear conversation

useCredits Composable

<script setup>
import { useCredits } from '@ainative/vue-sdk';
const { balance, isLoading, error, refetch } = useCredits();
</script>

<template>
  <div v-if="!isLoading">
    Credits: {{ balance?.remaining_credits }} | Plan: {{ balance?.plan }}
    <button @click="refetch">Refresh</button>
  </div>
</template>

Nuxt Integration

// plugins/ainative.client.ts
import { provideAINative } from '@ainative/vue-sdk';
export default defineNuxtPlugin(() => {
  provideAINative({ apiKey: useRuntimeConfig().public.ainativeApiKey });
});
// nuxt.config.ts
export default defineNuxtConfig({
  runtimeConfig: {
    public: { ainativeApiKey: process.env.VITE_AINATIVE_API_KEY }
  }
});

Exports

import {
  useChat,
  useCredits,
  useAINative,
  provideAINative,
  type Message,
  type UseChatOptions,
  type UseChatReturn,
  type AINativeError,
} from '@ainative/vue-sdk';

References

  • packages/sdks/vue/src/composables/useChat.ts — useChat implementation
  • packages/sdks/vue/src/composables/useCredits.ts — useCredits implementation
  • packages/sdks/vue/src/composables/useAINative.ts — Config injection
  • packages/sdks/vue/src/index.ts — Package exports