Запрос моих собственных данных с использованием langchain и сосновой шишки

Я хочу использовать langchain, чтобы предоставить свой собственный контекст модели llm openai gpt и запросить мои данные с использованием модели llm. Во-первых, я использую langchainjs для загрузки документов на основе предоставленного пути к файлу и разделения их на фрагменты. Затем эти разделенные документы передаются в базу данных шишек и сохраняются с использованием библиотеки шишек. Это хранилище используется для создания цепочки контроля качества llm и использования ее для запроса моих данных.

Это моя текущая реализация:

main.js

      import { Document } from "langchain/document";
import { TextLoader } from "langchain/document_loaders/fs/text";
import { PDFLoader } from "langchain/document_loaders/fs/pdf";
import { CharacterTextSplitter } from "langchain/text_splitter";

import { PineconeClient } from "@pinecone-database/pinecone";

import { OpenAIEmbeddings } from "langchain/embeddings/openai";
import { PineconeStore } from "langchain/vectorstores/pinecone";

import { OpenAI } from "langchain/llms/openai";
import { VectorDBQAChain } from "langchain/chains";

const openAIApiKey = process.env.OPEN_AI_API_KEY;

async function main(filePath) {
  // create document array
  const docs = [
    new Document({
      metadata: { name: `Filepath: ${filePath}` },
    }),
  ];

  // initialize loader
  const Loader = path.extname(file) === `.pdf` ? PDFLoader : TextLoader;

  const loader = new Loader(file);

  // load and split the docs
  const loadedAndSplitted = await loader.loadAndSplit();

  // push the splitted docs to the array
  docs.push(...loadedAndSplitted);

  // create splitter
  const textSplitter = new CharacterTextSplitter({
    chunkSize: 1000,
    chunkOverlap: 0,
  });

  // use the splitter to split the docs to different chunks
  const splittedDocs = await textSplitter.splitDocuments(docs);

  // create pinecone index
  const client = new PineconeClient();
  await client.init({
    apiKey: process.env.PINECONE_API_KEY,
    environment: process.env.PINECONE_ENVIRONMENT,
  });
  const pineconeIndex = client.Index(process.env.PINECONE_INDEX);

  // create openai embedding
  const embeddings = new OpenAIEmbeddings({ openAIApiKey });

  // create a pinecone store using the splitted docs and the pinecone index
  const pineconeStore = await PineconeStore.fromDocuments(
    splittedDocs,
    embeddings,
    {
      pineconeIndex,
      namespace: "my-pinecode-index",
    }
  );

  // initialize openai model
  const model = new OpenAI({
    openAIApiKey,
    modelName: "gpt-3.5-turbo",
  });

  // create a vector chain using the llm model and the pinecone store
  const chain = VectorDBQAChain.fromLLM(model, pineconeStore, {
    k: 1,
    returnSourceDocuments: true,
  });

  // use the chain to query my data
  const response = await chain.call({
    query: "Explain about the contents of the pdf file I provided.", // question is based on the file i provided
  });

  console.log(`\nResponse: ${response.text}`); 
}

Примечание. Мой индекс сосновой шишки имеет размерность 1536, потому что я получил ошибку: всякий раз, когда я использовал другой размер.

Ответы, которые я получаю, совершенно неожиданны. Иногда он отвечает мне, если ему задают нормальный и нетривиальный вопрос, но зачастую модель вообще не понимает контекста моих данных. Он просто отрицает знание даже самых простых вещей. Основную идею реализации я почерпнул из документации langchainjs.

Я попытался изменить модель GPT с помощью текстовых моделей Давинчи, изменить размер фрагмента и воссоздать хранилище сосновых шишек. Но это тоже ничего не дает.

Может ли кто-нибудь помочь мне, что я здесь делаю не так? Или подскажите, что мне делать.

Любая помощь приветствуется. Спасибо.

0 ответов

Другие вопросы по тегам