1.解决思路
![]()
![]()
![]()
# 核心检索 + 生成伪代码 from langchain.embeddings import OpenAIEmbeddings from langchain.vectorstores import Milvus from langchain.chat_models import ChatOpenAI embeddings = OpenAIEmbeddings(model="text-embedding-ada-002") vector_store = Milvus(embedding_function=embeddings, collection_name="knowledge_base") def answer_question(query: str) -> str: # 向量检索 Top-5 docs = vector_store.similarity_search(query, k=5) context = "\n".join([doc.page_content for doc in docs]) # 构造 Prompt 生成回答 llm = ChatOpenAI(model="gpt-4", temperature=0.3) prompt = f"根据以下参考资料回答用户问题:\n{context}\n\n用户问题:{query}" return llm.predict(prompt)
2.为什么传统方案解决不了长尾问题
![]()
![]()
3.知识切片的技巧
![]()
4.混合检索能提升召回率
![]()
# 混合检索示例 from langchain.retrievers import BM25Retriever, EnsembleRetriever bm25_retriever = BM25Retriever.from_documents(documents) vector_retriever = vector_store.as_retriever(search_kwargs={"k": 10}) # 两路召回,权重各 0.5 ensemble_retriever = EnsembleRetriever( retrievers=[bm25_retriever, vector_retriever], weights=[0.5, 0.5] )
5.如果确实检索不到如何设计兜底策略
![]()
6.搭建知识库前期没足够多的语料咋办
![]()
7.追问
![]()