1. 解决向量嵌入的领域失配问题避坑实践领域适配嵌入模型选择classMedicalEmbeddingModel:def__init__(self):# 尝试多个领域专用模型self.models{sentence-transformers/all-mpnet-base-v2:通用,microsoft/BiomedNLP-PubMedBERT-base-uncased-abstract:生物医学,GanjinZero/UMLSBert_ENG:医学术语,custom_finetuned:自研微调模型}defevaluate_models(self,medical_benchmark):results{}formodel_name,descriptioninself.models.items():# 在医疗术语相似性任务上评估accuracyself._test_medical_similarity(model_name,benchmark)results[model_name]{accuracy:accuracy,latency:self._test_latency(model_name),cost:self._estimate_cost(model_name)}# 选择最佳模型best_modelmax(results,keylambdax:results[x][accuracy]*0.7(1/results[x][latency])*0.2(1/results[x][cost])*0.1)returnbest_model,results自定义微调策略# 在医学问答数据集上继续训练training_data[{text:对于高血压患者首选药物是ACE抑制剂。,label:心血管},{text:2型糖尿病治疗应考虑二甲双胍。,label:内分泌},# ... 10万条医学文本]# 使用LoRA高效微调modelAutoModelForSequenceClassification.from_pretrained(bert-base-uncased)lora_configLoraConfig(r16,lora_alpha32,target_modules[query,value],lora_dropout0.1)modelget_peft_model(model,lora_config)结果领域适配模型在医疗术语匹配任务上比通用模型提升41%。2. 解决关键词与向量检索的割裂使用问题避坑实践构建混合检索流水线classHybridRetriever:def__init__(self):self.keyword_retrieverElasticsearchRetriever(indexmedical_keyword)self.vector_retrieverVectorDBRetriever(indexmedical_vector)self.rerankerCrossEncoderReranker(modelmedical-reranker-v1)defretrieve(self,query,top_k10):# 并行检索keyword_resultsself.keyword_retriever.search(query,top_ktop_k*2)vector_resultsself.vector_retriever.search(query,top_ktop_k*2)# 合并并去重combinedself._merge_and_deduplicate(keyword_results,vector_results)# 重排序rerankedself.reranker.rerank(query,combined[:top_k*3])returnreranked[:top_k]动态权重调整defcalculate_query_type(self,query):# 分析查询特征features{has_medical_code:bool(re.search(r[A-Z]\d{2,},query)),# ICD代码has_drug_name:self._contains_drug_name(query),is_factual:len(query.split())8,# 短查询多为事实型is_complex:differenceinqueryorcompareinquery# 复杂比较}# 根据查询类型调整权重iffeatures[has_medical_code]orfeatures[has_drug_name]:return{keyword_weight:0.7,vector_weight:0.3}eliffeatures[is_factual]:return{keyword_weight:0.6,vector_weight:0.4}else:return{keyword_weight:0.3,vector_weight:0.7}结果检索准确率从68%提升到89%召回率从72%提升到85%。3. 解决Top-K参数的盲目设定问题避坑实践查询复杂度分类器classQueryComplexityClassifier:defclassify(self,query):featuresself._extract_features(query)# 使用轻量级模型预测complexityself.model.predict(features)# 动态设置K值k_mapping{simple:3,# 简单事实查询moderate:7,# 中等复杂度complex:15,# 复杂查询very_complex:25# 非常复杂如比较多个治疗方案}returncomplexity,k_mapping[complexity]def_extract_features(self,query):return{query_length:len(query.split()),num_medical_terms:self._count_medical_terms(query),num_conditions:self._extract_conditions(query),question_type:self._detect_question_type(query)# what, how, compare等}自适应检索机制defadaptive_retrieve(self,query):# 初始检索initial_k5initial_resultsself.retriever.retrieve(query,top_kinitial_k)# 检查结果质量ifself._is_sufficient(initial_results,query):returninitial_results# 质量不足扩大检索范围expanded_k15expanded_resultsself.retriever.retrieve(query,top_kexpanded_k)# 对扩展结果进行过滤和重排序filteredself._filter_redundant(expanded_results)returnfiltered[:10]# 返回最终10个结果简单查询延迟降低40%复杂查询准确率提升25%。4. 解决多轮对话的上下文失忆问题避坑实践对话状态管理器classDialogueStateManager:def__init__(self):self.conversations{}# session_id - ConversationStatedefprocess_query(self,session_id,current_query):stateself.conversations.get(session_id,ConversationState())# 1. 查询重写rewritten_queryself._rewrite_query(state.history,current_query)# 2. 检索增强retrieval_queryself._build_retrieval_query(state,rewritten_query)# 3. 更新对话历史state.add_turn(current_query,rewritten_query)returnretrieval_query,state查询重写模型defrewrite_query(self,history,current_query):# 构建重写提示promptf 基于以下对话历史将当前查询重写为完整的、独立的查询。 对话历史{history}当前查询{current_query}重写后的查询 # 使用小型LLM进行重写rewrittenself.llm.generate(prompt,max_tokens100)returnrewritten.strip()实体追踪机制classEntityTracker:deftrack(self,conversation):entities{}forturninconversation:# 提取医疗实体turn_entitiesself.ner_model.extract(turn[query])# 更新实体状态forentityinturn_entities:ifentity[text]notinentities:entities[entity[text]]{type:entity[type],first_seen:turn[timestamp],last_seen:turn[timestamp],count:1}else:entities[entity[text]][last_seen]turn[timestamp]entities[entity[text]][count]1returnentities结果多轮对话准确率从45%提升到78%。5. 解决长文档检索的粒度失控问题避坑实践构建层次化索引架构classHierarchicalIndex:def__init__(self):# 三级索引self.indices{document_level:VectorDB(index_typedocument),section_level:VectorDB(index_typesection),paragraph_level:VectorDB(index_typeparagraph)}defsearch(self,query):results[]# 1. 文档级检索宏观问题ifself._is_macro_question(query):doc_resultsself.indices[document_level].search(query,top_k3)results.extend(doc_results)# 2. 段落级检索细节问题ifself._is_detailed_question(query):para_resultsself.indices[paragraph_level].search(query,top_k10)results.extend(para_results)# 3. 章节级检索中等粒度section_resultsself.indices[section_level].search(query,top_k5)results.extend(section_results)returnself._merge_and_rerank(results)粒度分类器defclassify_granularity(self,query):macro_keywords[overview,summary,principle,guideline]detail_keywords[dosage,specific,exact,number,mg]macro_scoresum(1forwordinmacro_keywordsifwordinquery.lower())detail_scoresum(1forwordindetail_keywordsifwordinquery.lower())ifmacro_scoredetail_score:returnmacroelifdetail_scoremacro_score:returndetailelse:returnmixed结果长文档查询准确率提升52%检索速度提升30%。