MedResearcher/experiment_runner.py
iomgaa 1b652502d5 docs: 新增SubAgent系统完整示例和说明文档
- 添加详细的SubAgent使用指南(README.md)
- 创建完整的Pydantic模型示例(example_models.py)
- 实现基础使用示例,展示核心功能(basic_example.py)
- 构建复杂文本分析应用示例(text_analysis_example.py)
- 提供数字提取实验运行器作为参考示例
- 包含多Agent协作、批量处理、性能监控等高级功能
- 支持交互式演示和完整的错误处理机制
2025-08-25 17:33:20 +08:00

153 lines
4.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
"""
数字提取实验运行器
基于Agno框架的SubAgent系统从文本中提取数字并进行解释
展示SubAgent系统的核心功能配置读取、模型创建、动态prompt构建、JSON解析
"""
import sys
import os
from typing import List
# 添加src路径到Python路径
sys.path.append(os.path.join(os.path.dirname(__file__), 'src'))
from src.agent_system import SubAgent, create_json_agent
from number_extraction_models import NumberExtractionResult
def create_number_extraction_agent() -> SubAgent:
"""创建数字提取专用SubAgent"""
instructions = [
"你是一个专业的数字提取专家",
"你的任务是从给定文本中识别和提取所有的数字",
"重点关注:整数、小数、百分比、比率、统计数据等",
"对每个数字提供准确的上下文和清晰的解释"
]
prompt_template = """
请仔细分析以下文本,提取其中的所有数字:
【输入文本】
{input_text}
【提取要求】
1. 识别文本中的所有数字(整数、小数、百分比、比率等)
2. 对每个数字进行分类和解释
3. 记录数字出现的完整上下文
4. 识别数字的单位(如果有)
5. 提供对整个文本中数字的总体摘要
"""
try:
agent = SubAgent(
provider="aliyun",
model_name="qwen-max",
name="number_extractor",
description="专业的文本数字提取和解释系统",
instructions=instructions,
prompt_template=prompt_template,
response_model=NumberExtractionResult
)
print("✅ 数字提取Agent初始化成功")
return agent
except Exception as e:
print(f"❌ Agent初始化失败: {e}")
raise
def display_results(result: NumberExtractionResult):
"""展示提取结果"""
print("\n" + "="*50)
print("🔍 数字提取结果")
print("="*50)
print(f"摘要: {result.summary}")
print(f"总数: {result.total_count}")
if result.extractions:
for i, item in enumerate(result.extractions, 1):
print(f"\n数字{i}: {item.number}")
if item.unit:
print(f" 单位: {item.unit}")
print(f" 上下文: {item.context}")
print(f" 解释: {item.explanation}")
print("="*50)
def get_user_input() -> str:
"""获取用户输入"""
print("\n请输入要分析的文本:")
print("(输入'quit'退出,输入'END'结束输入)")
lines = []
while True:
try:
line = input(">>> ").strip()
if line.lower() == 'quit':
return 'quit'
elif line.upper() == 'END':
break
else:
lines.append(line)
break
except (KeyboardInterrupt, EOFError):
return 'quit'
return '\n'.join(lines).strip()
def main():
"""主函数"""
print("🎉 数字提取工具启动!")
try:
agent = create_number_extraction_agent()
except Exception as e:
print(f"初始化失败: {e}")
return
print("✅ 系统就绪")
while True:
user_input = get_user_input()
if user_input == 'quit':
print("再见!")
break
if not user_input:
continue
try:
print(f"分析中... (文本长度: {len(user_input)}字符)")
result = agent.run(template_vars={'input_text': user_input})
display_results(result)
except Exception as e:
print(f"提取失败: {e}")
print("请尝试重新输入")
def test_basic():
"""基础测试"""
try:
agent = create_number_extraction_agent()
# 测试prompt构建
prompt = agent.build_prompt({'input_text': '测试数字95.2%'})
print(f"✅ 测试通过prompt长度: {len(prompt)}")
return True
except Exception as e:
print(f"❌ 测试失败: {e}")
return False
if __name__ == "__main__":
main()