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