当前位置: 首页 > news >正文

医学 Agent:自带医学深度调研 deep research,优化治疗策略+药物参考

医学 Agent:自带医学深度调研deep research,优化治疗策略+药物参考

    • 第一版代码
      • 输出结果,居然连不上网
      • 运行结果梳理
    • 第二版
      • 结果测试

 


第一版代码

医疗顾问AI系统 - 基于Qwen API 的智能医疗助手

在这里插入图片描述

最终目标:构建一个能够查询疾病治疗方案和药物知识的AI医疗顾问系统

层层分解:

  1. 环境配置模块 - 配置API密钥和环境变量
  2. 思维链追踪模块 - 展示AI的思考过程
  3. 医疗工具模块 - 定义疾病治疗和药物查询工具
  4. AI模型初始化模块 - 配置Qwen语言模型
  5. Agent代理模块 - 创建智能代理和执行器
  6. 主控制模块 - 领导式规划,协调整个系统运行
# ================================
# 1. 依赖库导入模块 - 为什么要导入这些库?
# ================================import os  # 操作系统接口库 - 用于设置环境变量,管理系统配置
from dotenv import load_dotenv  # 环境变量加载库 - 从.env文件加载API密钥等敏感配置
from langchain_openai import ChatOpenAI  # OpenAI兼容接口库 - 与Qwen API通信的桥梁
from langchain.tools import tool  # 工具装饰器 - 将普通函数转换为LangChain可用的工具
from langchain.agents import AgentExecutor, create_react_agent  # 智能代理库 - 创建能够使用工具的AI代理
from langchain.prompts import PromptTemplate  # 提示模板库 - 标准化AI的输入格式
from langchain.memory import ConversationBufferMemory  # 记忆库 - 保存对话历史,实现上下文连续性
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler  # 流式输出库 - 实时显示AI思考过程
from langchain_community.tools import DuckDuckGoSearchRun  # 搜索工具库 - 提供网络搜索能力
import json  # JSON处理库 - 处理结构化数据
import datetime  # 时间处理库 - 处理时间相关操作
from typing import List, Union, Dict, Any  # 类型注解库 - 提供代码类型提示,增强可读性# ================================
# 2. 环境配置模块 - 系统基础设置
# ================================def setup_environment():"""环境配置函数 - 领导级别的环境准备工作功能:加载环境变量,设置API密钥和基础URL"""# 加载.env文件中的环境变量 - 保护敏感信息不被硬编码load_dotenv()# 设置Qwen API密钥 - 使用环境变量方式保护API密钥安全os.environ["OPENAI_API_KEY"] = "sk-025a6...."# 设置Qwen API的基础URL - 使用阿里云DashScope的OpenAI兼容接口QWEN_BASE_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1"return QWEN_BASE_URL# ================================
# 3. 思维链追踪模块 - AI思考过程可视化
# ================================class ThoughtProcessCallbackHandler(StreamingStdOutCallbackHandler):"""思维链回调处理器 - 捕获和展示AI的思考过程为什么需要这个模块?- AI的决策过程对用户来说是黑盒,需要透明化- 医疗场景需要可解释的AI,展示推理逻辑- 帮助调试和优化AI的表现核心功能:- 实时捕获AI输出的每个token(词元)- 识别思考标记,分离思考过程和最终答案- 格式化展示完整的推理链条"""def __init__(self):"""初始化思维链收集器"""super().__init__()self.thoughts = []  # 存储所有思考步骤的列表self.current_thought = ""  # 当前正在收集的思考内容self.is_thinking = False  # 标记是否正在思考阶段def on_llm_new_token(self, token: str, **kwargs) -> None:"""处理AI输出的新token参数:token - AI输出的单个词元"""# 实时输出token,让用户看到AI"思考"的过程print(token, end="", flush=True)# 检测思考开始的标记 - 支持中英文标记if "思考:" in token or "Thought:" in token:self.is_thinking = True  # 进入思考收集模式self.current_thought = token  # 开始收集当前思考# 如果正在思考阶段,继续收集内容elif self.is_thinking:self.current_thought += token# 检测到动作标记时,结束当前思考收集if "Action:" in token:self.thoughts.append(self.current_thought)self.is_thinking = Falsedef on_llm_end(self, response, **kwargs) -> None:"""AI输出结束时的处理保存最后一个思考并展示完整思维链"""# 保存最后一个思考(如果存在)if self.current_thought:self.thoughts.append(self.current_thought)self.current_thought = ""# 格式化展示完整的思维链 - 让用户理解AI的推理过程if self.thoughts:print("\n\n===== 完整思维链 =====")for i, thought in enumerate(self.thoughts):print(f"思考 {i+1}: {thought}\n")# ================================
# 4. 医疗工具模块 - 核心业务功能实现
# ================================@tool
def search_disease_treatment(disease_name: str) -> str:"""疾病治疗方案搜索工具功能:搜索特定疾病的治疗方法和临床策略参数:disease_name - 疾病名称(如"2型糖尿病")返回:治疗方案的详细信息为什么需要这个工具?- 医疗知识更新快,需要获取最新的治疗指南- 不同疾病有不同的治疗策略,需要专门查询"""try:# 创建DuckDuckGo搜索实例 - 免费的搜索引擎APIsearch = DuckDuckGoSearchRun()# 执行搜索 - 使用专业医疗关键词提高搜索精度result = search.run(f"{disease_name} 治疗方法 临床指南")return resultexcept Exception as e:# 搜索失败时的备用医疗知识库if "糖尿病" in disease_name:return """2型糖尿病治疗策略包括:
1. 生活方式干预:健康饮食、规律运动、体重管理
2. 药物治疗:二甲双胍为一线用药,必要时联合其他降糖药
3. 血糖监测:定期检测血糖、糖化血红蛋白
4. 并发症预防:控制血压、血脂,保护肾脏和心血管
5. 患者教育:糖尿病自我管理知识
注:搜索服务暂时不可用,以上为基础医疗知识参考"""return f"搜索服务暂时不可用,无法获取{disease_name}的最新治疗信息"@tool
def search_disease_medications(disease_name: str) -> str:"""疾病用药方案搜索工具功能:搜索特定疾病的推荐用药和处方信息参数:disease_name - 疾病名称返回:药物处方和用药指导"""try:search = DuckDuckGoSearchRun()# 搜索药物相关信息 - 关注处方和用药指南result = search.run(f"{disease_name} 推荐药物 处方 用药指南")return resultexcept Exception as e:# 糖尿病用药的备用知识库if "糖尿病" in disease_name:return """2型糖尿病常用药物:
1. 二甲双胍:一线用药,改善胰岛素敏感性
2. 磺脲类:格列齐特、格列美脲等,促进胰岛素分泌
3. DPP-4抑制剂:西格列汀、维格列汀等
4. SGLT-2抑制剂:达格列净、恩格列净等
5. GLP-1受体激动剂:利拉鲁肽、司美格鲁肽等
6. 胰岛素:根据病情需要使用
注:搜索服务暂时不可用,以上为基础用药知识参考"""return f"搜索服务暂时不可用,无法获取{disease_name}的最新用药信息"@tool
def search_medication_details(medication_name: str) -> str:"""药物详细信息查询工具功能:查询特定药物的详细信息、用法用量和副作用参数:medication_name - 药物名称(如"二甲双胍")返回:药物的详细使用说明"""try:search = DuckDuckGoSearchRun()# 搜索药物详细信息 - 关注用法用量和安全性result = search.run(f"{medication_name} 用法用量 副作用 禁忌症")return resultexcept Exception as e:# 常见药物的详细信息备用库medication_info = {"二甲双胍": """二甲双胍详细信息:
用法用量:起始剂量500mg,每日2-3次,餐时或餐后服用,最大剂量2000-2500mg/日
作用机制:减少肝糖输出,改善胰岛素敏感性
副作用:胃肠道反应(恶心、腹泻、腹胀)、乳酸酸中毒(罕见)
禁忌症:严重肾功能不全、肝功能不全、心衰、酗酒
注意事项:定期监测肾功能""","格列齐特": """格列齐特详细信息:
用法用量:30-120mg/日,分1-2次服用,餐前30分钟
作用机制:刺激胰岛β细胞分泌胰岛素
副作用:低血糖、体重增加、皮疹
禁忌症:1型糖尿病、糖尿病酮症酸中毒、严重肝肾功能不全
注意事项:注意低血糖反应,老年患者慎用""",}# 查找匹配的药物信息for med, info in medication_info.items():if med in medication_name:return info + "\n注:搜索服务暂时不可用,以上为基础药物知识参考"return f"搜索服务暂时不可用,无法获取{medication_name}的详细信息"@tool
def calculator(expression: str) -> str:"""数学计算工具功能:执行数学计算,用于药物剂量计算等参数:expression - 数学表达式字符串返回:计算结果使用场景:- 根据患者体重计算药物剂量- 计算血糖控制指标- 其他医疗相关的数值计算"""try:# 安全的数学表达式计算return str(eval(expression))except Exception as e:return f"计算错误: {e}"# ================================
# 5. AI模型初始化模块 - 大脑配置
# ================================def initialize_llm(base_url: str):"""初始化大语言模型功能:配置Qwen模型的各项参数参数:base_url - API基础URL返回:配置好的LLM实例模型配置说明:- model: 选择qwen-max获得最佳性能- temperature: 0.1保证输出的一致性和准确性- max_tokens: 2000确保能输出完整的医疗建议"""# 创建思维链回调处理器实例thought_callback = ThoughtProcessCallbackHandler()# 初始化Qwen模型 - 通过OpenAI兼容接口llm = ChatOpenAI(model="qwen-max",  # 使用Qwen的最强模型base_url=base_url,  # 阿里云DashScope接口streaming=True,  # 开启流式输出,实时显示思考过程callbacks=[thought_callback],  # 添加思维链追踪temperature=0.1,  # 较低温度确保医疗建议的准确性max_tokens=2000,  # 足够的token数量输出完整建议timeout=30  # 30秒超时防止请求卡死)return llm, thought_callback# ================================
# 6. Agent代理模块 - 智能决策中心
# ================================def create_medical_agent(llm, tools):"""创建医疗顾问AI代理功能:整合LLM和工具,创建能够自主决策的AI代理参数:- llm: 大语言模型实例- tools: 可用工具列表返回:配置好的Agent执行器"""# 创建对话记忆 - 保持上下文连续性memory = ConversationBufferMemory(memory_key="chat_history",  # 记忆键名return_messages=True  # 返回消息格式)# 创建Agent提示模板 - AI的行为指导方针template = """你是一个专业的医疗顾问AI助手,具备查询疾病治疗方案和药物知识的能力。可用工具:
{tools}工具名称: {tool_names}对话历史:
{chat_history}当前问题: {input}工作流程规范:
当需要使用工具时,请严格遵循以下格式,一次只能执行一个动作:
思考: 详细说明你的分析过程,包括问题理解、解决策略和工具选择理由
Action: 工具名称
Action Input: 工具输入参数
Observation: 工具返回的结果当完成所有必要的工具调用后,使用以下格式给出最终答案:
思考: 综合分析所有搜索结果,说明如何得出结论
Final Answer: 完整的医疗建议医疗咨询标准流程:
1. 首先搜索疾病的基本治疗策略和临床指南
2. 然后查询该疾病的推荐用药和处方信息  
3. 对重要药物进一步查询详细的用法用量和副作用
4. 整合所有信息,提供全面的治疗建议
5. 必须声明:本建议仅供参考,不能替代专业医生的诊断和治疗重要提醒:
- 每次回应只能包含一个Action或一个Final Answer
- 必须基于搜索结果提供建议,不得编造信息
- 确保建议的准确性、全面性和安全性{agent_scratchpad}
"""# 创建提示模板实例prompt = PromptTemplate.from_template(template)# 创建ReAct类型的Agent - 能够推理和行动的智能代理agent = create_react_agent(llm, tools, prompt)# 创建Agent执行器 - 负责执行Agent的决策agent_executor = AgentExecutor(agent=agent,  # 智能代理实例tools=tools,  # 可用工具列表memory=memory,  # 对话记忆verbose=True,  # 详细输出执行过程return_intermediate_steps=True,  # 返回中间步骤max_iterations=10,  # 最大迭代次数防止无限循环early_stopping_method="generate",  # 早停策略handle_parsing_errors=True  # 处理解析错误)return agent_executor# ================================
# 7. 主控制模块 - 领导式系统协调
# ================================def run_medical_consultation(query: str, agent_executor, thought_callback):"""执行医疗咨询 - 主控制函数功能:协调整个医疗咨询流程的执行参数:- query: 用户的医疗咨询问题- agent_executor: AI代理执行器- thought_callback: 思维链回调处理器返回:咨询结果领导式规划:1. 接收用户问题2. 重置思维链收集器3. 执行AI代理咨询4. 展示详细的执行步骤5. 输出最终的医疗建议"""print(f"\n===== 用户咨询: {query} =====\n")# 重置思维链收集器 - 确保每次咨询的独立性thought_callback.thoughts = []try:# 执行AI代理咨询 - 核心业务逻辑result = agent_executor.invoke({"input": query})# 提取并展示执行步骤 - 增强系统透明度intermediate_steps = result.get("intermediate_steps", [])print("\n===== 执行步骤详情 =====")for i, step in enumerate(intermediate_steps):action, observation = stepprint(f"\n步骤 {i+1}:")print(f"使用工具: {action.tool}")print(f"输入参数: {action.tool_input}")print(f"执行结果: {observation}")# 输出最终的医疗建议print(f"\n===== 最终医疗建议 =====\n{result['output']}\n")return resultexcept Exception as e:print(f"咨询过程中出现错误: {e}")return None# ================================
# 8. 系统启动模块 - 主函数入口
# ================================def main():"""主函数 - 系统启动入口领导式规划:整个医疗顾问系统的启动和运行流程1. 环境配置2. 模型初始化  3. 工具准备4. 代理创建5. 系统启动6. 执行咨询"""print("\n========== 医疗顾问AI系统启动 ==========")print("基于Qwen API的智能医疗助手")print("功能:疾病治疗方案查询 + 药物处方建议")# 步骤1:环境配置print("\n[1/5] 正在配置系统环境...")base_url = setup_environment()# 步骤2:初始化AI模型print("[2/5] 正在初始化Qwen模型...")llm, thought_callback = initialize_llm(base_url)# 步骤3:准备医疗工具集print("[3/5] 正在准备医疗工具...")tools = [search_disease_treatment,   # 疾病治疗搜索工具search_disease_medications, # 药物处方搜索工具search_medication_details,  # 药物详情查询工具calculator                  # 数学计算工具]# 步骤4:创建医疗AI代理print("[4/5] 正在创建医疗AI代理...")agent_executor = create_medical_agent(llm, tools)# 步骤5:系统就绪,开始咨询print("[5/5] 系统启动完成,开始医疗咨询...\n")# 执行示例咨询sample_query = "患者有2型糖尿病,该如何治疗,用什么药物处方"result = run_medical_consultation(sample_query, agent_executor, thought_callback)return result# ================================
# 9. 程序入口点
# ================================if __name__ == "__main__":main()

输出结果,居然连不上网

========== 医疗顾问AI系统启动 ==========
基于Qwen API的智能医疗助手
功能:疾病治疗方案查询 + 药物处方建议

[1/5] 正在配置系统环境…
[2/5] 正在初始化Qwen模型…
[3/5] 正在准备医疗工具…
[4/5] 正在创建医疗AI代理…
[5/5] 系统启动完成,开始医疗咨询…

===== 用户咨询: 患者有2型糖尿病,该如何治疗,用什么药物处方 =====

Entering new AgentExecutor chain…
思考: 对于2型糖尿病的治疗,首先需要了解当前最新的临床指南和推荐的治疗方法。这将帮助我们理解基础的治疗原则以及可能涉及的生活方式调整等非药物干预措施。因此,我将首先使用search_disease_treatment工具来获取这些信息。
Action: search_disease_treatment
Action Input: 2型糖尿病思考: 对于2型糖尿病的治疗,首先需要了解当前最新的临床指南和推荐的治疗方法。这将帮助我们理解基础的治疗原则以及可能涉及的生活方式调整等非药物干预措施。因此,我将首先使用search_disease_treatment工具来获取这些信息。
Action: search_disease_treatment
Action Input: 2型糖尿病2型糖尿病治疗策略包括:

  1. 生活方式干预:健康饮食、规律运动、体重管理
  2. 药物治疗:二甲双胍为一线用药,必要时联合其他降糖药
  3. 血糖监测:定期检测血糖、糖化血红蛋白
  4. 并发症预防:控制血压、血脂,保护肾脏和心血管
  5. 患者教育:糖尿病自我管理知识
    注:搜索服务暂时不可用,以上为基础医疗知识参考基于观察到的信息,2型糖尿病的治疗是一个综合性的过程,包括生活方式的调整和药物治疗等多方面。接下来,为了给患者提供具体的药物处方建议,我将使用search_disease_medications工具来获取针对2型糖尿病推荐使用的药物信息。
    Action: search_disease_medications
    Action Input: 2型糖尿病基于观察到的信息,2型糖尿病的治疗是一个综合性的过程,包括生活方式的调整和药物治疗等多方面。接下来,为了给患者提供具体的药物处方建议,我将使用search_disease_medications工具来获取针对2型糖尿病推荐使用的药物信息。
    Action: search_disease_medications
    Action Input: 2型糖尿病2型糖尿病常用药物:
  6. 二甲双胍:一线用药,改善胰岛素敏感性
  7. 磺脲类:格列齐特、格列美脲等,促进胰岛素分泌
  8. DPP-4抑制剂:西格列汀、维格列汀等
  9. SGLT-2抑制剂:达格列净、恩格列净等
  10. GLP-1受体激动剂:利拉鲁肽、司美格鲁肽等
  11. 胰岛素:根据病情需要使用
    注:搜索服务暂时不可用,以上为基础用药知识参考根据观察到的信息,对于2型糖尿病的药物治疗方案有了一个大致了解。二甲双胍作为一线用药,在大多数情况下是首选;而其他类型的降糖药如磺脲类、DPP-4抑制剂等则可以根据患者的具体情况(比如血糖控制效果、是否存在特定并发症)来选择性地添加使用。接下来,考虑到二甲双胍的重要性及其广泛的应用,我认为有必要进一步查询这种药物的具体用法用量及可能产生的副作用,以便为患者提供更加详尽且安全的用药指导。
    Action: search_medication_details
    Action Input: 二甲双胍根据观察到的信息,对于2型糖尿病的药物治疗方案有了一个大致了解。二甲双胍作为一线用药,在大多数情况下是首选;而其他类型的降糖药如磺脲类、DPP-4抑制剂等则可以根据患者的具体情况(比如血糖控制效果、是否存在特定并发症)来选择性地添加使用。接下来,考虑到二甲双胍的重要性及其广泛的应用,我认为有必要进一步查询这种药物的具体用法用量及可能产生的副作用,以便为患者提供更加详尽且安全的用药指导。
    Action: search_medication_details
    Action Input: 二甲双胍二甲双胍详细信息:
    用法用量:起始剂量500mg,每日2-3次,餐时或餐后服用,最大剂量2000-2500mg/日
    作用机制:减少肝糖输出,改善胰岛素敏感性
    副作用:胃肠道反应(恶心、腹泻、腹胀)、乳酸酸中毒(罕见)
    禁忌症:严重肾功能不全、肝功能不全、心衰、酗酒
    注意事项:定期监测肾功能
    注:搜索服务暂时不可用,以上为基础药物知识参考综合以上收集到的信息,我们可以为2型糖尿病患者提供一个较为全面的治疗建议。首先,生活方式的调整是基础,包括健康饮食、规律运动以及体重管理等非药物干预措施。其次,在药物治疗方面,二甲双胍作为一线用药被广泛推荐使用,其主要通过减少肝脏糖分输出并提高身体对胰岛素的敏感度来发挥作用。对于部分患者来说,可能还需要联合其他类型的降糖药物以达到更好的血糖控制效果。

关于二甲双胍的具体使用,通常从较低剂量开始(如500mg/次),每日服用2-3次,并且最好是在餐时或餐后服用,以减轻胃肠道不适的症状。随着治疗进程的发展,医生可能会根据患者的反应逐渐增加剂量至最大推荐量(约2000-2500mg/日)。需要注意的是,虽然二甲双胍相对安全有效,但仍有可能引起一些副作用,比如轻微的胃肠道不适;极少数情况下可能发生严重的乳酸酸中毒。因此,在使用过程中应密切关注任何不良反应,并定期检查肾功能状态。

此外,还有多种其他类型的降糖药物可供选择,例如磺脲类药物可以刺激胰腺产生更多胰岛素;DPP-4抑制剂和SGLT-2抑制剂则分别通过不同的机制帮助降低血糖水平;GLP-1受体激动剂不仅有助于血糖控制还能促进减重;当口服药物不足以控制血糖时,则需要考虑使用胰岛素治疗。

Final Answer: 对于2型糖尿病患者而言,建议采取综合性治疗方法,结合生活方式调整与合理用药。二甲双胍通常是首选药物,但具体治疗方案需由专业医师根据个人情况制定。请务必遵循医嘱服药,并注意监测可能出现的副作用。本建议仅供参考,不能替代专业医生的诊断和治疗。综合以上收集到的信息,我们可以为2型糖尿病患者提供一个较为全面的治疗建议。首先,生活方式的调整是基础,包括健康饮食、规律运动以及体重管理等非药物干预措施。其次,在药物治疗方面,二甲双胍作为一线用药被广泛推荐使用,其主要通过减少肝脏糖分输出并提高身体对胰岛素的敏感度来发挥作用。对于部分患者来说,可能还需要联合其他类型的降糖药物以达到更好的血糖控制效果。

关于二甲双胍的具体使用,通常从较低剂量开始(如500mg/次),每日服用2-3次,并且最好是在餐时或餐后服用,以减轻胃肠道不适的症状。随着治疗进程的发展,医生可能会根据患者的反应逐渐增加剂量至最大推荐量(约2000-2500mg/日)。需要注意的是,虽然二甲双胍相对安全有效,但仍有可能引起一些副作用,比如轻微的胃肠道不适;极少数情况下可能发生严重的乳酸酸中毒。因此,在使用过程中应密切关注任何不良反应,并定期检查肾功能状态。

此外,还有多种其他类型的降糖药物可供选择,例如磺脲类药物可以刺激胰腺产生更多胰岛素;DPP-4抑制剂和SGLT-2抑制剂则分别通过不同的机制帮助降低血糖水平;GLP-1受体激动剂不仅有助于血糖控制还能促进减重;当口服药物不足以控制血糖时,则需要考虑使用胰岛素治疗。

Final Answer: 对于2型糖尿病患者而言,建议采取综合性治疗方法,结合生活方式调整与合理用药。二甲双胍通常是首选药物,但具体治疗方案需由专业医师根据个人情况制定。请务必遵循医嘱服药,并注意监测可能出现的副作用。本建议仅供参考,不能替代专业医生的诊断和治疗。

Finished chain.

===== 执行步骤详情 =====

步骤 1:
使用工具: search_disease_treatment
输入参数: 2型糖尿病
执行结果: 2型糖尿病治疗策略包括:

  1. 生活方式干预:健康饮食、规律运动、体重管理
  2. 药物治疗:二甲双胍为一线用药,必要时联合其他降糖药
  3. 血糖监测:定期检测血糖、糖化血红蛋白
  4. 并发症预防:控制血压、血脂,保护肾脏和心血管
  5. 患者教育:糖尿病自我管理知识
    注:搜索服务暂时不可用,以上为基础医疗知识参考

步骤 2:
使用工具: search_disease_medications
输入参数: 2型糖尿病
执行结果: 2型糖尿病常用药物:

  1. 二甲双胍:一线用药,改善胰岛素敏感性
  2. 磺脲类:格列齐特、格列美脲等,促进胰岛素分泌
  3. DPP-4抑制剂:西格列汀、维格列汀等
  4. SGLT-2抑制剂:达格列净、恩格列净等
  5. GLP-1受体激动剂:利拉鲁肽、司美格鲁肽等
  6. 胰岛素:根据病情需要使用
    注:搜索服务暂时不可用,以上为基础用药知识参考

步骤 3:
使用工具: search_medication_details
输入参数: 二甲双胍
执行结果: 二甲双胍详细信息:
用法用量:起始剂量500mg,每日2-3次,餐时或餐后服用,最大剂量2000-2500mg/日
作用机制:减少肝糖输出,改善胰岛素敏感性
副作用:胃肠道反应(恶心、腹泻、腹胀)、乳酸酸中毒(罕见)
禁忌症:严重肾功能不全、肝功能不全、心衰、酗酒
注意事项:定期监测肾功能
注:搜索服务暂时不可用,以上为基础药物知识参考

===== 最终医疗建议 =====
对于2型糖尿病患者而言,建议采取综合性治疗方法,结合生活方式调整与合理用药。二甲双胍通常是首选药物,但具体治疗方案需由专业医师根据个人情况制定。请务必遵循医嘱服药,并注意监测可能出现的副作用。本建议仅供参考,不能替代专业医生的诊断和治疗。

运行结果梳理

在这里插入图片描述

第二版

"""
深度网络调研医疗顾问AI系统
专注于在线信息获取和深度调研分析核心特性:
1. 强化网络搜索能力 - 解决DuckDuckGo连接问题
2. 多角度深度调研 - 医学文献、临床指南、药物数据库
3. 搜索结果智能分析 - 提取关键信息,去除噪音
4. 实时信息获取 - 最新治疗方案和药物信息
5. 详细搜索诊断 - 精确定位网络问题
"""# ================================
# 1. 依赖库导入和配置
# ================================import os
import time
import json
import logging
import requests
from typing import List, Dict, Any, Optional
from urllib.parse import quote
import urllib3
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry# 禁用SSL警告(调试时使用)
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)# LangChain核心库
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain.tools import tool
from langchain.agents import AgentExecutor, create_react_agent
from langchain.prompts import PromptTemplate
from langchain.memory import ConversationBufferMemory
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler# 搜索相关
from langchain_community.tools import DuckDuckGoSearchRun
from duckduckgo_search import DDGS# ================================
# 2. 日志和调试配置
# ================================def setup_logging():"""设置详细的调试日志"""logging.basicConfig(level=logging.DEBUG,  # 设置为DEBUG级别format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',handlers=[logging.FileHandler('medical_research.log', encoding='utf-8'),logging.StreamHandler()])# 设置第三方库的日志级别logging.getLogger('urllib3').setLevel(logging.DEBUG)logging.getLogger('requests').setLevel(logging.DEBUG)return logging.getLogger(__name__)logger = setup_logging()# ================================
# 3. 网络连接诊断工具
# ================================class NetworkDiagnostic:"""网络连接诊断工具"""@staticmethoddef test_basic_connectivity():"""测试基础网络连接"""test_urls = ["https://www.google.com","https://www.bing.com", "https://duckduckgo.com","https://www.baidu.com"]print("🔍 开始网络连接诊断...")results = {}for url in test_urls:try:response = requests.get(url, timeout=10)results[url] = {'status': '✅ 连接成功','status_code': response.status_code,'response_time': f"{response.elapsed.total_seconds():.2f}s"}print(f"   {url}: ✅ {response.status_code} ({response.elapsed.total_seconds():.2f}s)")except requests.exceptions.ConnectTimeout:results[url] = {'status': '❌ 连接超时', 'error': 'Timeout'}print(f"   {url}: ❌ 连接超时")except requests.exceptions.ConnectionError as e:results[url] = {'status': '❌ 连接错误', 'error': str(e)}print(f"   {url}: ❌ 连接错误 - {e}")except Exception as e:results[url] = {'status': '❌ 其他错误', 'error': str(e)}print(f"   {url}: ❌ 其他错误 - {e}")return results@staticmethoddef test_proxy_settings():"""检测代理设置"""print("🔍 检查代理设置...")proxy_vars = ['HTTP_PROXY', 'HTTPS_PROXY', 'http_proxy', 'https_proxy']for var in proxy_vars:value = os.environ.get(var)if value:print(f"   发现代理设置: {var} = {value}")else:print(f"   {var}: 未设置")@staticmethoddef test_dns_resolution():"""测试DNS解析"""import socketprint("🔍 测试DNS解析...")hosts = ['duckduckgo.com', 'google.com', 'bing.com']for host in hosts:try:ip = socket.gethostbyname(host)print(f"   {host} -> {ip} ✅")except socket.gaierror as e:print(f"   {host} -> DNS解析失败: {e} ❌")# ================================
# 4. 强化搜索引擎类
# ================================class EnhancedSearchEngine:"""增强版搜索引擎 - 专注解决连接问题"""def __init__(self):self.session = self._create_robust_session()self.ddgs = Noneself._init_ddgs()def _create_robust_session(self):"""创建健壮的requests会话"""session = requests.Session()# 配置重试策略retry_strategy = Retry(total=3,backoff_factor=1,status_forcelist=[429, 500, 502, 503, 504],allowed_methods=["HEAD", "GET", "OPTIONS"])adapter = HTTPAdapter(max_retries=retry_strategy)session.mount("http://", adapter)session.mount("https://", adapter)# 设置请求头session.headers.update({'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language': 'en-US,en;q=0.5','Accept-Encoding': 'gzip, deflate','Connection': 'keep-alive',})# 超时设置session.timeout = 30return sessiondef _init_ddgs(self):"""初始化DuckDuckGo搜索"""try:logger.info("🦆 初始化DuckDuckGo搜索引擎...")self.ddgs = DDGS(headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'},timeout=30)logger.info("✅ DuckDuckGo初始化成功")except Exception as e:logger.error(f"❌ DuckDuckGo初始化失败: {e}")self.ddgs = Nonedef search_duckduckgo_direct(self, query: str, max_results: int = 10) -> List[Dict]:"""直接使用duckduckgo-search库"""logger.info(f"🦆 使用duckduckgo-search直接搜索: {query}")try:if self.ddgs is None:self._init_ddgs()if self.ddgs is None:raise Exception("DuckDuckGo搜索引擎初始化失败")# 执行搜索results = list(self.ddgs.text(keywords=query,max_results=max_results,region='us-en',safesearch='moderate'))logger.info(f"✅ DuckDuckGo搜索成功,获得 {len(results)} 个结果")return resultsexcept Exception as e:logger.error(f"❌ DuckDuckGo直接搜索失败: {e}")return []def search_with_fallback(self, query: str) -> str:"""带降级策略的搜索"""logger.info(f"🔍 开始搜索: {query}")# 方法1: 直接使用duckduckgo-searchresults = self.search_duckduckgo_direct(query)if results:return self._format_search_results(results, "DuckDuckGo Direct")# 方法2: 使用LangChain的DuckDuckGoSearchRuntry:logger.info("🔄 尝试LangChain DuckDuckGoSearchRun...")search_tool = DuckDuckGoSearchRun()result = search_tool.run(query)if result and "No results found" not in result:logger.info("✅ LangChain DuckDuckGo搜索成功")return f"📋 搜索结果 (LangChain DuckDuckGo):\n{result}"except Exception as e:logger.error(f"❌ LangChain DuckDuckGo搜索失败: {e}")# 方法3: 使用自定义HTTP请求try:logger.info("🔄 尝试自定义HTTP搜索...")return self._custom_search_request(query)except Exception as e:logger.error(f"❌ 自定义搜索失败: {e}")# 所有方法都失败logger.error("❌ 所有搜索方法均失败")return "❌ 网络搜索暂时不可用,请检查网络连接设置。建议:\n1. 检查防火墙设置\n2. 确认代理配置\n3. 测试DNS解析\n4. 联系网络管理员"def _format_search_results(self, results: List[Dict], source: str) -> str:"""格式化搜索结果"""if not results:return "未找到相关搜索结果"formatted = f"📋 搜索结果 ({source}):\n\n"for i, result in enumerate(results[:5], 1):  # 只显示前5个结果title = result.get('title', '无标题')body = result.get('body', result.get('snippet', '无摘要'))href = result.get('href', '无链接')formatted += f"{i}. **{title}**\n"formatted += f"   {body[:200]}...\n"formatted += f"   🔗 {href}\n\n"return formatteddef _custom_search_request(self, query: str) -> str:"""自定义HTTP搜索请求"""logger.info("🔄 执行自定义HTTP搜索请求...")# 构建搜索URLencoded_query = quote(query)search_url = f"https://duckduckgo.com/html/?q={encoded_query}"try:response = self.session.get(search_url, timeout=30)response.raise_for_status()# 简单的HTML解析(这里可以用BeautifulSoup进一步优化)content = response.textif "No results found" in content:return "未找到相关搜索结果"logger.info("✅ 自定义HTTP搜索成功")return f"📋 搜索成功 (自定义HTTP):\n搜索查询: {query}\n状态: 已获取搜索页面\n建议: 请查看完整搜索结果以获取详细信息"except Exception as e:logger.error(f"❌ 自定义HTTP搜索失败: {e}")raise# 全局搜索引擎实例
search_engine = EnhancedSearchEngine()# ================================
# 5. 深度调研工具集
# ================================@tool
def deep_medical_research(topic: str) -> str:"""深度医疗调研工具针对医疗主题进行多角度深度调研包括:临床指南、最新研究、治疗方案、药物信息"""logger.info(f"🔬 开始深度医疗调研: {topic}")# 构建多个专业搜索查询research_queries = [f"{topic} 临床治疗指南 2024 2025",f"{topic} 最新研究 clinical trial",f"{topic} 药物治疗 medication treatment", f"{topic} 诊疗规范 medical guidelines",f"{topic} 循证医学 evidence based medicine"]all_results = []for i, query in enumerate(research_queries, 1):logger.info(f"📍 执行第 {i} 个调研查询: {query}")result = search_engine.search_with_fallback(query)if result and "❌" not in result:all_results.append(f"🔍 调研角度 {i}: {query}\n{result}\n")logger.info(f"✅ 第 {i} 个查询成功")else:logger.warning(f"⚠️ 第 {i} 个查询失败")# 添加延迟避免频率限制time.sleep(2)if all_results:combined_result = f"📊 {topic} 深度调研报告:\n\n" + "\n".join(all_results)logger.info(f"✅ 深度调研完成,共获得 {len(all_results)} 份有效结果")return combined_resultelse:logger.error("❌ 深度调研失败")return f"❌ 无法完成 {topic} 的深度调研,请检查网络连接"@tool  
def search_latest_medical_guidelines(disease: str) -> str:"""搜索最新医疗指南和临床规范"""logger.info(f"📚 搜索最新医疗指南: {disease}")queries = [f"{disease} clinical guidelines 2024 2025",f"{disease} treatment protocol latest",f"{disease} 诊疗指南 国家标准",f"{disease} WHO guidelines recommendations"]for query in queries:result = search_engine.search_with_fallback(query)if result and "❌" not in result:return f"📚 {disease} 最新医疗指南:\n{result}"time.sleep(1)return f"❌ 无法获取 {disease} 的最新医疗指南"@tool
def search_drug_information(drug_name: str) -> str:"""搜索药物详细信息和最新资料"""logger.info(f"💊 搜索药物信息: {drug_name}")queries = [f"{drug_name} 药物说明书 用法用量",f"{drug_name} side effects contraindications",f"{drug_name} clinical pharmacology",f"{drug_name} drug interactions warnings"]for query in queries:result = search_engine.search_with_fallback(query)if result and "❌" not in result:return f"💊 {drug_name} 详细药物信息:\n{result}"time.sleep(1)return f"❌ 无法获取 {drug_name} 的详细信息"@tool
def search_medical_research(topic: str) -> str:"""搜索最新医学研究和临床试验"""logger.info(f"🔬 搜索医学研究: {topic}")queries = [f"{topic} clinical trial 2024 2025",f"{topic} latest research pubmed",f"{topic} systematic review meta-analysis",f"{topic} 最新研究 临床试验"]for query in queries:result = search_engine.search_with_fallback(query)if result and "❌" not in result:return f"🔬 {topic} 最新医学研究:\n{result}"time.sleep(1)return f"❌ 无法获取 {topic} 的最新研究信息"@tool
def network_diagnostic_tool() -> str:"""网络诊断工具"""logger.info("🔧 执行网络诊断...")print("\n" + "="*50)print("🔧 网络连接诊断报告")print("="*50)# 基础连接测试connectivity_results = NetworkDiagnostic.test_basic_connectivity()# 代理设置检查NetworkDiagnostic.test_proxy_settings()# DNS解析测试NetworkDiagnostic.test_dns_resolution()# 搜索引擎测试print("\n🔍 搜索引擎连接测试...")test_query = "医学测试"result = search_engine.search_with_fallback(test_query)if "❌" not in result:print("   搜索引擎: ✅ 工作正常")status = "✅ 网络连接正常,搜索功能可用"else:print("   搜索引擎: ❌ 连接失败")status = "❌ 网络连接存在问题,搜索功能不可用"print("="*50)return status# ================================
# 6. 环境配置
# ================================def setup_environment():"""环境配置"""logger.info("🔧 配置系统环境...")load_dotenv()# API配置api_key = os.getenv("QWEN_API_KEY", "sk-025a68f2bf98489c9e4fce2fc0c9f0c2")os.environ["OPENAI_API_KEY"] = api_keybase_url = os.getenv("QWEN_BASE_URL", "https://dashscope.aliyuncs.com/compatible-mode/v1")logger.info("✅ 环境配置完成")return base_url# ================================
# 7. AI模型和Agent
# ================================class MedicalResearchCallbackHandler(StreamingStdOutCallbackHandler):"""医疗调研回调处理器"""def __init__(self):super().__init__()self.search_count = 0def on_llm_new_token(self, token: str, **kwargs) -> None:print(token, end="", flush=True)if "搜索" in token or "search" in token.lower():self.search_count += 1def initialize_llm(base_url: str):"""初始化LLM"""logger.info("🤖 初始化Qwen模型...")callback = MedicalResearchCallbackHandler()llm = ChatOpenAI(model="qwen-max",base_url=base_url,streaming=True,callbacks=[callback],temperature=0.1,max_tokens=4000,timeout=120)logger.info("✅ Qwen模型初始化成功")return llm, callbackdef create_research_agent(llm, tools):"""创建深度调研Agent"""logger.info("🤖 创建深度调研Agent...")memory = ConversationBufferMemory(memory_key="chat_history",return_messages=True)# 专注于深度调研的提示模板template = """你是一个专业的医疗信息调研AI,专门进行深度的在线医疗信息搜索和分析。🛠️ 可用工具:
{tools}工具名称: {tool_names}📝 对话历史:
{chat_history}❓ 调研任务: {input}🔍 深度调研标准流程:
当收到医疗咨询任务时,你必须按以下步骤执行深度在线调研:1. 🔬 **深度医疗调研**: 使用deep_medical_research工具进行多角度调研
2. 📚 **最新指南搜索**: 使用search_latest_medical_guidelines获取权威指南
3. 💊 **药物信息搜索**: 使用search_drug_information获取详细药物资料
4. 🔬 **最新研究搜索**: 使用search_medical_research获取前沿研究信息
5. 📊 **综合分析**: 整合所有在线搜索结果,提供基于最新信息的专业建议🎯 调研质量要求:
- 必须基于在线搜索的实时信息
- 不得使用任何预设的本地知识
- 每个工具都要使用,确保信息全面性
- 如果搜索失败,使用network_diagnostic_tool诊断问题
- 提供信息来源和时效性说明⚠️ 重要原则:
- 所有建议必须基于搜索到的最新在线信息
- 强调信息的时效性和来源可靠性
- 建议用户咨询专业医生进行个性化诊疗使用ReAct格式,每次只执行一个动作:
思考: [分析当前情况,选择下一步工具]
Action: [工具名称]
Action Input: [具体参数]
Observation: [工具返回结果]最终必须用以下格式提供综合分析:
Final Answer: [基于所有搜索结果的综合医疗建议]{agent_scratchpad}
"""prompt = PromptTemplate.from_template(template)agent = create_react_agent(llm, tools, prompt)agent_executor = AgentExecutor(agent=agent,tools=tools,memory=memory,verbose=True,return_intermediate_steps=True,max_iterations=20,  # 增加迭代次数支持深度调研early_stopping_method="generate",handle_parsing_errors=True,max_execution_time=600  # 10分钟超时)logger.info("✅ 深度调研Agent创建成功")return agent_executor# ================================
# 8. 主控制函数
# ================================def run_deep_medical_research(query: str, agent_executor, callback):"""执行深度医疗调研"""logger.info(f"🏥 开始深度医疗调研: {query}")print(f"\n===== 🔬 深度医疗调研任务: {query} =====\n")# 重置计数器callback.search_count = 0start_time = time.time()try:# 执行深度调研result = agent_executor.invoke({"input": query})execution_time = time.time() - start_time# 显示调研统计intermediate_steps = result.get("intermediate_steps", [])print("\n===== 📊 调研执行统计 =====")print(f"🔧 执行工具数量: {len(intermediate_steps)}")print(f"🔍 搜索操作次数: {callback.search_count}")print(f"⏱️ 总调研时间: {execution_time:.2f} 秒")# 显示执行步骤print("\n===== 🔍 调研步骤详情 =====")for i, step in enumerate(intermediate_steps):action, observation = stepprint(f"\n🔧 步骤 {i+1}: {action.tool}")print(f"   📥 输入: {action.tool_input}")# 只显示观察结果的前200字符避免输出过长obs_preview = str(observation)[:200] + "..." if len(str(observation)) > 200 else str(observation)print(f"   📤 结果: {obs_preview}")# 最终调研报告print(f"\n===== 🏥 深度调研报告 =====")print(result.get('output', '未能生成调研报告'))logger.info("✅ 深度医疗调研完成")return resultexcept Exception as e:execution_time = time.time() - start_timelogger.error(f"❌ 调研失败: {e}")print(f"\n❌ 调研过程出现错误: {e}")print(f"⏱️ 错误前耗时: {execution_time:.2f} 秒")return Nonedef main():"""主函数"""print("""
🔬 ============================================深度网络调研医疗顾问AI系统 v3.0
🔬 ============================================
🌐 专注在线信息获取和实时医疗调研
🔍 解决网络搜索问题,提供最新医疗信息
🏥 支持多角度深度调研和专业分析""")try:# 系统初始化print("🔧 [1/5] 配置系统环境...")base_url = setup_environment()print("🔍 [2/5] 执行网络诊断...")NetworkDiagnostic.test_basic_connectivity()print("🤖 [3/5] 初始化AI模型...")llm, callback = initialize_llm(base_url)print("🛠️ [4/5] 准备调研工具...")tools = [deep_medical_research,search_latest_medical_guidelines,search_drug_information,search_medical_research,network_diagnostic_tool]print("🤖 [5/5] 创建调研Agent...")agent_executor = create_research_agent(llm, tools)print("\n✅ 系统启动完成!开始深度调研演示...")# 执行深度调研示例sample_query = "2型糖尿病的最新治疗方案和药物选择,需要最新的临床指南和研究证据"result = run_deep_medical_research(sample_query, agent_executor, callback)return resultexcept Exception as e:logger.error(f"系统启动失败: {e}")print(f"❌ 系统启动失败: {e}")return Noneif __name__ == "__main__":main()

结果测试

这个版本去掉了知识库,只使用联网搜索,但调用联网搜索模块还是不成功。

为什么,autodl 上不能调用联网工具,不知道怎么回事。

相关文章:

医学 Agent:自带医学深度调研 deep research,优化治疗策略+药物参考

医学 Agent:自带医学深度调研deep research,优化治疗策略药物参考 第一版代码输出结果,居然连不上网运行结果梳理 第二版结果测试 第一版代码 医疗顾问AI系统 - 基于Qwen API 的智能医疗助手 最终目标:构建一个能够查询疾病治疗方…...

硬件工程师笔试面试高频考点汇总——(2025版)

目录 1 电子器件部分 1.1 电阻 1.1.1 电阻选型时一般从哪几个方面进行考虑? 1.1.2 上拉下拉电阻的作用 1.1.3 PTC热敏电阻作为电源电路保险丝的工作原理 1.1.4 如果阻抗不匹配,有哪些后果 1.1.5 电阻、电容和电感0402、0603和0805封装的含义 1.1.6 电阻、电…...

春秋云镜【CVE-2017-18349】fastjson wp

知识点 fastjson反序列化 将json转为java对象的过程 漏洞存在版本 Fastjson<1.2.24 漏洞原理 fastjson引入的autotype功能&#xff0c;本来是为了区分同名同元素但是不同类型的对象序列化后内容一致无法还原的问题&#xff0c;但是这一操作允许了json数据中通过type来指定对…...

网络编程:八股文

一.Reactor网络模型 ------------------- | 应用主线程 | -------------------|v ------------------- | Reactor | | (事件分发器) | -------------------|v ------------------- | 事件多路分发器 | <--- epoll/poll/select -----------------…...

设计模式精讲 Day 11:享元模式(Flyweight Pattern)

【设计模式精讲 Day 11】享元模式&#xff08;Flyweight Pattern&#xff09; 文章内容 在软件开发过程中&#xff0c;我们常常需要处理大量相似对象的创建和管理问题。如果这些对象之间存在大量的重复信息&#xff0c;直接创建每一个对象会导致内存占用过高、系统性能下降。享…...

常用终端命令(Linux/macOS/bash 通用)分类速查表

文件与目录操作 命令作用说明pwd显示当前路径ls列出当前目录内容ls -l以列表形式显示文件详细信息ls -a显示所有文件&#xff08;包括隐藏文件&#xff09;cd <目录名>进入指定目录cd ..返回上一级目录cd ~回到用户主目录mkdir <目录名>创建目录mkdir -p a/b/c创建…...

Robyn高性能Web框架系列04:事件、中间件与错误处理

请求-响应过程 应用启动、关闭事件1、启动事件&#xff08;Startup Events&#xff09;2、关闭事件&#xff08;Shutdown Events&#xff09; 中间件1、前置中间件&#xff08;BeforeRequest&#xff09;2、后置中间件&#xff08;AfterRequest&#xff09;3、示例&#xff1a;…...

深入理解JavaScript设计模式之迭代器模式

文章目录 深入理解JavaScript设计模式之迭代器模式定义官方翻译白话翻译 实现jQuery中的each迭代器实现数组迭代器迭代器实现创建Dom元素 内部迭代器和外部迭代器内部迭代器外部迭代器 迭代类数组对象和字面量对象倒序迭代器中止迭代器迭代器的应用举例音乐播放器案例待输出更新…...

【项目管理】项目管理资料文档模板(ZIP,PPT,WORD)

项目交付文档 01项目详细调研计划编写规范V1.0.doc 03项目详细调研报告编写规范V1.0.doc 07软件需求规格说明书评审规范V1.0.doc 10.软件需求规格说明.doc 产品检查单,xls 工程评审.zip 软件标准过程集.zip 系统测试管理规程.docx 四)项目管理计划.doc 项目管理系统实施项目管理…...

DeepSeek中的提示库及其用法示例

《DEEPSEEK原生应用与智能体开发实践 图书》【摘要 书评 试读】- 京东图书 为了深入探索DeepSeek提示词样例的丰富内涵&#xff0c;充分挖掘其背后潜藏的无限可能&#xff0c;同时致力于为用户打造更为卓越、便捷且高效的使用体验&#xff0c;DeepSeek官网的API文档匠心独运地…...

292. Nim 游戏

292. Nim 游戏 - 力扣&#xff08;LeetCode&#xff09; 想法 枚举问题&#xff1a; n 1 ~ 3 &#xff0c;由于我先手&#xff0c;我可以直接拿走全部的石头&#xff0c;所以我赢n 4&#xff0c;由于我先手&#xff0c;我拿掉 1 - 3 块石头 &#xff0c;剩下的可能就是 1 -…...

STM32 串口通信②:蓝牙模块HC-05控制单片机

一 前言 上一篇我们已经成功实现单片机和电脑的连接&#xff0c;接下来&#xff0c;我们学习一个有趣的板块&#xff0c;HC-05蓝牙模块&#xff0c;这个蓝牙模块&#xff0c;我们就要建立手机和单片机的通讯啦&#xff0c;还是比较有趣的一个过程&#xff0c;大家可以跟着多操作…...

艾立泰数字化重塑汽车零部件包装租赁行业

在汽车零部件包装租赁行业&#xff0c;资产利用率低、流转效率差、运输成本高等痛点长期困扰企业。艾立泰科技通过数字化解决方案&#xff0c;成为该行业降本增效的关键合作伙伴&#xff0c;助力企业实现从传统管理模式向智能化的跃迁。 精准库存管理&#xff1a;告别“盲人摸…...

Windows电脑数据恢复终极指南:从原理到实战

Windows电脑数据恢复终极指南&#xff1a;从原理到实战 数据丢失是每个电脑用户都可能遭遇的噩梦。本文将为您全面解析Windows平台下的数据恢复技术&#xff0c;从基础原理到高级技巧&#xff0c;帮助您在文件误删、格式化、系统崩溃等情况下找回宝贵数据。 一、数据恢复基础…...

进入python虚拟环境的方法

首先&#xff0c;切换到虚拟环境所在的目录&#xff08;即包含venv文件夹的目录&#xff09;&#xff1a; Cmd cd D:\phd\phd1spring\July\pythonstduy\projecton 然后&#xff0c;激活虚拟环境&#xff1a; Cmd .\venv\Scripts\activate 如果上述方法不行&#xff0c;还可…...

大数据时代UI前端的变革:从静态展示到动态交互

hello宝子们...我们是艾斯视觉擅长ui设计、前端开发、数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 在大数据时代&#xff0c;信息以前所未有的速度和规模增长。这种数据环境的变化&#xff0c;深…...

海拔案例分享-门店业绩管理小程序

在各大电商平台和直播带货如火如荼来的当下&#xff0c;各行各业的门店都在积极寻求创新的管理方式&#xff0c;以提升业绩、优化运营。长沙的一家策划运营公司&#xff0c;敏锐地捕捉到这一市场需求&#xff0c;他们见过太多门店老板对着Excel表格叹气&#xff1a;美容店算错提…...

Python中的数据可视化:使用Matplotlib绘制图表

数据可视化是将复杂数据集转换为图形或图像表示的过程&#xff0c;旨在简化信息的解释和传达。Python作为一种多功能编程语言&#xff0c;提供了多种强大的库来实现这一目标&#xff0c;其中最受欢迎和广泛使用的是Matplotlib。 首先&#xff0c;我们需要确保已经安装了必要的…...

【VUE】1.准备工作

一、环境准备&#xff08;本机仅需一次&#xff09; 安装 Node.js&#xff08;推荐 LTS 版本&#xff0c;包含 npm&#xff09; 打开 VSCode&#xff0c;安装插件&#xff08;推荐&#xff09;&#xff1a; Vetur 或 Volar&#xff08;用于 Vue 支持&#xff09; ESLint / Pr…...

Linux下的版本控制器Git(15)

文章目录 如何理解版本控制&#xff08;9-0.00.00&#xff09;Git 的理解Git 的历史具体操作和用法补充细节 简介&#xff1a;那个对Git的理解&#xff0c;是我用自己的话语结合故事进行阐述&#xff0c;可能理解的不到位&#xff0c;有些错误还请多多包含&#xff01;说句实话…...

UI设计 | 审美积累 | 极繁风格(Maximalism / Complex UI)

如果极简追求“只保留必须的”&#xff0c;那极繁的设计思路就是“有条理地堆叠信息和情绪”。它不是无序的炫技&#xff0c;而是在秩序中有意识地填满视觉空间&#xff1a;字体层叠、图文混排、大量干扰信息并置&#xff0c;却又彼此克制。最终目标&#xff0c;是让用户在强信…...

MocapApi 中文文档 和github下载地址 NeuronDataReader(以下简称 NDR)的下一代编程接口

以下是 MocapApi 技术文档 github https://github.com/pnmocap/MocapApi?tabreadme-ov-file 国内可以查找getcode 英文文档 https://mocap-api.noitom.com/mocap_api_en.html 概述 MocapApi 是 NeuronDataReader&#xff08;以下简称 NDR&#xff09;的下一代编程接口&…...

c++面试题每日一学记录-C++类型转换

一、C++ 类型转换体系 C++ 提供 4 种命名转换操作符,比 C 风格转换更安全、意图更明确: 转换类型关键字主要用途安全检查静态转换static_cast相关类型转换(数值、类层次上行/下行)编译期动态转换dynamic_cast多态类型的安全下行转换运行时常量转换const_cast添加/移除 con…...

Maven 多模块项目调试与问题排查总结

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…...

【C#】C#异步编程:异步延时 vs 阻塞延时深度对比

文章目录 前言一、阻塞延时&#xff1a;Thread.Sleep1、 实现方式2、 工作原理3、 缺点 二、异步延时&#xff1a;Task.Delay1、 实现方式2、 工作原理3、 优点 三、深度对比四、实际应用示例对比1、 阻塞延时在UI应用中的问题2、 异步延时在UI应用中的正确用法3、 带取消功能的…...

c#实现halcon的rle编码blob分析

效果展示 实现功能 connection膨胀腐蚀开运算闭运算特征计算 核心代码 using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Drawing; using System.Linq;namespace view3d {// 基础对象类&#xff0c;类似于 Halcon 的 HO…...

python基于微信小程序的广西文化传承系统

文章目录 具体实现截图本项目支持的技术路线源码获取详细视频演示&#xff1a;文章底部获取博主联系方式&#xff01;&#xff01;&#xff01;&#xff01;本系统开发思路进度安排及各阶段主要任务java类核心代码部分展示主要参考文献&#xff1a;源码获取/详细视频演示 ##项目…...

Apache Flink深度解析:现代流处理引擎

好的,我来帮您写一篇关于Flink技术的详细介绍博客: Apache Flink深度解析:现代流处理引擎 一、Flink简介 Apache Flink是一个开源的分布式流处理和批处理统一计算引擎。它提供了数据流上的状态计算、精确一次性语义保证、高吞吐、低延迟等特性,能够运行在所有常见的集群…...

跨平台后端编程ASP.NET CORE Razor新一代Web开发框架C#

asp.net core Razor动态语言编程代替asp.net .aspx更高级吗&#xff1f; https://blog.csdn.net/xiaoyao961/article/details/148846065 C#Blazor应用-跨平台WEB开发VB.NET-CSDN博客 https://blog.csdn.net/xiaoyao961/article/details/148846437 Products.razor文件,Blazor和…...

【开源工具】一键解决使用代理后无法访问浏览器网页问题 - 基于PyQt5的智能代理开关工具开发全攻略

&#x1f310;【开源工具】一键解决使用代理后无法访问浏览器网页问题 - 基于PyQt5的智能代理开关工具开发全攻略 &#x1f308; 个人主页&#xff1a;创客白泽 - CSDN博客 &#x1f525; 系列专栏&#xff1a;&#x1f40d;《Python开源项目实战》 &#x1f4a1; 热爱不止于代…...

uniapp安卓GPIO电平控制

模块简介 本模块为 UniApp 提供了对 Android 系统下 GPIO 的访问能力&#xff0c;支持导出、设置方向、读写电平值等操作。适用于 Android 架构设备&#xff08;如 RK3288 平台&#xff09;。 支持功能 功能方法名说明初始化 GPIO 方向initGpio({gpio, direction})设置 GPIO…...

苹果芯片macOS安装版Homebrew(亲测)

在Linux服务器上安装一个软件常用yum&#xff0c;apt、dnf命令&#xff0c;同样macOS可以使用brew命令来安装软件。 brew会自动帮你下载、解压、安装和配置&#xff0c;更重要的是&#xff1a;它还会自动处理好软件之间的依赖关系&#xff0c;它将所有软件都安装在独立的统一目…...

vue | vue-macros 插件升级以及配置

Vue Macros 是一个为 Vue.js 提供更多宏和语法糖的开源项目vue-macros/vue-macros: Explore and extend more macros and syntax sugar to Vue. 问题&#xff1a;npm run build-only 打包时&#xff0c;报错&#xff1a;[Vue] Load plugin failed: vue-macros/volar 排查发现…...

计算机网络:(六)超详细讲解数据链路层 (附带图谱表格更好对比理解)

计算机网络&#xff1a;&#xff08;六&#xff09;超详细讲解数据链路层 前言一、数据链路层1. 数据链路层是什么&#xff1f;2. 哪些设备需要数据链路层&#xff1f;3. 数据链路层如何工作&#xff1f;4. 数据链路层的俩种信道4.1 点对点信道&#xff1a;一对一4.2 广播信道&…...

智能生成分析报告系统在危化安全生产监测预警评估中的应用

一、引言 在危险化学品安全生产监管中&#xff0c;传统的分析报告依赖人工整理与审核&#xff0c;效率低、响应慢&#xff0c;且极易受到主观判断、格式不规范、不同地区掌握尺度不一致的影响。而随着工业互联网、大数据、人工智能&#xff08;AI&#xff09;特别是大语言模型…...

微算法科技(NASDAQ:MLGO)研发可信共识算法TCA,解决区块链微服务中的数据一致性与安全挑战

随着区块链技术的不断演进和应用场景的拓展&#xff0c;微服务架构因其灵活性、可扩展性以及易于维护的特点&#xff0c;逐渐成为了构建复杂系统的首选架构模式。如何在微服务架构中有效应用区块链技术&#xff0c;确保数据的一致性和安全性&#xff0c;成为了一个亟待解决的问…...

UE5 开发遇到的bug整理

文章目录 一、人物在挂载某个Actor之后&#xff0c;移动有问题&#xff0c;可能是Actor类的碰撞没有关闭&#xff0c;和人物自身发生了碰撞。 一、人物在挂载某个Actor之后&#xff0c;移动有问题&#xff0c;可能是Actor类的碰撞没有关闭&#xff0c;和人物自身发生了碰撞。...

单片机——浮点数转换4位数码管显示

浮点数转换4位数码管显示 static char buffer[5]; int DecimalPlace 0; #define HideChar h void DisplayFloatOn4LED(float value) {long integer roundf(value );if (integer > 9999) //4位{integer 9999;snprintf(buffer, sizeof(buffer), "%4ld", integer…...

广东省专升本英语形容词与副词全梳理

一、形容词核心知识详解 &#xff08;一&#xff09;形容词的构成方式&#xff08;附记忆技巧&#xff09; 1. 后缀派生法&#xff08;9 大核心后缀&#xff09; ① -ly 结尾形容词&#xff08;易混副词&#xff0c;重点记忆&#xff09; ✅ 特点&#xff1a;虽以 - ly 结尾…...

GeoServer和GeoTools XML外部实体注入漏洞(CVE-2025-30220)

免责声明 本文档所述漏洞详情及复现方法仅限用于合法授权的安全研究和学术教育用途。任何个人或组织不得利用本文内容从事未经许可的渗透测试、网络攻击或其他违法行为。使用者应确保其行为符合相关法律法规,并取得目标系统的明确授权。 对于因不当使用本文信息而造成的任何直…...

Python Django全功能框架开发秘籍

本文在创作过程中借助 AI 工具辅助资料整理与内容优化。图片来源网络。 文章目录 引言一、Django 简介1.1 Django 的诞生与背景1.2 Django 的特点概述 二、Django 的核心特性2.1 ORM 特性2.1.1 ORM 原理与优势2.1.2 ORM 在实际应用中的优势 2.2 模板引擎2.2.1 模板引擎的工作机…...

四核 A53+工业级存储:移远 SC200L 与 pSLC SD NAND 如何重构 T-BOX 性能边界?

博客目录 一、移远 SC200L&#xff1a;T-BOX 的 “智慧大脑”二、米客方德 MKDN064GIL-ZA T-BOX&#xff1a;数据安全的坚固堡垒三、深度协同&#xff1a;拓展 T-BOX 应用边界 在车联网浪潮席卷而来的当下&#xff0c;T-BOX 作为汽车与外界交互的核心枢纽&#xff0c;其性能优劣…...

docker方式启动Jenkins

docker方式启动Jenkins 1.启动命令 我已经打包好了文件,如下命令即可启动 docker run -d -v jenkins_home:/var/jenkins_home -p 8088:8080 -p 50000:50000 --restarton-failure registry.cn-hangzhou.aliyuncs.com/devops_de/jenkins:lts-jdk17 还需要设置一下目录权限,要…...

【目标检测】图像处理基础:像素、分辨率与图像格式解析

&#x1f9d1; 博主简介&#xff1a;曾任某智慧城市类企业算法总监&#xff0c;目前在美国市场的物流公司从事高级算法工程师一职&#xff0c;深耕人工智能领域&#xff0c;精通python数据挖掘、可视化、机器学习等&#xff0c;发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...

国产免费的k8s管理平台

xkube是一款永久免费且无任何功能限制的k8s集群管理平台&#xff0c;提供PC端和移动端全平台支持&#xff0c;具备完善的集群管理、运维监控和CI/CD发布功能&#xff0c;让企业轻松实现跨集群的统一管理和自动化运维。 技术特点&#xff1a; 1、xkube是一款国产永久免费的k8s…...

火山引擎大模型未来发展趋势

用户可能正在做技术选型或者行业研究&#xff0c;需要预测火山引擎在激烈竞争中的突围方向。从问题简洁性看&#xff0c;ta可能已经有一定基础认知&#xff0c;不需要我从零科普大模型概念。 火山引擎作为字节跳动的技术输出平台&#xff0c;优势在于背靠抖音、今日头条等超级应…...

Java基础(三):逻辑运算符详解

Java基础系列文章 Java基础(一)&#xff1a;发展史、技术体系与JDK环境配置详解 Java基础(二)&#xff1a;八种基本数据类型详解 Java基础(三)&#xff1a;逻辑运算符详解 目录 一、什么是逻辑运算符&#xff1f;二、基础逻辑运算符&#xff08;3种&#xff09;1、&&…...

设计模式 | 单例模式

单例模式&#xff08;Singleton Pattern&#xff09; 是设计模式中最简单却最常用的模式之一&#xff0c;它确保一个类只有一个实例&#xff0c;并提供全局访问点。本文将深入探讨单例模式的核心思想、实现技巧以及在C中的多种实现方式。 为什么需要单例模式&#xff1f; 在软…...

SQL_Server 基本语法

1.创建数据库 use master go if exists(select * from sysdatabases where nameCourseManageDB) drop database CourseManageDB go --创建数据库 create database CourseManageDB on primary (--数据库的逻辑文件名&#xff08;就是系统用的&#xff0c;必须唯一&#xff09…...

剑指offer39_连续子数组的最大和

连续子数组的最大和 输入一个 非空 整型数组&#xff0c;数组里的数可能为正&#xff0c;也可能为负。 数组中一个或连续的多个整数组成一个子数组。 求所有子数组的和的最大值。 要求时间复杂度为 O ( n ) O(n) O(n)。 数据范围 数组长度 [ 1 , 1000 ] [1,1000] [1,100…...