Closed matteo-campana closed 1 year ago
Hey, I wrote AzureCognitiveSearchRetriever
. 👋🏼
Can you post your full code where you would need it? Is retriever.get_relevant_documents("what is langchain")[:n]
not sufficient for your use case?
@UmerHA Do you have a sample on using the retriever? I have tried calling the retriever but getting connection errors.
Also, what is the conten_key parameter?
retriever = AzureCognitiveSearchRetriever(content_key="content")
Thanks, Marcelo
@UmerHA I was able to figure it out the parameter content_Key, however, I wanted to know if there is anyway to return the whole result so I can get the keys I need. I my case, each result has 5 different keys. Thanks
@UmerHA Please ignore as I was able to figure it out. Retriever is working great!!! Thanks
@UmerHA Is slicing the only way to handle limiting search results? Can we not push this back to cognitive search to do a top N?
I'm trying to use RetrievalQA, my retriever in this case "AzureCognitiveSearchRetriever" if I do a generic query it's going to return a ton of documents, is there no way to limit this on the Retriever instance?
qa = RetrievalQA.from_chain_type( llm=open_ai, chain_type="stuff", retriever= AzureCognitiveSearchRetriever(xxxx), chain_type_kwargs=chain_type_kwargs, verbose=True, )
@UmerHA @hwchase17 Currently AzureCognitiveSearchRetriever retrieves all the documents, but in case I want to limit only 5 relevant documents and then use RetrievalQA, is it possible? As currently, I get token limit breach. Following is my code.
from langchain.retrievers import AzureCognitiveSearchRetriever
from langchain.chains import RetrievalQA
retreiver = AzureCognitiveSearchRetriever(content_key="content", index_name=AZURE_SEARCH_INDEX, api_key=search_key, service_name=AZURE_SEARCH_SERVICE)
docs = retreiver.get_relevant_documents(user_input)
qa_chain = RetrievalQA.from_chain_type(
llm,
retriever=retreiver,
return_source_documents=True,
chain_type="refine"
)
result = qa_chain({"query": user_input})
I get the following error: "This model's maximum context length is 4097 tokens, however you requested 6212 tokens"
Reason: Currently retriever tries to perform refine over all documents, but I want it to refine over only Top 5 relevant docuements, so that token limit is not crossed
@harryaultdev @reeshabh90 Added that option - see #7690. You can use a top_n
parameter to limit the number of documents returned
from langchain.retrievers import AzureCognitiveSearchRetriever
from langchain.chains import RetrievalQA
retreiver = AzureCognitiveSearchRetriever(<all the other stuff>, top_k=10)
qa_chain = RetrievalQA.from_chain_type(
llm,
retriever=retreiver,
return_source_documents=True,
chain_type="refine"
)
result = qa_chain({"query": user_input})
Hi @UmerHA I also created a PR: 7692
Kindly review
Hey @UmerHA , Apologies, saw the PR you have already created. Awesome!
Hey @UmerHA , Apologies, saw the PR you have already created. Awesome!
No worries! Diving in and solving your problems yourself is exactly the right attitude. Keep it!
@baskaryan @UmerHA Do we need to upgrade LangChain version via pip?
@baskaryan @UmerHA Do we need to upgrade LangChain version via pip?
Yes, pip install -U langchain
, where the U stands for upgrade
I still get following error: 1 validation error for AzureCognitiveSearchRetriever top_n extra fields not permitted (type=value_error.extra)
I still get following error: 1 validation error for AzureCognitiveSearchRetriever top_n extra fields not permitted (type=value_error.extra)
Sry, its top_k
now, not top_n
, so it's retreiver = AzureCognitiveSearchRetriever(<all the other stuff>, top_k=10)
Okay, however, even after fresh installation of langchain, this does not show up in code. Is the new change merged in main code?
Okay, however, even after fresh installation of langchain, this does not show up in code. Is the new change merged in main code?
Just checked the master branch, that update is there. But it is not released, I think. Could be the reason that pip update doesn't serve our purposes?
I need to limit the number of documents that AzureCognitiveSearchRetriever returns so that I can aggregate only the most relevant documents. Is there a way to do this with the current functionality or do we need to implement it?