#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 测试AI_Agent的流式处理方法 此脚本演示TravelContentCreator中AI_Agent类的三种流式输出处理方法: 1. 同步流式响应 (generate_text_stream) 2. 回调式流式响应 (generate_text_stream_with_callback) 3. 异步流式响应 (async_generate_text_stream) """ import os import sys import asyncio import time from pathlib import Path # 添加项目根目录到Python路径 project_root = str(Path(__file__).parent.parent) if project_root not in sys.path: sys.path.insert(0, project_root) from core.ai_agent import AI_Agent # 示例提示词 SYSTEM_PROMPT = """你是一个专业的旅游内容创作助手,请根据用户的提示生成相关内容。""" USER_PROMPT = """请为我生成一篇关于福建泰宁古城的旅游攻略,包括著名景点、美食推荐和最佳游玩季节。字数控制在300字以内。""" def print_separator(title): """打印分隔线和标题""" print("\n" + "="*50) print(f" {title} ".center(50, "=")) print("="*50 + "\n") def demo_sync_stream(): """演示同步流式响应方法""" print_separator("同步流式响应 (generate_text_stream)") # 创建AI_Agent实例 agent = AI_Agent( base_url="vllm", # 使用本地vLLM服务 model_name="qwen2-7b-instruct", # 或其他您配置的模型名称 api="EMPTY", # vLLM不需要API key timeout=60, # 整体请求超时时间(秒) stream_chunk_timeout=10 # 流式块超时时间(秒) ) print("开始生成内容...") start_time = time.time() # 使用同步流式方法 result = agent.generate_text_stream( SYSTEM_PROMPT, USER_PROMPT, temperature=0.7, top_p=0.9, presence_penalty=0.0 ) end_time = time.time() print(f"\n\n完整生成内容:\n{result}") print(f"\n生成完成! 耗时: {end_time - start_time:.2f}秒") # 关闭agent agent.close() def demo_callback_stream(): """演示回调式流式响应方法""" print_separator("回调式流式响应 (generate_text_stream_with_callback)") # 创建AI_Agent实例 agent = AI_Agent( base_url="vllm", model_name="qwen2-7b-instruct", api="EMPTY", timeout=60, stream_chunk_timeout=10 ) # 定义回调函数 def my_callback(content, is_last=False, is_timeout=False, is_error=False, error=None): """处理流式响应的回调函数""" if content: # 实时打印内容,不换行 print(content, end="", flush=True) if is_last: print("\n") if is_timeout: print("警告: 响应流超时") if is_error: print(f"错误: {error}") print("开始生成内容...") start_time = time.time() # 使用回调式流式方法 result = agent.generate_text_stream_with_callback( SYSTEM_PROMPT, USER_PROMPT, my_callback, temperature=0.7, top_p=0.9, presence_penalty=0.0 ) end_time = time.time() print(f"\n生成完成! 耗时: {end_time - start_time:.2f}秒") # 关闭agent agent.close() async def demo_async_stream(): """演示异步流式响应方法""" print_separator("异步流式响应 (async_generate_text_stream)") # 创建AI_Agent实例 agent = AI_Agent( base_url="vllm", model_name="qwen2-7b-instruct", api="EMPTY", timeout=60, stream_chunk_timeout=10 ) print("开始生成内容...") start_time = time.time() full_response = "" # 使用异步流式方法 try: async_stream = agent.async_generate_text_stream( SYSTEM_PROMPT, USER_PROMPT, temperature=0.7, top_p=0.9, presence_penalty=0.0 ) # 异步迭代流 async for content in async_stream: # 累积完整响应 full_response += content # 实时打印内容 print(content, end="", flush=True) except Exception as e: print(f"\n生成过程中出错: {e}") end_time = time.time() print(f"\n\n生成完成! 耗时: {end_time - start_time:.2f}秒") # 关闭agent agent.close() async def main(): """主函数""" print("Testing AI_Agent streaming methods...") # 1. 测试同步流式响应 demo_sync_stream() # 2. 测试回调式流式响应 demo_callback_stream() # 3. 测试异步流式响应 await demo_async_stream() print("\n所有测试完成!") if __name__ == "__main__": # 运行异步主函数 asyncio.run(main())