You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Weaviate JS/TS Client v3在Next.js中所有方法失效求助

问题排查与修复方案

一、Docker Compose配置检查

  • 必须确保Weaviate正确集成Ollama向量嵌入器,环境变量配置完整:
    • 开启ENABLE_MODULES=text2vec-ollama
    • 配置OLLAMA_API_URL=http://ollama:11434(容器间通过服务名互通,不能用localhost)
    • 确认端口映射正常(默认8080),用docker ps检查Weaviate、Ollama容器是否正常运行
  • 参考正确配置片段:
version: '3.4'
services:
  weaviate:
    image: semitechnologies/weaviate:1.24.11
    ports:
      - "8080:8080"
      - "50051:50051"
    environment:
      QUERY_DEFAULTS_LIMIT: 20
      AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
      PERSISTENCE_DATA_PATH: "./data"
      ENABLE_MODULES: text2vec-ollama
      OLLAMA_API_URL: http://ollama:11434
      CLUSTER_HOSTNAME: 'node1'
  ollama:
    image: ollama/ollama:latest
    ports:
      - "11434:11434"
    volumes:
      - ./ollama:/root/.ollama

二、Next.js服务器组件客户端使用修正

由于page.tsx是服务器组件,需注意以下几点:

  1. 客户端初始化必须在服务器环境完成,连接参数匹配运行场景:
    • 本地直接运行Next.js用host: 'localhost:8080';若Next.js也在容器内,改用Weaviate服务名weaviate:8080
  2. 所有异步操作必须加await,确保流程等待执行完成
  3. 必须在请求头指定Ollama使用的模型,否则无法完成向量化
  • 修正后的示例代码:
import { WeaviateClient, connectToWeaviate } from 'weaviate-ts-client';

async function handleWeaviateOperations() {
  let client: WeaviateClient | null = null;
  try {
    // 初始化客户端
    client = connectToWeaviate({
      scheme: 'http',
      host: 'localhost:8080',
      headers: { 'X-Ollama-Model': 'llama3' }, // 指定Ollama模型
    });

    // 检查集合是否存在
    const exists = await client.collections.exists('Podcasts');
    console.log('Podcasts集合是否存在:', exists);

    // 创建集合(配置Ollama向量化)
    if (!exists) {
      const createResult = await client.collections.create({
        name: 'Podcasts',
        vectorizer: 'text2vec-ollama',
        vectorIndexConfig: { distance: 'cosine' },
      });
      console.log('集合创建结果:', createResult);
    }

    // 插入数据
    const insertResult = await client.collections.data.insertMany('Podcasts', [
      { title: 'Episode 1', content: 'Next.js 14新特性详解' },
      { title: 'Episode 2', content: 'Weaviate向量数据库入门' },
    ]);
    console.log('插入数据结果:', insertResult);

    // 遍历数据
    const iterator = client.collections.data.iterator('Podcasts');
    for await (const obj of iterator) {
      console.log('遍历到的数据:', obj.properties);
    }
  } catch (error) {
    console.error('操作失败:', error);
  } finally {
    if (client) {
      // 删除集合并等待执行完成
      const deleteResult = await client.collections.delete('Podcasts');
      console.log('集合删除结果:', deleteResult);
      // 二次验证删除状态
      const existsAfterDelete = await client.collections.exists('Podcasts');
      console.log('删除后Podcasts集合是否存在:', existsAfterDelete);
    }
  }
}

// 服务器组件中调用操作
export default async function Home() {
  await handleWeaviateOperations();
  return <div>Weaviate操作已执行,查看控制台日志</div>;
}

三、关键错误点排查

  • 遗漏await:所有客户端方法都是异步Promise,不加await会直接跳过执行,导致操作未生效
  • 未指定Ollama模型:Weaviate无法调用Ollama生成向量,会导致集合创建、数据插入失败
  • Docker网络隔离:若Next.js与Weaviate不在同一Docker网络,会出现连接超时,可通过docker network inspect <网络名>确认
  • 数据目录权限:确保Weaviate容器对PERSISTENCE_DATA_PATH目录有读写权限,避免数据无法持久化

四、日志排查建议

  1. 查看Weaviate容器日志:docker logs <weaviate-container-id>,检查是否有Ollama连接失败、向量生成错误信息
  2. 查看Ollama容器日志:docker logs <ollama-container-id>,确认模型是否已成功拉取
  3. 查看Next.js控制台输出,排查连接超时、请求失败等错误

内容的提问来源于stack exchange,提问作者Rok Benko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 16:45:01