生成集成模块 - 负责答案生成
| 13 | logger = logging.getLogger(__name__) |
| 14 | |
| 15 | class GenerationIntegrationModule: |
| 16 | """生成集成模块 - 负责答案生成""" |
| 17 | |
| 18 | def __init__(self, model_name: str = "gpt-4o-mini", temperature: float = 0.1, max_tokens: int = 2048): |
| 19 | """ |
| 20 | 初始化生成集成模块 |
| 21 | """ |
| 22 | self.model_name = model_name |
| 23 | self.temperature = temperature |
| 24 | self.max_tokens = max_tokens |
| 25 | |
| 26 | # 初始化OpenAI客户端 |
| 27 | api_key = os.getenv("OPENAI_API_KEY") |
| 28 | if not api_key: |
| 29 | raise ValueError("请设置 OPENAI_API_KEY 环境变量") |
| 30 | |
| 31 | self.client = OpenAI( |
| 32 | api_key=api_key |
| 33 | ) |
| 34 | |
| 35 | logger.info(f"生成模块初始化完成,模型: {model_name}") |
| 36 | |
| 37 | def generate_adaptive_answer(self, question: str, documents: List[Document]) -> str: |
| 38 | """ |
| 39 | 智能统一答案生成 |
| 40 | 自动适应不同类型的查询,无需预先分类 |
| 41 | """ |
| 42 | # 构建上下文 |
| 43 | context_parts = [] |
| 44 | |
| 45 | for doc in documents: |
| 46 | content = doc.page_content.strip() |
| 47 | if content: |
| 48 | # 添加检索层级信息(如果有的话) |
| 49 | level = doc.metadata.get('retrieval_level', '') |
| 50 | if level: |
| 51 | context_parts.append(f"[{level.upper()}] {content}") |
| 52 | else: |
| 53 | context_parts.append(content) |
| 54 | |
| 55 | context = "\n\n".join(context_parts) |
| 56 | |
| 57 | prompt = f""" |
| 58 | 作为一位专业的眼科疾病助手,请基于以下信息回答用户的问题。 |
| 59 | |
| 60 | 检索到的相关信息: |
| 61 | {context} |
| 62 | |
| 63 | 用户问题:{question} |
| 64 | |
| 65 | 请提供准确、循证的回答。根据问题的性质: |
| 66 | - 若询问疾病概述,请说明病因、症状、风险与预防 |
| 67 | - 若询问治疗或用药,请描述主要方案、适用人群与注意事项 |
| 68 | - 若询问护理建议,请结合生活方式与随访提示 |
| 69 | |
| 70 | 回答: |
| 71 | """ |
| 72 |