typescript - Mengembalikan dokumen sumber menggunakan agen langchain javascript
Sepertinya saya tidak bisa mengetahui cara mengirim source_documents ke agen, saya bisa melihat bahwa saya mendapatkan dokumen sumber yang dikembalikan dari retrievalChain. Tetapi itu tidak pernah diteruskan dari sana, apakah ada di sini yang sudah menemukan cara untuk menerima dokumen sumber dalam hasil eksekutor?
Saya sudah memiliki sebuah masalah yang terbuka di GitHub langchainjs, tetapi belum dapat menemukan solusi yang bekerja: https://github.com/langchain-ai/langchainjs/issues/3404
Saya disarankan untuk membuat alat khusus, tetapi saya sepertinya tidak bisa membuat alat khusus tanpa mengalami ketidakcocokan tipe.
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)
}
}
]
}
)