Langchain RetrivalQAChain предоставляет правильный ответ, несмотря на то, что из базы данных векторов не возвращено 0 документов.

Я думал, что RetrivalQAChain ответит только на основе документов, возвращенных из базы данных. В моем подсказке прямо сказано: не отвечайте, если не знаете ответа. Из моей векторной базы данных было возвращено 0 документов, и я надеялся, что она скажет, что я не знаю ответа, но вместо этого я получил правильный ответ. Я думаю, что CHATGPT использует свои собственные знания, чтобы ответить на вопрос, хотя в контексте было добавлено 0 документов. Я что-то здесь упускаю?

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

      export async function POST(req: NextRequest) {
  try {
    const prompt = new PromptTemplate({
      template:
        "Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.\n\nContext: {context}\n\nQuestion: {question}\nHelpful Answer:",
      inputVariables: ["context", "question"],
    });


    {/*Rest of the code */}
    const vectorStoreRetriever = vectorStore.asRetriever(5);

    console.log(
      "vectorStoreRetriever",
      await vectorStoreRetriever._getRelevantDocuments(message)
    );

    const model = new OpenAI({
      streaming: true,
      temperature: 0,
      timeout: 60000,
    });
    // Create a chain that uses the OpenAI LLM and HNSWLib vector store.
    const chain = new RetrievalQAChain({
      combineDocumentsChain: loadQAStuffChain(model, { prompt }),
      retriever: vectorStore.asRetriever(),
    });

    const results = await chain.call({
      query: "What is NextJs",
    });

    // return NextResponse.json({ splitDocuments });
    return NextResponse.json({ results });
  } catch (e: any) {
    console.log(e);
    return NextResponse.json({ error: e.message }, { status: 500 });
  }
}

Полученные результаты:

1 ответ

Причина этого в том, что модель OpenAI уже знала NextJ, поэтому даже ретривер ничего не получил, модель все равно смогла ответить на ваш вопрос.

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