網站搜尋

typescript - 使用 langchain 代理的 JavaScript 回傳原始文件


我似乎無法弄清楚如何將 source_documents 傳遞給代理,我可以看到從 retrievalChain 返回了 source documents。但它從那裡從未傳遞下去,有沒有人在這裡找到接收執行器結果中的 source documents 的方法?

我已經在 langchainjs 的 GitHub 上開了一個問題,但一直無法找到可行的解決方案:https://github.com/langchain-ai/langchainjs/issues/3404

有人建議我創建自訂工具,但我似乎無法在不遇到類型不匹配的情況下創建自訂工具。

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)
        }
      }
    ]
  }
)