为了获得搜索结果的多样性,我想为此使用最大边际相关性。
我想从向量数据库中获取与问题类似的N个文档,然后我想获取与问题类似但与现有文档不同的文档。
获得 MMR 的公式是。
new_similarity_formula = similarity(question) - max_over_existingdocs{similarity(document)}.
如果您使用 LangChain 和 DataStax Astra/Cassandra 作为 Vector DB,您可以执行以下操作:
import cassio
cassio.init(token=os.environ["ASTRA_DB_APPLICATION_TOKEN"], database_id=os.environ["ASTRA_DB_ID"])
from langchain.vectorstores.cassandra import Cassandra
table_name = 'vs_investment_kb'
keyspace = 'demo'
retrieverMMR = CassVectorStore.as_retriever(
search_type='mmr',
search_kwargs={
'k': 4,
'fetch_k': 10,
},
return_source_documents=True
)
# Create a "RetrievalQA" chain
chainMMR = RetrievalQA.from_chain_type(
llm=llm,
retriever=retrieverMMR,
chain_type_kwargs={
'prompt': PROMPT,
'document_variable_name': 'summaries'
}
)
# Run it and print results
responseMMR = chainMMR.run(QUERY)
print(responseMMR)
# Create a "RetrievalQA" chain
chainMMR = RetrievalQA.from_chain_type(
llm=llm,
retriever=retrieverMMR,
chain_type_kwargs={
'prompt': PROMPT,
'document_variable_name': 'summaries'
}
)
# Run it and print results
responseMMR = chainMMR.run(QUERY)
print(responseSim)
Cassio 是一个库,使您能够与 Astra/Cassandra 交互,而无需编写 CQL 命令,它为您进行了抽象。