1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
| class IntelligentQASystem: def __init__(self, knowledge_base: str): self.vector_db = VectorDatabase() self.vector_db.get_or_create_collection(knowledge_base) self.query_processor = QueryProcessor(EmbeddingGenerator()) self.retriever = MultiPathRetriever(self.vector_db, self.query_processor)
def answer_question(self, question: str) -> Dict: """回答问题"""
relevant_docs = self.retriever.retrieve(question, top_k=3)
context = self.build_context(relevant_docs)
answer = self.generate_answer(question, context)
quality_score = self.evaluate_answer_quality(question, answer, context)
return { 'question': question, 'answer': answer, 'relevant_documents': relevant_docs, 'context': context, 'quality_score': quality_score, 'sources': [doc['metadata']['source'] for doc in relevant_docs] }
def build_context(self, relevant_docs: List[Dict]) -> str: """构建答案上下文"""
context_parts = []
for doc in relevant_docs: content = doc.get('content', '') summary = doc.get('summary', '') key_info = doc.get('key_info', {})
context_part = f""" 内容:{summary}
详细信息:{content[:500]}...
关键信息:{json.dumps(key_info, ensure_ascii=False, indent=2)} """
context_parts.append(context_part)
return "\n---\n".join(context_parts)
def generate_answer(self, question: str, context: str) -> str: """生成答案"""
answer_prompt = f""" 基于以下上下文信息,回答用户的问题。
上下文: {context}
问题:{question}
要求: 1. 答案要准确、客观 2. 引用具体数据和事实 3. 如果信息不足,要明确说明 4. 保持逻辑清晰,语言简洁
答案: """
response = openai.ChatCompletion.create( model="gpt-4", messages=[{"role": "user", "content": answer_prompt}], temperature=0.1, max_tokens=1000 )
return response.choices[0].message.content
def evaluate_answer_quality(self, question: str, answer: str, context: str) -> float: """评估答案质量"""
evaluation_prompt = f""" 评估以下答案的质量:
问题:{question} 答案:{answer} 上下文:{context[:1000]}...
从以下维度评估(0-1分): 1. 准确性:答案是否准确反映了上下文信息 2. 相关性:答案是否直接回答了问题 3. 完整性:答案是否包含了必要的信息 4. 清晰度:答案是否表达清晰
返回平均得分(0-1之间): """
response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": evaluation_prompt}], temperature=0.1 )
try: score = float(response.choices[0].message.content.strip()) return max(0.0, min(1.0, score)) except: return 0.5
|