Files
hack/tools/scripts/llm-key-hunter/results/_cache/content/aceli12138_pubmedagent.json
T

1 line
10 KiB
JSON

{"repo": "aceli12138/pubmedagent", "files": {"src/agents/medical_agent.py": {"01c2ffe428176dd3712e0d7fa8b7fdba1e0c1e64": {"t": 1785745450.1477273, "n": 4746, "h": "1e7f820856903623", "c": "from langchain_openai import ChatOpenAI\nfrom langchain.agents import AgentExecutor, create_react_agent\nfrom langchain.memory import ConversationBufferMemory\nfrom langchain_deepseek import ChatDeepSeek\nfrom src.prompts import get_medical_prompt\n# from src.tools import create_pubmed_tool\nfrom src.tools import tools\nfrom src.utils import load_config\nimport asyncio\n\nclass LiteratureAgent:\n def __init__(self):\n # 加载配置\n config = load_config()\n \n # 创建工具\n # self.tools = [create_pubmed_tool()]\n self.tools = tools\n \n # 创建语言模型\n if config.get(\"use_deepseek\", False):\n self.llm = ChatDeepSeek(\n api_key=config[\"deepseek_api_key\"],\n base_url=config[\"deepseek_base_url\"],\n model_name=config[\"deepseek_model_name\"],\n temperature=0.3,\n streaming=True\n )\n else:\n self.llm = ChatOpenAI(\n model=config[\"openai_model_name\"],\n temperature=0.3,\n api_key=config[\"openai_api_key\"],\n base_url=config.get(\"openai_base_url\"),\n streaming=True\n )\n \n # 创建记忆\n self.memory = ConversationBufferMemory(\n return_messages=True,\n memory_key=\"chat_history\",\n output_key=\"output\",\n )\n \n # 创建代理\n agent = create_react_agent(\n llm=self.llm,\n tools=self.tools,\n prompt=get_medical_prompt(),\n )\n \n # 创建代理执行器\n self.agent_executor = AgentExecutor(\n agent=agent,\n tools=self.tools,\n memory=self.memory,\n verbose=True,\n return_intermediate_steps=True,\n handle_parsing_errors=True,\n max_iterations=3,\n max_execution_time=None\n )\n \n def query(self, input_text: str) -> dict:\n \"\"\"处理用户查询\"\"\"\n return self.agent_executor.invoke({\"input\": input_text})\n\n async def aquery(self, input_text: str):\n \"\"\"异步处理用户查询\"\"\"\n async for event in self.agent_executor.astream_events(\n {\"input\": input_text},\n version=\"v1\"\n ):\n event_type = event.get(\"event\")\n event_data = event.get(\"data\", {})\n \n if event_type == \"on_tool_start\":\n yield {\n \"type\": \"thinking\",\n \"content\": {\n \"thought\": {\n \"action\": event_data.get(\"name\", \"使用工具\"),\n \"action_input\": str(event_data.get(\"input\", \"\")),\n \"observation\": \"\"\n }\n }\n }\n elif event_type == \"on_tool_end\":\n yield {\n \"type\": \"thinking\",\n \"content\": {\n \"thought\": {\n \"action\": \"观察结果\",\n \"action_input\": \"\",\n \"observation\": str(event_data.get(\"output\", \"\"))\n }\n }\n }\n elif event_type == \"on_agent_action\":\n # 确保思考内容是字符串\n thought = event_data.get(\"thought\", \"\")\n if not isinstance(thought, str):\n thought = str(thought)\n \n yield {\n \"type\": \"thinking\",\n \"content\": {\n \"thought\": {\n \"action\": \"思考\",\n \"action_input\": thought,\n \"observation\": \"\"\n }\n }\n }\n elif event_type == \"on_agent_finish\":\n output = event_data.get(\"output\", \"\")\n if not isinstance(output, str):\n output = str(output)\n \n yield {\n \"type\": \"final\",\n \"content\": output\n }\n \n # 添加对链结束事件的处理\n elif event_type == \"on_chain_end\":\n if \"output\" in event_data:\n output = event_data.get(\"output\", \"\")\n # 确保输出是字符串\n if not isinstance(output, str):\n if isinstance(output, dict) and \"output\" in output:\n output = output[\"output\"]\n else:\n output = str(output)\n \n yield {\n \"type\": \"final\",\n \"content\": output\n } "}, "f1a97d3ceefc159df7df8d0bc74518393b306e1c": {"t": 1785753381.2779016, "n": 4746, "h": "1e7f820856903623", "c": "from langchain_openai import ChatOpenAI\nfrom langchain.agents import AgentExecutor, create_react_agent\nfrom langchain.memory import ConversationBufferMemory\nfrom langchain_deepseek import ChatDeepSeek\nfrom src.prompts import get_medical_prompt\n# from src.tools import create_pubmed_tool\nfrom src.tools import tools\nfrom src.utils import load_config\nimport asyncio\n\nclass LiteratureAgent:\n def __init__(self):\n # 加载配置\n config = load_config()\n \n # 创建工具\n # self.tools = [create_pubmed_tool()]\n self.tools = tools\n \n # 创建语言模型\n if config.get(\"use_deepseek\", False):\n self.llm = ChatDeepSeek(\n api_key=config[\"deepseek_api_key\"],\n base_url=config[\"deepseek_base_url\"],\n model_name=config[\"deepseek_model_name\"],\n temperature=0.3,\n streaming=True\n )\n else:\n self.llm = ChatOpenAI(\n model=config[\"openai_model_name\"],\n temperature=0.3,\n api_key=config[\"openai_api_key\"],\n base_url=config.get(\"openai_base_url\"),\n streaming=True\n )\n \n # 创建记忆\n self.memory = ConversationBufferMemory(\n return_messages=True,\n memory_key=\"chat_history\",\n output_key=\"output\",\n )\n \n # 创建代理\n agent = create_react_agent(\n llm=self.llm,\n tools=self.tools,\n prompt=get_medical_prompt(),\n )\n \n # 创建代理执行器\n self.agent_executor = AgentExecutor(\n agent=agent,\n tools=self.tools,\n memory=self.memory,\n verbose=True,\n return_intermediate_steps=True,\n handle_parsing_errors=True,\n max_iterations=3,\n max_execution_time=None\n )\n \n def query(self, input_text: str) -> dict:\n \"\"\"处理用户查询\"\"\"\n return self.agent_executor.invoke({\"input\": input_text})\n\n async def aquery(self, input_text: str):\n \"\"\"异步处理用户查询\"\"\"\n async for event in self.agent_executor.astream_events(\n {\"input\": input_text},\n version=\"v1\"\n ):\n event_type = event.get(\"event\")\n event_data = event.get(\"data\", {})\n \n if event_type == \"on_tool_start\":\n yield {\n \"type\": \"thinking\",\n \"content\": {\n \"thought\": {\n \"action\": event_data.get(\"name\", \"使用工具\"),\n \"action_input\": str(event_data.get(\"input\", \"\")),\n \"observation\": \"\"\n }\n }\n }\n elif event_type == \"on_tool_end\":\n yield {\n \"type\": \"thinking\",\n \"content\": {\n \"thought\": {\n \"action\": \"观察结果\",\n \"action_input\": \"\",\n \"observation\": str(event_data.get(\"output\", \"\"))\n }\n }\n }\n elif event_type == \"on_agent_action\":\n # 确保思考内容是字符串\n thought = event_data.get(\"thought\", \"\")\n if not isinstance(thought, str):\n thought = str(thought)\n \n yield {\n \"type\": \"thinking\",\n \"content\": {\n \"thought\": {\n \"action\": \"思考\",\n \"action_input\": thought,\n \"observation\": \"\"\n }\n }\n }\n elif event_type == \"on_agent_finish\":\n output = event_data.get(\"output\", \"\")\n if not isinstance(output, str):\n output = str(output)\n \n yield {\n \"type\": \"final\",\n \"content\": output\n }\n \n # 添加对链结束事件的处理\n elif event_type == \"on_chain_end\":\n if \"output\" in event_data:\n output = event_data.get(\"output\", \"\")\n # 确保输出是字符串\n if not isinstance(output, str):\n if isinstance(output, dict) and \"output\" in output:\n output = output[\"output\"]\n else:\n output = str(output)\n \n yield {\n \"type\": \"final\",\n \"content\": output\n } "}}}}