typescript - Retourner les documents sources en utilisant l'agent langchain javascript
Je n'arrive pas à comprendre comment transmettre les documents sources à l'agent, je peux voir que je récupère les documents sources à partir de retrievalChain. Mais ils ne sont jamais transmis à partir de là, quelqu'un ici a-t-il trouvé un moyen de recevoir les documents sources dans le résultat de l'exécuteur ?
J'ai déjà un problème ouvert sur le GitHub de langchainjs, mais je n'ai pas été en mesure de trouver une solution fonctionnelle : https://github.com/langchain-ai/langchainjs/issues/3404
On m'a suggéré de créer un outil personnalisé, mais je n'arrive pas à créer un outil personnalisé sans rencontrer des incompatibilités de types.
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)
}
}
]
}
)