typescript - Vrátiť zdrojové dokumenty pomocou agenta langchain javascript


Zdá sa, že nedokážem prísť na to, ako odovzdať source_documents agentovi, vidím, že dostávam zdrojové dokumenty vrátené z retrievalChain. Ale odtiaľ sa to už nikdy neodovzdáva, niekto tu už prišiel na spôsob, ako získať zdrojové dokumenty vo výsledku exekútora?

Už mám otvorený problém na github-e langchainjs, ale nepodarilo sa mi nájsť fungujúce riešenie: https://github.com/langchain-ai/langchainjs/issues/3404

Bolo mi navrhnuté vytvoriť vlastný nástroj, ale zdá sa, že nemôžem vytvoriť vlastný nástroj bez toho, aby som narazil na nezhodu typov.

const vectorStore = await Chroma.fromExistingCollection(
  new OpenAIEmbeddings({
    azureOpenAIApiKey: process.env.AZURE_OPENAI_API_KEY,
    azureOpenAIApiVersion: process.env.AZURE_OPENAI_API_VERSION,
    azureOpenAIApiDeploymentName:
      process.env.AZURE_OPENAI_API_DEPLOYMENT_EMBEDDING_NAME,
    azureOpenAIApiInstanceName: process.env.AZURE_OPENAI_API_INSTANCE_NAME
  }),
  {
    collectionName: chatbotID,
    url: 'url'
  }
)

const retriever = vectorStore.asRetriever()

const model = new ChatOpenAI({
  temperature: 0,
  azureOpenAIApiKey: process.env.AZURE_OPENAI_API_KEY,
  azureOpenAIApiVersion: process.env.AZURE_OPENAI_API_VERSION,
  azureOpenAIApiDeploymentName:
    process.env.AZURE_OPENAI_API_DEPLOYMENT_NAME,
  azureOpenAIApiInstanceName: process.env.AZURE_OPENAI_API_INSTANCE_NAME,
  streaming: true
})

const retrievalChain = new RetrievalQAChain({
  combineDocumentsChain: loadQAStuffChain(model),
  retriever,
  returnSourceDocuments: true
})

const chatHistory = new ChatMessageHistory(previousMessages)

const memory = new OpenAIAgentTokenBufferMemory({
  llm: model,
  memoryKey: 'chat_history',
  outputKey: 'output',
  inputKey: 'input',
  chatHistory
})


const qaTool = new ChainTool({
  name: `state-of-${company}-qa`,
  description: `State of the ${company} QA - useful for when you need to ask questions about ${company}.`,
  chain: retrievalChain,
  returnDirect: true,
  verbose: true
})


const tools = [qaTool, shippingTool]

const executor = await initializeAgentExecutorWithOptions(tools, model, {
  agentType: 'openai-functions',
  memory,
  returnIntermediateSteps: true,
  agentArgs: {
    prefix:
      'insert prompt here'
  }
})


await executor.call(
  {
    input: input
  },
  {
    callbacks: [
      {
        handleLLMNewToken(token: string) {
          res.write(token)
        }
      }
    ]
  }
)