From 0ecb276b3ed46e759b9bdeb231be5e6429754625 Mon Sep 17 00:00:00 2001 From: "jinli.yl" Date: Wed, 18 Jun 2025 14:40:18 +0800 Subject: [PATCH] update step log --- cookbook/step_agent/demo_log.txt | 169 +++++++++++++++++++++++++++++++ experiencemaker/em_service.py | 10 +- 2 files changed, 178 insertions(+), 1 deletion(-) create mode 100644 cookbook/step_agent/demo_log.txt diff --git a/cookbook/step_agent/demo_log.txt b/cookbook/step_agent/demo_log.txt new file mode 100644 index 00000000..e17eee3d --- /dev/null +++ b/cookbook/step_agent/demo_log.txt @@ -0,0 +1,169 @@ +2025-06-18 14:30:26.301 | WARNING | __main__::270 - skip key=origin_config info.annotation= +2025-06-18 14:30:26.301 | INFO | __main__::278 - service.kwargs={ + "host": "0.0.0.0", + "port": 8001, + "timeout_keep_alive": 600000, + "limit_concurrency": 32, + "llm": { + "backend": "openai_compatible", + "model_name": "qwen-max-2025-01-25", + "temperature": 0.6 + }, + "embedding_model": { + "backend": "openai_compatible", + "model_name": "text-embedding-v4", + "dimensions": 1024 + }, + "vector_store": { + "backend": "local_file", + "store_dir": "./step_experiences/" + }, + "context_generator": { + "backend": "step", + "enable_llm_rerank": true, + "enable_context_rewrite": true, + "enable_score_filter": false, + "vector_retrieve_top_k": 15, + "final_top_k": 5, + "min_score_threshold": 0.3 + }, + "summarizer": { + "backend": "step", + "enable_step_segmentation": false, + "enable_similar_comparison": false, + "enable_experience_validation": true, + "max_retries": 3, + "max_workers": 16 + } +} +2025-06-18 14:30:26.335 | INFO | __main__:init_llm:51 - llm is inited with backend=openai_compatible params={'model_name': 'qwen-max-2025-01-25', 'temperature': 0.6} +2025-06-18 14:30:26.348 | INFO | __main__:init_embedding_model:70 - embedding_model is inited with backend=openai_compatible params={'model_name': 'text-embedding-v4', 'dimensions': 1024} +2025-06-18 14:30:26.349 | INFO | __main__:init_vector_store:91 - vector_store is inited with backend=local_file params={'store_dir': './step_experiences/'} +2025-06-18 14:30:26.350 | INFO | experiencemaker.module.prompt.prompt_mixin:init_prompt:30 - add prompt_dict key=context_rewrite_prompt +2025-06-18 14:30:26.350 | INFO | experiencemaker.module.prompt.prompt_mixin:init_prompt:30 - add prompt_dict key=experience_rerank_prompt +2025-06-18 14:30:26.350 | INFO | experiencemaker.module.prompt.prompt_mixin:init_prompt:30 - add prompt_dict key=context_generation_prompt +2025-06-18 14:30:26.350 | INFO | __main__:init_context_generator:117 - context_generator is inited with backend=step params={'enable_llm_rerank': True, 'enable_context_rewrite': True, 'enable_score_filter': False, 'vector_retrieve_top_k': 15, 'final_top_k': 5, 'min_score_threshold': 0.3} +2025-06-18 14:30:26.352 | INFO | experiencemaker.module.prompt.prompt_mixin:init_prompt:30 - add prompt_dict key=success_step_experience_prompt +2025-06-18 14:30:26.352 | INFO | experiencemaker.module.prompt.prompt_mixin:init_prompt:30 - add prompt_dict key=failure_step_experience_prompt +2025-06-18 14:30:26.352 | INFO | experiencemaker.module.prompt.prompt_mixin:init_prompt:30 - add prompt_dict key=comparative_step_experience_prompt +2025-06-18 14:30:26.352 | INFO | experiencemaker.module.prompt.prompt_mixin:init_prompt:30 - add prompt_dict key=general_step_experience_prompt +2025-06-18 14:30:26.352 | INFO | experiencemaker.module.prompt.prompt_mixin:init_prompt:30 - add prompt_dict key=step_segmentation_prompt +2025-06-18 14:30:26.352 | INFO | experiencemaker.module.prompt.prompt_mixin:init_prompt:30 - add prompt_dict key=experience_validation_prompt +2025-06-18 14:30:26.352 | INFO | __main__:init_summarizer:132 - summarizer is inited with backend=step params={'enable_step_segmentation': False, 'enable_similar_comparison': False, 'enable_experience_validation': True, 'max_retries': 3, 'max_workers': 16} +INFO: Started server process [94237] +INFO: Waiting for application startup. +INFO: Application startup complete. +INFO: Uvicorn running on http://0.0.0.0:8001 (Press CTRL+C to quit) +2025-06-18 14:35:52.470 | INFO | __main__:call_summarizer:225 - workspace_id=w_agent_enhanced metadata={} trajectories= +{ + "id": "6a7e7204439d45a593416c50f563116e", + "steps": [ + { + "role": "user", + "content": "What is the capital of France?", + "reasoning_content": "", + "tool_calls": [], + "timestamp": "2025-06-18 14:35:52.464309", + "add_reasoning_content_when_content_is_empty": false, + "metadata": {} + }, + { + "role": "assistant", + "content": "Paris", + "reasoning_content": "", + "tool_calls": [], + "timestamp": "2025-06-18 14:35:52.464361", + "add_reasoning_content_when_content_is_empty": false, + "metadata": {} + } + ], + "is_terminated": false, + "reward": { + "outcome": 1.0, + "description": "Outcome 1 denotes success, and 0 denotes failure.", + "metadata": {} + }, + "query": "What is the capital of France?", + "answer": "", + "metadata": {} +} +2025-06-18 14:35:52.470 | INFO | experiencemaker.module.summarizer.step_summarizer:_extract_experiences:70 - Starting step-level experience extraction pipeline for 1 trajectories +2025-06-18 14:35:52.470 | INFO | experiencemaker.module.summarizer.step_summarizer:_async_extract_step_experiences_from_success:122 - Extracting step experiences from 1 successful trajectories +2025-06-18 14:35:57.993 | INFO | experiencemaker.module.summarizer.step_summarizer:_async_validate_experiences:331 - Validating 1 extracted experiences +2025-06-18 14:36:13.472 | INFO | experiencemaker.module.summarizer.step_summarizer:_async_validate_experiences:348 - Validated 1 out of 1 experiences +2025-06-18 14:36:13.472 | INFO | experiencemaker.module.summarizer.step_summarizer:_async_extract_experiences:116 - Extracted 1 validated step experiences +2025-06-18 14:36:13.687 | INFO | experiencemaker.storage.file_vector_store:update:111 - update w_agent_enhanced nodes.size=1 all.size=1 update_cnt=0 +2025-06-18 14:36:13.687 | INFO | __main__:call_summarizer:232 - workspace_id=w_agent_enhanced experiences_content= +{ + "experience_id": "72b620febc7e4b30b94d200e3aa21f3b", + "experience_workspace_id": "w_agent_enhanced", + "experience_role": "", + "experience_desc": "When the query is a simple, fact-based question requiring a direct and concise answer.", + "experience_content": "The agent immediately provided the correct answer without unnecessary elaboration or additional steps. This worked well because the query was straightforward, and the response matched the user's expected level of detail, ensuring efficiency and clarity.", + "experience_function": null, + "experience_score": 0.0, + "experience_created_time": "2025-06-18 14:35:57", + "experience_modified_time": "2025-06-18 14:35:57", + "metadata": { + "when_to_use": "When the query is a simple, fact-based question requiring a direct and concise answer.", + "experience": "The agent immediately provided the correct answer without unnecessary elaboration or additional steps. This worked well because the query was straightforward, and the response matched the user's expected level of detail, ensuring efficiency and clarity.", + "tags": [ + "fact-based", + "direct-answer", + "efficiency" + ], + "confidence": 0.95, + "step_type": "action", + "tools_used": [ + "knowledge-base" + ] + } +} +INFO: 127.0.0.1:55361 - "POST /summarizer HTTP/1.1" 200 OK +2025-06-18 14:36:13.694 | INFO | __main__:call_context_generator:206 - workspace_id=w_agent_enhanced metadata={} trajectory= +{ + "id": "5d56ba6e010e4c6ea496ca006ccaf33d", + "steps": [ + { + "role": "user", + "content": "What is the capital of France?", + "reasoning_content": "", + "tool_calls": [], + "timestamp": "2025-06-18 14:36:13.694224", + "add_reasoning_content_when_content_is_empty": false, + "metadata": {} + }, + { + "role": "assistant", + "content": "Paris", + "reasoning_content": "", + "tool_calls": [], + "timestamp": "2025-06-18 14:36:13.694256", + "add_reasoning_content_when_content_is_empty": false, + "metadata": {} + } + ], + "is_terminated": false, + "reward": { + "outcome": 1.0, + "description": "Outcome 1 denotes success, and 0 denotes failure.", + "metadata": {} + }, + "query": "What is the capital of France?", + "answer": "", + "metadata": {} +} +2025-06-18 14:36:13.694 | INFO | experiencemaker.module.context_generator.step_context_generator:_hybrid_retrieve:105 - Starting hybrid retrieval for query: 'What is the capital of France?' +2025-06-18 14:36:13.885 | INFO | experiencemaker.module.context_generator.step_context_generator:_vector_retrieve:138 - Vector retrieval found 1 candidates +2025-06-18 14:36:20.455 | INFO | experiencemaker.module.context_generator.step_context_generator:_hybrid_retrieve:124 - Hybrid retrieval completed: 1 experiences selected +2025-06-18 14:36:39.916 | INFO | experiencemaker.module.context_generator.step_context_generator:_rewrite_context:202 - Context successfully rewritten for current task +2025-06-18 14:36:39.916 | INFO | __main__:call_context_generator:211 - workspace_id=w_agent_enhanced context_msg={ + "role": "context_assistant", + "content": "For the current task, which involves answering a straightforward, fact-based question about the capital of France, the guidance is to provide an accurate and concise response. The user seeks immediate clarity without additional elaboration or unrelated information. Drawing from past experiences with similar queries, prioritize delivering the correct answer—'Paris'—in a clear and direct manner. This approach ensures that the response is both useful and aligned with the user's expectations for simplicity and precision.", + "reasoning_content": "", + "tool_calls": [], + "timestamp": "2025-06-18 14:36:39.916579", + "add_reasoning_content_when_content_is_empty": false, + "metadata": {} +} +INFO: 127.0.0.1:55377 - "POST /context_generator HTTP/1.1" 200 OK diff --git a/experiencemaker/em_service.py b/experiencemaker/em_service.py index 8c311ed7..3e702fb8 100644 --- a/experiencemaker/em_service.py +++ b/experiencemaker/em_service.py @@ -203,10 +203,12 @@ class EMService(BaseModel): else: assert self.context_generator is not None, "context_generator must be provided." context_generator = self.context_generator - + logger.info(f"workspace_id={request.workspace_id} metadata={request.metadata} " + f"trajectory=\n{request.trajectory.model_dump_json(indent=2)}") context_msg: ContextMessage = context_generator.execute(trajectory=request.trajectory, workspace_id=request.workspace_id, **request.metadata) + logger.info(f"workspace_id={request.workspace_id} context_msg={context_msg.model_dump_json(indent=2)}") return ContextGeneratorResponse(context_msg=context_msg) def call_summarizer(self, request: SummarizerRequest) -> SummarizerResponse: @@ -219,9 +221,15 @@ class EMService(BaseModel): assert self.summarizer is not None, "summarizer must be provided." summarizer = self.summarizer + trajectories_content = "\n".join([x.model_dump_json(indent=2) for x in request.trajectories]) + logger.info(f"workspace_id={request.workspace_id} metadata={request.metadata} " + f"trajectories=\n{trajectories_content}") experiences: List[Experience] = summarizer.execute(trajectories=request.trajectories, workspace_id=request.workspace_id, **request.metadata) + + experiences_content = "\n".join([x.model_dump_json(indent=2) for x in experiences]) + logger.info(f"workspace_id={request.workspace_id} experiences_content=\n{experiences_content}") return SummarizerResponse(experiences=experiences)