东莞网站设计制作网站广州网络公司哪家最好
2026/1/2 10:00:12 网站建设 项目流程
东莞网站设计制作网站,广州网络公司哪家最好,建设通会员多少钱一个月,创新平台网站建设方案引言大家好#xff0c;我是Wise玩转AI。在前两期的实践中#xff0c;我们构建了一个具备基础查询和预约功能的医院导诊智能体。今天#xff0c;我们将进入第3期的工程实践#xff0c;重点优化智能体的问答能力和引入记忆系统。正如我们在理论文章中强调的#xff0c;记忆系…引言大家好我是Wise玩转AI。在前两期的实践中我们构建了一个具备基础查询和预约功能的医院导诊智能体。今天我们将进入第3期的工程实践重点优化智能体的问答能力和引入记忆系统。正如我们在理论文章中强调的记忆系统是智能体的重要组成部分它让智能体能够 记住 之前的交互信息从而实现更自然、更连贯的多轮对话。一个没有记忆的智能体每次交互都是 第一次无法提供个性化和持续的服务。在本期中我们将为导诊智能体添加长期记忆和短期记忆实现常见医疗问题的智能回答并优化导诊流程使智能体能够处理更复杂的多步对话场景。本期新增功能概述医疗知识库与智能问答整合常见医疗问题的知识库提供准确的医疗咨询记忆系统实现短期记忆会话上下文和长期记忆用户偏好优化的对话管理支持更自然的多轮对话智能体能够记住之前的交互信息个性化服务根据用户历史信息提供更贴心的导诊服务这些功能将使我们的导诊智能体从一个功能性工具进化为更智能、更人性化的助手。扩展项目结构在第2期的基础上我们继续扩展项目结构hospital_agent/ ├── agents/ │ ├── base_agent.py │ ├── advanced_agents.py │ └── memory_agents.py # 新增带记忆的智能体 ├── tasks/ │ ├── base_tasks.py │ ├── advanced_tasks.py │ └── memory_tasks.py # 新增记忆相关任务 ├── tools/ │ ├── hospital_tools.py │ ├── appointment_tools.py │ └── knowledge_tools.py # 新增知识库工具 ├── data/ │ ├── hospital_data.py │ ├── appointment_data.py │ └── medical_knowledge.py # 新增医疗知识库 ├── memory/ # 新增记忆系统 │ ├── short_term_memory.py │ └── long_term_memory.py ├── planner/ │ └── task_planner.py ├── main.py └── .env新增的模块主要关注记忆系统和医疗知识库的实现。实现医疗知识库与问答工具首先我们创建一个简单的医疗知识库和相应的查询工具。创建data/medical_knowledge.py# 常见医疗问题知识库 MEDICAL_KNOWLEDGE { 感冒: { 症状: 流鼻涕、打喷嚏、咳嗽、喉咙痛、轻微发热, 处理建议: 多休息、多喝水、保持室内通风。症状较轻时可自行缓解症状严重或持续不愈应及时就医。, 注意事项: 避免传染给他人勤洗手咳嗽时遮掩口鼻。 }, 高血压: { 症状: 早期可能无症状常见症状有头痛、头晕、心悸、视力模糊, 处理建议: 控制盐分摄入保持健康饮食规律运动戒烟限酒遵医嘱服用降压药物定期监测血压。, 注意事项: 高血压是慢性病需要长期管理不可自行停药。 }, 糖尿病: { 症状: 多饮、多食、多尿、体重减轻、疲劳乏力, 处理建议: 控制饮食减少糖分摄入规律运动遵医嘱使用降糖药物或胰岛素定期监测血糖水平。, 注意事项: 糖尿病患者应定期进行并发症筛查包括眼底、肾脏和神经系统检查。 },# 更多医疗知识... } # 常见问题与答案 FREQUENTLY_ASKED_QUESTIONS { 挂号需要带什么证件: 挂号时请携带身份证、医保卡等有效证件。如果是首次就诊建议提前办理医院就诊卡。, 预约挂号可以取消吗: 可以取消。请在就诊前24小时取消预约否则可能影响您的预约信用。您可以通过医院官网、APP或电话取消预约。, 医院可以网上缴费吗: 可以。我院支持微信、支付宝等线上缴费方式您可以在医院APP或公众号上完成缴费。,# 更多常见问题... }创建tools/knowledge_tools.pyfrom crewai_tools import BaseTool from data.medical_knowledge import MEDICAL_KNOWLEDGE, FREQUENTLY_ASKED_QUESTIONS class MedicalKnowledgeTool(BaseTool): name 医疗知识查询工具 description 用于查询常见疾病的症状、处理建议和注意事项 def _run(self, disease: str) - str: 查询常见疾病的信息 参数: disease: 疾病名称 返回: 疾病的症状、处理建议和注意事项 disease_info MEDICAL_KNOWLEDGE.get(disease) if not disease_info: return f抱歉暂时没有关于{disease}的详细信息。建议您咨询专业医生获取准确信息。 return (f{disease}的常见症状{disease_info[症状]}\nf处理建议{disease_info[处理建议]}\nf注意事项{disease_info[注意事项]}) class FAQTool(BaseTool): name 常见问题查询工具 description 用于查询医院就诊相关的常见问题和解答 def _run(self, question: str) - str: 查询常见问题的答案 参数: question: 问题内容 返回: 问题的解答 # 简单匹配实际应用中可以使用更复杂的语义匹配 for q, a in FREQUENTLY_ASKED_QUESTIONS.items(): if question in q or q in question: return a return 抱歉暂时没有找到您问题的答案。您可以尝试联系医院服务台获取帮助。这些工具扩展了智能体的知识范围使其能够回答常见的医疗问题和就诊相关问题提升了导诊服务的实用性。实现记忆系统记忆系统是本期的核心我们将实现短期记忆和长期记忆。创建memory/short_term_memory.pyfrom datetime import datetime, timedelta from typing import Dict, List, Any class ShortTermMemory: 短期记忆存储会话上下文信息 def __init__(self, max_age: int 30): 初始化短期记忆 参数: max_age: 记忆保留时间分钟默认30分钟 self.memory: Dict[str, List[Dict[str, Any]]] {} # {session_id: [messages]} self.max_age max_age def add_memory(self, session_id: str, role: str, content: str): 添加记忆 if session_id not in self.memory: self.memory[session_id] [] self.memory[session_id].append({role: role,content: content,timestamp: datetime.now()})# 清理过期记忆 self._clean_expired_memory(session_id) def get_memory(self, session_id: str, max_messages: int 10) - List[Dict[str, Any]]: 获取记忆最多返回最近的max_messages条 if session_id not in self.memory: return [] # 清理过期记忆 self._clean_expired_memory(session_id) # 返回最近的max_messages条 return self.memory[session_id][-max_messages:] def _clean_expired_memory(self, session_id: str): 清理过期记忆 if session_id not in self.memory: return cutoff_time datetime.now() - timedelta(minutesself.max_age) self.memory[session_id] [ msg for msg in self.memory[session_id]if msg[timestamp] cutoff_time ] # 如果没有消息了删除会话 if not self.memory[session_id]: del self.memory[session_id]创建memory/long_term_memory.pyimport json import os from typing import Dict, Any class LongTermMemory: 长期记忆存储用户偏好和历史信息 def __init__(self, storage_path: str data/long_term_memory.json): 初始化长期记忆 参数: storage_path: 记忆存储文件路径 self.storage_path storage_path self.memory: Dict[str, Dict[str, Any]] self._load_memory() def _load_memory(self) - Dict[str, Dict[str, Any]]: 从文件加载记忆 if os.path.exists(self.storage_path): with open(self.storage_path, r, encodingutf-8) as f: try: return json.load(f) except json.JSONDecodeError: return {} return {} def _save_memory(self): 保存记忆到文件 with open(self.storage_path, w, encodingutf-8) as f: json.dump(self.memory, f, ensure_asciiFalse, indent2) def add_user_info(self, user_id: str, info: Dict[str, Any]): 添加用户信息 if user_id not in self.memory: self.memory[user_id] {} # 更新用户信息不覆盖已有信息 self.memory[user_id].update(info) self._save_memory() def get_user_info(self, user_id: str) - Dict[str, Any]: 获取用户信息 return self.memory.get(user_id, {}) def add_user_preference(self, user_id: str, preference: str, value: Any): 添加用户偏好 if user_id not in self.memory: self.memory[user_id] {} if preferences not in self.memory[user_id]: self.memory[user_id][preferences] {} self.memory[user_id][preferences][preference] value self._save_memory() def get_user_preference(self, user_id: str, preference: str, default: Any None) - Any: 获取用户偏好 return self.memory.get(user_id, {}).get(preferences, {}).get(preference, default)这个记忆系统实现了短期记忆保存会话上下文支持多轮对话长期记忆保存用户信息和偏好支持个性化服务这完全符合我们之前提到的记忆系统分层设计即时记忆短期和长期记忆。实现带记忆的智能体创建agents/memory_agents.pyfrom crewai import Agent from tools.knowledge_tools import MedicalKnowledgeTool, FAQTool from agents.advanced_agents import AdvancedHospitalAgents class MemoryAgents: staticmethod def medical_consultant_agent(): 创建医疗咨询智能体具备医疗知识查询能力 return Agent( role医疗咨询顾问, goal为患者提供常见疾病的咨询服务解答医疗相关问题, backstory你是一位经验丰富的全科医生擅长解答常见疾病的预防、症状和处理建议能够用通俗易懂的语言为患者提供专业的医疗咨询。, tools[MedicalKnowledgeTool(), FAQTool()], verboseTrue, allow_delegationFalse, max_iter5) staticmethod def memory_guide_agent(): 创建带记忆的导诊智能体能够记住会话上下文和用户信息 # 整合所有工具 all_tools [ AdvancedHospitalAgents.department_agent().tools[0], # 科室查询工具 AdvancedHospitalAgents.doctor_agent().tools[0], # 医生查询工具 AdvancedHospitalAgents.appointment_agent().tools[0], # 预约工具 AdvancedHospitalAgents.symptom_analyzer_agent().tools[0], # 症状分析工具 MedicalKnowledgeTool(), # 医疗知识工具 FAQTool() # 常见问题工具 ] return Agent( role带记忆的医院导诊专家, goal提供个性化的医院导诊服务记住患者的信息和之前的交互内容提供连贯、贴心的导诊体验, backstory你是一位贴心的医院导诊专家不仅熟悉医院的所有服务和流程还能记住每位患者的情况和之前的咨询内容提供个性化的导诊服务。, toolsall_tools, verboseTrue, allow_delegationTrue, max_iter15)这些智能体整合了新的知识工具能够回答更广泛的医疗问题。实现记忆相关任务和规划器创建tasks/memory_tasks.pyfrom crewai import Task class MemoryTasks: staticmethod def medical_consult_task(agent, question): 创建医疗咨询任务 return Task( descriptionf解答患者的医疗问题{question}。如果是关于特定疾病的问题 请提供该疾病的症状、处理建议和注意事项如果是关于就诊流程的问题 请提供详细的解答和指导。, expected_outputf以通俗易懂的语言回答患者的问题信息要准确、专业 避免使用过于专业的术语必要时提供进一步行动的建议。, agentagent ) staticmethod def memory_guide_task(agent, user_query, context): 创建带记忆的导诊任务 return Task( descriptionf根据以下上下文信息处理患者的当前查询{user_query}\n f上下文信息{context}\n 请结合上下文理解患者的需求提供连贯的导诊服务。如果需要 可以询问患者更多信息但避免不必要的追问。, expected_outputf提供准确、贴心的导诊服务回答要考虑到上下文信息 保持对话的连贯性和个性化。, agentagent )更新planner/task_planner.py添加带记忆的任务规划from crewai import Crew, Process from agents.memory_agents import MemoryAgents from tasks.memory_tasks import MemoryTasks class HospitalTaskPlanner: # ... 保留之前的代码 ... staticmethod def plan_and_execute_with_memory(user_query, session_id, short_term_memory, user_idNone, long_term_memoryNone): 带记忆的任务规划与执行 参数: user_query: 用户的自然语言查询 session_id: 会话ID用于短期记忆 short_term_memory: 短期记忆实例 user_id: 用户ID用于长期记忆可选 long_term_memory: 长期记忆实例可选 返回: 任务执行结果 # 获取上下文信息 context short_term_memory.get_memory(session_id) # 格式化上下文信息 context_str \n.join([f{msg[role]}: {msg[content]} for msg in context]) # 获取用户长期信息 user_info if user_id and long_term_memory: user_data long_term_memory.get_user_info(user_id) if user_data: user_info f用户信息{user_data}\n # 创建带记忆的智能体 agent MemoryAgents.memory_guide_agent() # 创建带记忆的导诊任务 task MemoryTasks.memory_guide_task( agent, user_query, f{user_info}之前的对话{context_str}) # 创建团队并执行任务 crew Crew( agents[agent], tasks[task], processProcess.sequential, verbose2) result crew.kickoff() # 将当前交互添加到短期记忆 short_term_memory.add_memory(session_id, user, user_query) short_term_memory.add_memory(session_id, assistant, result) return result这个带记忆的规划器能够利用短期记忆中的会话历史和长期记忆中的用户信息为用户提供更连贯、更个性化的服务。优化主程序支持记忆功能更新main.pyimport os import uuid from dotenv import load_dotenv from planner.task_planner import HospitalTaskPlanner from memory.short_term_memory import ShortTermMemory from memory.long_term_memory import LongTermMemory # 加载环境变量 load_dotenv() def main(): print(欢迎使用医院智能导诊系统V3.0) print(我现在可以记住我们的对话内容并为您提供更个性化的服务。) print(我可以解答医疗常识问题、帮助预约挂号、推荐科室等。) print(请输入您的问题输入退出结束服务。) # 初始化记忆系统 short_term_memory ShortTermMemory(max_age30) long_term_memory LongTermMemory() # 生成会话ID session_id str(uuid.uuid4())[:8] print(f\n您的会话ID{session_id}用于本次会话识别) # 询问用户ID实际应用中可以通过登录获取 user_id input(请输入您的用户ID如没有可直接回车).strip() if not user_id: user_id None print(将使用匿名模式不会保存您的长期信息) else: user_info long_term_memory.get_user_info(user_id) if user_info: print(f欢迎回来已加载您的个人信息) else: print(f新用户ID将为您创建个人档案) # 询问基本信息 name input(请告诉我您的姓名).strip() if name: long_term_memory.add_user_info(user_id, {name: name}) while True: user_input input(\n请输入您的问题) if user_input 退出: print(感谢使用再见) break try: # 使用带记忆的任务规划器处理查询 result HospitalTaskPlanner.plan_and_execute_with_memory( user_input, session_id, short_term_memory, user_id, long_term_memory ) # 输出结果 print(\n导诊结果) print(result) except Exception as e: print(f处理您的请求时出现错误{str(e)}) print(请尝试重新表述您的问题。) if __name__ __main__: main()更新后的主程序支持记忆功能能够记住用户的会话历史和个人信息提供更连贯、更个性化的服务。测试记忆功能运行程序测试新增功能python main.py尝试进行多轮对话我叫张三我有高血压应该注意什么我想预约心内科的医生我之前问了什么问题智能体现在能够记住用户的姓名和之前的对话内容并提供连贯的回答展示了记忆系统的效果。第 3 期实现的核心要点总结记忆系统实现成功实现了短期记忆会话上下文和长期记忆用户信息使智能体具备 记忆 能力知识增强通过医疗知识库和常见问题库扩展了智能体的知识范围个性化服务智能体能够利用用户信息提供更贴心的服务连贯对话支持多轮对话保持上下文连贯性这些实现充分体现了我们之前讨论的智能体 记忆系统 的重要性使智能体从一个无状态的工具进化为一个能够提供个性化服务的助手。结语第 3 期我们为医院导诊智能体添加了记忆系统和更丰富的医疗知识显著提升了智能体的智能化水平和用户体验。现在我们的智能体不仅能回答问题和完成预约还能记住用户信息和对话历史提供更连贯、更个性化的服务。在下一期中我们将整合前三期的功能实现一个全功能的导诊系统并重点关注异常处理和系统鲁棒性使我们的智能体能够应对各种异常情况真正具备企业级应用的稳定性。记住一个优秀的 AI 智能体不仅要有强大的功能还要有良好的用户体验和稳定性。我们正在一步步将我们的导诊智能体打造成一个真正实用的工具让 AI 技术真正为医疗服务效率提升做出贡献。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询