From 02b14a25ecd8cc7f9608f3d7870dbb864bb74edc Mon Sep 17 00:00:00 2001 From: "jinli.yl" Date: Fri, 19 Jun 2026 02:07:42 +0800 Subject: [PATCH] remove deleted files --- benchmark/appworld/quickstart.md | 128 -- benchmark/appworld/requirements.txt | 7 - benchmark/bfcl/quickstart.md | 129 -- benchmark/bfcl/requirements.txt | 6 - benchmark/halumem/cat_correct_scripts.sh | 1 - benchmark/halumem/eval_reme.yaml | 547 ------- benchmark/halumem/eval_scripts.sh | 5 - benchmark/halumem/quickstart.md | 46 - benchmark/locomo/eval_reme.yaml | 180 --- benchmark/longmemeval/eval_reme.yaml | 548 ------- benchmark/longmemeval/quickstart.md | 48 - docs/README_0_2_x.md | 897 ----------- docs/README_0_2_x_ZH.md | 902 ----------- docs/_config.yml | 132 -- docs/_static/custom.css | 33 - docs/_static/figure/frozenlake_failure.gif | Bin 207648 -> 0 bytes docs/_static/figure/frozenlake_success.gif | Bin 744521 -> 0 bytes docs/_static/figure/logo.svg | 1 - docs/_static/figure/reme_logo_old.png | Bin 270245 -> 0 bytes docs/_static/figure/reme_structure.jpg | Bin 451979 -> 0 bytes docs/_static/figure/reme_usage.jpg | Bin 343463 -> 0 bytes docs/_static/figure/working_memory_intro.png | Bin 763910 -> 0 bytes docs/_static/memory-lib/data/appworld.jsonl | 193 --- docs/_static/memory-lib/data/bfcl_v3.jsonl | 474 ------ .../memory-lib/data/research_plan.jsonl | 295 ---- .../memory-lib/data/research_tips.jsonl | 1392 ----------------- docs/_static/memory-lib/memory-lib.css | 156 -- docs/_static/memory-lib/memory-lib.js | 419 ----- docs/_toc.yml | 53 - docs/cli/quick_start_en.md | 295 ---- docs/cli/quick_start_zh.md | 299 ---- docs/contribution.md | 66 - docs/cookbook/experiment_overview.md | 56 - docs/cookbook/faq.md | 69 - docs/cookbook/frozenlake/quickstart.md | 168 -- docs/cookbook/working/quick_start.md | 235 --- docs/copaw_context_design.md | 278 ---- docs/copaw_context_design_zh.md | 289 ---- docs/index.md | 158 -- docs/installation.md | 42 - docs/library/appworld.jsonl | 193 --- docs/library/bfcl_v3.jsonl | 474 ------ docs/library/library.md | 96 -- .../paper_data/task/appworld_qwen3_14b.jsonl | 218 --- .../paper_data/task/appworld_qwen3_32b.jsonl | 184 --- .../paper_data/task/appworld_qwen3_8b.jsonl | 207 --- .../paper_data/task/bfcl_qwen3_14b.jsonl | 110 -- .../paper_data/task/bfcl_qwen3_32b.jsonl | 99 -- .../paper_data/task/bfcl_qwen3_8b.jsonl | 96 -- docs/library/research_plan.jsonl | 295 ---- docs/library/research_tips.jsonl | 1392 ----------------- docs/library/use_library.md | 42 - docs/make_mp4.md | 19 - docs/mcp_quick_start.md | 424 ----- docs/personal_memory/personal_memory.md | 137 -- docs/personal_memory/personal_retrieve_ops.md | 132 -- docs/personal_memory/personal_summary_ops.md | 145 -- docs/quick_start.md | 484 ------ docs/sop_memory/making_sop_memories.md | 136 -- docs/task_memory/task_memory.md | 216 --- docs/task_memory/task_retrieve_ops.md | 73 - docs/task_memory/task_summary_ops.md | 163 -- docs/tool_memory/tool_bench.md | 270 ---- docs/tool_memory/tool_memory.md | 835 ---------- docs/tool_memory/tool_retrieve_ops.md | 19 - docs/tool_memory/tool_summary_ops.md | 93 -- docs/vector_store_api_guide.md | 494 ------ docs/work_memory/message_offload.md | 199 --- docs/work_memory/message_offload_ops.md | 108 -- docs/work_memory/message_reload_ops.md | 124 -- docs4/auto_dream_logic_and_step_refactor.md | 943 ----------- docs4/old/auto_cognition_design.md | 330 ---- docs4/old/auto_consolidate_design.md | 741 --------- docs4/old/auto_dream_design.md | 352 ----- docs4/old/auto_memory_design.md | 197 --- docs4/old/auto_recall_design.md | 323 ---- docs4/old/background_backup.md | 166 -- docs4/old/reme4_index.md | 211 --- docs4/old/reme4_report.md | 971 ------------ docs4/old/reme_design.md | 192 --- docs4/old/structure.md | 782 --------- docs4/reme_design.md | 389 ----- docs4/todo.md | 38 - reme/config/cli.yaml | 50 - reme/config/light.yaml | 38 - reme/config/service.yaml | 206 --- reme/config/vector.yaml | 44 - reme/core/tools/execute_code.yaml | 5 - reme/core/tools/execute_shell.yaml | 7 - reme/core/tools/search/dashscope_search.yaml | 20 - reme/core/tools/search/mock_search.yaml | 81 - reme/core/tools/search/tavily_search.yaml | 6 - reme/core/tools/think_tool.yaml | 32 - .../retrieve/build_query.yaml | 6 - .../retrieve/rerank_memory.yaml | 25 - .../retrieve/rewrite_memory.yaml | 34 - .../summary/comparative_extraction.yaml | 79 - .../summary/failure_extraction.yaml | 42 - .../summary/memory_validation.yaml | 29 - .../summary/success_extraction.yaml | 42 - .../summary/trajectory_segmentation.yaml | 31 - reme/extension/translate_ts.yaml | 16 - reme/memory/file_based/components/cli.yaml | 95 -- .../file_based/components/compactor.yaml | 167 -- .../file_based/components/summarizer.yaml | 62 - .../personal/personal_retriever.yaml | 77 - .../personal/personal_summarizer.yaml | 55 - .../procedural/procedural_retriever.yaml | 43 - .../procedural/procedural_summarizer.yaml | 35 - reme/memory/vector_based/reme_retriever.yaml | 27 - reme/memory/vector_based/reme_summarizer.yaml | 29 - .../tool_call/tool_retriever.yaml | 44 - .../tool_call/tool_summarizer.yaml | 36 - reme4/pyproject.toml | 87 -- .../agent/react/agentic_retrieve_prompt.yaml | 5 - .../agent/tools/llm_mock_search_prompt.yaml | 76 - reme_ai/config/default.yaml | 373 ----- .../personal/extract_time_prompt.yaml | 135 -- .../personal/print_memory_prompt.yaml | 22 - reme_ai/retrieve/task/build_query_prompt.yaml | 6 - .../retrieve/task/rerank_memory_prompt.yaml | 25 - .../retrieve/task/rewrite_memory_prompt.yaml | 34 - reme_ai/retrieve/working/grep_prompt.yaml | 20 - .../retrieve/working/read_file_prompt.yaml | 19 - .../retrieve/working/write_file_prompt.yaml | 9 - reme_ai/service/service_description.md | 24 - .../personal/contra_repeat_prompt.yaml | 127 -- .../personal/get_observation_prompt.yaml | 163 -- .../get_observation_with_time_prompt.yaml | 158 -- .../get_reflection_subject_prompt.yaml | 179 --- .../summary/personal/info_filter_prompt.yaml | 172 -- .../personal/long_contra_repeat_prompt.yaml | 120 -- .../personal/update_insight_prompt.yaml | 149 -- .../task/comparative_extraction_prompt.yaml | 79 - .../task/failure_extraction_prompt.yaml | 42 - .../task/memory_validation_prompt.yaml | 29 - .../simple_comparative_summary_prompt.yaml | 32 - .../summary/task/simple_summary_prompt.yaml | 31 - .../task/success_extraction_prompt.yaml | 42 - .../task/trajectory_segmentation_prompt.yaml | 31 - .../tool/parse_tool_call_result_prompt.yaml | 57 - .../tool/summary_tool_memory_prompt.yaml | 24 - .../working/message_compress_prompt.yaml | 77 - test/cookbook/appworld/requirements.txt | 5 - test/cookbook/bfcl/requirements.txt | 5 - .../frozenlake/frozenlake_prompts.yaml | 47 - .../simple_demo/mcp_task_memory.jsonl | 1 - .../simple_demo/personal_memory.jsonl | 123 -- test/cookbook/simple_demo/task_memory.jsonl | 87 -- test/cookbook/simple_demo/task_messages.jsonl | 106 -- test/cookbook/tool_memory/query.json | 139 -- test/test/cli/fb_cli.yaml | 103 -- test/test/cli/fb_compactor.yaml | 228 --- test/test/cli/fb_summarizer.yaml | 61 - tests/light/test_reme_light_log.txt | 84 - tests/mcp_servers_demo.json | 37 - 156 files changed, 26495 deletions(-) delete mode 100644 benchmark/appworld/quickstart.md delete mode 100644 benchmark/appworld/requirements.txt delete mode 100644 benchmark/bfcl/quickstart.md delete mode 100644 benchmark/bfcl/requirements.txt delete mode 100755 benchmark/halumem/cat_correct_scripts.sh delete mode 100644 benchmark/halumem/eval_reme.yaml delete mode 100755 benchmark/halumem/eval_scripts.sh delete mode 100644 benchmark/halumem/quickstart.md delete mode 100644 benchmark/locomo/eval_reme.yaml delete mode 100644 benchmark/longmemeval/eval_reme.yaml delete mode 100644 benchmark/longmemeval/quickstart.md delete mode 100644 docs/README_0_2_x.md delete mode 100644 docs/README_0_2_x_ZH.md delete mode 100644 docs/_config.yml delete mode 100644 docs/_static/custom.css delete mode 100644 docs/_static/figure/frozenlake_failure.gif delete mode 100644 docs/_static/figure/frozenlake_success.gif delete mode 100644 docs/_static/figure/logo.svg delete mode 100644 docs/_static/figure/reme_logo_old.png delete mode 100644 docs/_static/figure/reme_structure.jpg delete mode 100644 docs/_static/figure/reme_usage.jpg delete mode 100644 docs/_static/figure/working_memory_intro.png delete mode 100644 docs/_static/memory-lib/data/appworld.jsonl delete mode 100644 docs/_static/memory-lib/data/bfcl_v3.jsonl delete mode 100644 docs/_static/memory-lib/data/research_plan.jsonl delete mode 100644 docs/_static/memory-lib/data/research_tips.jsonl delete mode 100644 docs/_static/memory-lib/memory-lib.css delete mode 100644 docs/_static/memory-lib/memory-lib.js delete mode 100644 docs/_toc.yml delete mode 100644 docs/cli/quick_start_en.md delete mode 100644 docs/cli/quick_start_zh.md delete mode 100644 docs/contribution.md delete mode 100644 docs/cookbook/experiment_overview.md delete mode 100644 docs/cookbook/faq.md delete mode 100644 docs/cookbook/frozenlake/quickstart.md delete mode 100644 docs/cookbook/working/quick_start.md delete mode 100644 docs/copaw_context_design.md delete mode 100644 docs/copaw_context_design_zh.md delete mode 100644 docs/index.md delete mode 100644 docs/installation.md delete mode 100644 docs/library/appworld.jsonl delete mode 100644 docs/library/bfcl_v3.jsonl delete mode 100644 docs/library/library.md delete mode 100644 docs/library/paper_data/task/appworld_qwen3_14b.jsonl delete mode 100644 docs/library/paper_data/task/appworld_qwen3_32b.jsonl delete mode 100644 docs/library/paper_data/task/appworld_qwen3_8b.jsonl delete mode 100644 docs/library/paper_data/task/bfcl_qwen3_14b.jsonl delete mode 100644 docs/library/paper_data/task/bfcl_qwen3_32b.jsonl delete mode 100644 docs/library/paper_data/task/bfcl_qwen3_8b.jsonl delete mode 100644 docs/library/research_plan.jsonl delete mode 100644 docs/library/research_tips.jsonl delete mode 100644 docs/library/use_library.md delete mode 100644 docs/make_mp4.md delete mode 100644 docs/mcp_quick_start.md delete mode 100644 docs/personal_memory/personal_memory.md delete mode 100644 docs/personal_memory/personal_retrieve_ops.md delete mode 100644 docs/personal_memory/personal_summary_ops.md delete mode 100644 docs/quick_start.md delete mode 100644 docs/sop_memory/making_sop_memories.md delete mode 100644 docs/task_memory/task_memory.md delete mode 100644 docs/task_memory/task_retrieve_ops.md delete mode 100644 docs/task_memory/task_summary_ops.md delete mode 100644 docs/tool_memory/tool_bench.md delete mode 100644 docs/tool_memory/tool_memory.md delete mode 100644 docs/tool_memory/tool_retrieve_ops.md delete mode 100644 docs/tool_memory/tool_summary_ops.md delete mode 100644 docs/vector_store_api_guide.md delete mode 100644 docs/work_memory/message_offload.md delete mode 100644 docs/work_memory/message_offload_ops.md delete mode 100644 docs/work_memory/message_reload_ops.md delete mode 100644 docs4/auto_dream_logic_and_step_refactor.md delete mode 100644 docs4/old/auto_cognition_design.md delete mode 100644 docs4/old/auto_consolidate_design.md delete mode 100644 docs4/old/auto_dream_design.md delete mode 100644 docs4/old/auto_memory_design.md delete mode 100644 docs4/old/auto_recall_design.md delete mode 100644 docs4/old/background_backup.md delete mode 100644 docs4/old/reme4_index.md delete mode 100644 docs4/old/reme4_report.md delete mode 100644 docs4/old/reme_design.md delete mode 100644 docs4/old/structure.md delete mode 100644 docs4/reme_design.md delete mode 100644 docs4/todo.md delete mode 100644 reme/config/cli.yaml delete mode 100644 reme/config/light.yaml delete mode 100644 reme/config/service.yaml delete mode 100644 reme/config/vector.yaml delete mode 100644 reme/core/tools/execute_code.yaml delete mode 100644 reme/core/tools/execute_shell.yaml delete mode 100644 reme/core/tools/search/dashscope_search.yaml delete mode 100644 reme/core/tools/search/mock_search.yaml delete mode 100644 reme/core/tools/search/tavily_search.yaml delete mode 100644 reme/core/tools/think_tool.yaml delete mode 100644 reme/extension/procedural_memory/retrieve/build_query.yaml delete mode 100644 reme/extension/procedural_memory/retrieve/rerank_memory.yaml delete mode 100644 reme/extension/procedural_memory/retrieve/rewrite_memory.yaml delete mode 100644 reme/extension/procedural_memory/summary/comparative_extraction.yaml delete mode 100644 reme/extension/procedural_memory/summary/failure_extraction.yaml delete mode 100644 reme/extension/procedural_memory/summary/memory_validation.yaml delete mode 100644 reme/extension/procedural_memory/summary/success_extraction.yaml delete mode 100644 reme/extension/procedural_memory/summary/trajectory_segmentation.yaml delete mode 100644 reme/extension/translate_ts.yaml delete mode 100644 reme/memory/file_based/components/cli.yaml delete mode 100644 reme/memory/file_based/components/compactor.yaml delete mode 100644 reme/memory/file_based/components/summarizer.yaml delete mode 100644 reme/memory/vector_based/personal/personal_retriever.yaml delete mode 100644 reme/memory/vector_based/personal/personal_summarizer.yaml delete mode 100644 reme/memory/vector_based/procedural/procedural_retriever.yaml delete mode 100644 reme/memory/vector_based/procedural/procedural_summarizer.yaml delete mode 100644 reme/memory/vector_based/reme_retriever.yaml delete mode 100644 reme/memory/vector_based/reme_summarizer.yaml delete mode 100644 reme/memory/vector_based/tool_call/tool_retriever.yaml delete mode 100644 reme/memory/vector_based/tool_call/tool_summarizer.yaml delete mode 100644 reme4/pyproject.toml delete mode 100644 reme_ai/agent/react/agentic_retrieve_prompt.yaml delete mode 100644 reme_ai/agent/tools/llm_mock_search_prompt.yaml delete mode 100644 reme_ai/config/default.yaml delete mode 100644 reme_ai/retrieve/personal/extract_time_prompt.yaml delete mode 100644 reme_ai/retrieve/personal/print_memory_prompt.yaml delete mode 100644 reme_ai/retrieve/task/build_query_prompt.yaml delete mode 100644 reme_ai/retrieve/task/rerank_memory_prompt.yaml delete mode 100644 reme_ai/retrieve/task/rewrite_memory_prompt.yaml delete mode 100644 reme_ai/retrieve/working/grep_prompt.yaml delete mode 100644 reme_ai/retrieve/working/read_file_prompt.yaml delete mode 100644 reme_ai/retrieve/working/write_file_prompt.yaml delete mode 100644 reme_ai/service/service_description.md delete mode 100644 reme_ai/summary/personal/contra_repeat_prompt.yaml delete mode 100644 reme_ai/summary/personal/get_observation_prompt.yaml delete mode 100644 reme_ai/summary/personal/get_observation_with_time_prompt.yaml delete mode 100644 reme_ai/summary/personal/get_reflection_subject_prompt.yaml delete mode 100644 reme_ai/summary/personal/info_filter_prompt.yaml delete mode 100644 reme_ai/summary/personal/long_contra_repeat_prompt.yaml delete mode 100644 reme_ai/summary/personal/update_insight_prompt.yaml delete mode 100644 reme_ai/summary/task/comparative_extraction_prompt.yaml delete mode 100644 reme_ai/summary/task/failure_extraction_prompt.yaml delete mode 100644 reme_ai/summary/task/memory_validation_prompt.yaml delete mode 100644 reme_ai/summary/task/simple_comparative_summary_prompt.yaml delete mode 100644 reme_ai/summary/task/simple_summary_prompt.yaml delete mode 100644 reme_ai/summary/task/success_extraction_prompt.yaml delete mode 100644 reme_ai/summary/task/trajectory_segmentation_prompt.yaml delete mode 100644 reme_ai/summary/tool/parse_tool_call_result_prompt.yaml delete mode 100644 reme_ai/summary/tool/summary_tool_memory_prompt.yaml delete mode 100644 reme_ai/summary/working/message_compress_prompt.yaml delete mode 100644 test/cookbook/appworld/requirements.txt delete mode 100644 test/cookbook/bfcl/requirements.txt delete mode 100644 test/cookbook/frozenlake/frozenlake_prompts.yaml delete mode 100644 test/cookbook/simple_demo/mcp_task_memory.jsonl delete mode 100644 test/cookbook/simple_demo/personal_memory.jsonl delete mode 100644 test/cookbook/simple_demo/task_memory.jsonl delete mode 100644 test/cookbook/simple_demo/task_messages.jsonl delete mode 100644 test/cookbook/tool_memory/query.json delete mode 100644 test/test/cli/fb_cli.yaml delete mode 100644 test/test/cli/fb_compactor.yaml delete mode 100644 test/test/cli/fb_summarizer.yaml delete mode 100644 tests/light/test_reme_light_log.txt delete mode 100644 tests/mcp_servers_demo.json diff --git a/benchmark/appworld/quickstart.md b/benchmark/appworld/quickstart.md deleted file mode 100644 index 45ea0d78..00000000 --- a/benchmark/appworld/quickstart.md +++ /dev/null @@ -1,128 +0,0 @@ -# AppWorld -Experiment Quick Start Guide - -This guide helps you quickly set up and run AppWorld experiments with ReMe integration. - -## Env Setup - -### 1. Clone the Repository - -```bash -git clone https://github.com/agentscope-ai/ReMe.git -cd ReMe/benchmark/appworld -``` - -### 2. Appworld Environment Setup - -Create a new conda environment with Python 3.12: - -```bash -conda create -p ./appworld-env python==3.12 -conda activate ./appworld-env -``` - -Install required Python packages: - -```bash -pip install -r requirements.txt -``` - -Install AppWorld and download the dataset: - -```bash -pip install appworld -appworld install -appworld download data -``` - -**Note**: The AppWorld data will be saved in the current directory. - -### 3. Start ReMe Service - -Install ReMe (if not already installed) -If you haven't installed the ReMe environment yet, follow these steps: -```bash -# Go back to the project root -cd ../.. - -# Create ReMe environment -conda create -p ./reme-env python==3.12 -conda activate ./reme-env - -# Install ReMe -pip install . -``` - -Launch the ReMe service to enable memory library functionality: - -```bash -reme2 \ - backend=http \ - http.port=8002 \ - llms.default.model_name=qwen3-8b \ - embedding_models.default.model_name=text-embedding-v4 \ - vector_stores.default.backend=es \ - vector_stores.default.collection_name=appworld \ - vector_stores.default.hosts=http://xx.yy.zz.mm:nn -``` - -### 4. Common Issues - -**AppWorld data not found**: Ensure `appworld download data` completed successfully - -**pydantic version issue**: AppWorld depends on an older version of pydantic, which is why a separate environment is needed. If you encounter issues running the experiments, try `pip install appworld` to override the dependencies. - - - -## Run Experiments - -### 1. Test: With Memory vs Without Memory - -Run the main experiment script to compare performance with and without memory: - -```bash -python run_appworld.py -``` - -**What this does:** -- Runs AppWorld tasks on the test-normal set -- Compares agent performance with ReMe memory (`use_memory=True`) vs without memory -- Uses multiple workers for parallel processing -- Runs each task multiple times for statistical significance -- Results are automatically saved to `./exp_result/` directory - -**Configuration options in `run_appworld.py`:** -- `max_workers`: Number of parallel workers (default: 16) -- `num_runs`: Number of times each task is repeated (default: 4) -- `batch_size`: Number of concurrent tasks per batch (default: 8) -- `num_trials`: Maximum number of self-reflections, failure-aware reflection mechanism is triggered when num_trials>1 (default: 1) -- `model_name`: Task execution model (default: "qwen3-8b") -- `use_memory`: Whether to use ReMe memory library (default: True) -- `use_memory_addition`: Whether to enable selective addition (default: False) -- `use_memory_deletion`: Whether to enable utility-based deletion (default: False) - -### 2. View Experiment Results - -After running experiments, analyze the statistical results: - -```bash -python run_exp_statistic.py -``` - -**What this script does:** -- Processes all result files in `./exp_result/` -- Calculates best@k, pass@k metrics for different k values -- Generates a summary table showing performance comparisons -- Saves results to `experiment_summary.csv` - -**Metrics explained:** -- `best@k`: Takes groups of k runs per task, finds the maximum score in each group, then averages these maximums -- `pass@k`: Takes groups of k runs per task, measures the probability that at least one out of k independent task runs is successful. -- Higher k values show potential performance, lower k values show consistency -- In our AppWorld experiments, we report Task Goal Completion (TGC) metric, which measures percentage of tasks for which the agent passes all evaluation tests. - -**Output Files** - -- `./exp_result/*.jsonl`: Raw experiment results for each configuration -- `./exp_result/experiment_summary.csv`: Statistical summary table -- Console output: Real-time progress and summary statistics diff --git a/benchmark/appworld/requirements.txt b/benchmark/appworld/requirements.txt deleted file mode 100644 index d6d82541..00000000 --- a/benchmark/appworld/requirements.txt +++ /dev/null @@ -1,7 +0,0 @@ -fastapi -uvicorn -uuid -jinja2 -loguru -openai -pandas \ No newline at end of file diff --git a/benchmark/bfcl/quickstart.md b/benchmark/bfcl/quickstart.md deleted file mode 100644 index c80ef75f..00000000 --- a/benchmark/bfcl/quickstart.md +++ /dev/null @@ -1,129 +0,0 @@ -# BFCL -Experiment Quick Start Guide - -This guide helps you quickly set up and run BFCL experiments with ReMe integration. - -## Env Setup - -### 1. BFCL installation - -#### Clone the repository -```bash -cd ReMe/benchmark/bfcl -git clone https://github.com/ShishirPatil/gorilla.git -cd gorilla -git checkout ea13468 -``` - -#### Change directory to the `berkeley-function-call-leaderboard` -```bash -cd berkeley-function-call-leaderboard -``` - -#### Install the package in editable mode -```bash -pip install -e . -cd ../.. -pip install -r requirements.txt -``` - -#### Move the dataset to the data folder under bfcl -```bash -cp -r gorilla/berkeley-function-call-leaderboard/bfcl_eval/data ./ -``` - -#### Preprocess the data to get the suitable data format -```bash -python preprocess.py -``` - -**Note**: The original BFCL data is designed as a benchmark dataset and does not have a train/validation split, you can use ``split_into_trainval.py`` to split data into train and validation sets. - -```bash -python split_into_trainval.py --input ./data/multiturn_data_base.jsonl --train ./data/multiturn_data_base_train.jsonl --val ./data/multiturn_data_base_val.jsonl -``` - -### 2. Start ReMe Service - -After collecting trajectories, Launch the ReMe service (make sure you have installed ReMe environment, if not please follow the steps in the [ReMe Installation Guide](https://github.com/agentscope-ai/ReMe/blob/main/doc/README.md) to install): - -```bash -reme2 \ - backend=http \ - http.port=8002 \ - llms.default.model_name=qwen3-8b \ - embedding_models.default.model_name=text-embedding-v4 \ - vector_stores.default.backend=local \ - vector_stores.default.collection_name=bfcl -``` - -
-Option: init the task memory pool from scratch - -- First, collect agent trajectories on training data set without task memory: - - ```bash - # important: num_runs = 8, use_memory = False, experiment_suffix="wo-memory", data_path="data/multiturn_data_base_train.jsonl" - python run_bfcl.py - ``` - -- Second, using ReMe to construct the initial task memory pool: - ```bash - python init_task_memory_pool.py --jsonl_file ./exp_result/qwen3-8b/with_think/bfcl-multi-turn-base_wo-memory.jsonl - ``` - - > Parameters: - > `jsonl_file`: Path to the collloaded trajectories - > `service_url`: ReMe service URL (default: `http://localhost:8002`) - > `n_threads`: Number of threads for processing - > `output_file`: Output file to save results (optional) - - Now you have inited the task memory pool using `local` backend. Then, run the following `curl` command to dump the memory library: - ```bash - curl -X POST "http://0.0.0.0:8002/dump_memory" \ - -H "Content-Type: application/json" \ - -d '{ - "dump_file_path": "./library/bfcl.jsonl", - }' - ``` - -- Next time, you can import this previously exported task memory data to populate the new started workspace with existing knowledge: - ```bash - curl -X POST "http://0.0.0.0:8002/load_memory" \ - -H "Content-Type: application/json" \ - -d '{ - "load_file_path": "./library/bfcl.jsonl", - "clear_existing": true - }' - ``` -
- -### 3. Run Experiments on Validation Set - -Run you can compare agent performance on the validation set with task memory (`use_memory=True`) and without task memory: - -```bash -# remember to change the configuration options, e.g., `data_path=./data/multiturn_data_base_val.jsonl` -python run_bfcl.py -``` - -**Note**: -- `max_workers`: Number of parallel workers -- `num_runs`: Number of times each task is repeated -- `model_name`: LLM model name -- `enable_thinking`: Control the model's thinking mode -- `data_path`: Path to the training dataset (default: `./data/multiturn_data_base_val.jsonl`) -- `answer_path`: Path to the possible answer, which are used to evaluate the model's output function (default: `./data/possible_answer`) -- Results are automatically saved to `./exp_result/{model_name}/{no_think/with_think}` directory - -After running experiments, analyze the statistical results: - -```bash -python run_exp_statistic.py -``` - -**What this script does:** -- Processes all result files in `./exp_result/` -- Calculates best@k&pass@k metrics for different k values -- Generates a summary table showing performance comparisons -- Saves results to `experiment_summary.csv` diff --git a/benchmark/bfcl/requirements.txt b/benchmark/bfcl/requirements.txt deleted file mode 100644 index 445bf2b3..00000000 --- a/benchmark/bfcl/requirements.txt +++ /dev/null @@ -1,6 +0,0 @@ -jinja2 -loguru -openai -ray -pandas -soundfile \ No newline at end of file diff --git a/benchmark/halumem/cat_correct_scripts.sh b/benchmark/halumem/cat_correct_scripts.sh deleted file mode 100755 index 0f589175..00000000 --- a/benchmark/halumem/cat_correct_scripts.sh +++ /dev/null @@ -1 +0,0 @@ -cat bench_results/reme/Martin\ Mark/session* | grep '"result_type": "' | awk -F'"' '{total++; if($4=="Correct") count++} END {printf "Correct Rate: %.2f%% (%d/%d)\n", (count/total)*100, count, total}' \ No newline at end of file diff --git a/benchmark/halumem/eval_reme.yaml b/benchmark/halumem/eval_reme.yaml deleted file mode 100644 index 209f39a4..00000000 --- a/benchmark/halumem/eval_reme.yaml +++ /dev/null @@ -1,547 +0,0 @@ -TEMPLATE_MEMOS: | - Memories for user {user_id}: - {memories} - -PROMPT_MEMZERO_JSON: | - # CONTEXT: - {context} - - # CONTEXT PRIORITY: - When the context contains information from multiple sources, follow this strict priority order: - 1. **Historical Dialogue** (highest priority) - Direct conversation content - 2. **Extracted Memories** (medium priority) - Summarized memory points - 3. **User Profile** (lowest priority) - General user information - - # Question: - {question} - - # OUTPUT FORMAT: - Do not hallucinate; strictly answer the user's question based on the content of the CONTEXT. - Please provide your response in the following JSON format: - - ```json - {{ - "reasoning": "reasoning content", - "answer": "Provide a detailed answer" - }} - ``` - -PROMPT_MEMZERO_JSON2: | - # CONTEXT: - {context} - - # CONTEXT PRIORITY: - When the context contains information from multiple sources, follow this strict priority order: - 1. **Historical Dialogue** (highest priority) - Direct conversation content - 2. **Extracted Memories** (medium priority) - Summarized memory points - 3. **User Profile** (lowest priority) - General user information - - # Question: - {question} - - # OUTPUT FORMAT: - Do not hallucinate; strictly answer the user's question based on the content of the CONTEXT. - Please provide your response in the following JSON format: - - ```json - {{ - "reasoning": "reasoning content", - "answer": "Provide a detailed answer" - }} - ``` - -PROMPT_MEMZERO: | - You are an intelligent memory assistant tasked with retrieving accurate information from conversation memories. - - # CONTEXT: - You have access to memories from two speakers in a conversation. These memories contain - timestamped information that may be relevant to answering the question. - - # INSTRUCTIONS: - 1. Carefully analyze all provided memories from both speakers - 2. Pay special attention to the timestamps to determine the answer - 3. If the question asks about a specific event or fact, look for direct evidence in the memories - 4. If the memories contain contradictory information, prioritize the most recent memory - 5. If there is a question about time references (like "last year", "two months ago", etc.), - calculate the actual date based on the memory timestamp. For example, if a memory from - 4 May 2022 mentions "went to India last year," then the trip occurred in 2021. - 6. Always convert relative time references to specific dates, months, or years. For example, - convert "last year" to "2022" or "two months ago" to "March 2023" based on the memory - timestamp. Ignore the reference while answering the question. - 7. Focus only on the content of the memories from both speakers. Do not confuse character - names mentioned in memories with the actual users who created those memories. - 8. The answer should be less than 5-6 words. - - # APPROACH (Think step by step): - 1. First, examine all memories that contain information related to the question - 2. Examine the timestamps and content of these memories carefully - 3. Look for explicit mentions of dates, times, locations, or events that answer the question - 4. If the answer requires calculation (e.g., converting relative time references), show your work - 5. Formulate a precise, concise answer based solely on the evidence in the memories - 6. Double-check that your answer directly addresses the question asked - 7. Ensure your final answer is specific and avoids vague time references - - {context} - - Question: {question} - - Answer: - -PROMPT_ZEP: | - You are an intelligent memory assistant tasked with retrieving accurate information from conversation memories. - - # CONTEXT: - You have access to memories from a conversation. These memories contain - timestamped information that may be relevant to answering the question. - - # INSTRUCTIONS: - 1. Carefully analyze all provided memories - 2. Pay special attention to the timestamps to determine the answer - 3. If the question asks about a specific event or fact, look for direct evidence in the memories - 4. If the memories contain contradictory information, prioritize the most recent memory - 5. If there is a question about time references (like "last year", "two months ago", etc.), - calculate the actual date based on the memory timestamp. For example, if a memory from - 4 May 2022 mentions "went to India last year," then the trip occurred in 2021. - 6. Always convert relative time references to specific dates, months, or years. For example, - convert "last year" to "2022" or "two months ago" to "March 2023" based on the memory - timestamp. Ignore the reference while answering the question. - 7. Focus only on the content of the memories. Do not confuse character - names mentioned in memories with the actual users who created those memories. - 8. The answer should be less than 5-6 words. - - # APPROACH (Think step by step): - 1. First, examine all memories that contain information related to the question - 2. Examine the timestamps and content of these memories carefully - 3. Look for explicit mentions of dates, times, locations, or events that answer the question - 4. If the answer requires calculation (e.g., converting relative time references), show your work - 5. Formulate a precise, concise answer based solely on the evidence in the memories - 6. Double-check that your answer directly addresses the question asked - 7. Ensure your final answer is specific and avoids vague time references - - Context: - - {context} - - Question: {question} - Answer: - -PROMPT_MEMOS: | - You are a knowledgeable and helpful AI assistant. - - # CONTEXT: - You have access to memories from two speakers in a conversation. These memories contain - timestamped information that may be relevant to answering the question. - - # INSTRUCTIONS: - 1. Carefully analyze all provided memories. Synthesize information across different entries if needed to form a complete answer. - 2. Pay close attention to the timestamps to determine the answer. If memories contain contradictory information, the **most recent memory** is the source of truth. - 3. If the question asks about a specific event or fact, look for direct evidence in the memories. - 4. Your answer must be grounded in the memories. However, you may use general world knowledge to interpret or complete information found within a memory (e.g., identifying a landmark mentioned by description). - 5. If the question involves time references (like "last year", "two months ago", etc.), you **must** calculate the actual date based on the memory's timestamp. For example, if a memory from 4 May 2022 mentions "went to India last year," then the trip occurred in 2021. - 6. Always convert relative time references to specific dates, months, or years in your final answer. - 7. Do not confuse character names mentioned in memories with the actual users who created them. - 8. The answer must be brief (under 5-6 words) and direct, with no extra description. - - # APPROACH (Think step by step): - 1. First, examine all memories that contain information related to the question. - 2. Synthesize findings from multiple memories if a single entry is insufficient. - 3. Examine timestamps and content carefully, looking for explicit dates, times, locations, or events. - 4. If the answer requires calculation (e.g., converting relative time references), perform the calculation. - 5. Formulate a precise, concise answer based on the evidence from the memories (and allowed world knowledge). - 6. Double-check that your answer directly addresses the question asked and adheres to all instructions. - 7. Ensure your final answer is specific and avoids vague time references. - - {context} - - Question: {question} - - Answer: - -PROMPT_MEMOBASE: | - You are an intelligent memory assistant tasked with retrieving accurate information from conversation memories. - - # CONTEXT: - You have access to memories from two speakers in a conversation. These memories contain - timestamped information that may be relevant to answering the question. - - # INSTRUCTIONS: - 1. Carefully analyze all provided memories from both speakers - 2. Pay special attention to the timestamps to determine the answer - 3. If the question asks about a specific event or fact, look for direct evidence in the memories - 4. If the memories contain contradictory information, prioritize the most recent memory - 5. If there is a question about time references (like "last year", "two months ago", etc.), calculate the actual date based on the memory timestamp. For example, if a memory from 4 May 2022 mentions "went to India last year," then the trip occurred in 2021. - 6. Always convert relative time references to specific dates, months, or years. For example, convert "last year" to "2022" or "two months ago" to "March 2023" based on the memory timestamp. Ignore the reference while answering the question. - 7. Focus only on the content of the memories from both speakers. Do not confuse character names mentioned in memories with the actual users who created those memories. - 8. The answer should be less than 5-6 words. - - # APPROACH (Think step by step): - 1. First, examine all memories that contain information related to the question - 2. Examine the timestamps and content of these memories carefully - 3. Look for explicit mentions of dates, times, locations, or events that answer the question - 4. If the answer requires calculation (e.g., converting relative time references), show your work - 5. Formulate a precise, concise answer based solely on the evidence in the memories - 6. Double-check that your answer directly addresses the question asked - 7. Ensure your final answer is specific and avoids vague time references - - {context} - - Question: {question} - - Answer: - - -EVALUATION_PROMPT_FOR_MEMORY_INTEGRITY: | - You are a strict **"Memory Integrity" evaluator**. - Your core task is to assess whether an AI memory system has **missed any key memory points** after processing a conversation. This evaluation measures the system's **memory integrity**, i.e., its ability to resist **amnesia** or **omission**. - - # Evaluation Context & Data: - - 1. **Extracted Memories:** - These are all the memory items actually extracted by the memory system. - {memories} - - 2. **Expected Memory Point:** - The key memory point that *should* have been extracted. - {expected_memory_point} - - # Evaluation Instructions: - - 1. For each **Expected Memory Point**, search within the **Extracted Memories** list for corresponding or related information. Ignore unrelated items. - 2. Based on the following scoring rubric, rate how well the memory system captured the **Expected Memory Point** and provide a detailed explanation. - - # Scoring Rubric: - - * **2:** Fully covered or implied. - One or more items in "Extracted Memories" fully cover or logically imply all information in the "Expected Memory Point." - - * **1:** Partially covered or mentioned. - Some information in "Extracted Memories" mentions part of the "Expected Memory Point," but key information is missing, inaccurate, or slightly incorrect. - - * **0:** Not mentioned or incorrect. - "Extracted Memories" contains no mention of the "Expected Memory Point," or the corresponding information is entirely wrong. - - # Scoring Notes: - - * For **compound Expected Memory Points** (with multiple elements such as person/event/time/location/preference, etc.): - - * All elements correct → **2 points** - * Some elements correct / uncertain → **1 point** - * Key elements missing or wrong → **0 points** - - * Semantic matching is acceptable; exact wording is **not** required. - - * If "Extracted Memories" contains **conflicting information**, assign the **best possible coverage score** and mention the conflict in your reasoning. - - * Extra or stylistically different memories do **not** reduce the score; only the coverage of the **Expected Memory Point** matters. - - * For uncertain wording ("might," "probably," "tends to," etc.): - - * If the Expected Memory Point is a definite statement, usually assign **1 point**. - - * If critical fields (e.g., time, entity name, relationship) are partly wrong but others match → **1 point**. - - * If all key fields are wrong or missing → **0 points**. - - # Output Format: - - Please output your result in the following JSON format: - - ```json - {{ - "reasoning": "Provide a concise justification for the score", - "score": "2|1|0" - }} - ``` - -EVALUATION_PROMPT_FOR_MEMORY_ACCURACY: | - You are a **Dialogue Memory Accuracy Evaluator.** Your task is to evaluate the **accuracy** of a memory extracted by an AI memory system, based on three given inputs: the dialogue content, the *target (gold)* memory points (the correct annotated memories), and the *candidate* memory to be evaluated. The goal is to output a **structured evaluation result**. - - # Input Content - - * **Dialogue:** - {dialogue} - - * **Golden Memories (Target Memory Points):** - The correct memory points pre-annotated for this dialogue in the evaluation dataset. - {golden_memories} - - * **Candidate Memory:** - The memory extracted by the system to be evaluated. - {candidate_memory} - - # Evaluation Principles and Definitions - - ### 1) Support / Entailment - - * An **information point** (atomic fact) in the candidate memory is considered *supported* if it can be directly stated or semantically entailed (via synonym, paraphrase, or equivalent expression) by the *Dialogue* or *Golden Memories*. - * Only the given dialogue and golden memories can be used for judgment — **no external knowledge** or assumptions are allowed. - Any information not appearing in or inferable from these two sources is considered *unsupported*. - * Pay careful attention to **negation**, **quantities**, **time**, and **subjects**. - If the candidate statement contradicts the dialogue or golden memories, it is considered a **conflict**. - - ### 2) Memory Accuracy Score (integer: 0 / 1 / 2) - - * **2 points:** Every information point in the candidate memory is supported by the dialogue or golden memories, with **no contradictions or hallucinations**. - * **1 point:** The candidate memory is *partially correct* (at least one supported information point) but also includes *unsupported* or *contradictory* content. - * **0 points:** The candidate memory is **entirely unsupported or contradictory** to the sources (i.e., a "hallucinated memory"). - - > Note: - > * If a candidate memory contains multiple information points, **any unsupported or contradictory element** prevents a full score (2). - > * If both supported and unsupported/conflicting content appear, assign a score of **1**. - - ### 3) Inclusion in Golden Memories (Boolean field-level judgment) - - **Definition:** - - * **Atomic information point:** the smallest factual unit in the candidate memory (e.g., *name = Li Si*, *age = 25*, *location = Beijing*, *preference = coffee*, *budget ≤ 2000*, *meeting_time = Wednesday 10:00*, *tool = Zoom*, etc.). - * **Field / Slot:** the semantic dimension of an information point (e.g., *name*, *age*, *residence*, *food preference*, *budget*, *meeting time*, *meeting tool*, etc.). - - **Judgment Rules (independent of correctness):** - - * **true:** - Every atomic information point in the candidate memory has a corresponding **field** in the golden memories (allowing for synonyms, paraphrases, or equivalent expressions; ignore value, polarity, or quantity differences). - - * Note: A single field in the gold list may match multiple candidate points (e.g., multiple "drink preference" facts can be covered by one "drink preference" field in gold). - * **false:** - If **any** atomic information point's field in the candidate memory cannot be found in the golden memories, mark as *false*. - - **Important Notes:** - - * Field matching is restricted to fields that are **explicitly present or semantically recognizable** in the golden memories — no external knowledge may be used to expand the field set. - * Differences in **values** (e.g., "Zhang San" vs. "Li Si"), **polarity** (like/dislike), or **exact number/time** do **not** affect this Boolean judgment. - - # Evaluation Procedure - - For each candidate memory: - - 1. **Decompose** it into atomic information points (e.g., name, number, location, preference). - 2. For each information point, **search** the dialogue and golden memories for supporting or contradictory evidence. - 3. Assign the **accuracy_score** (0 / 1 / 2) according to the rules above. - 4. Determine **is_included_in_golden_memories (true/false)**: - - * Identify each information point's field; - * If *all* fields exist in the golden memories, mark as *true*; otherwise, *false*. - 5. Provide a **concise Chinese explanation** in `"reason"`, citing key evidence (short excerpts allowed), and clearly state any unsupported or contradictory parts if applicable. - - # Output Format (strictly required) - - Output **only one JSON object**, with the following three fields: - - * `"accuracy_score"`: `"0"` or `"1"` or `"2"` - * `"is_included_in_golden_memories"`: `"true"` or `"false"` - * `"reason"`: `"brief explanation in Chinese"` - - Do **not** include any other text, explanation, or fields. - Do **not** include the candidate memory text inside the JSON. - - Please output **only** the following JSON (in a code block): - - ```json - {{ - "reason": "Brief explanation in Chinese" - "accuracy_score": "2 | 1 | 0", - "is_included_in_golden_memories": "true | false", - }} - ``` - -EVALUATION_PROMPT_FOR_UPDATE_MEMORY: | - Your task is to **evaluate the update accuracy** of an AI memory system. - Based on the information provided below, determine whether the system-generated **“Generated Memories”** correctly **includes** the **Target Memory for Update**. - - # Background Information - - The following information is provided for evaluation: - - 1. **Generated Memories:** - This is the list of memory points generated by the system after the current dialogue. - {memories} - - 2. **Target Memory for Update:** - This is the correct, updated version of the memory point that should have been produced — the one we focus on in this evaluation. - {updated_memory} - - 3. **Original Memory Content:** - This is the original version of the target memory before the update. - {original_memory} - - # Evaluation Criteria - - Please make your judgment **strictly based on the content update of the “Target Memory for Update.”** - Use the following categories: - - ### Correct Update - - * **Generated Memories** **contains all information points** from the “Target Memory for Update,” accurately and completely reflecting the intended update. - * **Key fields** (e.g., date, time, values, proper nouns, etc.) must match exactly. - * The **original memory** is effectively replaced or marked as outdated. - * Synonymous or slightly rephrased expressions are acceptable. - - ### Hallucinated Update - - * **Factual error:** The **Generated Memories** includes a new memory related to the “Target Memory for Update,” but its content contains factual mistakes or contradictions compared to the correct update. - - ### Omitted Update - - * **Completely omitted:** The **Generated Memories** contains no new memory related to the “Target Memory for Update.” - * **Partially omitted:** A related new memory was generated in **Generated Memories**, but it **misses key information** that should have been included. - - ### Other - - Used for update failures that do **not clearly fall** into the above categories of “Hallucination” or “Omission.” - - # Output Requirements - - Please return your evaluation strictly in the following JSON format and provide a concise explanation. - - ```json - {{ - "reason": "Briefly explain your reasoning here and why it fits this category.", - "evaluation_result": "Correct | Hallucination | Omission | Other" - }} - ``` - -EVALUATION_PROMPT_FOR_QUESTION: | - You are an **evaluation expert for AI memory system question answering**. - Based **only** on the provided **“Question”**, **“Reference Answer”**, and **“Key Memory Points”** (the essential facts needed to derive the reference answer), strictly evaluate the **accuracy** of the **“Memory System Response.”** Classify it as one of **“Correct”**, **“Hallucination”**, or **“Omission.”** Do **not** use any external knowledge or subjective inference. Finally, output your judgment **strictly** in the specified JSON format. - - # Evaluation Criteria - - ## Answer Type Classification - - ### 1. Correct - - * The “Memory System Response” accurately answers the “Question,” and its content is **semantically equivalent** to the “Reference Answer.” - * It contains **no contradictions** with the “Key Memory Points” or “Reference Answer.” - * It introduces **no unsupported details** beyond the “Key Memory Points” that could alter the conclusion. - * Synonyms, paraphrasing, and reasonable summarization are acceptable. - - ### 2. Hallucination - - * The “Memory System Response” includes information or facts that **contradict or are inconsistent** with the “Reference Answer” or the “Key Memory Points.” - * When the “Reference Answer” is labeled as *unknown/uncertain*, yet the response provides a specific verifiable fact or conclusion. - * Extra irrelevant information that does **not change** the conclusion is **not** considered hallucination by itself; however, if it **changes or misleads** the conclusion, or **contradicts** the “Key Memory Points,” it should be judged as a **Hallucination**. - - ### 3. Omission - - * The response is **incomplete** compared to the “Reference Answer.” - * It explicitly states “don’t know,” “can’t remember,” or “no related memory,” even though relevant information exists in the “Key Memory Points.” - * For multi-element questions, **all elements must be correct and present**; omission of **any** element is considered an **Omission**. - - ## Priority Rules (Conflict Handling) - - * If the response contains **both missing necessary information** and **fabricated/contradictory information**, classify it as **Hallucination**. - * If there is **no fabrication/contradiction** but some necessary information is missing, classify it as **Omission**. - * Only when the meaning is **fully equivalent** to the reference answer should it be classified as **Correct**. - - ## Detailed Guidelines and Tolerance - - * Equivalent expressions of numbers, times, and units are acceptable, but the **numerical values themselves must not differ**. - * For multi-element questions, **all elements must be complete and accurate**; missing any element counts as **Omission**. - * If the reference answer is *“unknown / cannot be determined”* and the system provides a definite fact, that is a **Hallucination**. - If the system also answers *“unknown”* (without guessing), it may be **Correct**. - * The evaluation must rely **only** on the *Reference Answer*, *Key Memory Points*, and *System Response* — no external context, world knowledge, or speculative reasoning is allowed. - - # Information for Evaluation - - * **Question:** - {question} - - * **Reference Answer:** - {reference_answer} - - * **Key Memory Points:** - {key_memory_points} - - * **Memory System Response:** - {response} - - # Output Requirements - - Please provide your evaluation result **strictly** in the JSON format below. - Do **not** add any extra explanation or comments outside the JSON block. - - ```json - {{ - "reasoning": "Provide a concise and traceable evaluation rationale: first compare the system’s response with the Key Memory Points (which were correctly used, which were missing, and whether there was any fabrication/contradiction), then assess its consistency with the Reference Answer, and finally state the classification basis.", - "evaluation_result": "Correct | Hallucination | Omission" - }} - ``` - - -EVALUATION_PROMPT_FOR_QUESTION2: | - You are an **evaluation expert for AI memory system question answering**. - - Based **only** on the provided **"Question"**, **"Reference Answer"**, and **"Key Memory Points"** (the essential facts needed to derive the reference answer), strictly evaluate the **accuracy** of the **"Memory System Response."** Classify it as one of **"Correct"**, **"Hallucination"**, or **"Omission."** Do **not** use any external knowledge or subjective inference. Finally, output your judgment **strictly** in the specified JSON format. - - # Evaluation Criteria - - ## Answer Type Classification - - ### 1. Correct - - * The "Memory System Response" accurately answers the "Question," and its content is **semantically equivalent** to the "Reference Answer." - * It contains **no contradictions** with the "Key Memory Points" or "Reference Answer." - * **Extra details not present in the Key Memory Points are allowed and should not be penalized**, as long as they: - - Do not contradict the Key Memory Points or Reference Answer - - Do not change or mislead the core conclusion - - Are reasonable additional context that the memory system may have retained from the conversation - * The memory system may have stored additional information beyond the Key Memory Points. Such extra information should be treated as **supplementary context** rather than hallucination, provided it does not conflict with the core answer. - * Synonyms, paraphrasing, and reasonable summarization are acceptable. - - ### 2. Hallucination - - * The "Memory System Response" includes information or facts that **contradict or are inconsistent** with the "Reference Answer" or the "Key Memory Points." - * The response provides information that **directly contradicts** known facts from the Key Memory Points. - * When the "Reference Answer" is labeled as *unknown/uncertain*, yet the response provides a specific verifiable fact or conclusion. - * **Important:** Extra information that is NOT in Key Memory Points is **NOT automatically a hallucination**. Only classify as hallucination if the extra information: - - Directly contradicts the Key Memory Points or Reference Answer - - Changes or misleads the core conclusion in a way that makes the answer incorrect - - Provides a definitive answer when the Reference Answer indicates uncertainty - - ### 3. Omission - - * The response is **incomplete** compared to the "Reference Answer." - * It explicitly states "don't know," "can't remember," or "no related memory," even though relevant information exists in the "Key Memory Points." - * For multi-element questions, **all elements must be correct and present**; omission of **any** element is considered an **Omission**. - - ## Priority Rules (Conflict Handling) - - * If the response contains **both missing necessary information** and **fabricated/contradictory information**, classify it as **Hallucination**. - * If there is **no fabrication/contradiction** but some necessary information is missing, classify it as **Omission**. - * If the core answer is correct and complete, classify as **Correct** even if there are extra details not in Key Memory Points (as long as they don't contradict or mislead). - - ## Detailed Guidelines and Tolerance - - * Equivalent expressions of numbers, times, and units are acceptable, but the **numerical values themselves must not differ**. - * For multi-element questions, **all elements must be complete and accurate**; missing any element counts as **Omission**. - * If the reference answer is *"unknown / cannot be determined"* and the system provides a definite fact, that is a **Hallucination**. - If the system also answers *"unknown"* (without guessing), it may be **Correct**. - * **Focus on evaluating whether the core answer to the question is correct**, not whether the response is limited to only the Key Memory Points. - * Extra contextual information (e.g., additional preferences, related details) should be viewed as enrichment, not as errors, unless they contradict or mislead. - - # Information for Evaluation - - * **Question:** - {question} - - * **Reference Answer:** - {reference_answer} - - * **Key Memory Points:** - {key_memory_points} - - * **Memory System Response:** - {response} - - # Output Requirements - - Please provide your evaluation result **strictly** in the JSON format below. - Do **not** add any extra explanation or comments outside the JSON block. - - ```json - {{ - "reasoning": "Provide a concise and traceable evaluation rationale: first verify that the system's response correctly includes all required elements from the Reference Answer, then check if any information contradicts the Key Memory Points or Reference Answer. Extra details not in Key Memory Points should be noted but not penalized unless they contradict or mislead. Finally state the classification basis.", - "evaluation_result": "Correct | Hallucination | Omission" - }} - ``` - """ \ No newline at end of file diff --git a/benchmark/halumem/eval_scripts.sh b/benchmark/halumem/eval_scripts.sh deleted file mode 100755 index c8a06881..00000000 --- a/benchmark/halumem/eval_scripts.sh +++ /dev/null @@ -1,5 +0,0 @@ -clear && python benchmark/halumem/eval_reme.py \ - --data_path /Users/yuli/workspace/HaluMem/data/HaluMem-Medium.jsonl \ - --reme_model_name qwen3.5-plus \ - --batch_size 10000 \ - --algo_version default \ No newline at end of file diff --git a/benchmark/halumem/quickstart.md b/benchmark/halumem/quickstart.md deleted file mode 100644 index 4ef30846..00000000 --- a/benchmark/halumem/quickstart.md +++ /dev/null @@ -1,46 +0,0 @@ -# Halumem -Experiment Quick Start Guide -This guide helps you quickly set up and run Halumem experiments with ReMe integration. - -### 1. Start ReMe Service -Install ReMe (if not already installed) -If you haven't installed the ReMe environment yet, follow these steps: -```bash -# Create ReMe environment -conda create -p ./reme-env python==3.12 -conda activate ./reme-env - -# Install ReMe -pip install . -``` - -### 2. Download the Dataset -```bash -cd ./benchmark/halumem -mkdir -p data -curl -L "https://huggingface.co/datasets/IAAR-Shanghai/HaluMem/resolve/main/HaluMem-Medium.jsonl?download=true" -o data/HaluMem-Medium.jsonl -curl -L "https://huggingface.co/datasets/IAAR-Shanghai/HaluMem/resolve/main/HaluMem-Long.jsonl?download=true" -o data/HaluMem-Long.jsonl -``` - -Dataset page: -https://huggingface.co/datasets/IAAR-Shanghai/HaluMem/tree/main - -If the official source is slow or inaccessible in mainland China, you can use a mirror: -```bash -cd ./benchmark/halumem -mkdir -p data -curl -L "https://hf-mirror.com/datasets/IAAR-Shanghai/HaluMem/resolve/main/HaluMem-Medium.jsonl?download=true" -o data/HaluMem-Medium.jsonl -curl -L "https://hf-mirror.com/datasets/IAAR-Shanghai/HaluMem/resolve/main/HaluMem-Long.jsonl?download=true" -o data/HaluMem-Long.jsonl -``` - -### 3. Run Experiments -Launch the ReMe service to enable memory library functionality: -```bash -clear && python benchmark/halumem/eval_reme.py \ - --data_path benchmark/halumem/data/HaluMem-Medium.jsonl \ - --reme_model_name gpt-4o-mini-2024-07-18 \ - --eval_model_name gpt-4o-mini-2024-07-18 \ - --batch_size 40 \ - --algo_version default -``` - diff --git a/benchmark/locomo/eval_reme.yaml b/benchmark/locomo/eval_reme.yaml deleted file mode 100644 index 5228884a..00000000 --- a/benchmark/locomo/eval_reme.yaml +++ /dev/null @@ -1,180 +0,0 @@ -TEMPLATE_MEMOS: | - Memories for user {user_id}: - {memories} - -PROMPT_MEMZERO_JSON: | - # CONTEXT: - {context} - - # CONTEXT PRIORITY: - When the context contains information from multiple sources, follow this strict priority order: - 1. **Historical Dialogue** (highest priority) - Direct conversation content - 2. **Extracted Memories** (medium priority) - Summarized memory points - 3. **User Profile** (lowest priority) - General user information - - # Question: - {question} - - # INSTRUCTIONS: - 1. Carefully analyze all provided memories (facts and entities) - 2. Pay special attention to the timestamps (event_time) to determine when events occurred - 3. If the question asks about a specific event or fact, look for direct evidence in the memories - 4. If the memories contain contradictory information, prioritize the most recent memory - 5. Always convert relative time references to specific dates, months, or years - 6. Be as specific as possible when talking about people, places, and events - 7. Timestamps in memories represent the time the event was mentioned in a message, not the actual time the event occurred - - - # OUTPUT FORMAT: - Please provide your response in the following JSON format: - - ```json - {{ - "reasoning": "reasoning content", - "answer": "Provide a detailed answer" - }} - ``` - -SYSTEM_PROMPT: | - You are an expert grader that determines if answers to questions match a gold standard answer - -USER_PROMPT: | - Your task is to label an answer to a question as 'CORRECT' or 'WRONG'. You will be given the following data: - (1) a question (posed by one user to another user), - (2) a 'gold' (ground truth) answer, - (3) a generated answer - which you will score as CORRECT/WRONG. - - The point of the question is to ask about something one user should know about the other user based on their prior conversations. - The gold answer will usually be a concise and short answer that includes the referenced topic, for example: - Question: Do you remember what I got the last time I went to Hawaii? - Gold answer: A shell necklace - The generated answer might be much longer, but you should be generous with your grading - as long as it touches on the same topic as the gold answer, it should be counted as CORRECT. - - For time related questions, the gold answer will be a specific date, month, year, etc. The generated answer might be much longer or use relative time references (like "last Tuesday" or "next month"), but you should be generous with your grading - as long as it refers to the same date or time period as the gold answer, it should be counted as CORRECT. Even if the format differs (e.g., "May 7th" vs "7 May"), consider it CORRECT if it's the same date. - - Now it's time for the real question: - Question: {question} - Gold answer: {golden_answer} - Generated answer: {generated_answer} - - First, provide a short (one sentence) explanation of your reasoning, then finish with CORRECT or WRONG. - Do NOT include both CORRECT and WRONG in your response, or it will break the evaluation script. - - Just return the label CORRECT or WRONG in a json format with the key as "label". - -user_message_summary_1: | - You are a Memory Agent responsible for managing {memory_type} memories about {memory_target}. - - ## Latest Conversation - Format: round [] : - {context} - - ## Task - ### Step 1: Create Memory Draft - Use `add_draft_and_retrieve_similar_memory` to create a memory draft list based on the latest conversation. - - For each memory draft, fill in the required parameters: - * `message_time`: timestamp from the conversation (e.g., '2020-01-01 00:00:00') - * `memory_content`: concise memory content extracted from the conversation - - Use actual names from the conversation (e.g., "Bob likes apples") instead of generic references (e.g., "user likes apples") - - Extract all important information comprehensively—do not miss critical details, but avoid any fabrications or unfounded assumptions - - The tool will retrieve similar historical memories via vector search to help you in Step 2 - - ### Step 2: Add Memories - Review each memory draft from Step 1 and compare it with the retrieved historical memories, then use `add_memory` to manage all memories in one call: - - - For each new memory, fill in the required parameters: - * `message_time`: timestamp from the conversation (e.g., '2020-01-01 00:00:00') - * `memory_content`: memory content - - Add memories when: - * The draft contains new information not present in historical memories - - - **General Guidelines:** - - **Skip** drafts if their content is already fully covered by historical memories (avoid redundancy) - - You can add memories in a single `add_memory` tool call - -user_message_summary_2: | - You are a Profile Agent responsible for managing profiles about {memory_target}. - - ## Latest Conversation - Format: round [] : - {context} - - ## Current Profiles - {profiles} - - ## Task - Analyze the Latest Conversation and use `update_profiles` to manage profiles (both updates and additions in one call): - - **For profiles_to_update** (updating existing profiles): - - For each profile to update, fill in the required parameters: - * `profile_id`: ID of the profile to update (from Current Profiles) - * `message_time`: timestamp from the conversation (e.g., '2020-01-01 00:00:00') - * `profile_key`: profile key or category (e.g., 'name', 'age', 'occupation') - * `profile_value`: updated profile value, please be concise. (e.g., 'John Smith') - - **For profiles_to_add** (adding new profiles): - - For each new profile, fill in the required parameters: - * `message_time`: timestamp from the conversation (e.g., '2020-01-01 00:00:00') - * `profile_key`: profile key or category (e.g., 'name', 'age', 'occupation') - * `profile_value`: profile value (e.g., 'John Smith') - - Add profiles when: - * The information represents a new distinct profile not present in Current Profiles - * The profile key doesn't exist in Current Profiles - * The information cannot be merged into existing profiles - - **General Guidelines:** - - Extract all important information comprehensively—do not miss critical details, but avoid any fabrications or unfounded assumptions - - You can update and add profiles in a single tool call - -user_message_retrieve: | - You are a Memory Retrieval Agent specialized in retrieving {memory_type} memories about {memory_target}. - - ## User Profile - {profiles} - - ## User Question - {context} - - ## Multi-Phase Retrieval Strategy - Follow these phases sequentially to gather comprehensive information: - - ### Phase 1: Semantic Search (No Time Filter) - **Tool**: `retrieve_memory` (without time constraints) - **Objective**: Cast a wide net to find potentially relevant memories - **Approach**: - - Execute 3-5 diverse search queries using different formulations: - * Original question verbatim - * Rephrased variations (different wording, synonyms) - * Entity-focused queries (extract and search specific names, places, events) - * Keyword-based searches (core concepts, topics) - * Related context queries (broader themes) - - Review all results before proceeding to next phase - - ### Phase 2: Deep Dive into History - **Tool**: `read_history` - **When to use**: After exhausting retrieval attempts OR when specific conversation context is needed - **Important Constraints**: - - Each history is very long and resource-intensive to read - - **Maximum limit: Read no more than 3 histories total** - - Only use this phase when absolutely necessary for answering the question - **Approach**: - - Extract `history_id` from retrieved memory references - - Prioritize the most relevant or recent histories - - Can read multiple histories at once by passing multiple history_ids - - Be selective: choose only the top 1-3 most promising histories - - Use this to understand the full conversation surrounding a memory - - ## Response Guidelines - - Base your answer EXCLUSIVELY on user profile, retrieved memories, and history data - - Never infer, assume, or hallucinate information - - Always cite sources with timestamps: `[timestamp] Memory content` - - Present conflicting information transparently with respective timestamps - - If you find sufficient information to answer the user's question, you may output directly without exhausting all search phases - - Exhaust all search strategies before concluding information doesn't exist - - ### Output any tangentially related findings, Format: - [timestamp] [memory/profile/history] [relevant content1] - [timestamp] [memory/profile/history] [relevant content2] - diff --git a/benchmark/longmemeval/eval_reme.yaml b/benchmark/longmemeval/eval_reme.yaml deleted file mode 100644 index 56dde2db..00000000 --- a/benchmark/longmemeval/eval_reme.yaml +++ /dev/null @@ -1,548 +0,0 @@ -TEMPLATE_MEMOS: | - Memories for user {user_id}: - {memories} - -PROMPT_MEMZERO_JSON: | - # CONTEXT: - {context} - - # CONTEXT PRIORITY: - When the context contains information from multiple sources, follow this strict priority order: - 1. **Historical Dialogue** (highest priority) - Direct conversation content - 2. **Extracted Memories** (medium priority) - Summarized memory points - 3. **User Profile** (lowest priority) - General user information - - # Question: - {question} - - # OUTPUT FORMAT: - Do not hallucinate; strictly answer the user's question based on the content of the CONTEXT. - Please provide your response in the following JSON format: - - ```json - {{ - "reasoning": "reasoning content", - "answer": "Provide a detailed answer" - }} - ``` - -PROMPT_MEMZERO_JSON2: | - # CONTEXT: - {context} - - # CONTEXT PRIORITY: - When the context contains information from multiple sources, follow this strict priority order: - 1. **Historical Dialogue** (highest priority) - Direct conversation content - 2. **Extracted Memories** (medium priority) - Summarized memory points - 3. **User Profile** (lowest priority) - General user information - - # Question: - {question} - - # OUTPUT FORMAT: - Do not hallucinate; strictly answer the user's question based on the content of the CONTEXT. - Please provide your response in the following JSON format: - - ```json - {{ - "reasoning": "reasoning content", - "answer": "Provide a detailed answer" - }} - ``` - -PROMPT_MEMZERO: | - You are an intelligent memory assistant tasked with retrieving accurate information from conversation memories. - - # CONTEXT: - You have access to memories from two speakers in a conversation. These memories contain - timestamped information that may be relevant to answering the question. - - # INSTRUCTIONS: - 1. Carefully analyze all provided memories from both speakers - 2. Pay special attention to the timestamps to determine the answer - 3. If the question asks about a specific event or fact, look for direct evidence in the memories - 4. If the memories contain contradictory information, prioritize the most recent memory - 5. If there is a question about time references (like "last year", "two months ago", etc.), - calculate the actual date based on the memory timestamp. For example, if a memory from - 4 May 2022 mentions "went to India last year," then the trip occurred in 2021. - 6. Always convert relative time references to specific dates, months, or years. For example, - convert "last year" to "2022" or "two months ago" to "March 2023" based on the memory - timestamp. Ignore the reference while answering the question. - 7. Focus only on the content of the memories from both speakers. Do not confuse character - names mentioned in memories with the actual users who created those memories. - 8. The answer should be less than 5-6 words. - - # APPROACH (Think step by step): - 1. First, examine all memories that contain information related to the question - 2. Examine the timestamps and content of these memories carefully - 3. Look for explicit mentions of dates, times, locations, or events that answer the question - 4. If the answer requires calculation (e.g., converting relative time references), show your work - 5. Formulate a precise, concise answer based solely on the evidence in the memories - 6. Double-check that your answer directly addresses the question asked - 7. Ensure your final answer is specific and avoids vague time references - - {context} - - Question: {question} - - Answer: - -PROMPT_ZEP: | - You are an intelligent memory assistant tasked with retrieving accurate information from conversation memories. - - # CONTEXT: - You have access to memories from a conversation. These memories contain - timestamped information that may be relevant to answering the question. - - # INSTRUCTIONS: - 1. Carefully analyze all provided memories - 2. Pay special attention to the timestamps to determine the answer - 3. If the question asks about a specific event or fact, look for direct evidence in the memories - 4. If the memories contain contradictory information, prioritize the most recent memory - 5. If there is a question about time references (like "last year", "two months ago", etc.), - calculate the actual date based on the memory timestamp. For example, if a memory from - 4 May 2022 mentions "went to India last year," then the trip occurred in 2021. - 6. Always convert relative time references to specific dates, months, or years. For example, - convert "last year" to "2022" or "two months ago" to "March 2023" based on the memory - timestamp. Ignore the reference while answering the question. - 7. Focus only on the content of the memories. Do not confuse character - names mentioned in memories with the actual users who created those memories. - 8. The answer should be less than 5-6 words. - - # APPROACH (Think step by step): - 1. First, examine all memories that contain information related to the question - 2. Examine the timestamps and content of these memories carefully - 3. Look for explicit mentions of dates, times, locations, or events that answer the question - 4. If the answer requires calculation (e.g., converting relative time references), show your work - 5. Formulate a precise, concise answer based solely on the evidence in the memories - 6. Double-check that your answer directly addresses the question asked - 7. Ensure your final answer is specific and avoids vague time references - - Context: - - {context} - - Question: {question} - Answer: - -PROMPT_MEMOS: | - You are a knowledgeable and helpful AI assistant. - - # CONTEXT: - You have access to memories from two speakers in a conversation. These memories contain - timestamped information that may be relevant to answering the question. - - # INSTRUCTIONS: - 1. Carefully analyze all provided memories. Synthesize information across different entries if needed to form a complete answer. - 2. Pay close attention to the timestamps to determine the answer. If memories contain contradictory information, the **most recent memory** is the source of truth. - 3. If the question asks about a specific event or fact, look for direct evidence in the memories. - 4. Your answer must be grounded in the memories. However, you may use general world knowledge to interpret or complete information found within a memory (e.g., identifying a landmark mentioned by description). - 5. If the question involves time references (like "last year", "two months ago", etc.), you **must** calculate the actual date based on the memory's timestamp. For example, if a memory from 4 May 2022 mentions "went to India last year," then the trip occurred in 2021. - 6. Always convert relative time references to specific dates, months, or years in your final answer. - 7. Do not confuse character names mentioned in memories with the actual users who created them. - 8. The answer must be brief (under 5-6 words) and direct, with no extra description. - - # APPROACH (Think step by step): - 1. First, examine all memories that contain information related to the question. - 2. Synthesize findings from multiple memories if a single entry is insufficient. - 3. Examine timestamps and content carefully, looking for explicit dates, times, locations, or events. - 4. If the answer requires calculation (e.g., converting relative time references), perform the calculation. - 5. Formulate a precise, concise answer based on the evidence from the memories (and allowed world knowledge). - 6. Double-check that your answer directly addresses the question asked and adheres to all instructions. - 7. Ensure your final answer is specific and avoids vague time references. - - {context} - - Question: {question} - - Answer: - -PROMPT_MEMOBASE: | - You are an intelligent memory assistant tasked with retrieving accurate information from conversation memories. - - # CONTEXT: - You have access to memories from two speakers in a conversation. These memories contain - timestamped information that may be relevant to answering the question. - - # INSTRUCTIONS: - 1. Carefully analyze all provided memories from both speakers - 2. Pay special attention to the timestamps to determine the answer - 3. If the question asks about a specific event or fact, look for direct evidence in the memories - 4. If the memories contain contradictory information, prioritize the most recent memory - 5. If there is a question about time references (like "last year", "two months ago", etc.), calculate the actual date based on the memory timestamp. For example, if a memory from 4 May 2022 mentions "went to India last year," then the trip occurred in 2021. - 6. Always convert relative time references to specific dates, months, or years. For example, convert "last year" to "2022" or "two months ago" to "March 2023" based on the memory timestamp. Ignore the reference while answering the question. - 7. Focus only on the content of the memories from both speakers. Do not confuse character names mentioned in memories with the actual users who created those memories. - 8. The answer should be less than 5-6 words. - - # APPROACH (Think step by step): - 1. First, examine all memories that contain information related to the question - 2. Examine the timestamps and content of these memories carefully - 3. Look for explicit mentions of dates, times, locations, or events that answer the question - 4. If the answer requires calculation (e.g., converting relative time references), show your work - 5. Formulate a precise, concise answer based solely on the evidence in the memories - 6. Double-check that your answer directly addresses the question asked - 7. Ensure your final answer is specific and avoids vague time references - - {context} - - Question: {question} - - Answer: - - -EVALUATION_PROMPT_FOR_MEMORY_INTEGRITY: | - You are a strict **"Memory Integrity" evaluator**. - Your core task is to assess whether an AI memory system has **missed any key memory points** after processing a conversation. This evaluation measures the system’s **memory integrity**, i.e., its ability to resist **amnesia** or **omission**. - - # Evaluation Context & Data: - - 1. **Extracted Memories:** - These are all the memory items actually extracted by the memory system. - {memories} - - 2. **Expected Memory Point:** - The key memory point that *should* have been extracted. - {expected_memory_point} - - # Evaluation Instructions: - - 1. For each **Expected Memory Point**, search within the **Extracted Memories** list for corresponding or related information. Ignore unrelated items. - 2. Based on the following scoring rubric, rate how well the memory system captured the **Expected Memory Point** and provide a detailed explanation. - - # Scoring Rubric: - - * **2:** Fully covered or implied. - One or more items in “Extracted Memories” fully cover or logically imply all information in the “Expected Memory Point.” - - * **1:** Partially covered or mentioned. - Some information in “Extracted Memories” mentions part of the “Expected Memory Point,” but key information is missing, inaccurate, or slightly incorrect. - - * **0:** Not mentioned or incorrect. - “Extracted Memories” contains no mention of the “Expected Memory Point,” or the corresponding information is entirely wrong. - - # Scoring Notes: - - * For **compound Expected Memory Points** (with multiple elements such as person/event/time/location/preference, etc.): - - * All elements correct → **2 points** - * Some elements correct / uncertain → **1 point** - * Key elements missing or wrong → **0 points** - - * Semantic matching is acceptable; exact wording is **not** required. - - * If “Extracted Memories” contains **conflicting information**, assign the **best possible coverage score** and mention the conflict in your reasoning. - - * Extra or stylistically different memories do **not** reduce the score; only the coverage of the **Expected Memory Point** matters. - - * For uncertain wording (“might,” “probably,” “tends to,” etc.): - - * If the Expected Memory Point is a definite statement, usually assign **1 point**. - - * If critical fields (e.g., time, entity name, relationship) are partly wrong but others match → **1 point**. - - * If all key fields are wrong or missing → **0 points**. - - # Output Format: - - Please output your result in the following JSON format: - - ```json - {{ - "reasoning": "Provide a concise justification for the score", - "score": "2|1|0" - }} - ``` - -EVALUATION_PROMPT_FOR_MEMORY_ACCURACY: | - You are a **Dialogue Memory Accuracy Evaluator.** Your task is to evaluate the **accuracy** of a memory extracted by an AI memory system, based on three given inputs: the dialogue content, the *target (gold)* memory points (the correct annotated memories), and the *candidate* memory to be evaluated. The goal is to output a **structured evaluation result**. - - # Input Content - - * **Dialogue:** - {dialogue} - - * **Golden Memories (Target Memory Points):** - The correct memory points pre-annotated for this dialogue in the evaluation dataset. - {golden_memories} - - * **Candidate Memory:** - The memory extracted by the system to be evaluated. - {candidate_memory} - - # Evaluation Principles and Definitions - - ### 1) Support / Entailment - - * An **information point** (atomic fact) in the candidate memory is considered *supported* if it can be directly stated or semantically entailed (via synonym, paraphrase, or equivalent expression) by the *Dialogue* or *Golden Memories*. - * Only the given dialogue and golden memories can be used for judgment — **no external knowledge** or assumptions are allowed. - Any information not appearing in or inferable from these two sources is considered *unsupported*. - * Pay careful attention to **negation**, **quantities**, **time**, and **subjects**. - If the candidate statement contradicts the dialogue or golden memories, it is considered a **conflict**. - - ### 2) Memory Accuracy Score (integer: 0 / 1 / 2) - - * **2 points:** Every information point in the candidate memory is supported by the dialogue or golden memories, with **no contradictions or hallucinations**. - * **1 point:** The candidate memory is *partially correct* (at least one supported information point) but also includes *unsupported* or *contradictory* content. - * **0 points:** The candidate memory is **entirely unsupported or contradictory** to the sources (i.e., a “hallucinated memory”). - - > Note: - > - > * If a candidate memory contains multiple information points, **any unsupported or contradictory element** prevents a full score (2). - > * If both supported and unsupported/conflicting content appear, assign a score of **1**. - - ### 3) Inclusion in Golden Memories (Boolean field-level judgment) - - **Definition:** - - * **Atomic information point:** the smallest factual unit in the candidate memory (e.g., *name = Li Si*, *age = 25*, *location = Beijing*, *preference = coffee*, *budget ≤ 2000*, *meeting_time = Wednesday 10:00*, *tool = Zoom*, etc.). - * **Field / Slot:** the semantic dimension of an information point (e.g., *name*, *age*, *residence*, *food preference*, *budget*, *meeting time*, *meeting tool*, etc.). - - **Judgment Rules (independent of correctness):** - - * **true:** - Every atomic information point in the candidate memory has a corresponding **field** in the golden memories (allowing for synonyms, paraphrases, or equivalent expressions; ignore value, polarity, or quantity differences). - - * Note: A single field in the gold list may match multiple candidate points (e.g., multiple “drink preference” facts can be covered by one “drink preference” field in gold). - * **false:** - If **any** atomic information point’s field in the candidate memory cannot be found in the golden memories, mark as *false*. - - **Important Notes:** - - * Field matching is restricted to fields that are **explicitly present or semantically recognizable** in the golden memories — no external knowledge may be used to expand the field set. - * Differences in **values** (e.g., “Zhang San” vs. “Li Si”), **polarity** (like/dislike), or **exact number/time** do **not** affect this Boolean judgment. - - # Evaluation Procedure - - For each candidate memory: - - 1. **Decompose** it into atomic information points (e.g., name, number, location, preference). - 2. For each information point, **search** the dialogue and golden memories for supporting or contradictory evidence. - 3. Assign the **accuracy_score** (0 / 1 / 2) according to the rules above. - 4. Determine **is_included_in_golden_memories (true/false)**: - - * Identify each information point’s field; - * If *all* fields exist in the golden memories, mark as *true*; otherwise, *false*. - 5. Provide a **concise Chinese explanation** in `"reason"`, citing key evidence (short excerpts allowed), and clearly state any unsupported or contradictory parts if applicable. - - # Output Format (strictly required) - - Output **only one JSON object**, with the following three fields: - - * `"accuracy_score"`: `"0"` or `"1"` or `"2"` - * `"is_included_in_golden_memories"`: `"true"` or `"false"` - * `"reason"`: `"brief explanation in Chinese"` - - Do **not** include any other text, explanation, or fields. - Do **not** include the candidate memory text inside the JSON. - - Please output **only** the following JSON (in a code block): - - ```json - {{ - "accuracy_score": "2 | 1 | 0", - "is_included_in_golden_memories": "true | false", - "reason": "Brief explanation in Chinese" - }} - ``` - -EVALUATION_PROMPT_FOR_UPDATE_MEMORY: | - Your task is to **evaluate the update accuracy** of an AI memory system. - Based on the information provided below, determine whether the system-generated **“Generated Memories”** correctly **includes** the **Target Memory for Update**. - - # Background Information - - The following information is provided for evaluation: - - 1. **Generated Memories:** - This is the list of memory points generated by the system after the current dialogue. - {memories} - - 2. **Target Memory for Update:** - This is the correct, updated version of the memory point that should have been produced — the one we focus on in this evaluation. - {updated_memory} - - 3. **Original Memory Content:** - This is the original version of the target memory before the update. - {original_memory} - - # Evaluation Criteria - - Please make your judgment **strictly based on the content update of the “Target Memory for Update.”** - Use the following categories: - - ### Correct Update - - * **Generated Memories** **contains all information points** from the “Target Memory for Update,” accurately and completely reflecting the intended update. - * **Key fields** (e.g., date, time, values, proper nouns, etc.) must match exactly. - * The **original memory** is effectively replaced or marked as outdated. - * Synonymous or slightly rephrased expressions are acceptable. - - ### Hallucinated Update - - * **Factual error:** The **Generated Memories** includes a new memory related to the “Target Memory for Update,” but its content contains factual mistakes or contradictions compared to the correct update. - - ### Omitted Update - - * **Completely omitted:** The **Generated Memories** contains no new memory related to the “Target Memory for Update.” - * **Partially omitted:** A related new memory was generated in **Generated Memories**, but it **misses key information** that should have been included. - - ### Other - - Used for update failures that do **not clearly fall** into the above categories of “Hallucination” or “Omission.” - - # Output Requirements - - Please return your evaluation strictly in the following JSON format and provide a concise explanation. - - ```json - {{ - "reason": "Briefly explain your reasoning here and why it fits this category.", - "evaluation_result": "Correct | Hallucination | Omission | Other" - }} - ``` - -EVALUATION_PROMPT_FOR_QUESTION: | - You are an **evaluation expert for AI memory system question answering**. - Based **only** on the provided **“Question”**, **“Reference Answer”**, and **“Key Memory Points”** (the essential facts needed to derive the reference answer), strictly evaluate the **accuracy** of the **“Memory System Response.”** Classify it as one of **“Correct”**, **“Hallucination”**, or **“Omission.”** Do **not** use any external knowledge or subjective inference. Finally, output your judgment **strictly** in the specified JSON format. - - # Evaluation Criteria - - ## Answer Type Classification - - ### 1. Correct - - * The “Memory System Response” accurately answers the “Question,” and its content is **semantically equivalent** to the “Reference Answer.” - * It contains **no contradictions** with the “Key Memory Points” or “Reference Answer.” - * It introduces **no unsupported details** beyond the “Key Memory Points” that could alter the conclusion. - * Synonyms, paraphrasing, and reasonable summarization are acceptable. - - ### 2. Hallucination - - * The “Memory System Response” includes information or facts that **contradict or are inconsistent** with the “Reference Answer” or the “Key Memory Points.” - * When the “Reference Answer” is labeled as *unknown/uncertain*, yet the response provides a specific verifiable fact or conclusion. - * Extra irrelevant information that does **not change** the conclusion is **not** considered hallucination by itself; however, if it **changes or misleads** the conclusion, or **contradicts** the “Key Memory Points,” it should be judged as a **Hallucination**. - - ### 3. Omission - - * The response is **incomplete** compared to the “Reference Answer.” - * It explicitly states “don’t know,” “can’t remember,” or “no related memory,” even though relevant information exists in the “Key Memory Points.” - * For multi-element questions, **all elements must be correct and present**; omission of **any** element is considered an **Omission**. - - ## Priority Rules (Conflict Handling) - - * If the response contains **both missing necessary information** and **fabricated/contradictory information**, classify it as **Hallucination**. - * If there is **no fabrication/contradiction** but some necessary information is missing, classify it as **Omission**. - * Only when the meaning is **fully equivalent** to the reference answer should it be classified as **Correct**. - - ## Detailed Guidelines and Tolerance - - * Equivalent expressions of numbers, times, and units are acceptable, but the **numerical values themselves must not differ**. - * For multi-element questions, **all elements must be complete and accurate**; missing any element counts as **Omission**. - * If the reference answer is *“unknown / cannot be determined”* and the system provides a definite fact, that is a **Hallucination**. - If the system also answers *“unknown”* (without guessing), it may be **Correct**. - * The evaluation must rely **only** on the *Reference Answer*, *Key Memory Points*, and *System Response* — no external context, world knowledge, or speculative reasoning is allowed. - - # Information for Evaluation - - * **Question:** - {question} - - * **Reference Answer:** - {reference_answer} - - * **Key Memory Points:** - {key_memory_points} - - * **Memory System Response:** - {response} - - # Output Requirements - - Please provide your evaluation result **strictly** in the JSON format below. - Do **not** add any extra explanation or comments outside the JSON block. - - ```json - {{ - "reasoning": "Provide a concise and traceable evaluation rationale: first compare the system’s response with the Key Memory Points (which were correctly used, which were missing, and whether there was any fabrication/contradiction), then assess its consistency with the Reference Answer, and finally state the classification basis.", - "evaluation_result": "Correct | Hallucination | Omission" - }} - ``` - - -EVALUATION_PROMPT_FOR_QUESTION2: | - You are an **evaluation expert for AI memory system question answering**. - - Based **only** on the provided **"Question"**, **"Reference Answer"**, and **"Key Memory Points"** (the essential facts needed to derive the reference answer), strictly evaluate the **accuracy** of the **"Memory System Response."** Classify it as one of **"Correct"**, **"Hallucination"**, or **"Omission."** Do **not** use any external knowledge or subjective inference. Finally, output your judgment **strictly** in the specified JSON format. - - # Evaluation Criteria - - ## Answer Type Classification - - ### 1. Correct - - * The "Memory System Response" accurately answers the "Question," and its content is **semantically equivalent** to the "Reference Answer." - * It contains **no contradictions** with the "Key Memory Points" or "Reference Answer." - * **Extra details not present in the Key Memory Points are allowed and should not be penalized**, as long as they: - - Do not contradict the Key Memory Points or Reference Answer - - Do not change or mislead the core conclusion - - Are reasonable additional context that the memory system may have retained from the conversation - * The memory system may have stored additional information beyond the Key Memory Points. Such extra information should be treated as **supplementary context** rather than hallucination, provided it does not conflict with the core answer. - * Synonyms, paraphrasing, and reasonable summarization are acceptable. - - ### 2. Hallucination - - * The "Memory System Response" includes information or facts that **contradict or are inconsistent** with the "Reference Answer" or the "Key Memory Points." - * The response provides information that **directly contradicts** known facts from the Key Memory Points. - * When the "Reference Answer" is labeled as *unknown/uncertain*, yet the response provides a specific verifiable fact or conclusion. - * **Important:** Extra information that is NOT in Key Memory Points is **NOT automatically a hallucination**. Only classify as hallucination if the extra information: - - Directly contradicts the Key Memory Points or Reference Answer - - Changes or misleads the core conclusion in a way that makes the answer incorrect - - Provides a definitive answer when the Reference Answer indicates uncertainty - - ### 3. Omission - - * The response is **incomplete** compared to the "Reference Answer." - * It explicitly states "don't know," "can't remember," or "no related memory," even though relevant information exists in the "Key Memory Points." - * For multi-element questions, **all elements must be correct and present**; omission of **any** element is considered an **Omission**. - - ## Priority Rules (Conflict Handling) - - * If the response contains **both missing necessary information** and **fabricated/contradictory information**, classify it as **Hallucination**. - * If there is **no fabrication/contradiction** but some necessary information is missing, classify it as **Omission**. - * If the core answer is correct and complete, classify as **Correct** even if there are extra details not in Key Memory Points (as long as they don't contradict or mislead). - - ## Detailed Guidelines and Tolerance - - * Equivalent expressions of numbers, times, and units are acceptable, but the **numerical values themselves must not differ**. - * For multi-element questions, **all elements must be complete and accurate**; missing any element counts as **Omission**. - * If the reference answer is *"unknown / cannot be determined"* and the system provides a definite fact, that is a **Hallucination**. - If the system also answers *"unknown"* (without guessing), it may be **Correct**. - * **Focus on evaluating whether the core answer to the question is correct**, not whether the response is limited to only the Key Memory Points. - * Extra contextual information (e.g., additional preferences, related details) should be viewed as enrichment, not as errors, unless they contradict or mislead. - - # Information for Evaluation - - * **Question:** - {question} - - * **Reference Answer:** - {reference_answer} - - * **Key Memory Points:** - {key_memory_points} - - * **Memory System Response:** - {response} - - # Output Requirements - - Please provide your evaluation result **strictly** in the JSON format below. - Do **not** add any extra explanation or comments outside the JSON block. - - ```json - {{ - "reasoning": "Provide a concise and traceable evaluation rationale: first verify that the system's response correctly includes all required elements from the Reference Answer, then check if any information contradicts the Key Memory Points or Reference Answer. Extra details not in Key Memory Points should be noted but not penalized unless they contradict or mislead. Finally state the classification basis.", - "evaluation_result": "Correct | Hallucination | Omission" - }} - ``` - """ \ No newline at end of file diff --git a/benchmark/longmemeval/quickstart.md b/benchmark/longmemeval/quickstart.md deleted file mode 100644 index c27d5c65..00000000 --- a/benchmark/longmemeval/quickstart.md +++ /dev/null @@ -1,48 +0,0 @@ -# Longmemeval -Experiment Quick Start Guide -This guide helps you quickly set up and run Longmemeval experiments with ReMe integration. - -### 1. Start ReMe Service -Install ReMe (if not already installed) -If you haven't installed the ReMe environment yet, follow these steps: -```bash -# Create ReMe environment -conda create -p ./reme-env python==3.12 -conda activate ./reme-env - -# Install ReMe -pip install . -``` - -### 2. Clone the Repository -```bash -cd ./benchmark/longmemeval -mkdir -p data/ -cd data/ -wget https://huggingface.co/datasets/xiaowu0162/longmemeval-cleaned/resolve/main/longmemeval_oracle.json -wget https://huggingface.co/datasets/xiaowu0162/longmemeval-cleaned/resolve/main/longmemeval_s_cleaned.json -wget https://huggingface.co/datasets/xiaowu0162/longmemeval-cleaned/resolve/main/longmemeval_m_cleaned.json -cd .. -``` - -### 3. Run Experiments -Launch the ReMe service to enable memory library functionality: -```bash -clear && python benchmark/longmemeval/eval_longmemeval_reme.py \ - --data_path benchmark/longmemeval/data/longmemeval_s_cleaned.json \ - --reme_model_name qwen-flash \ - --reme_model_name retrieve_model_name \ - --eval_model_name gpt-4o-mini-2024-07-18 \ - --batch_size 20 \ - --algo_version default -``` - - -### 4. Evaluate Results -Evaluate the results of the experiments: -```bash -python benchmark/longmememeval/compute_stats.py \ - --results_dir bench_results/longmemeval_reme \ - --output_file bench_results/longmemeval_reme/statistics.json -``` -The `compute_stats.py` script computes various statistics from the evaluation results. \ No newline at end of file diff --git a/docs/README_0_2_x.md b/docs/README_0_2_x.md deleted file mode 100644 index e1bc85a1..00000000 --- a/docs/README_0_2_x.md +++ /dev/null @@ -1,897 +0,0 @@ -

- ReMe Logo -

- -

- Python Version - PyPI Version - PyPI Downloads - GitHub commit activity -

- -

- License - English - 简体中文 - GitHub Stars -

- -

- Memory Management Kit for Agents, Remember Me, Refine Me.
- If you find it useful, please give us a ⭐ Star. -

- ---- - -ReMe is a **modular memory management kit** that provides AI agents with unified memory capabilities—enabling the ability to extract, reuse, and share memories across users, tasks, and agents. -Agent memory can be viewed as: - -```text -Agent Memory = Long-Term Memory + Short-Term Memory - = (Personal + Task + Tool) Memory + (Working Memory) -``` - -- **Personal Memory**: Understand user preferences and adapt to context -- **Task Memory**: Learn from experience and perform better on similar tasks -- **Tool Memory**: Optimize tool selection and parameter usage based on historical performance -- **Working Memory**: Manage short-term context for long-running agents without context overflow - ---- - -## 📰 Latest Updates - -- **[2026-02]** 💻 ReMeCli: A terminal-based AI chat assistant with built-in memory management. Automatically compacts long conversations into summaries to free up context space, and persists important information as Markdown files for retrieval in future sessions. Memory design inspired by [OpenClaw](https://github.com/openclaw/openclaw). - - [Quick Start](docs/cli/quick_start_en.md) - - Type `/horse` to trigger the Year of the Horse Easter egg -- fireworks, a galloping horse animation, and a random blessing. - - - - - - -
- 马
上
有
钱
-
- - - 马
到
成
功
-
- -- **[2025-12]** 📄 Our procedural (task) memory paper has been released on [arXiv](https://arxiv.org/abs/2512.10696) -- **[2025-11]** 🧠 React-agent with working-memory demo ([Intro](docs/work_memory/message_offload.md)) with ([Quick Start](docs/cookbook/working/quick_start.md)) and ([Code](cookbook/working_memory/work_memory_demo.py)) -- **[2025-10]** 🚀 Direct Python import support: use `from reme_ai import ReMeApp` without HTTP/MCP service -- **[2025-10]** 🔧 Tool Memory: data-driven tool selection and parameter optimization ([Guide](docs/tool_memory/tool_memory.md)) -- **[2025-09]** 🎉 Async operations support, integrated into agentscope-runtime -- **[2025-09]** 🎉 Task memory and personal memory integration -- **[2025-09]** 🧪 Validated effectiveness in appworld, bfcl(v3), and frozenlake ([Experiments](docs/cookbook)) -- **[2025-08]** 🚀 MCP protocol support ([Quick Start](docs/mcp_quick_start.md)) -- **[2025-06]** 🚀 Multiple backend vector storage (Elasticsearch & ChromaDB) ([Guide](docs/vector_store_api_guide.md)) -- **[2024-09]** 🧠 Personalized and time-aware memory storage - ---- - -## ✨ Architecture Design - -

- ReMe Architecture -

- -ReMe provides a **modular memory management kit** with pluggable components that can be integrated into any agent framework. The system consists of: - -#### 🧠 **Task Memory/Experience** - -Procedural knowledge reused across agents - -- **Success Pattern Recognition**: Identify effective strategies and understand their underlying principles -- **Failure Analysis Learning**: Learn from mistakes and avoid repeating the same issues -- **Comparative Patterns**: Different sampling trajectories provide more valuable memories through comparison -- **Validation Patterns**: Confirm the effectiveness of extracted memories through validation modules - -Learn more about how to use task memory from [task memory](docs/task_memory/task_memory.md) - -#### 👤 **Personal Memory** - -Contextualized memory for specific users - -- **Individual Preferences**: User habits, preferences, and interaction styles -- **Contextual Adaptation**: Intelligent memory management based on time and context -- **Progressive Learning**: Gradually build deep understanding through long-term interaction -- **Time Awareness**: Time sensitivity in both retrieval and integration - -Learn more about how to use personal memory from [personal memory](docs/personal_memory/personal_memory.md) - -#### 🔧 **Tool Memory** - -Data-driven tool selection and usage optimization - -- **Historical Performance Tracking**: Success rates, execution times, and token costs from real usage -- **LLM-as-Judge Evaluation**: Qualitative insights on why tools succeed or fail -- **Parameter Optimization**: Learn optimal parameter configurations from successful calls -- **Dynamic Guidelines**: Transform static tool descriptions into living, learned manuals - -Learn more about how to use tool memory from [tool memory](docs/tool_memory/tool_memory.md) - -#### 🧠 Working Memory - -Short‑term contextual memory for long‑running agents via **message offload & reload**: -- **Message Offload**: Compact large tool outputs to external files or LLM summaries -- **Message Reload**: Search (`grep_working_memory`) and read (`read_working_memory`) offloaded content on demand -📖 **Concept & API**: -- Message offload overview: [Message Offload](docs/work_memory/message_offload.md) -- Offload / reload operators: [Message Offload Ops](docs/work_memory/message_offload_ops.md), [Message Reload Ops](docs/work_memory/message_reload_ops.md) -💻 **End‑to‑End Demo**: -- Working memory quick start: [Working Memory Quick Start](docs/cookbook/working/quick_start.md) -- ReAct agent with working memory: [react_agent_with_working_memory.py](cookbook/working_memory/react_agent_with_working_memory.py) -- Runnable demo: [work_memory_demo.py](cookbook/working_memory/work_memory_demo.py) - ---- - -## 🛠️ Installation - -### Install from PyPI (Recommended) - -```bash -pip install reme-ai -``` - -### Install from Source - -```bash -git clone https://github.com/agentscope-ai/ReMe.git -cd ReMe -pip install . -``` - -### Environment Configuration - -ReMe requires LLM and embedding model configurations. Copy `example.env` to `.env` and configure: - -```bash -FLOW_LLM_API_KEY=sk-xxxx -FLOW_LLM_BASE_URL=https://xxxx/v1 -FLOW_EMBEDDING_API_KEY=sk-xxxx -FLOW_EMBEDDING_BASE_URL=https://xxxx/v1 -``` - ---- - -## 🚀 Quick Start - -### HTTP Service Startup - -```bash -reme \ - backend=http \ - http.port=8002 \ - llm.default.model_name=qwen3-30b-a3b-thinking-2507 \ - embedding_model.default.model_name=text-embedding-v4 \ - vector_store.default.backend=local -``` - -### MCP Server Support - -```bash -reme \ - backend=mcp \ - mcp.transport=stdio \ - llm.default.model_name=qwen3-30b-a3b-thinking-2507 \ - embedding_model.default.model_name=text-embedding-v4 \ - vector_store.default.backend=local -``` - -### Core API Usage - -#### Task Memory Management - -```python -import requests - -# Experience Summarizer: Learn from execution trajectories -response = requests.post("http://localhost:8002/summary_task_memory", json={ - "workspace_id": "task_workspace", - "trajectories": [ - {"messages": [{"role": "user", "content": "Help me create a project plan"}], "score": 1.0} - ] -}) - -# Retriever: Get relevant memories -response = requests.post("http://localhost:8002/retrieve_task_memory", json={ - "workspace_id": "task_workspace", - "query": "How to efficiently manage project progress?", - "top_k": 1 -}) -``` - -
-Python import version - -```python -import asyncio -from reme_ai import ReMeApp - -async def main(): - async with ReMeApp( - "llm.default.model_name=qwen3-30b-a3b-thinking-2507", - "embedding_model.default.model_name=text-embedding-v4", - "vector_store.default.backend=memory" - ) as app: - # Experience Summarizer: Learn from execution trajectories - result = await app.async_execute( - name="summary_task_memory", - workspace_id="task_workspace", - trajectories=[ - { - "messages": [ - {"role": "user", "content": "Help me create a project plan"} - ], - "score": 1.0 - } - ] - ) - print(result) - - # Retriever: Get relevant memories - result = await app.async_execute( - name="retrieve_task_memory", - workspace_id="task_workspace", - query="How to efficiently manage project progress?", - top_k=1 - ) - print(result) - -if __name__ == "__main__": - asyncio.run(main()) -``` - -
- -
-curl version - -```bash -# Experience Summarizer: Learn from execution trajectories -curl -X POST http://localhost:8002/summary_task_memory \ - -H "Content-Type: application/json" \ - -d '{ - "workspace_id": "task_workspace", - "trajectories": [ - {"messages": [{"role": "user", "content": "Help me create a project plan"}], "score": 1.0} - ] - }' - -# Retriever: Get relevant memories -curl -X POST http://localhost:8002/retrieve_task_memory \ - -H "Content-Type: application/json" \ - -d '{ - "workspace_id": "task_workspace", - "query": "How to efficiently manage project progress?", - "top_k": 1 - }' -``` - -
- -#### Personal Memory Management - -```python -# Memory Integration: Learn from user interactions -response = requests.post("http://localhost:8002/summary_personal_memory", json={ - "workspace_id": "task_workspace", - "trajectories": [ - {"messages": - [ - {"role": "user", "content": "I like to drink coffee while working in the morning"}, - {"role": "assistant", - "content": "I understand, you prefer to start your workday with coffee to stay energized"} - ] - } - ] -}) - -# Memory Retrieval: Get personal memory fragments -response = requests.post("http://localhost:8002/retrieve_personal_memory", json={ - "workspace_id": "task_workspace", - "query": "What are the user's work habits?", - "top_k": 5 -}) -``` - -
-Python import version - -```python -import asyncio -from reme_ai import ReMeApp - -async def main(): - async with ReMeApp( - "llm.default.model_name=qwen3-30b-a3b-thinking-2507", - "embedding_model.default.model_name=text-embedding-v4", - "vector_store.default.backend=memory" - ) as app: - # Memory Integration: Learn from user interactions - result = await app.async_execute( - name="summary_personal_memory", - workspace_id="task_workspace", - trajectories=[ - { - "messages": [ - {"role": "user", "content": "I like to drink coffee while working in the morning"}, - {"role": "assistant", - "content": "I understand, you prefer to start your workday with coffee to stay energized"} - ] - } - ] - ) - print(result) - - # Memory Retrieval: Get personal memory fragments - result = await app.async_execute( - name="retrieve_personal_memory", - workspace_id="task_workspace", - query="What are the user's work habits?", - top_k=5 - ) - print(result) - -if __name__ == "__main__": - asyncio.run(main()) -``` - -
- -
-curl version - -```bash -# Memory Integration: Learn from user interactions -curl -X POST http://localhost:8002/summary_personal_memory \ - -H "Content-Type: application/json" \ - -d '{ - "workspace_id": "task_workspace", - "trajectories": [ - {"messages": [ - {"role": "user", "content": "I like to drink coffee while working in the morning"}, - {"role": "assistant", "content": "I understand, you prefer to start your workday with coffee to stay energized"} - ]} - ] - }' - -# Memory Retrieval: Get personal memory fragments -curl -X POST http://localhost:8002/retrieve_personal_memory \ - -H "Content-Type: application/json" \ - -d '{ - "workspace_id": "task_workspace", - "query": "What are the user'\''s work habits?", - "top_k": 5 - }' -``` - -
- -#### Tool Memory Management - -```python -import requests - -# Record tool execution results -response = requests.post("http://localhost:8002/add_tool_call_result", json={ - "workspace_id": "tool_workspace", - "tool_call_results": [ - { - "create_time": "2025-10-21 10:30:00", - "tool_name": "web_search", - "input": {"query": "Python asyncio tutorial", "max_results": 10}, - "output": "Found 10 relevant results...", - "token_cost": 150, - "success": True, - "time_cost": 2.3 - } - ] -}) - -# Generate usage guidelines from history -response = requests.post("http://localhost:8002/summary_tool_memory", json={ - "workspace_id": "tool_workspace", - "tool_names": "web_search" -}) - -# Retrieve tool guidelines before use -response = requests.post("http://localhost:8002/retrieve_tool_memory", json={ - "workspace_id": "tool_workspace", - "tool_names": "web_search" -}) -``` - -
-Python import version - -```python -import asyncio -from reme_ai import ReMeApp - -async def main(): - async with ReMeApp( - "llm.default.model_name=qwen3-30b-a3b-thinking-2507", - "embedding_model.default.model_name=text-embedding-v4", - "vector_store.default.backend=memory" - ) as app: - # Record tool execution results - result = await app.async_execute( - name="add_tool_call_result", - workspace_id="tool_workspace", - tool_call_results=[ - { - "create_time": "2025-10-21 10:30:00", - "tool_name": "web_search", - "input": {"query": "Python asyncio tutorial", "max_results": 10}, - "output": "Found 10 relevant results...", - "token_cost": 150, - "success": True, - "time_cost": 2.3 - } - ] - ) - print(result) - - # Generate usage guidelines from history - result = await app.async_execute( - name="summary_tool_memory", - workspace_id="tool_workspace", - tool_names="web_search" - ) - print(result) - - # Retrieve tool guidelines before use - result = await app.async_execute( - name="retrieve_tool_memory", - workspace_id="tool_workspace", - tool_names="web_search" - ) - print(result) - -if __name__ == "__main__": - asyncio.run(main()) -``` - -
- -
-curl version - -```bash -# Record tool execution results -curl -X POST http://localhost:8002/add_tool_call_result \ - -H "Content-Type: application/json" \ - -d '{ - "workspace_id": "tool_workspace", - "tool_call_results": [ - { - "create_time": "2025-10-21 10:30:00", - "tool_name": "web_search", - "input": {"query": "Python asyncio tutorial", "max_results": 10}, - "output": "Found 10 relevant results...", - "token_cost": 150, - "success": true, - "time_cost": 2.3 - } - ] - }' - -# Generate usage guidelines from history -curl -X POST http://localhost:8002/summary_tool_memory \ - -H "Content-Type: application/json" \ - -d '{ - "workspace_id": "tool_workspace", - "tool_names": "web_search" - }' - -# Retrieve tool guidelines before use -curl -X POST http://localhost:8002/retrieve_tool_memory \ - -H "Content-Type: application/json" \ - -d '{ - "workspace_id": "tool_workspace", - "tool_names": "web_search" - }' -``` - -
- -#### Working Memory Management - -```python -import requests - -# Summarize and compact working memory for a long-running conversation -response = requests.post("http://localhost:8002/summary_working_memory", json={ - "messages": [ - { - "role": "system", - "content": "You are a helpful assistant. First use `Grep` to find the line numbers that match the keywords or regular expressions, and then use `ReadFile` to read the code around those locations. If no matches are found, never give up; try different parameters, such as searching with only part of the keywords. After `Grep`, use the `ReadFile` command to view content starting from a specified `offset` and `limit`, and do not exceed 100 lines. If the current content is insufficient, you can continue trying different `offset` and `limit` values with the `ReadFile` command." - }, - { - "role": "user", - "content": "搜索下reme项目的的README内容" - }, - { - "role": "assistant", - "content": "", - "tool_calls": [ - { - "index": 0, - "id": "call_6596dafa2a6a46f7a217da", - "function": { - "arguments": "{\"query\": \"readme\"}", - "name": "web_search" - }, - "type": "function" - } - ] - }, - { - "role": "tool", - "content": "ultra large context , over 50000 tokens......" - }, - { - "role": "user", - "content": "根据readme回答task memory在appworld的效果是多少,需要具体的数值" - } - ], - "working_summary_mode": "auto", - "compact_ratio_threshold": 0.75, - "max_total_tokens": 20000, - "max_tool_message_tokens": 2000, - "group_token_threshold": 4000, - "keep_recent_count": 2, - "store_dir": "test_working_memory", - "chat_id": "demo_chat_id" -}) -``` - -
-Python import version - -```python -import asyncio -from reme_ai import ReMeApp - - -async def main(): - async with ReMeApp( - "llm.default.model_name=qwen3-30b-a3b-thinking-2507", - "embedding_model.default.model_name=text-embedding-v4", - "vector_store.default.backend=memory" - ) as app: - # Summarize and compact working memory for a long-running conversation - result = await app.async_execute( - name="summary_working_memory", - messages=[ - { - "role": "system", - "content": "You are a helpful assistant. First use `Grep` to find the line numbers that match the keywords or regular expressions, and then use `ReadFile` to read the code around those locations. If no matches are found, never give up; try different parameters, such as searching with only part of the keywords. After `Grep`, use the `ReadFile` command to view content starting from a specified `offset` and `limit`, and do not exceed 100 lines. If the current content is insufficient, you can continue trying different `offset` and `limit` values with the `ReadFile` command." - }, - { - "role": "user", - "content": "搜索下reme项目的的README内容" - }, - { - "role": "assistant", - "content": "", - "tool_calls": [ - { - "index": 0, - "id": "call_6596dafa2a6a46f7a217da", - "function": { - "arguments": "{\"query\": \"readme\"}", - "name": "web_search" - }, - "type": "function" - } - ] - }, - { - "role": "tool", - "content": "ultra large context , over 50000 tokens......" - }, - { - "role": "user", - "content": "根据readme回答task memory在appworld的效果是多少,需要具体的数值" - } - ], - working_summary_mode="auto", - compact_ratio_threshold=0.75, - max_total_tokens=20000, - max_tool_message_tokens=2000, - group_token_threshold=4000, - keep_recent_count=2, - store_dir="test_working_memory", - chat_id="demo_chat_id", - ) - print(result) - - -if __name__ == "__main__": - asyncio.run(main()) -``` - -
- -
-curl version - -```bash -curl -X POST http://localhost:8002/summary_working_memory \ - -H "Content-Type: application/json" \ - -d '{ - "messages": [ - { - "role": "system", - "content": "You are a helpful assistant. First use `Grep` to find the line numbers that match the keywords or regular expressions, and then use `ReadFile` to read the code around those locations. If no matches are found, never give up; try different parameters, such as searching with only part of the keywords. After `Grep`, use the `ReadFile` command to view content starting from a specified `offset` and `limit`, and do not exceed 100 lines. If the current content is insufficient, you can continue trying different `offset` and `limit` values with the `ReadFile` command." - }, - { - "role": "user", - "content": "搜索下reme项目的的README内容" - }, - { - "role": "assistant", - "content": "", - "tool_calls": [ - { - "index": 0, - "id": "call_6596dafa2a6a46f7a217da", - "function": { - "arguments": "{\"query\": \"readme\"}", - "name": "web_search" - }, - "type": "function" - } - ] - }, - { - "role": "tool", - "content": "ultra large context , over 50000 tokens......" - }, - { - "role": "user", - "content": "根据readme回答task memory在appworld的效果是多少,需要具体的数值" - } - ], - "working_summary_mode": "auto", - "compact_ratio_threshold": 0.75, - "max_total_tokens": 20000, - "max_tool_message_tokens": 2000, - "group_token_threshold": 4000, - "keep_recent_count": 2, - "store_dir": "test_working_memory", - "chat_id": "demo_chat_id" - }' -``` - -
- ---- - -## 📦 Pre-built Memory Library - -ReMe provides a **memory library** with pre-extracted, production-ready memories that agents can load and use immediately: - -### Available Memory Packs - -| Memory Pack | Domain | Size | Description | -|----------------------|----------------|---------------|-------------------------------------------------------------------------------------| -| **`appworld.jsonl`** | Task Execution | ~100 memories | Complex task planning patterns, multi-step workflows, and error recovery strategies | -| **`bfcl_v3.jsonl`** | Tool Usage | ~150 memories | Function calling patterns, parameter optimization, and tool selection strategies | - -### Loading Pre-built Memories - -```python -# Load pre-built memories -response = requests.post("http://localhost:8002/vector_store", json={ - "workspace_id": "appworld", - "action": "load", - "path": "./docs/library/" -}) - -# Query relevant memories -response = requests.post("http://localhost:8002/retrieve_task_memory", json={ - "workspace_id": "appworld", - "query": "How to navigate to settings and update user profile?", - "top_k": 1 -}) -``` - -
-Python import version - -```python -import asyncio -from reme_ai import ReMeApp - -async def main(): - async with ReMeApp( - "llm.default.model_name=qwen3-30b-a3b-thinking-2507", - "embedding_model.default.model_name=text-embedding-v4", - "vector_store.default.backend=memory" - ) as app: - # Load pre-built memories - result = await app.async_execute( - name="vector_store", - workspace_id="appworld", - action="load", - path="./docs/library/" - ) - print(result) - - # Query relevant memories - result = await app.async_execute( - name="retrieve_task_memory", - workspace_id="appworld", - query="How to navigate to settings and update user profile?", - top_k=1 - ) - print(result) - -if __name__ == "__main__": - asyncio.run(main()) -``` - -
- -## 🧪 Experiments - -### 🌍 [Appworld Experiment](docs/cookbook/appworld/quickstart.md) - -We tested ReMe on Appworld using Qwen3-8B (non-thinking mode): - -| Method | Avg@4 | Pass@4 | -|--------------|---------------------|---------------------| -| without ReMe | 0.1497 | 0.3285 | -| with ReMe | 0.1706 **(+2.09%)** | 0.3631 **(+3.46%)** | - -Pass@K measures the probability that at least one of the K generated samples successfully completes the task ( -score=1). -The current experiment uses an internal AppWorld environment, which may have slight differences. - -You can find more details on reproducing the experiment in [quickstart.md](docs/cookbook/appworld/quickstart.md). - -### 🔧 [BFCL-V3 Experiment](docs/cookbook/bfcl/quickstart.md) - -We tested ReMe on BFCL-V3 multi-turn-base (randomly split 50train/150val) using Qwen3-8B (thinking mode): - -| Method | Avg@4 | Pass@4 | -|--------------|---------------------|---------------------| -| without ReMe | 0.4033 | 0.5955 | -| with ReMe | 0.4450 **(+4.17%)** | 0.6577 **(+6.22%)** | - -### 🧊 [Frozenlake Experiment](docs/cookbook/frozenlake/quickstart.md) - -| without ReMe | with ReMe | -|:----------------------------------------------------------------------------------------------------:|:----------------------------------------------------------------------------------------------------:| -|

GIF 1

|

GIF 2

| - -We tested on 100 random frozenlake maps using qwen3-8b: - -| Method | pass rate | -|--------------|------------------| -| without ReMe | 0.66 | -| with ReMe | 0.72 **(+6.0%)** | - -You can find more details on reproducing the experiment in [quickstart.md](docs/cookbook/frozenlake/quickstart.md). - -### 🛠️ [Tool Memory Benchmark](docs/tool_memory/tool_bench.md) - -We evaluated Tool Memory effectiveness using a controlled benchmark with three mock search tools using Qwen3-30B-Instruct: - -| Scenario | Avg Score | Improvement | -|------------------------|-----------|-------------| -| Train (No Memory) | 0.650 | - | -| Test (No Memory) | 0.672 | Baseline | -| **Test (With Memory)** | **0.772** | **+14.88%** | - -**Key Findings:** -- Tool Memory enables data-driven tool selection based on historical performance -- Success rates improved by ~15% with learned parameter configurations - -You can find more details in [tool_bench.md](docs/tool_memory/tool_bench.md) and the implementation at [run_reme_tool_bench.py](cookbook/tool_memory/run_reme_tool_bench.py). - -## 📚 Resources - -### Getting Started -- **[Quick Start](./cookbook/simple_demo)**: Practical examples for immediate use - - [Tool Memory Demo](cookbook/simple_demo/use_tool_memory_demo.py): Complete lifecycle demonstration of tool memory - - [Tool Memory Benchmark](cookbook/tool_memory/run_reme_tool_bench.py): Evaluate tool memory effectiveness - -### Integration Guides -- **[Direct Python Import](docs/cookbook/working/quick_start.md)**: Embed ReMe directly into your agent code -- **[HTTP Service API](docs/vector_store_api_guide.md)**: RESTful API for multi-agent systems -- **[MCP Protocol](docs/mcp_quick_start.md)**: Integration with Claude Desktop and MCP-compatible clients - -### Memory System Configuration -- **[Personal Memory](docs/personal_memory)**: User preference learning and contextual adaptation -- **[Task Memory](docs/task_memory)**: Procedural knowledge extraction and reuse -- **[Tool Memory](docs/tool_memory)**: Data-driven tool selection and optimization -- **[Working Memory](docs/work_memory/message_offload.md)**: Short-term context management for long-running agents - -### Advanced Topics -- **[Operator Pipelines](reme_ai/config/default.yaml)**: Customize memory processing workflows by modifying operator chains -- **[Vector Store Backends](docs/vector_store_api_guide.md)**: Configure local, Elasticsearch, Qdrant, or ChromaDB storage -- **[Example Collection](./cookbook)**: Real-world use cases and best practices - ---- - -## ⭐ Support & Community - -- **Star & Watch**: Stars surface ReMe to more agent builders; watching keeps you updated on new releases. -- **Share your wins**: Open an issue or discussion with what ReMe unlocked for your agents—we love showcasing community builds. -- **Need a feature?** File a request and we’ll help shape it together. - ---- - -## 🤝 Contribution - -We believe the best memory systems come from collective wisdom. Contributions welcome 👉[Guide](docs/contribution.md): - -### Code Contributions - -- **New Operators**: Develop custom memory processing operators (retrieval, summarization, etc.) -- **Backend Implementations**: Add support for new vector stores or LLM providers -- **Memory Services**: Extend with new memory types or capabilities -- **API Enhancements**: Improve existing endpoints or add new ones - -### Documentation Improvements - -- **Integration Examples**: Show how to integrate ReMe with different agent frameworks -- **Operator Tutorials**: Document custom operator development -- **Best Practice Guides**: Share effective memory management patterns -- **Use Case Studies**: Demonstrate ReMe in real-world applications - - ---- - -## 📄 Citation - -```bibtex -@software{AgentscopeReMe2025, - title = {AgentscopeReMe: Memory Management Kit for Agents}, - author = {Li Yu and - Jiaji Deng and - Zouying Cao and - Weikang Zhou and - Tiancheng Qin and - Qingxu Fu and - Sen Huang and - Xianzhe Xu and - Zhaoyang Liu and - Boyin Liu}, - url = {https://reme.agentscope.io}, - year = {2025} -} - -@misc{AgentscopeReMe2025Paper, - title={Remember Me, Refine Me: A Dynamic Procedural Memory Framework for Experience-Driven Agent Evolution}, - author={Zouying Cao and - Jiaji Deng and - Li Yu and - Weikang Zhou and - Zhaoyang Liu and - Bolin Ding and - Hai Zhao}, - year={2025}, - eprint={2512.10696}, - archivePrefix={arXiv}, - primaryClass={cs.AI}, - url={https://arxiv.org/abs/2512.10696}, -} -``` - ---- - -## ⚖️ License - -This project is licensed under the Apache License 2.0 - see the [LICENSE](./LICENSE) file for details. - ---- - -## Star History - -[![Star History Chart](https://api.star-history.com/svg?repos=agentscope-ai/ReMe&type=Date)](https://www.star-history.com/#agentscope-ai/ReMe&Date) \ No newline at end of file diff --git a/docs/README_0_2_x_ZH.md b/docs/README_0_2_x_ZH.md deleted file mode 100644 index e2b7d5c4..00000000 --- a/docs/README_0_2_x_ZH.md +++ /dev/null @@ -1,902 +0,0 @@ -

- ReMe 标志 -

- -

- Python Version - PyPI Version - PyPI Downloads - GitHub commit activity -

- -

- License - English - 简体中文 - GitHub Stars -

- -

- 面向智能体的记忆管理工具包, Remember Me, Refine Me.
- 如果 ReMe 对你有帮助,欢迎点一个 ⭐ Star,你的支持是我们持续改进的动力。 -

- ---- - -ReMe 是一个**模块化的记忆管理工具包**,为 AI 智能体提供统一的记忆能力——支持在用户、任务与智能体之间提取、复用与共享记忆。 - -智能体的记忆可以被视为: - -```text -Agent Memory = Long-Term Memory + Short-Term Memory - = (Personal + Task + Tool) Memory + (Working Memory) -``` - -- **个人记忆(Personal Memory)**:理解用户偏好并适应上下文 -- **任务记忆(Task Memory)**:从经验中学习并在类似任务中表现更好 -- **工具记忆(Tool Memory)**:基于历史表现优化工具选择和参数使用 -- **工作记忆(Working Memory)**:管理长运行智能体的短期上下文,避免上下文溢出 - ---- - -## 📰 最新进展 - -- **[2026-02]** 💻 ReMeCli:终端 AI 聊天助手,内置记忆管理能力。当对话过长时自动将旧内容压缩为摘要以释放上下文空间,同时将重要信息以 Markdown 文件持久化存储,供未来会话自动检索使用。记忆设计灵感来源于 [OpenClaw](https://github.com/openclaw/openclaw)。 - - [快速开始](docs/cli/quick_start_en.md) - - 输入 `/horse` 触发马年彩蛋——烟花、奔马动画和随机马年祝福。 - - - - - - -
- 马
上
有
钱
-
- - - 马
到
成
功
-
- -- **[2025-12]** 📄 我们的程序性(任务)记忆论文已在 [arXiv](https://arxiv.org/abs/2512.10696) 发布 -- **[2025-11]** 🧠 基于工作记忆的 react-agent demo([介绍](docs/work_memory/message_offload.md)、[Quick Start](docs/cookbook/working/quick_start.md)、[代码](cookbook/working_memory/work_memory_demo.py)) -- **[2025-10]** 🚀 直接 Python 导入:支持 `from reme_ai import ReMeApp`,无需 HTTP/MCP 服务 -- **[2025-10]** 🔧 工具记忆:支持基于数据驱动的工具选择与参数优化([指南](docs/tool_memory/tool_memory.md)) -- **[2025-09]** 🎉 支持异步操作,并已集成至 agentscope-runtime -- **[2025-09]** 🎉 集成任务记忆与个人记忆 -- **[2025-09]** 🧪 在 appworld、bfcl(v3)、frozenlake 等环境中验证有效性([实验文档](docs/cookbook)) -- **[2025-08]** 🚀 支持 MCP 协议([快速开始](docs/mcp_quick_start.md)) -- **[2025-06]** 🚀 支持多种向量存储后端(Elasticsearch & ChromaDB)([向量库指南](docs/vector_store_api_guide.md)) -- **[2024-09]** 🧠 支持个性化与时间敏感的记忆存储 - ---- - -## ✨ 架构设计 - -

- ReMe 架构 -

- -ReMe 提供了一个**模块化的记忆管理工具包**,具有可插拔的组件,可以集成到任何智能体框架中。系统包括: - -#### 🧠 **任务记忆 / 经验记忆(Task Memory/Experience)** - -可在不同智能体之间复用的程序性知识: - -- **成功模式识别**:识别有效策略并理解其背后的原理 -- **失败分析学习**:从错误中学习,避免重复踩坑 -- **对比式模式**:通过多条采样轨迹的对比获取更有价值的记忆 -- **验证模式**:通过验证模块确认提炼出的经验是否有效 - -了解如何使用任务记忆可参考:[任务记忆文档](docs/task_memory/task_memory.md) - -#### 👤 **个人记忆(Personal Memory)** - -面向特定用户的情境化长期记忆: - -- **个体偏好**:记录用户的习惯、偏好与交互风格 -- **情境自适应**:基于时间与上下文动态管理记忆 -- **渐进式学习**:在长期多轮交互中不断加深对用户的理解 -- **时间敏感**:在记忆检索与整合中考虑时间因素 - -了解如何使用个人记忆可参考:[个人记忆文档](docs/personal_memory/personal_memory.md) - -#### 🔧 **工具记忆(Tool Memory)** - -基于真实调用数据的工具选择与使用优化: - -- **历史表现追踪**:记录成功率、调用耗时与 Token 成本 -- **LLM-as-Judge 评估**:提供工具成功 / 失败原因的定性洞察 -- **参数优化**:从历史成功调用中学习最优参数配置 -- **动态指南**:将静态工具描述演化为可持续更新的「活文档」 - -了解如何使用工具记忆可参考:[工具记忆文档](docs/tool_memory/tool_memory.md) - -#### 🧠 **工作记忆(Working Memory)** - -面向长流程智能体的短期上下文记忆,通过**消息卸载与重载(message offload & reload)**实现: -- **消息卸载(Message Offload)**:将体积巨大的工具输出压缩为外部文件或 LLM 摘要 -- **消息重载(Message Reload)**:按需搜索(`grep_working_memory`)并读取(`read_working_memory`)已卸载的内容 - -📖 **概念与 API:** -- 消息卸载概览:[Message Offload](docs/work_memory/message_offload.md) -- 卸载 / 重载算子:[Message Offload Ops](docs/work_memory/message_offload_ops.md)、[Message Reload Ops](docs/work_memory/message_reload_ops.md) - -💻 **端到端 Demo:** -- 工作记忆快速上手:[Working Memory Quick Start](docs/cookbook/working/quick_start.md) -- 带工作记忆的 ReAct 智能体:[react_agent_with_working_memory.py](cookbook/working_memory/react_agent_with_working_memory.py) -- 可运行 Demo:[work_memory_demo.py](cookbook/working_memory/work_memory_demo.py) - ---- - -## 🛠️ 安装 - -### 通过 PyPI 安装(推荐) - -```bash -pip install reme-ai -``` - -### 从源码安装 - -```bash -git clone https://github.com/agentscope-ai/ReMe.git -cd ReMe -pip install . -``` - -### 环境变量配置 - -复制 `example.env` 为 `.env` 并按需修改: - -```bash -FLOW_LLM_API_KEY=sk-xxxx -FLOW_LLM_BASE_URL=https://xxxx/v1 -FLOW_EMBEDDING_API_KEY=sk-xxxx -FLOW_EMBEDDING_BASE_URL=https://xxxx/v1 -``` - ---- - -## 🚀 快速开始 - -### 启动 HTTP 服务 - -```bash -reme \ - backend=http \ - http.port=8002 \ - llm.default.model_name=qwen3-30b-a3b-thinking-2507 \ - embedding_model.default.model_name=text-embedding-v4 \ - vector_store.default.backend=local -``` - -### 启动 MCP Server - -```bash -reme \ - backend=mcp \ - mcp.transport=stdio \ - llm.default.model_name=qwen3-30b-a3b-thinking-2507 \ - embedding_model.default.model_name=text-embedding-v4 \ - vector_store.default.backend=local -``` - -### 核心 API 用法 - -#### 任务记忆管理 - -```python -import requests - -# 经验总结:从执行轨迹中学习 -response = requests.post("http://localhost:8002/summary_task_memory", json={ - "workspace_id": "task_workspace", - "trajectories": [ - {"messages": [{"role": "user", "content": "Help me create a project plan"}], "score": 1.0} - ] -}) - -# 记忆检索:获取相关经验 -response = requests.post("http://localhost:8002/retrieve_task_memory", json={ - "workspace_id": "task_workspace", - "query": "How to efficiently manage project progress?", - "top_k": 1 -}) -``` - -
-Python 导入版本 - -```python -import asyncio -from reme_ai import ReMeApp - -async def main(): - async with ReMeApp( - "llm.default.model_name=qwen3-30b-a3b-thinking-2507", - "embedding_model.default.model_name=text-embedding-v4", - "vector_store.default.backend=memory" - ) as app: - # 经验总结:从执行轨迹中学习 - result = await app.async_execute( - name="summary_task_memory", - workspace_id="task_workspace", - trajectories=[ - { - "messages": [ - {"role": "user", "content": "Help me create a project plan"} - ], - "score": 1.0 - } - ] - ) - print(result) - - # 记忆检索:获取相关经验 - result = await app.async_execute( - name="retrieve_task_memory", - workspace_id="task_workspace", - query="How to efficiently manage project progress?", - top_k=1 - ) - print(result) - -if __name__ == "__main__": - asyncio.run(main()) -``` - -
- -
-curl 版本 - -```bash -# 经验总结:从执行轨迹中学习 -curl -X POST http://localhost:8002/summary_task_memory \ - -H "Content-Type: application/json" \ - -d '{ - "workspace_id": "task_workspace", - "trajectories": [ - {"messages": [{"role": "user", "content": "Help me create a project plan"}], "score": 1.0} - ] - }' - -# 记忆检索:获取相关经验 -curl -X POST http://localhost:8002/retrieve_task_memory \ - -H "Content-Type: application/json" \ - -d '{ - "workspace_id": "task_workspace", - "query": "How to efficiently manage project progress?", - "top_k": 1 - }' -``` - -
- -#### 个人记忆管理 - -```python -# 记忆整合:从用户交互中学习 -response = requests.post("http://localhost:8002/summary_personal_memory", json={ - "workspace_id": "task_workspace", - "trajectories": [ - {"messages": - [ - {"role": "user", "content": "I like to drink coffee while working in the morning"}, - {"role": "assistant", - "content": "I understand, you prefer to start your workday with coffee to stay energized"} - ] - } - ] -}) - -# 记忆检索:获取个人记忆片段 -response = requests.post("http://localhost:8002/retrieve_personal_memory", json={ - "workspace_id": "task_workspace", - "query": "What are the user's work habits?", - "top_k": 5 -}) -``` - -
-Python 导入版本 - -```python -import asyncio -from reme_ai import ReMeApp - -async def main(): - async with ReMeApp( - "llm.default.model_name=qwen3-30b-a3b-thinking-2507", - "embedding_model.default.model_name=text-embedding-v4", - "vector_store.default.backend=memory" - ) as app: - # 记忆整合:从用户交互中学习 - result = await app.async_execute( - name="summary_personal_memory", - workspace_id="task_workspace", - trajectories=[ - { - "messages": [ - {"role": "user", "content": "I like to drink coffee while working in the morning"}, - {"role": "assistant", - "content": "I understand, you prefer to start your workday with coffee to stay energized"} - ] - } - ] - ) - print(result) - - # 记忆检索:获取个人记忆片段 - result = await app.async_execute( - name="retrieve_personal_memory", - workspace_id="task_workspace", - query="What are the user's work habits?", - top_k=5 - ) - print(result) - -if __name__ == "__main__": - asyncio.run(main()) -``` - -
- -
-curl 版本 - -```bash -# 记忆整合:从用户交互中学习 -curl -X POST http://localhost:8002/summary_personal_memory \ - -H "Content-Type: application/json" \ - -d '{ - "workspace_id": "task_workspace", - "trajectories": [ - {"messages": [ - {"role": "user", "content": "I like to drink coffee while working in the morning"}, - {"role": "assistant", "content": "I understand, you prefer to start your workday with coffee to stay energized"} - ]} - ] - }' - -# 记忆检索:获取个人记忆片段 -curl -X POST http://localhost:8002/retrieve_personal_memory \ - -H "Content-Type: application/json" \ - -d '{ - "workspace_id": "task_workspace", - "query": "What are the user'\''s work habits?", - "top_k": 5 - }' -``` - -
- -#### 工具记忆管理 - -```python -import requests - -# 记录工具调用结果 -response = requests.post("http://localhost:8002/add_tool_call_result", json={ - "workspace_id": "tool_workspace", - "tool_call_results": [ - { - "create_time": "2025-10-21 10:30:00", - "tool_name": "web_search", - "input": {"query": "Python asyncio tutorial", "max_results": 10}, - "output": "Found 10 relevant results...", - "token_cost": 150, - "success": True, - "time_cost": 2.3 - } - ] -}) - -# 从历史生成使用指南 -response = requests.post("http://localhost:8002/summary_tool_memory", json={ - "workspace_id": "tool_workspace", - "tool_names": "web_search" -}) - -# 在使用前检索工具指南 -response = requests.post("http://localhost:8002/retrieve_tool_memory", json={ - "workspace_id": "tool_workspace", - "tool_names": "web_search" -}) -``` - -
-Python 导入版本 - -```python -import asyncio -from reme_ai import ReMeApp - -async def main(): - async with ReMeApp( - "llm.default.model_name=qwen3-30b-a3b-thinking-2507", - "embedding_model.default.model_name=text-embedding-v4", - "vector_store.default.backend=memory" - ) as app: - # 记录工具调用结果 - result = await app.async_execute( - name="add_tool_call_result", - workspace_id="tool_workspace", - tool_call_results=[ - { - "create_time": "2025-10-21 10:30:00", - "tool_name": "web_search", - "input": {"query": "Python asyncio tutorial", "max_results": 10}, - "output": "Found 10 relevant results...", - "token_cost": 150, - "success": True, - "time_cost": 2.3 - } - ] - ) - print(result) - - # 从历史生成使用指南 - result = await app.async_execute( - name="summary_tool_memory", - workspace_id="tool_workspace", - tool_names="web_search" - ) - print(result) - - # 在使用前检索工具指南 - result = await app.async_execute( - name="retrieve_tool_memory", - workspace_id="tool_workspace", - tool_names="web_search" - ) - print(result) - -if __name__ == "__main__": - asyncio.run(main()) -``` - -
- -
-curl 版本 - -```bash -# 记录工具调用结果 -curl -X POST http://localhost:8002/add_tool_call_result \ - -H "Content-Type: application/json" \ - -d '{ - "workspace_id": "tool_workspace", - "tool_call_results": [ - { - "create_time": "2025-10-21 10:30:00", - "tool_name": "web_search", - "input": {"query": "Python asyncio tutorial", "max_results": 10}, - "output": "Found 10 relevant results...", - "token_cost": 150, - "success": true, - "time_cost": 2.3 - } - ] - }' - -# 从历史生成使用指南 -curl -X POST http://localhost:8002/summary_tool_memory \ - -H "Content-Type: application/json" \ - -d '{ - "workspace_id": "tool_workspace", - "tool_names": "web_search" - }' - -# 在使用前检索工具指南 -curl -X POST http://localhost:8002/retrieve_tool_memory \ - -H "Content-Type: application/json" \ - -d '{ - "workspace_id": "tool_workspace", - "tool_names": "web_search" - }' -``` - -
- -#### 工作记忆管理 - -```python -import requests - -# 对长对话 / 长流程的工作记忆进行压缩与总结 -response = requests.post("http://localhost:8002/summary_working_memory", json={ - "messages": [ - { - "role": "system", - "content": "You are a helpful assistant. First use `Grep` to find the line numbers that match the keywords or regular expressions, and then use `ReadFile` to read the code around those locations. If no matches are found, never give up; try different parameters, such as searching with only part of the keywords. After `Grep`, use the `ReadFile` command to view content starting from a specified `offset` and `limit`, and do not exceed 100 lines. If the current content is insufficient, you can continue trying different `offset` and `limit` values with the `ReadFile` command." - }, - { - "role": "user", - "content": "搜索下reme项目的的README内容" - }, - { - "role": "assistant", - "content": "", - "tool_calls": [ - { - "index": 0, - "id": "call_6596dafa2a6a46f7a217da", - "function": { - "arguments": "{\"query\": \"readme\"}", - "name": "web_search" - }, - "type": "function" - } - ] - }, - { - "role": "tool", - "content": "ultra large context , over 50000 tokens......" - }, - { - "role": "user", - "content": "根据readme回答task memory在appworld的效果是多少,需要具体的数值" - } - ], - "working_summary_mode": "auto", - "compact_ratio_threshold": 0.75, - "max_total_tokens": 20000, - "max_tool_message_tokens": 2000, - "group_token_threshold": 4000, - "keep_recent_count": 2, - "store_dir": "test_working_memory", - "chat_id": "demo_chat_id" -}) -``` - -
-Python 导入版本 - -```python -import asyncio -from reme_ai import ReMeApp - - -async def main(): - async with ReMeApp( - "llm.default.model_name=qwen3-30b-a3b-thinking-2507", - "embedding_model.default.model_name=text-embedding-v4", - "vector_store.default.backend=memory" - ) as app: - # 对长对话 / 长流程的工作记忆进行压缩与总结 - result = await app.async_execute( - name="summary_working_memory", - messages=[ - { - "role": "system", - "content": "You are a helpful assistant. First use `Grep` to find the line numbers that match the keywords or regular expressions, and then use `ReadFile` to read the code around those locations. If no matches are found, never give up; try different parameters, such as searching with only part of the keywords. After `Grep`, use the `ReadFile` command to view content starting from a specified `offset` and `limit`, and do not exceed 100 lines. If the current content is insufficient, you can continue trying different `offset` and `limit` values with the `ReadFile` command." - }, - { - "role": "user", - "content": "搜索下reme项目的的README内容" - }, - { - "role": "assistant", - "content": "", - "tool_calls": [ - { - "index": 0, - "id": "call_6596dafa2a6a46f7a217da", - "function": { - "arguments": "{\"query\": \"readme\"}", - "name": "web_search" - }, - "type": "function" - } - ] - }, - { - "role": "tool", - "content": "ultra large context , over 50000 tokens......" - }, - { - "role": "user", - "content": "根据readme回答task memory在appworld的效果是多少,需要具体的数值" - } - ], - working_summary_mode="auto", - compact_ratio_threshold=0.75, - max_total_tokens=20000, - max_tool_message_tokens=2000, - group_token_threshold=4000, - keep_recent_count=2, - store_dir="test_working_memory", - chat_id="demo_chat_id", - ) - print(result) - - -if __name__ == "__main__": - asyncio.run(main()) -``` - -
- -
-curl 版本 - -```bash -curl -X POST http://localhost:8002/summary_working_memory \ - -H "Content-Type: application/json" \ - -d '{ - "messages": [ - { - "role": "system", - "content": "You are a helpful assistant. First use `Grep` to find the line numbers that match the keywords or regular expressions, and then use `ReadFile` to read the code around those locations. If no matches are found, never give up; try different parameters, such as searching with only part of the keywords. After `Grep`, use the `ReadFile` command to view content starting from a specified `offset` and `limit`, and do not exceed 100 lines. If the current content is insufficient, you can continue trying different `offset` and `limit` values with the `ReadFile` command." - }, - { - "role": "user", - "content": "搜索下reme项目的的README内容" - }, - { - "role": "assistant", - "content": "", - "tool_calls": [ - { - "index": 0, - "id": "call_6596dafa2a6a46f7a217da", - "function": { - "arguments": "{\"query\": \"readme\"}", - "name": "web_search" - }, - "type": "function" - } - ] - }, - { - "role": "tool", - "content": "ultra large context , over 50000 tokens......" - }, - { - "role": "user", - "content": "根据readme回答task memory在appworld的效果是多少,需要具体的数值" - } - ], - "working_summary_mode": "auto", - "compact_ratio_threshold": 0.75, - "max_total_tokens": 20000, - "max_tool_message_tokens": 2000, - "group_token_threshold": 4000, - "keep_recent_count": 2, - "store_dir": "test_working_memory", - "chat_id": "demo_chat_id" - }' -``` - -
- ---- - -## 📦 开箱即用的记忆库 - -ReMe 提供一个**记忆库**,包含预先提取的、生产就绪的记忆,智能体可以立即加载和使用: - -### 可用记忆包 - -| 记忆包 | 领域 | 规模 | 描述 | -|----------------------|------------|----------------|--------------------------------------------------------| -| **`appworld.jsonl`** | 任务执行 | ~100 条记忆 | 复杂任务规划模式、多步骤工作流和错误恢复策略 | -| **`bfcl_v3.jsonl`** | 工具使用 | ~150 条记忆 | 函数调用模式、参数优化和工具选择策略 | - -### 加载预构建记忆 - -```python -# 加载内置记忆 -response = requests.post("http://localhost:8002/vector_store", json={ - "workspace_id": "appworld", - "action": "load", - "path": "./docs/library/" -}) - -# 查询相关记忆 -response = requests.post("http://localhost:8002/retrieve_task_memory", json={ - "workspace_id": "appworld", - "query": "How to navigate to settings and update user profile?", - "top_k": 1 -}) -``` - -
-Python 导入版本 - -```python -import asyncio -from reme_ai import ReMeApp - -async def main(): - async with ReMeApp( - "llm.default.model_name=qwen3-30b-a3b-thinking-2507", - "embedding_model.default.model_name=text-embedding-v4", - "vector_store.default.backend=memory" - ) as app: - # 加载内置记忆 - result = await app.async_execute( - name="vector_store", - workspace_id="appworld", - action="load", - path="./docs/library/" - ) - print(result) - - # 查询相关记忆 - result = await app.async_execute( - name="retrieve_task_memory", - workspace_id="appworld", - query="How to navigate to settings and update user profile?", - top_k=1 - ) - print(result) - -if __name__ == "__main__": - asyncio.run(main()) -``` - -
- ---- - -## 🧪 实验结果 - -### 🌍 [Appworld 实验](docs/cookbook/appworld/quickstart.md) - -我们在 Appworld 环境上使用 Qwen3-8B(非思考模式)进行评测: - -| 方法 | Avg@4 | Pass@4 | -|-----------|-------------------|-------------------| -| 无 ReMe | 0.1497 | 0.3285 | -| 使用 ReMe | 0.1706 **(+2.09%)** | 0.3631 **(+3.46%)** | - -Pass@K 衡量在生成 K 个候选中,至少一个成功完成任务(score=1)的概率。 -当前实验使用的是内部 AppWorld 环境,可能与对外版本存在轻微差异。 - -关于如何复现实验的更多细节,见 [quickstart.md](docs/cookbook/appworld/quickstart.md)。 - -### 🔧 [BFCL-V3 实验](docs/cookbook/bfcl/quickstart.md) - -我们在 BFCL-V3 multi-turn-base 任务(随机划分 50 train / 150 val)上,使用 Qwen3-8B(思考模式)进行评测: - -| 方法 | Avg@4 | Pass@4 | -|------------|-----------------|---------------------| -| 无 ReMe | 0.4033 | 0.5955 | -| 使用 ReMe | 0.4450 **(+4.17%)** | 0.6577 **(+6.22%)** | - -### 🧊 [Frozenlake 实验](docs/cookbook/frozenlake/quickstart.md) - -| 无 ReMe | 使用 ReMe | -|:------------------------------------------------------------------------------------------------:|:----------------------------------------------------------------------------------------------------:| -|

失败示例

|

成功示例

| - -我们在 100 张随机 frozenlake 地图上,使用 qwen3-8b 进行测试: - -| 方法 | 通过率 | -|------------|-----------------| -| 无 ReMe | 0.66 | -| 使用 ReMe | 0.72 **(+6.0%)** | - -更多复现实验细节见 [quickstart.md](docs/cookbook/frozenlake/quickstart.md)。 - -### 🛠️ [工具记忆基准](docs/tool_memory/tool_bench.md) - -我们在一个受控基准上,使用三个模拟搜索工具与 Qwen3-30B-Instruct 评估工具记忆的效果: - -| 场景 | 平均分 | 提升 | -|-----------------------|--------|------------| -| 训练集(无记忆) | 0.650 | - | -| 测试集(无记忆) | 0.672 | 基线 | -| **测试集(使用记忆)** | **0.772** | **+14.88%** | - -**关键结论:** -- 工具记忆可以基于历史表现进行数据驱动的工具选择 -- 通过学习参数配置,成功率约提升 15% - -更多细节见 [tool_bench.md](docs/tool_memory/tool_bench.md) 与实现代码 [run_reme_tool_bench.py](cookbook/tool_memory/run_reme_tool_bench.py)。 - ---- - -## 📚 资源 - -### 快速入门 -- **[Quick Start](./cookbook/simple_demo)**:实用示例,可立即使用 - - [工具记忆 Demo](cookbook/simple_demo/use_tool_memory_demo.py):工具记忆的完整生命周期演示 - - [工具记忆基准](cookbook/tool_memory/run_reme_tool_bench.py):评估工具记忆效果 - -### 集成指南 -- **[直接 Python 导入](docs/cookbook/working/quick_start.md)**:将 ReMe 直接嵌入到你的智能体代码中 -- **[HTTP 服务 API](docs/vector_store_api_guide.md)**:用于多智能体系统的 RESTful API -- **[MCP 协议](docs/mcp_quick_start.md)**:与 Claude Desktop 和 MCP 兼容客户端集成 - -### 记忆系统配置 -- **[个人记忆](docs/personal_memory)**:用户偏好学习和上下文自适应 -- **[任务记忆](docs/task_memory)**:程序性知识提取和复用 -- **[工具记忆](docs/tool_memory)**:数据驱动的工具选择和优化 -- **[工作记忆](docs/work_memory/message_offload.md)**:长流程智能体的短期上下文管理 - -### 高级主题 -- **[算子管道](reme_ai/config/default.yaml)**:通过修改算子链来自定义记忆处理工作流 -- **[向量存储后端](docs/vector_store_api_guide.md)**:配置本地、Elasticsearch、Qdrant 或 ChromaDB 存储 -- **[案例集](./cookbook)**:真实场景的用例和最佳实践 - ---- - -## ⭐ 社区与支持 - -- **Star & Watch**:Star 可以让更多智能体开发者发现 ReMe;Watch 能帮助你第一时间获知新版本与特性。 -- **分享你的成果**:在 Issue 或 Discussion 中分享 ReMe 为你的智能体解锁了什么——我们非常乐意展示社区的优秀案例。 -- **需要新功能?** 提交 Feature Request,我们将一起完善它。 - ---- - -## 🤝 参与贡献 - -我们相信,最好的记忆系统来自社区的集体智慧。欢迎贡献 👉[贡献指南](docs/contribution.md): - -### 代码贡献 - -- **新算子**:开发自定义记忆处理算子(检索、总结等) -- **后端实现**:添加对新向量存储或 LLM 提供商的支持 -- **记忆服务**:扩展新的记忆类型或能力 -- **API 增强**:改进现有端点或添加新端点 - -### 文档改进 - -- **集成示例**:展示如何将 ReMe 与不同智能体框架集成 -- **算子教程**:记录自定义算子开发 -- **最佳实践指南**:分享有效的记忆管理模式 -- **用例研究**:展示 ReMe 在实际应用中的使用 - ---- - -## 📄 引用 - -```bibtex -@software{AgentscopeReMe2025, - title = {AgentscopeReMe: Memory Management Kit for Agents}, - author = {Li Yu and - Jiaji Deng and - Zouying Cao and - Weikang Zhou and - Tiancheng Qin and - Qingxu Fu and - Sen Huang and - Xianzhe Xu and - Zhaoyang Liu and - Boyin Liu}, - url = {https://reme.agentscope.io}, - year = {2025} -} - -@misc{AgentscopeReMe2025Paper, - title={Remember Me, Refine Me: A Dynamic Procedural Memory Framework for Experience-Driven Agent Evolution}, - author={Zouying Cao and - Jiaji Deng and - Li Yu and - Weikang Zhou and - Zhaoyang Liu and - Bolin Ding and - Hai Zhao}, - year={2025}, - eprint={2512.10696}, - archivePrefix={arXiv}, - primaryClass={cs.AI}, - url={https://arxiv.org/abs/2512.10696}, -} -``` - ---- - -## ⚖️ 许可证 - -本项目基于 Apache License 2.0 开源,详情参见 [LICENSE](./LICENSE) 文件。 - ---- - -## Star 历史 - -[![Star History Chart](https://api.star-history.com/svg?repos=agentscope-ai/ReMe&type=Date)](https://www.star-history.com/#agentscope-ai/ReMe&Date) \ No newline at end of file diff --git a/docs/_config.yml b/docs/_config.yml deleted file mode 100644 index d59f4412..00000000 --- a/docs/_config.yml +++ /dev/null @@ -1,132 +0,0 @@ -# Book settings -# Learn more at https://jupyterbook.org/customize/config.html - -project: "ReMe" -title: "
- AgentScope
- ReMe -
" -author: Alibaba Tongyi Lab -logo: _static/figure/logo.svg -copyright: "2025, Tongyi Lab, Alibaba Inc." -only_build_toc_files: true - -# Force re-execution of notebooks on each build. -# See https://jupyterbook.org/content/execute.html -execute: - execute_notebooks: off - -parse: - myst_enable_extensions: - - colon_fence - - deflist - - attrs_inline - - dollarmath - -# Define the name of the latex output file for PDF builds -latex: - latex_documents: - targetname: book.tex - -# Add a bibtex file so that we can create citations -bibtex_bibfiles: - - references.bib - -html: - extra_js: - - _static/memory-lib/memory-lib.js - extra_css: - - _static/memory-lib/memory-lib.css - - _static/custom.css - -# Sphinx settings -sphinx: - extra_extensions: - - sphinx.ext.autodoc - - sphinx.ext.viewcode - - sphinx.ext.napoleon - - sphinx.ext.intersphinx - - sphinx.ext.autosummary - - sphinxcontrib.mermaid - - sphinx_design - config: - # API Documentation Configuration - autosummary_generate: True - autosummary_imported_members: True - - # Autodoc Configuration - autodoc_typehints: 'description' - autodoc_member_order: 'bysource' - autodoc_default_options: - members: True - member-order: 'bysource' - special-members: '__init__' - undoc-members: True - exclude-members: '__weakref__' - - # Napoleon Configuration - napoleon_google_docstring: True - napoleon_numpy_docstring: True - napoleon_include_init_with_doc: False - napoleon_include_private_with_doc: False - napoleon_include_special_with_doc: True - napoleon_use_admonition_for_examples: False - napoleon_use_admonition_for_notes: False - napoleon_use_admonition_for_references: False - napoleon_use_ivar: False - napoleon_use_param: True - napoleon_use_rtype: True - - # Intersphinx Configuration - intersphinx_mapping: - python: ['https://docs.python.org/3', null] - numpy: ['https://numpy.org/doc/stable/', null] - - # Theme Configuration - html_theme: furo - pygments_style: "friendly" - html_show_sphinx: false - html_last_updated_fmt: "%Y-%m-%d" - html_copy_source: false - html_show_sourcelink: false - templates_path: ["./_templates"] - html_static_path: - - "_static" - use_multitoc_numbering: false - html_js_files: - - language.js - html_css_files: - - custom.css - html_sidebars: - "**": - - "sidebar/scroll-start.html" - - "sidebar/brand.html" - - "sidebar/search.html" - - "sidebar/navigation.html" - - "sidebar/ethical-ads.html" - - "sidebar/scroll-end.html" - html_theme_options: - top_of_page_buttons: ["view"] - sidebar_hide_name: false - source_repository: "https://reme.agentscope.io" - source_branch: "main" - source_directory: "docs/" - footer_icons: - - name: GitHub - url: "https://reme.agentscope.io" - html: | - - - - class: "" - light_css_variables: - color-brand-primary: "#2196f3" - color-brand-content: "#2196f3" - color-admonition-background: "#f8f9fa" - dark_css_variables: - color-brand-primary: "#64b5f6" - color-brand-content: "#64b5f6" - -# jupyter-book build --all . -# echo "reme.agentscope.io" > _build/html/CNAME -# ghp-import -n -p -f _build/html \ No newline at end of file diff --git a/docs/_static/custom.css b/docs/_static/custom.css deleted file mode 100644 index 81ec0ad6..00000000 --- a/docs/_static/custom.css +++ /dev/null @@ -1,33 +0,0 @@ -h1, .bd-article h1 { - font-size: 1.8rem !important; -} - -h2, .bd-article h2 { - font-size: 1.5rem !important; -} - -h3, .bd-article h3 { - font-size: 1.25rem !important; -} - -h4, .bd-article h4 { - font-size: 1.1rem !important; -} - -h5, .bd-article h5 { - font-size: 1rem !important; -} - -h6, .bd-article h6 { - font-size: 0.9rem !important; -} - -div.bd-sidebar .navbar-brand { - text-align: center; - width: 100%; -} - -div.bd-sidebar .navbar-brand span { - display: block; - text-align: center; -} diff --git a/docs/_static/figure/frozenlake_failure.gif b/docs/_static/figure/frozenlake_failure.gif deleted file mode 100644 index b9b7b8caeb6328ef07d030a19e1d55cdc59066ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 207648 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

Xen#D8`aj3=~cRZQ%0M4pJjfzS9Q=1 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

-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

|w}Ir(Ir>QvVmKHjrk{xYtf*NjO` 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%0Dn5~)5$;TEdvc@nT7mIXf=Ne6Wg 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¬Agvo!76 z8CQTDl}G~p<3CbJ1!Pd5|I;yDE5HMkC7>{(2J9^etOpI8K-FOppSZvb+@uX$vJP|+ z{0YIdYrc9Czf4P`{us5UF(}1b2q=U?;b^}OOP=ExkLaPa%nHA%VKhSHBZ?CwE4;$L zbFA^HBS7k^GRm$*vOmaiBsD06NGJqLVnJUJhCW0kcatf0m8KBayC`bBjk`;<3JXKlA_rz%xQ)xKuAwN2+b5V&4{U^siqkv&(4EFJ5Q5o*rlSON zI>kPm23+&Km})s?yPM~F8~J*-o1(nCSt>2r7`q`Ic8NK%8U=P~7fwt&Pu!|@RFdx^ z7I|!!dK89xoVuXeN4$Bi(~+-yjIV(tNZp#Xhp{GvJjtC%$%*+oh&&mIWWs0vbg05( zkLr6vL3+D#6o_-|C+EN{FxI;aW)1L6?{mK~>|bkF&~o!ODz8#e2j((%HSZ z5zBm}so&~4(gB>5ycV@=$*XfqdJ_?u3=(8qnP*5N^h>`2o4#vIFiMdlsa!DZVZYB@ z8lvH&%+$=u978#xjzi)s$t3S0<=AR@-}6hVWiCtaYZF``XDtHMItLh&F73k}C7L_;*3hwSjMNx_cZF*WrO zF-dC(_Q{9}owN&eLPEnr+#nhY<;>pS2h3`l{nBIXk<@ zRb<6MB+$SS3ZwX>PWn$MRUpr?kYJm$mun2p;h66vlL&%D5B!QlFh(VOqUv!6i7L)6 zlTT(DkqblzC*_A-!?#~tGGL?9D*aDjz&8admo3e+4aAHJ0@E@7+eHj1)0{{mG-bXu zu%9WFpe!2Y$rR#96n)VT>qs=k+tf?-qw14UW&D@vD6N@c zxMuWJ;3?H2$%t}@4->3Q`Aj#dxIK>q27YWvm-He1^1P2Uooi99y^4x;>C2llxrgDH z`qIQRP16vr2u&WiqfkFP1CTZ&3`HQ`XBn*N}8p{aP+D(VJSUR%ltw&^tmz zfK)YIoJr+Xf>=t|e9DP1xPW!IOPN(q1(a``8B(PcU8U6JvDDJSRGs8Zro1x-iCb7eZ17L)Jl#{k#jADJLXFN5fn6{EAw=4>rU+UQ3L*u41%y4=g5CvQ zqScdGhz)PRn#CPb`_Nb~RL2wxG2c8RMyrnrvyKfdF^wb9zopz$lV9w)4vm$xFHE%% z>yOD?BQ7e;_U=X$>)@j;Sq(lh9kVCXm z?1a)Cg5m=miimMUV06ePn}%1~K|O1$8x9dE^^6|=;UFI3eA$y%&;|HaV1+dmP?fOz ztuVi{zPjz-onh5$jAM`;-aq!#IqujGqg#akb%=xOnM4M$igJ`cHew_N8z?9QNzg43 zKChM|9eWSN@g-KQ8~=}O0JC?s%5#KTj;le7{nx}g(0Ece= zR)XGTOKz@b{wd5WuTkhrxN+!}rI>~P-Wz6KGPAU3!8}%to)(UlWm*ntHuhH%<-QA^ zXIDYZwxz=Uz2C&`UnJqQE4rh{?LO`h*>bp!q2}A7Hfq5=Ts>yw^pjwEaO!~#;PWtR z?!$-tpj>d>Wnet%OM)gtWi#sRPgzu}=On`YjNKbziW}?2GCQ-NO0#P!uO>U7tVk)K z&1QDE2apbjc7PsuKGHcf5K4CIm9n)iJyg-Hp$?he(#2~!n`;abrP_5+7W``f4D4vm z1|Re51KNeGh=o{YY{!OdhR~CshPy~BYWdBh>r2(>OW5+u!tk(&s;=NVB5Hc}?QzCq z+RWdK)jrCyh>@4T4z}#9Og9`uHf57iDfUw;&eQJZ)1%PNMqO`J zYHwb9@2H6H`L1uE#c%zdhyKQkUeN7}(rN|HKJIgJgt=q(nE(-C%d>*=7B?ozk1$+b^yQx}6% zYF)-|V616VA1oLc>wE{q18;#1kZDbx#x)Z*edG^G``I_&axSPItRqcYJSmjB{~RSnD2d>r@!fM}))$ z9o={kK+n}cU$9;q?2}j^5AzzU$Mi!62hfh_|UJ6HlHnhH7WU8QflG+xU*J1d!(ikx$ruaEG+@ z21b7{Q~Tosj$ai;4|ivjelK9d^ILmAU_g?dsmFS&e`AuZY)LQ%c8ho%`tB(XDknyu zTexBiIpJK2HfhUY6Iq6$T69Z8*@mrxUzGoWEg<`a z!N9Y}AqBruz2~2|Uy2h3B|>~eBiu#2pQ&A=#Ce+_1EO+3$Yx$3e8cYu=WvI_pVXzt z`sJAM5~upA7x4nVeS)g}qTc=W@btxpPsbOA1%!6s`<$j)*H1oIyb+3_m=@*ND|B6( z6=CzSlqpdE9`zyOsSQGX{C@0tz)2w$hwKvm;&gm!Fn;Mm{?9@4>~H>W!3DR8erTy# zoRe3Od1-xgIkNf($8g zq)2@d@!7L?66MO4E?>f2sZt-wnl^3P>xF8QMvgas{?w-uCmhH_JHm=;jqX-X^_y^60k@mxpMDpsvrseKJQHk(e-BEb;@=Yxkuwck`apjGs*lk?ik0nF)G}$0RW|uR2j3|+wIExp1I`pS~ zyHlY4^nsTMKD^TM_{O``*ReZ$k2#}a-!8ws&G9DBqc>mPzI~tc*}o^%Xx6xbg%L(< zkqT}4K>C{D9we_+;UtjFXD0w zh`^ATjXCkSwGTTOvUr>)KPrcuCzMbU33HZ_Gf!p_(bFVF+k6(;31{clyDkT~qy?L|%A|0u`V}ohgc_JD4{5)1#2OB&m1&iN~LM0O}+l zIo1$pNF8+)vWqm*EMp9ax8Qn@`3infj} zvlu#>Rj_Kaj%J~DcOR)Mfm)MLMx``VN=vZ{-&9purHxfG(_Hh-E#*v-%{;&VL{oP; z(K|G($7sUHB9UN=D=oDR6brDfE%Ws#z~RQ%aKynSR%3#J{g}14!WNrcblG*MxEv2w z5F+TFJ90R%5>7Zd{ovDTy;o>yhozmEYIeUJH)PmCQ+I5$qM3THst)qqQ5>0ku zSd$sz$5Q#JVGl(z!yE4KBuxy-54m?W14hCY$k>G~NYRPGM9Ub)aG+Y2;V)cdFdEb# z(T(gjr#gv?6k&u@JnS}>c)$^adfXV0QWuFoimY{mBb+u&MvsULP#0FThWEf1iB#+Y z8D0EhD#AEMvYl~kYAjKlV)MopMW&JiGgBL5bH{T8W{)8}ogV=iI1?7Gkcc{D;&Sl{ zU3f!Kx*SxZ4r#<+{!%(H!Qn`Ln9E%Xs+Us)CNod9lBW^VhlyPOWFr$1zCT97bhyBV zgU-PkGFDDP%b<`N>roF4agZMu%h)J7(Z^eG6GIiFpf|Gt472U6WBIg2Fl_OONW2mp zgM<}1GUJoP!H0WRX(S*Hfz51!F`nMs3)#d;q0pJ*oH+6%#-x>saLF;AU_z%U>q!k< zfHZ%4gNzm>Ny7gbZb=VG94c;^%a^#LD%NOTGkZ!Omhh}+!b6_oZt9ZG7>%bsU8?n> z_p|CrGoe&r9QXhiK8W4o9Ab&bH(j%rV2Q4Sz^F|p%8DmnXw_}}NatJdNR4P%E`<7w zBQnrp3rYlT7y@M;4Ba!$0X1?E4L#RYNwJHxx)q$RdClhk?l;!n=n<`L;T&8NOTG`P zbdRKnMc0B+kaX#Fpw>7XNT_zpsk~%Bhg&97TMN`k5mjjPNUctl+S=QWB#KOnEddvr zHSmS3u!r61G~Vh}igu~7qq87#BpVmCGKQ;rft)-02(d4!6i=Kzi)a51Izi~h#j*;-tS7LGob5uRyPys4KuP-%({740 z$<%2<`_Wh2LO41~F%=aPiQ4Hb*eVTvaD;I?s+dr?w2DhvyPBa2OkkoCj4)SW;n~fu zzL&8Y<&d&^G?*9R_(jIh>Rav@CT4w;x^cYmi$JLVUC;?w61*4&Gmhc9(fa2fj76lF=D!sK%h&Y>suznLlcGTeou$v|04ObN@lW?30g!c>*Ta6 zp>n%kCd)uGtc475E`u#=J;yYTWhOJdb-Iz$A1Q)y zYhNA5bO07`A|z1>OK3tNqn)i!G&L1LeLB>mF114;CdYw|QL!=JB&?0aFNb+sVz}1z zK6qX3a#QrOkTEtgg5kx;a272BUWBuuE$xE;N@US_?g?jf`Z^TaR%a|}rchLZ>7}*g zXLzpKp2cxH04CgN;$iqq9u9He36G|s+4HNy!3+ZyRv-{`Z$}Y&2^nv zm%Ch8!@d)MTh3w1f!(E)hHnjpWuaIm#n(y0fK`<;TT2%zNXBd9QQTWQ^;N%Gz_Y9j6mOCm~@+Hf?JE z1EC{Nd^J-}n7KV3^6azRV}Jx;_O0#z=IldDZg3^`YJraS1Nq|I0vz((t^o3KLVWn#Zp6W{&ncClelW>-fM7o3T(4Y35>vR2PQlCCd;y(LzDaG%@C;SCp zD9S(4F|2QrL{hKlGJ^5@tJhVlQNtQFh&ioUmx&WD2t<&?LamL>u=IYqQXr{a z_i==#$lr7nkRyG9Ei|CF-QF6V$^Mm*geah$h|35X%a_FiI&j%yiIe}a$-j8rxn&Xs z770KFR5&Q#;SJoU%-{Hp)+}LPggp_W;R8ho5xf{p6AF=NtVBBG0%+(0EpcGq#gZW% zA%xkGc;G`2Js}j5p$ko6F2tYzFijPKU{NHQkwAdmS%Aek!Jr9xoxg;jkpUQkoKroR zgRumgxK$2H`N&`x+m>LIgA|uV2}>{-TPz@gK}bUKVIV$GVH&bt8y*`R?%|gm;Cq=- zk$D>*VI3dFgC818S=eDHiX!mc8t-|@gJ{V(okjl{n=SC5;3%IZ(#|ajp-K!05n4kE zb(p2SM9(0V77AlbQ5!y#LlyD_N3cXNLLb8YT`>Zl&uC+yl!G!ZWAruSGr|WJ28zA7 z0u}|I0`1}DeUl)1UHTx$U}TVAU>>XKTv_>7@sU$GZIvpME;gex_M$FGBQV;| zH)b3*=9V`8PBMNY+!5qSh+{NHgi3m&-*w?_?NCfw+)UDBCEg@Ts-aGuqa%gg7nR~- zU|w#N(SDWH0yPjnwwF7i&s6?KaNwR(PJ?AsU5mY~>31}0jjC6Nv(QL024M4X=t?HT(8 zkubWDXy)g7j$eDGiVYFy5OLfkeIk4!MdM+DwY?2J-Sqh&_uaZYAJRwzWRAX_?RkVVc^dJ%T* zsBW~yR-LFI(%zt!)p6JtTTM`1E*6x&PMPBAr~p>hFv1@h*^WZzh5{-+4u)ANhlWBI zR|Vo*;^V3k#-maY2T7`HP-@{=>UnZR!#y9Fs;QRh2S|LWobnD*P{(7&)H7P)t%fO@ z+G&>ZYI*qT#sRBPiRnt}s+n>i<1oUe^6A+5DWVEnJMqn^I;2{yMyh7zsA890I2UDA zR&A!mtQPB~-iMxME2oa4r&^@2k!q0OzSDn+r+9`z-#n9qpkh} zd@Aez_-%Ef*`rQN)B}HR?=A9mE5?bk%7AM7WUus>fOJwYQ%Ftpi=AIGe z#~N!i+NVjZ!_}yQCSZakNCJ@%87>4vifD^0qTmAZ4USD9befZzb=7v>+s{S|FtCFi z{TPHyCpj(bw23AX-K;g3m?mff&+f^M0qw1gD4l4Da}F7qC9NsaSkvAn4Kkp0?&j1| zP?}loZNBSpK3Tl7j4rrC#tz{!(r6hPE`%P{qe-F4I!~3VCxBKX$R4ENn&meZZl7H) z=0f4(!Ytx4uI@OldhVyhO70c<>Pm*gF{tjS6+$7HX1x(2s_}}|5gWbHq5!^IAckW9 z*ob0~9OBusLprrvuchLd+`^A0ZPr@qv4TVxT1Dz=njuLaH4Gs}MjsvGIKd*U zm5A;l+bDc!e}yQp3~lh1l=o(XF&uA>i7)p;sc31#oz@iKhQ!X)sZi=~^c_`D?&3)d zny}hSVD53EF^UitX<&a zkbP0t$R0(#oLUNMqXJ(=Dpz!E-R!C5V@zf7DQ|=tFwJ7H28RRF6#^hc!Y)ta{%9nH*L@$`-x52eb)adc?#6`>_GB#?h) zR(7rBt(@@gQ5U*uBnD{?e*J48ek;DMPyEs<9P2P41CT<3P6DamT)~+mFBTKW+wV>C zK%4?%NDy1?Wuoe9Zr)g&jc4C7?7U>e7e8!x#B3e&r|0U@$;3;gm_$#G#AaGb7((I8 zxXU)=FiPGpFjuB9SECs|uHrVMf;R5UR*Ew>AvCXpG#_xr7V>$OW=lFnxSI3omA~{Ye466r4n>t`Z5Lw3glulNSEhyC~k3bgfi32`W3Umk;5}Y2{kWs zNjvCCqjV+m**Yl6Y#}Cu!SsR|4ozF3K|@5>7LIb38a7b^A88h5*{(g7k-y|m`DV+I zX7syZXPBVUK=51uax$$NHBTUQ28VLvTob3hvvtkewcIXMv!WjT?$D0ZR=*oQUo;-2 z5@d{?j2_&p6pBsf76t2cCugZ@VW3MV&6yUaMGSIDRPJFDl#(!}#bGJ6F*YANaN$7q z$nEg*5RP(cO~`cH{-DlwDKV?D*%9xkRjw7Navfi6&;-Sg%n1ws-@@HzD^dibHA1U( za6wddg{x|}T+V@Tb-gxhxDBe#b}Yws1#M&;dYx_qkagVBNW-a0FR&e3cExE}GiK() z_V4ZRwsw2zbkH$npB`hbj|_kRPp6A!HDt&f5C*i&+y ziN6K@OeKIlc!a~!>tHuwJ5hKrp%8Vq#Fi|z^|W|rCdaCD3zapEhXmI?Gd52wk8?8s z|9GZ#=8&H?rx@JV?(B-0S|s?ab>-9cPG_#I5t{Vh(~{Z$El2|=Z4{clU<|q%HguAX z@Q5#*LYd(LKW$MZJX^F4k`O`pdiVoHENy;>=u z`6qU-jhy)#!MTS5t+DNbo%`G1WG+o(1d-qLpv3e^Yx6E;51bwvG@(j-)~EW->n@q| zC`9>b^! zy15_%p=&wEq|cAWg0&l9wl^T29HPLJdylyrNOsBpwO6{g49sn&dy%99yVn_H3W_v) zG2l6Hj;ATJraBl;52Q3UOjz)-11n<=@JY{aQatNYkjfsnN8wp8dh3Jjyi5->b$aP{ zw0G+8t*U>q7yj7Z%!QTiEtX%f4e973T8N}yf|qFBu`?RG)8Kr)r*3c`LPKQ}e+LQB z)7KXby#*CLkK&i^iCb8a4(3$IS>S@4ftPr-w?q{1-=g>ZmUk?9JYpZ?P^EX?xpc#Y zsbq5eWnY|V+c5+K&2|GmXODc%Yi2p$x2A5mg*Nopi*Ry`yFe-l!FuwOre zW`B8dKdhU?_a7%xXRM!7E0tSp6I;V*jOnl_Kuo(eid4Z^v2antmd#u|eh>G> zi+3(tv}n*UVqCUS+O%`%K!Tj+ixw_i%cNagh76glLVy5O8U`+$HgfCMxx=?}XSrOP zHtC}0?_W`)|NObbxlWrkYt2+?(qxHIBCCB4uEa%H6YcGAHG0Tt%BeZ& ztkcd9&D3X1)U-2E%su~c(@fpgEY!L--xNnqI~l!`o-_fiOgrvSgicT5n4+^hO=Ps{ zkV6uQq^q-bIcJ}J(D9`$uSgliRaZN43mGb@spr&(Aeu%=1QXOKmQgxs>s43xlO``{ zf}sSFLjcJG4=us5W}SX4!{@i4%Gt@D)hzReDLKR0l#xz94fPZHNGbKyR9!ubt5#p# zDi&mnt@Ts^2h^3`v?xKX)2&QH)#MgC zH|?QE(MCb0^TS6gme{EOK7%uvSSJN;<6QAe&W&BqJkCt7u{i}#)xWUm1S0sJn~?KnQ)|~ zR?=%vWLd>;7bSY!^~yyWU0+OPx-GK`8Wv!w>8<)!T(edZ8oZeNx09!#E>>)+4>miG zJt|qdZOgQSOemFcYmTVi)C|4!GdI4CMd^gDd7aUa!&x7lO{53(i+A$uveH#wQy=G0 z>kTudWNRJdn_$=7WPfy~RBoe^T573qqME9ztFod*`&8m%%V~q&dh4W=sPRuC0TWkg z!U=;RCDyF~cPlXeV>c?y7D~z;w-QaNX@?wlfQJ<3?JRDhql`c3Aw8T>PZOA+3XN){ zz3p{xAn)l)_+mkd@kOIn04fsJ^wqER)z5wLyWsppXunA0j}iOp--iN-6rFjl0CYf$ zzZ@|fQ*n4=x4?s$V_&kN5P=>ZNHsV7tzVo#`2;iLRmP=hQPA(a-V5QY>fYbs$- z_*Uhvf)s{76}pfc4DSKgq1`ja*?Yz#v?f7q^>hi;{<9^0~O7Wq0>=Elvq1?#?3uZ45>U(>S~zE zRir`{iV2)1|23^?GOQLbobqgn-Ntn{yd5oRwPaP{R+<;XMWiAy^;#`?l+u4v%~+MQ ziajmC44POJnry;HC9&nv>&Vk7aE+_c%rz=O+BC1UvRXV2;%+;);=)nNizhfd@@N_l%)D~f#EyWHk*w>o?#=Xxiz z;G*?)#J#FE*?O}PopD47Tn7U&5#I1V5PK4oAgc&DLiP4%E!5ZuF5E}c_{Gl_EU_;# zVzI14EJ6~NzyvQ|I4$6j&av1nhh%f-CGH|cDc`N0cpZ4XHkwy^C{^Wp*C!2gw6}i0 zqK^ql|6AYt;#a?msDyu25#ZQC?_&Ru?NI;JTd2;MIGP-e6iJgsYIYHMIkd55j{7I! zJ(tEe{BiIaljAt;_%&Zt?hn^`V2m}`JHP9s8qdQFErarnpCYBGPB_b1I><+Vq@}yi z47o#!5-VO-q?Y?PkJ3c

*$9p@vr-poV82YSi+dxy&9fAEHL|5wn=dEEba-gpTtS z7+VaiMfP-5VpHCTW`5 z8rJ+MYBn0#HEqkRHYuZ*<{7SV!4;o_&MawXie`cFQ@&{K3MC4G2t>T`jXbS1f+1z+ z|E%tsHQMm?Wc_hYVGo;A_{?YClICbfe{Hm-B`unvEp2ME$J&;5S*B;3El#)E)ntVZ zqLdoVOqtr&KEpL+X&XsFF}2?+>-5IHnI^N+y5MX&I7fRX>u*^T*sZgyxzUYMLCzGV zA0|1vObG2l6k^_1X>F}bgRxBCxlkVSc3MX?@HxS?5Fn@P$?3={ls7xgfKxfkTi)7= z#@tXE)pWvj^O@f@9I8WZQ*@&XT-ThnPQyKp4VB1IeR~OvRF~b6gQvRXMrZ5j)JAo` zot^`6gK?f5uf`)4Xlp{rb$wVSu3hm%mi*S|IX&V4P#b= z?0m={`a#@|0TU!F1L=?b4&e^~VcuXur*;V@+7A#UVHm1`CdN(JENXOg&QTfzZZIh` zKBfj;rtG9BJf2Xbq)^bdQ2yHQ3bU}w@-PFbZKBAq410$5i%hW62ihu6^?;ziU>r+Lm1)i6gM%+_^uxd zMRz;{9uY_&rGg<9awJJ|AsNykA(Bx(Bt%%mbwXnihw9RBOGG}6w=jdqOvW5R1082j z_?nC!h%u9LtGGN(cy0?PB}OMp%^s`C`hb#vj_^2+(e`L^lMtvKz#%KOauCCz0fnvn zyb>(UuPevWE5l_gw=yLe#U_?Q2!E0t>CXF(arua&lduvkX+kW=k`VQ>FUxW)@iHsb z(oWbCC%A3|pEBP(>Zrg9DL>JvBC+2_Z7G>jC7+V!UZ&xo|A+@&Z8CYXGEeO?w{I$6 z28o<-H2R@SIB7Lmvo$>J21~T%d_`LZPuhyWNdS`=uS=Mv&NdU;Rvh%U*kUSaT}_$9r?3Ah3P*f z^S45fKx>UD4s<`=bFz?(K|8aDwC*#R@+J(lJuCDZc@slFEkN&%`lQoCb>S6G5ZgjD zH!rk5M<+gik3%ofCZ6FHOr#B8^hMLo9g7ObY7|17|3XJE$whng7-NWZ6tp90bchI) z9C8#ylN3CEv`KMj`Uun}tl<@AYa6_w9K>`?$+S$(^i0uIOuZpY%QQ^W1Rm01OufTB z)s#(v<{6wJPxW+9`Ls{{)ESKQ6`a9N)3i|6)JzYxO$l{O)8S3yv>ehwC*T1d%w$q4 zl~Q@)QOR^0@bphT^-}>ACVRaRjYQ%TbuR#i-MbyuMkP+2rGbfH?U^;)qtTeWpt zx%FCm;akDA7qT^6$+cX~)mn1_TUm5n*|lBW|Mgwh6(}}gwz{=m?e$)*^<2HxT=`XB zvlU(eHelmbUX2M~4fbHGHC@YfT>G_Qzm;1BHe%mZUN@m&5%yy3)nBU>Ty?==`4wH& zRboY!MS;SSDE4GgHf2?IWm&dmUG`;RHfCjZW@)x&ZT4nyHfMEqXL+_~efDR8HfU?s zONF**jrM4fHffc1X_>ZZo%U&=c4i@CWZ|`2J@#s`_G<5yY6F&Hxwc)oHEYFoY&CXU zzZPD-_H5TxTgkR<$#!eiwq4UUZrRpt?G|h8HE!j0TBEg3t>Nv;R3oc2MB&s>JGF29 zG*A(DPyhB;$&@h$w@M2)O}*i87k5t;|Mzm8p>YEjNh5bEC%0HFS93$PVoA4g9al^t z_j6w~bkDSMNf&e1^%+o9J@IifsuDnF%tT2o1Vzx)O7|6LH$6}7b~Ph+i;O6%uI7Aq z_<%Q1hj#|m5qFiB#yDwrnRmL-DR`ro;*57Fsuw9hs$0ASdo@mbsYzNR=nayOH=Oh`j1h_`fgfqjX$DQCl~>X)|^6dY-E`qDFaeYJLl%PHfx>TrjCt@mP- z?0}7Qf1#A(7}y<|H0^fND0R@)vUGx}N?MKSb=tQ!pQ^}4jWgx9P~72!?L>b~xPK#( zWISy%8%`%1H~s#^59+gl(zEN9=-02ZE}DY)W>p*c&0-(rgV&9*mgN1e4~%IfYf^P zB)6J3l3inx@wk$O3+^zvn>3k`S?r0H3z9+kHAH!aK}PtvjtIM?H<9CvaG51zPc?(n zG<&F(KRJ?f)JqLni_;N)6L6D9WE}Zqe(8+Pmf1p~r#F{lGd?u3NO^(rj=4A(CqqY? zg>vnvc|@%Fn&}~%kC}$o|MDl5ubfZDnW4)jd54_y?j6xtG}JkZDRM~DDKi?(cNNI< zV1uBkW1tbbHjFPp!7-mh!$6IhpCJ?z-zklw>Wf9qi@hq~hM1$1v9aQiJ+*nFDcY+r z`Z?(s5*hQWzRFCzm`|osq}Q3Gi7?_i(V{!irCGYGlByA-IHZ3= z;YOk-niaU2m=+ImC(FS8T-o>#dEn~1bK z*`5RWfN%@6*AOaE+j%3jM*A7K{+i&vS1MV1yWSaN9wsu#NQCVXF@ueb{kx{LeCIP#CH8Dkb%c^CV(-B`(hSeer#>y|>H zL3_F{hWV^Jy!VW~*Mtp~1Nc(AW_0_vxp_JSSM8YZzaQfS)r7ABJ59WJ;@}Vlc{;4X zDX!x%;557l2?zyAZJV{IrmX`y->{6jYN_^3t42+|$NH?{QcYesN=%Da3u;tM7j$?%L7aiHp*AC>?iDJ?iXNxi8Tb;vfsKpx_Pu;1NFI z6&~T^U=;?lQQnu{C)>J{Gnw|g7!euHsoamjNi#K?h^u9s;Kt(Pu&BFJNvk}iW#{8P z5w9bZ9ob!y(}TRw-QhxI&7tj%mxbGa78|r{8`ATAig;-FCHwr*|54N*&Y4iX zXA=5o9U%1S^XKp1KY#kl<>ItS7e0d!AtJ;_v7$wM^fGGP$dMjCe-t@hq)71K$de-r zMqJ6VrAvbN1X3JW5~RXS4e7azI1wW`Ye0hv73wNZ7A#1SIx+I&hmkE_x^xjk|Fx>r zs#wKH-6|D|4A4YtbqT-m3Q@7MNl5u5)3?1t2 zOj{*L!JiSIPAvJf>feq?mfA7W!!|3Hrijn{kB_tlR+7}14z;}vP7ciN#x1d#3hpk7m2r~-~!Iu1onMs($37k)b-B$J64 z7Sz*UVuI;ehA*xr5QiClc$sXPeHqi5boyr!Ze^PJ5t?bPLn*}m4UcmY8cV8PL4u3<4P!{gc>R#PFQDz5lN()1QcTIp~tJR#wshU z;gOeQs;B0v>#n(KVaO_?hU!W)I+7!oMizm%WuY&Q*%zRkaTq3}&q_;aq&vOS3o126 z>g=NzDQb~z(%OlwOWJY^r?=&v1TDCberr*k6j^Z5|D8k{&^O~8kK_^|4*VREJc&;|gFd&Jft#%@Z9FoYy=EW`d+!<5VMSAOLQOd~0V)>EIcCFj< z)HMq|Aa5vnX!wLyLj-u%Y0iwG;U!isTx&$P=vU(_VJ&!{4zegZ%#$Cz--?-o$!F5N zEZyZgI(pp{kUw5Gb{=M%jdt2?uYCw0d1xp6@WW?^9_{W)|H-#=SI*@R;HV(CdVz^9 zr)c$vCOXr*407LDNu2+aZbR-&4_x*0YCmW8h<;PcCGf{zOFj~b%bEGu=9?4#ssWn) z_5gGj_Y}nw`z;@H3tTzo6sYiFYfLSXmtWq+zts3+P~;nz4bxN$E3Dv%M`Xbj zh{2NEK*(A>RF0*BIFl$2u`xJoqM77mMJ!HH7we!QVEmz}b*uwmLlGDj3f7dTTnsDQ zSy-%sw;c}V4tE~RqX+k(6|P9-V`E8*$gJcyd?@QK|K8}(6?;|@&AjYfZaPjFVYbKu znSuoc$fPD&P>YsSNKaLZ9F4$e8q`!Wa*gz)=4b;+AnGEKrIg4SwSmT=$gVnJ`%VVw zI7d1b>5fL)&hFMm%tQ?0VQPchdF+-Ruu$hc;o#c~3u7N$%utA@)KFxQ_DMZKa+KF} zQ8piAiWO*blcrE5iB!k5FNX6(<22ArTvEDK5~yc4X~;VR<&Rl9=a#keLIyd=9X#OS zNC-_RAlk;zV)D*yY@3+yl=P(JO-U%z#78yVagly7u#2Z$)9PS?z8iI9BQ=cN7biI` z2F4R2?@)#*OmT-5eBh=yUBMk@sto!a#EJGh|0znrm!==SiKP_rs7qgpMS(0ZT+$Ni zMu^%nS0a@p4O|NZOEJMVrs{%avm@FN@rSaS^{i-3>scY%Ha+IiRues;dYtg9Qnb(- z89ih#%6B6(u45hnOzEG*2^ps<$FRTg5>*Y-6HUG4v2QsU7Yj5#>Gjo&9IY2?GV~{r zdI+&i)khIoKw2e4;k2lYf(%xm#9BCYv5nmnWFLDn0D@F}t=r#a|GGVya8^-m0&SOs zdsvz@aXF5iZDi@=Tgv8Efj4r8Uuzi@HL~$wQ4xb0?C7vm?7|kQpoDnGOWyLD_q>1D zAa`l?Fg{9U3q}Bo5yWy9_*}^|fV;~_|Bx#VTHcpMd?6ZuyO*HGZ1a5c)DK3^7@z-M zq(F~z2uS!skN&o0E|(MVycB0j0~h8J<}3gTlmG`f(BZ^%h{6XBPyiNOA|C-(u%@U> zNcyDmH=g^5Xe#Vq8;d4$K;v*I6+C1E^QFlDK(0TVlhGTiCdU(AFfC~e6t5Y~NnsOD z!^Q)vMC?Ku(m)0-NI_;#c!JDmPBSUatY$NtnG)&cvIcP%tKAKPVrwvAMcrdx`UIvI zxzH~{6f@%smy)n9Q(TOVyl5ExSU>idaf1u#e@P=V)cvQ?al!|PGl_yI zm>9(=UU30d@Zt`yWHa%2AH?98jai<6%~*i1 z;9)f=(y|ClfdrcBDLj*V<8 z*|U{w6g`(5iTIsd>GRo(YHwDbR#*3mUR|TC(O_s?!r;tvOHIvx86->(3HzHz8KIp&e~WjPwanu|TAMuMZhCD<{H ze}89QbV*W^_|%$*YAVKJERaqfb`dxdZFuEp4cBZiVow$!f676BoWf)bh<~fc6TByF zSJp<@@g1*Z#kfUIv zlNhe{8|9QqA7E+$sCfg}Vg|SqT3C9t)`bn|I(kt!0&--xHBRlag>mR>80b3vL}Rz) zBtbGH>V<9G@dqSGcG;I^DM)6Wz=AFagEANo*$@rUfP*JUZaZj#$N&vNIE3SIP#a_` zCiHI3q&I5egishbQ}|h|K`$2(bXXW52ndHvb}S6n5|#CeHfKHUVqB?_4>CnlAz+44 zkcMiwVh0cc|2t(0CdU%p}G6BA2Si?2q3)u@X-lt2%`Kqv<=Th&!g zaVo45Rtj77nPewYnm|5Gm| zNk-EJ6xIcN2%}xIQhdlqW(G-pU>TNT35u9V4cL$k)Nl*55O!|ngI_6@U>OWmCy=B- zUbgUE|KCT7*rolbXi_H+cXo#%lTCYCNfc7*%Wa@g_QUfBL5)qhlDtW;K}BJx*CA z3+Q95xgh;8OSR+*(P1!Ok!6P{f{UnTEr^Mj2o0bJW-jQQ(g_XBnTb^=ZUKpApE#Xh z=A6=?iEEaEY<6ZqD1@YVZQQ{}Nw6e<8Ed-m3WZsj{R5lR_+XXPm=q!)Jf@qwDHxMU z4^DKAnsHGQ&7Sgr7-9fBnUu z|H{^ygc68pG;OtGhzO;KXoj7sung51qtzLm-szl~NDJ7Rqb`b%Hp-mc*=;I#f(8j@ z=6RkWs0XL$1MMl8s1Q9Ig)Cj9SguEZSdxd-BV5y%T##ucEGJdlpbL_eDR^ffua%Kh z8f&#s3&v=Mp81&yN(W59pdrU%As`1O=TjewfGMY%KPOf6@TFl2rHS=g{icOgYNcdq zFA@qD#nPoh1*n)|qC#;?DAbN1v`}YfR`Ez?TjvYLfDLDv4WgP2HQ1bR374J9b*ieW z#$XIK7!A~5megPj)Hh~9Dvwxq3ucK8#$a}9cZf*3o=R$8>+q%U`3lcKTUH7Z{|4k( zaUqh3ib@Dbdlk4ACF5VpMGnvK3OMl!aq$-H*DOurtfF8AFe#HaIg@d^uI$>b?3%7O z83HNrc}&!l)0z>R!l%%7db72y-HKO{)ejm16Md0fiuY13L#_Int^Vb&Ie~I(Av?jR zm3jaO-DeBs#i`f;edrJm9=neoiw>7~gJ3t1^LPu-hYl*cvMYNImk6u%u#e|p3~QNu zXSRGTsE_q<4#41b=yq+v%AWAi7S`|zMvDs0AQVp6GOM(o^C6N5>lgLMpE}|U+`0*` z;0(32wAvJg9vPyFkOG zy|jC^x0`JAz`?XwaLu~BV(YvpP{TDW12~++I=sU?jKemJ0u0c+Y+G2(dcr77yesT; zE!@GX;Uy@sg?%c*A!R@d#;8XexcH#H!+UgHWjozbR)z3o-x&*?aAutf4D0~F0h|rA z3U)b|b!VK$YD~G)P?qKZebaCY*SCYIaK@mT4R@@v{aCAKr(UuPA1RErNo;!&w`}{8 znzlzd@ZtB1R*n(?8@LosD9w71`QivSbK2#^2=Z@X;UL(IQO%u`J89e9Hyuwtvge7AS}Fd5bzyw;?69m|P|3`w`4MoIc{k zBUpmeJjUbZzub(@1{{!*NV-Ga%>sO*IU1yHwhNCtxdnW>2aJN?24@F#$QS(28oZj$ zW0?dU)47{XF;XJ?dA=&#)hztgs*$C$qzEfe%Lp(4{})XF6#&wBo!5Ge*A+kjer?jW z+=d+X#OBMNEbT({2G-ykAIPhR-y0IyE4(+Y#e-O!)~1L)4TQ^pqx5UP=p4C4je;t8 zkC>PZG5Fb(`?BDfxtU7}P%VS7%@3iSd{~_aS{)R%o59Qz!reF?_ybtWa zvMM_bzHkclcni{SmgW!-NiDhb+_L^?s{%=n|0v6`E1SpHM~`S`c4ego!rITd4bTBi z%*DJRD(ymkHRDPtuAYp`V(M7v&CAv*$&(D@7tsn=hM*VYK#uxtfMa)otP*Mtb5^fJi42$qek6=(|LoO4ex6vi9oG`f6(b$ z4eEcZ?D!+0S?<-q{D1|YI(-#wv(_nTJ@8Gq?5pu0qbABnZU9bh*So&ty?*h*Zp+p? zprmouhTZUQ+t_s&@`c?uY;Cs(Z){)d@HcIu5-U)9(91G>4JH z6;&yRdS(P!4*LoK+w~S0+yUo4|L}7MAt2XB?$;5Z%DNr_G0^vZ|M!0%0U*86s?6Ph zy#j5Jrag6XeU+_#rS>Y^_W#m1aNi(`a^GGb!eAfvd=jAZO_XMTdyoHE4lB6&-6OVB z^NZM)xRCSHfDY`g;0>z5s+H_q^E$s zyl<;hL`M_?4q*2d&-Y;v22;QT{Lcen01$5k4kSo0Ob#9i!z|N?Pa)F$I9!85+y{3@+2YRL(8gg)_lT5^-9;e zt81A~S1xvISC1pHN~hjkr#7Y5!0RMu9V=FQSoLB5r~SOpjvld=%Y_!Y(6!;cR~L%i z6pI1`5Kuq_1~6cN{|LeeB#y!`g-Zak*SGfzdK(z_136yJ;QpZV&8kvmu3ifgXA zBH2r?y>>b0GRy=+2bfb*Q!N(Aq@kvseXz`Our0fE4Ytod8?#Jwd`Zm{Pde!YOxTu* zB{fozfkqlOrO}g5I(*~J%M=Wpv1UW3jK^~@%&_Z4(#85*81)1VQT16bO#1o0!)X0yL zM5`S0=vik~|LR)B6gy3~oAy&~LlyNr6zy3St0R--WJ$J~giEeH^7uo_-srT_Ow7{c zbFbQ@i3S@o&&<-^eA{%B%zfgVb1zczjb<5IQd2k@h+|XD&Q2&Pf=tBh+ zUCN2>rl(3a*(dXkEb2XJpQ4sq@t*oAtgyfmOXZ?ADiS`gPE}G;{763el9^_gY_1z5oq=2_By-WtN!_^CDCCbn zD4DX*|9Sb@haGfEH+>pkPT7q$T&TeY8*}10lXTNdN1Ya2))W{TYRoC^w1e@L=5=Zi z+pIIsZo`EX)mGyzxI_NfVhb(eK(6ClJ`Q<1#u-;nJFRdu=_bURDtdgtp|Y-Jl()j! zDz?NCg}P*g03i_K3M7Dm3}2f<6PjQ(5s2UfE?^)M+`ub0Ac27{IKc@r zaDyEfa0+4g8WKDR0|*Fc1(3Lj;2xK=_!S9NFpAFoYWBUmsR$|Lc-f~=CM}@_Zha&Z z99O#Xm2U}!KJ@bjciaLODAYj`zwsQxs&u8o0K<5`pyFn56B=VkhBEZZ%oM9=jN5$1 z|1)h`hB2ski!RM(N`0wEJ!*H3Y$Q)Nyva)^5@s7*AmR^zScD~b!HZ#3qfzwmm~%uH zL_`WnT!`dO`EqipMotHkl&Vox!i7kZ43UMH{FWlcwZ8yS;0k0QC57HF1s?R^1tRbO z23+Y%7d+5HZeZIhU3tNT=!!z5Bm)vCAVNrh$6ELx6?(>%$)ClDlPWsqw{qmj>WC$h zJxU2ZC~2+r5a~VQTIBp@Qbe{K@dr>Sge2nSL{j(yid*uMms0T>hyjXs1oM}@+WAgE zv1xb9XlH8dgs@v&sZ4{3M;s;AJUjYH8o|&bAS40Bdw^q*h1}j%nz>9)TC;|p|AHh9 zSyjzz+DMzC>ZUzbSU-#g5tIdhz$i;OAvY{x2RvA1D{UD|2-eb;C&Jw}jy2pnKCZZF~o*}cc zv+zY#hB+MCMx)shkMd-3C5cK<^2Q#K+)cFL8%a8n`Pdk4g|wV(g%ws{k^cpdmt0uF z6mqaO2Ew3i7Jz{)E98a~xD5j^n4r{hummmy)q_HS!9}dl3U^S&eJF~o|4>GY57W|5 znbwtGbtU_^^kueM)tnKi)W_MMc-DtU4WCvbtB>r?1guICYaz&5sLzq&7TEY5Y7oXc z*JVS%0*>A6Z0Fy-uue?apoUvP6PjRPjv1q6y z&~cB&wgY7z1DVJs#~zRr?z{Hu9{D~h&GJ6-d?_IbSyu8s7zgu}x&! zSeY$mi5*f*%za7WnAd0#9dTUP93j2m($o$xng#~$PR(D_q=FKWhy=zCQ3+;9v>o%9 z$IbB33+?Io&`9kwBLNL6K?nLrpG9=D?NMYF)>&DYTqGz*BmfE^ftS0qfPhTkWebs^ z+XDFZE=h@maUbgv`7mm;5B=;s9~s7YD>jafO`c>Ud)e}KH+!Cqibc1j(e}*?I`hKU zyntz71N9f0xO6X1;3*n!+6Q14wkJE$>8uQII6v6Q7>&=XV5uks^bU~-T(?6Wy@t=P zbKzKNAC;>mz34@QsL_wgXjQ|sZod%??`R_$sY)d}(N{Vm|50umsN=Q(xGN-XZ#zAx zzq~fG+U@fo|69Jq6goF8s#KCJHKjNoug(K)(W_(K-@pzy<{aHmbP^U{kl9yUJMQth zj^dwot$Ud)t|vQ6*p7a^yO!o!C{KtS9VEwCA{=iCX6%~BD*1J!MAq!kau>C!g(~|1 zXF|_!mb)=myGMX7sbQdx#u=Ol6tdHUjtmsCcc_IX3qdDi0TiGB7yyGd;3cJlAQe2f6KI+@ z6TvuphYr+0wnM!d1TA`VCKrkp{K3E+?26L^r<@R{Esz9bfQTOUpFOFbpqB z3^2N)ESijSFrM#Y4RopvWO$P()C>z#3<;wWQlKy@A~`^Cs9|7+YCu3A!w+}ZhF6G` z2MoeXsyC>@!?goANvXcl+nN0lkZfDQt_inuqq-7dx2wn|J|v0_guqA44n2&jNrXgb z(*+_FIJh`MVGt97i3e!;Vy{}*|pxU}-8e?pir;TL+br*_IOCrScVEck&R@I+AbyExLP-Jv+S0)>7$1>|us zSIoOyOpSMXE4wqidqEh)(>N#EML+8#@0E)nDHlz^{2+%zkAg&3zOw631%G9li5C9f11qmE2$Wlz5#G$`@OrIM}j6%kf zbg%9r%{QDdt|4$3(%+EB;Z2~)Sw6kf<52Y9n{7g^v{I1k9rmsso z8;nhlItEQ(ghhyiFku+JVk>>gtA-hcg1oD~%fG;Q#l0e|e5uD%^te>?Km58*gaHnd z!x&tXsPE7Za_9$_Gb9DwiStCwesfQ*de5Ru#|Wjl_q+;sTTB`$QRq!tY`C;i$QfNoy|7X4>`on>j`OTMAeBCe zEKGA$zST-0e$&B`aLw~5|I_&lJ@xUi9Lxu0Fa=Y%gBAFI4?qDKpaB{%0Sw3hU;R~J z^;HJSfHX4!89)IP_y8HW16fsud>|50MJ+N##>MnhS542%d#|5tK4v?#lWfGD0oAOl z)10`|JdFffK!#ng1t$VA&Ja}4;LX>7hKa)l_cK4jP)p#E(KB?{*C{_Ps!j4Zm^E6nwH!^3@9>GDVF_RZQkwBg$4pag{fHslH>m;-zb!reL;)p$12~`q z$fX081%V2vfQO(J%q4)zl>i<%0y}Wr$AyC^_<#fW(pvDjYzaHG>)0DCB9`e}^aNbM zOtB`B!8IMuLDwS_c4fd*Tk z1RNcPOnsy&HNA0nT^2aqeyiP7UAx#sU*%9=@x@pICKm$^I1FWkJl)+x=-uC~xaQp* z2Wu0GJH=O|7!dy5d_Bc@XkNg>#l27?bc(p?4F=%2wLr?=9tDZK^lASTBjnIWYp4I-HnEul6LqNenI2 zye>>C|B{ZVJo$$Yna10|A-?4ImK# zMzZcAU+Z$BQGP^@^|_AZB#v$7B{>OlXoh28hGD3LJgwk@bJxz; z<5HZs0c&UAR16QhqbmYKvz>-)_*Z;>orpQ%F0_qc*b|0a4ak577Y+^rtOQHY1n=Yz zyzO32Zi!Bzj>HYqMKVX*#pXV%XjQghY1ycWp11ha&vJVNGEjmb2m&Uc1JGS*mUdh^ zV1kp50x$q76EJ21oiUBp$&vAB1qNvf?ZBa9N1>~?_26cdl8$g-hNjiifF{vERcGI% z|5p=Tm=S$mh5HOZnYex_;Rc&(6OE1fOE85ZR406R{R|2=6Xm}!#!#$zs~KErDv#*epNijTge z!3FC0bT?&QCM3~m$u8HW?%nz`RIiR|6V(^8{;%nk>S#dJiX*i#BE`D`>nX7lJOPcW z*1J2>m$SAtlvC?a>Fh{Rre~6*Pc1%Kw&rSfx3cKL3e1~yh-?|Lsx+pq_0mrYATuz4 z0c1siUEX5wUgDMQZWd@sbR!YaM6w%pZtsEaUO)@aGQ07rZfFI`AWUxNUT^k({~?u# z#Lu<{-A#l~umw7LWZ0-zeYV=Xnm^_V=&NRD_dAC+s@kYt@Z6BF|7wkS)y>3^SJWm2 zg`L|=4i(6b6nZF};+7;>R^!lgkJNg;@FJQYiLbOk@yXV#6>qlxkj%}50X0*z6S!hD z7;+*AOW>WZq^;in*siW%q(=FnU$zL0x3#A;`9Jt4F>0JwEG(1^Da%{~4EWW$LDHFmFxO zW7U(ftQ!)GfCsM|M>d{3G}d!Hw-K&hUHHn4fhkyfwx5FhrFdU;rLup$;XBnL!FrR? zdP3{^d-vq|rg|37*1L!ClF|EKzoH16Fc1TVd?rrwD`5ry45p{stw;PwarqhY4lj@IC>Kpr*4EUz$rxL1(4w(F z+mFTJd$6!E>X?0?tbL*Q1`r%U20#D`kl6@$h=*V$4XFO=_W%%)ewmdB1Ym(Skkwjv zR>JXpko|h{P#@v93G@GC={kPbeE(71Jk=}TYer_9DSxd;|Nq3#mfX$I4F!l#q+*dO zI1rgMXw>TM;}>rlwP?$5#j0qrpeIkHf+1TbZQ40>=;D#AXD(Z|h|!?2WI53yOi~(e zVGB8uBuOM5+D%Z*)xIx12T)=+?ho!yQ=X%-b;>gVy}R62_|fn>{i&ZlZJKN z`nT1#XVYG-%bKq0yTA|Y-aWfE)!Tfn9n-{!QKU#1{|&}MsE{E~pUYy6>eR`g%#7U= zF5KsyAN+VJef|VG-aLNvqyZuFvZ_8N- zoN-qnmmFMjVP#lZ5lYxtV1qdrB4Q)I7Faew1QCdqz-ON!kbq@2&WNJ` zsBze#h4ie`Tx`#o=#Pi4jmR5?EK2#9adQpXA#tr4iDY6*66WD_)m@jJeh0C~&_42s zM_wlyrNPqJj!xOg4#+ zh!T?16or{;x+$konzgA}#_6MvKUcmb>7<{o|FhI<&MgStKd5Fk-H6&?+Ucg{B(tj` zI)o4c1TvN;ngJF-0Ku=n25Z2u0~AX^2tr(SftdmqTs%WB#C6Z7=NkJ9ivJAq~m=n@D)F6xt zDWhbxoka&r6U{>PQzb$RITcS+Iv71YGxwx5L=SB=ImIaA zh$DPhakdT+Ah0&u6zFg^+*YK`Hro~m|8d0?ax`+uCAHWCb*$=ANOh7|g9{gvhjFb` z(Tjl%Hqs$3-BhT6Kb?4pga6!@)!$~_;l9>{a}4RjSW-wLk=TMvM-;_^%gMgnLXn>` zp{Ef?9nE|vHQ1n(jqfUbO#3J?8N`uCAfdyKpe>*C`|rlk0+YcWK~pn=NO{YkE<9IB z>E?@zpOn=oGPWXFmP5^&x~(SGIc-=g2Y$Wdd-aMVU+6yu|5k*Mqh}ys1wQbP4+iuf z00lsSD;UrZ4)nvcEXTf2h0j~M*o2AZM=tw`&uU4dhd7{AIrUvBRk(4VU*K08@0}`i zNeM?dn1Kn@MIui3@zW@BSUdAf|I8rgiBo~-L!ScO$2?^s1uhVRF*LC(J`fS2L}Gy- zBPNk%2U3)Ro)VQ_xFtjO0Ac+&Shx^{urX!X5D7W-AmZc&jD;)51v6NsFCIyZvB97I z^7sY+O(sVnumbp5yq1PSP4TOh5Ff@CFY1%NEz0aw7!U$HcQG%vO}=+^w5@W(*H;j5q8trzJwsQ+ek+~ViTjD1gSs;s!)lFlWE+dc5t$y z&9tW&a(wm`kW%X|owXvh5-*mkqwn36Nka%sNBGa2*MrQYt zPI4<~uc^UpPL~|j#Z4X2huQW@5Jg_;?qJptO42UIwANunA`)?k1#8E(7_sGckTF}9 zKrv5jYLiBCIVXO+N10F*A~u-lo_(Oh7db>vE|&pS<^C704H^=dN*i9K+;=be^%Q^4 zxm^?jSiawLQ~+hS08sMTk?dcCb#OTd3|%rT!yhoyDGHLdN(-_ZJZ{Zp@>nFn$%<~wIUFD z2}rQI)vji>Lb*&%%5FNomi}}}?I>x-P}(<_R$rzy%_>d@c(g`ZM``<|2~1c5!3kFF zYTN8!^;9!82b73_6#!iG8Gu@jd)kCzmt21>%c6LyGX8or=~>kRhNT~wkH zme2$<80EF4Gq30LRB zv9e#yj!RQASLvxPt1rfk?ikE4-6Bw%;MA>l%@D50iK!P0V+b`K=a3#nwv#)B5p~?> zn8th#MUAeD8$Rrq1~6n-?TL7T5|Ky+FNVR4V`y*JRFw(~OX%O}majE)1f`VFsAIi6 zrPG2xVR$)dcp@QwN`^HdR^aG(7!SU!9-RD>D=($XGoGTVA#hh4g?*&(EkKo~@uMT{`fUP0KNdjOhoA(0Z{S%9bsp3q0{jo5z_-|>-x zO-VySAj1_6!=fx#g=o=>T~4OW%cUS2Nj(nORGQBvT*J8+x}XcbT$U)s%dGw1`m`WP z!JrHlAq{#+wtN)(<>0yOApcEVw)|lH%%7-CiVMPE3>Kl#&|q17RM9cv&RrG{rV+Np zi~NZeI>{5V!G^K{jI*WIz`)+b#Lg{zAbQY5NDx=;Si~*#4!Fg`e~_EU*hj)Bk4UuJ zyZ_acoGk-K*g_!y0w7d^35G+^Ae%eHpUzO>>3yMCC><%M%Vs zRRE#oR7Jt1OFwMZC+?j4U5RvLAt^G&I?Tf<%0(((i$2_o`aGPb;0wUbqHm1hce!9L zdXp*EAS#Lylbm4+3AGypdIk# ziR-`)%FLrr$&5>og54zoAn1V}Fv28;ML)#iyG&yyTH1G!#Xz>-SfrxQ*q?$Vjp9iV zD@qWExST60q(NfSRcwi_VV{l(Be0o8LSm#fE~EKz5SCd<56Yi_Wgj}pnCe-F)c>_! znLr@!P2it2;Oh2?NZ$(f7l@b>Nk-&q zpaqbjq^FF9j-|sCX5?zHU-!9}l;j`0C=Hp}Pf8wK8tH>q!b(U^C0VkFSqk14(bpzz zQEIWga|I* zfdE1tw&KqTU8(3M&|zL`LZL;mlW>|#lqh2>(xxtyLxosptpBJX7KVer zFxwkK+rUslD%8X{7MH~Ikk%=pLIhXa@r0es9qsfGcPQdYAVVWY!T~PAbyR{TR6{$E z!*RlsS5BX4N@J=d=Rz(g=Go>|*<8TE=4*J(H$muIyhAV4#yVi=ST(0!jAR#js4QBX za2m~pl8}b3kcXa%bBd&ciX<5xBV;|vzG;-tdFYA;*cp|i82%_dfJ5mt+p|T&)G=5p zpp1In4h42Z$n4IwWkb0A-p5SOMc`x)<<2tfPB7qOb{J_QNJ8E*Lp8`lKa?an`9nJN zLR4fYSRSP4b>UpHWtVlHRyqa=*~5kohBv&ar&Xk0WQd%$rTKIup8u+ko^q(4hUJHV zUvE-b`t)F-W>l0|<&`8VkFG^V`U7H|R@6ydVXE1Qfulz79a1Xay-(s)@59^&|%V5}UnV!5F0oUJtD%g00?+u6i2J{i;+1YY+b1tUYJAuw09}s1@R3 zWJwx^x+}O=lt|eiYc|@XRP4msm~^VhS8c4fLaTx{3CQjxHvfGr$wsWO1t-c@C!(@x zro!koj-fxOA$TquCJe23P91rc=bLEh+=Yy8p##h?;2Dqtt##XXW?a+bQCno zEr&R(!&NZh zd$y-M%8u(OAY;m*M%dk#e(8c8f|zEmfL2$9(5zdO?ckPcar{~%o$Fa@3*WlR2&o3g zn$v@HtgQKN2?6TX%< z9_i~MU~9dWw7H2e0jz_et}PWBA|Qe{dZQ#dUpv$ohTyI>PA~Pg=CN{~qneUd=_R{v zug-p}@seu*tC0gMthOkta3Zj!6)%=p?*l`y_WiE9P_T+vu=jDVcK(JN>DNjP=7ALg z>Y(qvvafy0l>EXkI2uHuvGDy)-Jv1HT0VxavT4IwW8xHUX1R-Rs>?-j4bpIm_h~39 z@aRCgA`xF+$Uy~KLpzL4<_^OihiYNIE;Xka>!ok! zdTus*ZkoX^FK8|}Yi^mIslFItg?MEo--a!hYX{pU@;cd$sVkIVpZv-4ZH$rzbFigi zvI)5ZFV_n8;X^$iv%==H1n)B#$8$$Ao-n%xV-%kEw(~zUs6X@rSHut|ykQQr-XHt{ zHXp(t074E!;z$F6HY*q)NCK{wFH7gDQ~&CNjCE5Aa!(uABCkp`1RHcNi)HiPssBx3 zO_yW_gCzjxvay0sq*<^)=Yn5W$af($l|l6b^E6T$>QC23O`mW;4=-1yu$ZtgSckP( zFM?Q?wONmKSt|<8bdyt(*8PPaO>gIZRmD2r1upM2h)9=Kp|MzeOHgyC(h2n~*EK)e zsao>2;r#XK8L_D_wo$_cRd3KK#My@YTvBgUArR|u&&7k27bL6TqNckY(I$2~_(Bk+q(|n6> z_u?oQaTMNlW+}9;buvrpt-)Ogss9X}<+cMjbhmde3Nwedc*D?mhXXUWw0V#BcYil) zbIuFKv|nhHY_G+%zB2*0g;b-f;shCqFg4^hDt@P}aOiY&=e2PswdVadPZRj!QEP5b z>Wl$KB`tURDX(L3N;nzMQTM=2iYX)f;GW7LQe6L zcQrhxiVMm!=eX00FNbY2X963p5N7fDO;si7IL{gunA>-2VtEo19+xXPNj_nf^PH@? zIjcmtJ1v?wY&DTzh+_$MEB~tIE3PumF_xVF`RLuUpts^hDlX0uTP*vzq63F^+q5)3 z`ptzGW5idVSGq!K_i&S8U>Ev7Z_-({={9&nIkdW~djqSxdaJ{_tj~I^%Q~&sx~|Xq zY-a^Lq(eHmI#$2~Jd_2o8+);bpRRAiGdP2@KRdKXyR=U`fW5*tti!HnyS8sTuHU+> zr-QKryQ@=f`?-UyyE?N|ySlHtvxC+vID@xud#-c4w$J;wle@16dpUqRJ{&t)`1@D@ zygLN@yr(<6AAGdCJG|?w?R(yvWad%(r~XyO_@JJkR(1&STIfK#Ix_J<%8a z%FjH^+q}{*eaxG@&p$oXyBN@Kf>ap2)nEP5yFAR-yv@rz(rZ1+N4?nh{M1)H)}Q^* z=YrRR{m3)D+q1pXkGU1e-~T<}2fpABKH(R>;U7NYC%)n@ zKI1pO<3B#+N5146zH?2!vrj*^ySnvX|CIc?ymLSJL;LryzxY=_rJMh9 z41D^pzqGeM_`g5-W4!!leD(uGIe`PqdE4d;VM2uq87h4B@YOSN+N@QycoCyTa_i`I z^hnQN$bTbAmNa?NWJr}LS)%lZ4`xi6^wyEHd2?b$ofe(F+O#QR&YeRye)PDqWm1>^ zls5hMQf5?|IB!xMnz854SJs4H%~;eZNRdvPG9_u2Y)XAmXV#?J)oaD9K)J@%3Dzjm zw0rrUW!u&*POEmU^?Zd&m$sUOG1}Co?IuT*Iq&NL4Z*TX}?Ri@i(xx>r6W@mFtYTn6kqx zu>b1bdS=Ku(X7bMJ=6MZEzK0|%R4_YTg#n51-*&TGOI)ruScC?bhhL!?9)r+@Tv6D zL8&y-%1(=8R69@iA~jUmEKQXhLQz3%PASn7&b8U@jO{X6J=5&ZN&oC|EWey{ZW~=R zWwlkCf_0Q7MvXmd*{EbIwZ7V3dN#CZ%QW;*;D-Bi&*Qc=4%uYoMJ~){yYrD;qs;wq zQ%m>SHDcq>$r_M~Z%Y z<0Xwwux_qPJ~{3O=QbOq49_ll=8;)y8=sOn**WZ#Yg{`v0uSFCbE4VmJL!^9k#nlI z0*?zXg*l^DB~K&uwp(V!Wj(>anZA`yyGkcqt(f{rT`5=%#+zA}^8A)9*K z0l_0buSBL|@@n7%OC_(dP|$fd6IpUn_!q~0h=WF12Lcml9WQ}vCijD&q)IqJ!?iGJ z?($!K-bbYRMD9p~gW8j#1eq*-3`J;ZkKI~!v#MpxGMalKh&1Fu+f|HBQUQ`RwDClb zZ6`yVt53|ZXdEqW4~9qdBI&@$qA`}SM_=L*73pI|tCh`#aOC1&Hk2+ULai+n!Q+aS z6fgww@sT}BTxI}Syj*+d(k=)*=v{sm}(Kt%7AMA44LVJ*kv!#8AvM7ZsZk&HtCgPKGI@8rA=X`qN&*@fS1Y)_0PMvJbWVj!y7y&VvF$>OQju1*IJ&glY?BtPiTmSTHGo=#PuM9I>k=zmR z-gC=HHcpU!t)Exx1lhkx(Xcm45GhG=O2xK}v4BnDV81yMMozYwq;>6y-q#DwCT&cD zW9`}uccBbnGd{{OZDy;8+hC4pw*!5xZ}rA8%g*+y+*>SeH>q2-m1MbY>e6qApj z--@D@u>G5AhS+sIVHwY_8$IcKBV%A2{!VKO)^EJ{E3QZd*fR5+FomtO;iUQy+! zZT2gyh50u_MRW&CN9Hi*_2aFf#BT)u`YyiwcYpT+asTdEWaFOh&Z*&w>R)R`n;o6S zJNr{HglYUHBdZ50Voh)m+4bb^M42}D9kOR?d}S<;OUt-h-A0vFRqmh{)MqV z78=a7glb$DZq?XK8d@R^YhVZ4(pb}@vCFh+m|d~ej&5zK&uGzT)2!IZ&ZQn#4 z8NJ**pOgoj#ayoQzR#UUktv)kDPOrRTK*{}*IA$yM|cSh26U$g{S_WxQ>ULD**@zz zjHLdDJyg!}^u~JE9&2WxuZA@*X`Smhzfr8)wrf{kyK3)2d)JAcUOz&y>aV`~vp@FS z1983MMRy9P^Hz9W$31H*WjkTL40x|k-SA@H^{$iIHm55k?T=UVdd+UiV^SVLi^pB# zd!hC%F_UKbQ2pvzpO5WMa@!VkPwQ1bcmJ7Q{++|qJ-tJkFqKLe-(D8_huX^Gh|eob z^D?|yzkXP#1LeKAq!F>D_2r~7p4ui^y3gS>B~-eP&!kF#1npZ0Fy8pZ#r$tM zm~X2XuvpmR0d)bSD2dOA0St-&1Vc~+$p99T;;sTPDwN>^MX(4+Q1!B-`{3=8$io}_ zOak#Fw787{*~55haMW(FG5~OEL{HXkqz7#f2>F83)QEBXj$n*uhoWXjU;zm{Km<4d z3$qXlXP^X=f&#OsV@#n6uP_U_u>bu|#0iCl@0}9*lK&UVaJD>x!kOR0-DZX$dXfGd3p$N#Z4DV0% zPJ|A{DJr1n`2>-u+$_F`$6;{K;n?b>`im4ZN?=5Yr^sa#KjjZKuoY`j5C=wpz)ULg zWiu|X0EsUb+07o5p%q%87Syj1kl+Sh02-q)8mHh9)UOt$~?gD!!AKR^1DyTU|ihdf9FTPI~ zK*B!mX9FWJ#0th9Yi=QZO#g^bkibq%A=6^`3er35$AJ>E|4OkU2})LY@oxH2A^~z; zCPml?QXZQFAqfs2|D+bIpayC{2ZR6#Zn6*1APmZYCwr17r(gn07Q1`gHI zN670U4v8-^kLX?^KAOmwn55XAq}B*ADKLg$bzPeLv?12huTj3ATnV4@XjpaB}d0W3fSMBoO(AP@wBHCwYa(clHJ z&;t;_0Y=j{Zxc6dv;Q=$PzzHt5LWXwW0M1Bvo>qs5-Ke%xGoo>PBY!ZE<>quHYfCo zP7hy(y>Nsw-*T9IEHgjDImUj$UnAoFATFeeFQw6h%i5s zJbUdjr{)c}NiEmYEh(nr3X|@db3Hk8(0WZKLUS}7Km)Gu1ys{DBeV%#-~zCaHg9tQ zGE_q~^fnn(6S43?fwMIy^a3jMLXGo41vKz5L^E2__w35sN>Nr;YEkyFWi$hM5JjST zN*7BaGg*{U9B3Y_j^eaLBC{fkU_xV)PaR+d_&^<7!GMA>N_R!-xCJR_#e!b3ESyR- zaw4aS$u*3nOpm2glMmED)dWR#Dx9<`Amdb>BJDDv?o{=Jl5gN#^;J7aR_E#tQ6g12 z^@K_eG-YxoO~3*?-~^^XC(FQ28x;*4RW?mP2dLl)wv}7CwFN@J0xaNJqtz#;RS?Pm z4bY$oWYYq!vIeX`6lgU|P*vr~L-0ff^n7)3poC70N$`rbFRv{|^_49FD{lPNR!a|8 z@AbL}7XNAZ^&t8oV`(|TINzt38HcYXsDG2gjIZWUBRuKOdX*I&1s;{iiapMM9)C2p5aW0FuEb=QPvd@tu@JO52dnppbrWYh@6ed2mG(*>Rn*e`%AWs*y zPFWLO%U}wQK!9-o2WY^64;Tk-;0A1fQSWqrrO^iPw+VXS1$Z}RpZ6rK@7BKNFroG_ z?RH}duV_t#KXuSYoVPM>MzKzCKedFBSZ#zwtAxAvi&R+CSQuxih?f#4hPT8sdzOw^ z3&N21W$=N1O;c?l)KPmte@nm-pSS};^iG?=25jI4vhXxd69jgE2Y8?fq*X#G6#t4l zfOdJHi7mJ|={9NICl@&QD|7If&Ym|k0?iV|Pa{GdO|28lJ=Sjn2U&^Clg7-#Q zNampAD3o_gDMOg6B7AlfT66}PbD1BR+2Up~{QPfyN33>=Szn|DS0PB7BUc|Xxqj7l z3ZznkDYyjY`H64fok>@JtC$?4v5FZucPDh71G)rWpo^QhL^TI`Rupv^ zc&=Nb@Bw-X8~D6uzxi7${+mYn;lQ_fyD|63emMvee3&1^yC2*YA+CA|yuzE?ppGcR z`(wlZ1H$`Oyvx{&eR6`C*s2A3pusw{?K!J;w}Q#|1$H1$Lp#3Zn~C*#Pc=XTYEy0} zVZjTdzbhN9H-a8H(B<+PQRwTNxA%xfHOV)eR-as%$*gB{>i>bNTzv<8rA^#JnA{?^ zd;{MF;f#c-I6}lx5UI)>vCrJWx7s(z0qMCw$U4ke>}(ueT<`;&jCHOMV4fr zU<4K*zq1@7&^(Wal?gAG9H={xn@fzWo!13R+Y3>-ha%MDytoj_K1yB5$35G-Tx$E( z)wK>^6Uofs-H^-uACme6L|}`>dcIwo*o$4+nO)#LdH>lF9=4O614IDY%|O~SbZ)KP z75v*j3cSPDz1<^L6wT+!wl85696DtED>S}GR~FIA9$aao~$dh5nmwC^R($r84II$ss&vH2$%(^ zpkyb00cM$+;{@9|TBpR^+zqyxABcqb-Fmq+Qg|ALvBKnin!fPIQ!IBIK1l7?Uf%1; z?dQCwr$pbIyu$3h*3W$>wp{Jk98an@gWf9eyZaR~fvACg%FDhsGI;}Ppmk$+c1xf{ zLtpeqzpQE7^dDfgW!#Bp`}A8M^+P|PA)R$gHvbL0ewN)KR>j`(cOul$6Y&{iY;e%m zrN-9d9wRn9E_y#;=h`kFgKF{QJc+-tN`COYLiwE=?Um;-tSQz1lD(o+wK|0I$3FR8 zJ(Ed*>&+l#dGi4j!2RDJ{^MW%6#(^@eYWR+{!u?nKVV3tO-(| zNs|m!X4K~MA;nFbF0$0PuAfYtI!p3wcvPcHnE00BtT|HQRgXG%E=;)+=)_kxFT#R3HqG>Guzy1);`Mx_v7>Am;<-GAbd_lkMR9R=KU)D_p?d+0?ZpIr9Yx1e465oer#;q4Zn zfa8_b(s>BdQ=dnL9hR6G1J%F+4JK#+V~j9XMq`Z^+}K$OI_}s(Xf<+%;{!38Km!dd zP{CSjuN`!WY#VY2UU%bFq>DDrY5y1%bL-5bkUrP>)7DGKJ@^}d9d^hiJ`6JG6`N{) z+257(DYej*+vq}6l~<0*k~UhpV;6g2V#!x{XPybDn#Q%+rA}Y+B)#==wd0Ocl za!2|3U7}U7*VUfn@D(DIhX&}WN!qn(9jGToDj}G1TDpmznU31$pIx4am||%#Mn$l~ z){sI7#%jPpvdS*o!3)m5U_-Rh+VDb;7cl$m3mTvhLJCw^5p0r57SuouO;Q>ueX`oA z3o5VZvQAsLp5;=PHR0pbQ)H6*&{SUiYm!s?)CF*$|A4tuIl1H+ufFk7h0neDo-{AN z5!ohIy#?=-*G+hB{OQ47DgVqc#0(V*F~Ra$d@)dOX$-Pc`Kny-QV5$wa;?oh6_v{x zLt5YGHt@hh4?R?EwbeG10Cm(;^KgR+A*j#-l0~;R z?gHhWyRlUx=i)BBdhP3P$RRCy+`jzQ4f4O&jWn@WZYR93&L;1brCfG{gs)d_v79)> zedo7U-&PryGrT6lm$=6>;r%$|Eb%?L!FOB!5$1(!z8&3E0ga-sXrqm^(o93vwP#Xe zoptY9cfETLH_$M4*=LALdqGU1&K2RPpd$BnPd>SGOm|iHuZF#eUR!tbz1kgPP z;+~&4^gaA3E`0pMj+^`jK-F=gRt0p@0eMqB*a>ZRv!g-^SO5bY+~8R}^2`f((1aMu zaE3jomhN=)LK)(~NJ?OX57}_M*)6FCt+=4zJhDK1DC~Lblbi(8#j3vTNpCBO5dEk} z7420IP6fl85_6HhS9I`IPn^$Aj5xncQBf+*@sIlucpMJF#7nLMm=_fm#xa%=ilrOW zY`E8wEs5!X)zczXxM)ZJeQ|?L9Mm37BEl4rur+32!yM+&2Q+B12|S3_3%J&S8%!Y# zWhkX7P1%GODq0V;>79vyOp`9@_wDnuRv>p%8sRvOqvl7+#dE59R0?f@sT+wjy;W4VXH4+0{m^X|QN) zY8(%Uo~d@TUvfN&J35uX{R~#HUC~ZDR#%Q+D$=l5d{Sb48qZP{5>;K&4}aD~Sq5E} zkqt8{<&TiBy1Qs9u<_lDqAk)5P zRR2hQChTC3Kv-vsyGjy`8#GCxt&(8CBpT>ihOL!A1SVj?3SdxOx}pIGG6(?+P9TC3 zTdl_d}dqCAj>Sj4?xZ;7vxl?qF7u@L&^%kUf7C11rJ{|zpP`6}fpOO>Va)aRGA z{0}Zi_{<{dYnT(9ObsuVbaO#7UDQlsHscMfVFjo_*ZRtT=eqEObI5(u<2$g{xQQ}xw11OX6HM1xvP5aD@{XPy3k3* zr=$LjK8c!YoNyTx!3}X!a_US^>y)bWEp?fhitAj{1kYXdHNIrVXQPod(GEp}TmLz5 zf)y0{(A2Ir4GPUP4~PH++}(ji!CTNi%;B!(Rq~Q|y=h;&3AM!SZ69R|N7+`dOPp5r zN0^;id8fBgl-=nYL6}AN?ORc7#&nZ=?cnyLwz3pAI3W|hp@qN6-@0CPz$305?eK~O zLr~EZf@K9uqT!S*pF(s^KxndY8{LamnhG3ag6X;-2S-2yDOqkxG|WK?QlP>I4&&|+ z?|Kut_&CRFGT>i6vcP<7xSf|Sx2NMI>i3?y{_@vvt*80nSrXgmz`&i{A5A7Sz| zKmpP({q82CqUoq+drn~eW`KFV?PP!Z=)oNNYMve>SdW+0wH)Qt_i^?AUbX2{9d{BC zz6LNT0(Ya;JHMCUS~M;+*$B_=ZeN!MN+UesZGLkV+93E@i|OOou-r~ma!X8)%_Z`i!h-Xm^TKV5Rad%ag~*GDyI z#Q`3mZO4avh^Bmq=X?*?0x19kIS^OX7cJL!ecH!;N#|hj)>R*-AWz31XJl{aRB^sV ze+~y=>Ovt}cR{OCTqa0wrL})!w}K$pVE)D?Gbm-c5vU{vKYK%t8@*oUR#i@=CeYLa=Zb&D>Oiyg6x z@a1b0^J+PjdAz1M4S|ctxD}KLeKwZ@DzpRI!T=8NiKtkPH~%nw)F(XOwuPu@J1PV= z@(6t-Fab!H5Y9-8n$|?#h!)g{jKTJ4&B#>O_=^as6~dTLwe}F;D1O-Zi*6QwP?l92 z^NfZgkPwj;)tHT-7EC4KY$AnC4cB_NIFMgPiKrNX6Nr7=*8md$iVxV1(^r7KV~X?W zlI2K&JNbb6$d6gJWt!JS3P&PJv45vUae`QI4TnaXg_0hpZ%K)W{MCqw^jc6Eh{IK9 z{N;94sUBCkU+v*PSxJW>#*|JOKVbP^N+p(m2olO*1vOxoB!HKBsh1?60xW=p9$;V0VSIRWbEiLrPX%Gm(O=>W)rBiDH&55NEiFr72WoZs1;4)C1PiJU6H2gKP6 z-*85PHJi`FdGiAmw}+dqX&ejLae1Uqd7};TIiI8HgCtoKt;bIBd4By_jV1}8%l4M9 zuvCsS8~aI+;g|veK%s|Wp%;pw7`gxy8UP1?0HQ$}3LpRnP@xuT5E+W18%m)naA}R> zSE|x+Oyo;E(-IMCpalss_o-9^>JT4!qX(*y0sl&s@aYg7ahpH7U&*MW(UU#iD3LhP z3KLqQC`zS=p`so7p&@!11;C+dQ>9dTr73V}N-Cu68S$i@mY`+_I0edx1O|ULNMfzS67O0U z@hWzeWoPDEIs?P2E6A?O!LQ?VksOy53riOQ8#5%StaG!kHX0Jq8UPDWlP<}z4_E_9 zn3Ew3lpRa5BrvZ1h*Bh}uAAmCRb;VD(Kw^mumKxp|4^{`T3<-$~LbwD`ht8 zaq@z&N|~g=$aVmWW)M3$Ld%VrMWZfzA&4ri8%wer+m5^wd?S0cE@`q9N&+aWQ~uzA z4f<2FwjNtCt1>&RiTHJUBqw&kWt*TrsdBd7G?sL+w#3@DYWcQs+hJt;mP`syW0tpD zQLLl4w{8o#_#?Naw=&6;wjn{a8UJgwT?>I(3y<-5ikKUet0KFz3qK~YTI!R!Ir|e@@~pk9 zK!v3f<**IHJ3R|$yR~w>3$eNyA*##k5tXa4o{P2ixVd4|x!~IZUmE}5%J@f=e z3b9_NTNS$7Gy6%ez5AbcYcb^TPDpjT^LrB6tGzvXzkSM!G^M|LBRSEe3jkcWXJNn0 zdpcT`Q^fQP+tj~blqU|{P7wU0-g~*`tGVzEW=$hMZW38zB(c$!o08xs_ly)3+BXX?8j)Eww2oeA#jP4Ov#n3ZHvbOF7SmU zd;%t*ZI%qmlNOeqJZy}F{6CrEE>Im@lmytcY^7G_{n1|f1p z$1aR681~ALm8%6OT(sPjua!WFYhrP7VZ2->@)5{n>HsEygkvbr^PB@X(8)P>135{3HV|DWpmX#L&`M|m z3?RmlQq8s{&8pnMiU`9HkumwXPp@`r&layri;=Mg&GPiiE*iCA@lp`|OTtD@6@9OW zdv6(CWkd`*>8#F#3exE0eu0B)77eo)jWUbuI4o^zFaZf9;Lcu%fk7?QL45-ya2jx> zwZXSFZ&hwo6Vy&U)H@&o+nK&%i@eDMSXD8vEgL!Im!n|TvmwRNMEWo)9XJhrY+hY3 zIbkn|OMdJGkys5zwW8I}gw|E|(&fk2{)mz8N3rxm4`!XyOw3O{9RLnsk5r@Bi_O?h z2uiz?)LHX8QU4QHjcwVA{Q?L;qG6joHVjlt1U(UBM0fogzA3s`rps%cI(=K3Z0Vql z>`gf=5*I|;{bJgu%}!vq6SWFrFX%<|^H~h6)&5i4fppq&n?|E+Ro@JVI>CdW8rA<#!IA}M@d4jhls(*0-&*&EtsLFy)4==lFkJI%+f`bll$k z9Tk2t2HAbsC$Qb)E!p86*$JgPQv>4ESKd{f+y|Y~s?6S>x8Q)p;HXV(Ftgh(=w==K z*?2y+7PZWRcROU(h~7S*$kfm3bX=2ydG7U)b=pzUGDcdpK~t3Lt` zG0ZH2s>&vBq!P?QD}%n;I`QkkF6?_k?8R)VzP%I5Zrjb?>)H|RcP{Mc3_oeppT%Ju02}ZHTRsc!5K|bA8+1-E`Ts5L zZ%>R`fA&J2_FiB0cJ5Bp-mPv0BEQ*<3@cBGiuy8(Vs<;Ziy=W8oyaj`Q>#z?Ee$KxB}}q2v98o=&DkVJj=pRN5MTj` z7KIHTMx3}s4IDRk^ne^0@(mLyR4B%bn8bp>8@}{?MbGU}n=MhHs@nGGLvlH}z9u(z zwL_Bn?A@N7`)J#?wr7`{o7yT|mD^q)Pbg7$ZF>%z>t4?LsqfY0a#5{2b2dHW$hpRb zPL}%f@T;Xy&utw$Z{iQT@9q0H@Zik#4KvQcL;wE$lr7uOY_rZjb0oCk$Quf{S5V9D zr1ruR$2Dtu@~$B8W@}C#=E{SPt@BE<4Yvey;e;;sR->o23U`W4w*QH6+mOTDJp9li zxDZs&#NJR;aYck$#IU*AWYmqu8ZW}A&{2?^izT#+M17%5IwpnMNg_hY3Ou#_|Yp=c5gAhK5 zw%cfx-Jpgz%tX^EwcuhCm0lWrG%ATi4HQ>FMY0OeVPnPAPXBk5T8q@T7;Tcbw;lr3 z(0JvwiQcE|g%w{qE8X`jj1X<>-(T6a%iV_HMR-t!onqMGOZDZqBZ{rEc)jxmCYU>8 zkNx5cDmGi7W}9!uIp+o(V4!E8e`er-26864=nbfdd0aEy;Z>h>*R7Gdp_)pG$lQAC zv_~J4n~l_q00tJl)u^`m>I1{l+D9Of^4jT(qgJy}i^}f$Y)K_t@xt9mbz9~09xR8G zz6O^vFvAZ=JaNSrXT0&l%Ou>BXIsPwI8*kyxgC;@&c9IPI;zN_hK6QE#+d=}h&$RL?mSe>n2@6#hqs#8Q9N z<1^8P`vevzU6l$t1U!nL#@7*dG%SAyL0`f8XA*xL4<_3C5d0icj$)wVC4)m2xI{QY z5|+?}Cqy9$#WlD|v@kS=s!;_=q=;UmV}cZH4+4uPzuCYrg9p1Ca(p7IhA8ku@90IN zFvzO}cIbOEx}inx5|KGQuq%54iV@F)L{0#3i80LK{K(crCW@tsLLB15iWtR;Akl-m z_~H*8l8$n0Lmb6;nIqy5Gd}jwkADPYAO$(dKL0As5tDd@Gn`?Kb?k79Nu*&pZYQ=R z#m#iBW8IOq)1A?gV;)7Ukv)y%0o zk&t@noDBWamFAP3a){X|NtzOzLqX*%r3NT-k|r-(TN@i|3BY#p?K!AijXc#fOU)xs(kv0k$) z${3p!a{M(@X)!EGpnA;2BGn)ENJpUDv08UPgte@7Eo>n|$8w0H9IcIQZt1uU-uAY) z;@E~Fg*#l~TIjR<60BTX(bCNY^|DS9CndMj*}N$yElwFMDdkp_az6L4&E1i1URm9` zodl|q>>P}|i`P?yH#aFlsEY_H+Q~MubM*gQuh(?9FzCRSya~jvHX(6|)ZRC``Hh-K zu;v^Ti7uTk+OA2?8)4tf7s0EuFo^zX(41Pxy1X=ReJR}C3u}(V-UO&h9DBYG(`F{4 zr7(U={5KGrtG^EZYl|^vk5)h;1Ue`%)j~Ssm4((MXmO>bIvhcvIMpIZqzZbkk`l`j zIj>a)5v%M;rzP)nB@~0Qc6~_YyXH5h3zV2jl+08?fjNl)wC|LMY~_j>Im<|H6_?q} zznQ#45v|x(GUA6rEYrl!bT)L$hUHm>cx6_g#mE0%AxVwE_0Ih}GosxB7b>n8f<#PU zRj-qYTY5xSM#}W23$1A$w#=`?12z9rFv31kQ+i^EO0~HT&1&#k1|j*FWchYMLX^xNDtsd*+sJ#Ib!G8a^>$G z>cUSc@qcynK7qcM@tpC~#m$wTMAYW0e|s`m(fT5-*Y^2_8-nP8W9TPm9l@!3c&s1v zz11F|>)-xyJXw5(I{uQt_oWiEz42;4(vcMS^S>I4yz)XYZc_>N3#OiEg+F^cZg9Ks ztA+8CyB@N>sxc1%Y>)q&%0Cuahp8Z?1Z0X1^qlMqK}#vXpD;m>E06i}!1`-IrJ|D; zEI|aELGJ>e|GU8?%fZp{3P|{~T2MW1NWHgHh75#+g5#YiWS4;{vnPs*GlIU(dIhSW zJ}LCVy_&ojszE9mK^C!wEj&RlRKqajA;J?FgSo;oe5^C%LKIxX@&H4vgF{y#M~Igqxi*%a0g4Q z#8YI&V?0Jz+y?(#WX5Kc#and5NKA)_@x)H#MMq4BP6S469ExCch+(9}M>IxcBuC;> zMrX9da74#-l*U~IMXT{fd~kS>@1WKv2N~`oqjqJ&i3`vljNUrS3q-@HuY{{6!NsE-qnVd?rT+6Av%B&np zimXVkEXultEXlCc1+rWaU6_Sj*d~J<#0&gKfJ}zeO9p}LF+WgDN7yDs-~>_Ngwv4B z$)rrmT#(Ad%*DPLL=^-~&HU1V~_oS{Oto^ha(82mm4Z1Oy5I001li00000 z0yqMP0000hEk>I(ML#t-Q#C)YHAGrAK4v#Tqc=)TI6;a%4m3Vlc|JlsL0pbQ8fZmG zQb$d^N=xEOJ3vcmc}r5!OFf=V8h}qbh)+|OPgY7(ZKG2!t5YpiR5xZ-UY%J!H(Yf} zTrW#pcd}eBfL>IbUsZ==L*!&pXk~F&XL@~SZb@iSbZBd_Xk}1ogZXo#r_^|-OQ)x&w5M}ss75=f@~Nq*CaUl(s`f0Z_%f>Z z*Q%7HtFz9nX0WofFthYDwEXV0SMan)IJNzQwd13;#gLbJM$qxM(C59-gI+vgQBH<^E*m`D^C+Z07dS=KIy=_T1+9=H}+;=I7ey^y263 zyy*YM=>ON~_ulC4)#?1)>GgH%`+e*EgX{d_>+|dD>)Y)6i|zZ$?*HQM`|9rW>F@c9 z^8M8E|K9Td-GBe_4V=h`IPwooB03j`Tz9#{r~^}2>$@z2^=`^ z+qY!2Rz0$`idHgi+|;SdN3o(sivKQZ+{m$`$B!E`f*eV*q{)*gQ({!fvZctDFipOU zN%P~(nm9p9gotpJC58?yy~%^@ojr;9CJHo2@E|LO$tu2+NVTfft5~yY-O9DA*RNp1 ziXBU~tl6_@)2dy|wyoQ@UMnX1Y3a%vR#WrYJDM+D(}T1aD%}aOu;Igq6DwZKxUu8M zkRwZ;Ou4e<%a}83-pskP=g*)cBTc%>iWN)WCUQ&t&TqPO29x)5kv-_E_e_rw!dt^ZQKC(jZR0C?bp6jo^A zg$E`$-XnP!^ptTJhA85QB$l|FI@6_gkR>Lz=;Dho#(3B&5qZN3EAGjt^BjbT4C!KcU`Os&3)_G^11a{L6n~E_~=NvR58l!lY%{2!j z42kEHqSJ8}*rb(;X9=dXXlerCC4UB($D*vV+9-*9&i@grW_!Hx2BVHX`X6Ph z>;Y7%;w5Cs9#x8HORQ$S;+asgJ}n!dt+&oWZJoBVSmL5@%$ixPwicUfi3z3} z*(!|E@+`0oC4{T7>8{JJyW&oUZbR%^s_wnhR%@-T*uJ4Hi2-|y8MtrMJMM_dBqQNt z_vS0{ySy?galRDWYw^XvW-Q;ecJ3ka$O>ObZNi%&T=K#gKJ;*7v=GZNyQ3NmSu!%u ztZ%R8-kh_}p2}L^wKf|z*H1LkGAAQOe@dsXJ<}z%)Z)%H=b(s5-S8?)54_mPMI$EL zuyxnGA9%M?;eJs8+o1P{wuKN0QY<^#v~Yg%yO2N6I_1oB3-axSIUo5Or7K1> zm7H7OJ)Pk~)atCwv-2Esy?Jk$M)MzQJ^Pg)g0<+ble@JkG(`WLKE zNoIvC3{3YPLn-`m%!Tuj+yX_WEdtglPY+>)YoTg{4dG{PC^ zj7Y5vvWkfqgb4W(rl>`|N{N`O-oG+~;Xv7x_dqp3@NzPW( z6J6o5hd9Fs5nGAbV5+S3Lq9G`Tbk=0Er#g5DpDqk8vIxCyrwy?DN$f$d`}7yLpwF1 zOER789}*uE%H53;K6dn%weqOA&v~(Ojf)y1A)?Au)~R%wD;6O=W|%25CNK>AUL?17 zO4c>*S~JX~b~ee$IpXV-jVUG2+yzQ!iU*qC0oe|Hb-Y%lt$2o6YvBVk15$+Q)l0)Y$Dd9QW=-{bEYSGBFcYKHg>C#@!MGi zH#f6R^Cx(tY3=S>pU$rJvxm9l_3Si4>9wjbU1XgJUrW^T8IhzJWszVnH`U&n*QDC& z;`XX_T;xI~W-QzT854suPbP;l_2(E-_-z<*d{OD_ST9U!CQZkU8aft%LfTvi=O`LUXCg z_Z<~XO@%5^k;+n^y0W7e9qC3J`qB%Nv+TIWr$N1$vYZx_pY#-Jw|yGZsGgFhQ_bpD z6A00+j)zD5*T4?;iF7UOVjH_Mzdp9Impz$eGyB=l1`n~L zO>JX4yV}@R_O-Lk?O<=a+u+9ax5G_tSx>v%=)Uy1)6MSssv|w{j<>w$P49Z!``-A@ zx4!qy?|%FH-vAG|zz0t7f*btc2v4}e7w+$LY$VX1{lAHYGDF08n%2&?vmUCPXn@EHtW=`{(+x+H|*o4k^uJcg%{O3Rqy3mJC z^r9Qx=Q{^F&o_bdraOJ+jcCNvr#|zgC;jMH&$`xyzI3E-A{08Oy4WQV^|3qM>OJ4O z+Sg9>tMeS}OgH<}r7riIqy6h_&%550?)JFX9p{*E#VMLW_`)0h@QANQHr7#&#y5T) z^uUMYCr|mxTmJHx&wS?Lkq*au-tpeh2I5Cgdc(Uy6Pj>E=~qv9#WUXX>u`tWXHWau zW8NK||Geiz&-&gI{`9H$J?UNl`p3)O_Q+2@<~gtX-HTrMs|UX7p?`Sd!#?uL&wloC z-+a(JgZia+h5z_n;S6$QqZ;T>zxvmoesVyb9`KL9Kj#0B`rH5h_|Jd->97C(_un7- zka_g54(mV;26%wy$9@Wke$60#<(Gg9xPa~#e-t=>{;+=+=zkfAe;LSs{`Z0Z0DuBW zfCq?x5vYI-h1UT1-OL~*bJ?JdRh2}T&R8}mT7HjFT6RvABchc!#J6jO-YJ?kJDUs1L~~dCG{7_cx9LxQ|@ei`BS}|A>CWh<&w~ zg9K@id$EiNS$_&yj=R{9=?IMxsetbIiXljOfQXXzhj|q_hW1!_^dJuCNQdPhk|WuU z@c-9`|DclM_=)v*i4R%YlQs#ECJ2x@$(Qq|myzd}km;C^Ntb_lnYAdEV@Y|0S(pcS znAC`sH;ISuXOhO~iGnDUODLF?=ZT%^ndGpR;&+vaIhu-hfPDCsoA`$=>4~j*hGhAb zmDiPX*@ngmf7*}>h)IB)wUsE6#QhccR#3OJ(_8lbaBpvhMb{7IYWDS`74dH#u$>M0J7XrnbsqYLD3zJVqvbiFI2oYID3Gz3kuEuT9~z>S=bSr#X41Xv&UES$lJ8q9{s@>Zqc7`lC0>hKSmycmMdOv=^vk zI;cLXq}ZsYrg@CysG9$fp>YbLp1Pp(7^$b=i#7S0l*)cvS)s&vpEIa|QTUw#TAz=~ zpz-LNQCg?{X{r)=o+|2`r^=|!>7W7Hl_xotuv&R1N{5iAtHC;ei`tIo39NpKgvN=I zw7Qv^m#n#(mcL4xbQy+DsF{H2s#1xdavH9Jd90RqqN7Ti#`%#qsfVsOi^e*N)5(an zTCa5}ik}#+wP&ux%9@qu4U$@u@A`vp36}=gt-va;RJeyYYOAf9h?u9X)p)Q8n6Qeu zu+mD2tk{b3dWpX&mpX`f1gosa`J5vOpp<8y_DX>GimkKAf2_Hx|Nm-;_-V4Z(5~fB zjtu#qIJ$#I%A{Nxrpma1hS-dqYIz^3p%|*OG+BU@L$_>yG5;q45Zhm&&HI*R~n?q)SV%JX?-Ninf+ol=5n&orK6`@3%S(*xsyw|mOHr<>ZoD+w3nx~jqA0*D!Ibg zxAz#T$SSE@>$iLxw0e7ff9kfU`;BkgjfQKumPeqtix2GTi(4z4E()7d>#cifdCoeo zGJBz$%A3t7tFg+GVrZ+Ar?_T&tj9}*qbY}^u)W;dz25u1;Q#x*t-uV}NUd$ipipYD z$Ct0_$*dzOhoBI?@;krcOTJoZzA=ct6)UN-2fWu?m^7NI-wKmGD6*JGhRnNvvM8MD zx~74suDzQJ?y!M^DXaz9sI6$g>N&t9%bFX>ub4NWB|E*6DuaHAi*0zpH`xkpkOf%q z!Y~}eGCadHEW>S}3X}_k!ke4sy1#U2!aq5RDg3OI$igmM!$_ROHjKmA2%91cyz5%R z6fDHzsj?^du_dU%8;qBID3%|rnJpW)K}>lOth}3QdqY~f$cMDE8E28;?)g zk<`n``MA4^I+~IE$38I3#9YkAY|MU4%$A%A;E>4*=*)>4sf*jl0yw-U7|cI#%-XEY z$z05ZoC>51w61%rbXdo}43m4iva!sQJ4ucoe8x@NwyFG$h8jaBw&CwVQ z$W2fPszATnJHF<5oclY?9O%3bot5w_(G=~+7ysSSHr>%5{m~wM1jGCTBVE!ajnV*# zzvIlii(JPIOu)kXo>S=0WeL#5>cGax(7_pi0n3{9tiU@ctd`lJMcsk+sII#C&QO@H ze+bqJO@kF|&DCJUGTa1x`~yd@1z*4gV!#Df!ZOWgDrTW0y zAb5taynxsY$i#dEUmyo}PzP$D26fQg-v7Pb-u>Nbum)@J*F!J_K2XWs`~#QF*l-!7 zkS(dn4Uf^SfYTkwK49J0eFxbc-rddL{#^&;P2PVk+Uc#{e{9I^4Uq61#VoC(!7bcT zJ<6*5sZ4vNWL=M7I=K4K+mda&blbFRypm2@;i$}#8NR6-uDtq?4o7W~lx>8hu*bq| z%tycl*=+~it>XdSW9tRY~B6c<92Z6 z0siAa&eusG2(0$KQ0D4 zoztG4(-^G4wi5(~LgTa&6O4pazqE>9~&R;tk}T{^_5d z1Vy`lC=h%P>=yuj)?2*#J^?Ah0W zndgl4S?y!^4!mIK8hDl*yMC4p!T1pI5c%#e4A=7B+4XMkmcH*Ce+Oz1@C1+71^@4X{RIaf z!wO%c4DS#2zze4U@!{z0-~SHiEeoae=h^~l&z?hyVy4Kj2^=_T>EqTz=pQj>%ftm@NPB zcFy#s`1FE2%u>(a{ay7|pY>P2^<94lV&C@!UiOxJ$Zpw~JL&Q;AC7VUr9pq;pbFfK zzuYNae=XmxKkud;y5bg&k-ID6l(&tGf54Hi^oOs3>u`cI9@kU;1yyeM_m1~?-v`>Q z<+8use_!_LP0V7h;aGHF@J>n@o`E@?Q_{h+Ij-XJipbg!|=r8^}&-OrUgZL2q zLD&lM+vqe+>$Z;kxegG01P&x9u+G7QcN8K_ct_1cHDZz^IdWuT5-o*Pk>bd)6|-s~ zMUtaO4<9~%_IPd5l*^sJe=%jo^j8z#I*}rqwc;44$q%3wFHVFa=8hetNtG^TYNz1S zK6dITyu*;8LWmJ3R^*y7RY#8?b5D7U)={V`-x*+*pz( zPo7SlYxUgL>0pzSJ+}7k+`D@-7e3thL#7YwEIqjNPICMXodf>@UCVUpti!G(v$#`@ zHPRAPP_WI~it957Lqlmnw){Em6jyR7=OlaVqVPk^^yv_vx9}M;LJ0K%F(!SyL9L|? zP4tkab+WN>wrW7h0tnrF@bQQ*aR$ebbmZ{|AAJB)$U5XZO38zWWXR9?@>Ihr zr}{8tO8Z> zMho@TQ9orXFMDb|(NwcgMKdi{Pg={L8q1rFlpTSp6UeHXBn}}u=&c&nQnE6|2hHwQtLxVq;momEI)CIMS!J1GsM%(t)t8}Zv(1)K zM5yF;%iogt_RDa`Ez{gx4_xw+K6+6q@hd1#ZndK5 z2>%~{XhI`WJ_^aq?b7`CFq(x8>E@h&3d*9QfHtmVX}IHN+UchU%}S!FtG;?8 zt;^L8ADCPE+N^#;c6H~i4B*IEhtg*CSGV3+i+BMHM+>TJMy`Yoo0~K9rsbv!6lUIIu=9wpi zk0OJYYQFm%Wp0Z}k7(k*>aHuxSCvj_N%Grs*FC56djB0h>4z^KmFDA@Kl$gQ54y?f zmje!aAA#6DK<{PBLMs^`=5V(T&hce3Gucb47+A8=LGUuCbCm(t(K-y0<8>%oApdC^ z)3IEjgfFkL(f2MkBNkoERvP<2va9SI2DmncS@pC_SM8E9s`Se+~OWbp~X>j(OG;t5>mwIs4SHcVU-dP*HS`2 zH`=g-f18-BMx{a)#tMddA&m=NHmeSiaEO@t8z)Jl5?o|RgrN-9_ijZQ!0fPvG+c}) zJ88<>8o?B&A^z)Wb;DiXP-~mz=;Puc|0fUwDKfEdDsfD~duCR0QNRv;Qc_eG$r# zPukW)y7VnNB`h56n1^;A*~V2qj+k+TSGyx*F2uf*CB21|j!J%P@4LHyI+?bau9$8HGM~h#MaWQHx_70~oLn z1vFs+i(A;D7rn5>EuLD%YFd$tZ!78{h}I;62nuf%(HquUK~9rshK)XKp-g+)3Y`7) z2R!o`JlWQVxFG_mN*x70srb~WPPM96{i7eZTGXO>)r*E42tvk6wf`?&%_C?<$r{r_ zqPgIsqzRlETt2f>*=0t8mVqf}=%P8AZtZm}LrG}a5IZ!OU4tR*2NBKw2vd#MxOdCYgMA*_($Xp%8f;TA-?W!VKq zQbO06Gp8XX@eJ!SG0&(NRGt|oFSl0C6e}itY|RWu-!-RWA^*{S^=TU<`l(g%Vigw0 zc*ZlVQICD>BOcg*Mm-;FO+SV?snMv#Aut?ICOu>gilmgK$nv=Q5}8J`kz+h#Pbh8`o9VGT!Q zD~#nz#~|V{Ioy@TAP3hmv9*kCJ>x0Yj=H6W>9M=GHe+-O#>mEumz}vPrP!Lw+szLe>baDG%%mVE9hw4!p!$dQlAV8t{=F09sRJZoZ*6Bkr2y> zNv>nC>oDv+hZ&2Um~u3%jAcVZJJI09s-NXe%~4P}+y7?9a2?J(y@yByoM95sxXWGR zT7o*%l9Ba?Ts_QFJF+t2QzdEt;_AtWtm3yUOs(N$(~`vcgKP~MaeZpGxuWf7N=)n| ztoT%%=UnHvs4g_DVUBvl;~d*n#x43fZJj6miU`*B(G&|UF+kxWRntNv=bMY}wALmy zd-={PQdfH!&E|hidfA~`-DgMx==B&ncY)DYt&-jB(VgOSkI{6aJ>4o&s|drr_qbfx z7lwp!99~2|a*UST)V5x&>I-w(NVjE(+qGhYHCxW&r z%RwF7J!nHTrrIYgnywv$HhX&pd*U}L@+;z7wt*WYrAQWq^8o=YmvX>5?F$wnYNr=O zqN5O~8MGoMe4-*8!zbFoXXrtD0>V8Kxc?#~!Y4{YYT~y(V!}wPmxYMJDI|$1%(|12 z6&vfo6*3Gz#H|<_E{wsr65JYd`3y9X1y|sO%KE5Qn;2L^kp{H5j1s{^yrD$&8x%po ze!xPJ;5B!e7kz;@D-wlUD28b0L02@x9TY=ln1y|+#eJHtR&+%iG{SqTrhHPiRhjitS4Hu#agV!Hgv@|?8Qba ztYw1+Vayj|G{yl;M)Hxw8R`(q7{S8;L0tNW5j43H^eE3j6AX!rmbpXI-znBt}2?bLj|eogu zK18=T$pZCIuHkT>T7aMAsUlmr2JAwIco486M*~9_68;&kW7d ztcRdOhtq^Ev$F-)jLq1bO=yz_>=e3Un1$%-w<$Wm>H<2U15V*gui`WqDHIU0sD|Wp zg=+ZAeozp}gAl^}t;5_HxFn%{Y|PNZAmrprS7?Tu7`Fv+p@}ol?-|5VbG5pl2W{xY z5^RR#bR)`qm!MEG`Cz8I!y;Qahb-d<7Hv@$jR)QIl-8eLx4? zoTfzsFIzCfAJZ<)fe`Ot~nHOrhU5*-v1)lDn1(S2}Hepu0G^Fe+} zLQdGHUQp33<~q7!<5icQ$!g)lQJ;g=AGJwUrN&ylRcE^fT^+_ExzkMD(?;#n#0f;jlMRid z)QJNkPDE53$y2^$R7LEE!f8tkB|)H!%XdfyTA+ne2v~s~Sb`t~5F%1gwwbSZU=_80Ed|$}U@w)xs)S z-@}HLMTfR4IU$(knT;Y*?L;%z4d;(AylnxI_f> zyxtPMbzlW6U;!2ATfhBVzzy6h7>1X^P?d2pw(Z)iTh7%xu3wvq0Mj!n<3;eQPIO?0 zljTx&_ytp#1%Mlc^INu=&DN zH7UcyjJl1$k#L>Y8PK^bP}RBAL}k$Jv?O*@( zUlk~Y#2Z@)gx7~<+!map$IUZO@B|^`#c3K<(&bWg_yuXgrzxs8BE>h4O;dgA#{0`E zT`*HpjnxajqAn`Nt+h|Z)zpx%$aV9zs$gI$@?EAH1qtq8eu&k661026(V{)gA9Pu2 z8sQtwG80b1KEkH#ZQq4~9nzRzckxSeMcZ~&C-sFBMSa^G5}*OL+u5)Y`^De?En_nd zVE>GgxD0*QhJ9FIkquru7E?sUA)Q50WmO&K;XkW4Xut+6(_vHfRxtG=PSDaWMdBa* zE+qV;6t08p4OZE(NMret#~rpud&6#2);#`EE5b!v{bLMM7lb+3z3~XC4h19&F&`n9Jq^d8oJC;tKI=Ja4#of1dJuXlK zx=xulqw5t0{9{)bT>=t(7 z`o&wxsU=#2YPi)P^Fg3V^;5L2kd#qOwjP^SSX6k0&{-?yoVefoHGr|kfDCAX7MKC? z9&hp_m*k3f37!)!cT02xsg;HSIY#>>K`PcJTFsLo4d-CS~CRt{G#ZBO10Q{tgEJp5Ps}U;($r z-81k~rB*xkMu2tGSDm)CDlU~<38LthR9g1a5pn86H173v1q>mJ z$IQ5(?&(=^9Ku{DDL(-3&VUjK?<~ji7AOHL$AAMc052C{f~>r6F6zfwNb((z)``sS z_!tf^mWrieHW%?}KnK#5XO_Lcu#ARlAW3uA=Z*$<@kBJ}QrgA7zsKIaBfQC+y9Hoq zFs70)x z26@l-mWHZ(FFNGoqAtR0f6q^6P*7U8*Mp=9To>m=EZd2kEtz+a&N3Zm&-G}B_LAqz zT*!u%;jN65+wV>5+fmHLlkx}nb?^@MUW&mVY0ZUL=qXsUPFZ!FZ36_b-YB$gh zC-`{tO#l9G7X543efRaGuEH)&iPzj;fL)i=#@n+ls0~xV>bZGWw%h{-?p)|YIF!rI zaPL_Mu2&5MmE?E&@GbIAb|8CxF#G4l_%U-&w$EJ1k9$7nF66Cyx#PK3{9V1zJ=vb3 zPVg#22>e&ppu+F@pD*Cx7J8Oq5Fk2S*9SceO77$yod3SCtyqfv%)t7aDxAmB%Ut+J znZe=`oTPj7am9;rGJXIV0CuLI{t|$CFQ58X;}B6R4NDZky4XX*C#J8T;ey9uJTBD= zX6y?Nv>H_LHxF>0(?%j((`!98dc*r447l}!@OzTgtpW%`hUz34;zNt7aMj4sE0;@? zrd;Ldk;_)CRTdyWj(oXurw^o2B0G`Pb#5QOlqyxC`(;WL%u$_S9g7ytTD^TJSMp5R z^5rdM(Vh_{ic=@LUZO-Yy;T#MGFVHU7A+bzCdpBg4jmd;@LIE#r;Bp~oWMvED;XVb22y95IR1XNhkC;2x%%A_F!Pb>W2 zWn7!gQnUyvDsmDb0uf}87NjV|P&v3jv>7>UVWbg9cT88EOj-4kU3url_uW(D?NlC1 zN{IsAdPTVhpC}|{r3^Io!Q@nURYk>#NSxTXm4IIrcwj?i<+2W9&4E@JJ%^E2mv5(~ zHYAgPiB=qN$313Rly)VVR)VLTvKe3NkpJ@~m|=!_)?QLp_S;xruGZQECB$YMoN(f% z8*iNzc_(Lh`eWul`uKTeV!~O5Sc1#_DCBbxu0aSNd`u!Ab|~$`4my=uI!!OLz_RJ4 zw^(z{HRi!)dTFM&q*tO*=A47hG`7Sy(k;kr=5Np>Zm<+dn%@;z>;27&sgIs ztg@!4Vy(C4x@)g3J_D>Ww|K|Yrp9)~#}->?!7PssEeK?nVmb^anZ}Xk51?v!`Q>L# zItekJ9p9;zo_tbV@nn?&nxHJ2G5-v*$1Q&hC7O3W!UCIa#(6Vsa}vP9BNq!sPQ+;f zjg~%q{xc}dhHM)BLh4*Szw}Z#3rAQ%|`(vGdE;U3(4e zGcj7FYcICEw9B3?w!}Smg>~N@Pu`X8-M3WnWhFS_d>D?n;*5*6 z^uj^9>~dm&`U%{fUTO^5&|_Wv@X!{2NoLVUA}!gUi7lPkk4bx<*J9x(Z3)e;*^D#J zI`b?TkrrDd7d~_yNnB##NB_1L@J&~A(bI&WQg!QOay5Qv2qx%xN{Mcg6H=|DB?dGg zD(cg=(<$RV52TwdP9iCk#Di~8k&2D{QZ}4ERgHp|5S7x%Vnp4 zFM7%|^yQumap!>%vDz@(Du2_jLhLc|ANZY4_m zUCEEw)6Ck#uX_5mDryRb5g%z zL(3+E90bE#Ms%X_vM4NUF)m!;N>tkE)<;FsDO+KKq$T24Or5CGuCdgmxl%?}XS%DJ z9-|gHjl@o2>HpKS05zWR%idn-S*Qq{Qe|ZxyCi2T9Qa` zj5e`@cJrREsiQt?!_T;!MU0c#lVSm>S-ZT07pGv3v>NKaY-OctDwSJ&oFWvl!LGHT zQ_0!3W{dxc1b3gS$LydYtiRRGsHb8FN6$73VU0wh6h*}(AOQ)17=jYZ=;=J>ffmbn z7PJ--Eo~o}6;zz|CG%13ZC(4?l*Be}s7USLK9@HS`Ym82F|N0OYc7|}!awkx26C0l zT<1bpy7cfzI;xA|xuO+2J4v0qCDjjFLt)G0Fl#v>gKiY=rJ{X6^iQL>>D? zMDmFwI#5A~V;KSw&TWT0{A(P1v>1^?rCVu<$cdR81IIccG68!SpBuMlfk5WOQdE?| zFB2I>^AQP>mCR&BRAL!WmTsA-Y$y$@n6Vv3(}UkKPA^Ir#VSrQi*dom;PhFL>#QGR ze)D0-hFCU}g`XSsa_CL7__K#%=#?+X6j6@?M!w{zb~f3R`gmv`@wf)&CK3mHL=!U)}@McEs$RO z8voc5rtY5cap)_(G171B<~Q-GmL;{%(c<2;iaWjNLmPB1gB7ej%h#qB@VnCdZb1e{ ztb#{uBYJ^?cf6|%YGb1U6}LF8s=_64rD}A%9rYHbG!?E|eF|RaIEOTXB~xN;su<`9 zuD6al!}~@eK#GV&B`UECa0GiV>G07)odZLMLwvUqpK8Y~elAq0YvWY)ILLtojA2RD zR4Oht0X^U@sP2e>R$!A{k zWV5{HxR&|ba(=A4rCU&xA$rk~zH6qJp-NTX%3ZYn^|80u?1N``xuaXbFB^QvO1Aw9 z%Nw!duQ2`SUcLiR00S7v0HtpR@C^9<00h`gZzOYm@(-IiivI!Q1%m?V#H&HWew@w@ zrJ9(*gekB{Nx91cZBi4V*%R5s^6i*1y_pOd&{p(8A2?SyL|H$Wj9O?zGti#?=-llI z;E%x?D4ECtp_&beLIfG0O$^0}Jezkokw|pe0P=(bWgtY20te<42#VmDl>guf22bIQ zU;6!7H|<}6CED9H;r97Pq~Sx|wcq>2U!2Te{RJMNXqpsiR;Pg$EoH$E0AM7rpqati z0k%s5nny2u0uh;luk;cGB88EK5E0@BvoVk^&6sw**?$~@2R@lR(8CBG4PS`E5?a@^ zsG$!qo;3`htHI&vc$rSHS%}!-1L5H%*~A`7Qg@8niv%JN8W|zp5>rfqAta)mEn*`g z4QfQP-T z22gBv8Gf3BV8IbU!4{x`H9&(jz)RAxO%7GXI=%`zi2oPt6rb7@1E^FL z=LiMlshm`;i%R_hsE`Y6c~sN|P$8|@wa)Io++Kn|o+@q?-OBSaaZd@N)vexRL^!$VpIo=7ALB33aP zqZO)Hy%i7Hanrq3&o>HVhWS-M1(Z7kCEKln3f!Lo9Dr3?&Rs+y$blRXf-cyEGQf>3MBJ(r6Wrh7iC>J<<$y0*)|Ob1g$S_!Q6t6vvQ-r_B;uy8k6y$|YUer3AeVz6_*k zdYoU@V_>REccny>YA1Mhr+0p*3eZAXwi7Qh2B-Dk zr&)wCWWpjS0wj!(C_T_!@&_P(QnYzusi1@|k=iKe#~cEon8^@n&CqU2=44V)V0=b( z(u06;=6lBHd=5ng@fZ<$QV@yK5B1Wi^+YHB=O_iJ1?HFnz65U05TrmRS12fdfyRTf z=Kya&kiS{11N#g{bs{GkA=tP@M!AU(Ft!~p-~v2(##`Jda$^4{cy8x+CMlC@r+0#9 zd7dXb_2POG+x{5CB@hB4ROm6)j(s|yjMPqt_EIJR(<%O8etsx0%}pW3|i@aBTf zDO^~Dokl1awMBJ4r{Q5CA&C#9F~*NdX?p74p+)CJq#a)s<2NFyl3rzZK7a?*s;xeN zlY*sKM(JkV8OZYe70LRpQRO6ALj?iMdeL(n~yLE@%Z31r2AXlr2#OeCb6 zzM^t1S8vKGonGcs-l=rvX_gYJvDSip;Y%?*;Jz@cP~`v6r(i=%uEa}L)Qq8CFHkGJ zTAZuJ!#RkEwqn_vC6|7ED}x4xxKh_@$|^{qZW>9T;NJ6H*>YXC)q63~Q5h>mdZ?~A!ciF)IRJ@Rr#rFx?-eOO)c0IPIU!;S*lp{1H@8U!xF}@ zZfUpD%FudH(eev>;6&1zi*3fxBf-~f`s+DNLsglA6E&s=YL`f4?M=04*Aj`VlIujY z3~`=?r$#J}&fPruMrL8yqM-?mW`mKIVaRSL7i$0G{dvF@>_Hyvf#~jm6?i~vu%G*J z?rxaprz%FK#gAs~tpD}wxz?mWghVGq(kX4C9Ga+kh}o8PLI|x{qngt0ebBtPVs2JV zmywX*3PZv!gmwNyI8FrF)-H2xsZ35igi|FG)Sq-p*S4 zI%a?pMG0{&^m;8hKrD2!=R}~1HaJ5yTrT4VaDh?D>zYRF4kMR%6B%_X$kI##I3qT0 zqvww9=$7v3a^c_2EbGP{0sn>>>Th36sForEbA`kx=&suGE)4Q#1NGqq+K9CgnffBH zingMEfCmZT2qi2|!rt#)1Z#WdDSVD_3B&)H2JJ5R_HHMpnhX13-C&3evlkP^r0@o> zOmf*!0D}(mu%!Yp5UNXz{$t^fyP2czndl;8gH#e#`3BNEvD(Lxm1YRszc1XD2S zny%*7ajgcy1|!_u{f1%z@v43aGo->LTmmI50tp*}3BwoBsxVO?t$5YLr5q&5g^Sab z3O%|OI!v4Gyjiixm{dU#jzoguEQ2wCgE(dE7YofHCo&}{LL)zN+PW+6A}#2&)+HmA zCS%CIcJg|~+7OZ);K&CKYjIbgGV85!D<8)f3r`!1(;Jg<8J}MuOU580@EUi<^AHAQ zDXviZiP3Pw9IR{*ctBMGUgv%;9$Wu#tg;`F)V{H zRDzZ|vPf_jyW;XDs^hqjBwezOYJH99MJ?W%CR5>xzFYp(J9=XqD)430#TN7P<4P-AqgT`lhTONu5l zj=bDRX98u4g~S+co_w>yI^}Ybb5j0^HG>@-$rWX&ageZ^Us&$+mStm*hB{b+=$0;% z-Z2HkGkAJ#=vsn0G#V7rMKtq8gM`B}oa>gpnE?fbhf1=C_KgK)E3q`M_>#vA4|ZT{ zv<%(YzA)WK=kT#`Tb;2o{Mi4sj0Qr5J}*0QT*UyoAxEm zNTlL0GTpE#S9Y&mwo{LW*lN=wf>Slr=~(xwUX<$oK?WJZTTyzCdU`cp4+#KEDRG~5 zTI=y!)AKu1w|2ty9>_IaLm_hLFK5&4XUk-%nGSmlHu$c`D9(0|o%epaS_# zv8gHZe!u9G_(S!EH;m#h`VIG0mo;+xVsMn-KnZvlxoTNjH8|3OC0N27sDQ27stQ;) z1z!OR+<2|_z#PmtE7<=-is_{H9eJ7DwOU;1xl#x$01jlg$3PMj?_$-z&^CM6wAhf% zCo8m7C>;@s^18(9TpFLSu!}Ni#lbG9e|va~akhK%wI|eqdsTQ2Ndr@P`Iq+#5iWT1 zN_nW@O_#smo-f_3bPAb==7_9Hnj37Ku26>um|B8(i;K8sVRcfD3>h2wktFy6hpQ&2zq=M?eUQ^7C*zYlTAIC1Fn$NJ8oio?Vw0R^wH{GM~2cd z2o6s5X8k@1J`n$VM2z|vxo5I(Dc~Bqo$GQWQ_y`pIVm4Dj*SgEXnR!=x>fj`f8dUJ zTRS`c0^5cXFx z^~}pW&Ex;E%{xZni)v?p_0IGBUI5kKOUtlwDf{~S9ww36;__@akq&F6g8kn={^x)G z3;A3RhgJgwK7sVsku!J@A-QbT7&dfBZXG>|_{!nZq$w9Ze**E*BgfEKrbUP#)jD$q*%v!yD{Nhc62JM+LojaA?8YOB}P*|{T+3MA+*tKie%++&x4%^L_Q+e*Z z1xx=_r%^_cD#iBotGRgmXxhX%6)mtyhYV3#2Cf=JiS#Jq+JsRfM~@&yk~DeDC#Oy= zUrLi%R%%t9z_4m%NtEj^rPs`zdm8mDRmFj|a!tAvEYo;1Yf42sRV`b$;KIqBTk&qj zjrKYgG`P@VZgTYc_4DWNUvS~Wi5EA19C>nm%k>FduGe-#gt&7zbWOM7DObGm(wzm_yZtq(%`Sa=5r~ge|etXM-C*P>|y8yux?;(RCs^}uw@bNCZ zkQPw{5>ILwDyYF+dd4u)rjZ7ko`(7mmI{NqQFEXK6fYU{0P$TN^01o4`!qXtES&=Zz|vXL;D4y%bn4`~e1#!*N# z5k(bQbP*eCU_?tx5G%Yf#~pk0kt{5OL~Y2`!ift>*p>uPqJjuyh`e>oQ!hRD*yD(! z_0S{qxkUR5j=4vV^QS!l1@!YzJmt!6yY3KeGSi19`jpgC5w!$ zmUE&d3tX~(j1#ld=v1vpQI%A%*J>PuFxW1sys%gxkzE#FVJ&>A*l}sX%ryTrlT|6- zpt}7wT!g_bZO)fcBa$_Bca^O@MEAm#yisf2m?Kpeq_yKz-5Up^@zGmS)N!USnUDYU6B?6cFj&Kj3%0Xv9A}lxW$YD*Cp`j zV&_{F=S}_(;`E< zXpCimkq~|<;~8yX6g9GOTUvReGNu9zIvVnhGNMqnDC8LHX>A%h;vm`vX~;v)LXqJs z;UjZpyc!Nf8!|Hz5{a3_7!ITy+K|icpm@X7b%ctyY9T$a_`2hfj6p*b<~Db;#D#Rz ziOocv>ZDm6a?AsZbK~6>DcQwKWD*iu%Zb&1LN;yb%YmbC$<|64M{8x~Udk$1P~>Si z_{qsy%J`c=S3*j+HPVET++0T1*^qEtbQ$j?i9GMc347ktd;2oiKNUC6zZFbdB!XJM zx)!Ht{NkU=m_@dxG&p(gQex`NSx17oO`n=mW59Gqu9*KRPUVnOXz0v^HHlLxacJ|W zp#rDH#39j7ozAGrVO6R;Mvteqjv%?vX%yMn5MyXGo?AOcV;s}8w%TY}gd3^iaB`N8 zI>w`9yG1cZXt)lRrCKmj=(3#Vv?}3LbL$W*UMiZKv%*uJYb7i`oz}FKsPr@>wbo0p z)wsN73w$@h2DA<*xwQrMSThw&WeG#VI;HD`i>0XPkQUXbhVD~H11GKYk=3KFimL

L}xmXRGw_z@hE?k)mNH4MlIZ0USUCy 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

4mvsV)Y5xvTP-LF%*UYPPl2OpDuV| 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⩔!o8}u03`>mWc9D^n> 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�)8|}2$p+`M|;x(=&(6wGth4oi`x+*FlcJAo!OTvZ z@U=gFyRuy57Kk3Y*Qr;wt^ay(JAEv10oMpVpy7qiJ^$Qu8l)IqiW*Yj5JMKOpe5|U z8DEF+!r2ZDae8m`*Kx?z!@DyHalqjR9gslci6_P&1Nr2WA43Tkb@<`;=%t@t`ru!b zk@(}4XWn_}aj1e9b@@(;vQy4OEh~D&$tD|e*bcQLtfEqq)tmrR@P2t2U%#6E{rBH} z?~_(czS5Keb;N4yb012wq7tga?=28qRY(*>LH+;vYaQA6-v$@RlCI3efa%L%``#xk z`I*pFm&+UtXix+fz7U2lWI`NhD1{LWz)ihci;}S7FLG#bg8*a~ls>o=0}5`09Yi5x zM8ygmG@tWW!j?GDgAwGRygFjXj1XmzOyuJagD6A+!m2J{(W61=Q4R%` za8Y)m(?1ZIlR{Qdf{ZFj9~)VX0B+?eAhd~Q5NJt129k-ecWv1{DJ`v{8#$^g8yGn%KnRHksv3G0yQQ$jl=r|B^e|K=O7%S;)C^5;k-BQ(k|8UF?8JjBhg`tI z&gqf~F^wq=<6y%PObn+LvkfgcmQkH-l%xGK=)XXU6jfrxGxlto+g>7|aro>Jd2m6) zB%lJB^?(f7%qAIbFf$Z@Q34Ur00~GS0<)ggtQv4wRgXq9tZJ1EOYkZfBjAEOG|d}B zOsGa?a*B&&^k5Rz1bQJ(_LX0HqxxSIBUw-ffgr61?+J0 z*`I;1q6*OqK?gXX0wriqt8hKu628iT4&Y!4PSEalw+n+5EZ4c(Q(kldL54Amfw~;9 zE(?BFg;0F~t0?(c&COTYl*q){z-#1o@9MGve|o#fRb7YC(+ zD43xPIo7d`ryv7ru2IJ1<)Z%=!T8QZ2(`p_G!K1OMc_IbxGVb|aS)9O;K-u*Cypw} zub`Y1DVGw-?`!abvD}s?Pxwp>Yawhm+~!_-xD@pT*_1gr#K&etxSl)-K~^ly4p7mG zL5?mvF<|2~>=@BKrs6dPt<@oW00a^cBMgpgN;_NmE)cF9cMi1IE(1$c2?p~}*|s9M zG5L^_v#fteR#+}ojT~S$PC;c*vrx}tkHr*1#Zf>(pH&8L?@brQN5p^*= z%4>$4TGL+pm_Yg*#XrB8(O6X8wvm^`xX#Q5NQlC?r%-NlPaz5_KmiJFkZmoRm)prB zbfhO;X;Rm^I21V_Lu>yfqKFD8G#Kra-xwoeS^IXVOYKiz2&PPd+XzAXEKtA!)9QbY z?;o#b9G(BS*o5nPFeW?V!!zRVrcRtYmcyKygDvb0)3yd2S{+6;x$H)I+_5eBOT#fj zQJe^<+7Y<64YKWpB`m=QU9DLR-m2~6F;59f$iWU|P<5-T+Xgpi`n#20vl|>8>D+Xu z94n1*!-*y|_>sl=Zf8hP(ND`faeJ0N=_+N%`rt^`N~uDK-$UYvOD4%*xjw}Zjr&l+ zvTmkPjI~O_{{5s2(Rh|s$Z|Hj+|3<6K(9FBr8B(me=Jz=Iz2UO?ZU7U?cFlzfYs{1&|qe6xrv>_Mt zgFo8E1vjE~_DKfYg$9Yk=Q1wTa8U7fFl2lX2wSk-&M-2)AMhZtO2=(f3`eFf9@5PiLdBDyGVxR=_uuyD(4!JGqY;Wmk#`d%> z-sCC|53vN8t_L7+`I=9t((qq=&=t(b8Puj9=%TnlrW~~4-N1idH`XXfjU?hf-X z2KrEWX5>KHS{)ayVW{>X6U$ns) z2C)D9FsuIfO8^h98BS3XT%j2hEFtY9%Rt5QBfN1?j&Bh=&;ebq2Vjp-nnfug z5XRmu28wSg%Mk;VauI#t_qsCa_HhFG(a3=Ee=f2hiL!rMQX#8C)Qrg!U$Q5-&n$x| zB{NbjO-Won(aaDJB8?JDQcT2h&@As#BN1{h53DamZ6+v zK&;?=(&p;2e+)A($-yO&0x3OUDw(qNAkbO3QY(SXDw(AOe9r<$a4KETHoNjF8G!!* zARqz;paCe2F!L@Y2{JV4L0pn>)1*v;NR4fdlO#Fqbr{Pts{u6s$9?+2ISoq~VQo1* z3LmnQ@Sqceq|-C2Q;3eU3N4Ef^9<|K zJdq4Lk#iwRlPiO-4s8<;5it?%5i0qR+XyWYd7!JHvNmlqAG-5{eUu8!z@Xo1ye1XO_cWHbL*yHZ$(bp#EC zE1R`WmDM!U^j9yCP@c66qBWd=lTcg1P^rv252nc?)%(zMT!NH95Cbs=CsX0oU>EFU zk#kW+^g3G>WdVd=>_lb>)_>xaIY(wi=#@z`=L6uAY2(ua_!Vkh)nBjKeiGf?*0w5!lI_UaK3Q9uP$;0LB4$3S)gn2$Uw5-m%X z%4DZRa`p+YMsQE1)s`?szLZFDwPp|XM<1s|YEB#4Z*T?o`tpV3NCR0QA7TMD0K3pl-PTPk zgI9QmcX+pwK{0@MlXn8*u>?>+2gohQ(7b3UczRP9gMzbt&k|cJF{oD7YZ)Urur`QqmS=hPWh*yCmP2L>=V}ON z7clL6V&(j}9jn187lfCcyj zW_gxZ^#ob~mvdQ{TOb2ul}jyQiy?$N8kv+IIc*}@6%a0!{R=${l*LGZjHMR`td0Y4 z>H)5q1Jqb~h1Yly5qYpx05*{=Wqv_ zpgrbY5c-|tS=Jg_k&RHJvvB41cZ&a400Nk$TYw9YXAyhArP+X{YnlzXpm>ac0t|ov zVApO&`U*=Lp$xiRJX)bcF{1lNqz7Y+%K!}~_}t132U1`KQs4uqX<69T>(rK;GLUAz z>H|I?1*V`1%FUe5S&ryvw}?ty*189C!AQV`MP2xP3<+?j^I%WoBMhnj^rpBPPp)US zQvGgG@mi^YsC^gDD1rikkyB z!XONgV5fT;m<5(wn%J>L0=stx~|o%*Q}?PFnJ1*-bm&^BX#6)f`+PNgzU zZ9oR78U`fztkF81jY2PA+gtX-hzVAR2MlBa(6F`jN$Ml}Aj^y9xaN;yaJ$8}*>* zwoBN-AKVFe+qbhi_Lg@39>WJtBLQS3Kuje82v4I$6BN-{)QSij`d=2E{u+Mynir ze8pvFq+i_rPWl2eK+CtB%V&TKUfTZ)y2=KO;0b8jzu5o}@Bj%yfT!aG9)xhMiz+#p zJg5hP?|NLtr##{C!M3AW#29p#kjet-(nfYQ?d z$3%R3Ss}+G$~08)Jfa+Nk9@rqZb)MiubK15SsccJOQ7p$^l-t!TmjVaS=2=@$7x-= zi~OLBITsykaL(?MSMAkfeb(K&)}N&EBmfC)x~89i%%4CBj;;q#zyshm2Xa6M%G|#l zAq+Zzr(NI?wqehI9bq%7CphiSi{033d?5Nf#Q(eu(f|(NKo8Dq47|VsE7Xf1G~SR$ zLSw-8uxfeqfZz)r4lMoML012cSb?PFLj^U30K23td{Wugx5$S`vQKb-mXp5!&&li@ z*0WLFU&SLRUVRPwlrp}~03U1L4qM;KE(xA@QtFDa9-!}fajIK_hKOTf}R2>paY10+mD_Az+LI{nCZuYEGE7q z(w%|2Wa>p+$K)OBDKP&ZslDrEY?}sU1A$NY$m{IQ;L`0_?QwwNW9j7&;^EQbKtSW4 zBVV0YTvG8~o?R5lm1+ooc0Oc7O; z-@lC}xIWyjOyinG?teK-; zzoh#PK3(`RWWSGUZCIUy# zYpWgBT4SoQCLU!T&iIc#ou#xAdzz7WVvnXdwjzs+rMTK+jLAsjc{b{1*Lghp*q0?P z96*2sS2+KN<#O9`XMh16gt4U~2PO0!Upgj<*^=rtX`Xu_(PR@&WzA>CAVU%Ll@~E! zfB^_0q_DydaNt?s7%~8wLI)stP{LL|EJ4PEfBd0G8fKKCA%|?CX(KLl46F^0E)w)69Qr=q9K3)0t#920O`OK!eNFP8mhHvlFWYktdnrT^pab^Vni4@ zB9H$}@v?UukbkKng+7X0@b64oV0t;2plB&-@YxZ)+<`o?iNUXp| z!VqRnF+~;kj?q=$ek;)w*MPzhaK8G=utMT4aIL~qJ1D`o-;#$FMHEwLU{i;jf~W~D zFt6>~$ES@B^5`-C40?^6=dxSsnf>OY>8F)WdPJy$E;Q?IyDl1E!VxzI3m-_(!45_k z@x;~8ZN~<;1ZmB+4s#Gk%QqO^zBaq9t2?(%7QisX5HL_NwGv7|i2f2jEX9-z2oC>F zxWE${nmFMp-0!ptGMJx!|4W#!1Q~oFa}}czvrgf;-SN&NzxtR16}UjvHA{C9yvvgw zh(QQ0Fn8;zU|Sj(5h;=D0Vv=>50K})ZV_Zm<;uriJlGNKY0yL6Yk&nv00YA1Uw=m8ISU;`99AOaM#Ri{poD-WKF zR3OYCUrGc+jYIwsO;vfe`SlAVN(1Rcj(E}j(R}&>UD8qq;iAXFZ3{pTz6K4PNhdofr z6|bm8E^5wVAi@}VXj2*2!OcxagG&Z!227TDux+=*rR#h-5~E?zVOpdTqhCHtiGz0<&xBRXqCDfN0tpb%oNBD4N(fVth+2f9%7UE(rFk1)_Uw8F#8o*a zBGHP_gQB)7S_Uy{8)OFaXbjaJL__KhlA>u9EFc$l8m9si=+p!{=&4V2U;?gn4G*O# z1ugQCQf4YsnCrsTLqb}Sn648(k<20f@~6KYm@oz$cz^^V&`y9N;e7x8gOCjl^-q90 zO$J)+feln3g8=0(1ze;UOFQbRhdL%3FIq=G>i9tnI#Z8|gySMT^s-g)b+LX0tVd27 zsyCVnjz{aLZc?;ZzE-2LfGq_JsH6Z22z9hVrGRNKKmi4Gi3Ozy)wCu{#u>V7br0EV zU;kixJD>$XJQ-ZXGWeEk*i;j=GYpU)0Mw?zWdao&D?q3_v{6 zl9mD&K&=7_U;x%a3st`|CkOS57{9Vnx6QR`Dz$h38-^8$zLozXCaJjGv=SGUM!+Ik zOG#bpaul&30^>(_HnNBGgTHCqWin^hF_4&3qrKdVgFSk)oXuFKF{`FbWcHCA8x3hI zzSU)6EHW9>n0NU|Mp5TL*9dH&2663jTto1I4}^fg1xA3GO+eIABm=3Tu`!OX=gcKx zBEL|U%q?w`j4I$@&m`!xpZ`pP6(~pr98hSS08N4vEGPzyZgitj@Bs~I0MUpRG)_}6 z=|8Vv&p4<8E8xuHQy}o8qoasOiR{?anba>old~&GeHv3wG}W}m%&K#&W46)Obg~}l z0+Vrtvblf;GZjfjIwZp{`r^(oL=I3?^LhkWxp~ z*P5v^D_D_-6>KOi7HGG-Ef9eSe6_CLtM0lZ@Bj`>VBh@aHv|kYfCjMp-2{iXyyM+& zfp2I9c{n#OtVfa@cU#m6%b)h_3D)%|`(d(FcI_tZ#_xZ1?)rS5UE0iMO(|74<_c{u*-N z*5n#rdPqDz=iT7F zVK&Gjg1tlfk^-NpL8EO*1hf6c+&MI>uzCOnUT^{EZVI;m_@;0D)^Gn7Z~!QP0oVXv z=X)DbeX~(_+XXT^qZ--Z5Dzg}NmfBEAyd1gG{BKe8i7tHGcp;tfl_rIa07Ymp*Cm& zH!R^JAovgX0Av@Kf`_4jQRPf77ba-73ghqOZF(3mZL85n#D2RoKh-fm2Cvt;Mb$`!ji<=0D zop?;KXpM3de3m$ijW;Y3R$mbGeMA39grP`tHg|KSc#6j+kE_^+Cun2i&(63#d* zkx_Ve(SKK`i^W)s(3M=ubz%rCw&`HkpH)f4p~YHxsV~ImBe+7S4RSg(3G=tJ?T(O zyf9KAqYVKW8K*XVSBPZpQD-<~moYXgCNYw^5L0X!kUcnSaS4b@MVEJJm?>j27-140 zmkVo2kt+h2Vu&V^X8>VlnPLAH0$!E_IiLeMupka#17jeXUa$d&lyv_ff=7lA<)96R z>6(cd5qg;tjwumsIV_RM9#?sgUpZpNwMxn5mAr{WVHp5psey*cSBROHxG)#IkP&|A zmLxZg$%lCMaB*&Flk;#S<$w!&`J8`Yo446=(`k6{1uxf$oh#BJ5y72|`JFWxoi3Lo zlo?4=jk`Va4d zUcthm*y*C|38T62ptb*KqBUwBlqp(Vb6N$aq)VCsL&u+!@}E^Gpnfr<9!e}P+MqzH z7bGeU2&#@9ag`0A0lY<~Woo7u3S!b_rfbSub10UHu%qf3BO!VU&bg&txPvxnk(Obj z9l>Kdc$hmH8-UTCF$$>MD5pdAf)O->OBG~yDX8H_s6YCkU#O?Wlq9s!G%kP~rj?{i z3aa@zbS)s7O0WYmzyjkW8ZvXJkUEu;x|)=Fr$HvD7P)_6ngUp*tGkL-_md!PwU9pW zRw3{&ylSji^#N#CoQY6pkt!G=N*C|Rlp({SfLW4zQ8PDoV@i{)+}065*k;dXI>tAZ zQAQ7is-<#=e=7e1nJYMg+r~@X%B^$RWH-8!uj3{kNv<|&t_*6Z#fPYnVXgDptswCY zv;aIIa2=r)Z4K+N(l%`lU{4&71Jh#(M}?8u=aKsgjr}UC>Z*MKn-~Kd5s$C}S9bt1 z08a#2EqbmeVW_)8B!8KlF`|rvBL}tUdb_DYyNZFeP;xB?@U{;Nw|4t}-w`)WTP+qR zqY|9NxLAQn;VZu58@~L30gSR0mODk}%P6WuzV92pC{O@sM*^d}qQlFa zU{os_b-b)0sby)FG69l&;ivbCuiI+2mRgavYp+Jrzbx{<06ZBMH^DOTtp5B!#8Sq{ix!Y7OjiSPqqCIJ*+W-koGF>G2A@Bu$y3EYqj-tZ0Tpbqcw zyCDBzWQSU-*;`G23%KGS4vC-vS4RMVq`tvAMJ2!|jUuzjCB+y(#ZL^yJ|MsJYriNc zGDFOquHc;C`n1@2oUUn?$qAc)+Qx~uHWsC^?A5_!d%;r4y=r`zZ;YoZ^Fp8_#~LfV z*z3VSddH37p?WMb#E=M$;K+}h2We0RRqz86u&|em$=5*vQF8@vum_I-%8x)CtY8l< zD74xq#-8CeGRm$2*$l4Gpl7he0dN3Lyu~vs#pqkb>wCpie9Otz#iC2W)Jn)AYC$C0 z%2uk(YP*QCLcr5hMi7dq!m^%!2hCI(o^slrA8bL_oXtVv3XT78 z2J6huXOIW)Tm>IME?q*;^-Rwna0TzY2m8#=`)mp7@QM}}&aJ}0U5m)+*$k54$Y3zb zwH&j;IKHeTzU*59suZjg?Y{6U(eXRK!c3)wD=X!Y3qV`WI(p8_%y<{qBBkQHZ8V?) z4AP6S4%FS{m-r?6G0u*ghA7WY|Ykry+M-D3*FF+`?;R`xSor-lxxuoDMXoTNuNvC zC=j~!iz@e9kuz;~yEB6djMO8GmvekGu&I+klbRk=m#X0q+VIu8;}U=!*sT9yu5(-w zm2EVO+7?U3ON$M`j$O^G8WWOz(#_Dwj@-^oT?Hu+W~_agul)fm;K^70$)oJU8pC9x zy~dyY*m(gGq@5UL-3SbgvMPJC$Bk1R0KQthK21@x$9=N^`ljBX4P7`Ap8b~DFw*+_ zI!wv2lRd(L0mkc~oe-hfB{i)f3x>`B%QbCl-kr>WJ*bCT-XnG19GTvLv9IL7-l3fr z@D1M8@XD^R3F_R`?|cT6tl$f-;8)<_Z!p{a{0Paw!?zvB`Ay6kSPktB)_C!f-wheU zP22&{0J(as$LgzWMNnO-0>oy+vrfdr5z2%$18e(zIrfwPl8UO~4EDP?S=2MOs10JnDPRHQgs_@+_Su!8fsxNOXnFXoW!Z;jvNbq4(XL1=&k_lkM7&LjWfAxldwA8M-rE**~cQ& z-)ZjQzrEWhJ>SU=$A*W6VC?Lwu9C!_GR98Ui6HLdKJJc8?uq{(%9aqy>(1`1VByCU z!Z7yi!hXTtPBN;|<_1}zUx}tu6r380>wDe^uE6US6z?R%-mpyX9**JLN9~nO*w;=? zgo$hQDud!$puKGyFNuHP9wcmhBo(~0fBLSO-7+#d7@!U9-HjR^zaqpy7sPexMg z8-vH>tSj-c^)WyLUkgg~UweN8P3_5R!GR@rzykISRM55|(1yg8 zWDlK4AM3I{Nxulc|9O1x!?-i-M7Auwl4oKBz@tvH+uJ^0eN~P6U5sl zX1?`CD~=2#ST0Q~Si1774%3n^r?VnoM*TpU&vd50@V!pD0`BS~{`VRh_!%v}DDd=O z8TF0O3W>iXZa>DeZ}7YnWD=#w$~j-P0kRS--sK^QK44UA`Z2$uRp+O)Cf&~p8 zL`YDB3>6?yJcRg=!v_rsEhZGG0Y{rgjat$B7gFTNfBHf|+$@ zRhvDn@&uaJr%e#3a7%)>vEI^%F^=j4&8XO=%z`$(Uvk44n&{{WZ4O2*S z?AXfPW|4YXy7XIF-_e>WuLf=&UHWvq%Waa&R!#eM?%lnUqeq>%$je?e6Yt#o`E>T} zs~@F@-TQp{;KMi9H=g|7zT>S&zpFg~qk9jj?C3*qJMhHQ@3PF2`zt+_HVG{>Ff<4t zLk&0NutN_&1TjPnH2|Z+;D&2(rBgzA$v^+M)FW@e0rL~fI(o!8FhKo^hpO7 z^B}Bly1OKlF*+KvvJpoe6XcOVA06xuy%!PtCrS2>S`w?}>{%?E9G~niN*Egq@2a8@W(KIp?JFLlWN16Rpl9d>Uoy(H$fGNm1p}#3UC?Hxm@VLIo7HJ$+P-2_<((Rm#-* zP&JFw@hZjat3NYENhM-V;VZN@V8|$1X{V*OT5GSJcB9ZF;no#;goSm_M0iODSG)|x z&(lfKm37#{a9YRL`Lcm4QpwE4>K*@H%sZA+B?aUZx^^>t_ok%e?T%i#!n<`meK%>f z-(e-JRl4jz%LbW|?QExn`Sh#yMu- z8j-}6W}2yH9p@b0cieJ_RIVm_m}74wPeaCPI(oF>xW0K99?zbAzY^NVl9)CM>@&Z% z*hi`5tGdkly8KIPh+XM=N~Oh?@<+P8MlwExpIlI~ta%|h?gqs!=ae@OM?7)G7iWB1 zpsOM0YQKrIhnPf+Mmj>Um*$+gqn!4fOT4AiJ8iY^``f&u@$P(crn~$vrO)M#E=<$8 zixO&*+-`OCDMPmvbR|cxJ>LJ@70hYU%Csig_rbyTCX_@Pr@ngY50~We+$pylbG)fS zQdB@EyVq+?Yg!Dhy>SOt_mP9%^wM`~eFfWhUr5{*zs!ZIR^YRX z(-0Uy%T$bij^Y?O0Jxa}=0bkx5tXRYu`F41(1RZYVF*FUEWVsVgdZd!UsSk4O>oPF zFO)y9CWTLpcEiQ3~KJte>(oq<909-($ztqtk zH?gA~@uas~p_rz*|48FId7X=h_6?!H+QTAGKLKeFaLla>-!vgbzmM4l`ON=a5c zLIXdb=5wmT!+E~3M#(DPQt~N5Nr7u5`pS$g0Yeip3e<-s^%6##^T3S)t0(3HDc5SK zmGYT1LTi)>O33$?UPaLVr8t4iVqN@^3`Wo*1sbSA*o;}s zPXctbkp*b&zIr^!?XxC(QLNH3_odR3t(>SW3F+qgOV_FduX>eT{>URwF9j60pj_!{ zkLOG_2`RRcT+}`7S=*!LO}V4&tvxJZiDV#y6?^ywIPG@YwW9O5sZB0IztdZM@JERN z%BgXqo6YlDm$lme0j6&?(K}f#O1|+WZ)C3|nCtRZq56$qe{(8bUIsX@_PuX@y}<}p zbe9&Ec!X7F5*Xb9w!XSmZ<(ALp03DL!*DfJQXv~z2(y->Kq;{WWvQy73YV)Z4(x!h zb6?1fm>%ve$Bel;G_iR2xGi3;Q}L0ARV0HO$w)>+S3%YT5{jZJt%_q;sbgjy&$3L3 zRE&j&D7#$wuk+V<%cS z#N64l1RwDTWH`CI-lec~?y1#6a}K)Zj2(g5JRk6gS<=H>r6w(XTQDMd)A;>yE<&nM zOaHgh&2jMmtCM?bwe?v>lqn>?mbsxBFU<^1vF^$m& zPJA5*Up2Kk>2Qq?e5nPln#UdyRa!Wj8;yo?GWPul@E*$M?7p#$VMWu)R&mp2bVX+T zd~>4XT(EW~)JhGu?fO(B=v=dS(WOr0v8Z)eN$)w+Iqh_zM}6u=m!eS{E--j)TTI;x z_Pz7}-Es@F!V-IUgf~)_GH-aJ9Cyci-SM7xyYIamdiOit=U5YXzylxf@Z;dMRCww5 zaqrr2h9f0EdCD{L>8{YmIszYfz;E8~o%cN7?>-&Gj}Gc<;*P)j9rBfjJ?t;9 zjnLQL_L~R&-SwW1$Q<7ArN4VR44?YpH%Ij;VSV56{`%NA-;uMw{oj=zed_O?^oh6m z@$umf$1gwf&TphMZnz3ov>e~(k9qoO!HQMT9PX^(1uo)`3;NgJ{`bc}{d19v`tRTW zx!{EW6u|i7Kluy5{To1D06+mmzyzGX|Jy%TkiZF~zzVd$3zR?=G9d_r!2H`k5Bxy? zTqr>N3&HzazyuUQ{)0dP)V~2NKnLW&{W}E=q`?}@z!ECK{L{Yv6oJ81!P}qc);KM%jLq8nDKNQ449K%2)LqjA) zMC`*rtiTx*Lrs{#masrTEW|;yL`lTNOVq?aL_|frLy{9KAE0I z$b&sdghyBfT41}FJ3np+2mm4Z1Oy5I001li000000yqMP0000hEk>y_MO-sCR5d@5 zH9(;@NliCCK{!2fI6+`KL^D2FU_Uu}Kq@^!TTeq#zC%P`L``!=LXSomPe(&|M^NBO zJ3&inkWD(EP8X3+R!UTBXjEENRam-JT7FhhpjJM7S36KyHKkfFOIvm{Ty>3IIG|r% zw_!47V{hVPLzrbwR%Uv5Xl;FHQ>JJ@QE7zaX;M;aQDZOfx zr`D&Zr#q?gsi~`!l=sI=lR?yU#%GwAO407p($h@S z`&85OOVsnk)aJz0>r~bIf7SiT)#+Q-^2XQjW7zQE*xOFo_hs4qliB{(+1*>)^{w0d zQ{4L7+}%^%_L|-Qq}~6#-u%bj_Q&7&&EfV|;`UnN^;+WjV&e64-~f4 z{Nn5L>+9>=?E8!D`^xVB;_mzE?)2&J`HJ%W)bjt{^8e)W{DbrV>+|=i^#7Ih{_FMn z_4W0d_x|zs`J4Fvl==Vd`Tz9#{r~^}2>$@v2^=`ETeo7dPA!sjDpoOV+R&lHN3o(s zivKQZ+{m$`$B!E`f*eV*q{)*gQ({!fvZctDFipOUN%P~(nm9p9goyBzB!&(p!Lbvp z9X*NoCJHo2@L(#2#VWRwNVTfft5~yY-O9DA*RNp1iXBU~tl6_@)2dy|wyoQ@UMm*+ zDai_)R8#TMJBsgI(}S@XD%}aOu;Igq6DwZKxUu8MkRwZ;Ou4e<%a}83-pskP=g*)c zBTafLN)$=mCTdIF&hNQ%28;PbHx*sz+qiS<-p#wW@87_K3qLHeoi;0Yilw$=XOX_8 z27^h8b#%D(>)5kv-_E_e_rw!Vo&Qpf#||F92D?cQhOgWA_weJ(pHIJj?um2f4lRU! zZYWN0C?bp6jo^Ag$E`$-XeAw^ptTJhA85QB$l`v zI@6_gkR&Fy=;Dho#(3B%5pk1BD(=asXlT&7?<(51qv4ykI;`yZLbeshS$E1~73J0c}Y07D( zl3e;{fOagZs;Z5W$R`}JZ2yLb8*VV_=%fEpb_yOqbt+y$lHk$mWxMw3E3m?9wkw_q z9qUuF0n%D49MaZFD~lyA>PD=Z%}VRAx0aaTsga$+Xe`b8+E7Ba5_@jC>aq*&Wac)c zZl&nf8|}2z(rT?6*pm1!x0!kC#=PN0wCbPc{=50xZ9){cV#Q>fccpM}&RFcTZ*2QwxcjX!ySsNcIM|9a z&Nv(p#iDu1?G{tH>XIj~t;e+&w*2F6jINl_RBArG_H=#=(W=}kuPXDwv!0!8uPe5- z?|)xiE+X*%Ef%a6XVrAjq&4 zz&hpWA&6*P^8XyD7|d}nh|~I$`Dn#0&C$qao-3lXE~pJvDba!$?AO*K z;t8#jLdV>Ug}ai>8TFUO$Ox;38jD`Xj5odLfsSy7DWRPV6GUqzCWEKa9VnTuvQ4XUMN*(Jb$_HlG@3nCfWEab9s`P_9|rs zp(!3|ddFir_Ia%443#g896q(Q;Lb zk|Q#cssGHwtZ{Y;(We>hg+_rk=AXGU=y$m1K5iCfaKj4c7ey#2#GrC|b-E=l+3CYw z*6D%`oZvS*h`o#&=AQW6)IPaW#>T9WlQ)D64cXYj8BT|pG3_4{3nwjuYO8AjbVD8o z$2kMKt%@71q82@h$HXkIR)jJj0{w-(R{iU!D_vhdCr3Y;^3O5(W8qgn*Hy7%H9G_2 zDXk33r&{dOr%^f=&$4$@lOWR=UtzcResiN zls>E8V`*xx^dY8qoUAN;v~|I!8Z>ol70;_a1rbS<3=il^Ew^5o(V$#4uOZy4`11SGJZLDru+L*p^a&MBs8$f?@x0_BkaPZ-* zTHT<~N>Z<`A-!mwx_HjxSud%$T+9X`Sx9XN_IZN^uF2$UNo^1kd(%>`RweT?Hlmg? zJp-uDDAQm4{dcorEL=VnW3Y7EHKiLgOj}VINc5Jjh_y5xwtjia-@d9*u~QX2J1klK zUT3Q_f^5W+i6nkU8bqse|$xvi=t6fD*1it5u;o1LVjFw8yFRwEm)#g(GyB=lR*bWwP3>q;yV}@R_O-LkZDDV_+u+Xi zx5G{DStq;P=vMW))6H%xqa!`=j<>w$P49Z!``-A@x4!qy?|%FH-vAG|zz0t7f*btc z2v4}e7w+$K*g*^skGRAqPVtIc{NfnTxW+fm@s4}^;~)>Y$VX1{lAHYGDF08n%2&?v zmUBE2mneiIW=`{(+x+H^xP;DkuJca#{O3Rqy3mJC^r9Qx=Q{^F&o6=VraOJ+iAcoL zr#|zgC;jMH&$`xyzI3Etq7yo&y4W2N^|3qM>OJ4O+Sg9>tMeS}OgH<}r7riIqy6h_ z&%550?)JFX9p{u-#VC}ajAbl?@P%b*Ifhlh^1hYHw- ze|Qg8NQi+bfrY3KR``jAsELT!gKvm=^1u#Hm=2E!iLNk-kT-^V$b};)f28P!h1iKd z=z*K~iI}I0rMQczsERVkik4W1uxN~y_;|FKiNM%~g?M?<_>72nii=2$4ycS|Scm^- z3zgT3%UFQoV0rhT55ZW0qqrCJa1ZCGfuqQI@*s;vs0@;53Emiw;JA$AD2)_oh~{{K z{@9P4*Nzu>59`=@@_-GNs0^=YkCi8n;V6#e$c_^jkN}B!0=anvX@T#!c?o%p4SA3G zsE_3Mj|8a?>UeqUxRDiTkRPa!d&rP>c#jYnk>f~?)c+`jD5;WrL6Iyefi8)V+Q@{@ z=aBIjktev1hxmh;*NIIzft{C=(3pkb0Fsk94o8WUP1t}-`43NNfnRBjnkSWM7?ki> zl`$ETSXqfen1yV4f(*F|u3!smIg+zzhCCRIqWFt+$&{Jri{*F^ z>=1{|$c4-hk`GygLpYL335ahfgPOR8_kfuYxS5P-dHt}4qFIHe*pZvZn2kAvk9n0@ z>4KB_f^K;ap?R4On3+}RnOqr~xcP*(IhvwriklaWn1`CFIfAQckA10?2k3;i*p9yV ziDapUrdf{BNSwv_nBBOR%6Wi(Sc{f7n7YV`g8w*}nkSs*iI`2vhP3&apNS2&z?ygI zgq4VbN|}lw$e8z;pZIy7jj5mhnV<3SdBWM1Zn&H5DTD3_pRmb*A_$x0sD(mEg8zw{ z{Mnxqs-M~?iW>TkfytBy+Me%;oUOT?e3*%t2a4{Pi-Jgq{)m_x`gwu4o*(Lf?m3g% zNupahkuK?uI|_{lsg5aWkUx5mDmj)HxqahM3-FnbZi$bs`Jk+L4UZ_LRO**5SfxqH zmBPoPNE)JiIid+D4)I`lV7iry2oB(gr6(w*%ISw%8ho8Not`%iUV5WAs(^30jwXqY zJvpA3Czm|Ac|b~}Z+WD{N2fOGq<1QjI{!+b6-k(BxRaU(sN3h1+?S-6AfoZfm5Q3B zWO|p2`lOBOd6tT#N@|pw`l$}8s-a4fqZ*Y3d8w!RrJ!n)Zwje=>Zm>Ffs`7kLJFsb zDtt*g3ajv?)@h{+ikX(FgB*&69QcL{+%T&U z%ZT&&ny@*7{yMJ(NU?J0hqlPE<^QUlb2_WzT8v%DvaU&lFzbcgNsAO)vxmux=4!G! z%bxRzloG0=8;Y^_sj& zwE#(|ohO$o8LXLivR8?awHmZ~i>JWnlyG}_`|6E&`?7l*u4Oxr1^Ku4V7CrAxHx*a zABeU}Iix+gr*6xU!AH5x*^i2QvS2$72#KbTd#jO4u@l*=KKT!EnYx^tc|Z!IZ~M2| z8n*B#v5Wc*2lx%Ti@Vc+ySvM~zPr0*OS+oJrRl1(LP@xV`+~Yluf&^q#;bXOn+~C? zyq+q2XG?&w`MMbSsO89`l>dsl&>OqQI|_SAz2v!>*6Fj7xwFq3uNAwo-Rp@e3Xsz( ztx*|>=nA;Ckg0-ut?(;{${C5EP{0O!zzCec3Y@^IkPKv4uk0D4avHeWC%@|3uLGEkP`t(m+O#h?v_m+= zM7)$@S(r?Gn47D{nE$84tgE$}SEkNesos0UC&_u0tAS=2xQ%R=%E<{--~&F;1EM_2 zq+H6Te9EL;1#~>TuUf+WYmb}!fm4i>o(#&Ue9O38%2fagVyv98DXg;^%fZ*FZTY+~ z?3D*un5wI|J&L)DTnk{^$jto6c`K?33zY{MojR$ufr_G-dyuoc$>Iyidsxe&3Ezdx}1b|=)9$df; z46lsn%Kpo`ENaup8i^Zxz&qX3Mg7%Zebh&7)J71`OzqT99o4SszQ#P$IPA!aNYW)8 zhk|UeMZD66Ov57^qcRQ6#Y)LW439s|nKBBifo;LkI*rQghKdNCJE#wCU7Cwn&2GHK zOc2UFU<6mt1zPY0TF}{F5Za;r*`h7lpMBb&-30OM158i_aa;wi4aWIwfPnn8oyWNS zEQLNy*;Z`XMj*b;jTI1$6M9%UEbLZ-oS_6?rq6>y4V#tsB`Oyp8MA` zF1JA{(MAfCeLKnOZP<$)m#^E8=fKYv?!6d(f}o(`Jpj+^Yy?`s-*W)qUryp;?%!#E z;tQ_M@7&H>4g~aU&%e9E&l}%dO3n#r&RV|ZT>#=@J_meG;$&XtqkRNtUeNKp&Tam? zF8_|FuL{xbIH)wBrNM(_GEdS&r01-2`7i2YjCEy1whWE(aq{=3hY8Vm<6)4b)Wt2&I6)YW=UZ znR%)X%U9UyH=TkStkbd%1V3HWO^^n-&gjhrs!cOeOegsBv?8$z>%bt_~i+NFA z;qpD8Q7h6HZR0Si(pqc7y84q*8;VhGzPT{vYACY$-hDghd7dtcrrw6_kPEABii_#8 z30T=$%mlxk*_#d8qMZic?(KT;@gN`adO!!Btp%KY+Ffw+DWCGF4cp9(#m|j`L;qW| z{%{Ts5ABH<@eoPzS$x^EzS+dh@g2YGB46}$kOnBf@}JG}CXd=(;PP4=^J{9`fJhIy zFbX)2#KTwc!6~O6E2ju+tqY%q4G-`Ff9giQecY>&Js!6~dZLvsfmZ+UIB2^DSj)Cd z${eoWdJg78PxOQk_<~Oef*=Tl;0H%<;)=ic2QJ*6o!q+2%OR|#{xJ7hU-$Wl_okfA z9sc1XE(d=P_=6w#g@5>T!1$EWXN;sij_d^_TCQ5-q+u4!e?m`#HX+i*5BF z-QGS<&n_l-Xc;%Q)(D|+Bq3`jdKl*ym-+#XS{{OA|tIq>k ze&}#cj^Sq`Oq?`t=A>!UBSM)vLyCl1lwmu81m(G0=+EiBbkn3xU8af?s6R}4^Z;Vy$XBpU z($JYx*6dldY3Jx++tw{xIdS9Cp(}SToiusVeEDj`>(?rPOo1XySXHvAQ^m=X_s}28 zfh?ISbm|XkVyRULXWiNrY}hYk)s9a4*0i2Ea_G{rYnQIxy?y=q4gXxKuwlfQ7ejoU zRI*W%L2+jES$z0Cp2>wK6h0KBQ{d5&)>_F9qQ1$|wQsi!kzse|9DB~pzWtxRbG0lH zOn05BKY8ioU&B02RU0Z(nE2RgUwWwmkDJq4e(A2843 zMm>VKEECO`(z#~N`ljK83Lp66VNWBvc!RYXZB)yyvTz*KQ2(>!T8j`y8+FuCLD(Y1 z54_Y+;|ol+ID&_*I;{c}4HH}J$a}_Nb4%iY8i$!WrMffE9`@v+&p+j;QM9z|3RKrL z2(`6WLfH}oQelUEln_1Wu=LVQH|=z*PeWCV!;9AZ&`pZqOmka>#C(V(Db4)pOZ2GI z(oNpDRrerowe40TjKuX0Onpp^3|+_Kq_a*?@Z3t)K3P+AG`Zr4qcwyRMpzF)8g7`; zhZ}WxSUrB-t63pr<*JHOypeXAQ6Vz*!}cIOK=yRnp{j)fJN>GA)W%UjHb`#j-k)Dr=ft^1hRaN{AQ} zdu*}qu`;@HBP-ct%c8=ps;fBT%C95D!u3Eo7#<`KzWet3Z@~RFHqss6ven|)j__+w zAeaygl*6P#`ko|N${MN@sj>*TsiO>>EO%Fo$4*Yb~2QS?4USZ=)aU&Rae6Ywt zrk3(rBC{@|ekwbA>oB|i4!Q9%BK!EI!1U*8$--twzTJzPEGVWC5)r1LerHI;^1i+& zK5@bqfBbYB^T}-OkkTEz_~c6&Mf~(LV($N76n!mHZjnWnNBZ~we*gwBfPu(^phSlw z9VP2QSJ+fnm>?t!X=pc&LCGkT!an!CFEJ^SAOHQjU_a66A%C(Ug#b->LjMuafCy4l z0v$9U2JXoR4zCd`lEZ`L0vMq98>j z1@T^d<}^W#c*%P3!bn59_!5Ue4LI!r*F)q1j(ycn0Xa{xY89r z(d9;nItw9g@r-8>gB6+hL?I1%NJJ(w6N}8mBMNAvgpr1Hld6=a80RTa+0HxnNXZ+k zh{nv(5l?mm0v`W#x766okANgbB3;QySAJrVpK#>C4%Hg7Ofp%PvLw-Vh86;!r^Z)EKP51S4m8(1Q{bmalB6 zLt{p|NZ}DXP?{^7lGod=5B8!Hj911_7SgNYz*;_=2wPv5{Xt=5Da=Q=|-(4kT_sLMkjWI+sK z_<|LlC@3pfL5o@FLKm~3g<%b;(Emd=(sXVE z^}q;C6xyYW&&2{G~XHLuHz@^GmjQ-Y`umTjafVNx~&(l_3qy($=#z_u1!w0a`A3fVGijnu%K1 zdced0B%>V-X=nI)!vBypB#&inVO&3h7M!+Ar&F01z6_1CKp=HG`qA7x$EiO3vLmZa zny9$YJJy#@Bqk93j72w^*8%^vtbt8(LMB?_oOZIqKfF`UcBTqNvN*<34aSL7J5}X2 z&$+do?i=1YC9e3nS$R?utr7jH96@)h!kfI8NO8rL$!}^qx7xb3*2BPk#32oPcC@FR z772C+HOMiKca-D7#-Igl37&SmBhtqU_gioi_Jt;Zg>gHVAc}4Aq47S&ZC<~tU+k8v zzLnj!c&Gef6Wk1FynP;Whp;bb8`;TMzQBY$FfsVvH@~+gaegT!#ew-fTR8Wb=R4m{ zkSO&rb_Ac>zW@5|Ng~DbIwiYN;*END0z`7Vw}@pj-qBli4e>bO3 z^NVqd{+pv4`_GU*hH&}KZ+=AwoEp`r1~g`|+gTTq{O2F?=XLB@|1m-q`ujv4oNObA z`+^v9JsTPsPr|+v(LV0$FA!3Y@RPhk@&&-6KMHIHlye4XSU>mMEkq){38X;5La523 zCI8t!CVM17$t(dBF~YMQ1EiwuGKwdGj;A=joJc<9Sw3<49_O>V@R7c7!HM*Eh2Vpx z+_S2GSf+BiHX}R;<_nu1BsqLUKtjW2P{WmKLsybHIgCRFl>Hdw;LV~d%(=)*shhd@L;?{SxBvIwS7 zLh&fKFk+@BG@~d)x+&xcQ+b6|$OYy?s#T;2rU(~~z`-VoMf}=9Ioh^qxy6jA!hRsc zsSv4(nw6Ka8Ie0APoM>1cm_4>MoC0NM>GalfGKi>sRQH2ZY;w&WGRJmseR+dSztIm z;zObFLtu&zK`e-8bT^inMk9C`vWScSyGBFu1X5tTbaaL^RLF0fv~es)ay-aP?8Z%G z$NypDEq-%`cr=)pNexoG$5XtZ>RB^jM2J}=iZ^S*Bt%A#QpPo+LUXa4vLQz9840io zo3Zh|t%*S=L`Jm=pE*;E@XGJ?Eit(gj{%KdiI{ zYk&rIq`>p5O2rDxuoMPiP{Z}xN?(gGyDO-|Vue{aOI~<{)I*Dplpr}d%A`aQe`(66 zTnj;%EWVk_suTvSEKF)p!#VWI@&ik;9Lutt#IuA3Vd%WIRH(C~1-O(;%i^QD1ev=e znJ^2jF(MBdjI)^}M)Tmwm880#Y{@#gI--;ZqjUu=xrWw^2h`l6p#Yz@LXO;|7ysQ8 zo6}Mw@hP+Mxdvu%1ypRYXruxb@vj*XA^j;K@hhZRs0Iczhj-Xc?u@%$t3*#gyH7YM zw*)eCI8XFM&vNKBMuWR@(1q|ED7Gx9(o-<^^#rzoCmlwhwmh?%9{oAOwaUO&wzsl2#q^ofQ15ktXY!41be%P#a76h4T2vAp;hTH51?zlJWmtvfR5j;}u|KPkRSKlKL!?-%LjX~hkPhgGgVWr^f!Jm2lzxNg)+EvdNwl`a(|-ZG>x9n*cN(>k5geE_&MjHyE6F__YYa){G2MN>R&JC)#D*zV#ws1sB0bXH0ahi|y`u{z z9ThrS?9pXih5*$^NbQf3f*CpJ(v>R6gECcqNL5a)Q&4R=+M+OWMAvm)*H2~7R_)Wr z8qb5$MsBPIl_OM1TR10ERC|;bZbiHSO^kj4*Se4ka%IPYlvhqw*Z)27KFJx%(DH|ND27;wg;01}sEt~wmD*y!2QVsHB?3yFeVcAY%9POz zyV6pDp##2oScIZV#o`5Xuv3m*S4f-8x_i0Xs!Fw`(|N7aPmKokTd)S31rZckx@A9W z;9GOxJi41K9BJ9E9Z;~9n|Rx+Jb2jJqFZ&?)QMG9Yk=GFY)jm-%F5kX%T3cY&AcG< z+mPk0!Nf|!6|%$ao5W?&BFPL#{n?<6IwJ}RnnhZq)Jfo(zW*E5+O4GuD;?5al?v#C zo|_=XCxJrwioSG6g(zqN>78EctzPSG0W0VQ8Qf9E7_;D&U4%^;?c=YKQjHsfwM1J- z3cF4QQwO_c+f-EtUJwOX5ZO`nH4NazB83h# zVC_U;1zs!$_Mgpc+1V}L|7;?zN?zbtURv}~=f%2m1LDvGA8p;)AtheSpp%esQj<8z zs;iG{D1;O^fCC@^E#6`-?&25#qq!;HSJMPdc*Au>D0C%L zdIeo`;Dv)~DMC6qK~=f_?O!!zxrY=%$hw77<%j(>Q;^MLL~R^ zcLSJeyv9Hk$8*)#(Dh(N#@AXqIcKnjM!Q=S=2(CY)mXv=I89eqUgTI!C`XoqT7FbC zW*Lu@19~gAO?*gn^<>b^2T;Dler;zvE#*5s<^NdLH`=P_Gks-IeOG-()QKuss(?|T z#pN6=3SQnei~CI`(TQraqVGkmCB9`f(p}p%H(|yMWw?YwCOlo6@fxB@jGJNd&yvP|2x{a|}g2Mld6 zU4R7&J*=}Nhj%FFPTkIVKu^{U!O%lH3(Zcs_FF?bJAF2tG=N=$HDj;k=Dqw2ttOy6 zm`Z;8YOwC#u`cUq&;?OQySHRNwx;8@wFmB0&$*-Px;Cu4#?WZc>-!5)-^zo(hGc^U zX{*!Sp@oT(M!KO*FW_ko>XWMC+}dI$(*I)?73bwD@-jMWx`Zf5ffQ(g4*+TnI05Ev zZs&gP6VL#l{($MtULiUwA~GW$)osB>8CUTa22_JUz_I=zBvR0YUr6ulbYIIoQ+0@j z85YaQJU{!~&iCb1dsxq{oZ(pzh44fq{QXMCT&zkfJ_#R98vro9&Ulf+pa)<`4 zQXVGaGFs*yJ>CrBs*%=?>&b5IW@(+R3S-{dU(WI7vnDHkfCGqt3eW&4KLHx3ax1@b zESGZWRsb!gW_EEVFw#9`)!8b&(*Kp=k3LZY9RWi|I`8z32KMIPGreQ~j>rV#Ml#e> zw`N!P_O(GK)xYKAGo&<#oG=PYI8Hny7+38Df7I_r^E|@jg>v&>fb&Ft=S{t1h?Gcm zWK~pc?@g`PK_*9$#lt}#b(k`^lZ#_ST6B+=@%4aNoo$aW*YRbY6X>Isl>VZoqPj6( zR%K9yBcF8|MW;5y=BapQ0)TQYr*bTRb}QHN3gB`A@bdHU#i*h>a8Q{!l4M6ebFp3X zSaT^#hx2l7+kIGQ@-&8oWM|BFYf&%skQH<@1kZBZYfT=kS#xzpE%QNq^l+E-gev#S zg=mGwSD0c2gj7R!cjq!~SN~Kdb&Qn5dXM;2KlFUB!~TnLDxLAI6^CM{>1)o}k54*j zP3Cs8^)gc~KH*&A^XfOv4pI8t+&(Rja%Y24v&`PjpYfzU{vM$^So!i{2oxu-k(tNXhTmAr>hW_Wqoe(fj`3f^SqbaUKiwqN!77FCWN! z`}XBi7mb&$S)@E=`s9lkv1jDwy{l={-pHIKPwEmT%vrN$#)dwNR?b|sS)MMkYD&x4 zGiSzFVY*0**wC!TXf?gqGSi?zg5(?#!lR0*Z_~u36G+h3HFoSRZD6hy7~49GI|R!+sN!zSqw%X@R3w z8Qd&SoI=KV^~&Q6dT?jgb*B|daezRD6EubsFK+xejS~_E5NIJO_hx#2rTe`t82aYJ zpZ{eaH?ZJA*wZ*Qd>ByMF-Cq)46Sc!~04A5$h)F`H4F$B!RL@P(AqeDysA zR5Q*v^GtvLnWKw+8DWA6D^N+rihZ9D)66qL1vM2WOL_H(SYwrSR$6PxLfFpsFlYI1f@>GW&@<-%@BCdB;R8uW=m6IQ0 z2xLnnivLBHS!k&x4np4e@6yrtXbXg~q^QA1OjQ zX{EEDJQ9c?CWZ;hm@C%O;+zY?dfu!S-S|m+MIw3Rt{3$h6|lIzJ0M9>dZJ%cPA;qO zjV&3YptSZ;iJ+EMeKH{?Bz6ntS>US3B6zytS*MY3t^ zC!-pH%m7}4@f zHP%=oj4nM1({EN>iCFe0CFW5D<87o!=F`7KQgfO81E+zHJ)<)(*6R?%T8U*7CD{SNvtk5DXdN4#JqJaxwNaJ{`YE^6wn7{=x zaC7Z~;0JS8L8#26COCPQNjx~g5N0VsvzUbmMYOpT)`W#FyikTTH^Z$AA`dsr;SPJK zq5;08d~!k`_Ob&V%!q0(_oLpLYK9R0G4CLw;h!J<_qVpUtm+cfw1X_NS0c>ccw!Fjb!zX-ERTOgu5_K@;{siUw}ZfjZjNkN*yapdr}< zSNPh;e17yJQdo#XRVn)b+-)&B-cX(r~=Ygy*9iz3aF zpaCC-I~z$&f%Z6+6lwmhx2I7d?Pf0i@nG7Ki&35OEh#?@{395dxQl7qH-pSHO%EQapkYjOdmiAaM-v#v>lJG0c#Q z45K3>d0nJ%?vh#3WUR zvzy^8XFA(i9{xB-o-f;CAQxt{goUGA?pQq!D^$lj?y-+q?P4KYmc_chPK;&j(Ha}) z#-l~)j+yrBW&eX7sSb}_%uCy@CbcU13CgnQd&_+B;{Qj!+t0G5?H-* zQ*)3a5G4`>As~T_b-<(4qq@hlW$O@aqPLar#Lu;#^q(E&sz*v{?}n5`Byoob$+H;d zloKryfURfU?S3~QA~ElJ+YH}O^YyP?9c+#*w!&b*&Q{b#nccn4nE1pa z!}$qPuk+z(fPNy)hW<8_>(1Zi^LjSdzEw#IS^#=(qx=1Pf6F#=+81!~xoQfl=HPd9>FhG;}2B7qBUoc%E8FjIIGazNelUctWqz1bLK zI(r%Eb8r(I>ypnm`G(o~L-EDl`408b-}T*J_Bq^oMML+&8~BMI`6XLFu!EU|-m;C} zW@J`oU07jh7|om(2gV+W(cX`J-ikS%2(lUg9foHqzz3Xw2EflGxu6EL-lq)BT!i2W zj$qmWkzG{I6*Ph{#Dq~G#q%vuRumcr0smDLC6O)|Arh8D1O=Mb%n&g&2ozP>2T384 zZC~KDTR#B*&*G|CyakqPFYi=`kz!P*UuMjYWFBwEMk!CWQ+*+lup z3Rb`jz949gVg)Dw0SHZ~bRv*Bo7!QML;T<`49R~`-GWpRwh>9h1>V8^h$sw9atRzx z{RqP}+(ih96(&hs3ECF^2#M%{9?07_)LTDd9pE9xN2sMYCNfl)q z(>=&0ypt#l&R7W}SSb@+QH$J}D1qS9bhZ*WWW&7SOR5u+1Y7mj~Sxj?Ww{PGy!I6<}-{Y5mHf>FsC_`<~y9`2c>4( zKm%*KA$#doYzEG33Li}3uDW-2NGfhs@(ET#k`sDdtNf+j!$6eub-M<{q=20o_jvD{>)-$DSw z8@xdv+`>8;LkZ1-@6iogm5_DD7yqeFbeg6xoLT!>*|S`Q5R&FifCM0BQEn#LS2zru z#n~}@LwH37WE?~~*#82Nl~S~EsE2~6Ta9Rm_L7H)XztLal`!%v& zCEdw280wvtiezaNvw{E8DHTUa)IqCaR0X6lc9VoPm? zr>dQJ48tS@0wE}?TOm~}0pqo7i8_rHS>fclrQ1cM(@oM{kLbb)>1J(#>jJ%7xBO~j zD1@OhUMYp@!$z!-5CbhVt4#)@P++XI_LMc0Ri*{rSJtG#z~s-m%dK{6$@1j4YKxDG z+MEIFU0l-37Ar&Dg`ol}Bt~RQ*&L@zN4@GA!g?)a>6)N^;6adKTl#CG5@-YvtO7&; z2h1(qM!=#%D8XVXg<2@d2pz-9EW|PbDck~sMW1u&&IoOVQ%EZ`EZ;jMZSlRP49O;K z&eyxxgH4D{gqZ(qpE*mLh1$wSEt^yZo_(CFIBeh!ZsD%S;acUjz>w=GOW(|wfQYB$ zdIceVr+f|H<(g(r=_a^><>$Ux=mON#?!|xNTaxB$2MXnBv}<3AO6mP+yqcZ{Dx293 z*@~ghWZ3CLChBhp=3+)@1Q3B0SV0t|Zxq--1cdKmGG=oaEbYPAWsu(N3E3+i>&(KN zn=!&8RN7H+**I#2FLfrAVH%H^>6fmHnzg8uWtu&-(0<)4Gd8UZ$%1wP56ePIKRmDU z7Eo-U?%4G&BX|WZtd{_12>~Zae;lw9@`OtCStc}alm%B#L~u0hmnbOAuF5bzVlXjm zmso7DU6B8Y+QO`hU=N)hgx0p}ou(k^X~z8y8O-HOLaghdvLg64Dq+Ge2Ur0f*a04l zF&;z#2mD3^h@u9-uil>EM*dvbf(HKb;53MEZ+1%w7{6Bg6RJF2XV+2cRR1k+bm2Bs&Zw@X#fTLnfc=>7w)4t@A~=^B1+# zI4%pv=1V>2)0gQ8w+>5P;nT@x0xPE}K>LC~6SUM8bF-am9qooeOY<>zq&V{lIX5#f zTcTp9h}w2yEST}!zHfwnu{Lk>8FTUb&MgthZ|CJ{cH~+)^XFqELn%zcBtXI;sIwrj zvznzaJO_mVAKE;G%>hc^?+qYGV6Jp_k=|($K6+X3N*^;hOe5^jF${w@6ftBjwUIXU zQ%AKSP_)~``NaR4 zN(<$xwX|m=^@VyQ=)nvh#fDx;hWF}P_xPALz(M*F0S7>6D*E(Kb937gXa$(B71)6` zRA7bH=U-Hq|JZe6h(j_A12O$d$-?2;g^n) zb_YuYtEhqZ6o`~(meB%SWs78s#rLguB_P9luN)GSHe{GK@@j2nuyn{_hKGMr25wXa z2F4~*80J}Cu$r_dM$}-SgCqcTz|yuh+jgXWu^3ANIy_!n{>4dKlWt7IHz5DR%tkCe zR;wa)wczONSDarMFP2U(vMe+oYcjT7dayw zIafAGOjc2qOGT4!ERb`CMlb(0wq9SBm9PZ5C^) zkGG|uaAeQ{cR_L9i3?Vm)Cr3pEZABHj05#=-1u(Sc2I+Qj_X! zu+@?~iBXwypR;wcxN6=7W0i+!c;jP`EGtq?$)EpdyoGs68M>t-#%_r4CufT+#k#Cl zdBLD5l;e6WlCn6x`NV3GwVf)(R>i?|IkAsg%8iO9ulkx~ZOCo9qr3k&kN3DgoVaCN z`mEjb!GgFZ#)2eB0vxme-O_Cfgt|6cfxrJd2iO1{?0YKE!>_R?CBl(*V0M`UZp2!| zV?Vhh%Wm4N6)yT$d2e}wG_Kkh+G6kbl>Q%FIkxLiX-Y)tvT6(H0_mXJOomzvtEaOj z$U;|Oe1~vmZ|UqWL0{ekNwSpA1wq~3+KaMVxgegYUD!lriqFN>t3Wb?V$tQ$AW9CZ~9sR9EhwNi60Xg1bihFa$tVB43d0cY+6X{fK26L6 zIrt57B}gADZVb_6b{BB$EV6SN12MeBcCD-~i_ASNenF(YvWF_7#cLVM2N0 zu1$0J5Mo4$;^fJ@cX3>;OO|Zi^LO#yLWjcu1tP?V*t2HFJYo98ideH|)aLQy_s*I# zojPUqG{&kWrc9YW6*X$?nKNiLZ(4)KQ>L@1Jy){AboKvg(UeJd(zN-m8dRz(eLWf^ z2of-F-zZwdsF9;bkP91P)rv!9+`rkpv?-py!FsZwQ$iSJOOMQI^*=C$clsXccZ z2Flkct&~t7GsP*kaM`nI*R}=8t(K*@A1{iO_&Qxbg0pGYwtX8nZi5#S&K-BH;cMX# zDT2J0an!0@a_NNx7ks$G*tw|>L?;PPcI|lV*xCMlyCihAci-#X`gwHqrr)aW$U3CB zk(2IjJ=|BO*L|O*g06}gD^CRUgcM_Rvc|KVDr;sZm3#uqrJ@LQY$s5g3hPNU zw2tv+8upHZ>%F<;n`RjLPV(y~pK^mLs5RwnsstBZv++!}JbfAk)oPPYN4$LscEbk!WoZC{piKu)lx#d1; zPM&ncnG?;3DC)<{FU6bE2T1{jY@3o#9=t~6x3H;jH#Izp;c8_V|*#L zC|PN>m6u$rA*UQ)f%Pd}agDVVS6!Fg^&S6vQ1y>Pvpg*A+KRHx6wXH{9q!IN_nesG zf)>3<(YYL!6w*40OL)XlTyfL9kSvumx@*KqCmnV$zWAO+WrjIpdb%kF=bUxkS?6xh z`I#O?^}G!}lPx{EB9ytDvrt4PitRS!69LlTyunXE0}6l@)AOux5-Hr06xr zoOjfohn!^>9Fo|uul^*HS*j@qZMF5*+n#*Rl{PekqXbc9rsZ)OOV_+TWNJ-bGAe6w zy@K|sujLk-?oTu`8}GE&Zrd7a-d-v0u(7WD?!5Qr`&q6DqmkORLNt8gZHyn5k?lHyVS|K)@d)kZd5FPOtHzSe3T^12loH!m#V&#onBNm4`l9&7IC)G> z$WcxhheyTrBn*1djHdUX=RJZnPkGeA<`i*9CoV~nnHkg4G?Gz@N=zaWjd;W(VnqvI zfa)1%D+e@IC8`MB&s|6TGV+RLUNfj$1P;fz+SN)$ z)o|9V7;S=x)aZQ^HCJ-tIKMFrw*n&)fd~X6J{79C#dH?5h+8Hz*O*mBMJd#fm$C@s zwbBU)bD4W5=ggswz9kZZ_9#a*{^gWectUQCd8FXf;zL}%Pg`L$-$kd<)?pw6u6L=c zFYY>vTIF@G_alm5jX@c~R`zw4!x3i1_Q`jqBpRK2>(Y(<*X2s2WqY-TJu3|s#|PdagaJr_L`}?i8A64ClZge z#^svhbjUZ_sv`fq2$C-Y!b}QF`iYnXaxzJhR*U>ML#>dKg~N@Y>ymVs2D_xTPvYz? z9g<6*n)e_6AZ=;+iwys=$SQ~tupS{-s=_E(EPKI9gfOF-Ix@u`!=)hCcu`?kATX4p z)UYi*+hK6d=DE>T?~>KDUFb5yePWHT`Q|IV`f|e-S41*;(#vG=3K1MeHWM+YED$oC zM;_^!UYu;9)}`wAAt|blN{B&H0xJe`R}u1y7u26rUgeW27Lbm3#6m?PlEM`_j8NuS zs^uCv9c{+%n7>H2N?+|FD7@swE0r=-ZRP;ozo7AB zPs~w;Lq1rMt%Z$S%Ok&){uW(9b?#WFo73`cOd#F8l6nFKrpM~nuIh#FeD8Z%{T7hA z9WA&F;xZiuck@!k*=%PoO}pSt8nk_v&0&YwcxKv|%U5P_Ws}upa_VxgLFOo?UCSfZ zzIkpw0zIXLXd13?54b5Ek;P4|evIHKp82|%&DECTPSPzXH}{O-s_q?Z`>WL+Tu%x+xe<*$FM0?)nr=hZ_|6IQD8TyiattFMM3H7PJ z&3CoYi%2lg_9*`wA%3x(@(P zCHyRJgjB-(Z0R+W0r)^{%bW@HG|0))gFSLj_sHXnAi@D%;i_!ox!`O9Kg-E%k3Ih~ za8Gzo_8vn0*l+l-%kSRE5Rgy#s3w5`j_#r_N%De7G65@C!7(o6h9V=>oPhu#%N`DJ z!0@jbh~W`TA`(uH1J{ou#$otu5B@A^29xh3G~xc5j|rVb!FVv!_9!VXq=kqu)P#_N zl2H6sNywZK3Z;+*A8_{^W%ks|*CyozQ7}wYaM#pt6+Y0Z7=;~n?%2FcyDVk&tP2AD z5I3+%in?h|Hc#)u?GRZeILhgqBB4``FYp9UjsT8q0E$&^3mSx>o<_x_X63e;<*{sv zr2r?e=EYgCPaV)E8gu~`N@rGl;hk;)5+ETGDghaMsBj>~5`!m+$k7`u^5lB!y;uF zAJKd=<`B0H^cHbVy2%kC5lnK962$@UR$&xyjp70#v+@hK;V%dmieV(d(x~r_9 zN98yI;jSr&*vhSj0j`XX8nsT{n$M&V=yHU?-pWB3+;MEmj#tzMp(Km4euOG$;@#wJ5&bg04J(y}LiGAPqUREqK_fdLtovcvzNX(JUf5<`L= zj;0}bjZUm9skkd2q3UIf!y;n_1GVY7kjCd$!7p`V14l5*jA)q52#lso1>0lN5(Uoq zYjKQ^3$@buNO6@0$t7-qf%riQTg>_l4T2I4mHzKk63HBRK@=uLNK}Fr45kr)K^izr zM4W~lKoAQ_tTeY!59n_cw~{D=g4D30hG6pzbMP7ZXveySV7wy7bdxtdVd5MlFQ9}t z3GO&QtU3TO5uNQCwyRN`NPL1RW<2wIswyGzG4`}a%^c$W6!EBxqfEreK8@osqlhy{ zg!A$X8@8l5X|M~qj`;+vCGN*H!B6~r(9<>p4Rt8d^ly`BYB&FT6A1G{r}Bar7$Nyc zLp^_qqHIIlAXEz_)COhilPoks=IA<=P}5FLNf_yYW@JP9D1u6qJpCd?n~)Jkqq8)~ zIGT%$+A9ygNj^(P*of^wK_WpdvrMAYdR(D0ch7hzk!4thx~9t!W5!I7Co+wysO}+8 zx)jNticyf$+Wa9C^@|hH=@S8Ood}GEY-JXD^M33mq%I3HWF;JRrCAV37A?r)kmBsn zMi+UJ-5exT%#9HAKo16|^;V{3%%pbquJfFcPt8dh|1|4FQ87s2SPFISh5}L9QBlG1 z85}h&u`k~wl~v5Hb1bzT^-7=WiBmn*MRzA1;(=62gg^f~PcgG3QqD9@z3P`}#!Y1o zPOItkPLE=?NimUQKg9$-lFCa~Z(AAhBE0nurL|hCi+324QRvjUoJRP#)FVHFv`h=N ztdbf};t@^~brN;t)GbyGRde9!EqSuItl^FT$8uuIRwh;z|7u7+p(s0b4(8wxB|p;bVb7AE1P1#i%PIULVvl8F`Gr-Y!Wb}? z5j2)#J1b(?wRvJROv>tZk`7(d6+v^aWD4?Ksb^HPZC<~1L|$QB$AmM7W=l!dGP5K= zne6tYECrp$3XupOXLP^X%97--2JJ6Hv9n+mLr4GdV>`Vsk?g@cM@Pmi)JTvbkUB&U zJR3`G`84OnrRZ&hu=qJ?0-7km+maF^74&-W0H!H3q@iC%XgztnmE zVRr9RL3Qmns+0oflVX(DdJ@u9t3wi_7U%!IC+Ey0Yon;;_;J06$|Bg6T$k59#^IM- znD0>aOur$crV$jiZk^VN6jH}!5m4StXW|}XVY!zu0BT*9uoWlH;@(LXSXBAm2ofqm z8rFd#@^pFK*LP3#Om8@cS(S%-_!fZpvQlV>!KR4avSw>DS|+tsmROHYN+vcnin)-A ztr&~tp{Y&}hA(kUqV*z+CYXdKeNtFbX0ItNgEVH7yxeY5Q%`7VgMRUW+Iv_|qOvkv)A;uZ)M$h^+*T1BUHLLA*# zDl7+V<}QK0jzffYXpyfGkn$L$0UrPG1S*BbAI>2cxY&ekPL;d$^ji6qBf$`2xqfKS zC<(PUDKr~(IVzxm8URLM_J?#X2Xi7W8-2o<E3F;yPrf38ANdx~a}5jPAjoBYL8DPl+HHzJ52Y zllL+mvWxZvq$$%1D@KaY8gl$*9zbWHmC<@zwNNm;JTT1IK+ zcO27+q7|U`S!1|Lk&%vG1zV(Jm!Pqk?=lgGE8(0b0ljq?PH=idROT1Dd-)y9%!~m9d$i$y-&?JH5r2y#rM-%o4tT zRi1E)Sep9IoG-uio4@~)&%Xg&z_D2PXqagwc&vdtc{3(jt8Lkw$C^_xTB+8XR@n4D z+PNbc#1`ecm(ItT?oE+qFkz0`qzLuATeOcT6MM%oPcI%^`LvLM%182F|CRm(&z-j% zuk`AjrE@EdIqT|Y{*w6^kl~6;&n*O*yTqEBEAk$i{CK)G%BP&l`;{bD8es8k%P*(P z=Vq}tP0Yu<%yHq&(|ka&?Xy?B#|>E^A#=u=M_UtG4{0vQZ6mIE{Gto=(Q6mEdHZ|l zYrU@YHk4e!k%)ND7J22EF z&B-U#*-O}1oy7lMJwoNya%~z%=SXm8d$H$e*L&U9xjH?A{dk4RyIH&-IK9)`_0v0h zeMG&Ags0SZ+zK~+ug9Ir-km;$8>#+ti*Q%zO#O(`Y^&ay??x=nDghE0$0VrnG`$c9 zZ?M3k{TjRO3FRu=2|>5Tq4d6p*b{u;P0-&%Oa$FX2C=*b5q`20K64lz3{M_o<*ML) zU9-8!;@!LoQyHw`o!rTY-nHjF(?~w^o!yfzWDA_;SuWDaLopST61O{=Xm}t-IkbQ2 zXtF!zR(($)%SiC!=Akxff%vg?9E<}S4Pc^ic1kZlDp_I z-PI8Z8dd+P-s;U8owB}DYOw3Y-tYgOy%~Y*&z|tpep%rZLEXOHmnx%!e%T%qs3_81 zbN)3JxgwNaARhX;=lrW3JrX_N@hMs6id=WL%@Jp2iwCiN!#pURoJA1-3&wu_>aGtlYjY>aZR6JqUXF2AM?^f|L1Q<=%g!B zuHncPb9n(`)GAx!?%ktzPoKYk3>*H_M-QRHi4FA~yhkyk#*G{`S~Lh!p15fwOPV~1 za@zkjc_3Tf8&~U+C0prQ$^&=pnmCp&dm_~5u%*AD{YHL6Ht7(drG)h85yX^`pgc|m zSrw#*YSg7pw_??^wP_<@(!QBJdsbY(h5FK6OG$EPOPDfg+Qg}oXV0EM8Tu1S)abCJ zVGA$4YSnPps9&LOg+$gHTC{2x`g03+np}`{XL2+6)8oaC4?~kajauVHo8sPPeyviT z-nq2|5_IX&G)IdPQ~UP)ku_}CJ7;r_Idh!en{PMo?ddT1!he@Z4y$x1koN7|yL&g} zJrMZsX_BbK3-RONVj>P?+psFVfAU(vxon`ogw7`$en=RotIup>+S#N zo?e~V)skolkp@w3zg^hTY9X~YTxP}X1(R(B2}RLR2~Ee5Kl&(yVT&6Dw_%4KrXyR8 zH9jbxLGq*{jyN>h*At2=vgj8(>7?^bDV0<*Ns~=331yU0PD$mIPC8l2FyDA6&sz7i zryz~*!DLBt%kk)=aX?OIB9YV?iKLQDURhr5QQUqh9u1$JUkE-@aZbAH@faB*;(tXW7e;eeewB{9 z)oF=C;kvA@$p%|2xy6<{nXzVtEADI09(k&?sJ>iZ9*_lSh5 zf~!&+;y@#|6j8$`0$dtsx^(7W2tQM zjFd5P)!I^Kp&kPn5k@JFY-7nP{|q!yEL-|=hdE8UleGjH=kRC{muex!5epZy#tARI zEyWh=EcHV@F;_L0>CkNE%{PbKkdCpU?c!fH$%b**sqRQN)@E?P2Kk1ZC}16 zZq4{Zpw6di`XyGzg_(B)9kcBXGVGUQfiZZ!E86D)H2Y>j%9s&`BE)n4fCul-< zxC49aI3fm9Si={>Fp4s);tFS|j2v2Ghe8~O1vU7^AcC=r9wh%_ON>auBrdUtYqU=j zH3&s2UQvoNq+%Vjs6%X|1BiV5VHh#^#|kd&j7KctJ(SoJL;{H&C{*DUR~SV(-jR-3 zTm|)Pfyqp2a+93wq$fYA$y(SV7o;pDCrgRSRH`zSo^*vPED6h4!qSzlj3q5)StcEV za+kd9WhPbG$yEw-m7jbiEsy!iRUi|Yv%F<4x9H1gN;8w9WaTM`iA_=#GntmWr7XYM z%ve5in&gxwFgKYCOrA5F+wA5txv9)#GE)`qG=q@}w}eq)lgPOL%(Im7x5oQ(M~0 zW6Bh%H?^rdrHa#K?((TzWhXClnpC6`wU%47BqSku$FpKl87kQ$2Ge1}0m_w-L&U~e z)mlX>-c^gMpy3qtD#y0Eb%Jo6t6>l6#0_%8u6LbcBpqu*zM|EJbIj`%+nT{29agSy z^dn>MYFW_MQL>etAz*7L*tf=Yv-j(4867FwI_fpD-DC#L3RWo_*{XAG1JaIy7dlie zLyNA^jOaR)+Zydwb8PCZeSUi|;k{-V^ee7(i6j3eOD%VIDQcZxwx**aMfbSVt*&j! zi`|yVW4rpn(8=}(-hlzPM@O5~a4)IH>jo;inmyodUiUD~eXeCZLT^f_TeE8vIAhUG zlL1HdJ5c$TG|E%&f@P$P04i9&&Z6(M9Lzrb;A>H$`kkR5R$&5j_#_!l@P$#;;Qk_N z#2JzBjQJ%hPw{SVvN4i@Q&P!+SZ~EL`cPjS1rdo&=xK{2a!C+;Es^{fX*@Zyiz?(e zE00QGteLV&S{!93563yt$xn?9VrAArjLRTlhnS}UW|~M@cAH7FnMsA_GP^{}o{H~1 z+>EL$zEaL_))-G943eDj`B9GhTC`v@T-*QMR&XEU+LaroXs!7cav0X)(k4ARZJ~%n zyCb#Ug2d$KKKeCrrct4}#1l4|8b1%F&hggVXqSMk)5`p`myw&@32zU;Io{u<{yg6X ztBQP*W?-=UY~o_K4MsRNNV1jPBW9Zk)RYP?tPS;-Sgplmd-GSg)obpcv3GqSp*FIy z9bIh``p2uHx3@0Qgr%<-ESOZXMy)j^!Z)CMq`tDUBU?i*ImDv$UQU{UWxvee5}NNvin#sk z9_xGN@N70$nVy07UVX(B=U+dsJ!@x!Gx_61vD*tWb zC;wuMN4}xYmJ!L<=5oqOcJ*xV$=k^S8kLhk-K?hMSYW=)UjjR@_YhVZ_yKTgNK0DHz^Cq za)7Zrf0KUhXF0ZDJr*W^^1^WK_JKMACswzAj3R5cCvf%=Ve1!z$6-GGCUaFYEt++5 z6&DgKcycY6Zng%4cOzl;2Y~MvWfpc@9`<9?f_NC1fdlwqJlKMqqH;-igG@*gAGTr> zD1}Btg&wylwE|vO^BH?lc$8*8jdpnTAu+C(W{Q&=AERV=mt;MmG->!XU>7r}Copg5 z9GC_gA(w}Bh%<8dFL~&EN+>`v5{8jDX0^9xs-bo-K`4BvYknw+ov0a^krLWS5|cq^(r6Ht2!aD)JmF<<$Cq3+ z;%Fy`X1()W5O;OzXND4oj2|e04Tg^N7c07kCRT`b;V5DdHzX*Sf(__8^hhYHWn%Y8 zUvjeys=x`LAdwSEkrio?7g>?2kPJnpkCq~IGnRyPQ4QO@io58FtC2W9ku&0G z5K61DUi@7k){M)E73L37V&Ao3}}t zskxd}1Bgl3m(16gtL83_*O~yy5Rz$_vWO6o*LRp{j2^RVe+Z7tCml>Ci|r;FisPKo z5u1)#FreU>qR9i}NuK3tp65xPK%k!L*#lKj3JDTw#fgbE!W>6T zYCE=m6Dn~>IBbe(3x4^37b7DN8IctE2TTx}KwtzldIUF$qdBUhHOiwsY6Rm61WW)3 zrm&I{*^)5VGBN3h3ED3txtS*6q7@mVGuop%x}!#rqg8sNKgt6^I;2Gk3P*}`{pOnk z5sdpHD@5m!{HBiF5}{W(D~!@Qe*tp4^%qJb4+WH_YO0QG+NQZ<8723VKuIw}L2TV} zr-YKH`S%gt2^Vqcl}u2ZMsNjPpaoj+1(~X;m#V3q`URH?s+ZaXN6@84zywuL1$8+E zW4ZsEoEKx)gP{=@DKY}7UC9JSAfS}m1)jR8nChva3am{4q^6pxs>-VSRc{}9nWUJa zFJf4uCM$&bF>=^Cf4Q6$@gR#@W3h=k(E57RXdg|3nEDbNnTD;3dK!)Tq$NR{wW*&1 z$^%Bw1!|B6X&?u5AP4y>2lcA2`br0Mpaub}2AfK%U5cBiNtUh3C0e+c={l>N>6z{- zn(8U9Z}6}G+OPcDulriB0!y&td9bLdnhNVIu*$4wS{lm9t+#fZ(W-if8JpG07t!$` zD2rvSh&w2vdpi3Z+$wCSk%#75G3P)iD640uSQ2KDpZ;l{@`|r=Fb8w6u~Q4R`C9+4 zX+W?-u%GJ*pj|qi1Zoykb~~}^tSkz#pvko5>9lkZwQU=$a=Qx^r-`R$H%Mu%$jqyFOY4fKUn zrvbX$7NsyMqou2(sH?iItGrShx3N3BwM)Al6iSz)nF2X>h4sz`zU~sts(Z3yiA8x|PR@lMl+dxnNJtntw);zb3K2TY0PgyQ`j> z1_Qjh2du($@Tm*jz%C5Ip*q1`*#@dWvYNq;{y+~JY^LP8vSYU`_UVpOLz%5OuKKdW z^^0V!_ro|#o!okzc!$L3>$xd14%mCNfKI2nq2I~{Tjw@3l?FK7=DnzX)MTUP{MT^pa^@zbeA9Zz{4Ee zXS29=_NlT){EMpB#M;9+a9qVm2FXqwhnI}Wjnl2Ilf;{xKk4uq`Pu&i=()Cgth{|Z z#(Kc9a!bo;;IVXTw_Vz`VC%*Pq{)u#J#;(`OWU<-s|8Q1uddv-u*?`xABqe8!H z88Ws4C@0~foItuX%A=>7y2{+TDy+g%d$Gv;#TQGj&U*y5i@UnJbg_008axx}ygerJ zX#3pHrhB?y@U+SdwaZM<2JElMjIsVIx3b&NJ$k!DTD`kleDw#%17Sks>s`j?iXvl# zDW_w;yO!-%&NsbdP-%oF7Sw*xxprY=MFK6y1*!c@qm|05CoKQa0u8kzt-^lb2L;T+ zz^VmZFvDDF!P93DK5Yv%4V3;+b55O=Q_#OXpsSp!sVB^@Zp*Q(E5NRd)q7pW3hdQk zUBPXv$RMG;nX)iPeADS#m=wWggV|?h{VEfa*uN1RmYF>emeiVfWd3l)=%va6N~2wj z&>_vbQ@gr)T-tFf2h403VNu4n{HdhM#$ij=^bmK6#x?rT*>LgM<0-ETjoNknwj8U+ z#NE17I|r<-7_bb;ux-e*JvWJVHG>p#lMNhB!`RnJ&X4VghjY}`TAA6WcZiE*&&Si3 zVPLA;krjTH$TySNObKoI|$RbUDQDt6`_qQb1o?V+RPi@^9|woTHjaE+ELNh`yJbN8=wRFo@H5Sw!M9iXfoD~8i}H(rl_X#T;gWE zTHvPQB>pJ^3C`d{rY}w*knIxV_9dbtx}dPpHHy4?O$dXK2Ssk=M~>u4e&mkv6?|R5 z&CAd=3Zz0xq(>@tIDUT^jS^A1(Kp%z9Uof_dmQVoi@<(; z1wRS|K5(k5dY6@^!xU``>op%ujS^2ish}?EC`{_I!0fK>?9cuPjPMA70P79z-my*x z2;9O~K&mvl>&NQr6CHy7auI^47Y@Un3}b1bLLuP|v^leg2oar2H?zJ`$|=e_%mIgl zD2muw5$;~LQoOAJ_MH0e9`&9Y_fGEeo{K19#{gQf_AVI;Y0rn#=r`g5b{d@37+5y9uN6UU-H!s;ZGmZeSG1vtF-|7-yOaVev1)|{FRfIby^J4<10604fDa)w+1{?)kfy>yjl~H~s0;cQ4(w zX+?`JQ^g6?A0|C|05O8HNg6tHtX`F~abqA^#EAJ~<%yudPY4whtFrF}=Y&Eni*?JN7@Elpj})EL-?+;=J#LCSCe;QP!(n zOWy67_9)wzg&H-gstuJXOnm=1HFBkkmM>|pT1_K|5F5h6ia#Ec1xR?b{B zXvU1u`b40JD3T981KneUlv`x^B#$`KFb^xdw9w*;BUti*i7KjSW2S4;5p1WPtV;*G zqO{}AyQjh%ue|fD(qp{?;VX-*PX?;*K63Ocr$1wS36Q`WBO+)<0~M4-ley}85xp-c zykf5mtC*t0bv_hqlvNB9?l*eq0gkfb#v~K7-y)M|ITMW%$0o^yo31+9^Z_%nFT=d8 zOg)J^6S6dkT9Y|9^?_3-ITb6>L{6yqt_PNQFrte$AY^imlH_1S6HV4)i!Dq9EQpw9 znxSSMe)xH(8fTg@#uNWghm;SZwqhmbnP+GjB#sB^0?8^m)KKFjmYi~`3Q)e8Mx1_f z5;0HS62)#&9~xazQV7qZOOH%tjkVhwSrL^~Q&Cm*8Dm&^RY-0*z44P;pOGb3CVRc= z*I+Lkw%B8nT{f3m3UijTpuW5lPeS)ZcuwHb43y2$Ad8MO+M4aMvVtpvEn$r}>+?7@ z18vjILMi@iC=)?p)X_(c(1MOiEu|}uZDFPP(@zP)1YBE7J@p-HoN?w{OxDe0XikZ2 z_g!3dr7I4)EQQddBZL?h2q26_Hl2RtF?7U|*Ob<&mAi2H#h7RAmZF;j{8Z;>ct-W- zpwaEr+gR&%*Vg}~d3Cy1IUqcV>Xv}$p$b#7-g+=sy!Py;-zM`-w~Z&itYd~7PS&;2 z8tbf`t^?l8aiBVuOt*+BPuTL0*KF3$l65AGAOems|Qi>_3ppxo~s<6!}k3k-h zFD>JbH;5Kvo^gg6a^{(*NB@8{T3zIipU)SsaMegIUMbBBrNIqHR-Aj-sfA+NubT$< zrJ7n%rKx_GFeBo}y8e3QnJ*Q3>3=O)ZvqlO{g# zMB9-fc*Ij4E7nU!_oI(j+BnHDHlumfsKyxy=&kzLXOh&zpB&$Vq&w1Uk9@?}AKNsJ zf2|@HHxUz`>J*)O)QK{6I#>zK1g2d6BZVq-7@jD@%0d2QgvFr~WUNCl$S_lxy4)q0 zf>@c$0TYnIj0`bnmkw-P15ndY1*00(l1RP5WxUE(rZy#!`iOBdk1S3FDWe?KaMeVuOHOh}gN?`9qJpHM>Tqn>7~b}Fb63?E z5UV;|(-c>Q$W?A~m@84F8YOH{k)Q7@r3XP=L?e()h%SVI$uibgZmXK)7vrlC{_-;H!}N zVv@dQv}=C7xZnQz7r>SrFp8(ATD%!#76Yz^Fd)37N-eggs^n%)N8ySOttKAW#i1~X z`y3JuH8Zueu5y4`To$s%o8n-GD`e*i3OWbLnaK?j(PWwrx#`Q4gR*r^GiCpAT)8<{ z&hip%Qr@D3jfyS`2`OZ;X9E#r7S+&?Io>g7LcgONa{JE!S@GvUo5RtMHpiiX);~iF z0~Tsw7Z-)`yy)>_7D-xC9;HS#@=b`2wvyWF-EV!DC3ZaLdd)!&Jf8YpEcLfpbu z#9)QGKB0?poN6EW$j3e;{_uD3XKt7f%i8ogi-z;#;SrzsK72Omahd-^7x_dQNC67B zRM{$CeS_MBk=4Fc6qC-=u(P$&^O1rB)EG1)2*XbW@qF0B9um*T$W!YoqkU@Q9iKSF zC2o(3Lqpi7GC9gUrSi9ptL4qu8O(X}^XrWz)BfLq^~ zTSm<-(QY>NgWJxeW}5+N=C~Ub-@_IB-2=4@RQF_}*!jjc76l%%rByu!Pi?yh;t8RL zJmg8Y_(=tVv%Pjc>L3@n#o?B9vCQhNo8_O^%N6#z_?XlaJWAumn&HT!4B#5&RnJpv zG<}*L=|mSfqR}<_%@@DnL`OcwRbTRxx1K48X5D7MN23G_L1@iT?s1#>{XkCVC$1R&-EK_SFI=#x6>vpQ%v z!DvW9S*bu0GqDqVLH~$BCYeE++dH(wj?{1>+ky`DV?Q=w4JUf4!ZVJAA&oV&KN_@z z{4)wNOb0WBJK2CLG+B-+Ya!Qwzl5o-;TjD&oWt<5xkLX-ktre@Ilv+<5*2d^i%;-1 zb+CsbbV7CD1z2#1?6D7J(+^DixC~4^dlH7T5Cs*a2wxMlL1VVF&^5Pkj|lrh1x&Rl zQjr{d#7JZWcWEiQxx}M8z9-BFP80=Lm;B#Za( zh&i}LS5Spj5W_LNvWMv<*+?@#RH1h(JabFKIcy(PvqRRYH{wV~KN%u-^E)?;H;;kG zX;8#%shv+Lth%*OXKq-jO8F6vA<1@vPo149=9*VdHsIv#G ztG;|9D2RAAr};*kBMNC5r;KtLkJ^-QIVn%zxS{_WL1SdS>H(K9f*Vsb#)<=)nIuUe z$%KzQ6{8bLj*OL)w7qFF3dRe^c|5L%*+b8`M~^{3=0HDwJUs5oN?^jpRVY7@q00Uf zqOa7NK}48t>q@MI$GlTXoJ*O>GRU?fh<6z+&U-#5gg&HWJ&DMf>@$@oghq+e$dl@p zn=wj{3(0+8y?wGmrqqHT!@YPUuaz__w8{#Ew3WOxKF@Q)zr-0<5KNCN#nU9ZR0+yT zWSh0Ygqk$Xec%Vt>=wzS%$bYFs2oey2|%$Lz|FYIKk2ITqn+Y}rVt9DF)nHL#yZlB-k{LLziRdr*g8+Yepv zMB`bo0V9WZ$VAjDIzoH2|9PWOGM-t;k6)ugl-eYUc#AwpgWG&c-5V>5`VQVXf-4|T zjJO|CAcp@!PhGgc3_M2nj0X5T9$LV$`aHddqq=vPhezWNE@aI(`p*D`v;p0xO>ztO zO3>TGO~$jf=N!W|WJBzt&aQHzA$6h=!cMuuNc8RsZN>*Sn(1J7w1V#u1_aF#T(1l-s(?G*SkRv*Eh=y!zu}M<4 zc^I@z#7KK6hiE7x^h66Ai6l?zA{PIn#)06XH!@K7$b;LQIb0mmLq=)gyP1UZn@`@1$M zwWbf*M}av@VDhGKqPKB_H(r{P!$UV~`c7a?s$u0AXSLEbA**D4re*ypsX9D%xYjV$ zJHsH;RnsVsdITcz0DeG$ztmrd26f;EQ7y)ZT*bYDy}7zNk2A)IlSaMTD_W_ffZ|ua z5{Qay6#*fTNX5}fZ9LnuRC6^abZv`uZP$0@ONiu!dBwiavL~J~I*f$Edm=3r1jf*6 zsesidiP%X>tVW1H*lC;8Uqw4G)yJ#{`yEE3j=yhy2*I-K&V0M0z6Ji3}Cd zqA`|LP+t{CW_YvjIzRq1A^$s$1JpP7yUxyi9jF3QBqFZnXbmT7jyS7B$+a@dwa&{u zlhO5A_p?sV{oJL!s`cYe(k)&3Qw`K5*F?#=x~*CqVb^Fd2R|*v4n@I;H3k*g%to*hdDjHW4zP<-KQMc(?aW0BaApwm9H0L75@;$ z<(<)k;Hlp|QS9Xyi0@$~JMVC2|eHd*f~C6r;>n zsgu`}4V9G}7tj>jbA~;Ca%RYkBxz>NNenHOmFH}JcWU2&CXT7l3d3*5pq=jtO(k{y+Ju0{eehM?3d*rO{-grg!EgrL@DtN|p5!k~Z7UEOUC zQ~u39Y-?AJ(jxLN*ov zGU{DkH8ltX3PtJ8Q{EVb&qc0Z=zRw&F1q#}>Kty;1FWzml z#CDSR&+)3q}F&RrMs?=Zn!$oTD%PMIcngGPuCU{+~B z&eJy9G(NS@=sU(zHPtTq*MK6_Rb;+Q08r?GG+fK8G#Z)%;vPLPgh;>zTmS}Xh&+0m zaP_rt3};g{GRl3h;ub5gFXCf(mAE7CuOt^>=AkENAXHm5SWAosK21?agYiosGP__ugnvCKzu!Hw~s-n-I>1vE+^ON&y zRVv~CwB(&FaEJD0;Qo##*n>vUJPr4_h$O9gwX2@&OO}>MzIx{q2UvlHqnhkkiu)N> zaTUlMns@O9F>i!&fVg_#@o(_)hZbod-ve8{+i_OubEenju@!j2bcf`1eKIJ(@^0=$ z=e0@cizIdYLKk@k#%5UcJkWzy&qP>HZ&vE(ap3cAU#dB`@BJq9{T_T-@azU4K) z^(@3K+mO}Ez)el%bCtKsCkq9rX|Hxy&xd;OhHUqD;S3u`hjiBqx{edghPPK|NO+n5 zhREu}cu(-!x`Oz93R$7+OR~Lq%~Ew%_jr&O`E3VbBE&U;WIh$i_8zx9Ea4__-} z`gLCWa&9^`ZZ4)@9J4y_?xI|^L|Pp}zC=O*@xZ}X2(Li6pssdxs0X26ht_F#kp}o4 zaCBQmc}twNx>qn9!}}1|d(y7^ICAYWO0fj)R7KTL^+Y}-6#V_V1+QQQR)>7ar+hT$ z_A`@fu18@LCbQwhN3L?e9Foq-@tmu#N)9^u`Cjbcr}MC{KjsKPjW$loi5<89r|^K+ ze4-?f>&;#R3Pn^cG-5PDK*r<5-{a?b2Xo-xFL%X9d&W{kMrCXlx+jH4V2_{{1V}gr zfbjNh9lUt*?)kfy>yjl~>EwyKHcb^3A3d7vA@%7~rc4_*dYq+8*DO(>0Uv z?_R>Rmv832efiWy<3-Y>M_(#g&YM@xnlop{Xt7HAaaOf*=AJ%PCzGa4b-ZA~0-1@a z(`cj~F=8ZWETm%s*Tpl4P~oUmw#Fg+CwDI0y87td%d2-U-@bnT-h(J{8sWl(#T^VB z(eO0HiTC=eD|s?y$@CUBgd4fCUBI3{{}s&Guw%u83zz1*nKSFkml-<$gh-g8MT{Cf ze(adZ6Yt)bGO;4|%o(+L{P@kxS97_|ndW$zFyVS6({qg{6}_2I*IlOOhtfL0>X< zq+VD?nWkK?HS~};vsDzJMhAZA-6y?mgb8)dSYw=dBSN?jdcJ-Cm(p<6WcW@s9J1nF zCU%DBV0nL@m!2oMWs>51@r^}@r;*^NpI-dIHjZr5a1y6&cN$nHCI{L{%Sz55Dk-JP zi8!Hj8?j7Z+_x~i#}CYx_%TV=O-b&KOY;*RSjyX~f%Sh?-K3t7BTUN%ab zrvhjjDYS@05-mt2RdL0%P*aUH9{kd=z)MB_+(U?bTmaD4T;iBi>g;Y z?AS8OD7J7@@4--R+pk_?QeJuGlUrWxsH;8RTEcBQ-Z^UtNgi0{neTOalm2inx@);8 z%s9iUHX@90ZoeF}?z^wl(o16pijz(wjWmleyc;7-OF|8=HN_kis?v4A4^KQv8vV9j z#PQ{!MBTdu&us(S@*tjCK>~EqP=M}XJ7mZW7Bd^&=h6yYeoTqj@JA zP)dw(9c5W%e>?dQNItQ>KIXDx)>QQ=a9IN z(1Sn|!W7bFUfiIX`x@~J1|>>Z&DbFici140od-H}^2ADp^Ni{=Xi&Q{5Y0Yu zq3MywL_^fddJOc4K}7IA1BnOuKIQmI6fsvhv*eK%~7qMUKZHd-e`V@p;|bafz6 z)UhZYk$SlQ4?*P7kGYsHjOuffL|z%oMx>FJM7d=f z-}oTq__8;^9F8!F>C6H3hK|GOlcbXKPG~mpBhsWMJgg}fM}pB6t8fLq$j7>azOZxK z0$09J87_X|E1{p97hDXAP>CL_q5Ha*L-CcbdtnrY6cvpsreFjkT!9qf#9iEsv7k0W z!)@k(2~7j2Kw+rN8qnw;OS%HIu0d=hyvQlXWKuSt{gfkBd}byd0TwJy6F=fG2>DDW z4@jbKnEYJ3S|)+YTLwCmA3)yQd(hZ zQ=Q5Ps8VyP)=UWHusTUfCMg|?U93F+LJGskwUBjC(x^u(>)5)Cbg`Oc$7M+fSr$sx zMhoTWN4eG6xtP#Y>{A6G-tdM%+~SDIE8f;*Mb2i-Ru^=&25)&Q)1IMK7_gXF)=YvD zV#Lp^F`0?}O7fv*b%a1o9RwlhBZ#sL#9fL#*F(~gxT&qSwXcosaD+iyl+CJ#&M>bo z*4kU&whXv0DTi>qmbKe_qJVFm>2mjB6`eSDuhR9%bgN6BvUp=1+WnU}x@(J9AT}bW zxkfs!xys3WFodVI(w0i8Ni~gB!qd2hL@In?3~zG7IXWf2Kny$Z5@r~cID{b>;YVY@ zVu-!EEsl93Phl2?p2%U2J;vt$%qbd*m_T%n9QCTyW<_%l^RX_1zcHG_^n)!ho`#HR zY-8Da=s-JmMh`p0n`E+6m_o)CRRm=zIt@rTxf~CP(Ai{6;buV5z2cM)Y?dn%ro!^b zMJ*7kB*vKd#GUa`mQ3kkPgcn7+)38q$+JQz<>|;@G(< z#*+vHA-?EmG1Q&|wYXLOZH#g6dVy4N*}m9Jc3 zg}^4&TwZmn{YVV%#Cq0kG_$N{1!Q_6>tpxK_N;0J$6gB2*iVM8KCh^31doQq6wWg2 z3=Ob{^rMTLUg$#^N?LvY>EpEj7%gR0bK2AnEMNxR^uWEP(T9^(;G?aqUj%MKX%B&T2-G;uggC_;*MVF=32++Z3~HGl)~ysn8^Ea3zq_VXiWcO)4KWe@8je zBVgz*^%FZ63t9gB^Po3YAv2QQ=^&}t#xgwbqV-I`K{-a%C06KqAADs#yRUCabY2*z zcB{j}2$0aCDK68_wsp5447o&X5%MoD0Bn-%g+%iF#b2Q8F%)ZDg>S_^_IhOD3t4D_ z?Nts_mLmggqD#d8=z0)@;~&3~p$(-dm5`^mV+r!Q+GxQ5P7NcpxqaT|<@=+)KE<1mb`26Wde}+4}uh&KUR5E6@ zbz995V_^s7sh2JF&<`O?9KnjCctoTWSxpSt%Dn^J3=7&_AG;C54#~nJkOeUKTwzq$ zYABv)7@Z&NUZ?n;rbHk#kQ^?#QHGpT5aCH~ETDKapvRO)3J!~aon4+$$20hXyFmg6 zHXD}3Q21S%mn?=j=-d3EUypc3LX8v>mY9VxA^m*@6!r%_cQs&Xr$Rw58 z)Xm+D-C3cPc63M_eniF4A$2rECN=^t0K+j1gEt%o3VmW0?qV9MFzqlq`4?$&~a9jIOK(O%R_n*LcnOx*6sw7LgBurM< z!_3SfuUud@x*O79rB*VD3l$``OwM93hP=riXLK3|!O&f(QoPh32%$-8r4Eq*+B7Vt z2esHLS&68r$z+yJ`=Mkyq|Tds12Qn4@A(>+T~PYqPx|{r~H|jWD7-|<}{?{YObCq*cNXV;%*wnY(AHQsMqx9CUw?jK33z6 zc_&|1T_zSMAwiKGUtmCN5DYw>=p)ep{kQAgybu=PK`G@x#yRu{JLG3(nqn(@P?L_*M>?rhMJbey3YEf!l^$mQ?lGPw zTpxB?oyxo>F6oXhglBD5oldSyIRr)Ut>Ey{!ky4feys#dfq1&oRk<%!`>K zNzrMXCddLSG!TrY+*0l-pZaODz$i5MR#3cyITYjY$*DY|S9Ro;)|6^CsvXa@oj@Sx zfEpoZovC}mok$WM!BONRF<85h7{Cxrlbk~>s88HAs(up2LJD3j#^=A`%RP`H(D`b# zau=}HLYV^8YH6I(9R;gkBQ$s_sJ>~*4Ui042om|uJdnfmks%8n1#NBwRJv4kl$Fnj zRd4!&Pq2cNc~6jP&OHRHwHBz+wVJl}=}BNCH7t*w7NW`JlWt%q!ny?iy7HE=TxxHQ z>v5?BP9p65h?S|{>(a>{zwSk_YLKkrg=o0vh;62_-iV~>$d?#v$|kB_jDxT?#9Evz zVgj0C@+ZsQh=+ZeJd8uk%4}-fL(Relu`0%FXq=83telC{x^A0?SmLZiZN*Nlcg$gr zULJ<<1I@7!F5Th2x@x~7Z9^!n{xz+sV%x#Ws0uDD)vn%0SnY(Wpmf4%qe!I_*^w~O zQrPy84+5dc(rlr*1p~>vZ`s_b&*rX*ciOKAdnr*e-Y(ku@;->5eHZF>R8j@h< zjsRZX^3tO;n$(-|w?cjEB{~B&CoGy}x3A?x_vNCE#=4xq`7R7lB=Xh!1 zr4Ez|F|E3b&=T(tTU8YAEJu12#BnjRZd4bGqvLWZWvpWVl*%HOPB94QY>drVjj5@m zDpl(qa5Qkp$yj3p;pKk8ggKUNnMN2*r1 zZST^tQ3Ns^*xU#g30?W_D=h_u;0JmO5e;Rfq)nLKmxevu!}*db8!x=nI!;-l8) zN%ojJ%idpnZi#0M z3DJ6A&8p8YpHeW>Z$(?QUtlz7UeZPb2AS}(|Hd;L9|Ar59uG3_gfa@T5QvA)Sweqv zK4`)lRk~EfjaF_y~kX#N*&qWg}sc7bJLeeitUoK^>_0G1nTcZwKOQ~G{ z(-@PnxR7Mx;x(31aY#2Dj-*43l|m&kITeO!Orc)1gf`sYBbiR z0)yN>29<89L)bkdTD8>fT%K7U#ycYfzeV={H1J|2RDxwY)g$nVX8(lSz)j3dFqCEX zX!}kwQeORxD&5$ZP_;IRyf$ptPf|DZSwomDumfHEFDy%Icn6G-{7b>?#bW_;EV9qe zHa6ON_pDAXv?io{&$q9d_qt3mVRw)#U-5d6ZhPB;Jlx2keZw#q_)7*tAP8_?R-de8 zO@mVr9wS%0)~Q+sbX0o69peU6zLiu!;y%db#8v||%mOn~9c?p-UYjmmIIBbycuOL< zf@_~IOx=SoQG~-Q59Q>0Y0QN$aE1%=cW`)TdpLEU-o&nDiCavDyOfVETL&I16_+e2 znTF_EIpqooW+LZ#KPE@}cf1L0)VTNm&sO=Bo4NN1NfP#}URaV{H)>wnEO&di=6*wg zuUZ~_+3k9D0#aiW`4NNCC{qsfK7Yuq8Q_O+C!>&atWYH?3*<+O`HIgqoi`^0F~Th@ z$TXe=o#?X+eutb5AdN=ouxzt;oW!RO$Dxx*qLaEdI}z~e@DPqzm}?LRL1ssvd9H6c z=+?F-IboYi8tBF>VvIwi+xp9fZmwVXFb4)W^tuz`G6{7W`|${_Q?7S8_M|U~z~=e2 z?WGPr+43F{pzo%hTlIm=+A^_Won3Q4=QM%r2?xtMu^aoGj|R8P*|oV`1?Jg+^dJjL zXLm}a^zw!%D3g$_TulHpu1#bA&G6-iKDj#=`}o?rw=kGTEBmwpaS)gHV=S>H;VMHp z>;4|b`PBQ3So~rudlu*S#t%%vge1r(He{20W0?G~&iS^_SgUCt)9s+1CHHXHZUS%X z95!%!5mjm1BOi zAx7ThO^$wa4Y~87zFIC1GDe`;`FqsAePICI zG#nP;OGZp1zLBhXm8XXNrVudetTL=ZwtH?fSN~x+&EybCEbm7xa=&4C|28>J?Mp7^ z&vQ)D2U%jD3|``Gp=HDKQMr08K=9jV&)&Xw)|@3&xUkwheggMJG^fjxr%azdWnx9F zSugFb2&u^kUFY8=pPv zxRmL_gdSO8l1db*Gina`wlFk^Ua)cWy_a#XI`5H}XA{2?_-_5q`{_{5uTg~3Td;Sz!)aX#ONtIiU zIp@a9guJS%!)_mb4&qLs1or`NAMrkk4yk6)Q;$8jYEo&Hx#D}wAARy-CmnH6OmR2S z{t_o0d0=FWFBD%i%(WYF#Erz*PE3&*S2zpNu@Up?F+~(tWU(d}W0bMS8db|t%GHR3 zZAKq~Y>6HJe{kdL#LSW@rIJY^Ib^4w7Q9LFOBi zjuhud&bGwO#4k+>vyw{6Jd=@I*W_6Qpd}hlm{DIIFpApf7*RloOlC663T+@)lpx|EYnxxfCZM%$|es^c*qg& zd3c)tZ-yBL8DJvO>CB&UebY^3D>|xMR)isEo_ER-1{QAFRF;^ubY2wEfy#--8fuy_`FueB#>YpQ8_DQb$AdLOE-#`@Q-yZ#!OW5!1HMYC-g1;o~1 zJ4~D;Ax0@Rj4O^wA9`3v-F4SH#_RQQY7v>W&@VH&bil4D?e%*Nqv!SE@6jiA)n~80 zB_Z+ZE3wUUfFf=)wgRE5#Rgh#(2g;YAex zPiRStsb_ovNhDyTIrXH|?=cR9wM1c%(TDR)0=?c$PY;5qp3K^mJxmxSI^FwT&BUja z@@3^&>02NBnz6z2O-O#8AcZji)C{H2LVu0mpEvx68WoP{_ zr7wY*O<@+#UwJ9!VUQWldM&e=QX*3E`V~!Ev`R#;I?Xg>MW(o+Nli1$$R}oTwOP!s zKeMPtIWRQ~vmnb`%rexo6veY?F@;Xghz39}b*W7Kj23kC$k1dF2tDZGl`u3HFWG@H zMG|m}GI1xE#6+uk-YQM^tYkiQF$+>yggE{LXfy;$P;Zg18k34pLZt=5hCVc+64jKq zEJ}kTYNm8>vgY zdY8lABe8B92HYGAv$NpypOdAje_$%pWA*A8n>|!#56867j+PdsHLc|4q(Wz?mbI>h zt!(Ad4|2*RfV8YCj&P?Jj%Bfkw-f8=eE2`#`AcAe1!G$&BRq_)m%YPt?_Q!9-^IX= zi|TwyUWYiOcP4OwJE7iwGNDO|^yd?8bfbC5Cl>731CI+~sIf5rF;ENB&wfnFUr6*I zhd6wvm2-yS#I;XI}`Dj^kOdcCM#B96Jn z#k*ZKr$|L0hB-(2I7cmHd|(@ih(2Y+34VI~Mj(qvW<(w+CXkY0^I=Dn36XL~oHIeA zSolIJR0@?{D+f6o;uxoLu>lRdUoq-tHjqT)S#+`J2~*O-2SSbr!IKYBZs$=Sp30`7 zTw+0jdJb}+!$?f6Wyjc;smHBjaZev?nY3G_k5|X^vT9M{&9JHb>!xqal3DfF>{;TW3DUb zjppjGc)tahP=fkh+L4Pue|<<&*CKhXPImIj!(B0gSGk9cY{CC#O28a61NlZu%Z2+M7}TcF1v(Q)*XxD+f0MY{!rWJo=&c z*QE6vxfn%D@GfGgP}_{A&58IiKq&b=aey{WM%y)wp9 z`qVYe3xe~&FvT!Hzf9edh?%ALoGrLf=E5 zA}~ylnt{r8A^f*5!LnN(^CnMbr+};YV9421mj!E{V6(i#o zZ^L4KQ6qt%YPCvL?k5Dww0 zOP@w7Sup7vjY9cY>Q;u5^Ns--JdQ9JV;Akk5btf>?ja}l<*?%6^?nj418)F{a!vl^ zC~qbyV~Q3=3->6=I5ICPrLrfe(kj;hE2}MZ{(%&WQ17^J1XZ%n^6I}{hi&w%+G_F` zFOt3r^9k*2HJZ?M*k%|JX}$>m(=I*`5fw44=s`Bjr8H{G|DZ>K4$ZNKGSO!4ER5sH zbmbd|Y_$Sm5C&oJ&cp}z@-s2!FCBAu#L9UFOwQ!vVNMe@V=o0?Z7v~5SBPx5m=h1v z!!~jA0{Q0~c9S=41TbezFt;!=m^D>k~mSWm#h>^XGKf7lqY15 zOaV1e!;}%sR80+)P1C_m!^x|xZ!WTrnnmiIF$?unhi4{pMKj~DMC}v;IE$iYz9M)kSzCjwyQa$ox@K$pu(UJ#K z&`rwsX ztNe95C-YzL3}Y@c&1A`SQtdD(bU2Ghcxub!{GlI=a~LLJo=VgL(^U}iKo4+pqlmT2 zP*y1Qz=fm%hK}~|18!odWXGK@lp@VV-+i8_c+2+qYxo&o6C~iyRO14Qwr;Sp(1Rt{$8Yf{^ocDR5H+rQvdYShbOJNue z7m=2Ux2ksD%8N6Qk$AO}>aec6|KtM_`dSH8A)bmgr{Xs4EDY|S=i zRCBRkDwQ?BHh07}B#-1p8h0f9_kTr%6;-z|0~mJ27ByH^9u8PreO9hYs_)jp8#uUw zp%y!J^)z!eSD|NwLzsj?_&7b-gX33<%<5*BWL|1lPV3f)b~1x`a)VbGhDxHuH;L zS23}8Nwio(>CAOB7MJ?rn8d5~;5d%unD4~vm~K@x@(k`Mcz|FvjoB}XMP#dDVH!_|yyi_@mA+~KpS%w7Y`plLdRg&7=&r)$`tajN&&Zdv) z@s@>o(A+cH=rndE)&MVHG<7$RZwqy-?_bR4BKMoQr%9P)66fjq@DL!mYL3<1*UxAN>w9R zRSNo=54yjI6nCwvBR{f?&1D)~;rg(F8^$4|MS7%3x};6|q(hn;K$@gM+I8IF97LM1 zN;#!hnm(988I)lebXuozdZ%|fr*rzJeHy20!xfaFrcpYnRl1~?nx&Ciq|d>nVR{_S zA*9^F9Z=`0vl^=nW2#3Q8*VzNd3vbD+NYPHr_Y+Fi~6XU`l-jEsYe>FMOv`?hf#wQE7O z<>Etp`?psiE`U3@d;7QLf+Z{ge_wmKnY+1BJGWCCx20RUTf4a9;<~Z>x`8{pe;c_i z!Iqpmyv6&pcl)+$d%Dp(wq08;gqygBo49)$yNBDm!F#;zo4KL;xz#(pshhlc`@I2N zzPG!#S>p7(`@j)A!4-VL8N9(A{J|kS!X-vIlRL?{KG*!#49{q zM7+dJ{KQc_#Z`R8S-izv{Ka8>!l~-LxjVq?o3;5n$8|i%o4dFHoW{BT+q;e1x`{ly zZydIFJjs>ZyqDX@;oHaCd&oaT$bVeBr93Whe95(3$$Q+l1>DGsoWPMAzJL75g&WJy zd&||F$D6#&t319}LM}!Dt;u?r%-OzVB&-FZ{Bc0Ss+0;!M)m8n|Vg1)-y|i6{89*6gax_K`D@Nrx-L5rSeRmm( zn%G_W*kL5ugISd?6%2*3blzjwiyiKOcj@?dp_g%?^>f>vJxjd*ecHp_+J}TnZmhOC zCfgwv-Af1BO*=^iIy4A)TC=%h7`TDwy)ux=MADrz^nKbV_}>?rfo~b@JTjoo6WSNM zvA@0B7T%(BM3@D>;cHpqA!Zp0I^n4(;|)upSJG5-36TH!<3T=NM4p{rWZ&sCE2a2# z!&ow3haG7CEkquCby;l74~ZDlfnV1$cz)t*BLpwL{+t=$L30TsSwEW|Fn-=Pf_|Dy zgAl_FGVgX@BJ+WfzUu!%oiy<({$lpG$l(i< z<5}@5w=J9S+3$Pa*lBUxU872NNk8$^dEQhXbVA?tL7$pTgs+aI^k;tS z2zdN3mYf6`gLiA3vW{YC%a8%9nWL@ueIG^8MO_k6@r_+d(MjWxS4aasbhL8&As;tT znXZ!g`j1)r6P8Fjes%MO^3e&J$A9hU3S{{B`ZfP8>{a|V9wWUUAoK|oc(0(rf&&L0 zEa=bQzlRU~-IGVLqQ#5yu-UR?$<{b|;;u~_Ns^?vbQIHxE6H-2IC%x-u}eo&oXwLo zbJo0xQzcKHI)esfhfrV9g$5f!j5raaQ;Hg0jq(WpQe?}kSg*c>X^`H%rAv+8(+9RJ zSbbiR-lNAhZQHg;&HfXsR_(Zr9Y3zj%9rofu4CmI^(t2|+_i5LBTZ{iaNW9hIZ_ST zw{pvu2ibl#iEpOwtoZIy@-N65* zPHJ{I(z{Y8`{vzO_(8*`KZi9=Jv!Lx2FI=Lh>|jM%g%{|PU}!Q#KERBA5JY7dqM4& z@>cy09`?fWXT_VJn;xu{bb;G zCslNigiL+d5Qtzkq|iYLotT0qa;(lsMZL?NlxqI4NaDN;hV z+M<$7Vv3QbBh}d4lbbf1>`y-l3an9zri$k%t6W+agPVp2*g-RjbPZQ-F-F#T!Qt3@ztLeqH$TF#k0*0E{?ZkzAR_DX%5(Hmp@@68!6_88B{Ey*3wBxCi> z*_NG+Hq|SltlG*6%WI~FQO0?Z+%`$;qL7XX1f;1cBD$+tS5gXZ!l2d$E#2VRZ4urb z4$8Nce#=$(r%57J<$0OMXiKiThPt@2jX#CdjCog$H01;b$!g;F5e_@Npf7|vv_V(4 zj4Gh??)&e+2QPf^sw7jloD^;UZtAt!vV-5FP08sec+l!?(B0yly5IJy4hrT%v_Eev z^2kyjt?JlQ=@9hW@7I0osS4@2^HyGuJnA=AkA9AHvfsXzt3p-$4l+OS#UxYSagZw7 zK!qtd@PQDFpadrv!8VxU8g*i~v}7P}aAxJ4h6?F=Go0nq=X12FXj#%=Er zn=L}98Sb?$CBO5tVk$K3lj^2o`-F$T?CXN5l5K7 z2AQyC4@u)3d8U{Yg6&}cOd?_t@x{iHxY1}4isKRonKYd}aXOVs z4|qVzQkwFVrUZg2RY}TKsICyc*X$czUbM|* z8pWIH%p3`^vb*5@feBg!f)S3u&wd`k2>bMBKLJY6fc~?UOaO!_h6lXj`NeUMdt37? zr^fr;%}3E2TK@($O(eB0osQC6F!cdXYsJi>kHct0skuDrkP4)-OA)V18l;M%6ec`M zpNLxepJ7t+NTfRdr|0Bho=45gG7D@V1esuj9_aH5UC@FSzChKgO0}w3{eo1tD%B>m z(g;kb0tG8LMyzPCM%K&Y%Gg22MfMbhUy|gvN@FgVjz=*&q-nwa<21OkN3KU}nt#q^ zSDOtgEPBNxUz7Mg`28b|fz8>*3LBPkaqK)p-H%v~TA5Ial8dS|LKoDKhBV0Gw5Tnu z9Oys?)SfmCYKW~>kI+gmeo>6GWX`yhgsohJP_d)YSzMLa*FYMKG)bf^z<`KZJ+?J# zixuEwhx^#$F4Cuiywel)aSluU)@J;2Yuf@joC#UCxXM)wVds+A;>6^JEdj+9w}?t3 zXrZ;P&98p{Q(M~E3L%xQTxBa?8Oz+(M|EcOZDB4K-JL>DhwF>(Hq+@P>CUCQniLF| zUROi-HP*or#x5}fCn0}ySBjP+2%!Q;opTQN!(S3{4>eh(cC=%~ zu8r)$yw%s+*0Yw(xdaPIWGi~~M&paF;c2q?7RGpaX)c*V+wP(`NpP9lKMm<7GuX@U9Eu;hM z)t+N-3&a`adAD*IOB@Ypz(e(_RW)s;k=%3BBEIG{SG@EUPY11XRjR2L>jPPx`8jRb z74b4;?X!D(#YPwQ2n+f6Jw8eEHaOc%B&iJJhVAvwG4y4D>|)U`8IV0JVE$kmZd4L3 zmrwdcZmLyy&BuJrmtWAQU#4|)?lysh;0Kx3Zu2Hv`9@nj5JnedV8THUX2df8sb_!f z(;052e|$w@KI2#>xILi(f5ycxW_N$Q_cJB^p4?a>VI`|m_0VZ}LX!m1b z@yB~{BO()4hMeSU7kmIpA_Xez=3D*LxzRcP+tVpzwG4 z#7~2VZqK)FgOCT7c!`*piJFLsRtRs?Cw)zpg_DO+Rfc)av1PO7JlB&G@gOD^#$eWT zhC5g}?E{FuB0A6n6I_yYTW1SRw~DxeC?&=!HAahwW{jHUH^{VE;^a&Jy26Vbmv)R2 ze68qFzbAM4F&D^~VsvPR$|!oev^aX>dH-W~su&Y9K@$c-e4=Co$M*$k@O+p?3b!B& zr0@v%n2-9nkNnt=d60ziXk>JdY1JoHS6~D@pif~n1>9#eN+)YGWKr)!gBay$5vJ9v=-BM;*+fL_R$|1*+Q zG8mkBHIjLIlxZ>1UO$%8I@CcWKW1%SDBT@zzSqp zmSX7%o-mfhDVArMmcOZAM|N{O=VbqtkU-D_M)wWtU>^^8OA3*WVR%e{Gnlf-Lffb% z=ZQ^5F%!6xED(iLp{bN#QB2@TW{sszA_j>6Q=Xtf5Oaej@5zSJA)3i_5B14dWT&1Y z#-Hw!p4zycW&)rXp*|uhpAV{c%fX0_2vA25iAg30n}~`3gdhvVu$8Rf31G;8 zXVoEx?lTeWU=igbj=CsgDMwU}awWXdB?&5}3r3|@N*QMb6kMUD!KQLnk|ky4QDG{k zghQqkfh=b#O=_BFswsRV!H&i^Y4Mn3>&6KEn2*ZYmA*g>#vlyQP!8r04bWf=#=w=y z8J1^RmW8U1^e79TkOxipq0MJ~2T4jku#jzVq~Z_{5+Q3%N=GC&m~!e~wgX>x*^ywe zrJ98uu^N=KN|WU$7dJVS)Um6sI;(yGA^Rbkj>4z^BT;}(b%3Phd`5;^dcX*pV55in z37CKhVaW=_@C?mB4fDVc{O}Id;0(<$oRvzWU&)*`>Xo1HtG{)P=G){O7>NFzIj@CV68TKsbaaUU5N?a3a;WxuJ2$C&fpB{nyt#& zuGmTp%`mU^>RL^BcugjG)!BjA>2K2juuBSl4?Bm}xGNp2dMXIA?g<+r){9lEo^5w# zS^Ifgi<>49Cjwd)b{Dn}+F`;nv4#aMXxp{_@F^W_%S{sDG8&3cfCo?jTtK70Lnetw zhKY|LmMVI`ps4hUi9D*7H1}FT3Q(eYc>_5>7cSBp5r-ZAoytlgDm}25-BCcpnpC`Kt>lYj(b_kKX z4{B%7QyxIocDq|x`Z>4PL%S|fykk2Sx$6(XXBB?h1MUc@N;as5+LfCtspfmW=v%Zs zOAXav4bU(PurQ-%39sdgzUJ!-CwjS`ppUXpkDZ#d)0zfVbp;$~moIS_dP0&yd70LM z9zM8!C}@7~)ku(}Btyh{FsL7O)RVtTXfY_k|FJ>A8U;RjWQY5Cduc?266?V)IlCf^ zL@|^|{UCs@p$b4sEmLnFJ9Zs z8urZ2#4K3$o)|&R5oxk6_lO-zWQ-SuIeLkO+m$V<3&Kzh?Q0G8Yz^lc#P(~y@$91h z?9aj=4Cv|%(7?XXAPkbqm8xvGDmn}7TMfd1qdf|cvHZoeJVqy>5v#yu%m5UnXD4`b z4TAE#zV@+oN~;=lHKW4}uD}tlAksIXsv|};YBJK?oU68T(!v}Pcghni?b6koH~r8< zM?%xZd(#Y@)2Or4qjNPsopy@I5-#_>Qx&Lsu&J`JkMLX#j%p6?@YRs})#kvn=_;d` zd$_aEsOGTNY|Yl?z_SEB50G09|H2TzhYFU7`mK*U59PoMFzTFKT+v`WMu0L6uCNLl ztqdgru<^G@YxEniVXGw_GqlPZ%CHJ9y$r6w*fSPc*E2P{wZer=*^R^(%Fxo5unLMz z5}dt4onbJKO&gNU!bC&8mT}s19M!q0MWXcvs%2!ssg=Z8qq9&BY&D`4U+|b|*Im-{`pbNJ{)%XT>ur;XUE zeIPzEV~$N3N%w-OIlZNw6}W8)uCUr80kCw}VMle}CYaxdyx;VM+N-b(@*RJkJ;5`R zrucnup`zed(cd#P!>(~Q|MJD#UEp}972K(8oSvWy#*N%6zT(`i#FZ-DqKxAFklos? z;yb&(;|kv5ot#2T-LxPK&)^KzkmKg+3`YCPf_>4sb=j%i;9l4dV|apMRy1~_K1j_O zQy$F@(%=961^P%fR3c9VVxV&f?a9&@#HND|+aOPUFmN|IvVund@u*lRu#fD(+rdyK<-r!=8<_V+$zYUk6ybaHXi0ul`{+Y90taSVG^KE~x ztuv23^QhhB|BHF{JxKB_A>aq@*d}Y)&FE?%?JO|w-`uFB01`=I&R>h*E} z_B#gOWIr2KF6U@Jy~o<-KZ5LHrZ|ko9E$JXzYZrJ^5vg#wlvB6ZmL|bvx;YK8LZ9` zey{Pz@8&LSv3=P5(93p(qUF3X{2T5v=ggs3pay|piSJAb!~o;~@1ne54wr8a>d@9} z9Syo53W+-l&(OZ)01)r^?IXA^Up{;96q;jL4w^Azv_4__RFTz1jI*MZW7sj;EKe3O zR{Zp6|4^PhX^sftQN`4^X)%?pqPc2WOq@8ciQ_3Q-A{J@{tYEs^q;Ql%FWyzAOn`w9UoGK41SfonFHdPx_ zD%E&O?}FXx^($e2OUs^h+V|-)S8n0AlC)@lL8!1rtW>6?4|aip}zM zoD;HJTk`IubE=Apj~+m-bkUL~5Tihk9#tfz>(_CP=G58CSJ0rkXuNbyr!EZQbz{%S z&71emp26k>?UjpW&6=?3vuKSZ>5CY4h_k3upGC@3rcdsP`C=8aq;NS_YUw4MW~xb< z|JI%orytVt(u=9a64Xhyd-Nd68EWR?$DZ%fBf}XN>8uqD(T)LqL~clBuRu5d1KzeoiYY#m;CO)h`(D zG1bYWUL}gj2UV3T${k%%CQ8RlwDHN#z~QyE7b%n##T%UjRvuwToyo0GhgHkO|6}!` zXIWcEEjCsqjk17c-snb4^{|tmsWvjIr}y zXR6WDUgzGi#!gEi)z_j$8>KU0g)72D(Pk>`FW!naWvSBwX&S{9W-7}utrtu6$JDO8 zTIwvGq=m|-vhFeYWSVP6O|O$n<8U>RE&EAiW+Hnls>)oBN}hg9*2=J2donsFm|>i` zW}A&l4P3lbUb$zVS?(!l$%uB^v67WuQtPq2ej2B!Wt*DnoUO*WTC`K;nkt}$rZU}i zyJ)vdP2k0k7J8#Gr_X{AQiq|B{KJSAJgYI!JaW9VH=o7LDd*rp*JFhi|M_&O&p-Dd za`a-6F#6mVi1@oNQ{glo&{J`OrpcBg7xPdp(9#L4LX;iUUE9h+3ymGCP}R#Y)3g$6 ztg@n)IkD*F!NwNYawm&17NtTS>!PmiZ2R346xn#HzOS1z=8+0swd!4^KKkpkkN&LB zydMpF?BbyhD9Pi@^0amss|l}qQk!2{>Sr!?2uWSIVVAoC7p6~WL^;e!+(Dot zozYc9KicVzLQKebLF5@5F-PMZ_qjP)3KN5S4}3hw3U~=;5P}HM z#t7t->y2U+wx~*nKJ+516sCYeT9r;3(;~JZsenoWR)wUv#r^$*|1;yL1#FtAA|D}X zD;dI36`_JfBeiH-V5H+0>3EkhV$WP>>`eK(r^cmC@qeR&qk>vRM=nM&kch;iUdU)h zA=!q4esdS5NOFsEph-;!VUwE{HYq&mX&@;C4=LBwCQr~}P7ccxKlovee7z166Kfd6 zK0%C%F{)y=%v2^!GQ=Xb1QalNQ95j)L?%9HT*PYC8oS7>wN-JBh%BHT!FU%AJ#vrA zj3yLgl$mEP(~WAGCN=dkBSsQsjAb;}IFMwPZUQnZY+PA1S5;1Pesf9Jx}!QBS&K{T zF_L|wgBsbLVz&kU10pi2czJvZ-38A ziZ+w^)0`HMr#G9T+Jee9%fzFoMwOnan0L*g_|&QHglbeRGgY}&b!=Ci%UQP?v!lw! zt4bA&P{ayQfqF=iSW-hEP%<3BWn!U<>xf5mAqv%fjvCddM&$^Gxxz9|7qFm(Dmh9g zYLJ5?HVo-A7z+*QwD5&6ypBZtlPDk#Q4o2!!WF8}h9k;jrZv6kgWg(H_T`1HN5$V& z+vc^qQHWEnJndTln=hs8Rb_|5S-{=1MQO zU)`ea>`5}BRyU{D9jOwxf{m zIP`<_nGS)CK_?hG3O%B8(+)AE5$+UrbENegrYJJeh@3Wp}5qV>2=Gc#hM58y8w4^N>*}Fm> zG8nr!<3Vam$z;p1uy(9SC>QWrQU)?!ZBbtjO|S<|*h3=(hp12JB9j^Ag~H_Y3_DS( z86NH6Ls4m{JL}nD4^!AINivH}@+pM|BW-_9|4R{EKEoFxZbUhlQx9*bc&1BqaZ;{a zCRsK}hMI6`^JOnCZOpqSvu1+))Lp+C)bJej zte0Htv7DO6GYYn5ipbW%JXAqf*w~G#(QN#`wz79B-*eSgQr155 zs_Y!>d@96sd+~t>3AkJ{_?BOG*0Hc-fW=)JT_Jvti7U6&0LOU7HEz}{XVKUs19_@O z{@zoe?SLH8N6Om?p=nTi57zEwLNi#6|ILDgBp0E@VkbwrcRV(8ja&NXB1esrUdI;` zkyq&E!wYp>&S2ItEq=Uy3t|w16_hqdJ@~y2n9bIv@{^HIGu~Y3lFZ{!BkCci)-4&e zBNr-fc->vj+@f-ioTOGz-;wlpz>`Ms%Dw5a;Cp!Jy*2MRo_XWN8!MVcUh;#_t5bwd zbc|Utbfe>8cD7T(6NX2H00tq^^Yb1OzQY`xi^xS(kMzhcr_TVU?C&>AibpVl5iS)3 zB#x2kb;LufuDVAqXgYVxpX$??ZzE;)F7pCrU-Uzv2kDb3{-Jz}`*Z~Q;*A|8d=`HE zq$xk;<-eizANkneM{@kpFZ%Ku|Ao>Ey89YBF@ZBNiI_~Fm^~AvhEgHfGYE+Cj|HSC zkBYa1nWcDfH->VkK4TMoiI;_XB~l0k)e;0kfCOY%2Y8siSgF2R__zOKk}>nN?c2T? zi#25HBly!IFq=QZsK0HRL0&6DBYZVtbH8BeK_BcfAOwp5Y^Nua5o?jMBD6ta6Sc)d zqaF0LTzf(&w7vn{t7==fNI{fCsR)r0m<}|h@MtJ{d6QleENwG~5_Bm-NW@53L9ODc>T9tnypWW6u8TW4B;2_3u{E92qUHg^FeE&{ zL$3ULIqTBIOf;bX13)pH|GQ9B8S*lq?y54LSuazRD)vdm$csWI0y;7rI#K|g^r)=F zQk_{?tj3BuKYWhJs-eS5EXa`@&1#5;hzPC|31KjYHarM>$ehCBtX`T0;ERSvXemQz zgh(hcZ*W1S=m&NVOW%CbO`u>kKFT)H*Agtn~zy=u;rNm0|Ge3$XK-{>a1e4H775s+iJCUPE3Xz)$SCB!jtil>hB(0hth>j zfD};}t&^I|SUN2;^aMGvlW^-m6^cVR8$`b>i9ry|6@&+*@uyT#hQ)M+xsxBNDM(R# z#lyo+oLfp=ys5W|n|ypYmJ_%it3(HR%JK8e>46*TY@b-Xdti|N;-XcoX`=51+5(B*ha9iHwc7VpcG@6FqXt2Jad>VZLkG3 z55^+U$TFdF5C&NIoYiv^5lTDlNDc$#paq)+HyK2u>9c-i(}$6 zcv=x(;ZgN_H6j#EUVAPgt<0UewIVrG&h$}gnn6_yHYb#k?t~Dhz#>YW%tUpyP~;3N zluW>j|5CmfhDtaDLtq5Fd=yCWwg`I|lKM@6sVG+pNj}M_-TX^^*(lbGz!Y*zw&@2LB-Exb)KWpz$7EC^jInq`5og1~ZdHm$Ej?;=(a590Q?;_q>=wuL z)~USFrfff)2-VBP)+@u-ZN(59WK^6<)gl#=VVHzKAOu*Y6k?zS|9}%*^-@QpRdBN? zK(vQA#Gu}^EL}~;G$GD}!k7+4&J%Pg=WEuqFp)&-Q!m1$+Ejm(|P{uk&6iOk4P>6CE+l=+lV=W2gTRx9{ zK2M2>-m#03wW+OQ(R4sk9t~XMG9c!W6XT+0oM z0(#u0-NmN`*hHLLMgWscpatODuv(2F)4{9*vmAS&Jqq)L9f}ulgwxnllkqSQXfW8f z<&0HK)Ly+PO|3Z1&JEaQMW{?bw6f%!LCZ7Pbft@;GeeoB*v+6sLmZ5P|F=Mq zHwx_C-912DY6e+&1djy>0&DW zVuuUk^F?8vNrqCGgh_w|Lula_E?xLd%R$Q%?l4f@%g|3sEMb_lwdG?2-93cK!#ib< z;ymIcZUkI7hGQ58Z}1Dc>t0BNsw?uI8MM)aOd0vK#C%E-p?Jif!(_bG|Kx7*)VdaQ4j89J5A=719rq8kvhh!KAWB>+8P+#`Vpay#(JWfkz zfQF}=94)nv*29jN9FOuiTWw}6v=m}E12NZ0y-8^XBp#x2goH?_1Y}S#Zb{zhOg5L% z;C(XRgrt@Evs4&s5>kHWREcN9#J?}B=N~N9jN8oWv%h-k3widIf$qmDfv6zTT6pAWmL{!A* zI~s6x=T3uHsE}YPZ0LM^=zHcqe^5^+Qs@STl}&YMp#EvhD{2(R{}F#yS5(dArUvN4 z`(-ISYN-8OG10?B$qtpK;YP_-JhP>xE8viJhTv>XbfaN_VQD?ggjpJAS(QVHn&~8F zz7)LaIg({$;v=3mB%yUUPHxZbG`xVU$5=Uss6Oh&E9{a>Ym?#%L>;lcSnTiiv}b=>BZEkc!G3Z_!rT1G)#1Q*Z6o|L^N!Z!>#upzCTzK)e08 z7zWhidH8MH?yv)N>4wRy3?m2Jt?hLCAxi?W2g9?>+N^1Ouo!ZWwM))MP+;fgZht$M zs~PNR`Dgkz*U*%$LQ1maG8etw3>D7_P-XG)Ue|A>hZ}z)EpjUAlkQ&8@#^MrEKI^0 z3vx3XauF8rST*nhzQ8+9OC1V{;}j_>Cu`tF>${{BO0knxN{F)r=>RR~eDmu=+B6i; z5G5~i`aYE-(?Kmml3#Q3H%IC-rb-%QS1nv}JEu76vvE3qnWS#<9)FTQccW>#^Te?6 z^cC1B4~cO`=_*gRJlrAt1+;UcazUvR;FfD(y|Y|p|HFNVw`Qhk;%#&mtEoXJxQ$l(qXrZd|y<&Ffu^x%e%t)qytoeo~u<}r=BQ;!BNcNkT- z+qNmQk7;uoAD;03TUfMji;K9TCHOGv(a{bohpe8>`?$Dk@@eO-{X6BGYdNKIQsf$V zfEx_U9^BJTyqNQgvpV*ECm)yT9nXGQf`8eZU7x}5<HqD$#4@_lc~FKhp?Q#S2Ca9YA9}L`|GokxWRRTqdT*3_pX8cfv3-B_?lYed z2DN50)qI^o-GUV?19FlNl8MJ#r*JZt>osmB%g0UhVpg*w#$sIbWzeIgAtUf*C8E-GY;&tK0|dpzIsDqb624i z@b-GW*UGM-kIwYPhSM-^JryVIA-)W>RS%Jao@bl6|}TATf(lykt>wa3KZY~eE9 z-;0>AcEm?0IFtPMJ!II0+q9+>J}ZdIhaof1K)Rl#gYCnRJcwOw4$n`^t1sRckvsXR zn;-W))LtMA{=9RVmD1)P@|?wvyK{sW{~q4g3CC;yhXjaw0_71bDDa@be+vKUYv^ww z#EAYHQbcG`UOI6auTAUd@uN6-<7!>9Wb59)i470R6Zi4uOL6H6(yVE-rbU)CbD~_R z@?pfF6?r1Ws8Jk8m>xrpEP2wO%6sWLCM#8`Qlv(Y9)0@6iWMzmVxN&KXRaJHv9vyU z%9N?=+pl1aJ#$8F-n@5u^_sKh%vm$Bg2nn`)wb(bTC;TN;-zk1zI^*2=d-tWFWSL^ zn>}mh>(L-VkdAr#22y0LQKM|JgE(=ZOQkTc9X)!DcJ17?ug%P9RHi(hL5C9$>W?SQ zjIujkL+w*Qi z6dJ=>Gj>&D4T>j1^H*RTdLkDqAAS-dUD24Ojy;h{2AMtOp!lOT!oUJ!Vsv>1nrNiO zgxV;suojVY@5L4$l~p$98&cDRgdalwdC3qxL`g~AY|a%3<#bi5S>2Z1aTF4GUy7$s zm_)&co=CP>vL2dJuKA}@&2c#pI32;6lbroUX=j$Q4XECeJ|)=EH{T#L351Lg^UO2G zu!2d4o`~AvCzxR3mW-Hu|FUUk&A3|PU$MUGs;8!^Dq~l)Y--m${P06rWRvCdPBbgV z>P)S+s;X;epM^G>H%pE*$|||Arx2a=$O8_Ufc|-CQH5$bs6hH8I_Ev~sJkvp+~PTo zo_s#dq?7M10pb%uFvc=WETZoBs`g;BgG^|`IV_{IlryN2R7@U;N>{6n(C;YkRnW7*7W-8WWq}J zjy1-{Y78u%ocbZmt~#4!w5O$Gi)sqbyOMW}I*guv_|@cHZxlIXF>z5LR8iKu8EUV` z60O9JcMWfCXxBQK|5tap(g8)b+l%HcUD~#-jZNFp0WSF59OM07L12@6&)$6dG*nK3 zZ!~zq2DTS+N5fQdNQ4s-Bg@Jwzvb0jt;)Q5U}}|$7>0}qQ_YFw;B^`9^N<51iqOy^ z>giq)<1~`c#*_}>Rafj2;~B~AFmMLFm-S4+MJ_qO$JunAmeaVhr`5(auXW-}RnO&b z=~NFn_Izvqb!@bG5B~D)jsHBp(W6g&K~S}C@%xf9C2=t0dnRGW-aytZ&mF=L5n==* zxWclQ!G(e>`-HBkxAesld(nm<2`Qq*j_4}X$n~)3B`w~mBV7bvI@qH?GBFTzgb)NC88Jar?eTPP8QunA zB`aDP##E?+S!eFztIF78A4D_SvHntxpY6jQzA}d{L?t6c2BvsQf{8L*;fhs+PbdSi zmk)m!L{#cajR0e#*53F0`wmx-wwC+1NBf$wcBf5tymOWi8Lh%U%-G zH>h-@7i}>PIZ}~2b#x#eBQ(JZwyc}0;?xEs>5R@K%VjU4i!&z44;|%$A4C)9v3v%! z$k+pu|C;OyCOAoqM?feNpL|IuS3yc%Rs?Rku_b!W=QYP2gqd;@+Z1b4z+r+BYxbF& z{ua78hkgm7r^59u%Vr{pfeD$WcYDB%()|s7cb1K#Zs_DOIV&BqCwQ2X2L% z-9#0QG$R-j6-^kfTN>(U@eFEIgBB0#PfAl$ex5b*fj*YQ_#KN-K$6x@KMLT0`#E*)wfL2-NF}`VG~p7WS}HN|eZ* zdfCjr^_<5;*?aIBf#ZQ&O{roPtn3tmJ?-OLGBk@!%V-wWFv|-`C6`$+wW;qAmSvFZ z7fHWLFd{Sy3A_5$)U_@|vIvA8^ZJ z2gYAbk#LKT*QJ&SUW3yQxq^JO>fK>S-%>BLXcftgt^Ym^r{>NqU{7y+f57!@I)4v~G+7hGcJr2u3$@ziLG@YJA zET9>{?l(1Gz- z9~eywdktV|9ns=>-`LCvNzF&TC{+JskNq7G44RF|J%nIcL~4;5gH_~IyG77eYy~OYn>plLTksKa zG2C_Cj#j~#%?K5T@DbCb4qy<2!!g328NwkP0wh#|G^~R-|2&~YoL`Z#1`JLP5w@TI z457$LU1up)z97YQaK|IILoPUlOl40bN@D4W*&`ku_fUy;aAKl(qEjg1WwoE;Nud#5 z)?m$*EwNSIMBSITVoc$e)ujZuL4`bcLxbp4Z!v<`|um!I0QHWFsiTHxvL69;MLL-#dF-QYE^g}R;jX#`2E>Md!;h(IPS>wT3m%I{y zK^_sw2|awGNpJ%_ei@X_3-<+M;=PyWokl-?$v=YPK*CwZR3Srv-a}!@LJFDW`6EES z9#6>Lc*KV7>DF#FpdM*b*!>ZSgcD#Wk|RZf%_z-?{~6jgu^0(911%s4Z|PPf{Ma{$ z!}UQ4!T7^J%HuR;(ZGONQeKM|vED^qMCz?cD{&-5W|2h{Sb=RMwj?D;CS;cJBWd}^ zL;j*wW(-#L-&V$6lUb!1&0kpd$5?vgJ(f*^)X^X|5H{gnp#7FNu}UEE7>z~R&GZq7 zAx6xA)6?vvA^1~i0A-pbL{U1)QNGe?@f8{wjynR-X)zrZs^a;;U|hzLW_lE?)gZQP z<|9H@QLLI0t`BH-q-Z|dqLgMO9>`GeV&(lBYvv#mI%GWl;8sG=uilS|F8le3W6atLL^K=DIB6qC>@O)c4T|TU~0P3${k_R zVPY08PHhfHQ35AXLVG2Rw3eCXEo*)sB$Aox~X#9DVG%|vZ&E8@S*uB~YEdLz`f$l4is4aw11PLpPDKJF z-Gpp>|LEdfq1HW^tSt!St7)v^aICXhYHJOsm8>Gk8e2nj zA?$tB%-USW-r8WrgE*|iIxNVC0z<$ypr6es)@Bolx+$M(ZP#jTHqj_9*eHmW?TxOZ zKwz7;)og0`XtH(dsM1-eHYqG+q{MI;ui-3{GAfroY0GL6JA|v6$X8C}?b!epmck#Y zT58=wUY$WCOJoV*lBrhygK9xVKcwlU?3A#QXddJN*9t-&=z*|CTE5<%MK%~%7Ov|JFOnwj z;>ud|HfirhE=G|bxj~Ba{|eEOiU~yIV@lNJ=g=zomaq95g88Pe`krt4LW^lA1yBlM ztTN<5xS;I@q4;#`#v-pmRBsRE&$tGMv^j6e%9gfok*f}wsvTe|*F1-DUM2{EJ)@m^Jy4|}W1P4UwCE=Fw! zYQRywCS90q=y(w0I(P#amvL!8EgGkBrKs^YK<(?cu^OAP8N+a(1RMSk+YKL}oB2zY zHWS56Z-psuDoG5l|3Ptm5ey(#9+mAb*;pPB4>BPqj3Fy!A2X_bB{ExLF(h{k7kl4T z=C1hI#NZ7hDVMS-4`V;rgwtAymZb;A8fy_bGWcp~RwmOX=Se5u7Z&XoGs!Zc{4U4f z^1Qa{?P3ov_tKV55irN_)a0@!^M`ogRZwCPd9Z{92iVk9jUmrs`&2VDGw2bys}J$U zHAwP=S#f%PvzF>6;*^g}ycPimXEz@+IOoUZj5FIf^D`4~fI{jnhjZ2pvP_ioDBUbE z?{l1SRuX%O5Oy)lF4p{5C_+E;d@eLYS2KjVGfWxuMDH_Tk;fFH>n)~Y;&4Pral=7( zG%Po(MfV5O|Guo?Mv?b4i7j9QH;e;L=QKCmbWY>+PWQA=^K?)DG*B0{PwVkPxWhS| zLrx2XJGetmJatqU^sHbPJ~J23TO=e1W0wqAENUz4?9Z?zY>0$~@mV&64lCw5_v!%Z`GWXm;9yEfz5 zwN+zvXoK}$cXeRLbQ||5iMMxuH+|nX zd0T>$s5gK2_j)@wbXT`^OE-H1IC9T7eRsEbbGLm9)Sm3ge*3qCpLZ<~xPcEhd}sKD z%l9fYxPo^$gCjV7TY@TF>w}*-il?}WuQ-dhxQo9yjK{c)&p3_OxQ*X9j_0_J?>LY5 zxR3uhkO#St&v*_Exse|^k|(*6FFBJpxsyLRlt(#{=g@+SICzJ6gdewtZ#kEDId!AA zh; z|JS#mgSVNZd3a-apZ__dZ+W28IiA;fgX_0I?KWqFHf~P?Z=iKfyP8Vx^JN=0R_pd| z_qC<>wim5}rGNEUleMO+PfvULr+czei#n;7`mJ|1SEstEZ?<2z`c}U>r{lD&&${V_ zdSZ_{so(Zk`?@TtI&UvKum}65$GU7Ad*&f~T5|(7otmF)% z`}CF0l{-udz9C5u{dOeg%7}}GWm;`RnM-xhCy()5v zF;g-YRq!LLNf)`oYRrV(Z&^b&@=~t-4{NHHnYkrO;B+_gxGEe)<13XXv z%>#tEbn@=$GicD?KZOew9!$s(V#I?54_34|k>Wj#_xwFv=o?Rjb>J@ zGR29^N$*}zee}Qv6?>0t(zHa$wk5i>VN$sp$JJ8F(&|>dTDub5SQe;0on`~GZM*ic zMz=Z7&XqeZ<;toq_g0SCHK{(aU^NqlICiaL!%5-(6aCok%9fT{|4-}tw_xMWo`r%% zd)T&O+lb!+J)N}ftErQ*w%+@?x5SO5H;2Cco3wA}bW`KKYW%oYqK!Gy7AhC6Y+vj#q0W;=9+;ngfBxGX{?d3jxgG2N*;j%2}l!b$-gf7RO-gHbz zZl1dHNY`%ii^?BmeDKe7bhJpRgw}+Sp-=BqbVM!ha@0;E`_q$Bia6B>(?5&4Xs3rh zEt4r39n-ZSTt&^PE-q0uDIGlXoK#1oa_TeFO=l%kMqhaq%^_*Eq;s6P_KOsz|Gql# zK`=49Z85Ms8Vf%8=F<%@i4MeXC2rpk+`)AZ%H)yx=*R^9m$b5F~J<)W9{ZeRRr*|A_}nnQ6H&{x?|Fl0LfTnD@n* zQu>-k@@za~&G2D0$K0k2H(CG#b6&q^8lNbxsc<@+tTa1@%$Kq>e8Z)3Sq z(j>w;kGO0zL;s9%$Q_SyTFC=dwr|T<3>@~sH%E3np>7ZLC=ea%G0O!TWXGd5pCSp; zy>KqF^JO(R^i%J||Fu%+fkm78kG#J=`{TH$J$5E@-AH`z$TxZM^Yhy!ecNHZUL+7Y zmWsN!5t3kNes`P+TK{#PhU>z)^~|;giU4c%M9GagR<5PZRC4mO#qQZp$(n4)3T#FSc-x zGNMn|6dA=its;!P8zZb(Cp>{=#P#u>1brbH$3GNZ#n zwbGS|stB&klo26`QFq5PrGzr&r2;z3|8c)eBgt-N`;_!-!H%HZkAeX7NgO zyXHPab*6NBDvo#QVnXXVP=a_!gT6$RMS$7EY$63(04=6KEqbAB8ZSA8autc5#ZXxq zC8VEh=MwJ|qLGRwjTTFcO9cs=iHUTFHJyt`Y#P+4v89WN1dSVo0#q6b6{k17;w4LV zn%TH?sZBiBF_#!gp%S$|3xT6!LUUDyYLYWsm1$C!>a!+JC#QH6t5@a9Q?!OnALo!` zSHD$NxU%qhbLHYtdHPh4{dBL*{~22!_4&lGVv%5hwd-zx*buHJC_HopP*CN(?fh(QvlgWT10VOBzq9)_-h@s$HkVlf2H!6`|ZCMf3TaQLd7;w;fbr z71EAej6%BOMbxOaOWxBy*QM?qZX%VN8RI(edDpcnubAsW_rli}Nv$7w3sTe8N|i)e z!Y@M)99{)C7pkW@YQVf&pbM{&9`B8BCN;a^AJ)~dKcp;`*!zzV?^mgst?7p2`YqA& zjJ+X7@Q1xqT^WzHb~Nm;|If_IP#uGk$F!-TU!OCYCU0^(J*{bh>!;%puaQ?KCYRkd z+{r2DI2SM`@g`TiWdp&jgHQeO?p*rfD{HZ>h{dnb@PUz20QIR?{pu+o0@u61 z4X}>I>}MbP|5)(4*T2RC5^B(U-#>v3z7EB!Q;~~yWb)rrp&l;(^t&AKy4Q=f@hfP!V>fJ;qaPG5Z0Qg-l!*SUo*aM89vwE_Jke$PR_dFwSl zZ7RP&^~*c^Fvyw;%+&mh{+e(6RIMV+%?28f2#^2?a6keEfB-0<17rXLGf)FJ&3p!qu#k;pCM(Ve=FGy%notLC zW?X(o|B=j)g^2J6lMIr&2>VdTVika+#fBbkC<$qYx#|!WdvP4x=B?_iv%m%y zD=P~*32dOS3u`7AMXU+YMIMSV3ZrZfwb8KV@JDoU?G&kwq7fKbks9qV7V!{?Qfwpo z@DC#(1Z=Jl2VejcAQ2l89~JQt&7ck>krK@g0sb%$;|}L)APhVa6#GC4MsWl%fB{Z1 z{}tEKJB}=rCZhhFPghne85QsRs_&huZz6K3I5Ov=e5(#==qTzh9taDc(yafU&Lab( z`cB7Biew~<$15C<4$l!K1w$o)2S)m<@Axk!MQ6ek?;b?*B}h{9CXy#D5&<(Jw=^Og zQehDm!46s=0wSOSRv-sP(F8(3EN37C^Dzm|@+|qWA6<_vU5^3~ARr^aD}Ar`ejp4I z@)N^gAxBXH6d(dxzz&EHRhp7EbZivF3v|*%R7UCW_>b{M0#deTLU3kJIw}lj$R`vN zosy?9KZsb2}2!38idEP%x+kdFk%J{my%MPa>uf+uQrlBkIsPJlV)rY3`_GgmCTUt zQ#$fRKkr38-)xKKViElC5(hB{I1wTHfDfP`1V|1M@liRMQ$yy42A^sj|itgwc|kl^9mOUWah9j-E%9D!znMpG}Cj= zW|T%fD?g0|Ie=+4m8@WLVnGE`5J6xQBlHs~^bnDA5%+OJzjQ-EGz3Nz|4U6YAyKp; zBj6NafJJG>FXYn|bTmp{CBk&FGl9$(YeGq4Ga?EwJ@fBF?DR+9B`^45Pl3r#do2HQ zM^F!MTJrRDM#4@LRmnO{Bc`-LN5CK>R0WkF1Ss$UxKtk@5ll-}5?yZwo1rKN6v4$yg_kD4$DMjfGk(=_ruZmV9eXFm)g`^&me{3Es5^46y=5 zbqKt)RKe5(XJ7`z@&(Gk6T{#J=(6{2;9Zqq2T&kIA+k*+#c-%g|0ncHIK0qG6Upp1W@1xc3=l?0AU+aMQvbV z#6VX)eq?T%}Hepw^ zCf0UAl#lWF^doCUzz9cDy|uQU3s1eobx6`AP$Jt*s<{xt|5h4^BpQ|5Zs&D}$501~ zcCE&C#|L+_D_|nO#esocD0_Pr1%9AlyH{RAHGI*MRL7S&^L1ZCzyw~P25!KJjo5vw zHUpNp0Ui=`FW7Qa*nsU<8Dc_Hs4S}p2OF4SaAkIyMyXIEMgJLA0fCnxJ+9b=vN&J1 zct68&+rZd@v15!8SQ*Z^fh#VOWac%zIK~_!jE_Va4!DJ@7$(qofo9m|IClq>06Vpm z0CYGXM|C-U7->UJ0$$(;l30^(AOj{~0-9KU)gzFp*otW+jRopDnw02jF<;VFJ(hut zEx{F*;WA9Q;*f4xQdv7B_zL|PWh-NjEnyW1`6bf9mUZ!{wnddGPB82SQn3S;Rbmxr zxm)hIeh?W16q%8;^i$_Gk`>Vj%wP*9nR2&a3nbB!FR8Fprbcd=}rVYfe`S(d38KKtQG^qGnH`Ts%^`i%n`c;z^jhZ&z^>01>> zY5Lirqb>SmC!&pmpl2DMH`+6>S)04Jn}@a$Wnczezy-EI3SwHOXPTyEIs_O%jAmp>?jQiP~uf}rmisZVL#(A7Qp z<*A{X;_k7<%KyXC1-Evz4PtfBdU3pyr}dL_w?Fid)Csn&ZV7awIH z9zh@n*q5*i+prNe5F zOdtm=0J)P}xtE){A;1s^K(Uk9b4OqW9(xRypad3xRtur3VPcFgo0z#`mt9s`yYQG< z8_mWMq|2Hd%X78~RX>e6sxd2_xt+a@bxCUNe1y-O1J{-gs zU;(uDqxS-q!J97#$gSHGzGJtUnq|MgwUr7bu7Nq0cY7uD2w>{l^xxTdr zOx(t_(^w0GCO^$R)iJv=Y}?ftl>Y?a91B_?6DObm3gEd3KmigU;spTX1popheAva@ z!s&4U8bIVH0OzWE4aNZ4$spQ8+y)i_RzlmmFI(HiMBR4=TwFOjMpN8nTS;F&wJGGa z@jWZ#8*#^~ztvXf0sdnFSG_M7=Aza6kR&?b#LZ_e<0^ zp8+jo>O6RJ^2Hnf`qH}6E+v;viFGtsmI+_+M|$r%n*CtjH8k4s8-GzCKi6$UGVgLfn+}I^R0vaF$RsaWJ5YF{}<)>X0J0F}X z-xadm7W&21Und>z`X~uKfIPqbA-(=3Eq4Gy-@SYK{QWzK@Si_{1LZk<=SMSvD8rvD zUA~NI@gYl!7BOn%=uuovk|t5A9N5z3!iF-XPMwPLBu}1Kg#ukk6su8%43jGL#}uN| zjUBsw6!BjRJIR7BAWDJ=xSPC1)lH$Pu0tyT`764fQgvpa*WC;^yhh`O7*m(ZT zCJPrXG%5@r5P?IA)mWkw9wV5HY%)tqEO1~$5?8kp<37YV%9X8jLFIY9J5roHpKJf! zqZhOyNaWPNDqkKw`#|Ufo1fL*66VTrwVo1>Ila2_mCc_=H(s6kwUE>1Pg}1&Iz8?K zz4HfuR8ZuZhn;ls-B+M@*}->UP4n4D5`Ot@M`3?!eV1K$(G9p!It4O#*Ms;i($`;s z$p%}Bur09x0*n=4Kx8sP20<2l@DYX*nuWoJB0m182peF4frM!UJg@-^EWm(;inGmD z+ikf`sMbLn*8eifD#H~A4t>;JSEWlB%9Di#0&wdkTbtQo@br~O+MH%HD zmu8-Mmz`=xmsLU-0*cUC91izkdT6qD;evGXiDrR+t`umYYG!32XT6}FeR0k3W((>TgLQJSjvXw zA*GdW^n`XB79;|PE+#-CBxElrBkhBBm z^l6ErlK<+fsTFA8LCPwxOhXozDRDy$H59>xXS1?_1{z3wfNKOT{Jg~)La)&zslVEg zO2yx1I*PFz?*_3_(RrJnM+-Nou0tL#TQHd*8%%M2gNjRuD^J@SwbW=)t)11>Cg&lU zTN8|(*Xj~f=}Y^LUCX#;f0(vKlP;+B)d!yR@Z9ru{Pmq$?aj8v%fYeSpLrvd?}8(Y;2ATPk`F9xj$zp3Qr9-0k;Y z)!4i(5||)@RX3dyDwv;}#QF_<@Y)go=S9dPxZLtK)jb`4`apku@nrvPee}djPo?(A zi~n=2bcW+6PnRYo*eLIkS8x60BaBq#LCjKikH6h)o*+BI}Y`xVq_d9f#3LWx2~RG_j%f8<0I=?9(}(7wpZ_}5VoE3F zJ({%epb6DvSZzuVoKDoHZ8~fAgqa-hwKPL-g{xdmO4mZ#wKy-0kSg~|sJ@Cct|j$n zLop=HUSZ)5T-YEVpb&xq44?u@9g=6&xlYZdaaOIvl~u92#~XF9Nk;?gTjN@b-#PZ5 zb+w@(g~vlORk3@I%Bz0vq1c)-wwYxWlVGK%#3=5zBAqg9c8(ZahsJdj%?ztR);B^O zLQ%H`tw?W^mr&?HH@g2E?kKHm+vh}9ML@0WJ29(S&gRUsU;yopE;xYEuG6%6yeew@ zc!$E^Zjg$du57LQ%vm}zw~=fm*CZv7;*!_AibU`(J(){hwy(i=WB=}h%_8CGPPe)? z<)kwejA0dWxNCDO7+OLcTnYoX#6%$qUqTfG!7QOLQ2=TgFau;IV4wjFr~p!tfaKBC zY;|nFfl+awPS5V_0T00AkAaNkFvK$ouGxTJ2;A2Z*P_DY4XH)Znl^3m25e<+&WN|v zW`~|Rdx2B4;Mg2zm%N!cdH&~|)l@k2@Qy#Z9_$6F>qh zDEYeU+wS}F>_{NbHn-~??i-Z+2l?JNm|r_q;V5#Z3q2`$IjKu%K5{5bS9YOgO!T4` z8k#6h>4JUIaS_XP=tZaLvTLmLv+^?QF^={}rC!sIU)u(&)`8pIe)AoO8`BbC0Ipb` z18yUEn`mfit%&piDnFp+ZI62cU+{LfuOI@nCi_1OJpZ||q{Q)x{WI^3exYP~E9(@# zfeU{Bv&7IEZ$OXjJQ==UJ%$A0^#VUuEA7B@WD z1$5MfCsc;azui1Q~?Q~SrMQs*T#Yu$O0Sq z12y0RDUg9IKmr%=WsATZs%L)Yf_@}Hf$jGlHUETM7I$zCRdN59MZ&dp+y#UOD1;0c ze-jdbNXSJK0(7_cgA+Ir2$)_3cUv|D9q5%^iN%Bv=pkDu66+UY7TAI;2!lQ67Xx%E z6<}(27(pLEf+#ou5kQ04_l7V4gE=sRfCvLOn1i(^fK3y557rM|7;#9aV5nCy9T#?` z)N!5HV)F2au2)mDrycoZiQWQ=cvfDkw~3voaVADJptyNqC5g`z6s3o35!FP#1Tr(_ zP{j}hHsFib2aLgZeJs!d%x3}$ux}tp0TdttGvETx2#qd)hZ2+k)tCUPA&kMu0xrOO zD`0)v=!-TG1*zaHe$_N%hAqY9A)dH@asLK;iU@7gla8*$j_p`x7~@DfwP*8)5};>~ z|M)m&0TlXZi>}a77NL&*_)qvy45^R`cEAE&bsHBzkrjCX4{&_QcK}q@0W#o`P5_cl zumvOO1Rf~^GjKAFK^Y*B01-fCi)N7&iIK$?xEQkemPrtoa(SC|5R%d;0TO@#AdmwnFap7OBsD3Y3F-iaiJZG5EK~VA=W-MD zkrxUnQu;EQrbl^5M|)~AO9pXh2?H;9Ar`tvW2yIRoV1~&n1ECB69#b)O(-zwkryUf zQ!09F7#dtAW7-_0n_ECTE-(YmxCK%m z1tDN}N0OvUDvTRooFpI#Es7Qx2BTvoTXSMKtNB>-_iGGyl^2>)5Er7zvZj)Wgzk}} zi}_Y$Iw|85qxGjJcfqE##ivsTaf;=qRFZLTCX@~FT{Kas2+^AG337pWZ6v^?Z^@~& z38hl%BY3a{Zs`POK$0R*pBsRwm`Va+s)IZC{i!GFro{+h(y11=J z`mOOAf(pO^>1vWEDUu_32cCrk(0HX%um$dlB=Gu%@)`gnPzWH~R{n4fXqpS47Zb;W z97LL-#}tgp{OXPyI1{ESqTb{90N&+zs z*dVnZ6Sh^m5oKEuO8XTRnm62PsXVKxi@~yYXll@SI^?th0-6I*PzGh71R;PcJIk{y z=(9lEFuydpQ~xWrzLN_qfwl6He{ou#QK_%g0zUINC7DYR&|$m5YOA@MggaC}+Pky~btuCdzEh!@xhp7N$RFqXKI$t< z>>H`#yS2NfVeNZ3_A9*K>s<%(z6hbW4xlSFh=CjM0Jx$6Bj~&(=$jT0y?ijeDYzO6 ztifP9ui48deu7A&;Jxl~N~uJ2@GEf1SuzM6a>{LAoIck92HsH#>ym+ zNk@qpR*He5qYZ^H7*$viqR00OE?r?bHJW0sm|zR0PlOyObR0`igDrS$9gQ5oBn-)C zn@K&z0%rLDE}(6R$I36@${-*CQB?tsLCdvF%aj2DaD+{+%*(9o%Wt;=1kk~Ej91Cg z$R@-RV^Yj`5fT#eNJaQtVkm7x@vMUN9*g`vdz_dgtGf3Cn!(e6jOwNWm#DXjR@kgo z^8c{I%KSt2;U@v*aK$rT)SRd1{J%$BJpP-`%drR~fXXXCayuu`nt=krIRFZf0FSXM zGg1HseQp8`(GmRu3?Rnznwsc~AZJXwaLTMe^vwmggu42yPc$L=Y*_1@&&zCB9}Uve zEUj8}agc=3%CW~BZMGiW(pV@$#40E;?I<&?&W`N5*oxEr{LhAmbM;oxnl%6kZOgU{ z83s@QeE85Nm(*9i10z7uKU=SA>M0>?x+#1XCJi@2OR*}|RzV>s9;>!Z2T3D3MC&Wo zLafqdZPtT^)}Wa$5WBIbHz*~XzO$RmR72LubC70THT4o5do5uVbIBq)p@A*b(EpTH zeF6^PPzW3F&sKeMF(WfFQ=r9Hjj2M~rES_%ty$-m1D`E3^oG@1UC~|5IFTLKm@93y zi_TQ>wv^jpkR7&5c#mx(6R9NEVMEmFvD*Xl+bg`>towS2?S%U(*!jZEUy|JEvfOsl z+^{<+5gT!EZIRmw?p*KTJPw{`LtPxH zo6SrV*72L*7~Wlk)!^DOb?pP<>0I3ISJ_jc433ZpiQon3t=>rOKqkQBJ^$|GTB=zJ zz|=!diXYJ_0r1+BgT`7G2WIOw+c2%whtm7>(i1Y_|BpA3Uw7G?da+lnxU< z;)FyGg>B+m9-0z@J&4+HH_bd_ey|mOZFbnT_Y38(k!p|b$%Tbu5Q?|9_q9X*QCx$y?yGtK9EyK zOFrSX=<@36AncDL5VcMdGhX92j>@Xc%FG9iMuklwU{oBS02}!L3je?W>8|eU&HxJF z?i_H3(fG@WX9B|fvxUG7*zh!I0qih!4ODI{aT*t%Z087NMGmtqlj$3FQ7z0+-hy6H z_CoM!9#gYDx(>0O(+K@(=#1@% zewI!A#H&Gr8_)qe&+{E1cn`n<;V$$-&jCHp^EmH&U;Hy+Y?d1!2GpetHhM5Be;iWb z3ZQPNC7$JJty|t~A(N@hB%ute@bSrvdb_M6Gh zBcTi~@3|I^95b)&0f4|7oPir)_=k`9hW`PU-smO}0!5$r3I9y^g>Rf2-~~1Q3haPH z+`J5{;0kD*_0e7MX%9nQ@7!6b;a)QKWiR)Ij`nqLKXyWzW71ozANOoh=f?id%vD6# zG5a#D_i+F6B(BeZkKV}(uQnL@iNE-b&*LGm^NEjr)_c88fBA{f3Yw4msUQ5S0QzeC z>_p5$70=xGqwtjNF&=;W)E@rIg5}mh{@QK+SjnRnFAnNI{1j8|&_4e4BL4t!PvAd- z1q~iVm{8%ug8Cc^6eus9IEvz!xw2%**1d)P9!{)S@!GU$${Zz1M>OHA*=}x`-P@q4qeZ59}D-WBkj2r!aeVdMKTE=Lv zT@%OFZCI*u?NSw}H#6RQeETx|i#Y7y!dpR$7Q49d>S>Q7w?z%x^uM~BYeTI2(DP@7 z9w(0`to3kUiDXTpRLRoiQKKxJKYyMAhmIQ6ty_QLVgm~p(3u}iy0mE`SMpB(20M7v zD8qd*M--=;^=fgl-w$j^Pyc=Xn0YhQho1Y!39db^ICBe|`4&_QuKwf_@SX_!a6+mGbcMayE__cOa8!HjL$gA>Pe6SjG?BvHP|RXk<4xoTT6%~w0R%qog%wKZ31*Rte4g zcUxj(GnulzxLUboc3+OUS3Et+7v%F$Bbn!(Wt*9xpoMlh9hmcy`RJNi)E6|)Mgurt zFTB7asRhnPJ8iYscHjX52w)&?x#K1P0SDH`JMRs!82e(3p+XVqjz{?zMG~pTtm<*d1*Pgs%DGmW^LGo<{JzFz{qsY~D;wQW-d?8|e+NEz;dd`JcmGuYH=NZ@3b#PpBXcQE_pNjJPi#8FROATJxIr#S0DOdn-qx0n4h+Q;cc?vPWX;T6z; z2lQR>aCf}@q3II2U`NytaxcX3#W(SDhy-c#kzC#HEUy`v1{30s?I{aYya^YAigm%% zWza<&#FYoP#1`U+5Fz^DA0=#YLU6@uSY4rz4>4mjjZK9eETf1F14Tof+0Y;)QwxALPR19=G@5;Aad3}5CjS4c*B zjy0~)Ra^eZn?PRC7M7eMM9wh|Y=GlmSsYs|WjRY)*3y=@#HB3#mIz0niW>3jM4<}>|tz6NE+nu4T+ zE3|1WIW1Fthl>k4A>~OoacO*?xuz-CnJ86_V-x}eXg~!zP=XeeppF2hTBu1EYbv7< z#zf|Uy16Jb5el5jWT-r;5-BCV$wB8-)-kskAc|7Oo8yD0MH5veJxbF-aJ(iZZ6Q)) zMaY})L8+?l`5)R9hyR?QgJ~{INmG70i5s0Lgh7?MRHhabq3DAROdSf*k#1~=S!;-0 zMmfc1Au);9V`5N;8c}oMMyoE&YHbvm){T0Vo^J}P6Jx3oq8je3xj`%R@VZulP%$EI z?WkJf`k%SZl&lwe$V1Ly#aA@ev5$ppWFdRSjEq9EkELuzG`m?#n9;MJb%ZLG5jh(E zkT>*jC?0ZA*KqN5o6Oqk1asC&*F7svu`NhGvpJ%?zSg&W?d=F>8<<8eh+0_d%t8uV zSE;!6w+Cr0%>YB&>)F<35f6vWt^u!!@d(h`evm!?7w(ku0Kj9GnSQ`ibZU|20>07R@aQe;6~*#Z50VviDTM>1hO#4 zOq^G`yJy)hTCa0NS71RHn3NfMxAjuAb4%RZ7fyv=krs3f6*5U3Qn;_a(e#C*Tf{&2 z>#N3P;{RJJU5Heqpaa3Epl}_{-BdsKf{AHxb(090c5UV!IdsJ_=|X7B?3&Yz#@TO* z3!*;Wb}Gmg=CZwY!#+2<*S}?9SSC_iNLm|*XiBHDGx)7%o9o-Y4Yyc=J)cL$huES# zaj%Mjh*+dx15r?>nj13Y%LyFXDVira8|2~IX(-)#+82qxeDDRsC$MQLvp^b^&TN;6 z-4-tRVGrKZd4G=K4X0$XLl<#_A6eoQ-xr${o^g6eLK4LYMk?^ojrZN~Q28K!!rM=-@{V5vFi`I zgs0iA58ie7%v|wc5xaf9Wp|uO9@=V`rsD5Wh*K0p8^tIFolkMy6K@;A$LcnMDc?DT z*PB{^zfW%N2yV@Iex(VYd9@jTa@`mnuQDd`>~(xT+uJr@fydgq-wk`;w~y%LY<@Zx zv4~)p9_KlC`+N3NeTklQ&G4kX!Z9un++#+kHCEK3g1%|QtN(-SFHqy#Y16IGuABWg z993C9`wJBI;~MD0DdUsBDI+qHE4tNq45WHH??b&{IEC=DlTBNu^SdcHBS7>?hyVOL zxt@DH)$uZt+9>n+z{rUQ0y(r1Y_r$fz!MZezLUBTd_fa|KNE~H6m$y}RKLea1zJNr zZ8*IOjD=IcgVn>FZ&Mty+q4$}H3Ezb(#R$l+zTg+p7WE!Sy{m<6hRYtw*9*hkI~` z^-{(jVdxQvfFveoMMsWPbaQwz>3`hP7$X_Byb9~2yRLFF6M_&xabGRC3Y{q%? z#dB!Jd%Q@hz(;}5M`HZNeiTQ4)JB2?Nd6kfj6leRY{-RV$%m9jXk46)ya#ru#*f5C zlH5l98p&V6#sNEpRKPV2O0Z1JzO>3wc+0%R%gdz8xx7rxBu7hN z55lC%s`N|649(IkO~mxd!%WMvB+IK@&BL5byR6H(tW3PT%gk)cy%bEX49&h2P2T)X z(KJoeY)q`o%GG?#r%X%Ow1u|JOS`;G_IQO_cqpZu#UmU_q6~)a3kIX4Gep1xJV=Cx zDuheugiBbD^i2_Py>a__?%GsY!wiF z&${%?%*0T)v;+zDPXayA1RYQkO-~v{(FJYJ6U|W`ea;o7tV>`cl&}LlD1=2gg;4ikxy2n zQ65KAYiLwjRaIHKRa$;lQJ_{nd{;YASv6Q%X{A~)Mq74RU389JIiX)(w_!47V{hVP zLzrbwR%UvoXFz#qZBS{1eQ8tVX;V^bQD-8NjSCrgSF#! zxa~l>_BFcuGrROUyZo=a&O^NXO}zKKyu72o+WWwxyu!;;!~3nn-aW+iKg9Z5#QtN% z`^3b?ZN>Mp#^ZFy_qE91waDW?$?-$U`K8J1yUE=?%I-qS?m^4)pv&?}%15dO;Mm(v+4f}F{MFgrliL1V+x4#7{Zrif+uYt$-S(Q^ z|D@jkyx#oB-uB1e_|4(=R^s+r;`LhM`eWnuapd%LNs&|JUgE-stYt>HOU3^>yp~ee3;$>-^j6`{L{K>+9=_ z?)%E_|Ksla>hARE@A-=I{nPUQ-SYqB^8AGJ|Ecu<>-6`P_5SPi`t|kon)m+k_xYRn z|CIUv?)m@p`u+d^{|Ns8+X);vuv@ocu}(FjbShRcZQ9bM!$+~AMT-9}YTU@NqsNaM zGlCpRvZTqAC{too$+D%$mM~4ej7jt3%$hhsN`#2;6eWfZDapYDtX(~c_$CT8NbsO4 zhQ%yOoJzH-)vH*uYTe4UtJkk!!-^eCwyfE+Xw#})%eJjst`>{^q=ZF|s&*6W9mR*P z>A_eGm8RF z-L5Y>bOww0OounL?c2C>>)y?~x9{J;gD0k~4U3*)sqx@xq;IJ~V3cAV6;8dn_3PNP zYv0a&IKES-kn8`!qo=RIZqR|@>(0Kt`}gqU%g;SguH2!A%*&0HZodEj00t=FfWf7c zP%+Bk(au4q+(qDn5Jo8Bgb*4SUL$xI^i(|*cIe@UAcnYGI?<(e5G5j}sN#w&ws_bn z5pAQ2DulUc=9xP(M5bi2DWZoQa_FH*c%ZfUW}I_A^qHM-%1I}h9V!B+ z954dfB6ybFrwBvf`6Os`oB<}sqK!H#2c(-xN@=5%JgTREcMd8loP~lIYAl=S0S6p} z8hR*yl%4;g2T+xQmk=d-lzN%0wAOlSuA0d@XF|UE1gw9nvMNWiaIT7Ch=am`s%EOL zs;jFZ8u)2srw|$ov9&goP^-Io3vRgMUOQR04Tan2x9lRT?6Rvi3&*n{+Bh8hh#%l1v;U>K9!VFjH@O#Y0smH|_|2tu_(x#fM#sE|J5W$bdl551_ z;<|5S#hi@tyRvQzS<5fis*taD91Bkp^&71yo}@P)&X zxnem(2|4o5ziBN*q3V6SsKK)?dUpMl4y7V=zx*@EiAi04-A;2${_M84PqDJNYxDW2 ztok@Ty@O7RF~*R~-09}!rf3;&d5dcvV;omMZS>1xyXzXgU?iw!P3v@`Dqyn?_`UAz z1Tvd~A7GyMm=Mlxgpyg*`cT%X_!#bgMa$i&==2ap49<51RE*<#2N4@8OHaR}*R=m2 z2cu&6a8>nV-~tB)L?t?KfyUZNoa1zbN03pjF(bU#4*kbG z9u@|4n`9OV9f=+BEfABmyCfzj2}xk8PLqCv;j{Wyubth_Fn{b{;zUKY;c<^ug)^QL z`54MTvZ{f<3tq)&Nj#yQa#VvlBQLF^MaO_KbqP@?W5^iBcz)5CVw~SM7sLO|H6kW& zx{78MIhW3Vo^yAT;$tCi+0Dc}Q!xWfApNk{JUEf?py=G?I;+#p#+VSEEsTr`>lsoI zMhBB6#oI#Dmn?Ngi)#0S!yEG^IsTy!fmdYc^#Tc}`t_4gdg7n|>eakb+3Thoy-r8R zSH^>#PcrJOr~DohRS{0LJ^JEjOA&J?R^3rlnyc5|s+G{f048h-%_%o`>d=)U=7e&FQd~ z^m>+{zWdrx6$*pWd}75yhhBC*Y<3eXm?Yy>8Fsxcx7f+5Vk{?5hzKQkB(&y#n`xL6 zr?PPtoT*w7Q{AE##>H!F8F(GcH&GoB#}-9wg?Yo<%3TUxPUWy=x)q%jj*GY&cJh;h zgb;^trpiL*jllNwtt=0j$m)fXpEOIXUx8T6!$PvHq;@RK2uuI5l``{}=PbG+J4REC z0#Bzdj=xl()PT4w&tDNoV)&>;)6WB7!pKY51He(LjNAe|>fTN+!6zO<${{UAGY z`qQBHkEcUT>QZxO)TU0gstc6qRlEAtw?Q?mXH9F($hy|J&NXCit?OR<+AzHSwXky? z>|q-l*2O-yvQwSxWjhzP7dxJ(%-&``h3Sx46em?sA*^+~`iX zy4TI_cDwuC@Q$~<=S}Z=+xy=5&iA^}frm2q``-W$xWETa@PZrs;0RB+!WSNJGB}*! z5RbUTCr)vNJDdy^&$z}n&T)Wa{Nf!CxyVOeaEC7f6NmqJgvwXW@|L^&5txX%%wyh( zn%n&5IM2Dxch2*k*Iec|pE)L8PV}Oyd=ZNNc>~N2J(94c?w!hpGtVo42l(CFu?49p@ z_j}&~ANXZZ0~_ZUhvF4~4td<;@sN+a{`>#`{U;8MCl3Tzfc|iR|B!$RxPT1UfDMR%4j6$E=nwi} zdGc@$=O7LmxPkizfF8(y%Yc0Nr+*(d=noIbf)eP04CsOoD1kKi4-{yD z7`TBPXo3J3f~e;TC)j~J_gB1vgln8mRsEM%HiJzE)p}2@_h8B6Ic#M#z7xi!t-ROXr zNO|&biabb))p(BAxQN=AjNW(;+(?e_sDR}NdE?lC_YjViClA@Mi0asQ=!lI0n114D zkM-Dqm>7?emyZm1kCNw)yyyzPXpIE(^jstm- z+L(UJ=!6{Uk$Q2EAo&j>*^kj!g#rJ0ju+{H8Ci_YSd0u9c`#UcEt!W98F}&m4(<4V z%0Q8&I1W0wlSD{>tVolz=zv0*fIpd)Gg*`7sFc#^l(qnsDM^qk`FI=IkqHTsN7;!t zIfPAVl4Hq^Qt5w1_=rVGgO_-fGr5(sD3AAmhN(E1%pjHm$%8uBjy;K&_mF~k$%Ktr zfQ&haRM`(=c$rMNiERma<1m<>DGr6{i)4wIJ6M8ec@LIphK_leky)9lNtus{nU}eV zlZT9)`I&?%mSnkgwsh7w|iN6_!M>&gviJKZ&n5n=Db14pW>3_m#hkN;ok!X~E z8F{vuo!3c=WB8hsNtxMD3!?u?ml!#KiinZv=ZP37nCsb|?75zv>7Mf0p3+x&wpo>B z*qYyIgxO#V|`IO|zlT%hz&{#fJ)k=y!nAn%A}`>dl6WDck>nVYM){3Anxm3;qj@TmK019@%A!dc zrv=HO_=%8*s+WDLr_}$~raxK>m>{HYDW^tCsbxv1Cb*_1ij|LAk%Nk!U8{Dr*qssjg%fCo z_X&9rihB||p(AQ}KpLsNI+z_;gy+eV<_WB(nvGq!pWOL`$+(@82c(|rt5j&MqDq7U zx~=Zmt+4s6F{rGY`FP|isnlARMfj?C8LvWVtPXg9#Tl-s+MR)ztds|&ygCjPN{HH8 zrgcb+$r!Hp8HKgyc-pCq2pEX_s)xBJqOo|QZMhArs<4!Ko{34CrOK`jn~F;6h!V@4 z-3hI$dJYSFf#?5Pnx=`fDjSTR*|HFeogWLXlqa$kS+m!wk{b%NC0d~CX^_cUi86?Z z&8o4Ncc1=hgO(?<3EPh(nW2jbg<;y0xEhWyD7AHpdpJ6y4_SFc`;`5dvO62M1<9sZ zxv2M0uhsar4J)^%`n8i+rFPr4d25bvTZMkxk71jBx7v~OIEg*Vke0W&WP7%gr?t$f zuwS{iL~5vr+p-3Ut7vJDc1pQ03A(Uar;8e`ZflN{N~qu9f8P+huS*TDE4#B>yRz%G z`bv2b*p_%pv#hJReEWg1>#Cd^dA(bCzuUPks;SI-nm3BPh}yVoJGORZyLo2~zvufiIUQuwnZD!r5FioLtE0!w+#`VZoIw~$(jG;6Tmn}&6{466_d{M*0& z`@aAjzyQ1o$8Vz^nOyzRSQQ>cGeu zz8cKBNqc#EsJ{OioPTMsk86)CjIhkf4lo#qDQdH*IEOx(my{KQZk#ZUYOrZBrhh@7jaoigi-L#)7pIEWcomr1%b8pzVh%BI_xuDpe?+{r@F1LR!J=6ufQECl0B&g$IGS5OMx zfXf~z&zq~N+uX}~E0y8g$>`kA=*-XNtj?YM&c*wj&b!5>SjpWSkzgr@W_r->tAI7x z!-j0l9@)r_%a6%i$?;3R$a$a&>avmtkr~^seYwISdbK_*zxRB?6==WT{D1ljz=8kZ z1mb)IN00$%yIPKFq-OfVb1cG1+7R}=FXozzPmpx?Q`E$zbdTA&{d(r9SD$~t)^-NNIzhv$2~?+dV; zDafp#%qa|oHN2WAy2vZtzDgU56kUb|>xxnP)EFJrQ~ji4{KQVc$v$udS?~p25C&ba z*0}S+NOQlNkGo3&Dv*71+bl|IE>Z_J%MW-*pg|P`bpSSYoFOU%^?3O*D`ny zmh0E_xPB3hwYLYkcAKZi+{3iWqtvSpj_s1VJ%s!G$>n?mUl0d%Fb8X}26GVL0{-6u zKHzJ>25dmuK@bEzK+Cm!%h)ImTspL?irew{%N}^&pFGa`&EIv<-vu7vA0Fa!fZzyD z+R5GE4(`dN9NU>X;clGP3TfWw-N%2+$c$>t*PPg*%cp*-595v7?_IjLI(NO8N6-cRO$Pz)T_O$ zv7W9~P3tyo>p{)aPp}5O4(#9_>;_Ke#-8lvzUe{RJkE@+fcGuFc#`{M=AV+XnyX57G|RfEe+=3V;;P z#Fee>nN8dq&+)$=@hJW}7F5H}*+z-C!jLwp8KkY9l_xwlqp-j$r|KT9M_k92NeINLPUk8Xk z`X@f@kB|4@@U9OK{{#*sSg@eJdkGWPV_0vY z!+Q)BMua%gqD6uTFK)Ex&)`RpAqCdkl`54jb{<8p6zET%MvE^KzN88BUQL-dZ6+k> zawo@$Dp?LK*lri5Ot$0+08v1$zb)v`>AiEj8A>_!BBw@ooSyPA3 zS+r@@uBF4r?OV8R=ggg3$1dHvb=a)o8z$^mu~!6{3RSr9s$^8DijyZVp}%^ykfLPT z^J!GY)T|cP%GE1iu}{L7Wm|e}T-1E%%&}VsFJ8NQ`~Lm^`c-f#!-o@RW~>mhhT1v8QsN9V-uCY1AZ2h5Dvb=T6<9bA#WbU(`r*J9mBPfZIBkUFi37 z@ug;7^`;6HCqK9z$?~O3m@fVcV-3>^G%&5y5{#=300VTeiz_0eVnQn3Fy$NG8dFHU zOp?!G^4qV!{{kG4zykSNi?2DxsSSt-LL2<2h(K&Lx(JewE z1vXem2?>@Dy)MlZKu$g73RF=S(=Z}8QT17&O|OZ~ik$Rf?aITS8r54`i%dvCt=CRS1%j~yTG~)xw~)BL;pK)!E5Dfwj{nfJaNJp?|9nB*Q0u(eylDVYnDL# z=)2@568m?u*Yrnf$`q1k#B*jxjwzpx9!PiMw5HCy>0C-ko^!;}etYiEam?%64Kix7 zl#GurdsnGJ5x*ng?(f9|&*Ed0TV|OB68!Vme}De@A7qa~#qUNrLRN#az$vddK}Z(D zP;VYXk|iz0d?ZTW`kc@{ue?u2@ta@&{YKG05QZ>+{|g}92Iv+B1?Yf$`hfz8)WB&C zZ#@#c-uaYQ9;Vd9HyM%MN_-MN9%|=mJux5mj3^H8Wv7S3u}&&>K{kzGuTBo62$-Jd zE{UjXX)8g<7R|OUkVFw2`7)W~;x!zSOa_YA8)N!T1}o2aWmcP8O`_6bh+9148N_&n zCP48=Kn7BfgVaPJH310#*2rL{;X|V;wFWk9>TsV5)$77_k6kQjjbCe{$*6&{lnFtO zfTCl}@Tf;V4w8_CR3#`_iAXyts$ghoq#=+6NlE_fSw$KeWR8-QP0FK zG*OMz*=&3!N*`eK8|#Q+JZ%9*hIF%o9eb|*iJLv>zZ5Arg4xr zJIRfVNJ4 zgnZRXY8x3x$jTD54kx=)LP++GI3Kr)jcjoJ2T4rw#HQG;B{7K(?zHut-=VK@M@%9( zS0Yz}K*d!SOc{UtGoZE9p;00nw{;uf1FiMMnBSByTgQCKIl!bzyAq@vZ zSi%&xFmG#GNDV{(g2S`$@I(D6;x1%?vn6)n8&G@>6_56)>9yK=;pN_J!B=eAqskP! z$I+pfH=8XE$uS>dT`;d{BlX1UMxPoI2$D8LFUF^yR3mqc%=g`tjZB>);jVW8%Nd-NZJ;?gfN7lrx zZ=K+0H2Ts1y>`a035)1IR+!cp?r}4aozvGCDznc%oDfPajx0ZS&#vMZy=8?`5aV0l zm>#4j6diC!Lt4_5c4?6>+;5T}G}q6NMY0!JN1r0sGgl}QmYu6-E;htz$yysoyCbpS3T0%=>cr(Nw0Z!|gP z@s4stc)~h{?AjY^TS4}i7&X^ha1Ex}upEx(4eST1pWAiJ-1TywIfC2*oHw)A_OO$u zJmqh@=w?8}?emEHkaet3$ya{z2j+2L`JOkwzou}15v9d>`L$H%&TC$?(h#XmRjYTq z-QElT?d_VV&FwzjH!6t|bF>cT;GfBNy7weDwwFX5>SRMK_6PRl17rKJPsabDFD@?zxo?2m%FX~%OC%1 zvO~$NFpx6j8obv5nWN$w?a(gjdI~GSiK%mv?=KLRX0s=0>3k=5{v7UU&)7zbPMC^~tSl*vLrAtisJrI8E2P1BsLT5U{B#eoo>!KD@ zKI3`9q=OxfND{7UE~Xj^a}tVg*+npe#U`}6F@nOzvBiy;LXwfUJ|n4p+QQe!H!u97 zPw25{KtpVl#7J~RV~~ZJ`o@{E#%sjJF^t25d%4oPMq04BSfT?`G)3$QM0r}Ze#t_B zX&JLH7-PV1kr%^%1i@-%Lp_;KFFY56K>#@3({7CIuA|&KN?+Pibuk<~s|L4&yIiP7#{$d3(mMuwyK>+K zTDS!O%tN$*%u*~8YQTov6hv3)%?4zV-(0f$(I4V8PU}q0cbEtBe9Aa9u-h_F+d{1B z#7^wg&J66%au9~Y5+q`yzy*U)^iBg->cgQu~Y~@yNjZ|N2(@zCGP$(#eyoQ0hQ%b|bL{U|{3egzkGk%fQEv(jW zrN(h})NNH$O5Cx86IV>tR4jE=PF+7wg;TJk#%kO&XK>g5QjJ%3Y|pgx(`87~OmNj< zE!Lr%MO%#_7Im|AE5=^+q>UBPU@ghou|3)QmL3$%@oI-+h=o`n1)bg5oyA$5#aW=m z*uIb1?l}ilu!0vDUg9lY<2~LNz=B>N zikF1R6qQ}O;@EqYiWu`-*RU~J!#p`GP6tzmvCUddRR>;x1z9+#Kcc`*lUsYxQt+MJ zr<5?oqJ>c~GPm_lh~LR8LEowoywwc7rIYG~+V2Ae?R}~G?OrpDTt^jO^1U?i z`!NMZ+<-mXF*Jt6l3xnt-v7j3{mrrbIm`cDSrN6}sc^pY(Onum*2VbUrMNxb{hHat z$)w#_8)XF(HWG3g3X!}zeZhu9P=NzD00JmtBR*mzM&cKUg)tdYT1;6Io?i9ALb$QF zF5CpbVl+9-Rx2&n$TbIED5$RlxH=uU_HAGPfi<`_q~BY>RDM`rEdA7(a=AZ(r8yX3 z>HSG;xI#bk7pU#R1k+*!=3)wF-+YkcBg-{X?czdCSa0yt+fBWOfo&yE5L0cnWI6Uy zg|g#L7Un&!$9g;FLL*~ifQ4n&R`z9JL}tWmq*!bA;w)XcmO@}~RX82v<}AJBNakmp zngfb@&s7ak(ydLBB??mZwo?|;H#^$@U)C2JzR?^WmDTMsW>V$MPzFpmghRlB7l;4_ zP=E@k00~HGm0szUPJohr0Xe|gULe}&ky)gL;sBP4kz%|oV1u&zBU#AGXTZv^MN>z$ z2X$c32g`-gOVF((hj(b^M^(;wxX#WM!O$B$>O4-XzFf&8J>S}cH3;444b+_mjGq3V zJvhouBkH2wR-{&HX~+fgHBj8TOQ`N*t+j{c%ucz(>c&0L>0HpRW?RLKtj`(i$kbSb z7S=La-PRptC#*%&RWIBrj_InQ*oER7{$#9szW8|Ia+2lDzyvE$0Tp;)zKmpf& zZP<=&6v%*+{s7`t-shpo-HD?A*_`OA$YYY3xBL8pFkpj0xH0_kqfy9(Uuf>*^xnhG zQgw)i`~}SVD^KP8-lJ|#r>t&T5C!NIB=kK$TF5P`T-zekJHXDLJ0R=dR??C3uP#`F z6yHbY=L^KTSYhvP&*+5-!ZVk&gxAJDz+I@&;b~T27oMye2>O_AjHlL|)t>oybpkMH9j|qfuYuXl@dOwET_=T> zfC-r8E|}POBN}ldn$O6=jB|GlKt}dGmj%%*Hgs6KQu1$qbV z#stl+?`GTaPQSqoY|8V6Av?JI33&Jv2bxz3uj6Cut(!%3rBT@Vo-fy*w@zvB>ikaaog6R!8757OEODFfmp?9hP`Cvv-*5h=?!^M{z4x*1T+ZyK;Qqc!VJOG(V=&9L z#02g8ZT~Qf(9t3Iv%94fSEPo!e+^(!h?Whz#-sv4Ci4jWUZIpy`#=T)datw)s}QgMJl1r#*~ z6E1B3_;3vr5(W@>K`F1^dOaogyc-mwU^`G?OT>H;tQKSGmhL`F5j9odGaK@ znX`u7BT|>n(BZ?3kUV}2IkMzQd7fF?8Yi0Cs?w)Z*J15?<94^mwj6D@>BgIH1O+!- zb;l)Vpl!GrxLa=#nYWO2{9s4WYoJ&doWbY*5$Jx%IpnLa*dwi#GPd6rgvHJ)RnkV#hm zW?7F~$pa2tef<>}Vre3#7-NoMwxniIN~zaoJX$qQEtr6IA8DqcrrI8@Wfb6m5fZqe zZv}bs;Wftc3amCoHeoG_20E-@QoL>2Z?os`U z%kGW-hBon762oNiU8kd7`ssJpf+bsF!T$T~?`DQnBQKn}aKmb%kU*P_aN`t_q^AxQ zU0u~Kyk6V1+S03|>Gwn&kwEhHMi~h>n>x|(A~pL{PxO9t>+9wS7P2?H!dxy>>G&l9>Z+{i(Uo&Vyi(CMZLn$I4{SMf&1TOFupLoTf z9vHzw?16$7#GnS_qdofcPIkbHol)MTF}=iOCajA~z+|F2(S;@~{VJpNOb4foX+?Xy z!yX)a)TB9Lj}pdHSn?RQyyhXvCOJwST>fYmIYow!R+%FA?h`8?JfRPxC?9~#Hy{cn z=u=j^8g-0g4`S7(IlQRkbE0!KOoqycl@uT?WTUd3y+eT@>P~w9L_{24Fp&?AD96s| z;f)QREi@neo+IIwL=#f7k{<%k)ikNAT@^Dy)FNf5KH-T|UaN$v+=o3_=}KcrvpcV` zP%~)R#9QWamr~pw=;A26Inrx*K>DH|XLq00$@499dD2~?q)s=gWgL?+q&fqt6+0d; zkIGw2V;a#%a>;W`_xw^mjl#}}(h*NoR3tDR0m){8;(QwFl`%yLEoco(hPcrUNI? zM%q8|6a=Q9FrlGn`iv8))RNE0=`Hg?kDhvqgZ>PYK+`J!CUwCxo^(kYJ>N>Ehu-5{ z?UW-s?}0CUomDFu+oD?GL{K~$bWI3-fkFdGy|A!DDy6F(8-=G2bf7ad;#y=QA2}+H z(&8FNOB#n}rZ>h}<7PRthYU~HvZNK{AT@IuG@#|utT{v@JJcU9)M3(Au5fa|86f*^ zK@4KNqLz*b##nc`j(~mcRW-qEFo|kg&mPWK2%*K^p7ykyIn_3*t!`)!(ll$tb~^9# zZ9#6^zT848H@ubHuWTFK;m*Ri$nEKJL(|+WMz$`u3+%y02R$LV3$E>2Z0a1_lZ#y@ zV-5yvT_~HcEct`MkOlBS?}(rctwG*>At3t!1+$FIoZ_O7~8rE zaYnMY=@12NCzZ%4)=4|btk+Dt+SfM3B(~jc&D>)bXESxJF;;1H8hF#1UW&W4a_WTN zWz<;mC&e-2Bsc*y!v$@%s}GylKmN0>6sP#D#f+bEQ?sfG`ev|7YSMh~15rwYj@5?6 zk9S<7roa7_y_;&RnrA18{WcZ04FT|NcUfTH?j=S|li6M)mFkMZxv(6CZ=Tu4=HGl) z){&!Cs$RS4N2+KH(|v;ALBU-Txs(W;823c1`<^ zW&W*hFmp2Am}WD>nPbRVi!aw+Aq;b;Z~dI zWf9}j)2#a9o&DM+u&w3#lLrzRz&T&kGKl4C)U> zR79KIAnEN{heSjVYF&ZIS^Eg#tpHap6rnBQ0um}=h4G6MQV|1w;Ep_C99>$)_|C-C ziyqRN#VOt(hMGQEMFdtr23BBUHDU!Qzy`XBUL0bmh2WlypbwPbFEohQ_1uLhi-WM< zZ8Vc_j6!sj$aE|VNWs!H%~*-};7PR`C~a1XsFaEn0w3^!wtWMm^+UlxhCF10GOz*^ zf{YY8LMJ9$&$ZMlj-s&~NN=q9!{JdCgQ>cmL-D!AgL{&JAUB2_{btQq6O*^Bq~6gJO-2G;XK+JxTOtg_`oJA zqbKehDB@6t%$(YR64pr-D<+CJ^%~a69IsRz+`L#ptj8{D8@I^=Ix-=P*xETzIq5cTN&5+j$MMnx&SLKXe zF7U$Ma98UA-z}Q|S+j`HQu5-qi9?r_g%zd56RO-QP{9-Q7iEJ~eq~saSV8WeU;STN zJzg4ZrB^5*+E7JQ$b(%T-dS#-0;FepuB8ODr+dCoWEA>K;j zhakj391OxOl*mNv5G{OPVG@lo?2u!U)^;Ig-2_oN2m|WVB?aT=QVGng? z8%B~QWXqLd*)e>>a_NNXgvL4GU)rp~e+KA)Zj~{N;Xx#*c`fMF5GRk)UW6_tg<9r^ zV(2qW=56Bt*loyQkC7Y7jA%!csEMK|R7Ay7u&DFNLt{||d3xs_E*w?rCx3B8d4gy6 zEYvxmBbWXIDZIc2wyB#A0Asl6n{MC$%w?OtKrGP*#e0&09q-m4kE=HlbFuwH$dgWNOhyGll4jr3gn{+o>p;Nel^>oGF+cV@(Ju zp&F`*NQhC+Dq4`3s@-*vLmdf` zoN1a85`bkKW%ONMX=MV|V|Wgpvp(yZ%Bi=0E4aETp6V%|cATFk>+=mmB@BWgu6gqu=Ojx!si2WGpF43W9v3u#%9I7OR$xDpQ^j`fO}Fa*}|CA45!na7TYc++zu?0(yf)*Ey51} ziB6Db%O=toQO^>_Y%r#p)Mk-gp00lhqUT|&KmCqWZ0T06>0hL!Ty9_l6af}sffe+w z72H4s)b3hF;v_;X0#aI-`b3GPmhUTg4uO@huvf+>@3LCx_8-o1Cc6gJ$u^xfg#ydnqY*~afDd$mY3cAq}{0773 zo&?N(o_*Z!^IloILRmSi-WQjb6k~{kNMtb$N_V*5HAy6H+;MnFllo@lz@BjhtFg+m zu|aC^@MJ?aV8gb8uqB5YT9sUwn3xGGo;x)w%vvJt9za@VU<}VN4&$&63$G~yu^wh} zW|-KYIu|vlD!UrOmF;gwsZtc@ak{lvM-qf9!qV9Z@@*&^*_EvN!rUxn%W);4%8El9 zqw9UxveM;pK|rzp`f`Rm2(jp zX9egk7T|$4=-(DW*pl>LSBP~?h(j_A12P1|BrLHmqnYCjt}_zhe ztS};C#R~UVKy49F6kw@n4MjRo!VUYioAR|PFLZwowjNMII+!YviFKQ&LX{hcA$;CeBt*hbL+{7}q$5ul99^I4olS_uDC*iT5o6fKe_cef@`C#J#fg3nh zDmf%`xf17ZQUaTd+pDESIEe_kh+HhBirqHn`A89HZEcotm5~!9qvIhU zRxTKP^Mry2iCK$f)T+0r#R4TXf*jmH(kAT-2zV-E!3!Ka(%yg^Py!{yLOs+Pbo${H zX-0x`dBghcCd>j7r3kRW+sy#xjEBnYF`Ge*$Y$gJi~-?U9-kNPnIEtfC=VGfL#RmI z9xRFv3|@vyw=3PZ@7aYDM__8#xuZLLF&n3YM`pge0>wLR#gb@^h`k@EXceY0=zHcK z>^DT5KRg;9?m9i4b*uwBm(F$PT|2h_j%GYsTI>QlFyZRN1$le09;SoN$ATRAuJ2-j z9Hco8%K`8DycNhnEa-eY$O~c{h3Z6)fRT}iQP$abE}hr1Ao#6t5rZ#y6R?qVNKe&8 z=%5)NDoM`+IXq2yWi~^MeKwjQhR3Ef%qEU0x{Eq}`*0<{fYYnLr z$5Mwq;WWe%)pX^INHu7oIix*#v3=pnOossfS%Svq4Fd3V_<}5G4SPsJ-glZswS?90 zMVC+ydS5b_`d40zL)6E<^z?*;vBEA4Oqk4*kWljK<2NM;{SD)R@Fz6!-|(B~6V1+1 z3OhNw=)Kvr1nyt`Fa$oUGK3)mTf8MaqNcL|eF!u-h_X?>OQ8oW{dtLu6f>SXJ7d}C z3(WJ|LiFzi;QK9uP!+Px!zT4|;&)RdmEq6;gtKb%`0;yZ4Vp7&%@{Ux*v!}~PoF?l z1SN~uGldKV5;SOS<3onNAQd7cDVVo!;^fJ@_i|gUOqp!m^Y`+eJaN=`_VnrVT)%%q zi54|_6lqeWON;8O_p)Bpr!VD=!-nnuXI8B|S>n7mu2w2myKLTjDi0jitw4n`bvra2 zB|UTL>cNAjZr-|-(jj#URVq%jYS$KK>GCDmnKf@x-AQd&r9p-wWqcOV(?wzo2lCr@ zFl57L&mchjX5&6Bwvw*mRxcXrkZQ4A!nX2%el`XDWmkoG*GhK@)|F#dGpJ6_7Tp>@E*z! zIpxI3u|MZ}ln$~Whb)rH?6&JJxOeJ=$jm9zv=U1#d1><+a>@~t%-b3*R81{~X%o&j z$$7_~CPTZkB>hy{Q^%@md5$r&a+>kRwK(+99}soj^`94EyvIcuZ5&p^pIGfPELX@1 zFee>nEDW1H&pGEMU#s;M+iT6*rkHNM{TAGByGe)KdR)wPsm7>km0fwBH4MWXd5ra} zAA>|Bl1*lj<&}yIWe8FKIukO6-&YJa*x!mU;>}WX%$et%cjh4nPWEn-1>=nQ^_P}w z%5fOth(#tfA39HU2+!oGi8fwW7qc)YdlSJ|-+uj7vYE~Vc81`C4c-`((-wZF;fEuh z_|0l8W~k>Y5B67+jz2bf>e*jWO+D)lR!w zbccFT?xg(rwcU2d-ik(flU-I;uXKX2CkbOb9Pt|MCi~xD#)|hd@EBTiaxi9mU0T3GoO8Q-zT_|zdO01l$G;| zrFmfawqJ6x)#^l3_e$?31$a>b+2vL**8!Wr&=2~=QHs^!1MB~B;B(ux3I zcDJZRFnNhsUeHiysL`nB9oHb;qh_a>C5_KMz8Ot3R*0F3NRKt2$c635mpj}Q#COB7 zjqr@MKAZdnc|b~p20aJ0Bvo%cJbTY+IQT;6d4zWb!Jc^11Vi1-&@;QM;rMhY65(;J za6Y^n<6>*ghLY7{=2!IFVQ{MR4F2woqa7DSBKI&#S zx6RL8G?L^0a(sA47!8OT$tcAoDlrL1KmrmK`I#?@M6{2U0~%1GQVElUF=GG>OjQHr zlQxAUOR>mlKFy^FQDW}b4VkU zj`9TRnD;YYLL-$UTjfG_Im%Z?Di^Y(zlUCwbqyXzEOrod@gOuo&9V933u^tU?^GkTOPmI_rHClt)Zn z))Yv7V;CU~#v}$Yh)590NIwH7Eiz^^Y6eX+MQVsMpwT5zA!H#u;}_6u22)Nl>|^S% zhwpa(XOD73BUA{X#V4F*&0ZcSC1AW#0RjM+{yz zLm+N~Q$m;~R+}M=iJZ)cG^RGx@Rf5+NrgsOTZ)mVs!FPiG~Pa`k`2qPtf7e=)nD_I6o4tacw2S=eJNJ#SJ8z7Yo zWinEliGU)8C4A|>NHbH8_$EAU7QODtPCn02k3Eu`!)WjVxCC2`MLeM$(tOdn?$qqu3j10A z|MoDnImrey7&%eXo)&@`-Oy@nQBb4c?Lq(jFKGn_j>{=-zXx7W{-!b*Te-^?9mTGO zs6$)Q5aSh}cq!CY9JJKn>>;m1>x^wX%@@W{J{=if$;hWD=F(<79mE-a!+4Gmw|29y z?MaEP(+m`+hKVd@Vh1y0T!)ZX#xCR@j$iW|DB>`D2l+ASWbxb%9`Ubvn&Xjc@?f*X zQNj~Oqhm&kmo-wq)t72@E^{HfY;T9ig=2=n zX@c;%4TwNOLF7eH*ustDB;%$ZeclDIBRAR=mLayPFau&oKCCB)7jKTDuD1#M?nfuGH z;uD$QJ@14lBF?9ry515;#)I$PzjPcN_S$F6z->GZ?ctfouV%{jg^1;S0{5r8Ic8G_ zZGb&2p|!JpDSv#sD_lYEq~LAS!e=D$VJ;!$>*|ek?g{2KuUUOKHs(Q^8Q%4-%-PkN znto*n;IFL0%PdiP=<#yzN|waM&z{Hou*dDetC<`O;BYgG`>9|Mthyeiq4M6~ZsrTY8!%hp% zq)&Z_ud}T0`Vu7j%4qvoLF|qKp5Cp{3{BqDflbuFPpnvWKR+WK?WP9UMj)azSHuO0I4} z5+q>~E&&<1hGmp6?#?08i0KIy}HB;!O+Go0!zk_RBS0? z&M?NHK~&_VoZ9f2;LxqEWDe`_4)c&JYGeu9?D@iN(xxs5laL6FP(j))qA(=vQo)Xx zqU+90>hcZInx$26LeSJ^ey{~bj_*J$s$H_doqA1>JcOA4tSY3kY6=;!3L$~mSWJ^% z$!A_c7+9?wgh8wlCgZY+mW&FinCl^`!5ni(9e9Bkv}BiLK@&P>6mTIJj$s&7VmauE z84s>*a3vb4;i`sVq{a{Q3c+*Guhy)D8=r<2QYjo^VPlx697CoIkIEX9=2Y0x=!R+^ z-Z36?p_@Pf5+dOqj{zC>kt_U>&597}22S`ggt78T7&i+EwI$NlhLB848QFyycTg#A zFtuhfz)GuE7(|V{Lc93dE{fgdmDp5}!e>;~rlU<;(gj{*5W^sta2wNfjk=X<^{r1Rt~H0=k$O7kU<@hu9-KYlOCvOxi zh!9v}q;BxWp8Dt>Iz;P0#2AAGFaOOSoUpV11W^j9Q1lw^3SVkXXh9VEPfa}LnU+d+ zV2KjR#|$%tX_{%{9L5bnQT?2ZlV-sX_<#>kLOIH2T4LmDTn_3WR4t;A5UKDGSM)SS zp+#R5J!MoHXjEaan@*{aldbZUI`4KoJWro_{V^hl#hNzbM`Uj@l@krv+# zLM7CpLJJ9dQqRIBL-Pq&478$x<&aV{7n3p3bYw$!aZqj2-}o~L`P4=rluot9P?WAeINlS9|3!&sTOfnLR zln&@15mJJYI22uO0x!KHAfa(oMXDPA@$MS4QB}JX_Y%fc%Zg||(v~z*9m}L(a5Yy+ zGD>>&B!N{}qv}?)?ryv@8QUiqp)pbcsWy>OR%+2wYs754B3L#R>J*hh{Q^O2lPCyO zS>345Uemwg$H1^}UJg(xD+)ZNQv5)#{BX`V5tCJ4>O8~p@OaD~$`ZI>M>W2SGEeW; zOo9*QAXtZ0If7#B=H*jm6DnU*Vi#~ct_Mj=f0{fLvx9KteFC1vNJ z4%EyKU)E0LPBdp0Vej^4OGsyLPj59Lw*VK3vdC1H#yyDBXOXr7m9}x`AQ6s%Ya+Kr zr1m!Lr(lQTYE9FPE+_%Xt!@8xDB(72ZNW(cE+;3Ive>5G*rsaT2t->kfaodf`1PRR zb}{63UY`^~r{x=tsSvBM<}e8oMuAJ0s%IbaVARheA?9j)jGHz^BJ}o~&dN<^Av^VM zh$P_>rePgeLPX&fRz7uZ1ql$dcY9CN5Wg3EZ()4<57oNSH8>+yX=!xY*G$mFbRh-V zjKtIG*AVVEfA?1&9L+=jsFw+CFnN!aVEKu8C5>1PD+sf0SNs8ZQ^6L-L3+VWU+3pT z)Wt$?7*fTiL=R}O5aWj1VHdhjd6%_NN7Ngzs#LuLmb<_6rKSuNbdFp*2lUQ37))Up*0_yv@?7fSh-m_LxlVa0=UA!shX3J* z6Unm}im{4#7sSFAw!wFwPjLb^fN^tq$JXsW^Nem1K`xSXVEH9x6PIb( zeO&RLKm?Oj`2fFm&tTbp!WnY%XP{dIqWsf^<;S4|I*u(gT_9;Hhsc~WH@rN^WQhZW zzymu3GXiywg_h1F3_+Mvke>-!n7r8lDW{jQqNGh4Z}-mUiY+YLV}(FSgjDY;S1c^8 z^BMBPrtui3wb?I(5um&8YZnKj_iVq~r=leqpllhy4mv>|niXm|qbKW6dGbQrEtKcR zL4B}R^azIka~Y&P`B)2eDExsPw096IL9inn zAy3kkuP(v3eK2xft&Oz2gQ~*xS7${E74VfKl~J<1iGPEv&{Wyo!yC z|2x3{abdvMp}_UEc>kfiDObB?v0bCP-oD$iT=*B?hP+cbts~l>&z8lr7I!HXwR$l^ zLQ^SH+OO>~r^D?-&n{m#|w)x$i&d)m+c zmHYaj`#@nip$xs!lS0uaRg~S<(GS(dSFwE#sTRxbg{}MFM7zj?5f<<1SW!Emz9AF> zdlDu=67bdvU;Dr5-M!P6!4BUY-~s-F_oTqN-N8SKN`J+8x}{y88%W-sOwCQTGN~h=mBT#eb7~=7~^Jb$%D)0Up+29YE^6<9$3s zPrjiX>#hFkDV&(OoDd*6!o%LZ)tHTm$wn4x#_!?iDL3iO&D^i0P=Rqqp#B^Groo9N zVKN%f>&Y+cp?vH0p6~Sz@C`x0#XjuGz8}mU-u93}*PfLfT-yzl=YO8%1vL-}XAf!8 zCEx~lZ#+Q%4RU-JM*f`glhW;`4jV%AE8w^_HGO{i$7<)*ANpY@ez~0G+ejcVMV zLyr%5|IUrn>xG}o`9Ll)Q@fI%pL0di;-A2Q z|McCfcaNaLg$x@ybZGFNM2YgmQM-sSqsEQY#L1I4G32;fm@?TK7g8SoIBXq3hJ5*w zV8na=1o}I7aoD9qgL?Y>2{b68po4}AHTqN1F>l{EcI;>K980GjUEUj6@?=V>*gV4g zDv@Bwfj3#|&R5Bw1%vy(4W71`Y=EAr>}G3(WD2?oLKR(>W=3=x^}(SGR1S^#I*+d)iY?( zHszf=_pQ{WOO=WjAC5e^^5x8z8#i8RSW~L<>fV!z*S71cwKADRiJG={+%Pd~=B(Q{ zaNz)%KxV(hpErLG-}&=O(Wi6tXdOG%*04$Ped!rNy9L-#XuOq%pkRxo|0IrMt8Jv+ zYyG9-ifmwYrdfi287R?#8bSn9V-IFmTZ!7m))#88k$0hH1pecqJnMKvV~tFGgX22u zkYe`e z<2OX&*d>ifZlvUI4zgJyl>S-xQfM^2_~C9G;`yOi2r)P!i6)*{3uSa3R9Io?^{EhH z5-A!OqXmY@WS|dvgyNN&F6N<@_efY>T`rDFYN@7<+7GDm#AA`Am&!AaEmBgsDQ=1i zwi&4Xhyj7mKkvF$SGYFKE26#kraPsk z;Z{4Az~BB!5xEB67f-CIq;hC((}D)B!!U9$@+O?Q#s0#|44>sd%kU zj8Vx5)0%Q_E1x!z%XV%hGR-xgWAd!*ZVZ;oEQeR3&_iQm3o96JlXKPNHNKcdjVodFP-14tnpvhyIc~=!{Oe>F&6bGdsvae#u>CrEL_R}6Kq-Ki@YH))b?4Sof2*M8TVuU0VAqh{2 z!W5qHgRXGJ1z!lm7q+m4Fq~lwy`#Gj>TriV)SwDYsKOwk5QHwAp%GokiX$FThBm|@ z_j(A$C~`1`Kop`CiHO7t+AxM(WFicmD8(>Fk&08a|DqYOs6{1aF^NcA;ukZK3Ma~O zj&!V}9q)+8JC+2GnAl?;{|LxH3UZKybYdU-I7dX{P?3dfq$3{*NkjTkkCTj~B`=9d zKpwJ^nZ%>iItfZaax#>pETtSrNk>L5a+0bvr7K^_M@1eImb9#8B4=q!9Db6GZsZ~j z)967n3UipmBx4A-$jdJNl9w)YVi%dXMmDnXgT<_-HH~@9XU6cC$h@F4ms!I#Zn1^b zyrwy;$wMP56P(X%e{u874%ic0J zs=3>IlyLC_AW0wU(&=4vb}C)z>;Rh4jT)442%RZSLmIvZ;`DkFO{o@{5w}1^NJ1|1 z7~8N$9`y{WUJqKv_FU1Ck(rA>RL#<}vUF9$Wpzn|601{|Q8%!1bwpErO;xqDHJ5!1 zH(G70rQoVNsJb;fWVNeV$&w&a@r`FdYwKV);#CatZ?2cxs!Y=g5s-Ciu~m8vZ62Eu zz?!6>l*N{1U4q#H0VXu5{mk1uTUw_mLvW-8twx+wtT>@oKzrMehkiDZ*0$}nuK8@B zW-F!IUTdr4K^$3nOD)#&)7O7S>S z)3^_N<}#iNuDdiA>}45ScM|t7DrLj)fMXEo%s7o8@vys2h=SjCssu{?3`H6141m_)eeN4zJDwuUx6> zPQSXV-rkI8G0(X~bv80&@=P78{{VVBrRuYltfMNB{P|a|eKT;cvS>0tZd-Q-?~_0R zTs{qmG`p!2oPYM|%MeJ=nFduhlBHs>IcYr9Rr7Q)+v|x0yF+j;kEd#_s-oE$y%A#E zeXJyp?6UPqzp3`LZBy+zTYKBwCibh#GiysD+cnBQ$$p3CHD*KG+JoY@nAtsMcgx$` zr}^}YXg%(an9POdUNLz0d@BG;D=`Lnv3!^HCuTKSA^VEbg29#%_lg+A;(G6B$gA*2 zWqjfdWAeIUm9KM$4ch)5IY@j{EMpZ*Xe-A^%k#1+JT?4eB8Pd+Bcqa+v+2mUO}Wo6 zvhv6%j3G1U_l-}SW2;2C|Kh%Wh>Q__B|JSHEGViui;YdKKc#i*Avrj1CRMB09Nn$r zh{ws*eRiHh+~k`A`=%UjZlp(?MPX_tq%7Hh0fRL02S^#ve{1hyTpui+!}r=qc7P5j)%fA2$9NcR%T_ysis7 z=p_qiX;*^#-%-z+))O|}Yrodzku7V{3;XdR>ANkcrYgBxYS%KQH_xK|n}mMaKxier zlCK2o#yeRuxJEvxoLw#_HJ>xEzOJ;TU+=YLX!A{HKlWLxdC23sFUg-7Gb*5gT{I7%J$4NvLN)m^MuJ5)zm(pMquBvS(REE*FR>9S30+mvsgggHPsPC#Wvt zvVb*Hg?zOVU9o{f=wAaTE??L!e=&sIkrgzY2~tuy-1AJXpO~qj9CVJ0!Ve*Vhik`8=aMDt7ls628a@}WbEfHw1;ST zLVLBS8`p(w;P+_eXkVFV9$LsK?uT`m@q}{%j)hl%1~@UR@CH>t1qrE;3(1fT>5vTh z2BzSMNfK(eF>KwK6#;pD<9LW0VUP&7e5$wxTcg|hZ>QI7iC$Qo9UXE*_oUv1U=vbLJ*px`IBBLiL4Np z)AfnaSdr5*et;y9{Nks!B40RZlOjffGO?(K(W9zamS!oHv^kqc@C9tJ25T?}bub61ItQhy|Ej85 z2X(*(vC0NZN~I8*mRTv0Z24^67^a%)lMm9VR@s@N8V9fXs;$bZt-7kEDyy_=nYWsi zTdAvT;*}EEn{w!ds2O_x5~y1UbxGqfjP+pp5F33u7z(GYF&C*%_H=@Yos6n+Tv!n3 zFem0(aaKnSIKrB-nVF)Bs&haGbfByQ3$UqLs%t>2LExI6Ihzn_nYW1}4F-tb>2$xk z8vEL?nCY)|5U?E^umr2B2aB*zngj}~nGBnmwkeu^2pMK4iK%d{(IsQC2&vnL8|KlI z{b-}F79jdSuV9&322pm_ z9P6=N>$P-XtOi@EVc?+hX}0ot1%glt*vOx$Xh5ck7=1>M;|Yvbd!P%NwOjkOd)u+d zI<{qdwt<_rYYU7O%6e{l5A>R$lERMwxGtoZc_E5u0UDt1`Vj4~3qZS%DVejJQL~Nf zZ7|Vh(}KC0`xysDc^-L?K^m3lS)^{7q@~KYUdsoyYrD702X%n3UGN3H+q+TfyGDAX zUx1}`nvi!YD9z^&=&%dDdb;9aEM}^ZXsV`Pz@}?3yIqUB+gk@=0Hwh@yumBHM_RlK z`39??t6%C5^{@+z>ta`uuF)cxCMbd<*erU*zNQ;u@Y|^IYM3rb{~lf_uL6_5Q2QCm zcM-u_mBac4#d@m7n!Va<2op@fhCm2}U@h|^NQwot@T;a05KnwPn;FTA%gEW06d0?SN6-cTs;Xw(v1lyAG`z-cjL4*#un;<%DvO(X7R2p~ zF&a5uu()_cOKh1;xnc2Kog29xgSjedxooCcpyzzAws_OE|1V1`DWz)?lq`CiffE`r zjhtY&=!v!KskK}y$lANTxGS*63dj#^tfcz4Nr1L$%eERJbjusXwjd9xb{Z)u^w#XcxX^WqQn~if9TaCXchD- zCGZSg{-9L|jgSiM14JskO^Us&>aok}wX$o*5DnA0ySs3D(Z~D4W*8ERYh@FsSBye~ zk!UsW#nJ!4DLuWv<{D*B?9&5ngyMA**&tS8T$||G|G>k{&0agOUF*VF9kO#k$Z4F$ zhJ3@b`oTUNu^Rm-k;l`6K{QcKnUyK3#=O-k{jtmH!gl?&1WN~B4b~G}yEJUWaNGqw z9Ky`Jfl!Dt{46j|e3SybF7N8I^9LYCy=DQ&WJ~A zaeSGzNylh?5R-v1b~q}OJsPgqV-z@UcfvPA{f)_~*i1XRn^Atm1uEM8A(6dH_0PWE(?Vz9u)&A_$Ztb7|31bej zeH+LDi^hRHtF|j>5h`=b~%Ip3mBSusTa2xH3%zp$Ap;W z>peOS8i?_1C}4(~b+ulxEbo%_@bOEivxhPAn2uhbZJB_i{! z{~qxC{_NX+2TO0}O~0&9@367GvO?!C5}yzpa(*eU-R#K8jyJl^8ThX_x*Q^BxQB@# z!O9FV=Lykj(v~9CX|t^ug9Z~WY`F5@#EKUo-aCg4+e~V!-c+ID zw^SBF>MT`%D3MFb3sZt+8 zoI;gawJM*idcA^@CF@mP*k^^2TU*YpF<+qOk_BZKtn0jeXKe~RN409iinAPX4EYKb z%9b(T+m(vdE_OQq|B3uquO3N~-p!vkPyU`fnMB=-Q@GGOPtM-;jRz@SeP{Ij{d*>l zy`kKj3BHi#)2zOS{0VA6fjFsRDIa>6@Q5$s7)-gsu8L%nP3{^i#1K9C4U|`iX{MQK z=HZ8*cdl`!8DCy0F*xAvvQap&W+CR8XJjel4#5l~vZ^}RU?Yqqf}oHoAFc@H8=CsT zZZn@2Y>+4je~_>=3o#_DusQhXu&x_%L{pO!Q(Upd7oB;=7#i);u}-?k>hYOb3NehT zK2p)$KvcHvJYk;Kz)KYjkAv_J4hVvj(g;EOLOl_s*X(UdL?4?mI^ zsx(!dNc|{N|4jwr^dkgAg@{4WW(p-jrX1_xh%V~TP|P{@DAPtW!6K1FWY<)YMHj7s zQ%+Bg4Q^TxL&Q!`_SmBkNN{|m>#k$-I&4{tVUwJB=F#n~-mDewYuUo?nl@jEAqGgS zu`Z;L|Ktw4O35Vtp7>mgX}X7=9B#46 zR?%#k@N){UC6z^8u32c7M&d}Lg=)4L z)tyla9-^LA)|8-vZVCy!?F_5OI0xL^J|oShF4dQEML49N}G*amwRqD{1%$0?16vW{Hol%WzT%&=o z|B%hWYI7DGTJUtTz)M$*!@)n%0Wlv8VGnY5D0z&dciVB%XI@r2gfB7S}XsZyD0jAYag`bgrlG{UNVY;+@M7?h1$6(vGlGR=j6 z)iA@5$wN3Y%QFU+qJjD783)890tZGgSbV~hpV*gKGU=lON~XD7)+u5TU)icHQ(T{&rPatg}4{>hsi{o?%|H{U9 zN9T>ljQLETgZe0rc)*i9@^l%z9;7QF@Ty*n#8~ZINK&$= z%_x|NZuC)x6-hNKoh1ov;X7NfV?8ZHCmC^;6ORSxB`(Wq$+l-skkHQ{0#zf>Ub5Dg zWW$!W*xgsdTC1%#q^n*H+FVoByff}GCIvz3d(_I-wPvFhFD)cB$(a z>ZX(~gN?T)6s?PeoYWjk2gph`Ym~JtW_y@f25u6mI3yq~Dm&WH3PTt%+F@*=K``FT z$#k)y1rM(w4BG0=so=tGRB>qwS7_`qHqom|#2KK!-b8u)G|4?N1rznDQ5-_4$$tsL z3|Cad74My1d}~EBeVX+$ox<-)^t)fPx)ZR{I|zUY+!K1jbfHVxUuuXuidmF6FJPg? zHP&K|dA!5LFD?gX;Q}|XbuGm!Hb;(iY>pTYtQux}M>&KMn>5iyfVVkYIe0;f<0QvV zh#Axrb-UqP{#I8ZCJY}){Fm3DSj9PR@!4R!U8KIvYnlV^mv_A5{~qrU$U+9klNQoNCUeB#@j6 zWhTv1Ae9cZE0#f&LiJC`E6S2Pcr4i#zAv$Q6hc=`C~%-CCgVB-HiY?qx$OsHn{8Cym~2 zy8HUyTyK%Uu^tw!8$*)U=sJwB*{!N@dnVw{gexSzDS7lGXXatBdR)aatiCM5G~16^ z0XuW|jNHH`_oL-KzpD2|deLeHtAZ;9dd>e;=A@rV*{i&`r8SM`_TmE{_ArQ`7Yr2B z<%K$s9`#?Vc1BI#+~$z4{HP~;*?<4>TBJb>W?~EZ|2(vYn$rfC*A>a}WVg9*dEdC- z1M70cPd7D>Z&_ZL!}`eHck_AU8{lwm`uOiVdHXwPzzw$GzQLO=<+_Ff{-} zqzN}xa0O)`3WBH~tHO!%n6H>Ckb|fndUClAyegN73Eay)OPjozz`*+X9uCyJ_Q0^| zNeJ0XmAl#_6D+k!gS_3tAJS-wp0k|R00k7eyW{&Zb+Cu~+7t_q6JatzOlG5Fmo{_vn)IdqOLHn+Y&o(Lz?tcwI9?UA)FztD8dvem@vG; zcniQMj5FGxvnpJRJe<3DqdM;5LNBC~Fl4bY|Kx=-JiV0xwe#piK5`FGbh(aWBUYTb9=til*^(~lC144rVKOD7 zF7OgzTWaNja+?Sx7gQ0A=v1>zt{F$#( zy@PbUG=dM++lbXmC*-M_va&spqd7~H$n}A}%X1WqT%XE|OTS#6xWezfe9g|34X}{~@e0jBEX{YA z2OVn*wUIv)ahq3YO&rTH*et0a{~C_hvCXn%!+;F5fxJKv48gE^9=wE=`hiau+(1J+ zpW$g0{!&bmV}(mxADhU)uv*0(e9!olPlMc|`s^MGdq{U$%nlQZ#d?Y^Sc5@`ghAj6 zuo#70_=OE!F(pj4c2kFFXvERNp(<=K(frU|vxjnsh6N%{GmM*Q`>X+?t}YY{);Wu~ z_>HdEgEjOv+;mXgys`+L&kkRKGi>|l>A0@j$3pDq2d}N#3VTxs%O-eOCnQj=~43hQJZ52NZn1fo776h7EJvGP32UT z)HP5gD#J?=9|62~t4aafu2fak;HX1na=U0PxVxj1TFtE=RnrP|PXhTbRIQ*+vTfJ>+aTO0&ix_Te0tqH6> z2r8?pqY>DWEf%_vg>c+QCZTOO0Kw_(jPM8w*7i&B~s zG+WKqDIHDVQA+%?iqHjxutk!k)H1=Ayp@K%?OQBNT-X%c%@ME73e8U4wZv_+8IwN8 zWhOcU9k&Axv55^|u+AOj3ZV5iaUd{_v4v0LFZXQ0-I>pfC@cIlwHYMP>D9o)WTTMb z9vmdB&MQHe|8T3GKwceGUW7P@>djsSy}e0$+v$bR>a`w}In3+@kL~4Nwlb`qNQm~R z+tAe)y0`^R_0YL*dM*UkzQEO-%>f+ofzT1ZBoN z;*@z}ES3)m%hM-*6)P5~Of)Ex7&Yd}Vy*(?!?K8RaFtyRLc1j?rxajgeMS>O5x_e( znRQ`f|1By^3OH*Vi+>qprW>Z5ot6+eVi3+PT5>6i$lnuIJG=c55y3}O-M3-f+1j`y zc&t98Bjv(_-~(FZpR^%KG9_n{+of_&pF zW}Z>(A^>S4JBBMvSS=?fYOB_oGzn#~PR=O&8d`YA1w>KO)N1O?1t1z5pUOTTjv%(~A!ry; z>*}o4vKG~>YeL|II>>^&-fJqdBC6U33QKCX8i_7e?Grp^r?tHc3+hgr9)-9sx{{Qf z?&%y{?X_xcZNAS6i*2B(pQ1hL_z*qnk>A~BmA-BdJ$`~X=rUu0x*R4^3PQ34|K7tV zh0+1?spqoYrVEbNJR3HH7NLt#O_-L}u^T=>gh{{!TnL6~=(bOT?ho^U>3$8R!p9dT z;OsVr&oWW&j#vjCE!B$L@HPf66w}`z3-gxF(@bwUIkRaazde9&`KE9C9_TBwh13>q z;f54-4LwHnT7}@qz+Bozi;qq0s}b+*5!dDtXJ(93<7}2i%2RQfTO*kPC>qai#nP20 z=mSTPR;=zxVmwx5oupD#M<#Ds2#%3Va#enOyK`h#UrX=jd%J1L6JO99K5&F`&^3DS z2HmP6XclK8UkW1^(+CQY{|4lRB_=q5@`$Z-oywD=vO{M?mbdf8r0eo}|AV9;7IO_R z^Cd)c(*|*rrtwJ6;uS~1HQMn4QSJu$@nwz_8waC$0Ovan4@oC=e$8=ezVvtMGyqG* zeJzz&hhymGUXpfh#;J6Q7_|8 z7KS&PDeKRqA)Q<$!XMNX){h-O1UjF5C|8000r*wjJVq|t|emeZ@ zC#UWA`}9?#mg#m73Z!qD)hX3h9skk2FdMFz^z86_B z<;s@jftyKfGw03X^vXM@ne%7Lj0GP~t$Ov~dMsTA|7LwyU*yw^YeTlITX*Quojsep z*ZX(r+o)wDSM9px%b1&M-psi(s6>JTK~)Fksi;HaQ_An%HLzj@ zY8q&eU&H!LpOT+QP*dED8$TLi$Rr|_q*qESF*lBL)No=GPC8)+R9V`QRUT2sJo8L? z^rf|sL-|d3Ay^x(*Irm-S!LZ>2|aaReNja;(Odn^1)zWg2DjHregSq|a{lNOWRR2% zsaTP_A&F9G;xO5ylQ1cHj+0D6S(!h{VR_hcu=$9bkcr*%B}zvoS*CDOPWdEgXsT)1 zm0801k87E@1d}+=IVhbhve1%CF0}0V$}52i|0<{~)m&o@Iq!66k2>Z+8mTn7z(VMt zh+acZIgpkEjWNdfqTNrR2r7&@96I!9q>xHOOIf38Ld!LqO5?~NgdpO`B$MFcO-Yua zV+);tE!bdmecZBVpMP3fXrZzomFYY7yy)nvtmZ9maMeeimR@?`kEt3{jgI@Dyi7AO_y>02&S2pnN+aB1}k=O!Ib&)Ccs(FS?9kG zv!>F(1S_mCWf>colEV}u7jeJr+(}cOjtG;Lrsj0|smm{8NX|U(Oncu#>O{kfpF7iH z3^6bZBlA4v=*(=Opu|Vi&s>S8PSHF6|GAS@Z-KJxMtkt#NHEAu<7+<+Cwxvet_-^k z$(tGLLl!7!CC#QS!|d~?&&W(Owf5os^v=S>9rVmZ`w8f_uk=(DFnC|PNhVKc#l*i%_U8MT#C!}CI2Q2V_#Dt3?*B6&#PtP{`I zgMo>eGGx1CcI^(XT}|#?nfUwf!Q0mm@z!&veDBQ1C{#~MA7w)?YK!&U;y4L$&wI!C z21&+ev3s!N9OrWdzXAih*cC=#|F(II>qO@mePB>FBC}u!RYRM{u#R;dG?QaWxSH81 zNG1%bf)9FdyZ4pI8PAZP?}B$X4~=Ik_`?ubz=Fg4{4Xf7Fa}t>!=i`8=zmiDUjq3M zl99-xAA||p`G#eunKY<|?Zcs0bhtwv(hocj5h8V#s1+j~F^bNU$a$QoMkG$rCq1d+ z72%P^!937>u3&{Ldi1r1A@YJC15%O1v_i`W36hF*Aq?+v$V5)^VUBdXSJdxqPVdP{pKByWFe+%vQH zKWP@i5OpDhBo@d}aagoTsAGq)U}IC9>XfHDG{#Q@Rg_rLH5c?m>QQNVEv5>iQc#T= z(v${FtJ-ZXPSY7J|F~L_ul@wAVy#PAy>ZsGQYkdH*cY*6f(^}J;~X=M9q2kZ+7n8q zF(~9c6K<5BF_IIg77&0q?2tn4XTYvP(@E=aS=m6L>->ob$R;r&>D+J(8oG1vf~{qS&!ij^rp8T^61M%Mf024*4DPU zF%E}M1H#YgX2W}dQ%zqR;S8rHF}huG3O@)Z4dO<(yai{;hEa(@7y`b>9ScvMdq&?i zmyTJ%?}o(V|Dyb8uZ=^tBX?nxoq|F+dtfCmWgUE8^oEu%%&`-2Z=7S~5rfAPTJBJt zt6W&(*NH|}h&{-Y$1`h1fc5LI5Th(*1cQ~qm4z^D)k|Swu}Q5S8|@;Gv`LsYlF%>x zD8oiu(?C;c&?qJhBV!s;L?c?!nBEPcPuE^AM`9MlAjT}TLy%<&Lm19r?o$K26<#jN zW@`y(Guu@WRQog5FIpzeqA^fd0ULW%OK3GcV&2YR1FbO8a-BYn<4BBR)TJKEC{V3x zR&Q&Gy?gaP(WNSO{jb`75(cJpT`iiGBO=%nwv_is&0;tB!N^uNMt8(HZXPUx6-DW! z`wgcD|LR5`lN6c1ICfD&`+L$W9TSlT{+j00*vmP7_kLtCE0%p_)kAez59_8(ATD;R zpP1U?E?%6cF6D92HGVdi%GpL`pFY(pOqgK8qQsJ%(+ewQIndyIS0-m|6%Wb?S^EZ#c;yg zE*r_*MztT7U2oI3o8E+$wr=11Y;r627e1WJ)Cew)$C_iLt!OdRjO!y6f{p6}W>y9%wO zoQGTgGT4{?_V->|H+_H0!*MT;Cp-K83?KJB)P4P&9HRft$3siuZ$8R+B9g<(P=MY~ za7QyNUq@(7*Q8$d&CVAMo^Z9_M-UzDb;aVzpMW6*s@M!3{f{TCi2kw2i}>Gra9z^m zQ2`zxAtWH`k%siS29JavzAed2d`8)oU)up3r(IAbB}~Cc2@USt4dUSWS;-F8U2~vG zGL%9kRDvWVf>_O-(XkxT$zLnI(=ADgGZ9m(3B$SY8a#nvr>xq0d>*L?3cD%I{|=>~ zBjCc;41>IhL+Y@e`X%8KHsKT6#RN*B1y-TZfMFI+$QBMx7qW;wfMFPB90@`hscg#> zp&;|Ip&P=X4ZdLYZ48@$7QKxYBO%=91W6~7&yXwCVpau2?;17 z2ANz;rkULlqE5kxLoy5lG6cgUAVPplpt$LkFwoZpIs-Hy6JHe#E$jpVj@rv0&dNmt zQt?tXUPCn$5gEb?DEPw9_=1@22Ue&d^BIC8NWvss0y3OeahM|b;ae{5VlV!p&=r=o z6{Gxd8(&$2Fa%CB8WuE8k2LC|KJtzt_Cz-lL#PN~^7T#%=E^yy<2vd^|2x9q#>fza zWf_RIP;Jr1Mgj~Gw$5oxpKonUX7HJ8;Z~TqqKjz~N5LHkt(U|k%$|W?l~7RwB(p-j!O)k6JDzS^7>9k%<3k z+_q_)#%W`Gc!KEdSns8#amD3F?Ad4NMJ;X_R#s;FO<>^+8Bg*M|7W5|S2bmHO_yjI zWiu2}d@UqF6d-c>4_rPaY+6}y2*%l=4rTIL4YrhQaH1==BEUQp$AIU-Fbq1>0&}p# zVV)#*X4ETY*mioS42EZT5+-??CwkhXA#B1d5Y98H=Br(!PV$h;d}DHYrg0);rj)}x z49)G~o`8zVFbxVU9hWf#j$N%&s3cUCJ(z6nMLm?KOPnWV+GHf;=YBfl4*4fGjwW7x zib95-aUEk{DQGZ(|6&;n38mpq^o20p~jHX`ddIiUz8k4ho(s&Chh)+bk-OIV!2) zoRCrmdGg4mIz~9@WuL*K+Yw=7;N7pLr@f3rEey+n^y-%KS>Ac6Y@n8HoQ6D%17aF$ zXK*M=Br9`dsc=Nxv$-aZ6=3lAALAj{2@aXLhALj62xc0Wae@U`7-Iay(g8{;>TRo- zeyA;ctFwKX8j`E0>Q1{h|4~Gjx!SAzJVOeamvr*0U+e<2 zo(Z->SoTHhY{b}P6l=Dk*S>bEOL**X7^}#RYzFyV!k8q=rYy4d>w#$LOpGY)L}Q+7ng;w*FMEV%OQC5Y=>4eb7Wht#g> zQIZQ!R7g&;>(thl03PidL2cMZ!_;Ezq$)ThdJm|9YQ=;&duEpQIGGE48F27rkp%y_OD4hpWp zn(B(7jT*0*p{`N&6{GA!?efsv>TB-WEi2&d#+ZbZ=w-51REV0%M>(mJj>)CTAs}_9 zN_j7Mf-m1@7Ulw+50=ccDqD4;ucbB8C#7%t9-2sHQ2VMz{f6fc$}d`3YtH5^xB{1O z5m$*~kMM@Bdkl`V=n+EFjXTkdIrynHH0+8RL#q|aepHRgUEx(JgxE43_QIB0E%5Hn zWba0>eoipK(udfNu(OQns1(IvRUN8=Fo5nb5BmhwrLf&F1Pj}4)lMb!&9A<=0^XkA zg8XW-bdnEF8R1HS#*IJPB5=XKN&++zBv2KMi-=eV=n~BV- zq_n0M9Mh~E>s+!fE0CzrEgx$Z>vEFta${i?e*U76AyDWYv}`L@+QMdCo8QtLzCp;vj!5U#iBB5 zp6w^(Un}p|{z0cqCn58* zS}sL%3~yYtWn{F#AxEYCZ#1VOE)z4${zIjm18|kXB~-#BI6@>qf^zPOFU(CdW|!EXVWi+Vo~9;U!!GPb1V%8;YTBu%fo8 zsDziHtkayrlNc87%M56_B(E_|HGx&NRkvmRY+)rM__2x~5Gu2Q zC&@_1^RNUqrAc#EYULp8fsUc_K#v@J>@z4J&t~$bX@asqNY%RPUL#j8@kUp3De^!# zrxP>ub2E4si-u-=!-w<1?;b_ET94!<81(!YY2w$mku8!_$n&7MRydw}r)5u;xOJd- zL*6&CS?gwTZ6B^)T4h724{%}_yR#zuyfwSQph=aor$%vf zm~MNNR_?W9sj2&hdvUI`nHuux5hH5b1p--GFQlPFucFN8A$ITw8x=GZAE^7fsB5d( zF!+%ox}raz|L=lbseu<7n(k9Es=Yg?0JiF2kz1lHwZ987UuoTUrJ*G6*}-4?-Tviw z#&5T$Z0<%0l^AYEmEU)Q`$dWaGoVj&r-sUNJIhbBfk^H-6o|}kAI*=pXW+bsJB&a4 zcxSlRFTUGPL(}m+7H-=+tK#WTtTzYq=?4$w@}_XQeOG~E@AE-l(yQshpE?9jTpk~F z8S;eHU;S|n&bnRhT7xiOA-Qc}6@Ssron zB#G1q|B@x;QU3aGfWE}2{ck*dfJh)@C2anHrBROfTZm)QCdBLyv06^oGRcMCC*NG{ z{^z^GAPu{1eXQkQzTyvfRWfN6*DN*kzRsuEo|pN5>v{KYtCv=Bho3*{Ao{hoJ2uZ_ z9&Uofzi3bnEkHCA*vwhMg3q2Ad*ulfC{GM!87pXQ9>09~_GNr$tsp^z2Cr4Tc+sA@ zT%SHYeE5o(Kw^*v8Jcv=8#S9ZsVQTXDU+>p_x=U-H!d4CY&VBpN|XqZAwq-qjN zLywls%oR^tiBr42H;(dT%b9^|=Ij}?Xvv&mvsS*GxlqTiV^gMWo1H(#kRw}8R_aov zNr?=Fk2D@qR;}i%TJ=SYm@)V7-&d=44Vp0bz8qeCC5zUxYu3nl#~za2d8ZtX!g2!;O_nU>iTO^TWl1q^J#-`q;>!~`%L_6mk?YO(-yYL7ZFOu@C z!pgjc)@u(w_~xU}K4W}YsKyIrnGe8s?6Rl813MZ>L2Hh*XP~V{|-F_ zQABJ=bS0Hk5L?cl&^+rbvf$Vp@wn2`EX_2)MU?F`SwT!Riz*!IlS&p%NMR8Y?dHS{!pNWDiKo4y%l7-WK(q^a=4 ziv+zI(`)Dz0Es|$zgscfPZnXwna4n3u)I|(uDa^AzybHMr<`c4siw(+py}0DWYvj= zmt1oB5k6Tofh3Yqa5)B_Iq!2QzGch;de`Y7Cp9s~!TS?6cEe zyRW=0vTN?T?FI|=Df|9AaAOb>=&M-_C&UrOy%BLl$Hx(wOsQA9SsrkHqsFM9aax&Z z*pSx8Xr-wKOMo`|=(<>QlIp84OOhhA!@tH<+trXP#Bd;gtpv-zB& za7t>ark;vws?D>~5R`-sE1DP`+D_6Cw9t+&ZE;IJ;?g?T!OekqIZ5EUq86{bH87@0v%noTb7QBvVeMU}K!)s7N-wv0`r^1sY4~LtW5`(-*-gseZ5vdv(&&Zffzp z`kARt#gPpat9V5@X3tjXu^w2;l9skq5iV;nCMPn-Q*pXSsrI->_bKNdNRy%*@wu6E^2srSWMd%L z*qk$cN>cEQXBg+nntDbjpZL6G%l!F7eE^glm{J$JAafLWvFbaoid8YI!c0tRGJwaF z;24W0Qc*_ucpaUHe5scogY>cE53L0(m6WCm| zREC7tFyzHQ@s!6#B6TK8y!OaQDzjj;Td5Bf)+`A&!x%F?rvFW|^`4yWG!i}iX;6nM zkD~hNOiLVI&78KW_EE27_C(qF8rL%El`)qAZI1RJs+heht*@a$9$*98GVEm!ph}Hi zZVY*o%4y9hT>D>o4wx4ff?|Lv*`HJ{b=heFTVC>JqITUJTyLQSybE2yiWJz9IsR>D@cC`k)#1!7yw z<#x99p8OUADb$G#_A{ zmtVZ1BaJ;#YI0DckNYJrx%^vhF++R7d$mx3)WsXz-2bwV)ft4gUQviyuu@vV*{&Jl z^=WPsaSRciw`rAqZ>OmCn+kW& zGcL06F>!QM%FLCfcSf`|3|8ZVt=FkSQt=xtQlv0v1PMux!jdEX#JzO2ul=y{VZLIi zh?Be{_TcApnBH_w#R-Z2EkzQSn8rF*_C8V>+QIL=-kIR2qDCh&nBZ72+ya z5fMnIk9Cm|lhtCRK97D*-AZv55h|>9HLT^aOaBIs$rj@vbZah^XIrl;uix%eq}23R zm01x|<~~h3c5!HTpBqo{edkeS2IoJW>5GeEl%v4(COgerG4NL7HfF|Dc9BXR-iTL6 zg~{Wnj3Sbg#22x4P+ z_Jg;qxUBKVIc%aoL@eH;DZI+1SI9Q--v6y5c@r^$f+V)FZSK3^6)#l6leoqC_I>_+ z=i6(p=O-fmYL;XC<+v7IVh*b>N)|}vMbdF+oS38_rTyfaA&cCB-Vmby2I(WLMSr~A zFx}>FW9yEm?GYI7b_YCO$M@L#Civcghr3Un-(K#?kGR`g+RMs6-?U#!G;C%b_uc+| zL|ue(E#H_+=&V%;a#w%JZcMO5?0^|6wY86`3gW~HsL5{Ro4n#H#H#@p?*V+4ava`?_(iSa1%kH4(*T_ z@bD=R!9yyc6aeuj^o`sI@dnqYpC;=SbHf!44^P0z-`FJJNCQ)3F*URh{3vA?VKEq8 znX+qD>BXLKyE)wDp+ns z4xy_dPEJO~1L#yvTwX06SpTNZCWQi%P-z|`8mDpKsu3HnF{)sNUSfo*h^^T8WnacI zScdHYvnn0cksZSY8Q#%xba5VcffbF0`hpP_<3|az$L?sc?*J`*uJ1H@@h2p3Br|gT zP%^?iGK$vj-z4(y01faeV4@HT z;UE9e_|^d)_v#<$aSLb0o^n!7=!*5M#wR&zYf|X5zD6N!L@#UvUlcMuma-|GGV~PZ z8=^8Mi^c}S4hPY1B~y}9Hj=)`FN!iNXt?k0Py_X95(^OvFZ1%SFj9Q_(l3dyQRK22 zX%hUXr~SZ$Www&d?*C64!*cdEj401i1VMx#By5I!YCKIzjw z@iRsS)ITFFK>4#jN0dLu!$1=>MHloO8dQ(m2OTOh>}>9i21(}lEDF05-#*0_g=Wo` z@im@<=Hkwd`v2$`zca#sF-O_yH5BC~f#Zs@$OmanLfKPJ+zC_cjNdvV9>ifC*5Mnb zVO3fsCi=%If$mHJvP=QeDPTn6{!w>UjvwW;?4>kW$<$^&@`H@ch!A^%z8Hr}wWK?}@rttbpigRe5|h+~~@ENQGG6Wf+bX zMxOOeBmcFtnAJ?%6cd#{EVQyQWREfaO`4TG2W|bw?k5-xER9!MvSCdr>YyLuY zU}e=|33gO%bvjjsH38}w?JF>;=j;+~T{KWBOfzIfc4SHRHcR$o7ms8;2#GLb20fNr zfhR%{?PrdnTiZvkAnawSL4Qt`WD!ARfA(ifR%m-RWFN2y(Mw;8FlM>UCR6dKj#LVx zHeyf1U{3~NtCKhu_QvSV+-#I;YxN^3mQAu&QZAMjD|B4PjZ}6K*Un+ry2BBFX>RGZ zZteDN?bZ>+uoQ*?gs4-laE)6(rd6p_is)!##cZH9#cknMZ}IkVAvbUJmT&!bFo-H} zpa0a&mdF+S_2#G%M~lY?&yzW=HZ(x;d~lI6IK#$nu1=m77AxgzbF_4S24Q=P-Qgm-wa)oKd0E4}o1llM#El6jBUYKWJ3D|ax==~kQPO}17&i9^7+ z=ylme9)dS|duMr>_gdS(pPlp%Z!;6q=h&x|>san-{vAv*8@lIi?@_q8<8} zn^|T!TBG}!ciEw$gL$M4`k+@@rG?t0bpn#P%odb-shPT|o%*SvI;xp^7pS_bcfqNx zI;*vMtE1W#Ao;7o8j@YXtHXM%!+ncw?@U*^hlxw6{rH9nu;4rF;E)tG#1kcZ;(97cu!5!~Y%HdqUa~40p+075&LMyN((2 zGM8&{-O1V~68L|+6*0fe`eqm!hdndco!`S9GG#LuZwBD^t|dW(9oC(k#g1khSxz!C ze$3C|u`g*XK4lJ`GZKDZb2fWQ{v;)^-bfeX??K|b-K@Lq<82rI7+&D{ch_588BQ7D zJDB^j-DC*(6-$>EwU1F+n&&Ux+BH&tIZ`iiK4^44sbn5&wNkP4u4=EI3schGZa8Ih z9<5`3kW_^Domul;Lpbh;hxUUXzrb( z?%PQ1<%sQtICUx3W{WCPgcYL%ZH&;3IOYn43I7d^!Hn>)h&Gyb>akYf?1+!)-S3kf z?a8c)kLsY(BxEeG?PuQeUllx~(2VRY*%j+s>QD4-vO~+nD z>k_8Sb6B^^J=hhc%CKt5VvKl_~S)F>F_SF@Gx zy^LuKF3_D!Yl4=S6LI3xau=V4ocZC)R90!86GywYY19VA!6j{%qrZ~=feg>(*G<|X zWAEj~3fKGZ_j!oQ{g;+X{$M6xTZK_KTYNUrR~>c;IXGK(6e{FkeHe1rop1i-Cmn3I zY;#YBq|FB5Y1q^TmwC{YCl5R4#QzA=a>+HSKl^lRJlGoH`GKolHbrn*RB5f-I z*kVaP#dyw=>lwJ;cVamwSb+NMcM+9?P50!G6BenWeJ!2Wm>3EWc!GUl9zWzMK2 zandCyB#B`%be&eVomk|2@!6Ini&vgk%Sphw*9`sB2$0-G(P#OnK(vi(8_a7)}i1TTVb z(R-~z-*hZj#~v$uDod;t>@Bb52HNLb7h;$)eJny;QGw2G8Q_ecR{18J@;)gbd@9Rl zRLk|fJgAx*&1~FoG#j{MR6X|lw64>osV2}W*UQy*8REO((Jk3rGkI7Z*qd($%4@aP zfod(+GOL6l_uO>XZTH=FuaXSQT$8AuZyzek&RA{wG-Q1yvK$}SBf9M7jWY8mIpj@^ zO?k934eq1ihZCu|b&NM&^oE5eJvo0|l1yNJyJ|i&M4co4Yif&+%=xL!m45oD_YXdViQ5o;Zc8y#G-J70fs9{PWO9|NI-Kd?VM9K@ZAaORurAi|Jrh*64f-H?`KR zyGt&atLsA5m%QNTjPLB^XEs)O>8lSdvh0G&S^O1a68-FDJE%p>V)@g{`XV*4;K?L@ zXBi)EI8lWk{J;ko%%BE0$iWV3@CwyaSZliXy|P4vEvjO8;x}PSd)T!?H{*Tz*^}AdwVBII*dah9sVcjuW++l}?G7GMl6#`Nuwn zE-fjc(s&X`GXU+Vll@sFD9QH75eaP}aI;$=oPa?g9O0Kq2xc&WDa>O2@|Z^u<`LfL z1VNYrZ*|k#(E2vIwj|0H?D$IWQWZPDg-3MdBjk+Y6eY`L@^y(M-YfwZ!ESc#n~qc6 z<<3H*RT{EsHDZ%K)@d`exYK3o=^DvW*_y|llS7DH&y*Z!3wcPcaMapL@|Nd3Cmg{C zzRbcGy3mC%c=V$j{isO8z|oR&^a*b~f)lPFz3GK;A=talDM^@3S{2lQL1d0aU??oV z^hF;Bz5mOxCUQT1KI^7Z1k6tRa;cC645&fvB7ibw)B_?_p4&VdPn(LazeE*RPc7o}KIanDF{dDkg&(7XD$Rs%HFLR!bA>X9F;`3@*i^^v>m&kZzf%QRh$is$1arZMR2U+ zd&0PuNX>3kwx>`bTLj1B)r&uTMVk{%^m$IWU`978Qn+IH%M|8=n8!?JKGb0iB;9Bi zzMy6{b5zZ5zJi>cN4@AC1bc&$?=JFK;Q#ixDUy9mzapzzjnr1i^~f=9GkIRkMkUaZ z%h_Tri|AcM*^n^i6k~y7)skS5B!`x5qA#sYaVaFN9AxVk;xJshP8iHz=7S+-P5)~{ z5P}efFf(6w&FfyX*`rjtk73OiefJN`&CpAWjeLRU<(kbc%`WBSw3{&c&# z>Xp+JNorijHNUpSrm?N9o&&65E$dm|y4Hl? z!yMpB@PZfot$t0T5adWl=^|U%R*{E)BZJ=>m#szYVR9%ljUy)$Idc;yFO#u^ai`ta ze22s?xS=c)iJx;vCr_v-N1mTOVmIWcV>vdNrXEulM8TYBFh-Fn%qOg2xEPk}zQbJR zrqf}r8g?~t3m%3J3sc0;q?LjXd||2Fep*^uxae6V_i?Mgkm zH!rs9UV*Py2~Uw~`vHT?{O7l6?jcLVf}*`&;x&xB<3BkAZA;ya#b~?oevji1^R^Ji zcSiW8bW3Mk4)}n1#Rs=Gfz{`4xMphtM{vpITnh(XbfF>Sw>ID*9{>EOKubd)9l~VY zWJ98re<*_^uvCIlV>#-9G`BM(f74VfpFgUQ|Bv#{h zv}90Vaf19&BW|}e=}|m=6eueKhr9D}4fP#ol7yTjHp&5BbSPzs*nfDKBO|hhwc|=G zI5|2eacvkQZ}>_!CulPmS~N3p`Sd0}0g0ePCWV+jI>&}S0V6SDc*~P`K5zt!7Y1uE zd0{pRw=fH%013R#ypm35ZX_6)h3B$;dNvDw&)^C7tX59BzJs<=bG+2+K zEcdWy-b0NNA(7`&D~{EW+(?hJ^^FR2Lhv$<$EJ_z^N?*)4@OxjXR|;8>6G*MU)Ts% z@-Pk)i7iyQJLlMs{xX(9ag>%ZXi6E5=y#B1<(1qhmH%9^FcW8$cX>+`>01_gkzasU zGwFaH36jR}3NERVpzsNwz?dePk}e685LjF_Icph+W=Wu2JIRv__YLdta6(x^JHm=d z*l|F%aiL|0yYq?KbR48;8bsp|d&!US)=I1>f~bjd*5!$ds6M|rgPPGcJV8y9$RBA* zV8vk;ruk#MsY$CDoQh~pI})1>Vw^^(5)V0tX2FC`2!+5jg%>slV%CLNI0&;q48-6I zuiyzM`3kZCpR|w*xj+lD5T7U+nfdvWS7@GDSO{0hfMhmTRhI<6v;bxm;MI0nZJpVY8GZrdk;8Y@r5mSM5oZ6{q@wO!) zI)tKBqV;v6o};3a#EHo1qT9%XSC)8N)={;1VX_tp!PtwSFp`gnlDco}OBgTk5Ki2@0Y546{%Occ76|2UmO* zY@FGX#YPS1&<_uq3K8m!0Th;pno|N4sQ=u-sMbbA<`$6hIHz^WtoFgEq-IlBB(3+? zc5uQ&`M7R*YMZ8GfDmGQLSRP0g>=og2bijq{`u{@HU7W%DzS)3g!IV>xoOGpsk$xA~gg%XBg<+%rtkdm)Z zv_^ZM@oBX1X$<)a4dgHn?@$g^Y7D+GuZ#(wNQ<;Zi=UARsv_B+SO}mosc(8!pa%Lz zKKUiK0HM?+BBYW!)XJQjSN=CBCWkYIVMT(@K>ZDeBx~Pk~`PvN5 zPz~2$4bWhpui&Z#o1~_jx>m}nC|R^z+KXQrrgKGM1NTu`pp!n?5L3an-!ZNI<5-JD zc22gG>XIrm%XMtAD-a32d}>4f@+y6Cdhs~DcAFY^v_;A}Rdg3QFjRkZ8NE>1X=bHD zrV>TwD;C6O5UWr@Y9*K%Nt1JRshOIRpvt=bs;bQZlA^l03S7Yd3JZ?un2b5V3Jj9@ z`V0VDlATJh=?RjufUv}9jQ>?Lk0`&7BEt@(3zjH{;AoFHOl{z{!$%Cm4hO{8Ypw{9zhtCZektRjMxOj+8 z_)@dpx`;2_M|Vq2B$5qYB04I27keDHOwzG}Yl4J3N>w&Z?vxF-z!_iS$Gp>sjLc26 z`N$L($*Cg9l-x~*jE;}$TTz$<5jJ7uNeEzzg+oh{^O+06;JVh3%eh<)1>6j$d%LMi z3$;w2#7v*UAPlPN4FAyJy3imDxofp5iM6!gy4N5KkRZ0fTVZp2yysxau;B{KAShw? zxNL(BeF)0C*T*P&6jg?!wZROo5EHIo&MGp_^7A0)9Dm;`JC)m(Dg)2*tS3l!hv+#?wd<{}+4p2J}Q2P#1+poTyv`2fNMN11& zY7Q#B(kopK{i@7Q8@0j!3nLk;O&Y3CI}hc+3-(EwG%3fMNyj1N&{e?-te^}B5v(%A zl}*GdyurLerd<(LAI~1&!MDnQ+x$}0fZImx+SuZQ{>5bDdm;Ma+=^^AKttRJG2O19+opoxt$DH3 z!r(uc#Qz#j%GqJuF@f9%-r>`!F&qxFlqE_LP9eBW-8#Dp3np|6XjkX?krv#ZCt1t9 zpbnBP-s5cz&aAs6xwSm*2;f1T z+D&NH1%79`fhI((h=r@7G2(Kt*E<+;Jg7n87H%YE{)T#7xB`tNaN*!@+sF$o-Bz6m zu3+FvQRX~&=K_=)g0knj$763U);say%J~^TdQq`Bn093dMk=cZe8IG!(dM8Ih0WeT zt`59F)3eK@PWlWfE$Tl`*|1LDs%i}MNeiMN<(ly68~xEcUF#;@yVpF7r!CZVWZbMx z=>KHitm(V43SrKCuC3K7-DO?j&CV21EmgMN?C0?8{S)oD@#2F{j@P>E)N2&H4c4&@ z=?fw0_Dc{_Oh)OtfBg4o+_m>cG+}Ee*MV>PG$ySN;x> zP4M;r((lmHQ(LvIst3wsdkkaQ^+%j_eV#=)LR*Cs~<%y(7NOzJ1>2bx>H-ySq&1I!b;a!F2`u*eE*Y7`l_XH1?R}im4 ziU_gE6Rhv=W5|31*Si*l+x7kgPG50dvm-*eWFia7O`i|nmyxRZ5}^+h$(;hB9$QncjvguC{u1Y!RFyPmGN*9BcgR#^-EPQXVE@l*^&Inr!Vz=#oUP zM;M7QgMYDabk_tONC zSjc#Vw#8qoYmM4r?#l3s~QmS?KD zW~rsf87k75Rw{>51YeeAt6XUDs;a9vEz3Nql6Kh_p2+gVLroxwQn)Twce9c38TJUAFFQYH>(wx(V_ZwtL~#6*;rf zws&o{!@dV%)!+_H?y~D<4A&Ov&c>F#w=SHsud7u&%KyK}uH5XuYfT$*wikChGjYY% zb#BS+9$lck_hu(KJ2ApjPmj$5}(&Q>nA#@b{tIT#aq?MM8v zNHt1Yoc;tTIKHT69C~{Q{Rm?&&IC|8kI@lz`sbtGEXPa-DvMd528lwbk9}m3exd{zS&?6RpY?}qG?x6VEnX~Ki!4Sa;?)x{r^0uj1aoedcx~84_zQDb7;REc83jv*ux%1 z!Y57G(qt%GNlm4Z3t0HfWiq>l&4QV;nx-rlQ28Det4NORtxTCzf!Q^#0S%kvqI$mk zV$(puAy7yK6zU_y9yE4;yd^62I_C7RHVB9wKQ3F+v%Hqe6@ES>x;XT;F8xUq4t zb(gG#NezkCw7#%yHSC-H;A${y(G^N_tt;dX$hds|HL&q)oZ}A2wH200ST4dBIT!n@ za_Ymer7Y<~w!sej<<19Bhyz+)+8|r*Lmj+`Dp$ydJz+5KW=)i>@wk!;@);F;#@Gri z=JT{4(n1@X}r;nJ|BoG;eA3X~u@ zG6ujdlyH0lIKvb&I7tMw?`c!ZohS6c5g%(%E`+#`_*_aBiei))k6E(!7_mYtUX*aZ zNTK?0kt(zhVt}GIspmQkt7aj_etdylJ~*NrE}@4v!rM*xmAAnQj$|Vt+}_N_^}iPO zBn@GR%6deW%40?+BK<4j_1-0bE~3bV+q7Xg?^iHk?&}D3v|%z+nax-JZ<+&q$TmX> z!>5Gvob@Xv`;OzmstvJMp#MfoP?-3Ny97mjXxu19Sp%5CL~$}JohVETcSDG}l%xZd z4?+wkO@8utqujRDwKdNZ9cSsV?4@?zm0X@PXXqSv?7^ZV!MJ9q z>IS>(fKt@geSWVy7t0P}jAqvGDb8rhJ*s#wX4j}jqpE5QUtF~$K;sH8)Pb`} z2?OF+1q;P*p}bch*%9WT2d&qEu5rZCtTS@hMWIc&gTD1JSXT39Ux=_Y)uHax#A}wQFVb6S7=kN{>uCc-~6GF#6sk z{^7p6@)hwZ3MfKx-cWKm6WSgR?N(8{P@LPdsFa=GDhX;!U@Ti+fuV4Bu3R!QAG#c#Ya1xMzY7#XDQTT% zTdQYVuq*5*UUNd$=|bN7LSZos4ZJs~0Gg*DDmx@9THq<4!X=rYsi3;4oKl*mA~?P) z2WYS=ta2G)FozIykCO?ilvx>=+PlJY1ZzSBN0#ahfdHjF}7^ss|att@Z^ zVOSoOFvQ!st)E~!mk_4u`7K(|iQCF8yNjwilrE-H9xLL*YUB!`;W(-o1)%vpK1i}) zK!$1H#9|=~cE|>AlAlrJMf##W{K7}b(8XcoJzvzvhT_M*kiuQ$#eft@79q&Lh&^MZ z24r-EUr?eedWUOZ6dOyvD;kgik+B64g$!{97h9rTqK|3%#{B?6KJ>^1fwT@pqje;| zZ&-(TP!Yfo3~W;dSGl!+d_60{vlvpyIkP{8@b6qBK4C z1OFw3bjqicLfokWAMk->oJi@T6fqL67h}FoQ!!(}wC6gel57x5OG{_aH0*;9Piv4G z%r~llNj@My^OFag^c7`r1y`{=t!o!p+$+_o!UY>cZOcmE%OrJ47+ic7wz903t4x9E z$u^A2$Yd8>L^fxmJ!I3&*V9V-2?Z)Rf+xs=QK*KPL8`(#M4hlPXn;*~V7s;}huXpk zVUQVXfCi1r9)DvQmzl$x=*^k28JBp(!c!{WfvJ3pnn*~zm@GeWFsNG@9c;@6!HhC_ zz_zuCh^JJRm)pA9=#_dB7tM6T??fE&9M5|qGxLl^&|E{Mi#<@hMf8trJ?JBSTQU#XE+Xbf?6kmV01_IPy;Ia1Dbnjq#L>%=4pv{7FM=KcW=9 z$IKz^SPp97(H>1mAWah_WIzJ!Jp|+pgGdZ8c}l9Jve}zJB@vS;wLk(jjA6KhL_mZ{ z@FGjW6e(h{XnF-uQ%e;b!2mf+Hf4|`I;OXK36{J|m!t|!NFx`0Q72Q3BGHTVBQGmW zh%8M?A+1XO14^t6LrB%H%(%}ZeZv-N)Tz9)1#B=pQ$R}ktQC&ry8`FarhDsO&LrBy7u&#gmv`c$aF1j>KlS@ItC3~Pjw@egYQpx4($hw3n zTB^aX5L6dsyh0@n(@0bt^{isiQuM4$80wXtBtj!(ky6dnD-@P)O-dqUHf9^co)kmO z9GCfQ#oyCH`T-Yq{noV#H)t7G#0*Vl`A7Ur4qL_5NSFoXnS}-cn(DzwPKmCfat7Zl zI45FG?m^K$aacWcyX7;P<|zl~j8^lwOY=ay#JeVIRh5J29AR0OAk?JT0neB1QJZy^ z%7Po8`@&Hax_2VYo1M(JX`P)t(w>c-d)d#RUE2O+sG{{NgT2)qod3@0EDueP1;V>K zqr#pDtp?p9nV6U@n>f+x>o~%@&F6VLq*w}QP!N)}%M=BRS@4Bf*aXE}Sr_Woog=RU zLaiOO$)#Odt8AQBG^tULt-!{ez{fSsT9w*Coh41+ zv5Mpw8-o!2D9d1SK9l64QUTpM{kxJWkOMIWS@<_;1=P3|m1dX)NKn~exYoD=+`YXu zbh4imsobSa$d)t6;Z0n?HD1QeyyWG~5^L+)BztR}_{PDbqy2)fT-b&jsBT zG?3@YNMl-}Av(2^oF?}LT|wE%U}8ZI!Ao-_zT?vmUqB;5aQ}qw^4;Ps$e2yVxB3>! zwca5_UWZX$v>G}CM&P3CPjg*h>5Uu*_RD&OU{;jiN}^z>{gq@Wg-WOdNkD|~9p9`K zUGy#8wQIX~uqmYiIHeJW69ZWn&P|>fH5E-7;`<@o-Cy-_1Y9@bJ+fQEsinWm6Cu(%JdHHL6R z3Z-x=N~Yw7doCSrkm_<8ywnsRCIn2Bgh{vrWC$m@j-}t5}A%S*~Dm`5Pv!5ng^{R}DQUEhWdO}R?8d1s+K7-GSabc%#TmjK^|fqvDO`v+#0XZwNXT%E3T_N8#H zW=!*?PH7NsZWOs(L7q8Zh=tg3{vj^H-3eI`>O#JCzNYbW=M9qRAe5}sdtllC<2M## zrMsKS>L_@bw`QKOf63s7abtYs>7Nd|pjJhHQ2#dDNob;5*Yi|rUS#T=1L~)a9eAmS zIxFgmmRdvDgjw)L=rd%Vx@2qKT14z*}NF9HR` zyIY!;5q`Ech+vp`o;fzw;MaM#y&4CKn(QsS2cl*N#ZJ90KHw(h*Uxg(DgMj8p__(n+8r=2Tx>jLPi>|WMWG@2l zc`yfZVB6xg~Ova7DHg-vOYO~9@ys|dM5NV38{A!Uo7U6>KvHWJPrPgPw&vTC7G z$~ybHZOT~e(WqwxepE2qv%_L<91`!0aN~}UMzJD$u*ka}qhlmiPX@e_rhjyR7(I z?-Q~w0~hf4UT6(g)umh#jq<#~$S3iB?-$1l`LK)9aR5ckGwc`6 zvpEDSaK+9j&ck4&HePadn>iP#2*NrUM{&DKy-s@b)&BF{&_Zsh^K|iXLpNA6%~gf% z?U&Ava4Zmve8!DKuB>tyj=j*JnEwao!t2|LII}>^ezu^{zY>;?0sjts?4E2={`VJY-H;&smP^=B*B%6iv%^;fLc>cI)d z!tyn1bM{>)ooEl7A_UjOoYyiA_Uu)YV}BiP$1HD0x%{5=iZ)X;HEVB-@=Z5i*^RE^ zgfzN)2JIQq=9!1({>=}UU8QlE^Vzqv#m%;xMp@6uGk0fxk#|?obqgw(`WrJM#avHC zp<+goDzm++1NV*RqmCytIWw>#ybM^L4nKl#qC7ADn9kzX_y73jN+~09hW{E2(RB4Ckdk(8>O*I$xIWhvrZN|$U{kbvu znhSna+zr{k)V|Pm)}Hy~KY6|c&!4_~ z_vDFN=<%aMY~n_e#3qs?%9P@;os*~W<;HU(Tf%&4@g~lkIxG6CsZkzKc``wI#OAOT zrcAcv-Ng8FB~hX$OHNg(l4ebzGhO=J>Gf+*pBsS=jmq$7Qd{?$X584(>_?R*ty*Qt z6{c2kSZjXmo71V!pk<>PeVCT1MSbV6QTsORaj;2)3`LqnjF_=kuVl%hl`9u5&Y(VN z(gf->DAT?!8*Ap;S+#4{X3K`=%(XFDuRej=tQ$3`)yAGlD`!rfy?n~|?aODc-0bMq zgu#NPSu^L>&Hn@vH0Ukv(NwM`;%v(iF8cHzjRuC=@UBh2@+<1AC-y00!f2HuPK;kY zfN;H+)naFfHQ#*o-RG8o4%w24Qfu90-dh1$xE@ehfum4E2O{WKTlaC4pH%zVLXk!O z6sXWQj#V;QB*Z-POlF?&_6d%>f#QiLr2*#&C^A0d8j;Qzc_fjzy}~1qz?~+GjIhna z4?oQ*mk)FKyc3OWM>=B+EKKqU3Y4yKSI|M=J(LP7yGWQ=J@v=~4v80D*rA3T!l#iw zAA)#KoPpZ+6P;!?G|qz&mItU%b=n!=fOxsb)u8tI*;ht_#`)5mj(XJ4If<&Z=thM; zdgq>{>i?;cpl@EPQ;3=p>ghs@qJSiWOTmq&v6Nsp+Nx!pi$e)p+RwnXG+dHQ5DPD!VtM-o;+k+s!5 z?&|B$t6pIgBA@Qw1Fu{hE_N$U|K20hNVLjZE51Jo7ID5A@!PLX3d5xDz;zj%4Z>`_ z8}GwW(R-J@4Da>Q#TX~du~-DBl%HN8L%38^i`6;IC5cdG88NdAJFIEFZAJ{UN#kaW zF~010+Gd-1mWwdg$VSdQ^SrY)*Ids-j&!p@0}GBtlZiCB-KF{IIUuj=YExs$9BdfET`6T^19)UwMM_hj$AwKC(%&2XnEH&i9Z)l!Cd&&2pWeE0q8-+-4T(%^;f zRQcSBFCG-9c|-1xD_v(yTXb@hWqCh-KUBZ&z_y0#g*xO zi*?>Y%CMsOPMjw0xt{6k9BKP51N@XnLLY$`6RFbmZ$9s<5H$p-lykfZ zc022t&kR9`4Mw7OMcds6k0rcjcxhS9S`v?ZB&}vt!&=U<$3C{ztr9xp8rIr}J*Z@k zT;Tr*I4d+pxwr=sWw_#d?AnQWR%F2Q=}&=;Yhb_rN51&YPfzgYK#@EVikFh2 z`V>OM0p`R!rdnd-I8`YAdC^Z`RH6iJF^)I+V;m+S(d=laK|)Z5Sh@ot2#+lYN=PDugt#3fa_2!n28T6FdneOiQyXD0&1wJP zGMX%&5gT&6BRS65S~oO$SGfOZQ>NMaI~Kt@8U;yv)4 z$Sy4CO+ot0mDCGxCcTKjR2nd;YNVwI0!&hiDyshQgmepIjAMp@jL0COc6_uQ zYJBIT;u-BaoDl}r-cb%=aOM@pTaAq3+D|M!CmP%`QnH|-SAVJ_8oU4vJl`n`O+X?N zqrk;6kTHyN0n=@)=;)ua0>O}`iZA{N)PhzzIVo!7Av3+AX7LxP`%DN>g9`sGYx_pp zfrSiH?ZKZ>I{Va2y%x4zk?nmDby}V%u|>$JgdX=unN9rhkGvDpm`-zxa_EqU*wcg{ z^?AePY^ht!Y9W=Zln-<8LKM6~Rw19Uy7wSv5hR zg^6j8`W5=R52VSU;YAjQvjB!fW7j@0;^}WFxgaV7kr=o&NsLa)@2#ncELpG zaf8bR4m(Gaqb8wdy4A(rlcHq9Yh{U&CQOocspQY`TKALb1*O^$vJfslSUgAU%fF5( zI&ZR)E>>9?%vhS?tP-`#86q9&Ud1tE4(!9roRBS%sTXfLxy(=wSWy2h0;rr?xy_No zGUcM$Or%73mjFX1lbc*-l&s7re0yn|-Hc@pZ|`mpOVCX~)mBb=AG#3V9kJKQu(bG>|`cS)m?tBr4V+P2+PuHJ%rgedoWA}QutXxB)IOu}&(Je?xB*3D4Z;5hI?y2zx&B5&tes`3 z{`$)V^fOO1%;0xV(R^v-QxpRXV*kSYA~KKdfbG+$QxW;MUo`j5JKXcI{JbU{HY0^i zcJqAY{KFJvmH2YCkQU9ZcFOIblX5{_er!@$&;l2Bk(Of`WivWMG+lzPWqpEJMP)~7Q?oUN$ehF;hk#P z@o8~+83nIx`V`)^pwHCMZJw%Um(lSzo8#dBB4RvZ(5!rn#3lggVzOIzcfjG~*@gsO zeqgCN-M!6?m6XEY<49VBoY9&1Fo!wRfqQ)SJ47y<=&S!q^V4SKhS6U}=-K_u3;wB_z3m_D z{a;foTAqD_I8{QV4V>+y69$d~r!my0`Ce~4R9%gWU}a4|8K2uVOJX(6lJE{{_(rS| z!>mODA0YyXNx~&e!#Xqs1NnpFMFjuFS^RAnzrf$xXkgExp(WMt6o>=6fz!e=O4TAdAMz*CXLhBg0`S`2Z?30+6=z!>k~m3C|g$lXpP z44fn2LNFY|G{8eYSR0r*8#?R)o5&I9p_b{*95Z>y7u{CfbP z2rf?HDr#2L5d|B?;w;(%1x3+Iw2D}~4lDY}1N|aM49MZlhb%@Rg1MZEG)C8zmDhcp zilqjM1xX>f1|bd9ZGhJz-i9xr5Okr~!wnLV$U?acTv<&5d!ZaCmdB>}gDjTf97U0= z9Am3Y*-J!YF$IR=Sx7KS<1iMZmequVIT+Q!iL4l-hBza5u+N7~qZ}F|GCri`(MP4= z7e(TQ64^;Y%7;c0qbg=hf#ea1(T?q%SX%#qP>>jsIF2KctQ{rM$O?K;bH&*64au1p zf;Ns4LWo1(h2Bo>qbrzV6rmKC#a@d16fd?PN!lL*=AST9W4|QXHGO6HC5B2>rT^Vh z!IYm?DkN9NS%`pT5i(PhRb^C~<;)n^=w#$B+|1P_qxTIOPq2eGN#HnD0%201q*$VzF94)zj1Xq#vOM&|Jo4yn+l80wOrVBve8v;GkZ(+f>@bK3-Noisc(t z6Q+cvznDjrF*3XnN_7^YU*ZHHqgEx8Eg_2 z7YYc)yd_S^qF#npTL31w@yVd!p;-SRgLnR0iCLfpQkrQ*jU%2Xc63G{*40e1;5tEIv~(~{R4kq=z?nKWQJC08HwcOVX1^dX-i3|DZ-ZeED&+&3I+|rWVGmudLv~HjgxqwS`AAm z!D)|Lpi!>Rg6ShEqUN|cMRNc4&%Y2_Szcws0Ek^U)tQQ@O7>+{fvKG-s-a<1qoO6G z?nE3;YFAaNrIwLz7Mgz2rEn%7X-=o4HXxg6>R!AbcIM4Dgn~GY(tB@WwgMWvvf-1t1X$|B{_W*0 zy{l6h-k{Y~Jcz?Otb=2CXE5xla`mW-&ZnH3n0R7r#$v3A(I;emC&+qdCw}6>m>GOf zYntL0139Q|eQCP(qNM*=B)W8#&e7|dU6IS)Vnn_y>D2@~6lj33N6dVf&F0I>-fWWc ztbRr4D|#3;GOf^(=+6E_7WzX!bi_9tm!$RSz!Ab8?19B<&>rwXpW0g4^1)ekEgv{S zJ*ueN+T#%FjMNobwMr*QPAw9BB+rUo0cjqTc3E1us=iTa%Q7e}fzf6y-q60DXDOwU zlFH+PDc>^4E7I)ax$2tg)-qBkaVf;?z$xg4uIM6y=$5YOj&A9CM?wH&Qfi&l-NoOf zsRPChzP3y4O0MLMNZll$OCX)#UTdfhZpP^As3Pt!@ve#d?q4J-0Um1mOsx zR64JOxgyd1E7B3HSg;iSs%E|guued4;#x=>+D-rdFUQoc%P0)GdJ*Ev?5B94&Jpav z${YY^%pI@YX;cZhKI0g9z7%mfnTo?O#yY zC)yzxhp`yjVLuSn!m3B+Rakh`ZD_As#d!ApcC_@>0segDd+zn6CJO|!65uV>B~1XYZ z_f3o{*9tR>hb?5oHjINj&+|6K^E}IQJ>N4v+w(o=vp)YbKF_Z^paVM0vqrdsJNN`b zD|AA?1VCp4GbqC{EQ2ysv_w<%L}#={Z!|?qv;?_AHk<=Mk2Fb_bU*X+J)?s{6ZAZX zTj~F?!#>Y5L|=48PjpRpv`yo*MQe0LSCK0y14@^)Kbtg34|PhrG)xrqIH>eJEObpc zHB3M?I~4R#&-6vx^i5kdP4hHXQ?yS5^*$I z<+WvBHf2{)ChRp~ceZDLc405JVmCHvJ9c1y4`x$#Wv4c4Yj!3yC1}UCY=<^tk2Y!B zLTMZJW4HEXW42_k_9;OKguwP}7x!l~_Fw0=a_hEWLpEx<^L&Z$EcxXTmC^f^h$5 zw{~wgcXzjUe|L6cLQ;UYc!RfjpEr7^w|cKPdz<%oi#L3?w|vhxeb0A%d-r{hH-waT zefPJ2|2KQKRAR(xP+fKgKu|!hqr)FxQ1)^dt>;9 zoA)WP$z=ogh)=g*FE@&(xQc%^bp!Wwv-bC7w`#X`Ub{GPC%1~{xQ-)tXQMWW&vS$PcsCulOMa1B* zTe|U3#ip$fQLu-!y0`1Ua`RK78N4^A<;?p>Y`apVyXGk&PDyhuePzG1Sv8ycaN9ev ze=EWllTS^&z2Sv(-aAn^`zaCQBsVQF`{P6AFwGI@FOCr{e!S{&aS{KId>)TGz~%}Tyc%Pq{|xcVlWEd7 z^Ejxy-$MP)yL|r~edwHgGdI0z3F&C1qRx-x`^Yd{#F5y0&Pg_8(f3ao9&&ofk2_zz z)8AiOK4n`jd~L#vGwoR};k|0zN zV6&mw^v`b0S^xE;e$b;4d_Zv_GpH0hBrg7=-BPX0U2yhiecU^4L0;HDcBC8w#Jzt5 z2@bq>5Me@v2gljUl*!gOdE%&5w0IF?MvWE4$y=zeU_pKL?tu(>Qe-`q3t1vusn8$F zmNUoIdT8t1#Em<7TI}fYAW4%a^&K3Fk|@c0Dw!$`s`RDPgE3FeY*{l^s)!S@_4JzY z=R&F>i%vy~a^%aWR$GoO$aZ1Pn>odG{d$*LScOQ--gA3)VBdsMnZo4@H=$gJbnW8x zsyE@^zz8Lu70j}!VVQ^#*2Dx+VqM2yAyY=HwDMuKOQrv=Zh4sVJ*=#@o)dQ)x9HIq z#pRR-bn0J!g8dawP0-&=eao4{Eq*e2!sRq=E|zCI_wB~J^ZEwv7kb}*#*YsiK3ySt z&Xv!XRUfxH&gIJ%8R0*&hHIvCF(kVC(o%Mm;rLu89b=%@oy$RUd~a>egB9I!+upDbxi z=Jum3R& zxH6JA3Kv@Kx(7RYs<5T1{AVPyh=L2MmH3jXvjy#Ji5=Z2&Fj0t{sgBhY=A=5)3N%3 z&8ntMJ&mP0Z3&X4NneGvMOvw`)vBWmMGG-sKNU$q28ms$)nhrb^wNYfUG~lJ@P^ z-%(L!m$oOPJZL`pa%-8l{7hUKyCjzsOr-xskvcEEH>YKoOok}-`Ldveu8%aMGX^^8 zSl{E%=>x}H`pQEQO;A`F3)FgRqJ8rE>!6j+dF?FGD)48q%Z8aGoNtto`n9q z%LzrN()8TtR4(;YKhuTv-D`i{HoRs}y!Oaq!d-XM6NQsK5h)HHQP*Fe&v?&~AF^B@ zn|EHhsm+uA(Onj1xJ6gxMV=*cY5u-+sgI)8cZkjptmKu|$C!P;Cwm`$mcfir944&$ zfhv8JdRhC>2fzSAt0f|l2atbOfBq7BPC^c^pj60j+%v(I@LY<+@C`g$hgKBs|Z>7*aIz$W)9q7Z!5GE)G zBnWG)Mnnr55okDE-+HFlLnk(nHBph`6RlRh1Ga}PgxeaDoD`-NF3(Wq`5qbtN25a( z2Tih}p_LN!C+w^-J8fJXOFBdqAIWi!JK~Vqsy7|Q*rJA2dlw)BDM$$^hdARa*BA4a z$2_VHkM)BjS^DTlN>=iZw5y}?s<+86($P<#q*4jl@iZG=FLU=8&+ys@M<}rcksm}* zbJnCsE1Hd7xWtn#lM_0z_!9q1Q3_@NL;1-m>G39G99=S%X*)bR6DFFB<{~)>9UD!j zM*67WfzsH`qkR*c-HX~~K;*b`num^rg5!v4>9E+eMVuZ2<4j1V%`b+^CHGV39{u@G z|NX;2|9e;j4eG?S#86l3grGwK+DfZ1aiSZ#=M^!^FpVaKqaB4P>Mrwr^MMO8Y|%ZPBH#~c|>fe6egvUI7J zy5Kb7htQdddh{cunVx)G>8P$_UY$ZrLb`jXv(l$1=6&@y+wpaM^HnPH` z?Pvv8*KHElth)UNZ++`S*}^HfX$$CV<0Reb?jjYht!VRX$kC&I3ZW5f&3JuSkKTgz zpk+O;R`GVFPN@Z^_jGS^KbYQ>(pRZ3)GAqjrCaw_*N5fpX|F!YFeBnLzvXnVP2)RO z3o8VQVT@ryYUWVmHt)djwJ3%kTveCkFJvB;?tVp_V18w|peLT$UeH(8a2j|Q{C(g> zKQ`n4I#6mV!N>oQiHr~LPM9{-b7ABLg6sLyK*gdLoet^pHY+4@tan|=ywhcuoEH6T#neRUO7BWb4(;nfH;uIxdOCOB3r|Wr zt?Bs4Xk5CDg%w^3lmQ$^T6iPS&2uM(H5*Ps$>A=TJNzF5Nxsu$bYuHBT`)!M+?8Xt#U8o{_ z?uYglvWv;M#^dKHA>LQT34Wx?L^V=(!#m&lmif&0O$mHt`y@psGAVLEaDyK_;X`&x zy4%HaW-^N8k4sHH1*6PUlQ-mMex_!V-s;B<7HGJX(z2&FbvsMAs>QM|;s3I1OPQwS}O#!>#9q)OkfC%^=132_K7J(1^+hdVvMKf9tO0dD=87~Dl zESeO2R>dyb;p#|R4s>Rk>$ITeN~?#~p3YlTkIJIP+^}fW-$O2)Z3HM7DT%db^K01v z^LhV?kABsPTcgq@-Mli_8FVjt{VHbVCI&P2|r-qe$M{} zw!jbk;1AaD5758{3JwDl-~k-q1}FjDz6Z$;FfCwk1w)X=$cO}SZsR~ODe55wd+=-a zDhP)|CFEfoJg}$I%GZiQ2T|$=ugKh%qFz)maTKuyg)jjhu?YVVRB(lUE^*>?Clyb~ z5VZ&+48{|)i4hHv2$d+h1PmdPa0w$I1PCq)2VejcpbE2)7_D#%+rSRI5DaAw0hX`{ zea_%)U<}ld4gY`%Y(N7v00S6c4(l+$awiW3qB*K>^Qr{1d`a@rv^!BD7Yp)%{>>Ue79=V4e2_nQsX&hk$*51RA@FxEq10*0N z@*g{C90;;I=8>xsQXKIyQ0QvwawHs7p%EGZ4_+VwBA^0TKnLFN1VR8NY2f^daS3X& zCXq22`A#SKjsg&%86$ut8E^4`U<|5p4aeXb-%tV+AOc?KKpi6e0YE1yd%EsiTQ#4EofEHCNl>M_SGVU+meEE7epnrJO? zq%C#hcv=oH%F-?|1hdFQ6|7+URNwA_e_D>3sAO!4A1cp%yj}a&BAQ{<@ z{Y0QA4}b%Z01fUh|BBKmkFqqGfCMlA13uvYZompUK`eoSEWwKvV5|S+E{ucrax*aK zVw4CRKXDLwlN5b(g!Cskfnzu^fiA~Q%#c%vlyfJ9({uzgelDmHlyD56PzTVE8vno# zq#y+5jS7iTGdWW|?SKp0vkjE-06sto(l9malMUSv4&{&z4`Ew;?JTNNHzUwE1xGr6 z(_8kZQh;JO5$vW)1;YffKn+5FctS6l^Epkh;vh6aJA?(FsA| z48wB`$#V)Z^9qk~J!5n|;WGs0Q$_8w8r@I>S~CK=kw0NYL9Y|M#ETu-Y)Ph4;})z# zU(q+>k}Bt{F4fWaHUvo{PDwN90-F?(qz^i$gUy&PLX)aQ5On`;q*9K!bmP+OAWF15 zNkAII6aSbX1jO$FT+|r3P)76A3;B))kYNANpc*0bGzaw>cN7D9lnx)EAf5Cd0JI}3 z5}8CrLkMdkRcjqN6iY8~ao%H0qD}}aHB!xSnAGg+_{uG=^kO>al8m&qWYP8{@^*%a zQ%kjZA`%yYhD<9$RaMDPJT-5)Do5D#8QpXm*N_R0)dr++{OptnU^GuKOc24KWcAc!Q8o>A^yf&xWnorkTT@(X)+f3)RW7ef7!~;n zrC7|A(mqc~|EOgoM47U|AwGsbtmi$DMUWk zyKGf!F_%I$cS5qkCg}1>NcZ;ip=^gW1*9PVx;6h<)iz|)vu$ToC;L<~-!KJ+mv}pt z2VyoG-LUn(Gb+dvM@MA^#;epQ4TgD+9R+Vzub!CVoQ+x1~n86hu!WEl8h0Qe=BKT4{g-Lf`~kzy@%@gFV=Ik2f1NpaHmXKQlsrF_(Z{0eY3; zBF-U!qs_!hBpa9kNZ}Q0=>>jwLm60se3zjyV0g!7SRQH^S#Vgoq(&!RrH6kwh+~+% zF6djrqG8L)zcA=nlwo`gco|+8igRay39kQcd4LH}lSK(Yf{XD^H?w!y^F2iX-Xy>U zfFOkH7zZ?90w$n@ebhd*m=zwSi!DNkw@rt;LNB&g6{UD+M`Ia$I1^kUkSk)4yXsvJ z)Q~@v+^*P?nb?t8!G#6+iwE(jCgqSbdBH#@SMj2eAA%JknHna!dBPY3#<+}EbWWF5 zjja$0*tU)BfD5?53*&f>>o|n(IFC!X8OPOdGNOrDp_MD;KY%qaN!dG&4%LiQ_fokh zR{4=#xg(;vR!fPRZRbC(d72Tok30F3w*{O*SDZydaXq4(J+1SQ26efEn;{vRkq$6q znU-(&mO(ZPXMhG`AO^T#3KCkO7n=W}6*>eMAl~Gdj)~cWZQvzgat;%9nK7c7J^3QU zGDczzbc+Q`E2+-3&3d~ec2v2OT^XcR23ScNELQ|ZP8!-I*L%~Mm0h|wh7WMJ3s-&O z^l}1`MX!5v8lT6vn?Jgz8&Zz^`DHs6cR!X{XCMSz00eY^c(*y@U;~y=nYp8fo!O&NScj@OV6k{3@S~^$QBt&dC%E~U5iv-02UY9(9PWBI^IE4f zp|3p@X#wL(cfzhsSz~tiE0#g2^%<@y+o z0K&SM@0JC$;0(;52})oAG@Add-TJLP)HWv&IClb;J&h8pie>P*rHS^Z=X#Sj;t2;Fvu@14qK7S^#Wj_t@q8f4b^~r83Lc#WT%h1aSdYa|0V<#ZGQc%m zlf8l5(=9;A2Y>+@U;;*Xc*)wVo7@c4V85fB9lmnT-P#qboF|ssg7n<68>2#ZtYV8Q zsAIj%@xs>UwTQpsLH72qy9xq9h_1<8x*cP%lQy||;z6o?*SGBieVtxo-OxXrbD}*Y z%C-blJqlu=3@4xf3P809KmigU-30*N1port`_q3szJYN78bIGmz2NfO$(@|lq5K9K z0arI#z-JxWvpfF>Z>YOVnUKX+tfoDFA;iOJ-M1B~qgaVafR{={D&1k*z)+ zNxYr;=!mA=>nX&af^KY009%&jzvIFg_{^}_->lumcyFPWl9_%rkP0FKcOwUaC zzOwUT?JXQbW`5P1;09hG2VwvwLqGx`n%#dM=;M9fNqYrKzhg(c^kqQxS6}s4Kn5US z$b(S=B%uERLVyKw!2eXe>78ES?J%2B$??O>7Hmb%tCJx`y6#n4uZ3Fg+dQP3jBlVX zR9}aghKF@;g802RReKty!(7mdr(Vz8`OjpsK%|9QkNV+hbsKm1PeihHmHQ!1c-%jG z*l7HHnz97t{7WzWn`v_a!d9kCwy?=NDDRv&Y784X#3t_CId=E%=~H#XfrAoF%&0LF zC8WqGDjpmlpum7i0W1YTc==MsmN8>^*j%y2jn18Jws`SUqrw0J5jdzgI?{|%HB8ks zDY3x84N4UeT0MBLpTB!ov(-xF%GSAxRTnxu+Yq9>iu(S!ee3pKJ+fu7p}mXuuG+P9 z`_liNYY{G7eSZ7;bGw!9xLO0n(v>I9Zr+CC_}&xzR&HO&lRIPkEcr9F%7y*b16&ca zTYabtAO4q^?Bd2_$#U+@kaTL*gg2YTtrzrJ-K8r6My>i^@8YjxSDa0-c3I$RD>llw zu_IHZ+?6)jfBl)!@#En2{c(%n)`Jr&hd z#Z~m$KYcBh3M-D;299K%RmN9>gZY(^gunqu;en-D_!eue8J3x1j79fYgdAdZ4~TJ% zD36L8ZrGuRez~ZehY2os4|EUKwIW%`@mQ6NGvZdGjdbBie^wBLRspmwh^i-qKcB`;;)+#8|#dfMs#VdR^5tK zu7d5_B!a&3xELk`30oDh#ja`{c3I+yZkGpCkbwv8z6);+Tg=1+4mQ|egcm!_=SCW7 zDDgp@5xhV!7g|_h#Tj;L$rOQms^V$3Eh5J4SAl{{t+clG#cOd^O*!dsw7&mZ?6HFu zYBG+>`ju_Bmbij3R~lzZSHvEE+$@c>N;Gane7$ZKR4>Pn(J+C|)u#YJu+sW3aP z-T@z^fj52jc_9T3JlH@21{sV$ehzBRr#Ih9sK>q^UTFWZaN$rL{-kN9 zi^_Oyr#tU>jH<^jyvb;8O2@klZ~DSJ(A8r$!7|SM_(wX(WS!Ty2cf3LIP&j{E#-t2CL4vZZ08V5q>L60No`bgnA5T5I0FAdw10ua6j0`ZYA z1Lnh9`Uvm=DX8ZUO#A~H;1|C<6$o*w*&kU}$RG!SD`H&i;?_cVvYt)wb*@9%&)6Xm ziXbRC*y0rz*+Lj}oCt!p;zd7=-^I1T0X3eXu7V`}9x> zQm8@QP>_KNQ~(9AMBme>Oa* zg-u)5N{%CLj)Pj)(_ zr)&HvOoM7qm=@Kj9^>b5{CQQ&_|&Ncg{otI%20EWjXVEm$b%Q!=Lac-U;qO^o4;f! zhFC#0HI38PTj zy2ZBET_hagm`TO8YW3h3TFHiy)z~BZs*ntj!fCKN@#3pAZLHHUl6bZNh2tbg67mAy`SpG5s z{DFZAa-aiQ&wAOswt)*I@BsS77||D-vZ()a)WXaN}%w(r;o8!GiHX6kR-Quw{6Sujx)MrZe*n5@T*95$M@S= z>G(jKY%@?&Re3TO@VvRH@`9c^)vMm~4vv2Ghx6dfX_f#3;xup_y!yhfOhZTED&i5F z0N+Me`uB8z^rN#N0)_6myq}qnKmJi3W*04vN#}8Iiu}Gv9_={gQAxG4J>H26Vcapf zoR+ht=cG=%+7;Dy$!5)Y>dvlymlXflc^h8uogTWXjZLu3zaR!X_@NCNz<>xuAWkUx z01Hl!g4Cm+Zmhp03haz$6EOVpHy~K6JX~#8w zg}ZCvqN{v&0)hq`=jaFDR|Cf7Hy^bQ49uYsI(*?&|N7X5pk-B?ZEhc$HsNo`_z7xx zRrhE9{n_)YNgx6JIKU(*Vb>7Q_^Rv4b+VX^Q_+gDEI<_C|CEcz_N^anPm_Uh*XsU}sY}J|FOZ12_N? z;DG+2gsOIIuciYH$c3s_0um?{6xd^<1t=KUUYv4#1O{{1MRK1ab8}}$Lila`l~8{N zX^zJ-i&Td!2XkpCPleZB@*q(0R$!YHhsz;zZFF5c!iSnBPNkwKhnR@pR18*d1D$9B zB>;+{D2grc0;hKZ3J`7kM*$Qd0yGcX?r1Eg7HjTK0Ap~@iD7k{4!;;=u8p9WpGKqsg2yf8$GSaaupJ9ALrvd?Blu@A(NvV|k zcL4l214KXsOV9>WNtIK%1W-8x5)dXYVF4BZ0RyOiODUE~xd28P04?xRF~o!3M~Q1l zl0cG^IvH*r5^1FJK_zJyaVeLg=5lrENxqSnD!7*%NS8i&mvupXf>}TvA1WG9edY|&NpnRF1 zZkJvMLL>nyX-LB?1!|uP#h6FA0lKK7)(Mr^>7s35nOqP!F+c;Z$OTg{1tIWs`jKZU z>Z2P_nkN512`&ec`URmEh%`oW7SyMGA-HZm$yG#ZBXiLf0y-=?qnF8}8GKoRP9>#v zq#zPnBv`7L zlu*zH1t|h2@c>(Qr(FmYMri_Q=sesOp{p55caf!)wxyY7Q!fZsR28PSiI;hCsTabQ zeF&vq>ZuVbRH2F&qZ%To%4l8sQ;rs<^Hq|Qk)_aily=Ifdb+2SIh9->2Jw*wTtEXe zK&UVZ1&7L`i^`}$3aR|#57Y&e669LCDM$%QX%DJ+)mUUa)*|)57^R{{mD*3(iZvUm zsp|jgR9o?_GlMMCC@9uSJm{J{>t3#2!am5w+n1%8@`h{C0d;6YF_uST|M(( z%`~pIzz(r7Ig?SJ2b!{#)`%6+vMxI-T4hM3LbB$%q!y~5-PWHVIS$$2v*Y4k_aH}& zF|=G^vS@L$7wQ%STc;X}uqUCgQ)p+fNH@2{0^+FyQh)|%zyu)>CyA=D2iT|qU;>Bm zERR&TK0_DI#0tC6A|*>5uBwyDQx6$3K>`#!T$2f<(zjJnwW3<4Im?2_fr3v%96kSH zG`6s~!c(}E0=P1{94k3F%%D2JV;Me@xiyO$Oo|y=Yp`&euu?dS060Eei4!LkTs%64 zT+6YW`&hQqAbh(Ob3w12(YYuoZrjHd#`8O|Wx6zrRF0don2K2tLVO{UB+W~`z)`&8 z$VkI$z05mDeJi{pq`i+zunsUM4>*4#@Bne50RAVt0O*+(P`hchR#}+7>id8|>Zo)p zE8q(#z^fS~qemPUy>mCA<1$7gBM&chx+5yE&WVzXxGXNaz*d31{zakndUGiYi5*K z05Q;NVaLcW;K(4*03lTYDnZGWOvx|-0YS7%j?Br7?8!*S0tC>%m;%R{1IWMIB9HRC z#B)>A`xnkfs+_7qICaH3rNwF)K&i`AxkG}w;HwcJn5tIE8)%lxy0xcq`= zD$KM@BMltLxa_^IwHA$F0*K54`!;diY!fMfYXhJF39u4lVjcw$&bt5B&Fjq0F2Ddl z{HPeR%C`I!dz;F7hsfm65tU}A2BFHSwjd9Pu5zW_}%>nQL+uUyu2XWxcRs%rJmTbu^VE_eyh3b6L zC~eau@Xm4@tz#0e~l-o`UhfLEn zaNRYSYfb@+8_VDd13?BGkk=4rFSh2~wuS+#BmuTa-PK*)FMI+n@Z7d$1C4DHkFC?L z(wZj3Ag=J!gCV@c{6CBplmL{_IG0$c8`c6r5QIhB>b>5*yV34V7mOC)jk{FREZdlx z%lS<~^30r{jdKSg-}LO!m6qNcq709)2#Wv)%1zQHy=>rf0v+z*AFiWpr2s2U;v|09 zFB}3N-r*!*1B?xE;2qCZMc%f6$^^by27XNl4nU|O%bx#sMKI#f0e%kjE!^lmxIvEN z`W>poaXRTG?e8STWEJ#y%1f#w#D;fcJ+pqzWJXi=*a0v5#q3c!yKpa2Zu?9UGE44?oK z@U>wJi=P~JCm_mldkEW*4dY-Lyprl7JnGm$*|i1SUws6rNN}T77~1I^o|gIEDrZ>>iP~T{NC>$OEU2;@UrQx<6WT$pYPYQ z?&{s^$?cdc%)&?EfFsZWBTw=jFk%nT0UTiLE5Gs_5CJ7W@*sZ{J)C(zY?LEF2C0w< z$}qDSPs+cs5Uw!ja%b8&&Qye3BYUaJ4xtRJknos6-0gn2*;^y9uBP(L^iF^AHjdwv zJN4nhoL3XLI?fQvfbUff^+kUc8;{`*umSo@e;Xk8b5HjhFajTt=Wl)jA;1A0Q1@>S z_v*{P0k8pJP~oY-4yxfQt<&_bV9!K9D7^oBB%~XZdy&+}tK|~X^iOZ&N^0PgztNV@ z+voNuMzZ-^PpW2~-$#!^ETZ%;srg!u_BI~o)X?i{Ua%V50wwVGbbt4G|K=eu@^xPV zxvRTIS@;#+3W=|!n_>E_P~+K3>!~97C+qO8e);2=w0LCkv!CnZekj#H)Ys4IqmQ&f zEiT=^XoX(uqszb=>|RQb{)eLeOidV~Zu=DO>%024J}Qa;F(SqZ5(Nz!Ji%eZh7t`M z!hjf2;=~dQ0tDCqX3-*7?EZZO`A^@-dnND5J10)1IA*R=WwLcIu zUd*`Bl|0UK1KUcKs<7X?T*WD7%vc=c>PkWCs~5ie_`93?g6}>Ktk}(-k7mmre`r$j zOY4=qPrknStmvzc8;m{bssl~F?6%WyH2?BTusZ(w8xKIy+9MD?YEoORwE$i#uEU9L z$Uz4ncp$Mv5_O1yHV-{K4kQ1KIAV@0|L#)HrCmmY@Gg14!LBU>e?qXk`}DD|LH#s) za3=7?n+rfp1U!$x>wa8oJMQKZuSg@uLo&(lOk(gJ389oxO6;fvlD@mL{Blb!y;Sm^ z@WLE(x+ry=62nEv(2&CwJp@riAO~fM!(x^HqC6zesG*n%Qy3)OSO1&>tVUfD0 zA6DV)Oe&J<#1Si6YxNY@U8jZ1BwxGSYglc6J=V)){|nGg8EMs29Az@uhzuAOV#pzP z--Xv*fmm>%UVH6LXoUZG_l=j`8_3w`(eo^uw3g^D0%P*&MuPF*(H zTYY3s*t49nK{s78z=)!v1)hdFYN@Ao-~j>%U?6L)vnBum2c`x)>?z3d;2gS^Cq4GdSHAv{d+xacxBJW=t-Om!zKMRjIwTG6 z4)IzQH&E}x9}lwn!^+CsPSp)Bmcgpdyd`HaXV|?%9$JE91GI!tkc~gInw4TJKKd|`0 zX-|H_2L&IelhM;H-F5lrryuo3W1oHf7NG}WAvO+}x#Rxk0 zKA=3NW&kA3{$K(r^CZhX1ni9W5IC@=jAMb+E6M};mOe|^f`S{n47UiUpAr$!$1%}TBOcpG7(%MeB zML9}RmeQ1`EZf-@@d#HaLmAY7j3lp^#c^nldH8|b=IYWsICZB$!y8IG)R?4txX~6Z zgOf6MB2zu7krZ=6Z zJ&6}fee%=)pARLNA%j+z%0N>qSTX_F zzY5l{hmB%l75j))ECa4z9pgR^p@&^aHCb6rCRQ%nmoTO(C7HX`m7JopVxm()8_aBK zYl2$Mf=rLoTnw);(-hJgQ>tfGZEg$r$5{d9wV)Lh#%lYwbne!u{-_5!%)$=lvI8g0 zZSHfUixW(a103UUu5`7F$!v7jyWRyyHe5Mg^19NoObxBISUVHR>OmFCU5cr6t6JTS zb&e6$6BPgL<=M~t)v@jTMo{at$L16n^mP@ zK^`;CWv27T=6vU%9@?#Y4jES3aR^nYpaZ}dpvE@KSvyC1CY{a6XQ`)Dw^U2L_t>BR zC0tQUr^r=FrM~r~O&v$0>Ey|3>EnKzLPBjug!Zd+Q^19!A(7`dS=0Ju z8cTMX1+CjKnnl%)oMEfgxR;j|LlLo1!3eA%rw7NW%FgOAv+pb=V9qDXVxsn}!KA$< z*>}nEritJxj9{T)xJiSNb;~M>?SDh)-2mSup6ac+gJ+Z0F%EdUouzSzi-g|fym37! zL5X4jLlt`H#sKfk@qlBz;}Lhxuc>!qe4AF~Eq{2%fBbToJ9*+Xmyk!T=WhGPo98q3 zImqu_r;B4b<2fff&)XF9pGSEcicm$#V?l{Vg!_;pB+ zYuWN9`^3+Vl#VqW$ArsZ*l{gyq+3VssbczFM6JlyzMa`|C+FOaa)?tDLmR~?#+Of_ zUS)MFx3Ai}YWt4gdZY1EMM-;i(z;z{_TV|SdnXleT z$-5z3A!pm89;60W0Kzr2LpE$XWRaUx`@q$?KNp0-Fw{C#paeZ=gl#~FP#lMC*oJX1#Zx53Q$)p5RK-zb#a1*$ zIt5h-!xvP^GGxhEP=!-KLp`7bRoI1EsL5Ku$y%_5 zoaD)#^hsOTNt^`Ap|pivFv?vhN~GM$q&&)|bjqh}%B3VqTW|$dU?q ztjepz%CEFa!HSNloJyb6$)N1Xp%hBAOv|5S%BUnts07OYr>sl4OiQ9n1+di0unbGD z{7S#v%Bmzwpma-~G)tjW%fn>MoV-h=L`uiBNvNbtyIf14+)JB`%)@-lqg2b*q)gY0OQkeTs=Ugs1Wc?<1%s)De)2?=bU{pn!7>Df z;{yhlZDGWhz{MHPVM|F?9@tDhz{Ho&&*^-t_)A| z1kb+GP3*Kzzrs%TY)|WiPxzEi>GaOq9IUJq%dXr@-89e449xgcPXQg!?W9k>nok6E zi326jt{g1Q6i){QPyX~u>da0CRZk2}Py*%9N?Fhw4z*CRd{BqvpMF{dJkWy_JB3)# M#4=P#Z3qYeJIzK9#{d8T diff --git a/docs/_static/figure/logo.svg b/docs/_static/figure/logo.svg deleted file mode 100644 index e781d9c8..00000000 --- a/docs/_static/figure/logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/_static/figure/reme_logo_old.png b/docs/_static/figure/reme_logo_old.png deleted file mode 100644 index 944f889bc1917cbca03ab82c188ac79dc878a1f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 270245 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%0D!>1a<^DkeZDFM1Uto&?;V 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 KMNUMnLSTYeybO&1 diff --git a/docs/_static/figure/reme_structure.jpg b/docs/_static/figure/reme_structure.jpg deleted file mode 100644 index d1c0b5afda24fcb9d26374bdc41bc67c15fc43e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 451979 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 +qP)U06+ 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

yMSTD$khsjdks%m6po@TC+j21plt` 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

6U*qC*gUB8yfw$ppB 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π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 z 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�v}@r^*#l}Qk& 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 LdqEN5U*G?KK~!|N diff --git a/docs/_static/figure/reme_usage.jpg b/docs/_static/figure/reme_usage.jpg deleted file mode 100644 index f4b9c4423a9bcb86cbd0405200141d631a388839..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 343463 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%0Du{ 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

ycdt^DVf!~V`marX?COui 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 bl7T|6nw!H$55AYKPA|NXV4dxZTYC3DFVh&O diff --git a/docs/_static/figure/working_memory_intro.png b/docs/_static/figure/working_memory_intro.png deleted file mode 100644 index bf0e1993f634a6e1e3380837407f4bdf04d896b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 763910 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

b7QCXlcX{!*$28OxW%PpC?1!+j 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�p`M^74M~0Lbj;@KG<*V zV8;_vJilUIVx(dS&VSf&Wrp%49T1$G(1|iTegBB-kV&VXf1~;Pd;RLi)CgElpsP3I z45O)l?{i2m!pX8)EN^z(8wEeXE7WNlv*>&e^D1~tmjRp4sP8G;3s{&caz#>0p)M}M zD{U3lrU{Ww8t$nTnTeA58DiUF@mgi9-GcvL2{>cEPtE#zcZZ~Eh^WYDVm@J+Doir> zsY$F3;_Ke`9KFK`lDXIJjeiSLm=FHpw98-$UU!kNSVdYIwkH*zdF8#=K@qh`4K4NC zZGst6P7W)+j*}^V-j^x=-t+H(Jf)DY(Qr4(MwXlLwP!3Jg&wP&cz-Inem?c`g%8ph z^LztAVUu$2yrhte(}rQM7O*A!k8<;WpIs`<|L*)ZzY80Wo$PHceLA!835$h+cGCYS z0c%#9AX!U#{-UD~D^LCBT&HP`t;4B5h*t%5ABP(?Ziu^^PEWHw>5&vOD7Yp*vp4g? z=G`f=z;>e+{G#A%aAfM4hBZ~;8?E!LmYYL*mS4rAx^hbi6_NFL$BW((Z&&x{UItgi z0qpoKdK>pKR5VaGrIA*xg34g>2UyLZof3YrPz<6qKhxm(7+%d^Y{^Qt422dS&EY`- z2t!BKxy+7rDKxD!SqFYgEMna}Mp1?dH#LomNGS^yne{&ze?YhVkB2E|nW1iQsnOUx zOdiM#!Ck;36&T7;V>QLeSjEQ(;P@80C$GbNlHe}1_MSAT1`>k>>PA1ms1iNp4CtR! zVA}*O*``{!gWdTJ8e0r+OWQJ-t2_|I0A|Zf)QZ&o=5{z^eRpv0r`xl<7Btbxe$jUWhzY}r0v@^$+Nh5#iC-ta)Mz}QXj%)X15YZVQ zW*_Y(QO4^mNO;y-sD#HgiRCu&ZOK4GJMINnA@W48q1yIDI@8fK#PzpC73i2!qI0AF z+Se<{5E)=Jj>~H?e2Cb_rrCAc-1311-tmr2JM08_6+;{V{k*E3U=4UkI@!oDd;C~g z%BKB)KkA+AnAk_xCuB#o+CQmC&1Pr9NFVaIbyta}ZRFMK zrUzYDWavD0@-h%ty*2FIhKj2tUQCl2VSgrr_N;{2h1~t0EzPsFCpWIbeNpYUI(;H< zPcJ1)LOvx)zYgDopW48$-~6TK5Kco;5><$t{RDZ-)>3#qEdg%)-m7Xstpic{JE1Za zd$62hmdV-ieU-U0uJh)`|Hwoow{I#9R=)=EdPsZvrYrj2BgpGjit4A5*0cvi8*^q~ zX(!%CJk8QMLv}^Z!?`1T@n#VcJ zsb>sEaq3#mg>7sq!T1Kn4VQo4kz6HhImQ!Q+=2JjKh9$+bU+)|uEx!V~I-%x?f}PG!{K5{#F+y83k~ z8#)8{FPCObEO~%B*g`~Pn8H1(At^Md`H^M^OfnyaIx-~Ddau-d(A64uT^HkHU9T4{VViF z{~{99juH~p`7LqvAcBDy!WC(%2jzCo6P2N05VR z8aXL8Nig6=5UbImnH`lqD>zhfEB1>gC*C6Yjx|sUd~x4`^`sbgW+ANg5}&nmrw)$^ z7;{bS%gRsSDYOm5bYpeQmm$L|uC!lYVc^8w8gofu z|MyHvbgTLr<+>=8a9x~5SQ$_D(2X-ww~$!2T113!EVtT?Y`ySuq9!6+NTJYLfRs6 z5A%|#pR$8#qMbInyVg3{0*YFY+?>6`uZP1$>;ag8N6ReS+S<&YP=!+x`ZKgyVpP)Q zoW-|mLB4jtr;cn{!@pHY!5i@RbszRjcTu1zG==;~dXKNj4qz6TY%6@Q@&N&6Rns8v z=FpbD43>&R_-I7Z?G?;&LqX*EIU!^D`U-%ScVu-JA_wp3%@yLx{~ejw?e2|zPF6pa z5s&fYFLl`sJOmNyzi4XA;2o3I_0<~aTsz!km8zz6tWPY*v$_^}5=vUUnm@C{<>S<^8t& zCY5eWlml;2pN=^yto!ht{qgTey|ZEYp2w#rTS+DPH4QbsnerC6?bPtVBhEtRX44|( z`de>&7uBDpz3}pG%f7QcxnCR(JE$>|RU|X96>FR-yQ8fg_@%laaT)xaQ+D_@16PMX z&)zr*fzAvSBWUwWOsHXBs9&5e?jml=m)d-dtEDMu0!7=()DLAL<~P?z{5qgphe<8N zezW<_lXW@RS>smh;56<_b;km=9Ki!eg$@6&sG?-0RU!i#Nvx(ov5{X!(j*%ntdD8w zShv-!&3j0h$>V~PT2T`csKU?3s}OKJ%}$BGYn9yfvlAgFi=H3q9^3s46T{TRH-xJ- z48nIuk}5H-rz>Yq6I5cz8VdsJSX@QNz*{#tR^Q~d=mo*BuXFT7M zptFYrsau8|biRVOW%dej!6Us^5Fbw_q|SfNbS{DVWL-`xuU{Rhwz6YqxvN+C{(8g( zuy3Rm+@2ZyMN_!xhfL%I=wSgT!_VNOf0NW|$VNj-i5aTz7k=+c{#4$Dp%u4#t3ZHEWr)_-X zt?NCi>uvWNZyz2cIUU41c>#6^!l#vfQt4S*QDS0SeeudBXeBLPs z@;Zb^oF<+vHm6W11DcVc06E*?0?y44GfHWh9$BekUK;}3rnz1Rx zhcAlKPDp7dwT(wI5pVDAJiWWKdG~Bn_h7I5vm4HowNaqSckBz$Fd?x^_gQL(1? zKe!xt#H6WcfgKnz|Jn&>1;swWWd8K!2_G6t|K8J`0|nf?v&a5 zRcT)RF9yvM&V=Z4(a#l%kdqy~&(~ULhB$usjq1T|MkV#sKwGG=;}u2DNR5<3@)4)2 zPt>3Pk>YkF9v~xJKO_mg=xrDvwt63!GQfR^8qPX=}xi~wKmDnhWMn_eVOI? z__1T-d};F#CgE`W0YdN9A?NkT%catFJ-tp*yz=M7!HYJ4y&x*(@_bf1P@rcpux)}Z zQwoZ0%#7s4OwL%uP448^T<+8g+~Z2>7;Ffs+S1W#ZO7WBef!Fs=5pfz%#&%lQ1ODO zWi{^FD|=`iEPpa64;XR@A2$mh1Mx1_Y}~bP+`Zknd0Te%YJY>=af|%%g8$kA`_X9o z@{WDOy#3^H&(yJWuNPrE?aUV~x9-(DcwYE2JLTVfo2Qa{Qzg|)QvZa_&~1INMVKUB z6<&K*x1P3^Q$8#`7tZl|(k|hPw8*pe7MQaP+_Dv2lL^{azFfGHT-5KPynHYex%(pG za8^g(Dx=}BMF2Ftpspf2zLIv_nRdLRdFIv#%OCS!4EA4K2smAkpNGq-R5Z*|8RVuJ zb}rcr<2W`*z5ctZ{&T7{2L)4y1x|-KPKVp_XWM3{zs+_Ha)mz+pD*IP+x8!~%04w4bItg5VdlrIpdEU74&w9cr&h}yP8<5|k14vYQp*i;4T$NPzD3SG z={1A*Iu-Bu`#FsB=k@D2xXWbV>fG zRNm)oFCd_P0<(AMzdGW-8YJwSUb^_f#O#b}b_U#OPOmqyRH^UT4&Fv?TR(uR-*|S^ z*vRg1GUfI7WJ&XEG3s^^pOOLxr)4)S!%hisy)V+LJoJ0> z4m}BWTY6j^S(6kB3ucOeYk*NbA99whZOlifs(sv*H5lK+~2yQY%|NkwA_gFq<2YwY$)I=%hB#*EIW&-Z)HeN zC$uSA zV)X60C>BEeMY)ATl&$;wx@J^eZv;g&J{7TaQ)c=6>EUq$GIcZDX3=&8)kblbCw>POOc-9;Ps!y5PFfp3EMR(908CD#+?AS+oFJ1()R!JVY% zDZXPv>PH#h!|L!cN#n|T&Bm5&7&e4TwCz!iVND(CK3&^@wJr|xUw8lKkMa_)j9b+} z3-Jq(taB1ZAo&^}nQ{_3QpY-`3$cU4>M0Q1mpk@JoyK$j@TN%|*xLMN?Y2V|x4>f6 zN16o7Dg`WeW&e9+!eNBl9sXoR%czM57^7Xw##8_KR6)b!9j08xO68LR6^6F5oTnE4 zf9GE{x@h;AB~A4e@8xJ@i0%4u@u_TzbTH5j%D;9g`Gqx)jPPSN~EDUHGB@sx&Tn>D|I3zD0#0>bbgJUr$Xx^3j0$ zndaG!=GemJfQ`%cRRO^so|pYT0s1SKt9I1F6dv_YIJbkG_S~H?Q?G`Sza3s|`;&4b zMY2imBPJdvT}8)TJ`D>#%Wg6W2kqYfo({4%fcjd+&nPMl*)AIXluRKG@!8>qws(>@ zt9NKez1>d-IjK$El3KlAD?(F(BTKCgKPviy+OV_7$4`hGh3hl?7ua~MWpUYMP8{dxo?r<%ylk;!mzY;`s?QDFSN(xL6F&g z(DAO2-&VJ!pRb7}>E`2&ch~*aKdcNK6V{KRK88_r{hyyZ{Y?5Me&BA!7){go@-+^z zY*RkeISLKL4`BdxGh0`)PRxh|TqapYgBA&~4hGzu$to=NK0b|PaglhL3>PBYsU0(N zh>xLuX)(5>*YxA8sMijB)^4+sI-wQI1Q9Ont2L9(4Eb(kZE33atah-|KqVUuF?`NR zoPL3x8?;X@MkCOXnssn@DX=wydf0hxT1TD%JT4** z3S1t?+NR0RVspzI;Q?W_=Vl7`AuiX=RE>NvUhnEkWJt>3|DI3$0QJhQ@Ktv(eL3CW zKFjF{jVg>6I1u^}f&!&N%IRvkkyf}TphE-V`q}9^CBL>|jnV*3>lx8^mhLh`Y*siO zRe0CkS5hy446D|k?mC?j{}0~2JRa({Z~JPyl!{amS&~*$w#gn!H7eqgeH%q6jBU&e z#*z>fBMDiC3fX6}jb#|w_mMDz!C)B6jNRCm_vgBw`?;_8eg1j=djB0h=lMJL?{XZ+ zS2!U|zL8DJs)v4Ntg0(4x2pP)CihqgI z)9a{v<3K(iqlf1J;B@iOvZjm48~2>i>HDKF9ldJA)XN}GsQp(|l?R0HS#eua1>j_7 zMCXS;QbiPeyq8-Wqw=qXrm2XelzwK6bSM2vyG$+pdM>F0e(#sN-33;!6WaISbY~=` zq?|WPIq=0JzOVjPUp!p^C6-714FwP9V6h(Kx!!!mEKd}jHnsK@W1jg#9;ck>)V z#5TT)ZNylw$82nP`ysdYj?3~syzB0YYd~U&cVfVLT!42EK$`yLaEl?xc*3yJzEi-t z1b1DAxOyg!D5?I(6_4!ZnLLwak!(!TYV>w!ySvR~i*Wl7%f(Z=4T9_4N*mrNpXJzu zPWXuQl5W~&VncB?98dgn{Dl(8Ov`C17pGzD{s*z6XVw4#CWYQP2Vo~-ZVq1^6{DP7bk^KZR0+Ad~&CGH2+W=a>2UJ9(NnHy=7i`Y4k)& zOEaHir+!(2C3W>keYfq!?Z(@oa6~R2Eq6DqqTyl{Gcu-N>v`O<%D%+Pc=P4oaipTp z%)@*;6xVG^26JNgd!qmm#;Omb0S$hKFE@bAHOw?u&U16)PtvSi$)N@~Ak+@JG^7MIxBjxEooE5Pml;5y!|SXG+^xx8+8napAh*^8C;c8k}5(z89! z3Z6-ZT7?N@q&eFEl{AaB#jgHE&9c69PUkUSj{2c2g)XU-;(XX;<$JlV(o~!VRvqy< zPQgimPOaY?w}kQ2p*nBB_z)s)u=zs*57X{b5V;auu*N+{dcF><&6UAO}Y1Iqb7rt4a3GWx_-3rk5OTj4c>l(`RoHd zXSG!~pUQi@=yDp!ai=&Z`qFUG-pvo?r~lFbKcOq^je)ctA0q$bz(8Co`yWH#xS_Hd zGM7(2q~#CXcL2xgH@xlDP1#8{w6HnQt*KX#|DxT!N>-jE6?9R&9T}crX(Uxc0sg23B`2C1;qNeDksI+MV30L~22NWGo1$aq{ z?oey{5nLJ3(ALoBZQ6_}fHx6ry~?=fdovr%cpKhG`he1Au{HeG) zdxk#Zu!&uY_%rfOa&1ufGqJ|IU4dQUTHByT!XJY9cK8GC?xMy5p6F>bV5m_gEv!2^ zSt%P?RjcT#4BoY)-L=wr8!J+I3H8zt67SYe-dxvQ>5$rgKp_Bit@*sI%dV5ulio$W zDh&n&hzqi#Z%&rLq?LWXeZRZ)ekye9D>Au$!%{orwgaEkHT#>@TT%DLF64afk)g|f za7}_rM(d%CDz{!@OtuAI#-!otzZ1RqbLPah1I5<%jqG_X?5DtG2^8r_!5X^$F})D$ z%s1BaEA_VD4r>TKCvTRqXZfeQ-ipx=bEf!C-;Goy7|6JYc!YtncqGU!>LB0#q?sljJ*JU$MJ@o!iCsVwSz?dZV1$fz2E;yt zVM=Mf%E zUPv(-glK!V(*0E^z5$;8eI_^dK|e&!MA89f)letW${y?06q^4%T!8`=wH{>hr-bke zv!)m9?U5b;s>g3LEOPB|V8X^trV(tTwV%G~N6#?W_7e};1;Ra{JAa_;yz#3((&If@ zhkbse&n^8np>D$TK`(mfux?3RSYHN4Qs_9zKOBu31Z0D=Gi!lwhuiwKUZ+er@+|$f zhvBM0G0k(I1nbp3y{4mI;t|fk+fHMdu0$(2>54SUp{M_f&|#E4=~7s_tSOz-Zkd%- zoUWewxpfa;q^b;1;7L)1dA0qy_98UPyuPfczNx>bNePre&0l^JIt0kpJ&7kMTLPF2 z7#bVp#g(=(4fnpqev2-J`eO+&l0B3&roMpSoK z{)F0`cfg(x$GbbvyCr&zy(tsRV%J~M#bO?^5nQr zdP2vC51Wa(9WO=<@C5|xkdE<{NqJLmqu*QW^XLz`OqzK@L>#yl?jMZ#Wl<)XJhb2L z6J{rEd6P7^slF87(OvQF?%Jv3`QW`s;_g7lw&ha#m$|fnh4hRuKN|~$bl-L1cUqmMl4{krcx1>r^OJ;>pxYb*MJCKl8g)S(hQy0&N z>lRN*Dk?Mw?&=tHtz-|ao+!J<9+a- zhv04eSMSeF#h(vX*@%!4U*t|}{aPnzcTN0Aa)$iEyPl0>C0M1PX2rjUBi%E3N!M-^ z7!Cx62H~YFXTnBe9t_E5Un1jnL7Fvw%<1E;pK&o zH||0o`)x>s%X69$vYaX2>;Ao=exG-EQj>j~bLM6?-r?8YN$-qGBV+dxLw>)blhdj! z(-c)BZtW~YQd8`f1uWO*l&7iUImh6>fOw1c1(#r72{h#q>ds|dyMCVLM`yMB!iyCb zSdMbq{j?3M;<~&KJ>NYp0HHfWi7PN<5P*;TZGQ$0h*|k$QDjw<`~b;eLZ4v&O2Nn6 z=p@7MB?hzK!T~la_#IR$f3aI!(_a#G82s^WQcF?0L&&{MdsSQ2t#UvQ?Ey1g9o2Gm z)VRsfK$#CX`Ho|0*q$dDOZMA;H$L$1#>*u7YjaeX;+CNkHzT+iIkzUxo_EO4jm`0| z)VsM@f2|m__T49))*NQ(=IKb5sY|SXx$GI%tX`ZqmndeNMS2OjrOJu~N=Nm(&E7}De)r05l-`8-XXbp<@rVk(uBu6cpy zVaUgFnM`K^zJA&eW-1d$UbY`MRsgR9W6RdhC@d4O&k$PB4fTb~Nh%xKUaB)_R}l#~ zr)PJ;kR(O!ErJVBd-VJrRixw5?Ab?`k{#otwlnslHL-?Y;uK;cPJOMMnfZ*Fp4M?S zcCiCTryPc-3n5ez(a(_Cd~=>nidRxU-jz4jyw#K2wNSEPcv*9tHCk@vINB)|i`*CK zAKvyX1(Lkbb7(2?lyUBpt8)Q6jRBwWh_hiL83v6{@AsX>UCT5WjB6!*fhE~LpoX57 zjV|qZBF?9kzQ5;%L7x&|KfVW4usHpzXW@W!-@Alfn>Ej4&P$O;`_fBTH#=mgC*rr` zzJk(w0Bbe09%|I zYydbelI;APp8KrHCY5C3UwRmdVHuv)a z|LFnA#2%&*{0uUY^Fi+xu<_+fR%_T+>1Rr>N=Ul2V$TBn~=LlbQ%BEcMrciK5ff6F&ruIXZ zidIF92}E@i>BNLxF(F6PeX=+VEL6hdBm*Ea-Wv2NEXhf_Q}n(s6=J~dD@g+EKZVPXbbgG1^hVY*;Xj7trcr8B^Q4Q#!QdfGeHx50bKi@Ubtrsb38fc8CGacYtxpFF>^o$g{8J#(Y2!ithYKq@{6+i$Peyu zDYV!u#c}xwo%^1to=;XZ=fpEu1K=J&`gHNOaBHjU;O|0(e+2^EZK&j_D^*<=Q?{G` z?lT(wRd=?vrLDC;+=8x?!*?Y`m|><2T;fWs66~hc%?Vz+?nE@?4ThezwC+k3*U-QH|f0M=vbhEO`7!no;|Bq%e*->`F%grVI*$zCLFG+|ngY_qHHJ}a& zm;%MG`&>>@A>X~ovUC#EuMMv45E8J#{I00{}k#s~g|# zv*JKMnsqu%`B089fC%qkU))Ubljs^;X~}u2iyNCySoG2F;_fcl&qs-d0(}3l9}3KL z|BQx;@OD30i5S5cN1%Sk-)mYTFoFn^rs26(w7%Fm0ebMn;K>h~A(MtUm6+`hzBM_L zs^D+4;5qkyuvYd0SfznHxd+~4B#Hlgm?3a$0ZkrJ{!ff;50wufG`#?X=C)zaI3s^a zGfvOTotX-gn}E=mUYt|%>K!2BexqQ~;weLjdKcnMj#1cc@jr`&R;RKg0Zrl8l_p@3 zLR|Cnq3E3!KtuP*#4Veoaj-T#46M3&*H24!b453+*>p6^^>R$}R~S$mBb@=3RBj_X ziq!8sZx~Ai5XZzn0sJE`!r4Kst|X@Y<`rw+aJ%D#G6T7nK#Uro6#GqIBwPJzeH3O8 zL0GqUX}k=#&?tP~-u41-0*&KwK$1jFuYmi9hOWsAYTx1*#0&S^e@rn`QBVC?>z8k? zm9G&myUu(L8N~%2hEeW{(9C!jV0Pg45ms7j6VyGUO;a@|eGv(rHn`$G`xH(JL7d{&1QSi{CE2##y z$cBWDtNn%mc(VwgYZ(rc!c<$f(-I0MWuo)P3?Y2?NN$h!S%2#?7j|;Y7A`7|7$4^V zd8vgqKuZta)M0f3kjdkIc}_f9h2|}IA6pk62c5+#^}I-QWg?yBN;p6qxGj9eXB;u* zW% ziE`Y}@DF}D%e<*jmP%k8sSTs1OYSOB{zK&Yo2g%0c;H-ZS8d^NYWDy0m(D6ffsbd;xg#kgEfGOI~o>wT9^|Jfm$i^b4t z^uRjp4W{xBtGiRbw26n$H6UR;Y{wsQf-f@)DjTvMCUIX^?I}=b_^6jCJnc%$jdiRu z5MQk~^?^%cg%;X$gUimw05W3PvXY<@Meyu1WZ$Y&fiC4XF$aM47+x?eR798t_`LO0 zDD+%G!f5ha8Y|=j&V)iq+QDyEFWj%jU3?Jw<=X{<^U zI+g2EpP~%|I)+kJY~(Af8aXI@R9U4r7jJ12bpz*6 zz{{)F*&K9T)_%-;MWOOEoqO`t*%I?ZE|Lio^)y5{3Z2Fa_w+o2`so!pv)306Zuo4z zFV&%h1Y15e^#0guXB5JZ<++Xdkk5cXjG|iG^pQ$xCXqATYUs%6!z#ERtn27@u|Bd~ zL7bBXZr|Khw8@(zWWKu69!t0ht5})hOJkY_^dXCl!9)BT<-$&`)~yfPy*ga#%7lAn z^!0L?nNa1SWOp&<)y#KD^l53f|pB8 zU;~c0vK&souoDRe&#iJMn&$}4ar;?eic9czY4#Nkildg8>6OeY#&AQtuOMcxm;Y%If8=d*iq8~Ou_4>)mAcydKdRevCdy*$6nNg~F)#?0jZ z{oB)-pa1$Nj02ZcaQsZ2bD&W(J224mT!Q-vWM?V)sH?0uP`WfeGcmsU1lJ%i^?z2|Aey{sdERRBWy2Yq%EZQVFA4|L(q z;+KiudE3TerQby!Y^-Bb+kb6BXl3mEy?t2DRUZFDUze+T6D`1Mv_bhCUm;qTdFCifyQk)4G7=OUFQTs!QF zJIiyARZ%I3aHSTR1 z#uQgVN5*w=EC1YGZVT*JgcAFsPiNx;SzZ6!b${oimI)W~~kY!r!yUK;Bq~s6w3~+s>$co|D?NuoHy{Rc3QLmi{$Hg9F&Nqw@ z|D-ZEB2={-u{ku1h_{uvg8nw*pjP89DXCsKXC|oD9jaBf^Y89H8_yD)CR?nk@u`(p ziLU1x@~v(l@zrg(E*4wGScbkGXbZ$zQSz(%z9ZTiok;N*#Oakw>vX&nPm9eG);C^U z3e`82l(cype|tc2BYtip(3*-Yb6qBgX}7N)>=(-SB9og~OOD-_k}=C0*7J+4 z^?7)Hkc-jFL{OJW--F)mh+p>UVXAqSx-4mIn?ejdN7+EO(rXs^b_U z#CR5;%3AICTKL(v*w0Og%(_a|c=EV9(iQNU7EZ?Thi z$e%Ga85e46yqsNyAy1~{8WmR0nBVEEfm0mHpcBD81Bec;Ah-=ZhXTpzpa16>>|kZmGH_2n;t>s|0m zuOn;Tf@3&S>LN|0ON7-O*Uximo0ZDHTYQV{*{#VkV!t9Jcz^=J5Qq+=*JS5cWclw< zznd#QmcS+Y-xucI4XT6@Y3g2GS*=ulJ-0rL_IQqKH5Ey0hTWv<2Tk1m+|api3Vz;8 z1n;pPx%1-`{;x#q5d1$bhL_G;UmRnB5%ms-}RaW#n{w(Cf+} zs;3%LZ$-hCed`fL+>UYlMp!)Iz3_p{VKb|K!-KmVoT8@)p*+{^1X1wq539Ql$T~CU z#B~gBQjA7?V8P6I@z04DJDGnndWF4juxDa=of0b`KO#1Z2~@L{{JbM{eXodRM76ux zdG&99j3NR}>22f^0ql4MrQ~t$<{PTkgdAq3qE%&n{>q9aE{#T+$_Gp|LTb4` zo}NEj`=C+&Gq_+-jK);OvjXRgPRM6hD=BC#&+PR^bf|OkE%VR0L8C19V>@G35nqRW zZu@#_Sn&$865mpN(baKF=5&R8;p)xKvT~|-93m_v=(3hp9}Qmi(ZwR8(Y#NGhDlgf zbfxUG)zee_)3<8lUKuY~#O8qU@sQ7buowJB-1aJX>XSo>mfV%Ek`L8^ioe4-rYw~7 zB{TYA1#UG3FVX5HHyDxMgNdxY{@7;elW7Y5&8b^_z5M(Vfn6Q7Oy1y#`LBhWGjfXtNLd4PQel(H@YEfP#(XtftuVwVa19EIev4RvR)JTppP!_$ zvdh26OW+sAH}VM17F|wPxbdJl)@#PUW=D^zcnZJ1@>+VLm;|#?e!ZFsN8p#FSSOBh zJ;q=PN+vum4H9%Cy->RH|JDL1E{G?H^l;GI7=#!^1y`LEHM7&JK=-!d^~Jx=)IZ*k zul&u`6<-IXsYyT?tsDzjAK^Q7HXK)hKYECIU^I1e%4gV=u2aEmw1_;Su{vOxm=bXj zQW=zb%9R~_+Fq60`|LIIV+K{_Cj3{p7K{nV}9Lai({)hj|Ce)BgQDC=H1yt;IGtN8ayKeGd77c3fLQ24}h< zlj(BKn-97bcrU7V_e%e4eoX5%d!+SyuqL4ZrmgH)r%drtp_?W7ed^?>BIEVC z<*GnG=e+Rybg93?gnrgdN;-VbremO2T;fiVD*38NQBt1$oHCAjGj%J9I9$=+F)uv%}52G<}Qp zt)~u8l@>A%i5DN8go24EWx&=F95L-vfU-PE%5U3iK?SQ}x=?KUdFuMxK|vn)r%F#r zg$H_Sci#zDEUE5K0sL7bZnvhQd_g!-V7sD3!6l((+miHMGab9$5cFflMjvF=17JeT81B6h|^^veKt70yfDqGQ^Ca+;Tho{PN8U4H%v1P!U@!}WBdv<)>B zHCTAg{nJuH(Bn(EcvCbCHRpj7rGabm3t$zLDPK6I7^n`bSYE(KvvMfn)>1ZEGiYKq zO%lA-J6RFJJNIauKX|#!uM!sQjgOhOxlvqS4)nBIouwAdEm{Wu7_hp4N+>`hiA-}?mzGRXyvzkH}J7l<|`X_fUZyB;;r#J^~j+wGxJ--@_QL@TS}R|UVHd9 zea@e8#d@lLSA^;Qry0G-5TO*Pt>{PjyWc_IEk_seP*` zk08M$ti$Oe6ZST#uA6Rk%emAa!gkV*0MAW)E!fPy~rDGJC0_otwHt#|I? zP6(Cq3$wC+DhrjsbgAxVw95WJ44oiX+SA5P5V@1bDt#krSI0R!M~Ejo5rNM4W>|o< zRD&|?a3R4a5SMU$z6|n<0hLtKC9B#dg(})}_grOM7pE>+G*NMMYOcLd*sJ97yPTqL z3L}ZD3va#GDif6)l9bK~wO!b|Keg{}jv{zql}%1-nmEkA@54PO4cL)3TvAX2`sfqm ziT_yGrIUcEzeU;Qpqfc0>TjKT`ke0)~V;{M6 zFnqypom5=*dplw{Fq87L4T_IKPoQ&>uWd5#e)lcm(f3jn+e(6GBsgrDU>6qaNYnCo zuO278$`OQ%aE%F_d2VF0H>ZXeKG9l;_aCjsR#@`uV~XR3REU+W-p|a-Xc8ghdl5cA z@_18J%S^jU)fP$-5ra*K6mdGX&!l{{H?|Cl zUh}-{=r5ATOVNvd5P zS4J|qgs07)ZB%X6kk>_>G(~5@PZN^_L_k2;<5zs0C#!Zrm{#Nm2Z!RNmq52V12U{a4F80VzJYPgV1~ZvPP6`s=;_ zF=uf8l^vw{PjZQ--lo#}^PeN$e}r%>gwVXG^SK9@- zMA+jBt9E^3BwJm6E_KdQf=HEVaS72cWrMLB zw&0OSL>)>PGEj`n9Cy9xcNyG7BdffJ`&>y@@>}q%IJh$J)s+)56orC5uSQ>Kej$7= zNrKxRiRW(_RZ-D+Ibm;mQ|yo&uDPbP(*bI`ut+1hp`a|EbQ=FI;cUDQz&qSsc0! zj+0+7eWn5P zR5oVM^=>a=vI}Z5Pd578Xw6q^*>XW!`BysE3ib?#+am|c+HR7B$FoJG5L9Z z#PV!!dve?oq9B|SB$NQ{AgmA?Um?7*0^2Zg%PD^VOJ;J=D-1Lw0!C%Og3LvJznX=G=0l$pwf&9t1X z^>QeGiG3;J>@Wv~=TZulC<*rE=8RO+d9v`7g~M*9oxG=tL(v%qj*F(UqVgW3NEdEY zVaU;2Dn(g|FVShPJT1no9wGN!stpfvRcLC(!;q>tnw@+13^>B8htRG#Jk`Tk`IrTLXOlmsL<(#2Avbc$LXAc9>b>wSWo*P5RKwmhhPV2HQe{Sg=Ec-o zT6@ZOaIST2&of@>I90qCI4OkeK%Y3-h_ne-9yteC3e`~j{Ipux?GJq-!m;o%aO42p zGoIk{|M+iCTvCoAO5d}jQ5^FO())f;DdoR!R{>2fr1M`QbGclKdHBJCNmOE5gVy0q zH{sf>O2svA?$@V-g<02%RE#0t-oyi0i-&q1b5Ir*1V; z?Dw25OPVR1n)3~0a1`l7FJzGSJnl8(1fju#vmc%u$o(+->dRkGj{$yA9b5lA`L}W= z$LRWm)yg;JmT{k?LDn<@#O{j#ej!g@$5qRt&H*G8iaQqDRfwu{B!@+mILHpAu8gcY z5-*2ElI=p0J3%7%5q1*2l>Ajw_nc?MTF8cZ8yjk3_Z?<()Fq8dU?UntX_e2hje+_1`%~-(v#BEGr_jvyl zwnxDr$48P7Zgxf^#2_D8PuMSfcyl<`;|zoBglZy%VmD z2{(q3ddgv!3Cicma-*h={O0@Yz*wi#cK-N-cto3q@qlBmnk~K%y!pr~Mjl2qcbF2U zDle*}u8Szj0cq#W9Pj&;S0J%VQVyQ6q%&w(Et}*^aqxBHv;&faoW9Oazto z^EIkiRY_Q7zh|atl&*ROG9UjR+Y%GNWp6Ox+{Somuh~!|9Dg!0KqP1MA2#!0)KgL zSoF*Bot5fM-E+Qk=igXgu=^69@$8JUUUY7&R78hqbsC0GI-0)#<5pV)<)VErBUm%0jU33rKDPaG1v zmEw3$^1QESfyWDF%`eGoAe20qNOhXh`G867 z0^()_P$Lq$+F16ZbBeIZwzU74&Z;db$eC6Oqp~*8kPjH5=*>I1a|nb8^$jY1PH2D& zPgU|Y0iH)(os)ZRq0$*zSgIv&X*{Nw@<{R5~J7HI9K8f1Hu{t+oM{<(Duj9Cc)l1=hgc2J3dDnEsiDuD- z$+0_UCOl5JK^^v|8srzwHxvDO|4fWJ@cQTV_F*+?c-(|qF!rThLk4DmZ|0NiQzrg#t+>FCgkKl7AU0fjdYG1DA`s0eBQYhob-W z{A~Kn+z)-^Oza@rT~@IYBlTDsHQuR!n)HIpUF*!NSf>B%uu{}>n1R5#pz0F5B1%s> zOOSh6H@osFCAi8E6Jm?ZFuBok&u~3UFHc--EcC}TxO&R z_xMn5!=cVVmh~#6a0%V~JL>2KPBu_l=38Ij)^{`$oU%T4MPvQAt5@y)!kXgj|2Uj( zqAG5+EZr2nwtI8ESOc*ntW@J(X6HScYX<=H%S+Igl2a6)N@7X!msZ_b=WY=&x0M9bDx7b3k2n zv1H-lh}&^3uh0%o^+n3W29ON7JamBMq0FuRpeHune`aRZ+2pWgt=;_3AsvI>beRPU zh{*$pR(|6#7rgRHjo8bRF@qGzYlo%n?&ZD|VMRJS6!9qN#}s)WYk5Jd>h)H zMO7_f=PGLWar03C8%a&NiALX9DeO?+Ox4&(%{gYHwe_ujQm3M>|NV?9IDh2xOJbu+ zizCJT(l9j6+M4l-Cus{LDF<0P|4F+# z{f73NLo>LiJWz?=VO*g@ksNeQ;xWjAzJ*Dx@GW{>=w;JH9%S8^-ao3{he?E)AENJ*SHy#@bGJ=(|(vAo;Z?4R~#CT373qhbLzG_DvR z)^@fP?<%V}_pYnHcSP?(A{UgcIX(3PVIOPw(*<=1?h`lvdKEDupYbSSUqIT_RaPS1 z9he@FVeG5kd)3YEa)kCq1k=eHy_n(e$bNU@oF+y7esLp&eL^(k*7?QTZcoD0wd+OkK=OUN+(F1nU}T|_$SP%St4_2cux z&Wu=j7c?c5`&#=Ri7C>LZ5xzvU!0gcTKC>w>x8g(yO?Y>8j9bKi8lrV`3dJlM#Zqi z!9&0|BKE$~^HPJp+j099YE&;q)z$<|mp^5fMrHauO`!kR5~czZ*vMH!OeJ6nNKTWb z94!KWQoa1oJJqG~5wsPS9Z5cq?bCLrP=f!QW`(y*(qrEbGB?2oJ0xxjoT4?Q6;wjQ z)kLBh*%>T;C{Q_rvX(&eWq7=945cmc8Tn^e47es5m9{I-q|wyvG6JCP-D$LAj95XG?V>P zON;t)JPL+|CRPpt^u=!FmfxTfQfjz?(JHcz6FFT}0Bf{iTso??G$XH`O<<{NM|wbL zQYs-uoGgIp+xjaFk+0?U*Apo{_ep={n~<#C3M8#YzigFwXFO)TQ1*8yr?A)sg> zMw;`BET0)y$-7n1{G{xp%k#e3g!2tV&AFe~iT7CubO7|P@ z0NGEPS(6>9vO)iIPb_cl_-oXAhubYurr$}M^xd7l^_Fe{d}>lB0gfOU^s*eSM$}8e z=5!>EmJN=>d)0$>0EQ{qEc@h}N}=_C%|iaCXdar5$%~4{*<3=6h|_nN64va3T`5^m zL+@+*yqU9_TJ|#$XECjj*=*%X50+|+689jDZ$hZ&r5z1Z-=KX4!=yR+8p5ckSkdut z0`_P{BeJfipU68KUWdU*$Wy0!qdXcTp2CX?h-24#t*Z0gZmZ0if?-6-`OZ#+x%YF6 z4640rNvfFuvP^SgT0ixArH3bv`tRNlNI5300wk65!i259Mo7&k9G{uE%i zr^oVW37`p$>O`^|n{R z9c|y(Xx zCBy=DV^1C8`KNLE1OMcJRaC$#TzvwL*%-wgM19$PlaDI?`;|Y9{3%g)sA%gh{r6{U zddzqKuL7?-1C023)~nseOS{h9VSG5y@YE|JDpXm@zGf*@zgYIb=ZdGPt~FOv<m3B)en$no?Pf>rSsy09Ai1;k+waA@VqI1@@~V>R%W~nh=Z0ib z^(sm#XJByO-A#JR+X>l7Zyk21#@2}SX0df*PGuXaxB(XZUSbQHQJLC{vrW?yTyL$~ zYNb}~aGDc)>`FkWsg{>*drbIH1CG+g(U8XEvZV6Qf3}zK2%m7K$~6$JH97<(Ri~?SO=s^%%ugEbdqFlfIU3)oDPzJz6bl@Qmx5fjc9rKDUujtv>sBrYbi+QYPZF zs|d)}WXLi*0C1KjSVD{f&HHwS?P?ZI(;#8n(?&`$rTs1Hj8DVIR?W*3Qp*QTPG7tb zzu}Pp-m;)?Q10B~sEzVPu9f3A%K`aPF?qOUhC5!MLV}rkz~(VS0w@_dT24mbqG9-e zJ#)cJPNkz7X`;6(0liHG7Ft3Ikaj$Hb@lK4q06 zMt13{-aw_Ug?FrlC#APNUVR*fRV~~BgsRNA-$zkF()Zq#jq>APn4dHPUsDx(wg#x2 ze3Mk=q*Z!f+nu5B+*nlwgv2&0u$+6~CqQ=rqUO-qPkxKdS5!M4_pA@MhciF-6la9v z4f`*!4w`!3_DZ0y59})Gu>`CHUyT?#TdthpX~dZseuhZO{HZ^P9&!UkW_w`gv6X1z zcfKW}F1|W{LGy4gV*Yib`a<1HX4|-xaT9T<87M*#rTwwJd$q_x-~yV>+J!HR|0CX1_ZrRG7RglPiM`6sun?@TX1s- zDco^=`8K3DacKE_q2TqltstMy_s~y&GC#IBH`r~oJhs)|SKDPvmUS4Y+~MFg7->sd z*p%oCG+#6ScWuQ*RUC_|7u@Zk)31#Bk&{~6{{q%k6|w)_zi^vRzaF^46tEl!mk>1$lPxGy+CEWebGH`x{k-=V z8MDM^?n|q6k`>P9PT6ig82atr9h?H^d4M^4O1v>!5w8)>S6KJdcGJSK^F zt=_x#7;M?6Ofu(LbbV4(1ZlVNz@hocQuZzE!W{6v{H;^Ar&GZkl$xUmdOyVGB^|r# zYxv{QJHyN2zLnZT0!M>WY{mPe9CR_Eyrw1w=loZ-G&VZdlMb7C zoZ7aOjZ;p2ZaXlgi)#5cd_|#aWN;R#=#swg#_%4o*uF%HrgOfpf(RVQ82!sj?~amZ z*7x-FBut9-eLvQ+vuCt_!nUio>|p8Z*uCLn45ypVe(Jp9tGVC)MeFe$jrC}avPX|% z(^@<3=7B(eYmN*|#rk;U&c|B?%Vh>i=o22AkI7|!KCi}|;C^$nwa?e7oDlVxO{I@Zt>3m)+PckD!X9pMI9WpPIV-@s zybV7$3gme}V`uyHj=(k^*!n+Y&dBQ##G=Dd9|yM<#}0p#h`h?xVS7}#+Ey^*&AWH9 zIaeOc@#cizNiNlN~>zqe>3Qw?Ns ztQt=D`SgDnd(Wt*zHaSXMMOZs21plCq)C+;ilP*yiIh+SQi9SUgwPReC=ft;S3rW4 zARr|Wsz?bCR7!x*OCluH(CfRs@AE(ByyrR37|+LKK=#;cuf5iqb6(eP($v4(26tOQ zXqJTc92T`3vQsxIlnngU_%XdY{>TS|{W8%Gc@8|UF3f7BQg+ZlGeCqi!zIv@NXvpo ziVa1pEU;G$C>^4B4&t(cmN(0S@@i!^=M!QbH-5ov$`Y*6C}-^$LMz)P`iU?P?ew9V zrS$T=$E>LVTwv-x06lG5Wp0Z5BI(Ro2}%Ix#OZ}hZrV&HeTfYe6*aa6%CH~VvQf{V zKAi(=8BMzxn24UtbE2HPJ9Z~~()VN}2M4sXfMr8G%ac}H0Mt*yQzMx<~{(NKx(Tl8ts~$j8i3(qd!jW#PlP)KIcdO zlyfKL_~9YW3bMRMf1^0P&Lm-xCyvk~6W#kWI1EvbG{PljDUX$zha4_~Sv69;p4KN! z-ISXJ745PAWKtdCEPWBfl4+zWrL>&T&C@Z;H@{ieQ&RxGQ^6bccfClc(T-W929&N$ z(ro%e+KCqlBxz5xBQvC00*|Tr!PGEuoiWvT?q`+)t@UuXofZ zcH_)maGsVrmU*dnybvz)YU8$Hd5qy2u}eTP_F(xgX=;I#^6=S7f*5vSin+T7ZFV#^ zEsrp0?YD)wwDUrunZ=G@r=UXFgK(MobrhSG^mk8PS{G22)0=2SgIEfe(uRp->|kBPMHs3?Sp*fTP{G|DL%`Si71UShyaR zt?!`1_E0H}8=s|RuFruD4?}yPKmSsC&-AS#x~(Q;#=CueNNLVTqh*Jdq}a**hRG-s ztcVazJJ)A@DL=sgw@hS)tVWDkR$Xe?A73$e3u7}~>{3b8nuogl<$7j1sJ)1z2LHS^ z1K@v~(hK#%bM`Sg8Qt|h>C#}k`8tf7-RG`KSTv{`-__T5e9+f-Wa+yeqp6gYiVc|4 zjP^&b6c_DCclNtl&vId|i}PRUb&cnb%^0Ub^j-ynJOL5BxPP@PK_Foz3uq;;kB2KNN;=8EAKhUZ#qRhLLZ{kBo+-{ zV{+9W!dzrIAWrv1^X!&zrmwM$o4zfpJBjB73xLh`xvrXAS~E2=WDgY<_~x6nelqX% zSeISl6L|w&w{kK=YQ%44>OD@&b^RW-AgwGSlks9C4fmmPEBdK(7Thdd&%NW0`mG!L zPN%h`tdbKCKQgEa(|J*Q204Xf(ayd-7qTUba3g<$jX(lQ&;z_sR>#U;6kg}~ux-vJ zUB`coPpzZxwd1!cM4Iw4CB3@WuW^=?0zYhQ$CrIou?}~b_IlO7JC(H{9Q12Nc?!Q= zG(~jPm$fnM$ok=u0eZ_jidD2T*niL9ZyUckP0oCJG%#j-8XUDmH4{3W#iz;NquyEX zo$7fgDtLwmTRk0}+uUvS&YBhS=1rj!9sLbd1~7AP{=@{T{8Q2EPURJ z+&^)rXwmP2$9&w$nQjGzG5wa2Ps};67hO7uVh>6Mr6{Q(XzP&;09TwWm_DTqvJuXP__|GoN#hDwLCV&?ZfZmG0*E( z2Gc4VpICcuZlt}+-Yju;`Ytx1XUQ5oMfXMJmX53%NzWlYAqML!X{;;MdAe~y-!t$p zF2eM5k1-Da+D0jC|L=Qs&&NPA!`leI+pcGKlJ*4nCv;FB`R;-ilCe(^JVl}yxE;;Bpw2r@QC#Z&{PfD4jk;TWQAL{m|C1CQWnJ`W()D# z?|Z27XRF}6t48x7Hib&v&pre7aEx0$YkO9A_3pq(!!ARb2tFd-&0@KlIexki4vFu*ng$xln~ZgQyYlEO?8d7#kxFCqB9J^%`R)b% zbQ*dr?BIod+^v{mbUP?aNo2=Ceak`E@w*t4h31>)SB|;eXS4dtF{j1Ly`9c<3z>Av zsY0WqX2-z6Kftfz0-_hBdmPepER4=fVIg0X%AojaXis->8vFcZy0k*sr|Tz?=e}W} zIkB>p6FikfQ^^N0lbafM1)1e3OFGUGUUP83sBovZ!;jsK;wz_!TnrY=7;(SgLQ$T| z!%Y*T(kuNN1jj5&pu`X<4}BuZ*m*l*NAZbPuQF0b4aYpWC#5v%N^~J{Yr{-fA+W&n zZOA(4V#%I7Bn9#eP=Rt!o7>Hyo;#;M^i)QK73Y|OX*Fq_R7wo)`kKBQ+8Zd2Q}95 zRwv=Kli_VEBLVU$G~WkVgTISUD!1;Bqy#u{gq-9Q+*hjvMQ=1)S0#1{`ZqrNP_I6> zlu4AByRFWVupM_8Z#6c#7VVuIUsdz{Q;nUPnFzPm zJ6zhvI;(y6_qOdUA383Qg)|z3Jhv=RgDM$@+>@b;E@;dw=Z5d6o?&|vlVxlxZ;Mpk z^bPJzlr{uHnP!Db6bVt|XwL&@P5oYT{WwRA6B8+89NT%$LlR31j#Hppp{^PM^ znRK;WJBj-e{=3CNdPH|2iqD-JPTNK%FZ0- zhHPsoVDT|!O}oRhI{l`b*6(oN6@#^(zJ-FRMv2e8?z-i*OZ#IY=8Oz=MQ>Go9U1Rb zY6w0ntz+^>4l_A5eut12ZgY>dW}RO{2vt@@eLTsgnfbk8~?IpO_CE|a-M zQR^5ys_N@L`B?;D$=CgEcI!%>yn zmJc3F**j4~ZxqdH{XD&35vUaxl3Q00KW{yRxU$tr^xm;)$r5<)&=F(af#GolNYO97 zzO~BC2or{A=_8xk7SUEGGorgOfdgvgW?Oa9Rvi}DIy^wyabC#0IAgthA1q%P^ebm| zDWiT6>0bl)mE>FHkv?T_c=`L5LK2v%w*zAJP_tzsX6~eYu;X{cm1>~B#*R*Sw3%Qv z;PS-q5M94&P*s$j6)Lj&FICWr&@sa;&j@VTtuC>u(}7Ey-!!ybq_iiPCZCIUjArPg z$4Zk{NPbzvM377;8Xm~G4_dCljY#cGj2_~zXvq$%TB!%EY(ft122zQGU5I+~xS z#_|Lmyc9VHWvWP{yJHJ-HHSFHUw2Af?lu*4ocqklauTMpu)1;9U<=3Q^)wX!Dh>8| z`ii>3t*(B(B3qiA?MpjeCFUqK0i|8b@Rmx6>>=ihmTS5Ubfiv@U|+UG$7qx)?wKUd z;>j9($qSXL8j50`L$9yI_9tMuZOF6E!?wGx*wPuTZoi9I!NpwVA3c z*}=&gL^0`WdyJkO#n!C(Rwzi$6$5(9unM*|Jb~I>)CU&fD7RCyO37Up%5u=k;i18- zgZR-31Q(}`E^fawQFXYk(^TuAqyz&DPC4i%=c$U@Nqux${aIy&BTbwh$(&HMfhgYK z<>f%krBaD(rrQc;ks1cI^RjP%&jmoMd1kv9;~$@7F{t}O?<^yuoF8=R#P{7GeUHV6 zXraxb*4!tz+;{!$@LvT?$x`>b^YTTF?)2Z0$DSfRsj@E45fIwjO?7sEtPKBw$C2{B ztU)P7ih_B}1qmXO&dk~ZVvYY47XYDE#9u$z09kGA8+awC_vkq)Ctdwk=4v9hBbj2U zP-mha5|Gz-!Yj0(5eP}^*1yz^eEc0I^+A|*RxjjUGOBURQ(#6UDX2PG!vF^TF6NKt zIQq$Y_;|X*rKcS=Qdn(#d(+XR8@{ddoeNa6jAJJO^y{aJKOI7)xe8!K(y?; z)e3e4%wP{>Hb1lNsyKwmd`ztOo`6K6E3f}sh&YU*W0?GXHp%vGrS1LCzt=Qyos#vd zl;@l+v#CgKjput`04er(!#(K79DDFd(SRRDUgkn>sY>MS z*KW;vUDI0o#zty)qqvpq zpV`+crZE4X3!UG@umLxKsvu*w#f=)1v#GkpYD@iU=OwizB>Q;vV63l$6>@Ey`fz7i zo@};V1Nl?Ot}?d?>IOJ?HNCky(vI`6^B9Q>$|}gg?B7>oiDT6vy?nJsYP3s?2fZU1 z-Asx%L_lfMJ^9_d4=Kx^9N)5guElh0^}8v)VfTUPpB7_sXlMPiij$G`^MT?%tAE#Z zNd^S)v8LhXNHbWKM8T}8i%Fl1N10qhF20K)@o3E@f8G& za)0C!-{3_s(w&~TmD@i!g}@35Li!OZX$ppiAJ6c2yGr@pp((Cg zJ*Q;<9Nr6g-FgPJ!^^CoXcz7N^OfEAwene2re40PXdsI5)rxEw{?m*YIO`1|V2v@I zPOsSKRg^W3W44)`b$l&aGS;L)b=s`rdnX z!O9=LPmE);74Uzx*+(i%7{j#zLgh7wF~GKjSdob!FbxA1wq!Ob)_&@HRZwr&0LRh# zK*#5YMiO#Q=2Gw7%t@tN2>@LxXi49T$crUlW^hUdtAC3@7(@02pES^{fc-%1N)H9li7PG1U5KYdqs!>W)d3bDw=(@U|*MBPi{W-``3W}uFU9%*C9At zC`{$NPLiA394-F!y}LHB7&p(}VN|^=STFU%HF24Sk(y_%dGdx?Iux%bb9LVY56-Ma*qWv}E@v zOp;k1Q$bGROyz?1=V|7e_0JyBXsy3f_grc`!ZA~Tg7r121PvSo2UvKNGQ7h}SAS}A z1;|cy`hl7P4}`+qRh-$_L+`)N={Wh623Ct#V|u4PC(eE(Ggl8SS+6kW(}=-whp$J0IKt3W4O*i7dvb1IXrya2mw4tht-p;`MRpo zg(m@LRSiM+#7d;Y8kcus1G?h?IXlk4KYxlGnJ%{W-kPzt!R%{+H{p4(QrTdjd!9L% zNXunh-mcH?*6DLvQ5%2JPdQ2c6Ik+Yi7VQ_!Nf@tkUQc)O&zTQQShEIXPbJMdl=n= z+p%BhhymC9ZubV*G3wvA0oh)M-A3A++ zy`ATVdU^k&bw!og%__sF(bIDm_8ckk%mq?oVK0ZDM^<%Q#(}N=r*nRcYsL93-@Yg?>)nuH}jZSbTNKd&{$g$^Bbj@DpxqC zX2xl9J+<(h!#h!t=s>O%u#vz0Ebd}kNawaXv`-A(^LZ?rjXpK4cYR!Yn#_*I1 zX4S4=i;A7%c~``JucxtwL9!=JLt?3q03-VqV%99Qeg=0=dB+A>r|ypCj-9)a@mMbw zk|MjTu71mt&*YNebtlxD;2?j<%$2yy-_X_Mo1of#fPoSsm?ZXb6Hw0Ftt8Ole{I&D zaU<9{n#6jS5lk_m6c9U0B;5MD8pRUtBu9JzKfJiCtX+JUpC0VgR^Gs;Jwj0~{kaCY zrPHB}39JIdsJ=I+wsIW|zD!=-%h*rjwhOzkwHx1T_mv;C`Io_sG@+UeBOVl{Jjimb2@HJLwUkbLq zddVvbED?=kd&nBP`m%B^xKb~~LT@4!P-KZQ^rY1V6FzZ&$nf=v`LLpIr$LqNQ%MNB zv|EwtGv5dX-W}EPjw$}G$TY_2pzFb#;4rwyWL!s<0xOjV#=YMLjloE{-0&$;G&VVs zc7|9-_LjXE@eJQn7Erqw7bM}>B+i5h6zlJcxRN8^%K{GBH0+cNT>~}%C_1xgUIMyX z+aeBD{+_AKykNMy#E^Z{k+^Kp7iiWPeB#E0bw^4I60}AKz1vg6;w^2-VIBY9)SEn@ z$HtSb*Eqld-SQs-7e%Vp?xY0T*cYftXs#IBzCqLEHGXmjm(LGv@PU3I31UuDMp^JzI%l6`qDe73fy zZ})ePuZXd5kbBZia&^CQ>4KSY$D~fb+vCGc8A0iM1^EsbH!-bQdF`YRJF$^DXJo zCYAKqd4fb6AKd+OJ;-ap#e)(D@+&`?sN3@!lE2ROi_!4QbGta}q3r$_X*Yf^>bySw z3lNq-V7fy9`1ntaPF_a`N4+j~D@Dw*YD(q2CAPLuYC`2g&G`=w5~bwt`CUn1K(G|} zExPC*7C`V*{Qf+tVnn#7GnKgm`x_|N?PK06_Fzje_pDkg@5*T1wjIr49;roWJyVJa zz=@#dmY-WNr=yb#k7#rq0r%=oomJ)mWF_^qwXM8j_<1N7;(R-ZzbqC~wmU3UI;jL5 zCFYe3?XQ@pn)z*8hmoW0d+#tfEqb%>TvHXSRT{?sZWyX5ph$bruNpzL;Ya}gSsZX1 zeUj*6!+;D!XZ|Wj_v1(i9?#?5dm{l^#e{cA*RQJY<=&3&{lb(u6nMLGtpsD$0)gb{ z_iv%()aRbD6_zVa4o@vP<&fwmAWsKPe<`%7$b4X=UT%&wkXQRFEncO?*99}m8QbDLNGi`H z%$P!dh(V;cZ@{(OkYkH#FCRg>tzRYGyQy%yciw?9f8gp51`EYE*1^;`!R&>bT8+Xg z3a^D#&f<1oXn3&Yz+a~Y5v};w@q!`9?t_ZTm&ua6xc+EE&ef}f{(5`un)#~qV#jQbp0Wm+7j!5zuEjj$1s8N^tIS+Xqf6rh3PYJy zbD_J|Q7NFT&qu*?vNh#>Brx548eWz_Xt6rIa~35?a*P|eiXu6h}w*nIE)Gc-5< zc(d3yED8{CDD-ya0B`m3P5w|n7x^X07@Di2b$39g_zgjP$@&L_^B9vDZX&t!aHl(H zBHCIs>9Bx$*-5x3`h#{{=6;bZbcFaQH`Au4VQ~f6GaVayP#0l_A$SE+MQ!xie0+@p zlo8XWiU{sZOs<;qb+r*l;=TFo;`H?r>dpB9YlD%S9A$RMtJ*fY)sirBl$!M@L&|!iqzAgK2oF&CZ-oh`j&tn#lQI$yLh0m9A zS$egKR_sn)@%g0?5aqm>H_G+BLOtor3Q3^}11^Ux-oLS3W}dw#Q|K6V%Z1a#M@AB; z%HALz8Z&!se?wTWK*5 z1M<&6UIzyX22ez*csDx-I7ZzTnV%TjlJ4$d4MMb+$d3Ts(DUVHCtAk!*n>wiHBSP= z-FfP37=>zguWfNH)Fv%0`IWV0q5;!v^)z>Rx;KHQ%da;s!2BN{3}PXUcU1Bm1AU=2lxrCba3s-6CD0w zr?%R9yc_Qu;LG&j4C0s&>dDiIt?HUy5jn_fJriKTmvv^LRh9E7%XI*ib`T6e{3 z<6D->C_p4xA92z7&a(B?7MHiys*^r}D&B6i`U?WKAKQwYbpgD2px=Ym84XAqbcY^M zP;T|&WgtxGg(NvF!6n=Pt#C)(r4Gv$Ws)!8W#b&aq|ts=?}gm{k71?F*JcTPnP~>k zwRV%7v16tI@ak!ko1afCSNR$c7L06KbapUbBLQrJua@!TEdTLNk5s^Zdy*h04U*IC z=L0Ei{3GNKeM5~}%G|SdK9gjr&IWS&BIlW9|_T z`Tg*grn;;^y^R8*+%VVydn!BRKATBfY3n2$FA%BsH& zh!Rg{UvFA0ZWL9Zd&=TiIQzQu!#k$RJzFinI1wGNTmDI13Blbm5Jw*|w;_+HE-lsa zLVo6#6C5uXMOvLirVRrG7>FS0#r`wTnxLB`UtTP-;{0UfVD$HI=?%j?AZLqyIZ%}M zmEdoLq^mWmGqsjG4Wme3IRdoIA%!B{zom0NxUCH|V_pfKHxJ5U&Y0EdEl0PNo1H~@ z)Bu2q-W7RHP^gXo>Om`W*X9qFFJ4rGsT#mC98F%Tv{BeJD9#S)uJ(!02JZba#qphJB)4}AVyp3)|!^dQ++bSV2?|O1Z zo|ftFB7yM-0xLZh0T-nXLI&?y8_w?m{(5KjD%$h4ZY#M&AMIsU+eIn;qpU;8lIi_AV zpp25quG`-8aKr}ZW%v3Km!Rvzx0Pv0`nd^)YH5(PxFpht^584dx1g9^Fcjw&=Oo~m zpFNf<)=;`-Dd1OuB4vK;P9lqlARKNc7d>%b?t1+Z9A8xN>LA(c&`2j4>y?ztWmVpl zl#^LkNnT(w_iHYS7JUq?WD6J8SA+=$0d4zc!v}e1vMzWKT^Ne8{)> zg&X^T^zvnc&ST5@TItzLz6VJy#;p#7fXHVzFZ{S}xMn4H%Gt%AE)Wj&BNhve>5#b> z4n(hggS<@Qtv56wM~g1>aDG62xe<#sS9-E|M)3|xzmp_SQzAvZm+!+rRk$JW?2Ncv zw57kbNo2f(Z$W@$(+uiX|D;jW$x`HJo_wOF*mtH??}no#2ErAN%Ho^JUp(bepStkx zQ7s?d|7yT{K&e^AITQ?l1^_WnizKCD+z=PHQ9<_t=eq;6mD6szEY2QFS}zH|zc&wv z4UEr=a*6`G;EDS;!grr{nI!LiDo`7E;;bJ6f=R!3TwK*US5CU+u$3WGeplC|9e)rE zeetDY{Gq+^F5cpbr)jFvt@}2e(JobmPw<%GVA1Qw9%q#ByQXf@PjoK>8X|&Ipx)D6 ze`o>aNg;t!NP}tkC@baJ_0~YZj8GfQCzraceYd$W*mNaFYdQ9U9>LVGpfNK4xaxiS z-p_Ng>3ShQzW5GxSmCCJ(Q%v}^stgM6O|dB!~pk^PFIl-MrYFgkJB0X)< zc${%c5|&nj-R;GwH{@|1T;+UuOZ4Eq>W)N{=yk1Nr9jSWq_zz0Y3cQEx$8s*-spFA zu1`clogOgED;rD`)7m3M?o@=t`DB?sod;Z%udeWRbpPp3t1OIG+co2T1{d!gZ5IWf zV^x)ME!ULg1Ld(!4w}EZnsn3e3X~fnOV7}nBXT#j6rHQArXlLs;^qD`Iez4k?udW5 zv^95irCo;Xd%6BhkL^b#p7nrhOE;*8XN4~BgrU=&8dt5H*=0C3~R%LQE=;%&exT1#w7R&C2lSLxCmw9OA4by`T zzs|`T^KY+S$LYoO_)oB8^oGlNYFGpK8N58Uxz};7xJctqQsSslgVgwEw3{5*9!rFd zzF82zmd8b{!s|T!I|^nmo;Old%&=nHriyt>N1~E~=zgHoI$0I7LyERL4H@yY-vTmgBb^-d zt2|=WznwgK-Vm--WpOKM;@*Ji?Qgt4OlGo;nVk&BKHBYvpOj?`xVrd_&EkK87i%LC zc26gY!rZPg8VCqvu5pnVI>Q2jK*I|QvCTQf&-R7mm?Tb-RRJA517Nj zZnR&wH~?3)U&-dU0&K5nziui66RV#{pkR4Xmb2)|YPdDyPUMJp2XftyCo9AY2)e<` zF1;;UVTaqgH9=v~lG`JP8+|7fJ9HPDCQE9PGm{LW#<4L5?S2!@Tb`**jHqLt-%C@U zFrLN*z0Titl?)v~9OY_$l7A^&W95gFf=0aB&ip*|&YY%BEb@E%$NM*Ndk{$oOlYNm zc+!FVvlG9TSZcSsG4!$Mi4 zUu|yW-;1rUJo#b0g0NZX9^yq>6U#T_hvz5`p0b8v-%ol^_LQGeJlkirgtI-GBz)|y)=61$h?>0 zGmq{Fo)zQ{E$i?vV^GuHa|`K+cnNq=c85u2$Du)GW70wH^$EP&Vrqdl%1FH0PGKt~ zNvuWd_{q)+!ZP$|HpYM7uLq_aE0)#OPd8fd={4EHdh;XESRKRGUcJA{np-`!w@ptB zcSDrM{xjqLgWEM4u4~93^EH;88%W2Ydu6OOuf8kU`7a&;@Mk~6FRuk0m#j#C@6xi2 zwr`h;7)RWnCZ{SKEYya~zFomZTroexd6`~g$C2DKal=na%dLlw81(tieIm?;5g;-R zyC+WD`q7jI(oI;N%sSkXasH$r-0?E78g;VXKTeQ&O!xuMVd*0NW8SvXQ?sihkSwM4 zFU=DdXDmzax|M!=mPaT*>$G8RjknJ~)$Mh@+rh4g)z}Tc3fkRyR&yPTz6gVGoQGf>Y8wsvIlydzvSR)tKNr7)}{$op;;^c z+uhqZ*KEi7lz>z!8kAwtR{cq-o;*Y*se3)t!v&sVrJ-6ePLbL-7dvX*DF98lsi!7F ztUTSF*6@TnpK~8PV^01dKO-EZZQ26Rug&Bch#{4TV>mp-cP}2^VmnkLWYmC2RdQ-;G?2dNwI5ThY@(!7;t_{#ZEzwAQo~ zu&Uf)Pa6Tq4E>x5DD9iCwA`iKSFVVE731(Zbj?|>s;P&izBWlbzs-)N1*x*ZUsA?~ zjiC1A)VFf90s6%A&U5r{9SU~Gt!A8>zo4|`GC3+_N2}M*DxiwPn-`ec>)orIBzv-> z3i*g)3z2e5a8uR1JgS_5Dlmc*uGJbfecVlytDmZAWmLFDKSmk&J;bDzPFZFlq@5)q4)lxedq(;z<&J17+v^jhQU;6G zi;r&;DUh1jlf4V)OEad)zc*pOD~ieYLI$2F?N^}DqmLM3Yt+>3E3=C zt`vOGOY`735w=g2k=taGku6b&&3|c-o%b(3a`dM9B&H3MVh?u2zpyAX8SD<)>S>XdG^A5e@aH7?;(^TpI7|V^ld(jA@OE)A{mEe<%SFqPF z;~k51g$?MO|9h{F(oK{c{v)09Vv9Df8_&*VJ|#N zLs{X%9kBt9KEpp*HD)q8t%P6E&B>%#l&va18}r_!0CwK_y^L{TOO@Z5km&ER__q#N zZQddCod1IbXRQOI!#orF=n&*#N&qWB4O?Dv5&Li8PYFNX&gw|X_jT76)xS*-PCnN5 ztO)_VnbGo3to-0#nLkDr>q}0xT6xxDEFPq#Qa@v8~`Jc z$3$}joasERT3Vev6{(m4KsCGf9w7HdXV(M;-Nc^-Qs5)Ju0-YPUhgWB zVv3kRbx=J?4Tr2)iZ+?YZYeYSkz+4VQepWYY*zLY5J6Qw)P?6kFNpN5B5JXZryOha zY^+SKXVFdi$IrG-G@wg4=w<6kM|=3!OXlQ7&KSFl*oNcsfua|J>48g+ekN^W*GS$E zo`Qav`bRsJrNxULRm7y2Q}G>E6nO5inbc+CM11Snl_cu-%p|bkJGkloH8#HQo6(}- zo@MUEO7(ePw^uUcc;#BN2vtuJZB-Uwj*^ti^WsC^62R)&qPTU`0o2;@5$^fqr3uJ8 z+18azBfpN(YM|$cb*U15{!!%81R4`tk>>^yG*v2Vz(hItXkWmrP_hl2?;=5VjNb&coy=e#D}#4Czh9z6a^3PoK9uK zr+u8*gA@aBR`64$j2)365;j4Dk2^9i&A(tp1;YPd?6v>k8UHU|NJ#T4{tB`yd7t%l z^eywSk`!}n%Qnz10PKUY6(B#Q&t>tOlAqMSoPko(K%*ElgUQ(-n_GT(rL9~}MXioC zpKri+OIDQ6QRwXtzU6?NYYoC<`V|&^d7Kn^V$55TGGb#w@rab}gS0G^tfO-xShWbJ zc->55L`In(+;MLQfaTXGtwmf_2y64sLds1llkB$BLC%;X7adMOn03yzj!)4)=H-q# zK`60A&Yk1aIRf3~6oM17p*l#_rkBV5-qsiX##ocrr>f&28Nlw(?YUA3FPX|VZ`lN# z3ValtyOn$5j{~$y5x_4qpbQhe<0cfmkaIp-G;N;sEpu9_LkP8T3xCf&f3^xC2Ofq~ zm-Zk8HTB~^l7xP+{sf=v>3Tx{V9(m()|W67rSyR~L9KWcYL@b{lcH>~G7r?dgin`U z4r$~+J(FR=;F)JNGuM)xbWaD_kV8V$3+iy*O1TL88l;-V3Txw^7T(S=^dgX=opVC` ztT&nz1y)Z8%(7=3;dMEI+E@YV?LMO{dTRLUwekS26s2<7)j`9=Sb=?!bfpNZj&EuN zqbBlQT1#5L-4=E==KGxqvTBe!|3Kw}%Q4~}J1ml333(hUNCZF4Csz>;6_zCe2F)tR zcm03Wq=+xaE-f!v^sL}kV-WNg_(5U$bd}rZGX;xREqnOAtx*oWHAto52GYOABHQ;r z#=@l4J0~Y>BZab1EaVw07cov*a3T4__XpIAc=TPoZmxoU)9UaO&Xn3SiKS2?M0+!| z?#Kg?@4Uv9MWDz`uvrTLZ?soxgXa{_mo``F|KEdVsETJ{QfpPX)T>f^Jmlzf>Mcjgb}8)+YisO4b?Iiaz@{KixDyha-)yxYiqld@ zFof-nqR|+emKFm;U52vWQ$u2u3J2!@fBFTdv-2%=j|;m9;R(Hk70s=U=0 zliF}(#Gbmvb#f&@dv6Ldt5yv@8TLxC40dteoD4sNrpKnsmD@Z7aFUQXppV0X9zp&I z1n4zltV#@0{)_oNoy8i_L{({^ZjGYb!pV^r9g7k9F4jES6N1#z!Cmy}k5JBO$>Iqq@`kmM})^FLK?cYtnX7ZnD;aAb>138UY z^Ri2FUbd1Kn5taW*<^}oM)0rl@xb*}J5SmYc4Bv=fJ1FDW$UDEfHu!;LnyZJsqxFa zx&~krwr%tF?TDM(E)7gUrBhYWi_~E7L{ceZf^rM6Ta18MDga(O;pfss4gRD+9)$r> z1s&BDKiiRw$X`iX_5^{;en!$P`GK7AKJBUHWnvYac(6>rpuCK7mG9rt2}qM&uY)>M zE&dL)VImB!k2Qlyboc>XYuWWfQG6a{^Kf>|GvuXvGdAOosbezQ2*iyb$DUc z_+WM=2k7|t?b3WU=W{K=57$PT1KScfH%%-8uGP21dPq?ok0g^wB);s;>-Q}NJ?q2# z5w4%}=32da>av=^fxPu*e&#)a=lfQg%2r4m#S9SqB|w5U&rSBl+u z!Pk3uUeY#&{dh0K7ASv8t~$Z@cY9Zs|716-h6kP6KE2F1c6p~GtGOX|4+t^0aVx;* z+FM?RQ=W?99W`!8E}CIe2>&&c=v$7D|35o^kOsNry#=St8AbaR^9Hg zimX$9lsocpeam~m=5rW_+)DORTsoS8wh*T_q^RH=Ap`PdA2$8nM0-f4wp3Bao`P;H zD?d~y>kcVECAFiIioZHT<1>Q6;~o}-bG0;uoNPQjs$EQOIkU8!8=Hqlet72h0UN>t z2QN%&_SQRt@(U;}!OHoua`@h~k3B3|^nOVjE5W~&g1l~n5W_6*z_%>+e*A>rmar~k zyG?ETA?X7EnK-hIE6kpS&xw#l+r`RXB&|x8vZoyhgA8-k{Iby=`pOv(Kj&Gb2p@FL zTMii6js`B|8)RvENK59A?|7sXmzA8_alRv$=%qg7%QED6JE%Ywvo9_=HVn57KI)b{ z?&EmVuMA~f_Ue*vW_kCphwbwxf_+G!<#VbfhA9Zjj_E=SE+xZzUx31B3k%j>F4!lt z_z|x97SQ6N@H^opVf5 zP(SWnIohb7d79~@mn+xp5MyZ=cP# z*)Dws+P-z!FC5E?>qR&kB#p20tN!g_m)kysicLaiSU`h$WxH*Z7R3=CREIxBK@eW# z1uBb8x5ZR6>3xasfa!0}_PvdAA>ImwvH=WXcVi5Zir=q$P%mC4O;IL1nvFL-RSKg>4dTkNBs2CkW%t7lC`V(R2-QEtFYcuU(==0F6kRyy5VB{Uz%r5n zUL2zY2QGv3$RRelHpzrkc-dSa3H^JTI;3j-Gy@IMpmKbEoVyXxVR_JnQCJ0pEN$bY^B7Qd#w)7g#FKOCgObX`@i z7Hjp?m(A$D`5@Rg`2Lp346@_xpSP_1Ogo4b@W%W*UR=fP(4$Gj=IL0UNW#UN+C^Tk z1b%3{Ha|$YA2PPxbi8PLd`LV_espItix;`qfwoj_SmssCS@~@Ro;78~@hOC_* zkM<8%GKgi>m;KqTHKZweZEP-XbnWk5sxn0XP`$il<~#uhF%Z`4sI%6tJ@sLxI`ihs|yhZ%$Gr`9Pf%e%+x0(q4*@`>qfh3ZRn4HD06@GF$B6+eVOKrDr ziHy*LhVp=4c&LgES*Zv}Hc6?#3d1PQn$xkXyI<^p7Mo9)d|?H5Fz>u|Ldy^~K2OI4 zc4)i1PB|nGaNnS4h|K*m^!It=vPUK0=Zoej-E)j|LZ^+j@5VEij5(eixqM!4kAp@l z3!AsGbuq&XzTEa)ZoyV!J*gXAWg*azyr!e0dz^bsbT&B{2q@vl#R;Q8ga3JF*s##F z`wGV%YJUzV(=vl)Le(#91_=e}^uo`4R<+@s@Gw&*aDCu{A`5%(tzEhK2?z+p#t z`bxA1oRmee^g9uxX}7PakYuvPv$co5ZZV$Ou+@hCg9nY3o|@o|2(eKyb=Y2^M7<1= z5#!t-wTuT-S@Cj0FHxK5RMjcFe_f~>1$miW)|n zMpboH!#b7d^nU>1H>ol(}R=y zgoh!0uF?xDaT#~2&tw`cvfI|@>`fjYd=H~JNaj*xYh*0;IH;CGwb#{tz>{UK2!;-AdAlynU;fV!8G3Z_$xL@-V-{Iv5PSIh9g%Wn>e0N2rzLr4x8T7M>-nkeNU(k1@^8 zMO(ozc|xRfu{QU0@uLPv>W_qoGgOB)_+E9}hux6+&KirIMCZddC8L{%VaL12>-*Tw zT=rqM!|{V#F^!dz3*)id30;JhrJ|;;PDDM{#bFyWR8gYBu)VN-e2K$ z(>lig91*^$hTP~ne(jjDXC(-Ao1ERF|Btvgk4pmm`i9$`Hk~p{O>$b)(iU?W7X+JW z%*kBFOmRak7c5ItL{vm8rz~@6a$kVb%nHSnOaXDp!rUNNGzAw_WDzt(R9qgqfA{_S z&Aq(O`#zuNkN0o*oQrcf*L9uqJ>PS#`8TQI#+-N|u1>@0XeCNiBsy&R8&O*~gJhm7 z+XV;r>;0UV&eGbd=TD`4BRA4@+UxMhI>2yxC3+NUQ2hFAhC0pG>gu!=KH8>#pp;WS zC;u4d`eOQs#f;UM!2OJ#avU40KR+Io&>XUR;^?`V_;_h&*xD?21TDY1qKTsMpBJ2c zdBNvF8I|F=>>IyY;Jdzp6Fi14cy}HA+j093r(en4zM}Ztw_&wM+)rS*$*H)kQAb=` zjXj9}rXghM=g5qIgrxu28|NHHqemxO42DxyH+-sroz(X{BSCl`PU}CXEL|D|IBVxP z-JNvto7;cJ%1XK+Y;Hru9(7o6$K%%a*DSt9&x$;eGje{u{S;z#NDs~`2Pii5@NnX4 zk409$`GLB0A91PVF2i#c>QF#P~*w}YG&%}KL#Nhjd9Qx$HrY3tqM>)ZMBq8){{kjV8%P#p~MJP^hWDjR0BdH6i0IHaz!NHI(YC1%9_I*qvDba<*v zQ|2d3J_E{0$-%25)i7C_wli*ZPCH?u$Il!wlWXO|=m@AzR{wx%UHaES5)&VdAZ-2F ze_hzw_Gax{o40y^L5<@9pA(69F%8vkObDT?uQkIZ{TZQ?M!zjQ^%{BgX1#=l^$QV- zgQEhqfsIIKdB&%%IzS^T6=huCeZK!IBoaruVLMZ}5^p0KULAllP|CEZ>1Y#qFf+j{ zBaPwN%Yq>H)!`oC-SfaABK!fv8*))Qmu?K7aWVlqrLMY!Z7WosO^e!P(1!3(VTTMS zR-zi4?A^}xxX#B3Nyw=EZS)b4xk1Qai-#YhX`n65NeOnBvPNVOcEt7H6IWSMDVw-m zYOI875Jm9+g+91+?ah}(G?XitOD!WpjzF#P8GAFU99!n%(%z}t>&LDeq;kE**8faj z{uO=x7blG0t7@*e_cIKwZTu0lJ|{HQIlZ%gl=svY!N;IxbHxnYYFWH&ZD?;;tLyaG z+gIC-+U?$&iguRQJMa z4qk+qWf{J1_%PJDT3S#H&5m(uH871zdNeZ?Pj>YF%R9F$nC3wv)QdZvfdw^Qgii)` zNdZFpOn*z?)=qv<3N_hafF$}D$Myfek$eXGKoGpXOjSXUf5m%S?j!nKa=SCUL+yfJ z(A6!DajiCwHdJbG4rFLsAqYc;BYEy(wk0)&d%1m=IqLYfs{eFaRKrQtNKH1@q4*}WVmD7L8sLw#Fp~(Bqiw!-xQiv%%4T9Z)gx)$< z*_NR}>R(wYm`7yEM*^1Q!Ac2V7HV)~)uw<-g05q5og7d4R+vf?T?w?mX(sDIj3-Zg2(U4x8%0UcVQF6n>sS$|e4H(h`NN8|dY0@$ z-OT)juHH>_gx(ZT`~O+;4OD59`Z+jVl``x7Q`SL|Cl${5cY>x_zq0V%=-IyXvI*p%<72jg7M( z%0iV_tZQ8dQB*B)#YBwl&$iltY1zpp#yvNh2a#-Q2d@pB74snpy_v3zd7d zZB@O(?2Qduhm>^eOKS=${7an<(ZGX=z>V;Es~LYKN&k@ES!EQ6PRIfWm;Dy@vi;ZV z>vf`uAY6cs*i*CxtPxG_bow-tP6J169_maXMi}u@;>A-ZWxSK}Tn78$S3QWW4YOLs zY8N<7_dR<6tsADDX?WZvtVYhwxxSbSmsr8SV)dLuzLAS%@*NM#CRhhGEhDovqH`5r zh#`2CUovitX%BMyGtNXTxEyzDU$$#rV!7FZ+C?@P&)D=`5^jMJ<~W7W^lsu(^SBE} zj2$K1d~WjcjR=-;yI2Ww5&OzCa^UQ2un6bN=wW^`=khd)It0@pH)=jc6}wFpjRhz5 z4$YLVN(6b)eORB;xnV2DX)~!g7h%@0zSPDZ-rf~3%7cl&Ybmj#S}G=X4h?!>3gmMP z04dEU{JcL-xZeqg#M1@Af!v#^A$evmVT#a3b5YJ^inrXR4@x>NT0VYd8pG<6qqm;# z9~VT{(Zhz%IE1H{TEQ~0UAMiN=-6GMwVe$T$aKN783l&~sOf*lQeGmp|I-=M(7dJY z(-JVV;S&45rMOD1dKNPq+wE3*rVWwo1R6>_T$#4uJ28G$KQPe4 z`ZkDh)GGbA)>v1psQrfPoUtG9**gXwHkr?hD?9t1C@7li!o29lIlEt1r1FP$I|EU6 z81@>WAl5*&7-_>1wuPK^gsIDd3Q5pYab-?7ALz5l9l-Wz-?PO*vuDp+Yjq}qRE_-v zE<7wTlw49T(9gnn(R=LV$HHDpDrp0BzoMA=;ma3Uk?+$(JklS$!hrf5!xE6W|2GQ^ z<-? zp!RyU+0K{kOf>eutG?;2^va2WX;|xHAAhwix4r&yxy&VPs%e&9)xCU$YyearIwjR$ zDTX1^jTObF+ff5c1D)o~Uro{p)8yl?3+M~srvzO;Ruh>+ycw~wOIYBwc|vd@H0BhI zw~ND0F|NViPnSOG{G;UGmJu5S_3i=(O(zw{yoFucb`!17g7-Vr^dg}pRq*y0&+E8} z&PZ^-`jCdbNjla`|8EPFe*J%2fH}@IQZh#>-ybY=bw=$cFzv$kRi){eFTz{QGty25 z$js_$^JR1YI<6E@p4?${ShliiS!<9`uNo~epOM^J5DEYOm0;bs3#gqY9~$!5qa{z;!y44tym1Mer@vOvoKxtyQ4y@gwS=$Cv)XWHBL zMTQ2DVy_JkdzDsxOV*Vi+sUrQW0g@QAWT7>-qfoYV6NGPj9u8-g^P8NpfD7p7xu{j zG}NLj=UXU6P)ws@Atq4>WH37xV)i|DHXUrpGWQaDLRI=BLwga@j~>(>_ZS0&#i;jAL3w8#or+kRKq@Ge8ui~rZ-#)8v&=@T z3a45AkPqXGyn=6YZQ^)s+Rl?`k9!uEH+tOg)=t%Ui%u!8fm;f*79vBx`P?s_n(FETS=MVH@ z0>Q+xV_$i!hVROuoQeh$<-+055&uayHlq#vUA3(LAB+|jOQ?v=a-vqboqd8hd3X0t z)!4&=$o$R*o!jxvJ3D7B^O%4DavZ%wa16}#5wpMJ#Q&bKg6`%ve*Npp#9cU1^^w_J zPu{tkw|ui{2RUphHDwY^{f-|0!{L0Vx71C_@u$al2Ym=1-6R87SH4_$vA0XU=)Rf3 zrt97I*!prleIGha_7g+DM0;Xaq@vhx%Sh_;cf>4gib1Rq#3Y)WT!{g)^UJXIgd+H}aRe1TTn->eEb{0h zRs(8RBTlsrw4h(Ym|ov_8LRFYm{RuYgg(I#lL-99Ung2TVlxwj`{))GihWus^-GKP zBvpiz0EQ20ruD0Pjm-7mfr9c)>D&(+oMb}QHASzVUG7$R~Q~n~km=H4Qli024kE;LH>0c7g)VtCmxwIqzIVD16IZBA%M1%-`yS8?C3I=Mh^n)l-R$Nq%c%+*^+xzdqoV z7Z}ox&IDt++f|VW;qdYsI8^#S)3tj-zS6{EK^zYK}KegXvYKe$j8u79E)rCiji8VH_ zPq;$ava7xHP6e=zDBSjb+k;~C?b*M|dYhkZL9RvB7KxWDt-3{`;tv)`{U{_Qd9yDQxjKL& zV@p@dO>lTY-0eo~n~cyt9uD5v5=Y1h?nhV?CM_B>3hFQv*Jp!rbJ^OG)HKiti-k=J zHaV8C_70^QWQny+qApygRu~Pex{D8aQ+trB?&;|xI7Lz}@yQ8a9^Ihw9#*ph<;htZ zQ z%5s#v?8nwJ83&}azrhfX3+^C)9<=J32%9SX`7VknbDaOCx`xA*jj(s z7&o@$p}9Z)eU7wDiE{hw9JS20@TZoXcy`e48kn_u#LSajuH{YoS%&GS8Ko&f!XP$@ z7VMLMrdxBWFh5N%$Di;Cu-5@cZwg)52=4$J8+^wto-)|O4boXra&S}#o0VS!Ul3!7 zrV}>nSSfA|C$`Vj-XPspiJOR|!TwAejL%H5;{-|yA2_-BFr_-cZHlbzbaYABx$31NCOrHQSx2c>VDAkmI(eD`o+%t)iHb$Z z@#aBL8RsPPn^v8rNt$K5^IOz=l{zWFU+HZg!A}3`7ht=63y`T!Wo9X38$u9qOp@T< z>jE(5ypJg=Dx|f{yI4MF^3VVA6)cyU_Z{N@_hoY6d6_SLq@Ab8`Nt!(lOo3Sr;a;IT{*Ps2JwNpxNa7zb?K6w2 z$2PP)cO;cVUPTB@t7_%eV$kqRgumpEmSrjQ1?02eiJbw~CBMz?HEq~(>3nZ!|G|t9 z1)}4YFOC>9tB=m!ZV%Y#c*gr)iN)z*lIp=yZ{+FKj*}6y;i-ma z46I5g!T~UT_~)OWHnn&F=)+gWr<5^$bC~oPZV)4ld_?&*1MF;RMige-$)1E7g1?T0 z_TODyT%=unYPK0$0NFCnAJJgD^fTv6yZu_N3o8XfzRPy%1^;*1)3D(J1`AL?JmQ8=O6<|}J|XD)Jq^Upk?pSVzY6!bpYD+U z^Lf_2u(iJ@A&bMhhM|*IPu^J5DN8@?#HC-FUW(pi%<3DE|s6ty{O>wzd}W;q4GF3Ib-mNcvVe3G|(E5*=NOTZU+2V7_m05=AZcF!^W6 zf6M}Si<<$oksyP>%x^#9(h4o{vzFy72C}4#bsLaQ{qi|7`|P7LI@$37^{Bz7a7uZ$ z-5s{;f}Isq2VTK+sOhMtIZH@KjE_@K%fht%1v48QOO{UOLt_-LtXU%Mm-RA8qUSw& zVcV4C0a+l9_w8k*@^KkxKpPj(Jwn&0PS5f)rn8tjb_Aku>Ub`d=zEjx4}SRK=_ z=O$&d#<*leyqRNs6X$Cftc7s9(9;wl#9Rq0ufx9}$3$kMZ6nO{QO(~Ai} zSTES^UZ*+IH|Mw_XfG(9o*_Y^K+Qvg_ED3`8VG{HJ#@#vFR8fm2d?^}wL6z;L)~hI z)C$*HU!WT2(Pffo9k%Vv%zHW9GUC+jLq7X%?F&?X+vez`Wu(RXFB4_bXT zx8~a%V(kQAWUgX`q+O7Zma5S;PIPP8mE_V8_rNu0c4_ux{j$dB@SRv~&w)~$6BnuX zw}=4SsNyubB21<%g^%Ezn$qNJ6w12F5IgzIjZGm9woJA(1|TCadTQtXg&Hni)-^oj z+j+`&W7tv}5LiH6%@(Kl_}t=qzrST5PER2Z!&*Xu<^eNrx#X_dVz2#4%R1vE~zc0TgBXuaa?&I5PCY$%Ey zW7w6Z$0z$dmPe{F-f()9Xe20P%0;}6eKxFc`33vNSyrsVGjl=iI6KI(8{0a%z&`g) z6*(_aiSZl`cPqUJmWS)fU0)PbTw1tk#vxp@jAX^m@TO#svg&;l`GUs*ng?NME`UT} zPJ>yAu)aCoX3j9dK=OJ$WPJq;?#Da5zY!zt8c9--3TpTS>-;5++ruNg)a_RoQhnFI z;(lHnbqd^`JQ01o+NtUwDF*skhwne-smPITDsc?j%5s$rMIY(?NOdaLFVIFXsdiWJ zgZp@*g>^90>Y4ripZ?;E3o?I2%rFUIb*hS?PT-Dn0RAM{SIbAA5OJoC*!Y7b_Lacx zV7n^Y`plnS2CSFn?}mpmvzB@(+L2P#cq| z4F!5R#h~(e#{Dc&Pn_F3uQ6%6EB+b_+`{uqhur$g&-Cvy=QLLG_qT>*QG!K~%8Tx;tyv*5p-v$8EgvHs% zOIIrJmk>kw7SI+Q!wa0F&c=R>PS+~!B1}3w+>u67fW6^0B(i}$_se9|a_Fh49#ymG zw~DkKRd>@x<2$cGu^sXoLT# z1m^(b3z~a(TUk%zIRhIynEYG6Ptmv3^DmPf4NQt8t`i>&jTaZkEha4MA3k;plD;hp zdh6MF61Kq(<#YAsHEQK5kSg#D1B1#tj*}2&KRVARo{7K?j0`OAC43nrEpyMzXjXa@ z5kgkKxe-Fqo$FjU)AmTH*42(4HQSI5cYiQiC@!lLdEnufv?FA3QR63ze0C0a^!GGq zKxzumUsO$_PS?U0zMCREYaU4ezUu}>hKlsyP#tE0J@<*7>_WCFp`a`6tjc?p++utw z4f8@TC4J$Y*Nw7BH3_|H8ykbP3%N}vd?Ulkg>NL`He^1V5p}y?VfXHlp0@|<0DFN4 zgzSHqJ6sKT2Qze5q&PpU3BMBX-d8P?PS^BMPUq8~yF8sdo_jPD^AbN9nmWTveqGt^ z+5r?eB`mwNUWnA^hx*9>{Ce&gcM7ZyO8v$7eca7mQX-O|Ri_CK6IdB&w7~T~-pKy3=|JU2N~=@h zIjB&P?mZ$>dj1wM!+ySt^s4_#M|joq*Y+&$xfCM-)y@YUe;jY~}suq%*p;5+4>{N?&?=&nPb~~Uxw=k#$hYFm^4=0?}%>B5pz9`{( zwPR0Ds7Jf&$=-JBeY-PR*o{!z?jAh!=(g;i2`r} zGHuX0B}4-T393r!KrjgP+?ktkpBe;)1|kinX_U$%>V?}kgxM_5Ff$1alL%KWXzB#h z6of%YfP#Dhv$&B$i}lY8YK$_ZC-)DP!X1?ipzQ>h5FD-o&i7^s}G z%&6l0;?rBw+4&PLiRoEEdkeyoX2DU;l0gML$NbfUF4bqmsvYkh2;F(~)zOr6^V=uu z8y5juv46Q*6;St-lcgk)Y$Uy6D;9K|bLW_@%6Xd*zlZrwN<~ov+?NsJ5viYc#RmYn zCJl+;7_9LI5#xC;XoytS`D<~6X;vvwI5_wEVoBb|pxcS9{tB9@RC8!I+apc0xRR}2 zqVX1xLM)Ol@CtjH?3hLi`lBfh8;SU3RL3i{+w8VPNBStsrWnq_Q5QD^nqTRj}qt?MdIkD?{zT% zopw@C%KG9=%}Rc`(L@ar&{E~^;#_bSj{2G8U+Sz|0kRTrd>D)W#c~BUzxzx-=|RN& zYTZT6a^^kmPumKM50|WYeykaZr*wz?6Jq^0IE=2kxGGMt4xNNEjYMJrmcEL9aACdr zu%GddUiTO=2xORiyVYq~FN;#YS}U6VTTl|A_lH+~*UIqcPQXZXuBlJL>Zy^XN(Gbg z=5f7+jo9*5AI|Cy1K#{%!*7B}my%y~&Jn@e${2TBBo)ge5Z}Jd6^c=n9doVv3r-G3 z=H6q@Q(bBR)35|c*{A;3#Q=Y9hD_6|n#@cRr`b0$?MY#sehV1?)8 zA)ND(2nlacIz{k4aPz;&wNZJE%r?bz=L@Y_WqMyNfM3VF53~_f4QSpwQ51<>CF@-boh@j3JTo+|CxU3IAaV)hS59+ciQ zP5Zjv!AL*)95BEnrOYM&p_tpP2j`tyLT4Lz4$fikgv=-$lrBGM(A3{Nu_qM;4~?oy ze+kC)9HvBML#~2}-Glhe;=K8HY`oz1!j~A&?KETN@BcI?t}OPeX?@qal&P~&L#7!Q zE;W$h&CFZ1mxUhY1ugH>)ZXMs|4csFct~u#{D8@)G=}sL{g-vGwD_O9SxWC(5m~SI zfX(Xv6)z}4jppsW{V>)SJaw}q#FmRe-;AxD!*x|AleA|e93PPmCR|k=A1V_jX&;5=!Rgwf7h@nqO!& zpzw}7KW5A8a6{>Rs{xQDTJ*v)Z#ipAoa!4^=iSi$cxUDybFC-^zbaG}H7Hnn^hd8t=y78l1N znlanJ0EC{~S8b3pV+4$%VrKm71%K+NsjzN8ZWNW_{dHTmKzR1uHX2l(|s}mpd*r3=nC@;88y}org71P5BUi*W3&rVJ|m_H zCTC)`_@8$sS@xd*^}-qu-&jd1NikdBJQp{>n6h@?)nt8vdwAw!kJ7CV$8Ulwvv}9H ztz@h(q4Rv`UsV0Eh8EfeP1uCB!lH}Vla?2q)O`5OQ|daW}4=+`p|OYK)9 z8vYh@C_LPM)4Jk`E9dn$-zotXNF6DRRkwOf5PiW26{OvqJvwt_;9%Wu)&v)Pmox{; zw?d-vTtuK?)$l!1`i&44-|Z2W{#B}$AYRV>g0B15=EF5_xzP^Mb^)NMob+&QSUcA% z?k_901$L!_+SIx_P-3-ekSaV86BR8yGl|o=O4fTh`PTkihB{*`I?L>y<*B;g9Us3| z5%Hs~dZ0cfWgnM27Vs6coH{!f#)6%q34Mu=U#2{_=|8~bCva37#0~3HTx(mmsOGq@ z`!!qrs<`0*w}YR4GM2#f4jl-7;dxyWDBm>uuG`h;Bce^Opuf2FB=VXzmrM@lZpYDs z_KH~#W3m0Pn%_W56(F>wS+s4FXhc&o=z0Ouv90&LiK;UxtZb9n{N+{)^%iB4!a#PVpHpZPt@Mfu_W1|$@nrQKbUdcN! zMTc)u%b4d4j{>$*5<)s)5Dlpn>*`bxl!5>WiDZi>S*y8~MEpT6zY11iBKYuy`zGEh zJy+IrM9J5zEhgb)4cTG6LJ=mNN4q20{iWk^$xRq^{ADwj7T8_alG)Fg3QMTd$DaU2 zI+s6>r>XcjpZn|aiHr|gV*rP3Iy`z6{2P9Flljms@t_UVU{1g09O1O0SH;jH?i{5k zt9J2&^vxH`{pww$iu-z3a?3dH9O>1TiL?hPbtu8*$7jdh+kh_ zInZ!?9p^hB1--$7dbUB!v)fW3--1#azTigS&)4U_!J%~!?)9?F1Eah^0=MTxYiuRj zLMlBHP;($0vs}*!4hm#Uv$F69i|w6&iYnkES?F&dCjrr`2%8AJh@;!p9$6IDk4>)K zINLW_`BuZ+F(mAYpwQr)OH<`;OW8SuWv0}%BCG-6Te{w?ZAS}Ps_5C2s65@!sv20TP@@bFovFTD^Yi2=N@dib9Tx-ZlfenByF=ygNdrpN6HsLRUOD7yHZ)(5A3yFm&op!)efj`%;Q!NS2;Ej@5$(HQu zvTz2CP|cXh{O&{(p4V%7o87~-1w?KK0>Pp8D2sZk6{m)9`+K$l!UmRC6EDv0q7xUZ zJ`GlXIrDN$%h5M62Tx(YY+U55xC^c~Alc(fCy9Tyh|e9@zO@vmo$$e@Rb`BGH|N0S zg=teYo(H5K{0}5#uX@_;_Oe_s~DBUZN9bGANmh8 zO~IR*Z?8Ek3av$#~U6s?@wIB4D^$oS&l9p{z>DP$2w*uPv)E7X9wYHyMH2 z{>+G)U}0Eb67)c7RvOuWY104`a=^wpuhIzu_N!n;k+!m1z0>DnuZN!`Y6H@lJ2gyJ zP<4hj?zXR&EyOJdll|mgIFLI@{LyvxZg_Sj6FY$UaYkLi7K~fCL&HXGaCsa$<1h3S zb%p}MQb7lNrzQx&XNS#}Fdm;Ow(&32{k-ARfuIDJRh7=+!KGFQ{ z%`MHhw!Q3Z-aTjebw|otpv@%}_cqJwZuQ;EX||kKI|EJfs0s+pspZL}C(UP19r|JY zH-`90a(}z4khJ*K=-VWkJtT!3=Cj6!$F(W-OS&2zD+r%JbM~*k37v$BL)B^M(caNU zx$5dAhR#o(&wkZvMLS0Nv`Aj|z+8y%hAq@-FbJOJT9JQ(?*qTJp%qX@( z;QX~Eh52}!?uY~hMn&1YT`gxEDvKMsSkippC+g*Fr@MQ~|3FiwaeOv#Z7c0a%N_wa zZ~rSvMuo4%*3)0*jm>fTNn@nVC*PLo-(PLyfh=D`q;IWu7H-wn{q!C5d((ei=AIjM zXjaGl5@0l-u;(8nZ$|$pZT1u46l6in5nKB+A1nHFjz65rI|$3m z3RQset39e{u0PwHxZo^cjn!*s2G2Utx(o*TfH!ev(~1VuZSE*tTgHpJ_z zjyim}F~AN-E3Gfs;l`4|>?E6dmb7o1aHW@cO#0?m!~}H9v-#MBBd>}N0!?B$7RfVe z+q5$Snig}r0u-HA$fs+VbXMVg>?=$Luj=x4#X)Y)KV(@W>{O<2DlIkDsBQ=knknv2 zv@0<7 z@~c&fTHq;IAjB|c*r|CLt?-v2Yv6Br^wv^ZO88X%M)C1p zv$0B$+tn{=Z#y9D$qLwOroR8d&9NPQc*g_qAEt`y?+*UR(DU$bzl@W1V$LQY-@W{t zGFaE!Fz~U$sW~8kIo+^Ew%g~UvqSMp;kPe`nDUiu*0Xs#YTle%bi8xuJS{LjZF!fX zC?QE2(s*SJ=p6QLuXJ<+sZMLaY{P--nVtG|7yR8)og7>3WY<9hwpDdEfON?Q}C8`{`?z?l9_Kp@^?cAv7JW0mvlt+4GB~Z2QdEDD%7`&t6kF$b(9dnD>{VPw`&fl)D z7?8RKmER492C}WH2j7e=ob7jOAssA(`rf@*DDGRzyRFkNXks7_1e8$DFKc(a)|jnd zPkWSdkzw8P{H592kH(G+Jnf_M?z=G`o9Z+edB-5(2#-T=ALk>XmPiv&j5zjG3nfoR zv!5=i1+iDT^HoL6VBz3Xn_ji9S|@%`RxvK7PpdOI?9JQDz9Cm3))9G5b?2?9p@l^w=jvtp{S7$ADk?55^ssW z{PJ^8yFOtu*e%Xw>w2`cHkQ#RaIj$Ka9Qtf^o4ZXV4vIB%Uf*dx%EL3iTyFqqWMqjE{JS~p>@t+e@eB@8mfQ=RIPcFM04jaqDx=6@rg>nAEjhPJI?CNZIBtTGGV-zLI5(n4N@^#YpvelQEsKSoZyza zZ<3cJQOdBB#~z$`HzP)G@`9BpKjgd%GMjYfMB4Q7blB(7NXDt5Nox)#KK^r%7i~U9 zyW!*Z#j0;U<8Arcg4jW6XN_vur}G|R*jNf?=yT;r0i|9FK5-}FPhEO=)&r#Qk{)p_ zdMIBHpj-a*xhnA3zps5vT=sFAdc_h^zd??J6LBn)IfdnH~1g^_?T{u3pHfF^7+HQmG5R z)B7&5a+?nBLlY3M{`qOvOY(fk{p4ehj|#lOI$mo^7PfzQeDZ&&hMInJIlb|ftJV57 zf8OkCyREd_s{uKA`{AMwEIk`o_b)CrYqy?RBKNITvV2cV#v|VMmyB|{&wpc?=to3m zW!0YZLh7?8E?BQLs3tj;;e#NKVR3FsdT+PYt!ZaHRYze1!^^i0QL}E806W zQ=VFQDTWyYu&f)F>SqYb857*hi)-Zx@r+I-=5lS7B%Qn-;n}jMq`|Xw$@kHC3-cBo z@=34_bm(Gc{KvF|NBmZE;1@1THz&=V**6FL&`)_)B#p-(UD=z{9WA}Q(soLiv(#4p zM8lvd9#>qW3oj4fr@fvz1}{;{j2iMs1`AJCw6DBzooM%bGWhoPUmVk4cmh)f4RJUb z+hcjT=J!mUDd+@xPuKaohZ{auTa|Vl508(vYMZqjxvN$({LD!~`~Ur$+QpP9bGq8y zx$s`PZMnvSb+7dmtoVi)vO1z_IUmbPXwh~_wa{AeKEssNE1Ir0F8tYqC024{Cfbxs z65_WjY6%b7vXNz{mi!|U1=wYER+op%QS{Wv3f55(_F+I*T^{n~IxwLlW(_%{>6`Oj zv~TGRVs()_+37SWTu)6ec<4Dj6I2-DAuo)Guy)ggStqb?Ba-?R@{ZG@x^vZkb{&S& zkA^+)+_Umy2d?<*k+czsYqZf(PvqE%gMv2_c*gAs@cR5@!r;_m>p{|ezqo*F3MbWC zlXKw6%a|(_{s8!nlq^%o4-s0WgbORI;eZ}%!J+h*Z2`~}%eRm)K5~ zZE~;GuMZprK&xtgk_HL=Z{i(sn#MHDc{h6+*e`@IO20cye~!=cQ1Gc+k@nx9>#YTq z>A-ioiq;I6Tg#Iy5+qlshkwBUhm1Ip(PdzKX`%+l8>*l$Z>Ap-_V8T%X|?d%i22q5 zJ=1<9T&&xp(iB&DcEd;u?!%UM z(rX84)jkxkqu_H%0!!K%$=1?pNh*>m64mE$CHI!O)1U@p^VwKqQx3eY*@1shQ%U|4 z`9q{#&P5!$zaAGUcSpN9DH+pzAW7f*A3+1R1>?kImcqtfX{nfNyMPCPEFt0MyP z8rf@}#k-jb>6$}1k$B3r!pZg<7xbdNISw)CUwt0U#U$41C+{AUdLt_f=kH4Ue9 z+I4r@FJA#9{PkRY%TBH3amJUunL%pMg#-&>Ap-WldV`08w!f72+B`ZV|uMSsyNtRzO!hm``N zc8@c!ckcE8#O(1zz4dR0a7#yh*Cu^;xE%}wmVGg@eV^IFTk*fIzhfcXRr@if`T})n z|C>ubnAvy^z_kuoDH(TAW-Q(F&d&fZdz4!L&>x#)1cC%_RN!GxQetjHa)w=BozqtU z1yw>K)11G(@q7QIpR5oIwW*-zr^)o|q9Banjy6x;l&cT~(w5iSkq1?8YIDC5+pAvU zvq4dS&F6nh^$e8CNB7VN(q*LPn{&#Ize_!>snk$O<;r73o9)m)>ZhfU_*nvQ^ z<-*u=M2M$i!gMTjx?FLuK{kfbuog*WPk;glqUq2qQ$Zb>84UF3>1*?bL4CJ+ zKrHQ3nF2n5PUtp>cLQ{1md6Ke8{7#2_e{ph`?> zm{R6_wjEF%r8XNR%!7aa?$rIrHpNb)n3CZN!S^ZEiQzTL1Ts98h!2I*BM|;33d!28 zbl;PIO!!T8X3EDaHLh_kn=vF{VD}|UU)%m?pRL1M9x}HDW9uVbOa1YY4e_3;ui8Ds zQmbFy-XOM6cafyzS^amj)V1ZJ}hw+Bo7Q!eCC9B4&^4 zNsQi}u%YVQ@RJY19&c7|SwIKHuHUrhL}%&WcNC*%0E+Ms5d|ANeXgg5b9w(T*!R7P zn$oIDh7*&em6qs@*=#*nsQ>?yWa&d}&1ZhH7yk!`xM6#NG7226xyL9ew(*U!y2YuI2^f&oydPeW0QMNKX?oW2mrrN7cz?)1^G?RR&rJMuQ< zx!5F1V1obSE|sPr5koCvOU?spVQ~uhDVeZ$>yL7GBS%3jAic0&E^1y$gPgs&;&YRA zezJa`-__vTeQxC9zWk)bt6o2V&L;(kWOm+SrOZ0L&uCst=^3iUmE36$*p`avTfY*B zTBcEIiyd|~0o`yhv4WDWz^U1jL5!e68?J___)y0|ioxwzAKAqc4O!SBAtA;12JIgv zCjXm>HzuXz%icMEZ6b|!ICQE75<Nc$ zZsRKra228+cy;5ET=no&3XTslSeo-{U;}!Wbbg3U8^{0 zn@?9U&A+k(!{GPV6m;J-O(enve!q2lfE%PME=dvmA%HL8^>hj$ocop;*)@@|^e&nH6%}NX zXAmks2~)wxbo`M$P)*iN%ZIu?NCX7+z<2?qr%hO zrMNq|L(!m_L-edn9$9v3M*`Rr9a7n&RT5 zptY-v()ghH6J~BQS_bldq045;W&qtYI4!UJq3ikD^(#}!0q~m_TJ4++nnZe1r|P2h z(rLvV3QK~vLt|!?M*40=6T;}7uER0RvFCZNM$9$d)S+%1?lCBAcOSH?2W5P=W@tYB z7;4s2(KWBq4f)92Ct+6#vNp_7TL`e;asV$|5q=dw*H6$WIi5QD>_j%9zocDdt`R8}e=luTgr*-FE z>$>jiTHp0u-xX$Jx25&1?BGnta>1JL){2K)Me$y_BcJbOvvy{;)tu*ydb|3yiF|VT z*zm|OcQlNcnjo*|l|FIdR=D`wyLXZj-$&2&eRYm%5!vI-ez5GPAG$mM#?M$Z zfsgDs%}5pDEUFyT)|`zj`((9L-@BfF{hOh^(@yB-8(SYo4bIeEyWBn=JhpkSOP{CD zE9_Q;`+}F+;PYC57Rj)R{yXFN4UyQ3w93$l5t93}ErdlUNiNZ?7q~n37`83}ZJOKr zIrClQ5^!#`ksN+`Jk2J~S$4k$Q|tor@LUIaLcX=Mx6-&+=p2~{ck7QL%g>A}8k8W@ zRZg`&Xh~Tf98|bF87ri>%p8xhC0GfU*{_C=njr4Radx*aTHkStmVlIT3!g;Ky1lcz z(gdEo>+3N6+9)jg&_;Dq9_ex9GV^m68M?nvvLEdEta4vHTuS1tXp{ycOqZBuwr`!@ zQ`tn@UD=jfe!Kkk=l3&nt8t(DnqItj+`EDIMMQQI5P~xx_8?(D1xDy9QtX&ZC>6G! zxbns(IW@DBv+rFf$IaUIS>KJSY=v8Zr2>#Yx=?9BoF7>c=a_dFS2~k(6kXxHI@Wm0 zi5~W4M!|PZeN*U(2TdLnklWZp*RLk5{5gkXom7u!*`59O4n{|-LN1>jRe@zW9n_*e ztI=%KnzL`qe?m`t<UY(Zue6gVZ8y&Wh`bVBOG|UWFKCw&lPV_y4-HZ;65OnDxhr)g){pK|1{XrkZPOp z#xh=8LzWJHw-23dQA0Xk_ITCduUkqi3T!bcoc&x7Vl9_LsngVrF5ptj$0G8=7~F@;f8~-0fdjj=72ouW4B&Q zr51PZ42D=;z9OKKI8SuU&gAy|^qF5gArMxr9J|D$3+}=m{EX0hqn(~dxb?N2J~6dU#sAd^$)*aq2>xb`V;w-W<~UKExr6*GZqu(mM@JY^%KOHeFGJp# z4+i?P@ZVh?-nov$9ZbH6A)U`kgJ5EoroI=>fY67BqA_^~QoS#Z=w$dSRF_

GC@7 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 B1 - A2 --> B1 - A3 --> B1 - A4 --> B1 - A5 --> B2 -``` - -### 手动压缩 - -随时输入 `/compact`,强制压缩所有当前消息,不看阈值。 - -### 摘要里会留什么? - -| 内容 | 说的是啥 | 例子 | -|-------|------------|-------------------------| -| 目标 | 用户想干什么 | "搞一个登录系统" | -| 约束和偏好 | 用户提的要求 | "用 TypeScript,不要框架" | -| 进展 | 做到哪了 | "登录接口好了,注册还在写" | -| 关键决策 | 定了什么、为什么 | "选 JWT 不选 Session,要无状态" | -| 下一步 | 接下来干嘛 | "做密码重置" | -| 关键上下文 | 文件名、函数名、报错 | "主文件 src/auth.ts" | diff --git a/docs/contribution.md b/docs/contribution.md deleted file mode 100644 index 079dca68..00000000 --- a/docs/contribution.md +++ /dev/null @@ -1,66 +0,0 @@ -# Contribute to ReMe -Our community thrives on the diverse ideas and contributions of its members. Whether you're fixing a bug, adding a new feature, improving the documentation, or adding examples, your help is welcome. Here's how you can contribute: -## Report Bugs and Ask For New Features? -Did you find a bug or have a feature request? Please first check the issue tracker to see if it has already been reported. If not, feel free to open a new issue. Include as much detail as possible: -- A descriptive title -- Clear description of the issue -- Steps to reproduce the problem -- Version of the ReMe you are using -- Any relevant code snippets or error messages -## Contribute to Codebase -### Fork and Clone the Repository -To work on an issue or a new feature, start by forking the ReMe repository and then cloning your fork locally. -```bash -git clone https://github.com/your-username/ReMe.git -cd ReMe -``` -### Create a New Branch -Create a new branch for your work. This helps keep proposed changes organized and separate from the `main` branch. -```bash -git checkout -b your-feature-branch-name -``` -### Making Changes -With your new branch checked out, you can now make your changes to the code. Remember to keep your changes as focused as possible. If you're addressing multiple issues or features, it's better to create separate branches and pull requests for each. - -### Set Up Pre-commit Hooks -Before committing your changes, you should set up pre-commit hooks to ensure code quality and consistency. Pre-commit hooks will automatically check your code for common issues and format it according to the project's standards. - -**Install pre-commit:** -```bash -pip install pre-commit -``` - -**Install the git hooks:** -```bash -pre-commit install -``` - -**Run pre-commit manually (optional):** -If you want to run pre-commit checks on all files before committing, you can run: -```bash -pre-commit run --all-files -``` - -After installation, pre-commit will automatically run on `git commit` to check your code. The hooks will check for: -- Code syntax and AST validation -- YAML, XML, TOML, and JSON format validation -- Trailing whitespace -- Code formatting (Black) -- Code style (Flake8) -- Code quality (Pylint) -- Package metadata (Pyroma) - -If any checks fail, please fix the issues before committing. - -### Commit Your Changes -Once you've made your changes, it's time to commit them. Write clear and concise commit messages that explain your changes. -```bash -git add -A -git commit -m "A brief description of the changes" -``` - -### Submit a Pull Request -When you're ready for feedback, submit a pull request to the ReMe `main` branch. In your pull request description, explain the changes you've made and any other relevant context. -We will review your pull request. This process might involve some discussion, additional changes on your part, or both. -### Code Review -Wait for us to review your pull request. We may suggest some changes or improvements. Keep an eye on your GitHub notifications and be responsive to any feedback. \ No newline at end of file diff --git a/docs/cookbook/experiment_overview.md b/docs/cookbook/experiment_overview.md deleted file mode 100644 index a95b06e4..00000000 --- a/docs/cookbook/experiment_overview.md +++ /dev/null @@ -1,56 +0,0 @@ -# Experiement Overview - -### 🌍 [Appworld Experiment](appworld/quickstart.md) - -We tested ReMe on Appworld using qwen3-8b: - -| Method | pass@1 | pass@2 | pass@4 | -|--------------|-------------------|-------------------|-------------------| -| without ReMe | 0.083 | 0.140 | 0.228 | -| with ReMe | 0.109 **(+2.6%)** | 0.175 **(+3.5%)** | 0.281 **(+5.3%)** | - -Pass@K measures the probability that at least one of the K generated samples successfully completes the task ( -score=1). -The current experiment uses an internal AppWorld environment, which may have slight differences. - -You can find more details on reproducing the experiment in [quickstart.md](appworld/quickstart.md). - -### 🧊 [Frozenlake Experiment](frozenlake/quickstart.md) - -| without ReMe | with ReMe | -|:--------------------------------------------------------------------------------------------------:|:--------------------------------------------------------------------------------------------------:| -|

    GIF 1

    |

    GIF 2

    | - -We tested on 100 random frozenlake maps using qwen3-8b: - -| Method | pass rate | -|--------------|------------------| -| without ReMe | 0.66 | -| with ReMe | 0.72 **(+6.0%)** | - -You can find more details on reproducing the experiment in [quickstart.md](frozenlake/quickstart.md). - -### 🔧 [BFCL-V3 Experiment](bfcl/quickstart.md) - -We tested ReMe on BFCL-V3 multi-turn-base (randomly split 50train/150val) using qwen3-8b: - -| Method | pass@1 | pass@2 | pass@4 | -|--------------|---------------------|---------------------|---------------------| -| without ReMe | 0.2472 | 0.2733 | 0.2922 | -| with ReMe | 0.3061 **(+5.89%)** | 0.3500 **(+7.67%)** | 0.3888 **(+9.66%)** | - -### 🛠️ [Tool Memory Benchmark](../tool_memory/tool_bench.md) - -We evaluated Tool Memory effectiveness using a controlled benchmark with three mock search tools using Qwen3-30B-Instruct: - -| Scenario | Avg Score | Improvement | -|------------------------|-----------|-------------| -| Train (No Memory) | 0.650 | - | -| Test (No Memory) | 0.672 | Baseline | -| **Test (With Memory)** | **0.772** | **+14.88%** | - -**Key Findings:** -- Tool Memory enables data-driven tool selection based on historical performance -- Success rates improved by ~15% with learned parameter configurations - -You can find more details in [tool_bench.md](../tool_memory/tool_bench.md) and the implementation at [run_reme_tool_bench.py](https://github.com/agentscope-ai/ReMe/tree/main/cookbook/tool_memory/run_reme_tool_bench.py). diff --git a/docs/cookbook/faq.md b/docs/cookbook/faq.md deleted file mode 100644 index 66603e37..00000000 --- a/docs/cookbook/faq.md +++ /dev/null @@ -1,69 +0,0 @@ -# Frequently Asked Questions -This document provides answers to frequently asked questions about our paper "[Remember Me, Refine Me: A Dynamic Procedural Memory Framework for Experience-Driven Agent Evolution](https://arxiv.org/pdf/2512.10696)". - -## Reproduction Questions -### 1. experimental configuration - -**Example:** Qwen3-8B + AppWorld -**Launch the ReMe service:** -```bash -reme2 \ - backend=http \ - http.port=8002 \ - llms.default.model_name=qwen3-8b \ - embedding_models.default.model_name=text-embedding-v4 \ - vector_stores.default.backend=es \ - vector_stores.default.hosts=http://xx.yy.zz.mm:nn -``` -**Evaluation Code:** [run_appworld.py](https://github.com/agentscope-ai/ReMe/blob/main/benchmark/appworld/run_appworld.py) with the following parameters -|Experimental Settings|No Memory |ReMe (fixed) |ReMe (dynamic)| -|---|---|---|---| -|max_workers|16|16|16| -|batch_size|8|8|8| -|num_runs|4|4|1| -|num_trials|1|1|3| -|model_name|"qwen3-8b"|"qwen3-8b"|"qwen3-8b"| -|use_memory| False| True|True| -|use_memory_addition|False|False|True| -|use_memory_deletion|False|False|True| -|memory_base_url|""|"http://0.0.0.0:8002/"|"http://0.0.0.0:8002/"| -|load_file_path|""|[appworld_qwen3_8b.jsonl](https://github.com/agentscope-ai/ReMe/tree/main/docs/library/paper_data/task/appworld_qwen3_8b.jsonl)|[appworld_qwen3_8b.jsonl](https://github.com/agentscope-ai/ReMe/tree/main/docs/library/paper_data/task/appworld_qwen3_8b.jsonl)| - -For parameter meanings, you can refer to [docs/cookbook/appworld](https://github.com/zouyingcao/ReMe/blob/main/docs/cookbook/appworld/quickstart.md) . - -> [!NOTE] -> - Qwen3 thinking mode is activated for BFCL-V3 tasks and disabled for AppWorld tasks. -> - In ReMe(fixed) setting, there is no need to restart the ReMe service at each run since the experience pool is fixed. However, in ReMe(dynamic) setting, we need run separately to ensure consistent initial state. That is to say, to calculate Pass@4, you need 4 independent runs with restarting ReMe service and setting `num_runs=1` in each run. - -### 2. about experience pool initialization -Taking Appworld as an example, you can refer to issues [#55](https://github.com/agentscope-ai/ReMe/issues/55), [#58](https://github.com/agentscope-ai/ReMe/issues/58). To reproduce the results in our paper, you can use our constructed memory data in [docs/library/paper_data](https://github.com/agentscope-ai/ReMe/tree/main/docs/library/paper_data/task). - -### 3. evaluation metrics -- In our AppWorld experiments, we report Task Goal Completion (TGC) metric (claimed in Appendix A of our [paper](https://arxiv.org/pdf/2512.10696)), which measures percentage of tasks for which the agent passes all evaluation tests. [`after_score`](https://github.com/agentscope-ai/ReMe/blob/main/benchmark/appworld/appworld_react_agent.py#L218) is the percentage of tests passed for per task. To calculate TGC, only `after_score=1` means task completion. Therefore, we use threshold=1 in [run_exp_statistic.py](https://github.com/agentscope-ai/ReMe/blob/main/benchmark/appworld/run_exp_statistic.py#L43) to get Pass@k. -- In our paper, `Avg@4` is the `Pass@1` performance averaged over 4 independent runs. For simplicity, we organize the total collected 4 trajectories in a single file to calculate Pass@1 and Pass@4 together. Then, the results of Pass@1 and Avg@4 are equivalent. - - -### 4. reproduce baselines -- For Qwen3-series No-Memory performance on AppWorld, you can refer to issue [#49](https://github.com/agentscope-ai/ReMe/issues/49). -- About A-mem and LangMem code, please see [#67](https://github.com/agentscope-ai/ReMe/issues/67). - -## Environment Setup -### 1. BFCL-V3 code version -We use the BFCL GitHub repository with commit_id=[ea13468](https://github.com/ShishirPatil/gorilla/commit/ea13468e4423454d0c213704fb87cf7cb3990433) in our experiments. - -### 2. preprocess BFCL-V3 multi_turn_base data -Before running the experiments, you need to preprocess the BFCL-V3 data using this [script](https://github.com/agentscope-ai/ReMe/blob/main/benchmark/bfcl/preprocess.py) to get the suitable data format. Then, we randomly split the multi-turn-base data into train (50) and test (150) sets using [split_into_trainval.py](https://github.com/agentscope-ai/ReMe/blob/main/benchmark/bfcl/split_into_trainval.py) (our used split is [here](https://github.com/agentscope-ai/ReMe/issues/45#issuecomment-3890215360)). The training set is used to construct the initial experience pool and the remaining 150 testing tasks serve as the evaluation set. - -### 3. pydantic version issue when running Appworld -AppWorld depends on an older version of pydantic, which is why a separate environment is needed. If you encounter issues running the experiments, try `pip install appworld` to override the dependencies. - -### 4. AppWorld data not found -Ensure `appworld download data` completed successfully. - -## Technical Questions -### 1. about memory growth -See [#44](https://github.com/agentscope-ai/ReMe/issues/44). -### 2. code for Experience Refinement -See [#52](https://github.com/agentscope-ai/ReMe/issues/52). -### 3. context length issue with AppWorld -See [#81](https://github.com/agentscope-ai/ReMe/issues/81). diff --git a/docs/cookbook/frozenlake/quickstart.md b/docs/cookbook/frozenlake/quickstart.md deleted file mode 100644 index f6db28b0..00000000 --- a/docs/cookbook/frozenlake/quickstart.md +++ /dev/null @@ -1,168 +0,0 @@ ---- -jupytext: - formats: md:myst - text_representation: - extension: .md - format_name: myst - format_version: 0.13 - jupytext_version: 1.11.5 -kernelspec: - display_name: Python 3 - language: python - name: python3 ---- - -# FrozenLake -Experiment Quick Start Guide - -This guide helps you quickly set up and run FrozenLake experiments with ReMe integration. The FrozenLake experiment demonstrates how task memory can improve an agent's performance in a navigation task. - -## Environment Setup - -### 1. Clone the Repository - -```bash -git clone https://github.com/agentscope-ai/ReMe.git -cd ReMe/cookbook/frozenlake -``` - -### 2. FrozenLake Environment Setup - -Install Gymnasium for FrozenLake environment: - -```bash -pip install gymnasium -``` - -This will install: -- gymnasium - for the FrozenLake environment -- ray - for parallel execution -- openai - for LLM API access -- other dependencies - -### 3. Start ReMe Service - -If you haven't installed ReMe yet, follow these steps: -```bash -# Go back to the project root -cd ../.. - -# Create a virtual environment (optional) -conda create -p ./reme-env python==3.10 -conda activate ./reme-env - -# Install ReMe -pip install . -``` - -Launch the ReMe service to enable memory library functionality: - -```bash -reme \ - backend=http \ - http.port=8002 \ - llm.default.model_name=qwen-max-2025-01-25 \ - embedding_model.default.model_name=text-embedding-v4 \ - vector_store.default.backend=local -``` - -Add your api key for agent: -```bash -export OPENAI_API_KEY="xxx" -export OPENAI_BASE_URL="xxx" -``` - - -## Run Experiments - -### 1. Quick Test: Performance Evaluation Only (Default) - -Run the main experiment script to test agent performance using existing memory: - -```bash -cd cookbook/frozenlake -python run_frozenlake.py -``` - -**What this does:** -- Tests the agent on randomly generated FrozenLake maps -- Uses the default memory library (`frozenlake_no_slippery`) -- Evaluates performance with multiple runs for statistical significance -- Results are automatically saved to `./exp_result/` directory - -### 2. Advanced: Training + Testing (Memory Generation) - -To create new memories through training and then test performance: - -You can modify the experiment parameters directly in the `run_frozenlake.py` file. The main parameters are in the `main()` function: - -```{code-cell} -def main(): - experiment_name = "frozenlake_no_slippery" # Name of the experiment - max_workers = 4 # Number of parallel workers - training_runs = 4 # Runs per training map - num_training_maps = 50 # Number of maps for training - test_runs = 1 # Runs per test configuration - num_test_maps = 100 # Number of test maps - is_slippery = False # Enable slippery mode -``` - -Key parameters to consider: -- `experiment_name`: Used as the workspace ID for task memory -- `is_slippery`: When True, agent movement becomes stochastic (harder) -- `max_workers`: Increase for faster execution on multi-core systems - -### 3. View Experiment Results - -After running experiments, analyze the statistical results: - -```bash -python run_exp_statistic.py -``` - -**What this script does:** -- Processes all result files in `./exp_result/` -- Calculates success rates and performance metrics -- Generates a summary table showing performance comparisons -- Analyzes the effect of task memory on performance -- Saves results to `frozenlake_summary.csv` - -## Understanding the Implementation - -### Key Components - -1. **FrozenLakeReactAgent** (`frozenlake_react_agent.py`) - - Implements a ReAct agent that interacts with the FrozenLake environment - - Handles task memory retrieval and storage - - Uses LLM (via OpenAI API) for decision making - -2. **Experiment Runner** (`run_frozenlake.py`) - - Manages the overall experiment flow - - Handles training and testing phases - - Uses Ray for parallel execution - -3. **Map Manager** (`map_manager.py`) - - Generates and manages test maps - - Ensures consistent evaluation across experiments - -4. **Statistics Analyzer** (`run_exp_statistic.py`) - - Processes experiment results - - Calculates performance metrics - - Generates comparative analysis - -### Output Files - -- `./exp_result/*_training.jsonl`: Results from training phase -- `./exp_result/*_test_no_memory.jsonl`: Test results without task memory -- `./exp_result/*_test_with_memory.jsonl`: Test results with task memory -- `./exp_result/frozenlake_summary.csv`: Statistical summary - -### Task Memory Mechanism - -The task memory system works as follows: - -1. **Memory Creation**: During training, successful trajectories are sent to the ReMe service -2. **Memory Retrieval**: During testing, the agent queries relevant memories based on the current map -3. **Memory Application**: The agent uses retrieved memories to guide its decision-making - -The experiment demonstrates how task memory can significantly improve performance, especially in challenging environments like the slippery FrozenLake. \ No newline at end of file diff --git a/docs/cookbook/working/quick_start.md b/docs/cookbook/working/quick_start.md deleted file mode 100644 index 3005eff8..00000000 --- a/docs/cookbook/working/quick_start.md +++ /dev/null @@ -1,235 +0,0 @@ ---- -jupytext: - formats: md:myst - text_representation: - extension: .md - format_name: myst - format_version: 0.13 - jupytext_version: 1.11.5 -kernelspec: - display_name: Python 3 - language: python - name: python3 ---- - -# Working Memory Demo - -This demo showcases how to use ReMe's working memory capabilities with a ReAct agent. The working memory system automatically manages context by compressing and summarizing conversation history, enabling efficient long-context processing. - -## Installation - -### Install from PyPI (Recommended) - -```bash -pip install reme-ai -``` - -### Install from Source - -```bash -git clone https://github.com/agentscope-ai/ReMe.git -cd ReMe -pip install . -``` - -### Environment Configuration - -Copy `example.env` to `.env` and modify the corresponding parameters: - -```bash -FLOW_LLM_API_KEY=sk-xxxx -FLOW_LLM_BASE_URL=https://xxxx/v1 -FLOW_EMBEDDING_API_KEY=sk-xxxx -FLOW_EMBEDDING_BASE_URL=https://xxxx/v1 -``` - -## Starting the Services - -Before running the demo, you need to start both the HTTP and MCP services: - -### Start MCP Service - -```bash -reme backend=mcp mcp.port=8002 -``` - -The MCP service provides tools for working memory management including: -- `grep_working_memory`: Search for content in working memory -- `read_working_memory`: Read specific sections of working memory - -### Start HTTP Service - -```bash -reme backend=http http.port=8003 -``` - -The HTTP service provides the flow execution endpoint for memory operations. - -## Running the Demo - -Once both services are running, execute the demo: - - -```bash -cd cookbook/working_memory -python work_memory_demo.py -``` - -### What the Demo Does - -The demo simulates a scenario where: -1. A large README content is loaded (repeated 4 times to create a long context) -2. The agent needs to search through this content and extract specific information -3. Working memory automatically compresses the context from ~24,586 tokens to ~1,565 tokens (compression ratio: 0.06) -4. The agent can still accurately answer questions about the content - -## Core Code Explanation - -### ReactAgent with Working Memory (`react_agent_with_working_memory.py`) - -#### 1. Agent Initialization - -```python -class ReactAgent: - def __init__(self, model_name="", max_steps: int = 50): - # Use your own LLM class - self.llm = OpenAICompatibleLLM(model_name=model_name) - self.max_steps = max_steps -``` - -The agent is initialized with an LLM model and a maximum number of reasoning steps. - -#### 2. Service Connection - -```python -async with FastMcpClient("reme_mcp_server", { - "type": "sse", - "url": "http://0.0.0.0:8002/sse", -}) as mcp_client, HttpClient(base_url="http://localhost:8003") as http_client: -``` - -The agent connects to both: -- **MCP Client**: For tool execution (grep, read operations) -- **HTTP Client**: For flow execution (memory summarization) - -#### 3. Tool Registration - -```python -tool_calls = await mcp_client.list_tool_calls() - -for tool_call in tool_calls: - if tool_call.name in ["grep_working_memory", "read_working_memory"]: - tool_dict[tool_call.name] = tool_call -``` - -The agent registers working memory tools that will be available to the LLM. - -> Note: `summary_working_memory` is **not** an MCP tool. -> It is a **flow** exposed by the HTTP service and is invoked via `HttpClient.execute_flow`, -> as shown in the next section. - -#### 4. Working Memory Summarization (Key Feature) - -```python -result = await http_client.execute_flow("summary_working_memory", - messages=[x.simple_dump() for x in messages], - working_summary_mode="auto", - compact_ratio_threshold=0.75, - max_total_tokens=20000, - max_tool_message_tokens=2000, - group_token_threshold=None, - keep_recent_count=1, - store_dir="./test_working_memory") - -messages = [Message(**x) for x in result.answer] -``` - -**This is the core of working memory management.** Before each LLM call: - -- **`working_summary_mode="auto"`**: Automatically decides when to compress -- **`compact_ratio_threshold=0.75`**: Triggers compression when context exceeds 75% of max tokens -- **`max_total_tokens=20000`**: Maximum total tokens allowed -- **`max_tool_message_tokens=2000`**: Maximum tokens per tool message -- **`keep_recent_count=1`**: Keeps the most recent message uncompressed -- **`store_dir`**: Directory to store compressed memory - -The summarization process: -1. Analyzes the current message history -2. Identifies compressible content (especially long tool outputs) -3. Compresses/summarizes old messages while preserving semantic information -4. Returns a condensed message list that maintains context - -#### 5. ReAct Loop - -```python -for i in range(self.max_steps): - # Summarize working memory before each LLM call - result = await http_client.execute_flow("summary_working_memory", ...) - messages = [Message(**x) for x in result.answer] - - # LLM generates next action - assistant_message = await self.llm.achat(messages=messages, tools=[...]) - messages.append(assistant_message) - - if not assistant_message.tool_calls: - break - - # Execute tools - for tool_call in assistant_message.tool_calls: - result = await mcp_client.call_tool(tool_call.name, - arguments=tool_call.argument_dict) - messages.append(Message(role=Role.TOOL, content=result, ...)) -``` - -The ReAct loop: -1. **Compress**: Summarize working memory to reduce context size -2. **Reason**: LLM decides what tool to use -3. **Act**: Execute the tool -4. **Observe**: Add tool result to messages -5. Repeat until task is complete or max steps reached - -### Benefits of Working Memory - -1. **Context Efficiency**: Reduces token usage by ~94% (24,586 → 1,565 tokens in the demo) -2. **Cost Reduction**: Lower token counts mean lower API costs -3. **Performance**: Faster inference with smaller contexts -4. **Scalability**: Handle much longer conversations and tool outputs -5. **Accuracy**: Maintains semantic information despite compression - -## Model Configuration - -The demo uses an OpenAI-compatible LLM configured via environment variables: - -- **`FLOW_LLM_API_KEY` / `FLOW_LLM_BASE_URL`**: LLM API credentials and endpoint -- The model name is specified in `work_memory_demo.py`, for example: - -```python -model_name = "qwen3-coder-30b-a3b-instruct" -agent = ReactAgent(model_name=model_name, max_steps=50) -``` - -You can change `model_name` to any model that your backend supports, as long as it follows the OpenAI-compatible API. - -## Expected Output - -When running the demo, you should see: -- Token count before compression: ~24,586 tokens -- Token count after compression: ~1,565 tokens -- Compression ratio: ~0.06 (6% of original size) -- The agent successfully answers the question about task memory performance in AppWorld - -## Customization - -You can customize the working memory behavior by adjusting parameters in the `summary_working_memory` call: - -- **`compact_ratio_threshold`**: Lower values trigger compression earlier -- **`max_total_tokens`**: Adjust based on your model's context window -- **`max_tool_message_tokens`**: Control individual tool output size -- **`keep_recent_count`**: Keep more recent messages uncompressed for better context - -## Troubleshooting - -1. **Services not starting**: Ensure ports 8002 and 8003 are available -2. **Connection errors**: Verify both MCP and HTTP services are running -3. **API errors**: Check your `.env` file has valid API keys and endpoints -4. **Memory errors**: Adjust `max_total_tokens` based on your available memory diff --git a/docs/copaw_context_design.md b/docs/copaw_context_design.md deleted file mode 100644 index 13fa5fc6..00000000 --- a/docs/copaw_context_design.md +++ /dev/null @@ -1,278 +0,0 @@ -# CoPaw Context Management Design - -> This article focuses on **short-term context management** and does not cover the long-term memory module. - ---- - -Sooner or later, every AI Agent hits the same wall: **the context window fills up**. - -Tool calls return walls of HTML, thousands of lines of logs, or entire file contents — all of which rapidly consume precious token budget. As the conversation grows, early information either gets truncated or blows up the window entirely, and the Agent's performance begins to degrade. - -[CoPaw](https://github.com/agentscope-ai/CoPaw) addresses this problem with a systematic approach to context management. This article provides a complete breakdown of the data structures and runtime mechanics behind **CoPaw Context Management V2**. - ---- - -## What does the context look like? - -Before discussing "how to manage it", let's first understand "what is being managed". - -CoPaw's context is split into two layers: the **in-memory layer** and the **file system layer**. - -### In-Memory Layer - -Two core fields are maintained in memory: - -- **`compact_summary`** (optional): After conversation history has been compacted, this field holds a structured summary covering five dimensions — `Goal`, `Constraints`, `Progress`, `KeyDecisions`, and `NextSteps` — essentially a refined "work memo". It also includes a **path guide to the raw historical dialog**, pointing the Agent to `dialog/YYYY-MM-DD.jsonl` and suggesting reading from the end backwards. -- **`messages`**: The complete list of messages for the current conversation — the data actually consumed by the Agent during reasoning. - -### File System Layer (File Cache) - -For content that is too large or too volatile to reside in memory long-term, CoPaw offloads it to the file system: - -- **Raw conversation history**: `dialog/YYYY-MM-DD.jsonl`, stored per day -- **Tool call results**: `tool_result/{uuid}.txt`, with an N-day TTL and automatic cleanup on expiry - -```mermaid -flowchart TD - A[Context] --> B[compact_summary] - B --> C[dialog path guide + Goal/Constraints/Progress/KeyDecisions/NextSteps] - A --> E[messages: full dialogue history] - A --> F[File System Cache] - F --> G[dialog/YYYY-MM-DD.jsonl] - F --> H[tool_result/uuid.txt N-day TTL] -``` - -This design allows the Agent to quickly access recent conversations in memory while being able to look up historical context on demand — without stuffing all history into the context window. - ---- - -## What happens before reasoning? The Pre-Reasoning Hook - -Before each reasoning step begins, CoPaw executes a **Pre-Reasoning Hook** that automatically tidies up the context. The process runs in four steps: - -1. **Tool result compaction** (`ToolCallResultCompact`): Process tool call results first — truncate oversized content and offload it to the file system. -2. **Context checking** (`ContextChecker`): Compute the current token usage and determine whether it exceeds the threshold. -3. **If the threshold is exceeded**: - - Keep the most recent **X%** of tokens (to preserve conversational continuity). - - Call the `Compactor` on the earlier history to generate a structured summary. -4. **Dialog persistence** (`SaveDialog`): Save the compacted raw conversation to the file system. - -```mermaid -flowchart LR - A[Pre-Reasoning Hook] --> B[ToolCallResultCompact] - B --> C[ContextChecker] - C --> D{Token > threshold?} - D -->|Yes| E[Keep recent X% tokens] - E --> F[Compact & generate summary] - F --> G[SaveDialog: persist to file] - D -->|No| H[Normal reasoning] -``` - -This flow ensures that the context is in a "clean" state at the start of every reasoning step. - ---- - -## Tool Result Offload: Unified Two-Phase Truncation - -Tool call results are one of the main causes of context bloat. CoPaw uses a **two-phase truncation** strategy that separates the timing of truncation from its aggressiveness: - -- **First truncation**: Triggered immediately when a tool call result is **written into the context**, uniformly applied to all tools (including `read_file`). The full raw content is saved to `tool_result/{uuid}.txt`, and the message is annotated with the file path and a start-line hint. -- **Second truncation**: Triggered by the Pre-Reasoning Hook on **messages that have slid out of the `recent_n` window**, applying a more aggressive truncation to further shrink context usage. - -```mermaid -flowchart LR - A[Tool call completes] --> T[First truncation
    executed immediately on write] - T --> S[Full content written to tool_result/uuid.txt
    Message annotated with file path + start line] - S --> B{Pre-Reasoning Hook
    Is message within recent_n?} - B -->|Yes| C[No action
    Keep first-truncation result] - B -->|No| D[Second truncation
    More aggressive compression
    file_path unchanged] -``` - -The benefit of this design is: the first truncation ensures that no tool result can blow up the context from the moment it is written; the second truncation automatically "fades out" older messages as the conversation progresses, always leaving enough room for recent content. - -### Browser Use Tools as an Example - -| Phase | Behavior | -|----------------------------|-----------------------------------------------------------------------------------------------------------------------------| -| First truncation | Result is truncated immediately on return; full content written to `tool_result/uuid.txt`; message annotated with "FullText saved to xxxx, please read from line N" | -| Within `recent_n` | Pre-Reasoning Hook makes no additional changes; keeps first-truncation result | -| Outside `recent_n` (second truncation) | Parses the existing message result, applies more aggressive truncation to the original content, updates meta info (e.g. line-number hint); **`file_path` is unchanged**, still pointing to the original file | - -The key insight of second truncation: **the original full content is always saved under the same file path**. No matter how many rounds of truncation have occurred, the Agent can always retrieve the original content via the file reference. Truncation only affects the message fragment and meta info in the context — never the file itself. - -```mermaid -flowchart LR - A[Browser Use Result] -->|First truncation| B[Context: fragment + file_path + start line] - B --> C{Outside recent_n?} - C -->|No| D[Unchanged] - C -->|Yes| E[Parse existing message
    Apply second truncation to original content
    Update meta info] - E --> F[Context: shorter fragment + same file_path] -``` - -### Code Implementation and Examples of Two-Phase Truncation - -The entry point for truncation logic is `truncate_text_output`, which dispatches to two different functions depending on whether the text already contains the `<<>>` marker: - -```python -def truncate_text_output(text, start_line=1, total_lines=0, - max_bytes=DEFAULT_MAX_BYTES, - file_path=None, encoding="utf-8") -> str: - if TRUNCATION_NOTICE_MARKER in text: - return _retruncate(text, max_bytes=max_bytes, encoding=encoding) - else: - return _truncate_fresh(text, start_line=start_line, - total_lines=total_lines, - max_bytes=max_bytes, - file_path=file_path, encoding=encoding) -``` - -#### First Truncation (`_truncate_fresh`) - -**When it fires**: Immediately when the tool call completes and the result is written into the context — the text does not yet contain a truncation marker at this point. - -**Core logic**: - -1. If the text size in bytes does not exceed `max_bytes`, return the original text as-is. -2. Otherwise, slice by bytes, keep the last complete line before the cut point, and compute the start line for the next read. -3. Append a truncation notice (`<<>>`) at the end, prompting the reader to continue from `start_line=N`. - -**Example**: Suppose a tool returns 3,000 lines of HTML (200 KB in total), and `max_bytes = 50 KB`: - -``` -# Original tool output (200 KB, 3000 lines) - - ... - - ...(large content) - - - -# After first truncation, written to context (50 KB, ~750 lines) - - ... - - ...(first 750 lines) -<<>> -The output above was truncated. -The full content is saved to the file and contains 3000 lines in total. -This excerpt starts at line 1 and covers the next 51200 bytes. -If the current content is not enough, call `read_file` with file_path=tool_result/abc123.txt start_line=751 to read more. -``` - -The full raw content is simultaneously written to `tool_result/abc123.txt`; only the truncated fragment and the continuation hint are kept in the context. - -#### Second Truncation (`_retruncate`) - -**When it fires**: During Pre-Reasoning Hook processing, applied to messages that have slid out of the `recent_n` window to further shrink context usage. - -**Core logic**: - -1. Split the text into the raw content before `<<>>` and the notice section after it. -2. If the raw content still fits within the new `max_bytes` (with a 100-byte slack), return the original text as-is. -3. Otherwise, re-slice according to the new, smaller byte limit and use regex to update the **byte count** and **continuation line number** in the notice; `file_path` remains unchanged. - -**Example**: The same tool message from above, after it slides out of `recent_n`. Second truncation reduces `max_bytes` from 50 KB to 10 KB: - -``` -# Before second truncation (first-truncation result already in context, 50 KB) - - ... - - ...(first 750 lines) -<<>> -...This excerpt starts at line 1 and covers the next 51200 bytes. -...call `read_file` with file_path=tool_result/abc123.txt start_line=751 to read more. - -# After second truncation (further compressed to 10 KB, ~150 lines) - - ... - - ...(first 150 lines) -<<>> -...This excerpt starts at line 1 and covers the next 10240 bytes. -...call `read_file` with file_path=tool_result/abc123.txt start_line=151 to read more. -``` - -Key point: `file_path` always points to `tool_result/abc123.txt`. The Agent can retrieve the full original content via the file reference at any time; truncation only affects the context fragment and meta info. - ---- - -## Special Handling for the ReadFile Tool - -`read_file` shares the same two-phase truncation mechanism as Browser Use tools, with one key difference: **the file it reads already exists on the file system**, so there is no need to save a separate copy during first truncation. - -| Phase | Behavior | -|----------------------------|-----------------------------------------------------------------------------------------------| -| First truncation | Truncation happens at read time; result is written to context; original file path is already known — no need to save to `tool_result/` | -| Within `recent_n` | Pre-Reasoning Hook makes no changes; keeps the read-time truncation result | -| Outside `recent_n` (second truncation) | Same as other tools — more aggressive truncation is applied to the message content, meta info is updated | - -```mermaid -flowchart LR - A[ReadFile call] -->|Truncate at read time| B[Context: truncated content
    original file path known] - B --> C{Outside recent_n?} - C -->|No| D[No changes needed] - C -->|Yes| E[Second truncation
    Update meta info
    Same behavior as other tools] -``` - -### Special Protection for Markdown Files - -For Markdown files such as `skill.md` and rule files, CoPaw applies a **higher protection threshold** during truncation. - -Markdown files typically carry structured knowledge or instructions; over-aggressive truncation would break their semantic integrity. Therefore, both the first and second truncation thresholds for Markdown files are set higher than those for regular tool outputs, ensuring the Agent can read as complete a structured content as possible. - -```mermaid -flowchart LR - A[Tool result] --> B{Is it a Markdown file?} - B -->|Yes| C[Higher truncation threshold
    Greater protection] - B -->|No| D[Standard truncation threshold] - C --> E[First / second truncation logic] - D --> E -``` - ---- - -## Long-term Memory Trigger Logic - -> This section goes beyond the core scope of context management and briefly introduces CoPaw's long-term memory write mechanism. - -Long-term memory is driven by three trigger paths: - -1. **Explicitly written by the Main Agent**: - - `Memory.md` (the backbone of long-term memory, recording persistent information such as user preferences) - - `YYYY-MM-DD.md` (daily log) - -2. **Triggered by context compaction**, written by the **Summarizer (ReAct Agent)**: - - Personalization information (user preferences, habits, etc.) - - Try-error information (failed attempts and corrective lessons) - -3. **Scheduled task** (daily at 00:00): - - Aggregates recent `YYYY-MM-DD.md` files - - Merges and updates the journal into `Memory.md` - -```mermaid -flowchart TD - A[Main Agent] --> B[Write Memory.md] - A --> C[Write YYYY-MM-DD.md] - D[Context reaches compaction threshold?] -->|Yes| E[Summarizer Agent] - E --> F[Record: personalization info] - E --> G[Record: try-error experience] - H[Scheduled task 00:00] --> I[Aggregate recent YYYY-MM-DD.md] - I --> J[Update Memory.md] -``` - -This mechanism ensures that important information from short-term conversations is distilled into long-term memory and not lost when the session ends. - ---- - -## Summary - -The core design philosophy of CoPaw's context management can be summed up in one sentence: - -**Keep only "what is needed now" in memory; let the file system hold "what might be needed later".** - -Through the four-step Pre-Reasoning Hook flow, a unified two-phase truncation strategy, and persistent file system backing, CoPaw maximizes information availability for the Agent within a limited context window — no matter how long the conversation runs, the Agent can always find the context it needs. - ---- - -*The design described in this article is implemented in [CoPaw MemoryManager](https://github.com/agentscope-ai/CoPaw/blob/main/src/copaw/agents/memory/reme_light_memory_manager.py) and [ReMe ReMeLight](https://github.com/agentscope-ai/ReMe).* diff --git a/docs/copaw_context_design_zh.md b/docs/copaw_context_design_zh.md deleted file mode 100644 index 8a72f169..00000000 --- a/docs/copaw_context_design_zh.md +++ /dev/null @@ -1,289 +0,0 @@ -# CoPaw 上下文管理设计解析 - -> 本文聚焦**短期上下文管理**,不涉及长期记忆模块。 - ---- - -AI Agent 在使用过程中,迟早会遇到一个让人头疼的问题:**上下文窗口被塞满了**。 - -工具调用返回了一大段 HTML、几千行日志、或者完整的文件内容——这些都会急剧消耗宝贵的 Token -配额。随着对话轮次增加,早期的信息要么被截断,要么把整个窗口撑爆,Agent 的表现开始下滑。 - -[CoPaw](https://github.com/agentscope-ai/CoPaw) 在设计上下文管理时,围绕这个问题给出了一套系统性的答案。本文将完整拆解 * -*CoPaw Context Management V2** 的数据结构与运行机制。 - ---- - -## 上下文长什么样? - -在讨论"如何管理"之前,先看清楚"管理的是什么"。 - -CoPaw 的上下文分为两层:**内存层**与**文件系统层**。 - -### 内存层(In-Memory) - -内存中维护两个核心字段: - -- **`compact_summary`**(可选):当历史对话被压缩后,这里存放结构化摘要,包含 `Goal`、`Constraints`、`Progress`、`KeyDecisions`、 - `NextSteps` 五个维度——相当于一份精炼的"工作备忘录"。同时还包含一个**历史对话原始数据的路径引导**,告诉 Agent 去哪里找 - `dialog/YYYY-MM-DD.jsonl`,以及建议"从后往前读"。 -- **`messages`**:当前对话的完整消息列表,是 Agent 实际推理时消费的数据。 - -### 文件系统层(File Cache) - -对于体积较大、不适合长期驻留内存的内容,CoPaw 将其 offload 到文件系统: - -- **历史对话原始数据**:`dialog/YYYY-MM-DD.jsonl`,按日期分文件存储 -- **工具调用结果**:`tool_result/{uuid}.txt`,设有 N 天 TTL,过期自动清理 - -```mermaid -flowchart TD - A[Context] --> B[compact_summary] - B --> C[dialog 路径引导 + Goal/Constraints/Progress/KeyDecisions/NextSteps] - A --> E[messages: 完整对话历史] - A --> F[文件系统缓存] - F --> G[dialog/YYYY-MM-DD.jsonl] - F --> H[tool_result/uuid.txt N天TTL] -``` - -这个设计让 Agent 既能在内存中快速访问近期对话,又能在需要时按需回溯历史——而不是把所有历史内容硬塞进上下文。 - ---- - -## 推理前做什么?Pre-Reasoning Hook - -每轮推理正式开始前,CoPaw 会执行一个 **Pre-Reasoning Hook**,自动完成上下文的整理工作。整个流程分四步: - -1. **工具结果压缩**(`ToolCallResultCompact`):先处理工具调用结果,将超长内容截断并 offload 到文件系统 -2. **上下文检查**(`ContextChecker`):计算当前上下文的 Token 使用量,判断是否超出阈值 -3. **若超出阈值**: - - 保留最近 **X%** 的 Token(保障对话连贯性) - - 对更早的历史对话调用 `Compactor` 生成结构化摘要 -4. **历史对话持久化**(`SaveDialog`):将被压缩的原始对话保存到文件系统 - -```mermaid -flowchart LR - A[Pre-Reasoning Hook] --> B[ToolCallResultCompact] - B --> C[ContextChecker] - C --> D{Token > 阈值?} - D -->|是| E[保留近期 X% Token] - E --> F[Compact & 生成摘要] - F --> G[SaveDialog: 持久化到文件] - D -->|否| H[正常推理] -``` - -这个流程确保每次推理开始前,上下文都处于一个"干净"的状态。 - ---- - -## 工具结果 Offload:统一的两阶段截断 - -工具调用结果是上下文膨胀的主要来源之一。CoPaw 采用**两阶段截断**策略,将截断时机与截断力度分离: - -- **一次截断**:在工具调用结果**写入上下文时**立即触发,所有工具(包括 `read_file`)统一适用。截断后将完整原始内容保存到 - `tool_result/{uuid}.txt`,并在消息中附注文件路径与起始行提示。 -- **二次截断**:在 Pre-Reasoning Hook 处理时,对**已滑出 `recent_n` 范围**的历史消息触发,截断更为激进,进一步压缩上下文占用。 - -```mermaid -flowchart LR - A[工具调用完成] --> T[一次截断
    写入上下文时立即执行] - T --> S[完整内容写入 tool_result/uuid.txt
    消息附注文件路径 + 起始行] - S --> B{Pre-Reasoning Hook
    该消息在 recent_n 内?} - B -->|是| C[无需处理
    保持一次截断结果] - B -->|否| D[二次截断
    更激进压缩
    file_path 不变] -``` - -这样设计的好处在于:一次截断保证所有工具结果从写入那刻起就不会撑爆上下文;二次截断则随着对话推进自动"淡化" -历史信息,始终为近期内容留出充足空间。 - -### 以 Browser Use 类工具为例 - -| 阶段 | 行为 | -|-------------------|------------------------------------------------------------------------------------| -| 一次截断 | 工具返回结果后立即截断,完整内容写入 `tool_result/uuid.txt`,消息附注 "FullText saved to xxxx,请从第 N 行开始读" | -| 在 recent_n 内 | Pre-Reasoning Hook 不做额外处理,保持一次截断结果 | -| 超出 recent_n(二次截断) | 解析已有的消息结果,对原始内容做更激进的截断,同步更新消息中的 meta 信息(如行号提示);**`file_path` 不变**,仍指向原文件 | - -二次截断的关键在于:**原始完整内容始终保存在同一个文件路径下**,无论经过多少轮截断,Agent 都能通过文件引用找到原始内容;截断只影响上下文中的消息片段和 -meta 信息,不改变文件。 - -```mermaid -flowchart LR - A[Browser Use Result] -->|一次截断| B[上下文: 片段 + file_path + 起始行] - B --> C{超出 recent_n?} - C -->|否| D[保持不变] - C -->|是| E[解析现有消息
    对原始内容二次截断
    更新 meta 信息] - E --> F[上下文: 更短片段 + 同一 file_path] -``` - -### 两阶段截断的代码实现与示例 - -截断逻辑的入口是 `truncate_text_output`,它根据文本中是否已包含 `<<>>` 标记来分发到两个不同的函数: - -```python -def truncate_text_output(text, start_line=1, total_lines=0, - max_bytes=DEFAULT_MAX_BYTES, - file_path=None, encoding="utf-8") -> str: - if TRUNCATION_NOTICE_MARKER in text: - return _retruncate(text, max_bytes=max_bytes, encoding=encoding) - else: - return _truncate_fresh(text, start_line=start_line, - total_lines=total_lines, - max_bytes=max_bytes, - file_path=file_path, encoding=encoding) -``` - -#### 一次截断(`_truncate_fresh`) - -**触发时机**:工具调用完成、结果写入上下文时立即执行,此时文本中尚不含截断标记。 - -**核心逻辑**: - -1. 若文本字节数未超过 `max_bytes`,直接返回原文; -2. 否则按字节切片,保留截断点前最后一个完整行,计算下一段应从哪一行开始; -3. 在末尾追加截断通知(`<<>>`),提示后续从 `start_line=N` 继续读取。 - -**示例**:假设一个工具返回了 3 000 行的 HTML 内容(共 200 KB),而 `max_bytes = 50 KB`: - -``` -# 原始工具输出(200 KB,共 3000 行) - - ... - - ...(大量内容) - - - -# 一次截断后写入上下文(50 KB,约 750 行) - - ... - - ...(前 750 行) -<<>> -The output above was truncated. -The full content is saved to the file and contains 3000 lines in total. -This excerpt starts at line 1 and covers the next 51200 bytes. -If the current content is not enough, call `read_file` with file_path=tool_result/abc123.txt start_line=751 to read more. -``` - -完整原始内容同时写入 `tool_result/abc123.txt`,上下文中仅保留截断片段与续读提示。 - -#### 二次截断(`_retruncate`) - -**触发时机**:Pre-Reasoning Hook 处理时,对已滑出 `recent_n` 范围的历史消息执行,进一步压缩上下文占用。 - -**核心逻辑**: - -1. 从文本中分离出 `<<>>` 前的原始内容与后面的通知部分; -2. 若原始内容仍未超出新的 `max_bytes`(带 100 字节宽松量),直接返回原文; -3. 否则按新的更小字节限制重新切片,并通过正则替换通知中的 **字节数** 与 **续读行号**,`file_path` 保持不变。 - -**示例**:同样是上面那条工具消息,在它滑出 `recent_n` 之后,二次截断将 `max_bytes` 从 50 KB 压缩到 10 KB: - -``` -# 二次截断前(上下文中已有一次截断结果,50 KB) - - ... - - ...(前 750 行) -<<>> -...This excerpt starts at line 1 and covers the next 51200 bytes. -...call `read_file` with file_path=tool_result/abc123.txt start_line=751 to read more. - -# 二次截断后(进一步压缩至 10 KB,约 150 行) - - ... - - ...(前 150 行) -<<>> -...This excerpt starts at line 1 and covers the next 10240 bytes. -...call `read_file` with file_path=tool_result/abc123.txt start_line=151 to read more. -``` - -关键点:`file_path` 始终指向 `tool_result/abc123.txt`,Agent 随时可通过文件引用获取完整原始内容;截断只影响上下文片段与 meta 信息。 - ---- - -## ReadFile 工具的特殊处理 - -`read_file` 与 Browser Use 类工具共享同一套两阶段截断机制,但有一个关键区别:**它读取的文件本身已存在于文件系统** -,无需在一次截断时另行保存。 - -| 阶段 | 行为 | -|-------------------|---------------------------------------------------| -| 一次截断 | 在读取时即完成截断,结果写入上下文;原始文件路径已知,无需额外保存到 `tool_result/` | -| 在 recent_n 内 | Pre-Reasoning Hook 不做任何修改,保持读取时的截断结果 | -| 超出 recent_n(二次截断) | 与其他工具相同,对消息内容做更激进的截断,更新 meta 信息 | - -```mermaid -flowchart LR - A[ReadFile 调用] -->|读取时截断| B[上下文: 截断内容
    原始文件路径已知] - B --> C{超出 recent_n?} - C -->|否| D[无需修改] - C -->|是| E[二次截断
    更新 meta 信息
    与其他工具行为一致] -``` - -### Markdown 文件的特殊保护 - -对于 `skill.md`、规则文件等 Markdown 文件,CoPaw 在截断时给予**更大的保护阈值**。 - -Markdown 文件通常承载结构化的知识或指令,过度截断会破坏其完整语义。因此,在一次截断和二次截断时,Markdown -文件的截断触发上限均高于普通工具输出,确保 Agent 能读到尽可能完整的结构化内容。 - -```mermaid -flowchart LR - A[工具结果] --> B{是 Markdown 文件?} - B -->|是| C[更高截断阈值
    更大保护] - B -->|否| D[标准截断阈值] - C --> E[一次 / 二次截断逻辑] - D --> E -``` - ---- - -## 长期记忆的触发逻辑 - -> 本节超出上下文管理的核心范畴,简要介绍 CoPaw 的长期记忆写入机制。 - -长期记忆由三个触发路径驱动: - -1. **主 Agent 主动写入**: - - `Memory.md`(长期记忆主干,记录用户偏好等持久信息) - - `YYYY-MM-DD.md`(当日日志) - -2. **上下文压缩触发时**,由 **Summarizer(ReAct Agent)** 写入: - - 个性化信息(用户偏好、习惯等) - - Try-error 信息(失败尝试与修正经验) - -3. **定时任务**(每日 00:00): - - 汇总最近的 `YYYY-MM-DD.md` 文件 - - 将日志整合更新到 `Memory.md` - -```mermaid -flowchart TD - A[Main Agent] --> B[写入 Memory.md] - A --> C[写入 YYYY-MM-DD.md] - D[上下文达到压缩阈值?] -->|是| E[Summarizer Agent] - E --> F[记录: 个性化信息] - E --> G[记录: Try-Error 经验] - H[定时任务 00:00] --> I[汇总最近 YYYY-MM-DD.md] - I --> J[更新 Memory.md] -``` - -这套机制确保了短期对话中的重要信息能够沉淀为长期记忆,不因对话结束而丢失。 - ---- - -## 小结 - -CoPaw 上下文管理的核心设计哲学可以用一句话概括: - -**让内存只放"现在需要的",让文件系统保管"之后可能需要的"。** - -通过 Pre-Reasoning Hook 的四步流程、统一的两阶段截断策略,以及文件系统的持久化支撑,CoPaw 在有限的上下文窗口内为 Agent -提供了最大程度的信息可用性——无论对话持续多久,Agent 总能找到它需要的上下文。 - ---- - -*本文设计对应实现可参考 [CoPaw MemoryManager](https://github.com/agentscope-ai/CoPaw/blob/main/src/copaw/agents/memory/reme_light_memory_manager.py) -与 [ReMe ReMeLight](https://github.com/agentscope-ai/ReMe)。* diff --git a/docs/index.md b/docs/index.md deleted file mode 100644 index d0e9d9d2..00000000 --- a/docs/index.md +++ /dev/null @@ -1,158 +0,0 @@ ---- -jupytext: - formats: md:myst - text_representation: - extension: .md - format_name: myst - format_version: 0.13 - jupytext_version: 1.11.5 -kernelspec: - display_name: Python 3 - language: python - name: python3 ---- - -# ReMe: Memory Management Kit for Agents - Remember Me, Refine Me. - -
    - Python Version - PyPI Version - License - GitHub Stars -
    - ---- - -ReMe provides AI agents with a unified memory system—enabling the ability to extract, reuse, and share memories across -users, tasks, and agents. - -Agent memory can be viewed as: - -```text -Agent Memory = Long-Term Memory + Short-Term Memory - = (Personal + Task + Tool) Memory + (Working Memory) -``` - -Personal memory helps "**understand user preferences**", task memory helps agents "**perform better**", and tool memory enables "**smarter tool usage**". Working memory provides **short-term contextual memory** by keeping recent reasoning and tool results compact and accessible without overflowing the model's context window. - -## Architecture Design - -

    - ReMe Logo -

    - -ReMe integrates three complementary memory capabilities: - -:::{admonition} Task Memory/Experience -:class: note - -Procedural knowledge reused across agents - -- **Success Pattern Recognition**: Identify effective strategies and understand their underlying principles -- **Failure Analysis Learning**: Learn from mistakes and avoid repeating the same issues -- **Comparative Patterns**: Different sampling trajectories provide more valuable memories through comparison -- **Validation Patterns**: Confirm the effectiveness of extracted memories through validation modules - -::: - -Learn more about how to use task memory from [task memory](task_memory/task_memory.md) - -:::{admonition} Personal Memory -:class: note - -Contextualized memory for specific users - -- **Individual Preferences**: User habits, preferences, and interaction styles -- **Contextual Adaptation**: Intelligent memory management based on time and context -- **Progressive Learning**: Gradually build deep understanding through long-term interaction -- **Time Awareness**: Time sensitivity in both retrieval and integration - -::: - -Learn more about how to use personal memory from [personal memory](personal_memory/personal_memory.md) - -:::{admonition} Tool Memory -:class: note - -Data-driven tool selection and usage optimization - -- **Historical Performance Tracking**: Success rates, execution times, and token costs from real usage -- **LLM-as-Judge Evaluation**: Qualitative insights on why tools succeed or fail -- **Parameter Optimization**: Learn optimal parameter configurations from successful calls -- **Dynamic Guidelines**: Transform static tool descriptions into living, learned manuals - -::: - -Learn more about how to use tool memory from [tool memory](tool_memory/tool_memory.md) - -:::{admonition} Working Memory -:class: note - -Short‑term contextual memory for long‑running agents via **message offload & reload**: - -- **Message Offload**: Compact large tool outputs to external files or LLM summaries -- **Message Reload**: Search (`grep_working_memory`) and read (`read_working_memory`) offloaded content on demand - -**📖 Concept & API**: -- Message offload overview: [Message Offload](work_memory/message_offload.md) -- Offload / reload operators: [Message Offload Ops](work_memory/message_offload_ops.md), [Message Reload Ops](work_memory/message_reload_ops.md) - -**💻 End‑to‑End Demo**: -- Working memory quick start: [Working Memory Quick Start](cookbook/working/quick_start.md) -- ReAct agent with working memory: [react_agent_with_working_memory.py](../cookbook/working_memory/react_agent_with_working_memory.py) -- Runnable demo: [work_memory_demo.py](../cookbook/working_memory/work_memory_demo.py) - -::: - ---- - -## 📦 Ready-to-Use Memories - -ReMe provides pre-built memories that agents can immediately use with verified best practices: - -### Available Memories - -- **`appworld.jsonl`**: Memory library for Appworld agent interactions, covering complex task planning and execution - patterns -- **`bfcl_v3.jsonl`**: Working memory library for BFCL tool calls - -### Quick Usage - -```{code-cell} -# Load pre-built memories -response = requests.post("http://localhost:8002/vector_store", json={ - "workspace_id": "appworld", - "action": "load", - "path": "./docs/library/" -}) - -# Query relevant memories -response = requests.post("http://localhost:8002/retrieve_task_memory", json={ - "workspace_id": "appworld", - "query": "How to navigate to settings and update user profile?", - "top_k": 1 -}) -``` - - -## 📚 Resources - -- **[Installation Guide](installation.md)**, **[Quick Start](quick_start.md)**: Get started quickly with practical examples -- **[Vector Storage Setup](vector_store_api_guide.md)**: Configure local, Elasticsearch, Qdrant, ChromaDB, ObVec (OceanBase / seekdb via pyobvector) or Hologres storage and usage -- **[MCP Guide](mcp_quick_start.md)**: Create MCP services -- **[Personal Memory](personal_memory/personal_memory.md)**, **[Task Memory](task_memory/task_memory.md)** & **[Tool Memory](tool_memory/tool_memory.md)**: Operators used in personal memory, task memory and tool memory. You can modify the config to customize the pipelines. -- **[Example Collection](./cookbook/appworld/quickstart.md)**: Real use cases and best practices - ---- - -## Citation - -```bibtex -@software{AgentscopeReMe2025, - title = {AgentscopeReMe: Memory Management Kit for Agents}, - author = {Li Yu, Jiaji Deng, Zouying Cao}, - url = {https://reme.agentscope.io}, - year = {2025} -} -``` diff --git a/docs/installation.md b/docs/installation.md deleted file mode 100644 index 70ab0a9a..00000000 --- a/docs/installation.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -jupytext: - formats: md:myst - text_representation: - extension: .md - format_name: myst - format_version: 0.13 - jupytext_version: 1.11.5 -kernelspec: - display_name: Python 3 - language: python - name: python3 ---- - -# Installation - -### Install from PyPI (Recommended) - -```bash -pip install reme-ai -``` - -### Install from Source - -```bash -git clone https://github.com/agentscope-ai/ReMe.git -cd ReMe -pip install . -``` - -### Environment Configuration - -Copy `example.env` to .env and modify the corresponding parameters: - -```bash -FLOW_LLM_API_KEY=sk-xxxx -FLOW_LLM_BASE_URL=https://xxxx/v1 -FLOW_EMBEDDING_API_KEY=sk-xxxx -FLOW_EMBEDDING_BASE_URL=https://xxxx/v1 -``` - -You’ve completed the installation! Head over to [quick start](quick_start.md) to see how to start using Reme quickly. \ No newline at end of file diff --git a/docs/library/appworld.jsonl b/docs/library/appworld.jsonl deleted file mode 100644 index 3e52b6d4..00000000 --- a/docs/library/appworld.jsonl +++ /dev/null @@ -1,193 +0,0 @@ -{"workspace_id": "appworld_8b_0725", "memory_id": "dd0b9a452acc4d85a8ebd519976a01ab", "memory_type": "task", "when_to_use": "When interacting with APIs that require authentication and multiple steps to retrieve data.", "content": "Always verify the API documentation for required parameters and response structures before executing code. Missing or incorrect parameters can lead to failed API calls.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "4cf250d689254fd79fb068b64819cd96", "memory_type": "task", "when_to_use": "When mapping IDs to human-readable attributes (e.g., song IDs to titles).", "content": "Ensure all necessary APIs for mapping are called with valid inputs and handle cases where mappings might fail due to missing or incomplete data.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "41903931197542e99040298d8d58bca7", "memory_type": "task", "when_to_use": "When searching for specific data in paginated API responses or when extracting structured content from unstructured text.", "content": "Ensure the query parameters align with the expected data format, and validate intermediate outputs (e.g., note titles, tags) to confirm relevance before proceeding with further steps.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "b2cec859b815474aa84a984a458eae0d", "memory_type": "task", "when_to_use": "When encountering persistent errors related to invalid identifiers, such as phone numbers or email addresses, during API calls.", "content": "Validate the format and existence of identifiers early in the process, and consider fallback strategies (e.g., using alternate contact methods) if primary identifiers fail.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "580dd7fce16b4364bffb2d6a3393c13b", "memory_type": "task", "when_to_use": "When accessing an API that requires authentication but credentials are not explicitly provided in the task.", "content": "Always verify the availability of required credentials (e.g., passwords, tokens) before proceeding with steps that depend on authenticated access. If credentials are missing, halt execution and request clarification or additional information from the user.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "3408d3700bbf4ce3a1cc0fb3b7f649c4", "memory_type": "task", "when_to_use": "When extracting structured data from unstructured text, such as note content, ensure proper parsing logic is implemented.", "content": "Develop robust parsing logic by identifying delimiters or patterns in the data to correctly extract relevant information without including extraneous details.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "4cb32a4fbaf6481fbe27e53a38d8c6b9", "memory_type": "task", "when_to_use": "When interacting with paginated APIs to retrieve comprehensive data sets, such as playlists or songs.", "content": "The step pattern involved iterating through all pages of the API response using a loop (e.g., while True) and checking for empty responses to terminate. This ensures no data is missed and allows aggregation of complete information across multiple pages, which is crucial when identifying the most-liked song across many playlists.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "797e8c57ef684b188ae40943ae2a7e46", "memory_type": "task", "when_to_use": "When completing a task that requires returning a final answer to the user or system.", "content": "After retrieving and processing all necessary data, the agent finalized the task by explicitly calling apis.supervisor.complete_task() with the derived answer. This step ensures proper task closure and provides clarity on the outcome, aligning with the user's query.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "c2646b56478a4ab7963e44a2fb6ad49d", "memory_type": "task", "when_to_use": "When variables are used across multiple steps and depend on prior successful executions.", "content": "Always initialize variables with default values before their first use to prevent `NameError` or undefined variable issues in case of skipped or failed steps.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "f36768adc9ed49a78bac84a818f2ad3c", "memory_type": "task", "when_to_use": "When interacting with APIs requiring authentication tokens, especially after a previous session.", "content": "Always verify the validity of access tokens at the start of a task and re-authenticate if necessary to avoid unauthorized access errors.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "35d0f06f3cfa479e831d4a564e7d2a79", "memory_type": "task", "when_to_use": "When processing paginated API responses or datasets with filters like date ranges.", "content": "Ensure all filtering parameters (e.g., date range, transaction type) are correctly applied during API calls to retrieve only the relevant data, minimizing unnecessary processing.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "eafbc872cccf41109f63fed0de00ecbf", "memory_type": "task", "when_to_use": "When encountering persistent authentication or authorization errors despite valid credentials.", "content": "Always verify that the API endpoint supports the parameters being passed (e.g., contact ID vs. phone number) and ensure the correct format is used for identifiers like phone numbers.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "2da66c8f765b4e69afb1b5e8063ad355", "memory_type": "task", "when_to_use": "When searching for specific data in an app but receiving irrelevant results.", "content": "Refine search queries using multiple relevant keywords or exclude irrelevant tags to narrow down results effectively.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "10253db42db14e72bc0fb5c771a62c79", "memory_type": "task", "when_to_use": "When a task cannot proceed due to external dependencies like user-provided inputs or manual actions.", "content": "Clearly communicate the dependency to the user and provide explicit instructions on how to resolve it. Avoid infinite loops of requests for the same information without offering alternative solutions or fallback options.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "82ee0ec74b92496ea01efd2da9851838", "memory_type": "task", "when_to_use": "When interacting with APIs that require authentication, and the access token must be included in every request.", "content": "API calls initially failed due to missing access tokens. By explicitly including the access token in each API call (e.g., `create_transaction_comment` and `like_transaction`), the requests succeeded. This highlights the importance of verifying authentication requirements for each API endpoint.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "13ab516cd08e4b519abe59d16d52eebd", "memory_type": "task", "when_to_use": "When filtering data based on relationships or specific criteria from multiple sources.", "content": "The phone app's `search_contacts` API was used to filter contacts by relationship ('roommate'). These emails were then cross-referenced with Venmo transaction sender emails to isolate relevant transactions. This demonstrates the effectiveness of combining data from different APIs to achieve precise filtering.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "afe36e3f66f248a9b6564e88a48c82a0", "memory_type": "task", "when_to_use": "When interacting with paginated APIs to retrieve a complete dataset for analysis.", "content": "The agent successfully implemented a loop to iterate through paginated API responses using `page_index` and `page_limit`. By incrementing the page index until no more data was returned, it ensured that all available data (in this case, song recommendations) was retrieved. This approach is effective in scenarios where datasets are divided across multiple pages and ensures completeness of information for subsequent processing.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "96decc600bb948a3a69890d9580cbb2d", "memory_type": "task", "when_to_use": "When handling API-based tasks requiring authentication, such as login or access tokens.", "content": "Always ensure that required variables like passwords and access tokens are retrieved and stored before making authenticated API calls. Missing these steps leads to runtime errors and task failure.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "1f613481f4e7406d9225ee1f2e1bd40a", "memory_type": "task", "when_to_use": "When interacting with paginated APIs where data spans multiple pages.", "content": "Always ensure pagination handling is correctly implemented, verifying that all pages are retrieved before processing the data. Missing pages can lead to incomplete results and incorrect conclusions.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "90625829d762437f9f3267d6656b12d7", "memory_type": "task", "when_to_use": "When interpreting ambiguous user queries such as 'most-played' or 'album library'.", "content": "Clarify assumptions about proxy metrics (e.g., frequency vs. play count) early in the process to align with user intent and available data.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "96cc01855efd4923b1785080a178e815", "memory_type": "task", "when_to_use": "When the task requires accessing specific data (e.g., artist recommendations) but the available APIs do not explicitly provide that data.", "content": "Always verify that the required data fields or endpoints exist in the API specifications before committing to a solution path. If critical data is missing, halt execution and communicate the limitation early.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "f64c293d83fe4bacaac679a0c59ee5e0", "memory_type": "task", "when_to_use": "When designing multi-step workflows involving paginated API responses.", "content": "Ensure that all pages of paginated data are fully processed, and validate that the aggregated data contains all required fields for downstream tasks.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "5cadd3040a1342caae6e36441c831980", "memory_type": "task", "when_to_use": "When interacting with paginated APIs to collect all available data for analysis.", "content": "The step pattern involved iterating through API pages using a `while` loop, checking for empty responses to terminate the loop, and aggregating results into a list. This ensured complete data retrieval without missing any entries, which is critical for accurate downstream analysis.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "16440dbfe8164e448eca74e13f1f3de7", "memory_type": "task", "when_to_use": "When analyzing frequency of specific attributes (e.g., artist names) within a dataset.", "content": "The step pattern used a `defaultdict` to count occurrences of each artist name extracted from song recommendations. By leveraging Python's `min()` function, the least frequent artist was identified efficiently. This approach ensures scalability and clarity in determining low-frequency elements.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "ee5ef25296c44aab90d350994c767f57", "memory_type": "task", "when_to_use": "When interpreting data fields in API responses, especially when mapping them to real-world entities like artists or users.", "content": "Do not assume that a field name (e.g., 'owner_email') directly corresponds to the desired entity without explicit confirmation from API documentation or schema details. Misinterpreting fields can lead to incorrect conclusions and outputs.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "03b2f4565d514f0f973864e62dea06a2", "memory_type": "task", "when_to_use": "When interacting with APIs that require authentication credentials, ensure the correct method names are used.", "content": "Always verify API method names by consulting the API documentation before making calls. Misnaming methods like using 'get_account_passwords' instead of 'show_account_passwords' can lead to execution failures.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "ec1975100740488dbc32fb656f979aa5", "memory_type": "task", "when_to_use": "When aggregating data from multiple sources (e.g., playlists, albums, direct songs), ensure all relevant data sources are included in the process.", "content": "Failure to account for all potential data sources (such as neglecting album data when searching for the oldest song) can result in incomplete or incorrect results. Always map out all possible data streams before executing code.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "e1864f22b2f1421997ba76b3405bb48e", "memory_type": "task", "when_to_use": "When comparing date-based values retrieved from APIs, confirm the format of the dates is consistent and comparable.", "content": "Assuming a specific date format without verifying it can lead to inaccurate comparisons. Ensure that release_date fields are in a standard format (e.g., YYYY-MM-DD) before performing operations like finding the minimum value.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "8a1182c432ed4d45ae9e98266c6c97b9", "memory_type": "task", "when_to_use": "When interacting with APIs that return paginated results, especially for tasks requiring comprehensive data retrieval.", "content": "Always verify if the API response is paginated and implement logic to iterate through all pages to ensure complete data collection. Missing pagination can lead to incomplete or incorrect results.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "1cb2f84dd68644a8a9fbe2b9f553206a", "memory_type": "task", "when_to_use": "When comparing attributes like release dates across large datasets from multiple sources.", "content": "Standardize the extraction and comparison logic for attributes (e.g., release dates) to ensure consistency and avoid overlooking edge cases, such as missing or malformed data.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "6a2d9ee8375b48c5885b822cb9e7f8fd", "memory_type": "task", "when_to_use": "When needing to retrieve and analyze data from multiple API endpoints to identify the oldest or earliest item based on a date field.", "content": "The step pattern involved sequentially retrieving songs, albums, and playlists using APIs, extracting release dates for songs, and sorting them to find the oldest. By focusing first on the song library (where individual song data is readily available), the agent avoided unnecessary complexity with albums and playlists. Sorting the list of songs by their release date ensured an accurate identification of the oldest song.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "8aade665f3a5450eb06bae5c5f14ea23", "memory_type": "task", "when_to_use": "When handling paginated API responses, ensure all pages are processed correctly without prematurely breaking the loop.", "content": "Always verify that loops iterating through paginated data check for valid termination conditions and handle empty responses appropriately to avoid missing data.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "a983392500e34f17ae315459a96d803b", "memory_type": "task", "when_to_use": "When encountering API authentication errors despite multiple login attempts.", "content": "Always verify the existence of a login mechanism in the relevant app before attempting authentication. If login APIs are unavailable, reassess whether credentials can be bypassed or alternative methods exist to access required data.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "fa5b76785401422698246c9471c2a7fd", "memory_type": "task", "when_to_use": "When iterating through APIs to locate specific functionality (e.g., Venmo payment requests).", "content": "Systematically review all available APIs using documentation tools (e.g., show_api_descriptions) to identify the correct method and parameters before executing code, minimizing wasted effort on incorrect assumptions.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "d36dd3452bfa4b3b9ad84bdbc131de1c", "memory_type": "task", "when_to_use": "When distinguishing between processed and unprocessed entities in a task involving multiple items.", "content": "Clearly log and report which entities were successfully processed and which ones were skipped due to insufficient data. This ensures transparency and facilitates follow-up actions.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "e2dc882cfd39408c9242f7672b018efa", "memory_type": "task", "when_to_use": "When encountering authentication failures due to missing credentials in multi-step workflows.", "content": "Always verify the availability of required credentials (e.g., passwords, tokens) before initiating a task. If credentials are unavailable, pause execution and explicitly request the missing information from the user or an alternative source.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "6dc98e1533ba47789b2ef70a16c5bfa2", "memory_type": "task", "when_to_use": "When interacting with APIs that do not explicitly provide a 'status' field in their response.", "content": "Always review API documentation to understand the structure of responses and infer statuses or states based on available fields, such as timestamps or flags, instead of assuming standard fields like 'status' exist.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "da07ce9be41c449dbe8a721025add3c0", "memory_type": "task", "when_to_use": "When an API call fails due to expired or missing tokens.", "content": "Re-authenticate to refresh tokens and validate their inclusion in subsequent requests, ensuring proper header or parameter usage as per API specifications.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "bd99d20734004a0680bc4256adb9f049", "memory_type": "task", "when_to_use": "When summing values from paginated or filtered API responses, such as transaction histories.", "content": "Paginate through all available data and validate filters (e.g., date ranges, user-specific queries) to ensure completeness and accuracy of aggregated results.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "ff2dbdff1de9475886d71ffafaa79990", "memory_type": "task", "when_to_use": "When interacting with APIs requiring authentication, and the initial login attempt fails.", "content": "Always verify whether the username format (e.g., email vs. phone number) aligns with the API's expected input. Misalignment in username format can lead to persistent authentication failures despite having the correct password.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "f28886ed03c240ba8829af40bbc92935", "memory_type": "task", "when_to_use": "When handling incomplete data about user actions (e.g., who has already paid).", "content": "If the system lacks direct methods to confirm prior transactions or payments, cross-reference available data sources (e.g., Venmo transaction history, notes, or external records) before proceeding with irreversible actions like payment requests.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "b5ca91a40c514aa0a04fbb0eca17303a", "memory_type": "task", "when_to_use": "When handling date-sensitive queries in API calls, especially when the current date is not provided.", "content": "Always verify and dynamically determine the relevant date range based on the current context or explicitly confirm assumptions about dates with the user to avoid incorrect filtering of data.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "6ddc2bdd41194904969b6d68a46bf75b", "memory_type": "task", "when_to_use": "When interacting with APIs requiring authentication, such as Venmo or Phone apps.", "content": "Always verify the validity of access tokens before making API calls. If an access token has expired, reauthenticate to obtain a new one before proceeding with subsequent steps.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "820e14efc58d4f72a048454102c4f0b2", "memory_type": "task", "when_to_use": "When filtering data from paginated API responses, such as transaction histories or contact lists.", "content": "Ensure proper handling of pagination by looping through all available pages until no further results are returned. Failure to do so can result in incomplete data retrieval.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "0b069a92d0cc4c2596aed607eb0b1aec", "memory_type": "task", "when_to_use": "When identifying specific entities (e.g., roommates) based on relationships or attributes in user data.", "content": "Cross-reference relationship labels (e.g., 'friend', 'roommate') and other contextual clues to accurately identify relevant entities. Misidentification can lead to incorrect filtering and skewed results.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "691d997b173349c1bd0438fa8e22db25", "memory_type": "task", "when_to_use": "When encountering repeated `NameError` issues due to undefined variables during multi-step processes.", "content": "Ensure all required variables are explicitly defined in the current scope before they are referenced. Validate intermediate outputs at each step to maintain flow continuity.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "d4259fde06f247bb9f903e72eeab0f68", "memory_type": "task", "when_to_use": "When handling API authentication or credential retrieval in a Python REPL environment.", "content": "Ensure that all top-level code statements are properly aligned without unintended indentation to avoid syntax errors.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "7bbf913f24f1407392ba12e3bce532d0", "memory_type": "task", "when_to_use": "When processing paginated API responses, such as playlists or songs.", "content": "Always handle pagination explicitly by iterating through pages until no further results are returned to ensure completeness of data retrieval.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "bd9979919ed04ef096834c0f397262ff", "memory_type": "task", "when_to_use": "When interacting with APIs that enforce unique constraints (e.g., one review per user per song), ensure proper checks before creating or updating data.", "content": "Always verify ownership and existence of related records (e.g., reviews) before attempting to create new ones to avoid conflicts like duplicate entries.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "4710adaed705414ba9f4f1069ce2caf9", "memory_type": "task", "when_to_use": "When encountering an error due to unavailable functionality in an API.", "content": "If a critical API feature is missing, acknowledge the limitation early and adjust the task scope or requirements to align with available capabilities.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "b01253eabb884fac9e348918a307051b", "memory_type": "task", "when_to_use": "When handling paginated API responses, ensure all pages are processed without prematurely breaking the loop.", "content": "Always verify the termination condition for loops that handle paginated data to avoid missing records from subsequent pages.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "1a9ce11b6133414eb716ae1cbf099849", "memory_type": "task", "when_to_use": "When extracting specific fields (e.g., passwords or tokens) from API responses, ensure proper syntax and indentation in code.", "content": "Syntax errors due to unexpected indentation can disrupt task execution; validate code formatting during development.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "094b78e4236d4174a22261842b724826", "memory_type": "task", "when_to_use": "When encountering persistent authentication errors despite multiple username/password attempts.", "content": "Always verify the exact authentication requirements (e.g., username format, password validity) by consulting API documentation or system guidelines before concluding that credentials are incorrect.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "d7448a5889654e02996b1d52fb9454ba", "memory_type": "task", "when_to_use": "When working with file paths in APIs that expect specific formats (e.g., relative vs. absolute paths).", "content": "Ensure file paths are formatted correctly according to the API's requirements. Misaligned path formats can result in validation errors or failed requests.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "646b19759ef147ed89f5f65aee7914e1", "memory_type": "task", "when_to_use": "When parsing semi-structured data like text files with varying formats for key information (e.g., costs).", "content": "Use flexible pattern-matching techniques (e.g., regex) and implement fallback logic to handle cases where the primary pattern does not match. This ensures robustness against unexpected data formats.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "17b1d595fa3543708f4675d41b92ceb2", "memory_type": "task", "when_to_use": "When needing to extract and aggregate specific data from multiple files in a directory.", "content": "The step pattern involved listing all relevant files, filtering them by criteria (e.g., year and file type), reading their contents using an API, and extracting key information (e.g., 'Total Amount') via parsing. Using regex or specific string matching ensured accurate extraction of monetary values, even if formatting varied slightly across files. Summing these values provided the desired total. This approach is effective for batch processing structured text files with consistent patterns.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "27846ebab5994633bf9f75cef16e3dd0", "memory_type": "task", "when_to_use": "When encountering API errors due to incorrect parameter names or response structures.", "content": "Upon receiving an error related to missing parameters or unexpected data types, inspecting the raw API response helped identify the correct structure (e.g., locating the 'content' field within a dictionary). Adjusting subsequent calls based on this insight resolved the issue. This iterative debugging technique ensures robust interactions with APIs whose documentation may not fully describe edge cases.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "41b874114bb04241a345d3cdb1f8cbf3", "memory_type": "task", "when_to_use": "When encountering repeated authentication failures despite using expected credentials.", "content": "Verify the validity of credentials early in the process and confirm the authentication mechanism (e.g., token-based, username/password). If credentials are outdated or invalid, request updated information before proceeding.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "97eb544e9dc34a01b85643253ad83b07", "memory_type": "task", "when_to_use": "When parsing text files for specific information, such as costs, and the expected keywords or formats are not found.", "content": "Expand keyword searches and handle variations in data formatting (e.g., currency symbols, multi-word labels) to ensure robust extraction of target information.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "d6ca6f602084470f8d2f2b35900dc520", "memory_type": "task", "when_to_use": "When API documentation indicates required parameters but the values provided fail validation.", "content": "Cross-check parameter assumptions (e.g., username format, password sources) against explicit API specifications and seek clarification on ambiguous fields like 'username' or 'password'. Misinterpretation of required inputs can lead to repeated failures.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "e8df63d9651546709bbae9991fe2a345", "memory_type": "task", "when_to_use": "When performing multi-step operations like file organization, ensure intermediate steps (e.g., directory creation) are completed successfully before proceeding.", "content": "Failure to create necessary directories or validate their existence can cause subsequent operations (e.g., moving files) to fail. Always implement checks to confirm the success of prerequisite steps.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "1fbf1b2302634d778295158072e17044", "memory_type": "task", "when_to_use": "When encountering persistent authentication errors despite using available credentials.", "content": "Verify whether the API requires an OAuth token or another form of authentication beyond a simple password. If no method exists to retrieve such tokens, escalate the issue as unresolvable with current tools.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "f093dc951be44c4eafafb21cc1b3d536", "memory_type": "task", "when_to_use": "When handling paginated API responses to ensure all data is processed.", "content": "Always verify that pagination logic (e.g., incrementing page_index) correctly handles edge cases, such as empty pages or APIs with inconsistent page limits.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "855a3853adf842098163073be459b591", "memory_type": "task", "when_to_use": "When automating irreversible actions like deletions in a user's account.", "content": "Implement safeguards, such as dry-run testing or confirmation steps, before executing irreversible operations to prevent unintended data loss.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "02a4b53417ee405fb9f8f22d79ac19ec", "memory_type": "task", "when_to_use": "When handling multi-step tasks involving authentication and data retrieval, ensure all required variables (e.g., access tokens) are defined before proceeding.", "content": "Always verify that critical variables like access tokens are initialized and available before executing dependent API calls. Missing or undefined variables can cause runtime errors and task failure.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "e1cd5b52c88141eb84ece2120d6708de", "memory_type": "task", "when_to_use": "When iterating through paginated API responses, ensure the loop termination condition is robust and accounts for empty results.", "content": "Paginated APIs may return empty pages unexpectedly. Always check for null or empty responses to avoid infinite loops or missed data.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "b8be504859934d5ca96ec37d8ab80666", "memory_type": "task", "when_to_use": "When updating ratings or making irreversible changes, confirm the correctness of the logic by testing on a small subset of data first.", "content": "Irreversible actions like updating ratings should be carefully validated to prevent unintended modifications. Testing on a smaller dataset helps identify logical flaws early.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "7847f52267fb47aeb5665b87e020b328", "memory_type": "task", "when_to_use": "When interacting with APIs that require pagination, such as fetching playlists or large datasets.", "content": "Always implement pagination handling to ensure all data is retrieved. Missing pagination logic can lead to incomplete data processing and task failure.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "c94d298d022447b7ae90dd828c5e0638", "memory_type": "task", "when_to_use": "When handling multi-step tasks involving paginated data retrieval and filtering.", "content": "Always verify the completeness of paginated data by iterating until no new results are returned, and ensure deduplication logic is applied before further processing.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "8c7735e4db214750aa02486956e3ff5f", "memory_type": "task", "when_to_use": "When an API call fails due to a missing or incorrect method.", "content": "Before executing critical code, always review the API documentation to confirm method availability and required parameters.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "4fd5456435e041f6b1cfb6f69d0bd90a", "memory_type": "task", "when_to_use": "When automating irreversible actions like deletions in a system.", "content": "Implement safeguards such as dry runs or confirmation prompts before executing deletion commands to prevent unintended data loss.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "19400d727919419f8c1786f9cca062b5", "memory_type": "task", "when_to_use": "When a task involves multiple domains (e.g., song library and playlists) with potential overlap in data sources.", "content": "Clarify whether actions in one domain (e.g., song library) automatically propagate to related domains (e.g., playlists). If unsure, explicitly verify and handle each domain to avoid incomplete task execution.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "6dd93ee8aa9343eca514595e1af832a6", "memory_type": "task", "when_to_use": "When the task involves parsing structured data (e.g., notes, documents) to extract specific information like durations or playlist names.", "content": "Always validate the structure and content of parsed data before proceeding with calculations or decisions. Missing or misaligned fields can lead to incorrect assumptions and downstream errors.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "126b09f0cf6949039b1fa928364b0b88", "memory_type": "task", "when_to_use": "When encountering authentication failures due to invalid credentials or missing tokens.", "content": "Always verify that required authentication details, such as SMS codes or access tokens, are correctly retrieved and used. Placeholder values will lead to persistent failures.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "d0ec7a8eabe44ac99fbd15b1fa076467", "memory_type": "task", "when_to_use": "When the task involves interacting with APIs to perform an action, but the required functionality is not explicitly provided by the available APIs.", "content": "Always verify that the APIs available provide all necessary functions to complete the task. If critical functionality (e.g., playback initiation) is missing, flag it early in the process and communicate limitations to the user or request clarification on how to proceed.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "f6d7f215bd1e47dea3bb32898e8b66f2", "memory_type": "task", "when_to_use": "When attempting to log in to an app and the password isn't explicitly provided or stored in available resources.", "content": "Always verify if credentials for the required service are available before proceeding. If not, halt execution and request missing information rather than making assumptions or proceeding with incomplete data.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "c2f4d3626ed14cf38745689087977950", "memory_type": "task", "when_to_use": "When managing paginated API responses to ensure complete data retrieval.", "content": "The higher-scoring approach implemented a robust pagination strategy by iterating through pages until no further data was returned, ensuring all playlists were accounted for. In contrast, the lower-scoring approach used a fixed loop limit (page_index < 10), which risks incomplete data retrieval if the total pages exceed the limit.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "b33ede58d6cc41a7949e333c74b985a2", "memory_type": "task", "when_to_use": "When handling multi-step tasks involving paginated API data retrieval.", "content": "Always verify that all pages of paginated data are fully processed before proceeding to the next step. Missing pages can lead to incomplete data handling and task failure.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "48b36dfc9c6a4a7f856192c94f3b4f44", "memory_type": "task", "when_to_use": "When relying on external APIs for authentication and credential management.", "content": "Ensure secure handling of credentials by using dedicated tools (e.g., supervisor app) and avoid hardcoding sensitive information like passwords or tokens in scripts.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "2a4938c47c7f43dfa123e412bdd35048", "memory_type": "task", "when_to_use": "When determining the status of an entity (e.g., whether an album is fully downloaded) based on related entities (e.g., songs in the album).", "content": "Prefer using dedicated APIs (e.g., `show_downloaded_songs`) for accurate status checks over relying solely on metadata fields (e.g., `song['downloaded']`). This ensures decisions are based on authoritative data sources.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "9f5ab74f1f8d4fd48c4179830afb6d5d", "memory_type": "task", "when_to_use": "When handling paginated API responses, ensure all pages are processed correctly.", "content": "Always implement a robust pagination mechanism that accounts for empty results or unexpected API behavior to avoid missing data.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "6fb1be6b209c41718a518caf95248d03", "memory_type": "task", "when_to_use": "When filtering items based on multiple criteria (e.g., liked or downloaded), validate the logic thoroughly.", "content": "Double-check filtering conditions, especially when combining multiple criteria, to ensure no valid items are mistakenly removed.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "7b4d41ef41b347c78b0b65c4dc965199", "memory_type": "task", "when_to_use": "When writing code with multiple indented blocks, ensure consistent indentation to avoid syntax errors.", "content": "Maintain consistent indentation levels across all lines of code to prevent unexpected syntax errors during execution.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "e04babd45b06462f8b2d988ec6cf57b3", "memory_type": "task", "when_to_use": "When cleaning up a user's library by filtering items based on multiple criteria (e.g., liked and downloaded status).", "content": "The agent successfully handled the task by first fetching all relevant data (liked songs, liked albums, downloaded songs, song library, and album library) using paginated API calls. It then used set-based lookups to efficiently filter items meeting the criteria and removed non-compliant items in a systematic manner. This approach ensures scalability and minimizes errors by breaking the task into smaller, verifiable steps.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "041c11ed67d4449c90877dc4cd9e2e5f", "memory_type": "task", "when_to_use": "When interacting with APIs for authentication or sensitive operations, ensure credentials are retrieved securely and errors are handled gracefully.", "content": "Always include fallback mechanisms for credential retrieval and error handling during login to prevent task failure due to missing or incorrect credentials.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "d3a37ea214b74d09bb0f22fa9e5dfd1c", "memory_type": "task", "when_to_use": "When interacting with APIs that require specific parameter names and the initial attempt fails due to missing or incorrect parameters.", "content": "The agent identified a 422 validation error caused by using an incorrect parameter name (`path`) in API calls. By reviewing the error message and aligning the parameter name (`directory_path`) with the API's expected input, the issue was resolved. This highlights the importance of verifying API specifications and adjusting parameter names accordingly.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "587d3d1091a344ea93e46a16dfc4fae5", "memory_type": "task", "when_to_use": "When performing multi-step operations involving file creation, movement, and deletion.", "content": "Ensure intermediate outputs (e.g., ZIP files) are created in the expected locations by validating paths at each step before proceeding to the next operation.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "afbd3ea88776473a8adc55ff42c2f5a6", "memory_type": "task", "when_to_use": "When interacting with APIs that require authentication, ensure all calls include necessary tokens or credentials.", "content": "Always verify API documentation for required parameters like access tokens and include them in every call to prevent unauthorized errors.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "5913b1a45be646f0b0949a7e9f7e68fb", "memory_type": "task", "when_to_use": "Before deleting original files or directories after operations like compression, ensure the new files are successfully created and verified.", "content": "Implement a verification step to confirm the existence and integrity of newly created files before performing irreversible actions like deletion.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "73077eb6679e4982878f4a666b48a91a", "memory_type": "task", "when_to_use": "When working with directory structures returned by APIs, especially when paths are absolute and need parsing.", "content": "Extract relevant components (e.g., vacation spot names) from absolute paths carefully using consistent methods like splitting strings. Validate the extracted names to avoid incorrect file or directory handling.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "1b567e8ecf6f4a6f949261204805e6f1", "memory_type": "task", "when_to_use": "When the user repeatedly sends the same message or action, indicating a possible loop or misunderstanding.", "content": "Detect repetitive user inputs early and confirm task completion to avoid unnecessary cycles. Offer clear closure and invite further questions to ensure the interaction ends effectively.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "212673da0b4346369449fa5d0c64d2df", "memory_type": "task", "when_to_use": "When confirming the completion of a multi-step task involving APIs with potential ambiguities (e.g., playlist identification, pagination).", "content": "Always verify intermediate outputs (e.g., playlist existence, song IDs) to prevent downstream errors. Implement fallback logic for cases where expected data (e.g., 'Liked Songs') is missing.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "f3374778ae04484881e9741e7802d53d", "memory_type": "task", "when_to_use": "When designing loops for paginated API responses or iterating over large datasets.", "content": "Explicitly handle pagination limits and edge cases (e.g., empty pages, missing keys) to ensure all relevant data is processed without omission or duplication.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "ddda3e100ba743988e9093eacaec4675", "memory_type": "task", "when_to_use": "When updating or modifying data through an API, confirm the changes were applied successfully by re-fetching or logging the updated state.", "content": "After performing write operations (e.g., updating ratings), validate the outcome to ensure the intended changes occurred. Silent failures may go unnoticed otherwise.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "ab63d92d3157482c8819f09899c967d6", "memory_type": "task", "when_to_use": "When needing to process multiple sub-directories in a file system, compress them into ZIP files, and clean up the original directories.", "content": "The agent successfully identified all vacation sub-directories within a target directory, compressed each into a uniquely named ZIP file using the directory name, and deleted the original directories. This step pattern worked because it systematically verified the existence of the target directory, listed contents recursively where needed, and executed compression and deletion operations in sequence for each item.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "6dc53f7be7a741f281a4f10ae789ffde", "memory_type": "task", "when_to_use": "When encountering persistent authentication errors despite using available credentials.", "content": "Always verify that the provided credentials (e.g., username, password, or token) match the expected format and source. Placeholder or dummy credentials may not work in real or test environments.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "cc4fafcc78d943c68a57d584469dcf25", "memory_type": "task", "when_to_use": "When the task requires accessing specific data (e.g., recommendations, genres, or release years) that may not be directly supported by available APIs.", "content": "Always verify whether the required functionality exists in the available APIs before starting execution. Missing API capabilities can lead to task failure, and early detection helps avoid wasted effort.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "406644afd66845338321229fc3ef886c", "memory_type": "task", "when_to_use": "When interacting with APIs that require authentication, such as Spotify or similar services.", "content": "Always validate credentials (e.g., passwords, tokens) before proceeding with API calls. Ensure the correct extraction and usage of sensitive data like access tokens to avoid runtime errors.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "94808586334b4d9c9b016a4f58817291", "memory_type": "task", "when_to_use": "When checking for the existence of an entity (e.g., playlist, file) before creating it to avoid duplication errors.", "content": "Always perform robust matching (case-insensitive, space-agnostic) when comparing names or titles to prevent false negatives in existence checks.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "4931b86aa6074bc1851a5b8c6d55b205", "memory_type": "task", "when_to_use": "When iterating through paginated API responses to collect all relevant data.", "content": "The higher-scoring approach included a well-structured pagination loop with clear termination conditions, ensuring all pages of data were processed without missing items or causing infinite loops. The lower-scoring approach lacked clarity in pagination logic, risking incomplete data retrieval.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "bd2a0333a49540cab52b911c525e232e", "memory_type": "task", "when_to_use": "When interacting with APIs that require specific permissions or tokens for certain actions.", "content": "Always verify the availability and scope of required APIs before attempting operations like creating resources or modifying data. Simulate missing functionalities when direct execution isn't possible.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "3abbb900b43d481e93870862a0e22817", "memory_type": "task", "when_to_use": "When interacting with APIs that may not provide critical metadata (e.g., file creation dates) needed for categorization or decision-making.", "content": "Always verify API capabilities beforehand to ensure the required data is available. If key metadata is missing, document the limitation and implement a fallback strategy that aligns with the task's intent.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "889bed1e2c704d9d9903f6a492701cc2", "memory_type": "task", "when_to_use": "When finalizing tasks with unresolved ambiguities or incomplete steps due to external constraints.", "content": "Clearly communicate limitations and assumptions in the final output to set expectations and allow for future refinement when additional data becomes available.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "acf01062e96b4e94a9fd614f5a23eadc", "memory_type": "task", "when_to_use": "When attempting to interact with an API that involves actions not directly related to standard CRUD operations (e.g., liking songs, accessing playback queues).", "content": "Before initiating task execution, always confirm the availability of APIs for all required functionalities by reviewing API documentation thoroughly. Missing functionality in the toolset should be flagged early to avoid wasting resources.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "ca833759e33e4a2aa5ed36139f058dac", "memory_type": "task", "when_to_use": "When interacting with APIs requiring authentication tokens, ensure the token is properly defined and accessible in subsequent steps.", "content": "Always verify that variables like access tokens are correctly initialized and available before using them in API calls. Missing or undefined variables can lead to execution failures.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "09b78b6053704b04a79c3613b4b95669", "memory_type": "task", "when_to_use": "When handling paginated or queued data, ensure proper extraction and iteration over all items to avoid missing elements.", "content": "Failure to correctly extract or iterate through paginated or queued data can result in incomplete task execution. Validate data structures and test extraction logic incrementally.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "91b87962eea94f7e8f6066c4ace22bed", "memory_type": "task", "when_to_use": "When interacting with APIs that modify user data, such as liking songs or updating playlists.", "content": "Always verify API specifications (using `show_api_doc`) before making calls to ensure correct parameters and avoid silent failures or incorrect actions.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "95b169556a204dd3aca70d8f8ff8b7be", "memory_type": "task", "when_to_use": "When interacting with APIs that require authentication, ensure credentials are correctly retrieved and passed.", "content": "Always verify the structure of API responses for credential retrieval to avoid errors in subsequent steps. For example, confirm the account name matches before extracting passwords.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "323f6d733dbf40dcb90ca6f6a796b49b", "memory_type": "task", "when_to_use": "When iterating over paginated or queued data, ensure all items are processed without prematurely ending the loop.", "content": "Double-check conditions in loops (e.g., `while` or `for`) to ensure they account for edge cases like empty queues or missing data fields.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "dc9b2bb4278f4470968e8afa2487488f", "memory_type": "task", "when_to_use": "When interacting with APIs that require authentication, ensure the correct access tokens and permissions are validated before proceeding.", "content": "Authorization errors often arise from mismatched or expired tokens. Always confirm that the retrieved token matches the required scope and is passed correctly in headers or parameters.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "e4264083575242248b4eaf54aae08190", "memory_type": "task", "when_to_use": "When a task involves reversing an action (e.g., refunding payments), prioritize identifying all necessary steps and fallback options if the primary method fails.", "content": "Failure to reverse actions due to API limitations or authorization issues highlights the importance of having alternative strategies, such as contacting the recipient or escalating to human intervention.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "acb81420fdd24b71b83259f8bcd6aea5", "memory_type": "task", "when_to_use": "When needing to interact with an API to retrieve or manipulate user-specific data (e.g., payment requests, transactions).", "content": "The agent successfully retrieved the list of sent payment requests using `show_sent_payment_requests` and identified the most recent one by evaluating the details. It then attempted to refund via `update_payment_request`, but when that failed due to the request being already completed, it switched to creating a new transaction using `create_transaction`. This highlights the importance of fallback strategies when primary methods fail.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "9458275ae4924e268e7491568ca3af24", "memory_type": "task", "when_to_use": "When interacting with APIs that involve state changes (e.g., approve, deny, delete), ensure the current state allows for the intended action.", "content": "Before attempting an API call to modify or reverse a transaction, verify the state of the object (e.g., approved, denied, pending) and consult the API documentation to confirm whether the operation is permissible in that state.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "ff28043899d84bb3b431ab98c000b9d1", "memory_type": "task", "when_to_use": "When encountering authentication errors while accessing an app's API, and the required credentials are not explicitly provided.", "content": "Always verify if all necessary credentials (e.g., username, password) for an app's API are available before attempting login. Missing credentials will lead to failed authentication, halting progress.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "084dda680704429c85773ce929998d4e", "memory_type": "task", "when_to_use": "When working with date-sensitive tasks, ensure proper parsing and comparison of date formats to avoid filtering errors.", "content": "Mismatched or improperly parsed date formats can lead to incorrect filtering of data, resulting in missed or unintended actions. Always validate date parsing and comparison logic during implementation.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "a93dc38e74ee4e59822f518e07fc1757", "memory_type": "task", "when_to_use": "When deleting paginated items (e.g., messages, files) from an API.", "content": "The step pattern involved looping through all pages of results using a `page_index` until no more results were returned. Each item found was processed and deleted individually. This ensures that all relevant items are handled systematically without missing any due to pagination limits.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "98bf044caa3744cc854d9acb1d97ea0a", "memory_type": "task", "when_to_use": "When needing to authenticate with an API before performing actions.", "content": "The agent retrieved the supervisor's credentials using the `supervisor` app's `show_account_passwords` API, then authenticated with the target app (phone) by calling its `login` API. This ensured secure access to the necessary APIs for completing the task.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "3179b2485071485db91408b80585a791", "memory_type": "task", "when_to_use": "When deleting multiple items (e.g., messages, files) from an API that uses pagination.", "content": "The step pattern involved searching for all relevant items across multiple pages using a while loop with a page_index. Each item was then iteratively deleted using its unique identifier. This ensured no items were missed due to pagination limits and allowed for scalable handling of large datasets.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "e450ac0891454171ac624357d96f81fe", "memory_type": "task", "when_to_use": "When API authentication requires both username and password, and the credentials are stored in a secure app like 'supervisor'.", "content": "The agent successfully retrieved account credentials using the supervisor app and handled an initial login failure by identifying the missing username parameter. By explicitly specifying both username and password, the login succeeded, demonstrating robust error recovery and adherence to API requirements.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "ce2db1b746614fc8b3072d8e517815b0", "memory_type": "task", "when_to_use": "When debugging failed executions with unclear error messages.", "content": "Break down complex operations into smaller, testable chunks to isolate and identify the root cause of failures early in the process.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "232ccba6fc834c209dd29a7c2163f1a8", "memory_type": "task", "when_to_use": "When interacting with paginated APIs where the total number of results may exceed the maximum page limit per request.", "content": "The agent successfully handled pagination by looping through pages using a `while` loop, incrementing the `page_index` until no more results were returned. This ensured all items (e.g., text and voice messages) were retrieved and processed. The use of the maximum allowed `page_limit` (20 in this case) optimized the number of API calls while remaining compliant with API constraints.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "a580a9e1c2d74daa9f7fca2c1a3f6e67", "memory_type": "task", "when_to_use": "When an API requires authentication via login credentials, but initial attempts fail due to incorrect parameters.", "content": "Upon encountering a 401 Unauthorized error during login, the agent reviewed the API documentation to validate the expected format for the `username` parameter. By confirming that the phone number, not the email, was required, the agent corrected the login call and successfully authenticated. This highlights the importance of consulting API specifications when errors occur.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "decd0106bc744bc7a818af4f74b2e66b", "memory_type": "task", "when_to_use": "When interacting with paginated APIs to retrieve comprehensive datasets for filtering or processing.", "content": "The agent successfully retrieved all classical artists by iterating through paginated results using a while loop. This ensured no data was missed and allowed for subsequent filtering based on follower count. Handling pagination explicitly prevents incomplete data retrieval, which is critical for accurate downstream decisions.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "0fb12e28f4fa4d85bebf71a7544ac245", "memory_type": "task", "when_to_use": "When interacting with paginated APIs to retrieve and process large datasets.", "content": "The agent successfully retrieved all reggae artists by iterating through paginated API responses. It initialized a `page_index` variable, called the API in a loop, and incremented the index until no more results were returned. This ensured complete data retrieval without missing any entries.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "ec7b57d346c640378cfb23023946474b", "memory_type": "task", "when_to_use": "When making authenticated API calls requiring access tokens.", "content": "Explicitly include and validate the access token in every API call to prevent unauthorized access errors, even if the token was validated earlier in the process.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "33bfe383ff9f4a3d8283330338840c6d", "memory_type": "task", "when_to_use": "When completing tasks involving multiple steps or external systems.", "content": "Implement intermediate checks or logging to confirm successful execution of critical steps, such as verifying follow actions or tracking counts of processed items.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "3475476713f9406092d4ff4f9a3d46c0", "memory_type": "task", "when_to_use": "When interacting with paginated APIs to retrieve a complete dataset across multiple pages.", "content": "The step pattern involved iterating through API pages using a while loop, incrementing the page index until no more results were returned. This ensured all available data (e.g., EDM artists) was retrieved without missing entries due to pagination limits. The use of a break condition when the result set was empty ensured efficiency and prevented unnecessary API calls.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "0570a4fb893a46dea26f7e0e9ad60d3b", "memory_type": "task", "when_to_use": "When accessing APIs that require authentication, ensure the necessary credentials are available beforehand.", "content": "Always verify that all required credentials (e.g., passwords, tokens) for an API are accessible via the available tools before attempting authentication. Missing credentials can lead to task failure.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "72494a822cc041d49cd80968141877bd", "memory_type": "task", "when_to_use": "When parsing structured data (e.g., contacts, receipts) from files to extract specific information.", "content": "Ensure the parsing logic aligns with the actual file format and includes error handling for unexpected structures or missing fields.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "a6baf12465d94e28bfc7347182db2a29", "memory_type": "task", "when_to_use": "When encountering persistent authentication errors despite trying multiple credentials or tokens.", "content": "Verify whether the required authentication method (e.g., token, password, or OAuth) is explicitly documented and supported by the API. If the correct method is unavailable, the task may be unfeasible with the current toolset.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "45f6e515737f40258329535d7f5d26a2", "memory_type": "task", "when_to_use": "When iterating through paginated API responses to retrieve complete datasets.", "content": "The higher-scoring approach implemented a robust loop to handle paginated data, ensuring all pages were processed without missing information. This attention to detail in pagination logic (e.g., incrementing `page_index` until no more results were returned) ensured comprehensive data retrieval, which is critical for tasks like counting playlists or identifying contacts.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "6e23116fe6f34204bca0642d6c0105cc", "memory_type": "task", "when_to_use": "When encountering a 401 unauthorized error while trying to access APIs that require authentication.", "content": "Always verify the availability of an access token or login mechanism before attempting to use APIs. If no explicit login method exists, check whether credentials (e.g., passwords) from related services can act as substitutes for tokens.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "94fbf3b21b7d457288e695d45d57889e", "memory_type": "task", "when_to_use": "When attempting to authenticate with an app and credentials are unavailable or unknown.", "content": "Always verify the availability of required credentials (e.g., passwords, access tokens) before initiating a task. If credentials are missing, use available tools (e.g., password reset APIs) to retrieve or reset them before proceeding.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "1f5a08d055d74387ab8d4fbc349f49ec", "memory_type": "task", "when_to_use": "When updating or modifying data through an API, confirm that the target item (e.g., note, playlist) matches the intended task description.", "content": "Ensure the exact item being modified aligns with the user’s intent. Here, the note title did not explicitly mention 'Learning to cook a signature dish from scratch,' yet it was assumed to be the correct note based on partial matching.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "1d806eb7d6454a0a9a239cecf5ec0206", "memory_type": "task", "when_to_use": "When encountering repeated or empty inputs after task completion.", "content": "After marking a task as complete, confirm the outcome explicitly and invite new tasks to avoid confusion or unintended loops caused by repetitive user inputs.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "b677de0263384266b3db0c2d8b17b9ab", "memory_type": "task", "when_to_use": "When an API call fails due to unauthorized access or missing credentials.", "content": "Always authenticate with the required app before making API calls that depend on authorized sessions. Check API specifications for required parameters like access tokens.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "117eda9ae3bd4532bc7ed083e8f17560", "memory_type": "task", "when_to_use": "When interacting with APIs that enforce idempotency (e.g., liking a transaction only once)", "content": "Always implement error handling to gracefully manage duplicate actions or unprocessable requests, ensuring the script can continue without crashing.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "33ff62be259245a7aa9d894498ff6b59", "memory_type": "task", "when_to_use": "When interacting with an API that requires authentication and the credentials are not initially available.", "content": "Retrieve account credentials (e.g., username, password) from a secure source like the supervisor app, then authenticate using those credentials to obtain an access token. This ensures proper authorization for subsequent API calls.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "b54351ec579e4167bc8849080e1b4f43", "memory_type": "task", "when_to_use": "When searching for a specific item within a collection returned by an API.", "content": "Use filtering techniques (e.g., list comprehensions) to extract relevant data from API responses. For example, after retrieving a list of notes, filter by title or content to locate the target item efficiently.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "02ba2091c54a485da1073bddc3df5a22", "memory_type": "task", "when_to_use": "When updating content in a structured format retrieved via an API.", "content": "Fetch the current content, modify it programmatically (e.g., replacing specific text), and send the updated content back using the appropriate API endpoint. This ensures minimal disruption to existing data while achieving the desired change.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "1519a0671b59407fad072198ed9080ac", "memory_type": "task", "when_to_use": "When encountering persistent authentication errors despite repeated attempts.", "content": "Always verify the accuracy of critical inputs like phone numbers and codes by cross-referencing with the registered account details or resending verification codes. Ensure placeholders in code are replaced with actual values before execution.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "16d25ae5567444cfb757403c47658dae", "memory_type": "task", "when_to_use": "When interacting with an API that requires authentication and the agent encounters a 401 error.", "content": "Upon encountering a 401 error, the agent successfully retrieved account credentials using the supervisor app's `show_account_passwords` API, logged into the target app to obtain an access token, and used the token for subsequent authenticated API calls. This ensures proper authorization and avoids unauthorized access errors.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "7c373e40826e4805b4faeb2212ec8715", "memory_type": "task", "when_to_use": "When updating specific content within a structured note or document via an API.", "content": "The agent retrieved the full content of the target note using the `show_note` API, identified the specific text requiring modification, updated it programmatically, and saved the changes using the `update_note` API. This approach ensures precision in modifying only the intended portion of the content while preserving the rest of the document.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "7972197924ec4322a6d25051833cff13", "memory_type": "task", "when_to_use": "When interacting with APIs requiring authentication, ensure valid credentials and tokens are retrieved before proceeding.", "content": "Always verify that login steps are successful and access tokens are correctly stored in variables before making subsequent API calls. Skipping or mishandling this can lead to unauthorized errors (e.g., 401).", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "439a21bf0c2d43c1b0aade43062a10c3", "memory_type": "task", "when_to_use": "When managing multiple related tasks (e.g., alarms), ensure proper filtering and handling of each task item.", "content": "Before modifying or deleting items in a list (e.g., alarms), confirm the correct identification of target items using unique attributes like names or IDs. Missing this step can result in unintended actions on wrong items.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "8efe99804f474f6baf93b1519d531b37", "memory_type": "task", "when_to_use": "When parsing and manipulating time data in Python scripts.", "content": "Ensure all necessary modules (e.g., datetime) are imported before using their methods. Forgetting to import a module like datetime can lead to AttributeError during execution.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "d499c760361b453a90f95615a6e28f4d", "memory_type": "task", "when_to_use": "When an API requires authentication and credentials are not readily available.", "content": "Always verify that all required credentials (e.g., username, password) for an app or service are accessible before attempting to use its APIs. Missing credentials block progress and cannot be bypassed autonomously.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "1826aeb82e6048afb9077e76603f1f31", "memory_type": "task", "when_to_use": "When managing paginated or list-based data (e.g., alarms, playlists).", "content": "Before modifying data retrieved from APIs, ensure all relevant entries are correctly identified and filtered. Use descriptive keys (e.g., alarm name) to locate specific items in a dataset.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "304224db0bdc4b76b6742ae225ce1529", "memory_type": "task", "when_to_use": "When handling time adjustments in tasks involving date/time manipulation.", "content": "Use reliable methods to manipulate time (e.g., datetime libraries) and ensure the output format matches the API's expected input format for time fields.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "b3a91996f5354043a72c6af9bc498285", "memory_type": "task", "when_to_use": "When interacting with paginated APIs to retrieve all available data (e.g., playlists, songs).", "content": "The agent successfully implemented a pagination loop to fetch all pages of data by incrementing the `page_index` until no more results were returned. This ensures complete data retrieval without arbitrary limits and avoids missing any entries.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "30db556be9504158b707193233dcf123", "memory_type": "task", "when_to_use": "When debugging syntax errors during multi-step coding sequences, especially when loops or control structures are involved.", "content": "Syntax errors (e.g., missing colons in Python loops) should be caught early by testing small chunks of code incrementally. Always validate each step's correctness before proceeding to avoid cascading failures.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "b1e8f09e471d4db98ce78704e65da01b", "memory_type": "task", "when_to_use": "When interacting with APIs requiring authentication tokens or credentials.", "content": "Always ensure that necessary variables like passwords or access tokens are retrieved and defined before using them in subsequent steps. Missing this can lead to NameErrors and disrupt task execution.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "e4a6a2a4747940e799301eaf7e7c4dab", "memory_type": "task", "when_to_use": "When processing nested API calls to extract detailed information from related entities (e.g., playlists and songs).", "content": "Verify the structure of API responses at each level to ensure all required fields (e.g., durations) are present. Assuming fields exist without confirmation can lead to missing data or incorrect calculations.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "7bf35224fd33435fabbd6a6ed64f1137", "memory_type": "task", "when_to_use": "When needing to retrieve paginated data from an API and process each item in the retrieved dataset.", "content": "The agent successfully employed a while loop to handle paginated data retrieval using a 'page_index' parameter. By incrementing the page index until no more data was returned, the agent ensured all available data was collected. This approach is robust for APIs that return data in chunks and require pagination handling.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "96234d28dd694914a043dc2787354812", "memory_type": "task", "when_to_use": "When final output requires conversion or rounding of numerical results before task completion.", "content": "After calculating the maximum playlist duration in seconds, the agent converted the result into minutes and rounded it to the nearest integer before completing the task. This ensured the answer matched the required format and precision, demonstrating attention to detail in fulfilling task requirements.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "ecb34d8ac79540cda30ab36303388c10", "memory_type": "task", "when_to_use": "When needing to identify and interact with a specific item (e.g., playlist, song) in an API-driven system.", "content": "The sequence of first searching for the correct item using unique identifiers (e.g., owner email or name) ensures precision when multiple similar items exist. This avoids ambiguity and ensures the right resource is selected for subsequent actions. For example, filtering playlists by owner email ('susanmiller@gmail.com') helped isolate the correct playlist owned by the user.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "50abd530131a4a9d8b3a66c164f722a1", "memory_type": "task", "when_to_use": "When encountering KeyError or missing fields during data processing.", "content": "Validate API response schemas before accessing nested fields. Handle missing fields gracefully to prevent execution failures.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "c544a66f3aed46018a4361643868b028", "memory_type": "task", "when_to_use": "When interacting with APIs that require authentication, such as Venmo or Spotify.", "content": "Always validate and ensure that sensitive credentials like passwords or access tokens are correctly retrieved and used in subsequent steps. Missing or incorrect credentials can lead to failed API calls.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "ccf56c3987ec409099cf325b5b7e373f", "memory_type": "task", "when_to_use": "When filtering data based on specific criteria, such as transactions involving coworkers.", "content": "Ensure that all necessary data fields (e.g., participant names, tags) are available and correctly parsed before applying filters. Missing fields can result in incomplete or incorrect operations.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "35b9faf9e2ea4ef79f217a644dcfd5b7", "memory_type": "task", "when_to_use": "When designing multi-step processes involving paginated API responses.", "content": "Ensure pagination logic is robust by checking for empty results and incrementally fetching all pages until no more data is returned.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "73c399464408442e994b189f01ff2c86", "memory_type": "task", "when_to_use": "When interacting with APIs that require authentication, such as Spotify's login API.", "content": "Always retrieve and verify credentials (e.g., username, password, or access tokens) before making authenticated API calls. Missing or incorrect credentials can lead to failed executions.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "9a3fdb07658d440c8edb1fbcc2520f7f", "memory_type": "task", "when_to_use": "When filtering or analyzing datasets, such as identifying the most listened-to song.", "content": "Validate the structure and content of the dataset before applying filters or transformations. Incomplete or unexpected data formats can lead to runtime errors or incorrect results.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "37a9f21ada61460e8c5adffdcd65e79b", "memory_type": "task", "when_to_use": "When interacting with APIs that return paginated results, such as fetching payment requests or playlists.", "content": "Always validate the structure of API responses and handle pagination explicitly by iterating through pages until no more data is returned. Missing pagination logic can lead to incomplete data retrieval.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "46f1e44e981543b9924c6a3b9da277fa", "memory_type": "task", "when_to_use": "When encountering unexpected API outputs like 'OzVS[j5' instead of structured data.", "content": "Verify the environment's mock setup or API configuration to ensure it returns valid, expected responses. Unexpected outputs often indicate misconfigured mocks or incorrect assumptions about API behavior.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "f6412c1d7d1845dd87569718552e2b8b", "memory_type": "task", "when_to_use": "When API exploration fails to reveal expected functionality (e.g., `show_contacts` in the phone app).", "content": "Thoroughly review all available APIs for alternative methods to achieve the goal. Missing an expected API may indicate the need to pivot strategies or seek clarification on task requirements.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "85cb78b42ef740a688e366582e5b4d60", "memory_type": "task", "when_to_use": "When encountering KeyError or missing data during API interactions.", "content": "Before accessing nested dictionary keys, validate their existence using `.get()` or conditional checks to prevent runtime errors. Additionally, review API documentation to ensure correct key usage.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "d0d4fad88a7e499695415d15f4ab5851", "memory_type": "task", "when_to_use": "When processing paginated data from an API and performing actions on each item.", "content": "Ensure the pagination logic is robust and handles edge cases like empty responses gracefully. Additionally, validate that all items are processed before marking the task complete.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "1e39a69a51b04420a93ef86cdc3ae4dd", "memory_type": "task", "when_to_use": "When determining relationships (e.g., friendship status) using indirect indicators in API responses.", "content": "Explicitly confirm the meaning of fields like 'friends_since' in API responses to avoid incorrect assumptions about relationships or statuses.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "f63bd8947220463da35131014a3b68ac", "memory_type": "task", "when_to_use": "When interacting with APIs that involve paginated data retrieval, such as fetching lists of transactions or requests.", "content": "Always ensure that the pagination logic is correctly implemented to handle all pages. Missing a proper termination condition or failing to increment the page index can lead to incomplete data retrieval.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "c42aa179adbc4f568524d5e54edf61a9", "memory_type": "task", "when_to_use": "When completing tasks that require returning an answer or summary after execution.", "content": "Verify that the final output aligns with the expected result format and includes any necessary information (e.g., count of processed items). Double-check whether apis.supervisor.complete_task() needs an argument before calling it.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "73264b8fe66d488a8afed2ae7add139f", "memory_type": "task", "when_to_use": "When automating actions on behalf of a user, such as approving payment requests or modifying account data.", "content": "Validate the scope and intent of automated actions to avoid unintended consequences. For example, ensure only relevant payment requests (e.g., from coworkers and friends) are processed, avoiding blanket approvals.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "f528c7d915604ea481e2f139cc885f0f", "memory_type": "task", "when_to_use": "When searching for specific information (e.g., most played song) across multiple related entities (e.g., songs by an artist) using APIs.", "content": "The successful step pattern involved breaking the task into discrete logical phases: first, identifying the relevant API calls to gather data about the artist and their songs; second, using filtering logic to extract meaningful attributes (e.g., play count); and finally, implementing a comparison mechanism to determine the highest value. This iterative approach ensured accurate identification of the desired result (most played song).", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "4bde5271c1444ff0b84a636f39e7f981", "memory_type": "task", "when_to_use": "When handling paginated API responses or datasets that require iteration to ensure complete coverage.", "content": "The agent successfully navigated paginated results by incrementally querying pages until all relevant data was retrieved. This method ensures no critical information is missed and provides a reusable framework for tasks requiring exhaustive data collection.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "d0f51691fa0f484caef702260400534f", "memory_type": "task", "when_to_use": "When needing to identify and extract specific information from paginated API results based on a sorting criterion.", "content": "The agent successfully used the `search_songs` API with parameters such as `artist_id` and `sort_by` set to `-play_count` to retrieve songs sorted by least played. By iterating through paginated results, it ensured all relevant data was collected before determining the minimum play count. The approach of sorting at the API level minimized unnecessary post-processing and ensured efficiency.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "312cb9ae4c334152852e661868b94ffd", "memory_type": "task", "when_to_use": "When encountering a task that seems ambiguous or lacks sufficient information to proceed.", "content": "Explicitly state assumptions and limitations early in the process. If the task cannot be completed due to missing APIs or unclear requirements, communicate this clearly to the user and suggest hypothetical solutions or alternative approaches.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "20bc3ea2b4274552a1c056ca1fde1641", "memory_type": "task", "when_to_use": "When interacting with APIs that lack direct support for required data (e.g., play counts or artist names).", "content": "Always verify API response schemas before assuming the availability of specific data fields. If necessary data is unavailable, consider alternative proxy metrics but document assumptions explicitly.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "144efaec02344a38800186a002010785", "memory_type": "task", "when_to_use": "When parsing structured data like song titles to extract subfields (e.g., artist names).", "content": "Ensure consistent formatting of input data before relying on string manipulation techniques such as splitting. Validate the approach with sample data to avoid mismatches or incorrect filtering.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "679e6a8c03d04d378de4cf564eadab16", "memory_type": "task", "when_to_use": "When iterating over paginated API responses to collect complete datasets.", "content": "Implement robust pagination logic with clear termination conditions to ensure all pages are processed without infinite loops or missed data.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "407e497e95c7456ba2bd1e2b1d3d91e2", "memory_type": "task", "when_to_use": "When breaking down complex tasks into smaller steps, especially for multi-step API interactions.", "content": "Clearly define each step's expected output and ensure intermediate results (e.g., passwords, tokens) are correctly passed between steps. Ambiguity in step transitions can lead to missed dependencies and task failures.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "cff6f392f7b54b528a21b8b3ab3008b2", "memory_type": "task", "when_to_use": "When searching for a specific playlist (e.g., 'Liked Songs') but it cannot be found.", "content": "If the target playlist is not explicitly named or accessible, expand the search to include variations of the name (e.g., case-insensitive matches like 'liked' or 'favorites') or analyze all available playlists for relevant content.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "2bfb5eff55ac4718acf0a7d151bd66a2", "memory_type": "task", "when_to_use": "When a task depends on an API feature that is not supported or documented.", "content": "Acknowledge API limitations early and communicate them to the user to avoid wasting resources on unachievable goals; suggest alternative approaches if possible.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "e2395e01106b40a2868aef70cfd71c80", "memory_type": "task", "when_to_use": "When performing actions that may result in duplicate operations, such as following an artist multiple times.", "content": "Before executing an action like `follow_artist`, check the current state using a verification API (e.g., `show_artist_following`) to avoid redundant operations and potential errors (e.g., 422 Unprocessable Entity).", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "fa30d5d7e4834acf86becffbac62911b", "memory_type": "task", "when_to_use": "When interacting with APIs that return nested or paginated data, such as lists of songs, playlists, or artists.", "content": "Always verify the structure of API responses by printing or logging sample outputs before processing them further. This prevents errors caused by incorrect assumptions about field names or data formats.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "2c0dcfdb0c754ebc945491aa496ee770", "memory_type": "task", "when_to_use": "When interacting with APIs requiring authentication, especially where OAuth is expected but unavailable.", "content": "In simplified environments, passwords or other credentials may act as substitutes for access tokens. Always verify the authentication mechanism supported by the API in the specific context before proceeding.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "973d37d1e6964b5e9bcc9a260de158a6", "memory_type": "task", "when_to_use": "When designing multi-step workflows involving paginated API responses.", "content": "Always check for pagination metadata (e.g., 'next' field) to ensure all pages are processed. Avoid hardcoding limits and adapt dynamically based on API responses.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "13f02f041f2740ae81ee37afeaa01941", "memory_type": "task", "when_to_use": "When designing scripts that must complete tasks regardless of intermediate failures.", "content": "Avoid using abrupt termination functions like `exit()` in environments where task completion is mandatory. Instead, implement graceful error handling that logs issues and ensures critical steps (e.g., marking task completion) are executed even if some components fail.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "99d8eb48e3c24503ac09f72a885d1d5f", "memory_type": "task", "when_to_use": "When handling paginated API responses, ensure all pages are processed without prematurely breaking the loop.", "content": "Always verify the termination condition for loops involving paginated data to avoid missing records from incomplete iterations.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "0aeeeeb8ae6e4ba6afb88636fe4ba376", "memory_type": "task", "when_to_use": "When exporting data with specific formatting requirements, validate intermediate outputs before finalizing the export.", "content": "Ensure placeholders or assumptions (e.g., artist names) align with expected formats to prevent mismatched or incomplete data in the final output.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "7153d7479c1242a98dee1c451ae46b90", "memory_type": "task", "when_to_use": "Before performing irreversible actions like account termination, confirm all prior steps have been verified and completed successfully.", "content": "Irreversible operations should only be executed after ensuring all preceding tasks meet the desired outcomes to avoid premature or accidental disruptions.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "d1fb0dc5447040e48031cf0a9e327166", "memory_type": "task", "when_to_use": "When writing files to a file system and there is a possibility of the file already existing.", "content": "Always check if an API supports an 'overwrite' or similar parameter when creating or updating files to prevent conflicts with existing files.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "0e962307fe45450eb23872cfb3f4231e", "memory_type": "task", "when_to_use": "When encountering undefined variables during task execution.", "content": "Verify that all variables used in the code are properly defined in the current context and remove references to unused or irrelevant variables.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "49d9009b4666449eb52c535b1e676199", "memory_type": "task", "when_to_use": "When interacting with APIs that require authentication, especially when multiple apps are involved.", "content": "Always verify the authentication method for each app's API independently. Some APIs may require passwords instead of access tokens, even if other APIs in the same system use tokens.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} -{"workspace_id": "appworld_8b_0725", "memory_id": "f4ef4d6c648b4a398f1b04b0ff320cfc", "memory_type": "task", "when_to_use": "When paginating through API responses to collect all data, such as playlists or songs.", "content": "Ensure pagination logic is robust and accounts for edge cases like empty pages or unexpected API responses to avoid missing data.", "score": 0.0, "time_created": "2025-07-24 21:15:17", "time_modified": "2025-07-24 21:15:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-07-24 21:15:17", "modified_time": "2025-07-24 21:15:17", "extra_info": null}} diff --git a/docs/library/bfcl_v3.jsonl b/docs/library/bfcl_v3.jsonl deleted file mode 100644 index a209ef91..00000000 --- a/docs/library/bfcl_v3.jsonl +++ /dev/null @@ -1,474 +0,0 @@ -{"workspace_id": "bfcl_v1", "memory_id": "9880a12e011b4ad6b063f11d40115034", "memory_type": "task", "when_to_use": "When the user requests detailed account information including balance and linked card details.", "content": "The assistant successfully retrieved the user's account details by calling the 'get_account_info' function. It then presented the information in a clear, concise format, highlighting the net balance and card number while offering additional assistance. This approach ensures transparency and builds trust with the user.", "score": 0.0, "time_created": "2025-08-04 07:32:40", "time_modified": "2025-08-04 07:32:40", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:32:40", "modified_time": "2025-08-04 07:32:40", "extra_info": {"tags": ["account_summary", "user_trust", "clear_communication"], "confidence": 0.9, "step_type": "action", "tools_used": ["get_account_info"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "f02db8610d63454b9d1554a55d308e3e", "memory_type": "task", "when_to_use": "When the user changes their mind about a pending transaction and requests its reversal.", "content": "The assistant efficiently canceled the pending buy order by invoking the 'cancel_order' function with the provided order ID. It then confirmed the cancellation to the user, ensuring clarity and preventing confusion. This demonstrates responsiveness to user needs and reinforces confidence in the system.", "score": 0.0, "time_created": "2025-08-04 07:32:40", "time_modified": "2025-08-04 07:32:40", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:32:40", "modified_time": "2025-08-04 07:32:40", "extra_info": {"tags": ["order_cancellation", "user_control", "responsive_action"], "confidence": 0.85, "step_type": "action", "tools_used": ["cancel_order"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "4316c28977274421933a0f2c67f51603", "memory_type": "task", "when_to_use": "When the user wants to execute a stock purchase after reviewing their watchlist and market conditions.", "content": "The assistant followed a logical sequence: retrieving stock information using 'get_stock_info', placing an order with 'place_order', and confirming the order status. This ensured the transaction was based on up-to-date market data and aligned with the user’s intent, enhancing decision-making reliability.", "score": 0.0, "time_created": "2025-08-04 07:32:40", "time_modified": "2025-08-04 07:32:40", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:32:40", "modified_time": "2025-08-04 07:32:40", "extra_info": {"tags": ["stock_purchase", "market_analysis", "transaction_confirmation"], "confidence": 0.88, "step_type": "sequence", "tools_used": ["get_stock_info", "place_order", "get_order_details"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "e1cd30bc63254e2e897aad1780e8a31d", "memory_type": "task", "when_to_use": "When the user needs to review their tracked investments and potentially act on them.", "content": "The agent first retrieved the user's watchlist, then provided detailed stock information, allowing for informed decision-making. After placing an order, it ensured flexibility by facilitating cancellation upon request. This step pattern ensures a smooth user experience by keeping users in control of their investment actions.", "score": 0.0, "time_created": "2025-08-04 07:32:39", "time_modified": "2025-08-04 07:32:39", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:32:39", "modified_time": "2025-08-04 07:32:39", "extra_info": {"tags": ["investment", "stock-tracking", "order-management"], "confidence": 0.9, "step_type": "action", "tools_used": ["get_watchlist", "get_stock_info", "place_order", "cancel_order"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "9c1598234d8e4ed58e2b67a237a758da", "memory_type": "task", "when_to_use": "When the user requests a summary of their account balance and associated payment details.", "content": "The agent efficiently used the get_account_info function to retrieve key details such as account balance and linked card information, presenting it in a clear format. This approach satisfies the user’s need for transparency and helps them make further financial decisions.", "score": 0.0, "time_created": "2025-08-04 07:32:39", "time_modified": "2025-08-04 07:32:39", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:32:39", "modified_time": "2025-08-04 07:32:39", "extra_info": {"tags": ["account-summary", "balance-check", "user-support"], "confidence": 0.85, "step_type": "observation", "tools_used": ["get_account_info"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "cc3453b510304c7eb09b9261338127ac", "memory_type": "task", "when_to_use": "When handling complex user requests involving multiple steps such as booking, purchasing, and resolving issues.", "content": "The agent successfully executed a multi-step process to book a flight, purchase insurance, retrieve an invoice, and escalate a billing concern by creating a priority ticket. Each step was handled sequentially using appropriate tools, ensuring clarity and resolution at every stage.", "score": 0.0, "time_created": "2025-08-04 07:32:45", "time_modified": "2025-08-04 07:32:45", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:32:45", "modified_time": "2025-08-04 07:32:45", "extra_info": {"tags": ["multi-step", "sequential-execution", "escalation"], "confidence": 0.9, "step_type": "action", "tools_used": ["get_nearest_airport_by_city", "get_flight_cost", "book_flight", "purchase_insurance", "retrieve_invoice", "contact_customer_support", "create_ticket"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "0a7deddb5f4640ddbea7ea7018772238", "memory_type": "task", "when_to_use": "When escalating unresolved issues after initial customer support contact.", "content": "After the user reported frustration due to an unresolved issue with customer support, the agent created a priority-2 ticket titled 'Billing Concern' with detailed context. This approach ensures proper escalation and tracking of the issue.", "score": 0.0, "time_created": "2025-08-04 07:32:45", "time_modified": "2025-08-04 07:32:45", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:32:45", "modified_time": "2025-08-04 07:32:45", "extra_info": {"tags": ["escalation", "priority-ticket", "customer-support"], "confidence": 0.85, "step_type": "decision", "tools_used": ["create_ticket"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "736a6cd4d1154878b09885022480e218", "memory_type": "task", "when_to_use": "When encountering function parameter errors despite matching the documented API specification.", "content": "Verify whether the actual implementation of a function matches its documented parameters, especially when receiving unexpected keyword argument errors. This may indicate outdated or incorrect documentation.", "score": 0.0, "time_created": "2025-08-04 07:32:39", "time_modified": "2025-08-04 07:32:39", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:32:39", "modified_time": "2025-08-04 07:32:39", "extra_info": {"tags": ["error_prevention", "failure_analysis", "parameter_mismatch"], "confidence": 0.9, "step_type": "action", "tools_used": ["book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "6ce3a6506bd44bbcadc8c8f93e43bd84", "memory_type": "task", "when_to_use": "When handling multi-step processes involving dependent functions (e.g., retrieving costs before booking).", "content": "Ensure all required data is successfully retrieved and validated before proceeding to dependent steps. Missing or incorrect data in earlier steps can cascade into failures downstream.", "score": 0.0, "time_created": "2025-08-04 07:32:39", "time_modified": "2025-08-04 07:32:39", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:32:39", "modified_time": "2025-08-04 07:32:39", "extra_info": {"tags": ["error_prevention", "failure_analysis", "dependency_management"], "confidence": 0.85, "step_type": "decision", "tools_used": ["get_flight_cost", "book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "1a8aeddd0dd0444298dcc50aef41f143", "memory_type": "task", "when_to_use": "When dealing with authentication-dependent actions where prior steps fail due to missing or invalid credentials.", "content": "Always confirm that authentication tokens are valid and correctly passed before initiating subsequent actions. Invalid tokens can lead to cascading failures in operations like invoice retrieval or customer support interactions.", "score": 0.0, "time_created": "2025-08-04 07:32:39", "time_modified": "2025-08-04 07:32:39", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:32:39", "modified_time": "2025-08-04 07:32:39", "extra_info": {"tags": ["error_prevention", "failure_analysis", "authentication_errors"], "confidence": 0.8, "step_type": "reasoning", "tools_used": ["retrieve_invoice", "contact_customer_support"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "4e6103036b4745e195fdb10f50d07512", "memory_type": "task", "when_to_use": "When the user needs to retrieve specific financial data about a company before making investment decisions.", "content": "The agent successfully retrieved the stock symbol and recent market activity for Zeta Corp by sequentially using 'get_symbol_by_name' and 'get_stock_info'. This ensured the user had all necessary details (price, volume, moving averages) to evaluate their investment decision.", "score": 0.0, "time_created": "2025-08-04 07:32:46", "time_modified": "2025-08-04 07:32:46", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:32:46", "modified_time": "2025-08-04 07:32:46", "extra_info": {"tags": ["stock-market", "investment", "data-retrieval"], "confidence": 0.9, "step_type": "action", "tools_used": ["get_symbol_by_name", "get_stock_info"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "9801e0315cb84248bd461542a8a02c6f", "memory_type": "task", "when_to_use": "When confirming or canceling an order based on user reconsideration.", "content": "Upon the user's request to cancel the buy order, the agent efficiently used 'cancel_order' after verifying the order ID with 'get_order_details'. This demonstrated adaptability to changing user intent while maintaining clarity and precision in execution.", "score": 0.0, "time_created": "2025-08-04 07:32:46", "time_modified": "2025-08-04 07:32:46", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:32:46", "modified_time": "2025-08-04 07:32:46", "extra_info": {"tags": ["order-management", "cancellation", "user-intent"], "confidence": 0.85, "step_type": "decision", "tools_used": ["get_order_details", "cancel_order"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "953f48489f5948cfbfc9da1fbdac4deb", "memory_type": "task", "when_to_use": "When providing account updates including balance and linked payment methods.", "content": "To address the user’s query about their account alignment, the agent utilized 'get_account_info' to fetch the current balance and masked card number. Presenting this information clearly reassured the user and allowed them to verify accuracy effectively.", "score": 0.0, "time_created": "2025-08-04 07:32:46", "time_modified": "2025-08-04 07:32:46", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:32:46", "modified_time": "2025-08-04 07:32:46", "extra_info": {"tags": ["account-update", "balance-check", "privacy"], "confidence": 0.8, "step_type": "action", "tools_used": ["get_account_info"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "20d14302104b461fa0cfa1653c91f27f", "memory_type": "task", "when_to_use": "When handling stock purchase requests, ensure the user has sufficient funds before initiating transactions.", "content": "Always verify account balance and linked payment methods prior to executing financial orders to prevent failed transactions or unnecessary cancellations.", "score": 0.0, "time_created": "2025-08-04 07:32:50", "time_modified": "2025-08-04 07:32:50", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:32:50", "modified_time": "2025-08-04 07:32:50", "extra_info": {"tags": ["error_prevention", "financial_validation", "user_experience"], "confidence": 0.9, "step_type": "decision", "tools_used": ["get_account_info", "place_order"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "6e4e4c160fb4459eb5872cd9c85b07cb", "memory_type": "task", "when_to_use": "When a user cancels an order, proactively offer updates on their account status to address potential concerns about funds or future transactions.", "content": "Canceling an order often prompts users to reassess their financial standing; providing immediate account details enhances transparency and trust.", "score": 0.0, "time_created": "2025-08-04 07:32:50", "time_modified": "2025-08-04 07:32:50", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:32:50", "modified_time": "2025-08-04 07:32:50", "extra_info": {"tags": ["user_engagement", "proactive_support", "account_management"], "confidence": 0.8, "step_type": "action", "tools_used": ["cancel_order", "get_account_info"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "405b328beb484f4fae37c897283fdabf", "memory_type": "task", "when_to_use": "If multiple systems are involved (e.g., ticketing vs. travel tools), ensure that function calls align with the context of the query to avoid irrelevant tool usage.", "content": "Misalignment between queried intent and executed functions can lead to confusion; maintain strict relevance between the user’s request and the selected tools.", "score": 0.0, "time_created": "2025-08-04 07:32:50", "time_modified": "2025-08-04 07:32:50", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:32:50", "modified_time": "2025-08-04 07:32:50", "extra_info": {"tags": ["tool_relevance", "context_matching", "failure_analysis"], "confidence": 0.75, "step_type": "reasoning", "tools_used": []}}} -{"workspace_id": "bfcl_v1", "memory_id": "dd2d0943ae6545d6ad215d65f2e415a6", "memory_type": "task", "when_to_use": "When the user needs to transition from general information gathering (e.g., listing all airports) to specific task execution (e.g., booking a flight).", "content": "The sequence effectively narrowed down from broad data retrieval (listing all airports) to precise actions like identifying the nearest airport, calculating costs, and executing a booking. The success came from chaining multiple tools logically: first gathering relevant details (nearest airport, cost), performing necessary conversions (currency exchange), and then finalizing with a booking action. Each step built upon the previous one, ensuring no redundant or irrelevant actions.", "score": 0.0, "time_created": "2025-08-04 07:32:56", "time_modified": "2025-08-04 07:32:56", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:32:56", "modified_time": "2025-08-04 07:32:56", "extra_info": {"tags": ["task refinement", "sequential tool use", "booking flow"], "confidence": 0.9, "step_type": "action", "tools_used": ["list_all_airports", "get_nearest_airport_by_city", "get_flight_cost", "compute_exchange_rate", "set_budget_limit", "book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "f7869146662e47e698cb1b240cab7a77", "memory_type": "task", "when_to_use": "When handling errors during API/tool calls due to unexpected arguments or parameter mismatches.", "content": "An error occurred when attempting to book a flight with an incorrect parameter ('travel_cost'). Rather than halting the process, the agent identified the issue by examining the function signature requirements, removed the unnecessary argument, and re-executed the call successfully. This highlights the importance of quickly diagnosing API errors and adapting to the expected inputs dynamically.", "score": 0.0, "time_created": "2025-08-04 07:32:56", "time_modified": "2025-08-04 07:32:56", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:32:56", "modified_time": "2025-08-04 07:32:56", "extra_info": {"tags": ["error handling", "parameter adjustment", "api call"], "confidence": 0.85, "step_type": "decision", "tools_used": ["book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "fcada19ff7d4410198d910f9c0264144", "memory_type": "task", "when_to_use": "When closing support tickets or resolving minor follow-up tasks after completing the main workflow.", "content": "After fulfilling the primary objective (flight booking), the agent efficiently handled a secondary task (closing a ticket) using the appropriate tool ('close_ticket'). This ensured that all loose ends were tied up, enhancing user satisfaction by addressing ancillary requests promptly. The seamless integration of this task into the overall workflow demonstrates strong task-management skills.", "score": 0.0, "time_created": "2025-08-04 07:32:56", "time_modified": "2025-08-04 07:32:56", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:32:56", "modified_time": "2025-08-04 07:32:56", "extra_info": {"tags": ["ticket resolution", "follow-up tasks", "user satisfaction"], "confidence": 0.8, "step_type": "action", "tools_used": ["close_ticket"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "f1046c42c6854eec9afd1513f32a6bcb", "memory_type": "task", "when_to_use": "When attempting to book a flight and encountering an unexpected keyword argument error.", "content": "Ensure that the function parameters match exactly with the expected arguments. Extra or incorrect parameters can lead to execution errors even if the rest of the logic is correct.", "score": 0.0, "time_created": "2025-08-04 07:32:36", "time_modified": "2025-08-04 07:32:36", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:32:36", "modified_time": "2025-08-04 07:32:36", "extra_info": {"tags": ["error_prevention", "failure_analysis", "parameter_validation"], "confidence": 0.9, "step_type": "action", "tools_used": ["book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "999a1ce0d5d748f0bffe2118144b4a89", "memory_type": "task", "when_to_use": "When managing tickets and resolving user queries during a travel booking process.", "content": "Always confirm that the ticket being closed matches the exact issue described by the user, and ensure that no additional steps are needed after closing it (e.g., follow-up actions).", "score": 0.0, "time_created": "2025-08-04 07:32:36", "time_modified": "2025-08-04 07:32:36", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:32:36", "modified_time": "2025-08-04 07:32:36", "extra_info": {"tags": ["error_prevention", "ticket_management", "user_communication"], "confidence": 0.8, "step_type": "decision", "tools_used": ["close_ticket"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "e0cc010a3575467b9c3059e5bdc5a487", "memory_type": "task", "when_to_use": "When setting budget limits based on expenses converted from one currency to another.", "content": "Double-check whether the provided numerical values (like fiscal thresholds) align correctly with both the original expense and the intended conversion rate before finalizing budgets.", "score": 0.0, "time_created": "2025-08-04 07:32:36", "time_modified": "2025-08-04 07:32:36", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:32:36", "modified_time": "2025-08-04 07:32:36", "extra_info": {"tags": ["error_prevention", "budgeting", "conversion_validation"], "confidence": 0.75, "step_type": "reasoning", "tools_used": ["set_budget_limit", "compute_exchange_rate"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "3d8cec1390574885bcf940674df23e90", "memory_type": "task", "when_to_use": "When handling requests to add stocks to a watchlist or perform financial tasks, ensure the correct tools are available and relevant.", "content": "Avoid using unrelated toolsets (e.g., vehicle control APIs) for financial operations as it leads to confusion and failure. Validate tool relevance before execution.", "score": 0.0, "time_created": "2025-08-04 07:33:17", "time_modified": "2025-08-04 07:33:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:33:17", "modified_time": "2025-08-04 07:33:17", "extra_info": {"tags": ["error_prevention", "tool_validation", "failure_analysis"], "confidence": 0.9, "step_type": "reasoning", "tools_used": ["add_to_watchlist"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "b3b6a4b2bf2d43c7a3aed1247e6e5d10", "memory_type": "task", "when_to_use": "When resolving tickets or performing follow-up actions, confirm all required parameters (e.g., ticket ID) are explicitly provided or inferred correctly.", "content": "Implicit assumptions about required parameters can lead to errors; always cross-check previous steps for accurate data retrieval.", "score": 0.0, "time_created": "2025-08-04 07:33:17", "time_modified": "2025-08-04 07:33:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:33:17", "modified_time": "2025-08-04 07:33:17", "extra_info": {"tags": ["parameter_validation", "error_prevention", "ticket_management"], "confidence": 0.8, "step_type": "action", "tools_used": ["resolve_ticket"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "32a658e7294d45749e29059ad9f1371e", "memory_type": "task", "when_to_use": "When handling user requests involving multiple steps, especially when tools require specific IDs or details.", "content": "Always confirm the availability of required parameters (e.g., ticket ID, order ID) before proceeding with actions. If unavailable, prompt the user clearly and early to avoid mid-process interruptions.", "score": 0.0, "time_created": "2025-08-04 07:33:23", "time_modified": "2025-08-04 07:33:23", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:33:23", "modified_time": "2025-08-04 07:33:23", "extra_info": {"tags": ["error_prevention", "failure_analysis", "parameter_validation"], "confidence": 0.9, "step_type": "reasoning", "tools_used": ["resolve_ticket", "add_to_watchlist"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "b4413cdc0e7744f282e91442e58d80c7", "memory_type": "task", "when_to_use": "When a user references prior actions or tickets assumed to exist but not explicitly mentioned in the current session.", "content": "Cross-check context and clarify assumptions by asking for missing details instead of proceeding based on incomplete information.", "score": 0.0, "time_created": "2025-08-04 07:33:23", "time_modified": "2025-08-04 07:33:23", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:33:23", "modified_time": "2025-08-04 07:33:23", "extra_info": {"tags": ["error_prevention", "context_management", "user_clarification"], "confidence": 0.85, "step_type": "decision", "tools_used": ["get_account_info", "cancel_order"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "2990d144e5bf47ad81f3edcc89b31ccd", "memory_type": "task", "when_to_use": "When designing workflows that involve multi-step tool usage or dependencies between tools.", "content": "Ensure fallback mechanisms are in place to handle cases where expected inputs (like IDs or prior outputs) are missing or invalid.", "score": 0.0, "time_created": "2025-08-04 07:33:23", "time_modified": "2025-08-04 07:33:23", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:33:23", "modified_time": "2025-08-04 07:33:23", "extra_info": {"tags": ["workflow_design", "dependency_management", "error_handling"], "confidence": 0.8, "step_type": "action", "tools_used": ["all_trading_system_tools", "message_API_tools"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "a5fce67a622f40179a97f3735c504d6d", "memory_type": "task", "when_to_use": "When initiating a financial order, such as buying or selling shares, and ensuring the user's intent is accurately captured.", "content": "The agent successfully retrieved real-time stock information before placing the order, ensuring accuracy in decision-making. This step pattern confirms data relevance and minimizes the risk of errors by aligning with current market conditions.", "score": 0.0, "time_created": "2025-08-04 07:33:28", "time_modified": "2025-08-04 07:33:28", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:33:28", "modified_time": "2025-08-04 07:33:28", "extra_info": {"tags": ["financial_order", "real_time_data", "accuracy"], "confidence": 0.9, "step_type": "action", "tools_used": ["get_stock_info"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "b8c0fd0f4a544c7996640d06d48822f7", "memory_type": "task", "when_to_use": "When a user requests cancellation of an ongoing transaction and requires confirmation of its success.", "content": "The agent efficiently canceled the order using the `cancel_order` function and verified the status to ensure absolute closure. This step pattern ensures the user’s request is fully executed and provides transparency through clear status updates.", "score": 0.0, "time_created": "2025-08-04 07:33:28", "time_modified": "2025-08-04 07:33:28", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:33:28", "modified_time": "2025-08-04 07:33:28", "extra_info": {"tags": ["order_cancellation", "transaction_confirmation", "user_trust"], "confidence": 0.85, "step_type": "action", "tools_used": ["cancel_order", "get_order_details"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "b4e575df94f645dc8aec2f6d7c2ade26", "memory_type": "task", "when_to_use": "When escalating an issue or creating a support ticket for platform-related concerns post-transaction.", "content": "The agent created a detailed support ticket with a clear description of the issue, enabling effective investigation by the support team. This approach demonstrates proactive problem-solving and enhances user satisfaction by addressing frustrations promptly.", "score": 0.0, "time_created": "2025-08-04 07:33:28", "time_modified": "2025-08-04 07:33:28", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:33:28", "modified_time": "2025-08-04 07:33:28", "extra_info": {"tags": ["support_ticket", "issue_escalation", "customer_service"], "confidence": 0.8, "step_type": "action", "tools_used": ["create_ticket"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "1cf96fd1684a4527aa4231d50899c581", "memory_type": "task", "when_to_use": "When initiating financial transactions such as stock purchases, ensure the user's intent is clear and verified before proceeding.", "content": "Always confirm critical details with the user before executing irreversible actions like placing buy/sell orders. A simple confirmation step can prevent costly mistakes.", "score": 0.0, "time_created": "2025-08-04 07:33:26", "time_modified": "2025-08-04 07:33:26", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:33:26", "modified_time": "2025-08-04 07:33:26", "extra_info": {"tags": ["error_prevention", "user_confirmation", "financial_transactions"], "confidence": 0.9, "step_type": "decision", "tools_used": ["place_order", "cancel_order"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "587ded2306e34603a8e9afc3086eed0c", "memory_type": "task", "when_to_use": "If a user expresses dissatisfaction or mentions an error during a process, prioritize addressing their concerns immediately.", "content": "Proactively acknowledge and resolve potential issues by creating support tickets or escalating problems when necessary. Ignoring these signals may lead to further frustration.", "score": 0.0, "time_created": "2025-08-04 07:33:26", "time_modified": "2025-08-04 07:33:26", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:33:26", "modified_time": "2025-08-04 07:33:26", "extra_info": {"tags": ["customer_support", "escalation", "user_satisfaction"], "confidence": 0.85, "step_type": "action", "tools_used": ["create_ticket"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "662bd8ef6a124be9befa291faa09417a", "memory_type": "task", "when_to_use": "When providing account overviews or sensitive information, ensure that all data shared aligns with privacy standards and does not expose unnecessary personal details.", "content": "Sensitive information (e.g., full credit card numbers) should always be masked in outputs to maintain security and trust. Only reveal what is essential for the task at hand.", "score": 0.0, "time_created": "2025-08-04 07:33:26", "time_modified": "2025-08-04 07:33:26", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:33:26", "modified_time": "2025-08-04 07:33:26", "extra_info": {"tags": ["data_privacy", "security", "account_management"], "confidence": 0.8, "step_type": "observation", "tools_used": ["get_account_info"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "a4d61bd456f2453c9cb6109d9b63cc1e", "memory_type": "task", "when_to_use": "When the user needs to retrieve specific travel-related information (e.g., nearest airports, flight costs) and perform subsequent actions like setting budgets or booking flights.", "content": "The agent successfully identified the nearest airports for given cities using 'get_nearest_airport_by_city', retrieved flight cost details with 'get_flight_cost', set a budget limit via 'set_budget_limit', and completed a booking using 'book_flight'. The sequence was efficient because it followed a logical progression from information gathering to action execution while maintaining context across steps.", "score": 0.0, "time_created": "2025-08-04 07:33:33", "time_modified": "2025-08-04 07:33:33", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:33:33", "modified_time": "2025-08-04 07:33:33", "extra_info": {"tags": ["travel-planning", "sequential-actions", "context-retention"], "confidence": 0.9, "step_type": "action", "tools_used": ["get_nearest_airport_by_city", "get_flight_cost", "set_budget_limit", "book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "f193ea69cc77488aa12052b3a888bf92", "memory_type": "task", "when_to_use": "When handling errors during function calls due to incorrect parameters, and needing to retry with corrected inputs.", "content": "During the booking process, an error occurred because an unexpected parameter ('travel_cost') was included in the 'book_flight' call. The agent recognized the issue, omitted the invalid parameter, and successfully executed the function on the second attempt. This demonstrates adaptability and problem-solving in dynamic environments.", "score": 0.0, "time_created": "2025-08-04 07:33:33", "time_modified": "2025-08-04 07:33:33", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:33:33", "modified_time": "2025-08-04 07:33:33", "extra_info": {"tags": ["error-handling", "parameter-validation", "retry-logic"], "confidence": 0.85, "step_type": "decision", "tools_used": ["book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "d1e874eae3a2473bb3c6e2dd4d78cb55", "memory_type": "task", "when_to_use": "When providing users with summaries of their transactions or bookings for record-keeping purposes.", "content": "After completing the booking, the agent retrieved the invoice using 'retrieve_invoice' by leveraging previously stored data (e.g., booking ID). Presenting this information in a clear, structured format enhanced user satisfaction and ensured all necessary details were captured.", "score": 0.0, "time_created": "2025-08-04 07:33:33", "time_modified": "2025-08-04 07:33:33", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:33:33", "modified_time": "2025-08-04 07:33:33", "extra_info": {"tags": ["invoice-retrieval", "summary-generation", "user-satisfaction"], "confidence": 0.8, "step_type": "observation", "tools_used": ["retrieve_invoice"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "0b342f04c7654a978e39b0ee134877f1", "memory_type": "task", "when_to_use": "When the user needs to retrieve specific information about a booking or transaction for record-keeping purposes.", "content": "After completing a booking, the agent successfully retrieved the invoice by calling 'retrieve_invoice' with the access token and booking ID. This ensured accurate delivery of financial details while maintaining security through token-based authentication.", "score": 0.0, "time_created": "2025-08-04 07:33:08", "time_modified": "2025-08-04 07:33:08", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:33:08", "modified_time": "2025-08-04 07:33:08", "extra_info": {"tags": ["invoice", "booking", "financial-summary", "secure-access"], "confidence": 0.9, "step_type": "action", "tools_used": ["retrieve_invoice"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "d2eb64b80c884e618f41c9215a1302d0", "memory_type": "task", "when_to_use": "When handling sequential tasks involving budgeting, booking, and confirmation in travel planning.", "content": "The agent effectively managed multiple steps: setting a budget limit, booking a flight within that limit, and then retrieving an invoice. Each step built upon the previous one using consistent parameters like access tokens and IDs, ensuring coherence and reliability across operations.", "score": 0.0, "time_created": "2025-08-04 07:33:08", "time_modified": "2025-08-04 07:33:08", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:33:08", "modified_time": "2025-08-04 07:33:08", "extra_info": {"tags": ["travel-planning", "budget-management", "sequential-tasks", "coherent-workflow"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["set_budget_limit", "book_flight", "retrieve_invoice"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "a1d958e6e80040e7b58d691cdf5303a5", "memory_type": "task", "when_to_use": "When determining flight costs based on location, date, and class for future travel.", "content": "The agent successfully identified the nearest airports for both the departure and arrival cities using 'get_nearest_airport_by_city'. It then used 'get_flight_cost' to retrieve accurate pricing for a specific travel class and date. This sequential approach ensures precise cost estimation by leveraging geographic and temporal data.", "score": 0.0, "time_created": "2025-08-04 07:33:35", "time_modified": "2025-08-04 07:33:35", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:33:35", "modified_time": "2025-08-04 07:33:35", "extra_info": {"tags": ["flight booking", "cost estimation", "travel planning"], "confidence": 0.9, "step_type": "action", "tools_used": ["get_nearest_airport_by_city", "get_flight_cost"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "46f14e081bd04310989475f7aef0b4b9", "memory_type": "task", "when_to_use": "When adjusting a user's budget in response to currency conversion needs.", "content": "After computing the exchange rate between RMB and USD using 'compute_exchange_rate', the agent updated the user’s budget limit with 'set_budget_limit'. This ensured alignment with the user’s financial requirements in a different currency, demonstrating adaptability and precision in budget management.", "score": 0.0, "time_created": "2025-08-04 07:33:35", "time_modified": "2025-08-04 07:33:35", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:33:35", "modified_time": "2025-08-04 07:33:35", "extra_info": {"tags": ["budget management", "currency conversion", "financial adjustment"], "confidence": 0.85, "step_type": "action", "tools_used": ["compute_exchange_rate", "set_budget_limit"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "fa2fded37deb4556a57f610db293570a", "memory_type": "task", "when_to_use": "When handling cancellations or reversals of previously executed actions like bookings.", "content": "Upon receiving a cancellation request, the agent promptly invoked 'cancel_booking' with the correct booking ID and access token. Despite encountering an issue while retrieving the invoice post-cancellation, the cancellation itself was executed flawlessly. This highlights the importance of validating follow-up actions after irreversible operations.", "score": 0.0, "time_created": "2025-08-04 07:33:35", "time_modified": "2025-08-04 07:33:35", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:33:35", "modified_time": "2025-08-04 07:33:35", "extra_info": {"tags": ["booking cancellation", "error handling", "user requests"], "confidence": 0.8, "step_type": "action", "tools_used": ["cancel_booking", "retrieve_invoice"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "fe05f7c66bf7462cb359fbb70458ef4f", "memory_type": "task", "when_to_use": "When encountering persistent parameter-related errors during API calls despite following documentation.", "content": "If an API consistently rejects documented parameters, verify whether the implementation deviates from the documentation or if additional hidden constraints exist. Escalate discrepancies to system maintainers.", "score": 0.0, "time_created": "2025-08-04 07:33:16", "time_modified": "2025-08-04 07:33:16", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:33:16", "modified_time": "2025-08-04 07:33:16", "extra_info": {"tags": ["error_prevention", "api_mismatch", "parameter_validation"], "confidence": 0.9, "step_type": "action", "tools_used": ["book_flight", "retrieve_invoice"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "925b1d7d9f6c46da888991fdf1a7222a", "memory_type": "task", "when_to_use": "When a requested operation (e.g., invoice retrieval) fails due to prior actions like cancellations.", "content": "Some operations may not support follow-up actions after state changes (e.g., canceled bookings). Always confirm downstream compatibility of requests with current states before proceeding.", "score": 0.0, "time_created": "2025-08-04 07:33:16", "time_modified": "2025-08-04 07:33:16", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:33:16", "modified_time": "2025-08-04 07:33:16", "extra_info": {"tags": ["state_management", "failure_analysis", "booking_systems"], "confidence": 0.8, "step_type": "decision", "tools_used": ["cancel_booking", "retrieve_invoice"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "e44b1719e7f14c8385c7776c12a616f9", "memory_type": "task", "when_to_use": "When needing to amplify the visibility of a user-generated social media post.", "content": "The sequence involved retweeting the original tweet and adding a relevant comment ('Ready for the next adventure!') to increase engagement. By leveraging both 'retweet' and 'comment' functions, this ensured broader reach while maintaining contextual relevance through the added commentary.", "score": 0.0, "time_created": "2025-08-04 07:33:55", "time_modified": "2025-08-04 07:33:55", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:33:55", "modified_time": "2025-08-04 07:33:55", "extra_info": {"tags": ["social_media", "amplification", "engagement"], "confidence": 0.9, "step_type": "action", "tools_used": ["retweet", "comment"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "472881c9ac174a91be480c229696b9c6", "memory_type": "task", "when_to_use": "When handling sequential actions dependent on prior outputs (e.g., tweet IDs).", "content": "The agent correctly identified and utilized the tweet ID from an earlier response (ID: 5) to execute subsequent steps like retweeting and commenting. This demonstrates effective use of context retention and parameter passing between actions, ensuring continuity in multi-step tasks.", "score": 0.0, "time_created": "2025-08-04 07:33:55", "time_modified": "2025-08-04 07:33:55", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:33:55", "modified_time": "2025-08-04 07:33:55", "extra_info": {"tags": ["context_retention", "parameter_passing", "sequential_actions"], "confidence": 0.85, "step_type": "reasoning", "tools_used": []}}} -{"workspace_id": "bfcl_v1", "memory_id": "1f98d6572e234d9fb8b17a7d10e7fda5", "memory_type": "task", "when_to_use": "When dealing with multi-step tasks that require precise coordination of tools and actions.", "content": "Always verify the dependencies between steps to ensure all prerequisites are met before proceeding. For example, confirming tweet ID or engine door status before executing subsequent actions.", "score": 0.0, "time_created": "2025-08-04 07:33:56", "time_modified": "2025-08-04 07:33:56", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:33:56", "modified_time": "2025-08-04 07:33:56", "extra_info": {"tags": ["error_prevention", "dependency_management", "multi_step_tasks"], "confidence": 0.9, "step_type": "reasoning", "tools_used": ["retweet", "comment", "startEngine"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "7c28e1b5bcf642afb94ef265431bf8d5", "memory_type": "task", "when_to_use": "When interpreting user intent for ambiguous queries involving tool outputs.", "content": "Cross-check implicit assumptions (e.g., tweet IDs, fuel levels) by referencing prior tool responses explicitly rather than relying on inferred data.", "score": 0.0, "time_created": "2025-08-04 07:33:56", "time_modified": "2025-08-04 07:33:56", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:33:56", "modified_time": "2025-08-04 07:33:56", "extra_info": {"tags": ["error_prevention", "ambiguity_resolution", "tool_output_validation"], "confidence": 0.85, "step_type": "decision", "tools_used": ["post_tweet", "fillFuelTank", "displayCarStatus"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "87ad60804f9545c1908b97f509e9f9b5", "memory_type": "task", "when_to_use": "When handling complex workflows requiring multiple API calls.", "content": "Break down each task into smaller, verifiable sub-tasks to isolate and address potential points of failure systematically.", "score": 0.0, "time_created": "2025-08-04 07:33:56", "time_modified": "2025-08-04 07:33:56", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:33:56", "modified_time": "2025-08-04 07:33:56", "extra_info": {"tags": ["workflow_optimization", "failure_isolation", "api_usage"], "confidence": 0.8, "step_type": "action", "tools_used": ["liter_to_gallon", "check_tire_pressure", "get_credit_card_balance"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "6147e47188574c2aaf1f18f671801012", "memory_type": "task", "when_to_use": "When booking a flight with specific travel class and payment details, and ensuring the correct airport codes are used.", "content": "The agent first identified the nearest airports for both departure and arrival cities using 'get_nearest_airport_by_city'. It then fetched the cost of the flight based on the specified class and date using 'get_flight_cost'. Finally, it successfully booked the flight using 'book_flight' after resolving parameter mismatches. This sequence ensures accurate data flow from location identification to final booking.", "score": 0.0, "time_created": "2025-08-04 07:34:01", "time_modified": "2025-08-04 07:34:01", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:34:01", "modified_time": "2025-08-04 07:34:01", "extra_info": {"tags": ["flight_booking", "airport_code_identification", "parameter_validation"], "confidence": 0.9, "step_type": "action", "tools_used": ["get_nearest_airport_by_city", "get_flight_cost", "book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "c0c6ad888be04715b3badf3161d10344", "memory_type": "task", "when_to_use": "When a previously booked flight needs to be canceled promptly.", "content": "After confirming the need for cancellation, the agent called 'cancel_booking' with the correct booking ID and access token. The operation was successful, demonstrating that direct invocation of cancellation tools with verified parameters is effective in achieving immediate results.", "score": 0.0, "time_created": "2025-08-04 07:34:01", "time_modified": "2025-08-04 07:34:01", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:34:01", "modified_time": "2025-08-04 07:34:01", "extra_info": {"tags": ["booking_cancellation", "parameter_verification", "immediate_action"], "confidence": 0.85, "step_type": "action", "tools_used": ["cancel_booking"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "8dfabfe8d1d84117a12d16f466959a35", "memory_type": "task", "when_to_use": "When creating a high-priority support ticket after a significant action like flight cancellation.", "content": "Following the cancellation, the agent authenticated the user via 'ticket_login' and created a high-priority ticket using 'create_ticket', explicitly setting priority to 5. This ensured the issue was flagged appropriately for urgent attention, showcasing the importance of combining authentication and explicit priority settings in workflows involving customer support.", "score": 0.0, "time_created": "2025-08-04 07:34:01", "time_modified": "2025-08-04 07:34:01", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:34:01", "modified_time": "2025-08-04 07:34:01", "extra_info": {"tags": ["ticket_creation", "authentication", "priority_handling"], "confidence": 0.8, "step_type": "action", "tools_used": ["ticket_login", "create_ticket"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "01545e804d024bf89b8970a4df8b8c66", "memory_type": "task", "when_to_use": "When handling multiple API calls that depend on authentication or session management.", "content": "Always verify whether an API call requires prior authentication and ensure the login step is completed before proceeding with dependent actions. Skipping this can lead to unauthorized errors, even if credentials are provided later.", "score": 0.0, "time_created": "2025-08-04 07:33:49", "time_modified": "2025-08-04 07:33:49", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:33:49", "modified_time": "2025-08-04 07:33:49", "extra_info": {"tags": ["error_prevention", "authentication", "api_workflow"], "confidence": 0.9, "step_type": "decision", "tools_used": ["ticket_login", "create_ticket"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "536131aa3cd747099c437e6d454716c6", "memory_type": "task", "when_to_use": "When encountering unexpected parameter errors in API calls despite having seemingly correct inputs.", "content": "Double-check the exact parameter names and structure expected by the API function. Misaligned or incorrect parameter names (e.g., 'travel_cost' vs. 'cost') can cause execution failures even if the data values are accurate.", "score": 0.0, "time_created": "2025-08-04 07:33:49", "time_modified": "2025-08-04 07:33:49", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:33:49", "modified_time": "2025-08-04 07:33:49", "extra_info": {"tags": ["parameter_validation", "api_errors", "failure_analysis"], "confidence": 0.85, "step_type": "action", "tools_used": ["book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "ff7652f8429448fead1f27aadb0f1728", "memory_type": "task", "when_to_use": "When user instructions contain ambiguities or conflicting details (e.g., mentioning London instead of Chicago).", "content": "Clarify discrepancies in user input early to avoid executing unintended actions. Cross-reference specific identifiers like airport codes or booking IDs to confirm alignment with the user's intent.", "score": 0.0, "time_created": "2025-08-04 07:33:49", "time_modified": "2025-08-04 07:33:49", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:33:49", "modified_time": "2025-08-04 07:33:49", "extra_info": {"tags": ["user_clarification", "error_prevention", "context_alignment"], "confidence": 0.8, "step_type": "reasoning", "tools_used": ["get_nearest_airport_by_city", "cancel_booking"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "e8e7f2d0b7a648d2bbac7cac322f1d3c", "memory_type": "task", "when_to_use": "When performing multi-step tasks involving vehicle systems, ensure all preconditions (e.g., locked doors, brake pedal pressed) are verified before attempting critical actions like starting the engine.", "content": "Failure often occurs when implicit prerequisites for an action are overlooked. Always confirm readiness conditions explicitly before proceeding with dependent steps.", "score": 0.0, "time_created": "2025-08-04 07:34:07", "time_modified": "2025-08-04 07:34:07", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:34:07", "modified_time": "2025-08-04 07:34:07", "extra_info": {"tags": ["error_prevention", "failure_analysis", "vehicle_systems"], "confidence": 0.9, "step_type": "reasoning", "tools_used": ["startEngine", "lockDoors", "pressBrakePedal"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "f12823732eeb431cad309badce6079a4", "memory_type": "task", "when_to_use": "When handling user requests about monitoring or maintaining thresholds (e.g., tire pressure), cross-check automated 'healthy' flags against actual values to avoid missing actionable issues.", "content": "Automated health indicators can sometimes mask underlying problems if not paired with manual validation of reported data points.", "score": 0.0, "time_created": "2025-08-04 07:34:07", "time_modified": "2025-08-04 07:34:07", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:34:07", "modified_time": "2025-08-04 07:34:07", "extra_info": {"tags": ["error_prevention", "failure_analysis", "threshold_monitoring"], "confidence": 0.85, "step_type": "observation", "tools_used": ["check_tire_pressure", "find_nearest_tire_shop"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "f2a4f65a4d254126a5651dc236baa8aa", "memory_type": "task", "when_to_use": "When interpreting vague or conditional user instructions (e.g., 'should I notice...'), simulate proactive checks instead of waiting for explicit triggers to identify potential issues early.", "content": "Proactive verification in ambiguous scenarios ensures timely detection and resolution of latent problems that may not yet be apparent to the user.", "score": 0.0, "time_created": "2025-08-04 07:34:07", "time_modified": "2025-08-04 07:34:07", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:34:07", "modified_time": "2025-08-04 07:34:07", "extra_info": {"tags": ["error_prevention", "failure_analysis", "proactive_checks"], "confidence": 0.8, "step_type": "decision", "tools_used": ["check_tire_pressure"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "61091bd2b6414f73b753db4d6151442f", "memory_type": "task", "when_to_use": "When handling tasks that involve multiple sequential actions based on conditional checks.", "content": "Always validate the feasibility of subsequent steps after each action to avoid cascading errors. For example, ensure that a requested operation (e.g., filling fuel) doesn't exceed system constraints before proceeding.", "score": 0.0, "time_created": "2025-08-04 07:34:02", "time_modified": "2025-08-04 07:34:02", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:34:02", "modified_time": "2025-08-04 07:34:02", "extra_info": {"tags": ["error_prevention", "failure_analysis", "conditional_validation"], "confidence": 0.85, "step_type": "action", "tools_used": ["fillFuelTank", "displayCarStatus"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "ee30b6e35dd24cd2b9b53251c049fad3", "memory_type": "task", "when_to_use": "When interpreting system responses that appear contradictory or ambiguous (e.g., healthy_tire_pressure marked as true despite values below user thresholds).", "content": "Cross-check system health indicators with user-defined thresholds and clarify discrepancies explicitly in the response to avoid confusion.", "score": 0.0, "time_created": "2025-08-04 07:34:02", "time_modified": "2025-08-04 07:34:02", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:34:02", "modified_time": "2025-08-04 07:34:02", "extra_info": {"tags": ["error_prevention", "failure_analysis", "threshold_validation"], "confidence": 0.8, "step_type": "reasoning", "tools_used": ["check_tire_pressure"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "c1af3153ca16430bbb0144db704f7585", "memory_type": "task", "when_to_use": "When setting up alerts or automated responses for future conditions (e.g., tire pressure falling below a threshold).", "content": "If tools don’t support real-time monitoring, simulate checks periodically and provide proactive instructions to mitigate risks until a proper alert system can be implemented.", "score": 0.0, "time_created": "2025-08-04 07:34:02", "time_modified": "2025-08-04 07:34:02", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:34:02", "modified_time": "2025-08-04 07:34:02", "extra_info": {"tags": ["error_prevention", "failure_analysis", "proactive_measures"], "confidence": 0.75, "step_type": "decision", "tools_used": ["check_tire_pressure", "find_nearest_tire_shop"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "f2339c99b71f4843a7087f98451be643", "memory_type": "task", "when_to_use": "When creating files intended to reside inside a specific folder, ensure that the path is explicitly specified during file creation.", "content": "Files created without specifying a target directory are placed in the current working directory, which may lead to confusion if the intent was to place them inside a subdirectory. Always confirm or adjust the working directory before executing commands.", "score": 0.0, "time_created": "2025-08-04 07:33:57", "time_modified": "2025-08-04 07:33:57", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:33:57", "modified_time": "2025-08-04 07:33:57", "extra_info": {"tags": ["error_prevention", "file_management", "working_directory"], "confidence": 0.9, "step_type": "action", "tools_used": ["mkdir", "echo"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "06eac56d5a4c415088c0ec0ce7847c91", "memory_type": "task", "when_to_use": "When listing files to verify their order or contents, double-check whether hidden files or unintended directories might affect the interpretation of results.", "content": "System tools like 'ls' include all visible files and folders unless filtered. Misinterpreting these outputs can lead to incorrect assumptions about file placement or sequence. Clarify with the user or use additional filtering options when needed.", "score": 0.0, "time_created": "2025-08-04 07:33:57", "time_modified": "2025-08-04 07:33:57", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:33:57", "modified_time": "2025-08-04 07:33:57", "extra_info": {"tags": ["error_prevention", "file_listing", "hidden_files"], "confidence": 0.8, "step_type": "observation", "tools_used": ["ls"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "ca5896f46efa4ff9993828160e8e608d", "memory_type": "task", "when_to_use": "When determining file order based on 'system order', clarify whether alphabetical or creation order is intended.", "content": "System order can be ambiguous; it typically implies alphabetical sorting, but tools may list files by creation time if not explicitly sorted. Always confirm the expected order with the user or tool behavior.", "score": 0.0, "time_created": "2025-08-04 07:34:10", "time_modified": "2025-08-04 07:34:10", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:34:10", "modified_time": "2025-08-04 07:34:10", "extra_info": {"tags": ["error_prevention", "failure_analysis", "file_order", "system_order"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["ls"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "ef404e333a164e5d8c70d3251685fb89", "memory_type": "task", "when_to_use": "When creating files inside a specific folder, ensure the target directory is explicitly set before executing file operations.", "content": "Files created without specifying the target directory may end up in the current working directory instead of the intended subfolder, leading to confusion and incorrect results.", "score": 0.0, "time_created": "2025-08-04 07:34:10", "time_modified": "2025-08-04 07:34:10", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:34:10", "modified_time": "2025-08-04 07:34:10", "extra_info": {"tags": ["error_prevention", "failure_analysis", "file_creation", "directory_management"], "confidence": 0.9, "step_type": "action", "tools_used": ["mkdir", "echo"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "a5ae32789e9246c68923e8cf7be075dd", "memory_type": "task", "when_to_use": "When creating a new file and writing initial content into it.", "content": "The sequence of using 'touch' to create a file followed by 'echo' to write content ensures the file is both created and populated efficiently. This two-step pattern minimizes errors by separating file creation from content insertion, allowing clear verification points.", "score": 0.0, "time_created": "2025-08-04 07:34:20", "time_modified": "2025-08-04 07:34:20", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:34:20", "modified_time": "2025-08-04 07:34:20", "extra_info": {"tags": ["file_creation", "content_insertion", "file_system_operations"], "confidence": 0.9, "step_type": "action", "tools_used": ["touch", "echo"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "a0211dc590904657809f0e33a83da2fd", "memory_type": "task", "when_to_use": "When resolving tickets without additional description in a ticketing system.", "content": "Calling 'resolve_ticket' with an empty resolution field allows marking tickets as resolved while adhering to system requirements for the resolution parameter. This approach respects API constraints while achieving the user's intent effectively.", "score": 0.0, "time_created": "2025-08-04 07:34:20", "time_modified": "2025-08-04 07:34:20", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:34:20", "modified_time": "2025-08-04 07:34:20", "extra_info": {"tags": ["ticket_resolution", "API_constraints", "empty_parameters"], "confidence": 0.85, "step_type": "action", "tools_used": ["resolve_ticket"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "b26f18a5975f42ae9eab30fcd0292b80", "memory_type": "task", "when_to_use": "When a tool consistently returns 'None' or fails to provide expected feedback despite correct usage.", "content": "If a function call repeatedly fails to execute as intended, verify if the environment or tool is malfunctioning instead of solely retrying the same action. Consider alternative tools or approaches that achieve the same outcome.", "score": 0.0, "time_created": "2025-08-04 07:34:14", "time_modified": "2025-08-04 07:34:14", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:34:14", "modified_time": "2025-08-04 07:34:14", "extra_info": {"tags": ["error_prevention", "failure_analysis", "tool_verification"], "confidence": 0.85, "step_type": "action", "tools_used": ["echo", "touch"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "5397dc41bdf64febbd490d87e8303553", "memory_type": "task", "when_to_use": "When multiple attempts at solving a problem with one method lead to repeated failures.", "content": "After two failed attempts using the same approach, reassess the strategy and explore alternative methods rather than continuing repetitive actions.", "score": 0.0, "time_created": "2025-08-04 07:34:14", "time_modified": "2025-08-04 07:34:14", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:34:14", "modified_time": "2025-08-04 07:34:14", "extra_info": {"tags": ["error_prevention", "decision_making", "strategy_adjustment"], "confidence": 0.8, "step_type": "decision", "tools_used": ["echo", "touch"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "715227dbfe774ad2b2731b7802aa3983", "memory_type": "task", "when_to_use": "When the user requests stock information and follow-up actions such as adding to a watchlist or sending related messages.", "content": "The agent successfully retrieved stock details for Zeta Corp using 'get_stock_info', added it to the watchlist via 'add_to_watchlist', and enabled communication about the stock by sending a message with 'send_message'. This sequence of gathering, organizing, and sharing insights ensured the user's needs were comprehensively addressed.", "score": 0.0, "time_created": "2025-08-04 07:34:32", "time_modified": "2025-08-04 07:34:32", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:34:32", "modified_time": "2025-08-04 07:34:32", "extra_info": {"tags": ["stock analysis", "watchlist management", "communication"], "confidence": 0.9, "step_type": "action", "tools_used": ["get_stock_info", "add_to_watchlist", "send_message"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "4d89667fe2844c2c9670fe2b19fd5147", "memory_type": "task", "when_to_use": "When the user wants to review their sent messages for context or follow-up actions.", "content": "The agent effectively used 'view_messages_sent' to retrieve and present all recently sent messages grouped by recipient. By organizing the output clearly, the agent allowed the user to quickly grasp their communication history and decide on next steps.", "score": 0.0, "time_created": "2025-08-04 07:34:32", "time_modified": "2025-08-04 07:34:32", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:34:32", "modified_time": "2025-08-04 07:34:32", "extra_info": {"tags": ["message tracking", "user history", "sent messages"], "confidence": 0.85, "step_type": "observation", "tools_used": ["view_messages_sent"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "31db8cc648ce4cafbd9acea0c97f99a9", "memory_type": "task", "when_to_use": "When handling user queries about stock performance and related messaging tasks, ensure clarity in distinguishing between different API functionalities.", "content": "Avoid conflating unrelated tools or APIs during task execution by mapping out the appropriate sequence of actions beforehand, ensuring each step logically follows from the last based on the context of the query.", "score": 0.0, "time_created": "2025-08-04 07:34:28", "time_modified": "2025-08-04 07:34:28", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:34:28", "modified_time": "2025-08-04 07:34:28", "extra_info": {"tags": ["error_prevention", "failure_analysis", "tool_conflation"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["get_stock_info", "send_message", "view_messages_sent"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "e5c7200e14204f698a9056f79ba7ffd8", "memory_type": "task", "when_to_use": "When a user requests to review their sent messages, verify that the correct tool ('view_messages_sent') is used without being sidetracked by irrelevant tools.", "content": "Always confirm alignment between the user's request and the selected tool's functionality to avoid unnecessary steps or incorrect responses.", "score": 0.0, "time_created": "2025-08-04 07:34:28", "time_modified": "2025-08-04 07:34:28", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:34:28", "modified_time": "2025-08-04 07:34:28", "extra_info": {"tags": ["error_prevention", "failure_analysis", "tool_selection"], "confidence": 0.8, "step_type": "action", "tools_used": ["view_messages_sent"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "532c186ca3de4609b8e794cf76c6ecff", "memory_type": "task", "when_to_use": "During multi-step interactions involving both financial data retrieval and messaging functions, maintain focus on the primary intent of the user’s original query.", "content": "Stick to fulfilling the immediate request (e.g., stock info) before pivoting to secondary tasks (e.g., sending messages), unless explicitly instructed otherwise by the user.", "score": 0.0, "time_created": "2025-08-04 07:34:28", "time_modified": "2025-08-04 07:34:28", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:34:28", "modified_time": "2025-08-04 07:34:28", "extra_info": {"tags": ["error_prevention", "failure_analysis", "task_prioritization"], "confidence": 0.75, "step_type": "decision", "tools_used": ["get_stock_info", "add_to_watchlist", "send_message"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "e4515ae0542642c193b903e301bf0608", "memory_type": "task", "when_to_use": "When needing to calculate and verify an average value based on multiple inputs.", "content": "The agent successfully calculated the average tire pressure by summing individual values and dividing by the number of items. It then validated this result using a 'mean' function from a Math API, ensuring accuracy and alignment with user expectations.", "score": 0.0, "time_created": "2025-08-04 07:34:25", "time_modified": "2025-08-04 07:34:25", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:34:25", "modified_time": "2025-08-04 07:34:25", "extra_info": {"tags": ["average calculation", "validation", "math operations"], "confidence": 0.9, "step_type": "reasoning", "tools_used": ["mean"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "358e15f19bfd43acbcc7f0fb6d0a4558", "memory_type": "task", "when_to_use": "When addressing multi-step requests requiring sequential checks or actions (e.g., vehicle diagnostics).", "content": "The agent followed a logical sequence: checking individual tire pressures first, calculating their average upon user request, and presenting results in a clear, concise manner. This approach ensured all sub-tasks were completed systematically without missing details.", "score": 0.0, "time_created": "2025-08-04 07:34:25", "time_modified": "2025-08-04 07:34:25", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:34:25", "modified_time": "2025-08-04 07:34:25", "extra_info": {"tags": ["sequential tasks", "vehicle health check", "multi-step reasoning"], "confidence": 0.85, "step_type": "action", "tools_used": ["check_tire_pressure", "mean"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "82df6634afa74b4db4fcb385bd889326", "memory_type": "task", "when_to_use": "When initiating multi-step actions that depend on specific preconditions (e.g., locking doors, pressing the brake pedal).", "content": "Always verify and fulfill all required preconditions before attempting an action to avoid repetitive failures.", "score": 0.0, "time_created": "2025-08-04 07:34:36", "time_modified": "2025-08-04 07:34:36", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:34:36", "modified_time": "2025-08-04 07:34:36", "extra_info": {"tags": ["error_prevention", "failure_analysis", "preconditions"], "confidence": 0.9, "step_type": "action", "tools_used": ["startEngine", "lockDoors", "pressBrakePedal"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "7aa98ad6aa78498fbe70b80512780745", "memory_type": "task", "when_to_use": "When handling complex sequences involving unit conversions or calculations.", "content": "Ensure intermediate steps like rounding are performed accurately and consistently to maintain precision throughout the sequence.", "score": 0.0, "time_created": "2025-08-04 07:34:36", "time_modified": "2025-08-04 07:34:36", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:34:36", "modified_time": "2025-08-04 07:34:36", "extra_info": {"tags": ["error_prevention", "failure_analysis", "unit_conversion"], "confidence": 0.8, "step_type": "reasoning", "tools_used": ["liter_to_gallon", "round_number"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "c0efee40c303472b8252490db97e7c8d", "memory_type": "task", "when_to_use": "When gathering information from multiple sources or tools to make a decision.", "content": "Aggregate and cross-check data from different functions to ensure accuracy and completeness of the final output.", "score": 0.0, "time_created": "2025-08-04 07:34:36", "time_modified": "2025-08-04 07:34:36", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:34:36", "modified_time": "2025-08-04 07:34:36", "extra_info": {"tags": ["error_prevention", "failure_analysis", "data_aggregation"], "confidence": 0.75, "step_type": "observation", "tools_used": ["displayCarStatus", "check_tire_pressure"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "5655eb82b0a54eb6b1e33399928db043", "memory_type": "task", "when_to_use": "When the user needs to review and potentially cancel pending orders.", "content": "The agent first retrieved the order history, then iteratively fetched details for each order. By presenting both completed and pending orders, it allowed the user to make an informed decision on whether to cancel any specific pending order. This step pattern ensures clarity and enables effective decision-making.", "score": 0.0, "time_created": "2025-08-04 07:34:36", "time_modified": "2025-08-04 07:34:36", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:34:36", "modified_time": "2025-08-04 07:34:36", "extra_info": {"tags": ["order management", "order cancellation", "pending actions"], "confidence": 0.9, "step_type": "reasoning", "tools_used": ["get_order_history", "get_order_details"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "a1528e3863e6408d964b453e4a9f067b", "memory_type": "task", "when_to_use": "When handling multiple related tasks with interdependencies (e.g., retrieving and processing a list of items).", "content": "After obtaining the list of order IDs via 'get_order_history', the agent processed each order sequentially by calling 'get_order_details'. This ensured all relevant information was gathered before presenting it to the user. Such systematic handling of interdependent tasks minimizes oversight and maximizes task completion reliability.", "score": 0.0, "time_created": "2025-08-04 07:34:36", "time_modified": "2025-08-04 07:34:36", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:34:36", "modified_time": "2025-08-04 07:34:36", "extra_info": {"tags": ["task sequencing", "interdependent tasks", "systematic processing"], "confidence": 0.85, "step_type": "action", "tools_used": ["get_order_history", "get_order_details"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "5dab685787a746a5a1a0181aa14384eb", "memory_type": "task", "when_to_use": "When the user refers to an order that needs review but does not provide specific details like an order ID.", "content": "Always clarify missing or ambiguous information (e.g., order ID) before attempting to retrieve or act on data. Proceeding without critical identifiers can lead to incomplete or incorrect actions.", "score": 0.0, "time_created": "2025-08-04 07:34:38", "time_modified": "2025-08-04 07:34:38", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:34:38", "modified_time": "2025-08-04 07:34:38", "extra_info": {"tags": ["error_prevention", "missing_information", "clarification"], "confidence": 0.9, "step_type": "reasoning", "tools_used": []}}} -{"workspace_id": "bfcl_v1", "memory_id": "3380a9bd168848898eaf63ad96509a27", "memory_type": "task", "when_to_use": "When handling sequential tasks that depend on prior user inputs or actions, such as reviewing orders or transactions.", "content": "Ensure continuity in task execution by referencing previous steps or asking for necessary context if it’s unclear. Avoid assumptions about implicit prior actions unless explicitly confirmed.", "score": 0.0, "time_created": "2025-08-04 07:34:38", "time_modified": "2025-08-04 07:34:38", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:34:38", "modified_time": "2025-08-04 07:34:38", "extra_info": {"tags": ["error_prevention", "context_management", "task_continuity"], "confidence": 0.85, "step_type": "decision", "tools_used": []}}} -{"workspace_id": "bfcl_v1", "memory_id": "9fde73a1fb424750ad617e5d426cfeed", "memory_type": "task", "when_to_use": "When the user wants to add a stock to their watchlist and ensure they have sufficient funds for an upcoming trade.", "content": "The agent first added the requested stock (ZETA) to the user's watchlist, then retrieved its latest details. Upon the user's decision to buy, the agent verified account balance and topped it up via 'fund_account' before confirming the availability of funds for the trade. This sequence ensured smooth execution of the intended transaction without delays or errors.", "score": 0.0, "time_created": "2025-08-04 07:34:42", "time_modified": "2025-08-04 07:34:42", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:34:42", "modified_time": "2025-08-04 07:34:42", "extra_info": {"tags": ["stock trading", "account funding", "buy order preparation"], "confidence": 0.9, "step_type": "action", "tools_used": ["get_symbol_by_name", "add_to_watchlist", "get_stock_info", "place_order", "fund_account"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "f7223edd76a14f998e0ada854af31640", "memory_type": "task", "when_to_use": "When performing financial operations requiring multiple sequential tool calls.", "content": "Each action was seamlessly integrated with observations from previous steps, maintaining coherence in communication while progressively achieving sub-goals (e.g., adding stock → checking info → funding account). Using explicit intermediate responses kept the user informed and built trust throughout the process.", "score": 0.0, "time_created": "2025-08-04 07:34:42", "time_modified": "2025-08-04 07:34:42", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:34:42", "modified_time": "2025-08-04 07:34:42", "extra_info": {"tags": ["sequential reasoning", "user feedback integration", "multi-step workflows"], "confidence": 0.85, "step_type": "reasoning", "tools_used": []}}} -{"workspace_id": "bfcl_v1", "memory_id": "78e027c10c424dbdbd74e54ce940b92b", "memory_type": "task", "when_to_use": "When the user needs to verify or update their financial resources before executing a trade.", "content": "The agent successfully identified the need to fund the user's account and executed the 'fund_account' function with the correct amount. This ensured sufficient balance for the pending buy order, avoiding potential transaction failures.", "score": 0.0, "time_created": "2025-08-04 07:34:42", "time_modified": "2025-08-04 07:34:42", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:34:42", "modified_time": "2025-08-04 07:34:42", "extra_info": {"tags": ["account funding", "trade preparation", "financial readiness"], "confidence": 0.9, "step_type": "action", "tools_used": ["fund_account"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "0f3c6801d8eb40dcb12c5e1ec8f8012b", "memory_type": "task", "when_to_use": "When confirming the completion of a financial operation with the user.", "content": "After funding the account, the agent provided clear feedback on the new balance and confirmed the success of the operation. This transparency reassured the user and set the stage for subsequent actions like confirming the buy order.", "score": 0.0, "time_created": "2025-08-04 07:34:42", "time_modified": "2025-08-04 07:34:42", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:34:42", "modified_time": "2025-08-04 07:34:42", "extra_info": {"tags": ["user communication", "confirmation", "feedback"], "confidence": 0.85, "step_type": "observation", "tools_used": []}}} -{"workspace_id": "bfcl_v1", "memory_id": "a19791b6217a416ebeb11dac2926c6b1", "memory_type": "task", "when_to_use": "When the user needs to unlock multiple doors and ensure they are all unlocked before proceeding with other actions.", "content": "The agent successfully unlocked all specified doors (driver, passenger, rear left, rear right) in one step by calling the 'lockDoors' function with the 'unlock' parameter set to true. This ensured that all doors were accessible without requiring additional steps or repeated checks.", "score": 0.0, "time_created": "2025-08-04 07:35:01", "time_modified": "2025-08-04 07:35:01", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:01", "modified_time": "2025-08-04 07:35:01", "extra_info": {"tags": ["unlocking", "vehicle", "doors"], "confidence": 0.9, "step_type": "action", "tools_used": ["lockDoors"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "f3769261644a42a59a1d9680c1e6f745", "memory_type": "task", "when_to_use": "When starting the engine requires preconditions such as locking doors or pressing the brake pedal.", "content": "The agent encountered a security restriction where all doors needed to be locked before starting the engine. It efficiently addressed this by first locking all doors using the 'lockDoors' function, then ensuring the brake pedal was pressed via 'pressBrakePedal', and finally starting the engine with 'startEngine'. This systematic approach resolved dependencies and achieved the goal effectively.", "score": 0.0, "time_created": "2025-08-04 07:35:01", "time_modified": "2025-08-04 07:35:01", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:01", "modified_time": "2025-08-04 07:35:01", "extra_info": {"tags": ["engine-start", "preconditions", "systematic-resolution"], "confidence": 0.85, "step_type": "decision", "tools_used": ["lockDoors", "pressBrakePedal", "startEngine"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "6ec261380502413884a15b3ee329da9b", "memory_type": "task", "when_to_use": "When setting up cruise control with specific speed and distance parameters.", "content": "After confirming the engine was running, the agent configured the cruise control system with precise settings: 65 mph speed and a 100-meter following distance. Using the 'setCruiseControl' function, it activated the feature in one step, meeting the user's requirements accurately and efficiently.", "score": 0.0, "time_created": "2025-08-04 07:35:01", "time_modified": "2025-08-04 07:35:01", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:01", "modified_time": "2025-08-04 07:35:01", "extra_info": {"tags": ["cruise-control", "vehicle-settings", "automation"], "confidence": 0.8, "step_type": "action", "tools_used": ["setCruiseControl"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "cf6d8c876ab0441f960f99217c38db8a", "memory_type": "task", "when_to_use": "When interacting with vehicle systems that have interdependent safety features (e.g., locking doors before starting the engine).", "content": "Always verify preconditions for actions involving multiple steps, such as ensuring all doors are locked before attempting to start the engine.", "score": 0.0, "time_created": "2025-08-04 07:34:55", "time_modified": "2025-08-04 07:34:55", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:34:55", "modified_time": "2025-08-04 07:34:55", "extra_info": {"tags": ["error_prevention", "failure_analysis", "vehicle_safety"], "confidence": 0.9, "step_type": "reasoning", "tools_used": ["lockDoors", "startEngine"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "8f258ba94fe44d749dab6c6d4b7ef621", "memory_type": "task", "when_to_use": "When setting up automated driving features like cruise control that require specific inputs (e.g., speed, distance).", "content": "Double-check parameter units and ensure they align with user expectations (e.g., mph vs. km/h) before executing commands.", "score": 0.0, "time_created": "2025-08-04 07:34:55", "time_modified": "2025-08-04 07:34:55", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:34:55", "modified_time": "2025-08-04 07:34:55", "extra_info": {"tags": ["parameter_validation", "unit_conversion", "cruise_control"], "confidence": 0.8, "step_type": "action", "tools_used": ["setCruiseControl"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "ed1178897a47497683d476ade0cf26ae", "memory_type": "task", "when_to_use": "When troubleshooting errors after an unsuccessful action in a multi-step process.", "content": "After encountering an error, systematically address each condition mentioned in the error message before retrying the operation.", "score": 0.0, "time_created": "2025-08-04 07:34:55", "time_modified": "2025-08-04 07:34:55", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:34:55", "modified_time": "2025-08-04 07:34:55", "extra_info": {"tags": ["error_handling", "systematic_troubleshooting", "multi_step_processes"], "confidence": 0.85, "step_type": "decision", "tools_used": ["startEngine", "pressBrakePedal"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "4250d9c981244a37a721189b0118ae8c", "memory_type": "task", "when_to_use": "When the user requests information about a specific company's stock and related trading details.", "content": "The agent first used 'get_symbol_by_name' to retrieve the stock symbol corresponding to the company name. After obtaining the symbol, it called 'get_stock_info' to fetch detailed trading data such as price, percentage change, volume, and moving averages. This sequential approach ensures accurate and relevant information is provided based on the user query.", "score": 0.0, "time_created": "2025-08-04 07:35:09", "time_modified": "2025-08-04 07:35:09", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:09", "modified_time": "2025-08-04 07:35:09", "extra_info": {"tags": ["stock_lookup", "sequential_tool_calls", "trading_data"], "confidence": 0.9, "step_type": "action", "tools_used": ["get_symbol_by_name", "get_stock_info"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "726dfaf2562b4daa938b9005c664a42f", "memory_type": "task", "when_to_use": "When the user requests to add all stocks from a specific sector to their watchlist.", "content": "After identifying the relevant stocks using 'get_available_stocks', the agent iteratively added each stock symbol to the watchlist using 'add_to_watchlist'. This pattern of fetching a list and then performing an action on each item ensures comprehensive task completion while maintaining clarity in execution.", "score": 0.0, "time_created": "2025-08-04 07:35:09", "time_modified": "2025-08-04 07:35:09", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:09", "modified_time": "2025-08-04 07:35:09", "extra_info": {"tags": ["sector_analysis", "batch_processing", "watchlist_management"], "confidence": 0.85, "step_type": "action", "tools_used": ["get_available_stocks", "add_to_watchlist"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "96ef081175af4c4eb72be2cf297ceb02", "memory_type": "task", "when_to_use": "When the user requests multiple sequential actions involving dynamic data retrieval and processing.", "content": "The agent successfully retrieved a list of stock symbols for a specific sector using 'get_available_stocks' and iteratively added each symbol to the watchlist using 'add_to_watchlist'. This demonstrates an effective pattern for handling batch operations when only single-item tools are available. The iterative approach ensured all items were processed sequentially without errors.", "score": 0.0, "time_created": "2025-08-04 07:35:05", "time_modified": "2025-08-04 07:35:05", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:05", "modified_time": "2025-08-04 07:35:05", "extra_info": {"tags": ["batch_processing", "iterative_action", "sector_analysis"], "confidence": 0.9, "step_type": "action", "tools_used": ["get_available_stocks", "add_to_watchlist"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "f40328eb54c24103b91939be6af78761", "memory_type": "task", "when_to_use": "When needing to confirm task completion with the user after performing multi-step operations.", "content": "After completing the addition of all technology sector stocks to the watchlist, the agent provided a clear summary of the operation, listing each stock and confirming the total count. This confirmation step enhances user trust and clarity, ensuring they are aware that the requested actions were fully executed.", "score": 0.0, "time_created": "2025-08-04 07:35:05", "time_modified": "2025-08-04 07:35:05", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:05", "modified_time": "2025-08-04 07:35:05", "extra_info": {"tags": ["task_confirmation", "user_communication", "summary"], "confidence": 0.85, "step_type": "observation", "tools_used": []}}} -{"workspace_id": "bfcl_v1", "memory_id": "012bf743bdf542bdb97e15f5348d1878", "memory_type": "task", "when_to_use": "When preparing a vehicle for a long drive, especially after refueling.", "content": "After confirming the fuel tank is full, sequentially check and secure all vehicle systems (doors, parking brake, engine status) before starting the engine. This ensures safety and readiness for the trip. Following this pattern minimizes potential errors, such as attempting to start the engine with unlocked doors or without engaging the parking brake.", "score": 0.0, "time_created": "2025-08-04 07:34:54", "time_modified": "2025-08-04 07:34:54", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:34:54", "modified_time": "2025-08-04 07:34:54", "extra_info": {"tags": ["vehicle-readiness", "sequential-checks", "long-drive-prep"], "confidence": 0.9, "step_type": "action", "tools_used": ["fillFuelTank", "lockDoors", "activateParkingBrake", "startEngine"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "8d6185a3d3f8453db494ad1d7ea4e573", "memory_type": "task", "when_to_use": "When setting up GPS navigation to a specific destination before a journey.", "content": "After ensuring the vehicle is ready, use the set_navigation tool to input the final destination. Double-check that the address format matches the expected input of the tool to avoid errors. Providing clear feedback about the navigation setup reassures the user and confirms readiness for the trip.", "score": 0.0, "time_created": "2025-08-04 07:34:54", "time_modified": "2025-08-04 07:34:54", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:34:54", "modified_time": "2025-08-04 07:34:54", "extra_info": {"tags": ["gps-setup", "address-validation", "journey-preparation"], "confidence": 0.85, "step_type": "action", "tools_used": ["set_navigation"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "c8671001f39747708587fefd773ab01e", "memory_type": "task", "when_to_use": "When interacting with systems that have specific capacity limits (e.g., fuel tanks, account balances).", "content": "Always verify the current state or capacity before attempting to add or modify a resource. Failure to do so can result in errors like exceeding maximum thresholds.", "score": 0.0, "time_created": "2025-08-04 07:35:12", "time_modified": "2025-08-04 07:35:12", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:12", "modified_time": "2025-08-04 07:35:12", "extra_info": {"tags": ["error_prevention", "capacity_validation", "fuel_system"], "confidence": 0.9, "step_type": "action", "tools_used": ["fillFuelTank"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "7f849a60f99c4b858afc10bcb5332728", "memory_type": "task", "when_to_use": "When performing actions dependent on multiple preconditions (e.g., starting a car engine requires locked doors and engaged parking brakes).", "content": "Ensure all necessary preconditions are met before attempting an action. Skipping this validation step can lead to cascading failures or blocked operations.", "score": 0.0, "time_created": "2025-08-04 07:35:12", "time_modified": "2025-08-04 07:35:12", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:12", "modified_time": "2025-08-04 07:35:12", "extra_info": {"tags": ["error_prevention", "precondition_check", "vehicle_systems"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["startEngine", "displayCarStatus"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "97eb19b455544c9e9b3328ecfbb559ff", "memory_type": "task", "when_to_use": "When setting up navigation or similar systems requiring formatted input data.", "content": "Double-check that the input format matches the expected structure of the tool being used. Even small discrepancies in formatting can cause unexpected errors.", "score": 0.0, "time_created": "2025-08-04 07:35:12", "time_modified": "2025-08-04 07:35:12", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:12", "modified_time": "2025-08-04 07:35:12", "extra_info": {"tags": ["error_prevention", "input_validation", "gps_navigation"], "confidence": 0.8, "step_type": "action", "tools_used": ["set_navigation"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "6e44cae0e3514e249f06889d1c2c7e7a", "memory_type": "task", "when_to_use": "When handling multi-step processes involving currency conversions and budget limits.", "content": "Always confirm the required currency format for API parameters before proceeding. Misalignment between user input (e.g., RMB) and system requirements (e.g., USD) can lead to incorrect operations or failed executions.", "score": 0.0, "time_created": "2025-08-04 07:35:07", "time_modified": "2025-08-04 07:35:07", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:07", "modified_time": "2025-08-04 07:35:07", "extra_info": {"tags": ["error_prevention", "currency_conversion", "budget_limit"], "confidence": 0.9, "step_type": "reasoning", "tools_used": ["compute_exchange_rate", "set_budget_limit"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "b132ded9ef72481b9b711e3b80ec2e5e", "memory_type": "task", "when_to_use": "When encountering unexpected errors during API calls, especially related to missing or invalid arguments.", "content": "Validate all function arguments against the provided API documentation before execution. For instance, passing an unexpected keyword like 'access_token' to a function that doesn't require it can cause runtime errors.", "score": 0.0, "time_created": "2025-08-04 07:35:07", "time_modified": "2025-08-04 07:35:07", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:07", "modified_time": "2025-08-04 07:35:07", "extra_info": {"tags": ["error_prevention", "api_validation", "argument_errors"], "confidence": 0.85, "step_type": "action", "tools_used": ["get_all_credit_cards", "book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "cdb54c8aaad946ec8a5ac14fa948ce13", "memory_type": "task", "when_to_use": "When creating support tickets or escalating issues after multiple failed attempts to resolve a problem.", "content": "Ensure proper authentication steps are completed before initiating high-priority actions like ticket creation. Skipping or mismanaging login/authentication can delay issue resolution and create unnecessary complexity.", "score": 0.0, "time_created": "2025-08-04 07:35:07", "time_modified": "2025-08-04 07:35:07", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:07", "modified_time": "2025-08-04 07:35:07", "extra_info": {"tags": ["authentication", "ticket_management", "escalation"], "confidence": 0.8, "step_type": "decision", "tools_used": ["ticket_login", "create_ticket"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "f27ca893f4654bc2b907de983cf41d5d", "memory_type": "task", "when_to_use": "When handling user credentials for multiple systems, ensure the correct system is being authenticated.", "content": "Separate authentication steps for different systems and validate which credentials belong to which system before proceeding.", "score": 0.0, "time_created": "2025-08-04 07:35:25", "time_modified": "2025-08-04 07:35:25", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:25", "modified_time": "2025-08-04 07:35:25", "extra_info": {"tags": ["error_prevention", "authentication", "system_separation"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["ticket_login", "create_ticket"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "1706418966a649db93714f7dc73d314a", "memory_type": "task", "when_to_use": "When a function call fails due to unexpected keyword arguments, verify the API documentation or available function signature immediately.", "content": "Mismatched arguments in function calls often arise from assuming incorrect parameter names; cross-check function definitions when errors occur.", "score": 0.0, "time_created": "2025-08-04 07:35:25", "time_modified": "2025-08-04 07:35:25", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:25", "modified_time": "2025-08-04 07:35:25", "extra_info": {"tags": ["error_prevention", "api_usage", "parameter_validation"], "confidence": 0.9, "step_type": "action", "tools_used": ["get_all_credit_cards", "book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "7ff78de2aa9041f3bf46880f14586f23", "memory_type": "task", "when_to_use": "Before initiating actions that depend on prior states (e.g., creating tickets, bookings), confirm prerequisites such as login status or resource availability.", "content": "Always check preconditions like authentication or registration statuses to avoid cascading failures in dependent operations.", "score": 0.0, "time_created": "2025-08-04 07:35:25", "time_modified": "2025-08-04 07:35:25", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:25", "modified_time": "2025-08-04 07:35:25", "extra_info": {"tags": ["error_prevention", "dependency_management", "state_verification"], "confidence": 0.8, "step_type": "decision", "tools_used": ["create_ticket", "ticket_login"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "cdb1c6a7856d4eb0b9834ca3e415d56c", "memory_type": "task", "when_to_use": "When verifying vehicle conditions and planning related actions based on thresholds.", "content": "Always cross-check the threshold values provided by the user with the actual system outputs to ensure accurate interpretation before proceeding with subsequent actions.", "score": 0.0, "time_created": "2025-08-04 07:35:25", "time_modified": "2025-08-04 07:35:25", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:25", "modified_time": "2025-08-04 07:35:25", "extra_info": {"tags": ["error_prevention", "failure_analysis", "threshold_validation"], "confidence": 0.9, "step_type": "reasoning", "tools_used": ["check_tire_pressure", "find_nearest_tire_shop"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "a9458ec26485478db6ef016a8874c94f", "memory_type": "task", "when_to_use": "When integrating multiple tools or APIs for a multi-step task involving external systems (e.g., Twitter).", "content": "Ensure that all required parameters for API calls are correctly formatted and fully aligned with the tool specifications, especially when dealing with optional fields like hashtags or mentions.", "score": 0.0, "time_created": "2025-08-04 07:35:25", "time_modified": "2025-08-04 07:35:25", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:25", "modified_time": "2025-08-04 07:35:25", "extra_info": {"tags": ["error_prevention", "api_integration", "parameter_validation"], "confidence": 0.85, "step_type": "action", "tools_used": ["post_tweet"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "f8651ff360d341429497ddfd8c195027", "memory_type": "task", "when_to_use": "When handling user requests involving multiple tasks, ensure each task's requirements are fully understood before proceeding.", "content": "Misinterpreting user instructions can lead to incorrect function calls. Always verify whether optional parameters are necessary based on the explicit details provided by the user.", "score": 0.0, "time_created": "2025-08-04 07:35:27", "time_modified": "2025-08-04 07:35:27", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:27", "modified_time": "2025-08-04 07:35:27", "extra_info": {"tags": ["error_prevention", "failure_analysis", "user_instructions"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["post_tweet"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "551c7bb40c8a4dd8b9f37b5a27597db5", "memory_type": "task", "when_to_use": "When a function has overlapping parameters (e.g., content and tags), confirm whether duplicating information is required or redundant.", "content": "Ambiguity in whether to include hashtags in both content and tags led to potential redundancy. Clarify such cases by revisiting user intent or function documentation.", "score": 0.0, "time_created": "2025-08-04 07:35:27", "time_modified": "2025-08-04 07:35:27", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:27", "modified_time": "2025-08-04 07:35:27", "extra_info": {"tags": ["error_prevention", "parameter_handling", "redundancy"], "confidence": 0.8, "step_type": "decision", "tools_used": ["post_tweet"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "e9d818424a154e21acb4e99f76704384", "memory_type": "task", "when_to_use": "When executing multi-step workflows, cross-check intermediate outputs with the original query to ensure alignment.", "content": "Failure to validate tire pressure results against the threshold specified by the user could have been avoided by explicitly comparing values.", "score": 0.0, "time_created": "2025-08-04 07:35:27", "time_modified": "2025-08-04 07:35:27", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:27", "modified_time": "2025-08-04 07:35:27", "extra_info": {"tags": ["error_prevention", "validation", "workflow_alignment"], "confidence": 0.75, "step_type": "observation", "tools_used": ["check_tire_pressure", "find_nearest_tire_shop"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "e9e88f7d3acb4ca6899cab4d3fd56bb2", "memory_type": "task", "when_to_use": "When attempting to navigate to a directory and encountering an error that the directory does not exist.", "content": "Before trying to change directories, verify the existence of the target directory using tools like 'find' or 'ls'. This prevents unnecessary errors and provides clarity on available paths.", "score": 0.0, "time_created": "2025-08-04 07:35:47", "time_modified": "2025-08-04 07:35:47", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:47", "modified_time": "2025-08-04 07:35:47", "extra_info": {"tags": ["error_prevention", "directory_navigation", "failure_analysis"], "confidence": 0.9, "step_type": "action", "tools_used": ["cd", "find", "ls"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "c442ef65bf4342e2878ae665ec09c7ec", "memory_type": "task", "when_to_use": "When performing file operations (e.g., counting lines) in a specific directory that may not exist or is incorrectly referenced.", "content": "Always confirm the current working directory and validate the presence of required files before executing commands. Skipping this can lead to failed operations due to incorrect context.", "score": 0.0, "time_created": "2025-08-04 07:35:47", "time_modified": "2025-08-04 07:35:47", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:47", "modified_time": "2025-08-04 07:35:47", "extra_info": {"tags": ["file_operations", "context_validation", "error_handling"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["pwd", "ls", "wc"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "bd163f2c9287451fa46a91835941da15", "memory_type": "task", "when_to_use": "When creating new files based on dynamic content (e.g., number of matching lines from a previous operation).", "content": "Double-check the logic for generating filenames and ensure the content to be written matches the intended format. Missteps here can result in improperly named or empty files.", "score": 0.0, "time_created": "2025-08-04 07:35:47", "time_modified": "2025-08-04 07:35:47", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:47", "modified_time": "2025-08-04 07:35:47", "extra_info": {"tags": ["file_creation", "dynamic_content", "validation"], "confidence": 0.8, "step_type": "decision", "tools_used": ["echo", "grep"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "8e31a3ca290b4711a08e58a41b945d24", "memory_type": "task", "when_to_use": "When navigating directories and encountering a 'No such directory' error.", "content": "Always verify the existence of the target directory before attempting to navigate into it. If unsure, use directory listing tools (e.g., `ls`) or create the directory explicitly if necessary.", "score": 0.0, "time_created": "2025-08-04 07:35:48", "time_modified": "2025-08-04 07:35:48", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:48", "modified_time": "2025-08-04 07:35:48", "extra_info": {"tags": ["error_prevention", "directory_navigation", "cd_command"], "confidence": 0.9, "step_type": "action", "tools_used": ["cd", "ls", "mkdir"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "3d84dc6a86184bfe8d1db20cc0adf20a", "memory_type": "task", "when_to_use": "When extracting specific sentences from a file based on user instructions.", "content": "Clarify ambiguous instructions regarding sentence extraction by confirming whether the user intends logical sentences (split by punctuation) or lines in the file. Use precise parsing logic accordingly.", "score": 0.0, "time_created": "2025-08-04 07:35:48", "time_modified": "2025-08-04 07:35:48", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:48", "modified_time": "2025-08-04 07:35:48", "extra_info": {"tags": ["error_prevention", "text_parsing", "grep_usage"], "confidence": 0.8, "step_type": "reasoning", "tools_used": ["grep", "wc"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "b1a74220e2ff49f9bc303cab98113375", "memory_type": "task", "when_to_use": "When creating files named with dynamic content such as line counts.", "content": "Ensure that the dynamic content (e.g., line count) is correctly retrieved and validated before using it as part of a filename. Validate intermediate outputs to avoid incorrect naming.", "score": 0.0, "time_created": "2025-08-04 07:35:48", "time_modified": "2025-08-04 07:35:48", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:48", "modified_time": "2025-08-04 07:35:48", "extra_info": {"tags": ["error_prevention", "file_creation", "dynamic_naming"], "confidence": 0.85, "step_type": "decision", "tools_used": ["wc", "touch", "echo"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "b58bf8ff5f37427f92d72abc2ed216bd", "memory_type": "task", "when_to_use": "When an initial attempt to book a flight fails due to incorrect airport codes, and the user's location is provided in city names.", "content": "The agent successfully identified that the initial booking failed because of incorrect airport codes. It then used 'get_nearest_airport_by_city' to resolve the correct IATA codes for departure and arrival cities. This approach ensures accurate inputs for subsequent booking attempts and avoids unnecessary errors.", "score": 0.0, "time_created": "2025-08-04 07:35:52", "time_modified": "2025-08-04 07:35:52", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:52", "modified_time": "2025-08-04 07:35:52", "extra_info": {"tags": ["booking", "airport_code_resolution", "error_handling"], "confidence": 0.9, "step_type": "reasoning", "tools_used": ["get_nearest_airport_by_city"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "2d1e03a59d264768b5a21f761251f501", "memory_type": "task", "when_to_use": "When converting currency for financial clarity during international travel planning.", "content": "After retrieving the flight cost in USD, the agent utilized 'compute_exchange_rate' to convert the amount into EUR as per the user’s request. This step ensures transparency and helps users make informed decisions based on their preferred currency reference.", "score": 0.0, "time_created": "2025-08-04 07:35:52", "time_modified": "2025-08-04 07:35:52", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:52", "modified_time": "2025-08-04 07:35:52", "extra_info": {"tags": ["currency_conversion", "financial_planning", "international_travel"], "confidence": 0.85, "step_type": "action", "tools_used": ["compute_exchange_rate"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "a1bff9a33b0848c9b37cae5f96901535", "memory_type": "task", "when_to_use": "When encountering API parameter mismatches during service calls like booking flights or purchasing insurance.", "content": "Upon receiving an error indicating unexpected parameters ('travel_cost') in the 'book_flight' function call, the agent removed the invalid parameter and retried with only required fields. This highlights the importance of validating API documentation and adjusting dynamically to ensure successful execution.", "score": 0.0, "time_created": "2025-08-04 07:35:52", "time_modified": "2025-08-04 07:35:52", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:52", "modified_time": "2025-08-04 07:35:52", "extra_info": {"tags": ["api_error_handling", "parameter_validation", "dynamic_adjustment"], "confidence": 0.8, "step_type": "decision", "tools_used": ["book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "9d362dcff2dd44b4a11c7a5c4c59f34b", "memory_type": "task", "when_to_use": "When handling API calls where specific function parameters are required but not clearly documented or validated beforehand.", "content": "Always validate the expected parameters of a function against its actual implementation to avoid unexpected keyword argument errors. Double-check tool documentation and error responses for hints on correct usage.", "score": 0.0, "time_created": "2025-08-04 07:35:53", "time_modified": "2025-08-04 07:35:53", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:53", "modified_time": "2025-08-04 07:35:53", "extra_info": {"tags": ["error_prevention", "failure_analysis", "api_calls", "parameter_validation"], "confidence": 0.9, "step_type": "action", "tools_used": ["book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "1edbba26e67f4e5e999782a8f5e77d8c", "memory_type": "task", "when_to_use": "When encountering persistent failures after multiple attempts with the same function call.", "content": "If an action fails repeatedly despite minor adjustments, reassess whether all necessary preconditions have been met (e.g., authentication, correct input formats). Avoid redundant retries without addressing root causes.", "score": 0.0, "time_created": "2025-08-04 07:35:53", "time_modified": "2025-08-04 07:35:53", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:53", "modified_time": "2025-08-04 07:35:53", "extra_info": {"tags": ["error_prevention", "failure_analysis", "redundant_retries", "root_cause"], "confidence": 0.8, "step_type": "decision", "tools_used": ["book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "d1474596c1be4db98325bf36c93e1458", "memory_type": "task", "when_to_use": "When consolidating multi-step processes like booking flights and purchasing insurance into a single output or document.", "content": "Ensure that each step’s outputs are complete before proceeding to consolidate information. Missing details in intermediate steps can lead to incomplete final outputs, requiring additional queries or corrections.", "score": 0.0, "time_created": "2025-08-04 07:35:53", "time_modified": "2025-08-04 07:35:53", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:53", "modified_time": "2025-08-04 07:35:53", "extra_info": {"tags": ["error_prevention", "failure_analysis", "process_completion", "output_validation"], "confidence": 0.75, "step_type": "observation", "tools_used": ["retrieve_invoice", "purchase_insurance"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "8c52156b5efe424ab8618e1f27143f04", "memory_type": "task", "when_to_use": "When the user requests to perform a financial transaction (e.g., withdrawal) and account details are not explicitly provided.", "content": "Before executing the transaction, retrieve account information using `get_account_info` to ensure sufficient balance and obtain necessary details like account ID. Then, use `make_transaction` with the retrieved account ID, ensuring the correct transaction type and amount are applied. This approach ensures accuracy and prevents errors due to missing or incorrect account details.", "score": 0.0, "time_created": "2025-08-04 07:35:58", "time_modified": "2025-08-04 07:35:58", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:58", "modified_time": "2025-08-04 07:35:58", "extra_info": {"tags": ["account validation", "transaction", "withdrawal"], "confidence": 0.9, "step_type": "action", "tools_used": ["get_account_info", "make_transaction"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "46ae2e70fdf647598c6e40d93cb110f8", "memory_type": "task", "when_to_use": "When verifying the status of an order after placement to confirm execution progress.", "content": "After placing an order, call `get_order_details` using the generated order ID to check its current status. This provides transparency to the user and ensures the system's actions align with expectations, allowing for timely follow-ups if the order remains pending or encounters issues.", "score": 0.0, "time_created": "2025-08-04 07:35:58", "time_modified": "2025-08-04 07:35:58", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:58", "modified_time": "2025-08-04 07:35:58", "extra_info": {"tags": ["order tracking", "status verification", "user feedback"], "confidence": 0.85, "step_type": "observation", "tools_used": ["get_order_details"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "42ea655e3f3c4c9cb3bdd70c5b1f35bb", "memory_type": "task", "when_to_use": "When a user requests stock symbols from a specific sector for investment consideration.", "content": "Use `get_available_stocks` with the specified sector parameter to retrieve a list of relevant stock symbols. Presenting this information promptly allows the user to make informed decisions about potential investments while maintaining engagement with clear, actionable data.", "score": 0.0, "time_created": "2025-08-04 07:35:58", "time_modified": "2025-08-04 07:35:58", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:58", "modified_time": "2025-08-04 07:35:58", "extra_info": {"tags": ["stock selection", "sector analysis", "investment"], "confidence": 0.8, "step_type": "action", "tools_used": ["get_available_stocks"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "c38db3dabf634350b8b33b750f998122", "memory_type": "task", "when_to_use": "When the user requests a transaction that requires account-specific information, such as withdrawals or transfers.", "content": "Always verify and explicitly request any missing account identifiers (e.g., account ID) before proceeding with financial transactions. Assuming session data may lead to errors if the identifier isn't stored or accessible.", "score": 0.0, "time_created": "2025-08-04 07:35:51", "time_modified": "2025-08-04 07:35:51", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:51", "modified_time": "2025-08-04 07:35:51", "extra_info": {"tags": ["error_prevention", "failure_analysis", "account_identification"], "confidence": 0.9, "step_type": "decision", "tools_used": ["make_transaction"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "94cd9deaf4074c7fac3e39fee3a6983b", "memory_type": "task", "when_to_use": "When handling multi-step processes involving external tools or APIs, especially where authentication and session continuity are critical.", "content": "Ensure that all required parameters for subsequent actions are either explicitly provided by the user or captured during earlier steps in the interaction flow. Missing key details can disrupt workflows and necessitate re-prompting or failing the task.", "score": 0.0, "time_created": "2025-08-04 07:35:51", "time_modified": "2025-08-04 07:35:51", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:51", "modified_time": "2025-08-04 07:35:51", "extra_info": {"tags": ["workflow_management", "session_continuity", "parameter_validation"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["get_order_details", "place_order", "make_transaction"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "d8d88b8492eb4779aa7b268b0b011a0f", "memory_type": "task", "when_to_use": "When handling multi-step user requests involving authentication and messaging systems.", "content": "Always verify whether the necessary credentials (e.g., passwords) are available before attempting to log in or perform actions requiring authentication. If credentials are missing, clarify with the user before proceeding.", "score": 0.0, "time_created": "2025-08-04 07:36:00", "time_modified": "2025-08-04 07:36:00", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:36:00", "modified_time": "2025-08-04 07:36:00", "extra_info": {"tags": ["error_prevention", "authentication", "user_clarification"], "confidence": 0.9, "step_type": "reasoning", "tools_used": ["message_login", "send_message"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "b60d303785154031bd52f931423dbc6c", "memory_type": "task", "when_to_use": "When constructing messages or notifications that depend on dynamic data from prior steps.", "content": "Ensure all required dynamic information (e.g., order IDs, balances) is explicitly confirmed or retrieved before incorporating it into a message. Avoid assuming contextual details from earlier interactions without explicit validation.", "score": 0.0, "time_created": "2025-08-04 07:36:00", "time_modified": "2025-08-04 07:36:00", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:36:00", "modified_time": "2025-08-04 07:36:00", "extra_info": {"tags": ["error_prevention", "dynamic_data", "message_construction"], "confidence": 0.85, "step_type": "action", "tools_used": ["get_account_info", "send_message"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "892bbe6582b141f28b59881bc5f4ffcf", "memory_type": "task", "when_to_use": "When managing complex workflows spanning multiple tools or APIs.", "content": "Break down multi-step tasks into smaller, verifiable sub-tasks, ensuring each step's success before proceeding to the next. This minimizes cascading failures caused by incomplete or incorrect prior steps.", "score": 0.0, "time_created": "2025-08-04 07:36:00", "time_modified": "2025-08-04 07:36:00", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:36:00", "modified_time": "2025-08-04 07:36:00", "extra_info": {"tags": ["workflow_management", "failure_analysis", "step_validation"], "confidence": 0.8, "step_type": "decision", "tools_used": ["get_account_info", "message_login", "send_message"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "28382cb898b043929628708d6a6ad8d4", "memory_type": "task", "when_to_use": "When handling multi-system authentication (e.g., trading system and messaging API) where credentials are required but not explicitly provided by the user.", "content": "Always confirm whether sufficient login credentials or session status have been established before proceeding with dependent actions. If unclear, prompt the user for clarification or necessary inputs to avoid deadlocks.", "score": 0.0, "time_created": "2025-08-04 07:35:51", "time_modified": "2025-08-04 07:35:51", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:51", "modified_time": "2025-08-04 07:35:51", "extra_info": {"tags": ["error_prevention", "authentication", "multi-system"], "confidence": 0.9, "step_type": "decision", "tools_used": ["trading_get_login_status", "message_login"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "158dcde089764242a5ffbfe54b1d980e", "memory_type": "task", "when_to_use": "When composing messages that require dynamic data insertion (e.g., account balances), ensure all variables are validated and correctly formatted before sending.", "content": "Dynamic content generation should include a validation checkpoint to ensure accuracy and prevent malformed outputs. Cross-check values retrieved from tools against expected formats.", "score": 0.0, "time_created": "2025-08-04 07:35:51", "time_modified": "2025-08-04 07:35:51", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:51", "modified_time": "2025-08-04 07:35:51", "extra_info": {"tags": ["error_prevention", "dynamic_content", "message_sending"], "confidence": 0.8, "step_type": "action", "tools_used": ["get_account_info", "send_message"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "819df7ebc777433c9a892e3245cd338c", "memory_type": "task", "when_to_use": "When managing tools with overlapping functionalities (e.g., trading vs. messaging APIs), clarify which system is responsible for each task to avoid confusion.", "content": "Clearly delineate tool responsibilities in the planning phase to prevent conflating systems. Use explicit checks to verify correct tool usage based on context.", "score": 0.0, "time_created": "2025-08-04 07:35:51", "time_modified": "2025-08-04 07:35:51", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:35:51", "modified_time": "2025-08-04 07:35:51", "extra_info": {"tags": ["error_prevention", "tool_management", "system_overlap"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["all_tools"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "c99a7b76369e459d8df19af78e2ae167", "memory_type": "task", "when_to_use": "When handling multi-step tasks involving external tools or APIs, especially when user instructions evolve mid-execution.", "content": "Always verify that the correct tool is being used for the intended action and ensure alignment between the user's evolving requests and the available functions. Misalignment can lead to incorrect outputs or redundant steps.", "score": 0.0, "time_created": "2025-08-04 07:36:15", "time_modified": "2025-08-04 07:36:15", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:36:15", "modified_time": "2025-08-04 07:36:15", "extra_info": {"tags": ["error_prevention", "tool_usage", "task_alignment"], "confidence": 0.85, "step_type": "action", "tools_used": ["grep", "diff", "authenticate_twitter", "post_tweet", "comment"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "ffbdda01bcc6420da172e737c29dcabb", "memory_type": "task", "when_to_use": "When a user modifies their request after initial actions have been taken (e.g., adding a comment after posting a tweet).", "content": "After completing an initial task, always confirm with the user whether additional modifications are needed before proceeding further. This avoids unnecessary backtracking or confusion.", "score": 0.0, "time_created": "2025-08-04 07:36:15", "time_modified": "2025-08-04 07:36:15", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:36:15", "modified_time": "2025-08-04 07:36:15", "extra_info": {"tags": ["user_clarification", "request_modification", "workflow_optimization"], "confidence": 0.8, "step_type": "decision", "tools_used": ["post_tweet", "comment"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "e043718056174234a45fc587d7c2a3e6", "memory_type": "task", "when_to_use": "When logging or extracting specific data patterns from files for comparative analysis.", "content": "Ensure extracted information is accurate and complete by validating intermediate results (e.g., checking grep output) before proceeding to subsequent steps like comparisons or sharing findings externally.", "score": 0.0, "time_created": "2025-08-04 07:36:15", "time_modified": "2025-08-04 07:36:15", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:36:15", "modified_time": "2025-08-04 07:36:15", "extra_info": {"tags": ["data_validation", "intermediate_results", "comparative_analysis"], "confidence": 0.75, "step_type": "observation", "tools_used": ["grep", "diff"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "97f478735b32429ea67ab38eef42acc7", "memory_type": "task", "when_to_use": "When handling multi-step tasks involving external tools or APIs, especially when user instructions span multiple actions.", "content": "Always confirm the completion of one action before proceeding to the next, ensuring intermediate outputs align with user expectations.", "score": 0.0, "time_created": "2025-08-04 07:36:05", "time_modified": "2025-08-04 07:36:05", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:36:05", "modified_time": "2025-08-04 07:36:05", "extra_info": {"tags": ["error_prevention", "failure_analysis", "multi_step_tasks"], "confidence": 0.9, "step_type": "reasoning", "tools_used": ["grep", "diff", "post_tweet", "comment"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "391a37e0470a4156b1c4b5d244ac54a0", "memory_type": "task", "when_to_use": "When a user's request involves combining multiple functionalities (e.g., posting content and adding comments).", "content": "Clarify whether the user expects combined functionality in a single step or sequential steps, as tool limitations might require separating actions explicitly.", "score": 0.0, "time_created": "2025-08-04 07:36:05", "time_modified": "2025-08-04 07:36:05", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:36:05", "modified_time": "2025-08-04 07:36:05", "extra_info": {"tags": ["error_prevention", "user_clarity", "tool_limitations"], "confidence": 0.8, "step_type": "decision", "tools_used": ["post_tweet", "comment"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "ed536a36874d49388e3bd0f6a39df89b", "memory_type": "task", "when_to_use": "When needing to send a message between two users in a system where login is required.", "content": "The sequence involved logging in as the sender (USR001) using `message_login`, confirming successful login via `login_status`, and then sending the message to the recipient (USR002) using `send_message`. This ensured proper authentication before message delivery, which is crucial for systems requiring user-specific actions.", "score": 0.0, "time_created": "2025-08-04 07:36:23", "time_modified": "2025-08-04 07:36:23", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:36:23", "modified_time": "2025-08-04 07:36:23", "extra_info": {"tags": ["user-authentication", "message-sending", "system-login"], "confidence": 0.9, "step_type": "action", "tools_used": ["message_login", "send_message"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "8acc54686d1a4f5eb5a2fcaeb0ba5a9e", "memory_type": "task", "when_to_use": "When verifying the success of an action dependent on prior steps (e.g., login).", "content": "After invoking `message_login` to authenticate USR001, the response's `login_status` was checked to confirm success before proceeding with `send_message`. This decision point ensures that subsequent actions only occur if prerequisites are met, reducing errors and improving reliability.", "score": 0.0, "time_created": "2025-08-04 07:36:23", "time_modified": "2025-08-04 07:36:23", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:36:23", "modified_time": "2025-08-04 07:36:23", "extra_info": {"tags": ["decision-making", "error-prevention", "conditional-execution"], "confidence": 0.85, "step_type": "decision", "tools_used": ["message_login"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "0bc8aea9286e4873a720e709a25ceefc", "memory_type": "task", "when_to_use": "When attempting to locate and copy files within nested directories.", "content": "Always verify the exact file path before executing commands like `cp` or `mv`. Misunderstanding directory nesting can lead to repeated failures. Use tools like `find` or additional `ls` calls to confirm paths when initial attempts fail.", "score": 0.0, "time_created": "2025-08-04 07:36:23", "time_modified": "2025-08-04 07:36:23", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:36:23", "modified_time": "2025-08-04 07:36:23", "extra_info": {"tags": ["error_prevention", "file_operations", "path_verification"], "confidence": 0.9, "step_type": "action", "tools_used": ["ls", "find", "cp"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "9bd02c97e3ff46158243cc73a908cd2f", "memory_type": "task", "when_to_use": "When encountering persistent errors during a multi-step process.", "content": "Break down each step explicitly, ensuring all prerequisites are met (e.g., directory existence, login status). Skipping implicit checks can compound issues later in the sequence.", "score": 0.0, "time_created": "2025-08-04 07:36:23", "time_modified": "2025-08-04 07:36:23", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:36:23", "modified_time": "2025-08-04 07:36:23", "extra_info": {"tags": ["error_prevention", "multi_step_processes", "prerequisite_checks"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["message_login", "send_message"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "7e3f2bfda1f8417484cfbb36fcac4fe7", "memory_type": "task", "when_to_use": "When handling user-provided instructions that involve authentication steps.", "content": "Explicitly confirm whether credentials or preconditions (like login states) need verification before proceeding with subsequent actions. Ambiguity here often leads to incorrect assumptions and failed executions.", "score": 0.0, "time_created": "2025-08-04 07:36:23", "time_modified": "2025-08-04 07:36:23", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:36:23", "modified_time": "2025-08-04 07:36:23", "extra_info": {"tags": ["error_prevention", "authentication", "user_instructions"], "confidence": 0.8, "step_type": "decision", "tools_used": ["message_login"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "92686286d3454c1cb94090c6adb21cd8", "memory_type": "task", "when_to_use": "When handling user requests involving specific identifiers (e.g., booking ID, order ID), and the user hasn't provided them.", "content": "Always verify the availability of critical identifiers early in the interaction. If missing, guide the user explicitly on how to retrieve or provide them before proceeding with actions that depend on those identifiers.", "score": 0.0, "time_created": "2025-08-04 07:36:27", "time_modified": "2025-08-04 07:36:27", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:36:27", "modified_time": "2025-08-04 07:36:27", "extra_info": {"tags": ["error_prevention", "identifier_verification", "user_guidance"], "confidence": 0.9, "step_type": "reasoning", "tools_used": []}}} -{"workspace_id": "bfcl_v1", "memory_id": "f89526fb2c9e48e3a1df8fa03ca26b30", "memory_type": "task", "when_to_use": "When an API call fails due to invalid or missing parameters, such as a 'Booking not found' error.", "content": "Cross-check all required inputs with the user before making API calls. If an error occurs, immediately prompt for clarification or alternative information instead of continuing with incomplete data.", "score": 0.0, "time_created": "2025-08-04 07:36:27", "time_modified": "2025-08-04 07:36:27", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:36:27", "modified_time": "2025-08-04 07:36:27", "extra_info": {"tags": ["error_handling", "api_validation", "input_verification"], "confidence": 0.85, "step_type": "action", "tools_used": ["contact_customer_support"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "4a0138951c904a0ab250824f115914d8", "memory_type": "task", "when_to_use": "When escalating issues to customer support or creating formal complaints without resolving underlying problems.", "content": "Ensure all possible internal solutions are exhausted before escalating issues. Provide clear instructions to users on gathering necessary details to resolve their issue effectively.", "score": 0.0, "time_created": "2025-08-04 07:36:27", "time_modified": "2025-08-04 07:36:27", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:36:27", "modified_time": "2025-08-04 07:36:27", "extra_info": {"tags": ["escalation_prevention", "customer_support", "issue_resolution"], "confidence": 0.8, "step_type": "decision", "tools_used": ["create_ticket", "ticket_login"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "d5b022dda18b4d2eae7a80721b48cccd", "memory_type": "task", "when_to_use": "When handling user requests for cancellations or modifications of bookings.", "content": "Always verify and request essential details like booking IDs before proceeding with actions that require them. Missing critical inputs can stall progress and frustrate users further.", "score": 0.0, "time_created": "2025-08-04 07:36:18", "time_modified": "2025-08-04 07:36:18", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:36:18", "modified_time": "2025-08-04 07:36:18", "extra_info": {"tags": ["error_prevention", "failure_analysis", "user_input_validation"], "confidence": 0.9, "step_type": "reasoning", "tools_used": []}}} -{"workspace_id": "bfcl_v1", "memory_id": "62f37dfe0acb4e8580ebb9fc9c9f30b1", "memory_type": "task", "when_to_use": "When escalating issues to customer support or creating formal complaints on behalf of the user.", "content": "Ensure all prior steps, including authentication and gathering necessary context (e.g., descriptions or IDs), are completed before initiating escalation processes. Skipping these can lead to failed attempts and wasted effort.", "score": 0.0, "time_created": "2025-08-04 07:36:18", "time_modified": "2025-08-04 07:36:18", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:36:18", "modified_time": "2025-08-04 07:36:18", "extra_info": {"tags": ["error_prevention", "failure_analysis", "escalation_process"], "confidence": 0.85, "step_type": "action", "tools_used": ["ticket_login", "create_ticket"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "016e2a0905344476919f80c47f086152", "memory_type": "task", "when_to_use": "When determining the current market status to inform trading decisions.", "content": "The agent first used 'update_market_status' and 'get_current_time' to check if the market was open. This two-step verification ensured accuracy, combining time-based status updates with real-time confirmation, providing reliable guidance for subsequent actions.", "score": 0.0, "time_created": "2025-08-04 07:36:38", "time_modified": "2025-08-04 07:36:38", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:36:38", "modified_time": "2025-08-04 07:36:38", "extra_info": {"tags": ["market-status", "time-verification", "trading-readiness"], "confidence": 0.9, "step_type": "reasoning", "tools_used": ["update_market_status", "get_current_time"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "fed78424949e4beaa50e5ac79ec75ffb", "memory_type": "task", "when_to_use": "When placing an order after confirming stock details and ensuring alignment with user intent.", "content": "Before placing a buy order, the agent retrieved detailed stock information using 'get_stock_info'. This ensured the user was fully informed about price, volume, and trends, leading to a confident decision to proceed with 'place_order'. The sequential validation minimized risks of misinformed trades.", "score": 0.0, "time_created": "2025-08-04 07:36:38", "time_modified": "2025-08-04 07:36:38", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:36:38", "modified_time": "2025-08-04 07:36:38", "extra_info": {"tags": ["stock-validation", "order-placement", "user-alignment"], "confidence": 0.85, "step_type": "action", "tools_used": ["get_stock_info", "place_order"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "d65ead8f11324e8b88f1885a07ba9975", "memory_type": "task", "when_to_use": "When a user requests cancellation of a pending order.", "content": "Upon receiving a cancellation request, the agent promptly called 'cancel_order' with the correct order ID. This immediate action prevented further processing of the unwanted trade, showcasing the importance of responsive and accurate tool usage in dynamic environments like stock trading.", "score": 0.0, "time_created": "2025-08-04 07:36:38", "time_modified": "2025-08-04 07:36:38", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:36:38", "modified_time": "2025-08-04 07:36:38", "extra_info": {"tags": ["order-cancellation", "responsiveness", "user-control"], "confidence": 0.88, "step_type": "action", "tools_used": ["cancel_order"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "730cbeabae6b42a98bce2b396ec6236a", "memory_type": "task", "when_to_use": "When handling stock trades, especially in volatile conditions where users might change their minds frequently.", "content": "Always confirm the status of an order (e.g., 'Pending', 'Open') before attempting cancellation to avoid redundant actions or errors.", "score": 0.0, "time_created": "2025-08-04 07:36:26", "time_modified": "2025-08-04 07:36:26", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:36:26", "modified_time": "2025-08-04 07:36:26", "extra_info": {"tags": ["error_prevention", "failure_analysis", "order_cancellation"], "confidence": 0.85, "step_type": "decision", "tools_used": ["cancel_order", "get_order_details"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "87d6a46a008e4cdda556fb10b7db400a", "memory_type": "task", "when_to_use": "When interacting with financial tools that involve multiple sequential steps such as placing and canceling orders.", "content": "Maintain clear communication with the user after each step to ensure alignment with their intentions and prevent premature actions like canceling orders unnecessarily.", "score": 0.0, "time_created": "2025-08-04 07:36:26", "time_modified": "2025-08-04 07:36:26", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:36:26", "modified_time": "2025-08-04 07:36:26", "extra_info": {"tags": ["error_prevention", "user_communication", "sequential_steps"], "confidence": 0.8, "step_type": "reasoning", "tools_used": ["place_order", "cancel_order"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "af7cc591abf741c9975a080fae1d4deb", "memory_type": "task", "when_to_use": "When the user requests to add a stock to their watchlist and requires confirmation with details.", "content": "The sequence started by identifying the stock symbol using 'get_symbol_by_name', then added it via 'add_to_watchlist'. Afterward, the agent retrieved the updated watchlist using 'get_watchlist' to confirm the addition. This ensured accuracy and user satisfaction by providing immediate feedback.", "score": 0.0, "time_created": "2025-08-04 07:36:43", "time_modified": "2025-08-04 07:36:43", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:36:43", "modified_time": "2025-08-04 07:36:43", "extra_info": {"tags": ["stock", "watchlist", "confirmation"], "confidence": 0.9, "step_type": "action", "tools_used": ["get_symbol_by_name", "add_to_watchlist", "get_watchlist"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "32043acbde304ebda3a4767b8119b646", "memory_type": "task", "when_to_use": "When the user needs detailed information about multiple items (e.g., stocks) in a list.", "content": "After confirming the watchlist update, the agent iteratively called 'get_stock_info' for each stock symbol (NVDA and QUAS). It structured the responses into an easily digestible format highlighting key metrics like price, percent change, volume, and moving averages. This approach provided comprehensive yet clear insights tailored to the user’s request.", "score": 0.0, "time_created": "2025-08-04 07:36:43", "time_modified": "2025-08-04 07:36:43", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:36:43", "modified_time": "2025-08-04 07:36:43", "extra_info": {"tags": ["details", "iterative", "stock-info"], "confidence": 0.85, "step_type": "action", "tools_used": ["get_stock_info"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "959d951d0afe4c92bf674056811ce478", "memory_type": "task", "when_to_use": "When handling user requests involving stock symbols derived from company names.", "content": "Always verify the output of functions like 'get_symbol_by_name' before proceeding with subsequent actions, ensuring the symbol is valid and matches expectations.", "score": 0.0, "time_created": "2025-08-04 07:36:27", "time_modified": "2025-08-04 07:36:27", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:36:27", "modified_time": "2025-08-04 07:36:27", "extra_info": {"tags": ["error_prevention", "failure_analysis", "symbol_validation"], "confidence": 0.85, "step_type": "action", "tools_used": ["get_symbol_by_name"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "5ea9afe8650a4320a246e5dd7fd7587b", "memory_type": "task", "when_to_use": "When presenting detailed information about multiple items (e.g., stocks) to users.", "content": "Batch process all required data retrievals first, then compile responses into a cohesive, well-structured format for clarity and completeness.", "score": 0.0, "time_created": "2025-08-04 07:36:27", "time_modified": "2025-08-04 07:36:27", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:36:27", "modified_time": "2025-08-04 07:36:27", "extra_info": {"tags": ["error_prevention", "failure_analysis", "data_presentation"], "confidence": 0.8, "step_type": "reasoning", "tools_used": ["get_stock_info"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "f9c03cb506e54e778a2a9a7d171f04b8", "memory_type": "task", "when_to_use": "When verifying traveler information is required before proceeding with booking-related tasks.", "content": "The agent successfully used the 'verify_traveler_information' tool to validate the user's details early in the process. This ensured accuracy and compliance, setting a solid foundation for subsequent steps like flight booking or cancellations.", "score": 0.0, "time_created": "2025-08-04 07:36:53", "time_modified": "2025-08-04 07:36:53", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:36:53", "modified_time": "2025-08-04 07:36:53", "extra_info": {"tags": ["travel_verification", "initial_validation", "booking_preparation"], "confidence": 0.9, "step_type": "action", "tools_used": ["verify_traveler_information"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "a95f40bb5f6844f28426ac8966f679be", "memory_type": "task", "when_to_use": "When handling dynamic location inputs (e.g., city names) that need mapping to standardized airport codes.", "content": "The agent utilized the 'get_nearest_airport_by_city' tool twice—once for departure and once for arrival locations—to convert user-provided city names into valid IATA airport codes. This approach ensures compatibility with downstream tools requiring precise formatting.", "score": 0.0, "time_created": "2025-08-04 07:36:53", "time_modified": "2025-08-04 07:36:53", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:36:53", "modified_time": "2025-08-04 07:36:53", "extra_info": {"tags": ["location_mapping", "airport_code_conversion", "dynamic_input_handling"], "confidence": 0.85, "step_type": "action", "tools_used": ["get_nearest_airport_by_city"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "023dfbb115784aa286214ddbd073eb98", "memory_type": "task", "when_to_use": "When canceling a confirmed booking due to changes in user plans.", "content": "Upon receiving updated instructions from the user, the agent promptly invoked the 'cancel_booking' tool using previously stored access tokens and booking IDs. The clear adherence to cancellation protocols resulted in a seamless resolution without errors.", "score": 0.0, "time_created": "2025-08-04 07:36:53", "time_modified": "2025-08-04 07:36:53", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:36:53", "modified_time": "2025-08-04 07:36:53", "extra_info": {"tags": ["booking_cancellation", "user_request_adaptation", "error-free_execution"], "confidence": 0.9, "step_type": "action", "tools_used": ["cancel_booking"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "42f12e5fcf684647ab4ec2402d0c18b8", "memory_type": "task", "when_to_use": "When encountering persistent parameter-related errors during API calls despite matching the documented parameters.", "content": "Verify and cross-check the actual API behavior with its documentation, as discrepancies may exist due to outdated or incorrect tool descriptions. Consider testing alternative parameter names or consulting support for clarification.", "score": 0.0, "time_created": "2025-08-04 07:36:48", "time_modified": "2025-08-04 07:36:48", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:36:48", "modified_time": "2025-08-04 07:36:48", "extra_info": {"tags": ["error_prevention", "api_mismatch", "parameter_validation"], "confidence": 0.9, "step_type": "action", "tools_used": ["book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "09688835ebd24f9bba51ae79b54ab31f", "memory_type": "task", "when_to_use": "When attempting to cancel a booking but no valid booking ID exists due to prior booking failures.", "content": "Ensure that critical operations like cancellations are only attempted if prior steps (e.g., booking) were successfully completed and relevant identifiers (e.g., booking ID) were generated. Communicate clearly with the user about the status of previous steps.", "score": 0.0, "time_created": "2025-08-04 07:36:48", "time_modified": "2025-08-04 07:36:48", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:36:48", "modified_time": "2025-08-04 07:36:48", "extra_info": {"tags": ["error_prevention", "booking_failure", "user_communication"], "confidence": 0.85, "step_type": "decision", "tools_used": ["cancel_booking", "book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "0e6e82e075d7458cb774ef68ae4d4098", "memory_type": "task", "when_to_use": "When needing to delete a message but encountering parameter mismatches in the API call.", "content": "The agent initially attempted to delete a specific message using both receiver_id and message_id, but encountered an error due to an unexpected keyword argument. Upon retrying with only the required 'receiver_id', the deletion succeeded, removing the latest message for that user. This approach highlights the importance of verifying tool definitions against actual function behavior when discrepancies arise.", "score": 0.0, "time_created": "2025-08-04 07:36:56", "time_modified": "2025-08-04 07:36:56", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:36:56", "modified_time": "2025-08-04 07:36:56", "extra_info": {"tags": ["message deletion", "API mismatch", "parameter validation"], "confidence": 0.9, "step_type": "action", "tools_used": ["delete_message"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "d7de25115fe043428adb7d82de6a1c83", "memory_type": "task", "when_to_use": "When executing stock purchase orders and notifying stakeholders.", "content": "After successfully placing a buy order for 150 shares of Synex Solutions (SYNX), the agent sent a confirmation message to a colleague. Although the message had to be retracted later, this step sequence demonstrated a clear flow of actions: retrieving stock data, placing an order, confirming it via messaging, and handling corrections efficiently. The structured use of tools ensured clarity and precision throughout.", "score": 0.0, "time_created": "2025-08-04 07:36:56", "time_modified": "2025-08-04 07:36:56", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:36:56", "modified_time": "2025-08-04 07:36:56", "extra_info": {"tags": ["stock trading", "order execution", "messaging"], "confidence": 0.85, "step_type": "sequence", "tools_used": ["get_stock_info", "place_order", "send_message", "delete_message"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "ae6f9337e07044c0858647f17a34819f", "memory_type": "task", "when_to_use": "When attempting to delete a specific message using an API function.", "content": "Always verify the exact parameter names and types expected by the API function, even if the tool definition suggests otherwise. An unexpected keyword argument error may indicate a mismatch between documented and actual function parameters.", "score": 0.0, "time_created": "2025-08-04 07:36:44", "time_modified": "2025-08-04 07:36:44", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:36:44", "modified_time": "2025-08-04 07:36:44", "extra_info": {"tags": ["error_prevention", "parameter_validation", "api_usage"], "confidence": 0.9, "step_type": "action", "tools_used": ["delete_message"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "d62787a6ae6e42acb5b14f6480f8b4a6", "memory_type": "task", "when_to_use": "When encountering an error related to unexpected arguments in a function call.", "content": "Double-check whether required or optional parameters have changed in the function implementation compared to its documentation. If unsure, try calling the function without optional parameters to see if it resolves the issue.", "score": 0.0, "time_created": "2025-08-04 07:36:44", "time_modified": "2025-08-04 07:36:44", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:36:44", "modified_time": "2025-08-04 07:36:44", "extra_info": {"tags": ["error_prevention", "failure_analysis", "api_mismatch"], "confidence": 0.8, "step_type": "reasoning", "tools_used": ["delete_message"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "8bc85fdfa586429daf8a1eb04e671513", "memory_type": "task", "when_to_use": "When drafting messages to customer support or external parties based on user instructions.", "content": "Always cross-check that all explicitly requested details (e.g., reference IDs, user IDs, and specific phrasing) are included verbatim in the final output to avoid omissions.", "score": 0.0, "time_created": "2025-08-04 07:37:06", "time_modified": "2025-08-04 07:37:06", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:37:06", "modified_time": "2025-08-04 07:37:06", "extra_info": {"tags": ["error_prevention", "communication", "customer_support"], "confidence": 0.9, "step_type": "action", "tools_used": []}}} -{"workspace_id": "bfcl_v1", "memory_id": "c1731aa071814cc09ff17d5cb773f541", "memory_type": "task", "when_to_use": "When integrating new tools or functions into a workflow with predefined user expectations.", "content": "Ensure alignment between tool outputs and user-provided reference systems (e.g., internal vs. external IDs) to prevent mismatches or confusion.", "score": 0.0, "time_created": "2025-08-04 07:37:06", "time_modified": "2025-08-04 07:37:06", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:37:06", "modified_time": "2025-08-04 07:37:06", "extra_info": {"tags": ["error_prevention", "tool_integration", "reference_systems"], "confidence": 0.8, "step_type": "reasoning", "tools_used": ["get_stock_info", "place_order"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "b53880394812464c9403fa451205362f", "memory_type": "task", "when_to_use": "When executing multi-step processes involving financial transactions or critical confirmations.", "content": "Explicitly confirm intermediate outputs (e.g., order IDs, prices) against user expectations before proceeding to subsequent steps like drafting confirmation notes.", "score": 0.0, "time_created": "2025-08-04 07:37:06", "time_modified": "2025-08-04 07:37:06", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:37:06", "modified_time": "2025-08-04 07:37:06", "extra_info": {"tags": ["error_prevention", "transaction_validation", "multi_step_process"], "confidence": 0.85, "step_type": "decision", "tools_used": ["place_order", "get_stock_info"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "552de4a1366b4ded945193fbf44e575a", "memory_type": "task", "when_to_use": "When needing to send a message or confirm order details with an external party such as customer service.", "content": "Ensure that the receiver_id corresponds to the correct recipient's user ID before sending messages. If the recipient's user ID is not explicitly provided, clarify it with the user rather than assuming based on available identifiers like reference IDs.", "score": 0.0, "time_created": "2025-08-04 07:37:02", "time_modified": "2025-08-04 07:37:02", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:37:02", "modified_time": "2025-08-04 07:37:02", "extra_info": {"tags": ["error_prevention", "failure_analysis", "receiver_id_validation"], "confidence": 0.85, "step_type": "action", "tools_used": ["send_message"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "d0c36559f3d6457ca8d18e2f4adca5c1", "memory_type": "task", "when_to_use": "When handling tasks involving multiple IDs (e.g., user ID, reference ID) in function calls.", "content": "Double-check that each identifier used in API/tool calls matches its intended purpose; mismatching these can lead to incorrect actions being taken, even if the rest of the logic appears sound.", "score": 0.0, "time_created": "2025-08-04 07:37:02", "time_modified": "2025-08-04 07:37:02", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:37:02", "modified_time": "2025-08-04 07:37:02", "extra_info": {"tags": ["error_prevention", "failure_analysis", "ID_matching"], "confidence": 0.8, "step_type": "decision", "tools_used": []}}} -{"workspace_id": "bfcl_v1", "memory_id": "e03f6854e9384bd390304db659d7a72a", "memory_type": "task", "when_to_use": "When constructing and sending important communications such as order confirmations or requests for verification.", "content": "Always validate that all required placeholders (like names, IDs, stock details) have been correctly inserted into the final communication to avoid incomplete or confusing messages.", "score": 0.0, "time_created": "2025-08-04 07:37:02", "time_modified": "2025-08-04 07:37:02", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:37:02", "modified_time": "2025-08-04 07:37:02", "extra_info": {"tags": ["error_prevention", "failure_analysis", "message_validation"], "confidence": 0.75, "step_type": "reasoning", "tools_used": ["send_message"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "984a04b0487a4aa6a9c1262ed898d84f", "memory_type": "task", "when_to_use": "When a user needs to submit a formal complaint or ticket after an issue occurs.", "content": "The agent first authenticated the user via `ticket_login` using provided credentials. After successful login, it created a ticket with `create_ticket`, including the title and detailed description of the issue. This sequence ensures proper authentication before submitting the complaint, reducing the risk of unauthorized access or failed submissions.", "score": 0.0, "time_created": "2025-08-04 07:37:08", "time_modified": "2025-08-04 07:37:08", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:37:08", "modified_time": "2025-08-04 07:37:08", "extra_info": {"tags": ["complaint-handling", "authentication", "ticket-creation"], "confidence": 0.9, "step_type": "action", "tools_used": ["ticket_login", "create_ticket"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "f60315fdce4f413fa91716608a84c44a", "memory_type": "task", "when_to_use": "When handling cancellations and follow-up actions such as refunds or rebooking.", "content": "After confirming the cancellation status with `cancel_booking`, the agent proactively offered assistance for next steps like refunds or alternative arrangements. This approach maintains user trust by addressing potential concerns immediately and providing clear options.", "score": 0.0, "time_created": "2025-08-04 07:37:08", "time_modified": "2025-08-04 07:37:08", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:37:08", "modified_time": "2025-08-04 07:37:08", "extra_info": {"tags": ["cancellation-handling", "proactive-support", "user-trust"], "confidence": 0.85, "step_type": "decision", "tools_used": ["cancel_booking"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "9e3a564329554101a2bf33dbc2be806a", "memory_type": "task", "when_to_use": "When handling user credentials for authentication in a multi-step process.", "content": "Always verify if the user is authenticated before proceeding with actions that require login. If not authenticated, explicitly log in using provided credentials before continuing.", "score": 0.0, "time_created": "2025-08-04 07:37:17", "time_modified": "2025-08-04 07:37:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:37:17", "modified_time": "2025-08-04 07:37:17", "extra_info": {"tags": ["error_prevention", "authentication", "user_credentials"], "confidence": 0.9, "step_type": "action", "tools_used": ["ticket_login", "create_ticket"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "36413cd579d54aa3bd7b32fda9c2946b", "memory_type": "task", "when_to_use": "When an API call fails due to unexpected arguments or parameters.", "content": "Double-check the required and optional parameters of a function before calling it. Ensure all provided arguments match the expected format and no extra parameters are included.", "score": 0.0, "time_created": "2025-08-04 07:37:17", "time_modified": "2025-08-04 07:37:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:37:17", "modified_time": "2025-08-04 07:37:17", "extra_info": {"tags": ["error_prevention", "api_usage", "parameter_validation"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "46038fcfd6664def979865dfa4765623", "memory_type": "task", "when_to_use": "When submitting complaints or formal requests on behalf of users.", "content": "Break down the submission process into clear steps: authenticate, validate input, submit, and confirm submission. Communicate each step's status to the user to avoid confusion.", "score": 0.0, "time_created": "2025-08-04 07:37:17", "time_modified": "2025-08-04 07:37:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:37:17", "modified_time": "2025-08-04 07:37:17", "extra_info": {"tags": ["error_prevention", "user_communication", "process_clarity"], "confidence": 0.8, "step_type": "decision", "tools_used": ["create_ticket", "ticket_login"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "a5e8ed3c2caa4d2d8077cc11a970a0c6", "memory_type": "task", "when_to_use": "When attempting to post a tweet and the user provides login credentials explicitly.", "content": "Always authenticate the user before performing actions that require authentication, even if the user assumes the system is already authenticated. Ensure tools requiring separate authentication steps are handled sequentially.", "score": 0.0, "time_created": "2025-08-04 07:37:18", "time_modified": "2025-08-04 07:37:18", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:37:18", "modified_time": "2025-08-04 07:37:18", "extra_info": {"tags": ["error_prevention", "authentication", "twitter_api"], "confidence": 0.9, "step_type": "action", "tools_used": ["authenticate_twitter", "post_tweet"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "42bf07580d4a41e6838f3923fb3bdb5a", "memory_type": "task", "when_to_use": "When handling multi-step processes involving external systems (e.g., flight bookings, social media posts).", "content": "Verify all prerequisite steps are completed successfully before proceeding to subsequent actions. For example, ensure a booking ID exists before attempting cancellation or invoice retrieval.", "score": 0.0, "time_created": "2025-08-04 07:37:18", "time_modified": "2025-08-04 07:37:18", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:37:18", "modified_time": "2025-08-04 07:37:18", "extra_info": {"tags": ["error_prevention", "multi_step_process", "failure_analysis"], "confidence": 0.85, "step_type": "reasoning", "tools_used": []}}} -{"workspace_id": "bfcl_v1", "memory_id": "7a1729d8e9274c918299d6a362e0d753", "memory_type": "task", "when_to_use": "When dealing with travel-related queries and encountering route unavailability errors.", "content": "If no available routes are found for a specific date, always suggest alternative dates or nearby airports to provide actionable options rather than stopping at an error message.", "score": 0.0, "time_created": "2025-08-04 07:37:18", "time_modified": "2025-08-04 07:37:18", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:37:18", "modified_time": "2025-08-04 07:37:18", "extra_info": {"tags": ["error_handling", "travel_booking", "user_experience"], "confidence": 0.8, "step_type": "decision", "tools_used": ["get_flight_cost"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "999a8639ecf64a6faf1d189609dfef17", "memory_type": "task", "when_to_use": "When attempting to use a function that requires authentication, ensure that the user is authenticated beforehand.", "content": "Always verify if an authentication step is required before executing functions that depend on it. If credentials are provided but not directly used by the function, execute an explicit authentication step first.", "score": 0.0, "time_created": "2025-08-04 07:37:19", "time_modified": "2025-08-04 07:37:19", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:37:19", "modified_time": "2025-08-04 07:37:19", "extra_info": {"tags": ["error_prevention", "failure_analysis", "authentication", "function_dependencies"], "confidence": 0.9, "step_type": "action", "tools_used": ["authenticate_twitter", "post_tweet"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "ed3e7ef6f22048298b754b63ce4f52d5", "memory_type": "task", "when_to_use": "When handling unexpected keyword arguments in function calls, validate parameter expectations against tool documentation.", "content": "Mismatched or unexpected parameters can lead to execution errors. Always cross-check the expected arguments for each function against its definition in the tools list before calling it.", "score": 0.0, "time_created": "2025-08-04 07:37:19", "time_modified": "2025-08-04 07:37:19", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:37:19", "modified_time": "2025-08-04 07:37:19", "extra_info": {"tags": ["error_prevention", "failure_analysis", "parameter_validation", "tool_usage"], "confidence": 0.8, "step_type": "reasoning", "tools_used": ["book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "4c9fd67106854ccca73bcc04d86a244a", "memory_type": "task", "when_to_use": "When escalating issues to customer support, confirm prior attempts and specify clear context in the message.", "content": "To expedite resolution, ensure all relevant details (e.g., booking ID, previous actions) are included when contacting customer support, and verify no prior unresolved requests exist.", "score": 0.0, "time_created": "2025-08-04 07:37:19", "time_modified": "2025-08-04 07:37:19", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:37:19", "modified_time": "2025-08-04 07:37:19", "extra_info": {"tags": ["error_prevention", "failure_analysis", "customer_support", "escalation"], "confidence": 0.75, "step_type": "decision", "tools_used": ["contact_customer_support"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "641d2260f7d646759e6ba06cb3a478d4", "memory_type": "task", "when_to_use": "When needing to cancel an order and confirm its status for the user.", "content": "After placing an order, if the user requests cancellation, first use 'get_order_details' to verify the order's current state, then call 'cancel_order' with the correct order_id. This ensures the action is error-free and aligns with user intent. Confirming the cancellation status reassures the user.", "score": 0.0, "time_created": "2025-08-04 07:37:27", "time_modified": "2025-08-04 07:37:27", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:37:27", "modified_time": "2025-08-04 07:37:27", "extra_info": {"tags": ["order management", "cancellation", "user confirmation"], "confidence": 0.9, "step_type": "action", "tools_used": ["get_order_details", "cancel_order"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "322aa5ca971443cf87578fc45f940b99", "memory_type": "task", "when_to_use": "When determining whether the market is open or closed before initiating trades.", "content": "Use 'get_current_time' followed by 'update_market_status' to check the market's operational status. This sequence helps prevent invalid trade attempts during non-operational hours and sets context for subsequent trading actions.", "score": 0.0, "time_created": "2025-08-04 07:37:27", "time_modified": "2025-08-04 07:37:27", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:37:27", "modified_time": "2025-08-04 07:37:27", "extra_info": {"tags": ["market status", "time-based decision", "pre-trade checks"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["get_current_time", "update_market_status"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "7b725041fbb64ab385346bf470a75643", "memory_type": "task", "when_to_use": "When purchasing shares at the current market price.", "content": "Retrieve real-time stock information using 'get_stock_info', then place an order via 'place_order' with the latest price data. This ensures accuracy and avoids discrepancies caused by outdated pricing, improving execution reliability.", "score": 0.0, "time_created": "2025-08-04 07:37:27", "time_modified": "2025-08-04 07:37:27", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:37:27", "modified_time": "2025-08-04 07:37:27", "extra_info": {"tags": ["stock purchase", "real-time data", "trade execution"], "confidence": 0.88, "step_type": "action", "tools_used": ["get_stock_info", "place_order"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "df6acc658b4c47b883fe5106148dadb9", "memory_type": "task", "when_to_use": "When needing to cancel a stock order immediately after placing it due to potential errors or changes in strategy.", "content": "The sequence involved reviewing the placed order details for accuracy, then using the 'cancel_order' function with the correct 'order_id'. This ensured that the cancellation was processed promptly and accurately. The confirmation response verified successful cancellation, allowing for quick corrective actions if needed.", "score": 0.0, "time_created": "2025-08-04 07:37:17", "time_modified": "2025-08-04 07:37:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:37:17", "modified_time": "2025-08-04 07:37:17", "extra_info": {"tags": ["stock trading", "order management", "error correction"], "confidence": 0.9, "step_type": "action", "tools_used": ["get_order_details", "cancel_order"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "027200504d024f17982ac9e07b940ad2", "memory_type": "task", "when_to_use": "When monitoring market status before making financial decisions like purchasing stocks.", "content": "The agent first checked the current time and updated the market status to confirm whether the market was open. This step ensured that subsequent actions (like buying shares) were aligned with real-time market conditions, reducing the risk of executing trades during non-optimal times.", "score": 0.0, "time_created": "2025-08-04 07:37:17", "time_modified": "2025-08-04 07:37:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:37:17", "modified_time": "2025-08-04 07:37:17", "extra_info": {"tags": ["market analysis", "time-sensitive operations", "pre-trade checks"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["get_current_time", "update_market_status"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "52e5afb6a65d408aa68e036a9436e4d7", "memory_type": "task", "when_to_use": "When the user requests to resolve a support ticket with specific details.", "content": "The agent successfully resolved a support ticket by first retrieving the open ticket details using `get_user_tickets`, then confirming resolution specifics with the user, and finally executing the `resolve_ticket` function with the appropriate ticket ID and resolution description. This ensured clarity in communication and precise execution of the user's request.", "score": 0.0, "time_created": "2025-08-04 07:37:47", "time_modified": "2025-08-04 07:37:47", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:37:47", "modified_time": "2025-08-04 07:37:47", "extra_info": {"tags": ["ticket resolution", "user request handling", "support system"], "confidence": 0.9, "step_type": "action", "tools_used": ["get_user_tickets", "resolve_ticket"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "699c5fa5f3a44186b24b05920b2f8682", "memory_type": "task", "when_to_use": "When managing stock trading operations, including order placement and status updates.", "content": "The agent efficiently handled a stock purchase request by first retrieving the stock's current information via `get_stock_info`, placing an order using `place_order`, and subsequently fetching detailed order status through `get_order_details`. This sequence provided the user with real-time updates and clear confirmation of their financial transaction.", "score": 0.0, "time_created": "2025-08-04 07:37:47", "time_modified": "2025-08-04 07:37:47", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:37:47", "modified_time": "2025-08-04 07:37:47", "extra_info": {"tags": ["stock trading", "order management", "financial tracking"], "confidence": 0.85, "step_type": "action", "tools_used": ["get_stock_info", "place_order", "get_order_details"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "1e036f02ce7040998ecfb20f6637fb8c", "memory_type": "task", "when_to_use": "When handling requests to modify or confirm the status of specific entities (e.g., tickets, orders), ensure all necessary identifiers are provided before proceeding.", "content": "Always verify that sufficient context, such as unique IDs or sufficient details, is available before attempting operations that modify system states. If not available, guide the user explicitly on how to retrieve or provide the missing information.", "score": 0.0, "time_created": "2025-08-04 07:37:38", "time_modified": "2025-08-04 07:37:38", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:37:38", "modified_time": "2025-08-04 07:37:38", "extra_info": {"tags": ["error_prevention", "failure_analysis", "user_communication"], "confidence": 0.9, "step_type": "reasoning", "tools_used": []}}} -{"workspace_id": "bfcl_v1", "memory_id": "c3efec332140472c91e1cb3635f1341a", "memory_type": "task", "when_to_use": "When a user attempts an action contingent on prior steps (e.g., resolving a ticket), ensure those steps have been successfully completed and referenced.", "content": "Break down multi-step processes clearly and confirm completion of each prerequisite step before moving forward. This avoids situations where the system assumes context that hasn't been established.", "score": 0.0, "time_created": "2025-08-04 07:37:38", "time_modified": "2025-08-04 07:37:38", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:37:38", "modified_time": "2025-08-04 07:37:38", "extra_info": {"tags": ["error_prevention", "context_management", "process_flow"], "confidence": 0.85, "step_type": "decision", "tools_used": []}}} -{"workspace_id": "bfcl_v1", "memory_id": "2d3f7aa3e445477bb464f003f97e5262", "memory_type": "task", "when_to_use": "When attempting to cancel a booking and ensure a refund, verify if all associated costs (e.g., insurance) are automatically refunded or require separate cancellation.", "content": "Always confirm the scope of cancellations for ancillary services like insurance before assuming full refunds. Missing this can lead to incomplete resolution of user requests.", "score": 0.0, "time_created": "2025-08-04 07:37:48", "time_modified": "2025-08-04 07:37:48", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:37:48", "modified_time": "2025-08-04 07:37:48", "extra_info": {"tags": ["error_prevention", "failure_analysis", "refund_handling", "booking_cancellation"], "confidence": 0.85, "step_type": "decision", "tools_used": ["cancel_booking", "purchase_insurance"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "f59314604f264a5684dc716aa19bc0a2", "memory_type": "task", "when_to_use": "When executing multi-step processes involving financial transactions, ensure there is a function to track or confirm the final status of refunds or credits.", "content": "Lack of visibility into refund processing can leave users uncertain about the resolution. Always use tools that provide confirmation of financial adjustments.", "score": 0.0, "time_created": "2025-08-04 07:37:48", "time_modified": "2025-08-04 07:37:48", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:37:48", "modified_time": "2025-08-04 07:37:48", "extra_info": {"tags": ["error_prevention", "failure_analysis", "refund_tracking", "financial_confirmation"], "confidence": 0.8, "step_type": "action", "tools_used": ["get_credit_card_balance", "retrieve_invoice"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "e750cba39dc948e4854875ad39e8bc73", "memory_type": "task", "when_to_use": "When handling multi-step processes involving external tools or APIs where intermediate errors may occur.", "content": "Always validate the success of intermediate steps before proceeding to subsequent actions. For instance, after canceling a booking, confirm its status before initiating follow-up actions like refunds or support requests.", "score": 0.0, "time_created": "2025-08-04 07:38:01", "time_modified": "2025-08-04 07:38:01", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:38:01", "modified_time": "2025-08-04 07:38:01", "extra_info": {"tags": ["error_prevention", "failure_analysis", "validation", "intermediate_steps"], "confidence": 0.9, "step_type": "action", "tools_used": ["cancel_booking", "contact_customer_support"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "c9bbcbee443948eb8b6023e10abab89b", "memory_type": "task", "when_to_use": "When encountering 'entity not found' errors during API calls after prior operations were marked successful.", "content": "Cross-check identifiers (e.g., booking IDs) and re-verify the state of the entity in question using an appropriate query function before escalating issues or retrying operations.", "score": 0.0, "time_created": "2025-08-04 07:38:01", "time_modified": "2025-08-04 07:38:01", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:38:01", "modified_time": "2025-08-04 07:38:01", "extra_info": {"tags": ["error_prevention", "failure_analysis", "identifier_validation", "state_verification"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["cancel_booking", "contact_customer_support"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "36a6c9f8297c4d7ea6ff8d485ba9866d", "memory_type": "task", "when_to_use": "When designing workflows that involve financial transactions or irreversible actions such as cancellations.", "content": "Implement fallback mechanisms or checkpoints to ensure users can recover from errors gracefully, especially when dealing with critical tasks like refunds or cancellations.", "score": 0.0, "time_created": "2025-08-04 07:38:01", "time_modified": "2025-08-04 07:38:01", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:38:01", "modified_time": "2025-08-04 07:38:01", "extra_info": {"tags": ["workflow_design", "error_recovery", "financial_transactions", "fallback_mechanisms"], "confidence": 0.8, "step_type": "decision", "tools_used": ["cancel_booking", "retrieve_invoice", "contact_customer_support"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "1b5c8b19ff9842acbaa2fb857dd5feb5", "memory_type": "task", "when_to_use": "When determining the nearest airport to a user's location for travel planning.", "content": "The agent successfully identified the nearest airport by using the 'get_nearest_airport_by_city' function with the user's specified location. This approach ensures accurate mapping of cities to their respective airport codes, enabling precise flight cost calculations later.", "score": 0.0, "time_created": "2025-08-04 07:38:48", "time_modified": "2025-08-04 07:38:48", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:38:48", "modified_time": "2025-08-04 07:38:48", "extra_info": {"tags": ["nearest airport", "travel planning", "location-based decision"], "confidence": 0.9, "step_type": "action", "tools_used": ["get_nearest_airport_by_city"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "aa2e9243d5984bff906c1ff6f0875a32", "memory_type": "task", "when_to_use": "When calculating flight costs between two locations based on specific dates and class preferences.", "content": "After identifying the departure and arrival airport codes (CRH and PHV), the agent called 'get_flight_cost' with the correct parameters (dates and business class). This ensured the response directly addressed the user’s query about trip expenses, demonstrating effective chaining of tools for complex queries.", "score": 0.0, "time_created": "2025-08-04 07:38:48", "time_modified": "2025-08-04 07:38:48", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:38:48", "modified_time": "2025-08-04 07:38:48", "extra_info": {"tags": ["flight cost", "business class", "date-specific query"], "confidence": 0.85, "step_type": "action", "tools_used": ["get_flight_cost"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "899fa817696f4528a2adbcaf54003ad3", "memory_type": "task", "when_to_use": "When handling user queries requiring specific data formats (e.g., IATA airport codes), ensure the input conforms to expected standards before proceeding.", "content": "Always validate that required parameters for API functions are available and correctly formatted before execution. Missing or incorrect data can lead to failed function calls.", "score": 0.0, "time_created": "2025-08-04 07:39:04", "time_modified": "2025-08-04 07:39:04", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:39:04", "modified_time": "2025-08-04 07:39:04", "extra_info": {"tags": ["error_prevention", "data_validation", "function_parameters"], "confidence": 0.9, "step_type": "reasoning", "tools_used": ["get_flight_cost"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "ead92d08d7914b52908ec7953dbd9e10", "memory_type": "task", "when_to_use": "When a query involves ambiguous or incomplete information (e.g., destination names without corresponding IATA codes), attempt clarification or request additional details.", "content": "Ambiguities in user input should be resolved early to avoid downstream errors. Proceeding without clarification risks misinterpretation and task failure.", "score": 0.0, "time_created": "2025-08-04 07:39:04", "time_modified": "2025-08-04 07:39:04", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:39:04", "modified_time": "2025-08-04 07:39:04", "extra_info": {"tags": ["error_prevention", "user_clarification", "input_validation"], "confidence": 0.85, "step_type": "decision", "tools_used": []}}} -{"workspace_id": "bfcl_v1", "memory_id": "fe1aa05e666d47ec87029a171417f183", "memory_type": "task", "when_to_use": "If tools lack functionality to map between related data types (e.g., city names to airport codes), flag this as a system limitation and adapt by seeking alternative approaches.", "content": "Identify gaps in tool capabilities during planning stages to prevent reliance on unavailable functionalities. Proactively address such limitations with workarounds or user feedback requests.", "score": 0.0, "time_created": "2025-08-04 07:39:04", "time_modified": "2025-08-04 07:39:04", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:39:04", "modified_time": "2025-08-04 07:39:04", "extra_info": {"tags": ["tool_limitations", "failure_analysis", "workaround_strategy"], "confidence": 0.8, "step_type": "action", "tools_used": ["list_all_airports", "get_nearest_airport_by_city"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "6f04d4436a3e478db1c68176256e512c", "memory_type": "task", "when_to_use": "When encountering a multi-step task requiring sequential problem-solving with dependencies between steps.", "content": "The agent successfully navigated a complex sequence of actions by addressing preconditions (e.g., locking doors, pressing the brake pedal) before attempting to start the engine. This demonstrates the importance of identifying and resolving prerequisites in a logical order to achieve the desired outcome.", "score": 0.0, "time_created": "2025-08-04 07:40:03", "time_modified": "2025-08-04 07:40:03", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:40:03", "modified_time": "2025-08-04 07:40:03", "extra_info": {"tags": ["sequential tasks", "preconditions", "logical order"], "confidence": 0.9, "step_type": "action", "tools_used": ["startEngine", "lockDoors", "pressBrakePedal"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "69bb5e6543744f74a01b5aea8faa91fd", "memory_type": "task", "when_to_use": "When verifying system states or confirming issue resolution before closing tickets or concluding tasks.", "content": "The agent confirmed the tire pressure issue was resolved and then closed the associated ticket, ensuring no unresolved issues remained. This highlights the value of cross-checking resolutions and updating task statuses systematically.", "score": 0.0, "time_created": "2025-08-04 07:40:03", "time_modified": "2025-08-04 07:40:03", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:40:03", "modified_time": "2025-08-04 07:40:03", "extra_info": {"tags": ["verification", "closure", "systematic updates"], "confidence": 0.85, "step_type": "decision", "tools_used": ["check_tire_pressure", "close_ticket"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "4f157fbe1c6b4e6f9613c7860a93e79f", "memory_type": "task", "when_to_use": "When attempting to start a vehicle's engine, ensure all doors are locked beforehand.", "content": "Always verify door lock status before starting the engine to avoid operational errors or warnings.", "score": 0.0, "time_created": "2025-08-04 07:40:02", "time_modified": "2025-08-04 07:40:02", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:40:02", "modified_time": "2025-08-04 07:40:02", "extra_info": {"tags": ["error_prevention", "vehicle_operations", "door_locks"], "confidence": 0.9, "step_type": "action", "tools_used": ["startEngine", "lockDoors"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "77ca0a9d17bb4920a8f455e49f67799c", "memory_type": "task", "when_to_use": "When a user reports an issue with tire pressure but the system confirms healthy levels, cross-check for other potential causes.", "content": "A discrepancy between reported issues and system diagnostics may indicate underlying problems not captured by standard checks.", "score": 0.0, "time_created": "2025-08-04 07:40:02", "time_modified": "2025-08-04 07:40:02", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:40:02", "modified_time": "2025-08-04 07:40:02", "extra_info": {"tags": ["failure_analysis", "tire_pressure", "diagnostics"], "confidence": 0.8, "step_type": "reasoning", "tools_used": ["check_tire_pressure"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "19b133c08a754d80aa81d2171569295a", "memory_type": "task", "when_to_use": "Before closing a service ticket, confirm that all related actions (e.g., diagnostics, repairs) have been documented and resolved.", "content": "Closing tickets prematurely without thorough resolution can lead to unresolved issues resurfacing later.", "score": 0.0, "time_created": "2025-08-04 07:40:02", "time_modified": "2025-08-04 07:40:02", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:40:02", "modified_time": "2025-08-04 07:40:02", "extra_info": {"tags": ["ticket_management", "resolution_verification", "error_prevention"], "confidence": 0.85, "step_type": "decision", "tools_used": ["close_ticket", "get_ticket"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "b88f5e7b76cc4cf9b944bed6e96c0b95", "memory_type": "task", "when_to_use": "When switching between different APIs or systems, such as from a trading system to a messaging system.", "content": "Always verify the required parameters and available functions in the new API context before proceeding. Missing or mismatched arguments can lead to execution errors.", "score": 0.0, "time_created": "2025-08-04 07:40:02", "time_modified": "2025-08-04 07:40:02", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:40:02", "modified_time": "2025-08-04 07:40:02", "extra_info": {"tags": ["error_prevention", "API_switching", "parameter_validation"], "confidence": 0.85, "step_type": "action", "tools_used": ["send_message", "view_messages_sent"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "7ace751ad34a4888875aa92d07a15ab2", "memory_type": "task", "when_to_use": "When encountering unexpected keyword arguments during function calls.", "content": "Double-check the function signature for exact parameter names and ensure no extra or misnamed arguments are passed. This prevents runtime errors due to argument mismatches.", "score": 0.0, "time_created": "2025-08-04 07:40:02", "time_modified": "2025-08-04 07:40:02", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:40:02", "modified_time": "2025-08-04 07:40:02", "extra_info": {"tags": ["error_prevention", "argument_validation", "function_call"], "confidence": 0.9, "step_type": "reasoning", "tools_used": ["book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "15f511e969f94761888db7209fc460e3", "memory_type": "task", "when_to_use": "After sending a message or performing an action that requires confirmation of success.", "content": "Use verification functions like 'view_messages_sent' or similar tools to confirm the successful transmission or completion of the task. This ensures the intended action was executed without issues.", "score": 0.0, "time_created": "2025-08-04 07:40:02", "time_modified": "2025-08-04 07:40:02", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:40:02", "modified_time": "2025-08-04 07:40:02", "extra_info": {"tags": ["confirmation_check", "message_verification", "post_action_validation"], "confidence": 0.8, "step_type": "observation", "tools_used": ["send_message", "view_messages_sent"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "9c16cca4ce5249f1b1251842ab886e82", "memory_type": "task", "when_to_use": "When preparing to book a flight, ensure all required parameters align with the function's expected inputs.", "content": "Mismatched or unexpected parameters can cause execution errors. Always cross-check parameter requirements against tool documentation before calling functions.", "score": 0.0, "time_created": "2025-08-04 07:40:07", "time_modified": "2025-08-04 07:40:07", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:40:07", "modified_time": "2025-08-04 07:40:07", "extra_info": {"tags": ["error_prevention", "parameter_validation", "function_call"], "confidence": 0.9, "step_type": "action", "tools_used": ["book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "a986edb1fc0c4ae8adf99cf62d684d9b", "memory_type": "task", "when_to_use": "After sending a message or performing a critical action, verify its success by checking relevant outputs or logs.", "content": "Always confirm that an operation has completed successfully by reviewing feedback or follow-up data. This ensures no steps are missed and builds user trust.", "score": 0.0, "time_created": "2025-08-04 07:40:07", "time_modified": "2025-08-04 07:40:07", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:40:07", "modified_time": "2025-08-04 07:40:07", "extra_info": {"tags": ["error_prevention", "confirmation_check", "message_handling"], "confidence": 0.85, "step_type": "observation", "tools_used": ["send_message", "view_messages_sent"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "cb55e73f9c9c498ca510196e501b3eba", "memory_type": "task", "when_to_use": "When encountering an error during execution, analyze whether it stems from incorrect input formatting or missing fields.", "content": "Many runtime errors occur due to improperly formatted arguments. Validate input structures (e.g., dates, IDs) early in the process to prevent downstream issues.", "score": 0.0, "time_created": "2025-08-04 07:40:07", "time_modified": "2025-08-04 07:40:07", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:40:07", "modified_time": "2025-08-04 07:40:07", "extra_info": {"tags": ["error_prevention", "input_validation", "failure_analysis"], "confidence": 0.8, "step_type": "reasoning", "tools_used": ["book_flight", "purchase_insurance"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "e469e808e64e426ab5d9689464abc944", "memory_type": "task", "when_to_use": "When encountering an unexpected keyword argument error during a function call.", "content": "Verify the exact parameter names in the API documentation or implementation, as discrepancies between documented and actual parameter names can lead to failures. If unsure, test with minimal required parameters before including optional ones.", "score": 0.0, "time_created": "2025-08-04 07:40:08", "time_modified": "2025-08-04 07:40:08", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:40:08", "modified_time": "2025-08-04 07:40:08", "extra_info": {"tags": ["error_prevention", "parameter_validation", "api_usage"], "confidence": 0.9, "step_type": "action", "tools_used": ["book_flight", "delete_message"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "d5f59965b79d4692858f424fb14738c4", "memory_type": "task", "when_to_use": "When attempting to resolve booking-related tasks without a valid booking ID.", "content": "Always confirm that prerequisite actions (e.g., successful booking) are completed and relevant IDs are available before proceeding with dependent tasks like cancellations or invoice retrieval.", "score": 0.0, "time_created": "2025-08-04 07:40:08", "time_modified": "2025-08-04 07:40:08", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:40:08", "modified_time": "2025-08-04 07:40:08", "extra_info": {"tags": ["failure_analysis", "dependency_management", "booking_workflow"], "confidence": 0.85, "step_type": "decision", "tools_used": ["cancel_booking", "retrieve_invoice"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "70e2c839b9ec487c9fc9eb55b80cb5b1", "memory_type": "task", "when_to_use": "When handling user requests involving multiple system interactions.", "content": "Break down complex workflows into smaller, verifiable steps, ensuring each step's success before proceeding to avoid cascading failures.", "score": 0.0, "time_created": "2025-08-04 07:40:08", "time_modified": "2025-08-04 07:40:08", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:40:08", "modified_time": "2025-08-04 07:40:08", "extra_info": {"tags": ["workflow_design", "error_prevention", "step_validation"], "confidence": 0.8, "step_type": "reasoning", "tools_used": ["get_flight_cost", "get_credit_card_balance", "book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "5ed1e0ad06dc497fbb4c9b1ade042668", "memory_type": "task", "when_to_use": "When attempting to delete a specific message using an API function with unclear or conflicting parameter requirements.", "content": "If the tool definition conflicts with the actual function behavior (e.g., unexpected keyword argument errors), try omitting optional parameters and rely on default behaviors, such as deleting the latest message when no explicit ID is provided.", "score": 0.0, "time_created": "2025-08-04 07:39:59", "time_modified": "2025-08-04 07:39:59", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:39:59", "modified_time": "2025-08-04 07:39:59", "extra_info": {"tags": ["error_prevention", "failure_analysis", "api_mismatch"], "confidence": 0.85, "step_type": "action", "tools_used": ["delete_message"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "661c4e065174450494a6bf101840ee45", "memory_type": "task", "when_to_use": "When encountering persistent errors despite adhering to documented API specifications.", "content": "Verify whether the issue stems from incorrect parameter names, missing required fields not listed in the documentation, or implicit assumptions about the API's functionality. Cross-check with alternative approaches if available.", "score": 0.0, "time_created": "2025-08-04 07:39:59", "time_modified": "2025-08-04 07:39:59", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:39:59", "modified_time": "2025-08-04 07:39:59", "extra_info": {"tags": ["error_prevention", "failure_analysis", "parameter_validation"], "confidence": 0.8, "step_type": "reasoning", "tools_used": ["delete_message", "send_message"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "4a425c2659dc40419a28cb7013605345", "memory_type": "task", "when_to_use": "When needing to authenticate and perform an action requiring user credentials (e.g., posting on social media).", "content": "The agent first authenticated the user with the provided credentials using 'authenticate_twitter', ensuring login success before proceeding. It then posted the tweet with mentions and tags, adhering strictly to the user's instructions. This sequential approach—authenticating before acting—ensured a smooth flow without authorization errors.", "score": 0.0, "time_created": "2025-08-04 07:39:57", "time_modified": "2025-08-04 07:39:57", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:39:57", "modified_time": "2025-08-04 07:39:57", "extra_info": {"tags": ["authentication", "sequential_actions", "social_media"], "confidence": 0.9, "step_type": "action", "tools_used": ["authenticate_twitter", "post_tweet"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "e12e0f2780a04e47a2d92db2f2c5a193", "memory_type": "task", "when_to_use": "When handling file operations like copying or comparing content across directories.", "content": "The agent used a combination of 'cp' to duplicate the file into another directory and 'diff' to compare two files effectively. By breaking down the task into smaller sub-tasks (copy, then compare), it ensured clarity in both execution and output interpretation, providing actionable insights from the comparison.", "score": 0.0, "time_created": "2025-08-04 07:39:57", "time_modified": "2025-08-04 07:39:57", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:39:57", "modified_time": "2025-08-04 07:39:57", "extra_info": {"tags": ["file_operations", "comparison", "directory_management"], "confidence": 0.85, "step_type": "action", "tools_used": ["cp", "diff"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "4398628d6e75420cacfc878dfbb3f343", "memory_type": "task", "when_to_use": "When handling user credentials in API calls or processing sensitive information.", "content": "Always separate sensitive data such as usernames and passwords from the main content payload to prevent accidental exposure. Ensure that credentials are passed only through secure, designated authentication functions.", "score": 0.0, "time_created": "2025-08-04 07:40:10", "time_modified": "2025-08-04 07:40:10", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:40:10", "modified_time": "2025-08-04 07:40:10", "extra_info": {"tags": ["error_prevention", "security", "credentials_management"], "confidence": 0.9, "step_type": "action", "tools_used": ["authenticate_twitter"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "96b72773a100422894a0d00642ae0ae1", "memory_type": "task", "when_to_use": "When constructing function parameters for social media posts that include mentions and hashtags.", "content": "Clarify whether the content parameter should include mentions and hashtags explicitly or if they should be handled separately via dedicated 'mentions' and 'tags' parameters. Avoid duplicating these elements in both the content and the additional fields unless the API documentation specifies it.", "score": 0.0, "time_created": "2025-08-04 07:40:10", "time_modified": "2025-08-04 07:40:10", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:40:10", "modified_time": "2025-08-04 07:40:10", "extra_info": {"tags": ["error_prevention", "api_usage", "content_formatting"], "confidence": 0.8, "step_type": "reasoning", "tools_used": ["post_tweet"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "3270b87932a4467aa1721883f8c805d6", "memory_type": "task", "when_to_use": "When interpreting user instructions regarding social media content.", "content": "Carefully parse user-provided content to ensure that extraneous or unintended details (e.g., accidentally included credentials) are excluded from the final output. Always double-check the intended message against what is being processed.", "score": 0.0, "time_created": "2025-08-04 07:40:10", "time_modified": "2025-08-04 07:40:10", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:40:10", "modified_time": "2025-08-04 07:40:10", "extra_info": {"tags": ["error_prevention", "user_communication", "content_validation"], "confidence": 0.85, "step_type": "decision", "tools_used": ["post_tweet", "authenticate_twitter"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "a6d1d6763d434adfa16d9af8af54d613", "memory_type": "task", "when_to_use": "When determining flight costs and booking a trip, use this pattern to sequentially gather information and execute bookings.", "content": "The agent first retrieved the list of airports, then calculated the flight cost between two specified locations using 'get_flight_cost'. After confirming the cost with the user, it proceeded to book the flight using 'book_flight', ensuring all required parameters were correctly passed. This step-by-step approach ensures clarity and accuracy in executing multi-part tasks.", "score": 0.0, "time_created": "2025-08-04 07:40:26", "time_modified": "2025-08-04 07:40:26", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:40:26", "modified_time": "2025-08-04 07:40:26", "extra_info": {"tags": ["flight_booking", "sequential_execution", "travel_planning"], "confidence": 0.9, "step_type": "action", "tools_used": ["list_all_airports", "get_flight_cost", "book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "f2544712f0c84059af1deb3abe8140aa", "memory_type": "task", "when_to_use": "When purchasing supplementary services like travel insurance after a primary booking, ensure all linked identifiers are utilized effectively.", "content": "After successfully booking the flight, the agent purchased travel insurance using the 'purchase_insurance' function. It relied on previously obtained data such as the booking ID and payment details. The sequential dependency management (access token, card ID, booking ID) ensured that the insurance was correctly linked to the booking without errors.", "score": 0.0, "time_created": "2025-08-04 07:40:26", "time_modified": "2025-08-04 07:40:26", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:40:26", "modified_time": "2025-08-04 07:40:26", "extra_info": {"tags": ["insurance_purchase", "linked_services", "sequential_dependency"], "confidence": 0.85, "step_type": "action", "tools_used": ["purchase_insurance"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "891a939b0b154a71bab0920dd33b0084", "memory_type": "task", "when_to_use": "When a multi-step task requires prerequisite actions to be completed before proceeding (e.g., booking a flight before purchasing insurance).", "content": "Always ensure that all necessary preceding steps are completed and their outputs are available before moving on to dependent tasks. Skipping such steps can lead to missing critical data like booking IDs, which are essential for subsequent actions.", "score": 0.0, "time_created": "2025-08-04 07:40:32", "time_modified": "2025-08-04 07:40:32", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:40:32", "modified_time": "2025-08-04 07:40:32", "extra_info": {"tags": ["error_prevention", "failure_analysis", "task_dependencies"], "confidence": 0.9, "step_type": "reasoning", "tools_used": ["get_flight_cost", "book_flight", "purchase_insurance"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "c984538f521840d7b6ebcd6355003e53", "memory_type": "task", "when_to_use": "When handling user queries involving sequential API calls where certain parameters depend on the output of earlier calls.", "content": "Break down complex user requests into explicit subtasks and verify each step's completion before proceeding. For example, confirm flight cost retrieval and booking completion before attempting ancillary services like insurance purchase.", "score": 0.0, "time_created": "2025-08-04 07:40:32", "time_modified": "2025-08-04 07:40:32", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:40:32", "modified_time": "2025-08-04 07:40:32", "extra_info": {"tags": ["error_prevention", "sequential_tasks", "api_call_sequence"], "confidence": 0.85, "step_type": "decision", "tools_used": ["list_all_airports", "get_flight_cost", "book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "a824b51f32084d86a894733ff441bf3c", "memory_type": "task", "when_to_use": "When handling sensitive data such as secret files, ensure that the agent has proper access permissions and user consent.", "content": "Sensitive operations like accessing secret files should always be preceded by explicit user authorization to prevent unauthorized actions.", "score": 0.0, "time_created": "2025-08-04 07:40:33", "time_modified": "2025-08-04 07:40:33", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:40:33", "modified_time": "2025-08-04 07:40:33", "extra_info": {"tags": ["error_prevention", "failure_analysis", "authorization", "user_consent"], "confidence": 0.9, "step_type": "decision", "tools_used": ["find", "cat"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "310e9e728ad245e78d4306596a6fc356", "memory_type": "task", "when_to_use": "When crafting content for external platforms like tweets, ensure all formatting rules (e.g., escaping characters) are followed to avoid syntax errors.", "content": "Improperly formatted JSON or special characters in automated posts can lead to failed executions; always validate the content before posting.", "score": 0.0, "time_created": "2025-08-04 07:40:33", "time_modified": "2025-08-04 07:40:33", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:40:33", "modified_time": "2025-08-04 07:40:33", "extra_info": {"tags": ["error_prevention", "failure_analysis", "content_validation", "formatting"], "confidence": 0.8, "step_type": "action", "tools_used": ["post_tweet"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "a65abd219c0c456bb51cd32b41dd855a", "memory_type": "task", "when_to_use": "When using tools with required parameters (like authentication), ensure all necessary inputs are provided before proceeding.", "content": "Missing or incomplete parameters for functions can stall workflows; verify all required arguments are present before making function calls.", "score": 0.0, "time_created": "2025-08-04 07:40:33", "time_modified": "2025-08-04 07:40:33", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:40:33", "modified_time": "2025-08-04 07:40:33", "extra_info": {"tags": ["error_prevention", "failure_analysis", "parameter_checking", "tool_usage"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["authenticate_twitter", "posting_get_login_status"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "58ea9c98875b4adc8c84932c6007ba6d", "memory_type": "task", "when_to_use": "When navigating file systems to locate and read files, ensure the correct directory is accessed before attempting to read file contents.", "content": "Always verify the current working directory before executing file operations to prevent 'file not found' errors. Use commands like `pwd` and `cd` to navigate correctly.", "score": 0.0, "time_created": "2025-08-04 07:40:34", "time_modified": "2025-08-04 07:40:34", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:40:34", "modified_time": "2025-08-04 07:40:34", "extra_info": {"tags": ["error_prevention", "failure_analysis", "file_navigation"], "confidence": 0.9, "step_type": "action", "tools_used": ["find", "cat", "pwd", "cd"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "795437a003d2493097a0793513e354c4", "memory_type": "task", "when_to_use": "When crafting content for external platforms (e.g., tweets), ensure all required components fit within platform constraints (character limits, formatting).", "content": "Before posting content externally, validate that the message fits within platform-specific limits and retains all necessary details without truncation or distortion.", "score": 0.0, "time_created": "2025-08-04 07:40:34", "time_modified": "2025-08-04 07:40:34", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:40:34", "modified_time": "2025-08-04 07:40:34", "extra_info": {"tags": ["error_prevention", "failure_analysis", "content_creation"], "confidence": 0.8, "step_type": "reasoning", "tools_used": ["post_tweet"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "0ab9710b947b4becb809b3a83df755b9", "memory_type": "task", "when_to_use": "When needing to convert units of measurement (e.g., gallons to liters) in a vehicle-related context.", "content": "The agent successfully used the 'gallon_to_liter' function to convert 30 gallons to liters, providing an accurate result of approximately 113.56 liters. This step demonstrates the importance of leveraging domain-specific tools for precise unit conversions.", "score": 0.0, "time_created": "2025-08-04 07:40:33", "time_modified": "2025-08-04 07:40:33", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:40:33", "modified_time": "2025-08-04 07:40:33", "extra_info": {"tags": ["unit_conversion", "vehicle_control_system", "accurate_calculation"], "confidence": 0.95, "step_type": "action", "tools_used": ["gallon_to_liter"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "32b5a8ef616e4d05b8845a2bd3f6e487", "memory_type": "task", "when_to_use": "When preparing to start a vehicle's engine after ensuring prerequisites like locked doors and pressed brake pedal are met.", "content": "The agent followed a systematic approach to start the engine: locking all doors using 'lockDoors', pressing the brake pedal with 'pressBrakePedal', and finally starting the engine with 'startEngine'. This sequence highlights the necessity of adhering to safety protocols before engine ignition.", "score": 0.0, "time_created": "2025-08-04 07:40:33", "time_modified": "2025-08-04 07:40:33", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:40:33", "modified_time": "2025-08-04 07:40:33", "extra_info": {"tags": ["engine_start", "safety_protocol", "systematic_approach"], "confidence": 0.9, "step_type": "sequence", "tools_used": ["lockDoors", "pressBrakePedal", "startEngine"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "d0f7efae141d408988b89fb4abb2b9c5", "memory_type": "task", "when_to_use": "When posting updates on social media platforms after completing a task or verification process.", "content": "After verifying tire pressure with 'check_tire_pressure', the agent posted a tweet using 'post_tweet' to share the findings with hashtags and mentions. This step shows how to effectively communicate results and engage with a broader audience post-task completion.", "score": 0.0, "time_created": "2025-08-04 07:40:33", "time_modified": "2025-08-04 07:40:33", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:40:33", "modified_time": "2025-08-04 07:40:33", "extra_info": {"tags": ["social_media", "task_completion", "communication"], "confidence": 0.85, "step_type": "action", "tools_used": ["check_tire_pressure", "post_tweet"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "0639af7343c944e18ae1ce822b6cb8b0", "memory_type": "task", "when_to_use": "When converting units or performing calculations in a task involving multiple tools.", "content": "Always validate the relevance of selected tools for each step. Irrelevant tool usage (e.g., travel-related tools for fuel conversion) can lead to confusion and wasted effort.", "score": 0.0, "time_created": "2025-08-04 07:40:36", "time_modified": "2025-08-04 07:40:36", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:40:36", "modified_time": "2025-08-04 07:40:36", "extra_info": {"tags": ["error_prevention", "tool_relevance", "failure_analysis"], "confidence": 0.9, "step_type": "action", "tools_used": ["compute_exchange_rate", "book_flight", "authenticate_travel"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "f94302bc32b94f61b7a2af981467801c", "memory_type": "task", "when_to_use": "When chaining multiple actions that depend on prior steps being successful.", "content": "Ensure intermediate actions are logically connected and necessary. Skipping unrelated steps (e.g., locking doors or checking tire pressure during fuel conversion) prevents unnecessary complexity.", "score": 0.0, "time_created": "2025-08-04 07:40:36", "time_modified": "2025-08-04 07:40:36", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:40:36", "modified_time": "2025-08-04 07:40:36", "extra_info": {"tags": ["error_prevention", "logical_flow", "failure_analysis"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["lockDoors", "check_tire_pressure", "post_tweet"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "15b1b055a5ec4cbdb74a84f01b4d6e45", "memory_type": "task", "when_to_use": "When posting updates or communicating results via external platforms like social media.", "content": "Verify that the information being shared is directly relevant to the original query. Sharing unrelated findings (e.g., tire pressure details after a fuel conversion task) can dilute focus and confuse stakeholders.", "score": 0.0, "time_created": "2025-08-04 07:40:36", "time_modified": "2025-08-04 07:40:36", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:40:36", "modified_time": "2025-08-04 07:40:36", "extra_info": {"tags": ["error_prevention", "communication", "failure_analysis"], "confidence": 0.8, "step_type": "decision", "tools_used": ["post_tweet"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "02345c2d5094495f8606c5911cf6902a", "memory_type": "task", "when_to_use": "When interacting with vehicle systems (e.g., fuel, engine start), ensure all preconditions are met before executing commands.", "content": "Always verify the required system states (like locked doors or pressed brake pedals) prior to initiating dependent actions. Missing these steps can lead to repeated failures and wasted attempts.", "score": 0.0, "time_created": "2025-08-04 07:40:50", "time_modified": "2025-08-04 07:40:50", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:40:50", "modified_time": "2025-08-04 07:40:50", "extra_info": {"tags": ["error_prevention", "failure_analysis", "vehicle_systems"], "confidence": 0.9, "step_type": "reasoning", "tools_used": ["startEngine", "lockDoors", "pressBrakePedal"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "cd3546c9f5594e2ca763e239ce9c3345", "memory_type": "task", "when_to_use": "When sending messages to multiple recipients, confirm user intent regarding self-sent messages and recipient accuracy.", "content": "Double-check message recipients during communication tasks, especially when users might mistakenly send messages to themselves instead of intended contacts.", "score": 0.0, "time_created": "2025-08-04 07:40:50", "time_modified": "2025-08-04 07:40:50", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:40:50", "modified_time": "2025-08-04 07:40:50", "extra_info": {"tags": ["error_prevention", "communication", "recipient_verification"], "confidence": 0.8, "step_type": "decision", "tools_used": ["send_message", "view_messages_sent"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "a6cb1608cf054966adb365961764aabb", "memory_type": "task", "when_to_use": "When attempting to start the engine and encountering errors related to preconditions like door locks or brake pedal status.", "content": "Always verify all vehicle preconditions (e.g., locked doors, brake pedal engagement) before initiating critical actions such as starting the engine. Sequentially address each error message until all prerequisites are satisfied.", "score": 0.0, "time_created": "2025-08-04 07:40:52", "time_modified": "2025-08-04 07:40:52", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:40:52", "modified_time": "2025-08-04 07:40:52", "extra_info": {"tags": ["error_prevention", "failure_analysis", "vehicle_start"], "confidence": 0.9, "step_type": "action", "tools_used": ["startEngine", "lockDoors", "pressBrakePedal"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "479010e436a846cf9b24f9f9e17a9859", "memory_type": "task", "when_to_use": "When needing to ensure proper communication with others during a multi-step task involving multiple systems (e.g., messaging system and vehicle control).", "content": "Cross-check sent messages after completing key steps to confirm that all relevant parties have been notified. This avoids overlooking critical updates or recipients.", "score": 0.0, "time_created": "2025-08-04 07:40:52", "time_modified": "2025-08-04 07:40:52", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:40:52", "modified_time": "2025-08-04 07:40:52", "extra_info": {"tags": ["error_prevention", "failure_analysis", "communication"], "confidence": 0.8, "step_type": "observation", "tools_used": ["view_messages_sent", "send_message"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "b318cebc89ab49eba81ba81a968705bb", "memory_type": "task", "when_to_use": "When the user needs to authenticate into a system using credentials and retrieve specific account information.", "content": "The agent successfully authenticated the user by calling 'authenticate_travel' with the provided client ID, secret, and refresh token. After obtaining the access token, it was used to fetch the credit card balance via 'get_credit_card_balance'. This sequence worked because the agent correctly identified the required tools and passed accurate parameters at each step.", "score": 0.0, "time_created": "2025-08-04 07:41:02", "time_modified": "2025-08-04 07:41:02", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:41:02", "modified_time": "2025-08-04 07:41:02", "extra_info": {"tags": ["authentication", "account-access", "credit-card-balance"], "confidence": 0.9, "step_type": "action", "tools_used": ["authenticate_travel", "get_credit_card_balance"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "e92bc4cf08b544a4a306a8e3aa34f0cc", "memory_type": "task", "when_to_use": "When the user requests computation of statistical data such as averages from a set of numerical inputs.", "content": "The agent recognized the need to calculate the mean of a list of numbers and invoked the 'mean' function with properly formatted numerical arguments. The result was validated against manual calculations, ensuring accuracy before presenting it to the user. This approach succeeded due to clear understanding of both the query and tool functionality.", "score": 0.0, "time_created": "2025-08-04 07:41:02", "time_modified": "2025-08-04 07:41:02", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:41:02", "modified_time": "2025-08-04 07:41:02", "extra_info": {"tags": ["statistical-computation", "mean-calculation", "numerical-inputs"], "confidence": 0.85, "step_type": "action", "tools_used": ["mean"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "37c2c7b690f44c8f9c04891f5377e7df", "memory_type": "task", "when_to_use": "When the user needs to authenticate into a system using provided credentials and tokens.", "content": "The step pattern involved calling the 'authenticate_travel' function with all required parameters (client_id, client_secret, refresh_token, grant_type, user_first_name, user_last_name). This approach worked well because it directly addressed the user's need for authentication while ensuring that all necessary fields were supplied correctly. The success was evident when an access token was returned, allowing further actions within the system.", "score": 0.0, "time_created": "2025-08-04 07:41:01", "time_modified": "2025-08-04 07:41:01", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:41:01", "modified_time": "2025-08-04 07:41:01", "extra_info": {"tags": ["authentication", "travel-system", "user-credentials"], "confidence": 0.9, "step_type": "action", "tools_used": ["authenticate_travel"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "9ca7846b69e143b4b3fb17894d2d1b2c", "memory_type": "task", "when_to_use": "When the user requires retrieving specific financial information such as credit card balance after successful authentication.", "content": "After obtaining the access token from the authentication step, the 'get_credit_card_balance' function was called with the appropriate 'access_token' and 'card_id'. This technique proved effective because it leveraged the authenticated session to fetch precise account details, providing the user with the exact balance they needed. The clarity of inputs ensured no ambiguity in execution.", "score": 0.0, "time_created": "2025-08-04 07:41:01", "time_modified": "2025-08-04 07:41:01", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:41:01", "modified_time": "2025-08-04 07:41:01", "extra_info": {"tags": ["credit-card", "financial-data", "post-authentication"], "confidence": 0.85, "step_type": "action", "tools_used": ["get_credit_card_balance"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "3edeec1996cb41cca8d72eeee9071179", "memory_type": "task", "when_to_use": "When the user seeks to compute statistical values like mean from a list of provided numbers.", "content": "The sequence involved utilizing the 'mean' tool by passing an array of numerical transaction values. This decision point was critical as it demonstrated the ability to process user-provided data accurately and return meaningful results (average spending). The effectiveness stemmed from selecting the right tool and structuring the input correctly, which led to correct computation and enhanced user satisfaction.", "score": 0.0, "time_created": "2025-08-04 07:41:01", "time_modified": "2025-08-04 07:41:01", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:41:01", "modified_time": "2025-08-04 07:41:01", "extra_info": {"tags": ["statistical-computation", "mean", "transaction-analysis"], "confidence": 0.8, "step_type": "action", "tools_used": ["mean"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "2f3f2c637364443d9e7626a2682c8690", "memory_type": "task", "when_to_use": "When the user needs to retrieve and summarize historical messages for review.", "content": "The agent successfully retrieved all sent messages using 'view_messages_sent' and parsed the nested response structure to extract relevant details. By organizing the output into a clear, recipient-focused summary, it enabled the user to quickly identify key communications related to their stock and order queries. This approach ensures clarity and relevance when handling complex data structures.", "score": 0.0, "time_created": "2025-08-04 07:41:08", "time_modified": "2025-08-04 07:41:08", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:41:08", "modified_time": "2025-08-04 07:41:08", "extra_info": {"tags": ["message retrieval", "data parsing", "user communication"], "confidence": 0.9, "step_type": "action", "tools_used": ["view_messages_sent"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "7c807f9fcb5441a599a6459b681d7438", "memory_type": "task", "when_to_use": "When the user requests information about a specific stock or order but lacks direct context.", "content": "The agent first identified the stock symbol using 'get_symbol_by_name', then added it to the watchlist with 'add_to_watchlist'. For order details, it used 'get_order_history' followed by 'get_order_details' to provide precise updates. This sequential use of tools ensured accurate and actionable insights tailored to the user’s query.", "score": 0.0, "time_created": "2025-08-04 07:41:08", "time_modified": "2025-08-04 07:41:08", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:41:08", "modified_time": "2025-08-04 07:41:08", "extra_info": {"tags": ["stock tracking", "order history", "tool chaining"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["get_symbol_by_name", "add_to_watchlist", "get_order_history", "get_order_details"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "64b615f2cbde40ee9e36a42c160dfc7d", "memory_type": "task", "when_to_use": "When needing to retrieve and summarize historical messages for a user.", "content": "The agent successfully used 'view_messages_sent' to retrieve all sent messages by the user, grouped them by recipient, and presented a clear summary. This approach works well because it directly addresses the user's need to review past communications without requiring keyword searches or filtering.", "score": 0.0, "time_created": "2025-08-04 07:40:58", "time_modified": "2025-08-04 07:40:58", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:40:58", "modified_time": "2025-08-04 07:40:58", "extra_info": {"tags": ["message_management", "review", "user_communication"], "confidence": 0.9, "step_type": "action", "tools_used": ["view_messages_sent"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "3e40a9007e7342e8a6452d2976262e8f", "memory_type": "task", "when_to_use": "When sending a message to another user after identifying their user ID.", "content": "The agent first used 'get_user_id' to resolve the recipient's user ID from their name, then called 'send_message' with the resolved ID and the intended message. This two-step pattern ensures accurate targeting of the recipient and successful message delivery.", "score": 0.0, "time_created": "2025-08-04 07:40:58", "time_modified": "2025-08-04 07:40:58", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:40:58", "modified_time": "2025-08-04 07:40:58", "extra_info": {"tags": ["message_sending", "user_resolution", "communication"], "confidence": 0.85, "step_type": "action", "tools_used": ["get_user_id", "send_message"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "d9de10135f0f43d6918afa461c728146", "memory_type": "task", "when_to_use": "When determining travel costs between two cities, especially with specific class and date requirements.", "content": "The agent successfully identified the nearest airports for both departure and destination cities using 'get_nearest_airport_by_city', then accurately retrieved flight costs via 'get_flight_cost' by supplying precise parameters like travel class and date. This ensured accurate cost estimation aligned with user preferences.", "score": 0.0, "time_created": "2025-08-04 07:41:27", "time_modified": "2025-08-04 07:41:27", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:41:27", "modified_time": "2025-08-04 07:41:27", "extra_info": {"tags": ["travel planning", "flight cost estimation", "parameter precision"], "confidence": 0.9, "step_type": "action", "tools_used": ["get_nearest_airport_by_city", "get_flight_cost"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "6f059c0286df4b4f85770becffbb1c73", "memory_type": "task", "when_to_use": "When a user requests budget adjustments based on currency conversion before finalizing bookings.", "content": "The agent effectively used 'compute_exchange_rate' to convert the user’s budget from RMB to USD, followed by 'set_budget_limit' to align the budget with the converted value. This step ensures financial feasibility while respecting user constraints.", "score": 0.0, "time_created": "2025-08-04 07:41:27", "time_modified": "2025-08-04 07:41:27", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:41:27", "modified_time": "2025-08-04 07:41:27", "extra_info": {"tags": ["budget management", "currency conversion", "pre-booking validation"], "confidence": 0.85, "step_type": "decision", "tools_used": ["compute_exchange_rate", "set_budget_limit"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "2838d3bbfcf346eab00b0337177a4ffa", "memory_type": "task", "when_to_use": "When finalizing bookings and generating invoices post-transaction.", "content": "After confirming booking details through 'book_flight', the agent retrieved an itemized invoice using 'retrieve_invoice'. This provides transparency and confirmation to the user, enhancing trust and clarity in the process.", "score": 0.0, "time_created": "2025-08-04 07:41:27", "time_modified": "2025-08-04 07:41:27", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:41:27", "modified_time": "2025-08-04 07:41:27", "extra_info": {"tags": ["booking finalization", "invoice generation", "user transparency"], "confidence": 0.8, "step_type": "action", "tools_used": ["book_flight", "retrieve_invoice"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "92b493403dba4743bac5f2a18f0e9c36", "memory_type": "task", "when_to_use": "When handling multiple API calls, ensure all required arguments are correctly passed and validated before execution.", "content": "Missing or incorrect parameters in API calls can lead to execution failures. Always cross-check function signatures with the provided arguments.", "score": 0.0, "time_created": "2025-08-04 07:41:11", "time_modified": "2025-08-04 07:41:11", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:41:11", "modified_time": "2025-08-04 07:41:11", "extra_info": {"tags": ["error_prevention", "api_usage", "parameter_validation"], "confidence": 0.9, "step_type": "action", "tools_used": ["book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "53a81adb8cb141a38149f984e1ee5845", "memory_type": "task", "when_to_use": "When managing budgets or financial constraints, verify that all costs align with the user's limits before confirming transactions.", "content": "Mismatch between costs and budget limits can cause dissatisfaction or unexpected outcomes. Always confirm alignment between expenses and budget thresholds.", "score": 0.0, "time_created": "2025-08-04 07:41:11", "time_modified": "2025-08-04 07:41:11", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:41:11", "modified_time": "2025-08-04 07:41:11", "extra_info": {"tags": ["budget_management", "cost_alignment", "user_satisfaction"], "confidence": 0.85, "step_type": "decision", "tools_used": ["set_budget_limit", "get_flight_cost"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "7670c88203524e96912eb9f0789e71dc", "memory_type": "task", "when_to_use": "When retrieving or generating final outputs like invoices, ensure all prior steps have been successfully completed without errors.", "content": "Incomplete or erroneous preceding steps can result in inaccurate final outputs. Validate intermediate results before proceeding to final actions.", "score": 0.0, "time_created": "2025-08-04 07:41:11", "time_modified": "2025-08-04 07:41:11", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:41:11", "modified_time": "2025-08-04 07:41:11", "extra_info": {"tags": ["output_validation", "sequential_process", "failure_analysis"], "confidence": 0.8, "step_type": "observation", "tools_used": ["retrieve_invoice"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "8de3002e1f2140f4a8b1022128063799", "memory_type": "task", "when_to_use": "When executing multi-step tasks where specific conditions must be met (e.g., tire pressure, fuel level) before proceeding to the next step.", "content": "Always validate that all preconditions are fully satisfied according to user requirements, even if system indicators suggest otherwise. For example, the system flagged 'healthy_tire_pressure' as true despite rear tires being underinflated.", "score": 0.0, "time_created": "2025-08-04 07:41:23", "time_modified": "2025-08-04 07:41:23", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:41:23", "modified_time": "2025-08-04 07:41:23", "extra_info": {"tags": ["error_prevention", "failure_analysis", "validation"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["check_tire_pressure"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "dd3f995ed4924ebcb83e60d0b3510fb0", "memory_type": "task", "when_to_use": "When planning actions based on external dependencies like service centers or locations.", "content": "Ensure clarity in interpreting user intent regarding navigation or location-based services. If unsure whether to navigate directly or provide coordinates, confirm with the user first.", "score": 0.0, "time_created": "2025-08-04 07:41:23", "time_modified": "2025-08-04 07:41:23", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:41:23", "modified_time": "2025-08-04 07:41:23", "extra_info": {"tags": ["error_prevention", "failure_analysis", "navigation"], "confidence": 0.75, "step_type": "decision", "tools_used": ["find_nearest_tire_shop"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "f1a6ed0dc2bb4c9189c3dcb6f1d2bf30", "memory_type": "task", "when_to_use": "When interpreting tool responses that include boolean health/status flags but also specific numeric data.", "content": "Do not rely solely on boolean flags in tool responses when the user specifies a clear numeric target; always cross-check the actual values provided against the user's explicit requirements.", "score": 0.0, "time_created": "2025-08-04 07:41:38", "time_modified": "2025-08-04 07:41:38", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:41:38", "modified_time": "2025-08-04 07:41:38", "extra_info": {"tags": ["error_prevention", "failure_analysis", "tool_response_interpretation"], "confidence": 0.9, "step_type": "reasoning", "tools_used": ["check_tire_pressure"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "4fea641c49b349598aff5c7b85a53014", "memory_type": "task", "when_to_use": "When performing sequential safety checks where one step depends on the completion of another (e.g., locking doors before starting an engine).", "content": "Ensure all prerequisites are fully met before proceeding to dependent steps, even if intermediate errors seem resolved, as partial fulfillment may still cause failures downstream.", "score": 0.0, "time_created": "2025-08-04 07:41:38", "time_modified": "2025-08-04 07:41:38", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:41:38", "modified_time": "2025-08-04 07:41:38", "extra_info": {"tags": ["error_prevention", "failure_analysis", "sequential_dependency"], "confidence": 0.85, "step_type": "decision", "tools_used": ["lockDoors", "startEngine"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "8c0ff791ca8d4eaab667c5ff3e2d7bbd", "memory_type": "task", "when_to_use": "When exact precision is required for units or measurements (e.g., rounding liters to gallons or PSI levels).", "content": "Explicitly confirm and apply any unit conversions or rounding rules provided by the user rather than assuming tools will handle them correctly based on defaults.", "score": 0.0, "time_created": "2025-08-04 07:41:38", "time_modified": "2025-08-04 07:41:38", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:41:38", "modified_time": "2025-08-04 07:41:38", "extra_info": {"tags": ["error_prevention", "failure_analysis", "unit_conversion"], "confidence": 0.8, "step_type": "action", "tools_used": ["liter_to_gallon", "fillFuelTank"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "0adec04fd4ed435fab32891b636e8822", "memory_type": "task", "when_to_use": "When interacting with vehicle systems, ensure all preconditions are met before executing commands.", "content": "Always verify preconditions such as the brake pedal being pressed before attempting to start the engine. Missing these steps can lead to errors or failed actions.", "score": 0.0, "time_created": "2025-08-04 07:41:41", "time_modified": "2025-08-04 07:41:41", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:41:41", "modified_time": "2025-08-04 07:41:41", "extra_info": {"tags": ["error_prevention", "failure_analysis", "vehicle_systems"], "confidence": 0.9, "step_type": "action", "tools_used": ["startEngine", "pressBrakePedal"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "af3c4a53ac684dacac573460ddcd0965", "memory_type": "task", "when_to_use": "When filling a fuel tank, ensure the amount of fuel specified does not exceed the tank's capacity.", "content": "Attempting to fill beyond the maximum capacity will result in an error. Always check the current fuel level and tank capacity before proceeding.", "score": 0.0, "time_created": "2025-08-04 07:41:41", "time_modified": "2025-08-04 07:41:41", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:41:41", "modified_time": "2025-08-04 07:41:41", "extra_info": {"tags": ["error_prevention", "failure_analysis", "fuel_system"], "confidence": 0.85, "step_type": "decision", "tools_used": ["fillFuelTank", "displayCarStatus"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "a65570af5fd1471d86bfa7a4ee54d27d", "memory_type": "task", "when_to_use": "When receiving system feedback indicating 'healthy' conditions, cross-check against user-specified thresholds for additional safety.", "content": "System indicators may show 'healthy' status, but user-defined thresholds (e.g., tire pressure below 37 psi) should always take precedence to avoid potential issues during critical tasks like long trips.", "score": 0.0, "time_created": "2025-08-04 07:41:41", "time_modified": "2025-08-04 07:41:41", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:41:41", "modified_time": "2025-08-04 07:41:41", "extra_info": {"tags": ["error_prevention", "failure_analysis", "tire_safety"], "confidence": 0.8, "step_type": "reasoning", "tools_used": ["check_tire_pressure", "find_nearest_tire_shop"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "2ed9bd9397174232bba1e7160246d19d", "memory_type": "task", "when_to_use": "When checking vehicle readiness for a trip and the user specifies custom thresholds (e.g., tire pressure above system defaults).", "content": "Always explicitly confirm whether system-reported 'healthy' statuses align with user-defined thresholds before proceeding. Misalignment between default system checks and user expectations can lead to overlooked issues.", "score": 0.0, "time_created": "2025-08-04 07:41:39", "time_modified": "2025-08-04 07:41:39", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:41:39", "modified_time": "2025-08-04 07:41:39", "extra_info": {"tags": ["error_prevention", "user_thresholds", "vehicle_readiness"], "confidence": 0.9, "step_type": "reasoning", "tools_used": ["check_tire_pressure", "find_nearest_tire_shop"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "23bf896f2b4047a2985ae2d7fdf0fcd4", "memory_type": "task", "when_to_use": "When attempting to fill a vehicle's fuel tank or adjust any system with capacity limits.", "content": "Avoid exceeding predefined system capacities (e.g., fuel tank maximum) without first verifying current levels and constraints. Exceeding these limits will result in errors and wasted actions.", "score": 0.0, "time_created": "2025-08-04 07:41:39", "time_modified": "2025-08-04 07:41:39", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:41:39", "modified_time": "2025-08-04 07:41:39", "extra_info": {"tags": ["error_prevention", "capacity_constraints", "fuel_management"], "confidence": 0.85, "step_type": "action", "tools_used": ["fillFuelTank", "displayCarStatus"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "79eecaf70c254e09b4accf57b77d7ad7", "memory_type": "task", "when_to_use": "When performing multi-step tasks requiring specific preconditions (e.g., pressing the brake pedal before starting the engine).", "content": "Always verify all necessary preconditions are met prior to executing an action. Missing a required step can cause failures, requiring redundant corrective actions later in the sequence.", "score": 0.0, "time_created": "2025-08-04 07:41:39", "time_modified": "2025-08-04 07:41:39", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:41:39", "modified_time": "2025-08-04 07:41:39", "extra_info": {"tags": ["error_prevention", "preconditions", "task_execution"], "confidence": 0.8, "step_type": "decision", "tools_used": ["startEngine", "pressBrakePedal"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "0709a04a91fd472eb3080db27090ec4e", "memory_type": "task", "when_to_use": "When handling file operations where the user specifies a shared or communal directory, but the available tools only support operations in the current directory.", "content": "Always confirm whether the requested directory manipulation is supported by the toolset. If not, clarify with the user and proceed with an alternative approach within the constraints of the tools.", "score": 0.0, "time_created": "2025-08-04 07:41:46", "time_modified": "2025-08-04 07:41:46", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:41:46", "modified_time": "2025-08-04 07:41:46", "extra_info": {"tags": ["error_prevention", "failure_analysis", "file_operations", "directory_handling"], "confidence": 0.85, "step_type": "decision", "tools_used": ["touch", "echo", "cat", "wc"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "078ec638c48d4066b0516b4bf0cd2725", "memory_type": "task", "when_to_use": "When needing to write data or counts into a new file, ensure that the content formatting aligns with expected future uses (e.g., machine readability).", "content": "Format outputs like word counts or statistics consistently for potential downstream processing. Avoid storing unstructured raw values unless explicitly requested by the user.", "score": 0.0, "time_created": "2025-08-04 07:41:46", "time_modified": "2025-08-04 07:41:46", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:41:46", "modified_time": "2025-08-04 07:41:46", "extra_info": {"tags": ["error_prevention", "failure_analysis", "data_formatting", "output_consistency"], "confidence": 0.8, "step_type": "action", "tools_used": ["echo", "wc"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "aaf5c0c984574474bdcfa83ca2ae8b46", "memory_type": "task", "when_to_use": "When performing multi-step tasks involving file creation, modification, and inspection, validate intermediate results at each step to prevent cascading failures.", "content": "Verify the success of each operation (e.g., file creation, content writing) before proceeding to subsequent steps. This ensures errors are caught early and mitigated promptly.", "score": 0.0, "time_created": "2025-08-04 07:41:46", "time_modified": "2025-08-04 07:41:46", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:41:46", "modified_time": "2025-08-04 07:41:46", "extra_info": {"tags": ["error_prevention", "failure_analysis", "validation", "intermediate_results"], "confidence": 0.9, "step_type": "observation", "tools_used": ["touch", "echo", "cat"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "f879d736bc174e9684148af49f628bcb", "memory_type": "task", "when_to_use": "When handling file operations where the user specifies a shared or communal directory, ensure that the correct directory is confirmed before proceeding.", "content": "Always verify the current working directory or navigate to the intended directory before executing file-related commands. Misalignment between the assumed and actual directory can lead to misplaced files.", "score": 0.0, "time_created": "2025-08-04 07:41:31", "time_modified": "2025-08-04 07:41:31", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:41:31", "modified_time": "2025-08-04 07:41:31", "extra_info": {"tags": ["error_prevention", "directory_management", "file_operations"], "confidence": 0.9, "step_type": "decision", "tools_used": ["cd", "pwd"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "dddafad84f03415db445b8778cd00b4f", "memory_type": "task", "when_to_use": "When writing numeric data (e.g., counts, statistics) into files using text-based tools like 'echo', ensure clarity on formatting requirements.", "content": "Numeric outputs should be explicitly formatted as strings when passed to functions that expect textual content. This avoids ambiguity in how numbers are stored or presented in files.", "score": 0.0, "time_created": "2025-08-04 07:41:31", "time_modified": "2025-08-04 07:41:31", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:41:31", "modified_time": "2025-08-04 07:41:31", "extra_info": {"tags": ["error_prevention", "data_formatting", "file_writing"], "confidence": 0.8, "step_type": "action", "tools_used": ["echo", "wc"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "21f0fe1a698b4f32b778d8787944a336", "memory_type": "task", "when_to_use": "When preparing a vehicle for a trip and encountering sequential prerequisites like locking doors or pressing the brake pedal.", "content": "The agent successfully navigated multiple dependent steps (locking doors, pressing the brake pedal) before starting the engine. Addressing system errors sequentially ensured all conditions were met, leading to a successful engine start.", "score": 0.0, "time_created": "2025-08-04 07:41:49", "time_modified": "2025-08-04 07:41:49", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:41:49", "modified_time": "2025-08-04 07:41:49", "extra_info": {"tags": ["vehicle preparation", "sequential tasks", "error handling"], "confidence": 0.9, "step_type": "action", "tools_used": ["lockDoors", "pressBrakePedal", "startEngine"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "4f24392a91a14268931e527fc317133c", "memory_type": "task", "when_to_use": "When estimating travel distance between two cities using zip codes and determining fuel feasibility.", "content": "The agent efficiently estimated the distance by converting city names into zip codes and checking if the current fuel level was sufficient. When it wasn't, the agent refueled the vehicle, ensuring trip readiness.", "score": 0.0, "time_created": "2025-08-04 07:41:49", "time_modified": "2025-08-04 07:41:49", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:41:49", "modified_time": "2025-08-04 07:41:49", "extra_info": {"tags": ["distance estimation", "fuel management", "trip planning"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["get_zipcode_based_on_city", "estimate_distance", "estimate_drive_feasibility_by_mileage", "fillFuelTank"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "f6b5037b2b084af2ba6cd6a8230283ae", "memory_type": "task", "when_to_use": "When preparing to start a vehicle or system, ensure all prerequisites (like locked doors) are met before attempting the main action.", "content": "Always verify preconditions or constraints in multi-step processes. Missing these can lead to avoidable errors and additional corrective steps.", "score": 0.0, "time_created": "2025-08-04 07:41:46", "time_modified": "2025-08-04 07:41:46", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:41:46", "modified_time": "2025-08-04 07:41:46", "extra_info": {"tags": ["error_prevention", "failure_analysis", "preconditions", "vehicle_start"], "confidence": 0.9, "step_type": "action", "tools_used": ["startEngine", "lockDoors"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "69de565b0c964e2a9a3f26c32e39f0a0", "memory_type": "task", "when_to_use": "When receiving an error message during task execution, immediately analyze and resolve the issue before proceeding further.", "content": "Error messages often indicate missing steps or incorrect configurations. Addressing these promptly prevents cascading failures and wasted efforts.", "score": 0.0, "time_created": "2025-08-04 07:41:46", "time_modified": "2025-08-04 07:41:46", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:41:46", "modified_time": "2025-08-04 07:41:46", "extra_info": {"tags": ["error_prevention", "failure_analysis", "error_handling", "task_execution"], "confidence": 0.85, "step_type": "decision", "tools_used": ["startEngine"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "03507b92e3764630bdfe832cd49ac0a7", "memory_type": "task", "when_to_use": "When preparing a vehicle for departure and ensuring all safety measures are in place.", "content": "The sequence of locking doors, pressing the brake pedal, and then starting the engine ensures compliance with vehicle safety protocols. This approach prevents errors by addressing prerequisites systematically: first securing the vehicle (locking doors), then engaging necessary controls (braking), and finally initiating the engine.", "score": 0.0, "time_created": "2025-08-04 07:41:58", "time_modified": "2025-08-04 07:41:58", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:41:58", "modified_time": "2025-08-04 07:41:58", "extra_info": {"tags": ["vehicle_start", "safety_checks", "sequential_operations"], "confidence": 0.9, "step_type": "action", "tools_used": ["lockDoors", "pressBrakePedal", "startEngine"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "0ebac2ba6a18411bb45ea5a6b6ac52db", "memory_type": "task", "when_to_use": "When calculating distances between locations to plan travel logistics such as fuel stops.", "content": "Using zipcode-based distance estimation tools provides accurate results that can guide decisions about refueling or rest stops during long trips. This method avoids ambiguity from city names alone and integrates seamlessly with other planning tasks like mileage feasibility checks.", "score": 0.0, "time_created": "2025-08-04 07:41:58", "time_modified": "2025-08-04 07:41:58", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:41:58", "modified_time": "2025-08-04 07:41:58", "extra_info": {"tags": ["distance_calculation", "travel_planning", "fuel_stop_strategy"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["get_zipcode_based_on_city", "estimate_distance"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "a349287fcb834020a93d02323742075e", "memory_type": "task", "when_to_use": "When initiating a multi-step process involving prerequisites (e.g., locking doors, pressing pedals) before executing the main action.", "content": "Always verify and address all prerequisite conditions explicitly in sequence before attempting the primary task. Missing even one condition can cascade into repeated failures.", "score": 0.0, "time_created": "2025-08-04 07:42:04", "time_modified": "2025-08-04 07:42:04", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:04", "modified_time": "2025-08-04 07:42:04", "extra_info": {"tags": ["error_prevention", "prerequisite_checking", "sequential_execution"], "confidence": 0.9, "step_type": "reasoning", "tools_used": ["lockDoors", "pressBrakePedal", "startEngine"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "19a8d7eb7a6c4bf79bcf0160f1586481", "memory_type": "task", "when_to_use": "When encountering an error message that specifies a required action (e.g., 'All doors must be locked', 'Brake pedal needs to be pressed').", "content": "Error messages often indicate missing steps that must be completed before retrying the failed action. Treat them as actionable instructions rather than blockers.", "score": 0.0, "time_created": "2025-08-04 07:42:04", "time_modified": "2025-08-04 07:42:04", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:04", "modified_time": "2025-08-04 07:42:04", "extra_info": {"tags": ["error_handling", "failure_recovery", "user_guidance"], "confidence": 0.85, "step_type": "decision", "tools_used": ["startEngine"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "ca981b7e913b47b5b2c499371b6f4bd2", "memory_type": "task", "when_to_use": "When performing actions with parameterized inputs (e.g., brake pedal position, fuel amount).", "content": "Ensure parameter values align precisely with system requirements or constraints. Partial or incorrect values can lead to errors despite logical intent.", "score": 0.0, "time_created": "2025-08-04 07:42:04", "time_modified": "2025-08-04 07:42:04", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:04", "modified_time": "2025-08-04 07:42:04", "extra_info": {"tags": ["parameter_validation", "input_verification", "tool_usage"], "confidence": 0.8, "step_type": "action", "tools_used": ["pressBrakePedal", "fillFuelTank"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "3915b641506e4de7972f87f9af555d10", "memory_type": "task", "when_to_use": "When securing a vehicle and preparing it for use after maintenance.", "content": "The sequence of locking all doors first, followed by initiating the engine with proper preconditions (e.g., pressing the brake pedal) ensures safety and readiness. This pattern avoids potential errors such as attempting to start the engine without fulfilling necessary conditions.", "score": 0.0, "time_created": "2025-08-04 07:42:05", "time_modified": "2025-08-04 07:42:05", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:05", "modified_time": "2025-08-04 07:42:05", "extra_info": {"tags": ["vehicle-readiness", "safety-checks", "error-prevention"], "confidence": 0.9, "step_type": "action", "tools_used": ["lockDoors", "startEngine", "pressBrakePedal"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "4eed52dd32144e16b633ba3021f24d3a", "memory_type": "task", "when_to_use": "When posting social media updates involving mentions and tags.", "content": "Including relevant tags and mentions in the correct format within a post_tweet function ensures that the message is amplified to the intended audience. Validating content alignment with user intent (perfect tire condition) and verifying correct tool parameters (tags and mentions arrays) increases engagement and accuracy.", "score": 0.0, "time_created": "2025-08-04 07:42:05", "time_modified": "2025-08-04 07:42:05", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:05", "modified_time": "2025-08-04 07:42:05", "extra_info": {"tags": ["social-media", "content-validation", "tool-usage"], "confidence": 0.85, "step_type": "action", "tools_used": ["post_tweet"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "93bd6886579a4134aa649c8714606fc4", "memory_type": "task", "when_to_use": "When initiating the engine after locking doors or performing other vehicle operations.", "content": "Always check if there are preconditions for starting the engine, such as pressing the brake pedal. Ignoring these prerequisites can lead to failure in subsequent steps.", "score": 0.0, "time_created": "2025-08-04 07:42:06", "time_modified": "2025-08-04 07:42:06", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:06", "modified_time": "2025-08-04 07:42:06", "extra_info": {"tags": ["error_prevention", "failure_analysis", "engine_start_procedures"], "confidence": 0.9, "step_type": "action", "tools_used": ["startEngine", "pressBrakePedal"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "2f08d704917a4e67a6316f9ac41a0153", "memory_type": "task", "when_to_use": "When handling multiple sequential tasks involving different vehicle systems (e.g., door locks and engine start).", "content": "Ensure all interdependent actions are accounted for before proceeding with the next step. For example, verify that required conditions like brake pedal engagement are met before attempting to start the engine.", "score": 0.0, "time_created": "2025-08-04 07:42:06", "time_modified": "2025-08-04 07:42:06", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:06", "modified_time": "2025-08-04 07:42:06", "extra_info": {"tags": ["error_prevention", "task_dependency", "vehicle_systems"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["lockDoors", "startEngine"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "2e46a556c9354ace8463e6e49698af9e", "memory_type": "task", "when_to_use": "When booking a flight and handling related services like insurance, ensure that all required fields for each API call are correctly understood and validated before execution.", "content": "Failure occurred due to incorrect parameter usage ('travel_cost' instead of the expected field). Always cross-check function signatures with intended inputs, especially when parameters might have overlapping or similarly named fields.", "score": 0.0, "time_created": "2025-08-04 07:42:15", "time_modified": "2025-08-04 07:42:15", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:15", "modified_time": "2025-08-04 07:42:15", "extra_info": {"tags": ["error_prevention", "parameter_validation", "api_usage"], "confidence": 0.9, "step_type": "action", "tools_used": ["book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "8d9240f7fb60472b9528bf409850792d", "memory_type": "task", "when_to_use": "In cases where customer support is contacted for itinerary changes or refunds, confirm whether additional tools exist to handle such requests directly (e.g., cancellation or refund functions).", "content": "While contacting customer support was appropriate, exploring other available tools could reveal more direct methods to manage cancellations or adjustments without external intervention.", "score": 0.0, "time_created": "2025-08-04 07:42:15", "time_modified": "2025-08-04 07:42:15", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:15", "modified_time": "2025-08-04 07:42:15", "extra_info": {"tags": ["tool_exploration", "customer_support", "failure_analysis"], "confidence": 0.8, "step_type": "reasoning", "tools_used": ["contact_customer_support", "cancel_booking"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "eccf5c23699c4ab79d463d5b19d3f044", "memory_type": "task", "when_to_use": "When retrieving invoices after bookings, ensure clarity on which components (flight, insurance, etc.) are included in the invoice output, as missing details can lead to incomplete financial records.", "content": "The retrieved invoice did not explicitly include insurance costs, suggesting potential gaps in how comprehensive the data returned by 'retrieve_invoice' is. Verify what specific elements are captured in generated documents.", "score": 0.0, "time_created": "2025-08-04 07:42:15", "time_modified": "2025-08-04 07:42:15", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:15", "modified_time": "2025-08-04 07:42:15", "extra_info": {"tags": ["invoice_retrieval", "financial_clarity", "documentation"], "confidence": 0.75, "step_type": "observation", "tools_used": ["retrieve_invoice"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "08bf2bd7807e4ad590a230e4acd1d2d0", "memory_type": "task", "when_to_use": "When handling booking or payment-related tasks that involve multiple API calls with specific parameters.", "content": "Always validate the expected arguments of a function against its documentation before making an API call. Unexpected keyword arguments can cause execution failure even if the logic seems correct.", "score": 0.0, "time_created": "2025-08-04 07:42:08", "time_modified": "2025-08-04 07:42:08", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:08", "modified_time": "2025-08-04 07:42:08", "extra_info": {"tags": ["error_prevention", "API_validation", "parameter_check"], "confidence": 0.9, "step_type": "action", "tools_used": ["book_flight", "get_flight_cost"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "a8bc732161d24ebf9a5a570087a5091a", "memory_type": "task", "when_to_use": "When user requests involve sensitive actions like cancellations or refunds due to emergencies.", "content": "Before proceeding with irreversible actions (e.g., cancellation), ensure all necessary information (like access tokens) is explicitly provided by the user or retrieved from the session context. Avoid assuming implicit data availability.", "score": 0.0, "time_created": "2025-08-04 07:42:08", "time_modified": "2025-08-04 07:42:08", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:08", "modified_time": "2025-08-04 07:42:08", "extra_info": {"tags": ["error_prevention", "context_management", "user_confirmation"], "confidence": 0.8, "step_type": "decision", "tools_used": ["cancel_booking", "contact_customer_support"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "c5f2b4303ec64db0b7ed223e57222e1f", "memory_type": "task", "when_to_use": "When encountering repetitive errors in API calls despite logical consistency.", "content": "Break down complex workflows into smaller, testable steps and verify intermediate outputs. This helps isolate issues early and reduces cascading failures in multi-step processes.", "score": 0.0, "time_created": "2025-08-04 07:42:08", "time_modified": "2025-08-04 07:42:08", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:08", "modified_time": "2025-08-04 07:42:08", "extra_info": {"tags": ["failure_analysis", "debugging", "workflow_optimization"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["retrieve_invoice", "purchase_insurance"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "d732e6f883e445898b8d4e9aeda8ba4a", "memory_type": "task", "when_to_use": "When attempting to start the engine, ensure all doors are locked beforehand.", "content": "Always verify door lock status before starting the engine to avoid unexpected errors. This can be done by checking the vehicle's door status using an appropriate tool like `displayCarStatus` or ensuring locks are engaged via `lockDoors`.", "score": 0.0, "time_created": "2025-08-04 07:42:05", "time_modified": "2025-08-04 07:42:05", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:05", "modified_time": "2025-08-04 07:42:05", "extra_info": {"tags": ["error_prevention", "failure_analysis", "vehicle_control"], "confidence": 0.9, "step_type": "action", "tools_used": ["startEngine", "lockDoors", "displayCarStatus"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "4ced775ee40244e3ac0c8d143fa36f87", "memory_type": "task", "when_to_use": "When estimating trip feasibility based on fuel levels, consider refueling preemptively if uncertain about range.", "content": "Ensure sufficient fuel is available for long trips by either fully refueling or confirming current fuel levels with `displayCarStatus`. Proactively addressing fuel needs avoids potential mid-journey issues.", "score": 0.0, "time_created": "2025-08-04 07:42:05", "time_modified": "2025-08-04 07:42:05", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:05", "modified_time": "2025-08-04 07:42:05", "extra_info": {"tags": ["error_prevention", "fuel_management", "trip_planning"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["estimate_drive_feasibility_by_mileage", "fillFuelTank", "displayCarStatus"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "e9dcdcd2ccb740fa87e2c6187e277d66", "memory_type": "task", "when_to_use": "Before sending messages in a workspace, confirm recipient IDs and review message history to avoid redundancy.", "content": "Use tools like `view_messages_sent` to check past communications and validate recipients with `get_user_id`, ensuring clarity and avoiding unnecessary repetition in messaging workflows.", "score": 0.0, "time_created": "2025-08-04 07:42:05", "time_modified": "2025-08-04 07:42:05", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:05", "modified_time": "2025-08-04 07:42:05", "extra_info": {"tags": ["communication", "message_tracking", "workspace_management"], "confidence": 0.8, "step_type": "decision", "tools_used": ["send_message", "view_messages_sent", "get_user_id"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "80c5ff1e2ec54c0ea5c72039338b1d24", "memory_type": "task", "when_to_use": "When estimating vehicle feasibility for a long trip based on fuel level.", "content": "Always ensure to cross-check both the distance and current fuel capacity before determining if the vehicle is suitable for travel. If additional refueling is required, provide clear instructions to the user on how much fuel is necessary.", "score": 0.0, "time_created": "2025-08-04 07:42:19", "time_modified": "2025-08-04 07:42:19", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:19", "modified_time": "2025-08-04 07:42:19", "extra_info": {"tags": ["error_prevention", "fuel_check", "vehicle_readiness"], "confidence": 0.9, "step_type": "reasoning", "tools_used": ["estimate_drive_feasibility_by_mileage", "displayCarStatus"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "a3de9854a1384c52b6526d802d62e717", "memory_type": "task", "when_to_use": "When initiating actions that have preconditions (e.g., starting the engine requires locked doors and pressed brake).", "content": "Before attempting an action with known preconditions, verify all conditions are met first to avoid repeated failures. For instance, check door locks and brake status prior to starting the engine.", "score": 0.0, "time_created": "2025-08-04 07:42:19", "time_modified": "2025-08-04 07:42:19", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:19", "modified_time": "2025-08-04 07:42:19", "extra_info": {"tags": ["error_prevention", "precondition_check", "engine_start"], "confidence": 0.85, "step_type": "action", "tools_used": ["startEngine", "lockDoors", "pressBrakePedal"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "3cf1abf90a1a4269a0c19592baaeddc1", "memory_type": "task", "when_to_use": "When communicating updates or sending messages to multiple parties during a task.", "content": "Ensure users are aware of all messages sent during a session, especially when coordinating with multiple recipients. This helps maintain clarity and avoids missing any critical communication steps.", "score": 0.0, "time_created": "2025-08-04 07:42:19", "time_modified": "2025-08-04 07:42:19", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:19", "modified_time": "2025-08-04 07:42:19", "extra_info": {"tags": ["message_tracking", "communication", "update_confirmation"], "confidence": 0.8, "step_type": "observation", "tools_used": ["send_message", "view_messages_sent"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "49260142b6e84e89b5b5f4288715b52d", "memory_type": "task", "when_to_use": "When attempting to create a directory that may already exist, verify its existence first to avoid unnecessary errors.", "content": "Before using 'mkdir', check if the directory exists using tools like 'ls' or handle exceptions when the directory already exists. This prevents redundant operations and ensures smoother execution.", "score": 0.0, "time_created": "2025-08-04 07:42:19", "time_modified": "2025-08-04 07:42:19", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:19", "modified_time": "2025-08-04 07:42:19", "extra_info": {"tags": ["error_prevention", "directory_management", "redundancy_check"], "confidence": 0.9, "step_type": "action", "tools_used": ["mkdir", "ls"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "5fe83ddbc12b441b9a088dc59ad5cebe", "memory_type": "task", "when_to_use": "When moving files into a specific directory, ensure the target directory is accessible and correctly referenced.", "content": "Always confirm the destination directory's existence and accessibility before executing file-moving operations to prevent misplaced or failed transfers.", "score": 0.0, "time_created": "2025-08-04 07:42:19", "time_modified": "2025-08-04 07:42:19", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:19", "modified_time": "2025-08-04 07:42:19", "extra_info": {"tags": ["error_prevention", "file_operations", "directory_verification"], "confidence": 0.85, "step_type": "decision", "tools_used": ["mv", "find"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "d43f2674d0f241f4a21869c683d78133", "memory_type": "task", "when_to_use": "When attempting to move files between directories, ensure the correct path resolution is used.", "content": "Always verify the current working directory and explicitly confirm file paths before executing file operations. Misaligned or incomplete paths can lead to 'file not found' errors even when the file exists.", "score": 0.0, "time_created": "2025-08-04 07:42:23", "time_modified": "2025-08-04 07:42:23", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:23", "modified_time": "2025-08-04 07:42:23", "extra_info": {"tags": ["error_prevention", "failure_analysis", "file_operations"], "confidence": 0.9, "step_type": "action", "tools_used": ["find", "mv", "pwd", "ls"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "e74b9d0f92f44baf8e4d736aa8cb3cce", "memory_type": "task", "when_to_use": "When encountering an unexpected keyword argument error in tools with specific parameters.", "content": "Ensure all tool arguments strictly adhere to the documented parameter list without introducing unsupported keywords (e.g., 'path' in `ls`).", "score": 0.0, "time_created": "2025-08-04 07:42:23", "time_modified": "2025-08-04 07:42:23", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:23", "modified_time": "2025-08-04 07:42:23", "extra_info": {"tags": ["error_prevention", "tool_usage", "parameter_validation"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["ls"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "97d3ef0c915147c0ba4bab2c58d7ac58", "memory_type": "task", "when_to_use": "When navigating directories and encountering 'No such directory' errors despite previous creation attempts.", "content": "Ensure that the directory structure is not nested incorrectly by verifying the current working directory with 'pwd' before proceeding with further commands. Avoid redundant directory creations without confirming their existence.", "score": 0.0, "time_created": "2025-08-04 07:42:36", "time_modified": "2025-08-04 07:42:36", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:36", "modified_time": "2025-08-04 07:42:36", "extra_info": {"tags": ["error_prevention", "directory_management", "navigation_errors"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["cd", "mkdir", "pwd"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "0390e3d563324daf837b12ec8227cabf", "memory_type": "task", "when_to_use": "When copying files to a destination directory fails due to naming or path issues.", "content": "Verify if the source file exists in the current directory before attempting copy operations. Ensure the destination directory is correctly specified without violating function constraints on paths.", "score": 0.0, "time_created": "2025-08-04 07:42:36", "time_modified": "2025-08-04 07:42:36", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:36", "modified_time": "2025-08-04 07:42:36", "extra_info": {"tags": ["error_prevention", "file_operations", "copy_errors"], "confidence": 0.8, "step_type": "action", "tools_used": ["cp", "ls", "touch"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "a813c07a3d7842b4b005f275abd6e857", "memory_type": "task", "when_to_use": "When repeated attempts to access or modify files result in inconsistencies or unexpected errors.", "content": "Regularly check the contents of the current directory using 'ls' to confirm the presence of expected files and directories, especially after failed operations.", "score": 0.0, "time_created": "2025-08-04 07:42:36", "time_modified": "2025-08-04 07:42:36", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:36", "modified_time": "2025-08-04 07:42:36", "extra_info": {"tags": ["error_prevention", "file_verification", "unexpected_errors"], "confidence": 0.75, "step_type": "observation", "tools_used": ["ls", "cd"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "c1fdbfbef1af41dbb261c9a67d865902", "memory_type": "task", "when_to_use": "When attempting to copy files between directories where the source and destination are in different locations.", "content": "Ensure that the file exists in the current working directory or navigate to the correct directory before performing operations. Tools with path restrictions require careful handling of relative paths.", "score": 0.0, "time_created": "2025-08-04 07:42:31", "time_modified": "2025-08-04 07:42:31", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:31", "modified_time": "2025-08-04 07:42:31", "extra_info": {"tags": ["error_prevention", "file_operations", "directory_navigation"], "confidence": 0.9, "step_type": "action", "tools_used": ["cd", "cp"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "fadf782eb4d94877b75460df36258ffd", "memory_type": "task", "when_to_use": "When receiving errors related to missing files during file operations.", "content": "Verify the existence and location of the target file explicitly before proceeding with dependent actions such as copying or moving.", "score": 0.0, "time_created": "2025-08-04 07:42:31", "time_modified": "2025-08-04 07:42:31", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:31", "modified_time": "2025-08-04 07:42:31", "extra_info": {"tags": ["error_prevention", "file_verification", "failure_analysis"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["ls", "find"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "3ef00c117f76436297800f4361f8c921", "memory_type": "task", "when_to_use": "When designing sequences involving tools that do not support complex paths.", "content": "Break down multi-step operations into simpler sub-tasks, ensuring each step is achievable within the constraints of the toolset.", "score": 0.0, "time_created": "2025-08-04 07:42:31", "time_modified": "2025-08-04 07:42:31", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:31", "modified_time": "2025-08-04 07:42:31", "extra_info": {"tags": ["tool_constraints", "sequence_design", "error_prevention"], "confidence": 0.8, "step_type": "decision", "tools_used": ["mkdir", "cd", "cp"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "c77424d073ef4a9991f73b13fb64b725", "memory_type": "task", "when_to_use": "When searching for files with specific names in a directory and planning to compare them.", "content": "Ensure both files exist before attempting any comparison or further operations. If one file is missing, clarify with the user whether they want to proceed or provide an alternative name/path.", "score": 0.0, "time_created": "2025-08-04 07:42:39", "time_modified": "2025-08-04 07:42:39", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:39", "modified_time": "2025-08-04 07:42:39", "extra_info": {"tags": ["error_prevention", "failure_analysis", "file_operations"], "confidence": 0.9, "step_type": "reasoning", "tools_used": ["find"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "a0be420c42c94038832e5c5e99a57767", "memory_type": "task", "when_to_use": "When handling tasks that involve multiple sequential steps (e.g., file search followed by content comparison).", "content": "Break down the task explicitly into sub-tasks, validate completion of each step before proceeding, and handle cases where intermediate steps fail gracefully by communicating clearly with the user.", "score": 0.0, "time_created": "2025-08-04 07:42:39", "time_modified": "2025-08-04 07:42:39", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:39", "modified_time": "2025-08-04 07:42:39", "extra_info": {"tags": ["error_prevention", "failure_analysis", "task_decomposition"], "confidence": 0.85, "step_type": "decision", "tools_used": ["find"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "6a232f80dcad44578395109b40991515", "memory_type": "task", "when_to_use": "When attempting to move and rename files across directories using functions with path restrictions.", "content": "Understand the limitations of available tools, especially regarding paths. If a function cannot handle full paths for moving and renaming, split the task into discrete steps: first navigate to the target directory, then perform the operation locally.", "score": 0.0, "time_created": "2025-08-04 07:42:42", "time_modified": "2025-08-04 07:42:42", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:42", "modified_time": "2025-08-04 07:42:42", "extra_info": {"tags": ["error_prevention", "file_operations", "tool_limitations"], "confidence": 0.85, "step_type": "action", "tools_used": ["mv", "cd"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "c26328b9490749fb88d952b27ffe695e", "memory_type": "task", "when_to_use": "When interpreting user requests that involve multiple logical operations (e.g., both moving and renaming).", "content": "Break down complex user instructions into smaller, actionable components before proceeding. Validate whether each component can be executed given the constraints of the available tools.", "score": 0.0, "time_created": "2025-08-04 07:42:42", "time_modified": "2025-08-04 07:42:42", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:42", "modified_time": "2025-08-04 07:42:42", "extra_info": {"tags": ["task_decomposition", "failure_analysis", "user_instructions"], "confidence": 0.9, "step_type": "reasoning", "tools_used": []}}} -{"workspace_id": "bfcl_v1", "memory_id": "8881ff37e7874cee9511cd49f0c22ab3", "memory_type": "task", "when_to_use": "When the user needs to gather specific travel-related information (e.g., flight costs) and proceed with booking while adhering to a budget.", "content": "The agent successfully navigated through multiple steps: identifying nearest airports, retrieving flight costs, setting a budget limit, making the booking, and generating an invoice. Each step was executed sequentially using appropriate functions based on clear decision points (e.g., verifying budget before booking). This structured approach ensured accuracy and alignment with user requirements.", "score": 0.0, "time_created": "2025-08-04 07:42:35", "time_modified": "2025-08-04 07:42:35", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:35", "modified_time": "2025-08-04 07:42:35", "extra_info": {"tags": ["travel_booking", "sequential_execution", "budget_management"], "confidence": 0.9, "step_type": "action", "tools_used": ["get_nearest_airport_by_city", "get_flight_cost", "set_budget_limit", "book_flight", "retrieve_invoice"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "f449e61babed43d3b8927a98607bfdb4", "memory_type": "task", "when_to_use": "When escalating concerns or issues related to a booking to customer support.", "content": "After completing the booking process, the agent effectively handled a post-booking concern by contacting customer support with precise details (booking ID and issue description). This ensured that the user's concern was formally logged for resolution without disrupting the overall flow of the task.", "score": 0.0, "time_created": "2025-08-04 07:42:35", "time_modified": "2025-08-04 07:42:35", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:35", "modified_time": "2025-08-04 07:42:35", "extra_info": {"tags": ["customer_support", "escalation_process", "post_booking"], "confidence": 0.85, "step_type": "decision", "tools_used": ["contact_customer_support"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "bd4b33ea1a154c3ba4ccdcf3ca735477", "memory_type": "task", "when_to_use": "When encountering unexpected parameter errors during function calls.", "content": "Always cross-check the function's expected parameters against its documentation to ensure no discrepancies exist between defined and actual arguments. If an error persists despite correct usage, consider that the backend implementation may not align with documented specifications.", "score": 0.0, "time_created": "2025-08-04 07:42:43", "time_modified": "2025-08-04 07:42:43", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:43", "modified_time": "2025-08-04 07:42:43", "extra_info": {"tags": ["error_prevention", "parameter_validation", "api_mismatch"], "confidence": 0.9, "step_type": "action", "tools_used": ["book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "3c869a998e0b44d0b86632541ebbb0ad", "memory_type": "task", "when_to_use": "When a follow-up action (e.g., retrieving an invoice) depends on a prior step that might have failed silently or partially.", "content": "Before proceeding with dependent steps, validate the success of preceding actions by checking for explicit confirmation or identifiers such as booking IDs. If unavailable, revisit and resolve the upstream issue first.", "score": 0.0, "time_created": "2025-08-04 07:42:43", "time_modified": "2025-08-04 07:42:43", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:43", "modified_time": "2025-08-04 07:42:43", "extra_info": {"tags": ["failure_analysis", "dependency_checking", "booking_validation"], "confidence": 0.85, "step_type": "decision", "tools_used": ["retrieve_invoice", "contact_customer_support"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "0192cb6a043c4549bf80f1f5c59cda70", "memory_type": "task", "when_to_use": "When planning a sequence involving budget constraints followed by expenditures.", "content": "Ensure budget-setting steps are compatible with downstream operations like payment processing. Validate whether the system enforcing the budget integrates seamlessly with expenditure functions to avoid unanticipated failures.", "score": 0.0, "time_created": "2025-08-04 07:42:43", "time_modified": "2025-08-04 07:42:43", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:43", "modified_time": "2025-08-04 07:42:43", "extra_info": {"tags": ["budget_management", "payment_processing", "error_prevention"], "confidence": 0.8, "step_type": "reasoning", "tools_used": ["set_budget_limit", "book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "52744607692f4357ac5493c9d8abff65", "memory_type": "task", "when_to_use": "When retrieving specific booking-related information such as invoices, ensure all required parameters are provided by the user or inferred from context.", "content": "Always verify that optional but necessary fields like booking ID are supplied or clarified with the user before making API calls. Missing key details can lead to 'not found' errors even if other data (e.g., access token) is correct.", "score": 0.0, "time_created": "2025-08-04 07:42:55", "time_modified": "2025-08-04 07:42:55", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:55", "modified_time": "2025-08-04 07:42:55", "extra_info": {"tags": ["error_prevention", "failure_analysis", "booking_retrieval"], "confidence": 0.9, "step_type": "action", "tools_used": ["retrieve_invoice"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "aac66fe6187d46f599ce711a34e9ae94", "memory_type": "task", "when_to_use": "In scenarios where users request actions tied to previous interactions, cross-check for implicit dependencies on earlier steps or inputs.", "content": "If a function relies on contextual data from prior steps (e.g., booking ID), explicitly confirm this information with the user unless it's guaranteed to be available in the session state.", "score": 0.0, "time_created": "2025-08-04 07:42:55", "time_modified": "2025-08-04 07:42:55", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:55", "modified_time": "2025-08-04 07:42:55", "extra_info": {"tags": ["context_management", "user_clarification", "dependency_tracking"], "confidence": 0.85, "step_type": "reasoning", "tools_used": []}}} -{"workspace_id": "bfcl_v1", "memory_id": "6c396e9c290b4fdd89384aabaef38e65", "memory_type": "task", "when_to_use": "When the user's request requires specific parameters to call an API function, but those parameters are missing from their query.", "content": "Always confirm all required inputs (e.g., booking ID, access token) with the user before attempting to execute a function. Missing inputs lead to execution failure and waste time.", "score": 0.0, "time_created": "2025-08-04 07:42:40", "time_modified": "2025-08-04 07:42:40", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:40", "modified_time": "2025-08-04 07:42:40", "extra_info": {"tags": ["error_prevention", "input_validation", "user_query"], "confidence": 0.9, "step_type": "reasoning", "tools_used": ["retrieve_invoice"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "bebcd545be714cff984d488930554706", "memory_type": "task", "when_to_use": "When handling multi-step processes that depend on earlier interactions or data (e.g., referencing booking IDs or insurance IDs).", "content": "Maintain context continuity by explicitly linking current requests to prior steps. If unsure about necessary details, ask clarifying questions rather than proceeding with incomplete information.", "score": 0.0, "time_created": "2025-08-04 07:42:40", "time_modified": "2025-08-04 07:42:40", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:40", "modified_time": "2025-08-04 07:42:40", "extra_info": {"tags": ["context_management", "failure_analysis", "multi_step_processes"], "confidence": 0.85, "step_type": "decision", "tools_used": ["purchase_insurance", "retrieve_invoice"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "43c98827b6f04494aef645e8f754cc6e", "memory_type": "task", "when_to_use": "When the user specifies a budget in one currency but the system requires it in another.", "content": "The sequence involved identifying the need to convert currency before setting a budget limit. First, the compute_exchange_rate tool was used to convert the user-specified amount from GBP to USD. Then, the converted value was passed to the set_budget_limit function, ensuring compliance with the system's USD requirement. This approach avoids errors and aligns the user’s intent with system constraints.", "score": 0.0, "time_created": "2025-08-04 07:43:02", "time_modified": "2025-08-04 07:43:02", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:02", "modified_time": "2025-08-04 07:43:02", "extra_info": {"tags": ["currency_conversion", "budget_setting", "compliance"], "confidence": 0.9, "step_type": "action", "tools_used": ["compute_exchange_rate", "set_budget_limit"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "f08b9e84dbe24e0cb8e29ce19eb0f0a5", "memory_type": "task", "when_to_use": "When multiple tools are required to achieve the user's goal, such as gathering flight cost details and setting a related budget.", "content": "The agent first identified the nearest airports using get_nearest_airport_by_city, then calculated the flight cost with get_flight_cost. When the user requested to set a daily spend limit, the agent recognized the need for currency conversion before applying the budget limit via set_budget_limit. This multi-step reasoning ensured all parts of the query were addressed comprehensively.", "score": 0.0, "time_created": "2025-08-04 07:43:02", "time_modified": "2025-08-04 07:43:02", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:02", "modified_time": "2025-08-04 07:43:02", "extra_info": {"tags": ["multi_tool_sequence", "user_goal_alignment", "travel_planning"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["get_nearest_airport_by_city", "get_flight_cost", "compute_exchange_rate", "set_budget_limit"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "639f53bcf1a1436a95de0a66c6a69233", "memory_type": "task", "when_to_use": "When handling currency conversions in budget-related tasks where the system expects a specific currency (e.g., USD) but the user provides another (e.g., GBP).", "content": "Always verify that the input currency matches the expected currency of the function parameters. If not, perform an explicit conversion using available tools before proceeding.", "score": 0.0, "time_created": "2025-08-04 07:42:57", "time_modified": "2025-08-04 07:42:57", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:57", "modified_time": "2025-08-04 07:42:57", "extra_info": {"tags": ["error_prevention", "currency_conversion", "budget_management"], "confidence": 0.9, "step_type": "action", "tools_used": ["compute_exchange_rate", "set_budget_limit"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "ae9781d595764f049ad3f75d78c9b269", "memory_type": "task", "when_to_use": "When interpreting user inputs that may include implicit expectations about currency handling.", "content": "Clarify with the user or confirm internally whether the provided value needs to be converted or if the system can handle the specified currency directly. Misalignment between user intent and system functionality can lead to incorrect outcomes.", "score": 0.0, "time_created": "2025-08-04 07:42:57", "time_modified": "2025-08-04 07:42:57", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:57", "modified_time": "2025-08-04 07:42:57", "extra_info": {"tags": ["user_communication", "failure_analysis", "input_validation"], "confidence": 0.8, "step_type": "reasoning", "tools_used": []}}} -{"workspace_id": "bfcl_v1", "memory_id": "f91700d65c4b44e69c1ae23e9bd88e41", "memory_type": "task", "when_to_use": "When starting a vehicle's engine and encountering safety-related errors (e.g., brake pedal not pressed).", "content": "The sequence of attempting to start the engine, receiving an error about the brake pedal, then fully pressing the brake before retrying successfully ensured compliance with safety protocols. This approach prevents potential accidents or damage caused by bypassing safety mechanisms.", "score": 0.0, "time_created": "2025-08-04 07:43:04", "time_modified": "2025-08-04 07:43:04", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:04", "modified_time": "2025-08-04 07:43:04", "extra_info": {"tags": ["engine-start", "safety-protocol", "brake-pedal"], "confidence": 0.9, "step_type": "action", "tools_used": ["startEngine", "pressBrakePedal"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "9e52b9a27c4e402192dc23bf549c2120", "memory_type": "task", "when_to_use": "When monitoring tire pressure and determining whether immediate maintenance is required.", "content": "After checking tire pressures using `check_tire_pressure`, identifying that all tires were below the safe threshold led to finding the nearest tire shop using `find_nearest_tire_shop`. This proactive decision-making ensures driver safety and avoids potential tire failure during operation.", "score": 0.0, "time_created": "2025-08-04 07:43:04", "time_modified": "2025-08-04 07:43:04", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:04", "modified_time": "2025-08-04 07:43:04", "extra_info": {"tags": ["tire-pressure", "maintenance", "safety-first"], "confidence": 0.85, "step_type": "decision", "tools_used": ["check_tire_pressure", "find_nearest_tire_shop"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "f0ca5f9e58194910ad8e9124d1546b1e", "memory_type": "task", "when_to_use": "When sharing updates on vehicle status via social media while emphasizing key takeaways.", "content": "Posting a tweet summarizing the vehicle checks followed by a reinforcing comment ('Safety first!') effectively communicated both progress and priorities. Using the `post_tweet` and `comment` functions together created a cohesive narrative for followers, enhancing engagement and awareness around safety practices.", "score": 0.0, "time_created": "2025-08-04 07:43:04", "time_modified": "2025-08-04 07:43:04", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:04", "modified_time": "2025-08-04 07:43:04", "extra_info": {"tags": ["social-media", "engagement", "vehicle-updates"], "confidence": 0.8, "step_type": "action", "tools_used": ["post_tweet", "comment"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "3c744ae101bf42b0b695c5a0c79b7b95", "memory_type": "task", "when_to_use": "When attempting to interact with external systems or APIs requiring authentication.", "content": "Always verify successful authentication before proceeding with dependent actions. A failure in authentication can cascade, preventing subsequent steps from executing correctly.", "score": 0.0, "time_created": "2025-08-04 07:42:50", "time_modified": "2025-08-04 07:42:50", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:50", "modified_time": "2025-08-04 07:42:50", "extra_info": {"tags": ["error_prevention", "authentication_failure", "dependency_management"], "confidence": 0.9, "step_type": "action", "tools_used": ["authenticate_twitter"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "0631fbf3e2884adfb1dfff6f10b6e83c", "memory_type": "task", "when_to_use": "When planning sequential tasks that depend on the output of prior steps.", "content": "Ensure all prerequisite conditions are met and validated before initiating dependent tasks. For example, confirm the existence of a required resource (e.g., tweet_id) before attempting operations that rely on it.", "score": 0.0, "time_created": "2025-08-04 07:42:50", "time_modified": "2025-08-04 07:42:50", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:42:50", "modified_time": "2025-08-04 07:42:50", "extra_info": {"tags": ["error_prevention", "dependency_chain", "task_validation"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["post_tweet", "comment_on_tweet"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "56b5bb4317b34a21b950da176876a42f", "memory_type": "task", "when_to_use": "When needing to create and populate a file with specific content in a particular directory.", "content": "The agent successfully navigated to the 'Documents' directory, created a new file called 'summary.txt', and populated it with the phrase 'quantum computing'. This approach worked due to the sequential use of the 'cd' tool to change directories, followed by the 'touch' tool to create the file, and finally the 'echo' tool to write the desired content. The flow was logical and ensured minimal errors while achieving the task efficiently.", "score": 0.0, "time_created": "2025-08-04 07:43:06", "time_modified": "2025-08-04 07:43:06", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:06", "modified_time": "2025-08-04 07:43:06", "extra_info": {"tags": ["file_creation", "directory_navigation", "content_writing"], "confidence": 0.9, "step_type": "action", "tools_used": ["cd", "touch", "echo"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "98cb73a7e9fb4f14b5e687126a494231", "memory_type": "task", "when_to_use": "When verifying the contents or metrics of a recently modified file.", "content": "After writing content to 'summary.txt', the agent used the 'wc' tool to count the words in the file. This step confirmed that the file contained exactly the expected number of words ('quantum computing' = 2 words). This demonstrates the importance of validation steps after file operations to ensure correctness and completeness.", "score": 0.0, "time_created": "2025-08-04 07:43:06", "time_modified": "2025-08-04 07:43:06", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:06", "modified_time": "2025-08-04 07:43:06", "extra_info": {"tags": ["file_validation", "word_count", "post_action_check"], "confidence": 0.85, "step_type": "observation", "tools_used": ["wc"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "2e84e6db676941908871239f3ec7400c", "memory_type": "task", "when_to_use": "When a task involves checking file existence before performing actions like creating or modifying files, but the tools do not explicitly support existence checks.", "content": "Always attempt to use available tools creatively (e.g., listing directory contents) to infer information indirectly if direct checks are unavailable. Alternatively, clarify with the user whether proceeding without confirmation is acceptable.", "score": 0.0, "time_created": "2025-08-04 07:43:04", "time_modified": "2025-08-04 07:43:04", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:04", "modified_time": "2025-08-04 07:43:04", "extra_info": {"tags": ["error_prevention", "failure_analysis", "file_operations"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["cd", "ls", "touch"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "81177d25f55d4de88b14424bae5adf5f", "memory_type": "task", "when_to_use": "When generating sequences of function calls based on incomplete or ambiguous instructions about error handling.", "content": "Ensure that all potential failure points, such as preconditions for safe execution, are addressed either through tool capabilities or explicit clarification requests to avoid unintended consequences.", "score": 0.0, "time_created": "2025-08-04 07:43:04", "time_modified": "2025-08-04 07:43:04", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:04", "modified_time": "2025-08-04 07:43:04", "extra_info": {"tags": ["error_prevention", "failure_analysis", "sequence_planning"], "confidence": 0.8, "step_type": "decision", "tools_used": ["wc", "echo"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "ac47858efe3b4fbbabc4810e3b9c07df", "memory_type": "task", "when_to_use": "When determining the distance between two cities for planning purposes.", "content": "The agent successfully identified the zip codes for both San Francisco and Stonebrook, then used these to estimate the road distance. This approach ensures accurate distance calculation by leveraging structured geographic data (zipcodes).", "score": 0.0, "time_created": "2025-08-04 07:43:21", "time_modified": "2025-08-04 07:43:21", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:21", "modified_time": "2025-08-04 07:43:21", "extra_info": {"tags": ["distance_calculation", "geographic_data", "planning"], "confidence": 0.9, "step_type": "action", "tools_used": ["get_zipcode_based_on_city", "estimate_distance"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "e7c2212870304abfacf61b4dc099aa42", "memory_type": "task", "when_to_use": "When amplifying the reach of a message or announcement on social media.", "content": "After posting an initial tweet about the genealogy journey, the agent retweeted the message to increase visibility. This double-action strategy effectively widens audience engagement and promotes sharing within communities interested in family history.", "score": 0.0, "time_created": "2025-08-04 07:43:21", "time_modified": "2025-08-04 07:43:21", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:21", "modified_time": "2025-08-04 07:43:21", "extra_info": {"tags": ["social_media", "amplification", "retweet"], "confidence": 0.85, "step_type": "action", "tools_used": ["post_tweet", "retweet"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "59c0b4859e494895b89fa7e43fb2489b", "memory_type": "task", "when_to_use": "When the task involves multiple sequential API calls, especially where authentication or session status might affect later steps.", "content": "Always verify the login or session status before executing dependent API functions to prevent downstream failures caused by expired or invalid sessions.", "score": 0.0, "time_created": "2025-08-04 07:43:25", "time_modified": "2025-08-04 07:43:25", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:25", "modified_time": "2025-08-04 07:43:25", "extra_info": {"tags": ["error_prevention", "failure_analysis", "authentication", "session_management"], "confidence": 0.9, "step_type": "reasoning", "tools_used": ["ticket_get_login_status", "retweet"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "c4e833fca26946eeb21be871a6bd82f1", "memory_type": "task", "when_to_use": "When planning a series of actions that depend on outputs from previous steps (e.g., retweeting after posting).", "content": "Cross-check tool requirements and ensure all necessary preconditions, such as correct input parameters and valid prior outputs, are met before proceeding with subsequent actions.", "score": 0.0, "time_created": "2025-08-04 07:43:25", "time_modified": "2025-08-04 07:43:25", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:25", "modified_time": "2025-08-04 07:43:25", "extra_info": {"tags": ["error_prevention", "failure_analysis", "dependency_management", "workflow_design"], "confidence": 0.85, "step_type": "decision", "tools_used": ["post_tweet", "retweet"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "ae43581c29b04a70a149c3d8ef4999fc", "memory_type": "task", "when_to_use": "When handling tasks that require user-provided information (e.g., booking IDs, transaction IDs) to proceed with a function call.", "content": "Always verify the presence of required parameters before initiating processes. If any critical data is missing, inform the user immediately and request clarification or additional details.", "score": 0.0, "time_created": "2025-08-04 07:43:14", "time_modified": "2025-08-04 07:43:14", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:14", "modified_time": "2025-08-04 07:43:14", "extra_info": {"tags": ["error_prevention", "missing_data", "user_communication"], "confidence": 0.9, "step_type": "reasoning", "tools_used": ["purchase_insurance", "retrieve_invoice", "contact_customer_support"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "ca8cf047f8aa40f3ac8179ad933fc1a9", "memory_type": "task", "when_to_use": "When encountering authentication errors while performing actions in systems requiring login credentials.", "content": "Before attempting sensitive operations such as ticket creation, ensure proper authentication by explicitly logging in using provided credentials if necessary. Authentication status should be confirmed prior to proceeding.", "score": 0.0, "time_created": "2025-08-04 07:43:14", "time_modified": "2025-08-04 07:43:14", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:14", "modified_time": "2025-08-04 07:43:14", "extra_info": {"tags": ["authentication", "error_handling", "login_verification"], "confidence": 0.85, "step_type": "action", "tools_used": ["ticket_login", "create_ticket"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "1c630ec330d44099aa21704ff1c87a3b", "memory_type": "task", "when_to_use": "When handling multi-system workflows requiring separate authentication (e.g., travel system vs. ticketing system).", "content": "Always verify whether the user is authenticated in the correct system before proceeding with actions that depend on login status. Avoid assuming token validity across systems.", "score": 0.0, "time_created": "2025-08-04 07:43:27", "time_modified": "2025-08-04 07:43:27", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:27", "modified_time": "2025-08-04 07:43:27", "extra_info": {"tags": ["error_prevention", "authentication", "cross-system"], "confidence": 0.9, "step_type": "decision", "tools_used": ["ticket_login", "create_ticket"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "8eda2265b7ca4060a28bc8c0968865f9", "memory_type": "task", "when_to_use": "When creating tickets or resolving issues based on prior communications.", "content": "Ensure all necessary details from previous interactions are explicitly included in subsequent steps, such as support feedback or error messages, to avoid ambiguity.", "score": 0.0, "time_created": "2025-08-04 07:43:27", "time_modified": "2025-08-04 07:43:27", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:27", "modified_time": "2025-08-04 07:43:27", "extra_info": {"tags": ["error_prevention", "context-preservation", "clarity"], "confidence": 0.8, "step_type": "reasoning", "tools_used": ["create_ticket"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "17d4ff82dbdc4704a015905d297be288", "memory_type": "task", "when_to_use": "When encountering invalid input data like booking IDs during critical operations.", "content": "Validate key inputs early in the process and guide users to correct them before initiating dependent tasks, reducing downstream failures.", "score": 0.0, "time_created": "2025-08-04 07:43:27", "time_modified": "2025-08-04 07:43:27", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:27", "modified_time": "2025-08-04 07:43:27", "extra_info": {"tags": ["input-validation", "failure_analysis", "user-guidance"], "confidence": 0.85, "step_type": "action", "tools_used": ["purchase_insurance"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "4c27b613629f46eeb45186bec079d31e", "memory_type": "task", "when_to_use": "When the user requests specific stock information, including price and performance metrics.", "content": "The agent successfully used a two-step process: first identifying the stock symbol using 'get_symbol_by_name', followed by retrieving detailed stock information with 'get_stock_info'. This ensured accurate and relevant data was provided to the user.", "score": 0.0, "time_created": "2025-08-04 07:43:27", "time_modified": "2025-08-04 07:43:27", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:27", "modified_time": "2025-08-04 07:43:27", "extra_info": {"tags": ["stock_information", "symbol_lookup", "financial_metrics"], "confidence": 0.9, "step_type": "action", "tools_used": ["get_symbol_by_name", "get_stock_info"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "d5fa54f3e4d7499c81c5da4a442600f1", "memory_type": "task", "when_to_use": "When the user needs to cancel a pending order or close a ticket.", "content": "The agent efficiently identified the correct tool ('cancel_order' or 'close_ticket') based on the user's request and executed it with the provided identifier (e.g., order_id or ticket_id). The response confirmed the action's success, ensuring clarity and closure for the user.", "score": 0.0, "time_created": "2025-08-04 07:43:27", "time_modified": "2025-08-04 07:43:27", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:27", "modified_time": "2025-08-04 07:43:27", "extra_info": {"tags": ["order_cancellation", "ticket_closure", "user_request_resolution"], "confidence": 0.85, "step_type": "action", "tools_used": ["cancel_order", "close_ticket"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "57f1612a793d4c81b15a8feb326519c7", "memory_type": "task", "when_to_use": "When the user requests specific stock information, including price and performance metrics.", "content": "The agent first used 'get_symbol_by_name' to retrieve the stock symbol for the company in question (Zeta Corp). After obtaining the symbol (ZETA), it called 'get_stock_info' to gather detailed stock data such as current price, percent change, volume, and moving averages. This sequential approach ensured accurate and relevant information was provided to the user efficiently.", "score": 0.0, "time_created": "2025-08-04 07:43:34", "time_modified": "2025-08-04 07:43:34", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:34", "modified_time": "2025-08-04 07:43:34", "extra_info": {"tags": ["stock information", "symbol lookup", "performance metrics"], "confidence": 0.9, "step_type": "action", "tools_used": ["get_symbol_by_name", "get_stock_info"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "18b17e713dc54fdabd43818859a54c39", "memory_type": "task", "when_to_use": "When a user identifies an error in a previous transaction and requests immediate cancellation of a pending order.", "content": "Upon recognizing the error, the agent promptly executed the 'cancel_order' function with the provided order ID (12446). The tool successfully processed the cancellation and returned confirmation that the order status was updated to 'Cancelled.' This direct action avoided any further processing of the erroneous transaction, satisfying the user's request effectively.", "score": 0.0, "time_created": "2025-08-04 07:43:34", "time_modified": "2025-08-04 07:43:34", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:34", "modified_time": "2025-08-04 07:43:34", "extra_info": {"tags": ["order cancellation", "error correction", "transaction management"], "confidence": 0.85, "step_type": "action", "tools_used": ["cancel_order"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "456f10927daf42f8beb965a7207033c5", "memory_type": "task", "when_to_use": "When a user wants to close a previously submitted support ticket due to changes in service preferences or other reasons.", "content": "After confirming the ticket ID from the user (ticket ID 3), the agent executed the 'close_ticket' function. The response confirmed successful closure of the ticket, ensuring the user’s intent to discontinue service was fully addressed. This step reflects clarity in handling customer service-related tasks by directly addressing the user’s need without unnecessary steps.", "score": 0.0, "time_created": "2025-08-04 07:43:34", "time_modified": "2025-08-04 07:43:34", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:34", "modified_time": "2025-08-04 07:43:34", "extra_info": {"tags": ["ticket management", "service discontinuation", "customer support"], "confidence": 0.8, "step_type": "action", "tools_used": ["close_ticket"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "91905e7bc30947ac94db196093560782", "memory_type": "task", "when_to_use": "When the task involves file operations requiring multiple steps (e.g., copying files to a new directory), ensure that all necessary tools support the required operations.", "content": "The assistant attempted to use functions like 'find' and 'cp', but these may not have been designed for batch processing or wildcard handling, leading to incomplete execution. Ensure function capabilities align with the complexity of the task.", "score": 0.0, "time_created": "2025-08-04 07:43:39", "time_modified": "2025-08-04 07:43:39", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:39", "modified_time": "2025-08-04 07:43:39", "extra_info": {"tags": ["error_prevention", "failure_analysis", "file_operations"], "confidence": 0.85, "step_type": "action", "tools_used": ["find", "cp", "mkdir"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "afa5a3d5df394774998eda0bcb4810d8", "memory_type": "task", "when_to_use": "When encountering multi-step tasks without clear tool support for intermediate outputs (e.g., processing results from one function as input to another), reassess feasibility before proceeding.", "content": "The assistant planned to use 'find' to locate files and then copy them individually, but lacked the ability to process the output of 'find'. This highlights the importance of verifying whether tools can handle sequential dependencies.", "score": 0.0, "time_created": "2025-08-04 07:43:39", "time_modified": "2025-08-04 07:43:39", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:39", "modified_time": "2025-08-04 07:43:39", "extra_info": {"tags": ["error_prevention", "failure_analysis", "tool_limitations"], "confidence": 0.8, "step_type": "reasoning", "tools_used": ["find", "cp"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "4ea61951fb4347c2afb753a2eea993fc", "memory_type": "task", "when_to_use": "When designing workflows involving directory creation followed by content manipulation, confirm that both steps are fully supported by available tools.", "content": "Creating a new directory ('mkdir') was straightforward, but subsequent actions (copying specific files) were hindered due to missing functionality in 'cp'. Always validate end-to-end workflow compatibility with available tools.", "score": 0.0, "time_created": "2025-08-04 07:43:39", "time_modified": "2025-08-04 07:43:39", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:39", "modified_time": "2025-08-04 07:43:39", "extra_info": {"tags": ["error_prevention", "failure_analysis", "workflow_design"], "confidence": 0.75, "step_type": "decision", "tools_used": ["mkdir", "cp"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "06bb74d47bf948279f00f8a364369f9e", "memory_type": "task", "when_to_use": "When copying files from one directory to another, especially when file existence is uncertain.", "content": "Always verify the presence of target files before proceeding with operations. Use tools like 'find' or 'ls' to confirm that expected files exist in the source directory to avoid unnecessary actions on empty directories.", "score": 0.0, "time_created": "2025-08-04 07:43:21", "time_modified": "2025-08-04 07:43:21", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:21", "modified_time": "2025-08-04 07:43:21", "extra_info": {"tags": ["error_prevention", "file_operations", "directory_management"], "confidence": 0.9, "step_type": "reasoning", "tools_used": ["find", "mkdir"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "9828dec1b00f4da98cecd44266918adf", "memory_type": "task", "when_to_use": "When posting differences between two documents to social media platforms.", "content": "Ensure that meaningful differences are captured and formatted clearly for public readability. Avoid posting if there are no significant differences unless explicitly instructed by the user.", "score": 0.0, "time_created": "2025-08-04 07:43:21", "time_modified": "2025-08-04 07:43:21", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:21", "modified_time": "2025-08-04 07:43:21", "extra_info": {"tags": ["content_creation", "social_media", "error_prevention"], "confidence": 0.8, "step_type": "action", "tools_used": ["diff", "post_tweet"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "0e2a5cf8b5e84facb7bf38ca04c85942", "memory_type": "task", "when_to_use": "When preparing to call a function, ensure all required arguments are correctly matched and named according to the API specification.", "content": "Mismatched or unexpected keyword arguments in function calls can lead to execution failures. Always cross-check argument names and structure against the tool's definition before invoking.", "score": 0.0, "time_created": "2025-08-04 07:43:51", "time_modified": "2025-08-04 07:43:51", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:51", "modified_time": "2025-08-04 07:43:51", "extra_info": {"tags": ["error_prevention", "function_call_validation", "argument_matching"], "confidence": 0.9, "step_type": "action", "tools_used": ["book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "b58a24616baf46d487a2707507b60665", "memory_type": "task", "when_to_use": "When handling complex workflows involving multiple tools, validate intermediate outputs to ensure downstream steps have accurate inputs.", "content": "Errors in upstream steps (e.g., incorrect cost values) can propagate and cause issues in subsequent actions like booking flights. Intermediate validation ensures smoother execution.", "score": 0.0, "time_created": "2025-08-04 07:43:51", "time_modified": "2025-08-04 07:43:51", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:51", "modified_time": "2025-08-04 07:43:51", "extra_info": {"tags": ["workflow_validation", "intermediate_check", "failure_analysis"], "confidence": 0.8, "step_type": "reasoning", "tools_used": ["get_flight_cost", "book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "bdb1c38ef37640a192096e0c36917bfc", "memory_type": "task", "when_to_use": "When constructing messages or communications within an account system, confirm that sender/receiver IDs align with expected formats and pre-existing relationships.", "content": "Sending messages without verifying account IDs or contact statuses can result in communication failures. Ensure all IDs are valid and relevant to the task.", "score": 0.0, "time_created": "2025-08-04 07:43:51", "time_modified": "2025-08-04 07:43:51", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:51", "modified_time": "2025-08-04 07:43:51", "extra_info": {"tags": ["message_sending", "account_verification", "error_prevention"], "confidence": 0.75, "step_type": "decision", "tools_used": ["send_message"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "6bd1062c5fc942b2811ae68c40fa2127", "memory_type": "task", "when_to_use": "When attempting to retrieve an invoice or confirm a booking, ensure that the booking ID is valid and exists in the system before proceeding.", "content": "Always validate critical identifiers such as booking IDs before executing dependent actions. Failure to do so can lead to cascading errors downstream, including inability to retrieve related data or complete tasks.", "score": 0.0, "time_created": "2025-08-04 07:43:50", "time_modified": "2025-08-04 07:43:50", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:50", "modified_time": "2025-08-04 07:43:50", "extra_info": {"tags": ["error_prevention", "failure_analysis", "booking_validation"], "confidence": 0.9, "step_type": "reasoning", "tools_used": ["retrieve_invoice", "contact_customer_support"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "9574f87b4bfa467ba79f953422c448ca", "memory_type": "task", "when_to_use": "When switching between different systems (e.g., travel API and message API), verify whether separate authentication steps are required for each system.", "content": "Different APIs may require independent authentication processes even if they belong to the same overarching service. Assuming shared authentication without confirming can result in unauthorized access errors.", "score": 0.0, "time_created": "2025-08-04 07:43:50", "time_modified": "2025-08-04 07:43:50", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:50", "modified_time": "2025-08-04 07:43:50", "extra_info": {"tags": ["error_prevention", "failure_analysis", "authentication"], "confidence": 0.8, "step_type": "decision", "tools_used": ["message_login", "send_message"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "e5515e611bb0476d95bbe84960990e14", "memory_type": "task", "when_to_use": "In cases where multiple tools exist with overlapping functionalities, clarify which tool should be used based on context and available parameters.", "content": "Ambiguity in choosing the correct function due to similar naming conventions or overlapping purposes can lead to incorrect selections. Carefully review parameter requirements and descriptions to match the right tool to the task.", "score": 0.0, "time_created": "2025-08-04 07:43:50", "time_modified": "2025-08-04 07:43:50", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:50", "modified_time": "2025-08-04 07:43:50", "extra_info": {"tags": ["error_prevention", "failure_analysis", "tool_selection"], "confidence": 0.75, "step_type": "action", "tools_used": ["compute_exchange_rate", "get_flight_cost", "book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "517d8ec89f7d48218f20ed971958191f", "memory_type": "task", "when_to_use": "When handling booking and immediate cancellation of services with associated support ticket creation.", "content": "The agent successfully executed a sequence involving booking, canceling the booking, and creating a high-priority support ticket to address the cancellation reason. This multi-step pattern ensured both operational tasks (booking/cancellation) and post-action communication (ticket creation) were handled efficiently.", "score": 0.0, "time_created": "2025-08-04 07:43:57", "time_modified": "2025-08-04 07:43:57", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:57", "modified_time": "2025-08-04 07:43:57", "extra_info": {"tags": ["booking", "cancellation", "support-ticket", "multi-step-execution"], "confidence": 0.9, "step_type": "action", "tools_used": ["book_flight", "cancel_booking", "create_ticket"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "d7b725f025f3419d9533f24e8294d648", "memory_type": "task", "when_to_use": "When encountering unexpected API parameter errors during function calls.", "content": "Upon receiving an error due to an invalid parameter ('travel_cost'), the agent adjusted the function call by removing the unsupported argument while retaining essential parameters. This demonstrates adaptability in debugging and refining inputs for successful execution.", "score": 0.0, "time_created": "2025-08-04 07:43:57", "time_modified": "2025-08-04 07:43:57", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:57", "modified_time": "2025-08-04 07:43:57", "extra_info": {"tags": ["error-handling", "parameter-validation", "api-call"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "a0a1cc44975b4b68aee73ff0a9a69478", "memory_type": "task", "when_to_use": "When encountering unexpected keyword argument errors in function calls", "content": "Always cross-check the actual function implementation against its documented parameters, especially when an error suggests a mismatch between expected and provided arguments. If inconsistencies arise, remove or adjust the problematic parameter based on the function's behavior rather than solely relying on documentation.", "score": 0.0, "time_created": "2025-08-04 07:44:01", "time_modified": "2025-08-04 07:44:01", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:01", "modified_time": "2025-08-04 07:44:01", "extra_info": {"tags": ["error_prevention", "parameter_mismatch", "function_call_failure"], "confidence": 0.9, "step_type": "action", "tools_used": ["book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "981f1a33c50049fc8652754650e6370c", "memory_type": "task", "when_to_use": "When handling user-provided data for critical actions like bookings or cancellations", "content": "Verify all user inputs for accuracy and consistency before executing functions, particularly dates or other time-sensitive information. Discrepancies such as incorrect years (e.g., 2023 vs. 2024) can lead to unintended outcomes or failed operations.", "score": 0.0, "time_created": "2025-08-04 07:44:01", "time_modified": "2025-08-04 07:44:01", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:01", "modified_time": "2025-08-04 07:44:01", "extra_info": {"tags": ["input_validation", "data_consistency", "failure_analysis"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["create_ticket"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "23981768cde641dd96042baa17512f4d", "memory_type": "task", "when_to_use": "When a user requests a unit conversion and subsequent actions dependent on the result.", "content": "The agent successfully converted liters to gallons using the 'liter_to_gallon' function, rounded the result to the nearest integer, and then used the 'fillFuelTank' function with the correct amount. This ensured accurate fueling based on the user's request.", "score": 0.0, "time_created": "2025-08-04 07:44:02", "time_modified": "2025-08-04 07:44:02", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:02", "modified_time": "2025-08-04 07:44:02", "extra_info": {"tags": ["unit_conversion", "fuel_management", "sequential_actions"], "confidence": 0.9, "step_type": "action", "tools_used": ["liter_to_gallon", "fillFuelTank"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "e6e61ffca88f4dc4989960adad22eb36", "memory_type": "task", "when_to_use": "When multiple preconditions must be met before executing a critical action (e.g., starting an engine).", "content": "The agent identified that doors needed to be locked and the brake pedal pressed before starting the engine. By sequentially calling 'lockDoors', 'pressBrakePedal', and finally 'startEngine', the agent ensured all prerequisites were satisfied, leading to successful engine startup.", "score": 0.0, "time_created": "2025-08-04 07:44:02", "time_modified": "2025-08-04 07:44:02", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:02", "modified_time": "2025-08-04 07:44:02", "extra_info": {"tags": ["preconditions", "sequential_validation", "engine_start"], "confidence": 0.85, "step_type": "decision", "tools_used": ["lockDoors", "pressBrakePedal", "startEngine"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "f9346c7550d44f80b73878781047dfcb", "memory_type": "task", "when_to_use": "When a user requests additional modifications to a previously completed action (e.g., adding mentions to a tweet).", "content": "After posting a tweet, the user requested to add another mention. The agent correctly used the 'mention' function with the appropriate tweet ID and new username, ensuring the modification was applied without disrupting the original content.", "score": 0.0, "time_created": "2025-08-04 07:44:02", "time_modified": "2025-08-04 07:44:02", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:02", "modified_time": "2025-08-04 07:44:02", "extra_info": {"tags": ["tweet_modification", "mention_addition", "post_action_updates"], "confidence": 0.8, "step_type": "action", "tools_used": ["mention"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "e0d9eb2d68d645e49e0214cb073ea000", "memory_type": "task", "when_to_use": "When attempting to authenticate a user in a ticketing or travel system and the authentication fails multiple times.", "content": "Always validate and confirm that the provided credentials are correct before retrying authentication. Offer clear guidance on checking case sensitivity, ensuring no typos, or using password recovery options if needed.", "score": 0.0, "time_created": "2025-08-04 07:43:55", "time_modified": "2025-08-04 07:43:55", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:55", "modified_time": "2025-08-04 07:43:55", "extra_info": {"tags": ["error_prevention", "authentication_failure", "user_credentials"], "confidence": 0.85, "step_type": "action", "tools_used": ["authenticate_twitter", "ticket_login"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "861adb2477ea421dad973dce185c1260", "memory_type": "task", "when_to_use": "When preparing a vehicle for operation and encountering sequential preconditions (e.g., locking doors, pressing brakes).", "content": "Before starting critical operations like engine ignition, ensure all required conditions (doors locked, brake pressed) are sequentially validated to avoid repeated failures.", "score": 0.0, "time_created": "2025-08-04 07:43:55", "time_modified": "2025-08-04 07:43:55", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:55", "modified_time": "2025-08-04 07:43:55", "extra_info": {"tags": ["error_prevention", "vehicle_start_sequence", "conditional_operations"], "confidence": 0.9, "step_type": "reasoning", "tools_used": ["startEngine", "lockDoors", "pressBrakePedal"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "3fd6af1c97db4396a494a10785730a35", "memory_type": "task", "when_to_use": "When converting units of measurement (e.g., liters to gallons) for practical tasks such as fuel filling.", "content": "Ensure unit conversions are correctly applied and rounded appropriately to match real-world requirements, avoiding overfill or underfill scenarios.", "score": 0.0, "time_created": "2025-08-04 07:43:55", "time_modified": "2025-08-04 07:43:55", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:55", "modified_time": "2025-08-04 07:43:55", "extra_info": {"tags": ["unit_conversion", "fuel_management", "precision"], "confidence": 0.8, "step_type": "decision", "tools_used": ["liter_to_gallon", "fillFuelTank"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "8eb025f13b86442092687397f96e7f72", "memory_type": "task", "when_to_use": "When gathering real-time stock information and managing watchlists for a user.", "content": "The sequence involved querying stock data using 'get_symbol_by_name' to retrieve the stock symbol, followed by 'get_stock_info' to obtain price, volume, and performance metrics. Finally, 'add_to_watchlist' was used to update the user's watchlist. This pattern ensures accurate, up-to-date financial data retrieval and seamless integration into user preferences.", "score": 0.0, "time_created": "2025-08-04 07:44:03", "time_modified": "2025-08-04 07:44:03", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:03", "modified_time": "2025-08-04 07:44:03", "extra_info": {"tags": ["stock-data", "watchlist-management", "real-time-insights"], "confidence": 0.9, "step_type": "action", "tools_used": ["get_symbol_by_name", "get_stock_info", "add_to_watchlist"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "b13e0610aedf4972997b81f4a475a57f", "memory_type": "task", "when_to_use": "When handling order cancellation or reviewing transaction details in an investment account.", "content": "The agent first retrieved the order history via 'get_order_history', then extracted specific details with 'get_order_details'. Upon confirming the pending status, 'cancel_order' was invoked to successfully cancel the order. This approach ensures clarity in decision-making and provides users control over their transactions.", "score": 0.0, "time_created": "2025-08-04 07:44:03", "time_modified": "2025-08-04 07:44:03", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:03", "modified_time": "2025-08-04 07:44:03", "extra_info": {"tags": ["order-management", "transaction-control", "investment-tools"], "confidence": 0.85, "step_type": "decision", "tools_used": ["get_order_history", "get_order_details", "cancel_order"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "347540528ed545ef8884d834f9600a71", "memory_type": "task", "when_to_use": "When performing a quick review of a trading account’s balance and linked payment methods.", "content": "Using 'get_account_info', the agent efficiently retrieved key account details such as balance and associated card information. Presenting this data in a structured format allows users to quickly assess their financial standing and take further actions if necessary.", "score": 0.0, "time_created": "2025-08-04 07:44:03", "time_modified": "2025-08-04 07:44:03", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:03", "modified_time": "2025-08-04 07:44:03", "extra_info": {"tags": ["account-review", "balance-check", "payment-methods"], "confidence": 0.8, "step_type": "observation", "tools_used": ["get_account_info"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "50961451301d4ff488d5cafd06e30711", "memory_type": "task", "when_to_use": "When handling financial or trading account queries involving balances and associated cards, ensure clarity on the format of sensitive data like card numbers.", "content": "Always confirm whether numeric identifiers (e.g., binding_card) should be presented as integers or formatted strings to meet user expectations and prevent confusion.", "score": 0.0, "time_created": "2025-08-04 07:43:55", "time_modified": "2025-08-04 07:43:55", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:55", "modified_time": "2025-08-04 07:43:55", "extra_info": {"tags": ["error_prevention", "data_formatting", "user_clarity"], "confidence": 0.85, "step_type": "observation", "tools_used": ["get_account_info"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "1b0147b3f1964ed1afa73d6bba72a47e", "memory_type": "task", "when_to_use": "In scenarios where multiple tools are available but only one is needed to address the query, verify that no unnecessary tool calls are made.", "content": "Avoid overcomplicating the solution by calling additional functions beyond what is strictly required to fulfill the user’s request.", "score": 0.0, "time_created": "2025-08-04 07:43:55", "time_modified": "2025-08-04 07:43:55", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:43:55", "modified_time": "2025-08-04 07:43:55", "extra_info": {"tags": ["tool_efficiency", "error_prevention", "focus"], "confidence": 0.8, "step_type": "decision", "tools_used": ["get_account_info", "fund_account", "make_transaction"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "5b10a71ed7b746c29b277b33b39fcdef", "memory_type": "task", "when_to_use": "When searching for files or subdirectories with a specific keyword and then performing operations on the found items.", "content": "The sequence began with using the 'find' function to locate all files or subdirectories containing the keyword 'draft'. After identifying the correct file ('summary_draft.docx'), the user navigated into the directory where the file was located using 'cd', ensuring they were in the right context for further operations. Finally, the 'cp' function successfully copied and renamed the file. This step pattern is effective because it ensures proper navigation and context before attempting file operations, reducing errors from incorrect paths.", "score": 0.0, "time_created": "2025-08-04 07:44:12", "time_modified": "2025-08-04 07:44:12", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:12", "modified_time": "2025-08-04 07:44:12", "extra_info": {"tags": ["file_search", "directory_navigation", "file_operations"], "confidence": 0.9, "step_type": "action", "tools_used": ["find", "cd", "cp"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "c7cbec82eb2345319fcf52bcc975a878", "memory_type": "task", "when_to_use": "When encountering a 'file not found' error during file operations.", "content": "After receiving an error that the file 'summary_draft.docx' could not be found, the user identified that they were likely in the wrong directory. By using 'cd' to navigate into the correct directory ('ResearchDocs') and verifying their location, they resolved the issue and successfully completed the copy operation. This highlights the importance of confirming the current working directory and adjusting accordingly when errors arise.", "score": 0.0, "time_created": "2025-08-04 07:44:12", "time_modified": "2025-08-04 07:44:12", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:12", "modified_time": "2025-08-04 07:44:12", "extra_info": {"tags": ["error_handling", "directory_verification", "file_not_found"], "confidence": 0.85, "step_type": "decision", "tools_used": ["cd", "cp"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "ba7a9570bc12492da6e3b086ad34c6b8", "memory_type": "task", "when_to_use": "When navigating directories and needing to copy or move files between different levels of the directory structure.", "content": "Always confirm the current working directory before executing file operations like 'cp' or 'mv'. If the source or destination is not in the current directory, use 'cd' to navigate appropriately. Misalignment between the current directory and intended paths can lead to incorrect actions or errors.", "score": 0.0, "time_created": "2025-08-04 07:44:13", "time_modified": "2025-08-04 07:44:13", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:13", "modified_time": "2025-08-04 07:44:13", "extra_info": {"tags": ["error_prevention", "directory_navigation", "file_operations"], "confidence": 0.9, "step_type": "reasoning", "tools_used": ["cd", "cp", "mv"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "aaae646b3a8644fb92c0934832c87e5c", "memory_type": "task", "when_to_use": "When copying or moving files to a specific directory that isn’t the current working directory.", "content": "If tools like 'cp' or 'mv' do not support specifying full paths for source and destination, ensure you first navigate to the appropriate directory using 'cd'. This avoids issues where the tool cannot locate files due to path restrictions.", "score": 0.0, "time_created": "2025-08-04 07:44:13", "time_modified": "2025-08-04 07:44:13", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:13", "modified_time": "2025-08-04 07:44:13", "extra_info": {"tags": ["error_prevention", "file_operations", "directory_structure"], "confidence": 0.85, "step_type": "action", "tools_used": ["cd", "cp"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "778c479b85aa4a71bb45632943d59db1", "memory_type": "task", "when_to_use": "When attempting to cancel or modify a ticket in the ticketing system without sufficient information.", "content": "Always confirm and retrieve necessary identifiers (e.g., ticket ID) before initiating operations like closing or resolving tickets. Missing identifiers can lead to incomplete actions or user confusion.", "score": 0.0, "time_created": "2025-08-04 07:44:24", "time_modified": "2025-08-04 07:44:24", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:24", "modified_time": "2025-08-04 07:44:24", "extra_info": {"tags": ["error_prevention", "failure_analysis", "ticket_management"], "confidence": 0.9, "step_type": "reasoning", "tools_used": ["close_ticket", "get_ticket"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "b53313f0cfb54b3ca1cee78b462747ee", "memory_type": "task", "when_to_use": "When handling requests that involve multiple systems or tools with overlapping functionalities.", "content": "Clarify whether the task pertains to one system or another, especially when similar terms (e.g., 'ticket' vs. 'booking') might cause misinterpretation. Cross-check tool parameters to ensure alignment with user intent.", "score": 0.0, "time_created": "2025-08-04 07:44:24", "time_modified": "2025-08-04 07:44:24", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:24", "modified_time": "2025-08-04 07:44:24", "extra_info": {"tags": ["error_prevention", "failure_analysis", "system_clarity"], "confidence": 0.85, "step_type": "decision", "tools_used": ["book_flight", "close_ticket"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "4593a85c9a254e6fad4dc6e410ab6536", "memory_type": "task", "when_to_use": "When attempting to cancel a booking or ticket, ensure the correct function and parameters are used.", "content": "Misidentification of tools can lead to incorrect actions. Always verify whether the user is referring to a booking cancellation or a ticket closure, as they may require different functions ('cancel_booking' vs. 'close_ticket').", "score": 0.0, "time_created": "2025-08-04 07:44:22", "time_modified": "2025-08-04 07:44:22", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:22", "modified_time": "2025-08-04 07:44:22", "extra_info": {"tags": ["error_prevention", "failure_analysis", "tool_verification"], "confidence": 0.9, "step_type": "decision", "tools_used": ["cancel_booking", "close_ticket"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "8f0a15dc3a2c421a90ec14d34472ea1b", "memory_type": "task", "when_to_use": "When a required parameter is missing for an action (e.g., ticket ID), prompt the user immediately for clarification.", "content": "Incomplete information leads to execution failure. Always confirm all necessary inputs before proceeding with API calls to avoid unnecessary errors.", "score": 0.0, "time_created": "2025-08-04 07:44:22", "time_modified": "2025-08-04 07:44:22", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:22", "modified_time": "2025-08-04 07:44:22", "extra_info": {"tags": ["error_prevention", "input_validation", "parameter_check"], "confidence": 0.85, "step_type": "reasoning", "tools_used": []}}} -{"workspace_id": "bfcl_v1", "memory_id": "185950e8df5843898253c98f813c3fe4", "memory_type": "task", "when_to_use": "When encountering repeated errors in API calls due to unexpected arguments, cross-check documentation to ensure correct usage.", "content": "Errors like 'unexpected keyword argument' often stem from mismatched parameter names. Regularly refer to tool documentation during planning to align function calls with expected syntax.", "score": 0.0, "time_created": "2025-08-04 07:44:22", "time_modified": "2025-08-04 07:44:22", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:22", "modified_time": "2025-08-04 07:44:22", "extra_info": {"tags": ["error_prevention", "api_usage", "documentation_check"], "confidence": 0.8, "step_type": "action", "tools_used": ["book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "7472d4766c2444f1b82d5e113c232f73", "memory_type": "task", "when_to_use": "When the vehicle's fuel level is below a critical threshold and requires refueling before starting the engine.", "content": "The agent successfully checked the fuel level, added double the required amount to ensure sufficient fuel was available, and then proceeded to start the engine. This approach ensures that there is enough fuel for immediate departure while avoiding further interruptions due to low fuel.", "score": 0.0, "time_created": "2025-08-04 07:44:27", "time_modified": "2025-08-04 07:44:27", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:27", "modified_time": "2025-08-04 07:44:27", "extra_info": {"tags": ["fuel_management", "vehicle_preparation", "engine_start"], "confidence": 0.9, "step_type": "action", "tools_used": ["displayCarStatus", "fillFuelTank", "startEngine"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "a9127c0704c64166bd4f2cf7f24d8d9e", "memory_type": "task", "when_to_use": "When encountering safety interlocks (e.g., unlocked doors or unpressed brake pedal) preventing engine ignition.", "content": "The agent identified that the engine could not be started due to safety constraints (unlocked doors and unpressed brake pedal). It methodically locked all doors and pressed the brake pedal fully before retrying the engine start. This sequential resolution of interlocks ensured compliance with safety protocols and allowed the engine to start without errors.", "score": 0.0, "time_created": "2025-08-04 07:44:27", "time_modified": "2025-08-04 07:44:27", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:27", "modified_time": "2025-08-04 07:44:27", "extra_info": {"tags": ["safety_protocol", "interlock_resolution", "engine_start"], "confidence": 0.85, "step_type": "decision", "tools_used": ["lockDoors", "pressBrakePedal", "startEngine"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "e8da39c1dcf645518b971aacb58590d9", "memory_type": "task", "when_to_use": "When handling multiple tasks or requests in a single interaction, especially where tools have overlapping functionality.", "content": "Ensure that each tool call aligns with the user's explicit intent and context. Avoid introducing unrelated actions unless explicitly requested by the user.", "score": 0.0, "time_created": "2025-08-04 07:44:31", "time_modified": "2025-08-04 07:44:31", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:31", "modified_time": "2025-08-04 07:44:31", "extra_info": {"tags": ["error_prevention", "context_management", "tool_usage"], "confidence": 0.9, "step_type": "action", "tools_used": ["check_tire_pressure", "create_ticket", "resolve_ticket"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "291bcf8655404147ae7c68b62d517c94", "memory_type": "task", "when_to_use": "When resolving tickets or closing issues based on user feedback.", "content": "Always confirm the exact resolution message or status update required by the user before executing the resolution step to avoid misalignment.", "score": 0.0, "time_created": "2025-08-04 07:44:31", "time_modified": "2025-08-04 07:44:31", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:31", "modified_time": "2025-08-04 07:44:31", "extra_info": {"tags": ["error_prevention", "ticket_management", "user_confirmation"], "confidence": 0.85, "step_type": "decision", "tools_used": ["resolve_ticket"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "8bbe667c459348bdae39f6ebf33fe3c4", "memory_type": "task", "when_to_use": "When switching between different domains of tools (e.g., vehicle-related vs. travel-related tools).", "content": "Maintain focus on the primary domain of the user query and avoid unnecessary transitions to unrelated toolsets without clear user direction.", "score": 0.0, "time_created": "2025-08-04 07:44:31", "time_modified": "2025-08-04 07:44:31", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:31", "modified_time": "2025-08-04 07:44:31", "extra_info": {"tags": ["error_prevention", "domain_focus", "task_relevance"], "confidence": 0.8, "step_type": "reasoning", "tools_used": ["all_tools_in_sequence"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "58f1a080550d4110a1d63cc9f2259da0", "memory_type": "task", "when_to_use": "When the user requests to cancel a previously placed order and confirmation of the cancellation is required.", "content": "The agent successfully identified the need to cancel an order based on the user’s request. It executed the 'cancel_order' function with the correct order ID and confirmed the cancellation status using the response data. This approach ensures the action aligns with the user's intent and provides immediate feedback, enhancing trust and clarity.", "score": 0.0, "time_created": "2025-08-04 07:44:25", "time_modified": "2025-08-04 07:44:25", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:25", "modified_time": "2025-08-04 07:44:25", "extra_info": {"tags": ["order management", "cancellation", "user confirmation"], "confidence": 0.9, "step_type": "action", "tools_used": ["cancel_order"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "5cd8216f3cc2454c924fa08dd58d6d26", "memory_type": "task", "when_to_use": "When handling sequential stock trading actions, such as placing and subsequently canceling orders.", "content": "The agent demonstrated effective sequencing by first retrieving stock details, placing an order, and later canceling it upon user request. Each step was executed in logical order, ensuring alignment with market dynamics and user preferences. This pattern helps maintain flexibility and responsiveness in volatile scenarios.", "score": 0.0, "time_created": "2025-08-04 07:44:25", "time_modified": "2025-08-04 07:44:25", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:25", "modified_time": "2025-08-04 07:44:25", "extra_info": {"tags": ["stock trading", "sequential actions", "adaptability"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["get_stock_info", "place_order", "cancel_order"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "352ae61d68e94ad7aeea8c1284afdae0", "memory_type": "task", "when_to_use": "When attempting to execute a stock trade, ensure that the correct tools and functions are available before proceeding with order placement.", "content": "The absence of crucial stock trading tools like `get_stock_info`, `place_order`, or `cancel_order` led to an incomplete execution flow. Always confirm that all required functions for a task exist within the provided toolset.", "score": 0.0, "time_created": "2025-08-04 07:44:37", "time_modified": "2025-08-04 07:44:37", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:37", "modified_time": "2025-08-04 07:44:37", "extra_info": {"tags": ["error_prevention", "failure_analysis", "tool_availability"], "confidence": 0.9, "step_type": "action", "tools_used": ["get_stock_info", "place_order", "cancel_order"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "1a473cc19c544744b637606ac07053c8", "memory_type": "task", "when_to_use": "When designing workflows involving multi-step actions (e.g., placing and canceling orders), validate each step's dependencies and potential missing links beforehand.", "content": "A recurring issue was reliance on non-existent or improperly mapped functions during essential steps, causing disruptions in logical flow. Ensure every function call corresponds accurately to documented capabilities.", "score": 0.0, "time_created": "2025-08-04 07:44:37", "time_modified": "2025-08-04 07:44:37", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:37", "modified_time": "2025-08-04 07:44:37", "extra_info": {"tags": ["workflow_design", "dependency_check", "function_mapping"], "confidence": 0.85, "step_type": "reasoning", "tools_used": []}}} -{"workspace_id": "bfcl_v1", "memory_id": "d418208c153a474aa86e7aaf03fde67d", "memory_type": "task", "when_to_use": "During decision-making steps where external conditions change rapidly (like market dynamics), consider fallback strategies if primary actions cannot be completed.", "content": "In cases where users decide to reverse their initial intent (e.g., canceling an order due to shifting market conditions), having contingency plans ensures smoother transitions without abrupt failures.", "score": 0.0, "time_created": "2025-08-04 07:44:37", "time_modified": "2025-08-04 07:44:37", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:37", "modified_time": "2025-08-04 07:44:37", "extra_info": {"tags": ["contingency_planning", "dynamic_conditions", "decision_making"], "confidence": 0.8, "step_type": "decision", "tools_used": ["cancel_order"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "cc51cb59fad548db95a0bdc7f46d3168", "memory_type": "task", "when_to_use": "When starting a vehicle and encountering an error due to safety mechanisms like the brake pedal not being pressed.", "content": "The agent first attempted to start the engine but received an error indicating that the brake pedal needed to be pressed. The agent then correctly identified and executed the necessary step of pressing the brake pedal before retrying to start the engine, which led to a successful outcome.", "score": 0.0, "time_created": "2025-08-04 07:44:38", "time_modified": "2025-08-04 07:44:38", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:38", "modified_time": "2025-08-04 07:44:38", "extra_info": {"tags": ["vehicle-start", "error-handling", "safety-mechanisms"], "confidence": 0.9, "step_type": "action", "tools_used": ["startEngine", "pressBrakePedal"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "929343df28c3437f91dea75b822db271", "memory_type": "task", "when_to_use": "When communicating results or updates to another user after completing a task.", "content": "After successfully computing the distance between two cities, the agent relayed the information to the specified colleague (Emma) using her user ID. This ensured clear communication and proper documentation of the shared information.", "score": 0.0, "time_created": "2025-08-04 07:44:38", "time_modified": "2025-08-04 07:44:38", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:38", "modified_time": "2025-08-04 07:44:38", "extra_info": {"tags": ["communication", "user-interaction", "message-sending"], "confidence": 0.85, "step_type": "action", "tools_used": ["get_user_id", "send_message"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "79635d5d82274747bc58ec0ce34963bc", "memory_type": "task", "when_to_use": "When attempting to start an engine and the initial attempt fails due to missing prerequisites like pressing the brake pedal.", "content": "Always verify all preconditions for a task before execution, especially when dealing with systems that have interdependent components (e.g., vehicle systems requiring brake engagement).", "score": 0.0, "time_created": "2025-08-04 07:44:32", "time_modified": "2025-08-04 07:44:32", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:32", "modified_time": "2025-08-04 07:44:32", "extra_info": {"tags": ["error_prevention", "failure_analysis", "engine_start", "vehicle_systems"], "confidence": 0.9, "step_type": "action", "tools_used": ["startEngine", "pressBrakePedal"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "987b439036b44ffa8c565a5af615a8c6", "memory_type": "task", "when_to_use": "When managing multiple tools or APIs to complete complex workflows involving user-specific data.", "content": "Ensure clarity in distinguishing between self-referential actions (e.g., messages sent to oneself) and external interactions to avoid confusion during result presentation.", "score": 0.0, "time_created": "2025-08-04 07:44:32", "time_modified": "2025-08-04 07:44:32", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:32", "modified_time": "2025-08-04 07:44:32", "extra_info": {"tags": ["workflow_management", "user_data", "message_handling"], "confidence": 0.8, "step_type": "reasoning", "tools_used": ["view_messages_sent"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "24070309e5d64bdea476b81e87452947", "memory_type": "task", "when_to_use": "When booking a flight and additional services (e.g., insurance) using the same payment method, ensure all required parameters are validated before invoking subsequent API calls.", "content": "The agent successfully booked a flight by first validating the cost using 'get_flight_cost' and then calling 'book_flight'. For the insurance purchase, the agent reused the same credit card and access token while ensuring all required parameters were included for 'purchase_insurance'. This step pattern ensures continuity and avoids errors due to missing arguments.", "score": 0.0, "time_created": "2025-08-04 07:44:43", "time_modified": "2025-08-04 07:44:43", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:43", "modified_time": "2025-08-04 07:44:43", "extra_info": {"tags": ["flight_booking", "insurance_purchase", "payment_validation"], "confidence": 0.9, "step_type": "action", "tools_used": ["get_flight_cost", "book_flight", "purchase_insurance"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "7887e5ca014a4e75ac4623b73b72f666", "memory_type": "task", "when_to_use": "When encountering an unexpected keyword argument error during an API call, use a related function to fetch missing data dynamically.", "content": "In the initial attempt to book the flight, the agent encountered an error due to the unexpected keyword 'travel_cost'. Instead of failing, the agent used 'get_flight_cost' to fetch the correct cost dynamically and then retried the booking with accurate parameters. This approach demonstrates adaptability and robust error handling.", "score": 0.0, "time_created": "2025-08-04 07:44:43", "time_modified": "2025-08-04 07:44:43", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:43", "modified_time": "2025-08-04 07:44:43", "extra_info": {"tags": ["error_handling", "dynamic_data_fetching", "API_call"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["get_flight_cost", "book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "12d94dbde4cf4c88a7088cae9a569b1f", "memory_type": "task", "when_to_use": "When interacting with APIs where the function signature is not fully understood or documented.", "content": "Always verify the exact parameter names and requirements of an API function before invoking it to avoid unexpected keyword argument errors.", "score": 0.0, "time_created": "2025-08-04 07:44:38", "time_modified": "2025-08-04 07:44:38", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:38", "modified_time": "2025-08-04 07:44:38", "extra_info": {"tags": ["error_prevention", "api_usage", "parameter_validation"], "confidence": 0.9, "step_type": "action", "tools_used": ["book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "0692ad78970143b1a53f8fdebbbeaad9", "memory_type": "task", "when_to_use": "When a previous step in a sequence fails, but subsequent steps depend on its output.", "content": "Before proceeding with dependent tasks (e.g., purchasing insurance), ensure all prerequisite actions (e.g., flight booking) were successful and necessary outputs (e.g., booking_id) are available.", "score": 0.0, "time_created": "2025-08-04 07:44:38", "time_modified": "2025-08-04 07:44:38", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:38", "modified_time": "2025-08-04 07:44:38", "extra_info": {"tags": ["error_prevention", "dependency_management", "failure_analysis"], "confidence": 0.85, "step_type": "decision", "tools_used": ["purchase_insurance", "book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "9b29858ceb2643bf86d9a32d56bb4559", "memory_type": "task", "when_to_use": "When the user requests a specific action requiring unit conversion (e.g., liters to gallons) before proceeding.", "content": "The agent first converted the requested amount from liters to gallons using a dedicated tool, then executed the subsequent action (filling the fuel tank) with precision. This ensured accuracy and alignment with the user's request while maintaining clarity in communication.", "score": 0.0, "time_created": "2025-08-04 07:44:58", "time_modified": "2025-08-04 07:44:58", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:58", "modified_time": "2025-08-04 07:44:58", "extra_info": {"tags": ["unit_conversion", "sequential_action", "precision"], "confidence": 0.9, "step_type": "action", "tools_used": ["liter_to_gallon", "fillFuelTank"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "1513104db26a4b4cb19b40e2a1fe1980", "memory_type": "task", "when_to_use": "When encountering interdependent preconditions for an action (e.g., starting a car engine requires locked doors and pressed brake).", "content": "The agent identified and addressed each precondition sequentially by locking doors and pressing the brake pedal before attempting to start the engine. This methodical approach ensured all requirements were met, preventing errors and enhancing user satisfaction.", "score": 0.0, "time_created": "2025-08-04 07:44:58", "time_modified": "2025-08-04 07:44:58", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:58", "modified_time": "2025-08-04 07:44:58", "extra_info": {"tags": ["preconditions", "sequential_dependencies", "error_prevention"], "confidence": 0.85, "step_type": "decision", "tools_used": ["lockDoors", "pressBrakePedal", "startEngine"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "23de5c7707b34bd29cc5fc6026a5aebe", "memory_type": "task", "when_to_use": "When investigating potential causes of a reported issue (e.g., vibration during driving).", "content": "The agent checked tire pressure as a plausible cause of the vibration, analyzed the results, and provided both immediate feedback and additional suggestions (e.g., wheel balance or alignment). This holistic approach reassured the user and guided further troubleshooting if needed.", "score": 0.0, "time_created": "2025-08-04 07:44:58", "time_modified": "2025-08-04 07:44:58", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:58", "modified_time": "2025-08-04 07:44:58", "extra_info": {"tags": ["diagnostics", "root_cause_analysis", "user_reassurance"], "confidence": 0.8, "step_type": "reasoning", "tools_used": ["check_tire_pressure"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "44363cb5669849398feab8f20bae6dab", "memory_type": "task", "when_to_use": "When handling vehicle operations that require multiple preconditions (e.g., starting the engine), ensure all prerequisites are met before proceeding.", "content": "Always verify and address any system constraints or requirements, such as locked doors, before executing actions like engine ignition to avoid cascading errors.", "score": 0.0, "time_created": "2025-08-04 07:44:57", "time_modified": "2025-08-04 07:44:57", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:57", "modified_time": "2025-08-04 07:44:57", "extra_info": {"tags": ["error_prevention", "failure_analysis", "vehicle_operations"], "confidence": 0.9, "step_type": "reasoning", "tools_used": ["startEngine", "lockDoors"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "389f231d3c994576aa24ed6c356ebe50", "memory_type": "task", "when_to_use": "When addressing user concerns about potential mechanical issues (e.g., vibrations) after completing a task (e.g., refueling).", "content": "Before attributing symptoms to one cause (e.g., tire pressure), systematically evaluate other possible factors and cross-check with available diagnostics to provide comprehensive feedback.", "score": 0.0, "time_created": "2025-08-04 07:44:57", "time_modified": "2025-08-04 07:44:57", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:57", "modified_time": "2025-08-04 07:44:57", "extra_info": {"tags": ["error_prevention", "failure_analysis", "diagnostics"], "confidence": 0.8, "step_type": "decision", "tools_used": ["check_tire_pressure"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "bd8fc7d3beba41bbadde040d0d07f3dc", "memory_type": "task", "when_to_use": "When deleting a directory and its contents, but lacking tools to list or iterate through files.", "content": "If the function description does not explicitly confirm recursive deletion of non-empty directories, assume it cannot. Attempting such operations without confirmation can lead to incomplete tasks or unexpected errors.", "score": 0.0, "time_created": "2025-08-04 07:44:51", "time_modified": "2025-08-04 07:44:51", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:51", "modified_time": "2025-08-04 07:44:51", "extra_info": {"tags": ["error_prevention", "failure_analysis", "directory_deletion"], "confidence": 0.85, "step_type": "action", "tools_used": ["rm"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "68aa94cca9994bdf95ae2cde5e6cee25", "memory_type": "task", "when_to_use": "When the task involves multiple dependent actions (e.g., deleting files before deleting a directory) but available tools don't support listing items.", "content": "In cases where intermediate steps cannot be executed due to missing functionality, re-evaluate whether the task can be completed with the given toolset. Communicate limitations to the user early to avoid unmet expectations.", "score": 0.0, "time_created": "2025-08-04 07:44:51", "time_modified": "2025-08-04 07:44:51", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:51", "modified_time": "2025-08-04 07:44:51", "extra_info": {"tags": ["error_prevention", "tool_limitations", "task_dependency"], "confidence": 0.8, "step_type": "reasoning", "tools_used": []}}} -{"workspace_id": "bfcl_v1", "memory_id": "8aa92a2f40ea4cadb464420bdb0a26dd", "memory_type": "task", "when_to_use": "When deleting a directory and its contents, but the tools available do not explicitly support recursive deletion.", "content": "Ensure that the tool's functionality matches the intended operation. If the tool description does not clearly specify whether a function can handle recursive deletions, consider breaking down the task into smaller steps (e.g., listing files first, then deleting them individually) to avoid potential failures.", "score": 0.0, "time_created": "2025-08-04 07:45:05", "time_modified": "2025-08-04 07:45:05", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:05", "modified_time": "2025-08-04 07:45:05", "extra_info": {"tags": ["error_prevention", "failure_analysis", "directory_deletion"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["rm", "find", "ls"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "b714ae10e79e4feb91d0cef215de39fb", "memory_type": "task", "when_to_use": "When relying on ambiguous or incomplete tool documentation for critical operations such as file system manipulations.", "content": "Always validate assumptions about tool behavior by checking whether the provided functions are capable of performing complex tasks like recursive directory deletion. When in doubt, use alternative approaches that guarantee step-by-step execution rather than assuming implicit functionality.", "score": 0.0, "time_created": "2025-08-04 07:45:05", "time_modified": "2025-08-04 07:45:05", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:05", "modified_time": "2025-08-04 07:45:05", "extra_info": {"tags": ["tool_validation", "failure_analysis", "ambiguous_documentation"], "confidence": 0.8, "step_type": "decision", "tools_used": ["rm"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "43edcd4a7de94448b1d56591818790da", "memory_type": "task", "when_to_use": "When needing to assess and update ticket priority based on external file metrics.", "content": "The sequence involved checking the character count of relevant files, then updating the ticket's priority accordingly. This ensures that decisions about task urgency are data-driven and tied directly to measurable criteria (e.g., file size).", "score": 0.0, "time_created": "2025-08-04 07:45:06", "time_modified": "2025-08-04 07:45:06", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:06", "modified_time": "2025-08-04 07:45:06", "extra_info": {"tags": ["ticket-management", "file-analysis", "priority-setting"], "confidence": 0.9, "step_type": "decision", "tools_used": ["get_ticket", "edit_ticket", "wc"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "a0f17fbf45e24172806e55ced4519516", "memory_type": "task", "when_to_use": "When navigating directories and searching for specific files with certain naming patterns.", "content": "The agent successfully navigated into a directory ('test') and identified all files containing 'test' in their names using appropriate commands like 'ls' and 'find'. This approach is efficient for targeted file discovery in nested folder structures.", "score": 0.0, "time_created": "2025-08-04 07:45:06", "time_modified": "2025-08-04 07:45:06", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:06", "modified_time": "2025-08-04 07:45:06", "extra_info": {"tags": ["file-navigation", "directory-traversal", "file-search"], "confidence": 0.85, "step_type": "action", "tools_used": ["ls", "cd", "find"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "3ca0ad30087f40f980eaca3d9cb37ee2", "memory_type": "task", "when_to_use": "When handling ambiguous user instructions that involve multiple steps or conditions.", "content": "Break down multi-part tasks into explicit, sequential sub-tasks and verify each condition before proceeding to the next step. Ambiguity in interpreting 'any' or 'all' can lead to incorrect conclusions.", "score": 0.0, "time_created": "2025-08-04 07:45:03", "time_modified": "2025-08-04 07:45:03", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:03", "modified_time": "2025-08-04 07:45:03", "extra_info": {"tags": ["error_prevention", "failure_analysis", "task_breakdown"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["get_ticket", "wc", "edit_ticket"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "2a8e8825538441c3916fad1e7cdda5f9", "memory_type": "task", "when_to_use": "When needing to update system parameters (e.g., ticket priority) based on external data checks (e.g., file counts, character counts).", "content": "Always validate all relevant data points before making updates to avoid premature or incorrect actions. Ensure all necessary information is gathered before modifying system states.", "score": 0.0, "time_created": "2025-08-04 07:45:03", "time_modified": "2025-08-04 07:45:03", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:03", "modified_time": "2025-08-04 07:45:03", "extra_info": {"tags": ["error_prevention", "data_validation", "system_updates"], "confidence": 0.8, "step_type": "decision", "tools_used": ["wc", "edit_ticket"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "bfb10105da17441c8152de8a70fddfc2", "memory_type": "task", "when_to_use": "When a user needs to delete the latest message sent to a specific receiver but encounters an error due to incorrect parameter usage.", "content": "After identifying that the function does not accept 'message_id' as a parameter, calling delete_message with only the receiver_id successfully deleted the latest message. This highlights the importance of aligning function calls with actual API parameter requirements rather than relying solely on documentation.", "score": 0.0, "time_created": "2025-08-04 07:44:54", "time_modified": "2025-08-04 07:44:54", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:54", "modified_time": "2025-08-04 07:44:54", "extra_info": {"tags": ["error handling", "parameter mismatch", "message deletion"], "confidence": 0.9, "step_type": "action", "tools_used": ["delete_message"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "f55c7e8c99c445bb9066b7daa53f78a8", "memory_type": "task", "when_to_use": "When troubleshooting unexpected keyword argument errors in API calls.", "content": "Upon encountering an error about an unexpected keyword argument ('message_id'), re-evaluating the function's actual implementation and adjusting the call to exclude the problematic parameter resolved the issue. This demonstrates the utility of iterative testing and refining tool usage based on runtime feedback.", "score": 0.0, "time_created": "2025-08-04 07:44:54", "time_modified": "2025-08-04 07:44:54", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:44:54", "modified_time": "2025-08-04 07:44:54", "extra_info": {"tags": ["API debugging", "runtime error", "parameter refinement"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["delete_message"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "241ba560aab4467885cf3dab66d66ae5", "memory_type": "task", "when_to_use": "When attempting to delete a message using the `delete_message` function and encountering unexpected keyword argument errors.", "content": "Verify that all parameters passed to a function match its expected signature. If an error persists despite correct usage, reassess whether the tool's documentation accurately reflects its implementation or if alternative methods exist for achieving the desired outcome.", "score": 0.0, "time_created": "2025-08-04 07:45:08", "time_modified": "2025-08-04 07:45:08", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:08", "modified_time": "2025-08-04 07:45:08", "extra_info": {"tags": ["error_prevention", "failure_analysis", "parameter_validation"], "confidence": 0.85, "step_type": "action", "tools_used": ["delete_message"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "6a822f5ff86a43af85b9b32fe7fbb05d", "memory_type": "task", "when_to_use": "When a tool fails due to mismatched parameter expectations (e.g., positional vs. keyword arguments).", "content": "Cross-check the actual function implementation against its documented interface. If discrepancies are found, adapt the call format accordingly or escalate the issue for clarification/documentation updates.", "score": 0.0, "time_created": "2025-08-04 07:45:08", "time_modified": "2025-08-04 07:45:08", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:08", "modified_time": "2025-08-04 07:45:08", "extra_info": {"tags": ["tool_misuse", "implementation_discrepancy", "debugging"], "confidence": 0.8, "step_type": "reasoning", "tools_used": ["delete_message"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "118ad6ab472b421bac3d98afb922194f", "memory_type": "task", "when_to_use": "When critical actions like deleting messages fail repeatedly, explore fallback strategies such as manual communication with stakeholders.", "content": "In cases where automated tools cannot resolve issues, consider human intervention or alternate workflows to mitigate potential impacts on user goals.", "score": 0.0, "time_created": "2025-08-04 07:45:08", "time_modified": "2025-08-04 07:45:08", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:08", "modified_time": "2025-08-04 07:45:08", "extra_info": {"tags": ["fallback_strategy", "user_communication", "workflow_adaptation"], "confidence": 0.75, "step_type": "decision", "tools_used": []}}} -{"workspace_id": "bfcl_v1", "memory_id": "c32bbf1afac7454ba24b0a31c00d696f", "memory_type": "task", "when_to_use": "When ensuring vehicle readiness for a journey, especially involving tire pressure checks and adjustments.", "content": "The agent first checked the tire pressure using 'check_tire_pressure'. Upon identifying that the rear tires were under the optimal threshold of 30.0 psi, it located the nearest tire shop with 'find_nearest_tire_shop' and set navigation to the shop using 'set_navigation'. This ensured the user could address the issue promptly.", "score": 0.0, "time_created": "2025-08-04 07:45:26", "time_modified": "2025-08-04 07:45:26", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:26", "modified_time": "2025-08-04 07:45:26", "extra_info": {"tags": ["vehicle-readiness", "tire-pressure", "navigation"], "confidence": 0.9, "step_type": "action", "tools_used": ["check_tire_pressure", "find_nearest_tire_shop", "set_navigation"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "e28b83d61d464ff999f6dc1520324840", "memory_type": "task", "when_to_use": "When preparing to start the engine but encountering sequential preconditions like locking doors and pressing the brake pedal.", "content": "The agent attempted to start the engine using 'startEngine', but encountered an error indicating the doors needed to be locked. It used 'lockDoors' to secure all doors, then handled another error about the brake pedal by engaging 'pressBrakePedal'. After these steps, the engine started successfully. This highlights the importance of addressing all safety protocols sequentially.", "score": 0.0, "time_created": "2025-08-04 07:45:26", "time_modified": "2025-08-04 07:45:26", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:26", "modified_time": "2025-08-04 07:45:26", "extra_info": {"tags": ["engine-start", "safety-protocols", "sequential-actions"], "confidence": 0.85, "step_type": "decision", "tools_used": ["startEngine", "lockDoors", "pressBrakePedal"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "128a9732c2134c9282219fa36b30518b", "memory_type": "task", "when_to_use": "When refueling the vehicle and needing to convert fuel capacity into different units (e.g., gallons to liters).", "content": "After checking the fuel level with 'displayCarStatus', the agent filled the tank to its maximum capacity using 'fillFuelTank'. To provide additional information, it converted the fuel amount from gallons to liters using 'gallon_to_liter'. This provided a complete picture of the vehicle's fuel status in both units.", "score": 0.0, "time_created": "2025-08-04 07:45:26", "time_modified": "2025-08-04 07:45:26", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:26", "modified_time": "2025-08-04 07:45:26", "extra_info": {"tags": ["fuel-management", "unit-conversion", "vehicle-preparation"], "confidence": 0.8, "step_type": "action", "tools_used": ["displayCarStatus", "fillFuelTank", "gallon_to_liter"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "c6d6f9e475c444a69aea6a9e59992083", "memory_type": "task", "when_to_use": "When preparing to start the engine after ensuring all safety measures are addressed.", "content": "Always verify that all preconditions, such as locked doors and pressed brake pedals, are met before attempting to start the engine. Failure to do so will result in errors.", "score": 0.0, "time_created": "2025-08-04 07:45:24", "time_modified": "2025-08-04 07:45:24", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:24", "modified_time": "2025-08-04 07:45:24", "extra_info": {"tags": ["error_prevention", "failure_analysis", "engine_start"], "confidence": 0.9, "step_type": "action", "tools_used": ["startEngine", "lockDoors", "pressBrakePedal"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "42a52ca3dbe34b2d9e6ebca9ba0bf477", "memory_type": "task", "when_to_use": "When interpreting user intent for starting the engine after it has already been started.", "content": "Clarify whether restarting the engine is necessary if the user requests to 'ignite' or 'start' the car again. Confirm the current engine state to avoid redundant actions.", "score": 0.0, "time_created": "2025-08-04 07:45:24", "time_modified": "2025-08-04 07:45:24", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:24", "modified_time": "2025-08-04 07:45:24", "extra_info": {"tags": ["error_prevention", "user_intent", "redundant_actions"], "confidence": 0.8, "step_type": "decision", "tools_used": ["displayCarStatus", "startEngine"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "ab07c060ac74406ca3d6316f018a7ae0", "memory_type": "task", "when_to_use": "When managing sequential tasks involving multiple vehicle systems.", "content": "Ensure proper sequencing of operations by checking dependencies between tools (e.g., locking doors before starting the engine). Skipping steps can lead to cascading failures.", "score": 0.0, "time_created": "2025-08-04 07:45:24", "time_modified": "2025-08-04 07:45:24", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:24", "modified_time": "2025-08-04 07:45:24", "extra_info": {"tags": ["error_prevention", "task_sequencing", "dependencies"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["check_tire_pressure", "find_nearest_tire_shop", "set_navigation", "fillFuelTank"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "d1de161bf2194394b2833da280ba772a", "memory_type": "task", "when_to_use": "When handling multi-step tasks that require sequential preconditions to be met before reaching the primary goal.", "content": "The agent successfully navigated through a series of dependent actions, ensuring prerequisites such as locking doors and pressing the brake pedal were completed prior to starting the engine. This step-by-step validation ensured no errors occurred during execution and allowed for clear tracking of progress.", "score": 0.0, "time_created": "2025-08-04 07:45:28", "time_modified": "2025-08-04 07:45:28", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:28", "modified_time": "2025-08-04 07:45:28", "extra_info": {"tags": ["multi-step", "sequential-dependencies", "task-validation"], "confidence": 0.9, "step_type": "action", "tools_used": ["lockDoors", "pressBrakePedal", "startEngine"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "619493528f8a4ec8b934fb324cb04d78", "memory_type": "task", "when_to_use": "When needing to retrieve specific system statuses or configurations after completing an operation.", "content": "After successfully starting the engine, the agent retrieved detailed status information (e.g., battery voltage, fan speed) by using appropriate diagnostic functions. This approach ensures comprehensive reporting and meets user expectations effectively.", "score": 0.0, "time_created": "2025-08-04 07:45:28", "time_modified": "2025-08-04 07:45:28", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:28", "modified_time": "2025-08-04 07:45:28", "extra_info": {"tags": ["status-retrieval", "post-operation-checks", "detailed-reporting"], "confidence": 0.85, "step_type": "observation", "tools_used": ["displayCarStatus"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "f8b6063cd78444ecb55072e43b47bef3", "memory_type": "task", "when_to_use": "When the task involves multiple sequential actions that depend on preconditions or system states.", "content": "Always verify and address all prerequisites before attempting a key action, such as ensuring doors are locked and the brake pedal is pressed before starting an engine. Missing these steps can cause cascading failures.", "score": 0.0, "time_created": "2025-08-04 07:45:23", "time_modified": "2025-08-04 07:45:23", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:23", "modified_time": "2025-08-04 07:45:23", "extra_info": {"tags": ["error_prevention", "failure_analysis", "prerequisites"], "confidence": 0.9, "step_type": "reasoning", "tools_used": ["startEngine", "lockDoors", "pressBrakePedal"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "1c4ce70e193f4fa1aa39a69a9ed18aa3", "memory_type": "task", "when_to_use": "When converting between units of measurement for critical tasks like fuel refills.", "content": "Ensure conversions (e.g., liters to gallons) are handled accurately and rounded appropriately based on user requirements to avoid miscommunication or errors in subsequent steps.", "score": 0.0, "time_created": "2025-08-04 07:45:23", "time_modified": "2025-08-04 07:45:23", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:23", "modified_time": "2025-08-04 07:45:23", "extra_info": {"tags": ["error_prevention", "unit_conversion", "precision"], "confidence": 0.85, "step_type": "action", "tools_used": ["liter_to_gallon", "fillFuelTank"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "ce070005a2cd47c7945768481e8765c1", "memory_type": "task", "when_to_use": "When interpreting ambiguous terms in user requests (e.g., 'AC speed').", "content": "Clarify with the user or infer from available tools whether a term refers to a specific parameter (e.g., fanSpeed). Misinterpretation can lead to incomplete or incorrect responses.", "score": 0.0, "time_created": "2025-08-04 07:45:23", "time_modified": "2025-08-04 07:45:23", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:23", "modified_time": "2025-08-04 07:45:23", "extra_info": {"tags": ["error_prevention", "ambiguity_resolution", "user_communication"], "confidence": 0.8, "step_type": "decision", "tools_used": ["displayCarStatus"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "b1f560b2b281461686e5f8e9cb3225ce", "memory_type": "task", "when_to_use": "When navigating directories and encountering 'No such directory' errors despite expecting the directory to exist.", "content": "Always verify the current working directory using 'pwd' before attempting directory changes. Misaligned expectations about the current directory can lead to cascading failures in subsequent steps.", "score": 0.0, "time_created": "2025-08-04 07:45:36", "time_modified": "2025-08-04 07:45:36", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:36", "modified_time": "2025-08-04 07:45:36", "extra_info": {"tags": ["error_prevention", "directory_navigation", "current_working_directory"], "confidence": 0.9, "step_type": "reasoning", "tools_used": ["cd", "pwd"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "ba7c309163434e0c9ac6554e8ebd2118", "memory_type": "task", "when_to_use": "When moving files and receiving 'No such file or directory' errors, despite believing the file exists.", "content": "Before executing file operations, confirm the presence of the target file using 'ls' or 'find'. Missing files are a common cause of failure when the expected directory structure is incorrect or misaligned with the agent's assumptions.", "score": 0.0, "time_created": "2025-08-04 07:45:36", "time_modified": "2025-08-04 07:45:36", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:36", "modified_time": "2025-08-04 07:45:36", "extra_info": {"tags": ["error_prevention", "file_verification", "directory_structure"], "confidence": 0.85, "step_type": "action", "tools_used": ["mv", "ls", "find"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "456f5bd198e1419d9d0126d5dcb19674", "memory_type": "task", "when_to_use": "When attempting to perform operations on files located in subdirectories but encountering access issues.", "content": "Tool limitations often restrict operations to the current directory only. Ensure all necessary files are moved to or created in the current directory before performing operations like 'diff', 'grep', or 'sort'. Attempting cross-directory operations without confirming tool capabilities leads to predictable failures.", "score": 0.0, "time_created": "2025-08-04 07:45:36", "time_modified": "2025-08-04 07:45:36", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:36", "modified_time": "2025-08-04 07:45:36", "extra_info": {"tags": ["error_prevention", "tool_limitations", "file_operations"], "confidence": 0.8, "step_type": "decision", "tools_used": ["diff", "grep", "sort", "mv"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "e6e443ea1ab441aaac8545f7a3f72141", "memory_type": "task", "when_to_use": "When handling file operations such as moving files between directories, ensure the correct directory structure and current working directory are verified before executing commands.", "content": "Always confirm the current working directory and existence of target subdirectories to prevent 'file not found' or 'directory not found' errors during file operations.", "score": 0.0, "time_created": "2025-08-04 07:45:25", "time_modified": "2025-08-04 07:45:25", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:25", "modified_time": "2025-08-04 07:45:25", "extra_info": {"tags": ["error_prevention", "file_operations", "directory_structure"], "confidence": 0.9, "step_type": "action", "tools_used": ["mv", "cd"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "726e4dc189644ff78f91e6c410188b46", "memory_type": "task", "when_to_use": "When comparing files using tools like 'diff', ensure both files reside in the same directory or adjust the current working directory accordingly.", "content": "Comparison functions require files to be accessible in the current working directory; neglecting to change directories may lead to incorrect tool usage or errors.", "score": 0.0, "time_created": "2025-08-04 07:45:25", "time_modified": "2025-08-04 07:45:25", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:25", "modified_time": "2025-08-04 07:45:25", "extra_info": {"tags": ["error_prevention", "file_comparison", "working_directory"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["diff", "cd"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "ecae2a635962407394b7afc8b3cdb9b3", "memory_type": "task", "when_to_use": "When handling multi-step user requests involving external API calls with interdependent parameters.", "content": "The assistant successfully navigated a complex sequence of actions by first retrieving the flight cost using get_flight_cost, then proceeding to book the flight. Despite an unexpected error regarding the 'travel_cost' parameter during the initial booking attempt, the assistant adapted by omitting the parameter and successfully completed the booking. The cancellation and subsequent tweet posting were handled seamlessly. This demonstrates adaptability in addressing runtime errors while maintaining the logical flow of dependent steps.", "score": 0.0, "time_created": "2025-08-04 07:45:30", "time_modified": "2025-08-04 07:45:30", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:30", "modified_time": "2025-08-04 07:45:30", "extra_info": {"tags": ["multi-step", "API", "error-handling", "parameter-validation"], "confidence": 0.9, "step_type": "action", "tools_used": ["get_flight_cost", "book_flight", "cancel_booking", "authenticate_twitter", "post_tweet"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "7e5757a580ad419f963ce6a7feb80aca", "memory_type": "task", "when_to_use": "When encountering discrepancies between tool documentation and actual function behavior.", "content": "The assistant encountered an error where the documented required parameter 'travel_cost' was not accepted by the book_flight function. By analyzing the error and testing the function without the parameter, the assistant resolved the issue. This highlights the importance of validating tool behavior against documentation and adjusting dynamically when inconsistencies arise.", "score": 0.0, "time_created": "2025-08-04 07:45:30", "time_modified": "2025-08-04 07:45:30", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:30", "modified_time": "2025-08-04 07:45:30", "extra_info": {"tags": ["tool-discrepancy", "error-resolution", "dynamic-adjustment"], "confidence": 0.85, "step_type": "decision", "tools_used": ["book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "ebe3de32100d419bb917b623eef0c25b", "memory_type": "task", "when_to_use": "When handling multi-step tasks involving external tools where intermediate outputs are required for subsequent steps.", "content": "Always verify that all necessary parameters are provided or can be derived before initiating a sequence of actions. If a parameter like 'travel_cost' is missing, ensure there's a clear path to obtaining it (e.g., via a preceding function call).", "score": 0.0, "time_created": "2025-08-04 07:45:45", "time_modified": "2025-08-04 07:45:45", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:45", "modified_time": "2025-08-04 07:45:45", "extra_info": {"tags": ["error_prevention", "parameter_validation", "multi_step_tasks"], "confidence": 0.9, "step_type": "reasoning", "tools_used": ["get_flight_cost", "book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "8b2155633f144923a09fa20bee76017c", "memory_type": "task", "when_to_use": "When the user's request involves canceling an action they just requested, such as booking and then canceling a flight.", "content": "Ensure clarity in whether the initial action (booking) has already been executed before attempting its reversal (cancellation). If not explicitly stated, confirm with the user or proceed with caution by executing the booking first, capturing any required identifiers, and then performing the cancellation.", "score": 0.0, "time_created": "2025-08-04 07:45:45", "time_modified": "2025-08-04 07:45:45", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:45", "modified_time": "2025-08-04 07:45:45", "extra_info": {"tags": ["error_prevention", "action_reversal", "user_clarity"], "confidence": 0.8, "step_type": "decision", "tools_used": ["book_flight", "cancel_booking"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "346be39f92ae40a5bdba986787fa8233", "memory_type": "task", "when_to_use": "When integrating multiple external systems requiring authentication (e.g., Twitter and travel systems).", "content": "Prioritize authenticating each system before executing dependent functions. Ensure credentials are correctly passed and validated to avoid downstream failures during task execution.", "score": 0.0, "time_created": "2025-08-04 07:45:45", "time_modified": "2025-08-04 07:45:45", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:45", "modified_time": "2025-08-04 07:45:45", "extra_info": {"tags": ["authentication", "integration", "external_systems"], "confidence": 0.85, "step_type": "action", "tools_used": ["authenticate_twitter", "post_tweet"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "5c7b3386acae4f259a1ad888c3ad1550", "memory_type": "task", "when_to_use": "When needing to locate a specific file in a directory and extract relevant information from it.", "content": "The agent successfully navigated to the 'ResearchDocs' directory using `cd`, located the file 'report.csv' with `find`, then used `grep` to extract lines containing 'Quarterly Financial Overview'. This sequence demonstrates effective use of chaining commands to refine search results and focus on specific content within files, ensuring precision and efficiency.", "score": 0.0, "time_created": "2025-08-04 07:45:50", "time_modified": "2025-08-04 07:45:50", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:50", "modified_time": "2025-08-04 07:45:50", "extra_info": {"tags": ["file_search", "directory_navigation", "content_extraction"], "confidence": 0.9, "step_type": "action", "tools_used": ["cd", "find", "grep"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "a3c3569023764638bfa2abf145465914", "memory_type": "task", "when_to_use": "When required to add a new contact and send them a message after completing a task.", "content": "After locating and reviewing the necessary file, the agent logged in as USR001, added 'John Levy' as a new contact via `add_contact`, and subsequently sent him a message about the latest quarter's performance using `send_message`. This highlights the importance of correctly handling sequential dependencies (e.g., obtaining the receiver's user ID before sending a message) and maintaining clarity in multi-step workflows.", "score": 0.0, "time_created": "2025-08-04 07:45:50", "time_modified": "2025-08-04 07:45:50", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:50", "modified_time": "2025-08-04 07:45:50", "extra_info": {"tags": ["contact_management", "messaging", "task_completion"], "confidence": 0.85, "step_type": "action", "tools_used": ["message_login", "add_contact", "send_message"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "3e8466f6027840fd8a94eab1e4c88a88", "memory_type": "task", "when_to_use": "When chaining multiple dependent actions requiring output from previous steps (e.g., adding a contact and using their user ID).", "content": "Always validate that outputs from prior steps (such as user IDs) are correctly passed into subsequent actions to avoid mismatched or incorrect inputs.", "score": 0.0, "time_created": "2025-08-04 07:45:51", "time_modified": "2025-08-04 07:45:51", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:51", "modified_time": "2025-08-04 07:45:51", "extra_info": {"tags": ["error_prevention", "dependency_management", "input_validation"], "confidence": 0.9, "step_type": "action", "tools_used": ["add_contact", "send_message"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "173ac97e34dc4d999558a34e12cc2cfd", "memory_type": "task", "when_to_use": "When executing commands involving file navigation or content extraction, ensure proper tool selection based on the task requirements.", "content": "Ensure that tools like 'cd', 'find', 'grep', and 'tail' are used appropriately for directory navigation, file discovery, pattern matching, and line extraction respectively to prevent misaligned operations.", "score": 0.0, "time_created": "2025-08-04 07:45:51", "time_modified": "2025-08-04 07:45:51", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:51", "modified_time": "2025-08-04 07:45:51", "extra_info": {"tags": ["tool_usage", "command_structure", "file_operations"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["cd", "find", "grep", "tail"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "47e77d0fbdfb497c83c84fafb98e37b8", "memory_type": "task", "when_to_use": "When performing multi-step workflows with authentication dependencies (e.g., logging in before other actions).", "content": "Verify successful completion of prerequisite steps (like login status checks) before proceeding to dependent tasks to maintain workflow integrity.", "score": 0.0, "time_created": "2025-08-04 07:45:51", "time_modified": "2025-08-04 07:45:51", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:51", "modified_time": "2025-08-04 07:45:51", "extra_info": {"tags": ["authentication", "workflow_integrity", "step_dependencies"], "confidence": 0.8, "step_type": "decision", "tools_used": ["message_login", "add_contact"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "a1bde5e9164c49549dd1338557ffb09d", "memory_type": "task", "when_to_use": "When needing to compare two files and save the differences into a new file.", "content": "The agent first used 'diff' to identify line-by-line differences between two files. Then it utilized 'echo' to write those differences into a newly created file, ensuring proper formatting and preservation of newline characters. This sequential approach efficiently captures and stores file differences for further use.", "score": 0.0, "time_created": "2025-08-04 07:45:53", "time_modified": "2025-08-04 07:45:53", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:53", "modified_time": "2025-08-04 07:45:53", "extra_info": {"tags": ["file comparison", "difference extraction", "content writing"], "confidence": 0.9, "step_type": "action", "tools_used": ["diff", "echo"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "cc34f2cba6b7486f83dd7bdcc1ae3b7c", "memory_type": "task", "when_to_use": "When navigating directories and retrieving specific file content.", "content": "The agent successfully navigated to the target directory using 'cd', listed the contents with 'ls' to identify relevant files, and then used 'tail' to extract the last line from the specified file. This pattern ensures accurate navigation and retrieval of targeted file content.", "score": 0.0, "time_created": "2025-08-04 07:45:53", "time_modified": "2025-08-04 07:45:53", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:53", "modified_time": "2025-08-04 07:45:53", "extra_info": {"tags": ["directory navigation", "file listing", "content extraction"], "confidence": 0.85, "step_type": "action", "tools_used": ["cd", "ls", "tail"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "68b2f707e77448ea8e830c0843c7972c", "memory_type": "task", "when_to_use": "When navigating directories and interacting with files, ensure the correct file names are referenced based on the current working directory's content.", "content": "Always verify the current directory's contents using 'ls' or similar tools before performing operations on files to avoid referencing non-existent or incorrect files.", "score": 0.0, "time_created": "2025-08-04 07:45:53", "time_modified": "2025-08-04 07:45:53", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:53", "modified_time": "2025-08-04 07:45:53", "extra_info": {"tags": ["error_prevention", "failure_analysis", "file_operations"], "confidence": 0.9, "step_type": "reasoning", "tools_used": ["ls", "cd"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "25da03ce4e834920920372b9ffc8cf42", "memory_type": "task", "when_to_use": "When performing multi-step operations involving file creation or writing differences into a new file, validate intermediate outputs to ensure data integrity.", "content": "After each operation (e.g., diff), explicitly check its output before proceeding to dependent steps (e.g., echo) to prevent propagating errors or missing data.", "score": 0.0, "time_created": "2025-08-04 07:45:53", "time_modified": "2025-08-04 07:45:53", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:53", "modified_time": "2025-08-04 07:45:53", "extra_info": {"tags": ["error_prevention", "failure_analysis", "data_integrity"], "confidence": 0.85, "step_type": "observation", "tools_used": ["diff", "echo"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "1cba55bfc23c452bb5acf19f5db047a3", "memory_type": "task", "when_to_use": "When handling multiple API calls, ensure all required arguments align with the expected parameters of the function.", "content": "Mismatched or unexpected arguments in API calls can lead to execution errors. Always cross-check the tool's parameter requirements before making a call.", "score": 0.0, "time_created": "2025-08-04 07:45:40", "time_modified": "2025-08-04 07:45:40", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:40", "modified_time": "2025-08-04 07:45:40", "extra_info": {"tags": ["error_prevention", "api_parameters", "failure_analysis"], "confidence": 0.9, "step_type": "action", "tools_used": ["book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "826d4ef996824dd1bd0859f66130b279", "memory_type": "task", "when_to_use": "When retrieving user messages for context, verify if the content is relevant to the ongoing task to avoid unnecessary steps.", "content": "Retrieving unrelated or off-topic messages can sidetrack the workflow. Ensure retrieved data directly contributes to solving the current problem.", "score": 0.0, "time_created": "2025-08-04 07:45:40", "time_modified": "2025-08-04 07:45:40", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:45:40", "modified_time": "2025-08-04 07:45:40", "extra_info": {"tags": ["context_relevance", "failure_analysis", "user_messages"], "confidence": 0.8, "step_type": "observation", "tools_used": ["view_messages_sent"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "1baefe84430c49b1b9424f2f7547ae60", "memory_type": "task", "when_to_use": "When verifying traveler information, ensure all provided details are accurate and meet system requirements.", "content": "Always double-check the format and validity of critical input data such as passport numbers and dates of birth before calling verification functions. Invalid or improperly formatted inputs can lead to immediate failure.", "score": 0.0, "time_created": "2025-08-04 07:46:00", "time_modified": "2025-08-04 07:46:00", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:46:00", "modified_time": "2025-08-04 07:46:00", "extra_info": {"tags": ["error_prevention", "data_validation", "travel_verification"], "confidence": 0.9, "step_type": "reasoning", "tools_used": ["verify_traveler_information"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "e5611e1cebe64e549f9c4fea17e41cde", "memory_type": "task", "when_to_use": "When using API functions with strict parameter requirements, confirm that all required arguments match the expected format and exclude any unnecessary ones.", "content": "Including unexpected or deprecated parameters (e.g., 'travel_cost' in book_flight) can cause function execution errors. Always cross-check the latest API documentation for correct usage.", "score": 0.0, "time_created": "2025-08-04 07:46:00", "time_modified": "2025-08-04 07:46:00", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:46:00", "modified_time": "2025-08-04 07:46:00", "extra_info": {"tags": ["api_usage", "parameter_validation", "function_errors"], "confidence": 0.85, "step_type": "action", "tools_used": ["book_flight"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "8228f03bc3804d8fa84b760937b3cac9", "memory_type": "task", "when_to_use": "When retrieving messages related to a specific task or context, ensure the correct tool is used to capture relevant communications.", "content": "General message retrieval tools may not always align with task-specific needs. If no filtering options exist, consider whether the retrieved data sufficiently addresses the user’s query before proceeding.", "score": 0.0, "time_created": "2025-08-04 07:46:00", "time_modified": "2025-08-04 07:46:00", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:46:00", "modified_time": "2025-08-04 07:46:00", "extra_info": {"tags": ["message_retrieval", "context_alignment", "user_communication"], "confidence": 0.75, "step_type": "observation", "tools_used": ["view_messages_sent"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "e98bc38dd369411bbab303eeea304d2c", "memory_type": "task", "when_to_use": "When performing multi-step vehicle preparation tasks (e.g., fueling, engine start, safety checks) where dependencies exist between steps.", "content": "The agent successfully executed a sequence of interdependent actions by first identifying critical prerequisites (like locking doors and pressing the brake pedal) before proceeding with higher-level tasks (starting the engine). This ensured operational safety and prevented errors.", "score": 0.0, "time_created": "2025-08-04 07:46:06", "time_modified": "2025-08-04 07:46:06", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:46:06", "modified_time": "2025-08-04 07:46:06", "extra_info": {"tags": ["vehicle-preparation", "interdependent-actions", "safety-first"], "confidence": 0.9, "step_type": "action", "tools_used": ["lockDoors", "pressBrakePedal", "startEngine"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "1414b45a233d4debbfb87e44cdf06dfb", "memory_type": "task", "when_to_use": "When validating system outputs against user-defined thresholds (e.g., tire pressure checks) to ensure safety or compliance.", "content": "The agent cross-verified tire pressures against a user-specified threshold (33 psi). Despite conflicting system feedback ('healthy_tire_pressure': true), it prioritized user requirements, identified under-inflated tires, and recommended corrective action (nearest tire shop).", "score": 0.0, "time_created": "2025-08-04 07:46:06", "time_modified": "2025-08-04 07:46:06", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:46:06", "modified_time": "2025-08-04 07:46:06", "extra_info": {"tags": ["threshold-validation", "user-preference", "error-handling"], "confidence": 0.85, "step_type": "decision", "tools_used": ["check_tire_pressure", "find_nearest_tire_shop"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "6d532f3773dc43e8aa1e281ade5579fb", "memory_type": "task", "when_to_use": "When performing multi-step operations where the order of execution is critical (e.g., locking doors before starting an engine).", "content": "Ensure that all prerequisite steps are completed successfully before proceeding to dependent actions. Validate intermediate states when responses indicate potential discrepancies.", "score": 0.0, "time_created": "2025-08-04 07:46:07", "time_modified": "2025-08-04 07:46:07", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:46:07", "modified_time": "2025-08-04 07:46:07", "extra_info": {"tags": ["error_prevention", "dependency_management", "sequence_validation"], "confidence": 0.9, "step_type": "reasoning", "tools_used": ["startEngine", "lockDoors"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "df81ad2b217540b4878683bee5c5bb12", "memory_type": "task", "when_to_use": "When evaluating system health flags (e.g., healthy_tire_pressure) alongside specific threshold checks.", "content": "Do not rely solely on high-level health flags; verify individual metrics explicitly against required thresholds to ensure accuracy and safety.", "score": 0.0, "time_created": "2025-08-04 07:46:07", "time_modified": "2025-08-04 07:46:07", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:46:07", "modified_time": "2025-08-04 07:46:07", "extra_info": {"tags": ["threshold_validation", "health_check", "explicit_verification"], "confidence": 0.85, "step_type": "observation", "tools_used": ["check_tire_pressure", "find_nearest_tire_shop"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "5123a71518a8469db9fcffe908da220f", "memory_type": "task", "when_to_use": "When extracting numerical data from text files for calculations, ensure all relevant numbers are correctly identified and parsed.", "content": "Always verify that the correct values are extracted from file contents before performing mathematical operations. Misinterpretation of file content can lead to incorrect calculations.", "score": 0.0, "time_created": "2025-08-04 07:46:14", "time_modified": "2025-08-04 07:46:14", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:46:14", "modified_time": "2025-08-04 07:46:14", "extra_info": {"tags": ["error_prevention", "data_extraction", "calculation_accuracy"], "confidence": 0.9, "step_type": "reasoning", "tools_used": ["tail", "mean", "round_number"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "6d6fcaa799594241abc890e8c25c72e1", "memory_type": "task", "when_to_use": "When writing results to a file, confirm that the output format strictly matches user requirements.", "content": "Ensure that outputs written to files contain only the specified data without additional characters or formatting. This avoids discrepancies between expected and actual file content.", "score": 0.0, "time_created": "2025-08-04 07:46:14", "time_modified": "2025-08-04 07:46:14", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:46:14", "modified_time": "2025-08-04 07:46:14", "extra_info": {"tags": ["file_operations", "output_validation", "user_requirements"], "confidence": 0.85, "step_type": "action", "tools_used": ["echo"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "2ea34205d508403c862ada8453bbf8b9", "memory_type": "task", "when_to_use": "When extracting and processing multiple numeric values from a text file to perform calculations.", "content": "Ensure that the correct numbers are identified and extracted from the text, avoiding confusion with unrelated data in the same line or section of the file. Validate that all required values are present before proceeding with further calculations.", "score": 0.0, "time_created": "2025-08-04 07:46:15", "time_modified": "2025-08-04 07:46:15", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:46:15", "modified_time": "2025-08-04 07:46:15", "extra_info": {"tags": ["error_prevention", "failure_analysis", "data_extraction"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["tail", "mean", "round_number"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "a2cc91fa6b164f9b9bb392583263a7bb", "memory_type": "task", "when_to_use": "When writing calculated results to a new file as per user request.", "content": "Double-check that only the exact required content is written to the file by verifying both the format and precision of the output. Avoid including any unintended additional characters or decimal points if the requirement specifies otherwise.", "score": 0.0, "time_created": "2025-08-04 07:46:15", "time_modified": "2025-08-04 07:46:15", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:46:15", "modified_time": "2025-08-04 07:46:15", "extra_info": {"tags": ["error_prevention", "file_operations", "output_validation"], "confidence": 0.8, "step_type": "action", "tools_used": ["echo"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "dbe9b4e56cd04fc39366fb74d5bd8139", "memory_type": "task", "when_to_use": "When needing to calculate derived values (e.g., logarithm) based on previously obtained results.", "content": "After successfully obtaining the distance between two cities, the agent seamlessly transitioned to calculating a logarithmic value by using the 'logarithm' function with specified precision. This step demonstrated effective chaining of operations where the output of one computation feeds directly into the next.", "score": 0.0, "time_created": "2025-08-04 07:46:06", "time_modified": "2025-08-04 07:46:06", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:46:06", "modified_time": "2025-08-04 07:46:06", "extra_info": {"tags": ["derived calculation", "logarithm", "chained operations"], "confidence": 0.9, "step_type": "action", "tools_used": ["logarithm"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "843a6521dac34503b216778f362a0a5e", "memory_type": "task", "when_to_use": "When multiple external tools or functions need to be called in sequence to achieve a multi-step goal.", "content": "The agent efficiently used a sequence of tool calls ('get_zipcode_based_on_city', 'estimate_distance', and 'logarithm') to first find zip codes, estimate the distance, and then compute the logarithm. The structured approach ensured clarity and precision at each step, leading to accurate final results.", "score": 0.0, "time_created": "2025-08-04 07:46:06", "time_modified": "2025-08-04 07:46:06", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:46:06", "modified_time": "2025-08-04 07:46:06", "extra_info": {"tags": ["multi-step task", "tool chaining", "distance estimation"], "confidence": 0.85, "step_type": "reasoning", "tools_used": ["get_zipcode_based_on_city", "estimate_distance", "logarithm"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "ff2eb0e793ce40b0a0c8579558d4fe9c", "memory_type": "task", "when_to_use": "When needing to calculate distances between two locations, ensure all required data points (e.g., zipcodes or city names) are collected before proceeding with distance estimation.", "content": "Always confirm that all inputs for a calculation are available and valid before invoking functions. Missing or incorrect inputs can derail subsequent steps and calculations.", "score": 0.0, "time_created": "2025-08-04 07:46:16", "time_modified": "2025-08-04 07:46:16", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:46:16", "modified_time": "2025-08-04 07:46:16", "extra_info": {"tags": ["error_prevention", "input_validation", "distance_calculation"], "confidence": 0.9, "step_type": "reasoning", "tools_used": ["get_zipcode_based_on_city", "estimate_distance"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "1b286f687a31446fba5cbf1c18549185", "memory_type": "task", "when_to_use": "When performing multi-step calculations involving intermediate results (e.g., distance then logarithm), ensure each step's output is validated before using it in the next function.", "content": "Intermediate results should be verified as accurate and within expected ranges before proceeding to dependent operations. Skipping validation can propagate errors downstream.", "score": 0.0, "time_created": "2025-08-04 07:46:16", "time_modified": "2025-08-04 07:46:16", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:46:16", "modified_time": "2025-08-04 07:46:16", "extra_info": {"tags": ["error_prevention", "intermediate_validation", "logarithmic_calculation"], "confidence": 0.85, "step_type": "decision", "tools_used": ["estimate_distance", "logarithm"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "e4692a3c40ae421d9a2bf08c6cb7fa8b", "memory_type": "task", "when_to_use": "When handling user queries with multiple parts (e.g., distance + logarithm), prioritize clarity in communication by explicitly stating which part of the query is being addressed at each stage.", "content": "Clear communication of progress helps manage user expectations and ensures alignment on multi-part tasks. Ambiguity in task status can lead to confusion or redundant requests.", "score": 0.0, "time_created": "2025-08-04 07:46:16", "time_modified": "2025-08-04 07:46:16", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:46:16", "modified_time": "2025-08-04 07:46:16", "extra_info": {"tags": ["user_communication", "query_clarity", "multi_part_tasks"], "confidence": 0.8, "step_type": "observation", "tools_used": []}}} -{"workspace_id": "bfcl_v1", "memory_id": "7bdc991d7ffb48f98b267c3289a68bcd", "memory_type": "task", "when_to_use": "When writing data to a file, especially with specific formatting requirements.", "content": "Always verify the exact format requested by the user (e.g., only numbers, no additional text) before writing to the file to prevent mismatches between expectations and output.", "score": 0.0, "time_created": "2025-08-04 07:46:19", "time_modified": "2025-08-04 07:46:19", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:46:19", "modified_time": "2025-08-04 07:46:19", "extra_info": {"tags": ["error_prevention", "file_operations", "user_requirements"], "confidence": 0.9, "step_type": "action", "tools_used": ["echo"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "9115745606874454a3d097066b4dfb0a", "memory_type": "task", "when_to_use": "When performing mathematical operations and saving results into files.", "content": "After calculating values like mean or standard deviation, confirm that subsequent actions (e.g., rounding or formatting) align with user instructions before proceeding with file creation.", "score": 0.0, "time_created": "2025-08-04 07:46:19", "time_modified": "2025-08-04 07:46:19", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:46:19", "modified_time": "2025-08-04 07:46:19", "extra_info": {"tags": ["math_operations", "file_creation", "accuracy"], "confidence": 0.85, "step_type": "decision", "tools_used": ["mean", "round_number", "echo"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "36a9fb53dff246dba9adfe0fd61f9aa7", "memory_type": "task", "when_to_use": "When handling file operations where the user specifies exact content formatting.", "content": "Always verify that the written content matches the user's explicit formatting requirements before confirming task completion. Missing this step can lead to output inconsistencies, such as including unintended text or metadata.", "score": 0.0, "time_created": "2025-08-04 07:46:24", "time_modified": "2025-08-04 07:46:24", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:46:24", "modified_time": "2025-08-04 07:46:24", "extra_info": {"tags": ["error_prevention", "file_operations", "content_validation"], "confidence": 0.9, "step_type": "action", "tools_used": ["echo", "cat"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "a41050eb464e455685413e773b7ada0a", "memory_type": "task", "when_to_use": "When performing calculations and writing results into files based on user requests.", "content": "After calculating values (e.g., mean revenue), ensure intermediate steps like rounding are explicitly handled and documented in the agent’s reasoning. Skipping clarity in these steps can confuse users about how final outputs were derived.", "score": 0.0, "time_created": "2025-08-04 07:46:24", "time_modified": "2025-08-04 07:46:24", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:46:24", "modified_time": "2025-08-04 07:46:24", "extra_info": {"tags": ["calculation_handling", "rounding", "user_communication"], "confidence": 0.8, "step_type": "reasoning", "tools_used": ["mean"]}}} -{"workspace_id": "bfcl_v1", "memory_id": "5ec9eda603fc424999c1c7c425507c7c", "memory_type": "task", "when_to_use": "When using tools with optional parameters for file creation or modification.", "content": "Explicitly define all necessary arguments when invoking functions like 'echo', ensuring no implicit defaults alter the intended outcome. For example, failing to specify `content` properly could result in malformed files.", "score": 0.0, "time_created": "2025-08-04 07:46:24", "time_modified": "2025-08-04 07:46:24", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "created_time": "2025-08-04 07:46:24", "modified_time": "2025-08-04 07:46:24", "extra_info": {"tags": ["tool_usage", "argument_specification", "error_prevention"], "confidence": 0.75, "step_type": "decision", "tools_used": ["echo"]}}} diff --git a/docs/library/library.md b/docs/library/library.md deleted file mode 100644 index e090d5ba..00000000 --- a/docs/library/library.md +++ /dev/null @@ -1,96 +0,0 @@ -# Ready-to-Use Memories - -
    - -
    -
    -
    - - -
    - -
    - -
    - - -
    -
    -
    Loading memories…
    -
    - - - - - - - - - - - - - -
    - - - \ No newline at end of file diff --git a/docs/library/paper_data/task/appworld_qwen3_14b.jsonl b/docs/library/paper_data/task/appworld_qwen3_14b.jsonl deleted file mode 100644 index 5303fb9c..00000000 --- a/docs/library/paper_data/task/appworld_qwen3_14b.jsonl +++ /dev/null @@ -1,218 +0,0 @@ -{"workspace_id": "appworld_qwen3_14b", "memory_id": "a32ce8aa186d49e78afbd8f8f300f513", "memory_type": "procedural", "when_to_use": "When determining the most-liked song requires aggregating likes from all playlists, not just liked songs", "content": "The higher-scoring approach systematically retrieved all playlists, iterated through song IDs, and aggregated like counts across all songs (including those in private playlists). This ensured comprehensive data collection, whereas the lower-scoring approach only checked the 'liked songs' list, which doesn't account for likes from playlist contexts.", "score": 0, "time_created": "2025-11-07 18:06:13", "time_modified": "2025-11-07 18:06:13", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "What is the title of the most-liked song in my Spotify playlists.", "when_to_use": "When determining the most-liked song requires aggregating likes from all playlists, not just liked songs", "category": "comparative", "created_time": "2025-11-07 18:06:13", "modified_time": "2025-11-07 18:06:13", "generalized_query": "Identify the most popular item across a user's library by aggregating engagement metrics", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "2dcf6f4448dd4f42ad6d3fc803385512", "memory_type": "procedural", "when_to_use": "When accessing protected resources requiring authentication tokens", "content": "Successfully obtained access token via supervisor password retrieval, then used it consistently across API calls. This pattern ensures secure access to user-specific data through proper authentication flow.", "score": 0, "time_created": "2025-11-07 18:06:17", "time_modified": "2025-11-07 18:06:17", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "What is the title of the most-liked song in my Spotify playlists", "when_to_use": "When accessing protected resources requiring authentication tokens", "category": "success", "created_time": "2025-11-07 18:06:17", "modified_time": "2025-11-07 18:06:17", "generalized_query": "Access user-specific data in apps requiring OAuth-style authentication tokens", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "102ab86e54cd42cb80dc39c9e5ff48ca", "memory_type": "procedural", "when_to_use": "When interpreting API response schemas", "content": "Always check API response schemas for available metrics (like like_count) before assuming data availability - the absence of such fields may require alternative approaches", "score": 0, "time_created": "2025-11-07 18:06:21", "time_modified": "2025-11-07 18:06:21", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Analyzing the structure of Spotify's show_liked_songs API response", "when_to_use": "When interpreting API response schemas", "category": "failure", "created_time": "2025-11-07 18:06:21", "modified_time": "2025-11-07 18:06:21", "generalized_query": "Understanding data availability constraints in API responses", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "be3cd80e272440ecaeae1b2482c1e6b3", "memory_type": "procedural", "when_to_use": "When needing to update ratings for items in a user's library where direct rating retrieval is unavailable", "content": "Successfully navigated API limitations by using review_song and update_song_review endpoints when direct rating retrieval failed. Identified that existing reviews needed updates rather than creating new ones, leveraging user-specific review filtering and bulk update patterns.", "score": 0, "time_created": "2025-11-07 18:06:12", "time_modified": "2025-11-07 18:06:12", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Give a 5-star rating to all songs in my Spotify playlists which I have liked. If I have already rated it lower, increase it to 5.", "when_to_use": "When needing to update ratings for items in a user's library where direct rating retrieval is unavailable", "category": "success", "created_time": "2025-11-07 18:06:12", "modified_time": "2025-11-07 18:06:12", "generalized_query": "Update ratings for user-owned items in a service where direct rating access is blocked but review functionality exists", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "620c3113b70549be99c2890cf8f22734", "memory_type": "procedural", "when_to_use": "When managing authentication tokens in API workflows with time-sensitive access", "content": "The lower-scoring approach repeatedly failed due to 401 errors from expired tokens, requiring constant re-authentication. The higher-scoring sequence properly managed token lifecycle by re-authenticating when needed and using fresh tokens for each critical operation, ensuring uninterrupted API access.", "score": 0, "time_created": "2025-11-07 18:06:18", "time_modified": "2025-11-07 18:06:18", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Give a 5-star rating to all songs in my Spotify playlists which I have liked. If I have already rated it lower, increase it to 5.", "when_to_use": "When managing authentication tokens in API workflows with time-sensitive access", "category": "comparative", "created_time": "2025-11-07 18:06:18", "modified_time": "2025-11-07 18:06:18", "generalized_query": "Maintain valid authentication tokens during multi-step API operations", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "9351c1e2ba094a43a38729776c6604fa", "memory_type": "procedural", "when_to_use": "When retrieving data from APIs that require pagination or filtering, ensure the full dataset is considered, not just subsets.", "content": "Assuming a subset (e.g., liked songs) represents the entire dataset can lead to incorrect conclusions. Always validate the scope of the query and ensure comprehensive data collection.", "score": 0, "time_created": "2025-11-07 18:06:16", "time_modified": "2025-11-07 18:06:16", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "What is the title of the least-played song in my Spotify song library.", "when_to_use": "When retrieving data from APIs that require pagination or filtering, ensure the full dataset is considered, not just subsets.", "category": "failure", "created_time": "2025-11-07 18:06:16", "modified_time": "2025-11-07 18:06:16", "generalized_query": "Identify the least frequent item in a user's library based on a specific metric.", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "7b84d16c21ec48869c9762857c302508", "memory_type": "procedural", "when_to_use": "When retrieving play counts for songs in a library", "content": "Play count data must be explicitly retrieved from song/album details APIs, not assumed to exist in liked songs lists", "score": 0, "time_created": "2025-11-07 18:06:07", "time_modified": "2025-11-07 18:06:07", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "What is the title of the most-played song in my Spotify album library.", "when_to_use": "When retrieving play counts for songs in a library", "category": "failure", "created_time": "2025-11-07 18:06:07", "modified_time": "2025-11-07 18:06:07", "generalized_query": "Identify the most frequently played item in a user's music library", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "35c294639a604de889a0c71da428567c", "memory_type": "procedural", "when_to_use": "When interpreting API response structures", "content": "Always verify field availability in API responses before using them in calculations", "score": 0, "time_created": "2025-11-07 18:06:07", "time_modified": "2025-11-07 18:06:07", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "What is the title of the most-played song in my Spotify album library.", "when_to_use": "When interpreting API response structures", "category": "failure", "created_time": "2025-11-07 18:06:07", "modified_time": "2025-11-07 18:06:07", "generalized_query": "Process structured data from music streaming service APIs", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "fa2c6fb6b6e6408b9b74db6dea5bc0bf", "memory_type": "procedural", "when_to_use": "When modifying user-generated content or ratings in a system with uniqueness constraints", "content": "Always verify the existence of prior user interactions before attempting to create new ones, especially when system constraints enforce uniqueness (e.g., one review per user per item).", "score": 0, "time_created": "2025-11-07 18:07:23", "time_modified": "2025-11-07 18:07:23", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Give a 4-star rating to all songs in my Spotify album library which I have liked. If I have already rated it lower, increase it to 4.", "when_to_use": "When modifying user-generated content or ratings in a system with uniqueness constraints", "category": "failure", "created_time": "2025-11-07 18:07:23", "modified_time": "2025-11-07 18:07:23", "generalized_query": "Update user ratings for items in a library while respecting existing ratings and system constraints", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "996887516b024ac58728b1589c69f484", "memory_type": "procedural", "when_to_use": "When interacting with APIs that require authentication tokens and have constraints on duplicate entries", "content": "Always verify the existence of required authentication tokens before API calls and check for existing records to avoid conflicts", "score": 0, "time_created": "2025-11-07 18:07:20", "time_modified": "2025-11-07 18:07:20", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Give a 1-star rating to all songs in my Spotify song library which I have not liked. If I have already rated it higher, decrease it to 1.", "when_to_use": "When interacting with APIs that require authentication tokens and have constraints on duplicate entries", "category": "failure", "created_time": "2025-11-07 18:07:20", "modified_time": "2025-11-07 18:07:20", "generalized_query": "Modify ratings for items in a user's library based on existing preferences", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "98abe9f3d0d74417bdb08f4338306b53", "memory_type": "procedural", "when_to_use": "When needing to update user ratings for items in a library where existing ratings may conflict with new ones", "content": "Successfully identified unliked songs by comparing library and liked songs lists. Implemented pagination for full data retrieval, checked for existing reviews via show_song_reviews API, and used update_song_review when existing reviews existed. This approach avoided 409 conflicts by first checking for existing user reviews before creating new ones.", "score": 0, "time_created": "2025-11-07 18:07:27", "time_modified": "2025-11-07 18:07:27", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Give a 1-star rating to all songs in my Spotify song library which I have not liked. If I have already rated it higher, decrease it to 1.", "when_to_use": "When needing to update user ratings for items in a library where existing ratings may conflict with new ones", "category": "success", "created_time": "2025-11-07 18:07:27", "modified_time": "2025-11-07 18:07:27", "generalized_query": "Update ratings for items in a user library based on existing preferences, ensuring no duplicate ratings are created", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "c03595157e614f2487542a00695f2772", "memory_type": "procedural", "when_to_use": "When handling API authentication and token expiration in task automation", "content": "The higher-scoring approach implemented proper access token management by re-authenticating when encountering 401 errors, unlike the lower-scoring sequence which attempted to use expired tokens. It also used explicit roommate filtering (Eric Bailey, Anita Burch) before liking transactions, whereas the lower sequence attempted to like all transactions without validation and failed to handle authentication errors.", "score": 0, "time_created": "2025-11-07 18:07:20", "time_modified": "2025-11-07 18:07:20", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Like all the venmo transactions from today involving any of my roommates on my venmo social feed.", "when_to_use": "When handling API authentication and token expiration in task automation", "category": "comparative", "created_time": "2025-11-07 18:07:20", "modified_time": "2025-11-07 18:07:20", "generalized_query": "Execute targeted social media interactions based on user-defined filters and maintain API session validity", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "0f4278e72c894aa7979d0607e00e72c2", "memory_type": "procedural", "when_to_use": "When extracting specific data from a list of dictionaries", "content": "Always verify data structure outputs when using list comprehensions - a boolean result indicates a logical error in the condition, not a data retrieval failure", "score": 0, "time_created": "2025-11-07 18:07:21", "time_modified": "2025-11-07 18:07:21", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Like all the venmo transactions from today involving any of my roommates on my venmo social feed.", "when_to_use": "When extracting specific data from a list of dictionaries", "category": "failure", "created_time": "2025-11-07 18:07:21", "modified_time": "2025-11-07 18:07:21", "generalized_query": "Filter and interact with specific items in a dataset based on predefined criteria", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "cd5e2e81697841e4a19ffd1cd45d5ae0", "memory_type": "procedural", "when_to_use": "When exporting data from an API with pagination and requiring uniqueness checks", "content": "The higher-scoring approach used proper API pagination, ensured data uniqueness via sets, and correctly handled API parameters (e.g., access tokens). It also used the correct file system API method (create_file) with required parameters. The lower-scoring approach attempted to use a non-existent 'write_file' API, failed to handle pagination properly, and had incorrect password retrieval logic leading to TypeErrors.", "score": 0, "time_created": "2025-11-07 18:08:28", "time_modified": "2025-11-07 18:08:28", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Export a unique list of all the songs in my song and album library and all playlists in my Spotify account into \"~/backups/spotify.csv\" file in my file system. The file should have headers, \"Title\" and \"Artists\" and artists should be separated by \"|\". Terminate my account after this backup is complete.", "when_to_use": "When exporting data from an API with pagination and requiring uniqueness checks", "category": "comparative", "created_time": "2025-11-07 18:08:28", "modified_time": "2025-11-07 18:08:28", "generalized_query": "Exporting unique data from a music library API with pagination and file system integration", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "81d1f864bcc346ec8e54cb6d668f6c01", "memory_type": "procedural", "when_to_use": "When interacting with APIs that require specific parameters or methods", "content": "Always verify the existence and parameters of APIs before invoking them to avoid runtime errors.", "score": 0, "time_created": "2025-11-07 18:08:32", "time_modified": "2025-11-07 18:08:32", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Export a unique list of all the songs in my song and album library and all playlists in my Spotify account into \"~/backups/spotify.csv\" file in my file system. The file should have headers, \"Title\" and \"Artists\" and artists should be separated by \"|\". Terminate my account after this backup is complete.", "when_to_use": "When interacting with APIs that require specific parameters or methods", "category": "failure", "created_time": "2025-11-07 18:08:32", "modified_time": "2025-11-07 18:08:32", "generalized_query": "Exporting data from a service to a file system requires proper API usage and data validation.", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "1bb5d60f86e0413a8c5fe300dd65cf11", "memory_type": "procedural", "when_to_use": "When processing nested data structures or potential missing keys", "content": "Use safe dictionary access methods (e.g., .get()) and validate data structures to prevent KeyErrors.", "score": 0, "time_created": "2025-11-07 18:08:32", "time_modified": "2025-11-07 18:08:32", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Fetch detailed information for each unique song and format artists as a string separated by \"|\"", "when_to_use": "When processing nested data structures or potential missing keys", "category": "failure", "created_time": "2025-11-07 18:08:32", "modified_time": "2025-11-07 18:08:32", "generalized_query": "Handling data retrieval from APIs with potentially incomplete or inconsistent responses.", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "3970cc4b670042c3be841acc583f2ced", "memory_type": "procedural", "when_to_use": "When interacting with APIs that require authentication tokens for file operations", "content": "Always explicitly include required authentication tokens in API requests, as missing or improperly formatted tokens will result in unauthorized access errors (401) even if the API endpoint exists.", "score": 0, "time_created": "2025-11-07 18:08:28", "time_modified": "2025-11-07 18:08:28", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Export a unique list of all the songs in my song and album library and all playlists in my Spotify account into \"~/backups/spotify_library.csv\" file in my file system", "when_to_use": "When interacting with APIs that require authentication tokens for file operations", "category": "failure", "created_time": "2025-11-07 18:08:28", "modified_time": "2025-11-07 18:08:28", "generalized_query": "Export data to a file system location using an API that requires authentication", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "e5c5b8ac92904acc85425d86ef0e4f31", "memory_type": "procedural", "when_to_use": "When working with multi-step tasks involving multiple apps/services", "content": "Maintain separate authentication contexts for each app/service and explicitly manage tokens to avoid cross-service authorization conflicts.", "score": 0, "time_created": "2025-11-07 18:08:24", "time_modified": "2025-11-07 18:08:24", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Terminate my account after this backup is complete.", "when_to_use": "When working with multi-step tasks involving multiple apps/services", "category": "failure", "created_time": "2025-11-07 18:08:24", "modified_time": "2025-11-07 18:08:24", "generalized_query": "Execute sequential tasks across multiple apps (e.g., Spotify + file_system) requiring separate authentication and API flows.", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "88eb5a9f113d41ff820dcc86cae947ca", "memory_type": "procedural", "when_to_use": "When interacting with APIs that require state checks (e.g., likes, follows, or approvals)", "content": "Always verify the current state of an object (e.g., 'already liked') before performing an action to avoid redundant API calls and errors.", "score": 0, "time_created": "2025-11-07 18:08:20", "time_modified": "2025-11-07 18:08:20", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Like all the venmo transactions from yesterday or today involving any of my coworkers on my venmo social feed.", "when_to_use": "When interacting with APIs that require state checks (e.g., likes, follows, or approvals)", "category": "failure", "created_time": "2025-11-07 18:08:20", "modified_time": "2025-11-07 18:08:20", "generalized_query": "Perform actions on social feed items while avoiding redundant operations based on prior state", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "8ad4fb9425d4490391f2fd00d613d892", "memory_type": "procedural", "when_to_use": "When retrieving credentials or tokens from API responses", "content": "Boolean list comprehensions must be properly filtered to avoid type errors when accessing list elements", "score": 0, "time_created": "2025-11-07 18:08:30", "time_modified": "2025-11-07 18:08:30", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "venmo_password = [account_password[\"account_name\"] == \"venmo\" for account_password in passwords][0][\"password\"]", "when_to_use": "When retrieving credentials or tokens from API responses", "category": "failure", "created_time": "2025-11-07 18:08:30", "modified_time": "2025-11-07 18:08:30", "generalized_query": "Extracting specific field values from filtered API response lists", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "6631c84a84db489c90d69037a181af56", "memory_type": "procedural", "when_to_use": "When interacting with APIs that require authentication or specific permissions, especially for file operations.", "content": "Always verify the existence and parameters of APIs before invoking them, as assumed methods may not exist or may require different authentication contexts.", "score": 0, "time_created": "2025-11-07 18:09:21", "time_modified": "2025-11-07 18:09:21", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Export a unique list of all the songs in my song and album library and all playlists in my Spotify account into \"~/backups/spotify_songs.csv\" file in my file system. The file should have headers, \"Title\" and \"Artists\" and artists should be separated by \"|\". Terminate my account after this backup is complete.", "when_to_use": "When interacting with APIs that require authentication or specific permissions, especially for file operations.", "category": "failure", "created_time": "2025-11-07 18:09:21", "modified_time": "2025-11-07 18:09:21", "generalized_query": "Export data to a file system location using available APIs and perform account termination.", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "fb594c4526df4ccd89479fa6524b2e25", "memory_type": "procedural", "when_to_use": "When executing multi-step tasks that depend on prior data retrieval", "content": "Data retrieval steps must be explicitly re-executed if intermediate failures occur, as variables are not persisted across execution boundaries.", "score": 0, "time_created": "2025-11-07 18:09:23", "time_modified": "2025-11-07 18:09:23", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Export a unique list of all the songs in my song and album library and all playlists in my Spotify account into \"~/backups/spotify_songs.csv\" file in my file system. The file should have headers, \"Title\" and \"Artists\" and artists should be separated by \"|\". Terminate my account after this backup is complete.", "when_to_use": "When executing multi-step tasks that depend on prior data retrieval", "category": "failure", "created_time": "2025-11-07 18:09:23", "modified_time": "2025-11-07 18:09:23", "generalized_query": "Ensuring data availability before proceeding to file operations in sequential workflows", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "ccd63370327d4e39a69db1bf9f2302d3", "memory_type": "procedural", "when_to_use": "When dealing with cross-service data aggregation and file exports", "content": "The higher-scoring approach implemented a robust data collection process by iterating through all song libraries, album song IDs, and playlist song IDs to ensure completeness. It used set operations to eliminate duplicates and properly formatted CSV content. The lower-scoring approach only collected song library data, missed album/playlist songs, and attempted to use unsupported APIs for file operations without proper authentication.", "score": 0, "time_created": "2025-11-07 18:09:30", "time_modified": "2025-11-07 18:09:30", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Export a unique list of all the songs in my song and album library and all playlists in my Spotify account into \"~/backups/spotify_songs.csv\" file in my file system. The file should have headers, \"Title\" and \"Artists\" and artists should be separated by \"|\". Terminate my account after this backup is complete.", "when_to_use": "When dealing with cross-service data aggregation and file exports", "category": "comparative", "created_time": "2025-11-07 18:09:30", "modified_time": "2025-11-07 18:09:30", "generalized_query": "Aggregate data from multiple sources and export to file system with proper formatting", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "4aacdf808d284a26a34c33d5ea816063", "memory_type": "procedural", "when_to_use": "When retrieving data from a note-taking app and requiring communication via SMS", "content": "The higher-scoring approach achieved success by: (1) Fully implementing SMS delivery via phone app APIs, while the lower-scoring approach only generated the list without sending it; (2) Using pagination to retrieve all relevant notes, whereas the lower approach relied on a single search query; (3) Correctly handling authentication flows for both Simple Note and Phone apps, while the lower approach only used Simple Note credentials.", "score": 0, "time_created": "2025-11-07 18:09:44", "time_modified": "2025-11-07 18:09:44", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Christopher has asked for my movie recommendations via phone text message. Reply to them with a list of comma-separated movie titles from my Simple Note account as per their request.", "when_to_use": "When retrieving data from a note-taking app and requiring communication via SMS", "category": "comparative", "created_time": "2025-11-07 18:09:44", "modified_time": "2025-11-07 18:09:44", "generalized_query": "Retrieve structured data from a note-taking app and deliver it via SMS to a contact", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "3ca1903852af422ebdb9a10a1c5e1e50", "memory_type": "procedural", "when_to_use": "When executing multi-step tasks involving API calls and data processing", "content": "Break down complex tasks into modular steps with explicit error checks at each stage to identify and resolve failures early.", "score": 0, "time_created": "2025-11-07 18:09:56", "time_modified": "2025-11-07 18:09:56", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Reply to Christopher with a list of comma-separated movie titles from my Simple Note account", "when_to_use": "When executing multi-step tasks involving API calls and data processing", "category": "failure", "created_time": "2025-11-07 18:09:56", "modified_time": "2025-11-07 18:09:56", "generalized_query": "Chain API calls and data transformations to fulfill user requests", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "55b5896491c24e0aa83d3b8548868e9d", "memory_type": "procedural", "when_to_use": "When interacting with contact management systems for message delivery", "content": "Implement fallback mechanisms for contact resolution failures and validate contact existence before message delivery", "score": 0, "time_created": "2025-11-07 18:09:39", "time_modified": "2025-11-07 18:09:39", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Send text message to Christopher with movie recommendations", "when_to_use": "When interacting with contact management systems for message delivery", "category": "failure", "created_time": "2025-11-07 18:09:39", "modified_time": "2025-11-07 18:09:39", "generalized_query": "Deliver content to a contact via messaging systems", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "e80cceb736e245f5a1e995be2c0646fa", "memory_type": "procedural", "when_to_use": "When retrieving data from a note-taking app for specific content", "content": "Always verify that the retrieved data matches the requested content type; do not assume note titles directly represent the desired output. Use appropriate APIs to access note content, not just metadata.", "score": 0, "time_created": "2025-11-07 18:09:49", "time_modified": "2025-11-07 18:09:49", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Reply to them with a list of comma-separated movie titles from my Simple Note account as per their request.", "when_to_use": "When retrieving data from a note-taking app for specific content", "category": "failure", "created_time": "2025-11-07 18:09:49", "modified_time": "2025-11-07 18:09:49", "generalized_query": "Extract specific content (e.g., movie titles) from a note-taking app based on a user request", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "8aa834c97b694cea89213569937827d1", "memory_type": "procedural", "when_to_use": "When extracting data from API responses that require authentication tokens", "content": "Always verify authentication token inclusion in API requests and validate response structures before proceeding with downstream operations", "score": 0, "time_created": "2025-11-07 18:09:47", "time_modified": "2025-11-07 18:09:47", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Laura has asked for my movie recommendations via phone text message. Reply to them with a list of comma-separated movie titles from my Simple Note account as per their request.", "when_to_use": "When extracting data from API responses that require authentication tokens", "category": "failure", "created_time": "2025-11-07 18:09:47", "modified_time": "2025-11-07 18:09:47", "generalized_query": "Retrieve and transmit user-specific data across authenticated API endpoints", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "8e38e054a449415880911d32fb98797b", "memory_type": "procedural", "when_to_use": "When encountering repeated 401 Unauthorized errors during API calls, especially after re-authenticating", "content": "Repeated authentication failures indicate potential issues with token validity, API endpoint permissions, or parameter mismatches. Always verify token scope and endpoint requirements before re-authenticating.", "score": 0, "time_created": "2025-11-07 18:07:42", "time_modified": "2025-11-07 18:07:42", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Like all the venmo transactions from yesterday involving any of my siblings on my venmo social feed.", "when_to_use": "When encountering repeated 401 Unauthorized errors during API calls, especially after re-authenticating", "category": "failure", "created_time": "2025-11-07 18:07:42", "modified_time": "2025-11-07 18:07:42", "generalized_query": "Accessing protected API endpoints after authentication", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "2c9a8999b2684d6582db56470c9e5a9b", "memory_type": "procedural", "when_to_use": "When relying on external APIs (e.g., phone contacts) to filter data for another API (e.g., Venmo transactions)", "content": "Avoid unnecessary dependencies on external APIs for filtering. Use direct API endpoints (e.g., Venmo's social feed) with available filters to achieve the goal more efficiently.", "score": 0, "time_created": "2025-11-07 18:07:42", "time_modified": "2025-11-07 18:07:42", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Like all the venmo transactions from yesterday involving any of my siblings on my venmo social feed.", "when_to_use": "When relying on external APIs (e.g., phone contacts) to filter data for another API (e.g., Venmo transactions)", "category": "failure", "created_time": "2025-11-07 18:07:42", "modified_time": "2025-11-07 18:07:42", "generalized_query": "Cross-referencing data between multiple APIs", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "8d63960d030d4ea6a5f565e68c1c006a", "memory_type": "procedural", "when_to_use": "When retrieving specific data from a list of items where a unique identifier is required, especially in scenarios involving API responses with potential for multiple matches or errors.", "content": "The higher-scoring approach used a generator expression with `next()` to safely extract the Venmo password, avoiding errors caused by boolean indexing. This method is more robust and efficient for single-match scenarios, whereas the lower-scoring approach used a list comprehension that risked errors and inefficiency. This highlights the importance of precise data extraction techniques in API interactions.", "score": 0, "time_created": "2025-11-07 18:10:41", "time_modified": "2025-11-07 18:10:41", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Add a comment, \"Thank you!\", to all the venmo payments I received from my coworkers in the last 5 days (including today), and like those payments.", "when_to_use": "When retrieving specific data from a list of items where a unique identifier is required, especially in scenarios involving API responses with potential for multiple matches or errors.", "category": "comparative", "created_time": "2025-11-07 18:10:41", "modified_time": "2025-11-07 18:10:41", "generalized_query": "Automate commenting and liking on social payment platform transactions based on specific criteria (e.g., timeframe, direction, user relationships).", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "09c3d946d93d473a9a9dd9266a714a82", "memory_type": "procedural", "when_to_use": "When processing paginated API results to ensure complete data coverage for task execution.", "content": "The higher-scoring approach implemented a pagination loop to fetch all transactions received in the last 5 days, ensuring no data was missed. The lower-scoring approach only retrieved a single page of results, potentially missing transactions. This demonstrates that handling pagination is critical for completeness in API-driven tasks.", "score": 0, "time_created": "2025-11-07 18:10:41", "time_modified": "2025-11-07 18:10:41", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Add a comment, \"Thank you!\", to all the venmo payments I received from my coworkers in the last 5 days (including today), and like those payments.", "when_to_use": "When processing paginated API results to ensure complete data coverage for task execution.", "category": "comparative", "created_time": "2025-11-07 18:10:41", "modified_time": "2025-11-07 18:10:41", "generalized_query": "Ensure comprehensive processing of paginated API results to fulfill task requirements fully.", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "69c10fed482941358c8480a15cc756e1", "memory_type": "procedural", "when_to_use": "When authenticating to third-party APIs using stored credentials", "content": "Avoid relying on password retrieval APIs for authentication; use OAuth tokens or session-based authentication where available for better security", "score": 0, "time_created": "2025-11-07 18:10:51", "time_modified": "2025-11-07 18:10:51", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Access Venmo account using supervisor-stored password", "when_to_use": "When authenticating to third-party APIs using stored credentials", "category": "failure", "created_time": "2025-11-07 18:10:51", "modified_time": "2025-11-07 18:10:51", "generalized_query": "Authenticate to financial/social apps using retrieved credentials", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "9e0a0193912f4f339e021e83b0e4e65d", "memory_type": "procedural", "when_to_use": "When executing bulk operations on API resources", "content": "Validate each resource individually before bulk operations to prevent silent failures and ensure operation success.", "score": 0, "time_created": "2025-11-07 18:10:41", "time_modified": "2025-11-07 18:10:41", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Like all transactions and add comments to them", "when_to_use": "When executing bulk operations on API resources", "category": "failure", "created_time": "2025-11-07 18:10:41", "modified_time": "2025-11-07 18:10:41", "generalized_query": "Perform batch operations on multiple API resources", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "d8cee3d6e7c949fa8823f18bd2317542", "memory_type": "procedural", "when_to_use": "When integrating authentication and API calls across multiple apps for task completion", "content": "The higher-scoring approach systematically handled authentication for both Simple Note and Phone apps, used proper API parameters (including access tokens), and validated data parsing logic. It also implemented error recovery by reconstructing the movie list when initial parsing failed. The lower-scoring approach skipped authentication validation for the Phone app, used incorrect recipient parameters, and failed to handle API parameter requirements.", "score": 0, "time_created": "2025-11-07 18:10:25", "time_modified": "2025-11-07 18:10:25", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Reply to Leslie with a list of comma-separated movie titles from my Simple Note account via phone text message", "when_to_use": "When integrating authentication and API calls across multiple apps for task completion", "category": "comparative", "created_time": "2025-11-07 18:10:25", "modified_time": "2025-11-07 18:10:25", "generalized_query": "Retrieve data from one app and securely transmit it to another app via authenticated API calls", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "ee838fc6f91442f2bf55f75246242357", "memory_type": "procedural", "when_to_use": "When preparing message payloads for communication APIs", "content": "Implement pre-transmission validation to ensure message content meets minimum length/format requirements", "score": 0, "time_created": "2025-11-07 18:10:43", "time_modified": "2025-11-07 18:10:43", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Send text message with movie recommendations to Leslie Ball", "when_to_use": "When preparing message payloads for communication APIs", "category": "failure", "created_time": "2025-11-07 18:10:43", "modified_time": "2025-11-07 18:10:43", "generalized_query": "Validating message content before transmission", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "b2a433b8a42540fdad882feb05d15c45", "memory_type": "procedural", "when_to_use": "When retrieving specific items from a list of objects", "content": "Always verify the structure of list comprehensions before accessing nested properties; use generator expressions with explicit error handling for safe value extraction.", "score": 0, "time_created": "2025-11-07 18:10:45", "time_modified": "2025-11-07 18:10:45", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Add a comment, 'Thanks!', to all the venmo payments I received from my friends in the last 7 days (including today), and like those payments.", "when_to_use": "When retrieving specific items from a list of objects", "category": "failure", "created_time": "2025-11-07 18:10:45", "modified_time": "2025-11-07 18:10:45", "generalized_query": "Retrieve and modify data items based on specific criteria from a collection", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "18d10727058045a2bf2ed7c5f8bab042", "memory_type": "procedural", "when_to_use": "When executing multi-step API workflows", "content": "Validate intermediate results at each API call stage and implement fallback mechanisms for token refresh or rate limiting scenarios.", "score": 0, "time_created": "2025-11-07 18:10:45", "time_modified": "2025-11-07 18:10:45", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Like transactions and add comments to Venmo payments", "when_to_use": "When executing multi-step API workflows", "category": "failure", "created_time": "2025-11-07 18:10:45", "modified_time": "2025-11-07 18:10:45", "generalized_query": "Execute sequential API operations with dependent parameters", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "619e8d5acf6d413896406058fb6ed154", "memory_type": "procedural", "when_to_use": "When needing to authenticate to a service using stored credentials from a supervisor API", "content": "Successfully retrieved Venmo credentials from supervisor API, used them to login, and handled authentication tokens properly. This ensured access to transaction data while maintaining security through stored credentials.", "score": 0, "time_created": "2025-11-07 18:10:55", "time_modified": "2025-11-07 18:10:55", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Add a comment, \"Thank you so much!\", to all the venmo payments I received from my roommates in the last 10 days (including today), and like those payments.", "when_to_use": "When needing to authenticate to a service using stored credentials from a supervisor API", "category": "success", "created_time": "2025-11-07 18:10:55", "modified_time": "2025-11-07 18:10:55", "generalized_query": "Authenticate to a service using stored credentials and perform batch actions on recent transactions from specific contacts", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "a6c20c7fcfba4fc79064fce177fe060d", "memory_type": "procedural", "when_to_use": "When filtering lists with conditional checks, especially when retrieving specific elements", "content": "Boolean list comprehensions must be explicitly converted to retrieve actual objects, not just truth values. Use generator expressions or explicit loops for safe element retrieval.", "score": 0, "time_created": "2025-11-07 18:11:00", "time_modified": "2025-11-07 18:11:00", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Add a comment, \"Thank you so much!\", to all the venmo payments I received from my roommates in the last 10 days (including today), and like those payments.", "when_to_use": "When filtering lists with conditional checks, especially when retrieving specific elements", "category": "failure", "created_time": "2025-11-07 18:11:00", "modified_time": "2025-11-07 18:11:00", "generalized_query": "Retrieve and modify specific transaction data from an API based on filtering criteria", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "5d4bd770b36142d4af47332831623c26", "memory_type": "procedural", "when_to_use": "When handling API responses with date ranges and user-specific filters", "content": "Always validate date formatting and API parameter constraints (e.g., YYYY-MM-DD) when working with temporal filters. Verify direction parameters (sent/received) align with user intent.", "score": 0, "time_created": "2025-11-07 18:11:00", "time_modified": "2025-11-07 18:11:00", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Add a comment, \"Thank you so much!\", to all the venmo payments I received from my roommates in the last 10 days (including today), and like those payments.", "when_to_use": "When handling API responses with date ranges and user-specific filters", "category": "failure", "created_time": "2025-11-07 18:11:00", "modified_time": "2025-11-07 18:11:00", "generalized_query": "Query API endpoints with temporal and directional filters for transaction data", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "1d53bffbea5741d5a48ab6f78f17f3ab", "memory_type": "procedural", "when_to_use": "When performing bulk operations on API resources", "content": "Implement error handling for bulk operations to isolate failures in individual resource modifications while maintaining transactional integrity across operations.", "score": 0, "time_created": "2025-11-07 18:11:00", "time_modified": "2025-11-07 18:11:00", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Add a comment, \"Thank you so much!\", to all the venmo payments I received from my roommates in the last 10 days (including today), and like those payments.", "when_to_use": "When performing bulk operations on API resources", "category": "failure", "created_time": "2025-11-07 18:11:00", "modified_time": "2025-11-07 18:11:00", "generalized_query": "Execute batch operations (like/comment) on multiple API resources", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "85f33c0bfc4240b1be446b6192d84f88", "memory_type": "procedural", "when_to_use": "When needing to authenticate to a service using stored credentials and retrieve personalized recommendations", "content": "The successful pattern involved: 1) Using the supervisor app to retrieve stored Spotify credentials, 2) Authenticating via the login API to obtain an access token, 3) Using the access token to call the show_recommendations API. This worked because it correctly chained authentication with recommendation retrieval, leveraging stored credentials and proper API parameter passing.", "score": 0, "time_created": "2025-11-07 18:11:35", "time_modified": "2025-11-07 18:11:35", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Name the artist most recommended to me on Spotify.", "when_to_use": "When needing to authenticate to a service using stored credentials and retrieve personalized recommendations", "category": "success", "created_time": "2025-11-07 18:11:35", "modified_time": "2025-11-07 18:11:35", "generalized_query": "Retrieve personalized recommendations from a music streaming service using stored authentication credentials", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "df39e40c2a8946519fc59fde7b535445", "memory_type": "procedural", "when_to_use": "When retrieving personalized recommendations from paginated API endpoints", "content": "The higher-scoring approach implemented systematic pagination (fetching 10 pages) and aggregated all artist data before determining frequency, whereas the lower-scoring approach only retrieved a single page and selected the first result. This comprehensive data collection and statistical analysis ensured accuracy by accounting for all recommendations, not just initial results.", "score": 0, "time_created": "2025-11-07 18:11:46", "time_modified": "2025-11-07 18:11:46", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Name the artist most recommended to me on Spotify.", "when_to_use": "When retrieving personalized recommendations from paginated API endpoints", "category": "comparative", "created_time": "2025-11-07 18:11:46", "modified_time": "2025-11-07 18:11:46", "generalized_query": "Identify the most frequently appearing entity in paginated API response data", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "a9cb8235868c469fa147d334f9de2c0f", "memory_type": "procedural", "when_to_use": "When needing to authenticate to a service using stored credentials and API documentation", "content": "Successfully used API documentation to identify authentication requirements, retrieved stored credentials via supervisor app, and implemented token-based authentication to access personalized recommendations. This pattern ensures secure API access while leveraging system-integrated credential storage.", "score": 0, "time_created": "2025-11-07 18:11:46", "time_modified": "2025-11-07 18:11:46", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Name the artist most recommended to me on Spotify.", "when_to_use": "When needing to authenticate to a service using stored credentials and API documentation", "category": "success", "created_time": "2025-11-07 18:11:46", "modified_time": "2025-11-07 18:11:46", "generalized_query": "Identify the most frequently recommended content creator from a personalized recommendation system", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "06e629ca78764d4ea8e206f097e44f6d", "memory_type": "procedural", "when_to_use": "When retrieving personalized data from APIs with pagination, especially for analysis requiring comprehensive dataset coverage", "content": "The higher-scoring approach maximized data coverage by setting page_limit=20 (maximum allowed) during recommendations retrieval, ensuring comprehensive artist frequency analysis. This contrasted with the lower-scoring approach's page_limit=10, which limited data sampling and produced an incomplete artist count. The higher score's method guaranteed no truncation of potential candidates, critical for accuracy in 'least frequent' identification tasks.", "score": 0, "time_created": "2025-11-07 18:11:34", "time_modified": "2025-11-07 18:11:34", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Name the artist least recommended to me on Spotify.", "when_to_use": "When retrieving personalized data from APIs with pagination, especially for analysis requiring comprehensive dataset coverage", "category": "comparative", "created_time": "2025-11-07 18:11:34", "modified_time": "2025-11-07 18:11:34", "generalized_query": "Identify the least frequent entity in a paginated API response", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "f0248565def145a8889dec1d50f13a39", "memory_type": "procedural", "when_to_use": "When accessing protected APIs requires credential retrieval from supervisor systems", "content": "Effectively chained supervisor app credential retrieval with Spotify API authentication. This pattern works for scenarios where account credentials are centralized in a supervisor system and need to be programmatically accessed for third-party service integration.", "score": 0, "time_created": "2025-11-07 18:11:39", "time_modified": "2025-11-07 18:11:39", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Name the artist least recommended to me on Spotify.", "when_to_use": "When accessing protected APIs requires credential retrieval from supervisor systems", "category": "success", "created_time": "2025-11-07 18:11:39", "modified_time": "2025-11-07 18:11:39", "generalized_query": "Access a service API using credentials stored in a supervisor application", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "f15dcc97e8fc4aa6b9e5e243179e3e7d", "memory_type": "procedural", "when_to_use": "When retrieving song data from Spotify libraries, ensure all potential sources (songs, albums, playlists) are fully checked.", "content": "Failing to check all relevant data sources (e.g., playlists) can lead to incomplete results. The agent only checked song and album libraries but overlooked playlist-contained songs not in the song/album libraries.", "score": 0, "time_created": "2025-11-07 18:12:17", "time_modified": "2025-11-07 18:12:17", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "What is the title of the oldest released song in my Spotify account from across my song, album and playlist libraries?", "when_to_use": "When retrieving song data from Spotify libraries, ensure all potential sources (songs, albums, playlists) are fully checked.", "category": "failure", "created_time": "2025-11-07 18:12:17", "modified_time": "2025-11-07 18:12:17", "generalized_query": "Identify the earliest released media item across multiple user libraries.", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "ac1f0b28a25c44789fc7da5837e57ac7", "memory_type": "procedural", "when_to_use": "When retrieving the most recent song from user libraries, ensure cross-library references are validated", "content": "Always verify the existence of referenced IDs in primary libraries before attempting lookups to avoid null results", "score": 0, "time_created": "2025-11-07 18:12:17", "time_modified": "2025-11-07 18:12:17", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "What is the title of the newest released song in my Spotify account from across my song, album and playlist libraries?", "when_to_use": "When retrieving the most recent song from user libraries, ensure cross-library references are validated", "category": "failure", "created_time": "2025-11-07 18:12:17", "modified_time": "2025-11-07 18:12:17", "generalized_query": "Identify the most recent item across multiple user libraries with potential cross-reference dependencies", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "e5c58080ae044c7ab97772f7313456b0", "memory_type": "procedural", "when_to_use": "When handling authentication-sensitive operations, validate credential usage against API requirements.", "content": "Authentication tokens must be properly scoped and validated before accessing user-specific endpoints.", "score": 0, "time_created": "2025-11-07 18:12:32", "time_modified": "2025-11-07 18:12:32", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "What is the title of the newest released song in my Spotify account from across my song, album and playlist libraries?", "when_to_use": "When handling authentication-sensitive operations, validate credential usage against API requirements.", "category": "failure", "created_time": "2025-11-07 18:12:32", "modified_time": "2025-11-07 18:12:32", "generalized_query": "Access user-specific data requiring authentication tokens.", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "b1754afcc1bd4e55b2aee5ac5066faf5", "memory_type": "procedural", "when_to_use": "When integrating multiple APIs for task automation, especially involving authentication and data parsing", "content": "The higher-scoring approach systematically retrieved credentials via supervisor API, maintained proper authentication tokens throughout the workflow, and used precise data parsing (e.g., regex-like splitting of note content). It avoided redundant steps by directly sending payment requests after data extraction, whereas the lower-scoring approach had authentication errors, used inefficient list operations, and included unnecessary checks of sent requests.", "score": 0, "time_created": "2025-11-07 18:12:40", "time_modified": "2025-11-07 18:12:40", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Make payment requests for others with a description note 'Work Dinner'", "when_to_use": "When integrating multiple APIs for task automation, especially involving authentication and data parsing", "category": "comparative", "created_time": "2025-11-07 18:12:40", "modified_time": "2025-11-07 18:12:40", "generalized_query": "Automate cross-platform financial transactions using API integrations", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "649e06289ef4469a96c2259d0f2380e7", "memory_type": "procedural", "when_to_use": "When using third-party credential stores for API authentication", "content": "Implement explicit security checks and audit trails when accessing stored credentials across multiple services", "score": 0, "time_created": "2025-11-07 18:12:41", "time_modified": "2025-11-07 18:12:41", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Retrieve Venmo/Simple Note credentials from supervisor app passwords", "when_to_use": "When using third-party credential stores for API authentication", "category": "failure", "created_time": "2025-11-07 18:12:41", "modified_time": "2025-11-07 18:12:41", "generalized_query": "Accessing stored credentials for multi-service API authentication", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "e857e21281a34437bd1907f377a50d00", "memory_type": "procedural", "when_to_use": "When retrieving chronological data from paginated APIs", "content": "Assuming 'added_at' timestamp represents release date may be incorrect - need to verify if API provides actual release date metadata", "score": 0, "time_created": "2025-11-07 18:12:27", "time_modified": "2025-11-07 18:12:27", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "What is the title of the oldest released song in my Spotify account from across my song, album and playlist libraries?", "when_to_use": "When retrieving chronological data from paginated APIs", "category": "failure", "created_time": "2025-11-07 18:12:27", "modified_time": "2025-11-07 18:12:27", "generalized_query": "Identify the earliest chronological entry in a user's media library across multiple data sources", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "c33f8643083f46039b48437798a7142c", "memory_type": "procedural", "when_to_use": "When handling authentication credentials", "content": "Should verify token validity and implement refresh mechanisms for long-running operations", "score": 0, "time_created": "2025-11-07 18:12:27", "time_modified": "2025-11-07 18:12:27", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "What is the title of the oldest released song in my Spotify account from across my song, album and playlist libraries?", "when_to_use": "When handling authentication credentials", "category": "failure", "created_time": "2025-11-07 18:12:27", "modified_time": "2025-11-07 18:12:27", "generalized_query": "Accessing user-specific data requiring authentication", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "6865407377bd48f5a953d7b1efc576bb", "memory_type": "procedural", "when_to_use": "When interacting with APIs that return structured data, especially when keys are assumed based on documentation", "content": "Always validate API response structures before accessing nested keys to avoid KeyError exceptions", "score": 0, "time_created": "2025-11-07 18:12:55", "time_modified": "2025-11-07 18:12:55", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Make payment requests for others with a description note 'Friends Dinner'", "when_to_use": "When interacting with APIs that return structured data, especially when keys are assumed based on documentation", "category": "failure", "created_time": "2025-11-07 18:12:55", "modified_time": "2025-11-07 18:12:55", "generalized_query": "Automate payment requests based on extracted financial data from notes", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "43efb81209fe4f699a958a81b0a4766e", "memory_type": "procedural", "when_to_use": "When parsing financial data from text-based notes", "content": "Implement data sanitization steps (e.g., currency symbol removal) before type conversion to handle formatting inconsistencies", "score": 0, "time_created": "2025-11-07 18:12:55", "time_modified": "2025-11-07 18:12:55", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Parse note content to extract expense shares", "when_to_use": "When parsing financial data from text-based notes", "category": "failure", "created_time": "2025-11-07 18:12:55", "modified_time": "2025-11-07 18:12:55", "generalized_query": "Extract numerical values from formatted text content", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "6c7e58f4f8844fab8733dd1aacec38fc", "memory_type": "procedural", "when_to_use": "When creating payment requests to external services", "content": "Verify contact existence through phone app integration before initiating payment requests to avoid 409 errors", "score": 0, "time_created": "2025-11-07 18:12:55", "time_modified": "2025-11-07 18:12:55", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Create payment requests for remaining friends", "when_to_use": "When creating payment requests to external services", "category": "failure", "created_time": "2025-11-07 18:12:55", "modified_time": "2025-11-07 18:12:55", "generalized_query": "Execute financial transactions based on contact information", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "f73a8858b0394c3b9b776d34448a017f", "memory_type": "procedural", "when_to_use": "When extracting credentials or data from structured lists", "content": "Always verify data structure operations - list comprehensions should filter, not compare - and validate credentials before use", "score": 0, "time_created": "2025-11-07 18:13:15", "time_modified": "2025-11-07 18:13:15", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Make payment requests for others with a description note 'Dinner with Colleagues'", "when_to_use": "When extracting credentials or data from structured lists", "category": "failure", "created_time": "2025-11-07 18:13:15", "modified_time": "2025-11-07 18:13:15", "generalized_query": "Automatically retrieve and validate user credentials from account management systems", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "35e6ba50de7b46d8afbe0a44f6abccc6", "memory_type": "procedural", "when_to_use": "When handling API authentication tokens", "content": "Always refresh and verify access tokens before critical operations, as tokens may expire or become invalid between requests", "score": 0, "time_created": "2025-11-07 18:13:15", "time_modified": "2025-11-07 18:13:15", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Creating payment request for Travis for $17", "when_to_use": "When handling API authentication tokens", "category": "failure", "created_time": "2025-11-07 18:13:15", "modified_time": "2025-11-07 18:13:15", "generalized_query": "Maintain valid authentication tokens for financial transaction APIs", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "549a0d6c4ffe41b398698e596fae245b", "memory_type": "procedural", "when_to_use": "When preparing payment recipient information", "content": "Use contact management systems to validate recipient identities and obtain proper contact details for payment requests", "score": 0, "time_created": "2025-11-07 18:13:15", "time_modified": "2025-11-07 18:13:15", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Payment request failed due to invalid email format", "when_to_use": "When preparing payment recipient information", "category": "failure", "created_time": "2025-11-07 18:13:15", "modified_time": "2025-11-07 18:13:15", "generalized_query": "Verify recipient contact information before initiating financial transactions", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "8099f6e3d9cd4332b86403a3bfdf99bb", "memory_type": "procedural", "when_to_use": "When retrieving precise transaction data filtered by specific relationships (e.g., roommates) requires cross-app verification", "content": "The higher-scoring approach achieved accuracy by first identifying roommates via the phone app's contact relationships (ensuring verified email addresses) before querying Venmo transactions. This avoided relying on potentially ambiguous transaction descriptions. The lower-scoring approach used a keyword search ('roommate') in Venmo transactions, which risks including unrelated transactions with similar descriptions.", "score": 0, "time_created": "2025-11-07 18:13:17", "time_modified": "2025-11-07 18:13:17", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "How much money have I sent to my roommates on venmo since 1st Jan of this year?", "when_to_use": "When retrieving precise transaction data filtered by specific relationships (e.g., roommates) requires cross-app verification", "category": "comparative", "created_time": "2025-11-07 18:13:17", "modified_time": "2025-11-07 18:13:17", "generalized_query": "Calculating monetary transfers to specific relationship groups across financial platforms", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "63b80ea3e6bd4fcd857a0b4186646152", "memory_type": "procedural", "when_to_use": "When retrieving financial data with date ranges", "content": "Always validate date parameters against API format requirements (YYYY-MM-DD) and consider time zone implications", "score": 0, "time_created": "2025-11-07 18:13:19", "time_modified": "2025-11-07 18:13:19", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "How much money have I sent to my roommates on venmo since 1st Jan of this year?", "when_to_use": "When retrieving financial data with date ranges", "category": "failure", "created_time": "2025-11-07 18:13:19", "modified_time": "2025-11-07 18:13:19", "generalized_query": "Aggregate financial transactions within specific temporal boundaries", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "4ecaad63525147e4aa91ebcf6e031760", "memory_type": "procedural", "when_to_use": "When querying paginated API endpoints with filters", "content": "The successful implementation used: 1) Looping through paginated results with page_index increment 2) Applying multiple filters (user_email, min_created_at, direction) in API calls 3) Accumulating results across pages. This ensured complete data collection despite API pagination limits.", "score": 0, "time_created": "2025-11-07 18:13:30", "time_modified": "2025-11-07 18:13:30", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "How much money have I sent to my roommates on venmo since 1st Jan of this year?", "when_to_use": "When querying paginated API endpoints with filters", "category": "success", "created_time": "2025-11-07 18:13:30", "modified_time": "2025-11-07 18:13:30", "generalized_query": "Retrieve and aggregate data from paginated API endpoints with multiple filters", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "b96ace86ecf54142ae188b5251b65bed", "memory_type": "procedural", "when_to_use": "When retrieving transaction data filtered by specific users or groups", "content": "Always explicitly filter transactions by recipient identifiers (like email) when the query specifies particular relationships (e.g., 'coworkers') rather than relying solely on transaction direction", "score": 0, "time_created": "2025-11-07 18:13:21", "time_modified": "2025-11-07 18:13:21", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "How much money have I received to my coworkers on venmo since 1st Feb of this year?", "when_to_use": "When retrieving transaction data filtered by specific users or groups", "category": "failure", "created_time": "2025-11-07 18:13:21", "modified_time": "2025-11-07 18:13:21", "generalized_query": "Calculate aggregated financial transactions between the user and specific contacts over a time period", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "90b030a8f3f9495f950cd15a94de419d", "memory_type": "procedural", "when_to_use": "When encountering API errors related to credential validation or data filtering", "content": "The agent successfully resolved 401 errors by: 1) Correctly identifying the appropriate username (phone number vs. email), 2) Using the supervisor API to programmatically retrieve stored credentials, and 3) Implementing proper error handling during login attempts. This demonstrates the importance of credential management and API-specific authentication requirements.", "score": 0, "time_created": "2025-11-07 18:13:26", "time_modified": "2025-11-07 18:13:26", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "How much money have I received to my coworkers on venmo since 1st Feb of this year?", "when_to_use": "When encountering API errors related to credential validation or data filtering", "category": "success", "created_time": "2025-11-07 18:13:26", "modified_time": "2025-11-07 18:13:26", "generalized_query": "Troubleshoot and resolve API authentication/authorization issues in multi-step data retrieval workflows", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "52e8867417fe4b50818cce0dbac24aa9", "memory_type": "procedural", "when_to_use": "When needing to follow artists of specific genres across user playlists", "content": "Successful pattern involved: 1) Retrieving user playlists with pagination 2) Extracting song IDs 3) Filtering classical songs via genre check 4) Compiling unique artists 5) Following each artist using access token. Works because it systematically processes music library data through API layers while maintaining deduplication.", "score": 0, "time_created": "2025-11-07 18:13:56", "time_modified": "2025-11-07 18:13:56", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Follow all artists of all classical-genre songs in any of my playlists on Spotify.", "when_to_use": "When needing to follow artists of specific genres across user playlists", "category": "success", "created_time": "2025-11-07 18:13:56", "modified_time": "2025-11-07 18:13:56", "generalized_query": "Automatically follow creators of content matching specific criteria across user libraries", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "13e315f1348443edb048dcbd09784167", "memory_type": "procedural", "when_to_use": "When developing user preference-driven automation", "content": "Successful decision pattern: Using the supervisor API to complete tasks after achieving goals. The implementation properly maintained authentication tokens across operations and handled API rate limits through paginated requests.", "score": 0, "time_created": "2025-11-07 18:13:56", "time_modified": "2025-11-07 18:13:56", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Follow all artists of all classical-genre songs in any of my playlists on Spotify.", "when_to_use": "When developing user preference-driven automation", "category": "success", "created_time": "2025-11-07 18:13:56", "modified_time": "2025-11-07 18:13:56", "generalized_query": "Automate social connections based on user content preferences", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "49a9cebcbbbc49a7b6885f182f9c00ff", "memory_type": "procedural", "when_to_use": "When working with nested API data structures", "content": "Always verify API response schema structure before accessing nested fields to prevent KeyErrors", "score": 0, "time_created": "2025-11-07 18:14:05", "time_modified": "2025-11-07 18:14:05", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Follow all artists of all classical-genre songs in any of my playlists on Spotify.", "when_to_use": "When working with nested API data structures", "category": "failure", "created_time": "2025-11-07 18:14:05", "modified_time": "2025-11-07 18:14:05", "generalized_query": "Extract data from API responses with explicit field validation", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "adead082dcad46a7ae08d7751d5ca705", "memory_type": "procedural", "when_to_use": "When retrieving specific account details from a list of accounts", "content": "Use generator expressions with next() instead of list comprehensions for single-item retrieval to avoid type errors", "score": 0, "time_created": "2025-11-07 18:13:52", "time_modified": "2025-11-07 18:13:52", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "How much money have I sent or received to my roommates on venmo since 1st Mar of this year?", "when_to_use": "When retrieving specific account details from a list of accounts", "category": "failure", "created_time": "2025-11-07 18:13:52", "modified_time": "2025-11-07 18:13:52", "generalized_query": "Extracting specific user credentials from a list of stored account passwords", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "b4e11f87ed2a4eb2a7e04050060bdcb0", "memory_type": "procedural", "when_to_use": "When executing multi-step API workflows", "content": "Always validate API response success states before proceeding with subsequent operations", "score": 0, "time_created": "2025-11-07 18:13:52", "time_modified": "2025-11-07 18:13:52", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "How much money have I sent or received to my roommates on venmo since 1st Mar of this year?", "when_to_use": "When executing multi-step API workflows", "category": "failure", "created_time": "2025-11-07 18:13:52", "modified_time": "2025-11-07 18:13:52", "generalized_query": "Authenticating and querying financial data from secure platforms", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "a21704576994421d88da1b793775c9b8", "memory_type": "procedural", "when_to_use": "When submitting task answers to external systems with strict data type requirements", "content": "Always validate data types against API specifications before submission, as type mismatches cause validation errors even if content is logically correct.", "score": 0, "time_created": "2025-11-07 18:14:27", "time_modified": "2025-11-07 18:14:27", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Follow all artists of all indie-genre songs in any of my playlists on Spotify.", "when_to_use": "When submitting task answers to external systems with strict data type requirements", "category": "failure", "created_time": "2025-11-07 18:14:27", "modified_time": "2025-11-07 18:14:27", "generalized_query": "Executing task completion with data type validation requirements", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "c0a07b20a3ba49c8a560228f540e02af", "memory_type": "procedural", "when_to_use": "When needing to follow all artists of a specific genre across playlists", "content": "Successfully retrieved user playlists, extracted song metadata, identified artist IDs through nested API calls, and executed bulk follow operations. The critical pattern was combining playlist traversal with genre-based search to ensure comprehensive artist discovery.", "score": 0, "time_created": "2025-11-07 18:14:30", "time_modified": "2025-11-07 18:14:30", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Follow all artists of all indie-genre songs in any of my playlists on Spotify", "when_to_use": "When needing to follow all artists of a specific genre across playlists", "category": "success", "created_time": "2025-11-07 18:14:30", "modified_time": "2025-11-07 18:14:30", "generalized_query": "Automatically follow all creators associated with content matching a specific criterion across user libraries", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "d5a0a725d51041b1bc970ea480732d17", "memory_type": "procedural", "when_to_use": "When executing bulk operations requiring access tokens", "content": "Maintained consistent use of access token throughout operations after initial login. The pattern of storing authentication results and reusing them for subsequent API calls ensured secure and continuous session management.", "score": 0, "time_created": "2025-11-07 18:14:30", "time_modified": "2025-11-07 18:14:30", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Follow multiple artists using Spotify API", "when_to_use": "When executing bulk operations requiring access tokens", "category": "success", "created_time": "2025-11-07 18:14:30", "modified_time": "2025-11-07 18:14:30", "generalized_query": "Perform authenticated bulk actions on social media platforms", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "68d562d85dac4b5c9c7672397110e92a", "memory_type": "procedural", "when_to_use": "When parsing file content for numerical data in bill files", "content": "Assumptions about file content format can lead to parsing failures; always verify file structure before extraction", "score": 0, "time_created": "2025-11-07 18:14:45", "time_modified": "2025-11-07 18:14:45", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "What is the total cost of my internet bills for this year? The bills are in \"~/bills/\" directory of my file system.", "when_to_use": "When parsing file content for numerical data in bill files", "category": "failure", "created_time": "2025-11-07 18:14:45", "modified_time": "2025-11-07 18:14:45", "generalized_query": "Extracting numerical values from structured text files in a directory", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "31801580604747f9b9065d7c6f90751c", "memory_type": "procedural", "when_to_use": "When accessing directory contents with API calls", "content": "Recursive directory traversal parameters may need adjustment based on actual directory structure", "score": 0, "time_created": "2025-11-07 18:14:45", "time_modified": "2025-11-07 18:14:45", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Extracting bill files from the \"~/bills/\" directory", "when_to_use": "When accessing directory contents with API calls", "category": "failure", "created_time": "2025-11-07 18:14:45", "modified_time": "2025-11-07 18:14:45", "generalized_query": "Retrieving file listings from a file system API", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "10a5fdc559dd43d4ad77e0030f796bfd", "memory_type": "procedural", "when_to_use": "When extracting numerical data from text fields that include currency symbols or non-numeric characters", "content": "Always preprocess text-based numerical values by removing currency symbols and non-numeric characters before conversion to float", "score": 0, "time_created": "2025-11-07 18:14:47", "time_modified": "2025-11-07 18:14:47", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "What is the total cost of my electricity bills for this year? The bills are in \"~/bills/\" directory of my file system.", "when_to_use": "When extracting numerical data from text fields that include currency symbols or non-numeric characters", "category": "failure", "created_time": "2025-11-07 18:14:47", "modified_time": "2025-11-07 18:14:47", "generalized_query": "Extracting numerical values from text content containing non-numeric characters", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "755774339d23487fa134adff8398d4bd", "memory_type": "procedural", "when_to_use": "When retrieving specific values from list comprehensions or generator expressions", "content": "Use generator expressions with next() instead of list comprehensions when expecting single-value returns to avoid boolean misinterpretation", "score": 0, "time_created": "2025-11-07 18:14:47", "time_modified": "2025-11-07 18:14:47", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Extracting the file_system password from the supervisor's account passwords", "when_to_use": "When retrieving specific values from list comprehensions or generator expressions", "category": "failure", "created_time": "2025-11-07 18:14:47", "modified_time": "2025-11-07 18:14:47", "generalized_query": "Retrieving specific items from collections using conditional logic", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "04352eeb7cac4b58aa2ddbd34d11bed2", "memory_type": "procedural", "when_to_use": "When handling API response data with mixed file types (text vs binary)", "content": "Always verify file content type before parsing and implement content-type aware processing workflows", "score": 0, "time_created": "2025-11-07 18:14:47", "time_modified": "2025-11-07 18:14:47", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Summing electricity bill amounts from files in ~/bills/electricity directory", "when_to_use": "When handling API response data with mixed file types (text vs binary)", "category": "failure", "created_time": "2025-11-07 18:14:47", "modified_time": "2025-11-07 18:14:47", "generalized_query": "Processing mixed file types in directory listings", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "3d74bfd77c1e48928e5de871bccc8829", "memory_type": "procedural", "when_to_use": "When filtering songs by genre to follow artists", "content": "Always explicitly filter search results by genre parameter rather than relying on playlist metadata which may not contain accurate genre tags", "score": 0, "time_created": "2025-11-07 18:14:26", "time_modified": "2025-11-07 18:14:26", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Follow all artists of all reggae-genre songs in any of my playlists on Spotify.", "when_to_use": "When filtering songs by genre to follow artists", "category": "failure", "created_time": "2025-11-07 18:14:26", "modified_time": "2025-11-07 18:14:26", "generalized_query": "Follow artists based on song genre filters across user playlists", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "610018bacfe24f6186b1960820ab8bda", "memory_type": "procedural", "when_to_use": "When executing API calls with string parameters", "content": "Always validate string literals and ensure proper syntax termination in API request construction to prevent execution failures", "score": 0, "time_created": "2025-11-07 18:14:26", "time_modified": "2025-11-07 18:14:26", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I'll now follow the artist associated with this song.", "when_to_use": "When executing API calls with string parameters", "category": "failure", "created_time": "2025-11-07 18:14:26", "modified_time": "2025-11-07 18:14:26", "generalized_query": "Execute API operations with properly formatted string parameters", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "448b84d0991d4a98b6c3b60e0e346a9c", "memory_type": "procedural", "when_to_use": "When accessing protected file system resources requiring authentication tokens", "content": "The higher-scoring approach ensured consistent use of access tokens across all API calls after login, avoiding authentication errors. It also implemented precise year-filtering (2023) during file selection, whereas the lower-scoring approach initially omitted the access token and included 2022 files in the calculation. The higher approach's strict filtering and token management prevented both authorization failures and data inclusion errors.", "score": 0, "time_created": "2025-11-07 18:15:19", "time_modified": "2025-11-07 18:15:19", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "What is the total cost of my cable bills for this year? The bills are in \"~/bills/\" directory of my file system.", "when_to_use": "When accessing protected file system resources requiring authentication tokens", "category": "comparative", "created_time": "2025-11-07 18:15:19", "modified_time": "2025-11-07 18:15:19", "generalized_query": "Calculate total expenses from specific files in a protected directory", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "77331e27e4d144e89cd5f7feb17484a7", "memory_type": "procedural", "when_to_use": "When parsing structured text files for financial data", "content": "Reliable data extraction requires explicit validation of file format consistency. Assume no uniformity in file structures unless explicitly documented.", "score": 0, "time_created": "2025-11-07 18:15:21", "time_modified": "2025-11-07 18:15:21", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Extracting total_amount from cable bill files with consistent formatting", "when_to_use": "When parsing structured text files for financial data", "category": "failure", "created_time": "2025-11-07 18:15:21", "modified_time": "2025-11-07 18:15:21", "generalized_query": "Extracting numerical values from semi-structured text documents", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "3f8443edfac34d6f9cbc302e0eebb2cf", "memory_type": "procedural", "when_to_use": "When interacting with supervisor task management system", "content": "Always confirm task completion requirements (format, units, precision) before submission. Verify the target API endpoint's expected response format.", "score": 0, "time_created": "2025-11-07 18:15:21", "time_modified": "2025-11-07 18:15:21", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Completing supervisor task with calculated total_cost", "when_to_use": "When interacting with supervisor task management system", "category": "failure", "created_time": "2025-11-07 18:15:21", "modified_time": "2025-11-07 18:15:21", "generalized_query": "Submitting task results through supervisor API endpoints", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "a04cffae310141fea7122ebd57bcdc9c", "memory_type": "procedural", "when_to_use": "When interacting with APIs that require precise parameter naming and validation", "content": "Always verify API parameter names against documentation to avoid validation errors caused by incorrect parameter naming conventions.", "score": 0, "time_created": "2025-11-07 18:15:36", "time_modified": "2025-11-07 18:15:36", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Arrange my \"~/photographs/vacations/\" directory by organizing the photos from three vacations.", "when_to_use": "When interacting with APIs that require precise parameter naming and validation", "category": "failure", "created_time": "2025-11-07 18:15:36", "modified_time": "2025-11-07 18:15:36", "generalized_query": "Organizing files into subdirectories based on metadata criteria", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "a73cda1e1f0a4b28895c5d63c58e0eb0", "memory_type": "procedural", "when_to_use": "When performing bulk file operations after directory structure modifications", "content": "Verify source file existence before operations when directory structures may change dynamically during execution.", "score": 0, "time_created": "2025-11-07 18:15:36", "time_modified": "2025-11-07 18:15:36", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Move them into sub-directories named after their respective vacation spots", "when_to_use": "When performing bulk file operations after directory structure modifications", "category": "failure", "created_time": "2025-11-07 18:15:36", "modified_time": "2025-11-07 18:15:36", "generalized_query": "Relocating files to new directory structures", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "81c96cb84e0c4bf6b7f4750cb4bddbce", "memory_type": "procedural", "when_to_use": "When authenticating to a protected API without an access token", "content": "Successfully retrieved stored credentials from supervisor API, authenticated via login endpoint, and used access token for subsequent operations. This ensures secure access to file system operations when initial requests fail due to missing authentication.", "score": 0, "time_created": "2025-11-07 18:15:47", "time_modified": "2025-11-07 18:15:47", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Arrange my \"~/photographs/vacations/\" directory by organizing the photos from three vacations.", "when_to_use": "When authenticating to a protected API without an access token", "category": "success", "created_time": "2025-11-07 18:15:47", "modified_time": "2025-11-07 18:15:47", "generalized_query": "Organize files in a directory using authentication credentials stored in a supervisor system", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "ecfee4f847a0458c82855d0bb32a02c6", "memory_type": "procedural", "when_to_use": "When categorizing files based on metadata timestamps", "content": "Extracted creation dates from file metadata, used date ranges (Feb/Mar 2023) to categorize files into vacation-specific groups. This approach leverages temporal metadata for automated file classification, ensuring accurate organization without manual tagging.", "score": 0, "time_created": "2025-11-07 18:15:47", "time_modified": "2025-11-07 18:15:47", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Arrange my \"~/photographs/vacations/\" directory by organizing the photos from three vacations.", "when_to_use": "When categorizing files based on metadata timestamps", "category": "success", "created_time": "2025-11-07 18:15:47", "modified_time": "2025-11-07 18:15:47", "generalized_query": "Categorize files into date-based groups using metadata extraction", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "5e1594692d9d48feae1808e29ce0ec31", "memory_type": "procedural", "when_to_use": "When interacting with protected APIs requiring authentication tokens", "content": "Always verify authentication status and include required tokens in API requests to avoid 401 Unauthorized errors", "score": 0, "time_created": "2025-11-07 18:15:54", "time_modified": "2025-11-07 18:15:54", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Arrange my \"~/photographs/vacations/\" directory by organizing the photos from three vacations", "when_to_use": "When interacting with protected APIs requiring authentication tokens", "category": "failure", "created_time": "2025-11-07 18:15:54", "modified_time": "2025-11-07 18:15:54", "generalized_query": "Organizing files in a directory using API operations with authentication requirements", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "cbb22db769fb42e3affd42130e5c2640", "memory_type": "procedural", "when_to_use": "When parsing file metadata for organizational tasks", "content": "Reliance on file naming conventions for date parsing is error-prone; use API metadata endpoints (like show_file) for accurate creation date information", "score": 0, "time_created": "2025-11-07 18:15:54", "time_modified": "2025-11-07 18:15:54", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "The files created in March and April of this year correspond to Rome and Santorini, respectively", "when_to_use": "When parsing file metadata for organizational tasks", "category": "failure", "created_time": "2025-11-07 18:15:54", "modified_time": "2025-11-07 18:15:54", "generalized_query": "Categorizing files based on metadata with API-driven date validation", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "f55ca8053e254be5a443e8c527ca2350", "memory_type": "procedural", "when_to_use": "When organizing files into directories based on metadata-driven rules requiring API authentication", "content": "Successful execution required: 1) Proper authentication flow (login + token usage), 2) Using file metadata (created_at) rather than filename patterns for date determination, 3) Correct API parameter mapping (source_file_path/destination_file_path). The agent demonstrated adaptability by switching from filename parsing to metadata extraction after encountering format inconsistencies.", "score": 0, "time_created": "2025-11-07 18:15:54", "time_modified": "2025-11-07 18:15:54", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Arrange my \"~/photographs/vacations/\" directory by organizing the photos from three vacations. The files created in January and April of this year correspond to Athens and Seoul, respectively, while the others are from Paris. Move them into sub-directories named after their respective vacation spots, maintaining the original file names.", "when_to_use": "When organizing files into directories based on metadata-driven rules requiring API authentication", "category": "success", "created_time": "2025-11-07 18:15:54", "modified_time": "2025-11-07 18:15:54", "generalized_query": "Organize files into directories based on metadata (creation date) with API-based authentication and folder structure management", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "d2ef322a67ba41d1be9e6d7bdf984f0f", "memory_type": "procedural", "when_to_use": "When creating directories with potential parent directory dependencies", "content": "Use recursive=True parameter when creating directories to ensure parent directories are automatically created if they don't exist.", "score": 0, "time_created": "2025-11-07 18:15:59", "time_modified": "2025-11-07 18:15:59", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Move them into sub-directories named after their respective vacation spots", "when_to_use": "When creating directories with potential parent directory dependencies", "category": "failure", "created_time": "2025-11-07 18:15:59", "modified_time": "2025-11-07 18:15:59", "generalized_query": "Creating nested directory structures", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "61023a4aa2854422af183a5f831a21bb", "memory_type": "procedural", "when_to_use": "When interacting with protected APIs requiring authentication tokens", "content": "The higher-scoring approach consistently included access_token in all required API calls and properly handled token acquisition/refresh workflows. The lower-scoring approach had multiple authentication failures due to missing tokens and incorrect parameter passing in API requests.", "score": 0, "time_created": "2025-11-07 18:16:01", "time_modified": "2025-11-07 18:16:01", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Arrange my \"~/photographs/vacations/\" directory by organizing the photos from three vacations... Move them into sub-directories named after their respective vacation spots, maintaining the original file names.", "when_to_use": "When interacting with protected APIs requiring authentication tokens", "category": "comparative", "created_time": "2025-11-07 18:16:01", "modified_time": "2025-11-07 18:16:01", "generalized_query": "Securely access and manipulate file systems through authenticated API calls", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "d4550059f806474080e83a7801e0902f", "memory_type": "procedural", "when_to_use": "When removing items based on release date rather than addition date in a library system", "content": "The higher-scoring approach correctly identified that 'added_at' in the library does not indicate release date, and used the 'show_song' API to fetch accurate release dates. This ensured removal criteria matched the task requirements. The lower-scoring approach incorrectly relied on 'added_at' without verifying release dates, leading to incomplete/potentially incorrect removals.", "score": 0, "time_created": "2025-11-07 18:16:08", "time_modified": "2025-11-07 18:16:08", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Remove all songs from my Spotify song library and playlists that were released before 2021 year", "when_to_use": "When removing items based on release date rather than addition date in a library system", "category": "comparative", "created_time": "2025-11-07 18:16:08", "modified_time": "2025-11-07 18:16:08", "generalized_query": "Remove items from a library/playlists based on metadata (e.g., release date) rather than timestamps of addition", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "04a86ae2669f4b8496b7cf001538c0a0", "memory_type": "procedural", "when_to_use": "When interacting with API documentation", "content": "Avoid redundant API documentation queries - retrieve and analyze API descriptions once, then use the information for subsequent operations rather than repeatedly fetching the same data", "score": 0, "time_created": "2025-11-07 18:16:03", "time_modified": "2025-11-07 18:16:03", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Remove all songs from my Spotify song library and playlists that were released before 2021 year", "when_to_use": "When interacting with API documentation", "category": "failure", "created_time": "2025-11-07 18:16:03", "modified_time": "2025-11-07 18:16:03", "generalized_query": "Access and utilize API documentation effectively", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "f29d0bfe5e804de79eeba76ac4daccd2", "memory_type": "procedural", "when_to_use": "When modifying user data across multiple endpoints", "content": "Validate cross-component operations with transactional safeguards to prevent partial updates and maintain data consistency", "score": 0, "time_created": "2025-11-07 18:16:14", "time_modified": "2025-11-07 18:16:14", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Remove songs from both library and playlists", "when_to_use": "When modifying user data across multiple endpoints", "category": "failure", "created_time": "2025-11-07 18:16:14", "modified_time": "2025-11-07 18:16:14", "generalized_query": "Perform coordinated data modifications across related system components", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "3d7fed358b2a4da48ac9e55305fa348e", "memory_type": "procedural", "when_to_use": "When interacting with protected APIs that require authentication tokens", "content": "Always verify API authentication requirements and ensure valid access tokens are included in requests", "score": 0, "time_created": "2025-11-07 18:16:47", "time_modified": "2025-11-07 18:16:47", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Start playing a playlist on Spotify that has enough songs for my workout today", "when_to_use": "When interacting with protected APIs that require authentication tokens", "category": "failure", "created_time": "2025-11-07 18:16:47", "modified_time": "2025-11-07 18:16:47", "generalized_query": "Accessing protected resources through API authentication", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "141c33587fcf4657af3bccd6882077c3", "memory_type": "procedural", "when_to_use": "When integrating with APIs that require authentication tokens and handling playlist creation/searching in music streaming services", "content": "The higher-scoring approach achieved success by leveraging existing playlists through efficient API querying rather than creating new ones. It correctly handled authentication flow, used generator expressions for password lookup, and directly utilized a pre-existing 'K-Pop Kingdom' playlist with one song (instead of creating a new one). This avoided errors from playlist creation parameters and reduced API calls compared to the lower-scoring approach which required multiple search_songs calls.", "score": 0, "time_created": "2025-11-07 18:16:55", "time_modified": "2025-11-07 18:16:55", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Start playing a playlist on Spotify that has enough songs for my workout today. I do not want to have to change the playlist in the middle of my workout.", "when_to_use": "When integrating with APIs that require authentication tokens and handling playlist creation/searching in music streaming services", "category": "comparative", "created_time": "2025-11-07 18:16:55", "modified_time": "2025-11-07 18:16:55", "generalized_query": "Automatically select and play a pre-existing music playlist that matches a user's activity requirements without manual intervention", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "bcaca96defc546899feecd3ad134a250", "memory_type": "procedural", "when_to_use": "When filtering songs or playlists based on release dates", "content": "Always verify the exact date field (e.g., release_date vs. added_at) when filtering by release year to avoid incorrect assumptions about item age", "score": 0, "time_created": "2025-11-07 18:16:45", "time_modified": "2025-11-07 18:16:45", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Remove all songs from my Spotify song library and playlists that were released in or before 2021 year.", "when_to_use": "When filtering songs or playlists based on release dates", "category": "failure", "created_time": "2025-11-07 18:16:45", "modified_time": "2025-11-07 18:16:45", "generalized_query": "Remove items from a music library/playlists based on release date criteria", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "79033419d1ad4efba99e3841bf40451e", "memory_type": "procedural", "when_to_use": "When executing API operations in code sequences", "content": "Avoid including natural language comments in code execution sequences as they cause syntax errors in API call execution environments", "score": 0, "time_created": "2025-11-07 18:16:45", "time_modified": "2025-11-07 18:16:45", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Check the playlists next to ensure we remove any songs from there as well.", "when_to_use": "When executing API operations in code sequences", "category": "failure", "created_time": "2025-11-07 18:16:45", "modified_time": "2025-11-07 18:16:45", "generalized_query": "Execute API calls to modify music library contents", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "f4d3d9af9f8c4a67a1fda2c258d00f24", "memory_type": "procedural", "when_to_use": "When working with paginated API endpoints and nested collections", "content": "Implement explicit type checking and structure validation when working with paginated API results to avoid index errors and data mismatches.", "score": 0, "time_created": "2025-11-07 18:16:48", "time_modified": "2025-11-07 18:16:48", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Remove all songs from my Spotify song library and playlists that were released in or before 2021 year.", "when_to_use": "When working with paginated API endpoints and nested collections", "category": "failure", "created_time": "2025-11-07 18:16:48", "modified_time": "2025-11-07 18:16:48", "generalized_query": "Process and modify items across multiple API endpoints with pagination support", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "1a7f2fb855a341c3aaf037aed3cb3c05", "memory_type": "procedural", "when_to_use": "When accessing protected APIs requires authentication tokens and credentials are stored in a supervisor app", "content": "Successfully retrieved authentication credentials from supervisor app, used them to login to target app (simple_note/spotify), and handled 401 errors by implementing proper token-based authentication flow. This pattern ensures secure access to user data across applications.", "score": 0, "time_created": "2025-11-07 18:16:50", "time_modified": "2025-11-07 18:16:50", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Start playing a playlist on Spotify that has enough songs for my workout today", "when_to_use": "When accessing protected APIs requires authentication tokens and credentials are stored in a supervisor app", "category": "success", "created_time": "2025-11-07 18:16:50", "modified_time": "2025-11-07 18:16:50", "generalized_query": "Accessing user-specific data across apps requiring authentication", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "1949b411b2a243edad4e0d5517aeb4bc", "memory_type": "procedural", "when_to_use": "When parsing API response data structures", "content": "Always validate API response structure before accessing nested attributes, using conditional checks for key existence", "score": 0, "time_created": "2025-11-07 18:16:57", "time_modified": "2025-11-07 18:16:57", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Extract exercise names and durations from the workout plan", "when_to_use": "When parsing API response data structures", "category": "failure", "created_time": "2025-11-07 18:16:57", "modified_time": "2025-11-07 18:16:57", "generalized_query": "Handling nested or unexpected data structures in API responses", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "ca140783f645427296950f9cc3a086a6", "memory_type": "procedural", "when_to_use": "When managing playlist content duplication", "content": "Implement pre-addition existence checks for playlist items using API verification before attempting to add duplicates", "score": 0, "time_created": "2025-11-07 18:16:57", "time_modified": "2025-11-07 18:16:57", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Add songs to the workout playlist", "when_to_use": "When managing playlist content duplication", "category": "failure", "created_time": "2025-11-07 18:16:57", "modified_time": "2025-11-07 18:16:57", "generalized_query": "Avoiding duplicate content in playlist management", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "c380a0d3efa640f485475f0813e4d73f", "memory_type": "procedural", "when_to_use": "When interacting with APIs that have evolving or complex data structures", "content": "Always verify API response schemas before accessing nested fields, as key names (e.g., 'release_date' vs 'added_at') and data structures (e.g., 'songs' array vs 'song_ids' list) can differ from initial assumptions", "score": 0, "time_created": "2025-11-07 18:16:36", "time_modified": "2025-11-07 18:16:36", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Remove all songs from my Spotify song library and playlists that were released after 2021 year", "when_to_use": "When interacting with APIs that have evolving or complex data structures", "category": "failure", "created_time": "2025-11-07 18:16:36", "modified_time": "2025-11-07 18:16:36", "generalized_query": "Modify music library content based on temporal metadata filters", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "d33ffdd9a63c41569d4e66479f4ac3af", "memory_type": "procedural", "when_to_use": "When executing multi-step data modification workflows", "content": "Validate intermediate results at each transformation step to catch schema mismatches early, especially when dealing with temporal data and collection updates", "score": 0, "time_created": "2025-11-07 18:16:36", "time_modified": "2025-11-07 18:16:36", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Remove songs from library and update playlists", "when_to_use": "When executing multi-step data modification workflows", "category": "failure", "created_time": "2025-11-07 18:16:36", "modified_time": "2025-11-07 18:16:36", "generalized_query": "Execute coordinated data modifications across related system components", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "c533dc6c4a1042c9831fc9bdd9bd5c5a", "memory_type": "procedural", "when_to_use": "When handling nested data structures or API responses with heterogeneous data types, especially when filtering or validating collections.", "content": "The higher-scoring approach resolved a critical TypeError by correctly interpreting album['song_ids'] (a list of integers) rather than attempting to subscript individual song_id keys. This demonstrated precise understanding of API response schemas and data types, ensuring compatibility between downloaded_song_ids (a set of integers) and album song ID validation logic.", "score": 0, "time_created": "2025-11-07 18:17:42", "time_modified": "2025-11-07 18:17:42", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Identify songs to keep (liked or downloaded) and albums to keep (all songs downloaded)", "when_to_use": "When handling nested data structures or API responses with heterogeneous data types, especially when filtering or validating collections.", "category": "comparative", "created_time": "2025-11-07 18:17:42", "modified_time": "2025-11-07 18:17:42", "generalized_query": "Filtering data based on nested conditions in paginated API responses", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "95689c6de5154563b8fe0c6fcfebe818", "memory_type": "procedural", "when_to_use": "When implementing bulk removal operations with conditional dependencies between data entities", "content": "The higher-scoring approach ensured complete data retrieval through proper pagination handling (while True loop with page_index increment) before performing deletions. This guaranteed comprehensive coverage of all library items, unlike the lower-scoring approach which might have missed partial results from incomplete pagination. The use of set.union() for combining criteria also demonstrated optimized filtering logic.", "score": 0, "time_created": "2025-11-07 18:17:42", "time_modified": "2025-11-07 18:17:42", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Remove songs not in songs_to_keep and albums not in albums_to_keep", "when_to_use": "When implementing bulk removal operations with conditional dependencies between data entities", "category": "comparative", "created_time": "2025-11-07 18:17:42", "modified_time": "2025-11-07 18:17:42", "generalized_query": "Conditional bulk deletion with cross-entity validation", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "6234bcb8f8144a31a6da2f819d0005aa", "memory_type": "procedural", "when_to_use": "When interacting with APIs that require authentication tokens", "content": "Authentication must be explicitly handled before making API calls that require access tokens. Failing to retrieve or verify the access token upfront leads to immediate execution failures.", "score": 0, "time_created": "2025-11-07 18:17:47", "time_modified": "2025-11-07 18:17:47", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I need to cleanup my Spotify libraries. Keep only those songs and albums in my song and album library, respectively, that I have liked or downloaded, and remove the rest. An album is downloaded if all songs in it are downloaded. Keep my playlist library as is for now.", "when_to_use": "When interacting with APIs that require authentication tokens", "category": "failure", "created_time": "2025-11-07 18:17:47", "modified_time": "2025-11-07 18:17:47", "generalized_query": "Executing operations on a music library requiring API authentication and data filtering", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "63eed26d11b34483bca4c5f84c5f432f", "memory_type": "procedural", "when_to_use": "When accessing protected APIs requires authentication and the user has stored credentials in a supervisor app", "content": "Successful authentication flow required retrieving stored passwords from supervisor app, using them to login via API, and handling token-based authentication. This pattern ensures secure access to protected endpoints when credentials are centralized.", "score": 0, "time_created": "2025-11-07 18:17:36", "time_modified": "2025-11-07 18:17:36", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Start playing a playlist on Spotify that has enough songs for my workout today", "when_to_use": "When accessing protected APIs requires authentication and the user has stored credentials in a supervisor app", "category": "success", "created_time": "2025-11-07 18:17:36", "modified_time": "2025-11-07 18:17:36", "generalized_query": "Authenticate and retrieve resources from a service using stored credentials", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "4840e7ccf9424fd0b810295650b7b110", "memory_type": "procedural", "when_to_use": "When selecting resources from a list requires filtering based on content availability", "content": "Effective filtering of playlists by checking song_ids length ensured selection of non-empty playlists. This approach prevents selecting invalid/empty resources and ensures functional outcomes.", "score": 0, "time_created": "2025-11-07 18:17:36", "time_modified": "2025-11-07 18:17:36", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "The workout plan is in Simple Note", "when_to_use": "When selecting resources from a list requires filtering based on content availability", "category": "success", "created_time": "2025-11-07 18:17:36", "modified_time": "2025-11-07 18:17:36", "generalized_query": "Filter and select valid resources from a collection based on content criteria", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "f0dc9b02690f4d36a7d2b6250d1b5d68", "memory_type": "procedural", "when_to_use": "When interacting with API endpoints that require strict parameter formatting", "content": "Always validate API parameter requirements against documented specifications, including type constraints and format expectations (e.g., integer vs string, list structures). Repeated type conversion attempts without success indicate a fundamental mismatch between data format and API expectations.", "score": 0, "time_created": "2025-11-07 18:18:01", "time_modified": "2025-11-07 18:18:01", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Start playing a playlist on Spotify that has enough songs for my workout today. I do not want to have to change the playlist in the middle of my workout.", "when_to_use": "When interacting with API endpoints that require strict parameter formatting", "category": "failure", "created_time": "2025-11-07 18:18:01", "modified_time": "2025-11-07 18:18:01", "generalized_query": "Automatically generate and populate a music playlist based on user-defined criteria from external data sources", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "2539bd8d05e94e8bb797d50c27d422f1", "memory_type": "procedural", "when_to_use": "When needing to filter digital media libraries based on user engagement metrics (likes/downloads) with nested dependencies (e.g., albums requiring all songs to be downloaded)", "content": "Successful implementation of nested filtering logic: 1) Used set operations for O(1) lookups to identify songs/albums to keep 2) Implemented album validation by checking if all constituent songs were downloaded 3) Systematically removed non-compliant items using API operations. This approach ensured data integrity while respecting user-defined dependency rules.", "score": 0, "time_created": "2025-11-07 18:18:09", "time_modified": "2025-11-07 18:18:09", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I need to cleanup my Spotify libraries. Keep only those songs and albums in my song and album library, respectively, that I have liked or downloaded, and remove the rest. An album is downloaded if all songs in it are downloaded. Keep my playlist library as is for now.", "when_to_use": "When needing to filter digital media libraries based on user engagement metrics (likes/downloads) with nested dependencies (e.g., albums requiring all songs to be downloaded)", "category": "success", "created_time": "2025-11-07 18:18:09", "modified_time": "2025-11-07 18:18:09", "generalized_query": "Filter a media library to retain items based on user engagement (likes/downloads) with composite rules for dependent items", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "0e89c1196f0b4d4bbcd83c400240e5c2", "memory_type": "procedural", "when_to_use": "When needing to filter user libraries based on intersection of multiple criteria (e.g., liked + downloaded items)", "content": "Successfully used set intersections to identify retention candidates (songs/albums that are both liked and downloaded). Implemented pagination handling to ensure complete data retrieval from APIs. Used functional checks (e.g., is_album_downloaded) to validate composite conditions for albums requiring all songs to be downloaded.", "score": 0, "time_created": "2025-11-07 18:17:51", "time_modified": "2025-11-07 18:17:51", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I need to cleanup my Spotify libraries. Keep only those songs and albums in my song and album library, respectively, that I have liked and downloaded, and remove the rest.", "when_to_use": "When needing to filter user libraries based on intersection of multiple criteria (e.g., liked + downloaded items)", "category": "success", "created_time": "2025-11-07 18:17:51", "modified_time": "2025-11-07 18:17:51", "generalized_query": "Filter and retain items in a library that meet multiple user-defined criteria (e.g., liked + downloaded status)", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "adba85d7088f4ace84aebdec6ff6e3e8", "memory_type": "procedural", "when_to_use": "When interacting with APIs that require specific authorization scopes for modification actions", "content": "Access tokens must include the necessary authorization scopes for modification operations (e.g., library management). Repeated login attempts without proper scope validation will result in persistent 401 errors.", "score": 0, "time_created": "2025-11-07 18:18:01", "time_modified": "2025-11-07 18:18:01", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I need to cleanup my Spotify libraries. Keep only those songs and albums in my song and album library, respectively, that I have liked and downloaded, and remove the rest.", "when_to_use": "When interacting with APIs that require specific authorization scopes for modification actions", "category": "failure", "created_time": "2025-11-07 18:18:01", "modified_time": "2025-11-07 18:18:01", "generalized_query": "Modifying user data in a music library based on specific criteria", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "011de5ba465941c39a85b6f80cc2de3b", "memory_type": "procedural", "when_to_use": "When extracting specific data from a list of dictionaries", "content": "Use generator expressions with next() instead of list comprehensions for direct value retrieval to avoid type errors", "score": 0, "time_created": "2025-11-07 18:18:39", "time_modified": "2025-11-07 18:18:39", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Extract the file_system password from the passwords list", "when_to_use": "When extracting specific data from a list of dictionaries", "category": "failure", "created_time": "2025-11-07 18:18:39", "modified_time": "2025-11-07 18:18:39", "generalized_query": "Retrieve a specific value from a list of objects based on a key-value match", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "69a850a7f37942ed8d7010eee4d2fc0b", "memory_type": "procedural", "when_to_use": "When interacting with file compression APIs", "content": "Always verify API output specifications against task requirements (e.g., .tar vs .zip) and handle format discrepancies explicitly", "score": 0, "time_created": "2025-11-07 18:18:39", "time_modified": "2025-11-07 18:18:39", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Compress directories into .tar files", "when_to_use": "When interacting with file compression APIs", "category": "failure", "created_time": "2025-11-07 18:18:39", "modified_time": "2025-11-07 18:18:39", "generalized_query": "Ensure API output format matches task requirements for file types", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "1ee65aba3adb4ec4a1835c5346689a9b", "memory_type": "procedural", "when_to_use": "When interacting with protected APIs requiring authentication tokens", "content": "Always verify API authentication requirements and include access tokens in requests after obtaining them through proper login flows", "score": 0, "time_created": "2025-11-07 18:18:43", "time_modified": "2025-11-07 18:18:43", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Compress them and save them in \"~/photos/vacations/.tar\" for each vacation spot, and then delete all vacation spot sub-directories", "when_to_use": "When interacting with protected APIs requiring authentication tokens", "category": "failure", "created_time": "2025-11-07 18:18:43", "modified_time": "2025-11-07 18:18:43", "generalized_query": "Perform file system operations requiring API authentication", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "6a7ac66400d4473fbf17b7af1fc09469", "memory_type": "procedural", "when_to_use": "When interacting with file system APIs that require authentication and directory validation", "content": "Always verify directory existence and validity before performing operations, especially after prior deletions or when processing dynamic directory lists", "score": 0, "time_created": "2025-11-07 18:19:14", "time_modified": "2025-11-07 18:19:14", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Compress them and save them in \"~/pictures/vacations/.zip\" for each vacation spot, and then delete all vacation spot sub-directories.", "when_to_use": "When interacting with file system APIs that require authentication and directory validation", "category": "failure", "created_time": "2025-11-07 18:19:14", "modified_time": "2025-11-07 18:19:14", "generalized_query": "Perform file operations (compression/deletion) on dynamically identified subdirectories while maintaining authentication and path validity", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "6848c48d08bb42ac802635d274ef46dc", "memory_type": "procedural", "when_to_use": "When encountering API endpoint errors related to authentication or missing parameters", "content": "The successful resolution involved: 1) Identifying authentication requirements from API documentation 2) Retrieving stored credentials via supervisor API 3) Properly passing access_token parameter in subsequent API calls 4) Implementing token persistence across sequential operations", "score": 0, "time_created": "2025-11-07 18:19:21", "time_modified": "2025-11-07 18:19:21", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "The execution failed due to missing access token when calling show_directory", "when_to_use": "When encountering API endpoint errors related to authentication or missing parameters", "category": "success", "created_time": "2025-11-07 18:19:21", "modified_time": "2025-11-07 18:19:21", "generalized_query": "Handle API authentication requirements in file system operations", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "1ddb7a2cbba74c9db2ce3c1041998948", "memory_type": "procedural", "when_to_use": "When interacting with file system APIs that require authentication tokens", "content": "Always verify API authentication requirements and ensure tokens are properly obtained and included in requests", "score": 0, "time_created": "2025-11-07 18:18:46", "time_modified": "2025-11-07 18:18:46", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Compress them and save them in \"~/photographs/vacations/.zip\" for each vacation spot, and then delete all vacation spot sub-directories", "when_to_use": "When interacting with file system APIs that require authentication tokens", "category": "failure", "created_time": "2025-11-07 18:18:46", "modified_time": "2025-11-07 18:18:46", "generalized_query": "Perform file operations requiring authentication on a file system API", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "d9c68563cc4240e497653bf259e4ea9a", "memory_type": "procedural", "when_to_use": "When processing directory structures with nested subdirectories", "content": "The higher-scoring approach used direct path validation (/home/nicholas/photographs/vacations//) while the lower-scoring approach used flawed filtering with excessive file extension exclusions. The higher approach correctly parsed directory names from full paths using string splitting, while the lower approach had multiple failed attempts with complex list comprehensions.", "score": 0, "time_created": "2025-11-07 18:18:48", "time_modified": "2025-11-07 18:18:48", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Identify vacation directories in ~/photographs/vacations/", "when_to_use": "When processing directory structures with nested subdirectories", "category": "comparative", "created_time": "2025-11-07 18:18:48", "modified_time": "2025-11-07 18:18:48", "generalized_query": "Extract meaningful directory names from file system listings", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "d8e90798599549ad9f92f68f26351ac7", "memory_type": "procedural", "when_to_use": "When executing destructive operations (like directory deletion)", "content": "The agent implemented a sequential workflow where deletion followed compression, ensuring data was properly archived before removal. This pattern minimizes data loss risks during cleanup operations.", "score": 0, "time_created": "2025-11-07 18:19:02", "time_modified": "2025-11-07 18:19:02", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "and then delete all vacation spot sub-directories", "when_to_use": "When executing destructive operations (like directory deletion)", "category": "success", "created_time": "2025-11-07 18:19:02", "modified_time": "2025-11-07 18:19:02", "generalized_query": "Perform post-processing cleanup after data transformation", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "7b89b20fa909480a8e0b03914fbd8769", "memory_type": "procedural", "when_to_use": "When retrieving song recommendations for specific genres or timeframes", "content": "Always validate recommendation filters (genre, release date) explicitly rather than assuming API results match criteria", "score": 0, "time_created": "2025-11-07 18:19:26", "time_modified": "2025-11-07 18:19:26", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Add all spotify-recommended classical songs released in this year to a new 'Spotify Recommended Songs' playlist.", "when_to_use": "When retrieving song recommendations for specific genres or timeframes", "category": "failure", "created_time": "2025-11-07 18:19:26", "modified_time": "2025-11-07 18:19:26", "generalized_query": "Curate music based on genre-specific recommendations with temporal constraints", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "37ef9babb30949d1a964d7e725893a4c", "memory_type": "procedural", "when_to_use": "When executing multi-step tasks involving authentication and data manipulation", "content": "Always verify that authentication tokens are valid for the duration of the task and cross-check API responses against task requirements to prevent partial or incorrect execution.", "score": 0, "time_created": "2025-11-07 18:19:19", "time_modified": "2025-11-07 18:19:19", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Add all spotify-recommended classical songs released in this year to a new 'Spotify Recommended Songs' playlist.", "when_to_use": "When executing multi-step tasks involving authentication and data manipulation", "category": "failure", "created_time": "2025-11-07 18:19:19", "modified_time": "2025-11-07 18:19:19", "generalized_query": "Securely authenticate and manipulate data across APIs while ensuring task-specific constraints are met", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "b30145a2acf349d192f44732927324e6", "memory_type": "procedural", "when_to_use": "When filtering songs by genre or release year based on textual patterns", "content": "Relying on keyword matching (e.g., \"R&B\" in title/artist) is error-prone for genre classification; use explicit metadata fields like 'genre' or 'release_date' instead", "score": 0, "time_created": "2025-11-07 18:19:51", "time_modified": "2025-11-07 18:19:51", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Add all spotify-recommended R&B songs released in this or last year to a new \"Spotify R&B Recommendations\" playlist.", "when_to_use": "When filtering songs by genre or release year based on textual patterns", "category": "failure", "created_time": "2025-11-07 18:19:51", "modified_time": "2025-11-07 18:19:51", "generalized_query": "Filtering items by metadata attributes (genre, release year) using imprecise string matching", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "a15cde3796e54e7bb9356ad7393f2861", "memory_type": "procedural", "when_to_use": "When authenticating to access user-specific API endpoints", "content": "Retrieved stored account passwords, executed login flow, and extracted access token - a critical decision point that enabled subsequent API calls. The pattern demonstrates proper credential management and authentication sequence for secure API access.", "score": 0, "time_created": "2025-11-07 18:19:59", "time_modified": "2025-11-07 18:19:59", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Obtain access token for Spotify API authentication", "when_to_use": "When authenticating to access user-specific API endpoints", "category": "success", "created_time": "2025-11-07 18:19:59", "modified_time": "2025-11-07 18:19:59", "generalized_query": "Secure API access credentials through authentication flow", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "1b99cc2a263145e6aad5f98fc7055041", "memory_type": "procedural", "when_to_use": "When processing paginated API responses with unknown result sizes", "content": "Implemented a while-loop with incremental page_index to ensure complete retrieval of all recommendation results. This technique effectively handles unknown result volumes and ensures data completeness in paginated API interactions.", "score": 0, "time_created": "2025-11-07 18:19:59", "time_modified": "2025-11-07 18:19:59", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Retrieve all Spotify recommendations across multiple pages", "when_to_use": "When processing paginated API responses with unknown result sizes", "category": "success", "created_time": "2025-11-07 18:19:59", "modified_time": "2025-11-07 18:19:59", "generalized_query": "Handle paginated API responses with dynamic page indexing", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "8839a1e64eb3427182fd7927e767586a", "memory_type": "procedural", "when_to_use": "When accessing APIs that require authentication tokens, ensure the token is defined before use.", "content": "Always verify the existence and proper initialization of authentication tokens before invoking APIs that depend on them.", "score": 0, "time_created": "2025-11-07 18:20:00", "time_modified": "2025-11-07 18:20:00", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Like all the songs played so far in my spotify music player queue, including the current one.", "when_to_use": "When accessing APIs that require authentication tokens, ensure the token is defined before use.", "category": "failure", "created_time": "2025-11-07 18:20:00", "modified_time": "2025-11-07 18:20:00", "generalized_query": "Interacting with an API that requires an access token for authorized actions.", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "19c5d9b6579245bea2f1b0799d78c310", "memory_type": "procedural", "when_to_use": "When interacting with music player queue operations", "content": "Verify current state before performing actions (e.g., check if song is already liked before liking)", "score": 0, "time_created": "2025-11-07 18:20:04", "time_modified": "2025-11-07 18:20:04", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Like all the songs played so far in my spotify music player queue, including the current one.", "when_to_use": "When interacting with music player queue operations", "category": "failure", "created_time": "2025-11-07 18:20:04", "modified_time": "2025-11-07 18:20:04", "generalized_query": "Modify user preferences for media content in a queue system", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "a5bf4f7506624a4d816d48ad269cd46b", "memory_type": "procedural", "when_to_use": "When retrieving data from APIs, ensure it aligns with task-specific filters (e.g., genre, year).", "content": "Assumptions about data alignment with task requirements can lead to incorrect results; always verify filters like genre and release year explicitly.", "score": 0, "time_created": "2025-11-07 18:20:05", "time_modified": "2025-11-07 18:20:05", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Add all spotify-recommended R&B songs released in this year to a new \"R&B Recommendation\" playlist.", "when_to_use": "When retrieving data from APIs, ensure it aligns with task-specific filters (e.g., genre, year).", "category": "failure", "created_time": "2025-11-07 18:20:05", "modified_time": "2025-11-07 18:20:05", "generalized_query": "Filter and validate API data to meet task-specific criteria before processing.", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "b2a303f234d3409cadf981c8b11284d3", "memory_type": "procedural", "when_to_use": "When interacting with APIs requiring authentication tokens", "content": "Always verify authentication credentials are available before making protected API calls", "score": 0, "time_created": "2025-11-07 18:20:08", "time_modified": "2025-11-07 18:20:08", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Like all the songs played so far in my spotify music player queue, including the current one.", "when_to_use": "When interacting with APIs requiring authentication tokens", "category": "failure", "created_time": "2025-11-07 18:20:08", "modified_time": "2025-11-07 18:20:08", "generalized_query": "Perform actions on items in a music player queue requiring API authentication", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "0e19c428af444e5ba5264a6f54aa51c2", "memory_type": "procedural", "when_to_use": "When needing to reverse an accidental payment via Venmo by identifying the most recent approved transaction", "content": "Successfully retrieved approved payment requests using the Venmo API, filtered for the target recipient, sorted by approval timestamp, and executed a reversal transaction with matching amount and description. The step-by-step API interaction pattern ensured accurate transaction identification and reversal.", "score": 0, "time_created": "2025-11-07 18:20:53", "time_modified": "2025-11-07 18:20:53", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Send them the money back", "when_to_use": "When needing to reverse an accidental payment via Venmo by identifying the most recent approved transaction", "category": "success", "created_time": "2025-11-07 18:20:53", "modified_time": "2025-11-07 18:20:53", "generalized_query": "Reverse a specific payment transaction through a financial platform", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "d714549f5953446eacc227ac4788f3f5", "memory_type": "procedural", "when_to_use": "When authenticating to a financial service with stored credentials", "content": "Implemented secure credential retrieval from a password manager, handled authentication failures gracefully, and validated access tokens before executing transactions. This pattern ensures secure API access while handling common authentication edge cases.", "score": 0, "time_created": "2025-11-07 18:20:53", "time_modified": "2025-11-07 18:20:53", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Send them the money back", "when_to_use": "When authenticating to a financial service with stored credentials", "category": "success", "created_time": "2025-11-07 18:20:53", "modified_time": "2025-11-07 18:20:53", "generalized_query": "Authenticate to a financial platform using stored user credentials", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "89f02c31611f4db99f26c41daac6962b", "memory_type": "procedural", "when_to_use": "When making API calls that require specific parameter names", "content": "API parameter names must exactly match documentation specifications (e.g., 'receiver_email' vs. 'recipient_email') to avoid validation errors.", "score": 0, "time_created": "2025-11-07 18:20:56", "time_modified": "2025-11-07 18:20:56", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Send them the money back.", "when_to_use": "When making API calls that require specific parameter names", "category": "failure", "created_time": "2025-11-07 18:20:56", "modified_time": "2025-11-07 18:20:56", "generalized_query": "Executing a transaction via API with required parameters", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "3f2905c64ebe438883dde74e97277170", "memory_type": "procedural", "when_to_use": "When interacting with APIs requiring authentication tokens", "content": "Always verify authentication credentials are available before invoking API endpoints that require them. Implement fallback mechanisms to obtain missing tokens (e.g., via login flows) before proceeding with core operations.", "score": 0, "time_created": "2025-11-07 18:20:57", "time_modified": "2025-11-07 18:20:57", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Like all the songs played so far in my spotify music player queue, including the current one.", "when_to_use": "When interacting with APIs requiring authentication tokens", "category": "failure", "created_time": "2025-11-07 18:20:57", "modified_time": "2025-11-07 18:20:57", "generalized_query": "Perform an action on all items in a user's media playback queue", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "786e5d00d7904ea6b7f065af2417caee", "memory_type": "procedural", "when_to_use": "When working with music player queue APIs", "content": "Always check for queue items' validity (e.g., non-null song IDs) before performing actions like liking songs.", "score": 0, "time_created": "2025-11-07 18:20:48", "time_modified": "2025-11-07 18:20:48", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Like all the songs played so far in my spotify music player queue, including the current one.", "when_to_use": "When working with music player queue APIs", "category": "failure", "created_time": "2025-11-07 18:20:48", "modified_time": "2025-11-07 18:20:48", "generalized_query": "Manipulate music player queue items via API", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "254fca1c753e4ef49489b66fcf26fa8c", "memory_type": "procedural", "when_to_use": "When completing tasks that require precise API response handling and minimal overhead", "content": "The higher-scoring sequence completed the task without explicitly passing an answer parameter to complete_task(), while the lower-scoring one included an answer string. Though both succeeded, the higher-scoring approach's omission of redundant parameters likely reflected stricter adherence to API expectations, reducing potential friction in task validation.", "score": 0, "time_created": "2025-11-07 18:21:12", "time_modified": "2025-11-07 18:21:12", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Like all the songs played so far in my spotify music player queue, including the current one.", "when_to_use": "When completing tasks that require precise API response handling and minimal overhead", "category": "comparative", "created_time": "2025-11-07 18:21:12", "modified_time": "2025-11-07 18:21:12", "generalized_query": "Execute batch operations on a list of items retrieved from an API with proper authentication.", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "bdf04216d8284045b6daec4ffd7021ce", "memory_type": "procedural", "when_to_use": "When needing to retrieve user-specific data from an API with authentication requirements", "content": "The higher-scoring approach systematically retrieved Cory's email via Venmo's search_users API after proper authentication, then filtered approved payment requests to identify the correct transaction. This contrasts with the lower-scoring approach which attempted to use a non-functional phone app API and hardcoded invalid email addresses. Proper API chaining (login → search → payment lookup → refund) with parameter validation ensured success.", "score": 0, "time_created": "2025-11-07 18:21:09", "time_modified": "2025-11-07 18:21:09", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "The last Venmo payment request I sent to Cory was an accident and they approved it. Send them the money back.", "when_to_use": "When needing to retrieve user-specific data from an API with authentication requirements", "category": "comparative", "created_time": "2025-11-07 18:21:09", "modified_time": "2025-11-07 18:21:09", "generalized_query": "Refund an accidentally approved payment to a specific user via a financial platform", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "7f2f046b762f4a5fae6a5b9dfcd09479", "memory_type": "procedural", "when_to_use": "When retrieving specific data from a list of objects, especially when filtering by a condition", "content": "Boolean list comprehensions must be handled differently than object lists; use generator expressions with next() for safe value extraction", "score": 0, "time_created": "2025-11-07 18:21:21", "time_modified": "2025-11-07 18:21:21", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "venmo_password = [account_password[\"account_name\"] == \"venmo\" for account_password in passwords][0][\"password\"]", "when_to_use": "When retrieving specific data from a list of objects, especially when filtering by a condition", "category": "failure", "created_time": "2025-11-07 18:21:21", "modified_time": "2025-11-07 18:21:21", "generalized_query": "Extracting a specific field from a list based on a conditional match", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "6ebe569b6e994fa1b53bfdfcc2d587e9", "memory_type": "procedural", "when_to_use": "When interacting with API endpoints that require specific parameter names", "content": "Always verify API parameter names against official documentation to avoid 422 validation errors", "score": 0, "time_created": "2025-11-07 18:21:21", "time_modified": "2025-11-07 18:21:21", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "apis.venmo.create_payment_request(..., receiver_email=..., ...)", "when_to_use": "When interacting with API endpoints that require specific parameter names", "category": "failure", "created_time": "2025-11-07 18:21:21", "modified_time": "2025-11-07 18:21:21", "generalized_query": "Calling API methods with parameter name mismatches", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "55651cdcb93b4efba2670ee12ff06979", "memory_type": "procedural", "when_to_use": "When needing to retrieve user credentials from a secure store for API authentication", "content": "Successfully retrieved Venmo password from supervisor's secure password store using list comprehension, then used it for API login. Demonstrates proper credential handling through secure storage access and authentication flow.", "score": 0, "time_created": "2025-11-07 18:21:23", "time_modified": "2025-11-07 18:21:23", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Send them the money back.", "when_to_use": "When needing to retrieve user credentials from a secure store for API authentication", "category": "success", "created_time": "2025-11-07 18:21:23", "modified_time": "2025-11-07 18:21:23", "generalized_query": "Reverse an unintended financial transaction using stored credentials", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "8c1290c78fb84a2f8cc80f6fb8ae2d7a", "memory_type": "procedural", "when_to_use": "When processing transaction history to identify specific payments", "content": "Effectively filtered payment requests by recipient email, sorted by timestamp, and selected the most recent transaction. Shows strong pattern in transaction data processing and filtering.", "score": 0, "time_created": "2025-11-07 18:21:23", "time_modified": "2025-11-07 18:21:23", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "The last Venmo payment request I sent to Brandon was an accident and they approved it", "when_to_use": "When processing transaction history to identify specific payments", "category": "success", "created_time": "2025-11-07 18:21:23", "modified_time": "2025-11-07 18:21:23", "generalized_query": "Identify and reverse specific inter-user transactions", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "21fabf9c0bef4cf3908266e9b56c9abc", "memory_type": "procedural", "when_to_use": "When handling paginated API responses to ensure complete data processing", "content": "The higher-scoring approach implemented a while-loop with pagination increment to retrieve all text messages (10 total) rather than relying on a single-page request (5 messages). This ensured complete deletion of all spam messages, while the lower-scoring approach only processed the first page of results.", "score": 0, "time_created": "2025-11-07 18:21:42", "time_modified": "2025-11-07 18:21:42", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "All phone text messages and voice messages from 3654328626 are spam, delete them.", "when_to_use": "When handling paginated API responses to ensure complete data processing", "category": "comparative", "created_time": "2025-11-07 18:21:42", "modified_time": "2025-11-07 18:21:42", "generalized_query": "Completely remove all messages from a specific contact using API pagination", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "74caab6f385441968df66a96a7b36f6a", "memory_type": "procedural", "when_to_use": "When extracting specific data from a list of dictionaries, especially when filtering by a key-value pair", "content": "Avoid using list comprehensions that produce boolean values when intending to extract specific dictionary elements; use generator expressions with next() for safe single-item retrieval", "score": 0, "time_created": "2025-11-07 18:21:48", "time_modified": "2025-11-07 18:21:48", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "All phone text messages and voice messages from 3654328626 are spam, delete them.", "when_to_use": "When extracting specific data from a list of dictionaries, especially when filtering by a key-value pair", "category": "failure", "created_time": "2025-11-07 18:21:48", "modified_time": "2025-11-07 18:21:48", "generalized_query": "Delete all communications from a specific phone number identified as spam", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "1a3a2b6e03e441c2a2e8a7ceb6037f0a", "memory_type": "procedural", "when_to_use": "When retrieving specific account credentials from a list of entries", "content": "The higher-scoring approach used a generator expression with next() to efficiently find the matching password, avoiding the boolean list comprehension error. This method is more memory-efficient and directly retrieves the value without creating intermediate boolean lists.", "score": 0, "time_created": "2025-11-07 18:21:48", "time_modified": "2025-11-07 18:21:48", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "phone_password = [account_password[\"account_name\"] == \"phone\" for account_password in passwords][0][\"password\"]", "when_to_use": "When retrieving specific account credentials from a list of entries", "category": "comparative", "created_time": "2025-11-07 18:21:48", "modified_time": "2025-11-07 18:21:48", "generalized_query": "Extracting a specific value from a list of dictionary entries based on a key-value match", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "a8abf869a13843ad9798386f792bcf5a", "memory_type": "procedural", "when_to_use": "When handling paginated API responses for complete data deletion", "content": "The higher-scoring approach implemented a while-loop with page_index increment to handle pagination, ensuring all messages were retrieved and deleted. The lower-scoring approach only retrieved the first page of text messages and entirely omitted voice messages, leading to incomplete task execution.", "score": 0, "time_created": "2025-11-07 18:21:48", "time_modified": "2025-11-07 18:21:48", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Deleting all text and voice messages from a specific phone number", "when_to_use": "When handling paginated API responses for complete data deletion", "category": "comparative", "created_time": "2025-11-07 18:21:48", "modified_time": "2025-11-07 18:21:48", "generalized_query": "Ensuring complete deletion of paginated data results", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "7f5528b906124ffc856827ec36612961", "memory_type": "procedural", "when_to_use": "When executing sequential API operations requiring authentication tokens", "content": "Proper token management and error handling during authentication is critical for API operation success; verify token validity before executing protected operations", "score": 0, "time_created": "2025-11-07 18:21:51", "time_modified": "2025-11-07 18:21:51", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "All phone text messages and voice messages from 9294880327 are spam, delete them.", "when_to_use": "When executing sequential API operations requiring authentication tokens", "category": "failure", "created_time": "2025-11-07 18:21:51", "modified_time": "2025-11-07 18:21:51", "generalized_query": "Secure API operation execution with proper authentication handling", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "a6a66abda2b4468bbb906720822656ac", "memory_type": "procedural", "when_to_use": "When handling multi-step tasks requiring API pagination and error-resistant data extraction", "content": "The higher-scoring approach demonstrated superior efficiency through: 1) Complete message type coverage (both text and voice messages) 2) Robust error handling in password extraction using generator expressions 3) Pagination implementation for full message retrieval 4) Sequential task completion verification. These factors ensured total spam removal versus the lower-scoring approach's partial execution with first-page-only deletion.", "score": 0, "time_created": "2025-11-07 18:21:58", "time_modified": "2025-11-07 18:21:58", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "All phone text messages and voice messages from 5708520672 are spam, delete them.", "when_to_use": "When handling multi-step tasks requiring API pagination and error-resistant data extraction", "category": "comparative", "created_time": "2025-11-07 18:21:58", "modified_time": "2025-11-07 18:21:58", "generalized_query": "Comprehensive deletion of specific message types from a contact across paginated API endpoints", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "9e2817d9371b4931bd30480e6b8ca85b", "memory_type": "procedural", "when_to_use": "When extracting specific data from a list of objects, especially when filtering by a unique identifier", "content": "Use generator expressions or explicit loops instead of list comprehensions that produce boolean values when extracting specific fields from data structures", "score": 0, "time_created": "2025-11-07 18:22:06", "time_modified": "2025-11-07 18:22:06", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "All phone text messages and voice messages from 5708520672 are spam, delete them.", "when_to_use": "When extracting specific data from a list of objects, especially when filtering by a unique identifier", "category": "failure", "created_time": "2025-11-07 18:22:06", "modified_time": "2025-11-07 18:22:06", "generalized_query": "Delete all messages from a specific phone number across multiple message types (text/voice)", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "3a072885d28d43f7b02a21b624bde59b", "memory_type": "procedural", "when_to_use": "When working with protected APIs requiring credential retrieval", "content": "The agent successfully retrieved stored phone app credentials from the supervisor API, demonstrating a reliable pattern for credential management. This involved: 1) Identifying the correct password storage endpoint, 2) Filtering for the target app's password, 3) Using the password to authenticate. This approach ensures secure credential handling while maintaining system integrity.", "score": 0, "time_created": "2025-11-07 18:22:11", "time_modified": "2025-11-07 18:22:11", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "All phone text messages and voice messages from 5708520672 are spam, delete them.", "when_to_use": "When working with protected APIs requiring credential retrieval", "category": "success", "created_time": "2025-11-07 18:22:11", "modified_time": "2025-11-07 18:22:11", "generalized_query": "Access and use stored credentials to authenticate with a protected API", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "17ef8387930c4bd2975f9b6f80fb5448", "memory_type": "procedural", "when_to_use": "When needing to authenticate with an API using stored credentials", "content": "The agent successfully retrieved stored Spotify credentials via the supervisor app's account password API, then used them to obtain an access token. This demonstrated the importance of leveraging available credential management systems for API authentication.", "score": 0, "time_created": "2025-11-07 18:22:12", "time_modified": "2025-11-07 18:22:12", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Follow all the classical artists on Spotify that have at least 22 followers.", "when_to_use": "When needing to authenticate with an API using stored credentials", "category": "success", "created_time": "2025-11-07 18:22:12", "modified_time": "2025-11-07 18:22:12", "generalized_query": "Authenticate with an API using stored credentials to perform user actions", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "13a3ac0c35e44b11a1a53f3a094e14c4", "memory_type": "procedural", "when_to_use": "When performing filtered API searches with pagination requirements", "content": "The agent implemented a pagination loop with min_follower_count=22 and query='classical' parameters to ensure complete artist discovery. This pattern is effective for APIs with limited page sizes and requires careful parameter management to avoid incomplete results.", "score": 0, "time_created": "2025-11-07 18:22:12", "time_modified": "2025-11-07 18:22:12", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Follow all the classical artists on Spotify that have at least 22 followers.", "when_to_use": "When performing filtered API searches with pagination requirements", "category": "success", "created_time": "2025-11-07 18:22:12", "modified_time": "2025-11-07 18:22:12", "generalized_query": "Execute paginated API searches with filter parameters to collect comprehensive datasets", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "bd026b17225b424984d6a2dcfdeafbb4", "memory_type": "procedural", "when_to_use": "When handling API rate limits or session expiration scenarios", "content": "API clients should include explicit error handling for authentication failures (401 errors) with automatic re-authentication mechanisms", "score": 0, "time_created": "2025-11-07 18:22:16", "time_modified": "2025-11-07 18:22:16", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Follow all the classical artists on Spotify that have at least 22 followers.", "when_to_use": "When handling API rate limits or session expiration scenarios", "category": "failure", "created_time": "2025-11-07 18:22:16", "modified_time": "2025-11-07 18:22:16", "generalized_query": "Implement error handling for authentication-related API failures", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "6126dbbf7fc147bab45014c9806e89ac", "memory_type": "procedural", "when_to_use": "When executing API-based tasks requiring authentication and pagination", "content": "The higher-scoring approach succeeded by: 1) Properly handling authentication via supervisor password retrieval and token-based login 2) Using precise API parameters (min_follower_count=23, genre='EDM') 3) Implementing full pagination to retrieve all results 4) Ensuring access token was passed in all API calls. The lower-scoring approach failed to handle authentication initially and used incorrect query formatting ('genre:edm' instead of genre='EDM')", "score": 0, "time_created": "2025-11-07 18:22:41", "time_modified": "2025-11-07 18:22:41", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Follow all the edm artists on Spotify that have at least 23 followers.", "when_to_use": "When executing API-based tasks requiring authentication and pagination", "category": "comparative", "created_time": "2025-11-07 18:22:41", "modified_time": "2025-11-07 18:22:41", "generalized_query": "Execute multi-step API operations with authentication and data filtering", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "b3b2be9c825a4bc09979590aadc6093e", "memory_type": "procedural", "when_to_use": "When implementing API client workflows with access tokens", "content": "The higher-scoring approach demonstrated better efficiency by: 1) Centralizing access token management 2) Passing the token consistently in all API calls 3) Handling authentication failures gracefully through supervisor integration. The lower-scoring approach attempted authentication but failed to propagate the token to all required API endpoints, leading to incomplete task execution.", "score": 0, "time_created": "2025-11-07 18:22:41", "time_modified": "2025-11-07 18:22:41", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Follow all the edm artists on Spotify that have at least 23 followers.", "when_to_use": "When implementing API client workflows with access tokens", "category": "comparative", "created_time": "2025-11-07 18:22:41", "modified_time": "2025-11-07 18:22:41", "generalized_query": "Implement secure API client workflows with token-based authentication", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "b2201f5faba342e3b0644bbc75b45c1b", "memory_type": "procedural", "when_to_use": "When executing tasks requiring authentication via password retrieval from a supervisor system", "content": "The successful execution required retrieving Spotify credentials from the supervisor app, logging in, and handling authentication tokens. This pattern ensures secure access to user accounts while adhering to system-specific authentication workflows.", "score": 0, "time_created": "2025-11-07 18:22:43", "time_modified": "2025-11-07 18:22:43", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Follow all the reggae artists on Spotify that have at least 21 followers.", "when_to_use": "When executing tasks requiring authentication via password retrieval from a supervisor system", "category": "success", "created_time": "2025-11-07 18:22:43", "modified_time": "2025-11-07 18:22:43", "generalized_query": "Perform authenticated actions on a service by retrieving credentials from a supervisory system", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "43a65a597f1040f99874386b6b9e6935", "memory_type": "procedural", "when_to_use": "When filtering and interacting with API resources based on specific criteria", "content": "The search_artists API was effectively used with genre and min_follower_count parameters to filter results. This demonstrates the importance of leveraging API parameters for precise data filtering before performing bulk actions like following multiple artists.", "score": 0, "time_created": "2025-11-07 18:22:43", "time_modified": "2025-11-07 18:22:43", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Follow all the reggae artists on Spotify that have at least 21 followers.", "when_to_use": "When filtering and interacting with API resources based on specific criteria", "category": "success", "created_time": "2025-11-07 18:22:43", "modified_time": "2025-11-07 18:22:43", "generalized_query": "Query and filter API resources using parameterized search criteria", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "05cd30e0766c4122935d1bfb1cfad5ee", "memory_type": "procedural", "when_to_use": "When handling authentication token expiration during API operations", "content": "The failure due to an expired token highlighted the need for proactive token management. Re-logging in and reapplying the access token resolved the issue, emphasizing the importance of validating token validity before critical API operations.", "score": 0, "time_created": "2025-11-07 18:22:43", "time_modified": "2025-11-07 18:22:43", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Follow all the reggae artists on Spotify that have at least 21 followers.", "when_to_use": "When handling authentication token expiration during API operations", "category": "success", "created_time": "2025-11-07 18:22:43", "modified_time": "2025-11-07 18:22:43", "generalized_query": "Re-authenticate and refresh access tokens when encountering 401 unauthorized errors", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "b1cd25c203244db693085e55c5d7cae4", "memory_type": "procedural", "when_to_use": "When interacting with APIs that require authentication tokens", "content": "Always verify token validity and properly store/retrieve access tokens from login responses to avoid 401 unauthorized errors", "score": 0, "time_created": "2025-11-07 18:23:12", "time_modified": "2025-11-07 18:23:12", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Make venmo requests to my roommates, with a description note, 'internet bill for the last month.'", "when_to_use": "When interacting with APIs that require authentication tokens", "category": "failure", "created_time": "2025-11-07 18:23:12", "modified_time": "2025-11-07 18:23:12", "generalized_query": "Executing financial transactions via API requiring authentication tokens", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "76c6dc42c2174c9bb1d295e1d1a21444", "memory_type": "procedural", "when_to_use": "When accessing files in a file system, especially when the file path is not guaranteed to exist", "content": "Always verify the existence of a file path before attempting to access it, as assumed paths may not match the actual file structure. Use directory listing APIs to locate files dynamically when the exact path is uncertain.", "score": 0, "time_created": "2025-11-07 18:23:12", "time_modified": "2025-11-07 18:23:12", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I paid for our last month's internet bill. Its amount is supposed to be shared equally among my roommates and me. Make venmo requests to my roommates, with a description note, 'internet bill for the last month.'. The bill receipt is in my file system.", "when_to_use": "When accessing files in a file system, especially when the file path is not guaranteed to exist", "category": "failure", "created_time": "2025-11-07 18:23:12", "modified_time": "2025-11-07 18:23:12", "generalized_query": "Retrieve a file from a file system and use its content to perform financial transactions with multiple parties", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "be2cbfc847bb44be95a11a3bf057c172", "memory_type": "procedural", "when_to_use": "When extracting specific data from a list of dictionary objects", "content": "Use generator expressions with next() instead of list comprehensions for boolean checks when extracting specific values from lists. This avoids creating lists of booleans and directly retrieves the desired value.", "score": 0, "time_created": "2025-11-07 18:23:12", "time_modified": "2025-11-07 18:23:12", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Extract the venmo password from the supervisor's account passwords list", "when_to_use": "When extracting specific data from a list of dictionary objects", "category": "failure", "created_time": "2025-11-07 18:23:12", "modified_time": "2025-11-07 18:23:12", "generalized_query": "Retrieve specific values from a list of key-value pairs", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "b3f7ec86dfab4a50b2eccf20869104d8", "memory_type": "procedural", "when_to_use": "When calculating shared costs among multiple parties", "content": "Explicitly clarify assumptions about group composition (e.g., whether the requester should be included in the division). Use comments or validation checks to document and verify distribution logic.", "score": 0, "time_created": "2025-11-07 18:23:12", "time_modified": "2025-11-07 18:23:12", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Calculate the amount to be shared with each roommate based on the total bill amount", "when_to_use": "When calculating shared costs among multiple parties", "category": "failure", "created_time": "2025-11-07 18:23:12", "modified_time": "2025-11-07 18:23:12", "generalized_query": "Divide a total amount among multiple recipients with potential edge cases", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "7a1cc3c211a84e659ba77ad994c457b7", "memory_type": "procedural", "when_to_use": "When handling multi-step authentication and data retrieval workflows", "content": "The higher-scoring approach systematically retrieved credentials via supervisor app, authenticated to file_system/phone/venmo with proper parameters, parsed bill amounts with currency formatting handling, and accurately filtered roommates via contact relationships. The lower-scoring approach failed authentication due to incorrect parameter usage (email vs phone number), had parsing errors with currency symbols, and used incomplete roommate identification via Venmo search.", "score": 0, "time_created": "2025-11-07 18:23:11", "time_modified": "2025-11-07 18:23:11", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Make venmo requests to my roommates, with a description note, 'For electricity bill.' The bill receipt is in my file system.", "when_to_use": "When handling multi-step authentication and data retrieval workflows", "category": "comparative", "created_time": "2025-11-07 18:23:11", "modified_time": "2025-11-07 18:23:11", "generalized_query": "Automate bill splitting and payment requests using integrated app APIs", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "b936f92ba7e7418f87ab7ba454fafa72", "memory_type": "procedural", "when_to_use": "When making API requests that require specific parameters", "content": "Always verify parameter names and required fields in API documentation to avoid validation errors.", "score": 0, "time_created": "2025-11-07 18:23:21", "time_modified": "2025-11-07 18:23:21", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Make venmo requests to my roommates, with a description note, 'For electricity bill.'", "when_to_use": "When making API requests that require specific parameters", "category": "failure", "created_time": "2025-11-07 18:23:21", "modified_time": "2025-11-07 18:23:21", "generalized_query": "Creating payment requests via an API with required parameters", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "a12b28832fed4b648da081390488ede2", "memory_type": "procedural", "when_to_use": "When accessing protected APIs requiring authentication tokens", "content": "Always verify authentication requirements for APIs and maintain session tokens across operations", "score": 0, "time_created": "2025-11-07 18:23:34", "time_modified": "2025-11-07 18:23:34", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I paid for our last month's cable bill. Its amount is supposed to be shared equally among my roommates and me. Make venmo requests to my roommates, with a description note, \"I paid for cable bill.\" The bill receipt is in my file system.", "when_to_use": "When accessing protected APIs requiring authentication tokens", "category": "failure", "created_time": "2025-11-07 18:23:34", "modified_time": "2025-11-07 18:23:34", "generalized_query": "Accessing secured systems to retrieve data for financial distribution tasks", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "53ca4a956903410299c25b3877454bd8", "memory_type": "procedural", "when_to_use": "When handling user input dependencies in task execution", "content": "Implement robust input validation and clear user prompting mechanisms for dependent task parameters", "score": 0, "time_created": "2025-11-07 18:23:34", "time_modified": "2025-11-07 18:23:34", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "The cable bill amount is $128. Since it needs to be shared equally among you and your roommates, I'll need to know how many roommates you have to calculate the amount each person should pay. Could you please provide the number of roommates?", "when_to_use": "When handling user input dependencies in task execution", "category": "failure", "created_time": "2025-11-07 18:23:34", "modified_time": "2025-11-07 18:23:34", "generalized_query": "Managing incomplete task information requiring user clarification", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "e992d06c76724d6c9ddf445ecc711012", "memory_type": "procedural", "when_to_use": "When working with API parameters for payment requests", "content": "Parameter name accuracy is critical - initial failure used 'recipient_email' instead of documented 'user_email' parameter for Venmo API", "score": 0, "time_created": "2025-11-07 18:23:27", "time_modified": "2025-11-07 18:23:27", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Make venmo requests to my roommates, with a description note, \"I paid for cable bill.\"", "when_to_use": "When working with API parameters for payment requests", "category": "failure", "created_time": "2025-11-07 18:23:27", "modified_time": "2025-11-07 18:23:27", "generalized_query": "Creating payment requests in a social payment application", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "37bea09a1f7a45a6845286e7ee4b8bf0", "memory_type": "procedural", "when_to_use": "When interacting with a protected API that requires authentication tokens for access", "content": "Successful execution required first obtaining an access token via API login, then using that token in subsequent API calls. The critical pattern was recognizing the 401 error indicated authentication failure, then systematically retrieving credentials, authenticating, and re-attempting the operation with proper authorization headers.", "score": 0, "time_created": "2025-11-07 18:23:31", "time_modified": "2025-11-07 18:23:31", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Mark \"Learning to cook a signature dish from scratch\" in my Bucket List Simple Note as done", "when_to_use": "When interacting with a protected API that requires authentication tokens for access", "category": "success", "created_time": "2025-11-07 18:23:31", "modified_time": "2025-11-07 18:23:31", "generalized_query": "Update a specific task status in a protected note-taking system", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "3610f64f93344e2faae184d6a89c45fb", "memory_type": "procedural", "when_to_use": "When needing to modify content in a note-based task tracking system", "content": "The successful pattern involved: 1) Searching for the correct note using query parameters 2) Fetching the note content 3) Modifying the markdown checklist item 4) Updating the note with the modified content. This worked because the system used markdown syntax ([x] for completed items) that was directly manipulatable as plain text.", "score": 0, "time_created": "2025-11-07 18:23:31", "time_modified": "2025-11-07 18:23:31", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Mark \"Learning to cook a signature dish from scratch\" in my Bucket List Simple Note as done", "when_to_use": "When needing to modify content in a note-based task tracking system", "category": "success", "created_time": "2025-11-07 18:23:31", "modified_time": "2025-11-07 18:23:31", "generalized_query": "Update checklist items in structured notes with markdown formatting", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "9a86795622d345bd98445a3c777d70d8", "memory_type": "procedural", "when_to_use": "When interacting with APIs that require authentication tokens", "content": "Always verify authentication requirements before making API calls that modify data. Authentication tokens must be obtained and included in requests to avoid 401 errors.", "score": 0, "time_created": "2025-11-07 18:23:50", "time_modified": "2025-11-07 18:23:50", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Mark \"Taking a solo backpacking trip\" in my Bucket List Simple Note as not done.", "when_to_use": "When interacting with APIs that require authentication tokens", "category": "failure", "created_time": "2025-11-07 18:23:50", "modified_time": "2025-11-07 18:23:50", "generalized_query": "Updating a note status in a protected note-taking application", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "35fae67b5fb24bbb9dd9845b47310e5e", "memory_type": "procedural", "when_to_use": "When retrieving credentials from structured data formats", "content": "Use generator expressions with explicit filtering (e.g., next() with a generator) instead of list comprehensions for boolean checks when extracting values from structured data to avoid type errors.", "score": 0, "time_created": "2025-11-07 18:23:50", "time_modified": "2025-11-07 18:23:50", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "simple_note_password = [account_password[\"account_name\"] == \"simple_note\" for account_password in passwords][0][\"password\"]", "when_to_use": "When retrieving credentials from structured data formats", "category": "failure", "created_time": "2025-11-07 18:23:50", "modified_time": "2025-11-07 18:23:50", "generalized_query": "Extracting specific credentials from a list of account password records", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "4883c485bf8a4ce0adf73f240e97c47f", "memory_type": "procedural", "when_to_use": "When needing to modify content in a note-based system with tagging", "content": "Effectively modified markdown checklist content by: 1) Searching notes with query 2) Retrieving full note content 3) Programmatically updating checklist item status 4) Using update_note API with modified content. This approach preserves note structure while making precise content changes.", "score": 0, "time_created": "2025-11-07 18:23:50", "time_modified": "2025-11-07 18:23:50", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Mark \"Taking a solo backpacking trip\" in my Bucket List Simple Note as not done", "when_to_use": "When needing to modify content in a note-based system with tagging", "category": "success", "created_time": "2025-11-07 18:23:50", "modified_time": "2025-11-07 18:23:50", "generalized_query": "Update checklist items in structured note content", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "914f1a32fbf44e5784b2bd340b89c89f", "memory_type": "procedural", "when_to_use": "When accessing APIs that require authentication tokens", "content": "Always verify authentication tokens are obtained before making API calls that require them", "score": 0, "time_created": "2025-11-07 18:24:17", "time_modified": "2025-11-07 18:24:17", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Move my go-to-sleep phone alarm to 1 hour later and disable the rest", "when_to_use": "When accessing APIs that require authentication tokens", "category": "failure", "created_time": "2025-11-07 18:24:17", "modified_time": "2025-11-07 18:24:17", "generalized_query": "Modify a specific device setting while managing authentication credentials", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "0a39a32a0bee4e9eb8538d80ced349a8", "memory_type": "procedural", "when_to_use": "When processing API response data structures", "content": "Use explicit iteration rather than list comprehensions for conditional data extraction when working with complex data structures", "score": 0, "time_created": "2025-11-07 18:24:17", "time_modified": "2025-11-07 18:24:17", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Move my go-to-sleep phone alarm to 1 hour later and disable the rest", "when_to_use": "When processing API response data structures", "category": "failure", "created_time": "2025-11-07 18:24:17", "modified_time": "2025-11-07 18:24:17", "generalized_query": "Extract specific data from nested API response formats", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "9097cab111254504ac48df1d0c214af8", "memory_type": "procedural", "when_to_use": "When making assumptions about device settings", "content": "Validate assumptions about device settings (e.g., earliest alarm = sleep alarm) with explicit user confirmation when critical system changes are involved", "score": 0, "time_created": "2025-11-07 18:24:17", "time_modified": "2025-11-07 18:24:17", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Move my go-to-sleep phone alarm to 1 hour later and disable the rest", "when_to_use": "When making assumptions about device settings", "category": "failure", "created_time": "2025-11-07 18:24:17", "modified_time": "2025-11-07 18:24:17", "generalized_query": "Modify device settings based on inferred user intent", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "fb71d2a9d17245e28c02e7ead8ebc1ad", "memory_type": "procedural", "when_to_use": "When retrieving specific data from a list of items, especially when filtering by a condition", "content": "Use generator expressions with next() instead of list comprehensions that return boolean values when extracting specific data fields", "score": 0, "time_created": "2025-11-07 18:24:37", "time_modified": "2025-11-07 18:24:37", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I am going on a vacation. Move my go-to-sleep phone alarm to 20 minutes later and disable the rest.", "when_to_use": "When retrieving specific data from a list of items, especially when filtering by a condition", "category": "failure", "created_time": "2025-11-07 18:24:37", "modified_time": "2025-11-07 18:24:37", "generalized_query": "Modify a specific item in a list while applying changes to other items based on conditions", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "22c877e636794e77bb5bc7af5f37ef23", "memory_type": "procedural", "when_to_use": "When making assumptions about unique identifiers or labels in data structures", "content": "Always verify uniqueness of identifiers/labels before making modifications, and implement fallback mechanisms for ambiguous cases", "score": 0, "time_created": "2025-11-07 18:24:37", "time_modified": "2025-11-07 18:24:37", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I am going on a vacation. Move my go-to-sleep phone alarm to 20 minutes later and disable the rest.", "when_to_use": "When making assumptions about unique identifiers or labels in data structures", "category": "failure", "created_time": "2025-11-07 18:24:37", "modified_time": "2025-11-07 18:24:37", "generalized_query": "Modify system settings based on labeled entries with potential duplicates", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "8a08fb7e40c942979023fc034974eeaf", "memory_type": "procedural", "when_to_use": "When implementing batch operations on system components", "content": "Implement transactional operations with rollback capabilities when making coordinated system changes", "score": 0, "time_created": "2025-11-07 18:24:37", "time_modified": "2025-11-07 18:24:37", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I am going on a vacation. Move my go-to-sleep phone alarm to 20 minutes later and disable the rest.", "when_to_use": "When implementing batch operations on system components", "category": "failure", "created_time": "2025-11-07 18:24:37", "modified_time": "2025-11-07 18:24:37", "generalized_query": "Perform coordinated updates across multiple system elements with interdependencies", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "b51eaa94593c4a388a818377eb85aca4", "memory_type": "procedural", "when_to_use": "When interacting with APIs that require authentication tokens", "content": "Always verify authentication requirements before making API calls; failing to obtain access tokens will result in authorization failures.", "score": 0, "time_created": "2025-11-07 18:24:37", "time_modified": "2025-11-07 18:24:37", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I am going on a vacation. Move my go-to-sleep phone alarm to 20 minutes later and disable the rest.", "when_to_use": "When interacting with APIs that require authentication tokens", "category": "failure", "created_time": "2025-11-07 18:24:37", "modified_time": "2025-11-07 18:24:37", "generalized_query": "Modify a specific system setting and disable others through API interactions", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "1d9d0f8852bc4637b8077ccd46aa11fb", "memory_type": "procedural", "when_to_use": "When accessing protected APIs requires authentication tokens and the task involves updating user data in a note-taking app", "content": "Successful authentication flow required first retrieving credentials from supervisor app, then using login API to obtain access token. This token had to be explicitly passed in all subsequent API calls. When searching for notes, using query parameter with partial title matched the formatted note title better than exact title matching.", "score": 0, "time_created": "2025-11-07 18:24:21", "time_modified": "2025-11-07 18:24:21", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Mark 'Witnessing a total solar eclipse' in my Bucket List Simple Note as done", "when_to_use": "When accessing protected APIs requires authentication tokens and the task involves updating user data in a note-taking app", "category": "success", "created_time": "2025-11-07 18:24:21", "modified_time": "2025-11-07 18:24:21", "generalized_query": "Update a specific item in a user's note after authenticating with an API", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "c161bd01b1f04766951c3f972aa713ca", "memory_type": "procedural", "when_to_use": "When retrieving specific data from a list of objects using list comprehensions", "content": "Avoid using list comprehensions for boolean checks when extracting objects; use generator expressions with next() for single-item retrieval to prevent type errors.", "score": 0, "time_created": "2025-11-07 18:24:39", "time_modified": "2025-11-07 18:24:39", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I am going on a vacation. Move my wake-up phone alarm to 40 minutes earlier and disable the rest.", "when_to_use": "When retrieving specific data from a list of objects using list comprehensions", "category": "failure", "created_time": "2025-11-07 18:24:39", "modified_time": "2025-11-07 18:24:39", "generalized_query": "Modify a specific item in a list while applying conditions to other items", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "25ffab2d5e464202ad55613284f99d12", "memory_type": "procedural", "when_to_use": "When handling API responses with nested data structures", "content": "Always validate data structure types before subscripting; use explicit iteration and conditional checks for API response parsing.", "score": 0, "time_created": "2025-11-07 18:24:39", "time_modified": "2025-11-07 18:24:39", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Move my wake-up phone alarm to 40 minutes earlier and disable the rest.", "when_to_use": "When handling API responses with nested data structures", "category": "failure", "created_time": "2025-11-07 18:24:39", "modified_time": "2025-11-07 18:24:39", "generalized_query": "Update and disable multiple items in a dataset based on labels or identifiers", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "7668fafb4dd149ffa91b3fcd64f1ae92", "memory_type": "procedural", "when_to_use": "When implementing system configuration changes that require state verification", "content": "Implement state checks before modifying system settings to avoid redundant operations and ensure configuration changes align with user intent", "score": 0, "time_created": "2025-11-07 18:24:37", "time_modified": "2025-11-07 18:24:37", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I am going on a vacation. Move my wake-up phone alarm to 40 minutes earlier and disable the rest.", "when_to_use": "When implementing system configuration changes that require state verification", "category": "failure", "created_time": "2025-11-07 18:24:37", "modified_time": "2025-11-07 18:24:37", "generalized_query": "Modify and disable system alerts or notifications based on contextual triggers", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "adfe6d05a36e439d8b7c70187580f493", "memory_type": "procedural", "when_to_use": "When retrieving data from an API that requires pagination and field validation", "content": "Successfully retrieved all playlists via pagination, validated API response fields against documentation, and calculated durations by iterating through song IDs. Key fix involved aligning code with API response structure (using 'duration' instead of 'duration_seconds') after encountering KeyError.", "score": 0, "time_created": "2025-11-07 18:25:12", "time_modified": "2025-11-07 18:25:12", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "How long is my shortest Spotify playlist, in minutes, rounded to the nearest number?", "when_to_use": "When retrieving data from an API that requires pagination and field validation", "category": "success", "created_time": "2025-11-07 18:25:12", "modified_time": "2025-11-07 18:25:12", "generalized_query": "Calculate the minimum duration of user-owned media collections from a paginated API", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "2c2b2962fcb84c87a36bc21816cd6d5e", "memory_type": "procedural", "when_to_use": "When retrieving user credentials or API tokens from external systems", "content": "Always verify variable scope and initialization before use to prevent NameErrors during API authentication workflows", "score": 0, "time_created": "2025-11-07 18:25:14", "time_modified": "2025-11-07 18:25:14", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "How long is my shortest Spotify playlist, in minutes, rounded to the nearest number?", "when_to_use": "When retrieving user credentials or API tokens from external systems", "category": "failure", "created_time": "2025-11-07 18:25:14", "modified_time": "2025-11-07 18:25:14", "generalized_query": "Accessing secured user data through API authentication", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "e5a806619cea450894082b485ddaad6e", "memory_type": "procedural", "when_to_use": "When calculating playlist durations based on song counts", "content": "Assuming uniform item durations leads to inaccurate results; always use API-provided duration data for precise calculations", "score": 0, "time_created": "2025-11-07 18:25:06", "time_modified": "2025-11-07 18:25:06", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "How long is my longest Spotify playlist, in minutes, rounded to the nearest number?", "when_to_use": "When calculating playlist durations based on song counts", "category": "failure", "created_time": "2025-11-07 18:25:06", "modified_time": "2025-11-07 18:25:06", "generalized_query": "Calculating total duration of media items in a playlist", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "e5e3999d09d64601be11c0dd245c0505", "memory_type": "procedural", "when_to_use": "When retrieving paginated API results", "content": "Always verify if pagination limits might truncate data and implement proper pagination handling to ensure full dataset retrieval", "score": 0, "time_created": "2025-11-07 18:25:06", "time_modified": "2025-11-07 18:25:06", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "How long is my longest Spotify playlist, in minutes, rounded to the nearest number?", "when_to_use": "When retrieving paginated API results", "category": "failure", "created_time": "2025-11-07 18:25:06", "modified_time": "2025-11-07 18:25:06", "generalized_query": "Processing paginated API responses for complete dataset", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "91b571599fc74ae5956865c490e93289", "memory_type": "procedural", "when_to_use": "When initial API responses lack critical data fields required for calculations", "content": "When initial data retrieval (show_playlist_library) lacked song duration information, the agent debugged by inspecting playlist structure via show_playlist, then implemented nested API calls (show_song) to fetch missing metadata. This pattern ensures data completeness before aggregation.", "score": 0, "time_created": "2025-11-07 18:25:22", "time_modified": "2025-11-07 18:25:22", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "How long is my longest Spotify playlist, in minutes, rounded to the nearest number?", "when_to_use": "When initial API responses lack critical data fields required for calculations", "category": "success", "created_time": "2025-11-07 18:25:22", "modified_time": "2025-11-07 18:25:22", "generalized_query": "Calculate aggregate metric (e.g., duration, count) across user-owned entities (playlists, songs, etc.) in a music streaming platform", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "6d32db55c4a94050b8077fac5d605ee6", "memory_type": "procedural", "when_to_use": "When accessing nested data structures from API responses", "content": "Always validate that required fields exist in API responses before processing nested data structures", "score": 0, "time_created": "2025-11-07 18:25:44", "time_modified": "2025-11-07 18:25:44", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "How long is my longest Spotify playlist, in minutes, rounded to the nearest number?", "when_to_use": "When accessing nested data structures from API responses", "category": "failure", "created_time": "2025-11-07 18:25:44", "modified_time": "2025-11-07 18:25:44", "generalized_query": "Extracting specific metrics from hierarchical API data", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "b0d78e29e29b43ffb7b5726ed39fe5cc", "memory_type": "procedural", "when_to_use": "When handling API authentication and session management", "content": "Always ensure authentication tokens are properly scoped and available in the execution context before making API calls that require them", "score": 0, "time_created": "2025-11-07 18:26:05", "time_modified": "2025-11-07 18:26:05", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Play the most listened to song on Spotify from my Woodstock Reimagined: Festival Vibes playlist.", "when_to_use": "When handling API authentication and session management", "category": "failure", "created_time": "2025-11-07 18:26:05", "modified_time": "2025-11-07 18:26:05", "generalized_query": "Access and interact with user-specific data from a music streaming service API", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "c72b2ff8eae84c5685c45801ae45616d", "memory_type": "procedural", "when_to_use": "When retrieving user-specific data from search results", "content": "Implement explicit validation and filtering mechanisms when multiple resources share the same name or metadata", "score": 0, "time_created": "2025-11-07 18:26:05", "time_modified": "2025-11-07 18:26:05", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Identify the correct playlist from search results that belongs to the current user", "when_to_use": "When retrieving user-specific data from search results", "category": "failure", "created_time": "2025-11-07 18:26:05", "modified_time": "2025-11-07 18:26:05", "generalized_query": "Filter API search results to identify user-specific resources", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "be5a8fe5ef77447580dc19c488c322d4", "memory_type": "procedural", "when_to_use": "When accessing metrics for media content", "content": "Always verify that metric fields (like play_count) exist in API responses and handle potential null/missing data cases", "score": 0, "time_created": "2025-11-07 18:26:05", "time_modified": "2025-11-07 18:26:05", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Determine which song in the playlist has the highest play count", "when_to_use": "When accessing metrics for media content", "category": "failure", "created_time": "2025-11-07 18:26:05", "modified_time": "2025-11-07 18:26:05", "generalized_query": "Analyze media content metrics to identify popular items", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "28e9eec9a3b84d0db036d63e73215868", "memory_type": "procedural", "when_to_use": "When handling parameters for API endpoints with strict data type requirements", "content": "Verify data types of parameters match API specifications (e.g., song_id must be integer, not string)", "score": 0, "time_created": "2025-11-07 18:26:05", "time_modified": "2025-11-07 18:26:05", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "apis.spotify.play_music(song_id=most_listened_song[\"title\"])", "when_to_use": "When handling parameters for API endpoints with strict data type requirements", "category": "failure", "created_time": "2025-11-07 18:26:05", "modified_time": "2025-11-07 18:26:05", "generalized_query": "Interacting with APIs that enforce parameter type validation", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "3ee7d66701a745739979ea7b42ae8492", "memory_type": "procedural", "when_to_use": "When interacting with APIs requiring authentication tokens, especially in multi-step workflows involving repeated API calls.", "content": "The higher-scoring approach explicitly included the access_token parameter in the play_music API call, ensuring proper authentication. The lower-scoring sequence repeatedly reauthenticated but failed to propagate the token to the play_music endpoint. The higher approach also used programmatic data processing (min() function) to identify the least-played song, whereas the lower approach used manual, repetitive API calls.", "score": 0, "time_created": "2025-11-07 18:25:47", "time_modified": "2025-11-07 18:25:47", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Play the least listened to song on Spotify from the Echo Chamber Chronicles album.", "when_to_use": "When interacting with APIs requiring authentication tokens, especially in multi-step workflows involving repeated API calls.", "category": "comparative", "created_time": "2025-11-07 18:25:47", "modified_time": "2025-11-07 18:25:47", "generalized_query": "Execute a multi-step API workflow with authentication token management to achieve a task.", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "878c31c5dfd84167a2ca8685b05d8ab7", "memory_type": "procedural", "when_to_use": "When encountering 401 Unauthorized errors after successful authentication", "content": "API clients must explicitly handle token lifecycle management, including storage, refresh, and attachment to requests, as tokens are not automatically persisted between calls", "score": 0, "time_created": "2025-11-07 18:25:47", "time_modified": "2025-11-07 18:25:47", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Play the least listened to song on Spotify from the Echo Chamber Chronicles album.", "when_to_use": "When encountering 401 Unauthorized errors after successful authentication", "category": "failure", "created_time": "2025-11-07 18:25:47", "modified_time": "2025-11-07 18:25:47", "generalized_query": "Maintain valid authentication state across sequential API operations", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "5c0fdaa75e81480b878056cc0a45aa4f", "memory_type": "procedural", "when_to_use": "When interacting with authenticated API endpoints after initial login", "content": "Access tokens must be explicitly maintained and passed for authenticated operations; token expiration requires re-authentication before subsequent API calls", "score": 0, "time_created": "2025-11-07 18:26:25", "time_modified": "2025-11-07 18:26:25", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Play the most listened to song on Spotify from the Velvet Underground album.", "when_to_use": "When interacting with authenticated API endpoints after initial login", "category": "failure", "created_time": "2025-11-07 18:26:25", "modified_time": "2025-11-07 18:26:25", "generalized_query": "Execute a multi-step task requiring sustained API authentication", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "07873991fe69466b86473b2264644664", "memory_type": "procedural", "when_to_use": "When interpreting API response data for user intent fulfillment", "content": "Verify that the data retrieved from API responses directly addresses the user's intent. In this case, album like_count does not equate to individual song popularity metrics, requiring clarification or alternative data sources.", "score": 0, "time_created": "2025-11-07 18:26:29", "time_modified": "2025-11-07 18:26:29", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Play the most listened to song on Spotify from the Velvet Underground album.", "when_to_use": "When interpreting API response data for user intent fulfillment", "category": "failure", "created_time": "2025-11-07 18:26:29", "modified_time": "2025-11-07 18:26:29", "generalized_query": "Use API data to fulfill a user request that requires interpretation of metrics (e.g., popularity, listen count).", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "325a6bbf628a4b88a6a79b28646a2c6e", "memory_type": "procedural", "when_to_use": "When processing payment requests, ensure the request is still pending before attempting approval", "content": "Always verify the current state of a transaction before taking action, as previous operations may have altered its status", "score": 0, "time_created": "2025-11-07 18:26:20", "time_modified": "2025-11-07 18:26:20", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Accept all pending Venmo payment requests from my roommates and coworkers", "when_to_use": "When processing payment requests, ensure the request is still pending before attempting approval", "category": "failure", "created_time": "2025-11-07 18:26:20", "modified_time": "2025-11-07 18:26:20", "generalized_query": "Automatically process financial transactions from a list of pending requests", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "bea8b81ed3cd4952be584ced40cf67e1", "memory_type": "procedural", "when_to_use": "When retrieving sensitive data from API responses", "content": "Use proper data extraction techniques to avoid type mismatches when accessing nested API response structures", "score": 0, "time_created": "2025-11-07 18:26:20", "time_modified": "2025-11-07 18:26:20", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Extract Venmo password from supervisor's account passwords", "when_to_use": "When retrieving sensitive data from API responses", "category": "failure", "created_time": "2025-11-07 18:26:20", "modified_time": "2025-11-07 18:26:20", "generalized_query": "Retrieve credentials from stored account information", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "cb428e270bb64f1e85192d0a11d4a155", "memory_type": "procedural", "when_to_use": "When retrieving specific data from a list of objects using conditional checks", "content": "List comprehensions with boolean conditions return lists of booleans, not filtered objects - use generator expressions with next() for safe value extraction", "score": 0, "time_created": "2025-11-07 18:26:22", "time_modified": "2025-11-07 18:26:22", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Accept all pending Venmo payment requests from my roommates and coworkers.", "when_to_use": "When retrieving specific data from a list of objects using conditional checks", "category": "failure", "created_time": "2025-11-07 18:26:22", "modified_time": "2025-11-07 18:26:22", "generalized_query": "Automate approval of pending financial transactions from specific contacts", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "51dd213b2dc6483bbf4dc63553cc4803", "memory_type": "procedural", "when_to_use": "When retrieving credentials or data from a list of entries", "content": "Always verify data structure operations to avoid type mismatches (e.g., boolean vs. list elements) when filtering or extracting values from collections", "score": 0, "time_created": "2025-11-07 18:26:40", "time_modified": "2025-11-07 18:26:40", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Reject all pending Venmo payment requests from my friends and roommates.", "when_to_use": "When retrieving credentials or data from a list of entries", "category": "failure", "created_time": "2025-11-07 18:26:40", "modified_time": "2025-11-07 18:26:40", "generalized_query": "Access and retrieve specific account credentials from a list of stored accounts", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "455ae57672c94c7b90cda20acfd9632d", "memory_type": "procedural", "when_to_use": "When filtering lists to extract specific elements, especially when using list comprehensions or generator expressions", "content": "Avoid using list comprehensions that produce boolean values when attempting to extract objects; instead, use generator expressions with next() or explicit loops to safely retrieve target elements.", "score": 0, "time_created": "2025-11-07 18:27:01", "time_modified": "2025-11-07 18:27:01", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Accept all pending Venmo payment requests from my coworkers and friends.", "when_to_use": "When filtering lists to extract specific elements, especially when using list comprehensions or generator expressions", "category": "failure", "created_time": "2025-11-07 18:27:01", "modified_time": "2025-11-07 18:27:01", "generalized_query": "Retrieve specific data elements from a list of objects based on a condition", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "f63e00f7c82a4adebde1eb3445a5f054", "memory_type": "procedural", "when_to_use": "When paginating through API results to ensure all items are retrieved", "content": "Implement robust pagination handling by checking for empty responses and incrementing page indices systematically, while validating API response structures for edge cases.", "score": 0, "time_created": "2025-11-07 18:27:01", "time_modified": "2025-11-07 18:27:01", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Accept all pending Venmo payment requests from my coworkers and friends.", "when_to_use": "When paginating through API results to ensure all items are retrieved", "category": "failure", "created_time": "2025-11-07 18:27:01", "modified_time": "2025-11-07 18:27:01", "generalized_query": "Iterate through paginated API endpoints to collect complete datasets", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "d9deb64714d84ef99cf02d4abd5d3829", "memory_type": "procedural", "when_to_use": "When needing to identify the most played song by a specific artist on Spotify", "content": "The successful pattern involved first locating the artist via search_artists API, then querying search_songs with artist_id filter and sorting by play_count descending. This ensured retrieval of the most played song through explicit metric-based sorting rather than relying on default ordering.", "score": 0, "time_created": "2025-11-07 18:27:20", "time_modified": "2025-11-07 18:27:20", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "What is the title of the most played song by Velvet Echo on Spotify.", "when_to_use": "When needing to identify the most played song by a specific artist on Spotify", "category": "success", "created_time": "2025-11-07 18:27:20", "modified_time": "2025-11-07 18:27:20", "generalized_query": "Retrieve the most popular song by a specific artist from a music streaming platform", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "0e7cae16f5a549ca8c811ef05ac82e34", "memory_type": "procedural", "when_to_use": "When extracting specific data from API responses, especially nested or list-based structures", "content": "Always validate data structure types before accessing nested elements to avoid type errors. Use list comprehensions correctly to filter and extract values rather than boolean checks.", "score": 0, "time_created": "2025-11-07 18:27:19", "time_modified": "2025-11-07 18:27:19", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "What is the title of the least played song by Zoey James on Spotify.", "when_to_use": "When extracting specific data from API responses, especially nested or list-based structures", "category": "failure", "created_time": "2025-11-07 18:27:19", "modified_time": "2025-11-07 18:27:19", "generalized_query": "Extracting specific data fields from nested API response structures", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "4fd1c1bbd4a74abd8f11015d16c3e6dc", "memory_type": "procedural", "when_to_use": "When interpreting API search results for quantitative analysis", "content": "API search results may not guarantee completeness. When analyzing metrics like play counts, explicitly verify if the dataset contains all relevant entries and consider implementing pagination or filtering parameters for accuracy.", "score": 0, "time_created": "2025-11-07 18:27:19", "time_modified": "2025-11-07 18:27:19", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "What is the title of the least played song by Zoey James on Spotify.", "when_to_use": "When interpreting API search results for quantitative analysis", "category": "failure", "created_time": "2025-11-07 18:27:19", "modified_time": "2025-11-07 18:27:19", "generalized_query": "Identifying minimum/maximum values from API-generated datasets", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "c8269750ff7b4ddc9d7f2ca2e7c3211f", "memory_type": "procedural", "when_to_use": "When handling authentication workflows across multiple apps", "content": "Store retrieved credentials securely and avoid repeated API calls for the same authentication details. Implement error handling for authentication failures during API interactions.", "score": 0, "time_created": "2025-11-07 18:27:19", "time_modified": "2025-11-07 18:27:19", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "What is the title of the least played song by Zoey James on Spotify.", "when_to_use": "When handling authentication workflows across multiple apps", "category": "failure", "created_time": "2025-11-07 18:27:19", "modified_time": "2025-11-07 18:27:19", "generalized_query": "Cross-app authentication and credential management", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "ce4c506faa4d457c8653dd50ea3df80d", "memory_type": "procedural", "when_to_use": "When needing to authenticate to an API with stored credentials", "content": "The sequence of retrieving stored passwords via supervisor API, logging in with credentials, and handling token authentication ensures secure access to user-specific data. This pattern is critical for APIs requiring authentication before accessing personal data.", "score": 0, "time_created": "2025-11-07 18:27:44", "time_modified": "2025-11-07 18:27:44", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Follow all the artists who have sung at least one song I have liked on Spotify.", "when_to_use": "When needing to authenticate to an API with stored credentials", "category": "success", "created_time": "2025-11-07 18:27:44", "modified_time": "2025-11-07 18:27:44", "generalized_query": "Authenticate to a service using stored credentials to perform user-specific actions", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "695b0ba007f64b3188dc1fa32980e00b", "memory_type": "procedural", "when_to_use": "When processing paginated API responses with unknown total size", "content": "The while-loop pagination pattern (incrementing page_index until empty response) reliably handles unknown dataset sizes. This technique prevents incomplete data retrieval and ensures all liked songs are processed for artist extraction.", "score": 0, "time_created": "2025-11-07 18:27:44", "time_modified": "2025-11-07 18:27:44", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Get the list of liked songs", "when_to_use": "When processing paginated API responses with unknown total size", "category": "success", "created_time": "2025-11-07 18:27:44", "modified_time": "2025-11-07 18:27:44", "generalized_query": "Retrieve large datasets from an API using pagination parameters", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "260ccc4af6984759a015092173d7f15a", "memory_type": "procedural", "when_to_use": "When implementing conditional actions based on resource state", "content": "Checking artist follow-status before attempting to follow prevents redundant operations and 422 errors. This decision pattern ensures operational efficiency and avoids unnecessary API calls by verifying current state first.", "score": 0, "time_created": "2025-11-07 18:27:44", "time_modified": "2025-11-07 18:27:44", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Follow each artist who is not already followed", "when_to_use": "When implementing conditional actions based on resource state", "category": "success", "created_time": "2025-11-07 18:27:44", "modified_time": "2025-11-07 18:27:44", "generalized_query": "Perform actions only when prerequisite conditions are unmet", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "01b71723d17446d5958874b4ce313e67", "memory_type": "procedural", "when_to_use": "When implementing filtering logic for unique entity processing", "content": "Implement set operations and strict equality checks when filtering lists to guarantee operational uniqueness.", "score": 0, "time_created": "2025-11-07 18:27:50", "time_modified": "2025-11-07 18:27:50", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Filter out artists already being followed before attempting to follow them", "when_to_use": "When implementing filtering logic for unique entity processing", "category": "failure", "created_time": "2025-11-07 18:27:50", "modified_time": "2025-11-07 18:27:50", "generalized_query": "Ensure uniqueness in target lists before performing bulk operations on entities.", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "f240fb212a894efeaf75c0e778c06c85", "memory_type": "procedural", "when_to_use": "When retrieving paginated data to find maximum values (e.g., most played songs)", "content": "Always check if additional pages may contain higher values when using paginated APIs to find maxima. Default page limits may truncate results.", "score": 0, "time_created": "2025-11-07 18:28:03", "time_modified": "2025-11-07 18:28:03", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "What is the title of the most played song by Jasper Skye on Spotify.", "when_to_use": "When retrieving paginated data to find maximum values (e.g., most played songs)", "category": "failure", "created_time": "2025-11-07 18:28:03", "modified_time": "2025-11-07 18:28:03", "generalized_query": "Identify the maximum value item (e.g., play count, likes) from a dataset with pagination", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "cd8f4417e51f4a73a7f1f4cf2680c704", "memory_type": "procedural", "when_to_use": "When searching for specific artist content with potential incomplete results", "content": "Use explicit filters (artist_id, genre) in search APIs to narrow results, but validate if the returned dataset is comprehensive enough for analytical queries.", "score": 0, "time_created": "2025-11-07 18:28:03", "time_modified": "2025-11-07 18:28:03", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "What is the title of the most played song by Jasper Skye on Spotify.", "when_to_use": "When searching for specific artist content with potential incomplete results", "category": "failure", "created_time": "2025-11-07 18:28:03", "modified_time": "2025-11-07 18:28:03", "generalized_query": "Retrieve specific user-generated content (songs, albums) filtered by artist or metadata", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "fb3f4c447d304303acd6c4b0e36dc7f5", "memory_type": "procedural", "when_to_use": "When attempting to retrieve user-specific data via APIs that require authentication or specific identifiers", "content": "Directly querying user profiles with unverified identifiers (e.g., email) may fail if the account does not exist or if the API expects different parameters. Always verify API parameter requirements and consider alternative data retrieval paths.", "score": 0, "time_created": "2025-11-07 18:27:58", "time_modified": "2025-11-07 18:27:58", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "What is the title of the most played song by Jasper Skye on Spotify.", "when_to_use": "When attempting to retrieve user-specific data via APIs that require authentication or specific identifiers", "category": "failure", "created_time": "2025-11-07 18:27:58", "modified_time": "2025-11-07 18:27:58", "generalized_query": "Retrieve specific data about an artist's popularity from a music streaming platform", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "c7b383b17fcd45f7ac3dcde5029bc141", "memory_type": "procedural", "when_to_use": "When interpreting API response structures and error codes", "content": "A 422 Unprocessable Entity error indicates invalid input parameters. Always cross-reference API documentation with error messages to identify parameter mismatches or missing prerequisites like authentication tokens.", "score": 0, "time_created": "2025-11-07 18:27:58", "time_modified": "2025-11-07 18:27:58", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "What is the title of the most played song by Jasper Skye on Spotify.", "when_to_use": "When interpreting API response structures and error codes", "category": "failure", "created_time": "2025-11-07 18:27:58", "modified_time": "2025-11-07 18:27:58", "generalized_query": "Handling API errors during data retrieval operations", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "4d508c561a894830b7d2d02e2cec6723", "memory_type": "procedural", "when_to_use": "When needing to filter followed entities (e.g., artists, creators) based on engagement with specific user content (e.g., liked songs, saved albums)", "content": "Successfully retrieved paginated liked songs and followed artists, then used set operations to identify unfollow targets. Critical steps included: 1) Pagination handling for incomplete API responses 2) Field validation (using 'artist_id' instead of 'id') based on API schema 3) Efficient set difference calculation for unfollow decisions", "score": 0, "time_created": "2025-11-07 18:28:08", "time_modified": "2025-11-07 18:28:08", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Unfollow all the artists who have not sung even a single song I have liked on Spotify.", "when_to_use": "When needing to filter followed entities (e.g., artists, creators) based on engagement with specific user content (e.g., liked songs, saved albums)", "category": "success", "created_time": "2025-11-07 18:28:08", "modified_time": "2025-11-07 18:28:08", "generalized_query": "Remove followed entities that have no interaction with user-specific content", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "d307772629d44ecf852b3cfee2f25e7a", "memory_type": "procedural", "when_to_use": "When interacting with API responses that contain nested or specific key structures", "content": "Always verify the exact key names in API response schemas to avoid KeyErrors and ensure correct data extraction.", "score": 0, "time_created": "2025-11-07 18:28:31", "time_modified": "2025-11-07 18:28:31", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Unfollow all the artists who have not sung even a single song I have liked on Spotify.", "when_to_use": "When interacting with API responses that contain nested or specific key structures", "category": "failure", "created_time": "2025-11-07 18:28:31", "modified_time": "2025-11-07 18:28:31", "generalized_query": "Modify user relationships (e.g., unfollow) based on data from API endpoints with specific key structures.", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_14b", "memory_id": "c4491e153c344647818f28fadec2ef30", "memory_type": "procedural", "when_to_use": "When automating follow actions on social/music platforms based on user preferences, ensuring idempotency to avoid redundant operations.", "content": "The successful pattern involved: 1) Using 'show_liked_songs' to retrieve user preferences, 2) Extracting unique artist IDs from those songs, 3) Checking 'is_following' status via 'show_artist' before attempting to follow, and 4) Implementing error handling to skip already-followed artists. This ensured efficient, non-redundant operations despite API limitations.", "score": 0, "time_created": "2025-11-07 18:28:17", "time_modified": "2025-11-07 18:28:17", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Follow all the artists who have sung at least one song I have liked on Spotify.", "when_to_use": "When automating follow actions on social/music platforms based on user preferences, ensuring idempotency to avoid redundant operations.", "category": "success", "created_time": "2025-11-07 18:28:17", "modified_time": "2025-11-07 18:28:17", "generalized_query": "Automatically follow entities (e.g., artists, creators) linked to user-liked content while avoiding duplicate actions.", "utility": 0, "freq": 0}} diff --git a/docs/library/paper_data/task/appworld_qwen3_32b.jsonl b/docs/library/paper_data/task/appworld_qwen3_32b.jsonl deleted file mode 100644 index 661a9a91..00000000 --- a/docs/library/paper_data/task/appworld_qwen3_32b.jsonl +++ /dev/null @@ -1,184 +0,0 @@ -{"workspace_id": "appworld_qwen3_32b", "memory_id": "83bc064d7004416e9b58b868b206f0a9", "memory_type": "procedural", "when_to_use": "When needing to update user-specific data across paginated API results with potential existing records", "content": "Successfully handled both creation and updating of song reviews by: 1) Using exception handling to detect existing reviews (409 conflict), 2) Filtering reviews by user email to identify owned reviews, 3) Implementing pagination for playlist/song discovery, and 4) Leveraging API docs to identify required parameters (e.g., review_id for updates). The combination of error handling + user-specific filtering enabled reliable state transitions from existing low ratings to 5-star ratings.", "score": 0, "time_created": "2025-11-04 17:43:09", "time_modified": "2025-11-04 17:43:09", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Give a 5-star rating to all songs in my Spotify playlists which I have liked. If I have already rated it lower, increase it to 5.", "when_to_use": "When needing to update user-specific data across paginated API results with potential existing records", "category": "success", "created_time": "2025-11-04 17:43:09", "modified_time": "2025-11-04 17:43:09", "generalized_query": "Modify user-generated ratings/reviews for media items across paginated API results", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "431b95ce6bfd4939afc8574bcb3208b9", "memory_type": "procedural", "when_to_use": "When interacting with nested data structures in API responses", "content": "Always validate nested key paths in API responses before accessing them. Use explicit checks for dictionary key existence and nested object structures to avoid KeyError exceptions.", "score": 0, "time_created": "2025-11-04 17:43:10", "time_modified": "2025-11-04 17:43:10", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Give a 5-star rating to all songs in my Spotify playlists which I have liked. If I have already rated it lower, increase it to 5.", "when_to_use": "When interacting with nested data structures in API responses", "category": "failure", "created_time": "2025-11-04 17:43:10", "modified_time": "2025-11-04 17:43:10", "generalized_query": "Update user-specific metadata (e.g., ratings) in music streaming platforms using nested API responses", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "c4a9583a908e419389a601350060f3ec", "memory_type": "procedural", "when_to_use": "When retrieving user-specific data from paginated API endpoints requiring authentication", "content": "The successful pattern involved: 1) Authenticating via supervisor credentials to access protected APIs, 2) Using pagination loops to exhaustively collect all album data, 3) Extracting song IDs from album data to fetch individual song metadata, 4) Aggregating play counts across all songs to determine the maximum value. This approach ensures comprehensive data collection despite API pagination limits.", "score": 0, "time_created": "2025-11-04 17:43:02", "time_modified": "2025-11-04 17:43:02", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "What is the title of the most-played song in my Spotify album library.", "when_to_use": "When retrieving user-specific data from paginated API endpoints requiring authentication", "category": "success", "created_time": "2025-11-04 17:43:02", "modified_time": "2025-11-04 17:43:02", "generalized_query": "Identify the most frequently interacted-with item in a user's media library across paginated API results", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "4306978d0891401bb034482dd31454c0", "memory_type": "procedural", "when_to_use": "When retrieving user-specific song play counts from Spotify's API", "content": "Always verify API documentation to confirm whether an endpoint provides play count data. Do not assume metadata like 'reviews' or 'likes' correlates with play frequency. Use the most direct available metric (e.g., show_song_privates for user-specific play counts if available).", "score": 0, "time_created": "2025-11-04 17:43:01", "time_modified": "2025-11-04 17:43:01", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "What is the title of the least-played song in my Spotify song library", "when_to_use": "When retrieving user-specific song play counts from Spotify's API", "category": "failure", "created_time": "2025-11-04 17:43:01", "modified_time": "2025-11-04 17:43:01", "generalized_query": "Identify the song with the lowest engagement metric (e.g., plays, listens) in a user's music library", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "f47c6426655c4c2ebe29489f2fa438e7", "memory_type": "procedural", "when_to_use": "When handling API validation errors in parameter constraints", "content": "Always validate parameter constraints in API documentation before execution. For parameters like min_rating (≥1), avoid values that violate constraints even if logically appealing (e.g., using 0 to bypass filters).", "score": 0, "time_created": "2025-11-04 17:43:01", "time_modified": "2025-11-04 17:43:01", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "What is the title of the least-played song in my Spotify song library", "when_to_use": "When handling API validation errors in parameter constraints", "category": "failure", "created_time": "2025-11-04 17:43:01", "modified_time": "2025-11-04 17:43:01", "generalized_query": "Execute API calls requiring numerical parameters with strict range constraints", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "572a2b924ee649b2a63cdb4ed2cffb8a", "memory_type": "procedural", "when_to_use": "When working with paginated API responses that require complete dataset aggregation", "content": "Implemented a robust pagination loop using page_index incrementation until empty responses were received, ensuring complete dataset collection. This approach avoids undercounting by not relying on fixed page limits and handles variable API response sizes gracefully.", "score": 0, "time_created": "2025-11-04 17:43:17", "time_modified": "2025-11-04 17:43:17", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "How many playlists do I have in Spotify?", "when_to_use": "When working with paginated API responses that require complete dataset aggregation", "category": "success", "created_time": "2025-11-04 17:43:17", "modified_time": "2025-11-04 17:43:17", "generalized_query": "Accurately count items in a paginated API endpoint with unknown total size", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "f357ffeb3ffa48358bc12f3ffe19c009", "memory_type": "procedural", "when_to_use": "When authenticating to protected services requiring account credentials", "content": "Successfully retrieved encrypted credentials via supervisor.show_account_passwords before initiating API authentication. Implemented specific credential filtering by account name and proper parameter mapping during login, establishing a secure and reliable authentication pattern for subsequent API interactions.", "score": 0, "time_created": "2025-11-04 17:43:17", "time_modified": "2025-11-04 17:43:17", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "How many playlists do I have in Spotify?", "when_to_use": "When authenticating to protected services requiring account credentials", "category": "success", "created_time": "2025-11-04 17:43:17", "modified_time": "2025-11-04 17:43:17", "generalized_query": "Securely access account-protected APIs using supervisor-managed credentials", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "db2b7b3ae0e9410aa2a022b690f38ed1", "memory_type": "procedural", "when_to_use": "When determining the most-liked song in playlists based on API data", "content": "Always validate API endpoints for direct metric retrieval (e.g., song like_count) instead of inferring metrics from indirect correlations (e.g., playlist frequency). Use the 'show_song' API to fetch actual like counts rather than assuming playlist occurrences indicate popularity.", "score": 0, "time_created": "2025-11-04 17:43:01", "time_modified": "2025-11-04 17:43:01", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "What is the title of the most-liked song in my Spotify playlists.", "when_to_use": "When determining the most-liked song in playlists based on API data", "category": "failure", "created_time": "2025-11-04 17:43:01", "modified_time": "2025-11-04 17:43:01", "generalized_query": "Identify the top-rated item in a user's media library based on nested API data", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "baabeaca71a6478fb7bf35b059b38c7d", "memory_type": "procedural", "when_to_use": "When handling paginated API responses for comprehensive data collection", "content": "Implement robust pagination loops with explicit termination conditions (e.g., empty responses) to ensure full dataset collection. Avoid hardcoding page limits (e.g., page_index < 10) as this may truncate results and lead to incomplete analysis.", "score": 0, "time_created": "2025-11-04 17:43:01", "time_modified": "2025-11-04 17:43:01", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "What is the title of the most-liked song in my Spotify playlists.", "when_to_use": "When handling paginated API responses for comprehensive data collection", "category": "failure", "created_time": "2025-11-04 17:43:01", "modified_time": "2025-11-04 17:43:01", "generalized_query": "Aggregate data from paginated API endpoints to ensure complete dataset coverage", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "e91c8c7382834a629f983ea31a867bd1", "memory_type": "procedural", "when_to_use": "When interacting with APIs to modify user data (e.g., ratings, reviews)", "content": "Always verify API capabilities and data structure before assuming field existence or operation availability. Use 'show_' endpoints to inspect available fields and ensure API actions (create/update) align with existing data constraints.", "score": 0, "time_created": "2025-11-04 17:44:02", "time_modified": "2025-11-04 17:44:02", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Give a 1-star rating to all songs in my Spotify song library which I have not liked. If I have already rated it higher, decrease it to 1.", "when_to_use": "When interacting with APIs to modify user data (e.g., ratings, reviews)", "category": "failure", "created_time": "2025-11-04 17:44:02", "modified_time": "2025-11-04 17:44:02", "generalized_query": "Modify user-generated content ratings based on existing preferences", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "2ee7e88dac8d4a478875fe7938220d9c", "memory_type": "procedural", "when_to_use": "When working with paginated API endpoints that require complete dataset retrieval", "content": "Used while loops with page_index increment to fully paginate through both song libraries and reviews. This ensures completeness by continuing requests until empty responses are received, avoiding partial data processing. Works effectively with Spotify's page-based API design.", "score": 0, "time_created": "2025-11-04 17:44:03", "time_modified": "2025-11-04 17:44:03", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Give a 1-star rating to all songs in my Spotify song library which I have not liked...", "when_to_use": "When working with paginated API endpoints that require complete dataset retrieval", "category": "success", "created_time": "2025-11-04 17:44:03", "modified_time": "2025-11-04 17:44:03", "generalized_query": "Process complete datasets from paginated API endpoints", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "2a4a0d14ae8d4353a29afae52aef3010", "memory_type": "procedural", "when_to_use": "When attempting to access an app's API that requires authentication and the initial login fails", "content": "Always verify authentication status and required parameters (e.g., phone number) before retrying failed API calls. Use explicit error handling for credential validation and avoid hardcoding values like password reset codes.", "score": 0, "time_created": "2025-11-04 17:44:14", "time_modified": "2025-11-04 17:44:14", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Like all the venmo transactions from today involving any of my roommates on my venmo social feed.", "when_to_use": "When attempting to access an app's API that requires authentication and the initial login fails", "category": "failure", "created_time": "2025-11-04 17:44:14", "modified_time": "2025-11-04 17:44:14", "generalized_query": "Interact with an app's API requiring authentication after encountering login failures", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "4a941ea2575341fcaf8c99e03876b78e", "memory_type": "procedural", "when_to_use": "When implementing complex data filtering across multiple API sources with relationship constraints", "content": "The higher-scoring approach demonstrated superior data correlation by: 1) Extracting roommate emails from contact records 2) Matching these against transaction sender/receiver emails 3) Using ISO date formatting for accurate temporal filtering. The lower approach failed to establish proper data relationships and relied on phone numbers instead of emails, which weren't present in transaction records. The successful approach also implemented defensive programming by inspecting sample transactions to validate data structure assumptions", "score": 0, "time_created": "2025-11-04 17:44:15", "time_modified": "2025-11-04 17:44:15", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Like all the venmo transactions from today involving any of my roommates on my venmo social feed.", "when_to_use": "When implementing complex data filtering across multiple API sources with relationship constraints", "category": "comparative", "created_time": "2025-11-04 17:44:15", "modified_time": "2025-11-04 17:44:15", "generalized_query": "Filter and act on transactional data involving specific relationships within time windows", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "afbfd954670c472db7b229d31324f837", "memory_type": "procedural", "when_to_use": "When handling user-specific data updates in APIs where existing entries must be checked before creation or modification", "content": "The higher-scoring approach succeeded by: 1) Correctly identifying that 'liked songs' required using the `show_liked_songs` API rather than album-based APIs 2) Properly handling review conflicts by first retrieving existing reviews via `show_song_reviews`, filtering by user email, and using `update_song_review` when necessary 3) Implementing a robust check for existing user reviews before attempting to create new ones. The lower-scoring approach failed by incorrectly targeting album reviews instead of song reviews, and by not properly filtering reviews by the user's email when retrieving existing reviews.", "score": 0, "time_created": "2025-11-04 17:44:13", "time_modified": "2025-11-04 17:44:13", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Give a 4-star rating to all songs in my Spotify album library which I have liked. If I have already rated it lower, increase it to 4.", "when_to_use": "When handling user-specific data updates in APIs where existing entries must be checked before creation or modification", "category": "comparative", "created_time": "2025-11-04 17:44:13", "modified_time": "2025-11-04 17:44:13", "generalized_query": "Update user-generated ratings for media items (songs/albums) in a platform where prior reviews must be checked to avoid conflicts", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "5e98ab9c2e854dc6bfbbd92548d1aca8", "memory_type": "procedural", "when_to_use": "When paginating through API results to ensure completeness", "content": "Implement pagination loops with proper page_index incrementing and null-checking to ensure all items are retrieved. Avoid assumptions about result limits or single-page completeness.", "score": 0, "time_created": "2025-11-04 17:44:11", "time_modified": "2025-11-04 17:44:11", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Give a 4-star rating to all songs in my Spotify album library which I have liked. If I have already rated it lower, increase it to 4.", "when_to_use": "When paginating through API results to ensure completeness", "category": "failure", "created_time": "2025-11-04 17:44:11", "modified_time": "2025-11-04 17:44:11", "generalized_query": "Retrieve all items from a paginated API endpoint to ensure comprehensive data processing.", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "4fdbd2358d9049d3a999c28ce3ef8825", "memory_type": "procedural", "when_to_use": "When authenticating to an app with stored credentials fails", "content": "Always verify authentication requirements by cross-referencing account details (e.g., phone numbers vs email) and consider cascading verification steps (e.g., 2FA) when stored credentials fail. Never assume email/password pairs will work across different app contexts.", "score": 0, "time_created": "2025-11-04 17:44:12", "time_modified": "2025-11-04 17:44:12", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Like all the venmo transactions from yesterday involving any of my siblings on my venmo social feed.", "when_to_use": "When authenticating to an app with stored credentials fails", "category": "failure", "created_time": "2025-11-04 17:44:12", "modified_time": "2025-11-04 17:44:12", "generalized_query": "Attempting to access an app's API with stored credentials results in 'Invalid credentials' errors", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "759c1b9431ca4acdbaf76adab1114d42", "memory_type": "procedural", "when_to_use": "When processing paginated API responses with date filters", "content": "The higher-scoring approach implemented comprehensive pagination handling (while loop with page_index increment) and precise date filtering (ISO format string matching). The lower-scoring approach only fetched a fixed number of transactions without proper pagination and used datetime.now() which could produce inconsistent results across time zones.", "score": 0, "time_created": "2025-11-04 17:44:14", "time_modified": "2025-11-04 17:44:14", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Like all the venmo transactions from yesterday involving any of my siblings on my venmo social feed.", "when_to_use": "When processing paginated API responses with date filters", "category": "comparative", "created_time": "2025-11-04 17:44:14", "modified_time": "2025-11-04 17:44:14", "generalized_query": "Filter and process time-sensitive social media/transaction data", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "6e32868f0c254dfc849170c097dfc43c", "memory_type": "procedural", "when_to_use": "When accessing contact information or APIs requiring authentication tokens", "content": "Always verify API existence and parameters before invocation. Ensure access tokens are properly passed in subsequent API calls after login. Define required variables (e.g., email lists) before referencing them in filtering logic.", "score": 0, "time_created": "2025-11-04 17:45:03", "time_modified": "2025-11-04 17:45:03", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Like all the venmo transactions from yesterday or today involving any of my coworkers on my venmo social feed.", "when_to_use": "When accessing contact information or APIs requiring authentication tokens", "category": "failure", "created_time": "2025-11-04 17:45:03", "modified_time": "2025-11-04 17:45:03", "generalized_query": "Accessing contact data or performing actions on social payment platforms requiring authentication", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "1e0ad60ac31e43029bc2c83eeac417c1", "memory_type": "procedural", "when_to_use": "When implementing date-based filtering for transaction data", "content": "Implemented robust date comparison logic using datetime.datetime: (1) Parsed ISO 8601 transaction dates, (2) Compared against current date and date-1 (yesterday), (3) Handled time zones implicitly through server-side timestamps. This pattern ensures accurate temporal filtering for similar transaction-based tasks.", "score": 0, "time_created": "2025-11-04 17:45:06", "time_modified": "2025-11-04 17:45:06", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Like all the venmo transactions from yesterday or today involving any of my coworkers on my venmo social feed.", "when_to_use": "When implementing date-based filtering for transaction data", "category": "success", "created_time": "2025-11-04 17:45:06", "modified_time": "2025-11-04 17:45:06", "generalized_query": "Apply temporal filters to transactional data streams", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "6aebfa25044448c79b8815ed7549b3b0", "memory_type": "procedural", "when_to_use": "When interacting with the file_system app to create directories or files", "content": "Always authenticate to the file_system app using its login API before performing file operations. Direct usage of Python's open() function is prohibited; instead, use the file_system app's create_file or update_file APIs with valid access tokens.", "score": 0, "time_created": "2025-11-04 17:45:15", "time_modified": "2025-11-04 17:45:15", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Export a unique list of all the songs in my song and album library and all playlists in my Spotify account into \"~/backups/spotify.csv\" file in my file system.", "when_to_use": "When interacting with the file_system app to create directories or files", "category": "failure", "created_time": "2025-11-04 17:45:15", "modified_time": "2025-11-04 17:45:15", "generalized_query": "Export data to a file in the user's file system using restricted APIs", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "960931f64cb34375b2d8b406b58b43c1", "memory_type": "procedural", "when_to_use": "When ensuring data uniqueness across multiple sources", "content": "Use dictionary merging (`{**dict1, **dict2}`) with unique identifiers (e.g., `song_id`) to eliminate duplicates. For nested data (albums/playlists), resolve referenced IDs via additional API calls (e.g., `show_song`). This ensures completeness while avoiding redundant entries.", "score": 0, "time_created": "2025-11-04 17:45:16", "time_modified": "2025-11-04 17:45:16", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Export a unique list of all the songs in my song and album library and all playlists in my Spotify account...", "when_to_use": "When ensuring data uniqueness across multiple sources", "category": "success", "created_time": "2025-11-04 17:45:16", "modified_time": "2025-11-04 17:45:16", "generalized_query": "Aggregate and deduplicate data from multiple related endpoints (e.g., songs from libraries and playlists).", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "a63ce017f89e42a98db10efc9ba816c9", "memory_type": "procedural", "when_to_use": "When exporting data to a file system with restricted APIs", "content": "The higher-scoring approach used the `file_system.create_file` API directly to write CSV content as a string, bypassing restricted Python libraries like `csv` and `open`. This avoided execution errors caused by invalid function usage in the lower-scoring approach. Proper API adherence and string-based CSV formatting ensured compatibility with the environment's constraints.", "score": 0, "time_created": "2025-11-04 17:45:27", "time_modified": "2025-11-04 17:45:27", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Export a unique list of all the songs in my song and album library and all playlists in my Spotify account into \"~/backups/spotify_songs.csv\" file in my file system.", "when_to_use": "When exporting data to a file system with restricted APIs", "category": "comparative", "created_time": "2025-11-04 17:45:27", "modified_time": "2025-11-04 17:45:27", "generalized_query": "Exporting data to a file system with API-specific constraints and restricted standard libraries", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "549229cf2d6e4db4b7db6b146e43f090", "memory_type": "procedural", "when_to_use": "When handling paginated API responses for comprehensive data collection", "content": "The higher-scoring approach systematically paginated through all `song_library`, `album_library`, and `playlist_library` endpoints, using a `set` to track unique song IDs. The lower-scoring approach only retrieved the first page of song data (20 items) before proceeding, missing additional entries. Efficient pagination and deduplication ensured completeness in the higher-scoring solution.", "score": 0, "time_created": "2025-11-04 17:45:27", "time_modified": "2025-11-04 17:45:27", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Export a unique list of all the songs in my song and album library and all playlists in my Spotify account...", "when_to_use": "When handling paginated API responses for comprehensive data collection", "category": "comparative", "created_time": "2025-11-04 17:45:27", "modified_time": "2025-11-04 17:45:27", "generalized_query": "Aggregating paginated data from multiple sources while ensuring uniqueness", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "1407193985fd4a158a2a5a7179fdf423", "memory_type": "procedural", "when_to_use": "When accessing sensitive account credentials for authentication", "content": "Used supervisor.show_account_passwords() to securely obtain service-specific passwords instead of hardcoding or storing in variables. Applied generator expression (next()+filter) for efficient credential retrieval from password list.", "score": 0, "time_created": "2025-11-04 17:45:32", "time_modified": "2025-11-04 17:45:32", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "My name is: Christina Harrison. My personal email is chrharrison@gmail.com and phone number is 7487401121.", "when_to_use": "When accessing sensitive account credentials for authentication", "category": "success", "created_time": "2025-11-04 17:45:32", "modified_time": "2025-11-04 17:45:32", "generalized_query": "Retrieve encrypted credentials from supervisor app for API authentication", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "2a23035a8f09491bb345bdeac4ec1d62", "memory_type": "procedural", "when_to_use": "When working with nested data structures and API pagination", "content": "Always validate API parameter names against documentation before making calls, especially when handling nested objects. Use explicit variable assignments for complex data structures to avoid syntax errors in set/dict comprehensions.", "score": 0, "time_created": "2025-11-04 17:45:20", "time_modified": "2025-11-04 17:45:20", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Export a unique list of all the songs in my song and album library and all playlists in my Spotify account into ~/backups/spotify_library.csv file in my file system", "when_to_use": "When working with nested data structures and API pagination", "category": "failure", "created_time": "2025-11-04 17:45:20", "modified_time": "2025-11-04 17:45:20", "generalized_query": "Exporting data from paginated APIs into structured files", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "dca8840734304b8cbe27d7a91ed3c2b7", "memory_type": "procedural", "when_to_use": "When handling multiple authentication tokens across services", "content": "Maintain separate authentication contexts for different services and explicitly pass access tokens in API calls. Verify token validity before critical operations like account termination.", "score": 0, "time_created": "2025-11-04 17:45:20", "time_modified": "2025-11-04 17:45:20", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Terminate my account after this backup is complete", "when_to_use": "When handling multiple authentication tokens across services", "category": "failure", "created_time": "2025-11-04 17:45:20", "modified_time": "2025-11-04 17:45:20", "generalized_query": "Performing irreversible actions after multi-service operations", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "7bafdc2c45e24498805b1f70d907b536", "memory_type": "procedural", "when_to_use": "When aggregating data from multiple paginated API endpoints", "content": "Implemented consistent pagination pattern across `show_song_library`, `show_album_library`, and `show_playlist_library` endpoints using while loops that increment page_index until no more results. Used set-based deduplication on song IDs to ensure uniqueness before final export. This approach guarantees completeness while avoiding redundant entries, which is critical for accurate data backups", "score": 0, "time_created": "2025-11-04 17:45:26", "time_modified": "2025-11-04 17:45:26", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Export a unique list of all the songs in my song and album library and all playlists in my Spotify account...", "when_to_use": "When aggregating data from multiple paginated API endpoints", "category": "success", "created_time": "2025-11-04 17:45:26", "modified_time": "2025-11-04 17:45:26", "generalized_query": "Compile comprehensive dataset from multiple paginated API resources", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "f26b9f209b0e46eeb820d49bf2b04904", "memory_type": "procedural", "when_to_use": "When creating files in protected storage systems with required authentication", "content": "Successfully handled file system authentication by first retrieving credentials via supervisor API, then using the obtained access token with file_system's create_file API. Constructed CSV content in memory by iterating through processed data, then performed atomic write with overwrite=True parameter. This ensures: 1) Secure credential handling 2) Data integrity through in-memory construction 3) Reliable storage with overwrite protection", "score": 0, "time_created": "2025-11-04 17:45:26", "time_modified": "2025-11-04 17:45:26", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Export... into \"~/backups/spotify_library.csv\" file in my file system", "when_to_use": "When creating files in protected storage systems with required authentication", "category": "success", "created_time": "2025-11-04 17:45:26", "modified_time": "2025-11-04 17:45:26", "generalized_query": "Generate and store structured data files in user file systems", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "887b5a65cc90428a833fa213f72fe51b", "memory_type": "procedural", "when_to_use": "When retrieving user data across multiple apps with paginated APIs and authentication requirements", "content": "The higher-scoring approach systematically validated API specifications before execution, implemented robust pagination loops for contact/message retrieval, and properly managed access tokens across app contexts. The lower-scoring approach repeatedly failed due to incorrect API parameter usage, failed to handle authentication tokens, and attempted non-existent API methods. The successful approach demonstrated: 1) Rigorous API spec validation before execution 2) Proper token management between app contexts 3) Pagination implementation for large datasets 4) Data parsing refinement to extract only required fields", "score": 0, "time_created": "2025-11-04 17:46:19", "time_modified": "2025-11-04 17:46:19", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Reply to Christopher with a list of comma-separated movie titles from my Simple Note account as per their request.", "when_to_use": "When retrieving user data across multiple apps with paginated APIs and authentication requirements", "category": "comparative", "created_time": "2025-11-04 17:46:19", "modified_time": "2025-11-04 17:46:19", "generalized_query": "Cross-app data retrieval with authentication and pagination handling", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "82ed2d3a8332414c88a3d9bc50383f08", "memory_type": "procedural", "when_to_use": "When dealing with nested data structures requiring content filtering", "content": "The higher-scoring approach implemented multi-stage filtering to extract only movie titles while excluding metadata (directors/genres). The lower approach included extraneous data in the final output. Key refinement strategies: 1) Initial regex-based title extraction 2) Multi-pass filtering to remove non-title entries 3) Header removal for clean output 4) Final formatting as comma-separated string. This systematic refinement ensured the output strictly met the task requirements.", "score": 0, "time_created": "2025-11-04 17:46:19", "time_modified": "2025-11-04 17:46:19", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Reply to Christopher with a list of comma-separated movie titles from my Simple Note account as per their request.", "when_to_use": "When dealing with nested data structures requiring content filtering", "category": "comparative", "created_time": "2025-11-04 17:46:19", "modified_time": "2025-11-04 17:46:19", "generalized_query": "Content filtering from structured text data", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "988dd378630d4dfd86ea7496987d4a9f", "memory_type": "procedural", "when_to_use": "When interacting with APIs that require precise authentication parameters and data extraction", "content": "The higher-scoring approach prioritized API specification validation before execution (e.g., confirming phone login requires phone number as username), implemented robust error handling for authentication failures, and used precise data extraction techniques (search_notes with tags/query filters). The lower-scoring approach made repeated authentication errors, included explanatory text in code blocks causing syntax failures, and used inefficient string parsing that retained metadata instead of clean titles.", "score": 0, "time_created": "2025-11-04 17:46:26", "time_modified": "2025-11-04 17:46:26", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Reply to Leslie with a list of comma-separated movie titles from my Simple Note account", "when_to_use": "When interacting with APIs that require precise authentication parameters and data extraction", "category": "comparative", "created_time": "2025-11-04 17:46:26", "modified_time": "2025-11-04 17:46:26", "generalized_query": "Retrieve and format specific data from a note-taking app via API for message response", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "f58ece6e05d84625aacd9c0cb2dadec4", "memory_type": "procedural", "when_to_use": "When accessing APIs to retrieve or manipulate data, especially when dealing with authentication, pagination, or data parsing", "content": "The higher-scoring approach systematically validated API specifications before execution, handled authentication errors by cross-referencing credentials, and implemented robust pagination for data retrieval. It also refined movie title extraction by filtering out metadata (directors/genres) and deduplicating entries. The lower-scoring approach failed due to unvalidated API calls (e.g., using non-existent `get_contact_information`), incorrect authentication (using email instead of phone number for login), and poor data parsing that included non-title text in the final list.", "score": 0, "time_created": "2025-11-04 17:46:38", "time_modified": "2025-11-04 17:46:38", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Laura has asked for my movie recommendations via phone text message. Reply to them with a list of comma-separated movie titles from my Simple Note account as per their request.", "when_to_use": "When accessing APIs to retrieve or manipulate data, especially when dealing with authentication, pagination, or data parsing", "category": "comparative", "created_time": "2025-11-04 17:46:38", "modified_time": "2025-11-04 17:46:38", "generalized_query": "Extract structured data from a note-taking app and send it via SMS using contact information from a phone app", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "4c083b514f584316af5428a52ffcf324", "memory_type": "procedural", "when_to_use": "When encountering repeated API authentication errors with no obvious resolution path", "content": "Implement exponential backoff/retry patterns for authentication attempts only if transient errors are suspected. For persistent 401 errors, prioritize escalating to user intervention or switching to alternative communication channels (e.g., email) instead of infinite retries.", "score": 0, "time_created": "2025-11-04 17:46:47", "time_modified": "2025-11-04 17:46:47", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Laura has asked for my movie recommendations via phone text message. Reply to them with a list of comma-separated movie titles from my Simple Note account as per their request.", "when_to_use": "When encountering repeated API authentication errors with no obvious resolution path", "category": "failure", "created_time": "2025-11-04 17:46:47", "modified_time": "2025-11-04 17:46:47", "generalized_query": "Handling persistent authentication failures in chained API workflows", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "2ca01a5043d043c29610f0aa54fc61d7", "memory_type": "procedural", "when_to_use": "When attempting to authenticate to an app with stored credentials and encountering 401 errors", "content": "Always verify credential validity before proceeding with API calls requiring authentication. When encountering 401 errors, prioritize credential refresh/retrieval rather than proceeding with assumptions about data relationships.", "score": 0, "time_created": "2025-11-04 17:46:35", "time_modified": "2025-11-04 17:46:35", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Add a comment, 'Thank you!', to all the venmo payments I received from my coworkers in the last 5 days (including today), and like those payments.", "when_to_use": "When attempting to authenticate to an app with stored credentials and encountering 401 errors", "category": "failure", "created_time": "2025-11-04 17:46:35", "modified_time": "2025-11-04 17:46:35", "generalized_query": "Interacting with app APIs requiring authentication when stored credentials may be invalid or expired", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "cb0e883be58a42c1a2b596658e02a2c1", "memory_type": "procedural", "when_to_use": "When debugging API parameter mismatches in transaction actions (e.g., commenting, liking)", "content": "Resolved a 422 validation error by cross-referencing API documentation (`create_transaction_comment`) and correcting the parameter name from `comment_text` to `comment`. This emphasizes the importance of validating API parameter names against specifications before execution, especially for less commonly used endpoints.", "score": 0, "time_created": "2025-11-04 17:46:40", "time_modified": "2025-11-04 17:46:40", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Add a comment, 'Thank you!', to all the venmo payments I received from my coworkers in the last 5 days (including today), and like those payments.", "when_to_use": "When debugging API parameter mismatches in transaction actions (e.g., commenting, liking)", "category": "success", "created_time": "2025-11-04 17:46:40", "modified_time": "2025-11-04 17:46:40", "generalized_query": "Execute transaction-level actions (comments, likes) on Venmo payments with precise parameter matching", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "545f2b1d600e4de9961dc75ca08c1c8d", "memory_type": "procedural", "when_to_use": "When filtering transactions based on sender relationships (e.g., 'friends') and requiring cross-app data validation (e.g., phone contacts)", "content": "The higher-scoring approach explicitly validated sender emails against phone app contacts marked as 'friend' in relationships, ensuring precision. It also handled API pagination for both Venmo transactions and phone contacts systematically. The lower-scoring approach incorrectly assumed all received payments were from friends, leading to potential over-commenting/liking. Key differentiators: 1) Cross-app validation of sender relationships 2) Rigorous date-range filtering with datetime parsing 3) Error handling for API authentication (phone app login with phone number vs. email)", "score": 0, "time_created": "2025-11-04 17:47:36", "time_modified": "2025-11-04 17:47:36", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Add a comment, 'Thanks!', to all the venmo payments I received from my friends in the last 7 days (including today), and like those payments.", "when_to_use": "When filtering transactions based on sender relationships (e.g., 'friends') and requiring cross-app data validation (e.g., phone contacts)", "category": "comparative", "created_time": "2025-11-04 17:47:36", "modified_time": "2025-11-04 17:47:36", "generalized_query": "Process financial transactions from verified relationships within a time window using multi-app API integration", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "929dba40901f4ffebae54638d22dc099", "memory_type": "procedural", "when_to_use": "When retrieving paginated data from an API to ensure completeness", "content": "The higher-scoring approach explicitly implemented pagination with a `while True` loop to fetch all recommendation pages, ensuring comprehensive data collection. The lower-scoring approach only retrieved a single page of recommendations, risking incomplete results. Proper pagination is critical when APIs return data in chunks.", "score": 0, "time_created": "2025-11-04 17:47:43", "time_modified": "2025-11-04 17:47:43", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Name the artist least recommended to me on Spotify.", "when_to_use": "When retrieving paginated data from an API to ensure completeness", "category": "comparative", "created_time": "2025-11-04 17:47:43", "modified_time": "2025-11-04 17:47:43", "generalized_query": "Identify the least frequently recommended entity (e.g., artist, song) from a paginated API response", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "b18c7dadd3c742b48995852837da1579", "memory_type": "procedural", "when_to_use": "When authenticating to access protected user data in API workflows", "content": "Used supervisor.show_account_passwords to securely retrieve credentials and spotify.login to obtain access token before making protected API calls. This pattern ensures secure credential handling while maintaining API workflow continuity.", "score": 0, "time_created": "2025-11-04 17:47:46", "time_modified": "2025-11-04 17:47:46", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Name the artist least recommended to me on Spotify.", "when_to_use": "When authenticating to access protected user data in API workflows", "category": "success", "created_time": "2025-11-04 17:47:46", "modified_time": "2025-11-04 17:47:46", "generalized_query": "Access user-specific data requiring authentication through password management APIs", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "3449231e0e9e4abdb8c5302d6d09ebe7", "memory_type": "procedural", "when_to_use": "When handling paginated or structured API responses", "content": "Implement defensive programming patterns: 1) Check for existence of nested keys before accessing them 2) Use explicit field path validation 3) Add fallback handling for unexpected structures 4) Log sample responses for structural analysis", "score": 0, "time_created": "2025-11-04 17:47:46", "time_modified": "2025-11-04 17:47:46", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Name the artist least recommended to me on Spotify.", "when_to_use": "When handling paginated or structured API responses", "category": "failure", "created_time": "2025-11-04 17:47:46", "modified_time": "2025-11-04 17:47:46", "generalized_query": "Processing paginated API results with potential nested data structures", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "6a5477c41fed4ced8c083484c11d0b62", "memory_type": "procedural", "when_to_use": "When retrieving personalized Spotify recommendations requires paginated API calls and artist frequency analysis", "content": "The successful approach involved: (1) Using show_recommendations API with pagination handling to collect full recommendation dataset (2) Aggregating artist metadata across all recommended songs (3) Implementing a frequency counter to determine the most commonly recommended artist. This works because Spotify's recommendation endpoint returns paginated results requiring iterative collection, and artist popularity within recommendations directly correlates with user preferences.", "score": 0, "time_created": "2025-11-04 17:47:57", "time_modified": "2025-11-04 17:47:57", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Name the artist most recommended to me on Spotify.", "when_to_use": "When retrieving personalized Spotify recommendations requires paginated API calls and artist frequency analysis", "category": "success", "created_time": "2025-11-04 17:47:57", "modified_time": "2025-11-04 17:47:57", "generalized_query": "Identify the most frequently recommended artist from a music streaming service's personalized recommendations", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "5fdbdd5d57394efeb38e65fc0548b08c", "memory_type": "procedural", "when_to_use": "When accessing account credentials for an app and encountering authentication failures", "content": "Always validate credentials before API calls and implement fallback mechanisms for credential recovery (e.g., password reset workflows). When resetting passwords, verify the delivery method (email/SMS) and check all potential storage locations (spam, archives, labels) for verification codes.", "score": 0, "time_created": "2025-11-04 17:47:51", "time_modified": "2025-11-04 17:47:51", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Add a comment, 'Thank you so much!', to all the venmo payments I received from my roommates in the last 10 days (including today), and like those payments.", "when_to_use": "When accessing account credentials for an app and encountering authentication failures", "category": "failure", "created_time": "2025-11-04 17:47:51", "modified_time": "2025-11-04 17:47:51", "generalized_query": "Accessing app credentials or performing actions requiring authentication when credentials are invalid or expired", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "b629ffe5dc2a4abfa3d1b8f6e2c5ae4a", "memory_type": "procedural", "when_to_use": "When parsing API responses with nested or unexpected data structures", "content": "Verify API response schema before extracting fields. Use defensive programming (e.g., .get() instead of [] access) and inspect raw response structures when encountering KeyErrors. For contact/email data, prioritize checking 'participants' lists over single 'sender' fields in thread-based APIs.", "score": 0, "time_created": "2025-11-04 17:47:51", "time_modified": "2025-11-04 17:47:51", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Add a comment, 'Thank you so much!', to all the venmo payments I received from my roommates in the last 10 days (including today), and like those payments.", "when_to_use": "When parsing API responses with nested or unexpected data structures", "category": "failure", "created_time": "2025-11-04 17:47:51", "modified_time": "2025-11-04 17:47:51", "generalized_query": "Extracting specific fields from complex API responses with nested dictionaries/lists", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "69a69f612a0347a986a5a582dadb093b", "memory_type": "procedural", "when_to_use": "When performing actions on multiple items (e.g., adding comments and likes) with strict API parameter requirements.", "content": "The agent iterated over filtered transactions and applied `create_transaction_comment` and `like_transaction` for each. Initial attempts failed due to incorrect parameter formatting (e.g., passing a dictionary instead of a string for the comment). The agent corrected this by aligning the `comment` parameter with the API's expected string type. This emphasizes the need to strictly follow API documentation and validate parameter types during implementation.", "score": 0, "time_created": "2025-11-04 17:48:01", "time_modified": "2025-11-04 17:48:01", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Add a comment, 'Thank you so much!', to all the venmo payments I received from my roommates in the last 10 days (including today), and like those payments.", "when_to_use": "When performing actions on multiple items (e.g., adding comments and likes) with strict API parameter requirements.", "category": "success", "created_time": "2025-11-04 17:48:01", "modified_time": "2025-11-04 17:48:01", "generalized_query": "Execute batch operations on API resources with strict parameter formatting requirements.", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "20fcd7902b5444788e64cbf202f2f69f", "memory_type": "procedural", "when_to_use": "When extracting recommendations for entities like artists from song-based recommendation APIs", "content": "Prioritize using artist-specific recommendation APIs if available. When only song recommendations are accessible, aggregate artist data by weighted scoring (e.g., song popularity) rather than raw frequency of appearances across songs.", "score": 0, "time_created": "2025-11-04 17:48:33", "time_modified": "2025-11-04 17:48:33", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Name the artist most recommended to me on Spotify.", "when_to_use": "When extracting recommendations for entities like artists from song-based recommendation APIs", "category": "failure", "created_time": "2025-11-04 17:48:33", "modified_time": "2025-11-04 17:48:33", "generalized_query": "Identify the most recommended entity (e.g., artist, genre) from a music streaming service using song-based recommendations.", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "0c329cd7c632426d984d25c5fc9304e5", "memory_type": "procedural", "when_to_use": "When secure credential retrieval is needed for API authentication", "content": "Properly used the supervisor app's 'show_account_passwords' to retrieve Spotify credentials securely instead of hardcoding or guessing. This ensures up-to-date, accurate credentials while maintaining separation between authentication and business logic.", "score": 0, "time_created": "2025-11-04 17:48:38", "time_modified": "2025-11-04 17:48:38", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Name the artist most recommended to me on Spotify.", "when_to_use": "When secure credential retrieval is needed for API authentication", "category": "success", "created_time": "2025-11-04 17:48:38", "modified_time": "2025-11-04 17:48:38", "generalized_query": "Access account credentials for third-party service authentication", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "235b9863b2c34d07b2e6366ce05bb328", "memory_type": "procedural", "when_to_use": "When needing to find the most recent item across multiple interconnected data sources (e.g., song, album, and playlist libraries) that require pagination", "content": "The successful approach involved: 1) Aggregating all song IDs from three distinct libraries (songs, albums, playlists) by paginating through each endpoint. 2) Using set operations to avoid duplicate song checks. 3) Iterating through all collected song IDs to compare release dates. This pattern works because it systematically captures all possible sources of songs while handling API pagination constraints, ensuring no data is missed.", "score": 0, "time_created": "2025-11-04 17:48:54", "time_modified": "2025-11-04 17:48:54", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "What is the title of the newest released song in my Spotify account from across my song, album and playlist libraries?", "when_to_use": "When needing to find the most recent item across multiple interconnected data sources (e.g., song, album, and playlist libraries) that require pagination", "category": "success", "created_time": "2025-11-04 17:48:54", "modified_time": "2025-11-04 17:48:54", "generalized_query": "Identify the most recently released item across multiple nested libraries (songs, albums, playlists) in a music streaming service", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "458a5965758c4953aa90417892e36178", "memory_type": "procedural", "when_to_use": "When comparing timestamps across different data structures", "content": "Using string-based date comparisons (e.g., max() on date strings) without proper datetime parsing can lead to incorrect ordering. Always convert date strings to datetime objects before comparison operations.", "score": 0, "time_created": "2025-11-04 17:48:57", "time_modified": "2025-11-04 17:48:57", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "What is the title of the newest released song in my Spotify account from across my song, album and playlist libraries?", "when_to_use": "When comparing timestamps across different data structures", "category": "failure", "created_time": "2025-11-04 17:48:57", "modified_time": "2025-11-04 17:48:57", "generalized_query": "Compare timestamps from heterogeneous data sources to determine chronological recency", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "8c75f9f3bd3b4c1b8240f939c21a2b69", "memory_type": "procedural", "when_to_use": "When extracting values from nested data structures", "content": "Assuming field names will be consistent across different API responses can cause errors. Always validate field names and structure against API documentation before extracting data.", "score": 0, "time_created": "2025-11-04 17:48:57", "time_modified": "2025-11-04 17:48:57", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "What is the title of the newest released song in my Spotify account from across my song, album and playlist libraries?", "when_to_use": "When extracting values from nested data structures", "category": "failure", "created_time": "2025-11-04 17:48:57", "modified_time": "2025-11-04 17:48:57", "generalized_query": "Extract specific fields from complex JSON structures representing media metadata", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "99f1bc5e1bb24eee9728257cf791dbe3", "memory_type": "procedural", "when_to_use": "When aggregating and processing data from multiple API sources with potential type inconsistencies", "content": "Always validate and sanitize aggregated identifiers before API calls. When combining data from different endpoints (songs, albums, playlists), explicitly filter non-integer values and deduplicate IDs to avoid validation errors in downstream operations.", "score": 0, "time_created": "2025-11-04 17:48:53", "time_modified": "2025-11-04 17:48:53", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "What is the title of the oldest released song in my Spotify account from across my song, album and playlist libraries?", "when_to_use": "When aggregating and processing data from multiple API sources with potential type inconsistencies", "category": "failure", "created_time": "2025-11-04 17:48:53", "modified_time": "2025-11-04 17:48:53", "generalized_query": "Retrieving and analyzing media items across multiple library types with heterogeneous data sources", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "5fff04ad767a4d59868824adb7617b3a", "memory_type": "procedural", "when_to_use": "When working with APIs that require access tokens for protected endpoints", "content": "Properly chained authentication flow: retrieved credentials from supervisor API → used them to obtain access token via login API → passed token in all subsequent API requests. This established secure context for accessing private user libraries while following the platform's authentication requirements.", "score": 0, "time_created": "2025-11-04 17:48:54", "time_modified": "2025-11-04 17:48:54", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "What is the title of the oldest released song in my Spotify account from across my song, album and playlist libraries?", "when_to_use": "When working with APIs that require access tokens for protected endpoints", "category": "success", "created_time": "2025-11-04 17:48:54", "modified_time": "2025-11-04 17:48:54", "generalized_query": "Access protected user data through authentication APIs before querying resource APIs", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "d31c8c47ef354ae39c70b02b762a48e5", "memory_type": "procedural", "when_to_use": "When retrieving song data from multiple nested sources (e.g., song libraries, albums, playlists) requiring cross-referencing of metadata like release dates", "content": "Higher-scoring approach systematically: (1) Aggregated songs from all three distinct library types using correct APIs (show_song_library, show_album, show_playlist), (2) Properly retrieved nested song data from albums/playlists via dedicated endpoints, (3) Used explicit release_date field from song metadata rather than approximating with created_at timestamps. Lower-scoring approach incorrectly treated albums/playlists as songs and misused creation dates instead of actual song release dates.", "score": 0, "time_created": "2025-11-04 17:48:54", "time_modified": "2025-11-04 17:48:54", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "What is the title of the oldest released song in my Spotify account from across my song, album and playlist libraries?", "when_to_use": "When retrieving song data from multiple nested sources (e.g., song libraries, albums, playlists) requiring cross-referencing of metadata like release dates", "category": "comparative", "created_time": "2025-11-04 17:48:54", "modified_time": "2025-11-04 17:48:54", "generalized_query": "Identify the earliest released media item across nested library structures with paginated APIs", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "b95647e9b7cb43b899cf89a8a2ac8c1b", "memory_type": "procedural", "when_to_use": "When combining data from multiple sources for comparison", "content": "Always verify that all data sources contribute comparable fields. When merging datasets, implement explicit null-checking and type-validation to avoid comparing incomplete or mismatched data. Process each data source separately before aggregation.", "score": 0, "time_created": "2025-11-04 17:49:05", "time_modified": "2025-11-04 17:49:05", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "What is the title of the oldest released song in my Spotify account from across my song, album and playlist libraries?", "when_to_use": "When combining data from multiple sources for comparison", "category": "failure", "created_time": "2025-11-04 17:49:05", "modified_time": "2025-11-04 17:49:05", "generalized_query": "Aggregate and compare data from heterogeneous sources to find maximum/minimum values", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "c83b857b8c614859811d78e6959ecc9e", "memory_type": "procedural", "when_to_use": "When interacting with APIs that require authentication and pagination", "content": "The higher-scoring approach systematically checked API specifications, implemented proper authentication flow, and handled pagination with a while loop. This ensured complete data retrieval (23 playlists) without redundant calls. The lower-scoring approach would have failed to handle pagination and authentication edge cases.", "score": 0, "time_created": "2025-11-04 17:49:42", "time_modified": "2025-11-04 17:49:42", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "How many playlists do I have in Spotify?", "when_to_use": "When interacting with APIs that require authentication and pagination", "category": "comparative", "created_time": "2025-11-04 17:49:42", "modified_time": "2025-11-04 17:49:42", "generalized_query": "Retrieving paginated data from an authenticated API", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "fe5870b2bcb14675bfc09b2915cf21ce", "memory_type": "procedural", "when_to_use": "When creating payment requests requiring user email lookup", "content": "The higher-scoring approach correctly implemented a search_users step to validate Venmo emails before creating requests. The lower-scoring approach attempted invalid email formatting and failed to implement proper user lookup, leading to validation errors. This demonstrates the importance of API-compliant user verification before transaction creation.", "score": 0, "time_created": "2025-11-04 17:49:42", "time_modified": "2025-11-04 17:49:42", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Make payment requests for others with a description note 'Work Dinner'", "when_to_use": "When creating payment requests requiring user email lookup", "category": "comparative", "created_time": "2025-11-04 17:49:42", "modified_time": "2025-11-04 17:49:42", "generalized_query": "Cross-referencing contact information with financial transaction systems", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "24a09a389f0f4af79f5f0953f77781df", "memory_type": "procedural", "when_to_use": "When handling multi-step authentication and API integration for task automation", "content": "The higher-scoring approach demonstrated superior error handling by: 1) Validating API availability before execution (show_api_doc checks), 2) Correctly handling authentication failures by switching from email to phone number login, 3) Systematically parsing note content with precise string manipulation, and 4) Using the correct create_payment_request API instead of assuming APIs existed. The lower-scoring solution failed due to: 1) Assuming non-existent APIs (get_note_by_title), 2) Repeated authentication failures from incorrect credentials, 3) Failing to extract contact IDs properly, and 4) Attempting to reset passwords without completing the flow.", "score": 0, "time_created": "2025-11-04 17:49:47", "time_modified": "2025-11-04 17:49:47", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Make payment requests for others with a description note 'Friends Dinner'", "when_to_use": "When handling multi-step authentication and API integration for task automation", "category": "comparative", "created_time": "2025-11-04 17:49:47", "modified_time": "2025-11-04 17:49:47", "generalized_query": "Automating payment requests using contact and financial data from multiple apps", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "64b1eebe86f44fa087d66927ef0d5b39", "memory_type": "procedural", "when_to_use": "When handling authentication errors across apps", "content": "Systematically validate credential retrieval from supervisor.show_account_passwords before login attempts, and implement fallback strategies like password reset workflows when invalid credentials are detected", "score": 0, "time_created": "2025-11-04 17:49:53", "time_modified": "2025-11-04 17:49:53", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "I went on a dinner with some of my friends yesterday... Make payment requests for others...", "when_to_use": "When handling authentication errors across apps", "category": "failure", "created_time": "2025-11-04 17:49:53", "modified_time": "2025-11-04 17:49:53", "generalized_query": "Resolve authentication failures when accessing account-sensitive APIs", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "25c8acaa481a49078007c61224ccd679", "memory_type": "procedural", "when_to_use": "When interacting with APIs that require precise parameter formatting (e.g., email filtering in Venmo transactions)", "content": "The higher-scoring approach systematically validated API constraints (e.g., `user_email` must be a single email address, not a list), implemented pagination correctly, and handled authentication flows methodically. The lower-scoring approach failed due to invalid parameter formats (e.g., comma-separated emails), improper error handling, and incomplete API specification checks.", "score": 0, "time_created": "2025-11-04 17:50:02", "time_modified": "2025-11-04 17:50:02", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "How much money have I sent to my roommates on venmo since 1st Jan of this year?", "when_to_use": "When interacting with APIs that require precise parameter formatting (e.g., email filtering in Venmo transactions)", "category": "comparative", "created_time": "2025-11-04 17:50:02", "modified_time": "2025-11-04 17:50:02", "generalized_query": "Calculating monetary transfers to specific contacts via a social payment app within a date range", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "bca5480818e74dc6b689e4a4630d24d8", "memory_type": "procedural", "when_to_use": "When integrating with payment APIs like Venmo and encountering validation errors during payment request creation", "content": "The higher-scoring approach systematically validated API parameters through documentation checks (apis.api_docs.show_api_doc) before implementation, ensuring alignment with required fields like 'user_email' and proper amount formatting. It also implemented explicit error handling for missing contacts and API parameter mismatches, whereas the lower-scoring approach repeatedly failed due to incorrect parameter assumptions (e.g., using 'to_user_id' instead of 'user_email') and unhandled validation constraints.", "score": 0, "time_created": "2025-11-04 17:49:58", "time_modified": "2025-11-04 17:49:58", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Make payment requests for others with a description note 'Dinner with Colleagues'", "when_to_use": "When integrating with payment APIs like Venmo and encountering validation errors during payment request creation", "category": "comparative", "created_time": "2025-11-04 17:49:58", "modified_time": "2025-11-04 17:49:58", "generalized_query": "Send payment requests via third-party API with dynamic user identification and amount calculation", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "e79a5b93c1bd46c48811128045256b5c", "memory_type": "procedural", "when_to_use": "When parsing structured data from notes for financial reconciliation", "content": "The higher-scoring approach used precise string parsing with clear header skipping (lines[1:]) and explicit currency formatting (strip().replace('$','')), while the lower-scoring approach required multiple cleanup steps (name.lstrip('- ').strip()) due to initial parsing errors. The higher approach also maintained data type integrity by converting to float immediately, preventing downstream validation issues seen in the lower approach.", "score": 0, "time_created": "2025-11-04 17:49:58", "time_modified": "2025-11-04 17:49:58", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "I've made a note of individual shares in simple note", "when_to_use": "When parsing structured data from notes for financial reconciliation", "category": "comparative", "created_time": "2025-11-04 17:49:58", "modified_time": "2025-11-04 17:49:58", "generalized_query": "Extract numerical values from semi-structured text notes for automated financial processing", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "8421a4a1bb4e46ea991a35427cd7f70f", "memory_type": "procedural", "when_to_use": "When retrieving account credentials from the supervisor app before using them in API calls", "content": "Always fetch account credentials (e.g., passwords) from the supervisor app before attempting to use them in API calls. Failing to initialize credential variables first will result in runtime errors.", "score": 0, "time_created": "2025-11-04 17:50:53", "time_modified": "2025-11-04 17:50:53", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "How much money have I received to my coworkers on venmo since 1st Feb of this year?", "when_to_use": "When retrieving account credentials from the supervisor app before using them in API calls", "category": "failure", "created_time": "2025-11-04 17:50:53", "modified_time": "2025-11-04 17:50:53", "generalized_query": "Retrieving account-specific credentials for API authentication", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "d27ca8a1cc0f449a9fa1d2b53a75b93b", "memory_type": "procedural", "when_to_use": "When querying paginated transaction data with date filters", "content": "Implement robust pagination loops with explicit termination conditions (e.g., empty page responses) and validate date filters match API parameter requirements (YYYY-MM-DD format). Always verify the total by inspecting raw paginated responses for consistency.", "score": 0, "time_created": "2025-11-04 17:50:53", "time_modified": "2025-11-04 17:50:53", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "How much money have I received to my coworkers on venmo since 1st Feb of this year?", "when_to_use": "When querying paginated transaction data with date filters", "category": "failure", "created_time": "2025-11-04 17:50:53", "modified_time": "2025-11-04 17:50:53", "generalized_query": "Aggregating financial data from paginated API responses", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "8157d1ec485d47b19a154115d1ae9f6e", "memory_type": "procedural", "when_to_use": "When accessing an app requires login credentials that may be outdated or incorrect", "content": "Always validate stored credentials before proceeding with dependent operations. Implement fallback mechanisms (e.g., manual input, credential refresh workflows) when automated retrieval fails.", "score": 0, "time_created": "2025-11-04 17:50:59", "time_modified": "2025-11-04 17:50:59", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "How much money have I sent or received to my roommates on venmo since 1st Mar of this year?", "when_to_use": "When accessing an app requires login credentials that may be outdated or incorrect", "category": "failure", "created_time": "2025-11-04 17:50:59", "modified_time": "2025-11-04 17:50:59", "generalized_query": "Tasks requiring access to app data via stored credentials with potential validity issues", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "ddeeed0a8cef4748858101fd2e352e90", "memory_type": "procedural", "when_to_use": "When filtering transaction data based on dynamic criteria", "content": "Validate date formatting (YYYY-MM-DDTHH:MM:SS) and implement dual-direction relationship checks (sender/receiver) to ensure complete dataset coverage.", "score": 0, "time_created": "2025-11-04 17:50:59", "time_modified": "2025-11-04 17:50:59", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "How much money have I sent or received to my roommates on venmo since 1st Mar of this year?", "when_to_use": "When filtering transaction data based on dynamic criteria", "category": "failure", "created_time": "2025-11-04 17:50:59", "modified_time": "2025-11-04 17:50:59", "generalized_query": "Tasks requiring temporal and relational filtering of transactional datasets", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "0c5142fd9ea740378b0f8f7481de4701", "memory_type": "procedural", "when_to_use": "When retrieving paginated data from APIs that require full dataset aggregation", "content": "The higher-scoring approach systematically handled pagination by looping until empty results, while the lower-scoring approach truncated results by using a fixed page limit. The higher approach also correctly parsed song genres from API responses, whereas the lower approach attempted invalid field access ('genres' instead of 'genre') and failed to handle singular vs plural field names. Proper API documentation review before implementation was critical for success.", "score": 0, "time_created": "2025-11-04 17:51:04", "time_modified": "2025-11-04 17:51:04", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Follow all artists of all classical-genre songs in any of my playlists on Spotify.", "when_to_use": "When retrieving paginated data from APIs that require full dataset aggregation", "category": "comparative", "created_time": "2025-11-04 17:51:04", "modified_time": "2025-11-04 17:51:04", "generalized_query": "Process paginated API results to extract nested data matching specific criteria", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "2d7b8f33c4054921a5077b21c38b9490", "memory_type": "procedural", "when_to_use": "When interacting with APIs requiring authentication tokens and parameter validation", "content": "The agent explicitly passed the `access_token` obtained during login to subsequent API calls, ensuring authorized access. This aligns with REST API best practices and avoids authentication errors. Additionally, inspecting API specs (e.g., `show_api_doc`) before execution ensured correct parameter usage.", "score": 0, "time_created": "2025-11-04 17:51:21", "time_modified": "2025-11-04 17:51:21", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Follow all artists of all classical-genre songs in any of my playlists on Spotify", "when_to_use": "When interacting with APIs requiring authentication tokens and parameter validation", "category": "success", "created_time": "2025-11-04 17:51:21", "modified_time": "2025-11-04 17:51:21", "generalized_query": "Execute API calls requiring access tokens and dynamic parameter injection", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "5e7d2e903c2d408880a7217432112c7f", "memory_type": "procedural", "when_to_use": "When extracting genre-based metadata from music streaming APIs with paginated responses", "content": "The higher-scoring approach systematically validated API schema details (step 13-14) before processing songs, discovering the API returns 'genre' as a string rather than a list. This allowed precise filtering using case-insensitive matching (step 15). The lower-scoring approach incorrectly assumed 'genres' was a list field, leading to zero matches before premature termination.", "score": 0, "time_created": "2025-11-04 17:51:21", "time_modified": "2025-11-04 17:51:21", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Follow all artists of all reggae-genre songs in any of my playlists on Spotify", "when_to_use": "When extracting genre-based metadata from music streaming APIs with paginated responses", "category": "comparative", "created_time": "2025-11-04 17:51:21", "modified_time": "2025-11-04 17:51:21", "generalized_query": "Extract and process genre-specific metadata from paginated music libraries", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "bd86a53ff78b4342a4701d73cdbc9193", "memory_type": "procedural", "when_to_use": "When accessing nested or ambiguous API fields that may change structure", "content": "The higher-scoring approach demonstrated superior error resilience by: (1) Proactively verifying API response structure after failure using `show_api_doc`, (2) Correctly identifying singular 'genre' field vs. plural 'genres' list, and (3) Implementing defensive checks with `.get()` to prevent KeyErrors. The lower-scoring approach failed to adapt after initial failure and continued with invalid field assumptions.", "score": 0, "time_created": "2025-11-04 17:51:40", "time_modified": "2025-11-04 17:51:40", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Follow all artists of all indie-genre songs in any of my playlists on Spotify", "when_to_use": "When accessing nested or ambiguous API fields that may change structure", "category": "comparative", "created_time": "2025-11-04 17:51:40", "modified_time": "2025-11-04 17:51:40", "generalized_query": "Extract specific metadata (e.g., genre) from music catalog items via paginated API endpoints", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "945affd8766f4b2b99884d1d4ab2cfb9", "memory_type": "procedural", "when_to_use": "When performing bulk operations on unique entities across multiple API endpoints", "content": "Used set operations to collect unique artist IDs across multiple songs, then executed atomic follow operations with clear success verification. This approach minimized redundant API calls and ensured idempotent operations through deduplication, with explicit success confirmation for each action.", "score": 0, "time_created": "2025-11-04 17:51:44", "time_modified": "2025-11-04 17:51:44", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Follow all artists of all indie-genre songs in any of my playlists on Spotify.", "when_to_use": "When performing bulk operations on unique entities across multiple API endpoints", "category": "success", "created_time": "2025-11-04 17:51:44", "modified_time": "2025-11-04 17:51:44", "generalized_query": "Execute bulk actions on deduplicated entities derived from multiple data sources", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "7f3ed4e4228e494794ef9dd6a88e0078", "memory_type": "procedural", "when_to_use": "When processing structured text files with variable formatting to extract numerical values", "content": "Successfully implemented adaptive content parsing by first attempting direct string splitting, then debugging file content structure, and finally implementing line-by-line pattern matching. The solution first filtered files using directory_path='~/bills/electricity' and year-based substring filtering, then handled parsing errors by inspecting actual file content format and adjusting extraction logic to match 'Total Amount => $X.XX' pattern. This demonstrates the importance of combining file system navigation with flexible text parsing strategies.", "score": 0, "time_created": "2025-11-04 17:51:55", "time_modified": "2025-11-04 17:51:55", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "What is the total cost of my electricity bills for this year? The bills are in \"~/bills/\" directory of my file system.", "when_to_use": "When processing structured text files with variable formatting to extract numerical values", "category": "success", "created_time": "2025-11-04 17:51:55", "modified_time": "2025-11-04 17:51:55", "generalized_query": "Calculate aggregated financial metric from text-based invoices/bills stored in a directory", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "29b82702b02f4711b73ff6bd68ba547b", "memory_type": "procedural", "when_to_use": "When working with API responses that return nested data structures", "content": "Always explicitly extract the content field from API responses using .get() method when dealing with nested structures to avoid type errors.", "score": 0, "time_created": "2025-11-04 17:51:56", "time_modified": "2025-11-04 17:51:56", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "What is the total cost of my electricity bills for this year? The bills are in \"~/bills/\" directory of my file system.", "when_to_use": "When working with API responses that return nested data structures", "category": "failure", "created_time": "2025-11-04 17:51:56", "modified_time": "2025-11-04 17:51:56", "generalized_query": "Extracting specific fields from API response dictionaries", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "a22dc069efb14c888118aa21a8768685", "memory_type": "procedural", "when_to_use": "When extracting structured data from unstructured text files with unknown formats", "content": "The higher-scoring approach demonstrated superior effectiveness by: (1) inspecting sample file content to discover the exact 'Total Amount => $72' format, (2) implementing precise string parsing with regex-like logic ('split('=>')' and '$' removal), and (3) filtering files by both '.txt' extension AND '2023-' prefix in filenames. The lower-scoring approach failed because it relied on generic keywords ('Total Cost'/'Amount Due') without validating actual file formats first.", "score": 0, "time_created": "2025-11-04 17:52:08", "time_modified": "2025-11-04 17:52:08", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "What is the total cost of my internet bills for this year? The bills are in \"~/bills/\" directory of my file system.", "when_to_use": "When extracting structured data from unstructured text files with unknown formats", "category": "comparative", "created_time": "2025-11-04 17:52:08", "modified_time": "2025-11-04 17:52:08", "generalized_query": "Extract numeric values from text files with inconsistent formatting patterns", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "40fec46fe9f4416db723c6339098ceba", "memory_type": "procedural", "when_to_use": "When calling APIs that require specific parameter names, especially after initial use", "content": "Always verify API parameter names against documentation before execution, especially when similar parameters exist (e.g., 'directory_path' vs 'file_path'). Parameter name mismatches will cause validation errors.", "score": 0, "time_created": "2025-11-04 17:52:27", "time_modified": "2025-11-04 17:52:27", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "What is the total cost of my cable bills for this year? The bills are in \"~/bills/\" directory of my file system.", "when_to_use": "When calling APIs that require specific parameter names, especially after initial use", "category": "failure", "created_time": "2025-11-04 17:52:27", "modified_time": "2025-11-04 17:52:27", "generalized_query": "Extracting financial data from files in a specific directory using an API", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "d3af3175d8504e19836607624781403d", "memory_type": "procedural", "when_to_use": "When parsing structured data from text files", "content": "Implement defensive parsing with explicit validation (e.g., 'Cable Bill' check) to avoid incorrect data inclusion. Use string splitting with fallback mechanisms for inconsistent formats.", "score": 0, "time_created": "2025-11-04 17:52:27", "time_modified": "2025-11-04 17:52:27", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "What is the total cost of my cable bills for this year? The bills are in \"~/bills/\" directory of my file system.", "when_to_use": "When parsing structured data from text files", "category": "failure", "created_time": "2025-11-04 17:52:27", "modified_time": "2025-11-04 17:52:27", "generalized_query": "Extracting numerical values from semi-structured text content", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "ecd487b51bcc41ff9b895c8136144fc3", "memory_type": "procedural", "when_to_use": "When handling API responses with nested authentication requirements", "content": "Demonstrated effective authentication workflow: (1) Retrieve stored credentials via supervisor.show_account_passwords, (2) Use credentials to obtain access_token via app-specific login API, (3) Propagate access_token to subsequent API calls. This pattern ensures secure credential handling while maintaining session validity across operations.", "score": 0, "time_created": "2025-11-04 17:52:35", "time_modified": "2025-11-04 17:52:35", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "What is the total cost of my cable bills for this year? The bills are in \"~/bills/\" directory of my file system.", "when_to_use": "When handling API responses with nested authentication requirements", "category": "success", "created_time": "2025-11-04 17:52:35", "modified_time": "2025-11-04 17:52:35", "generalized_query": "Access protected file systems requiring multi-stage authentication", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "da6ffe3f7e81419692653a29d6d564e3", "memory_type": "procedural", "when_to_use": "When interacting with APIs requiring authentication tokens and specific parameter names", "content": "Always validate API parameter names and required fields against API documentation before execution. Authentication tokens must be explicitly included in every API call that requires authorization.", "score": 0, "time_created": "2025-11-04 17:52:45", "time_modified": "2025-11-04 17:52:45", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Arrange my '~/photographs/vacations/' directory by organizing the photos from three vacations...", "when_to_use": "When interacting with APIs requiring authentication tokens and specific parameter names", "category": "failure", "created_time": "2025-11-04 17:52:45", "modified_time": "2025-11-04 17:52:45", "generalized_query": "Organize files in a directory based on metadata using API interactions", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "eec7088106a244a2a4a16431a42b2e76", "memory_type": "procedural", "when_to_use": "When grouping files by temporal metadata (e.g., creation date) and relocating them to categorized subdirectories.", "content": "1. **Extract metadata programmatically**: Use `file_system.show_file()` to retrieve creation timestamps for all files. 2. **Group files logically**: Parse timestamps into a consistent format (e.g., `YYYY-MM`) and map them to predefined categories (e.g., February → Petra, March → Budapest). 3. **Ensure directory existence**: Check for target subdirectories using `directory_exists()` and create them conditionally with `create_directory()`. 4. **Use precise API parameters**: Correctly reference `source_file_path` and `destination_file_path` in `move_file()` to avoid validation failures.", "score": 0, "time_created": "2025-11-04 17:52:51", "time_modified": "2025-11-04 17:52:51", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Arrange my \"~/photographs/vacations/\" directory by organizing the photos from three vacations...", "when_to_use": "When grouping files by temporal metadata (e.g., creation date) and relocating them to categorized subdirectories.", "category": "success", "created_time": "2025-11-04 17:52:51", "modified_time": "2025-11-04 17:52:51", "generalized_query": "Classify and relocate files into subdirectories based on timestamp patterns (e.g., month/year).", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "66b27c5547cb4274848f0d68d5c9a56b", "memory_type": "procedural", "when_to_use": "When interacting with paginated APIs requiring authentication tokens", "content": "The higher-scoring approach systematically handled API authentication, verified parameters via API docs, and implemented pagination loops to ensure complete data retrieval. It explicitly passed access tokens in every API call and validated API responses to avoid errors. The lower-scoring approach failed due to missing authentication parameters, incorrect API method usage, and incomplete filtering logic that returned empty results.", "score": 0, "time_created": "2025-11-04 17:52:50", "time_modified": "2025-11-04 17:52:50", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Arrange my \"~/photographs/vacations/\" directory by organizing the photos from three vacations.", "when_to_use": "When interacting with paginated APIs requiring authentication tokens", "category": "comparative", "created_time": "2025-11-04 17:52:50", "modified_time": "2025-11-04 17:52:50", "generalized_query": "Organize files in a directory based on metadata using paginated API calls with authentication", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "8f0834f6412747d99dda9729cb7cf163", "memory_type": "procedural", "when_to_use": "When filtering directory contents by path", "content": "Use exact path matching with directory listing APIs instead of relying on list comprehensions that may fail due to path formatting inconsistencies. Verify directory contents exist before applying filters.", "score": 0, "time_created": "2025-11-04 17:53:09", "time_modified": "2025-11-04 17:53:09", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Arrange my '~/photographs/vacations/' directory by organizing the photos from three vacations...", "when_to_use": "When filtering directory contents by path", "category": "failure", "created_time": "2025-11-04 17:53:09", "modified_time": "2025-11-04 17:53:09", "generalized_query": "Filtering files in a directory based on specific path patterns", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "374263a7f7dd453cb8da424b0101530d", "memory_type": "procedural", "when_to_use": "When encountering validation errors in API calls due to parameter naming mismatches", "content": "After receiving a 422 validation error indicating required parameters were missing, the agent successfully resolved the issue by consulting API documentation and adjusting parameter names from 'file_path' and 'destination_path' to the required 'source_file_path' and 'destination_file_path'. This demonstrates the importance of checking API specifications when encountering validation errors rather than making assumptions about parameter naming conventions.", "score": 0, "time_created": "2025-11-04 17:53:11", "time_modified": "2025-11-04 17:53:11", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Arrange my \"~/photographs/vacations/\" directory by organizing the photos from three vacations...", "when_to_use": "When encountering validation errors in API calls due to parameter naming mismatches", "category": "success", "created_time": "2025-11-04 17:53:11", "modified_time": "2025-11-04 17:53:11", "generalized_query": "Troubleshoot API validation errors caused by incorrect parameter naming", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "63ae720678b1448e98471d50070b0894", "memory_type": "procedural", "when_to_use": "When interacting with APIs requiring authentication tokens", "content": "Always explicitly include the access_token parameter in API calls after authentication. Re-authenticate if tokens expire during long workflows.", "score": 0, "time_created": "2025-11-04 17:53:12", "time_modified": "2025-11-04 17:53:12", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Arrange my '~/photographs/vacations/' directory by organizing the photos from three vacations...", "when_to_use": "When interacting with APIs requiring authentication tokens", "category": "failure", "created_time": "2025-11-04 17:53:12", "modified_time": "2025-11-04 17:53:12", "generalized_query": "Organize files in a directory based on metadata (e.g., creation date)", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "3b866efb22b94612a51e5a3c26b9531b", "memory_type": "procedural", "when_to_use": "When handling file/directory operations with potential naming conflicts", "content": "Set overwrite=True in move/copy operations when destination files might already exist. Validate source/destination paths to avoid double slashes or invalid characters.", "score": 0, "time_created": "2025-11-04 17:53:12", "time_modified": "2025-11-04 17:53:12", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Arrange my '~/photographs/vacations/' directory by organizing the photos from three vacations...", "when_to_use": "When handling file/directory operations with potential naming conflicts", "category": "failure", "created_time": "2025-11-04 17:53:12", "modified_time": "2025-11-04 17:53:12", "generalized_query": "Move files between directories with possible duplicate filenames", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "2ba625bf62064b2f82ca204d9c38c153", "memory_type": "procedural", "when_to_use": "When dealing with paginated API responses or iterative file operations requiring incremental validation", "content": "The higher-scoring approach for the Spotify task used a robust pagination loop (`while page_index < 10`) with explicit checks for empty responses, ensuring all data was fetched before finalizing the result. In contrast, the lower-scoring approach for the file-organization task initially processed unfiltered directory listings, leading to redundant API calls and errors. Incremental validation (e.g., verifying directory existence before creating it) and stepwise execution (e.g., isolating directory creation before file movement) in the higher-scoring approach reduced cascading failures.", "score": 0, "time_created": "2025-11-04 17:53:21", "time_modified": "2025-11-04 17:53:21", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "How many playlists do I have in Spotify?", "when_to_use": "When dealing with paginated API responses or iterative file operations requiring incremental validation", "category": "comparative", "created_time": "2025-11-04 17:53:21", "modified_time": "2025-11-04 17:53:21", "generalized_query": "Retrieve a complete dataset from a paginated API and perform post-processing (e.g., counting items).", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "5570c2d851ac4a54baeac6602458fa12", "memory_type": "procedural", "when_to_use": "When handling API data with potential missing or inconsistent fields", "content": "The agent successfully handled missing `album_id` fields in song library entries by implementing a validation check (`if album_id is None: continue`) before attempting to fetch album details. This prevented API errors and ensured robust data processing. The solution demonstrates the importance of defensive programming when working with external APIs where data completeness cannot be guaranteed.", "score": 0, "time_created": "2025-11-04 17:53:39", "time_modified": "2025-11-04 17:53:39", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Remove all songs from my Spotify song library and playlists that were released before 2021 year.", "when_to_use": "When handling API data with potential missing or inconsistent fields", "category": "success", "created_time": "2025-11-04 17:53:39", "modified_time": "2025-11-04 17:53:39", "generalized_query": "Remove media items from a user's library/playlists based on metadata criteria (e.g., release date)", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "6f9459ead82049c6835fe94c8ca348b8", "memory_type": "procedural", "when_to_use": "When processing paginated API responses for bulk operations", "content": "The agent implemented a pagination loop (`while True` with `page_index` increment) to collect all relevant items across pages before performing batch deletions. This approach ensured completeness while respecting API rate limits and page size constraints. The pattern of first gathering all IDs to remove and then executing deletions in a separate loop minimized API calls and transaction costs.", "score": 0, "time_created": "2025-11-04 17:53:39", "time_modified": "2025-11-04 17:53:39", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Remove all songs from my Spotify song library and playlists that were released before 2021 year.", "when_to_use": "When processing paginated API responses for bulk operations", "category": "success", "created_time": "2025-11-04 17:53:39", "modified_time": "2025-11-04 17:53:39", "generalized_query": "Iterate through paginated results to perform bulk modifications on user libraries/collections", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "e0a553dd05084e8bb534fa633a8b8931", "memory_type": "procedural", "when_to_use": "When working with time-sensitive filters (e.g., release year thresholds)", "content": "Always explicitly validate date parsing logic (e.g., 'release_date' field format) against API documentation to avoid misinterpretation of temporal thresholds like 'before 2021'.", "score": 0, "time_created": "2025-11-04 17:53:50", "time_modified": "2025-11-04 17:53:50", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Remove all songs from my Spotify song library and playlists that were released before 2021 year.", "when_to_use": "When working with time-sensitive filters (e.g., release year thresholds)", "category": "failure", "created_time": "2025-11-04 17:53:50", "modified_time": "2025-11-04 17:53:50", "generalized_query": "Ensure temporal data parsing aligns with API response formats when applying date-based filters.", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "06bb464956454d03be67f6b74597d1cc", "memory_type": "procedural", "when_to_use": "When working with APIs that return paginated data or require metadata not directly available in initial responses", "content": "Always validate the availability of required metadata fields (e.g., 'added_at', 'release_year') in API responses before implementing filtering logic. When critical metadata is missing, consider alternative approaches like cross-referencing with other APIs or endpoints that might expose the required information.", "score": 0, "time_created": "2025-11-04 17:53:50", "time_modified": "2025-11-04 17:53:50", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Remove all songs from my Spotify song library and playlists that were released after 2021 year.", "when_to_use": "When working with APIs that return paginated data or require metadata not directly available in initial responses", "category": "failure", "created_time": "2025-11-04 17:53:50", "modified_time": "2025-11-04 17:53:50", "generalized_query": "Filter media items based on metadata fields that may not be directly available in standard API responses", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "16bc8748be8f43a4836c6a2a4fd19385", "memory_type": "procedural", "when_to_use": "When encountering TypeErrors related to missing or unexpected fields in API response structures", "content": "Implement defensive programming patterns: 1) Inspect API response structures before accessing nested fields 2) Use .get() with default values for optional fields 3) Add explicit null checks for critical path dependencies. This prevents cascading failures when API schemas change or fields are missing.", "score": 0, "time_created": "2025-11-04 17:53:50", "time_modified": "2025-11-04 17:53:50", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Remove all songs from my Spotify song library and playlists that were released after 2021 year.", "when_to_use": "When encountering TypeErrors related to missing or unexpected fields in API response structures", "category": "failure", "created_time": "2025-11-04 17:53:50", "modified_time": "2025-11-04 17:53:50", "generalized_query": "Debugging API response structures when field access fails", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "f9c6ab42faa84185844d4cbeb0692a22", "memory_type": "procedural", "when_to_use": "When dealing with nested collection modifications requiring item validation", "content": "Implemented try-except blocks during removal operations to handle 'song not found' errors gracefully. This pattern prevented execution failures when songs were already removed or never existed in target playlists, maintaining process continuity while logging error details for debugging.", "score": 0, "time_created": "2025-11-04 17:53:57", "time_modified": "2025-11-04 17:53:57", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Remove all songs from my Spotify song library and playlists that were released after 2021 year.", "when_to_use": "When dealing with nested collection modifications requiring item validation", "category": "success", "created_time": "2025-11-04 17:53:57", "modified_time": "2025-11-04 17:53:57", "generalized_query": "Modify items in nested collections while validating existence", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "0e12490ad52344ef92949527b2674588", "memory_type": "procedural", "when_to_use": "When handling API authentication tokens with limited lifespans during multi-step operations", "content": "The higher-scoring approach proactively re-authenticated once when the token expired, then used the new token consistently for all subsequent operations. The lower-scoring approach repeatedly attempted operations with expired tokens (10+ failed attempts) without resolving the authentication issue, wasting resources and failing to complete the task. Effective token management and single re-authentication point proved significantly more efficient.", "score": 0, "time_created": "2025-11-04 17:54:06", "time_modified": "2025-11-04 17:54:06", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Remove all songs from my Spotify song library and playlists that were released in or before 2021 year.", "when_to_use": "When handling API authentication tokens with limited lifespans during multi-step operations", "category": "comparative", "created_time": "2025-11-04 17:54:06", "modified_time": "2025-11-04 17:54:06", "generalized_query": "Execute bulk content removal from music platforms requiring API authentication and pagination", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "96b69b2a5a9b47d18f14f0a6c462d64a", "memory_type": "procedural", "when_to_use": "When processing paginated API responses for comprehensive data collection", "content": "The higher-scoring approach implemented proper pagination loops (while True with break condition) to collect complete library data before processing. The lower-scoring approach only retrieved initial pages (page_index < 10 hard-coded) potentially missing newer playlists/songs. Comprehensive data collection enabled accurate filtering and ensured no outdated content was overlooked.", "score": 0, "time_created": "2025-11-04 17:54:06", "time_modified": "2025-11-04 17:54:06", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Remove all songs from my Spotify song library and playlists that were released in or before 2021 year.", "when_to_use": "When processing paginated API responses for comprehensive data collection", "category": "comparative", "created_time": "2025-11-04 17:54:06", "modified_time": "2025-11-04 17:54:06", "generalized_query": "Process paginated API results for complete dataset analysis and modification", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "2b9945f8649940d78008c032f5d6b8f9", "memory_type": "procedural", "when_to_use": "When integrating multiple APIs to solve a task requiring sequential data retrieval and conditional logic", "content": "Higher-scoring approach systematically validated API endpoints before execution (e.g., checking play_music API specs after failed play_playlist attempt). It also implemented precise duration calculation by parsing workout content with explicit hour/minute handling, while lower-scoring approach had syntax errors in comments and failed to properly parse duration fields. The higher-scoring solution demonstrated better error recovery by falling back to longest playlist when no exact match existed.", "score": 0, "time_created": "2025-11-04 17:54:31", "time_modified": "2025-11-04 17:54:31", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Start playing a playlist on Spotify that has enough songs for my workout today. The workout plan is in Simple Note.", "when_to_use": "When integrating multiple APIs to solve a task requiring sequential data retrieval and conditional logic", "category": "comparative", "created_time": "2025-11-04 17:54:31", "modified_time": "2025-11-04 17:54:31", "generalized_query": "Execute multi-step workflow involving data extraction from one service (Simple Note) to inform actions in another service (Spotify)", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "3904e9a69f60453b85f984aa0b0a8203", "memory_type": "procedural", "when_to_use": "When retrieving paginated results from API endpoints", "content": "Implement page_index increment loop with exit condition checking empty pages. This pattern ensures full dataset collection regardless of pagination limits (default 5 items/page in this case). Works for any API with page_index parameter.", "score": 0, "time_created": "2025-11-04 17:54:36", "time_modified": "2025-11-04 17:54:36", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "How many playlists do I have in Spotify?", "when_to_use": "When retrieving paginated results from API endpoints", "category": "success", "created_time": "2025-11-04 17:54:36", "modified_time": "2025-11-04 17:54:36", "generalized_query": "Retrieve complete dataset from paginated API endpoints", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "afab1338be71405291aa3ccc31509de9", "memory_type": "procedural", "when_to_use": "When executing code blocks that require pure Python syntax without explanatory text", "content": "Never include natural language explanations within code blocks. Separate analysis commentary from executable code to avoid syntax errors caused by unterminated strings or invalid characters. Use print() statements for debugging instead of inline text in code blocks.", "score": 0, "time_created": "2025-11-04 17:54:38", "time_modified": "2025-11-04 17:54:38", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Start playing a playlist on Spotify that has enough songs for my workout today... The workout plan is in Simple Note.", "when_to_use": "When executing code blocks that require pure Python syntax without explanatory text", "category": "failure", "created_time": "2025-11-04 17:54:38", "modified_time": "2025-11-04 17:54:38", "generalized_query": "Execute code blocks requiring strict syntax compliance", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "91e7563395bc44c9a6f52f0c5e9004f9", "memory_type": "procedural", "when_to_use": "When needing to retrieve data from one app and use it in another, especially when APIs are not immediately obvious", "content": "Successfully implemented a multi-step workflow: 1) Used search_notes after discovering get_note_by_title didn't exist 2) Properly handled authentication for both Simple Note and Spotify 3) Discovered and used add_to_queue + play_music combination after finding play_playlist was unavailable. Key pattern: Check API docs when encountering failures, use search/list APIs when direct access isn't possible, and maintain access tokens between steps.", "score": 0, "time_created": "2025-11-04 17:54:40", "time_modified": "2025-11-04 17:54:40", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Start playing a playlist on Spotify that has enough songs for my workout today. I do not want to have to change the playlist in the middle of my workout. The workout plan is in Simple Note.", "when_to_use": "When needing to retrieve data from one app and use it in another, especially when APIs are not immediately obvious", "category": "success", "created_time": "2025-11-04 17:54:40", "modified_time": "2025-11-04 17:54:40", "generalized_query": "Execute cross-app workflow where data from one service (e.g., note content) informs action in another (e.g., music playback)", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "d78853f2f1b64fb4860a2a0921432aee", "memory_type": "procedural", "when_to_use": "When integrating multiple APIs to fulfill a task requiring data from different sources, such as retrieving a workout plan from a note-taking app and selecting a suitable playlist from a music streaming service.", "content": "The higher-scoring approach systematically parsed the workout duration from the note content, calculated the required playlist criteria, and leveraged Spotify's `search_playlists` API with filters (e.g., query='workout', page_limit=10) to identify suitable playlists. It prioritized playlists with ≥10 songs and sorted by like_count to ensure popularity and relevance. In contrast, the lower-scoring approach failed to extract duration_mins from playlists, made redundant login attempts, and relied on incomplete or incorrect API assumptions (e.g., missing 'duration_mins' field). The higher approach also correctly handled pagination and API constraints, while the lower one generated syntax errors and unproductive steps.", "score": 0, "time_created": "2025-11-04 17:55:07", "time_modified": "2025-11-04 17:55:07", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Start playing a playlist on Spotify that has enough songs for my workout today. I do not want to have to change the playlist in the middle of my workout. The workout plan is in Simple Note.", "when_to_use": "When integrating multiple APIs to fulfill a task requiring data from different sources, such as retrieving a workout plan from a note-taking app and selecting a suitable playlist from a music streaming service.", "category": "comparative", "created_time": "2025-11-04 17:55:07", "modified_time": "2025-11-04 17:55:07", "generalized_query": "Execute a multi-step workflow involving data extraction from one app (e.g., note-taking) and action execution in another (e.g., music streaming) based on contextual requirements.", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "121d8bf6cf1d4e21b9c5d97d9fa68c3b", "memory_type": "procedural", "when_to_use": "When performing data cleanup tasks requiring irreversible actions like deletion", "content": "Always verify that removal/delete APIs are explicitly called - do not rely on simulation/debug print statements alone. Ensure irreversible actions are executed only after validation and confirmation of correct filtering logic.", "score": 0, "time_created": "2025-11-04 17:55:23", "time_modified": "2025-11-04 17:55:23", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "I need to cleanup my Spotify libraries. Keep only those songs and albums in my song and album library, respectively, that I have liked or downloaded, and remove the rest.", "when_to_use": "When performing data cleanup tasks requiring irreversible actions like deletion", "category": "failure", "created_time": "2025-11-04 17:55:23", "modified_time": "2025-11-04 17:55:23", "generalized_query": "Automated library cleanup based on user preferences with conditional removal criteria", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "156348b68e8b46b5b9731231269a2207", "memory_type": "procedural", "when_to_use": "When validating nested dependencies (e.g., albums requiring all child songs to meet criteria)", "content": "The higher-scoring approach explicitly checked each album’s song IDs against the `songs_to_keep` set, ensuring accurate determination of 'downloaded' status. The lower-scoring approach used a nested loop to verify downloaded status, which is computationally expensive for large libraries. By leveraging set operations (`all(song_id in songs_to_keep for song_id in album['song_ids'])`), the higher approach achieved O(n) complexity per album versus O(n*m) in the lower approach (where m = average songs per album). This optimization was critical for scalability.", "score": 0, "time_created": "2025-11-04 17:55:39", "time_modified": "2025-11-04 17:55:39", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "An album is downloaded if all songs in it are downloaded. Keep my playlist library as is for now.", "when_to_use": "When validating nested dependencies (e.g., albums requiring all child songs to meet criteria)", "category": "comparative", "created_time": "2025-11-04 17:55:39", "modified_time": "2025-11-04 17:55:39", "generalized_query": "Validate parent-child relationships in datasets where parent inclusion depends on child attributes meeting criteria", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "cad5caf51207490d87b7f734dc65bb8d", "memory_type": "procedural", "when_to_use": "When performing data cleanup tasks requiring cross-referencing multiple datasets with pagination", "content": "The higher-scoring approach achieved better performance by: 1) Pre-fetching all required datasets (library, downloads, likes) before processing to minimize API calls, 2) Using set operations for O(1) lookups when verifying song/album eligibility, and 3) Implementing proper pagination loops to ensure complete data retrieval. The lower-scoring approach suffered from redundant API calls within loops and failed to handle edge cases like missing fields in API responses, leading to KeyErrors and incomplete data processing.", "score": 0, "time_created": "2025-11-04 17:55:35", "time_modified": "2025-11-04 17:55:35", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "I need to cleanup my Spotify libraries. Keep only those songs and albums in my song and album library, respectively, that I have liked and downloaded, and remove the rest.", "when_to_use": "When performing data cleanup tasks requiring cross-referencing multiple datasets with pagination", "category": "comparative", "created_time": "2025-11-04 17:55:35", "modified_time": "2025-11-04 17:55:35", "generalized_query": "Filter user media libraries based on intersection of multiple criteria (likes/downloads) across paginated API endpoints", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "bdb69d1ef96d4ad087c39b605147e61d", "memory_type": "procedural", "when_to_use": "When working with apps that require authentication tokens for subsequent API calls", "content": "Demonstrated secure credential handling by retrieving passwords via supervisor.show_account_passwords, then using app-specific credentials to obtain access tokens. Maintained token reuse across subsequent API calls rather than re-authenticating, following standard OAuth patterns while avoiding hardcoding sensitive information.", "score": 0, "time_created": "2025-11-04 17:55:37", "time_modified": "2025-11-04 17:55:37", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Task: How many playlists do I have in Spotify?", "when_to_use": "When working with apps that require authentication tokens for subsequent API calls", "category": "success", "created_time": "2025-11-04 17:55:37", "modified_time": "2025-11-04 17:55:37", "generalized_query": "Authenticate to service APIs using stored credentials from supervisor interface", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "adad5b5486a140b08c82e816e158d0a9", "memory_type": "procedural", "when_to_use": "When interacting with paginated APIs or handling nested data structures with potential schema inconsistencies", "content": "The higher-scoring approach demonstrated superior error resilience by: 1) Proactively validating API response structures through test requests (step 9), 2) Implementing defensive programming with key existence checks (steps 7-8), and 3) Correctly handling pagination with dynamic page indexing. The lower-scoring approach failed due to assumptions about API structure (using 'song_ids' instead of 'id') and missing required pagination handling.", "score": 0, "time_created": "2025-11-04 17:55:46", "time_modified": "2025-11-04 17:55:46", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "I need to cleanup my Spotify libraries. Keep only those songs and albums in my song and album library, respectively, that I have liked or downloaded, and remove the rest.", "when_to_use": "When interacting with paginated APIs or handling nested data structures with potential schema inconsistencies", "category": "comparative", "created_time": "2025-11-04 17:55:46", "modified_time": "2025-11-04 17:55:46", "generalized_query": "Filter and clean user media libraries based on engagement metrics (likes/downloads) while handling API pagination and schema variations", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "8a233478d5b9451891a49a61300fc9c3", "memory_type": "procedural", "when_to_use": "When submitting code blocks in a multi-step execution environment", "content": "Strictly adhere to formatting requirements by submitting only syntactically valid code blocks without interspersed natural language explanations to prevent syntax errors.", "score": 0, "time_created": "2025-11-04 17:56:00", "time_modified": "2025-11-04 17:56:00", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "I need to cleanup my Spotify libraries. Keep only those songs and albums in my song and album library, respectively, that I have liked or downloaded, and remove the rest. An album is downloaded if all songs in it are downloaded. Keep my playlist library as is for now.", "when_to_use": "When submitting code blocks in a multi-step execution environment", "category": "failure", "created_time": "2025-11-04 17:56:00", "modified_time": "2025-11-04 17:56:00", "generalized_query": "Executing multi-step code workflows in restricted environments", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "111222e51f56456cb75c2e8da7bbe67c", "memory_type": "procedural", "when_to_use": "When interacting with file_system APIs that require specific parameter names (e.g., 'directory_path')", "content": "Always verify API parameter names and required fields using `show_api_doc` before execution. Misaligned parameter names (e.g., using `source` instead of `directory_path`) cause 422 validation errors.", "score": 0, "time_created": "2025-11-04 17:56:37", "time_modified": "2025-11-04 17:56:37", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Compress vacation directories and delete them", "when_to_use": "When interacting with file_system APIs that require specific parameter names (e.g., 'directory_path')", "category": "failure", "created_time": "2025-11-04 17:56:37", "modified_time": "2025-11-04 17:56:37", "generalized_query": "Perform file system operations requiring strict API parameter validation", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "e925d3cf6ea84ad397e69fc56f74b387", "memory_type": "procedural", "when_to_use": "When processing directory structures and extracting nested subdirectory names", "content": "The higher-scoring approach used precise string operations (`replace` and list comprehensions) to extract vacation spot names in 3 steps, while the lower-scoring approach required additional filtering steps and had an initial failure due to incorrect path matching (`~/` vs `/home/jason/`). The higher approach avoided redundant checks by directly addressing the directory structure in the API response.", "score": 0, "time_created": "2025-11-04 17:56:40", "time_modified": "2025-11-04 17:56:40", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "The \"~/photos/\" directory ... sub-directories for each vacation spot.", "when_to_use": "When processing directory structures and extracting nested subdirectory names", "category": "comparative", "created_time": "2025-11-04 17:56:40", "modified_time": "2025-11-04 17:56:40", "generalized_query": "Extract and manipulate nested directory names from a file system API response", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "b019fb7b571444bf83f877aa492e3108", "memory_type": "procedural", "when_to_use": "When working with file system APIs to organize and manipulate directories and files", "content": "The higher-scoring approach systematically retrieved only directory entries using `entry_type='directories'` and leveraged precise path manipulation to extract vacation spot names. The lower-scoring approach failed due to improper filtering of directory/file listings, leading to empty results and repeated failed iterations. Proper API parameter usage (e.g., `entry_type`) and structured path parsing were critical for success.", "score": 0, "time_created": "2025-11-04 17:56:22", "time_modified": "2025-11-04 17:56:22", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "The ~/photographs/ directory in my file system has photo files organized in sub-directories for each vacation spot. Compress them and save them in ~/photographs/vacations/.zip for each vacation spot, and then delete all vacation spot sub-directories.", "when_to_use": "When working with file system APIs to organize and manipulate directories and files", "category": "comparative", "created_time": "2025-11-04 17:56:22", "modified_time": "2025-11-04 17:56:22", "generalized_query": "Organizing and compressing directory contents while managing file system operations", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "f43d42d6f38e4fe0901cd40535933777", "memory_type": "procedural", "when_to_use": "When handling authentication for API interactions requiring credentials", "content": "The higher-scoring approach correctly included both username and password during login, resolving initial authentication errors. The lower-scoring approach initially omitted the username, causing validation failures. Systematic credential retrieval and immediate token reuse ensured uninterrupted workflow execution.", "score": 0, "time_created": "2025-11-04 17:56:22", "time_modified": "2025-11-04 17:56:22", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Using these APIs, now generate code to solve the actual task: [file system operations]", "when_to_use": "When handling authentication for API interactions requiring credentials", "category": "comparative", "created_time": "2025-11-04 17:56:22", "modified_time": "2025-11-04 17:56:22", "generalized_query": "Authenticating to a service using stored credentials and maintaining session tokens", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "53c5dec7ef6e412f95be3d023280666c", "memory_type": "procedural", "when_to_use": "When transforming directory structures while preserving content", "content": "Implemented two-phase operation: first compressing directories to preserve contents, then safely deleting originals. This pattern prevents data loss by ensuring compression succeeds before source deletion. Used API calls in sequence: compress_directory() followed by delete_directory() within the same iteration. The decision to separate these operations with clear success verification between steps minimized risk of irreversible data loss.", "score": 0, "time_created": "2025-11-04 17:56:48", "time_modified": "2025-11-04 17:56:48", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "The \"~/photographs/\" directory in my file system has photo files organized in sub-directories for each vacation spot. Compress them and save them in \"~/photographs/vacations/.zip\" for each vacation spot, and then delete all vacation spot sub-directories.", "when_to_use": "When transforming directory structures while preserving content", "category": "success", "created_time": "2025-11-04 17:56:48", "modified_time": "2025-11-04 17:56:48", "generalized_query": "Content preservation through compression followed by source directory removal", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "fce43ae39691420398c920d29e5561cf", "memory_type": "procedural", "when_to_use": "When interacting with an API that requires precise parameter alignment and directory manipulation (e.g., compressing/deleting directories)", "content": "Success was achieved by: (1) Validating API parameters via `show_api_doc` before execution to avoid errors, (2) Using `directory_path` and `compressed_file_path` parameters as specified in the API, and (3) Leveraging the `delete_directory=True` flag to atomically delete source directories after compression. The initial failure occurred due to mismatched parameter names (`source` vs. `directory_path`), highlighting the critical need to strictly follow API specifications.", "score": 0, "time_created": "2025-11-04 17:56:34", "time_modified": "2025-11-04 17:56:34", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Compress them and save them in \"~/pictures/vacations/.zip\" for each vacation spot, and then delete all vacation spot sub-directories", "when_to_use": "When interacting with an API that requires precise parameter alignment and directory manipulation (e.g., compressing/deleting directories)", "category": "success", "created_time": "2025-11-04 17:56:34", "modified_time": "2025-11-04 17:56:34", "generalized_query": "Automate directory compression and deletion using a file system API with specific parameter requirements", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "4d82b20dc6be4513ac138ee0debab5d2", "memory_type": "procedural", "when_to_use": "When retrieving credentials for multiple accounts from a supervisor API", "content": "Successfully retrieved file_system password via `supervisor.show_account_passwords()` by filtering account_name. Critical decision point: re-queried passwords after initial failure due to undefined variable, demonstrating resilience to state loss. Best practice: always validate credential retrieval before proceeding with API authentication.", "score": 0, "time_created": "2025-11-04 17:56:34", "time_modified": "2025-11-04 17:56:34", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Using these APIs, now generate code to solve the actual task", "when_to_use": "When retrieving credentials for multiple accounts from a supervisor API", "category": "success", "created_time": "2025-11-04 17:56:34", "modified_time": "2025-11-04 17:56:34", "generalized_query": "Securely access account credentials from a supervisor service for multi-API workflows", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "5307ea71970c4d3bb64d6fefc427fc11", "memory_type": "procedural", "when_to_use": "When filtering data based on assumed attributes from an API response", "content": "Always verify the actual fields returned by an API before applying filters or logic dependent on those fields. Assume no additional metadata exists beyond what is documented in the API response schema.", "score": 0, "time_created": "2025-11-04 17:56:54", "time_modified": "2025-11-04 17:56:54", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Add all spotify-recommended classical songs released in this year to a new 'Spotify Recommended Songs' playlist.", "when_to_use": "When filtering data based on assumed attributes from an API response", "category": "failure", "created_time": "2025-11-04 17:56:54", "modified_time": "2025-11-04 17:56:54", "generalized_query": "Filtering API results using fields not explicitly present in the response schema", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "e7d388b5dc8547b791771bd1bbf8dcbd", "memory_type": "procedural", "when_to_use": "When creating/caching access tokens for multi-step authenticated operations", "content": "Higher-scoring approach re-authenticated after potential token expiration during long-running operations, explicitly passing access_token in all required API calls. Lower-scoring approach failed to maintain valid authentication context for add_song_to_playlist. Key optimization: Implement token refresh/reuse patterns for extended workflows.", "score": 0, "time_created": "2025-11-04 17:56:56", "time_modified": "2025-11-04 17:56:56", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Add all spotify-recommended classical songs released in this year to a new 'Spotify Recommended Songs' playlist", "when_to_use": "When creating/caching access tokens for multi-step authenticated operations", "category": "comparative", "created_time": "2025-11-04 17:56:56", "modified_time": "2025-11-04 17:56:56", "generalized_query": "Execute multi-stage authenticated API workflows requiring persistent session management", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "e19f361bbaaa43d384d5d0d55c1ab613", "memory_type": "procedural", "when_to_use": "When interacting with APIs to perform batch operations like liking songs", "content": "Always verify API availability using `api_docs` before calling endpoints. For batch operations, implement error handling to skip already-processed items instead of failing entirely.", "score": 0, "time_created": "2025-11-04 17:57:37", "time_modified": "2025-11-04 17:57:37", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Like all the songs played so far in my spotify music player queue, including the current one.", "when_to_use": "When interacting with APIs to perform batch operations like liking songs", "category": "failure", "created_time": "2025-11-04 17:57:37", "modified_time": "2025-11-04 17:57:37", "generalized_query": "Perform batch actions on items in a music player queue while handling potential duplicates or errors", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "cc486e5a3b774475ab530af218fe5832", "memory_type": "procedural", "when_to_use": "When retrieving user-specific data from paginated APIs", "content": "Always include access tokens in API requests after authentication. Verify pagination parameters (page_index/page_limit) to ensure complete data retrieval.", "score": 0, "time_created": "2025-11-04 17:57:37", "time_modified": "2025-11-04 17:57:37", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Like all the songs played so far in my spotify music player queue, including the current one.", "when_to_use": "When retrieving user-specific data from paginated APIs", "category": "failure", "created_time": "2025-11-04 17:57:37", "modified_time": "2025-11-04 17:57:37", "generalized_query": "Access paginated resources requiring access tokens after authentication", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "93921bc6b3ee45639bdeb218d2fe7bf1", "memory_type": "procedural", "when_to_use": "When filtering songs by genre and release year requires retrieving additional metadata not present in initial recommendations", "content": "The higher-scoring approach recognized missing metadata (genre/release date) in initial recommendations and implemented a two-step process: (1) first retrieve basic recommendations, then (2) fetch detailed metadata for each song using show_song API. This enabled accurate R&B genre filtering and year-based selection. The lower-scoring approach incorrectly assumed artist names indicated genre and misused album IDs for temporal filtering, resulting in zero valid songs.", "score": 0, "time_created": "2025-11-04 17:57:32", "time_modified": "2025-11-04 17:57:32", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Add all spotify-recommended R&B songs released in this or last year to a new 'Spotify R&B Recommendations' playlist", "when_to_use": "When filtering songs by genre and release year requires retrieving additional metadata not present in initial recommendations", "category": "comparative", "created_time": "2025-11-04 17:57:32", "modified_time": "2025-11-04 17:57:32", "generalized_query": "Filter music recommendations by genre and temporal release criteria", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "8fc061a367114db196883b3c0f2fd1c1", "memory_type": "procedural", "when_to_use": "When submitting code blocks to the execution environment", "content": "Strictly separate executable code from natural language explanations in code blocks. Any human-readable commentary must be excluded from code submission blocks to avoid syntax errors. Use proper Python syntax for all operations including API calls and data processing.", "score": 0, "time_created": "2025-11-04 17:57:38", "time_modified": "2025-11-04 17:57:38", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Add all spotify-recommended R&B songs released in this or last year to a new 'Spotify R&B Recommendations' playlist.", "when_to_use": "When submitting code blocks to the execution environment", "category": "failure", "created_time": "2025-11-04 17:57:38", "modified_time": "2025-11-04 17:57:38", "generalized_query": "Executing multi-step code in constrained environments", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "7fb3246e410d4c239a67dc8a0fc3ed5e", "memory_type": "procedural", "when_to_use": "When filtering songs by genre and release year in Spotify", "content": "The higher-scoring approach correctly identified that the `search_songs` API (not `show_recommendations`) provides necessary metadata like `genre` and `release_date`. It validated the API response structure before filtering, while the lower-scoring approach assumed unavailable fields existed in the recommendations endpoint. Using precise query parameters (`genre:r&b year:2023`) and handling pagination ensured complete data retrieval.", "score": 0, "time_created": "2025-11-04 17:57:39", "time_modified": "2025-11-04 17:57:39", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Add all spotify-recommended R&B songs released in this year to a new 'R&B Recommendation' playlist.", "when_to_use": "When filtering songs by genre and release year in Spotify", "category": "comparative", "created_time": "2025-11-04 17:57:39", "modified_time": "2025-11-04 17:57:39", "generalized_query": "Filter music data by genre and temporal metadata using API endpoints", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "52fe3f2537234b6491d3a5834edcab8d", "memory_type": "procedural", "when_to_use": "When attempting to use an API method that is not explicitly listed in the API documentation", "content": "Always verify API method existence and parameters via show_api_doc() before attempting to call it. Do not assume APIs exist based on logical inference alone.", "score": 0, "time_created": "2025-11-04 17:57:41", "time_modified": "2025-11-04 17:57:41", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Add all spotify-recommended R&B songs released in this year to a new 'R&B Recommendation' playlist.", "when_to_use": "When attempting to use an API method that is not explicitly listed in the API documentation", "category": "failure", "created_time": "2025-11-04 17:57:41", "modified_time": "2025-11-04 17:57:41", "generalized_query": "Add genre-specific songs from a specific time period to a new playlist in a music streaming service", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "5d2759c502a947e9891b961268026444", "memory_type": "procedural", "when_to_use": "When handling API operations that may fail due to pre-existing conditions (e.g., duplicate likes) or require conditional filtering", "content": "The higher-scoring approach implemented two critical optimizations: 1) Proactive conflict resolution by checking existing liked songs before attempting new likes, avoiding 422 errors through pre-filtering 2) Robust error handling with try-except blocks to maintain workflow continuity. The lower-scoring approach failed to: 1) Verify existing likes, causing redundant API calls 2) Misinterpret queue state flags (is_current/is_playing) leading to empty results 3) Implement any error recovery mechanism, causing complete task failure on first exception", "score": 0, "time_created": "2025-11-04 17:57:55", "time_modified": "2025-11-04 17:57:55", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Like all the songs played so far in my spotify music player queue, including the current one.", "when_to_use": "When handling API operations that may fail due to pre-existing conditions (e.g., duplicate likes) or require conditional filtering", "category": "comparative", "created_time": "2025-11-04 17:57:55", "modified_time": "2025-11-04 17:57:55", "generalized_query": "Execute batch actions on dynamic datasets with potential pre-existing state conflicts", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "c31698e0b1664b90aa324034b1218b34", "memory_type": "procedural", "when_to_use": "When working with dynamic data that may change between API calls", "content": "Always re-fetch the latest state of data before performing operations to avoid working with stale information. Use real-time data retrieval rather than relying on cached results from previous API calls.", "score": 0, "time_created": "2025-11-04 17:58:08", "time_modified": "2025-11-04 17:58:08", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Like all the songs played so far in my spotify music player queue, including the current one.", "when_to_use": "When working with dynamic data that may change between API calls", "category": "failure", "created_time": "2025-11-04 17:58:08", "modified_time": "2025-11-04 17:58:08", "generalized_query": "Process a collection of items that may be modified during execution", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "bb3d655c814c470ea5590fea44b0b462", "memory_type": "procedural", "when_to_use": "When interacting with APIs that return paginated data or require sequential steps", "content": "The higher-scoring approach systematically validated API endpoints before execution (e.g., checking `show_playlist_library` parameters) and implemented explicit pagination handling. It also separated current song processing from bulk operations, ensuring completeness. The lower-scoring approach failed initially due to incorrect API name assumption (`show_music_player_queue` vs actual `show_song_queue`), requiring backtracking and error correction.", "score": 0, "time_created": "2025-11-04 17:58:41", "time_modified": "2025-11-04 17:58:41", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Like all the songs played so far in my spotify music player queue, including the current one.", "when_to_use": "When interacting with APIs that return paginated data or require sequential steps", "category": "comparative", "created_time": "2025-11-04 17:58:41", "modified_time": "2025-11-04 17:58:41", "generalized_query": "Execute multi-step API workflows requiring sequential data retrieval and conditional processing", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "39b7b416b54544718ea360d71b53da3b", "memory_type": "procedural", "when_to_use": "When retrieving paginated data from an API to ensure completeness", "content": "The higher-scoring approach efficiently retrieved all pages of sent payment requests by iterating with `page_index` until no more results were returned. The lower-scoring approach failed to implement proper pagination, leading to incomplete data retrieval and incorrect assumptions about payment requests.", "score": 0, "time_created": "2025-11-04 17:58:36", "time_modified": "2025-11-04 17:58:36", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "The last Venmo payment request I sent to Cory was an accident and they approved it. Send them the money back.", "when_to_use": "When retrieving paginated data from an API to ensure completeness", "category": "comparative", "created_time": "2025-11-04 17:58:36", "modified_time": "2025-11-04 17:58:36", "generalized_query": "Retrieve and process paginated transaction data to identify and reverse an accidental payment", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "115e3e7c2a5f4738838003fc63a9b21e", "memory_type": "procedural", "when_to_use": "When securely retrieving account credentials for API authentication", "content": "Use the supervisor app's show_account_passwords method to retrieve stored credentials, then pass them to the target app's login API. This ensures secure credential handling without hardcoding sensitive information.", "score": 0, "time_created": "2025-11-04 17:58:38", "time_modified": "2025-11-04 17:58:38", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "The last Venmo payment request I sent to Cory was an accident and they approved it. Send them the money back.", "when_to_use": "When securely retrieving account credentials for API authentication", "category": "success", "created_time": "2025-11-04 17:58:38", "modified_time": "2025-11-04 17:58:38", "generalized_query": "Authenticate to an app using credentials stored in a supervisor account management system", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "f427d4a1b0b349d694954b873767bfe9", "memory_type": "procedural", "when_to_use": "When encountering API errors during Venmo transaction creation", "content": "Immediately consult Venmo API specifications for create_transaction to confirm required parameters (e.g., 'receiver_email' vs 'target_user_email'). Use API documentation to verify if phone number-based transactions are supported before implementation.", "score": 0, "time_created": "2025-11-04 17:58:40", "time_modified": "2025-11-04 17:58:40", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "The last Venmo payment request I sent to Cory was an accident and they approved it. Send them the money back.", "when_to_use": "When encountering API errors during Venmo transaction creation", "category": "failure", "created_time": "2025-11-04 17:58:40", "modified_time": "2025-11-04 17:58:40", "generalized_query": "Troubleshoot failed Venmo API transactions due to invalid parameters or missing recipients", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "f67322df90824a9a956e4ff6bf11c7a0", "memory_type": "procedural", "when_to_use": "When retrieving payment requests and needing to handle dynamic user identifiers or API schema discrepancies", "content": "Higher-scoring approach resolved email mismatch by actively searching for 'Robert' via Venmo's search_users API when the initial email failed. They also corrected API schema misunderstanding by switching from 'status' to 'approved_at' field after error. Lower-scoring approach incorrectly used phone app contacts (unrelated API) and maintained invalid 'status' filtering assumption.", "score": 0, "time_created": "2025-11-04 17:58:37", "time_modified": "2025-11-04 17:58:37", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "The last Venmo payment request I sent to Robert was an accident and they approved it. Send them the money back.", "when_to_use": "When retrieving payment requests and needing to handle dynamic user identifiers or API schema discrepancies", "category": "comparative", "created_time": "2025-11-04 17:58:37", "modified_time": "2025-11-04 17:58:37", "generalized_query": "Refund accidental payment to a user with potentially ambiguous identifier", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "4a63c5224eab4ca6b977beffe174446a", "memory_type": "procedural", "when_to_use": "When retrieving user-specific payment details from paginated API responses", "content": "The higher-scoring approach systematically retrieved all approved Venmo payments using pagination (looping through `page_index`), filtered by recipient email, and selected the most recent transaction. This ensured accurate identification of the accidental payment. The lower-scoring approach hardcoded a refund amount and relied on a Venmo user search without verifying payment history, increasing error risk.", "score": 0, "time_created": "2025-11-04 17:59:09", "time_modified": "2025-11-04 17:59:09", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "The last Venmo payment request I sent to Brandon was an accident and they approved it. Send them the money back.", "when_to_use": "When retrieving user-specific payment details from paginated API responses", "category": "comparative", "created_time": "2025-11-04 17:59:09", "modified_time": "2025-11-04 17:59:09", "generalized_query": "Refund a specific accidental payment to a user via a paginated transaction history API", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "4f4b6f6f8f7a4b57b7b75590c34da9d2", "memory_type": "procedural", "when_to_use": "When retrieving access tokens for API authentication", "content": "Always explicitly store and validate API access tokens immediately after authentication to avoid NameError exceptions when subsequent API calls require them", "score": 0, "time_created": "2025-11-04 17:59:11", "time_modified": "2025-11-04 17:59:11", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "The last Venmo payment request I sent to Brandon was an accident and they approved it. Send them the money back.", "when_to_use": "When retrieving access tokens for API authentication", "category": "failure", "created_time": "2025-11-04 17:59:11", "modified_time": "2025-11-04 17:59:11", "generalized_query": "Returning funds from an accidental payment request to a specific recipient", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "12de2a271450492eb73199b03088b73f", "memory_type": "procedural", "when_to_use": "When encountering authentication failures due to invalid credentials or password reset issues", "content": "Stored credentials may become invalid over time; always validate credentials before critical API calls. When password reset is required, prioritize APIs that allow programmatic code retrieval (if available) instead of manual input. Repeatedly attempting login with invalid credentials wastes resources and risks account lockout.", "score": 0, "time_created": "2025-11-04 17:59:43", "time_modified": "2025-11-04 17:59:43", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "All phone text messages and voice messages from 3654328626 are spam, delete them.", "when_to_use": "When encountering authentication failures due to invalid credentials or password reset issues", "category": "failure", "created_time": "2025-11-04 17:59:43", "modified_time": "2025-11-04 17:59:43", "generalized_query": "Deleting messages from a specific contact requiring app authentication", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "c5ce8884fdc2467e84c9b68149be12cd", "memory_type": "procedural", "when_to_use": "When deleting messages from a specific contact across multiple message types", "content": "Implement a two-phase deletion strategy: 1) First paginate through all text messages using search_text_messages() with phone_number filter, collecting IDs. 2) Repeat for voice messages using search_voice_messages(). 3) Execute deletion for each message type in separate loops. This ensures comprehensive coverage while maintaining clear error isolation between message types.", "score": 0, "time_created": "2025-11-04 17:59:44", "time_modified": "2025-11-04 17:59:44", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "All phone text messages and voice messages from 3654328626 are spam, delete them.", "when_to_use": "When deleting messages from a specific contact across multiple message types", "category": "success", "created_time": "2025-11-04 17:59:44", "modified_time": "2025-11-04 17:59:44", "generalized_query": "Delete all messages (text/voice) from a specific phone number", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "db743a97fe884ee2a4283c3b31629953", "memory_type": "procedural", "when_to_use": "When encountering persistent authentication failures during API login attempts", "content": "Repeated password reset code failures indicate the need to validate the reset flow and ensure code validity before attempting login. Hardcoding guesswork for reset codes leads to cascading failures.", "score": 0, "time_created": "2025-11-04 17:59:39", "time_modified": "2025-11-04 17:59:39", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "All phone text messages and voice messages from 9294880327 are spam, delete them.", "when_to_use": "When encountering persistent authentication failures during API login attempts", "category": "failure", "created_time": "2025-11-04 17:59:39", "modified_time": "2025-11-04 17:59:39", "generalized_query": "Deleting messages from a specific phone number requires authenticated API access", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "4652f181065b4e17a7bf8436db9a980e", "memory_type": "procedural", "when_to_use": "When handling paginated API responses for message deletion", "content": "Always ensure access_token is properly defined and scoped before implementing pagination loops. Missing token definitions cause execution halting errors.", "score": 0, "time_created": "2025-11-04 17:59:39", "time_modified": "2025-11-04 17:59:39", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "All phone text messages and voice messages from 9294880327 are spam, delete them.", "when_to_use": "When handling paginated API responses for message deletion", "category": "failure", "created_time": "2025-11-04 17:59:39", "modified_time": "2025-11-04 17:59:39", "generalized_query": "Processing paginated results for bulk message deletion operations", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "27b43762c4374695a7d4404c3ead242e", "memory_type": "procedural", "when_to_use": "When handling authentication failures and paginated data retrieval in API-based tasks", "content": "The higher-scoring approach systematically resolved authentication issues by rechecking API specifications (discovering the username required the phone number, not email), while the lower-scoring approach relied on incorrect assumptions (email as username) and failed to handle pagination for both text and voice messages. The higher approach also explicitly looped through all pages for both message types, ensuring complete deletion, whereas the lower approach attempted to simulate results without valid authentication tokens, leading to partial failure.", "score": 0, "time_created": "2025-11-04 17:59:51", "time_modified": "2025-11-04 17:59:51", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "All phone text messages and voice messages from 5708520672 are spam, delete them.", "when_to_use": "When handling authentication failures and paginated data retrieval in API-based tasks", "category": "comparative", "created_time": "2025-11-04 17:59:51", "modified_time": "2025-11-04 17:59:51", "generalized_query": "Delete all messages (text/voice) from a specified phone number using API authentication", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "72f9ce5839494258a32c43a858d5425d", "memory_type": "procedural", "when_to_use": "When handling password reset flows in non-interactive environments", "content": "Design password reset workflows to avoid reliance on manual input functions. Use automated verification mechanisms (e.g., pre-shared codes, API-based token exchange) instead of input() calls which are explicitly disallowed in this environment.", "score": 0, "time_created": "2025-11-04 17:59:53", "time_modified": "2025-11-04 17:59:53", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "All phone text messages and voice messages from 5708520672 are spam, delete them.", "when_to_use": "When handling password reset flows in non-interactive environments", "category": "failure", "created_time": "2025-11-04 17:59:53", "modified_time": "2025-11-04 17:59:53", "generalized_query": "Reset account passwords programmatically without user input", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "069d679022cb42ac9663442a4d121b16", "memory_type": "procedural", "when_to_use": "When querying music streaming platforms for genre-specific artists with follower thresholds", "content": "Always validate API response structures and data types before filtering. Verify genre query syntax matches platform-specific conventions and ensure numeric comparisons are performed on properly typed values.", "score": 0, "time_created": "2025-11-04 18:00:33", "time_modified": "2025-11-04 18:00:33", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Follow all the reggae artists on Spotify that have at least 21 followers.", "when_to_use": "When querying music streaming platforms for genre-specific artists with follower thresholds", "category": "failure", "created_time": "2025-11-04 18:00:33", "modified_time": "2025-11-04 18:00:33", "generalized_query": "Follow artists on music platforms matching specific genres and minimum follower counts", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "d20078e6d11b46c9abb8b0c5424c0c7d", "memory_type": "procedural", "when_to_use": "When implementing pagination for API requests", "content": "Implement error handling for empty pages and verify pagination parameters against API documentation constraints. Test with explicit page limits before full execution.", "score": 0, "time_created": "2025-11-04 18:00:33", "time_modified": "2025-11-04 18:00:33", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Follow all the reggae artists on Spotify that have at least 21 followers.", "when_to_use": "When implementing pagination for API requests", "category": "failure", "created_time": "2025-11-04 18:00:33", "modified_time": "2025-11-04 18:00:33", "generalized_query": "Retrieve complete dataset from paginated API endpoints", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "f6b285fe06f14233891e126d9b5995ce", "memory_type": "procedural", "when_to_use": "When requiring secure access to user credentials for authentication", "content": "Properly retrieved Spotify password from supervisor.show_account_passwords() using list comprehension to extract the specific account. This demonstrates secure credential handling by: 1) Using platform-provided credential storage 2) Avoiding hardcoding sensitive data 3) Immediately applying credentials to authentication flow", "score": 0, "time_created": "2025-11-04 18:00:37", "time_modified": "2025-11-04 18:00:37", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Follow all the reggae artists on Spotify that have at least 21 followers.", "when_to_use": "When requiring secure access to user credentials for authentication", "category": "success", "created_time": "2025-11-04 18:00:37", "modified_time": "2025-11-04 18:00:37", "generalized_query": "Authenticate to music platforms using supervisor-managed credentials", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "335c17476dd14c99b57ff7bb523323fa", "memory_type": "procedural", "when_to_use": "When querying APIs that require precise parameter configuration for filtering (e.g., min_follower_count, genre filters)", "content": "The higher-scoring approach explicitly used the `min_follower_count=22` and `genre='classical'` parameters in the `search_artists` API, ensuring accurate filtering at the API level. The lower-scoring approach relied on post-retrieval filtering (`if artist.get('follower_count', 0) >= 22`), which is less efficient and error-prone due to incomplete data fetching. Additionally, the higher approach correctly used the `genre` parameter instead of embedding genre in the query string (`query='genre:classical'`), aligning with the API's documented parameter structure.", "score": 0, "time_created": "2025-11-04 18:00:13", "time_modified": "2025-11-04 18:00:13", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Follow all the classical artists on Spotify that have at least 22 followers", "when_to_use": "When querying APIs that require precise parameter configuration for filtering (e.g., min_follower_count, genre filters)", "category": "comparative", "created_time": "2025-11-04 18:00:13", "modified_time": "2025-11-04 18:00:13", "generalized_query": "Filter and act on entities in a music platform based on genre and popularity metrics", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "99948ec5c92f401f8eafeb4c478cbb69", "memory_type": "procedural", "when_to_use": "When interacting with APIs for file access, authentication, or payment requests", "content": "Always validate API existence and parameters via documentation before execution. Use access tokens for authenticated API calls. Handle file paths dynamically by inspecting directory structures when direct access fails. For payment systems, ensure recipient identifiers (email/ID) align with API requirements.", "score": 0, "time_created": "2025-11-04 18:00:53", "time_modified": "2025-11-04 18:00:53", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "I paid for our last month's electricity bill. Its amount is supposed to be shared equally among my roommates and me. Make venmo requests to my roommates, with a description note, 'For electricity bill.'. The bill receipt is in my file system.", "when_to_use": "When interacting with APIs for file access, authentication, or payment requests", "category": "failure", "created_time": "2025-11-04 18:00:53", "modified_time": "2025-11-04 18:00:53", "generalized_query": "Accessing files, authenticating accounts, and initiating payment requests across multiple apps", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "15718e6315b64b398d663a7e6d9f9f9b", "memory_type": "procedural", "when_to_use": "When parsing structured data from file contents", "content": "The higher-scoring approach directly parsed the `content` field using string splitting after confirming the file structure, while the lower-scoring approach required multiple directory scans and error-prone assumptions about file naming. Proper use of `show_file` output structure avoided redundant searches.", "score": 0, "time_created": "2025-11-04 18:00:59", "time_modified": "2025-11-04 18:00:59", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "The bill receipt is in my file system.", "when_to_use": "When parsing structured data from file contents", "category": "comparative", "created_time": "2025-11-04 18:00:59", "modified_time": "2025-11-04 18:00:59", "generalized_query": "Extract specific numerical values from semi-structured text files", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "e772328c6d914564850d30ed55704a07", "memory_type": "procedural", "when_to_use": "When performing paginated API searches with specific filters", "content": "The higher-scoring approach explicitly specified both `genre='EDM'` and `min_follower_count=23` parameters in the search_artists API call, ensuring precise filtering. It also implemented robust pagination by incrementing `page_index` until no results remained. The lower-scoring approach omitted the genre parameter, potentially returning irrelevant artists, and used a fixed page limit without verifying completeness. The higher approach's use of `sort_by='+follower_count'` further optimized result ordering for efficiency.", "score": 0, "time_created": "2025-11-04 18:00:45", "time_modified": "2025-11-04 18:00:45", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Follow all the edm artists on Spotify that have at least 23 followers.", "when_to_use": "When performing paginated API searches with specific filters", "category": "comparative", "created_time": "2025-11-04 18:00:45", "modified_time": "2025-11-04 18:00:45", "generalized_query": "Follow artists in a specific genre with minimum follower thresholds using paginated API results", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "251bb6ef7ec64d8ea2b2de107aa361ab", "memory_type": "procedural", "when_to_use": "When authentication is required to access protected APIs and perform user actions", "content": "The agent retrieved the supervisor's Spotify password, authenticated via the `login` API, and reused the access token for subsequent requests. Storing the access token in a variable ensured seamless authentication across multiple API calls.", "score": 0, "time_created": "2025-11-04 18:00:49", "time_modified": "2025-11-04 18:00:49", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Follow all the edm artists on Spotify that have at least 23 followers.", "when_to_use": "When authentication is required to access protected APIs and perform user actions", "category": "success", "created_time": "2025-11-04 18:00:49", "modified_time": "2025-11-04 18:00:49", "generalized_query": "Authenticate to a service to execute user actions (e.g., follow, subscribe) via API", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "33ebc337231e44a29a8efa77f188c7d5", "memory_type": "procedural", "when_to_use": "When processing API responses that require sequential state verification", "content": "Always verify the pre-condition state (e.g., 'already following') before performing irreversible actions. Implement idempotent checks with retry logic for transient API failures in state verification operations.", "score": 0, "time_created": "2025-11-04 18:01:07", "time_modified": "2025-11-04 18:01:07", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Follow all the edm artists on Spotify that have at least 23 followers", "when_to_use": "When processing API responses that require sequential state verification", "category": "failure", "created_time": "2025-11-04 18:01:07", "modified_time": "2025-11-04 18:01:07", "generalized_query": "Perform conditional actions based on user-state relationships (e.g., following status)", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "dfb3501f0293445aa62180f4cfc4dea8", "memory_type": "procedural", "when_to_use": "When interacting with APIs that require precise parameter matching, especially when dealing with user identification and payment requests", "content": "The higher-scoring approach demonstrated superior effectiveness by: 1) Correctly identifying and using the 'user_email' parameter in Venmo's create_payment_request API as required by the specification, avoiding validation errors that plagued the lower-scoring attempt. 2) Properly calculating the split amount by including the user in the division (len(roommates)+1), while the lower-scoring approach omitted this critical detail. 3) Implementing robust error handling by first verifying API parameters through documentation review before execution.", "score": 0, "time_created": "2025-11-04 18:01:23", "time_modified": "2025-11-04 18:01:23", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Make venmo requests to my roommates, with a description note, 'internet bill for the last month.'", "when_to_use": "When interacting with APIs that require precise parameter matching, especially when dealing with user identification and payment requests", "category": "comparative", "created_time": "2025-11-04 18:01:23", "modified_time": "2025-11-04 18:01:23", "generalized_query": "Send payment requests via Venmo to specified recipients using their email addresses with accurate amount calculation", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "84734d7fd8ae43f7b746691e3583acf3", "memory_type": "procedural", "when_to_use": "When retrieving and processing bill information from file systems with potential naming inconsistencies", "content": "The higher-scoring approach achieved better results by: 1) Systematically searching for the most recent bill file using timestamp-based filtering rather than relying on hardcoded filenames. 2) Implementing proper file existence checks and directory traversal logic to handle potential naming variations. 3) Using precise string parsing to extract the total amount value, whereas the lower-scoring approach made multiple failed attempts with hardcoded file paths before succeeding.", "score": 0, "time_created": "2025-11-04 18:01:23", "time_modified": "2025-11-04 18:01:23", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "The bill receipt is in my file system", "when_to_use": "When retrieving and processing bill information from file systems with potential naming inconsistencies", "category": "comparative", "created_time": "2025-11-04 18:01:23", "modified_time": "2025-11-04 18:01:23", "generalized_query": "Extract numerical values from structured text documents stored in hierarchical file systems", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "c023ca5c45fc4bc78ed3c1468805b1dc", "memory_type": "procedural", "when_to_use": "When authenticating to apps with supervisor credentials", "content": "Use supervisor.show_account_passwords() to retrieve valid credentials instead of hardcoding or guessing passwords. The initial failure to login to file_system was resolved by properly retrieving the password from supervisor instead of using outdated dummy credentials.", "score": 0, "time_created": "2025-11-04 18:01:32", "time_modified": "2025-11-04 18:01:32", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "I am your supervisor and you are a super intelligent AI Assistant...", "when_to_use": "When authenticating to apps with supervisor credentials", "category": "failure", "created_time": "2025-11-04 18:01:32", "modified_time": "2025-11-04 18:01:32", "generalized_query": "Accessing account credentials for API authentication", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "6e32c04e1ff843b8885e4363f7e7f5ab", "memory_type": "procedural", "when_to_use": "When interacting with APIs that require precise parameter usage and error handling", "content": "The higher-scoring approach systematically validated API specifications before execution, adjusted parameters based on error responses (e.g., switching from 'recipient_email' to 'user_email' in Venmo payment requests), and leveraged file system directory traversal to locate resources. This contrasts with the lower-scoring approach's repeated assumption-based API calls that failed due to incorrect parameters and unverified endpoint capabilities.", "score": 0, "time_created": "2025-11-04 18:01:39", "time_modified": "2025-11-04 18:01:39", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Make venmo requests to my roommates, with a description note, 'I paid for cable bill.'", "when_to_use": "When interacting with APIs that require precise parameter usage and error handling", "category": "comparative", "created_time": "2025-11-04 18:01:39", "modified_time": "2025-11-04 18:01:39", "generalized_query": "Execute multi-step API workflows requiring dynamic parameter adjustment and error resolution", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "d0f19589389d492d955e08bd25c7c72b", "memory_type": "procedural", "when_to_use": "When searching for contacts with specific relationships", "content": "Avoid assuming field names like 'note' or 'relationship' exist in contact data. First inspect the actual API response structure to determine available fields. Use available phone app APIs like search_contacts with appropriate query parameters and validate field existence before filtering.", "score": 0, "time_created": "2025-11-04 18:01:44", "time_modified": "2025-11-04 18:01:44", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Search for Jennifer's roommates in her phone contacts", "when_to_use": "When searching for contacts with specific relationships", "category": "failure", "created_time": "2025-11-04 18:01:44", "modified_time": "2025-11-04 18:01:44", "generalized_query": "Identifying contacts with specific relationship labels in phone apps", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "0c0643a39fe04cc2ae3af88b8ef6451d", "memory_type": "procedural", "when_to_use": "When accessing protected APIs requiring authentication tokens", "content": "Successfully authenticate using supervisor.show_account_passwords() to retrieve credentials, then use the login API to obtain an access token. Include this token in all subsequent API requests (e.g., search_notes, show_note, update_note) to maintain authorization. This pattern ensures continuous access while working with protected endpoints.", "score": 0, "time_created": "2025-11-04 18:02:11", "time_modified": "2025-11-04 18:02:11", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Mark \"Learning to cook a signature dish from scratch\" in my Bucket List Simple Note as done.", "when_to_use": "When accessing protected APIs requiring authentication tokens", "category": "success", "created_time": "2025-11-04 18:02:11", "modified_time": "2025-11-04 18:02:11", "generalized_query": "Modify content in a note stored in a password-protected note-taking app", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "0a91693b216742b1b21853205a70e388", "memory_type": "procedural", "when_to_use": "When authenticating to an app requires retrieving credentials from a supervisor account and handling API pagination", "content": "The higher-scoring approach systematically retrieved credentials via the supervisor API, authenticated correctly using the phone number as username, and implemented robust pagination to fetch all alarms. The lower-scoring approach failed due to incorrect login credentials (using email instead of phone number), repeated failed authentication attempts, and inability to handle API rate limiting or pagination properly.", "score": 0, "time_created": "2025-11-04 18:02:39", "time_modified": "2025-11-04 18:02:39", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Move my go-to-sleep phone alarm to 1 hour later and disable the rest.", "when_to_use": "When authenticating to an app requires retrieving credentials from a supervisor account and handling API pagination", "category": "comparative", "created_time": "2025-11-04 18:02:39", "modified_time": "2025-11-04 18:02:39", "generalized_query": "Modify specific alarms in a user's alarm system while managing authentication and data retrieval", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "2776a65ce8314198bbefda96dd5d3c03", "memory_type": "procedural", "when_to_use": "When searching for notes with specific content or tags in Simple Note API", "content": "When notes are not found via title search, prioritize checking tags, content, or creating the note if it doesn't exist. Always validate API limitations (e.g., search_notes may not return content-matching notes unless explicitly designed to do so).", "score": 0, "time_created": "2025-11-04 18:02:01", "time_modified": "2025-11-04 18:02:01", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Mark \"Taking a solo backpacking trip\" in my Bucket List Simple Note as not done.", "when_to_use": "When searching for notes with specific content or tags in Simple Note API", "category": "failure", "created_time": "2025-11-04 18:02:01", "modified_time": "2025-11-04 18:02:01", "generalized_query": "Update a note in a note-taking app based on partial content or tags when exact title search fails", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "bfe3fa4d62f3467cbbc5466a990afd45", "memory_type": "procedural", "when_to_use": "When handling authentication for APIs requiring access tokens", "content": "Always include access_token in API calls after authentication. Store and reuse tokens instead of hardcoding them, and handle token expiration/renewal workflows explicitly.", "score": 0, "time_created": "2025-11-04 18:02:01", "time_modified": "2025-11-04 18:02:01", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Mark \"Taking a solo backpacking trip\" in my Bucket List Simple Note as not done.", "when_to_use": "When handling authentication for APIs requiring access tokens", "category": "failure", "created_time": "2025-11-04 18:02:01", "modified_time": "2025-11-04 18:02:01", "generalized_query": "Ensure valid access tokens are used for API requests requiring authentication", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "bb8f03c4092a4ef7b15e3766ad621334", "memory_type": "procedural", "when_to_use": "When updating specific content within a note that requires partial modification (e.g., marking a checklist item as done)", "content": "The higher-scoring approach efficiently located the correct note by using a precise title filter and retrieved the full note content to perform a targeted string replacement. This ensured minimal disruption to existing data. In contrast, the lower-scoring approach initially searched for the wrong title, risked infinite loops, and attempted to overwrite content entirely, which could corrupt the note's structure. The higher approach also validated the note's content format before modification, ensuring accuracy.", "score": 0, "time_created": "2025-11-04 18:02:35", "time_modified": "2025-11-04 18:02:35", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Mark \"Witnessing a total solar eclipse\" in my Bucket List Simple Note as done.", "when_to_use": "When updating specific content within a note that requires partial modification (e.g., marking a checklist item as done)", "category": "comparative", "created_time": "2025-11-04 18:02:35", "modified_time": "2025-11-04 18:02:35", "generalized_query": "Update a specific entry in a structured note (e.g., checklist) without overwriting the entire content", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "cdeb3a945c62429fa9fab3951568f57b", "memory_type": "procedural", "when_to_use": "When paginating through API results to avoid infinite loops or excessive requests", "content": "The higher-scoring approach used a fixed page_index loop with a hard-coded upper bound (page_index < 10), ensuring predictable execution. The lower-scoring approach initially lacked a page limit, causing an infinite loop error. Even after adding a max_pages limit, it required multiple retries and debug steps, wasting resources. The higher approach's conservative pagination strategy minimized API calls while guaranteeing completion.", "score": 0, "time_created": "2025-11-04 18:02:35", "time_modified": "2025-11-04 18:02:35", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Mark \"Witnessing a total solar eclipse\" in my Bucket List Simple Note as done.", "when_to_use": "When paginating through API results to avoid infinite loops or excessive requests", "category": "comparative", "created_time": "2025-11-04 18:02:35", "modified_time": "2025-11-04 18:02:35", "generalized_query": "Retrieve paginated data with a safe termination condition to prevent resource exhaustion", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "61d1290f0dd04b5dbb73a6b47eec0a15", "memory_type": "procedural", "when_to_use": "When encountering authentication failures due to incorrect credentials", "content": "The higher-scoring approach successfully resolved login failure by switching from email to phone number as the username after verifying password list contents. It systematically validated credentials via `show_account_passwords`, adapted login parameters, and implemented robust error handling. The lower-scoring approach repeatedly attempted failed login with email without adapting, leading to redundant errors and task stagnation.", "score": 0, "time_created": "2025-11-04 18:03:11", "time_modified": "2025-11-04 18:03:11", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Move my wake-up phone alarm to 40 minutes earlier and disable the rest.", "when_to_use": "When encountering authentication failures due to incorrect credentials", "category": "comparative", "created_time": "2025-11-04 18:03:11", "modified_time": "2025-11-04 18:03:11", "generalized_query": "Adjust specific alarms and disable others using app credentials", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "67c02392a5564b0a8152efc1cfb7c169", "memory_type": "procedural", "when_to_use": "When managing paginated API responses for comprehensive data retrieval", "content": "The higher-scoring approach implemented a robust pagination loop with dynamic page indexing to ensure complete alarm retrieval, while the lower-scoring sequence would have risked incomplete data processing. The successful implementation demonstrated proactive handling of API pagination constraints through iterative page requests until exhaustion.", "score": 0, "time_created": "2025-11-04 18:03:11", "time_modified": "2025-11-04 18:03:11", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Move my wake-up phone alarm to 40 minutes earlier and disable the rest.", "when_to_use": "When managing paginated API responses for comprehensive data retrieval", "category": "comparative", "created_time": "2025-11-04 18:03:11", "modified_time": "2025-11-04 18:03:11", "generalized_query": "Process paginated alarm data for modification", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "8f7bfc1a8dac483ab58ae40d711f9aee", "memory_type": "procedural", "when_to_use": "When authenticating to an app with specific credential requirements", "content": "The higher-scoring approach successfully authenticated using the correct phone number as username (not email) and retrieved credentials via the supervisor API, avoiding repeated failed login attempts. The lower-scoring approach wasted iterations with invalid email-based login and manual password reset attempts that never resolved authentication issues. Proper credential sourcing from the supervisor app and immediate use of valid credentials enabled single successful login in the higher approach.", "score": 0, "time_created": "2025-11-04 18:03:28", "time_modified": "2025-11-04 18:03:28", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Move my go-to-sleep phone alarm to 20 minutes later and disable the rest.", "when_to_use": "When authenticating to an app with specific credential requirements", "category": "comparative", "created_time": "2025-11-04 18:03:28", "modified_time": "2025-11-04 18:03:28", "generalized_query": "Modify specific alarms in a user's alarm system while maintaining authentication integrity", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "b17c0ba6df5e406182df51f8f7a6281f", "memory_type": "procedural", "when_to_use": "When accessing protected API endpoints", "content": "Always implement token refresh logic before making paginated requests. 401 errors during pagination indicate expired/invalid access tokens that require re-authentication before retrying.", "score": 0, "time_created": "2025-11-04 18:03:38", "time_modified": "2025-11-04 18:03:38", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "I am going on a vacation. Move my go-to-sleep phone alarm to 20 minutes later and disable the rest.", "when_to_use": "When accessing protected API endpoints", "category": "failure", "created_time": "2025-11-04 18:03:38", "modified_time": "2025-11-04 18:03:38", "generalized_query": "Paginated API access requiring authentication tokens", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "76f45a8df5d54e26b10455d56d6db822", "memory_type": "procedural", "when_to_use": "When modifying alarms or other time-sensitive settings with dependencies", "content": "Always verify existing alarm states before applying changes to avoid redundant operations and unintended side effects. Explicitly validate labels are unique before using `next()` to prevent partial failures with duplicate entries.", "score": 0, "time_created": "2025-11-04 18:03:35", "time_modified": "2025-11-04 18:03:35", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "I am going on a vacation. Move my go-to-sleep phone alarm to 20 minutes later and disable the rest.", "when_to_use": "When modifying alarms or other time-sensitive settings with dependencies", "category": "failure", "created_time": "2025-11-04 18:03:35", "modified_time": "2025-11-04 18:03:35", "generalized_query": "Adjust specific recurring alarms while modifying/enabling/disabling related alarms", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "69fdaa8ebbe9410e9ec8f7618e4ceb49", "memory_type": "procedural", "when_to_use": "When calculating playlist durations based on song IDs", "content": "Failed to properly retrieve and aggregate song durations from Spotify API. Song IDs must be individually queried to extract duration values rather than assuming numerical IDs represent durations.", "score": 0, "time_created": "2025-11-04 18:03:36", "time_modified": "2025-11-04 18:03:36", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "How long is my shortest Spotify playlist, in minutes, rounded to the nearest number?", "when_to_use": "When calculating playlist durations based on song IDs", "category": "failure", "created_time": "2025-11-04 18:03:36", "modified_time": "2025-11-04 18:03:36", "generalized_query": "Determine the minimum playlist duration across all user playlists using song metadata", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "a930558deff44a73b3d64c3caea38e2e", "memory_type": "procedural", "when_to_use": "When calculating playlist duration requires precise song lengths rather than assumptions", "content": "The higher-scoring approach retrieved actual song durations via the `show_song` API instead of using an arbitrary 3-minute average. This ensured precise calculation by leveraging granular metadata rather than making assumptions about variable-length content.", "score": 0, "time_created": "2025-11-04 18:03:29", "time_modified": "2025-11-04 18:03:29", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "How long is my longest Spotify playlist, in minutes, rounded to the nearest number?", "when_to_use": "When calculating playlist duration requires precise song lengths rather than assumptions", "category": "comparative", "created_time": "2025-11-04 18:03:29", "modified_time": "2025-11-04 18:03:29", "generalized_query": "Calculating media content duration from itemized metadata", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "979519a73bc642e094be952be05d53eb", "memory_type": "procedural", "when_to_use": "When retrieving paginated API results", "content": "Incomplete pagination handling risks missing data. Always verify if API responses indicate additional pages exist (e.g., through next_page tokens or consistent result sizes).", "score": 0, "time_created": "2025-11-04 18:03:44", "time_modified": "2025-11-04 18:03:44", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "How long is my longest Spotify playlist, in minutes, rounded to the nearest number?", "when_to_use": "When retrieving paginated API results", "category": "failure", "created_time": "2025-11-04 18:03:44", "modified_time": "2025-11-04 18:03:44", "generalized_query": "Handling paginated API responses for complete dataset retrieval", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "6303d922cf1c493e900a2589ef351f52", "memory_type": "procedural", "when_to_use": "When calculating media collection metrics requiring granular item data (e.g., total duration of playlists, libraries, or queues)", "content": "Successfully calculated maximum playlist duration by: (1) Authenticating via supervisor app credentials (2) Paginating through playlist_library API to collect all playlists (3) For each playlist, fetching show_playlist details (4) For each song in playlist, calling show_song API to get precise duration_seconds (5) Summing durations and converting to minutes. Critical success factor was replacing assumed 3-minute song lengths with actual API-provided durations after discovering 'duration' field in show_song response schema.", "score": 0, "time_created": "2025-11-04 18:04:07", "time_modified": "2025-11-04 18:04:07", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "How long is my longest Spotify playlist, in minutes, rounded to the nearest number?", "when_to_use": "When calculating media collection metrics requiring granular item data (e.g., total duration of playlists, libraries, or queues)", "category": "success", "created_time": "2025-11-04 18:04:07", "modified_time": "2025-11-04 18:04:07", "generalized_query": "Calculate aggregate media duration across paginated API results with per-item metadata lookups", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "0fc268a73f664fa3be98f482b288d142", "memory_type": "procedural", "when_to_use": "When calling specific resource-detail APIs for metadata retrieval", "content": "Cross-reference API documentation to confirm available endpoints before implementation to avoid invalid API calls", "score": 0, "time_created": "2025-11-04 18:04:11", "time_modified": "2025-11-04 18:04:11", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "How long is my longest Spotify playlist, in minutes, rounded to the nearest number?", "when_to_use": "When calling specific resource-detail APIs for metadata retrieval", "category": "failure", "created_time": "2025-11-04 18:04:11", "modified_time": "2025-11-04 18:04:11", "generalized_query": "Retrieve detailed metadata about individual media items from streaming platforms", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "3915157c28794ae0b3da7ed6de42a1d1", "memory_type": "procedural", "when_to_use": "When retrieving song/album IDs from dictionaries with mismatched key-value structures", "content": "Always validate dictionary key-value relationships before accessing elements. When mapping titles to IDs, explicitly create cross-reference structures instead of assuming direct ID-to-title mappings", "score": 0, "time_created": "2025-11-04 18:04:21", "time_modified": "2025-11-04 18:04:21", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Play the least listened to song on Spotify from the Echo Chamber Chronicles album.", "when_to_use": "When retrieving song/album IDs from dictionaries with mismatched key-value structures", "category": "failure", "created_time": "2025-11-04 18:04:21", "modified_time": "2025-11-04 18:04:21", "generalized_query": "Retrieve specific media item ID from a dictionary with title-based keys when needing numeric ID", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "3a29b4c15d8a4698be1bedd2f809b689", "memory_type": "procedural", "when_to_use": "When handling paginated API responses or multi-step data transformations", "content": "Implement intermediate validation checkpoints after each data transformation step. Print/inspect intermediate data structures to confirm expected formats before proceeding", "score": 0, "time_created": "2025-11-04 18:04:21", "time_modified": "2025-11-04 18:04:21", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Play the least listened to song on Spotify from the Echo Chamber Chronicles album.", "when_to_use": "When handling paginated API responses or multi-step data transformations", "category": "failure", "created_time": "2025-11-04 18:04:21", "modified_time": "2025-11-04 18:04:21", "generalized_query": "Process nested API responses requiring multiple transformation steps", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "64e7e6b1694349d4888506177b1be000", "memory_type": "procedural", "when_to_use": "When retrieving song/playlist metadata or interaction metrics", "content": "Always verify API existence and parameters via show_api_docs before implementation. When metrics like play count aren't directly available, use existing relational data (like song IDs from playlist details) with appropriate private metadata endpoints.", "score": 0, "time_created": "2025-11-04 18:04:25", "time_modified": "2025-11-04 18:04:25", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Play the most listened to song on Spotify from my Woodstock Reimagined: Festival Vibes playlist.", "when_to_use": "When retrieving song/playlist metadata or interaction metrics", "category": "failure", "created_time": "2025-11-04 18:04:25", "modified_time": "2025-11-04 18:04:25", "generalized_query": "Identify and play the most popular item in a specific music streaming service playlist", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "f8ffe6c05e71445ab801c82e94fe2b0a", "memory_type": "procedural", "when_to_use": "When handling API parameter requirements", "content": "Never assume parameter types - explicitly validate required parameter formats (integer vs string) through API documentation before implementation. Use existing ID fields from prior API responses rather than attempting title-based lookups when IDs are already available.", "score": 0, "time_created": "2025-11-04 18:04:25", "time_modified": "2025-11-04 18:04:25", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Play the most listened to song on Spotify from my Woodstock Reimagined: Festival Vibes playlist.", "when_to_use": "When handling API parameter requirements", "category": "failure", "created_time": "2025-11-04 18:04:25", "modified_time": "2025-11-04 18:04:25", "generalized_query": "Execute API calls requiring numeric identifiers instead of textual references", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "d3ca744ff9ff4c29abde73ea3884abc7", "memory_type": "procedural", "when_to_use": "When accessing private user data via APIs requiring authentication tokens", "content": "Always validate and explicitly pass access tokens for authenticated API calls, even after initial login. Verify API endpoint behavior with test data to ensure expected output before relying on it for critical decisions.", "score": 0, "time_created": "2025-11-04 18:04:37", "time_modified": "2025-11-04 18:04:37", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Play the most listened to song on Spotify from the Velvet Underground album.", "when_to_use": "When accessing private user data via APIs requiring authentication tokens", "category": "failure", "created_time": "2025-11-04 18:04:37", "modified_time": "2025-11-04 18:04:37", "generalized_query": "Retrieve user-specific metrics (e.g., listen counts) from a music streaming platform's private API", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "7fc7540978fe415a95469637089237a6", "memory_type": "procedural", "when_to_use": "When filtering results based on specific dataset properties", "content": "Implement explicit data validation checks for edge cases (e.g., zero values) and ensure metadata cross-referencing logic correctly maps relationships between nested data structures.", "score": 0, "time_created": "2025-11-04 18:04:37", "time_modified": "2025-11-04 18:04:37", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Play the most listened to song on Spotify from the Velvet Underground album.", "when_to_use": "When filtering results based on specific dataset properties", "category": "failure", "created_time": "2025-11-04 18:04:37", "modified_time": "2025-11-04 18:04:37", "generalized_query": "Select items from a subset of data requiring cross-referenced metadata", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "fdc05bb3f844464887797fbc8b1aed39", "memory_type": "procedural", "when_to_use": "When handling financial transaction approvals that require balance verification", "content": "The higher-scoring approach proactively checked Venmo balance against total pending amounts before approval, preventing failed transactions. The lower-scoring approach attempted approvals without balance validation, leading to execution failure. The higher approach demonstrated better risk management by: 1) Implementing pagination for complete request retrieval 2) Adding financial feasibility checks 3) Gracefully handling insufficient funds scenarios", "score": 0, "time_created": "2025-11-04 18:05:02", "time_modified": "2025-11-04 18:05:02", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Accept all pending Venmo payment requests from my roommates and coworkers.", "when_to_use": "When handling financial transaction approvals that require balance verification", "category": "comparative", "created_time": "2025-11-04 18:05:02", "modified_time": "2025-11-04 18:05:02", "generalized_query": "Approve pending payment requests with account balance constraints", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "1991dba0c9c04ede9cfe43c4ad64146a", "memory_type": "procedural", "when_to_use": "When retrieving account credentials from the supervisor app for API authentication", "content": "Always filter credentials by account_name when using supervisor.show_account_passwords() rather than assuming positional indexing. Use list comprehensions or explicit filtering to ensure correct credential retrieval.", "score": 0, "time_created": "2025-11-04 18:05:20", "time_modified": "2025-11-04 18:05:20", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Accept all pending Venmo payment requests from my coworkers and friends.", "when_to_use": "When retrieving account credentials from the supervisor app for API authentication", "category": "failure", "created_time": "2025-11-04 18:05:20", "modified_time": "2025-11-04 18:05:20", "generalized_query": "Authenticating to a service using account credentials stored in the supervisor app", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "70c2ecfd33294d23b1cb4f86cc81dfe7", "memory_type": "procedural", "when_to_use": "When handling paginated API responses for bulk operations", "content": "Implement page_index incrementing loops with empty-result termination checks to handle paginated data completely. Always validate API responses contain data before extending result lists.", "score": 0, "time_created": "2025-11-04 18:05:20", "time_modified": "2025-11-04 18:05:20", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Accept all pending Venmo payment requests from my coworkers and friends.", "when_to_use": "When handling paginated API responses for bulk operations", "category": "failure", "created_time": "2025-11-04 18:05:20", "modified_time": "2025-11-04 18:05:20", "generalized_query": "Processing paginated results from an API endpoint", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "9739ea14422f44748e136c27d75d784b", "memory_type": "procedural", "when_to_use": "When searching for an artist's most played song on Spotify and the API supports sorting by play count", "content": "The successful approach combined two key elements: (1) Using the 'search_songs' API with the artist name as query parameter, and (2) leveraging the 'sort_by' parameter with '-play_count' to prioritize results by play frequency. This pattern ensures the first result in the response is the most played song, avoiding manual sorting of results. The negative sign in '-play_count' specifies descending order sorting, which is critical for surface-level access to top-played content.", "score": 0, "time_created": "2025-11-04 18:05:22", "time_modified": "2025-11-04 18:05:22", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "What is the title of the most played song by Velvet Echo on Spotify.", "when_to_use": "When searching for an artist's most played song on Spotify and the API supports sorting by play count", "category": "success", "created_time": "2025-11-04 18:05:22", "modified_time": "2025-11-04 18:05:22", "generalized_query": "Find the most played song by a specific artist on Spotify using API search capabilities", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "1ddb8099ebb24395891323b9f06aeaab", "memory_type": "procedural", "when_to_use": "When needing to authenticate and access user-specific data across APIs", "content": "The sequence demonstrated secure credential handling through the supervisor API's 'show_account_passwords' method, followed by immediate token storage. This pattern prevents credential exposure by: (1) Using scoped password retrieval, (2) Immediately discarding raw credentials after authentication, and (3) Reusing the access_token variable across subsequent API calls. This approach balances security with operational efficiency for authenticated API workflows.", "score": 0, "time_created": "2025-11-04 18:05:22", "time_modified": "2025-11-04 18:05:22", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "What is the title of the most played song by Velvet Echo on Spotify.", "when_to_use": "When needing to authenticate and access user-specific data across APIs", "category": "success", "created_time": "2025-11-04 18:05:22", "modified_time": "2025-11-04 18:05:22", "generalized_query": "Access music platform data requiring authentication while managing credentials securely", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "5cfbe442b7854ab5a1344ebfb3a30006", "memory_type": "procedural", "when_to_use": "When handling paginated API requests with short-lived access tokens", "content": "The higher-scoring approach prioritized immediate action after authentication to minimize token expiration risks. It efficiently looped through all pages of pending requests using a while-loop with page_index increment, and systematically denied each request in a single pass. The lower-scoring approach repeatedly re-attempted authentication and failed to maintain valid tokens due to syntax errors and lack of structured pagination handling. The higher-scoring sequence also avoided redundant code by storing results in variables for subsequent steps.", "score": 0, "time_created": "2025-11-04 18:05:06", "time_modified": "2025-11-04 18:05:06", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Reject all pending Venmo payment requests from my friends and roommates.", "when_to_use": "When handling paginated API requests with short-lived access tokens", "category": "comparative", "created_time": "2025-11-04 18:05:06", "modified_time": "2025-11-04 18:05:06", "generalized_query": "Process and resolve multiple paginated API requests requiring authentication tokens", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "0d97bbe600614441b03b175c1f6b1d78", "memory_type": "procedural", "when_to_use": "When performing irreversible operations on multiple items", "content": "Implement confirmation checks for each item before execution, especially when handling sensitive financial operations. Add dry-run capability to preview changes before committing.", "score": 0, "time_created": "2025-11-04 18:05:37", "time_modified": "2025-11-04 18:05:37", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Reject all pending Venmo payment requests from my friends and roommates.", "when_to_use": "When performing irreversible operations on multiple items", "category": "failure", "created_time": "2025-11-04 18:05:37", "modified_time": "2025-11-04 18:05:37", "generalized_query": "Bulk denial/approval of transaction requests", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "f389577d64c440e7950caff9fcca12f4", "memory_type": "procedural", "when_to_use": "When retrieving user-specific data requiring precise filtering (e.g., songs by a specific artist)", "content": "The higher-scoring approach systematically validated artist identity via `search_artists` to obtain the precise `artist_id` before querying songs, ensuring accurate filtering. It also implemented pagination loops to exhaustively collect all songs, while the lower-scoring approach relied on ambiguous query syntax without verifying artist uniqueness or retrieving all pages, risking incomplete/inaccurate results.", "score": 0, "time_created": "2025-11-04 18:05:59", "time_modified": "2025-11-04 18:05:59", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "What is the title of the least played song by Zoey James on Spotify.", "when_to_use": "When retrieving user-specific data requiring precise filtering (e.g., songs by a specific artist)", "category": "comparative", "created_time": "2025-11-04 18:05:59", "modified_time": "2025-11-04 18:05:59", "generalized_query": "Identify the least played media item by a specific creator from a user's library", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "5a8b2b8f80c34f268b9d535190230663", "memory_type": "procedural", "when_to_use": "When accessing another person's data via third-party APIs", "content": "Never assume cross-account data accessibility without explicit API permissions. Always verify API scope and authentication boundaries before attempting to access another user's private data", "score": 0, "time_created": "2025-11-04 18:06:15", "time_modified": "2025-11-04 18:06:15", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "What is the title of the most played song by Jasper Skye on Spotify?", "when_to_use": "When accessing another person's data via third-party APIs", "category": "failure", "created_time": "2025-11-04 18:06:15", "modified_time": "2025-11-04 18:06:15", "generalized_query": "Retrieving personal music consumption data from a third party's account", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "a29e463876aa440897ac643aaab73948", "memory_type": "procedural", "when_to_use": "When interpreting 'most played' metrics from music platforms", "content": "Always validate if the API endpoint provides actual play count data or only like/playlist metadata. Use the appropriate endpoints (e.g., show_liked_songs vs. show_song_library) based on what metrics are available", "score": 0, "time_created": "2025-11-04 18:06:15", "time_modified": "2025-11-04 18:06:15", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "What is the title of the most played song by Jasper Skye on Spotify?", "when_to_use": "When interpreting 'most played' metrics from music platforms", "category": "failure", "created_time": "2025-11-04 18:06:15", "modified_time": "2025-11-04 18:06:15", "generalized_query": "Extracting consumption analytics from music streaming services", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "025cf4813c1e46668426c8c3c27aa535", "memory_type": "procedural", "when_to_use": "When filtering multi-artist tracks to isolate specific contributor's works", "content": "Used nested list comprehension to filter search results by exact artist name in artist array. This ensures accuracy when tracks may contain multiple artists, preventing misattribution to similarly named artists or featured collaborators.", "score": 0, "time_created": "2025-11-04 18:06:21", "time_modified": "2025-11-04 18:06:21", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "What is the title of the most played song by Jasper Skye on Spotify?", "when_to_use": "When filtering multi-artist tracks to isolate specific contributor's works", "category": "success", "created_time": "2025-11-04 18:06:21", "modified_time": "2025-11-04 18:06:21", "generalized_query": "Isolate media items where specific creator is primary contributor", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "b333905519d2440aad10e1866d56e3a5", "memory_type": "procedural", "when_to_use": "When retrieving maximum value items from paginated API responses", "content": "Set page_limit to maximum allowed value (20) to minimize API calls while ensuring comprehensive dataset coverage. Combined with immediate metric-based sorting, this reduces computational overhead compared to multiple round-trip requests.", "score": 0, "time_created": "2025-11-04 18:06:21", "time_modified": "2025-11-04 18:06:21", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "What is the title of the most played song by Jasper Skye on Spotify?", "when_to_use": "When retrieving maximum value items from paginated API responses", "category": "success", "created_time": "2025-11-04 18:06:21", "modified_time": "2025-11-04 18:06:21", "generalized_query": "Extract extreme value items (max/min) from API-paginated datasets", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "4aa4a401f14b4f0bb6e86e47bb44ad39", "memory_type": "procedural", "when_to_use": "When needing to follow artists based on user-liked songs in Spotify, especially when dealing with paginated API responses and nested data structures", "content": "The successful approach involved: 1) Pagination handling for both liked songs and following artists lists 2) Structural inspection of API responses to correctly extract artist IDs (noting initial KeyError when assuming 'artist_id' vs actual 'artists[0][id]' structure) 3) Set-based comparison to identify new follows 4) Batch processing of follow actions after full data collection. Critical decision points included verifying API response structures after errors and using set operations for efficient comparison.", "score": 0, "time_created": "2025-11-04 18:06:26", "time_modified": "2025-11-04 18:06:26", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Follow all the artists who have sung at least one song I have liked on Spotify.", "when_to_use": "When needing to follow artists based on user-liked songs in Spotify, especially when dealing with paginated API responses and nested data structures", "category": "success", "created_time": "2025-11-04 18:06:26", "modified_time": "2025-11-04 18:06:26", "generalized_query": "Follow entities (artists, creators) based on user-liked content in a music streaming platform using paginated API endpoints", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "dbf16703662e4ab4b41058705d54262e", "memory_type": "procedural", "when_to_use": "When extracting nested data from API responses with unexpected structures", "content": "Always verify API response structure before accessing nested fields - use explicit key checks and data traversal. When working with paginated results, ensure you're correctly parsing the actual data fields returned by the API rather than assuming field names or nesting levels.", "score": 0, "time_created": "2025-11-04 18:06:25", "time_modified": "2025-11-04 18:06:25", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Unfollow all the artists who have not sung even a single song I have liked on Spotify.", "when_to_use": "When extracting nested data from API responses with unexpected structures", "category": "failure", "created_time": "2025-11-04 18:06:25", "modified_time": "2025-11-04 18:06:25", "generalized_query": "Identify and process artist-song relationships from music streaming platform APIs", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "20d9fb7a42074f27940acb19e3560d30", "memory_type": "procedural", "when_to_use": "When performing set operations on user relationships and preferences", "content": "Use set operations for efficient comparison of large datasets (e.g., following vs. liked content creators). Always convert API response data into appropriate data structures (sets/dictionaries) before performing these operations to ensure O(1) lookup times.", "score": 0, "time_created": "2025-11-04 18:06:25", "time_modified": "2025-11-04 18:06:25", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Unfollow all the artists who have not sung even a single song I have liked on Spotify.", "when_to_use": "When performing set operations on user relationships and preferences", "category": "failure", "created_time": "2025-11-04 18:06:25", "modified_time": "2025-11-04 18:06:25", "generalized_query": "Determine differences between user followings and engagement history in social platforms", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "02d08321c66542c9ac6309c0dd36e22f", "memory_type": "procedural", "when_to_use": "When dealing with paginated APIs and needing to avoid redundant actions", "content": "The higher-scoring approach efficiently handled pagination for both liked songs and followed artists, while also checking existing followed artists to avoid duplicates. The lower-scoring approach failed initially due to incorrect API usage (non-existent 'show_artists') and later used inefficient individual 'show_artist' calls instead of batch processing. The higher approach's use of 'show_following_artists' with pagination and set-based comparison reduced API calls and ensured completeness.", "score": 0, "time_created": "2025-11-04 18:07:03", "time_modified": "2025-11-04 18:07:03", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Follow all the artists who have sung at least one song I have liked on Spotify.", "when_to_use": "When dealing with paginated APIs and needing to avoid redundant actions", "category": "comparative", "created_time": "2025-11-04 18:07:03", "modified_time": "2025-11-04 18:07:03", "generalized_query": "Automate following entities based on user preferences requiring multi-step API interactions", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_32b", "memory_id": "f2c0427ba4714559a23f532db622f379", "memory_type": "procedural", "when_to_use": "When interacting with APIs that require processing multiple items and no bulk API exists", "content": "When an API does not provide a bulk operation for a collection of items, iterate through each item individually using the available single-item API endpoint. Always verify API specifications before assuming bulk capabilities exist.", "score": 0, "time_created": "2025-11-04 18:07:04", "time_modified": "2025-11-04 18:07:04", "author": "qwen3-32b", "metadata": {"author": "qwen3-32b", "task_query": "Follow all the artists who have sung at least one song I have liked on Spotify.", "when_to_use": "When interacting with APIs that require processing multiple items and no bulk API exists", "category": "failure", "created_time": "2025-11-04 18:07:04", "modified_time": "2025-11-04 18:07:04", "generalized_query": "Process multiple entities (e.g., artists, songs) via an API when only individual operations are available", "utility": 0, "freq": 0}} diff --git a/docs/library/paper_data/task/appworld_qwen3_8b.jsonl b/docs/library/paper_data/task/appworld_qwen3_8b.jsonl deleted file mode 100644 index c0c08aca..00000000 --- a/docs/library/paper_data/task/appworld_qwen3_8b.jsonl +++ /dev/null @@ -1,207 +0,0 @@ -{"workspace_id": "appworld_qwen3_8b", "memory_id": "2de0b70ef0534b2ab26995db825b13f0", "memory_type": "procedural", "when_to_use": "When automating song rating updates in Spotify", "content": "The higher-scoring approach succeeded by using the correct 'review_song' API endpoint and properly handling authentication with an access token. It also checked for existing reviews by verifying the user's email, ensuring no duplicate ratings. The lower-scoring approach failed due to reliance on non-existent APIs like 'get_song_rating' and persistent authorization issues from invalid tokens.", "score": 0, "time_created": "2025-11-08 20:17:29", "time_modified": "2025-11-08 20:17:29", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Give a 5-star rating to all songs in my Spotify playlists which I have liked. If I have already rated it lower, increase it to 5.", "when_to_use": "When automating song rating updates in Spotify", "category": "comparative", "created_time": "2025-11-08 20:17:29", "modified_time": "2025-11-08 20:17:29", "generalized_query": "Automate rating updates for liked songs across playlists", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "ce2afda727db46238cfd4f06ebeb6c77", "memory_type": "procedural", "when_to_use": "When handling authentication tokens, ensure they remain valid and have appropriate scopes for requested operations.", "content": "Implement token refresh mechanisms and validate token scope/permissions before making API calls to prevent authorization errors.", "score": 0, "time_created": "2025-11-08 20:17:30", "time_modified": "2025-11-08 20:17:30", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Give a 5-star rating to all songs in my Spotify playlists which I have liked. If I have already rated it lower, increase it to 5.", "when_to_use": "When handling authentication tokens, ensure they remain valid and have appropriate scopes for requested operations.", "category": "failure", "created_time": "2025-11-08 20:17:30", "modified_time": "2025-11-08 20:17:30", "generalized_query": "Perform authenticated operations on a music service requiring valid access tokens.", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "531e4ad3dfee4f21857125bf1f92b968", "memory_type": "procedural", "when_to_use": "When retrieving data from an API that requires authentication and password management", "content": "Successfully retrieved Spotify data by first obtaining credentials through supervisor API, then iteratively fetching playlists and songs while validating API response structures. Key steps included: 1) Using list comprehensions with proper filtering for password retrieval 2) Consulting API documentation to resolve KeyError issues 3) Iterating through nested data structures (playlists → songs → song details) 4) Leveraging max() function with custom key for ranking", "score": 0, "time_created": "2025-11-08 20:17:25", "time_modified": "2025-11-08 20:17:25", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "What is the title of the most-liked song in my Spotify playlists.", "when_to_use": "When retrieving data from an API that requires authentication and password management", "category": "success", "created_time": "2025-11-08 20:17:25", "modified_time": "2025-11-08 20:17:25", "generalized_query": "Identify the most-liked item in a collection of curated items from a music service", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "22027e4e23214b4ea692befea7029a21", "memory_type": "procedural", "when_to_use": "When prioritizing user-centric metrics over system-wide statistics", "content": "Always verify if metrics like 'like_count' represent user-specific actions (e.g., personal likes) or system-wide statistics (e.g., total likes by all users)", "score": 0, "time_created": "2025-11-08 20:17:35", "time_modified": "2025-11-08 20:17:35", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "What is the title of the most-liked song in my Spotify playlists.", "when_to_use": "When prioritizing user-centric metrics over system-wide statistics", "category": "failure", "created_time": "2025-11-08 20:17:35", "modified_time": "2025-11-08 20:17:35", "generalized_query": "Determine user-specific favorites from platform-wide data", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "c71f54edf3404221b9425ef487e5b42b", "memory_type": "procedural", "when_to_use": "When determining playback statistics or usage metrics in music platforms", "content": "Playback statistics (e.g., play count) are often distinct from engagement metrics (e.g., likes). Verify API capabilities before assuming data availability, and handle missing data explicitly.", "score": 0, "time_created": "2025-11-08 20:17:37", "time_modified": "2025-11-08 20:17:37", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "What is the title of the most-played song in my Spotify album library.", "when_to_use": "When determining playback statistics or usage metrics in music platforms", "category": "failure", "created_time": "2025-11-08 20:17:37", "modified_time": "2025-11-08 20:17:37", "generalized_query": "Identify the most frequently played item in a music library", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "f2f26769b81e42449d0ad638de4911ad", "memory_type": "procedural", "when_to_use": "When processing large datasets from paginated APIs", "content": "Implement robust pagination handling and validate data structure consistency across pages", "score": 0, "time_created": "2025-11-08 20:17:18", "time_modified": "2025-11-08 20:17:18", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "What is the title of the most-played song in my Spotify album library.", "when_to_use": "When processing large datasets from paginated APIs", "category": "failure", "created_time": "2025-11-08 20:17:18", "modified_time": "2025-11-08 20:17:18", "generalized_query": "Analyze aggregated data across multiple API pages", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "4d92ea442b2c40d49d737fc31b274946", "memory_type": "procedural", "when_to_use": "When accessing Spotify's API to retrieve user data like song libraries or play counts", "content": "Always verify API endpoint existence and response structure before implementing data processing logic. Use the exact field names specified in the API documentation rather than assuming default keys.", "score": 0, "time_created": "2025-11-08 20:17:21", "time_modified": "2025-11-08 20:17:21", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "What is the title of the least-played song in my Spotify song library.", "when_to_use": "When accessing Spotify's API to retrieve user data like song libraries or play counts", "category": "failure", "created_time": "2025-11-08 20:17:21", "modified_time": "2025-11-08 20:17:21", "generalized_query": "Identify the least frequently played item in a music library", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "f6c640fcc4ca453dab8d18cfbb10c734", "memory_type": "procedural", "when_to_use": "When implementing pagination for large datasets in API calls", "content": "Implement robust pagination handling with proper error checking to avoid infinite loops and ensure complete data retrieval from paginated endpoints.", "score": 0, "time_created": "2025-11-08 20:17:21", "time_modified": "2025-11-08 20:17:21", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "What is the title of the least-played song in my Spotify song library.", "when_to_use": "When implementing pagination for large datasets in API calls", "category": "failure", "created_time": "2025-11-08 20:17:21", "modified_time": "2025-11-08 20:17:21", "generalized_query": "Process paginated API responses effectively", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "fe787f6521be4a07abe5b51563c5aa73", "memory_type": "procedural", "when_to_use": "When modifying song ratings or reviews in a music library API", "content": "Always verify if a review/rating already exists for a song before attempting to create a new one to prevent duplicate entries and 409 conflicts", "score": 0, "time_created": "2025-11-08 20:18:13", "time_modified": "2025-11-08 20:18:13", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Give a 1-star rating to all songs in my Spotify song library which I have not liked. If I have already rated it higher, decrease it to 1.", "when_to_use": "When modifying song ratings or reviews in a music library API", "category": "failure", "created_time": "2025-11-08 20:18:13", "modified_time": "2025-11-08 20:18:13", "generalized_query": "Adjust song ratings based on user interaction metrics in a music library system", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "bf9333ce19744f4d9b2310f459580ee9", "memory_type": "procedural", "when_to_use": "When handling API failures due to missing fields", "content": "Implement field existence checks before accessing dictionary keys - use .get() with default values instead of direct indexing", "score": 0, "time_created": "2025-11-08 20:18:08", "time_modified": "2025-11-08 20:18:08", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Give a 1-star rating to all songs in my Spotify song library which I have not liked. If I have already rated it higher, decrease it to 1.", "when_to_use": "When handling API failures due to missing fields", "category": "failure", "created_time": "2025-11-08 20:18:08", "modified_time": "2025-11-08 20:18:08", "generalized_query": "Access nested data fields in API responses", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "433755c9b7bf460894d005e4a5a04bed", "memory_type": "procedural", "when_to_use": "When retrieving sensitive data like passwords or API tokens", "content": "Always validate data structures before accessing nested keys and ensure proper authentication token handling across API calls", "score": 0, "time_created": "2025-11-08 20:18:17", "time_modified": "2025-11-08 20:18:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Like all the venmo transactions from today involving any of my roommates on my venmo social feed.", "when_to_use": "When retrieving sensitive data like passwords or API tokens", "category": "failure", "created_time": "2025-11-08 20:18:17", "modified_time": "2025-11-08 20:18:17", "generalized_query": "Retrieve transactions involving specific user relationships from a social feed", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "0c874d63bbef40b8a4d34d147d0e4ceb", "memory_type": "procedural", "when_to_use": "When filtering data based on dynamic criteria", "content": "Use set operations for efficient membership testing and verify data formats before conditional checks", "score": 0, "time_created": "2025-11-08 20:18:17", "time_modified": "2025-11-08 20:18:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Like all the venmo transactions from today involving any of my roommates on my venmo social feed.", "when_to_use": "When filtering data based on dynamic criteria", "category": "failure", "created_time": "2025-11-08 20:18:17", "modified_time": "2025-11-08 20:18:17", "generalized_query": "Filter transactions involving specific relationships", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "877675b56bee4b8abda189095acd6bf2", "memory_type": "procedural", "when_to_use": "When submitting results to supervisor tasks", "content": "Format task answers strictly according to expected data types (prefer strings over complex objects)", "score": 0, "time_created": "2025-11-08 20:18:16", "time_modified": "2025-11-08 20:18:16", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Like all the venmo transactions from today involving any of my roommates on my venmo social feed.", "when_to_use": "When submitting results to supervisor tasks", "category": "failure", "created_time": "2025-11-08 20:18:16", "modified_time": "2025-11-08 20:18:16", "generalized_query": "Complete supervisor-assigned transaction analysis tasks", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "da599fb4190245978fc493ebe2680d9b", "memory_type": "procedural", "when_to_use": "When searching for contacts or users across apps", "content": "Use dedicated contact search APIs instead of generic search methods for accurate results", "score": 0, "time_created": "2025-11-08 20:18:16", "time_modified": "2025-11-08 20:18:16", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Like all the venmo transactions from today involving any of my roommates on my venmo social feed.", "when_to_use": "When searching for contacts or users across apps", "category": "failure", "created_time": "2025-11-08 20:18:16", "modified_time": "2025-11-08 20:18:16", "generalized_query": "Identify cross-app contact relationships", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "9942fec0a79a423aa2225c8337650619", "memory_type": "procedural", "when_to_use": "When accessing multiple apps or services requiring separate authentication", "content": "Always verify access tokens are specific to the target API and validate response structures before field access", "score": 0, "time_created": "2025-11-08 20:18:17", "time_modified": "2025-11-08 20:18:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Like all the venmo transactions from yesterday involving any of my siblings on my venmo social feed.", "when_to_use": "When accessing multiple apps or services requiring separate authentication", "category": "failure", "created_time": "2025-11-08 20:18:17", "modified_time": "2025-11-08 20:18:17", "generalized_query": "Retrieve transactions involving specific user relationships across multiple platforms", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "5af571b627554c1aa6b4edc599953610", "memory_type": "procedural", "when_to_use": "When dealing with API rate limiting or duplicate operation errors", "content": "Implement idempotent operations with try-except blocks to handle 'already exists' errors gracefully", "score": 0, "time_created": "2025-11-08 20:18:12", "time_modified": "2025-11-08 20:18:12", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Like all the venmo transactions from yesterday involving any of my siblings on my venmo social feed.", "when_to_use": "When dealing with API rate limiting or duplicate operation errors", "category": "failure", "created_time": "2025-11-08 20:18:12", "modified_time": "2025-11-08 20:18:12", "generalized_query": "Perform bulk operations on social media transactions", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "d671b3d3eeda4ad69fde790bc6fdb9c4", "memory_type": "procedural", "when_to_use": "When authenticating and interacting with APIs to perform actions like liking transactions or retrieving social feeds", "content": "The higher-scoring approach succeeded by: 1) Properly handling API authentication and token management, 2) Implementing error handling for duplicate likes, 3) Using Venmo-specific APIs directly rather than cross-platform solutions (phone app), 4) Validating API response structures before accessing fields. The lower-scoring approach failed due to: 1) Using unrelated phone app APIs, 2) Assuming non-existent 'username' fields in responses, 3) Lack of duplicate transaction handling, 4) Inefficient multi-step authentication processes.", "score": 0, "time_created": "2025-11-08 20:18:19", "time_modified": "2025-11-08 20:18:19", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Like all the venmo transactions from yesterday involving any of my siblings on my venmo social feed.", "when_to_use": "When authenticating and interacting with APIs to perform actions like liking transactions or retrieving social feeds", "category": "comparative", "created_time": "2025-11-08 20:18:19", "modified_time": "2025-11-08 20:18:19", "generalized_query": "Interact with social media transactions involving specific relationships (e.g., siblings) across platforms", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "44c5f7af67dc4316a3bf039208eac11b", "memory_type": "procedural", "when_to_use": "When updating ratings for songs in a music library with existing reviews", "content": "The higher-scoring approach succeeded by first checking for existing reviews using the 'show_song_reviews' API and only creating new reviews when none existed. This prevented duplicate review errors. It also used pagination to fully retrieve all liked songs and albums, ensuring comprehensive coverage. The lower-scoring approach failed due to lack of review existence checks and incomplete data retrieval from paginated APIs.", "score": 0, "time_created": "2025-11-08 20:18:17", "time_modified": "2025-11-08 20:18:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Give a 4-star rating to all songs in my Spotify album library which I have liked. If I have already rated it lower, increase it to 4.", "when_to_use": "When updating ratings for songs in a music library with existing reviews", "category": "comparative", "created_time": "2025-11-08 20:18:17", "modified_time": "2025-11-08 20:18:17", "generalized_query": "Update song ratings in a music library based on user preferences and existing reviews", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "00138f9d3a3b4c0da8ec891e3c7d45c3", "memory_type": "procedural", "when_to_use": "When handling stateful operations that require checking for existing state before modification", "content": "Implement existence checks for target resources before performing create/update operations, especially when dealing with unique constraint violations", "score": 0, "time_created": "2025-11-08 20:18:28", "time_modified": "2025-11-08 20:18:28", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Give a 4-star rating to all songs in my Spotify album library which I have liked. If I have already rated it lower, increase it to 4.", "when_to_use": "When handling stateful operations that require checking for existing state before modification", "category": "failure", "created_time": "2025-11-08 20:18:28", "modified_time": "2025-11-08 20:18:28", "generalized_query": "Perform state modifications with pre-existence checks to avoid conflicts", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "a069662627e0421fb5cafb2ca96368a6", "memory_type": "procedural", "when_to_use": "When accessing configuration data that depends on dynamic inputs", "content": "Ensure dynamic variables (e.g., passwords, tokens) are explicitly retrieved and validated before use in API calls.", "score": 0, "time_created": "2025-11-08 20:18:17", "time_modified": "2025-11-08 20:18:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Give a 4-star rating to all songs in my Spotify album library which I have liked. If I have already rated it lower, increase it to 4.", "when_to_use": "When accessing configuration data that depends on dynamic inputs", "category": "failure", "created_time": "2025-11-08 20:18:17", "modified_time": "2025-11-08 20:18:17", "generalized_query": "Retrieve authentication credentials from a secure password store for API operations", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "62e984993bed4673b1bd1f116674c00d", "memory_type": "procedural", "when_to_use": "When processing paginated API responses with large datasets", "content": "Implement robust pagination handling with explicit termination conditions to avoid infinite loops and ensure complete data retrieval.", "score": 0, "time_created": "2025-11-08 20:18:17", "time_modified": "2025-11-08 20:18:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Give a 4-star rating to all songs in my Spotify album library which I have liked. If I have already rated it lower, increase it to 4.", "when_to_use": "When processing paginated API responses with large datasets", "category": "failure", "created_time": "2025-11-08 20:18:17", "modified_time": "2025-11-08 20:18:17", "generalized_query": "Iterate through paginated collections to process all items in a user's media library", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "84db17aae99f43eeb0371adc568feb13", "memory_type": "procedural", "when_to_use": "When handling API authentication and data export tasks", "content": "Ensure proper authentication for all APIs involved, validate credentials before making requests, and handle pagination correctly when retrieving large datasets.", "score": 0, "time_created": "2025-11-08 20:19:02", "time_modified": "2025-11-08 20:19:02", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Export a unique list of all the songs in my song and album library and all playlists in my Spotify account into '~/backups/spotify.csv' file in my file system. The file should have headers, 'Title' and 'Artists' and artists should be separated by '|'. Terminate my account after this backup is complete.", "when_to_use": "When handling API authentication and data export tasks", "category": "failure", "created_time": "2025-11-08 20:19:02", "modified_time": "2025-11-08 20:19:02", "generalized_query": "Export user music library data from a service to a CSV file with specific formatting and terminate the account", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "40731ec342514cce83a5ddc7c39eec4a", "memory_type": "procedural", "when_to_use": "When exporting data from multiple services (e.g., Spotify and file_system) requires authenticated API calls and proper error handling", "content": "The higher-scoring approach succeeded by: 1) Correctly authenticating to both Spotify and file_system apps with proper password retrieval 2) Implementing pagination for comprehensive data collection 3) Using efficient data structuring (zip() for combining title/artists) 4) Properly handling API rate limits and authentication tokens 5) Ensuring atomic operations with proper error isolation", "score": 0, "time_created": "2025-11-08 20:19:06", "time_modified": "2025-11-08 20:19:06", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Export a unique list of all the songs in my song and album library and all playlists in my Spotify account into '~/backups/spotify_library.csv' file in my file system. The file should have headers, 'Title' and 'Artists' and artists should be separated by '|'. Terminate my account after this backup is complete.", "when_to_use": "When exporting data from multiple services (e.g., Spotify and file_system) requires authenticated API calls and proper error handling", "category": "comparative", "created_time": "2025-11-08 20:19:06", "modified_time": "2025-11-08 20:19:06", "generalized_query": "Export aggregated data from multiple services to a file with specific formatting and account termination", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "c746e4f4c2c74a5b966f7dab64746623", "memory_type": "procedural", "when_to_use": "When handling API dependencies across multiple systems", "content": "Implement error handling for API dependency failures and ensure all required APIs are available before initiating multi-step operations.", "score": 0, "time_created": "2025-11-08 20:19:06", "time_modified": "2025-11-08 20:19:06", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Export a unique list of all the songs in my song and album library and all playlists in my Spotify account into '~/backups/spotify_library.csv' file in my file system. The file should have headers, 'Title' and 'Artists' and artists should be separated by '|'. Terminate my account after this backup is complete.", "when_to_use": "When handling API dependencies across multiple systems", "category": "failure", "created_time": "2025-11-08 20:19:06", "modified_time": "2025-11-08 20:19:06", "generalized_query": "Integrate data collection from multiple APIs with file output", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "156afb05b83a4932baf2c2e78c9b2e73", "memory_type": "procedural", "when_to_use": "When interacting with multiple APIs that require separate authentication", "content": "Ensure all API calls use valid access tokens with appropriate scopes. Verify that authentication credentials are specific to each API endpoint being accessed.", "score": 0, "time_created": "2025-11-08 20:19:08", "time_modified": "2025-11-08 20:19:08", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Export a unique list of all the songs in my song and album library and all playlists in my Spotify account into '~/backups/spotify_songs.csv' file in my file system. The file should have headers, 'Title' and 'Artists' and artists should be separated by '|'. Terminate my account after this backup is complete.", "when_to_use": "When interacting with multiple APIs that require separate authentication", "category": "failure", "created_time": "2025-11-08 20:19:08", "modified_time": "2025-11-08 20:19:08", "generalized_query": "Export data from multiple services to a file and terminate an account", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "b45088ca7a2b4a988e09b2acabd8f445", "memory_type": "procedural", "when_to_use": "When writing files to restricted directories", "content": "Verify directory permissions and ensure the access token has write permissions for the target path. Use explicit file creation methods provided by the file system API.", "score": 0, "time_created": "2025-11-08 20:19:08", "time_modified": "2025-11-08 20:19:08", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Export a unique list of all the songs in my song and album library and all playlists in my Spotify account into '~/backups/spotify_songs.csv' file in my file system...", "when_to_use": "When writing files to restricted directories", "category": "failure", "created_time": "2025-11-08 20:19:08", "modified_time": "2025-11-08 20:19:08", "generalized_query": "Write files to specific directories in a file system", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "92511852ab5249eba563799a236e053a", "memory_type": "procedural", "when_to_use": "When terminating an account after completing operations", "content": "Confirm account termination can only be performed when all required operations are successfully completed and no active sessions exist.", "score": 0, "time_created": "2025-11-08 20:19:08", "time_modified": "2025-11-08 20:19:08", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "...Terminate my account after this backup is complete.", "when_to_use": "When terminating an account after completing operations", "category": "failure", "created_time": "2025-11-08 20:19:08", "modified_time": "2025-11-08 20:19:08", "generalized_query": "Terminate an account after completing a task", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "59a771f8401f48f0b2609d749893f31b", "memory_type": "procedural", "when_to_use": "When constructing CSV files from nested data structures", "content": "Always validate data structure formats before processing. When joining nested fields (e.g., artists), explicitly access the required property path (e.g., artist['name']) rather than assuming direct access to primitive values.", "score": 0, "time_created": "2025-11-08 20:19:13", "time_modified": "2025-11-08 20:19:13", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Export a unique list of all the songs in my song and album library and all playlists in my Spotify account into '~/backups/spotify_songs.csv' file in my file system. The file should have headers, 'Title' and 'Artists' and artists should be separated by '|'.", "when_to_use": "When constructing CSV files from nested data structures", "category": "failure", "created_time": "2025-11-08 20:19:13", "modified_time": "2025-11-08 20:19:13", "generalized_query": "Format nested data structures into delimited text files with specific column requirements", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "b0899be64ae44af39e08b5001abf7079", "memory_type": "procedural", "when_to_use": "When retrieving transaction data involving specific contacts via APIs", "content": "Always validate API parameter names and response structures before accessing nested fields to avoid KeyError. Verify API documentation for exact parameter names and data formats.", "score": 0, "time_created": "2025-11-08 20:19:01", "time_modified": "2025-11-08 20:19:01", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Get the Venmo transactions from yesterday or today involving any of my coworkers on my Venmo social feed", "when_to_use": "When retrieving transaction data involving specific contacts via APIs", "category": "failure", "created_time": "2025-11-08 20:19:01", "modified_time": "2025-11-08 20:19:01", "generalized_query": "Retrieve transaction data filtered by specific contact relationships and date ranges", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "b67ec2894e7140d8ae249750cc9af0f4", "memory_type": "procedural", "when_to_use": "When handling authentication and credential management", "content": "Implement robust credential retrieval workflows and validate authentication responses to handle 401 errors. Ensure tokens are stored securely and used with appropriate scopes.", "score": 0, "time_created": "2025-11-08 20:19:01", "time_modified": "2025-11-08 20:19:01", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Like all the venmo transactions from yesterday or today involving any of my coworkers on my venmo social feed", "when_to_use": "When handling authentication and credential management", "category": "failure", "created_time": "2025-11-08 20:19:01", "modified_time": "2025-11-08 20:19:01", "generalized_query": "Access restricted services requiring authentication tokens", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "0f02352e6c6342659fa967aee3f33520", "memory_type": "procedural", "when_to_use": "When submitting final results to a supervisory system", "content": "Ensure output format strictly matches expected schema requirements, including type consistency and structural integrity", "score": 0, "time_created": "2025-11-08 20:18:58", "time_modified": "2025-11-08 20:18:58", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Like all the venmo transactions from yesterday or today involving any of my coworkers on my venmo social feed.", "when_to_use": "When submitting final results to a supervisory system", "category": "failure", "created_time": "2025-11-08 20:18:58", "modified_time": "2025-11-08 20:18:58", "generalized_query": "Provide structured output for automated processing systems", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "61fd52b288b8405d9b1623b4aff52e0f", "memory_type": "procedural", "when_to_use": "When interacting with APIs that require authentication tokens or specific request parameters", "content": "Always verify required API parameters are explicitly provided, validate authentication tokens before making requests, and implement robust text parsing logic to handle formatting variations", "score": 0, "time_created": "2025-11-08 20:19:45", "time_modified": "2025-11-08 20:19:45", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Leslie has asked for my movie recommendations via phone text message. Reply to them with a list of comma-separated movie titles from my Simple Note account as per their request.", "when_to_use": "When interacting with APIs that require authentication tokens or specific request parameters", "category": "failure", "created_time": "2025-11-08 20:19:45", "modified_time": "2025-11-08 20:19:45", "generalized_query": "Retrieve and format structured data from a note-taking API based on user request", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "e90e65be91ac43a2a3715bc63aac7f5e", "memory_type": "procedural", "when_to_use": "When retrieving data from multiple interconnected systems (e.g., authentication, data storage, messaging)", "content": "The higher-scoring approach succeeded by systematically resolving authentication challenges through API documentation analysis, ensuring proper token management, and precisely mapping data relationships (note content → movie indicators → recipient contact). The lower-scoring approach failed due to inconsistent authentication methods (email vs phone number), incomplete API exploration, and incorrect data parsing logic.", "score": 0, "time_created": "2025-11-08 20:19:49", "time_modified": "2025-11-08 20:19:49", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Reply to Christopher with a list of comma-separated movie titles from my Simple Note account as per their request.", "when_to_use": "When retrieving data from multiple interconnected systems (e.g., authentication, data storage, messaging)", "category": "comparative", "created_time": "2025-11-08 20:19:49", "modified_time": "2025-11-08 20:19:49", "generalized_query": "Extract and deliver specific data from a centralized system to an external recipient via a messaging interface", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "61ff914b703d47d4bc6427535149a6da", "memory_type": "procedural", "when_to_use": "When extracting structured data from text-based note content", "content": "Use precise text parsing patterns that account for nested metadata formats (e.g., hyphenated lists with embedded details)", "score": 0, "time_created": "2025-11-08 20:19:45", "time_modified": "2025-11-08 20:19:45", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Reply to Laura with a list of comma-separated movie titles from my Simple Note account", "when_to_use": "When extracting structured data from text-based note content", "category": "failure", "created_time": "2025-11-08 20:19:45", "modified_time": "2025-11-08 20:19:45", "generalized_query": "Extract specific formatted data (e.g., movie titles) from structured text notes", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "b383280146574e63b63fae4e1663d23f", "memory_type": "procedural", "when_to_use": "When accessing account credentials or API endpoints requiring authentication", "content": "Always validate list comprehensions for single-element extraction and verify API parameter constraints (e.g., page_limit max value) before execution", "score": 0, "time_created": "2025-11-08 20:19:47", "time_modified": "2025-11-08 20:19:47", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Reply to Laura with a list of comma-separated movie titles from my Simple Note account as per their request.", "when_to_use": "When accessing account credentials or API endpoints requiring authentication", "category": "failure", "created_time": "2025-11-08 20:19:47", "modified_time": "2025-11-08 20:19:47", "generalized_query": "Retrieve and format data from a notes database to fulfill a user request via messaging", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "679c400ee36d48df9fe55d8eb4f3aaf9", "memory_type": "procedural", "when_to_use": "When dealing with API authentication failures across multiple services", "content": "The higher-scoring approach implemented a fallback to the supervisor app when phone authentication failed, demonstrating better error resilience. The lower-scoring sequence lacked this contingency planning, leading to repeated failed attempts without addressing the root cause of authentication issues.", "score": 0, "time_created": "2025-11-08 20:19:50", "time_modified": "2025-11-08 20:19:50", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Send text message via phone app after Simple Note authentication", "when_to_use": "When dealing with API authentication failures across multiple services", "category": "comparative", "created_time": "2025-11-08 20:19:50", "modified_time": "2025-11-08 20:19:50", "generalized_query": "Handle cross-service authentication with fallback strategies", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "0a9599adc5b24c97860055fe17c47a67", "memory_type": "procedural", "when_to_use": "When interacting with Venmo APIs to manage transactions and comments", "content": "Ensure transaction IDs are valid and authorized before performing actions like commenting or liking. Verify API endpoint relationships between payment requests and transactions explicitly documented in the API docs.", "score": 0, "time_created": "2025-11-08 20:20:00", "time_modified": "2025-11-08 20:20:00", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Add a comment, 'Thank you!', to all the venmo payments I received from my coworkers in the last 5 days (including today), and like those payments.", "when_to_use": "When interacting with Venmo APIs to manage transactions and comments", "category": "failure", "created_time": "2025-11-08 20:20:00", "modified_time": "2025-11-08 20:20:00", "generalized_query": "Automate commenting and liking recent transactions from specific users on a payment platform", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "275269c1d94643f19cf79b2020e6c79e", "memory_type": "procedural", "when_to_use": "When executing multi-step API operations with potential failures", "content": "Implement error handling and response validation for all API calls to ensure reliability", "score": 0, "time_created": "2025-11-08 20:19:58", "time_modified": "2025-11-08 20:19:58", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Add a comment, \"Thank you!\", to all the venmo payments I received from my coworkers in the last 5 days (including today), and like those payments.", "when_to_use": "When executing multi-step API operations with potential failures", "category": "failure", "created_time": "2025-11-08 20:19:58", "modified_time": "2025-11-08 20:19:58", "generalized_query": "Execute sequential API operations with error handling", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "66f085efdc124195b9052efe3bbb2f7e", "memory_type": "procedural", "when_to_use": "When interacting with APIs that require authentication tokens for operations like liking or commenting on transactions", "content": "Always verify API endpoint requirements explicitly, including mandatory parameters like access tokens, and ensure correct data structure handling to avoid runtime errors", "score": 0, "time_created": "2025-11-08 20:20:25", "time_modified": "2025-11-08 20:20:25", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Add a comment, \"Thanks!\", to all the venmo payments I received from my friends in the last 7 days (including today), and like those payments.", "when_to_use": "When interacting with APIs that require authentication tokens for operations like liking or commenting on transactions", "category": "failure", "created_time": "2025-11-08 20:20:25", "modified_time": "2025-11-08 20:20:25", "generalized_query": "Perform actions (e.g., like, comment) on recent transactions from a specific service (e.g., Venmo) within a time frame", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "76d39ccc2d084d4db3dc9d45f6bc834b", "memory_type": "procedural", "when_to_use": "When retrieving paginated API results that require filtering by date ranges", "content": "Implement robust pagination handling with clear termination conditions and validate date formatting against API-specific datetime requirements", "score": 0, "time_created": "2025-11-08 20:20:25", "time_modified": "2025-11-08 20:20:25", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Add a comment, \"Thanks!\", to all the venmo payments I received from my friends in the last 7 days (including today), and like those payments.", "when_to_use": "When retrieving paginated API results that require filtering by date ranges", "category": "failure", "created_time": "2025-11-08 20:20:25", "modified_time": "2025-11-08 20:20:25", "generalized_query": "Filter and process paginated data across multiple API pages with temporal constraints", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "55088a11e4534e6db7e65bbba9592e1c", "memory_type": "procedural", "when_to_use": "When extracting sensitive information like passwords from secure storage", "content": "Use precise filtering conditions (e.g., account_name == 'venmo') and verify data structure before accessing nested fields to prevent type errors", "score": 0, "time_created": "2025-11-08 20:20:25", "time_modified": "2025-11-08 20:20:25", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Add a comment, 'Thanks!', to all the venmo payments I received from my friends in the last 7 days (including today), and like those payments.", "when_to_use": "When extracting sensitive information like passwords from secure storage", "category": "failure", "created_time": "2025-11-08 20:20:25", "modified_time": "2025-11-08 20:20:25", "generalized_query": "Retrieve credentials from a password manager to authenticate API access", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "4d7a42cbbcba4bad857a7f935be3e394", "memory_type": "procedural", "when_to_use": "When retrieving personalized recommendations from an API that requires pagination and requires aggregating results across multiple pages", "content": "Successfully retrieved Spotify recommendations by first authenticating with the account, then paginating through recommendation results using the show_recommendations API. Processed the results by extracting artist names and using a Counter to identify the most frequent artist. This approach ensures complete data collection through pagination and leverages Python's collections.Counter for efficient frequency analysis.", "score": 0, "time_created": "2025-11-08 20:20:21", "time_modified": "2025-11-08 20:20:21", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Name the artist most recommended to me on Spotify.", "when_to_use": "When retrieving personalized recommendations from an API that requires pagination and requires aggregating results across multiple pages", "category": "success", "created_time": "2025-11-08 20:20:21", "modified_time": "2025-11-08 20:20:21", "generalized_query": "Identify the top recommended entity from an API-based recommendation system", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "8c32072a8d2a4f37913b96bd99e54193", "memory_type": "procedural", "when_to_use": "When handling authentication-dependent API requests", "content": "Successfully implemented OAuth flow by first retrieving account credentials, then using them to obtain an access token through the login endpoint. This ensured proper authentication for subsequent API calls that require authorization headers or tokens.", "score": 0, "time_created": "2025-11-08 20:20:21", "time_modified": "2025-11-08 20:20:21", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Name the artist most recommended to me on Spotify.", "when_to_use": "When handling authentication-dependent API requests", "category": "success", "created_time": "2025-11-08 20:20:21", "modified_time": "2025-11-08 20:20:21", "generalized_query": "Access protected API resources requiring authentication", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "d7234329fd134c37b5153f024d2109e5", "memory_type": "procedural", "when_to_use": "When calculating weighted recommendations from multiple data sources", "content": "Use associative arrays to accumulate weighted scores rather than direct comparison of nested lists", "score": 0, "time_created": "2025-11-08 20:20:34", "time_modified": "2025-11-08 20:20:34", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Name the artist most recommended to me on Spotify.", "when_to_use": "When calculating weighted recommendations from multiple data sources", "category": "failure", "created_time": "2025-11-08 20:20:34", "modified_time": "2025-11-08 20:20:34", "generalized_query": "Aggregate recommendation scores across different data sources", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "a4ee25adbb4c46e3b1ba82ad98f83968", "memory_type": "procedural", "when_to_use": "When interacting with external APIs or systems to perform actions like commenting or liking transactions", "content": "Always verify API endpoint existence and authentication requirements before executing operations. Use pagination and proper filters to handle large datasets efficiently.", "score": 0, "time_created": "2025-11-08 20:20:31", "time_modified": "2025-11-08 20:20:31", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Add a comment, 'Thank you so much!', to all the venmo payments I received from my roommates in the last 10 days (including today), and like those payments.", "when_to_use": "When interacting with external APIs or systems to perform actions like commenting or liking transactions", "category": "failure", "created_time": "2025-11-08 20:20:31", "modified_time": "2025-11-08 20:20:31", "generalized_query": "Perform bulk actions (like/comments) on recent transactions from specific sources within a time frame", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "23b4c132033c4c429213bb73cd0a7145", "memory_type": "procedural", "when_to_use": "When handling API authentication for third-party services", "content": "Use existing account credentials from trusted sources (e.g., supervisor app) for authentication when direct API credentials are unavailable.", "score": 0, "time_created": "2025-11-08 20:20:31", "time_modified": "2025-11-08 20:20:31", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Add a comment, 'Thank you so much!', to all the venmo payments I received from my roommates in the last 10 days (including today), and like those payments.", "when_to_use": "When handling API authentication for third-party services", "category": "failure", "created_time": "2025-11-08 20:20:31", "modified_time": "2025-11-08 20:20:31", "generalized_query": "Authenticate and interact with a payment platform's API to modify transaction metadata", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "8be018e6ec024263a5ee669467fbc266", "memory_type": "procedural", "when_to_use": "When retrieving artist information from Spotify's API", "content": "Always verify API endpoint existence and response structure before accessing nested data fields", "score": 0, "time_created": "2025-11-08 20:20:41", "time_modified": "2025-11-08 20:20:41", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Name the artist least recommended to me on Spotify.", "when_to_use": "When retrieving artist information from Spotify's API", "category": "failure", "created_time": "2025-11-08 20:20:41", "modified_time": "2025-11-08 20:20:41", "generalized_query": "Identify an artist with minimal recommendation data from a music platform", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "d2656895d7ff4f3fb3a6fec59a58763a", "memory_type": "procedural", "when_to_use": "When analyzing recommendation bias in music platforms", "content": "The agent effectively used the platform's recommendation API to collect data, then applied statistical analysis to identify underrepresented artists. This demonstrates how to quantify recommendation bias by measuring artist exposure across recommendation results.", "score": 0, "time_created": "2025-11-08 20:20:41", "time_modified": "2025-11-08 20:20:41", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Name the artist least recommended to me on Spotify.", "when_to_use": "When analyzing recommendation bias in music platforms", "category": "success", "created_time": "2025-11-08 20:20:41", "modified_time": "2025-11-08 20:20:41", "generalized_query": "Analyze recommendation algorithm bias through artist exposure metrics", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "d59b555ce7bf45d19999a17f6e5dd1b9", "memory_type": "procedural", "when_to_use": "When accessing paginated API endpoints to retrieve large datasets like music recommendations", "content": "Successfully retrieved and processed Spotify recommendations by first authenticating with stored credentials, then using pagination to collect all pages of results. Aggregated artist data across recommendations to identify the most frequent collaborator", "score": 0, "time_created": "2025-11-08 20:20:53", "time_modified": "2025-11-08 20:20:53", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Name the artist most recommended to me on Spotify.", "when_to_use": "When accessing paginated API endpoints to retrieve large datasets like music recommendations", "category": "success", "created_time": "2025-11-08 20:20:53", "modified_time": "2025-11-08 20:20:53", "generalized_query": "Identify the most frequently recommended entity from an API-based recommendation system", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "3da8632a341b416fb8ae9a00a3313ddf", "memory_type": "procedural", "when_to_use": "When extracting data from nested API responses, especially when dealing with user-related fields like owner information.", "content": "Always verify the structure of API responses before accessing nested fields; use 'owner.name' instead of assuming 'owner_email' for user identification.", "score": 0, "time_created": "2025-11-08 20:20:55", "time_modified": "2025-11-08 20:20:55", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Name the artist most recommended to me on Spotify.", "when_to_use": "When extracting data from nested API responses, especially when dealing with user-related fields like owner information.", "category": "failure", "created_time": "2025-11-08 20:20:55", "modified_time": "2025-11-08 20:20:55", "generalized_query": "Determine a recommended artist based on playlist ownership and engagement metrics.", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "b6420a0272a94140875ab057a9f0dcb9", "memory_type": "procedural", "when_to_use": "When encountering KeyError exceptions during dictionary access.", "content": "Use defensive programming techniques like .get() or conditional checks before accessing nested keys, and validate data structures via inspection (e.g., print/inspect sample data).", "score": 0, "time_created": "2025-11-08 20:20:55", "time_modified": "2025-11-08 20:20:55", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Name the artist most recommended to me on Spotify.", "when_to_use": "When encountering KeyError exceptions during dictionary access.", "category": "failure", "created_time": "2025-11-08 20:20:55", "modified_time": "2025-11-08 20:20:55", "generalized_query": "Access nested dictionary fields safely to prevent runtime errors.", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "1567477fe48447aaa16abeb04aa7d458", "memory_type": "procedural", "when_to_use": "When accessing user accounts requiring authentication, especially with password management systems", "content": "Properly retrieve and validate credentials before API interactions. Use supervisor APIs to access stored credentials, handle pagination for large datasets, and combine data from playlists, song libraries, and album libraries to ensure comprehensive coverage. Filter and deduplicate data before processing.", "score": 0, "time_created": "2025-11-08 20:21:08", "time_modified": "2025-11-08 20:21:08", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "What is the title of the newest released song in my Spotify account from across my song, album and playlist libraries?", "when_to_use": "When accessing user accounts requiring authentication, especially with password management systems", "category": "success", "created_time": "2025-11-08 20:21:08", "modified_time": "2025-11-08 20:21:08", "generalized_query": "Identify the latest item in a user's media library across multiple data sources", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "9166c84222cc46b7b9d17aacd0372a19", "memory_type": "procedural", "when_to_use": "When needing to determine the most recent item in a time-sensitive dataset", "content": "Collect timestamp metadata (release_date) for all items, then use max() function with a custom key to identify the latest entry. Ensure consistent date formatting across all data sources for accurate comparisons.", "score": 0, "time_created": "2025-11-08 20:21:08", "time_modified": "2025-11-08 20:21:08", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "What is the title of the newest released song in my Spotify account...", "when_to_use": "When needing to determine the most recent item in a time-sensitive dataset", "category": "success", "created_time": "2025-11-08 20:21:08", "modified_time": "2025-11-08 20:21:08", "generalized_query": "Find the most recently released item in a collection of media assets", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "ef0ae4ce3b244c32a2dc455286442780", "memory_type": "procedural", "when_to_use": "When executing multi-step authentication workflows", "content": "Implement error handling for missing dependencies (like password stores) and verify credential availability before initiating authentication processes", "score": 0, "time_created": "2025-11-08 20:21:17", "time_modified": "2025-11-08 20:21:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "What is the title of the newest released song in my Spotify account from across my song, album and playlist libraries?", "when_to_use": "When executing multi-step authentication workflows", "category": "failure", "created_time": "2025-11-08 20:21:17", "modified_time": "2025-11-08 20:21:17", "generalized_query": "Authenticate and access protected resources across multiple systems", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "3938016562394e89a694aa245ea1cb04", "memory_type": "procedural", "when_to_use": "When creating payment requests based on shared expense notes", "content": "The higher-scoring approach successfully authenticated with Venmo and Simple Note APIs using access tokens, while the lower-scoring approach failed repeatedly due to missing authentication parameters. The higher approach systematically resolved API errors by: 1) Using proper authentication flow (login -> token acquisition), 2) Correctly identifying API endpoints (search_notes instead of get_note), 3) Structuring data processing with loops for payment requests.", "score": 0, "time_created": "2025-11-08 20:21:35", "time_modified": "2025-11-08 20:21:35", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Make payment requests for others with a description note \"Work Dinner\"", "when_to_use": "When creating payment requests based on shared expense notes", "category": "comparative", "created_time": "2025-11-08 20:21:35", "modified_time": "2025-11-08 20:21:35", "generalized_query": "Generate payment requests for unpaid expenses from a shared note", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "d62a42a25f2e4fc59681d1939af163da", "memory_type": "procedural", "when_to_use": "When handling API rate limits or authentication tokens", "content": "Implement token refresh mechanisms and monitor response headers for authorization status changes", "score": 0, "time_created": "2025-11-08 20:21:27", "time_modified": "2025-11-08 20:21:27", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Make payment requests for others with a description note \"Work Dinner\"", "when_to_use": "When handling API rate limits or authentication tokens", "category": "failure", "created_time": "2025-11-08 20:21:27", "modified_time": "2025-11-08 20:21:27", "generalized_query": "Access protected resources across multiple API endpoints", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "efc8878e5f104841b05e1b39322d78a0", "memory_type": "procedural", "when_to_use": "When retrieving data from multiple sources (e.g., songs, albums, playlists) to determine the oldest item", "content": "Always validate data structure integrity before accessing nested properties; use explicit checks for variable existence and correct data type handling", "score": 0, "time_created": "2025-11-08 20:21:33", "time_modified": "2025-11-08 20:21:33", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "What is the title of the oldest released song in my Spotify account from across my song, album and playlist libraries?", "when_to_use": "When retrieving data from multiple sources (e.g., songs, albums, playlists) to determine the oldest item", "category": "failure", "created_time": "2025-11-08 20:21:33", "modified_time": "2025-11-08 20:21:33", "generalized_query": "Identify the oldest item (song, album, or playlist) based on release/creation date across multiple data sources", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "7ce028f2f0bc4511a5d251114aaebe00", "memory_type": "procedural", "when_to_use": "When resolving ambiguous task queries that reference multiple data types", "content": "Implement explicit entity type filtering and maintain clear separation between different data categories during analysis", "score": 0, "time_created": "2025-11-08 20:21:33", "time_modified": "2025-11-08 20:21:33", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "What is the title of the oldest released song in my Spotify account from across my song, album and playlist libraries?", "when_to_use": "When resolving ambiguous task queries that reference multiple data types", "category": "failure", "created_time": "2025-11-08 20:21:33", "modified_time": "2025-11-08 20:21:33", "generalized_query": "Resolve ambiguous queries referencing multiple entity types with temporal criteria", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "c3af8a3bd3de4eefa96d42cdb873c388", "memory_type": "procedural", "when_to_use": "When processing collections with potential missing elements", "content": "Use defensive programming practices like checking for empty collections and handling edge cases before performing operations", "score": 0, "time_created": "2025-11-08 20:21:39", "time_modified": "2025-11-08 20:21:39", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "What is the title of the oldest released song in my Spotify account from across my song, album and playlist libraries?", "when_to_use": "When processing collections with potential missing elements", "category": "failure", "created_time": "2025-11-08 20:21:39", "modified_time": "2025-11-08 20:21:39", "generalized_query": "Find minimum/maximum values in collections with possible empty entries", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "f7bc3c70ff97412bb3fb59233f9e924a", "memory_type": "procedural", "when_to_use": "When attempting to retrieve music metadata from Spotify's API", "content": "Use the 'search_songs' API with sorting by release date to find the oldest song", "score": 0, "time_created": "2025-11-08 20:22:02", "time_modified": "2025-11-08 20:22:02", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "What is the title of the oldest released song in my Spotify account from across my song, album and playlist libraries?", "when_to_use": "When attempting to retrieve music metadata from Spotify's API", "category": "failure", "created_time": "2025-11-08 20:22:02", "modified_time": "2025-11-08 20:22:02", "generalized_query": "Identify the oldest song in a user's Spotify libraries", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "7dfcf04b5d654991944926c5e9863a88", "memory_type": "procedural", "when_to_use": "When encountering repeated API description retrieval", "content": "Avoid redundant API documentation queries; focus on actionable endpoints", "score": 0, "time_created": "2025-11-08 20:22:02", "time_modified": "2025-11-08 20:22:02", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "What is the title of the oldest released song in my Spotify account from across my song, album and playlist libraries?", "when_to_use": "When encountering repeated API description retrieval", "category": "failure", "created_time": "2025-11-08 20:22:02", "modified_time": "2025-11-08 20:22:02", "generalized_query": "Identify the oldest song in a user's Spotify libraries", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "cb70f9d2155541e890f38296fd4f6dd2", "memory_type": "procedural", "when_to_use": "When aggregating data from multiple sources with varying metadata fields", "content": "Always validate field existence before accessing nested properties and handle date format variability through standardized conversion routines", "score": 0, "time_created": "2025-11-08 20:21:12", "time_modified": "2025-11-08 20:21:12", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "What is the title of the oldest released song in my Spotify account from across my song, album and playlist libraries?", "when_to_use": "When aggregating data from multiple sources with varying metadata fields", "category": "failure", "created_time": "2025-11-08 20:21:12", "modified_time": "2025-11-08 20:21:12", "generalized_query": "Identify the oldest item in a collection across multiple data sources with inconsistent metadata", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "d4f6f11f1c974ffc962a3a972055a448", "memory_type": "procedural", "when_to_use": "When defining utility functions for repeated operations", "content": "Define reusable utility functions with proper scope and ensure all dependencies are explicitly declared and available in the execution context", "score": 0, "time_created": "2025-11-08 20:21:12", "time_modified": "2025-11-08 20:21:12", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "What is the title of the oldest released song in my Spotify account from across my song, album and playlist libraries?", "when_to_use": "When defining utility functions for repeated operations", "category": "failure", "created_time": "2025-11-08 20:21:12", "modified_time": "2025-11-08 20:21:12", "generalized_query": "Perform repetitive data processing tasks across multiple data sources", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "7128f4c4113a4d41ac3c524b53ef8165", "memory_type": "procedural", "when_to_use": "When handling note-based expense tracking with Venmo integration", "content": "The higher-scoring approach succeeded by systematically addressing authentication requirements first, using the correct 'search_notes' API with proper access tokens, and implementing data cleaning (removing $ symbols) before numerical processing. The lower-scoring approach failed due to incorrect API assumptions, missing authentication steps, and improper error handling for currency formatting.", "score": 0, "time_created": "2025-11-08 20:21:59", "time_modified": "2025-11-08 20:21:59", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Make payment requests for others with a description note \"Friends Dinner\"", "when_to_use": "When handling note-based expense tracking with Venmo integration", "category": "comparative", "created_time": "2025-11-08 20:21:59", "modified_time": "2025-11-08 20:21:59", "generalized_query": "Generate payment requests based on expense splits from a shared note", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "1d1d32d8c5a545e1b9a23d5b9dc1f108", "memory_type": "procedural", "when_to_use": "When interacting with an API to retrieve or modify data", "content": "Always verify the existence of API methods before invocation and cross-reference documentation to avoid 'No API found' errors", "score": 0, "time_created": "2025-11-08 20:22:02", "time_modified": "2025-11-08 20:22:02", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I went on a dinner with some of my friends yesterday. I paid the entire bill to simplify the payment. I've made a note of individual shares in simple note. Some people have already sent me their share on venmo. Make payment requests for others with a description note 'Friends Dinner'.", "when_to_use": "When interacting with an API to retrieve or modify data", "category": "failure", "created_time": "2025-11-08 20:22:02", "modified_time": "2025-11-08 20:22:02", "generalized_query": "Retrieve and process shared expenses from a note to create payment requests for unpaid individuals", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "01dcc9b8ccc0428eb42c3bae1740451a", "memory_type": "procedural", "when_to_use": "When handling credential management across multiple services", "content": "Use centralized credential management systems (e.g., supervisor app) to securely retrieve and validate service-specific passwords", "score": 0, "time_created": "2025-11-08 20:22:02", "time_modified": "2025-11-08 20:22:02", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Make payment requests for others with a description note 'Friends Dinner'", "when_to_use": "When handling credential management across multiple services", "category": "failure", "created_time": "2025-11-08 20:22:02", "modified_time": "2025-11-08 20:22:02", "generalized_query": "Access account credentials for third-party services", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "5453ffef1f1b41e9a1cda9a60f932f1a", "memory_type": "procedural", "when_to_use": "When processing notes with structured text entries (e.g., bullet points with arrows)", "content": "Always preprocess lines to remove leading formatting symbols (e.g., hyphens, asterisks) before splitting content fields", "score": 0, "time_created": "2025-11-08 20:22:04", "time_modified": "2025-11-08 20:22:04", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Make payment requests for others with a description note \"Dinner with Colleagues\"", "when_to_use": "When processing notes with structured text entries (e.g., bullet points with arrows)", "category": "failure", "created_time": "2025-11-08 20:22:04", "modified_time": "2025-11-08 20:22:04", "generalized_query": "Extract and process structured data from notes containing formatted entries", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "61625bd2cdc6405a94d221c345cb2846", "memory_type": "procedural", "when_to_use": "When creating payment requests for users based on shared notes", "content": "Always verify user existence and retrieve accurate contact information (e.g., email) before initiating payment requests, as assumed email formats may be invalid.", "score": 0, "time_created": "2025-11-08 20:22:18", "time_modified": "2025-11-08 20:22:18", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Make payment requests for others with a description note 'Dinner with Colleagues'", "when_to_use": "When creating payment requests for users based on shared notes", "category": "failure", "created_time": "2025-11-08 20:22:18", "modified_time": "2025-11-08 20:22:18", "generalized_query": "Generate payment requests for users based on expense-sharing notes", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "97f6b04ba43b4b15a839d32c84462b42", "memory_type": "procedural", "when_to_use": "When accessing protected APIs requiring authentication", "content": "Ensure access tokens are included in API requests and validated for scope/permissions to avoid 401 Unauthorized errors.", "score": 0, "time_created": "2025-11-08 20:22:18", "time_modified": "2025-11-08 20:22:18", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Show detailed information of a note, including its content", "when_to_use": "When accessing protected APIs requiring authentication", "category": "failure", "created_time": "2025-11-08 20:22:18", "modified_time": "2025-11-08 20:22:18", "generalized_query": "Access restricted API endpoints that require valid authentication tokens", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "835e8b5c0689422c8c2ac9266acd9f2c", "memory_type": "procedural", "when_to_use": "When accessing external services requiring authentication, such as Venmo or phone apps, to retrieve user data", "content": "Always validate authentication tokens before making API calls and ensure proper error handling for credential failures. Use pagination parameters cautiously to avoid infinite loops.", "score": 0, "time_created": "2025-11-08 20:22:21", "time_modified": "2025-11-08 20:22:21", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "How much money have I sent to my roommates on venmo since 1st Jan of this year?", "when_to_use": "When accessing external services requiring authentication, such as Venmo or phone apps, to retrieve user data", "category": "failure", "created_time": "2025-11-08 20:22:21", "modified_time": "2025-11-08 20:22:21", "generalized_query": "Retrieve transaction history between user and specific contacts within a date range", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "daa2b8231e554d88b2c3699fdb32326c", "memory_type": "procedural", "when_to_use": "When extracting sensitive information like passwords from stored credentials", "content": "Use list comprehensions correctly to extract specific values and verify credentials immediately after retrieval. Avoid assuming password formats.", "score": 0, "time_created": "2025-11-08 20:22:21", "time_modified": "2025-11-08 20:22:21", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "How much money have I sent to my roommates on venmo since 1st Jan of this year?", "when_to_use": "When extracting sensitive information like passwords from stored credentials", "category": "failure", "created_time": "2025-11-08 20:22:21", "modified_time": "2025-11-08 20:22:21", "generalized_query": "Access stored credentials to authenticate to third-party services", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "0aa8fe3f45254d248b06658099ead78f", "memory_type": "procedural", "when_to_use": "When retrieving transaction data from Venmo or similar platforms", "content": "Always validate and apply recipient-specific filters (e.g., coworker emails) when querying transaction data, not just direction (received). Misinterpreting 'to coworkers' as mere 'received' transactions leads to inaccurate results.", "score": 0, "time_created": "2025-11-08 20:22:46", "time_modified": "2025-11-08 20:22:46", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "How much money have I received to my coworkers on venmo since 1st Feb of this year?", "when_to_use": "When retrieving transaction data from Venmo or similar platforms", "category": "failure", "created_time": "2025-11-08 20:22:46", "modified_time": "2025-11-08 20:22:46", "generalized_query": "Calculate total received funds from specific recipients within a date range", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "e674e9be83914a079ed3e99278dceeb8", "memory_type": "procedural", "when_to_use": "When handling API responses with pagination", "content": "Implement robust pagination termination logic to avoid infinite loops. Ensure the API endpoint supports proper pagination parameters (e.g., page_index, page_limit) and validate when to stop fetching pages.", "score": 0, "time_created": "2025-11-08 20:22:46", "time_modified": "2025-11-08 20:22:46", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "How much money have I received to my coworkers on venmo since 1st Feb of this year?", "when_to_use": "When handling API responses with pagination", "category": "failure", "created_time": "2025-11-08 20:22:46", "modified_time": "2025-11-08 20:22:46", "generalized_query": "Aggregate data across paginated API responses", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "b5d9afc98e8d4641a92a34b42bf42125", "memory_type": "procedural", "when_to_use": "When extracting sensitive credentials from secure sources", "content": "Use targeted queries (e.g., exact account_name) and avoid list comprehensions that may inadvertently select incorrect credentials. Validate credential authenticity before usage.", "score": 0, "time_created": "2025-11-08 20:22:46", "time_modified": "2025-11-08 20:22:46", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "How much money have I received to my coworkers on venmo since 1st Feb of this year?", "when_to_use": "When extracting sensitive credentials from secure sources", "category": "failure", "created_time": "2025-11-08 20:22:46", "modified_time": "2025-11-08 20:22:46", "generalized_query": "Access application credentials securely", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "070298d07dac4d1a8e225d6d44b107d4", "memory_type": "procedural", "when_to_use": "When accessing third-party APIs with rate limits or parameter constraints", "content": "Always validate API parameter constraints (e.g., page_limit ≤ 20) and verify credentials for each service independently rather than reusing credentials across unrelated systems", "score": 0, "time_created": "2025-11-08 20:22:43", "time_modified": "2025-11-08 20:22:43", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "How much money have I sent or received to my roommates on venmo since 1st Mar of this year?", "when_to_use": "When accessing third-party APIs with rate limits or parameter constraints", "category": "failure", "created_time": "2025-11-08 20:22:43", "modified_time": "2025-11-08 20:22:43", "generalized_query": "Retrieve transaction history between specific users within a date range across a financial platform", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "3fe7762286d849cc878a5060ea902fd4", "memory_type": "procedural", "when_to_use": "When retrieving transaction data from APIs with date ranges and recipient filters", "content": "Always verify API parameters for direction (sent/received) and recipient filtering when analyzing transaction history", "score": 0, "time_created": "2025-11-08 20:22:39", "time_modified": "2025-11-08 20:22:39", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "How much money have I sent or received to my roommates on venmo since 1st Mar of this year?", "when_to_use": "When retrieving transaction data from APIs with date ranges and recipient filters", "category": "failure", "created_time": "2025-11-08 20:22:39", "modified_time": "2025-11-08 20:22:39", "generalized_query": "Calculate total monetary transactions with specific recipients within a date range", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "741e7f1042db462eb61ccb0d3d05dfec", "memory_type": "procedural", "when_to_use": "When handling boolean outputs from list comprehensions", "content": "Use conditional filters with list comprehensions to avoid type errors when accessing nested data", "score": 0, "time_created": "2025-11-08 20:22:39", "time_modified": "2025-11-08 20:22:39", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "How much money have I sent or received to my roommates on venmo since 1st Mar of this year?", "when_to_use": "When handling boolean outputs from list comprehensions", "category": "failure", "created_time": "2025-11-08 20:22:39", "modified_time": "2025-11-08 20:22:39", "generalized_query": "Extract specific values from structured data formats", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "1ddc1130a25548b18ce604b7df5a378f", "memory_type": "procedural", "when_to_use": "When retrieving data from APIs, especially nested structures like song details", "content": "Always validate the structure of API responses before accessing nested fields to avoid KeyError. Verify field names (e.g., 'artists' vs. 'artist') and ensure data types align with expected formats.", "score": 0, "time_created": "2025-11-08 20:22:57", "time_modified": "2025-11-08 20:22:57", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Follow all artists of all classical-genre songs in any of my playlists on Spotify", "when_to_use": "When retrieving data from APIs, especially nested structures like song details", "category": "failure", "created_time": "2025-11-08 20:22:57", "modified_time": "2025-11-08 20:22:57", "generalized_query": "Identify and process specific data fields from nested API responses", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "23c3110a9e054cc28fa0099574888358", "memory_type": "procedural", "when_to_use": "When submitting results to external systems via API", "content": "Convert non-serializable data types (e.g., sets) to JSON-compatible formats (e.g., lists) before passing them to API endpoints. Validate expected data types in the target system's documentation.", "score": 0, "time_created": "2025-11-08 20:22:57", "time_modified": "2025-11-08 20:22:57", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Follow all artists of all classical-genre songs in any of my playlists on Spotify", "when_to_use": "When submitting results to external systems via API", "category": "failure", "created_time": "2025-11-08 20:22:57", "modified_time": "2025-11-08 20:22:57", "generalized_query": "Serialize data for API submission while maintaining compatibility", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "b1def4bd99e7418d9b4df3bad76916bc", "memory_type": "procedural", "when_to_use": "When interacting with an API that requires dynamic endpoint validation", "content": "Before making API calls, validate endpoint existence using API documentation tools. When encountering 'No API found' errors, systematically check the app's API list and replace invalid method names with correct ones. This ensures compatibility with the actual API surface.", "score": 0, "time_created": "2025-11-08 20:23:04", "time_modified": "2025-11-08 20:23:04", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Follow all artists of all reggae-genre songs in any of my playlists on Spotify", "when_to_use": "When interacting with an API that requires dynamic endpoint validation", "category": "success", "created_time": "2025-11-08 20:23:04", "modified_time": "2025-11-08 20:23:04", "generalized_query": "Follow artists of songs matching a specific genre across all playlists", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "89f79e92ea9a42818aac3fd47506ff26", "memory_type": "procedural", "when_to_use": "When performing bulk operations requiring valid authentication", "content": "Implement token refresh mechanisms when encountering 401 errors. Structure workflows to re-authenticate and re-execute critical operations when session tokens expire, ensuring uninterrupted execution of multi-step processes.", "score": 0, "time_created": "2025-11-08 20:23:04", "time_modified": "2025-11-08 20:23:04", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Follow all artists of all reggae-genre songs in any of my playlists on Spotify", "when_to_use": "When performing bulk operations requiring valid authentication", "category": "success", "created_time": "2025-11-08 20:23:04", "modified_time": "2025-11-08 20:23:04", "generalized_query": "Execute multiple API requests requiring continuous authentication", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "337d70f779c5487386fce78a1521bd5a", "memory_type": "procedural", "when_to_use": "When submitting final results, ensure output format matches expected type constraints", "content": "Convert non-serializable data types (sets) to acceptable formats (strings/lists) before task completion", "score": 0, "time_created": "2025-11-08 20:23:14", "time_modified": "2025-11-08 20:23:14", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Follow all artists of all reggae-genre songs in any of my playlists on Spotify", "when_to_use": "When submitting final results, ensure output format matches expected type constraints", "category": "failure", "created_time": "2025-11-08 20:23:14", "modified_time": "2025-11-08 20:23:14", "generalized_query": "Provide curated artist lists from music metadata", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "962a5c416fe1487b942a65e2c1f67096", "memory_type": "procedural", "when_to_use": "When retrieving artist data from Spotify's API based on genre filters", "content": "The higher-scoring approach succeeded by: 1) Correctly mapping API fields (using 'genre' instead of 'genres'), 2) Validating API existence before calls (using 'show_artist' instead of non-existent 'get_artist_details'), 3) Handling token expiration proactively, and 4) Converting sets to lists for JSON serialization. These steps avoided KeyErrors, API call failures, and format mismatches that caused the lower-scoring approach to fail.", "score": 0, "time_created": "2025-11-08 20:23:16", "time_modified": "2025-11-08 20:23:16", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Follow all artists of all reggae-genre songs in any of my playlists on Spotify.", "when_to_use": "When retrieving artist data from Spotify's API based on genre filters", "category": "comparative", "created_time": "2025-11-08 20:23:16", "modified_time": "2025-11-08 20:23:16", "generalized_query": "Identify and follow artists associated with specific genres across user playlists", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "c43f309587b64b4bb097c30475e483a5", "memory_type": "procedural", "when_to_use": "When accessing file system APIs to retrieve or process files", "content": "Always verify API existence and documentation before making calls, and implement proper authentication handling for restricted endpoints", "score": 0, "time_created": "2025-11-08 20:23:34", "time_modified": "2025-11-08 20:23:34", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "What is the total cost of my internet bills for this year? The bills are in '~/bills/' directory of my file system.", "when_to_use": "When accessing file system APIs to retrieve or process files", "category": "failure", "created_time": "2025-11-08 20:23:34", "modified_time": "2025-11-08 20:23:34", "generalized_query": "Calculate total cost of specific bills stored in a directory structure", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "d5dd0a81beb44c4f9e46788f7932c9ff", "memory_type": "procedural", "when_to_use": "When accessing external systems or APIs to retrieve files or data", "content": "Always verify API existence and authentication requirements before attempting file system operations. Use proper credential retrieval workflows and validate file content parsing logic instead of assuming fixed values.", "score": 0, "time_created": "2025-11-08 20:23:29", "time_modified": "2025-11-08 20:23:29", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "What is the total cost of my electricity bills for this year? The bills are in '~/bills/' directory of my file system.", "when_to_use": "When accessing external systems or APIs to retrieve files or data", "category": "failure", "created_time": "2025-11-08 20:23:29", "modified_time": "2025-11-08 20:23:29", "generalized_query": "Calculate total cost of specific bills stored in a directory structure", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "a3e66b2c24124bbb8304199dffaaeefc", "memory_type": "procedural", "when_to_use": "When accessing external APIs or integrating third-party services", "content": "Always verify API method existence and parameter requirements before execution to avoid runtime errors", "score": 0, "time_created": "2025-11-08 20:23:23", "time_modified": "2025-11-08 20:23:23", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Follow all artists of all indie-genre songs in any of my playlists on Spotify", "when_to_use": "When accessing external APIs or integrating third-party services", "category": "failure", "created_time": "2025-11-08 20:23:23", "modified_time": "2025-11-08 20:23:23", "generalized_query": "Retrieve artist information from music data sources based on genre filters", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "4a654fb9487440f28c212f160f24ef02", "memory_type": "procedural", "when_to_use": "When submitting structured outputs to task supervisors", "content": "Validate output formats against expected data types (e.g., convert lists to strings for compatibility)", "score": 0, "time_created": "2025-11-08 20:23:23", "time_modified": "2025-11-08 20:23:23", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Follow all artists of all indie-genre songs in any of my playlists on Spotify", "when_to_use": "When submitting structured outputs to task supervisors", "category": "failure", "created_time": "2025-11-08 20:23:23", "modified_time": "2025-11-08 20:23:23", "generalized_query": "Format outputs according to system-specific validation rules", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "e16d854af6e245a9bab8f1b6652c044e", "memory_type": "procedural", "when_to_use": "When automating interactions with music platforms like Spotify to follow artists based on genre-specific criteria", "content": "The successful execution relied on: 1) Authenticating via password retrieval and token acquisition, 2) Systematically collecting song-artists relationships from playlists, 3) Filtering artists by genre through iterative API queries, 4) Applying bulk follow actions using direct API endpoints. The key pattern was chaining data aggregation (playlists → songs → artists) with targeted filtering and bulk operations.", "score": 0, "time_created": "2025-11-08 20:23:28", "time_modified": "2025-11-08 20:23:28", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Follow all artists of all indie-genre songs in any of my playlists on Spotify", "when_to_use": "When automating interactions with music platforms like Spotify to follow artists based on genre-specific criteria", "category": "success", "created_time": "2025-11-08 20:23:28", "modified_time": "2025-11-08 20:23:28", "generalized_query": "Follow artists associated with specific genres across user playlists", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "cd7ed3db57d94c5c9968929ffdba2c18", "memory_type": "procedural", "when_to_use": "When interacting with file systems via APIs, especially after encountering permission or authentication errors", "content": "Always verify API availability and authentication requirements before executing file operations. Use 'show_directory' instead of deprecated methods and ensure proper session management for authorized access.", "score": 0, "time_created": "2025-11-08 20:23:53", "time_modified": "2025-11-08 20:23:53", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "What is the total cost of my cable bills for this year? The bills are in '~/bills/' directory of my file system.", "when_to_use": "When interacting with file systems via APIs, especially after encountering permission or authentication errors", "category": "failure", "created_time": "2025-11-08 20:23:53", "modified_time": "2025-11-08 20:23:53", "generalized_query": "Access and process files in a specific directory to calculate total costs", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "2200da966080494bb51237f8982f5137", "memory_type": "procedural", "when_to_use": "When extracting credentials from password stores", "content": "Use iterative loops instead of list comprehensions for credential extraction when facing syntax limitations. Validate dictionary structures before accessing nested keys.", "score": 0, "time_created": "2025-11-08 20:23:53", "time_modified": "2025-11-08 20:23:53", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "What is the total cost of my cable bills for this year? The bills are in '~/bills/' directory of my file system.", "when_to_use": "When extracting credentials from password stores", "category": "failure", "created_time": "2025-11-08 20:23:53", "modified_time": "2025-11-08 20:23:53", "generalized_query": "Retrieve stored credentials for API authentication", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "bd39c4333f1744bc844f7d599d9a97c2", "memory_type": "procedural", "when_to_use": "When extracting numerical values from text-based file contents", "content": "Effective technique: 1) Using string splitting to locate target fields (e.g., 'Total Amount => '), 2) Implementing currency symbol removal ($), 3) Converting extracted strings to floating point numbers. This approach ensures reliable numerical extraction from formatted text content.", "score": 0, "time_created": "2025-11-08 20:23:56", "time_modified": "2025-11-08 20:23:56", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "What is the total cost of my cable bills for this year? The bills are in '~/bills/' directory of my file system.", "when_to_use": "When extracting numerical values from text-based file contents", "category": "success", "created_time": "2025-11-08 20:23:56", "modified_time": "2025-11-08 20:23:56", "generalized_query": "Summarize numerical data from text files", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "7678a54803a4489794a62f982db0265d", "memory_type": "procedural", "when_to_use": "When interacting with file systems via APIs, especially when handling directory operations", "content": "Always verify API parameter requirements (e.g., 'directory_path' vs 'path') and ensure proper authentication tokens are included in all requests", "score": 0, "time_created": "2025-11-08 20:24:15", "time_modified": "2025-11-08 20:24:15", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Arrange my '~/photographs/vacations/' directory by organizing the photos from three vacations...", "when_to_use": "When interacting with file systems via APIs, especially when handling directory operations", "category": "failure", "created_time": "2025-11-08 20:24:15", "modified_time": "2025-11-08 20:24:15", "generalized_query": "Organize files in a directory by categorizing them into subdirectories based on metadata patterns", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "fd923613740841ffa1d8cf26a934e74e", "memory_type": "procedural", "when_to_use": "When moving files between locations in a file system", "content": "Ensure source files exist and destination paths are valid files (with extensions) before initiating moves; use overwrite flags for existing files", "score": 0, "time_created": "2025-11-08 20:24:15", "time_modified": "2025-11-08 20:24:15", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Move files to their respective directories while maintaining original filenames", "when_to_use": "When moving files between locations in a file system", "category": "failure", "created_time": "2025-11-08 20:24:15", "modified_time": "2025-11-08 20:24:15", "generalized_query": "Transfer files between directories while preserving filename integrity", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "655bf6a4df4d4d049a8cd4f59c994bda", "memory_type": "procedural", "when_to_use": "When interacting with APIs that require authentication, especially in environments where header-based authorization is not supported.", "content": "Always verify API authentication requirements and parameter expectations by consulting the API documentation. Use designated authentication parameters (e.g., 'access_token') rather than relying on header-based authorization if the API does not support it.", "score": 0, "time_created": "2025-11-08 20:24:08", "time_modified": "2025-11-08 20:24:08", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Arrange my '~/photographs/vacations/' directory by organizing the photos from three vacations.", "when_to_use": "When interacting with APIs that require authentication, especially in environments where header-based authorization is not supported.", "category": "failure", "created_time": "2025-11-08 20:24:08", "modified_time": "2025-11-08 20:24:08", "generalized_query": "Organize files in a directory into subdirectories based on metadata or naming conventions.", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "94ee1d65d9e545ada320f9c4f0199a93", "memory_type": "procedural", "when_to_use": "When organizing files based on metadata like creation dates or directory structures", "content": "Always verify file existence and current location before performing move operations to avoid attempting to move non-existent or already relocated files.", "score": 0, "time_created": "2025-11-08 20:24:13", "time_modified": "2025-11-08 20:24:13", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Arrange my '~/photographs/vacations/' directory by organizing the photos from three vacations. The files created in February and March of this year correspond to Petra and Budapest, respectively, while the others are from Amsterdam. Move them into sub-directories named after their respective vacation spots, maintaining the original file names.", "when_to_use": "When organizing files based on metadata like creation dates or directory structures", "category": "failure", "created_time": "2025-11-08 20:24:13", "modified_time": "2025-11-08 20:24:13", "generalized_query": "Organize files in a directory into subdirectories based on metadata (e.g., creation date) and specific criteria (e.g., month, location).", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "b1b43ff356ef4e53a793d2a0719e3956", "memory_type": "procedural", "when_to_use": "When working with restricted APIs that do not allow standard OS modules", "content": "Rely exclusively on the allowed APIs for file operations and avoid using prohibited modules like 'os' to prevent runtime errors.", "score": 0, "time_created": "2025-11-08 20:24:13", "time_modified": "2025-11-08 20:24:13", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Arrange my '~/photographs/vacations/' directory by organizing the photos from three vacations...", "when_to_use": "When working with restricted APIs that do not allow standard OS modules", "category": "failure", "created_time": "2025-11-08 20:24:13", "modified_time": "2025-11-08 20:24:13", "generalized_query": "Perform file operations in an environment where standard OS modules (e.g., os, shutil) are restricted.", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "b46537514b4c49099fb40a581bc42b40", "memory_type": "procedural", "when_to_use": "When organizing files based on metadata-driven categorization (e.g., dates, creation times)", "content": "Successful execution relied on: 1) Authenticating via supervisor app to obtain file system access token, 2) Using file metadata (creation_date) instead of filename patterns for accurate date parsing, 3) Mapping parsed dates to vacation locations with explicit year validation, 4) Leveraging API-specific parameters (access_token, overwrite flags) for file operations", "score": 0, "time_created": "2025-11-08 20:24:19", "time_modified": "2025-11-08 20:24:19", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Arrange my '~/photographs/vacations/' directory by organizing the photos from three vacations. The files created in January and April of this year correspond to Athens and Seoul, respectively, while the others are from Paris. Move them into sub-directories named after their respective vacation spots, maintaining the original file names.", "when_to_use": "When organizing files based on metadata-driven categorization (e.g., dates, creation times)", "category": "success", "created_time": "2025-11-08 20:24:19", "modified_time": "2025-11-08 20:24:19", "generalized_query": "Categorize and relocate files into destination-specific directories based on metadata (e.g., creation dates) and predefined mappings", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "3c02c278dfb64562b10777681fd820af", "memory_type": "procedural", "when_to_use": "When dealing with API rate limiting or authentication requirements", "content": "Critical success factors included: 1) Using supervisor app to retrieve credentials programmatically, 2) Validating API responses for authentication status, 3) Including access_token parameter in all API requests, 4) Implementing error handling for 401/422 responses through iterative debugging", "score": 0, "time_created": "2025-11-08 20:24:19", "time_modified": "2025-11-08 20:24:19", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Arrange my '~/photographs/vacations/' directory...", "when_to_use": "When dealing with API rate limiting or authentication requirements", "category": "success", "created_time": "2025-11-08 20:24:19", "modified_time": "2025-11-08 20:24:19", "generalized_query": "Perform file operations in an environment with API authentication requirements", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "5a903c0b83b54c47a5f153c292ec65a0", "memory_type": "procedural", "when_to_use": "When filtering songs based on release year in Spotify", "content": "The higher-scoring approach succeeded by accurately identifying release years via the 'show_song' API instead of relying on flawed 'added_at' timestamps. It implemented robust validation (checking song ID existence, type conversion) and handled pagination properly, whereas the lower-scoring approach used incorrect metadata fields and lacked error mitigation for incomplete data.", "score": 0, "time_created": "2025-11-08 20:24:57", "time_modified": "2025-11-08 20:24:57", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Remove all songs from my Spotify song library and playlists that were released after 2021 year.", "when_to_use": "When filtering songs based on release year in Spotify", "category": "comparative", "created_time": "2025-11-08 20:24:57", "modified_time": "2025-11-08 20:24:57", "generalized_query": "Filter and remove media items older than a specific date from a digital library and associated collections", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "949f213b9b3b4449a09bb43a956a4e6b", "memory_type": "procedural", "when_to_use": "When performing actions that require API task completion after processing", "content": "Always use proper API completion functions instead of print statements for task termination. Verify syntax validity for all executable lines, especially in final steps.", "score": 0, "time_created": "2025-11-08 20:24:48", "time_modified": "2025-11-08 20:24:48", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Remove all songs from my Spotify song library and playlists that were released after 2021 year.", "when_to_use": "When performing actions that require API task completion after processing", "category": "failure", "created_time": "2025-11-08 20:24:48", "modified_time": "2025-11-08 20:24:48", "generalized_query": "Remove items from a music library and associated playlists based on release date criteria", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "14a8a6afe3fd44069b0a2806318c36b1", "memory_type": "procedural", "when_to_use": "When handling date-based filtering operations", "content": "Use string splitting and numeric comparison carefully for date fields. Validate date formats before performing comparisons.", "score": 0, "time_created": "2025-11-08 20:24:48", "time_modified": "2025-11-08 20:24:48", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Remove all songs from my Spotify song library and playlists that were released after 2021 year.", "when_to_use": "When handling date-based filtering operations", "category": "failure", "created_time": "2025-11-08 20:24:48", "modified_time": "2025-11-08 20:24:48", "generalized_query": "Filter and remove elements based on temporal criteria", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "33039a9992a54edbb4beea770b6c17a2", "memory_type": "procedural", "when_to_use": "When filtering songs based on release dates in Spotify", "content": "The higher-scoring approach succeeded by: 1) Correctly identifying the 'show_song_library' API for song retrieval, 2) Using 'release_date' from song details rather than 'added_at' for accurate filtering, 3) Implementing nested API calls to get song metadata for precise date validation. The lower-scoring approach failed due to incorrect field assumptions ('added_at') and persistent syntax errors in task completion.", "score": 0, "time_created": "2025-11-08 20:24:49", "time_modified": "2025-11-08 20:24:49", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Remove all songs from my Spotify song library and playlists that were released before 2021 year.", "when_to_use": "When filtering songs based on release dates in Spotify", "category": "comparative", "created_time": "2025-11-08 20:24:49", "modified_time": "2025-11-08 20:24:49", "generalized_query": "Filter and remove music library items based on release date criteria", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "2b96f6f6ecaf4a11aafa1ab5ab3e4256", "memory_type": "procedural", "when_to_use": "When handling dynamic API responses with missing fields", "content": "The higher-scoring approach demonstrated resilience by: 1) Verifying field existence through API documentation, 2) Dynamically adapting to schema changes (e.g., using 'release_date' instead of 'release_year'), 3) Implementing fallback mechanisms for data parsing. The lower-scoring approach failed due to rigid assumptions about data structure and lack of schema validation.", "score": 0, "time_created": "2025-11-08 20:24:49", "time_modified": "2025-11-08 20:24:49", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Remove all songs from my Spotify song library and playlists that were released before 2021 year.", "when_to_use": "When handling dynamic API responses with missing fields", "category": "comparative", "created_time": "2025-11-08 20:24:49", "modified_time": "2025-11-08 20:24:49", "generalized_query": "Process API data with evolving schema requirements", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "dcb67fe761154690871b251ff102a539", "memory_type": "procedural", "when_to_use": "When implementing task completion in automation workflows", "content": "Ensure completion functions receive proper parameters (e.g., operation results) and handle edge cases like empty result sets gracefully", "score": 0, "time_created": "2025-11-08 20:25:01", "time_modified": "2025-11-08 20:25:01", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Remove all songs from my Spotify song library and playlists that were released before 2021 year.", "when_to_use": "When implementing task completion in automation workflows", "category": "failure", "created_time": "2025-11-08 20:25:01", "modified_time": "2025-11-08 20:25:01", "generalized_query": "Execute final task completion in automated processes", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "5399d03889f049d08e60235f92156f0c", "memory_type": "procedural", "when_to_use": "When filtering items in a music library based on release dates or other metadata not directly available in initial listings", "content": "Successfully removed old songs by first verifying available APIs, then using nested API calls to access detailed metadata (e.g., release_date) when required. Key steps included: 1) Using show_song_library instead of non-existent show_songs API 2) Fetching song details via show_song() to extract release_year from release_date 3) Accessing playlist songs through show_playlist() rather than direct show_playlist_songs() 4) Implementing pagination for both songs and playlists", "score": 0, "time_created": "2025-11-08 20:25:00", "time_modified": "2025-11-08 20:25:00", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Remove all songs from my Spotify song library and playlists that were released in or before 2021 year.", "when_to_use": "When filtering items in a music library based on release dates or other metadata not directly available in initial listings", "category": "success", "created_time": "2025-11-08 20:25:00", "modified_time": "2025-11-08 20:25:00", "generalized_query": "Filter and remove items from a music library based on metadata criteria such as release dates", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "3f9010057f274856812f0527faaaf455", "memory_type": "procedural", "when_to_use": "When handling pagination in API requests for large datasets", "content": "Implement robust pagination handling with error recovery when fetching large datasets, as incomplete pages may lead to missed items during filtering operations.", "score": 0, "time_created": "2025-11-08 20:25:16", "time_modified": "2025-11-08 20:25:16", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Remove all songs from my Spotify song library and playlists that were released in or before 2021 year.", "when_to_use": "When handling pagination in API requests for large datasets", "category": "failure", "created_time": "2025-11-08 20:25:16", "modified_time": "2025-11-08 20:25:16", "generalized_query": "Process paginated API responses for bulk operations", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "bb3028b4f08a4ae58014b657e12458f9", "memory_type": "procedural", "when_to_use": "When interacting with external APIs to retrieve or manipulate data", "content": "Always verify API existence and structure before making calls; use defensive programming to handle missing keys/attributes in responses", "score": 0, "time_created": "2025-11-08 20:25:13", "time_modified": "2025-11-08 20:25:13", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Start playing a playlist on Spotify that has enough songs for my workout today. I do not want to have to change the playlist in the middle of my workout. The workout plan is in Simple Note.", "when_to_use": "When interacting with external APIs to retrieve or manipulate data", "category": "failure", "created_time": "2025-11-08 20:25:13", "modified_time": "2025-11-08 20:25:13", "generalized_query": "Retrieve and execute a pre-defined plan from a notes app to control a music streaming service", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "ee8270c89d2245b18b4fb216f47f88da", "memory_type": "procedural", "when_to_use": "When accessing sensitive credentials or tokens", "content": "Implement secure credential retrieval patterns using supervised account password stores and avoid hardcoding credentials", "score": 0, "time_created": "2025-11-08 20:25:13", "time_modified": "2025-11-08 20:25:13", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Start playing a playlist on Spotify that has enough songs for my workout today...", "when_to_use": "When accessing sensitive credentials or tokens", "category": "failure", "created_time": "2025-11-08 20:25:13", "modified_time": "2025-11-08 20:25:13", "generalized_query": "Access application credentials across multiple services for automation", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "e1057cb423b644f88968ad00e9c10435", "memory_type": "procedural", "when_to_use": "When integrating multiple APIs for task automation", "content": "The higher-scoring approach succeeded by systematically handling authentication, validating API tokens, and using precise API methods. It first retrieved the workout plan from Simple Note, calculated required duration, and then found a matching Spotify playlist. The lower-scoring approach failed due to improper token handling, incorrect API method calls, and lack of error recovery for authentication failures.", "score": 0, "time_created": "2025-11-08 20:25:41", "time_modified": "2025-11-08 20:25:41", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Start playing a playlist on Spotify that has enough songs for my workout today. I do not want to have to change the playlist in the middle of my workout. The workout plan is in Simple Note.", "when_to_use": "When integrating multiple APIs for task automation", "category": "comparative", "created_time": "2025-11-08 20:25:41", "modified_time": "2025-11-08 20:25:41", "generalized_query": "Automate playlist playback based on external workout data", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "285461208d764bc79c2bd16c7ca9a803", "memory_type": "procedural", "when_to_use": "When interacting with external APIs requiring authentication", "content": "Always verify API endpoint existence and validate authentication tokens before making requests to avoid 401 Unauthorized errors", "score": 0, "time_created": "2025-11-08 20:25:51", "time_modified": "2025-11-08 20:25:51", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Start playing a playlist on Spotify that has enough songs for my workout today. I do not want to have to change the playlist in the middle of my workout. The workout plan is in Simple Note.", "when_to_use": "When interacting with external APIs requiring authentication", "category": "failure", "created_time": "2025-11-08 20:25:51", "modified_time": "2025-11-08 20:25:51", "generalized_query": "Automate playlist creation across services using data from external notes", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "2dc371e46dd84fa5b509da572e1a9442", "memory_type": "procedural", "when_to_use": "When interacting with external APIs to retrieve or manipulate data (e.g., notes, playlists)", "content": "Always verify API method existence and parameter requirements before invocation, and handle authentication contextually rather than hardcoding credentials", "score": 0, "time_created": "2025-11-08 20:25:46", "time_modified": "2025-11-08 20:25:46", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Start playing a playlist on Spotify that has enough songs for my workout today. I do not want to have to change the playlist in the middle of my workout. The workout plan is in Simple Note.", "when_to_use": "When interacting with external APIs to retrieve or manipulate data (e.g., notes, playlists)", "category": "failure", "created_time": "2025-11-08 20:25:46", "modified_time": "2025-11-08 20:25:46", "generalized_query": "Automate creation and playback of a curated playlist based on a structured plan stored in a notes app", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "2e31be5ac69c4eabbbd10116f98c4650", "memory_type": "procedural", "when_to_use": "When filtering items based on multiple criteria (e.g., liked and downloaded status) in a library cleanup task", "content": "The higher-scoring approach used set operations for efficient membership testing (O(1) lookup) instead of nested loops (O(n^2)), enabling faster validation of song/album eligibility. This allowed the system to handle empty result sets gracefully and proceed to the next logical step (album validation) without blocking progress.", "score": 0, "time_created": "2025-11-08 20:26:02", "time_modified": "2025-11-08 20:26:02", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Keep only those songs and albums in my song and album library, respectively, that I have liked and downloaded", "when_to_use": "When filtering items based on multiple criteria (e.g., liked and downloaded status) in a library cleanup task", "category": "comparative", "created_time": "2025-11-08 20:26:02", "modified_time": "2025-11-08 20:26:02", "generalized_query": "Filter library items based on combined criteria of user preference and download status", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "8c6d00ad955c42ecb3b25ea8754b66f5", "memory_type": "procedural", "when_to_use": "When implementing conditional removal operations in API workflows", "content": "Validate the existence of target items before invoking removal operations to prevent API method errors", "score": 0, "time_created": "2025-11-08 20:26:02", "time_modified": "2025-11-08 20:26:02", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Remove songs and albums that are not liked and downloaded", "when_to_use": "When implementing conditional removal operations in API workflows", "category": "failure", "created_time": "2025-11-08 20:26:02", "modified_time": "2025-11-08 20:26:02", "generalized_query": "Conditional removal of items based on multiple validation criteria", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "606998c3c99e4b89af8b9514c1454c1e", "memory_type": "procedural", "when_to_use": "When interacting with file systems via APIs that require authentication", "content": "Always verify API endpoint requirements for parameters like directory paths and authentication tokens. Use absolute paths instead of tilde expansions and ensure proper token inclusion in all requests", "score": 0, "time_created": "2025-11-08 20:26:31", "time_modified": "2025-11-08 20:26:31", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Compress ~/photographs/vacations/ directories into ZIP files and delete original directories", "when_to_use": "When interacting with file systems via APIs that require authentication", "category": "failure", "created_time": "2025-11-08 20:26:31", "modified_time": "2025-11-08 20:26:31", "generalized_query": "Compress specific directories into archives and clean up original folders using file system APIs", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "58be10c439d645098dba77a7e7052f2f", "memory_type": "procedural", "when_to_use": "When dealing with nested directory structures and file compression tasks", "content": "Effective pattern: 1) Identify target directories via recursive listing and filtering 2) Generate output paths based on directory names 3) Use API-specific parameters (like overwrite=True) to handle edge cases 4) Perform cleanup after successful compression. This approach ensures atomic operations and maintains data integrity.", "score": 0, "time_created": "2025-11-08 20:26:33", "time_modified": "2025-11-08 20:26:33", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Compress ~/photographs/vacations/ sub-directories into ZIP files and delete original directories", "when_to_use": "When dealing with nested directory structures and file compression tasks", "category": "success", "created_time": "2025-11-08 20:26:33", "modified_time": "2025-11-08 20:26:33", "generalized_query": "Archive named subdirectories into format-specific containers while maintaining directory structure integrity", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "b10fc00e66894b74b41c879871b75a07", "memory_type": "procedural", "when_to_use": "When filtering items based on user interaction metrics (likes/downloads) in a library cleanup task", "content": "The higher-scoring approach used set-based lookups for O(1) membership testing, properly handled nested data structures for album validation, and avoided data type mismatches. The lower-scoring approach failed due to incorrect assumptions about data structures (e.g., using 'playlist_id' instead of song relationships) and improper error handling for invalid operations.", "score": 0, "time_created": "2025-11-08 20:26:36", "time_modified": "2025-11-08 20:26:36", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Keep only those songs and albums in my song and album library, respectively, that I have liked or downloaded, and remove the rest.", "when_to_use": "When filtering items based on user interaction metrics (likes/downloads) in a library cleanup task", "category": "comparative", "created_time": "2025-11-08 20:26:36", "modified_time": "2025-11-08 20:26:36", "generalized_query": "Filter library items based on user interaction criteria (e.g., likes, downloads) while maintaining relationship constraints (e.g., albums requiring all songs to meet criteria)", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "be447b395bc8433a936efdefe6a1e817", "memory_type": "procedural", "when_to_use": "When dealing with API responses that may contain unexpected data types or structures.", "content": "Implement type-checking and structure validation (e.g., verifying dictionary keys) for all API responses before using their contents in computations.", "score": 0, "time_created": "2025-11-08 20:26:30", "time_modified": "2025-11-08 20:26:30", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Keep only songs and albums I have liked or downloaded in Spotify, removing the rest.", "when_to_use": "When dealing with API responses that may contain unexpected data types or structures.", "category": "failure", "created_time": "2025-11-08 20:26:30", "modified_time": "2025-11-08 20:26:30", "generalized_query": "Process API-derived data with type-aware validation to prevent runtime errors.", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "a0b8cd0187a34210b75a10f5ec04105c", "memory_type": "procedural", "when_to_use": "When performing library cleanup tasks on Spotify", "content": "Use 'remove_song_from_library' and 'remove_album_from_library' APIs with condition checks for likes/downloads before deletion", "score": 0, "time_created": "2025-11-08 20:26:28", "time_modified": "2025-11-08 20:26:28", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Cleanup my Spotify libraries. Keep only those songs and albums in my song and album library, respectively, that I have liked or downloaded, and remove the rest. An album is downloaded if all songs in it are downloaded. Keep my playlist library as is for now.", "when_to_use": "When performing library cleanup tasks on Spotify", "category": "failure", "created_time": "2025-11-08 20:26:28", "modified_time": "2025-11-08 20:26:28", "generalized_query": "Filter and retain only liked or downloaded items in music library", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "7288ae6ff04f4c648086fa0eff414694", "memory_type": "procedural", "when_to_use": "When interacting with APIs that require authentication, always verify the necessary credentials and token validity before making requests.", "content": "Authorization failures often stem from missing or invalid tokens; ensure proper authentication mechanisms are in place when accessing protected APIs.", "score": 0, "time_created": "2025-11-08 20:26:43", "time_modified": "2025-11-08 20:26:43", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Get the list of sub-directories in the '~/photos/' directory using the file_system app.", "when_to_use": "When interacting with APIs that require authentication, always verify the necessary credentials and token validity before making requests.", "category": "failure", "created_time": "2025-11-08 20:26:43", "modified_time": "2025-11-08 20:26:43", "generalized_query": "Retrieve directory contents from a specified path using a file system API.", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "ed4014d014d643eab89b90895e1222a4", "memory_type": "procedural", "when_to_use": "When processing directory structures, explicitly filter for sub-directories after retrieving directory listings.", "content": "Raw directory listings include files and folders; implement filtering logic to isolate sub-directories before performing operations like compression.", "score": 0, "time_created": "2025-11-08 20:26:43", "time_modified": "2025-11-08 20:26:43", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Compress and archive vacation spot sub-directories into tar files.", "when_to_use": "When processing directory structures, explicitly filter for sub-directories after retrieving directory listings.", "category": "failure", "created_time": "2025-11-08 20:26:43", "modified_time": "2025-11-08 20:26:43", "generalized_query": "Process hierarchical directory structures for batch operations.", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "ae4c479ea57c46278c230f3eeac4072c", "memory_type": "procedural", "when_to_use": "When creating playlists based on dynamic recommendations or filtering content by genre and release date", "content": "The higher-scoring approach succeeded by directly using the show_recommendations API with proper authentication, while the lower-scoring attempt failed due to missing access token parameters and reliance on incomplete playlist searches. Proper token inclusion and direct API usage for recommendations created a more efficient workflow", "score": 0, "time_created": "2025-11-08 20:27:32", "time_modified": "2025-11-08 20:27:32", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Add all spotify-recommended R&B songs released in this or last year to a new \"Spotify R&B Recommendations\" playlist.", "when_to_use": "When creating playlists based on dynamic recommendations or filtering content by genre and release date", "category": "comparative", "created_time": "2025-11-08 20:27:32", "modified_time": "2025-11-08 20:27:32", "generalized_query": "Curate a genre-specific playlist using platform-native recommendation APIs with temporal filters", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "79b06c59805847b7b3e5751eb0c9b982", "memory_type": "procedural", "when_to_use": "When implementing API-based workflows requiring multiple-step operations", "content": "The higher-scoring approach demonstrated better error handling by explicitly including access tokens in all API calls, whereas the lower-scoring attempt failed due to missing authentication parameters. Sequential API calls with proper token management ensured successful execution of the entire workflow", "score": 0, "time_created": "2025-11-08 20:27:32", "time_modified": "2025-11-08 20:27:32", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Add all spotify-recommended R&B songs released in this or last year to a new \"Spotify R&B Recommendations\" playlist.", "when_to_use": "When implementing API-based workflows requiring multiple-step operations", "category": "comparative", "created_time": "2025-11-08 20:27:32", "modified_time": "2025-11-08 20:27:32", "generalized_query": "Execute multi-stage API operations with proper authentication handling", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "8ef05c912a0d4ce68902756b982a4af0", "memory_type": "procedural", "when_to_use": "When performing file system operations requiring authentication and directory manipulation", "content": "Successful execution required: 1) Authenticating via login API with proper credentials, 2) Using access tokens for authorized API calls, 3) Iterating through directories with precise filtering, 4) Sequentially applying compression and deletion operations. The key was maintaining authentication context while processing each directory individually.", "score": 0, "time_created": "2025-11-08 20:27:13", "time_modified": "2025-11-08 20:27:13", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Compress vacation directories into ZIP files and delete original directories", "when_to_use": "When performing file system operations requiring authentication and directory manipulation", "category": "success", "created_time": "2025-11-08 20:27:13", "modified_time": "2025-11-08 20:27:13", "generalized_query": "Compress specific directories into archives and clean up original folders", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "4efa1faa73544cada3674d4878d7462e", "memory_type": "procedural", "when_to_use": "When accessing protected API endpoints that require explicit authorization headers", "content": "The higher-scoring approach correctly included the access_token in API calls as required parameters, while the lower-scoring approach incorrectly attempted to use headers for token validation without understanding the API's authentication requirements. Proper parameter placement and understanding API documentation were critical to success", "score": 0, "time_created": "2025-11-08 20:27:22", "time_modified": "2025-11-08 20:27:22", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Compress them and save them in '~/pictures/vacations/.zip' for each vacation spot, and then delete all vacation spot sub-directories", "when_to_use": "When accessing protected API endpoints that require explicit authorization headers", "category": "comparative", "created_time": "2025-11-08 20:27:22", "modified_time": "2025-11-08 20:27:22", "generalized_query": "Securely access and manipulate directory structures with API authentication", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "7a78d8d74d30408d9e2a1440b1f47d63", "memory_type": "procedural", "when_to_use": "When dealing with API authentication and parameter validation in automation workflows", "content": "The higher-scoring approach succeeded by systematically addressing authentication issues through password retrieval, validating API parameters (like page_limit), and properly handling access tokens. It demonstrated incremental problem-solving by first resolving login issues, then API endpoint limitations, and finally playlist creation requirements. The lower-scoring approach failed due to persistent authentication errors and lack of parameter validation, showing how minor implementation details can significantly impact success.", "score": 0, "time_created": "2025-11-08 20:27:33", "time_modified": "2025-11-08 20:27:33", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Add all spotify-recommended R&B songs released in this year to a new \"R&B Recommendation\" playlist.", "when_to_use": "When dealing with API authentication and parameter validation in automation workflows", "category": "comparative", "created_time": "2025-11-08 20:27:33", "modified_time": "2025-11-08 20:27:33", "generalized_query": "Curate a music playlist using platform-specific recommendations with authentication and API parameter handling", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "280043dd4cd543a3add56919161101d5", "memory_type": "procedural", "when_to_use": "When dealing with special characters in passwords", "content": "Use proper string formatting to handle special characters (e.g., escape backticks/quotes); validate password complexity requirements of the target service", "score": 0, "time_created": "2025-11-08 20:27:31", "time_modified": "2025-11-08 20:27:31", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Add all spotify-recommended R&B songs released in this year to a new \"R&B Recommendation\" playlist.", "when_to_use": "When dealing with special characters in passwords", "category": "failure", "created_time": "2025-11-08 20:27:31", "modified_time": "2025-11-08 20:27:31", "generalized_query": "Handle password fields containing special characters in API requests", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "6eb4501d07ff4116aa3ba38b9208d1ed", "memory_type": "procedural", "when_to_use": "When interacting with APIs that require OAuth2 authentication", "content": "Ensure access tokens are properly configured in API requests (e.g., headers) and verify endpoint availability before assuming API existence", "score": 0, "time_created": "2025-11-08 20:27:35", "time_modified": "2025-11-08 20:27:35", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Add all spotify-recommended classical songs released in this year to a new 'Spotify Recommended Songs' playlist.", "when_to_use": "When interacting with APIs that require OAuth2 authentication", "category": "failure", "created_time": "2025-11-08 20:27:35", "modified_time": "2025-11-08 20:27:35", "generalized_query": "Automate playlist creation with filtered music recommendations from a music service", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "082d36bf861d4f36af918ec04f9dfc90", "memory_type": "procedural", "when_to_use": "When creating resources via APIs (like playlists), ensure all required parameters (e.g., title) are provided and properly authenticated.", "content": "Always include required parameters (e.g., 'title') and pass authentication tokens as arguments when calling API methods that modify resources.", "score": 0, "time_created": "2025-11-08 20:27:30", "time_modified": "2025-11-08 20:27:30", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Add all spotify-recommended classical songs released in this year to a new \"Spotify Recommended Songs\" playlist.", "when_to_use": "When creating resources via APIs (like playlists), ensure all required parameters (e.g., title) are provided and properly authenticated.", "category": "failure", "created_time": "2025-11-08 20:27:30", "modified_time": "2025-11-08 20:27:30", "generalized_query": "Create and manage music playlists through an API with proper authentication and parameter validation.", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "a2bbbd3795194697aa545a0432242c96", "memory_type": "procedural", "when_to_use": "When interacting with APIs that require idempotent operations (e.g., liking songs, updating preferences)", "content": "Always verify if an action (like liking a song) has already been performed before attempting it, and de-duplicate song IDs to avoid redundant operations", "score": 0, "time_created": "2025-11-08 20:28:05", "time_modified": "2025-11-08 20:28:05", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Like all the songs played so far in my spotify music player queue, including the current one.", "when_to_use": "When interacting with APIs that require idempotent operations (e.g., liking songs, updating preferences)", "category": "failure", "created_time": "2025-11-08 20:28:05", "modified_time": "2025-11-08 20:28:05", "generalized_query": "Like all songs in a music player queue and associated playlists", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "b592c8061b5c4e5b9679c687c9f11b0b", "memory_type": "procedural", "when_to_use": "When automating Spotify queue interactions requiring precise API alignment", "content": "The higher-scoring approach succeeded by systematically discovering the correct API ('show_song_queue') through documentation inspection, while the lower-scoring approach failed due to task misalignment - it counted playlists instead of modifying queue songs. Proper API discovery and strict adherence to the original task query were critical factors.", "score": 0, "time_created": "2025-11-08 20:28:06", "time_modified": "2025-11-08 20:28:06", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Like all the songs played so far in my spotify music player queue, including the current one.", "when_to_use": "When automating Spotify queue interactions requiring precise API alignment", "category": "comparative", "created_time": "2025-11-08 20:28:06", "modified_time": "2025-11-08 20:28:06", "generalized_query": "Interact with Spotify music player queue to modify song metadata", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "8caa34e598f243eda1bea1705609d065", "memory_type": "procedural", "when_to_use": "When handling authentication flows with sensitive credentials", "content": "The higher-scoring approach demonstrated better credential management by first retrieving the password via supervisor API before login, whereas the lower-scoring approach directly used stored credentials. This highlights the importance of secure credential handling and using intermediary services for sensitive information.", "score": 0, "time_created": "2025-11-08 20:28:06", "time_modified": "2025-11-08 20:28:06", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Like all the songs played so far in my spotify music player queue, including the current one.", "when_to_use": "When handling authentication flows with sensitive credentials", "category": "comparative", "created_time": "2025-11-08 20:28:06", "modified_time": "2025-11-08 20:28:06", "generalized_query": "Perform authenticated operations on music streaming platform", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "4507ec0f23b545a6901750c95ef484a9", "memory_type": "procedural", "when_to_use": "When the task requires direct interaction with a music queue or playlist", "content": "The higher-scoring approach directly manipulated the song queue using targeted APIs (show_song_queue, like_song) to achieve the task goal. The lower-scoring approach incorrectly focused on playlist data aggregation rather than queue modification, leading to task misalignment. The critical difference was executing the 'like' action on queue items versus collecting metadata from playlists.", "score": 0, "time_created": "2025-11-08 20:28:10", "time_modified": "2025-11-08 20:28:10", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Like all the songs played so far in my spotify music player queue, including the current one.", "when_to_use": "When the task requires direct interaction with a music queue or playlist", "category": "comparative", "created_time": "2025-11-08 20:28:10", "modified_time": "2025-11-08 20:28:10", "generalized_query": "Perform bulk interaction with a music queue or playlist items", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "89aae66d97e84d8b8242cdd28a3b4995", "memory_type": "procedural", "when_to_use": "When handling payment requests and needing to modify or cancel them", "content": "Deny or delete payment requests only if they are unapproved; once approved, use refund mechanisms instead", "score": 0, "time_created": "2025-11-08 20:28:15", "time_modified": "2025-11-08 20:28:15", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Send money back to Robert after an accidental Venmo payment", "when_to_use": "When handling payment requests and needing to modify or cancel them", "category": "failure", "created_time": "2025-11-08 20:28:15", "modified_time": "2025-11-08 20:28:15", "generalized_query": "Revoke or reverse an approved payment request", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "d6ceefd91cab420ab95cf32551ba8bb1", "memory_type": "procedural", "when_to_use": "When accessing external services like phone apps for communication", "content": "Ensure proper authentication and verify contact data exists in the target service before attempting to send messages", "score": 0, "time_created": "2025-11-08 20:28:15", "time_modified": "2025-11-08 20:28:15", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Call Robert to request a refund via phone", "when_to_use": "When accessing external services like phone apps for communication", "category": "failure", "created_time": "2025-11-08 20:28:15", "modified_time": "2025-11-08 20:28:15", "generalized_query": "Retrieve contact information from a linked service to initiate communication", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "e1f9a301e2774f2982aabc794229c770", "memory_type": "procedural", "when_to_use": "When accessing protected API endpoints like Venmo or Phone services", "content": "Always verify API authentication tokens are valid and properly scoped before making requests to protected endpoints", "score": 0, "time_created": "2025-11-08 20:28:47", "time_modified": "2025-11-08 20:28:47", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Send money back to Cory after an accidental Venmo payment", "when_to_use": "When accessing protected API endpoints like Venmo or Phone services", "category": "failure", "created_time": "2025-11-08 20:28:47", "modified_time": "2025-11-08 20:28:47", "generalized_query": "Recover funds from an unintended payment request to a specific recipient", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "1b207d74dd144646bf1f29ac2203b64d", "memory_type": "procedural", "when_to_use": "When searching for user information across multiple data sources", "content": "Implement fallback search strategies combining name, email, and phone number checks with proper error handling for missing data", "score": 0, "time_created": "2025-11-08 20:28:47", "time_modified": "2025-11-08 20:28:47", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Find Cory's contact information to refund an accidental payment", "when_to_use": "When searching for user information across multiple data sources", "category": "failure", "created_time": "2025-11-08 20:28:47", "modified_time": "2025-11-08 20:28:47", "generalized_query": "Locate user information using limited identifying details", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "1787a85b3f1244a5a36d44b650e459f3", "memory_type": "procedural", "when_to_use": "When modifying payment request states", "content": "Check the payment request's current status (e.g., 'approved_at' or 'denied_at') before attempting to modify it. Use the appropriate endpoint based on the platform's API design (e.g., PATCH for updates, POST for denials).", "score": 0, "time_created": "2025-11-08 20:28:53", "time_modified": "2025-11-08 20:28:53", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Deny a previously sent payment request", "when_to_use": "When modifying payment request states", "category": "failure", "created_time": "2025-11-08 20:28:53", "modified_time": "2025-11-08 20:28:53", "generalized_query": "Modify the state of a payment request (approve/deny)", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "009f2c58134947308f7fef0962fab63a", "memory_type": "procedural", "when_to_use": "When authenticating to APIs requiring access tokens, especially after initial login failures", "content": "The higher-scoring approach succeeded by correctly obtaining and using an access token after resolving authentication issues, while the lower-scoring approach failed due to repeated credential errors and missing token usage. Proper error handling and token management were critical for successful API interactions.", "score": 0, "time_created": "2025-11-08 20:28:53", "time_modified": "2025-11-08 20:28:53", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "All phone text messages and voice messages from 3654328626 are spam, delete them.", "when_to_use": "When authenticating to APIs requiring access tokens, especially after initial login failures", "category": "comparative", "created_time": "2025-11-08 20:28:53", "modified_time": "2025-11-08 20:28:53", "generalized_query": "Delete spam messages from a specific phone number using authenticated API calls", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "784975a836cd4e65a7a72e1426b5340e", "memory_type": "procedural", "when_to_use": "When retrieving sensitive account information", "content": "Password retrieval from supervisor accounts may require additional authorization layers. Direct password usage often fails due to encryption, token requirements, or permission constraints", "score": 0, "time_created": "2025-11-08 20:28:56", "time_modified": "2025-11-08 20:28:56", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "All phone text messages and voice messages from 3654328626 are spam, delete them.", "when_to_use": "When retrieving sensitive account information", "category": "failure", "created_time": "2025-11-08 20:28:56", "modified_time": "2025-11-08 20:28:56", "generalized_query": "Access account-specific data across multiple systems", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "893a7a172ec24cf0a78d049d40aa378d", "memory_type": "procedural", "when_to_use": "When extracting data from structured lists", "content": "Use safe list comprehension syntax and validate data structures before accessing nested elements to avoid TypeErrors", "score": 0, "time_created": "2025-11-08 20:28:53", "time_modified": "2025-11-08 20:28:53", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "All phone text messages and voice messages from 3654328626 are spam, delete them.", "when_to_use": "When extracting data from structured lists", "category": "failure", "created_time": "2025-11-08 20:28:53", "modified_time": "2025-11-08 20:28:53", "generalized_query": "Retrieve and process data from account management systems", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "1275add4f6a342b0ada2b9bb6e967f41", "memory_type": "procedural", "when_to_use": "When initiating a refund for an accidental payment via Venmo or similar platforms", "content": "Successfully refunded an accidental payment by first authenticating via API, filtering approved payment requests, and creating a transaction with the correct positive amount. Key steps included handling authentication errors, validating transaction parameters (e.g., positive amounts), and leveraging API endpoints for payment request management.", "score": 0, "time_created": "2025-11-08 20:28:42", "time_modified": "2025-11-08 20:28:42", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Send them the money back.", "when_to_use": "When initiating a refund for an accidental payment via Venmo or similar platforms", "category": "success", "created_time": "2025-11-08 20:28:42", "modified_time": "2025-11-08 20:28:42", "generalized_query": "Refund an accidental payment to a specific recipient", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "ad48a9a41d4543d4a01bf75a05aad740", "memory_type": "procedural", "when_to_use": "When extracting sensitive data like passwords from external stores", "content": "Use proper list comprehensions and filtering to extract specific entries, avoiding type errors from misstructured queries.", "score": 0, "time_created": "2025-11-08 20:29:00", "time_modified": "2025-11-08 20:29:00", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Retrieve Venmo account password from supervisor API", "when_to_use": "When extracting sensitive data like passwords from external stores", "category": "failure", "created_time": "2025-11-08 20:29:00", "modified_time": "2025-11-08 20:29:00", "generalized_query": "Access credential stores for authentication", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "06e99694ce6045e78a5a28949f77c38a", "memory_type": "procedural", "when_to_use": "When encountering 422 errors during API operations", "content": "Validate the operation's eligibility (e.g., request status, user permissions) before invoking API actions to avoid invalid operation errors.", "score": 0, "time_created": "2025-11-08 20:29:00", "time_modified": "2025-11-08 20:29:00", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Deny a payment request", "when_to_use": "When encountering 422 errors during API operations", "category": "failure", "created_time": "2025-11-08 20:29:00", "modified_time": "2025-11-08 20:29:00", "generalized_query": "Modify Venmo payment requests", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "689a5cddef254d0799231b4ef87bba85", "memory_type": "procedural", "when_to_use": "When needing to delete all messages (text/voice) from a specific phone number in a phone app with API-based management", "content": "The successful execution involved three key patterns: 1) Authenticating with proper credentials via supervisor-accessed passwords, 2) Using pagination parameters (page_index/page_limit) to retrieve all messages despite API limits, 3) Systematically deleting each message via individual API calls after full retrieval. The combination of API documentation analysis, error handling for authentication, and iterative processing enabled complete deletion of spam content.", "score": 0, "time_created": "2025-11-08 20:29:03", "time_modified": "2025-11-08 20:29:03", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "All phone text messages and voice messages from 9294880327 are spam, delete them.", "when_to_use": "When needing to delete all messages (text/voice) from a specific phone number in a phone app with API-based management", "category": "success", "created_time": "2025-11-08 20:29:03", "modified_time": "2025-11-08 20:29:03", "generalized_query": "Delete all communication records (text/voice) from a specified phone number in a phone application", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "ac687eabb1a14fda9512cf89238943bd", "memory_type": "procedural", "when_to_use": "When handling username/password authentication flows", "content": "Validate credentials against API-specific requirements (e.g., username format, password scope) rather than assuming generic account names", "score": 0, "time_created": "2025-11-08 20:29:05", "time_modified": "2025-11-08 20:29:05", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "All phone text messages and voice messages from 9294880327 are spam, delete them.", "when_to_use": "When handling username/password authentication flows", "category": "failure", "created_time": "2025-11-08 20:29:05", "modified_time": "2025-11-08 20:29:05", "generalized_query": "Authenticate to a service using username/password credentials", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "b6ec6ca2ba1d4be8b2b5347498c57b41", "memory_type": "procedural", "when_to_use": "When authenticating to access restricted APIs like phone message management", "content": "The higher-scoring approach succeeded by first obtaining valid authentication credentials through the supervisor app, then systematically using access tokens for API calls. The lower-scoring approach failed due to incorrect password handling and lack of token management, resulting in repeated 401 errors. Proper authentication flow and token persistence were critical for successful message deletion.", "score": 0, "time_created": "2025-11-08 20:29:41", "time_modified": "2025-11-08 20:29:41", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "All phone text messages and voice messages from 5708520672 are spam, delete them.", "when_to_use": "When authenticating to access restricted APIs like phone message management", "category": "comparative", "created_time": "2025-11-08 20:29:41", "modified_time": "2025-11-08 20:29:41", "generalized_query": "Delete spam messages from a specific phone number using authenticated API access", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "395f26da2a614b39a930286550751721", "memory_type": "procedural", "when_to_use": "When interacting with APIs that require authentication or specific permissions", "content": "Always verify API availability and authentication requirements before invoking operations. Use 'show_api_descriptions' to confirm available endpoints and their prerequisites.", "score": 0, "time_created": "2025-11-08 20:29:45", "time_modified": "2025-11-08 20:29:45", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "All phone text messages and voice messages from 5708520672 are spam, delete them.", "when_to_use": "When interacting with APIs that require authentication or specific permissions", "category": "failure", "created_time": "2025-11-08 20:29:45", "modified_time": "2025-11-08 20:29:45", "generalized_query": "Delete messages from a specific phone number in a messaging system", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "e0de5b433e8c45f0b3e2e72ce3b72b04", "memory_type": "procedural", "when_to_use": "When authenticating with an API requires retrieving credentials from a secure source and handling pagination for large datasets", "content": "Successfully retrieved Spotify credentials from a password store, used pagination to collect all matching artists, filtered by genre and follower count, and executed authenticated API calls with proper access tokens. Key pattern: Use API pagination with incremental page indexes until no more results, combine multiple filters (genre + follower count) in list comprehensions, and ensure all required authentication parameters (access_token) are explicitly passed in API requests", "score": 0, "time_created": "2025-11-08 20:29:37", "time_modified": "2025-11-08 20:29:37", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Follow all the edm artists on Spotify that have at least 23 followers", "when_to_use": "When authenticating with an API requires retrieving credentials from a secure source and handling pagination for large datasets", "category": "success", "created_time": "2025-11-08 20:29:37", "modified_time": "2025-11-08 20:29:37", "generalized_query": "Filter and follow artists in a music database with specific follower thresholds and genre criteria", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "1a08d78b973649758b56bd0602c30383", "memory_type": "procedural", "when_to_use": "When mapping identifiers to meaningful data", "content": "Always verify that identifier mappings (e.g., song_id → artist) use valid lookup mechanisms", "score": 0, "time_created": "2025-11-08 20:29:45", "time_modified": "2025-11-08 20:29:45", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Follow all the edm artists on Spotify that have at least 23 followers", "when_to_use": "When mapping identifiers to meaningful data", "category": "failure", "created_time": "2025-11-08 20:29:45", "modified_time": "2025-11-08 20:29:45", "generalized_query": "Resolve identifier-to-entity mappings in data pipelines", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "e874a95042044336b062aa93257ca297", "memory_type": "procedural", "when_to_use": "When needing to filter and act on entities (e.g., artists, users) with specific attributes (e.g., follower count, genre) in a platform like Spotify", "content": "Successfully combined API exploration, parameterized filtering, and iterative action execution. Key steps: 1) Verify API availability (e.g., `search_artists` instead of non-existent `show_artists`) 2) Use filters (`min_follower_count`, `genre`) to narrow results 3) Iterate through results to perform actions (`follow_artist`)", "score": 0, "time_created": "2025-11-08 20:29:32", "time_modified": "2025-11-08 20:29:32", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Follow all the classical artists on Spotify that have at least 22 followers", "when_to_use": "When needing to filter and act on entities (e.g., artists, users) with specific attributes (e.g., follower count, genre) in a platform like Spotify", "category": "success", "created_time": "2025-11-08 20:29:32", "modified_time": "2025-11-08 20:29:32", "generalized_query": "Identify and interact with entities meeting specific criteria (e.g., follower count, category) in a music platform", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "91b4dbae0088415083cbaaac838dce50", "memory_type": "procedural", "when_to_use": "When interacting with music platforms like Spotify to follow artists based on follower counts", "content": "Misaligning data sources (e.g., playlist likes vs artist followers) leads to incorrect filtering; always validate that metrics correspond directly to the target entity (artists, not playlists) in the task", "score": 0, "time_created": "2025-11-08 20:29:34", "time_modified": "2025-11-08 20:29:34", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Follow all the reggae artists on Spotify that have at least 21 followers", "when_to_use": "When interacting with music platforms like Spotify to follow artists based on follower counts", "category": "failure", "created_time": "2025-11-08 20:29:34", "modified_time": "2025-11-08 20:29:34", "generalized_query": "Follow artists on a music platform that meet specific follower thresholds and genre criteria", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "f96b1b4da2a34f36a54969e624ec02c9", "memory_type": "procedural", "when_to_use": "When processing large datasets from APIs with pagination limits", "content": "Infinite loops can occur if pagination parameters (e.g., page_index) are not properly bounded by API response limits; implement explicit termination conditions", "score": 0, "time_created": "2025-11-08 20:29:34", "time_modified": "2025-11-08 20:29:34", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Follow all the reggae artists on Spotify that have at least 21 followers", "when_to_use": "When processing large datasets from APIs with pagination limits", "category": "failure", "created_time": "2025-11-08 20:29:34", "modified_time": "2025-11-08 20:29:34", "generalized_query": "Process paginated API responses to extract entities meeting specific criteria", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "bd87c22d9def4564b36be445701a2a2e", "memory_type": "procedural", "when_to_use": "When accessing files via an API that requires authentication", "content": "Always verify API method existence and authentication requirements before attempting file operations. Ensure the file path is valid and the file exists before invoking read operations.", "score": 0, "time_created": "2025-11-08 20:30:20", "time_modified": "2025-11-08 20:30:20", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I paid for our last month's electricity bill. Its amount is supposed to be shared equally among my roommates and me. Make venmo requests to my roommates, with a description note, 'For electricity bill.'. The bill receipt is in my file system.", "when_to_use": "When accessing files via an API that requires authentication", "category": "failure", "created_time": "2025-11-08 20:30:20", "modified_time": "2025-11-08 20:30:20", "generalized_query": "Access a file from a secured file system and process its content for subsequent actions", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "dcc2681fb19d46838107a68f433a3f78", "memory_type": "procedural", "when_to_use": "When parsing financial data from documents", "content": "Implement robust text cleaning processes to handle currency symbols and formatting inconsistencies", "score": 0, "time_created": "2025-11-08 20:30:19", "time_modified": "2025-11-08 20:30:19", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Extract total amount from electricity bill receipt", "when_to_use": "When parsing financial data from documents", "category": "failure", "created_time": "2025-11-08 20:30:19", "modified_time": "2025-11-08 20:30:19", "generalized_query": "Parse numerical values from text-based financial documents", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "ad5e5e10a6084b8092b17c0dccffbfce", "memory_type": "procedural", "when_to_use": "When managing roommate relationships", "content": "Use relationship-based search filters and validate access tokens before querying contact databases", "score": 0, "time_created": "2025-11-08 20:30:19", "time_modified": "2025-11-08 20:30:19", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Get list of roommates from phone contacts", "when_to_use": "When managing roommate relationships", "category": "failure", "created_time": "2025-11-08 20:30:19", "modified_time": "2025-11-08 20:30:19", "generalized_query": "Retrieve contact information for shared living arrangements", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "c0053c13c01a48c684ec0e18b8e64ac4", "memory_type": "procedural", "when_to_use": "When marking a note as completed in a note-taking app", "content": "Always verify the existence of a note before attempting to modify it, as the note may need to be created first if it doesn't exist", "score": 0, "time_created": "2025-11-08 20:30:19", "time_modified": "2025-11-08 20:30:19", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Mark \"Learning to cook a signature dish from scratch\" in my Bucket List Simple Note as done", "when_to_use": "When marking a note as completed in a note-taking app", "category": "failure", "created_time": "2025-11-08 20:30:19", "modified_time": "2025-11-08 20:30:19", "generalized_query": "Update a specific note's status in a task management system", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "1957a4b9d5cb4f74bf65182843412e13", "memory_type": "procedural", "when_to_use": "When encountering API method errors during execution", "content": "Validate API method availability and parameters against documentation before invocation to prevent runtime errors", "score": 0, "time_created": "2025-11-08 20:30:19", "time_modified": "2025-11-08 20:30:19", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Mark \"Learning to cook a signature dish from scratch\" in my Bucket List Simple Note as done", "when_to_use": "When encountering API method errors during execution", "category": "failure", "created_time": "2025-11-08 20:30:19", "modified_time": "2025-11-08 20:30:19", "generalized_query": "Perform actions requiring API interactions with external systems", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "241c6d4aa5004fc6a98a43d658a115d4", "memory_type": "procedural", "when_to_use": "When accessing files via an API that requires authentication", "content": "Always verify file existence and authenticate properly before accessing files; use 'file_exists' API to prevent 404 errors and ensure correct authentication tokens are used", "score": 0, "time_created": "2025-11-08 20:30:21", "time_modified": "2025-11-08 20:30:21", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I paid for our last month's cable bill. Its amount is supposed to be shared equally among my roommates and me. Make venmo requests to my roommates, with a description note, \"I paid for cable bill.\". The bill receipt is in my file system.", "when_to_use": "When accessing files via an API that requires authentication", "category": "failure", "created_time": "2025-11-08 20:30:21", "modified_time": "2025-11-08 20:30:21", "generalized_query": "Retrieve file content from a secured file system and distribute costs via Venmo", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "e419ef6dc5f24d98a169dfefed66eddc", "memory_type": "procedural", "when_to_use": "When implementing payment distribution workflows", "content": "Validate all prerequisite conditions (file existence, authentication, data accuracy) before initiating payment actions to prevent workflow interruptions.", "score": 0, "time_created": "2025-11-08 20:30:21", "time_modified": "2025-11-08 20:30:21", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Make venmo requests to roommates for shared expenses", "when_to_use": "When implementing payment distribution workflows", "category": "failure", "created_time": "2025-11-08 20:30:21", "modified_time": "2025-11-08 20:30:21", "generalized_query": "Distribute shared costs among multiple parties via payment platform", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "93e618777ee64819be0bb4102d7e959c", "memory_type": "procedural", "when_to_use": "When accessing protected files or APIs requiring authentication", "content": "Always verify authentication tokens are valid and properly formatted in request headers when accessing secured APIs. Use 'Bearer' token format with correct scope permissions", "score": 0, "time_created": "2025-11-08 20:30:23", "time_modified": "2025-11-08 20:30:23", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Make venmo requests to my roommates, with a description note, \"internet bill for the last month.\". The bill receipt is in my file system.", "when_to_use": "When accessing protected files or APIs requiring authentication", "category": "failure", "created_time": "2025-11-08 20:30:23", "modified_time": "2025-11-08 20:30:23", "generalized_query": "Access a file from a protected file system to retrieve data for financial transactions", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "cb3cd2d4734e41da9f40837a8eb643c9", "memory_type": "procedural", "when_to_use": "When dealing with file system operations", "content": "Use directory existence checks before attempting file operations to avoid permission errors. Verify directory paths match expected structure (e.g., 'receipts' may require full path)", "score": 0, "time_created": "2025-11-08 20:30:23", "time_modified": "2025-11-08 20:30:23", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Make venmo requests to my roommates, with a description note, \"internet bill for the last month.\". The bill receipt is in my file system.", "when_to_use": "When dealing with file system operations", "category": "failure", "created_time": "2025-11-08 20:30:23", "modified_time": "2025-11-08 20:30:23", "generalized_query": "Locate and retrieve specific files from a directory structure", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "6c11926e44ac4051922ee4b7609f7939", "memory_type": "procedural", "when_to_use": "When handling multi-account authentication across different services", "content": "Store and retrieve credentials securely using centralized password management interfaces", "score": 0, "time_created": "2025-11-08 20:30:21", "time_modified": "2025-11-08 20:30:21", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Login to file_system and phone apps to access account information", "when_to_use": "When handling multi-account authentication across different services", "category": "failure", "created_time": "2025-11-08 20:30:21", "modified_time": "2025-11-08 20:30:21", "generalized_query": "Authenticate to multiple services with credential management", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "3b42598a917b4e798050a6b26050f503", "memory_type": "procedural", "when_to_use": "When processing shared financial obligations", "content": "Use combination of contact management and expense tracking systems to verify sharing arrangements", "score": 0, "time_created": "2025-11-08 20:30:21", "time_modified": "2025-11-08 20:30:21", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Determine number of roommates to split internet bill costs", "when_to_use": "When processing shared financial obligations", "category": "failure", "created_time": "2025-11-08 20:30:21", "modified_time": "2025-11-08 20:30:21", "generalized_query": "Identify shared expense participants using available data sources", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "5c3249aa220e4bfaa58c69d3cfa228e0", "memory_type": "procedural", "when_to_use": "When interacting with an API that requires authentication (e.g., updating notes in a private app like Simple Note)", "content": "The successful execution relied on three critical patterns: (1) Retrieving and validating credentials via a supervisor tool to obtain a valid access token, (2) Using the access token in all API requests to maintain authorization, and (3) Precisely locating the target note via search and updating its content with exact string replacement. The sequence demonstrates systematic error handling for authentication failures and precise API parameter management.", "score": 0, "time_created": "2025-11-08 20:30:53", "time_modified": "2025-11-08 20:30:53", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Mark \"Witnessing a total solar eclipse\" in my Bucket List Simple Note as done", "when_to_use": "When interacting with an API that requires authentication (e.g., updating notes in a private app like Simple Note)", "category": "success", "created_time": "2025-11-08 20:30:53", "modified_time": "2025-11-08 20:30:53", "generalized_query": "Update a specific task status in a private note-taking application", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "dca46696ef0e43219551526076506b4a", "memory_type": "procedural", "when_to_use": "When modifying task status in a notes-based bucket list system requiring API authentication", "content": "Successfully modified a note's content by first authenticating via API, locating the note by title through search, obtaining the note ID, and performing precise string replacement in the content field. This approach handles authentication barriers, resource location challenges, and content-specific formatting requirements.", "score": 0, "time_created": "2025-11-08 20:30:47", "time_modified": "2025-11-08 20:30:47", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Mark \"Taking a solo backpacking trip\" in my Bucket List Simple Note as not done", "when_to_use": "When modifying task status in a notes-based bucket list system requiring API authentication", "category": "success", "created_time": "2025-11-08 20:30:47", "modified_time": "2025-11-08 20:30:47", "generalized_query": "Update task status in a notes-based to-do list system", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "9122e0055fd345828dc0b80b5e8b9144", "memory_type": "procedural", "when_to_use": "When accessing protected resources in an API", "content": "Implement token validation checks before making API requests and use proper authentication mechanisms as documented in API specs", "score": 0, "time_created": "2025-11-08 20:30:59", "time_modified": "2025-11-08 20:30:59", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Mark 'Taking a solo backpacking trip' in my Bucket List Simple Note as not done", "when_to_use": "When accessing protected resources in an API", "category": "failure", "created_time": "2025-11-08 20:30:59", "modified_time": "2025-11-08 20:30:59", "generalized_query": "Modify note status in a secured note-taking application", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "a91901f5a6f048549449473646bd1657", "memory_type": "procedural", "when_to_use": "When interacting with APIs that require authentication or manipulating alarm settings", "content": "Always verify authentication tokens are valid and properly included in API requests, validate data structures before accessing nested elements, and confirm resource existence before performing operations", "score": 0, "time_created": "2025-11-08 20:30:51", "time_modified": "2025-11-08 20:30:51", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Move my go-to-sleep phone alarm to 1 hour later and disable the rest", "when_to_use": "When interacting with APIs that require authentication or manipulating alarm settings", "category": "failure", "created_time": "2025-11-08 20:30:51", "modified_time": "2025-11-08 20:30:51", "generalized_query": "Modify specific alarm settings and disable others in a device management system", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "568afc6461164f4badcd0112195400df", "memory_type": "procedural", "when_to_use": "When accessing protected APIs requiring authentication", "content": "Always verify authentication tokens are valid and properly scoped before accessing user-specific resources", "score": 0, "time_created": "2025-11-08 20:31:00", "time_modified": "2025-11-08 20:31:00", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Move my wake-up phone alarm to 40 minutes earlier and disable the rest", "when_to_use": "When accessing protected APIs requiring authentication", "category": "failure", "created_time": "2025-11-08 20:31:00", "modified_time": "2025-11-08 20:31:00", "generalized_query": "Modify scheduled tasks with time adjustments and disable others", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "aa85724cf47c43869c7bee7fa968edce", "memory_type": "procedural", "when_to_use": "When modifying alarm configurations in phone apps", "content": "Use datetime libraries for precise time calculations. Apply bulk operations for disabling multiple alarms while ensuring proper access token validation", "score": 0, "time_created": "2025-11-08 20:30:57", "time_modified": "2025-11-08 20:30:57", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Move my wake-up phone alarm to 40 minutes earlier and disable the rest", "when_to_use": "When modifying alarm configurations in phone apps", "category": "failure", "created_time": "2025-11-08 20:30:57", "modified_time": "2025-11-08 20:30:57", "generalized_query": "Update and disable multiple alarms with specific time adjustments", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "47d8f61cd20c4e7b9a9fbe019910a932", "memory_type": "procedural", "when_to_use": "When estimating playlist durations or handling time-based calculations", "content": "Avoid assuming fixed durations for tracks; use actual track metadata for accurate time calculations", "score": 0, "time_created": "2025-11-08 20:31:32", "time_modified": "2025-11-08 20:31:32", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "How long is my longest Spotify playlist, in minutes, rounded to the nearest number?", "when_to_use": "When estimating playlist durations or handling time-based calculations", "category": "failure", "created_time": "2025-11-08 20:31:32", "modified_time": "2025-11-08 20:31:32", "generalized_query": "Estimate the maximum duration of a music collection from a streaming service, rounded to the nearest whole number", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "cb09c14ead564110b1f12c9a95bd0928", "memory_type": "procedural", "when_to_use": "When dealing with paginated API responses for large datasets", "content": "Implement robust pagination handling to ensure complete data retrieval from API endpoints", "score": 0, "time_created": "2025-11-08 20:31:32", "time_modified": "2025-11-08 20:31:32", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "How long is my longest Spotify playlist, in minutes, rounded to the nearest number?", "when_to_use": "When dealing with paginated API responses for large datasets", "category": "failure", "created_time": "2025-11-08 20:31:32", "modified_time": "2025-11-08 20:31:32", "generalized_query": "Retrieve and process extensive dataset fragments from an API with pagination", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "cc1b90d0bc1f477da4764534b56f5468", "memory_type": "procedural", "when_to_use": "When requiring precise numerical rounding operations", "content": "Verify rounding logic aligns with specified precision requirements and edge case scenarios", "score": 0, "time_created": "2025-11-08 20:31:32", "time_modified": "2025-11-08 20:31:32", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "How long is my longest Spotify playlist, in minutes, rounded to the nearest number?", "when_to_use": "When requiring precise numerical rounding operations", "category": "failure", "created_time": "2025-11-08 20:31:32", "modified_time": "2025-11-08 20:31:32", "generalized_query": "Perform mathematical rounding operations on calculated metrics", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "c519ba530e4e4ad48ab398d4745adc6c", "memory_type": "procedural", "when_to_use": "When calculating durations for playlists or music-related tasks", "content": "Misinterpreting 'longest playlist' as total accumulated duration across all playlists leads to incorrect results. Always verify whether the task requires analyzing individual items (e.g., single playlist metrics) versus aggregated data (e.g., total library statistics).", "score": 0, "time_created": "2025-11-08 20:31:30", "time_modified": "2025-11-08 20:31:30", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "How long is my longest Spotify playlist, in minutes, rounded to the nearest number?", "when_to_use": "When calculating durations for playlists or music-related tasks", "category": "failure", "created_time": "2025-11-08 20:31:30", "modified_time": "2025-11-08 20:31:30", "generalized_query": "Determine the duration of the longest playlist in a music service, rounded to the nearest whole number", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "b097701fcff34dd99f5acea4a95633c9", "memory_type": "procedural", "when_to_use": "For time-based calculations, always convert units explicitly and apply proper rounding techniques", "content": "The solution successfully converted total seconds to minutes using division and Python's built-in round() function. This approach ensures accurate unit conversion and proper rounding for time measurements, avoiding common floating-point precision issues", "score": 0, "time_created": "2025-11-08 20:31:34", "time_modified": "2025-11-08 20:31:34", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "How long is my longest Spotify playlist, in minutes, rounded to the nearest number?", "when_to_use": "For time-based calculations, always convert units explicitly and apply proper rounding techniques", "category": "success", "created_time": "2025-11-08 20:31:34", "modified_time": "2025-11-08 20:31:34", "generalized_query": "Convert cumulative time measurements between units with precision rounding", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "435cb5d3593b433b92d237866f4414dd", "memory_type": "procedural", "when_to_use": "When performing API operations requiring authentication", "content": "Authentication tokens must be explicitly obtained and included in API requests. Repeated failed attempts with incorrect credentials should trigger credential validation checks rather than continuous retries.", "score": 0, "time_created": "2025-11-08 20:31:38", "time_modified": "2025-11-08 20:31:38", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Move my go-to-sleep phone alarm to 20 minutes later and disable the rest", "when_to_use": "When performing API operations requiring authentication", "category": "failure", "created_time": "2025-11-08 20:31:38", "modified_time": "2025-11-08 20:31:38", "generalized_query": "Modify alarm settings and manage multiple alarms on a phone application", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "214bf691def64fbab9582bd94d62d714", "memory_type": "procedural", "when_to_use": "When executing code in restricted environments", "content": "Avoid embedding explanatory text in executable code. Maintain strict separation between code commands and natural language instructions to prevent syntax errors in restricted execution environments.", "score": 0, "time_created": "2025-11-08 20:31:38", "time_modified": "2025-11-08 20:31:38", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Move my go-to-sleep phone alarm to 20 minutes later and disable the rest", "when_to_use": "When executing code in restricted environments", "category": "failure", "created_time": "2025-11-08 20:31:38", "modified_time": "2025-11-08 20:31:38", "generalized_query": "Execute code sequences with strict syntax requirements", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "45ffb3b8df7846c2a240e75e754a6aa2", "memory_type": "procedural", "when_to_use": "When searching for specific alarms by label in device management tasks", "content": "Use case-insensitive and partial string matching for alarm labels, as exact matches may not be reliable. Verify alarm state and properties before modification", "score": 0, "time_created": "2025-11-08 20:31:35", "time_modified": "2025-11-08 20:31:35", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Move my go-to-sleep phone alarm to 20 minutes later and disable the rest", "when_to_use": "When searching for specific alarms by label in device management tasks", "category": "failure", "created_time": "2025-11-08 20:31:35", "modified_time": "2025-11-08 20:31:35", "generalized_query": "Identify and modify alarms based on descriptive labels in device systems", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "531bb0904f9d427ab9e446a3da9f994e", "memory_type": "procedural", "when_to_use": "When accessing nested data via APIs, verify the exact field names in the response schema before assuming default keys", "content": "Successful execution relied on cross-referencing API response schemas (step 7) to identify the correct duration field ('duration' vs. incorrectly assumed 'duration_seconds'). This highlights the importance of validating data structures before processing.", "score": 0, "time_created": "2025-11-08 20:31:32", "time_modified": "2025-11-08 20:31:32", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "How long is my shortest Spotify playlist, in minutes, rounded to the nearest number?", "when_to_use": "When accessing nested data via APIs, verify the exact field names in the response schema before assuming default keys", "category": "success", "created_time": "2025-11-08 20:31:32", "modified_time": "2025-11-08 20:31:32", "generalized_query": "Determine the shortest duration of a playlist across a music platform, considering song metadata", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "2e49d8eaf787419cbab3bfb1a986c91c", "memory_type": "procedural", "when_to_use": "When handling authentication flows with sensitive credentials", "content": "Store and handle credentials securely using dedicated authentication modules rather than hardcoding passwords in scripts", "score": 0, "time_created": "2025-11-08 20:31:39", "time_modified": "2025-11-08 20:31:39", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "How long is my shortest Spotify playlist, in minutes, rounded to the nearest number?", "when_to_use": "When handling authentication flows with sensitive credentials", "category": "failure", "created_time": "2025-11-08 20:31:39", "modified_time": "2025-11-08 20:31:39", "generalized_query": "Access protected resources via authenticated API endpoints", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "6389de26c7274de6a2233c189542420a", "memory_type": "procedural", "when_to_use": "When searching for specific playlists or albums in a music service", "content": "Verify the existence of required resources (e.g., playlists/albums) before proceeding with dependent actions to avoid infinite loops and redundant operations", "score": 0, "time_created": "2025-11-08 20:32:04", "time_modified": "2025-11-08 20:32:04", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Play the least listened to song on Spotify from the Echo Chamber Chronicles album.", "when_to_use": "When searching for specific playlists or albums in a music service", "category": "failure", "created_time": "2025-11-08 20:32:04", "modified_time": "2025-11-08 20:32:04", "generalized_query": "Retrieve and play a specific song from an album in a music streaming service", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "c960c57988884bd9bd93fa324784da71", "memory_type": "procedural", "when_to_use": "When generating diagnostic messages or outputs during execution", "content": "Use proper syntax for code execution vs. text output; avoid mixing executable code with plain text explanations in the same context", "score": 0, "time_created": "2025-11-08 20:32:04", "time_modified": "2025-11-08 20:32:04", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Play the least listened to song on Spotify from the Echo Chamber Chronicles album.", "when_to_use": "When generating diagnostic messages or outputs during execution", "category": "failure", "created_time": "2025-11-08 20:32:04", "modified_time": "2025-11-08 20:32:04", "generalized_query": "Generate diagnostic outputs during task execution", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "9b1ccd40eb70453394f2835403e4a832", "memory_type": "procedural", "when_to_use": "When handling dynamic API interactions", "content": "Validate API method existence and parameters against documented specifications before invocation. Use versioned or stable API endpoints to prevent runtime errors due to deprecated functionality.", "score": 0, "time_created": "2025-11-08 20:32:07", "time_modified": "2025-11-08 20:32:07", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Play the least listened to song on Spotify from the Echo Chamber Chronicles album.", "when_to_use": "When handling dynamic API interactions", "category": "failure", "created_time": "2025-11-08 20:32:07", "modified_time": "2025-11-08 20:32:07", "generalized_query": "Execute actions requiring API calls with version-controlled endpoints", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "638e613d84874f8bb76f3d47f689ea63", "memory_type": "procedural", "when_to_use": "When interacting with APIs that return structured data, especially when relying on specific keys or fields", "content": "Always verify the exact keys and data structure of API responses before accessing nested fields. Assumptions about field names can lead to KeyError exceptions.", "score": 0, "time_created": "2025-11-08 20:32:13", "time_modified": "2025-11-08 20:32:13", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Play the most listened to song on Spotify from my Woodstock Reimagined: Festival Vibes playlist", "when_to_use": "When interacting with APIs that return structured data, especially when relying on specific keys or fields", "category": "failure", "created_time": "2025-11-08 20:32:13", "modified_time": "2025-11-08 20:32:13", "generalized_query": "Identify and play the most listened-to song from a specified music playlist", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "86225760affd47b7b91827bf8c34b71a", "memory_type": "procedural", "when_to_use": "When processing song metadata from playlist IDs to determine playback priority", "content": "Use the correct metric name (e.g., 'play_count' instead of 'listen_count') and ensure song details are fetched explicitly via their IDs to access accurate metadata.", "score": 0, "time_created": "2025-11-08 20:32:13", "time_modified": "2025-11-08 20:32:13", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Play the most listened to song on Spotify from my Woodstock Reimagined: Festival Vibes playlist", "when_to_use": "When processing song metadata from playlist IDs to determine playback priority", "category": "failure", "created_time": "2025-11-08 20:32:13", "modified_time": "2025-11-08 20:32:13", "generalized_query": "Determine the highest-engagement track in a music playlist", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "14ac4f7626d7486c93386ce09b1af3dc", "memory_type": "procedural", "when_to_use": "When accessing Spotify's API to play music based on user-specific criteria", "content": "The higher-scoring approach succeeded by: 1) Correctly handling API errors through iterative debugging (e.g., switching from 'listen_count' to 'play_count'), 2) Ensuring proper authentication by refreshing access tokens when needed, 3) Using precise API endpoints (like 'play_music') with required parameters (access_token). The lower-scoring approach failed due to missing error handling, incorrect API usage, and lack of token validation.", "score": 0, "time_created": "2025-11-08 20:32:33", "time_modified": "2025-11-08 20:32:33", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Play the most listened to song on Spotify from the Velvet Underground album.", "when_to_use": "When accessing Spotify's API to play music based on user-specific criteria", "category": "comparative", "created_time": "2025-11-08 20:32:33", "modified_time": "2025-11-08 20:32:33", "generalized_query": "Retrieve and play the most engaged-with media item from a specific artist/album", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "579a8eaeb85d4c5b83041ba06fe50b47", "memory_type": "procedural", "when_to_use": "When handling API errors related to authorization or missing parameters", "content": "Implement error-handling logic to refresh tokens, validate user input, and ensure required parameters (e.g., email) are provided for API calls that depend on user context.", "score": 0, "time_created": "2025-11-08 20:32:38", "time_modified": "2025-11-08 20:32:38", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Play the most listened to song on Spotify from the Velvet Underground album", "when_to_use": "When handling API errors related to authorization or missing parameters", "category": "failure", "created_time": "2025-11-08 20:32:38", "modified_time": "2025-11-08 20:32:38", "generalized_query": "Execute actions requiring user authentication and data retrieval", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "c0b39a2f10364aafb1ec13ca225873a1", "memory_type": "procedural", "when_to_use": "When handling payment approval tasks involving external accounts", "content": "Always verify sufficient funds in the payment account before attempting to approve requests to avoid insufficiency errors", "score": 0, "time_created": "2025-11-08 20:32:27", "time_modified": "2025-11-08 20:32:27", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Accept all pending Venmo payment requests from my roommates and coworkers.", "when_to_use": "When handling payment approval tasks involving external accounts", "category": "failure", "created_time": "2025-11-08 20:32:27", "modified_time": "2025-11-08 20:32:27", "generalized_query": "Approve pending payment requests from specified contacts", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "9e7849a09da54be29741a8ae10dc1807", "memory_type": "procedural", "when_to_use": "When handling password-sensitive operations or data structures", "content": "Implement robust credential management and data structure validation. Use list comprehensions carefully to avoid type errors when extracting values", "score": 0, "time_created": "2025-11-08 20:32:28", "time_modified": "2025-11-08 20:32:28", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Accept all pending Venmo payment requests from my roommates and coworkers", "when_to_use": "When handling password-sensitive operations or data structures", "category": "failure", "created_time": "2025-11-08 20:32:28", "modified_time": "2025-11-08 20:32:28", "generalized_query": "Access restricted account information or perform actions requiring authentication", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "09e329f00d2e4e50b76a12c95667cc21", "memory_type": "procedural", "when_to_use": "When interacting with APIs that require authentication tokens, especially for time-sensitive operations like approving payments", "content": "Always validate access token validity and expiration time before making API requests, especially for critical operations like payment approvals", "score": 0, "time_created": "2025-11-08 20:32:55", "time_modified": "2025-11-08 20:32:55", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Accept all pending Venmo payment requests from my coworkers and friends", "when_to_use": "When interacting with APIs that require authentication tokens, especially for time-sensitive operations like approving payments", "category": "failure", "created_time": "2025-11-08 20:32:55", "modified_time": "2025-11-08 20:32:55", "generalized_query": "Approve pending payment requests from known contacts using an authenticated API", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "8b97b25417334e76af2c415b89cdb567", "memory_type": "procedural", "when_to_use": "When automating payment request management across multiple apps", "content": "The higher-scoring approach succeeded by directly accessing Venmo's payment request API with proper authentication, while the lower-scoring approach failed due to incorrect API selection (using phone app instead of Venmo), authorization errors, and improper parameter handling. The effective approach used precise API endpoints (show_received_payment_requests, deny_payment_request) with proper pagination and authentication tokens, whereas the less effective approach wasted time on irrelevant APIs and encountered authorization failures.", "score": 0, "time_created": "2025-11-08 20:33:01", "time_modified": "2025-11-08 20:33:01", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Reject all pending Venmo payment requests from my friends and roommates.", "when_to_use": "When automating payment request management across multiple apps", "category": "comparative", "created_time": "2025-11-08 20:33:01", "modified_time": "2025-11-08 20:33:01", "generalized_query": "Automate rejection of pending payment requests from specified contacts", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "d9b90a096e7f4767ba7cc8033bbab691", "memory_type": "procedural", "when_to_use": "When handling data extraction from nested or conditional structures in API responses.", "content": "Use robust data extraction methods (e.g., generator expressions with next()) to avoid type errors and ensure accurate value retrieval.", "score": 0, "time_created": "2025-11-08 20:33:07", "time_modified": "2025-11-08 20:33:07", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Reject all pending Venmo payment requests from my friends and roommates.", "when_to_use": "When handling data extraction from nested or conditional structures in API responses.", "category": "failure", "created_time": "2025-11-08 20:33:07", "modified_time": "2025-11-08 20:33:07", "generalized_query": "Extract specific data fields from complex API response structures.", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "837b6517253c4619a058e538f48a0e9c", "memory_type": "procedural", "when_to_use": "When retrieving song data from Spotify, ensure direct mapping of song IDs to song titles via the Spotify API rather than relying on playlist metadata.", "content": "Song titles must be explicitly retrieved from the Spotify API using song IDs, not inferred from playlist titles or metadata.", "score": 0, "time_created": "2025-11-08 20:33:03", "time_modified": "2025-11-08 20:33:03", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "What is the title of the most played song by Velvet Echo on Spotify.", "when_to_use": "When retrieving song data from Spotify, ensure direct mapping of song IDs to song titles via the Spotify API rather than relying on playlist metadata.", "category": "failure", "created_time": "2025-11-08 20:33:03", "modified_time": "2025-11-08 20:33:03", "generalized_query": "Identify the most played song on a music platform by an artist.", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "84b6ad1c331c484598acabdab7758f37", "memory_type": "procedural", "when_to_use": "When encountering missing API methods during execution", "content": "Verify API availability by querying the platform's documentation endpoints. Replace invalid API calls with verified methods while maintaining the core logic flow. This ensures robustness against API changes while preserving the intended functionality.", "score": 0, "time_created": "2025-11-08 20:33:10", "time_modified": "2025-11-08 20:33:10", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "What is the title of the most played song by Velvet Echo on Spotify.", "when_to_use": "When encountering missing API methods during execution", "category": "success", "created_time": "2025-11-08 20:33:10", "modified_time": "2025-11-08 20:33:10", "generalized_query": "Resolve API method errors during music platform data retrieval", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "f7e680dad1a342a6be19d49eabf0daac", "memory_type": "procedural", "when_to_use": "When accessing nested data structures or API responses", "content": "Always validate the structure of API responses and ensure keys exist before accessing nested fields. Use defensive programming to handle missing data or unexpected formats.", "score": 0, "time_created": "2025-11-08 20:33:31", "time_modified": "2025-11-08 20:33:31", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "What is the title of the most played song by Jasper Skye on Spotify.", "when_to_use": "When accessing nested data structures or API responses", "category": "failure", "created_time": "2025-11-08 20:33:31", "modified_time": "2025-11-08 20:33:31", "generalized_query": "Identify the most frequently played song by a specific artist across their owned playlists", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "289483f4a5f849ac9de9e1ee5b7efa92", "memory_type": "procedural", "when_to_use": "When implementing search/aggregate operations across multiple data sources", "content": "Collect and process all relevant data first before performing calculations. Verify intermediate results at each stage to isolate failure points.", "score": 0, "time_created": "2025-11-08 20:33:31", "time_modified": "2025-11-08 20:33:31", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "What is the title of the most played song by Jasper Skye on Spotify.", "when_to_use": "When implementing search/aggregate operations across multiple data sources", "category": "failure", "created_time": "2025-11-08 20:33:31", "modified_time": "2025-11-08 20:33:31", "generalized_query": "Aggregate metrics across interconnected data sets (e.g., playlists → songs → statistics)", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "8dde90d057a1483590666b211579af3a", "memory_type": "procedural", "when_to_use": "When retrieving data from an API that requires pagination and has rate limit constraints", "content": "Successfully handled API pagination limits by adjusting page_limit parameter (max 20 per request), filtered results by artist name, and identified the most played song by comparing play_count metrics across multiple API calls. Used iterative processing to handle large datasets efficiently.", "score": 0, "time_created": "2025-11-08 20:33:34", "time_modified": "2025-11-08 20:33:34", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "What is the title of the most played song by Jasper Skye on Spotify.", "when_to_use": "When retrieving data from an API that requires pagination and has rate limit constraints", "category": "success", "created_time": "2025-11-08 20:33:34", "modified_time": "2025-11-08 20:33:34", "generalized_query": "Identify the top-performing item (e.g., most played song) by an artist from a music database", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "02e8578a053c4837b39481d86851f8be", "memory_type": "procedural", "when_to_use": "When interacting with Spotify's API to manage artist follow status based on user preferences", "content": "Verify API endpoint existence and correct parameter usage before execution; ensure proper data structure parsing; implement state-checking before modifying relationships", "score": 0, "time_created": "2025-11-08 20:34:03", "time_modified": "2025-11-08 20:34:03", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Unfollow all the artists who have not sung even a single song I have liked on Spotify", "when_to_use": "When interacting with Spotify's API to manage artist follow status based on user preferences", "category": "failure", "created_time": "2025-11-08 20:34:03", "modified_time": "2025-11-08 20:34:03", "generalized_query": "Modify follow relationships based on content interaction history", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "ebee42e7da0748e1abeee2dd595a5869", "memory_type": "procedural", "when_to_use": "When processing nested data structures from API responses", "content": "Always validate field names and data structures in API responses using documentation; use iterative parsing for nested/arrays structures", "score": 0, "time_created": "2025-11-08 20:34:03", "time_modified": "2025-11-08 20:34:03", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Unfollow all the artists who have not sung even a single song I have liked on Spotify", "when_to_use": "When processing nested data structures from API responses", "category": "failure", "created_time": "2025-11-08 20:34:03", "modified_time": "2025-11-08 20:34:03", "generalized_query": "Extract relational data from nested API responses", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "79a65af8eabf4042a33074a5f8439e0d", "memory_type": "procedural", "when_to_use": "When performing state-modifying operations on third-party services", "content": "Implement idempotent operations with pre-state checks to avoid invalid requests and handle 422 conflict responses", "score": 0, "time_created": "2025-11-08 20:34:03", "time_modified": "2025-11-08 20:34:03", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Unfollow all the artists who have not sung even a single song I have liked on Spotify", "when_to_use": "When performing state-modifying operations on third-party services", "category": "failure", "created_time": "2025-11-08 20:34:03", "modified_time": "2025-11-08 20:34:03", "generalized_query": "Modify external service states based on criteria", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "9e6996dcf5bd4fc5bfde7a04d6135a7e", "memory_type": "procedural", "when_to_use": "When accessing protected APIs requires authentication credentials stored in a secure system", "content": "Retrieve stored credentials from a secure source to authenticate API access, then use the API's search functionality with appropriate parameters (like page_limit constraints) to gather data. Filter results using metric-based sorting (e.g., play_count) to identify the target item.", "score": 0, "time_created": "2025-11-08 20:33:26", "time_modified": "2025-11-08 20:33:26", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "What is the title of the least played song by Zoey James on Spotify.", "when_to_use": "When accessing protected APIs requires authentication credentials stored in a secure system", "category": "success", "created_time": "2025-11-08 20:33:26", "modified_time": "2025-11-08 20:33:26", "generalized_query": "Identify the least engaged content item by an artist in a music database", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "a09ad8cc275c48b0b3d61c99b90f33e8", "memory_type": "procedural", "when_to_use": "When handling nested data structures in API responses", "content": "Always validate the presence of nested fields before accessing them to avoid KeyError. Use dot notation or explicit checks for each level of nesting.", "score": 0, "time_created": "2025-11-08 20:34:09", "time_modified": "2025-11-08 20:34:09", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "What is the title of the least played song by Zoey James on Spotify.", "when_to_use": "When handling nested data structures in API responses", "category": "failure", "created_time": "2025-11-08 20:34:09", "modified_time": "2025-11-08 20:34:09", "generalized_query": "Extract specific attributes from nested JSON data structures", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "4967313832284e3fa7d6a5a0ba583da4", "memory_type": "procedural", "when_to_use": "When generating final output from processed data", "content": "Ensure syntactical correctness when constructing output strings, avoiding unquoted text and improper formatting that may cause execution errors.", "score": 0, "time_created": "2025-11-08 20:34:09", "time_modified": "2025-11-08 20:34:09", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "What is the title of the least played song by Zoey James on Spotify.", "when_to_use": "When generating final output from processed data", "category": "failure", "created_time": "2025-11-08 20:34:09", "modified_time": "2025-11-08 20:34:09", "generalized_query": "Present results from data processing tasks", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "522c2a60fa484d189e777fc7f92d0639", "memory_type": "procedural", "when_to_use": "When interacting with music recommendation systems to follow artists based on user preferences", "content": "Successfully parsed Spotify API responses to extract artist IDs from nested structures (e.g., songs → artists → id) and implemented idempotent operations using try-except blocks to handle duplicate follow requests. Key steps included: 1) Verifying API response schema to locate correct data fields, 2) Using error handling to skip redundant actions without requiring additional API methods.", "score": 0, "time_created": "2025-11-08 20:34:05", "time_modified": "2025-11-08 20:34:05", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Follow all the artists who have sung at least one song I have liked on Spotify.", "when_to_use": "When interacting with music recommendation systems to follow artists based on user preferences", "category": "success", "created_time": "2025-11-08 20:34:05", "modified_time": "2025-11-08 20:34:05", "generalized_query": "Follow artists associated with user-preferred content in a music platform", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "ef5629d8f8ac4fa9bb0d21052df1db51", "memory_type": "procedural", "when_to_use": "When processing nested data structures from API responses", "content": "Inspect API response schemas to understand data nesting levels; use iteration/recursive approaches to access multi-level fields rather than direct key access", "score": 0, "time_created": "2025-11-08 20:34:09", "time_modified": "2025-11-08 20:34:09", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Follow all the artists who have sung at least one song I have liked on Spotify.", "when_to_use": "When processing nested data structures from API responses", "category": "failure", "created_time": "2025-11-08 20:34:09", "modified_time": "2025-11-08 20:34:09", "generalized_query": "Extract relationships from hierarchical data structures", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "6bbce6ebdbcf43e89741a87fd3ce21f5", "memory_type": "procedural", "when_to_use": "When submitting results to a task completion interface", "content": "Ensure output formats strictly match expected types (e.g., strings instead of sets/lists) by converting data structures before submission", "score": 0, "time_created": "2025-11-08 20:34:09", "time_modified": "2025-11-08 20:34:09", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Follow all the artists who have sung at least one song I have liked on Spotify.", "when_to_use": "When submitting results to a task completion interface", "category": "failure", "created_time": "2025-11-08 20:34:09", "modified_time": "2025-11-08 20:34:09", "generalized_query": "Format outputs for automated task verification systems", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "3edfd84bbf104863a882cef381656f8b", "memory_type": "procedural", "when_to_use": "When implementing API interactions requiring dynamic data processing and error handling", "content": "The higher-scoring approach demonstrated superior error handling through incremental debugging (e.g., using API docs to resolve KeyError, adding deduplication with sets, and implementing try-except blocks for duplicate follow errors). It systematically addressed API constraints (like requiring artist IDs) and optimized data flow by directly accessing nested JSON structures. The lower-scoring approach failed due to incomplete pagination handling, redundant checks without error mitigation, and improper use of API parameters.", "score": 0, "time_created": "2025-11-08 20:34:04", "time_modified": "2025-11-08 20:34:04", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Follow all the artists who have sung at least one song I have liked on Spotify.", "when_to_use": "When implementing API interactions requiring dynamic data processing and error handling", "category": "comparative", "created_time": "2025-11-08 20:34:04", "modified_time": "2025-11-08 20:34:04", "generalized_query": "Automate following artists based on user's liked music items across a music platform", "utility": 0, "freq": 0}} -{"workspace_id": "appworld_qwen3_8b", "memory_id": "55fafbf9ed9e4408a02fefcf7a902b7d", "memory_type": "procedural", "when_to_use": "When processing paginated API responses for user data retrieval", "content": "Implement robust pagination handling to ensure complete data retrieval. Verify that the API's page_limit and page_index parameters are correctly configured to capture all relevant entries.", "score": 0, "time_created": "2025-11-08 20:34:32", "time_modified": "2025-11-08 20:34:32", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Follow all the artists who have sung at least one song I have liked on Spotify.", "when_to_use": "When processing paginated API responses for user data retrieval", "category": "failure", "created_time": "2025-11-08 20:34:32", "modified_time": "2025-11-08 20:34:32", "generalized_query": "Retrieve and process user-generated data from paginated endpoints", "utility": 0, "freq": 0}} diff --git a/docs/library/paper_data/task/bfcl_qwen3_14b.jsonl b/docs/library/paper_data/task/bfcl_qwen3_14b.jsonl deleted file mode 100644 index 3340c310..00000000 --- a/docs/library/paper_data/task/bfcl_qwen3_14b.jsonl +++ /dev/null @@ -1,110 +0,0 @@ -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "1e350e4a5eb34f15b0538373c89ddfb4", "memory_type": "procedural", "when_to_use": "When retrieving stock information after obtaining a symbol via name lookup", "content": "Always use the symbol returned by get_symbol_by_name() in subsequent stock-related function calls, rather than assuming or modifying the symbol", "score": 0, "time_created": "2025-09-20 11:40:03", "time_modified": "2025-09-20 11:40:03", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "For your investment portfolio, could you inform me of the current price of 'Quasar Ltd.'?", "when_to_use": "When retrieving stock information after obtaining a symbol via name lookup", "category": "failure", "created_time": "2025-09-20 11:40:03", "modified_time": "2025-09-20 11:40:03", "generalized_query": "Requesting financial data about a company by name", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "719b716f42fe48638bc4756c1a5146dd", "memory_type": "procedural", "when_to_use": "When managing user interactions and watchlists", "content": "The higher-scoring sequence maintained clear state management by confirming watchlist updates and providing immediate feedback, while the lower-scoring response introduced ambiguity by questioning the presence of 'NVDA' in the watchlist. Effective watchlist management requires explicit confirmation of all modifications without introducing unrelated queries.", "score": 0, "time_created": "2025-09-20 11:40:09", "time_modified": "2025-09-20 11:40:09", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Please append this stock to your watchlist to enable us to scrutinize its performance over time.", "when_to_use": "When managing user interactions and watchlists", "category": "comparative", "created_time": "2025-09-20 11:40:09", "modified_time": "2025-09-20 11:40:09", "generalized_query": "Update user-specific monitoring configurations for financial assets", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "d401023d95994303a917a23a182ff712", "memory_type": "procedural", "when_to_use": "When needing to determine real-time market status", "content": "Successfully combined get_current_time and update_market_status functions to determine market status. This pattern works because it directly queries the current time and then uses that data to update and retrieve the market status, ensuring accuracy.", "score": 0, "time_created": "2025-09-20 11:40:05", "time_modified": "2025-09-20 11:40:05", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Provide a real-time update on the market status. Is it currently open or closed?", "when_to_use": "When needing to determine real-time market status", "category": "success", "created_time": "2025-09-20 11:40:05", "modified_time": "2025-09-20 11:40:05", "generalized_query": "Check real-time status of a financial market or system", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "37aeb1bc1d914c4986cb8532fb960368", "memory_type": "procedural", "when_to_use": "When analyzing a stock by company name and needing to add it to a watchlist", "content": "Used get_symbol_by_name followed by get_stock_info to analyze Amazon (AMZN). Applied conditional logic (price > $300) before using add_to_watchlist. This works because it follows a clear data flow: name → symbol → details → action, ensuring informed decisions.", "score": 0, "time_created": "2025-09-20 11:40:05", "time_modified": "2025-09-20 11:40:05", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I require a comprehensive analysis of the stock with Amazon, as it will inform my subsequent decision-making.", "when_to_use": "When analyzing a stock by company name and needing to add it to a watchlist", "category": "success", "created_time": "2025-09-20 11:40:05", "modified_time": "2025-09-20 11:40:05", "generalized_query": "Analyze a stock by company name and add to watchlist if conditions met", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "c9351cb263264d18a73077b4a8e53b7f", "memory_type": "procedural", "when_to_use": "When initiating engine start sequences in vehicle control systems", "content": "Critical vehicle functions like engine start require verification of prerequisite conditions (e.g., brake pedal engagement) before execution to avoid system errors.", "score": 0, "time_created": "2025-09-20 11:40:10", "time_modified": "2025-09-20 11:40:10", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Could you get the engine started for me? Make sure you do it in START mode, with all doors securely locked and the brake properly engaged.", "when_to_use": "When initiating engine start sequences in vehicle control systems", "category": "failure", "created_time": "2025-09-20 11:40:10", "modified_time": "2025-09-20 11:40:10", "generalized_query": "Executing vehicle engine start with safety prerequisites", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "11c4cb12e0df48d08991609584ea575b", "memory_type": "procedural", "when_to_use": "When configuring navigation and vehicle readiness for long-distance travel", "content": "Trip feasibility assessments should be combined with vehicle readiness checks (fuel, navigation, safety systems) to ensure end-to-end preparedness for long-distance travel.", "score": 0, "time_created": "2025-09-20 11:40:10", "time_modified": "2025-09-20 11:40:10", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Is this something I could realistically pull off? I just want to know an answer; you don't need to refill if it's not reachable. If it is reachable, set navigation to '1914 7th St, Apt B, Berkeley, CA 94710'.", "when_to_use": "When configuring navigation and vehicle readiness for long-distance travel", "category": "failure", "created_time": "2025-09-20 11:40:10", "modified_time": "2025-09-20 11:40:10", "generalized_query": "Assessing trip feasibility and navigation setup for long-distance journeys", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "436f8bcd86004d928e395c367c933c21", "memory_type": "procedural", "when_to_use": "When converting units and calculating precise fuel amounts", "content": "The higher-scoring approach used the correct liter_to_gallon conversion (10L = 2.64gal) and rounded appropriately, while the lower-scoring sequence incorrectly filled 6.29gal (likely a miscalculation). Precision in unit conversion and decimal formatting directly impacted task success.", "score": 0, "time_created": "2025-09-20 11:40:05", "time_modified": "2025-09-20 11:40:05", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I'd appreciate it if you could refill with 10 liters of gasoline to keep the adventure alive. Use 2 decimal digit of the gallon amount", "when_to_use": "When converting units and calculating precise fuel amounts", "category": "comparative", "created_time": "2025-09-20 11:40:05", "modified_time": "2025-09-20 11:40:05", "generalized_query": "Accurate unit conversion and fuel measurement", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "067cc47dac5541a198e6b794a826c307", "memory_type": "procedural", "when_to_use": "When starting vehicle engine with multiple prerequisite safety checks", "content": "Successfully handled sequential dependencies by first locking doors, pressing brake pedal, then starting engine. Demonstrates proper handling of error conditions through systematic resolution of prerequisites before completing the main action.", "score": 0, "time_created": "2025-09-20 11:40:09", "time_modified": "2025-09-20 11:40:09", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "fire up the engine with a swift ignition and take a peek at the dashboard stats...", "when_to_use": "When starting vehicle engine with multiple prerequisite safety checks", "category": "success", "created_time": "2025-09-20 11:40:09", "modified_time": "2025-09-20 11:40:09", "generalized_query": "Execute vehicle ignition while satisfying safety precondition checks", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "c2433974ebc44b3f8d3fae9ca5de799c", "memory_type": "procedural", "when_to_use": "When calculating averages from sensor data measurements", "content": "Use appropriate mathematical functions for statistical calculations rather than applying unrelated operations like absolute value, which may mask conceptual misunderstandings", "score": 0, "time_created": "2025-09-20 11:40:25", "time_modified": "2025-09-20 11:40:25", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "To wrap it up, what's the average tire pressure? I want to make sure everything's in tip-top shape.", "when_to_use": "When calculating averages from sensor data measurements", "category": "failure", "created_time": "2025-09-20 11:40:25", "modified_time": "2025-09-20 11:40:25", "generalized_query": "Calculate statistical averages from multiple sensor readings", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "08fd146498e74a4fa006e883c6873087", "memory_type": "procedural", "when_to_use": "When using system-generated IDs for transactions", "content": "Always use the system-assigned card_id (from register_credit_card response) instead of the original card number in subsequent transactions", "score": 0, "time_created": "2025-09-20 11:40:55", "time_modified": "2025-09-20 11:40:55", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "procure travel insurance worth $2000 for my family vacation, which should comprehensively cover the journey from Munich all the way to Guangzhou", "when_to_use": "When using system-generated IDs for transactions", "category": "failure", "created_time": "2025-09-20 11:40:55", "modified_time": "2025-09-20 11:40:55", "generalized_query": "Purchasing insurance using a credit card after registration", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "f57a2bb7fec04f9abf6b7226c01e5dbc", "memory_type": "procedural", "when_to_use": "When retrieving invoices for bookings", "content": "Use the original booking_id parameter (not insurance_id) when calling retrieve_invoice, as the booking ID is the primary reference for financial records", "score": 0, "time_created": "2025-09-20 11:40:55", "time_modified": "2025-09-20 11:40:55", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Could you retrieve an invoice for this insurance to ensure my financial records are precise?", "when_to_use": "When retrieving invoices for bookings", "category": "failure", "created_time": "2025-09-20 11:40:55", "modified_time": "2025-09-20 11:40:55", "generalized_query": "Requesting documentation for travel transactions", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "868f2889b76445b7bf39543fb1c0d6d5", "memory_type": "procedural", "when_to_use": "When encountering API errors due to incorrect parameters in booking workflows", "content": "The higher-scoring approach proactively used get_flight_cost to validate pricing parameters before booking, avoiding invalid API calls. It also maintained consistent booking IDs across cancellation requests, unlike the lower-scoring sequence which used hardcoded placeholder IDs. This parameter validation and state consistency led to successful transaction completion.", "score": 0, "time_created": "2025-09-20 11:40:50", "time_modified": "2025-09-20 11:40:50", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I'm planning a business class trip from JFK in New York to LAX in Los Angeles on December 15, 2024... Once booked, I'll need to cancel the trip immediately due to unexpected changes in my schedule.", "when_to_use": "When encountering API errors due to incorrect parameters in booking workflows", "category": "comparative", "created_time": "2025-09-20 11:40:50", "modified_time": "2025-09-20 11:40:50", "generalized_query": "Executing a flight booking and cancellation workflow with parameter validation", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "a8b6580308a34104a37334cd506c3bda", "memory_type": "procedural", "when_to_use": "When creating support tickets for urgent issues", "content": "Double-check all input data (e.g., dates) in ticket descriptions to ensure accuracy and alignment with the original request.", "score": 0, "time_created": "2025-09-20 11:40:57", "time_modified": "2025-09-20 11:40:57", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I must file a priority 5 support ticket concerning the flight cancellation... Due to unexpected changes in schedule, the flight from JFK to LAX on December 15, 2023, needs to be canceled immediately.", "when_to_use": "When creating support tickets for urgent issues", "category": "failure", "created_time": "2025-09-20 11:40:57", "modified_time": "2025-09-20 11:40:57", "generalized_query": "Creating high-priority support tickets for urgent travel issues", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "25f43f070d1446158de327b0af3ba3d7", "memory_type": "procedural", "when_to_use": "When handling user requests that require specific identifiers like order IDs or account credentials", "content": "Always verify the presence of required parameters (e.g., order IDs, authentication tokens) before executing critical operations. Implement security best practices by masking sensitive data like card numbers instead of exposing full details.", "score": 0, "time_created": "2025-09-20 11:41:06", "time_modified": "2025-09-20 11:41:06", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I require some confidence about my current financial positioning. Share a detailed overview of my account, including balances and any associated card numbers. Furthermore, logging in as USR001 to notify my financial advisor (user id 'USR003') promptly about this potential shift in my investment strategy with our latest account details.", "when_to_use": "When handling user requests that require specific identifiers like order IDs or account credentials", "category": "failure", "created_time": "2025-09-20 11:41:06", "modified_time": "2025-09-20 11:41:06", "generalized_query": "Requesting sensitive account information and performing actions that require authentication", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "05040385e7644f6fbd2fa9f06a08db89", "memory_type": "procedural", "when_to_use": "When booking a flight and encountering unexpected API errors due to parameter mismatches", "content": "The initial error during flight booking highlighted the importance of aligning parameters with API requirements. By removing the 'travel_cost' parameter (which was not part of the function's required fields), the booking succeeded. This demonstrates the need to strictly adhere to function parameter specifications and validate inputs before execution.", "score": 0, "time_created": "2025-09-20 11:41:19", "time_modified": "2025-09-20 11:41:19", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I just relocated to Rivermist and I'm looking to book a flight to Los Angeles for a crucial business meeting. Could you arrange the flight for me, using my credit card with id 'card_6789'? I need it booked for next Friday 2024-11-10, in business class, with an estimated cost of approximately $1200. Additionally, I have received my new access token: 2278-9812-3456-4567. Once the flight is confirmed, please ensure you acquire the invoice for this transaction as it's necessary for my reimbursement.", "when_to_use": "When booking a flight and encountering unexpected API errors due to parameter mismatches", "category": "success", "created_time": "2025-09-20 11:41:19", "modified_time": "2025-09-20 11:41:19", "generalized_query": "Booking a flight with specific parameters (date, class, payment method) and retrieving documentation", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "46c0671a693c465ebea3b574aa40e5a5", "memory_type": "procedural", "when_to_use": "When initiating vehicle startup procedures", "content": "Vehicle ignition requires sequential safety verification: doors must be locked, brake pedal engaged, and all systems checked in specific order", "score": 0, "time_created": "2025-09-20 11:41:41", "time_modified": "2025-09-20 11:41:41", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I'm planning ahead for our big trip and realized our car's fuel tank is running low. It would be great if you could top it up with an additional 30 gallons before I turn on the ignition using the 'START' mode.", "when_to_use": "When initiating vehicle startup procedures", "category": "failure", "created_time": "2025-09-20 11:41:41", "modified_time": "2025-09-20 11:41:41", "generalized_query": "Executing vehicle engine startup with prerequisite safety checks", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "240bda18801041cd8160b91935b33bfb", "memory_type": "procedural", "when_to_use": "When implementing vehicle system interactions", "content": "System interactions require understanding both technical vehicle parameters and external platform formatting requirements simultaneously", "score": 0, "time_created": "2025-09-20 11:41:41", "time_modified": "2025-09-20 11:41:41", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Could you share a quick update about the tire pressures on Twitter using specific format?", "when_to_use": "When implementing vehicle system interactions", "category": "failure", "created_time": "2025-09-20 11:41:41", "modified_time": "2025-09-20 11:41:41", "generalized_query": "Integrating vehicle diagnostics with external communication platforms", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "6d0e18aa68524b4b9383e46338345253", "memory_type": "procedural", "when_to_use": "When requesting order details or cancellation without sufficient information", "content": "Always verify that required parameters (e.g., order IDs) are available before attempting to retrieve or modify order details. If missing, explicitly request the necessary information from the user.", "score": 0, "time_created": "2025-09-20 11:41:58", "time_modified": "2025-09-20 11:41:58", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Review the order that I had placed, looking at its details, and let me know if it should be cancelled.", "when_to_use": "When requesting order details or cancellation without sufficient information", "category": "failure", "created_time": "2025-09-20 11:41:58", "modified_time": "2025-09-20 11:41:58", "generalized_query": "Requesting order details or cancellation without providing necessary identifiers", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "16685cdfeee64cf0a530abcafdcb57fc", "memory_type": "procedural", "when_to_use": "When the user requests specific stock details and watchlist management", "content": "Concurrently use get_stock_info to fetch detailed stock metrics (price, volume, moving averages) and add_to_watchlist to manage user portfolios. This parallel execution ensures immediate access to data and seamless watchlist updates.", "score": 0, "time_created": "2025-09-20 11:42:02", "time_modified": "2025-09-20 11:42:02", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I need details on the performance of a particular stock, 'SYNX', can you provide me with the critical information? It should be added to my watchlist.", "when_to_use": "When the user requests specific stock details and watchlist management", "category": "success", "created_time": "2025-09-20 11:42:02", "modified_time": "2025-09-20 11:42:02", "generalized_query": "Retrieve stock performance data and add to user watchlist", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "03d2b46234a24314863a2cf90bd9d207", "memory_type": "procedural", "when_to_use": "When verifying traveler identity before booking travel", "content": "Successfully used verify_traveler_information with full name, DOB, and passport number to authenticate the traveler. This establishes trust and compliance with travel regulations before proceeding with bookings.", "score": 0, "time_created": "2025-09-20 11:41:36", "time_modified": "2025-09-20 11:41:36", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I'm embarking on an adventure to spend some time with my family. Could you confirm my travel details for me? Just a quick rundown: my name is Theodore Collins, born on September 14, 1985; I have a U.S. passport starting with 'US876543'.", "when_to_use": "When verifying traveler identity before booking travel", "category": "success", "created_time": "2025-09-20 11:41:36", "modified_time": "2025-09-20 11:41:36", "generalized_query": "Verify user identity and travel documentation for a trip", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "135a2ce0fa5e42bdb7d648c78a48c497", "memory_type": "procedural", "when_to_use": "When managing dependent tasks like cancellations that require prior successful booking", "content": "The higher-scoring sequence completed the booking successfully (via parameter adjustment) before cancellation, ensuring valid booking IDs existed. The lower-scoring sequence failed to complete the booking due to parameter errors, making cancellation impossible and resulting in a failed task chain.", "score": 0, "time_created": "2025-09-20 11:41:41", "time_modified": "2025-09-20 11:41:41", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Something's come up, and I won't be able to make it on this trip as planned. Would you mind canceling the flight reservation I just made?", "when_to_use": "When managing dependent tasks like cancellations that require prior successful booking", "category": "comparative", "created_time": "2025-09-20 11:41:41", "modified_time": "2025-09-20 11:41:41", "generalized_query": "Handling follow-up actions for incomplete bookings", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "a366cf687b5648d08513b3ff08c30209", "memory_type": "procedural", "when_to_use": "When performing vehicle pre-trip checks involving multiple system interactions", "content": "Critical system dependencies must be resolved in proper sequence - doors must be locked before engine ignition", "score": 0, "time_created": "2025-09-20 11:42:34", "time_modified": "2025-09-20 11:42:34", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Prior to commencing the drive, kindly initiate the engine, ensuring all doors are securely closed and the parking brake is engaged.", "when_to_use": "When performing vehicle pre-trip checks involving multiple system interactions", "category": "failure", "created_time": "2025-09-20 11:42:34", "modified_time": "2025-09-20 11:42:34", "generalized_query": "Executing vehicle startup sequence with safety checks", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "5717b0d02e2f4b5997b39afb16d53b5d", "memory_type": "procedural", "when_to_use": "When assessing fuel sufficiency for long-distance travel", "content": "Fuel sufficiency assessments require explicit vehicle fuel efficiency data to calculate required fuel volume", "score": 0, "time_created": "2025-09-20 11:42:34", "time_modified": "2025-09-20 11:42:34", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Could you provide me with the approximate distance between San Francisco and Rivermist? This information is crucial for my travel planning notes. Will I be able to get there?", "when_to_use": "When assessing fuel sufficiency for long-distance travel", "category": "failure", "created_time": "2025-09-20 11:42:34", "modified_time": "2025-09-20 11:42:34", "generalized_query": "Evaluating trip feasibility based on fuel capacity and distance", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "39c73bf264ee434886c0d97766b3b2c1", "memory_type": "procedural", "when_to_use": "When converting units for travel planning", "content": "Always verify conversion accuracy and consider rounding implications for critical safety calculations", "score": 0, "time_created": "2025-09-20 11:42:34", "time_modified": "2025-09-20 11:42:34", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I require assistance in determining the quantity of gasoline necessary for an extensive journey across California. I currently anticipate needing around 166 liters. How much is that in gallon?", "when_to_use": "When converting units for travel planning", "category": "failure", "created_time": "2025-09-20 11:42:34", "modified_time": "2025-09-20 11:42:34", "generalized_query": "Unit conversion for travel resource planning", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "c82a52a687a842febaa08a99c44e11fe", "memory_type": "procedural", "when_to_use": "When searching for files with a specific name in the current directory", "content": "Using the 'find' tool with a targeted name parameter efficiently located the file. The recursive search capability ensured coverage of all subdirectories while maintaining simplicity by defaulting to the current directory.", "score": 0, "time_created": "2025-09-20 11:42:40", "time_modified": "2025-09-20 11:42:40", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I have a list of student record in this directory, could you find me where is it by telling me its name and using 'find'?", "when_to_use": "When searching for files with a specific name in the current directory", "category": "success", "created_time": "2025-09-20 11:42:40", "modified_time": "2025-09-20 11:42:40", "generalized_query": "Locate a file containing specific data using a search term", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "d0c24907ab2d4a109eeafdb87d291f95", "memory_type": "procedural", "when_to_use": "When extracting numerical data from text files for statistical analysis", "content": "Combined 'cat' for file content retrieval with math API tools (mean, standard_deviation) to process scores. This pattern enables end-to-end data analysis workflows from file access to computation.", "score": 0, "time_created": "2025-09-20 11:42:40", "time_modified": "2025-09-20 11:42:40", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Look at the student_record.txt and tell me the average score", "when_to_use": "When extracting numerical data from text files for statistical analysis", "category": "success", "created_time": "2025-09-20 11:42:40", "modified_time": "2025-09-20 11:42:40", "generalized_query": "Calculate statistical metrics from numerical data stored in text files", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "16690621207648bba1fb63a7260e86e6", "memory_type": "procedural", "when_to_use": "When a user needs to execute a trade after confirming market status", "content": "Successfully checked market status using get_current_time and update_market_status tools before proceeding with a trade. This ensured the user only executed a trade when the market was open, avoiding invalid transactions.", "score": 0, "time_created": "2025-09-20 11:42:44", "time_modified": "2025-09-20 11:42:44", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I'd appreciate a breakdown on the current stock market trends so I can determine the suitability of executing a trade right now. Could you provide the latest market status for me?", "when_to_use": "When a user needs to execute a trade after confirming market status", "category": "success", "created_time": "2025-09-20 11:42:44", "modified_time": "2025-09-20 11:42:44", "generalized_query": "Requesting market status verification before executing a trade", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "004bfd6f6f344e8f95b035f1db2c8952", "memory_type": "procedural", "when_to_use": "When encountering account information synchronization issues", "content": "Created a structured support ticket using create_ticket with clear title, description, and priority. This ensured systematic issue tracking while maintaining user context for support teams.", "score": 0, "time_created": "2025-09-20 11:42:44", "time_modified": "2025-09-20 11:42:44", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "An unanticipated error has emerged while accessing my account information. Could you file a support ticket titled 'Account Information Error'...", "when_to_use": "When encountering account information synchronization issues", "category": "success", "created_time": "2025-09-20 11:42:44", "modified_time": "2025-09-20 11:42:44", "generalized_query": "Reporting account information synchronization problems", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "a2026c158684462fb4d88cbd7c302843", "memory_type": "procedural", "when_to_use": "When calculating road distance between two cities for trip planning", "content": "Successfully used a two-step process: first obtaining zipcodes for both cities using get_zipcode_based_on_city, then calculating distance with estimate_distance. This ensures accurate location mapping before distance calculation.", "score": 0, "time_created": "2025-09-20 11:42:58", "time_modified": "2025-09-20 11:42:58", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Before I set off for Stonebrook to uncover family history, I need to determine the road distance between San Francisco and Stonebrook for my genealogy exploration.", "when_to_use": "When calculating road distance between two cities for trip planning", "category": "success", "created_time": "2025-09-20 11:42:58", "modified_time": "2025-09-20 11:42:58", "generalized_query": "Calculate the distance between two geographic locations for travel planning", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "05bd3ec9d0a1438daada9437b10ec72c", "memory_type": "procedural", "when_to_use": "When amplifying content reach after initial posting", "content": "Timely retweet immediately after initial post maximized exposure. This decision demonstrated understanding of social media algorithms favoring active engagement.", "score": 0, "time_created": "2025-09-20 11:42:58", "time_modified": "2025-09-20 11:42:58", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Once the tweet is live, I should retweet it to widen the circle of those who might share in this genealogy fervor!", "when_to_use": "When amplifying content reach after initial posting", "category": "success", "created_time": "2025-09-20 11:42:58", "modified_time": "2025-09-20 11:42:58", "generalized_query": "Retweet content to increase visibility and community engagement", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "feb96841e8844344b7d4edc2e78d54aa", "memory_type": "procedural", "when_to_use": "When performing actions that require authentication (e.g., posting to social media)", "content": "Repeatedly attempting authentication with invalid credentials without implementing error handling or user feedback leads to infinite failure loops. Always verify authentication status before proceeding with platform-specific actions.", "score": 0, "time_created": "2025-09-20 11:42:58", "time_modified": "2025-09-20 11:42:58", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Buzzing with anticipation for this family roots journey, I want to tweet: 'Setting forth on an exciting quest from San Francisco to Stonebrook to uncover ancestral stories!' #GenealogyAdventure #FamilyHistory.", "when_to_use": "When performing actions that require authentication (e.g., posting to social media)", "category": "failure", "created_time": "2025-09-20 11:42:58", "modified_time": "2025-09-20 11:42:58", "generalized_query": "Executing actions that require user authentication on a platform", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "86ad5a70cfda4e7f915ec85293b76177", "memory_type": "procedural", "when_to_use": "When converting fuel measurements between liters and gallons for vehicle refueling", "content": "Successful execution required using the liter_to_gallon conversion tool first, then fillFuelTank with precise gallon amount. This works because the vehicle system uses gallons, and precise conversion ensures accurate fueling without overflow.", "score": 0, "time_created": "2025-09-20 11:43:21", "time_modified": "2025-09-20 11:43:21", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Would you be so kind as to assist me in filling up my car with 15 liters of gasoline? Fill with the second decimal digit precision in gallon", "when_to_use": "When converting fuel measurements between liters and gallons for vehicle refueling", "category": "success", "created_time": "2025-09-20 11:43:21", "modified_time": "2025-09-20 11:43:21", "generalized_query": "Convert volume measurements between liters and gallons for vehicle fueling", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "3a0efeb6f1184b0f8e773240157b51cb", "memory_type": "procedural", "when_to_use": "When performing vehicle maintenance tasks with dependent system requirements", "content": "Successfully started engine only after addressing lockDoors error and pressing brake pedal. This demonstrates the need to handle system dependencies (locked doors, brake engagement) before executing critical operations like engine start.", "score": 0, "time_created": "2025-09-20 11:43:21", "time_modified": "2025-09-20 11:43:21", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "start up the engine and let me know the battery voltage and fuel level", "when_to_use": "When performing vehicle maintenance tasks with dependent system requirements", "category": "success", "created_time": "2025-09-20 11:43:21", "modified_time": "2025-09-20 11:43:21", "generalized_query": "Execute vehicle systems operations with prerequisite safety checks", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "284bc44972104717bcad0b6977d24c37", "memory_type": "procedural", "when_to_use": "When amplifying social media content through multi-action engagement", "content": "Effective content amplification required sequential use of retweet and comment functions with proper tweet_id reference. This works because Twitter engagement actions require specific tweet identification and sequential execution.", "score": 0, "time_created": "2025-09-20 11:43:21", "time_modified": "2025-09-20 11:43:21", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Could you possibly amplify its reach by retweeting it? And if you could add a comment saying, 'Ready for the next adventure!'", "when_to_use": "When amplifying social media content through multi-action engagement", "category": "success", "created_time": "2025-09-20 11:43:21", "modified_time": "2025-09-20 11:43:21", "generalized_query": "Increase social media content visibility through retweets and comments", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "b4a7a18dc4ff44e39185afadb0d300c3", "memory_type": "procedural", "when_to_use": "When a user needs to obtain stock details (symbol, price, market activity) for a company", "content": "Successfully combined get_symbol_by_name and get_stock_info to deliver comprehensive stock details. This two-step verification ensures accuracy in symbol mapping and provides critical metrics (price, volume, moving averages) for informed decision-making.", "score": 0, "time_created": "2025-09-20 11:43:40", "time_modified": "2025-09-20 11:43:40", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Before purchasing shares in Zeta Corp, I am curious about their recent stock performance. Could you provide their stock symbol and detail their market activity?", "when_to_use": "When a user needs to obtain stock details (symbol, price, market activity) for a company", "category": "success", "created_time": "2025-09-20 11:43:40", "modified_time": "2025-09-20 11:43:40", "generalized_query": "Retrieve stock symbol and market data for a specified company", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "557eab156b9a4ba0a27b2960f6a34e69", "memory_type": "procedural", "when_to_use": "When executing or managing trade orders (placement, cancellation, status checks)", "content": "Efficiently used place_order for execution and cancel_order for reversal, paired with real-time status updates. This demonstrates effective order lifecycle management through precise tool usage and clear user feedback loops.", "score": 0, "time_created": "2025-09-20 11:43:40", "time_modified": "2025-09-20 11:43:40", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Could you initiate a purchase of 50 shares at the prevailing market rate for me?", "when_to_use": "When executing or managing trade orders (placement, cancellation, status checks)", "category": "success", "created_time": "2025-09-20 11:43:40", "modified_time": "2025-09-20 11:43:40", "generalized_query": "Execute a stock trade order or manage existing orders", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "fbc697a8df86483e820b079828c6feab", "memory_type": "procedural", "when_to_use": "When verifying account details (balance, linked payment methods) post-transaction", "content": "Utilized get_account_info to provide critical account validation details. This ensures transparency and security by confirming financial standing and payment method alignment without exposing sensitive data unnecessarily.", "score": 0, "time_created": "2025-09-20 11:43:40", "time_modified": "2025-09-20 11:43:40", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Could you deliver an update on my account, including the current balance and the linked card number?", "when_to_use": "When verifying account details (balance, linked payment methods) post-transaction", "category": "success", "created_time": "2025-09-20 11:43:40", "modified_time": "2025-09-20 11:43:40", "generalized_query": "Retrieve account balance and payment method verification", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "c0b1c5896ba64f0988c78a5f7f291b1d", "memory_type": "procedural", "when_to_use": "When a user needs to determine the current market status based on the time of day", "content": "Successfully retrieved current time using get_current_time, then used update_market_status with the timestamp to provide accurate market status (Open/Closed). This ensures users make informed decisions based on real-time market conditions.", "score": 0, "time_created": "2025-09-20 11:43:31", "time_modified": "2025-09-20 11:43:31", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I just arrived at the office and want to know the current market status to plan my trading activities for the day. Update the market status with the current time so I can adjust my strategy accordingly.", "when_to_use": "When a user needs to determine the current market status based on the time of day", "category": "success", "created_time": "2025-09-20 11:43:31", "modified_time": "2025-09-20 11:43:31", "generalized_query": "Determine and update market status based on current time for trading planning", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "5f18eaca81a74d8fa37defd87fcd640f", "memory_type": "procedural", "when_to_use": "When executing file operations requiring precise directory navigation and error handling", "content": "The higher-scoring approach systematically navigated to the correct directory path first, verified directory structure, and handled edge cases (e.g., existing 'archive' directory). The lower-scoring sequence repeatedly attempted invalid moves without resolving path inconsistencies or confirming directory context.", "score": 0, "time_created": "2025-09-20 11:43:57", "time_modified": "2025-09-20 11:43:57", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Find analysis_report.csv and upon locating it, ensure you move it to the 'archive' directory in the same directory of analysis report for safekeeping.", "when_to_use": "When executing file operations requiring precise directory navigation and error handling", "category": "comparative", "created_time": "2025-09-20 11:43:57", "modified_time": "2025-09-20 11:43:57", "generalized_query": "Execute file relocation with directory validation and error resolution", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "f03c68dd659e4fb5af09b606df47f7cd", "memory_type": "procedural", "when_to_use": "When reinforcing social media posts with follow-up engagement actions", "content": "Effectively used Twitter API functions in sequence: authenticate -> post_tweet -> comment. Showed understanding of temporal workflow (commenting after tweet publication) and strategic reinforcement of messaging.", "score": 0, "time_created": "2025-09-20 11:44:04", "time_modified": "2025-09-20 11:44:04", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Once the tweet is live, reinforce the achievement by commenting underneath with a phrase like 'Another successful task completed today!' to highlight our team's continued success.", "when_to_use": "When reinforcing social media posts with follow-up engagement actions", "category": "success", "created_time": "2025-09-20 11:44:04", "modified_time": "2025-09-20 11:44:04", "generalized_query": "Enhance social media engagement through post-publication interaction", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "f049fee63fbc452c93a99ddb136be998", "memory_type": "procedural", "when_to_use": "When preparing files for review through preprocessing operations", "content": "Combined 'sort' and 'cat' commands to both preprocess and visualize file contents. Demonstrated understanding of workflow order (sorting before display) and file preparation best practices.", "score": 0, "time_created": "2025-09-20 11:44:04", "time_modified": "2025-09-20 11:44:04", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "After the file transfer, display the contents of 'archive_summary.txt' in the current working directory. Sort the contents alphabetically for easy review and analysis.", "when_to_use": "When preparing files for review through preprocessing operations", "category": "success", "created_time": "2025-09-20 11:44:04", "modified_time": "2025-09-20 11:44:04", "generalized_query": "Prepare text files for analysis through sorting and display operations", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "e7343eb6ed1a47919208598f690df388", "memory_type": "procedural", "when_to_use": "When copying files between directories, especially when ensuring the source file exists and paths are correctly specified", "content": "Always verify the existence of the source file before attempting to copy it, and ensure destination paths adhere to tool constraints (e.g., no full paths in destination parameters).", "score": 0, "time_created": "2025-09-20 11:44:09", "time_modified": "2025-09-20 11:44:09", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Transfer the 'annual_report.txt' in Documents directory to the 'Reports' directory that's in Documents directory, but also make sure it remains available in its current spot.", "when_to_use": "When copying files between directories, especially when ensuring the source file exists and paths are correctly specified", "category": "failure", "created_time": "2025-09-20 11:44:09", "modified_time": "2025-09-20 11:44:09", "generalized_query": "Copy a file to a subdirectory while retaining the original file in its current location", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "718f8470036d49f9a917c81dae837660", "memory_type": "procedural", "when_to_use": "When listing files/directories, including hidden ones, to ensure completeness", "content": "Using the 'ls' command with the 'a' parameter set to true ensures hidden files/directories are included. This prevents omission of critical system files or user-specific configurations.", "score": 0, "time_created": "2025-09-20 11:44:22", "time_modified": "2025-09-20 11:44:22", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Arrange a complete listing of all files and directories presently located here, making sure you don't overlook the hidden ones too.", "when_to_use": "When listing files/directories, including hidden ones, to ensure completeness", "category": "success", "created_time": "2025-09-20 11:44:22", "modified_time": "2025-09-20 11:44:22", "generalized_query": "List all files and directories (including hidden items) in the current working directory", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "4167fbd5d5d74393ae7729704a8f5ab4", "memory_type": "procedural", "when_to_use": "When sending messages requiring user authentication", "content": "The sequence of first calling 'message_login' then 'send_message' ensures proper authentication context. This prevents authorization errors and establishes clear audit trails for message delivery.", "score": 0, "time_created": "2025-09-20 11:44:22", "time_modified": "2025-09-20 11:44:22", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Attempt to relay a message to the individual with ID 'USR002' by logging in as USR001, updating them on the finalization of the report saying 'The report has been finalized.'", "when_to_use": "When sending messages requiring user authentication", "category": "success", "created_time": "2025-09-20 11:44:22", "modified_time": "2025-09-20 11:44:22", "generalized_query": "Send a message to a user after authenticating as a different user", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "ff17810a801940c78f91d8e575217730", "memory_type": "procedural", "when_to_use": "When refueling a vehicle, especially when the tank capacity is known", "content": "Always verify the current fuel level and tank capacity before attempting to fill, to avoid exceeding the tank's maximum limit.", "score": 0, "time_created": "2025-09-20 11:44:37", "time_modified": "2025-09-20 11:44:37", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I would like to increase the amount of fuel in my car to completely full, but first I need to ascertain the present level to determine the appropriate amount to add.", "when_to_use": "When refueling a vehicle, especially when the tank capacity is known", "category": "failure", "created_time": "2025-09-20 11:44:37", "modified_time": "2025-09-20 11:44:37", "generalized_query": "Determining the correct amount of fuel to add based on current levels and tank capacity", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "47e34c095ac044ba87437ca0fb4a1039", "memory_type": "procedural", "when_to_use": "When starting a vehicle's engine after locking doors", "content": "Engine start sequences require checking and fulfilling all prerequisite conditions (e.g., locked doors, brake pedal pressed) to prevent operational errors.", "score": 0, "time_created": "2025-09-20 11:44:37", "time_modified": "2025-09-20 11:44:37", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "activate the engine using the 'START' function and verify the tire pressure to ensure it is in optimal condition.", "when_to_use": "When starting a vehicle's engine after locking doors", "category": "failure", "created_time": "2025-09-20 11:44:37", "modified_time": "2025-09-20 11:44:37", "generalized_query": "Starting a vehicle's engine requires adherence to safety protocols like door locks and brake engagement", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "a1cdd9baa8174c39b75a04bd37084fc5", "memory_type": "procedural", "when_to_use": "When monitoring tire pressure and determining service needs", "content": "System-defined 'healthy' pressure ranges may differ from user expectations; explicitly communicate thresholds and clarify if user-defined limits require intervention.", "score": 0, "time_created": "2025-09-20 11:44:37", "time_modified": "2025-09-20 11:44:37", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Should I notice that my tire pressure falls below 40 psi, kindly provide me with directions to the nearest tire service center for prompt resolution.", "when_to_use": "When monitoring tire pressure and determining service needs", "category": "failure", "created_time": "2025-09-20 11:44:37", "modified_time": "2025-09-20 11:44:37", "generalized_query": "Interpreting tire pressure thresholds and triggering maintenance alerts", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "f076536b80414f9e9e35633e1cabae29", "memory_type": "procedural", "when_to_use": "When performing actions that require user authentication (e.g., sending messages)", "content": "Always verify user authentication status before attempting actions that require logged-in access to prevent 'No user is currently logged in' errors.", "score": 0, "time_created": "2025-09-20 11:44:37", "time_modified": "2025-09-20 11:44:37", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I'd appreciate it if you could send a quick message 'I am on my way to your place.' to my cousin (user id USR002), updating them my status.", "when_to_use": "When performing actions that require user authentication (e.g., sending messages)", "category": "failure", "created_time": "2025-09-20 11:44:37", "modified_time": "2025-09-20 11:44:37", "generalized_query": "Executing actions that require user authentication without verifying login status", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "d349490fe836499fab64de698575fb01", "memory_type": "procedural", "when_to_use": "When interpreting system status indicators (e.g., tire pressure health)", "content": "Explicitly compare system-provided status values to user-defined thresholds rather than relying solely on system-generated health indicators, which may use different criteria.", "score": 0, "time_created": "2025-09-20 11:44:37", "time_modified": "2025-09-20 11:44:37", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Could you provide an update on the current tire pressure status? If it's below 40, point me to nearest tire shop.", "when_to_use": "When interpreting system status indicators (e.g., tire pressure health)", "category": "failure", "created_time": "2025-09-20 11:44:37", "modified_time": "2025-09-20 11:44:37", "generalized_query": "Relying on system-defined status labels without validating against user-specific thresholds", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "b99016cf37fb442db281922a24f46207", "memory_type": "procedural", "when_to_use": "When verifying and locking all car doors to ensure security", "content": "The lockDoors function was called with all door types specified and 'unlock' set to false, ensuring comprehensive locking. The system confirmed no remaining unlocked doors, demonstrating the effectiveness of explicitly enumerating all doors and using the correct boolean parameter.", "score": 0, "time_created": "2025-09-20 11:44:45", "time_modified": "2025-09-20 11:44:45", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I've noticed that some of my car doors are slightly ajar while others seem to be securely locked. Would you be able to verify and make sure all doors are properly locked for safety?", "when_to_use": "When verifying and locking all car doors to ensure security", "category": "success", "created_time": "2025-09-20 11:44:45", "modified_time": "2025-09-20 11:44:45", "generalized_query": "Securing vehicle access by verifying and locking all doors", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "154af024d9e846a2b4edbe4da41deb00", "memory_type": "procedural", "when_to_use": "When initiating engine ignition with safety prerequisites", "content": "The sequence correctly identified the need to press the brake pedal before starting the engine. This decision point highlights the importance of checking prerequisite conditions (brake engagement) before executing critical actions like engine ignition.", "score": 0, "time_created": "2025-09-20 11:44:45", "time_modified": "2025-09-20 11:44:45", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Would you initiate the engine's ignition in START mode?", "when_to_use": "When initiating engine ignition with safety prerequisites", "category": "success", "created_time": "2025-09-20 11:44:45", "modified_time": "2025-09-20 11:44:45", "generalized_query": "Starting a vehicle's engine while ensuring safety conditions are met", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "b9111f3e90bc410ab82d0c4b0de689ad", "memory_type": "procedural", "when_to_use": "When needing to locate and retrieve a specific file in a directory, including hidden files", "content": "Combining 'cd' to navigate to the target directory, 'ls -a' to list all files (including hidden ones), and 'find' with the exact filename pattern ensures comprehensive file discovery. Using 'cat' immediately after confirms content retrieval.", "score": 0, "time_created": "2025-09-20 11:44:49", "time_modified": "2025-09-20 11:44:49", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Please cd into project folder and find Kelly's test report somewhere in the directory and read the content to me.", "when_to_use": "When needing to locate and retrieve a specific file in a directory, including hidden files", "category": "success", "created_time": "2025-09-20 11:44:49", "modified_time": "2025-09-20 11:44:49", "generalized_query": "Retrieve a specific file from a directory, including hidden files", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "e510abfa0e4147e19fad65fa5cc480b5", "memory_type": "procedural", "when_to_use": "When sending a formatted message to a user after establishing their contact information", "content": "Sequentially using 'add_contact' to create the contact, 'get_user_id' to obtain the receiver ID, 'send_message' to deliver the content, and 'view_messages_sent' for verification ensures reliable communication workflow.", "score": 0, "time_created": "2025-09-20 11:44:49", "time_modified": "2025-09-20 11:44:49", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Please dispatch of the report to Kelly, I need to add her contact (Kelly), in the format of 'Kelly Total Score: total_score', I'd appreciate a list of all the communications I've sent until now.", "when_to_use": "When sending a formatted message to a user after establishing their contact information", "category": "success", "created_time": "2025-09-20 11:44:49", "modified_time": "2025-09-20 11:44:49", "generalized_query": "Send a message to a user after adding them as a contact and verify sent communications", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "a61744333adf450ea40bc8ceb9bee5e8", "memory_type": "procedural", "when_to_use": "When composing messages based on dynamically retrieved data", "content": "The higher-scoring approach used the actual score extracted from the file (96) rather than a static placeholder ('total_score'). This ensured message accuracy and completeness. The lower-scoring approach retained the placeholder, which likely caused the task to fail validation or lose critical information. Dynamic data substitution is essential for reliable automation.", "score": 0, "time_created": "2025-09-20 11:45:01", "time_modified": "2025-09-20 11:45:01", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Please dispatch of the report to Kelly, I need to add her contact (Kelly), in the format of 'Kelly Total Score: total_score', I'd appreciate a list of all the communications I've sent until now.", "when_to_use": "When composing messages based on dynamically retrieved data", "category": "comparative", "created_time": "2025-09-20 11:45:01", "modified_time": "2025-09-20 11:45:01", "generalized_query": "Generate and send a message using dynamically retrieved data while maintaining a record of communications.", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "7b1f9ac6a4d54e31b90b59a57a0740e0", "memory_type": "procedural", "when_to_use": "When executing vehicle control sequences requiring multiple dependent actions (e.g., engine start, cruise control activation)", "content": "The higher-scoring approach ensured engine startup prerequisites (locked doors + brake pedal engagement) were completed before attempting cruise control activation, avoiding errors. The lower-scoring sequence attempted cruise control configuration before engine startup, triggering a system error that required backtracking and additional steps.", "score": 0, "time_created": "2025-09-20 11:45:12", "time_modified": "2025-09-20 11:45:12", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "With every door now open, please proceed to fire up the engine; I need to ensure everything's in working order before hitting the road.", "when_to_use": "When executing vehicle control sequences requiring multiple dependent actions (e.g., engine start, cruise control activation)", "category": "comparative", "created_time": "2025-09-20 11:45:12", "modified_time": "2025-09-20 11:45:12", "generalized_query": "Executing vehicle startup and configuration sequences with interdependent system requirements", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "943ed6412b9a4fae95b0879f90008864", "memory_type": "procedural", "when_to_use": "When the user needs to assess vehicle readiness for a trip based on fuel capacity and distance", "content": "The higher-scoring approach proactively used the 'estimate_drive_feasibility_by_mileage' tool to automate the assessment, while the lower-scoring response failed to leverage available tools and instead requested manual user input. This demonstrates the importance of using built-in diagnostic tools rather than relying on incomplete user data.", "score": 0, "time_created": "2025-09-20 11:45:21", "time_modified": "2025-09-20 11:45:21", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I need that info to check if my vehicle can cover the distance without refueling.", "when_to_use": "When the user needs to assess vehicle readiness for a trip based on fuel capacity and distance", "category": "comparative", "created_time": "2025-09-20 11:45:21", "modified_time": "2025-09-20 11:45:21", "generalized_query": "Assessing vehicle fuel feasibility for a journey", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "08bd55472ab046629da909f0bc7affa2", "memory_type": "procedural", "when_to_use": "When attempting to start a vehicle's engine", "content": "Vehicle engine start requires sequential completion of safety checks: doors must be locked first, then brake pedal must be pressed before ignition", "score": 0, "time_created": "2025-09-20 11:45:21", "time_modified": "2025-09-20 11:45:21", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Turn on my vehicle's engine in 'START' mode.", "when_to_use": "When attempting to start a vehicle's engine", "category": "failure", "created_time": "2025-09-20 11:45:21", "modified_time": "2025-09-20 11:45:21", "generalized_query": "Initiating vehicle engine startup sequence", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "d8e70426b69241da91d4df332ba80911", "memory_type": "procedural", "when_to_use": "When handling file operations or ticket modifications based on file attributes", "content": "Always verify file existence and explicitly confirm filenames before executing operations that depend on file attributes", "score": 0, "time_created": "2025-09-20 11:45:36", "time_modified": "2025-09-20 11:45:36", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "If the character count of any file is greater than 20, Set the priority to 3. Else, set to 2.", "when_to_use": "When handling file operations or ticket modifications based on file attributes", "category": "failure", "created_time": "2025-09-20 11:45:36", "modified_time": "2025-09-20 11:45:36", "generalized_query": "Modify a ticket's priority based on file attribute thresholds", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "c5a881fa55074dc8a21a6dd1c317b27c", "memory_type": "procedural", "when_to_use": "When calculating distances between two locations using zip codes", "content": "Successfully retrieved zip codes for both cities using get_zipcode_based_on_city, then used estimate_distance with the zip codes to calculate the distance. This pattern works because it leverages geolocation data through zip code mapping and distance estimation tools.", "score": 0, "time_created": "2025-09-20 11:46:02", "time_modified": "2025-09-20 11:46:02", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "How far apart are San Francisco and Rivermist?", "when_to_use": "When calculating distances between two locations using zip codes", "category": "success", "created_time": "2025-09-20 11:46:02", "modified_time": "2025-09-20 11:46:02", "generalized_query": "Determine the distance between two cities using their zip codes", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "95b6b4cc128d4bc682d7d2c2662caaa2", "memory_type": "procedural", "when_to_use": "When managing vehicle fuel levels and unit conversions", "content": "Combined displayCarStatus to check fuel levels in gallons, then used gallon_to_liter for unit conversion. This approach ensures users receive information in their preferred units while maintaining accuracy in fuel management.", "score": 0, "time_created": "2025-09-20 11:46:02", "time_modified": "2025-09-20 11:46:02", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "What's the current level of gasoline I have in liters?", "when_to_use": "When managing vehicle fuel levels and unit conversions", "category": "success", "created_time": "2025-09-20 11:46:02", "modified_time": "2025-09-20 11:46:02", "generalized_query": "Convert vehicle fuel measurements between gallons and liters", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "dfd119d776de4013afe2fde322421eb2", "memory_type": "procedural", "when_to_use": "When handling vehicle ignition system prerequisites", "content": "Successfully followed the required sequence: locking all doors, pressing the brake pedal, then starting the engine. This pattern ensures compliance with vehicle safety protocols for engine ignition.", "score": 0, "time_created": "2025-09-20 11:46:02", "time_modified": "2025-09-20 11:46:02", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Engage the 'START' ignition mode to ready the vehicle", "when_to_use": "When handling vehicle ignition system prerequisites", "category": "success", "created_time": "2025-09-20 11:46:02", "modified_time": "2025-09-20 11:46:02", "generalized_query": "Execute vehicle engine start sequence with safety checks", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "8c99cff95e6a4f58a87d7e4d7a6348c5", "memory_type": "procedural", "when_to_use": "When troubleshooting persistent tool errors", "content": "Repeated function calls with identical parameters indicate need for parameter validation and error message analysis to identify root causes", "score": 0, "time_created": "2025-09-20 11:46:12", "time_modified": "2025-09-20 11:46:12", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "It seems there's a persistent issue with filling the tank due to unit discrepancies...", "when_to_use": "When troubleshooting persistent tool errors", "category": "failure", "created_time": "2025-09-20 11:46:12", "modified_time": "2025-09-20 11:46:12", "generalized_query": "Identifying and resolving recurring tool execution errors", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "62cf46f6e520498e9dd9b70359dce0f9", "memory_type": "procedural", "when_to_use": "When a user requests flight cost estimation between specific airports with class and date specifications", "content": "Directly using the get_flight_cost function with parameters (travel_from, travel_to, travel_date, travel_class) provides immediate cost data without unnecessary intermediaries. This works because the function is purpose-built for this exact query type.", "score": 0, "time_created": "2025-09-20 11:46:14", "time_modified": "2025-09-20 11:46:14", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Could you assist in estimating the airfare between ORD and SVP from the comprehensive list available through the system? Please note, I am considering traveling next weekend July 14th, 2024 with a preference for a business class seat.", "when_to_use": "When a user requests flight cost estimation between specific airports with class and date specifications", "category": "success", "created_time": "2025-09-20 11:46:14", "modified_time": "2025-09-20 11:46:14", "generalized_query": "Requesting flight cost estimation between two airports with specific travel date and class preferences", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "46487c48027a4a8d9159fbea9464c566", "memory_type": "procedural", "when_to_use": "When users need to authenticate and manage financial parameters for travel", "content": "The sequence demonstrates effective use of authentication tokens and budget-setting tools to enable secure financial management. This pattern ensures proper system access before executing transactions.", "score": 0, "time_created": "2025-09-20 11:46:14", "time_modified": "2025-09-20 11:46:14", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "N/A", "when_to_use": "When users need to authenticate and manage financial parameters for travel", "category": "success", "created_time": "2025-09-20 11:46:14", "modified_time": "2025-09-20 11:46:14", "generalized_query": "Authenticating travel systems and configuring financial parameters for trip planning", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "74c7dd1368b74760b47e9aa64302a45e", "memory_type": "procedural", "when_to_use": "When authenticating to a travel API with client credentials and requiring read-write access", "content": "Successful authentication required using the authenticate_travel function with all required parameters (client_id, client_secret, refresh_token, grant_type, user_first_name, user_last_name). The grant_type 'read_write' was critical for enabling both read and write capabilities in the travel system.", "score": 0, "time_created": "2025-09-20 11:46:10", "time_modified": "2025-09-20 11:46:10", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I've recently joined this travel application which promises premium access to some fantastic deals. To get started, I need to access my account. My credentials are ready for you: the client ID is 'trav3lMaxID2023', the client secret is 'M@xSecret!', and the refresh token 'r3freshM3n0w'. If you could handle the authentication, I would like to set it up for both reading and writing. My first name is Maxwell, last name Edison", "when_to_use": "When authenticating to a travel API with client credentials and requiring read-write access", "category": "success", "created_time": "2025-09-20 11:46:10", "modified_time": "2025-09-20 11:46:10", "generalized_query": "Authenticate to a travel API using client credentials with read-write permissions", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "c2526fb78cc04895940d9fe6359e1642", "memory_type": "procedural", "when_to_use": "When encountering unexpected API errors related to parameters", "content": "If an API rejects a parameter, immediately cross-check the function's required parameters with the latest API documentation. Avoid assuming parameter validity based solely on tool definitions.", "score": 0, "time_created": "2025-09-20 11:46:25", "time_modified": "2025-09-20 11:46:25", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "book me a business class ticket from SFO to LAX for December 15, 2024", "when_to_use": "When encountering unexpected API errors related to parameters", "category": "failure", "created_time": "2025-09-20 11:46:25", "modified_time": "2025-09-20 11:46:25", "generalized_query": "Handling API errors during flight booking operations", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "f439e4bc501b48cdabb2754790471246", "memory_type": "procedural", "when_to_use": "When verifying message history after sending communications", "content": "Both approaches successfully retrieved messages, but the higher-scoring response included explicit message IDs and clearer formatting, enhancing usability. This reflects attention to detail in providing actionable feedback, which likely contributed to the higher score despite identical functional outcomes.", "score": 0, "time_created": "2025-09-20 11:46:31", "time_modified": "2025-09-20 11:46:31", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Could you check what’s sent by me lately?", "when_to_use": "When verifying message history after sending communications", "category": "comparative", "created_time": "2025-09-20 11:46:31", "modified_time": "2025-09-20 11:46:31", "generalized_query": "Retrieve and confirm sent messages in a messaging system", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "19c69f0487d84ae0a52772a0a68f0f30", "memory_type": "procedural", "when_to_use": "When needing to retrieve specific content from a file (e.g., last line)", "content": "Always use the most direct tool for the task (e.g., 'tail' for last lines, not 'diff' or 'cat')", "score": 0, "time_created": "2025-09-20 11:46:33", "time_modified": "2025-09-20 11:46:33", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Could you display the last line of that file for me?", "when_to_use": "When needing to retrieve specific content from a file (e.g., last line)", "category": "failure", "created_time": "2025-09-20 11:46:33", "modified_time": "2025-09-20 11:46:33", "generalized_query": "Retrieve specific content (e.g., last line) from a file in a directory", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "60b103c9f48c4084aec4fc93cff6bc39", "memory_type": "procedural", "when_to_use": "When a user needs to retrieve their current stock watchlist and review specific stock details", "content": "Directly calling get_watchlist with no parameters efficiently retrieves the user's monitored stocks. This pattern works because the function is designed to return the entire watchlist without requiring additional filters or parameters, ensuring immediate visibility into the user's tracking preferences.", "score": 0, "time_created": "2025-09-20 11:47:02", "time_modified": "2025-09-20 11:47:02", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I'm currently exploring the StockView platform and wish to take a peek at the assortment in my stock watchlist. I'd appreciate it if you could display the stocks I'm monitoring right now.", "when_to_use": "When a user needs to retrieve their current stock watchlist and review specific stock details", "category": "success", "created_time": "2025-09-20 11:47:02", "modified_time": "2025-09-20 11:47:02", "generalized_query": "Retrieve and display user-specific stock watchlist contents", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "337ee8fdb9204afcbc4c14ae4cc81acd", "memory_type": "procedural", "when_to_use": "When creating support tickets requires authentication and structured issue reporting", "content": "The sequence demonstrated proper authentication (ticket_login) before ticket creation, handling the 'User not authenticated' error. This shows the importance of checking authentication status prerequisites for ticketing system functions, ensuring secure and successful issue reporting.", "score": 0, "time_created": "2025-09-20 11:47:02", "time_modified": "2025-09-20 11:47:02", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "initiating a priority level 3 support ticket labeled 'Urgent: Transaction Issue' with description about canceled buy order", "when_to_use": "When creating support tickets requires authentication and structured issue reporting", "category": "success", "created_time": "2025-09-20 11:47:02", "modified_time": "2025-09-20 11:47:02", "generalized_query": "Create a support ticket for transaction-related issues", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "8df51def059d4b749fb146033f9765c6", "memory_type": "procedural", "when_to_use": "When providing account information or transaction confirmations", "content": "The higher-scoring response masked sensitive card information (showing only last 12 digits) and explicitly mentioned no open orders existed. This demonstrated better information hygiene compared to the lower-scoring response which showed full card numbers without redaction, potentially exposing more sensitive data.", "score": 0, "time_created": "2025-09-20 11:47:05", "time_modified": "2025-09-20 11:47:05", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "A summary of my present account balance along with pertinent data would be highly beneficial.", "when_to_use": "When providing account information or transaction confirmations", "category": "comparative", "created_time": "2025-09-20 11:47:05", "modified_time": "2025-09-20 11:47:05", "generalized_query": "Requesting account balance and transaction information verification", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "c5d5cb4949034b1daebe246520eba50e", "memory_type": "procedural", "when_to_use": "When creating a new file with initial content", "content": "Using 'touch' to create the file first ensures the file exists, then 'echo' writes the content directly. This two-step approach guarantees both file creation and content population in a single atomic operation.", "score": 0, "time_created": "2025-09-20 11:47:02", "time_modified": "2025-09-20 11:47:02", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I need you to draft a comprehensive guide for our new initiative, and let's name it 'Project_Guide_1.md'. Put 'Comprehensive guide for the new initiative.' in it.", "when_to_use": "When creating a new file with initial content", "category": "success", "created_time": "2025-09-20 11:47:02", "modified_time": "2025-09-20 11:47:02", "generalized_query": "Create a file with a specific name and populate it with initial content", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "a692b23ecef84975aa1dda40dbe21e1b", "memory_type": "procedural", "when_to_use": "When needing human-readable disk usage information", "content": "Setting the 'human_readable' parameter to true in the 'du' function transforms technical byte counts into intuitive units (e.g., KB/MB), making the output immediately useful for non-technical stakeholders.", "score": 0, "time_created": "2025-09-20 11:47:02", "time_modified": "2025-09-20 11:47:02", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I would love to get the human-readable disk usage of the current working directory.", "when_to_use": "When needing human-readable disk usage information", "category": "success", "created_time": "2025-09-20 11:47:02", "modified_time": "2025-09-20 11:47:02", "generalized_query": "Retrieve disk usage statistics in an easily understandable format", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "42721a6c8569448bbdbcd27e4d63a710", "memory_type": "procedural", "when_to_use": "When resolving tickets without immediate resolution details", "content": "Using an empty string for the resolution parameter in 'resolve_ticket' allows for provisional closure while maintaining flexibility to add details later, avoiding premature commitment to specific resolution language.", "score": 0, "time_created": "2025-09-20 11:47:02", "time_modified": "2025-09-20 11:47:02", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "There's a minor snag in our ticketing system. Ticket #7423 is still unresolved, but with our recent brainstorming feedback, just go ahead and check it off as resolved. Leave it empty for resolve description.", "when_to_use": "When resolving tickets without immediate resolution details", "category": "success", "created_time": "2025-09-20 11:47:02", "modified_time": "2025-09-20 11:47:02", "generalized_query": "Mark a ticket as resolved without providing immediate resolution details", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "3dff687fe93f4eb0aff3420e6d3b3f3a", "memory_type": "procedural", "when_to_use": "When a user needs to add a specific stock to their watchlist and immediately verify the updated watchlist contents", "content": "Successfully executed a two-step process: first using 'add_to_watchlist' with the correct stock symbol, then immediately calling 'get_watchlist' to confirm the addition. This ensures atomicity and verification in watchlist modifications.", "score": 0, "time_created": "2025-09-20 11:47:58", "time_modified": "2025-09-20 11:47:58", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Could you kindly integrate Apple's stock into my current watchlist and subsequently provide me with a detailed breakdown of the watchlist's contents?", "when_to_use": "When a user needs to add a specific stock to their watchlist and immediately verify the updated watchlist contents", "category": "success", "created_time": "2025-09-20 11:47:58", "modified_time": "2025-09-20 11:47:58", "generalized_query": "Add [specific stock] to watchlist and retrieve updated watchlist contents", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "294db0fe061b485baac9bea672bfd1d1", "memory_type": "procedural", "when_to_use": "When presenting technical analysis of a stock's price movement", "content": "Successfully interpreted stock data by comparing current price to 5-day and 20-day moving averages. This technique helps identify short-term momentum (5-day MA) versus long-term trends (20-day MA), providing actionable market context.", "score": 0, "time_created": "2025-09-20 11:48:00", "time_modified": "2025-09-20 11:48:00", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Please retrieve and delivery of comprehensive information about the stock NVDA.", "when_to_use": "When presenting technical analysis of a stock's price movement", "category": "success", "created_time": "2025-09-20 11:48:00", "modified_time": "2025-09-20 11:48:00", "generalized_query": "Analyze [stock_symbol]'s price position relative to moving averages", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "996d4b1037cf4f6a91ca4d861ac235b8", "memory_type": "procedural", "when_to_use": "When summing multiple numerical values obtained from prior operations", "content": "Use the sum_values function for aggregating lists of numbers instead of chaining add operations, which reduces error risk and improves efficiency.", "score": 0, "time_created": "2025-09-20 11:47:50", "time_modified": "2025-09-20 11:47:50", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Could you compute the average of the three numerical value obtained? Just for my personal use.", "when_to_use": "When summing multiple numerical values obtained from prior operations", "category": "failure", "created_time": "2025-09-20 11:47:50", "modified_time": "2025-09-20 11:47:50", "generalized_query": "Calculating the average of multiple numerical values from previous results", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "fbad4bc315824ad9aebad13f796b5cb7", "memory_type": "procedural", "when_to_use": "When verifying file content statistics", "content": "Always verify file metadata using the wc tool with explicit mode parameters to avoid ambiguous interpretations of 'words' (e.g., delimiter sensitivity).", "score": 0, "time_created": "2025-09-20 11:47:50", "time_modified": "2025-09-20 11:47:50", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Provide a summary of the lines, words, and characters in the previous file. It's crucial, like measuring the script's length, to grasp the scope of our data narrative.", "when_to_use": "When verifying file content statistics", "category": "failure", "created_time": "2025-09-20 11:47:50", "modified_time": "2025-09-20 11:47:50", "generalized_query": "Obtaining file metadata (lines, words, characters) for data validation", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "d8463225c7394d5680482ccbb5a60fc4", "memory_type": "procedural", "when_to_use": "When preparing files for data analysis", "content": "Use the echo command with explicit newline characters (\n) to ensure proper CSV row separation, avoiding potential parsing errors in downstream analysis.", "score": 0, "time_created": "2025-09-20 11:47:50", "time_modified": "2025-09-20 11:47:50", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Infuse 'DataSet1.csv' with some preliminary numbers for our initial analytical exploration... You should copy as it is and split by line each each row", "when_to_use": "When preparing files for data analysis", "category": "failure", "created_time": "2025-09-20 11:47:50", "modified_time": "2025-09-20 11:47:50", "generalized_query": "Populating CSV files with structured data while maintaining formatting integrity", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "7305dee9d3a1480eb989534773b0bc94", "memory_type": "procedural", "when_to_use": "When determining market status before executing trades", "content": "Successfully determined market status by first retrieving the current time via get_current_time, then using update_market_status with the timestamp. This two-step verification ensures accurate market state assessment before trading decisions.", "score": 0, "time_created": "2025-09-20 11:48:31", "time_modified": "2025-09-20 11:48:31", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Enlighten me, is the market open or closed given the time right now?", "when_to_use": "When determining market status before executing trades", "category": "success", "created_time": "2025-09-20 11:48:31", "modified_time": "2025-09-20 11:48:31", "generalized_query": "Check the current market status based on real-time data", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "413c90d2b68c4ffbb486cf43e9d591a2", "memory_type": "procedural", "when_to_use": "When a user requests to remove a stock from their watchlist", "content": "Successfully identified the first watchlist item (NVDA) and used the remove_stock_from_watchlist tool with the correct symbol parameter. The action was confirmed with a clear status response and updated the user on their revised watchlist.", "score": 0, "time_created": "2025-09-20 11:48:57", "time_modified": "2025-09-20 11:48:57", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Would you mind taking the first one off my watchlist?", "when_to_use": "When a user requests to remove a stock from their watchlist", "category": "success", "created_time": "2025-09-20 11:48:57", "modified_time": "2025-09-20 11:48:57", "generalized_query": "Remove a specific stock symbol from the user's watchlist", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "eeb9edc58cc74254a3a856b96560525a", "memory_type": "procedural", "when_to_use": "When canceling an order based on user reconsideration", "content": "Directly used the cancel_order tool with the specific order_id parameter retrieved from prior steps. The cancellation was confirmed immediately, ensuring the user's request was fulfilled without unnecessary delays.", "score": 0, "time_created": "2025-09-20 11:48:57", "time_modified": "2025-09-20 11:48:57", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I think I should cancel that last order. I need to rethink my strategy...", "when_to_use": "When canceling an order based on user reconsideration", "category": "success", "created_time": "2025-09-20 11:48:57", "modified_time": "2025-09-20 11:48:57", "generalized_query": "Cancel a pending order using its unique order ID", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "a0b4025b94dd45b595f048e015b4c894", "memory_type": "procedural", "when_to_use": "When ensuring vehicle readiness for a journey requires multi-step safety and maintenance checks", "content": "The higher-scoring approach demonstrated superior task completion by proactively addressing all safety dependencies (e.g., brake pedal engagement before engine start) and maintaining systematic verification of each step. It also extended the preparation process to include tire pressure validation and automatic navigation setup to a service center, whereas the lower-scoring sequence omitted critical action steps like setting navigation to the tire shop despite identifying the need.", "score": 0, "time_created": "2025-09-20 11:48:53", "time_modified": "2025-09-20 11:48:53", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Ensure the fuel tank is replenished adequately by adding 38 liters of gasoline... make certain that all doors are secure, and the parking brake is engaged as a safety measure.", "when_to_use": "When ensuring vehicle readiness for a journey requires multi-step safety and maintenance checks", "category": "comparative", "created_time": "2025-09-20 11:48:53", "modified_time": "2025-09-20 11:48:53", "generalized_query": "Executing vehicle pre-trip safety and maintenance protocols", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "a5eacc2b43564dc2addbdb8cabfcd5fa", "memory_type": "procedural", "when_to_use": "When handling fuel volume conversions with rounding requirements", "content": "The agent correctly converted 38 liters to gallons (10.0385 ≈ 10 gallons) using liter_to_gallon, adhering to the rounding requirement. This ensures fuel system compatibility while maintaining user-specified constraints.", "score": 0, "time_created": "2025-09-20 11:48:57", "time_modified": "2025-09-20 11:48:57", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Ensure the fuel tank is replenished adequately by adding 38 liters of gasoline... Only fill with integer amount for volume; round when not integer.", "when_to_use": "When handling fuel volume conversions with rounding requirements", "category": "success", "created_time": "2025-09-20 11:48:57", "modified_time": "2025-09-20 11:48:57", "generalized_query": "Fuel volume conversion and rounding compliance", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "985f7ba0ef0547a8b51d931436c29ecf", "memory_type": "procedural", "when_to_use": "When creating a file in a specific directory and ensuring it does not already exist", "content": "The sequence checked for the file's existence using 'find' before creating it with 'touch', ensuring no overwrite. This pattern prevents data loss by verifying existence first.", "score": 0, "time_created": "2025-09-20 11:49:19", "time_modified": "2025-09-20 11:49:19", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Kindly draft a document titled 'project_summary.txt' right here in documents directory. Yield an error if it already exists.", "when_to_use": "When creating a file in a specific directory and ensuring it does not already exist", "category": "success", "created_time": "2025-09-20 11:49:19", "modified_time": "2025-09-20 11:49:19", "generalized_query": "Create a file in a specified directory if it does not already exist", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "f2e4a8a917ce4810bfbf92f34cdcbeaf", "memory_type": "procedural", "when_to_use": "When searching for specific content within a file", "content": "The 'grep' tool was used to search for the term 'Progress'. Even though no matches were found, the correct tool and parameters were applied, demonstrating proper search methodology.", "score": 0, "time_created": "2025-09-20 11:49:19", "time_modified": "2025-09-20 11:49:19", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "In the contents of 'summary_2024.txt', please fish out and highlight any lines featuring the term 'Progress'", "when_to_use": "When searching for specific content within a file", "category": "success", "created_time": "2025-09-20 11:49:19", "modified_time": "2025-09-20 11:49:19", "generalized_query": "Search for specific text patterns within a file", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "f734578c5c864b74a41e3a6ade21bf9d", "memory_type": "procedural", "when_to_use": "When handling tool parameter constraints", "content": "Respect tool-specific constraints: separate directory navigation from file operations when paths are restricted in parameters", "score": 0, "time_created": "2025-09-20 11:49:40", "time_modified": "2025-09-20 11:49:40", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "mv: no path allowed in destination. Only file name and folder name is supported", "when_to_use": "When handling tool parameter constraints", "category": "failure", "created_time": "2025-09-20 11:49:40", "modified_time": "2025-09-20 11:49:40", "generalized_query": "Working with tools that restrict path parameters in destinations", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "494bcb679450492aa2840ced0879ff15", "memory_type": "procedural", "when_to_use": "When initiating engine start sequences", "content": "Always verify prerequisite safety conditions (locked doors, engaged brake) before attempting to start the engine", "score": 0, "time_created": "2025-09-20 11:49:06", "time_modified": "2025-09-20 11:49:06", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I'd be grateful if you could initiate the engine in 'START' mode for me.", "when_to_use": "When initiating engine start sequences", "category": "failure", "created_time": "2025-09-20 11:49:06", "modified_time": "2025-09-20 11:49:06", "generalized_query": "Executing vehicle engine start procedures with safety checks", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "32d59626f9b1473e9a0f86151f0c9510", "memory_type": "procedural", "when_to_use": "When converting units and requiring precise decimal formatting as per user instructions", "content": "The higher-scoring approach correctly rounded the converted value (7.92516 → 7.93) to match the user's 2-decimal requirement, while the lower-scoring approach truncated to 7.92. This precision adherence ensured alignment with explicit user instructions, demonstrating attention to detail in numerical formatting.", "score": 0, "time_created": "2025-09-20 11:49:16", "time_modified": "2025-09-20 11:49:16", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I am at the gas station and ready to fill up my car with gasoline. I would appreciate it if you could manage filling 30 liters into my vehicle to ensure it's properly fueled for the journey ahead. Use 2 decimal digit of the gallon amount", "when_to_use": "When converting units and requiring precise decimal formatting as per user instructions", "category": "comparative", "created_time": "2025-09-20 11:49:16", "modified_time": "2025-09-20 11:49:16", "generalized_query": "Accurate unit conversion with strict decimal precision requirements", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "70a32873c5ca4f178ff80b1720b8f14a", "memory_type": "procedural", "when_to_use": "When providing diagnostic feedback after system checks", "content": "The higher-scoring response identified a subtle imbalance in tire pressures (front vs rear) and explicitly advised consulting manufacturer guidelines, whereas the lower-scoring response only stated 'healthy' without highlighting the discrepancy. This additional context provided more value for troubleshooting, aligning with higher-quality diagnostic communication.", "score": 0, "time_created": "2025-09-20 11:49:16", "time_modified": "2025-09-20 11:49:16", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Would you mind checking the tire pressure to confirm everything's in good working order?", "when_to_use": "When providing diagnostic feedback after system checks", "category": "comparative", "created_time": "2025-09-20 11:49:16", "modified_time": "2025-09-20 11:49:16", "generalized_query": "Request for diagnostic system checks with actionable insights", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "191e5b6f3f054867869f0cae9d42b262", "memory_type": "procedural", "when_to_use": "When performing mathematical operations on heterogeneous data (e.g., mixing financial metrics with different units)", "content": "Always validate data compatibility and units before performing mathematical operations; avoid averaging values with fundamentally different measurement contexts (e.g., dollars vs. shares vs. moving averages).", "score": 0, "time_created": "2025-09-20 11:49:53", "time_modified": "2025-09-20 11:49:53", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Using the current details of the 'AAPL' stock, calculate the average of price, trading volume, MA5, and MA20.", "when_to_use": "When performing mathematical operations on heterogeneous data (e.g., mixing financial metrics with different units)", "category": "failure", "created_time": "2025-09-20 11:49:53", "modified_time": "2025-09-20 11:49:53", "generalized_query": "Calculating an average of mixed numerical values with differing units or contextual meanings", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "d401124444654b87a0877e8ef99e54d4", "memory_type": "procedural", "when_to_use": "When designing workflows involving multiple tool calls", "content": "Implement intermediate validation steps between tool calls to detect inconsistencies or incompatible data early in the workflow.", "score": 0, "time_created": "2025-09-20 11:49:53", "time_modified": "2025-09-20 11:49:53", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Update the market status for me, as I need to know the current outlook.", "when_to_use": "When designing workflows involving multiple tool calls", "category": "failure", "created_time": "2025-09-20 11:49:53", "modified_time": "2025-09-20 11:49:53", "generalized_query": "Executing multi-step processes requiring sequential tool calls", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "63b0a5e77a9449029a32585857eaca1a", "memory_type": "procedural", "when_to_use": "When needing to update market status based on real-time data", "content": "Successfully used get_current_time followed by update_market_status to synchronize market status with actual time. This sequential verification ensures accurate status updates aligned with real-world conditions.", "score": 0, "time_created": "2025-09-20 11:49:55", "time_modified": "2025-09-20 11:49:55", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Update the market status for me, as I need to know the current outlook.", "when_to_use": "When needing to update market status based on real-time data", "category": "success", "created_time": "2025-09-20 11:49:55", "modified_time": "2025-09-20 11:49:55", "generalized_query": "Determine system status based on real-time temporal data", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "b1a56af2c56a4818a129dad5017bd067", "memory_type": "procedural", "when_to_use": "When executing stock trades requiring real-time data validation", "content": "Successful execution required first retrieving stock price data via get_stock_info before placing the order. This ensured the trade was based on current market conditions rather than stale data, reducing risk of price discrepancies during execution.", "score": 0, "time_created": "2025-09-20 11:50:13", "time_modified": "2025-09-20 11:50:13", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Upon reviewing the available stocks in Technology, please arrange the acquisition of 150 Microsoft shares at the going market rate", "when_to_use": "When executing stock trades requiring real-time data validation", "category": "success", "created_time": "2025-09-20 11:50:13", "modified_time": "2025-09-20 11:50:13", "generalized_query": "Execute a stock purchase order after verifying current market price", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "541174c2238f4cbb9b0c84d2d5c50719", "memory_type": "procedural", "when_to_use": "When a user requests to retrieve their current watchlist of stocks", "content": "Directly calling the get_watchlist function with no parameters effectively retrieves the user's watchlist. This works because the function is specifically designed to return the current watchlist without requiring additional filters or parameters.", "score": 0, "time_created": "2025-09-20 11:50:38", "time_modified": "2025-09-20 11:50:38", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Could you help me by identifying the stocks currently present on my watchlist?", "when_to_use": "When a user requests to retrieve their current watchlist of stocks", "category": "success", "created_time": "2025-09-20 11:50:38", "modified_time": "2025-09-20 11:50:38", "generalized_query": "Retrieve the list of stocks in the user's watchlist", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "bea6f39eb9fa4390aae5787abb53ef7a", "memory_type": "procedural", "when_to_use": "When initiating actions that require specific identifiers like booking IDs or access tokens", "content": "Always verify the presence of required parameters (e.g., booking IDs, access tokens) before initiating system actions to prevent errors", "score": 0, "time_created": "2025-09-20 11:50:51", "time_modified": "2025-09-20 11:50:51", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I've been issued a new credit card with id 'card_4893'... Could we expedite this and use my booking record for booking_id, as I have an impending meeting?", "when_to_use": "When initiating actions that require specific identifiers like booking IDs or access tokens", "category": "failure", "created_time": "2025-09-20 11:50:51", "modified_time": "2025-09-20 11:50:51", "generalized_query": "Requesting expedited action on a transaction requiring missing critical identifiers", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "bebfaf91a97943c8a09927ed4fa6ef7f", "memory_type": "procedural", "when_to_use": "When comparing files in a directory with ambiguous or similar names", "content": "Used 'find' to locate files, then 'ls' to verify exact names when initial search results were incomplete. Correctly used 'diff' after confirming precise filenames, demonstrating the importance of verification steps before file comparison.", "score": 0, "time_created": "2025-09-20 11:51:14", "time_modified": "2025-09-20 11:51:14", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Look for draft and final report in my current directory. Compare the content difference of both.", "when_to_use": "When comparing files in a directory with ambiguous or similar names", "category": "success", "created_time": "2025-09-20 11:51:14", "modified_time": "2025-09-20 11:51:14", "generalized_query": "Compare content differences between two files with similar names in a directory", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "b8b2c9ad44bf4db283d7c4cdf5115b96", "memory_type": "procedural", "when_to_use": "When needing to locate and access a file in a nested directory structure", "content": "Systematically navigated directory structure using 'ls' and 'cd' to locate target file, demonstrating proactive verification before file operations. This prevents errors from incorrect file paths and ensures user confirmation of file existence.", "score": 0, "time_created": "2025-09-20 11:50:36", "time_modified": "2025-09-20 11:50:36", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Could you roll the content out for me to have a look-see?", "when_to_use": "When needing to locate and access a file in a nested directory structure", "category": "success", "created_time": "2025-09-20 11:50:36", "modified_time": "2025-09-20 11:50:36", "generalized_query": "Accessing and verifying file content in a workspace directory", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "4efaa26c45c44a79afb415d3ff5ffd9e", "memory_type": "procedural", "when_to_use": "When sharing analytical findings with professional networks", "content": "Executed secure authentication followed by strategic tweet composition with mentions and hashtags. Separated credential handling from content posting for security, demonstrating proper API usage patterns and professional networking techniques.", "score": 0, "time_created": "2025-09-20 11:50:36", "time_modified": "2025-09-20 11:50:36", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Toss a tweet out there about this comparative analysis, mentions @colleagues, and throw in #ProjectInsight", "when_to_use": "When sharing analytical findings with professional networks", "category": "success", "created_time": "2025-09-20 11:50:36", "modified_time": "2025-09-20 11:50:36", "generalized_query": "Social media sharing of analytical results with targeted audiences", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "94b4058d9232455db3450f01365def9e", "memory_type": "procedural", "when_to_use": "When interpreting sensor data or tool responses that include status flags or thresholds", "content": "Always validate tool-provided status flags (e.g., 'healthy_tire_pressure') against explicit numerical thresholds to avoid accepting contradictory or logically inconsistent data.", "score": 0, "time_created": "2025-09-20 11:51:56", "time_modified": "2025-09-20 11:51:56", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I'm gearing up for a quick business getaway and need my ride all set. Would you be able to verify if my tire pressure is in check? If it falls under 37.5 PSI, perhaps we could swing by the nearest tire shop?", "when_to_use": "When interpreting sensor data or tool responses that include status flags or thresholds", "category": "failure", "created_time": "2025-09-20 11:51:56", "modified_time": "2025-09-20 11:51:56", "generalized_query": "Verifying sensor data against predefined thresholds and ensuring logical consistency in tool responses", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "f62feb21b32449b98d5c350e24e85e15", "memory_type": "procedural", "when_to_use": "When executing social media actions that require authentication", "content": "Precede account-modifying actions (e.g., posting tweets) with explicit authentication checks to ensure session validity and avoid silent failures.", "score": 0, "time_created": "2025-09-20 11:51:56", "time_modified": "2025-09-20 11:51:56", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "While we head over to ensure my tires are roadworthy, I'd like to send out a swift update on my business account. Let's post a tweet: 'Ensuring my wheels are well-maintained. Maintenance is key to success!' with the hashtag 'BusinessOnTheMove'.", "when_to_use": "When executing social media actions that require authentication", "category": "failure", "created_time": "2025-09-20 11:51:56", "modified_time": "2025-09-20 11:51:56", "generalized_query": "Performing actions on user accounts that require authentication without explicit login confirmation", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "65a08c2a25d6485c999ad7a14f60d3f4", "memory_type": "procedural", "when_to_use": "When placing orders based on prevailing market prices", "content": "Always verify the current market price of the stock before placing an order, rather than assuming or using outdated price data", "score": 0, "time_created": "2025-09-20 11:52:12", "time_modified": "2025-09-20 11:52:12", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I'm reviewing my account, and I'd like you to confirm the current balance and provide the account details. Subsequently, initiate a purchase order for 150 shares of TSLA at the prevailing market price leveraging my account balance.", "when_to_use": "When placing orders based on prevailing market prices", "category": "failure", "created_time": "2025-09-20 11:52:12", "modified_time": "2025-09-20 11:52:12", "generalized_query": "Executing a stock purchase order using current market data and available funds", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "9486f67146db4486a5d2b4c18df0a900", "memory_type": "procedural", "when_to_use": "When handling user requests for order modifications or cancellations", "content": "Always confirm the specific order ID and current status before executing cancellation or modification actions to avoid operating on stale or incorrect order data", "score": 0, "time_created": "2025-09-20 11:52:12", "time_modified": "2025-09-20 11:52:12", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Kindly revoke the order we talked about earlier.", "when_to_use": "When handling user requests for order modifications or cancellations", "category": "failure", "created_time": "2025-09-20 11:52:12", "modified_time": "2025-09-20 11:52:12", "generalized_query": "Managing order lifecycle actions (cancel, modify, check status)", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "427c51e9ddf941c6b14263f0aabaa273", "memory_type": "procedural", "when_to_use": "When encountering unexpected parameter errors during flight booking", "content": "Successfully resolved a booking error by omitting the 'travel_cost' parameter (which was auto-calculated via get_flight_cost) and re-attempting the booking. This demonstrates the importance of aligning parameters with API requirements and leveraging prior cost calculations.", "score": 0, "time_created": "2025-09-20 11:51:44", "time_modified": "2025-09-20 11:51:44", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Arrange this flight using my pre-linked credit card with id 'card_123456789' and access token 'abc123xyz'", "when_to_use": "When encountering unexpected parameter errors during flight booking", "category": "success", "created_time": "2025-09-20 11:51:44", "modified_time": "2025-09-20 11:51:44", "generalized_query": "Book a flight with specific payment details after resolving API parameter mismatches", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "649975aa682e4553bec1e1da33885e94", "memory_type": "procedural", "when_to_use": "When coordinating cross-functional updates after complex transactions", "content": "Combined message_login and send_message to notify stakeholders about booking issues, demonstrating the importance of real-time communication frameworks in enterprise workflows.", "score": 0, "time_created": "2025-09-20 11:51:44", "time_modified": "2025-09-20 11:51:44", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "brief my colleague Catherine (id='USR003') on the situation", "when_to_use": "When coordinating cross-functional updates after complex transactions", "category": "success", "created_time": "2025-09-20 11:51:44", "modified_time": "2025-09-20 11:51:44", "generalized_query": "Notify team members of operational updates via secure messaging", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "4ccd483f38b24e8ba57419de31ab4e3f", "memory_type": "procedural", "when_to_use": "When using API functions that may have outdated or conflicting parameter definitions", "content": "Always validate function parameters against actual API behavior, not just tool definitions, as discrepancies can lead to errors.", "score": 0, "time_created": "2025-09-20 11:52:09", "time_modified": "2025-09-20 11:52:09", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Arrange this flight using my pre-linked credit card with id 'card_123456789' and access token 'abc123xyz'", "when_to_use": "When using API functions that may have outdated or conflicting parameter definitions", "category": "failure", "created_time": "2025-09-20 11:52:09", "modified_time": "2025-09-20 11:52:09", "generalized_query": "Booking a flight with specific parameters via an API", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "d344f6e828494c50b85a848b85a57f05", "memory_type": "procedural", "when_to_use": "When a task requires rounding numerical values to a specific precision, even if the current value appears to be an integer.", "content": "Always use the appropriate tool (e.g., round_number) for rounding operations explicitly requested by the user, rather than assuming the value is already correctly formatted.", "score": 0, "time_created": "2025-09-20 11:52:35", "time_modified": "2025-09-20 11:52:35", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Can you write the answer rounded in nearest integer into a new file named 'MeanRevenue.txt'? Just the number and nothing", "when_to_use": "When a task requires rounding numerical values to a specific precision, even if the current value appears to be an integer.", "category": "failure", "created_time": "2025-09-20 11:52:35", "modified_time": "2025-09-20 11:52:35", "generalized_query": "Writing a rounded numerical value to a file based on a calculation.", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "55837971e22548e9b5ed5239bcec36f4", "memory_type": "procedural", "when_to_use": "When handling file operations, especially creating or overwriting files, ensure the correct tool is used for the task.", "content": "Verify that the content being written to a file matches the user's exact requirements, including formatting and precision, and use the correct tool (e.g., echo) for writing content.", "score": 0, "time_created": "2025-09-20 11:52:35", "time_modified": "2025-09-20 11:52:35", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Can you write the answer rounded in nearest integer into a new file named 'MeanRevenue.txt'? Just the number and nothing", "when_to_use": "When handling file operations, especially creating or overwriting files, ensure the correct tool is used for the task.", "category": "failure", "created_time": "2025-09-20 11:52:35", "modified_time": "2025-09-20 11:52:35", "generalized_query": "Creating a new file with specific content based on a calculation.", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "2e887c26f87748c9bdb670c4803fda90", "memory_type": "procedural", "when_to_use": "When preparing a vehicle for a trip requiring precise fuel management", "content": "The higher-scoring approach systematically checked current fuel levels (via displayCarStatus) before filling, avoiding overfilling errors. It used precise fuelAmount calculations (35.0 gallons to reach 50.0 tank capacity) versus the lower-scoring approach's direct 50-gallon fill attempt that triggered an error. This incremental verification and calculation ensured compliance with tank capacity constraints.", "score": 0, "time_created": "2025-09-20 11:52:52", "time_modified": "2025-09-20 11:52:52", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "I'm about to embark on a road trip adventure and I want my car to be in peak condition. Could you make sure to increase the current fuel level to ensure that my tank is full, so I don't have to keep stopping to refuel along the way?", "when_to_use": "When preparing a vehicle for a trip requiring precise fuel management", "category": "comparative", "created_time": "2025-09-20 11:52:52", "modified_time": "2025-09-20 11:52:52", "generalized_query": "Ensuring vehicle fuel levels are optimized for long-distance travel", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_14b", "memory_id": "9276bc3f64ff4c9f927c59e73ed3d2c1", "memory_type": "procedural", "when_to_use": "When executing critical vehicle operations (e.g., starting the engine) that require prerequisite conditions (e.g., locked doors, pressed brake).", "content": "Critical operations (e.g., engine start) must be preceded by explicit checks of prerequisite conditions (e.g., door locks, brake pedal status) to prevent failures.", "score": 0, "time_created": "2025-09-20 11:53:03", "time_modified": "2025-09-20 11:53:03", "author": "qwen3-14b", "metadata": {"author": "qwen3-14b", "task_query": "Before I hit the open road, I need to get the engine running smoothly. Can you confirm there's enough fuel, and ensure the engine's primed for a seamless start?", "when_to_use": "When executing critical vehicle operations (e.g., starting the engine) that require prerequisite conditions (e.g., locked doors, pressed brake).", "category": "failure", "created_time": "2025-09-20 11:53:03", "modified_time": "2025-09-20 11:53:03", "generalized_query": "Execution of vehicle operations requiring prerequisite condition checks.", "utility": 0, "freq": 0}} diff --git a/docs/library/paper_data/task/bfcl_qwen3_32b.jsonl b/docs/library/paper_data/task/bfcl_qwen3_32b.jsonl deleted file mode 100644 index 51e0faa5..00000000 --- a/docs/library/paper_data/task/bfcl_qwen3_32b.jsonl +++ /dev/null @@ -1,99 +0,0 @@ -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "43cb31dcaa6746fa8c6cee9a27c45758", "memory_type": "procedural", "when_to_use": "When a user requests stock information and subsequent watchlist management", "content": "The agent first resolved the stock symbol using get_symbol_by_name, then fetched detailed stock data via get_stock_info. This sequential approach ensures accurate data retrieval before actionable steps like adding to a watchlist. The pattern of 'identifier resolution → data fetching → action execution' creates a reliable workflow for stock-related tasks.", "score": 0, "time_created": "2025-09-19 10:21:10", "time_modified": "2025-09-19 10:21:10", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "For your investment portfolio, could you inform me of the current price of 'Quasar Ltd.'?", "when_to_use": "When a user requests stock information and subsequent watchlist management", "category": "success", "created_time": "2025-09-19 10:21:10", "modified_time": "2025-09-19 10:21:10", "generalized_query": "Retrieve stock price and manage watchlist for a specific equity", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "974efbafb11f41a198175470b1e3fc43", "memory_type": "procedural", "when_to_use": "When auditing user interaction history for accountability or analysis", "content": "The use of view_messages_sent provided complete transparency into message history, enabling verification of communication records. This is critical for maintaining trust in user-agent interactions.", "score": 0, "time_created": "2025-09-19 10:21:09", "time_modified": "2025-09-19 10:21:09", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Could you please display all the messages I have sent so far?", "when_to_use": "When auditing user interaction history for accountability or analysis", "category": "success", "created_time": "2025-09-19 10:21:09", "modified_time": "2025-09-19 10:21:09", "generalized_query": "Retrieve historical messages sent by the current user", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "96b2afcfd2b241739420ecc81a0f645d", "memory_type": "procedural", "when_to_use": "When determining market status for trading decisions", "content": "Use get_current_time to obtain the current time, then update_market_status with this time to determine market status. This ensures accurate timing-based market status verification.", "score": 0, "time_created": "2025-09-19 10:21:10", "time_modified": "2025-09-19 10:21:10", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Provide a real-time update on the market status. Is it currently open or closed?", "when_to_use": "When determining market status for trading decisions", "category": "success", "created_time": "2025-09-19 10:21:10", "modified_time": "2025-09-19 10:21:10", "generalized_query": "Check current market status for trading readiness", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "50d083a8b2ef43b29852054b7a4586fb", "memory_type": "procedural", "when_to_use": "When evaluating stocks for watchlist inclusion", "content": "Combine get_stock_info for real-time metrics with notify_price_change for volatility checks. This provides a complete picture of stock performance and potential risks/rewards.", "score": 0, "time_created": "2025-09-19 10:21:10", "time_modified": "2025-09-19 10:21:10", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I require a comprehensive analysis of the stock with Amazon...", "when_to_use": "When evaluating stocks for watchlist inclusion", "category": "success", "created_time": "2025-09-19 10:21:10", "modified_time": "2025-09-19 10:21:10", "generalized_query": "Analyze stock fundamentals and price behavior", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "63d041f00a3c46ba9e6867029b7d1714", "memory_type": "procedural", "when_to_use": "Before initiating any long-distance drive or vehicle operation", "content": "Always verify fuel sufficiency using both mileage estimation and current fuel level checks before attempting long drives. Critical safety steps like brake pedal activation must be completed before engine start.", "score": 0, "time_created": "2025-09-19 10:21:12", "time_modified": "2025-09-19 10:21:12", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Is this something I could realistically pull off? I just want to know an answer; you don't need to refill if it's not reachable. If it is reachable, set navigation to '1914 7th St, Apt B, Berkeley, CA 94710'.", "when_to_use": "Before initiating any long-distance drive or vehicle operation", "category": "failure", "created_time": "2025-09-19 10:21:12", "modified_time": "2025-09-19 10:21:12", "generalized_query": "Assess trip feasibility and configure navigation for a destination", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "b094e9268ed54033bf15ba8a276f80de", "memory_type": "procedural", "when_to_use": "When updating navigation destinations during a trip", "content": "Navigation updates should be validated for route feasibility and safety implications, especially when altering destinations during an active trip configuration.", "score": 0, "time_created": "2025-09-19 10:21:12", "time_modified": "2025-09-19 10:21:12", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Would you be so kind as to set up the navigation system to take me to 2107 Channing Way, Berkeley, CA?", "when_to_use": "When updating navigation destinations during a trip", "category": "failure", "created_time": "2025-09-19 10:21:12", "modified_time": "2025-09-19 10:21:12", "generalized_query": "Modify navigation destination mid-trajectory", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "7a5982596a2b4199bd860dd50b79c4bc", "memory_type": "procedural", "when_to_use": "When handling multi-step vehicle maintenance tasks requiring precise unit conversions and system checks", "content": "The higher-scoring approach systematically addressed all prerequisites (door locks, brake pedal) before critical actions (engine start), used precise unit conversion with rounding, and completed the full workflow from fuel refill to tire pressure analysis. The lower-scoring approach stopped after fuel refill, missing subsequent system checks and error handling for safety protocols.", "score": 0, "time_created": "2025-09-19 10:21:12", "time_modified": "2025-09-19 10:21:12", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Refill with 10 liters of gasoline to keep the adventure alive. Use 2 decimal digit of the gallon amount", "when_to_use": "When handling multi-step vehicle maintenance tasks requiring precise unit conversions and system checks", "category": "comparative", "created_time": "2025-09-19 10:21:12", "modified_time": "2025-09-19 10:21:12", "generalized_query": "Convert a volume measurement between units and perform system checks for vehicle readiness", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "76488790483041ea97606a4191179884", "memory_type": "procedural", "when_to_use": "When booking a flight and needing to cancel it immediately due to unexpected schedule changes", "content": "The agent successfully booked a flight using correct parameters (access_token, card_id, travel_date, etc.) after identifying and correcting the invalid 'travel_cost' parameter. The cancellation was executed immediately after booking, demonstrating error handling and process efficiency. This pattern ensures minimal time between booking and cancellation while maintaining system compliance.", "score": 0, "time_created": "2025-09-19 10:21:41", "time_modified": "2025-09-19 10:21:41", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I'm planning a business class trip from JFK in New York to LAX in Los Angeles on December 15, 2024... Once booked, I'll need to cancel the trip immediately due to unexpected changes in my schedule.", "when_to_use": "When booking a flight and needing to cancel it immediately due to unexpected schedule changes", "category": "success", "created_time": "2025-09-19 10:21:41", "modified_time": "2025-09-19 10:21:41", "generalized_query": "Book a flight and cancel it immediately due to unforeseen schedule changes", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "4d91a2a3635346e1a46eec6246cc4b2f", "memory_type": "procedural", "when_to_use": "When creating high-priority support tickets for urgent issues", "content": "Created a priority 5 ticket with a clear description of the cancellation reason, ensuring it was queued for immediate attention. This demonstrates the effectiveness of explicitly setting priority levels and providing detailed contextual information in support tickets.", "score": 0, "time_created": "2025-09-19 10:21:40", "time_modified": "2025-09-19 10:21:40", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I must file a priority 5 support ticket concerning the flight cancellation", "when_to_use": "When creating high-priority support tickets for urgent issues", "category": "success", "created_time": "2025-09-19 10:21:40", "modified_time": "2025-09-19 10:21:40", "generalized_query": "Create an urgent support ticket for flight cancellation", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "3bb366892196487eaec0214728091a60", "memory_type": "procedural", "when_to_use": "When retrieving invoices or processing travel-related transactions", "content": "Always verify the correct parameters (e.g., booking_id vs insurance_id) for invoice retrieval and cross-check returned data against the user's original request to detect discrepancies", "score": 0, "time_created": "2025-09-19 10:21:42", "time_modified": "2025-09-19 10:21:42", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Retrieve an invoice for this insurance to ensure my financial records are precise?", "when_to_use": "When retrieving invoices or processing travel-related transactions", "category": "failure", "created_time": "2025-09-19 10:21:42", "modified_time": "2025-09-19 10:21:42", "generalized_query": "Retrieve transaction documentation for a travel insurance purchase", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "e9147771f72d4ea18190c41c49c44132", "memory_type": "procedural", "when_to_use": "When handling user authentication and message delivery in trading systems", "content": "Ensure proper authentication state verification before initiating message delivery, as failed login checks can disrupt critical communication workflows.", "score": 0, "time_created": "2025-09-19 10:21:51", "time_modified": "2025-09-19 10:21:51", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I require some confidence about my current financial positioning. Share a detailed overview of my account, including balances and any associated card numbers. Furthermore, logging in as USR001 to notify my financial advisor (user id 'USR003') promptly about this potential shift in my investment strategy with our latest account details.", "when_to_use": "When handling user authentication and message delivery in trading systems", "category": "failure", "created_time": "2025-09-19 10:21:51", "modified_time": "2025-09-19 10:21:51", "generalized_query": "Request account information and send a notification to a financial advisor with updated account details", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "d5e2b14819d0414a8983cc8b166077a8", "memory_type": "procedural", "when_to_use": "When requiring sensitive credentials or initiating secure actions", "content": "Prompt users for required credentials (e.g., passwords) explicitly, but avoid storing or requesting sensitive information beyond what is strictly necessary for the task.", "score": 0, "time_created": "2025-09-19 10:21:48", "time_modified": "2025-09-19 10:21:48", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Logging in as USR001 to notify my financial advisor (user id 'USR003')", "when_to_use": "When requiring sensitive credentials or initiating secure actions", "category": "failure", "created_time": "2025-09-19 10:21:48", "modified_time": "2025-09-19 10:21:48", "generalized_query": "Initiating secure messaging with user authentication", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "c3ef2374552b4cbdb0a5091ad81e1c26", "memory_type": "procedural", "when_to_use": "When booking flights for users with specific travel details and reimbursement requirements", "content": "The successful sequence involved: 1) Using get_nearest_airport_by_city to resolve location-to-airport code mapping, 2) Correcting API parameter errors by removing invalid fields (travel_cost), 3) Leveraging the booking_id from the travel system to retrieve invoices and escalate queries to customer support. The key was maintaining precise parameter alignment with API requirements while preserving necessary context across tool calls.", "score": 0, "time_created": "2025-09-19 10:22:00", "time_modified": "2025-09-19 10:22:00", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I need to book a flight to Los Angeles for a crucial business meeting... and ensure you acquire the invoice for this transaction", "when_to_use": "When booking flights for users with specific travel details and reimbursement requirements", "category": "success", "created_time": "2025-09-19 10:22:00", "modified_time": "2025-09-19 10:22:00", "generalized_query": "Book a flight with specific travel details and obtain a transaction invoice", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "fc5988c9416a4e2b9b9ec98d9efb0f4e", "memory_type": "procedural", "when_to_use": "When booking flights or making transactions requiring specific parameter names", "content": "Always verify parameter names against function definitions to avoid unexpected keyword arguments. Use exact parameter names as defined in the tool's required fields.", "score": 0, "time_created": "2025-09-19 10:22:16", "time_modified": "2025-09-19 10:22:16", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I need a first-class seat from New York to Los Angeles for this upcoming Sunday October 15th 2024. Let's use my credit card with id 'primary' and access token 'abc123xyz' stored on record for this transaction.", "when_to_use": "When booking flights or making transactions requiring specific parameter names", "category": "failure", "created_time": "2025-09-19 10:22:16", "modified_time": "2025-09-19 10:22:16", "generalized_query": "Book a flight with specified class, dates, locations, and payment details", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "a5c74f92feb64740a67c73701bf12242", "memory_type": "procedural", "when_to_use": "When a user needs to assess the current market state before making trading decisions", "content": "Use get_current_time to obtain the current time, then update_market_status with the time string to determine if the market is open or closed. This provides critical context for trading decisions by aligning actions with market hours.", "score": 0, "time_created": "2025-09-19 10:22:22", "time_modified": "2025-09-19 10:22:22", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Check on the market conditions for me by updating the status to understand its current state.", "when_to_use": "When a user needs to assess the current market state before making trading decisions", "category": "success", "created_time": "2025-09-19 10:22:22", "modified_time": "2025-09-19 10:22:22", "generalized_query": "Determine the current market status to inform trading activities", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "f2a96d153205470e801f9fbe0a876048", "memory_type": "procedural", "when_to_use": "When providing stock performance information", "content": "The higher-scoring approach delivered structured performance metrics (price, volume, moving averages) alongside immediate watchlist updates, while the lower-scoring version provided fragmented information. The effective approach combined data presentation with seamless workflow completion (adding to watchlist) to enhance user experience.", "score": 0, "time_created": "2025-09-19 10:22:23", "time_modified": "2025-09-19 10:22:23", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I need details on the performance of a particular stock, 'SYNX', can you provide me with the critical information? It should be added to my watchlist.", "when_to_use": "When providing stock performance information", "category": "comparative", "created_time": "2025-09-19 10:22:23", "modified_time": "2025-09-19 10:22:23", "generalized_query": "Retrieve stock metrics and manage watchlist updates", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "88251723336e4d529844e38709cc58aa", "memory_type": "procedural", "when_to_use": "When handling order reviews or cancellations", "content": "Always prompt users to specify which order ID they want to review when multiple orders exist in the history", "score": 0, "time_created": "2025-09-19 10:22:25", "time_modified": "2025-09-19 10:22:25", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Review the order that I had placed, looking at its details, and let me know if it should be cancelled.", "when_to_use": "When handling order reviews or cancellations", "category": "failure", "created_time": "2025-09-19 10:22:25", "modified_time": "2025-09-19 10:22:25", "generalized_query": "Reviewing an order to assess cancellation necessity", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "7ec92afb1f1642bfb382070cd0253227", "memory_type": "procedural", "when_to_use": "When converting units and preparing a vehicle for a long journey", "content": "The higher-scoring approach demonstrated systematic execution by first converting liters to gallons using the liter_to_gallon tool, then sequentially addressing safety prerequisites (locking doors, engaging parking brake) before fueling. It handled dependency errors (e.g., door lock requirement for engine start) through iterative tool calls, whereas the lower-scoring approach failed to follow correct operational order, leading to premature fueling without critical safety checks.", "score": 0, "time_created": "2025-09-19 10:22:37", "time_modified": "2025-09-19 10:22:37", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I require assistance in determining the quantity of gasoline necessary for an extensive journey across California. I currently anticipate needing around 166 liters. How much is that in gallon?", "when_to_use": "When converting units and preparing a vehicle for a long journey", "category": "comparative", "created_time": "2025-09-19 10:22:37", "modified_time": "2025-09-19 10:22:37", "generalized_query": "Convert fuel volume units and prepare vehicle for long-distance travel", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "6d57f4c4dbc74e5d97314f8519ea623a", "memory_type": "procedural", "when_to_use": "When searching for files with ambiguous or potentially misspelled names", "content": "Use 'ls' to list directory contents when 'find' returns no matches, as it helps identify potential name variations or typos", "score": 0, "time_created": "2025-09-19 10:22:49", "time_modified": "2025-09-19 10:22:49", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I have a list of student record in this directory, could you find me where is it by telling me its name and using 'find'?", "when_to_use": "When searching for files with ambiguous or potentially misspelled names", "category": "failure", "created_time": "2025-09-19 10:22:49", "modified_time": "2025-09-19 10:22:49", "generalized_query": "Locate a file with a specific name in a directory using search commands", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "adfedaea4b77434bb7c51e2652d8a4e7", "memory_type": "procedural", "when_to_use": "When dealing with files containing numeric or special character extensions", "content": "Verify file content structure before processing; ensure the file format is compatible with the analysis tools (e.g., space-separated values)", "score": 0, "time_created": "2025-09-19 10:22:49", "time_modified": "2025-09-19 10:22:49", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Look at the student_record.txt and tell me the average score.", "when_to_use": "When dealing with files containing numeric or special character extensions", "category": "failure", "created_time": "2025-09-19 10:22:49", "modified_time": "2025-09-19 10:22:49", "generalized_query": "Calculate statistical metrics from data in a text file", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "27bdda1c43344c8fbdf7acff2917b8f0", "memory_type": "procedural", "when_to_use": "When requiring precision in mathematical outputs", "content": "Always apply rounding consistently after calculating statistical values to maintain output uniformity", "score": 0, "time_created": "2025-09-19 10:22:49", "time_modified": "2025-09-19 10:22:49", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "What about the standard deviation?", "when_to_use": "When requiring precision in mathematical outputs", "category": "failure", "created_time": "2025-09-19 10:22:49", "modified_time": "2025-09-19 10:22:49", "generalized_query": "Compute statistical measures with specified decimal precision", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "699e19bdb4024b049be6d0f13a75fb0a", "memory_type": "procedural", "when_to_use": "When performing Twitter-related actions such as posting, retweeting, or commenting", "content": "Always verify Twitter authentication status before executing any social media actions to prevent access errors", "score": 0, "time_created": "2025-09-19 10:22:45", "time_modified": "2025-09-19 10:22:45", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I'd appreciate it if you could share a quick update about the tire pressures on Twitter, using the format 'Front Left Tire: XXX PSI, Front Right Tire: XXX PSI, Rear Left Tire: XXX PSI, Rear Right Tire: XXX PSI'", "when_to_use": "When performing Twitter-related actions such as posting, retweeting, or commenting", "category": "failure", "created_time": "2025-09-19 10:22:45", "modified_time": "2025-09-19 10:22:45", "generalized_query": "Share vehicle status updates on social media with specific formatting", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "c89679e9904345d29b09870a509547fc", "memory_type": "procedural", "when_to_use": "When handling vehicle ignition sequences", "content": "Implement sequential validation checks for ignition prerequisites (locked doors, brake pedal position) to prevent system errors", "score": 0, "time_created": "2025-09-19 10:22:45", "time_modified": "2025-09-19 10:22:45", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I'm planning ahead for our big trip and realized our car's fuel tank is running low. It would be great if you could top it up with an additional 30 gallons before I turn on the ignition using the 'START' mode.", "when_to_use": "When handling vehicle ignition sequences", "category": "failure", "created_time": "2025-09-19 10:22:45", "modified_time": "2025-09-19 10:22:45", "generalized_query": "Prepare vehicle for ignition with fuel addition", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "305a08887ed341dd99bb400dc91ebf38", "memory_type": "procedural", "when_to_use": "When handling account information updates or sync issues", "content": "After modifying account information (e.g., email/phone number), users should verify updates via `get_account_info` immediately. If discrepancies persist, escalate via a support ticket with detailed logs of attempted resolutions.", "score": 0, "time_created": "2025-09-19 10:23:00", "time_modified": "2025-09-19 10:23:00", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "With the order situation now stable, I require a concise overview of my account details to ensure there are no discrepancies.", "when_to_use": "When handling account information updates or sync issues", "category": "failure", "created_time": "2025-09-19 10:23:00", "modified_time": "2025-09-19 10:23:00", "generalized_query": "Requesting account information verification after system updates or discrepancies", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "b86b2f75aeb04c6d865bdd5189121875", "memory_type": "procedural", "when_to_use": "When assessing market conditions before executing trades", "content": "The successful sequence began by verifying the market status using `get_current_time` and `update_market_status` to confirm trading hours. This ensures actions align with market availability, reducing risks of executing orders during non-trading periods. Combining time data with market status provides a complete context for decision-making.", "score": 0, "time_created": "2025-09-19 10:23:03", "time_modified": "2025-09-19 10:23:03", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I'd appreciate a breakdown on the current stock market trends so I can determine the suitability of executing a trade right now.", "when_to_use": "When assessing market conditions before executing trades", "category": "success", "created_time": "2025-09-19 10:23:03", "modified_time": "2025-09-19 10:23:03", "generalized_query": "Check market status and conditions for trade suitability", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "b4420afba2454eb4957a59bf52ab5679", "memory_type": "procedural", "when_to_use": "When users need to determine travel distance between two locations for trip planning", "content": "Sequentially use location-based tools (get_zipcode_based_on_city) to obtain coordinates, then apply distance estimation tools (estimate_distance) for accurate travel planning. This ensures precise data before making travel decisions.", "score": 0, "time_created": "2025-09-19 10:23:15", "time_modified": "2025-09-19 10:23:15", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Determine the road distance between San Francisco and Stonebrook for my genealogy exploration", "when_to_use": "When users need to determine travel distance between two locations for trip planning", "category": "success", "created_time": "2025-09-19 10:23:15", "modified_time": "2025-09-19 10:23:15", "generalized_query": "Calculate travel distance between two cities for trip planning", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "362c848d246342a689806bb370c50cfc", "memory_type": "procedural", "when_to_use": "When users want to share travel updates with broader audiences", "content": "Use post_tweet with specific content and hashtags to create engaging posts, followed by retweet to amplify reach. This leverages social media's network effect for community engagement.", "score": 0, "time_created": "2025-09-19 10:23:15", "time_modified": "2025-09-19 10:23:15", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Tweet: 'Setting forth on an exciting quest from San Francisco to Stonebrook to uncover ancestral stories!' #GenealogyAdventure #FamilyHistory", "when_to_use": "When users want to share travel updates with broader audiences", "category": "success", "created_time": "2025-09-19 10:23:15", "modified_time": "2025-09-19 10:23:15", "generalized_query": "Create and share social media content for travel-related announcements", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "7b17abcae2784ec8b2f4962bd7ad755d", "memory_type": "procedural", "when_to_use": "When handling Twitter interactions requiring specific tweet IDs or user authentication", "content": "Always verify tweet IDs and authentication status before executing retweet/comment actions. Prompt users to locate tweet IDs if unavailable.", "score": 0, "time_created": "2025-09-19 10:23:28", "time_modified": "2025-09-19 10:23:28", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Retweet the maintenance update and add a comment 'Ready for the next adventure!'", "when_to_use": "When handling Twitter interactions requiring specific tweet IDs or user authentication", "category": "failure", "created_time": "2025-09-19 10:23:28", "modified_time": "2025-09-19 10:23:28", "generalized_query": "Amplify a tweet's reach through retweeting and adding comments", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "41c15b8c8de3448782e7f9b464fb1c89", "memory_type": "procedural", "when_to_use": "When converting between metric and imperial units for fuel or vehicle measurements", "content": "Use liter_to_gallon tool for accurate conversion, then apply rounded value to fillFuelTank. This ensures compatibility with vehicle systems that use imperial units.", "score": 0, "time_created": "2025-09-19 10:23:29", "time_modified": "2025-09-19 10:23:29", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Fill with the second decimal digit precision in gallon", "when_to_use": "When converting between metric and imperial units for fuel or vehicle measurements", "category": "success", "created_time": "2025-09-19 10:23:29", "modified_time": "2025-09-19 10:23:29", "generalized_query": "Convert liquid volume between liters and gallons with precision", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "c24a177a6674420d89242f4ac8a4c1d3", "memory_type": "procedural", "when_to_use": "When initiating vehicle systems requiring safety checks", "content": "Implement sequential safety checks: lock all doors, press brake pedal before starting engine. This prevents system errors and ensures safe operation.", "score": 0, "time_created": "2025-09-19 10:23:29", "time_modified": "2025-09-19 10:23:29", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Start up the engine and let me know the battery voltage and fuel level", "when_to_use": "When initiating vehicle systems requiring safety checks", "category": "success", "created_time": "2025-09-19 10:23:29", "modified_time": "2025-09-19 10:23:29", "generalized_query": "Initialize vehicle engine with safety protocol", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "49b33d12e6c041e1b4b6e065f79790e9", "memory_type": "procedural", "when_to_use": "When requiring guaranteed completion of dependent tasks in a workflow", "content": "The higher-scoring approach demonstrated superior efficiency by methodically resolving engine-starting errors (unlocking doors, pressing brake) rather than failing outright. The lower-scoring approach lacked this iterative problem-solving, resulting in task abandonment.", "score": 0, "time_created": "2025-09-19 10:23:32", "time_modified": "2025-09-19 10:23:32", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Start the engine after ensuring all safety protocols (locked doors, pressed brake) are met", "when_to_use": "When requiring guaranteed completion of dependent tasks in a workflow", "category": "comparative", "created_time": "2025-09-19 10:23:32", "modified_time": "2025-09-19 10:23:32", "generalized_query": "Perform critical system operations with prerequisite condition validation", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "9b14e2b0ae4f4e439847577c1075f366", "memory_type": "procedural", "when_to_use": "When a user needs to check market status before initiating trading activities", "content": "The successful sequence involved first retrieving the current time using get_current_time, then updating the market status with that time via update_market_status. This provided critical timing context for trading decisions. The combination of time-aware market status checks and immediate actionable insights enabled informed strategy adjustments.", "score": 0, "time_created": "2025-09-19 10:23:38", "time_modified": "2025-09-19 10:23:38", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I just arrived at the office and want to know the current market status to plan my trading activities for the day. Update the market status with the current time so I can adjust my strategy accordingly.", "when_to_use": "When a user needs to check market status before initiating trading activities", "category": "success", "created_time": "2025-09-19 10:23:38", "modified_time": "2025-09-19 10:23:38", "generalized_query": "Check market status and current time to inform trading decisions", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "48477f1fa2ce4f3bb6a7d0ffe95dac21", "memory_type": "procedural", "when_to_use": "When a user intends to purchase stocks and requires verification of stock details before execution", "content": "Use get_symbol_by_name to obtain the stock symbol, followed by get_stock_info to analyze market activity. This ensures accurate data-driven decisions before proceeding with trades.", "score": 0, "time_created": "2025-09-19 10:23:36", "time_modified": "2025-09-19 10:23:36", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Could you provide their stock symbol and detail their market activity?", "when_to_use": "When a user intends to purchase stocks and requires verification of stock details before execution", "category": "success", "created_time": "2025-09-19 10:23:36", "modified_time": "2025-09-19 10:23:36", "generalized_query": "Retrieve stock information and market data for a company before making a transaction", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "bede84c072f645f68b9a76095331a59e", "memory_type": "procedural", "when_to_use": "When confirming transaction details and ensuring account readiness for a trade", "content": "Call get_order_details to confirm order specifics and cross-check against account balances via get_account_info. This ensures alignment between order parameters and available funds.", "score": 0, "time_created": "2025-09-19 10:23:36", "time_modified": "2025-09-19 10:23:36", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I'm eager to confirm the particulars of my Zeta Corp order. Would you be able to supply the full details, including the order ID?", "when_to_use": "When confirming transaction details and ensuring account readiness for a trade", "category": "success", "created_time": "2025-09-19 10:23:36", "modified_time": "2025-09-19 10:23:36", "generalized_query": "Verify transaction details and account status before finalizing a trade", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "4347dda734f348798bb39484f481fa75", "memory_type": "procedural", "when_to_use": "When performing file operations that require precise path handling and error prevention", "content": "The higher-scoring approach ensured correct directory navigation (using 'cd Documents') before executing the copy operation, avoiding path errors. It also used relative paths based on the current working directory, reducing ambiguity. The lower-scoring approach failed due to incorrect absolute paths and lack of directory verification, leading to errors.", "score": 0, "time_created": "2025-09-19 10:24:09", "time_modified": "2025-09-19 10:24:09", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Transfer the 'annual_report.txt' in Documents directory to the 'Reports' directory that's in Documents directory, but also make sure it remains available in its current spot.", "when_to_use": "When performing file operations that require precise path handling and error prevention", "category": "comparative", "created_time": "2025-09-19 10:24:09", "modified_time": "2025-09-19 10:24:09", "generalized_query": "Copy a file between directories while preserving the original file", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "9c43f5d573fb4886a3ceae3c18e8f578", "memory_type": "procedural", "when_to_use": "When the task requires listing all files and directories, including hidden ones", "content": "Use the `ls -a` command to ensure hidden files and directories are included in the listing. This approach guarantees comprehensive visibility of the current directory's contents without missing any elements.", "score": 0, "time_created": "2025-09-19 10:24:15", "time_modified": "2025-09-19 10:24:15", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Arrange a complete listing of all files and directories presently located here, making sure you don't overlook the hidden ones too.", "when_to_use": "When the task requires listing all files and directories, including hidden ones", "category": "success", "created_time": "2025-09-19 10:24:15", "modified_time": "2025-09-19 10:24:15", "generalized_query": "List all files and directories, including hidden ones", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "a919c0e065d94c8c8161df5f327ec564", "memory_type": "procedural", "when_to_use": "When sending a message after authenticating as a specific user", "content": "Log in as the sender's user ID using `message_login` before invoking `send_message`. This ensures proper authentication and avoids permission errors, guaranteeing the message is delivered from the correct account.", "score": 0, "time_created": "2025-09-19 10:24:15", "time_modified": "2025-09-19 10:24:15", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Attempt to relay a message to the individual with ID 'USR002' by logging in as USR001, updating them on the finalization of the report saying 'The report has been finalized.'", "when_to_use": "When sending a message after authenticating as a specific user", "category": "success", "created_time": "2025-09-19 10:24:15", "modified_time": "2025-09-19 10:24:15", "generalized_query": "Send a message to a user after authenticating as another user", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "85be38c097234fdd810464ec2ba63665", "memory_type": "procedural", "when_to_use": "When accessing files that may not exist", "content": "Check for the existence of the file before attempting to read it to prevent 'No such file or directory' errors", "score": 0, "time_created": "2025-09-19 10:24:22", "time_modified": "2025-09-19 10:24:22", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Reveal the last lines of 'Q4_summary.doc' so we can ascertain how the report wraps up.", "when_to_use": "When accessing files that may not exist", "category": "failure", "created_time": "2025-09-19 10:24:22", "modified_time": "2025-09-19 10:24:22", "generalized_query": "View the end of a document file", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "cf00fd42027c4da19d0bef8976e6d917", "memory_type": "procedural", "when_to_use": "When verifying vehicle security or initiating critical operations like engine start", "content": "The higher-scoring approach systematically verified the door status using 'displayCarStatus' before locking, ensuring completeness. The lower-scoring approach locked doors directly without verification, risking incomplete security. Proactive state-checking prevents errors and ensures all safety protocols are met.", "score": 0, "time_created": "2025-09-19 10:24:15", "time_modified": "2025-09-19 10:24:15", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I've noticed that some of my car doors are slightly ajar while others seem to be securely locked. Would you be able to verify and make sure all doors are properly locked for safety?", "when_to_use": "When verifying vehicle security or initiating critical operations like engine start", "category": "comparative", "created_time": "2025-09-19 10:24:15", "modified_time": "2025-09-19 10:24:15", "generalized_query": "Verify and secure vehicle doors before initiating a drive", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "008b6b05a8b94593b19181a6f58a7775", "memory_type": "procedural", "when_to_use": "When sending messages or performing user-specific actions", "content": "Verify user login status before sending messages and handle authentication automatically to avoid interruptions", "score": 0, "time_created": "2025-09-19 10:24:16", "time_modified": "2025-09-19 10:24:16", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "send a quick message 'I am on my way to your place.' to my cousin (user id USR002)", "when_to_use": "When sending messages or performing user-specific actions", "category": "failure", "created_time": "2025-09-19 10:24:16", "modified_time": "2025-09-19 10:24:16", "generalized_query": "Send messages to specific users in a workspace", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "a04adc58ae0e448fba592f2ef7312b6c", "memory_type": "procedural", "when_to_use": "When needing to relocate a file to an archive directory within the same directory structure", "content": "Use 'find' to locate the file, navigate to its directory with 'cd', create an 'archive' folder (if not exists), and move the file using 'mv'. Verify directory existence before creating to avoid errors.", "score": 0, "time_created": "2025-09-19 10:24:07", "time_modified": "2025-09-19 10:24:07", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Find analysis_report.csv and upon locating it, ensure you move it to the 'archive' directory in the same directory of analysis report for safekeeping", "when_to_use": "When needing to relocate a file to an archive directory within the same directory structure", "category": "success", "created_time": "2025-09-19 10:24:07", "modified_time": "2025-09-19 10:24:07", "generalized_query": "Locate and relocate a file to an archive subdirectory within its original directory", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "4e4c9c0d4dfa4d07b641cdad5a5164ab", "memory_type": "procedural", "when_to_use": "When promoting data management achievements on social media with specific hashtags", "content": "Authenticate via TwitterAPI, use 'post_tweet' with content and hashtags, then add a comment using 'comment' to reinforce achievements. Prioritize clear messaging and strategic hashtag usage for visibility.", "score": 0, "time_created": "2025-09-19 10:24:07", "time_modified": "2025-09-19 10:24:07", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Craft a tweet stating 'Managed to archive important data files!' using the hashtags #DataManagement and #Efficiency", "when_to_use": "When promoting data management achievements on social media with specific hashtags", "category": "success", "created_time": "2025-09-19 10:24:07", "modified_time": "2025-09-19 10:24:07", "generalized_query": "Post a status update about data management accomplishments with relevant hashtags", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "960505ef2fc748e580d5f75e2af8a89f", "memory_type": "procedural", "when_to_use": "When requiring alphabetical sorting and display of text files", "content": "Use 'sort' to alphabetically arrange file contents, then 'cat' to display the sorted output. This ensures organized review of textual data while maintaining readability.", "score": 0, "time_created": "2025-09-19 10:24:07", "time_modified": "2025-09-19 10:24:07", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "After the file transfer, display the contents of 'archive_summary.txt' in the current working directory. Sort the contents alphabetically for easy review and analysis", "when_to_use": "When requiring alphabetical sorting and display of text files", "category": "success", "created_time": "2025-09-19 10:24:07", "modified_time": "2025-09-19 10:24:07", "generalized_query": "Sort and display contents of a text file alphabetically", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "47625133b257417aa186fe3b19ff654c", "memory_type": "procedural", "when_to_use": "When executing social media tasks requiring authentication and content posting", "content": "Ensure authentication credentials are securely handled and validated before executing any Twitter API actions to prevent unauthorized operations.", "score": 0, "time_created": "2025-09-19 10:24:22", "time_modified": "2025-09-19 10:24:22", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Help me maintain a social media presence by crafting a tweet that states, 'Managed to archive important data files!' using the hashtags #DataManagement and #Efficiency.", "when_to_use": "When executing social media tasks requiring authentication and content posting", "category": "failure", "created_time": "2025-09-19 10:24:22", "modified_time": "2025-09-19 10:24:22", "generalized_query": "Post a tweet with specific content and hashtags using Twitter API", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "a0dbe61f52684a708b73ce703586876e", "memory_type": "procedural", "when_to_use": "Before initiating engine startup or critical vehicle operations", "content": "Critical pre-start checks (door locks, brake pedal position) must be verified before attempting to start the engine, even if fuel level is confirmed.", "score": 0, "time_created": "2025-09-19 10:24:44", "time_modified": "2025-09-19 10:24:44", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I would like to increase the amount of fuel in my car to completely full, but first I need to ascertain the present level to determine the appropriate amount to add.", "when_to_use": "Before initiating engine startup or critical vehicle operations", "category": "failure", "created_time": "2025-09-19 10:24:44", "modified_time": "2025-09-19 10:24:44", "generalized_query": "Refueling and pre-start vehicle checks", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "9c2df7675ac7487492bc1e73dce3a917", "memory_type": "procedural", "when_to_use": "When handling vehicle maintenance alerts", "content": "Integrate real-time monitoring with immediate actionable solutions (e.g., locating service centers) for critical vehicle parameters like tire pressure.", "score": 0, "time_created": "2025-09-19 10:24:44", "time_modified": "2025-09-19 10:24:44", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Should I notice that my tire pressure falls below 40 psi, kindly provide me with directions to the nearest tire service center for prompt resolution.", "when_to_use": "When handling vehicle maintenance alerts", "category": "failure", "created_time": "2025-09-19 10:24:44", "modified_time": "2025-09-19 10:24:44", "generalized_query": "Tire pressure monitoring and emergency response", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "dc1fc026b48b41838a56e0436b1141cf", "memory_type": "procedural", "when_to_use": "Before sending messages to new contacts, especially when the contact's existence is critical to the task.", "content": "Verify contact existence via 'get_user_id' before sending messages to avoid redundant operations and ensure target accuracy.", "score": 0, "time_created": "2025-09-19 10:24:55", "time_modified": "2025-09-19 10:24:55", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I need to add her contact (Kelly), in the format of 'Kelly Total Score: total_score', I'd appreciate a list of all the communications I've sent until now.", "when_to_use": "Before sending messages to new contacts, especially when the contact's existence is critical to the task.", "category": "failure", "created_time": "2025-09-19 10:24:55", "modified_time": "2025-09-19 10:24:55", "generalized_query": "Send a formatted message to a contact and retrieve communication history", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "4fdccecc80c943dca4dcf1813e7c8239", "memory_type": "procedural", "when_to_use": "When dealing with file-based tasks that require precise file identification.", "content": "Use 'ls' with the 'a' flag to ensure hidden files are included in directory listings and searches.", "score": 0, "time_created": "2025-09-19 10:24:55", "time_modified": "2025-09-19 10:24:55", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Could you provide me with an inventory of files that are currently visible and hidden in the directory I'm working in at the moment?", "when_to_use": "When dealing with file-based tasks that require precise file identification.", "category": "failure", "created_time": "2025-09-19 10:24:55", "modified_time": "2025-09-19 10:24:55", "generalized_query": "List all files (visible and hidden) in the current directory", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "109f1050cc244d6f9ece73b661ac7a5c", "memory_type": "procedural", "when_to_use": "When initiating vehicle operations requiring multiple safety checks (e.g., starting the engine, activating cruise control)", "content": "The higher-scoring approach systematically addressed prerequisites (locking doors, pressing brake pedal) before critical actions, while the lower-scoring approach failed to complete required steps before attempting cruise control. The effective approach demonstrated error resilience by sequentially resolving obstacles (unlocking → locking → brake press) to enable successful engine start and cruise control activation.", "score": 0, "time_created": "2025-09-19 10:24:56", "time_modified": "2025-09-19 10:24:56", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "With every door now open, please proceed to fire up the engine; I need to ensure everything's in working order before hitting the road.", "when_to_use": "When initiating vehicle operations requiring multiple safety checks (e.g., starting the engine, activating cruise control)", "category": "comparative", "created_time": "2025-09-19 10:24:56", "modified_time": "2025-09-19 10:24:56", "generalized_query": "Initiate vehicle engine start and prepare for cruise control activation", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "2eea1d197942463e925ad6c95241d9df", "memory_type": "procedural", "when_to_use": "When estimating distances between cities using zipcodes", "content": "Validate zipcodes with a secondary source before using them for distance calculations to avoid database lookup errors", "score": 0, "time_created": "2025-09-19 10:24:56", "time_modified": "2025-09-19 10:24:56", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Will you estimate the distance between San Francisco and Silverpine for me?", "when_to_use": "When estimating distances between cities using zipcodes", "category": "failure", "created_time": "2025-09-19 10:24:56", "modified_time": "2025-09-19 10:24:56", "generalized_query": "Estimate distance between two cities using geographic identifiers", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "abb257b251cd47d69e8e487ed09124c1", "memory_type": "procedural", "when_to_use": "When managing vehicle fuel operations", "content": "Check current fuel level before refueling to avoid exceeding tank capacity and ensure accurate fuel requirements calculation", "score": 0, "time_created": "2025-09-19 10:24:56", "time_modified": "2025-09-19 10:24:56", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "In case it can't [cover distance], just fill out the fuel tank completely", "when_to_use": "When managing vehicle fuel operations", "category": "failure", "created_time": "2025-09-19 10:24:56", "modified_time": "2025-09-19 10:24:56", "generalized_query": "Refuel vehicle to full capacity when range is insufficient", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "8cdab8cccf3c44cb9a05b04445353d90", "memory_type": "procedural", "when_to_use": "When a user requests an estimated travel cost and subsequent budget management", "content": "The successful sequence involved first retrieving the flight cost using get_flight_cost with precise parameters (departure/arrival codes, date, class), then setting a budget limit via set_budget_limit using the provided access token. This ensures cost awareness before budget allocation, enabling informed financial planning.", "score": 0, "time_created": "2025-09-19 10:25:34", "time_modified": "2025-09-19 10:25:34", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Could you assist in estimating the airfare between ORD and SVP from the comprehensive list available through the system?", "when_to_use": "When a user requests an estimated travel cost and subsequent budget management", "category": "success", "created_time": "2025-09-19 10:25:34", "modified_time": "2025-09-19 10:25:34", "generalized_query": "Requesting an estimated travel cost between two locations with specific class preferences", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "b1f9341b90c34cea9018555a3fdbbd50", "memory_type": "procedural", "when_to_use": "When analyzing file systems and needing to update ticket priorities based on file metadata", "content": "Used a combination of file system tools (wc) to quantify file data, then applied conditional logic to modify ticket properties (edit_ticket). Success came from precise data collection and direct integration with ticketing system functions.", "score": 0, "time_created": "2025-09-19 10:25:27", "time_modified": "2025-09-19 10:25:27", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Open up ticket 654321. If the character count of any file is greater than 20, Set the priority to 3. Else, set to 2.", "when_to_use": "When analyzing file systems and needing to update ticket priorities based on file metadata", "category": "success", "created_time": "2025-09-19 10:25:27", "modified_time": "2025-09-19 10:25:27", "generalized_query": "Update ticket priority based on file content metrics", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "b8eb2a3d09a141a69953bb66d949df12", "memory_type": "procedural", "when_to_use": "When searching for files with specific naming patterns in directories", "content": "Used recursive search (find) with name filtering, combined with directory navigation (cd) to locate target files. This pattern ensures comprehensive file discovery even in complex directory structures.", "score": 0, "time_created": "2025-09-19 10:25:27", "time_modified": "2025-09-19 10:25:27", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Should you stumble upon a directory named 'test', go into there, dive deep and identify any files with 'test' in their names using 'ls'.", "when_to_use": "When searching for files with specific naming patterns in directories", "category": "success", "created_time": "2025-09-19 10:25:27", "modified_time": "2025-09-19 10:25:27", "generalized_query": "Search nested directories for files matching name patterns", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "128c54dbbeda4057ab210bb6940f7cb2", "memory_type": "procedural", "when_to_use": "When calculating distances between cities for travel planning", "content": "Use zipcode-based distance estimation tools to quantify travel distance. This provides a concrete metric for trip planning and fuel/ time calculations.", "score": 0, "time_created": "2025-09-19 10:25:29", "time_modified": "2025-09-19 10:25:29", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "How far apart are these places?", "when_to_use": "When calculating distances between cities for travel planning", "category": "success", "created_time": "2025-09-19 10:25:29", "modified_time": "2025-09-19 10:25:29", "generalized_query": "Determine the distance between two locations for travel planning", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "7de141acede64e4d8ccd627fddf1c32d", "memory_type": "procedural", "when_to_use": "When performing pre-trip vehicle safety checks", "content": "Implement sequential safety checks (locked doors, pressed brake) before engine start. This prevents operational errors and ensures vehicle readiness.", "score": 0, "time_created": "2025-09-19 10:25:29", "time_modified": "2025-09-19 10:25:29", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Engage the 'START' ignition mode to ready the vehicle", "when_to_use": "When performing pre-trip vehicle safety checks", "category": "success", "created_time": "2025-09-19 10:25:29", "modified_time": "2025-09-19 10:25:29", "generalized_query": "Execute vehicle ignition sequence with safety protocol verification", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "a593e61d930b4b0caa55254db204ed76", "memory_type": "procedural", "when_to_use": "When performing advanced fuel efficiency analysis", "content": "Use logarithmic calculations with precise parameters for quantitative fuel efficiency analysis. This reveals exponential relationships in fuel consumption patterns.", "score": 0, "time_created": "2025-09-19 10:25:29", "time_modified": "2025-09-19 10:25:29", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Logarithm of the distance to the base the previous fuel value", "when_to_use": "When performing advanced fuel efficiency analysis", "category": "success", "created_time": "2025-09-19 10:25:29", "modified_time": "2025-09-19 10:25:29", "generalized_query": "Apply mathematical operations to analyze fuel efficiency metrics", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "11b76417555f40ff911bcfe20e2c6ba9", "memory_type": "procedural", "when_to_use": "When handling mathematical operations with specific precision requirements", "content": "Ensure parameter validation for mathematical functions, including checking for valid base values (e.g., base > 0 and ≠ 1) to avoid computational errors", "score": 0, "time_created": "2025-09-19 10:25:34", "time_modified": "2025-09-19 10:25:34", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Calculate the logarithm of the distance to the base the previous fuel value, computed to a precision of 10", "when_to_use": "When handling mathematical operations with specific precision requirements", "category": "failure", "created_time": "2025-09-19 10:25:34", "modified_time": "2025-09-19 10:25:34", "generalized_query": "Perform logarithmic calculations with defined base and precision", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "4df7eb7efc334d0fb034317bb54cd7cc", "memory_type": "procedural", "when_to_use": "When booking flights with pre-defined cost parameters", "content": "The higher-scoring approach successfully resolved the 'travel_cost' parameter error by removing invalid arguments and retrying the booking. This demonstrated better error handling and understanding of API requirements compared to the lower-scoring approach, which repeatedly used incorrect parameters.", "score": 0, "time_created": "2025-09-19 10:25:37", "time_modified": "2025-09-19 10:25:37", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "book me a business class ticket from SFO to LAX for December 15, 2024", "when_to_use": "When booking flights with pre-defined cost parameters", "category": "comparative", "created_time": "2025-09-19 10:25:37", "modified_time": "2025-09-19 10:25:37", "generalized_query": "Book a flight with specific origin, destination, date, and class", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "24261338f6cd45eea910de0679fe528c", "memory_type": "procedural", "when_to_use": "When sending messages to notify stakeholders about travel plans", "content": "Use the send_message function with the recipient's user ID and a clear message. Pair it with view_messages_sent to track communication history, ensuring transparency and accountability in message delivery.", "score": 0, "time_created": "2025-09-19 10:25:37", "time_modified": "2025-09-19 10:25:37", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Send itinerary confirmation to a travel companion", "when_to_use": "When sending messages to notify stakeholders about travel plans", "category": "success", "created_time": "2025-09-19 10:25:37", "modified_time": "2025-09-19 10:25:37", "generalized_query": "Message notification to a specified user", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "7fc611fbaa944e45b27ad1be530208c7", "memory_type": "procedural", "when_to_use": "When handling authentication and token management", "content": "Ensure the grant_type parameter matches the required scope (e.g., 'read_write') and validate token expiration times to avoid authentication failures during critical operations.", "score": 0, "time_created": "2025-09-19 10:25:42", "time_modified": "2025-09-19 10:25:42", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Authenticate with the travel API using provided credentials", "when_to_use": "When handling authentication and token management", "category": "failure", "created_time": "2025-09-19 10:25:42", "modified_time": "2025-09-19 10:25:42", "generalized_query": "Authenticate to a system using client credentials and refresh tokens", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "bbb729891ecc41c983b81ee99301d077", "memory_type": "procedural", "when_to_use": "When creating support tickets involving sensitive account details", "content": "Never include sensitive credentials (e.g., passwords) in ticket descriptions. Always authenticate separately before submitting tickets requiring sensitive information", "score": 0, "time_created": "2025-09-19 10:26:12", "time_modified": "2025-09-19 10:26:12", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I'd appreciate your help in initiating a priority level 3 support ticket labeled 'Urgent: Transaction Issue' with the description 'There is an issue with a recent transaction involving a canceled buy order for 100 shares of AAPL and I am requesting confirmation of the cancellation along with an account summary. My username is user123 and password is 12345 for the ticket login.", "when_to_use": "When creating support tickets involving sensitive account details", "category": "failure", "created_time": "2025-09-19 10:26:12", "modified_time": "2025-09-19 10:26:12", "generalized_query": "Create a high-priority support ticket for transaction verification, including account credentials in the description", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "a7985586cf384ee3a54e4bd3f6dbab90", "memory_type": "procedural", "when_to_use": "When a user needs to execute a trade based on their watchlist", "content": "Use the get_watchlist function directly to fetch the user's watchlist without additional parameters. This provides immediate visibility into monitored stocks, enabling quick decision-making for trades or adjustments.", "score": 0, "time_created": "2025-09-19 10:26:12", "time_modified": "2025-09-19 10:26:12", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "display the stocks I'm monitoring right now", "when_to_use": "When a user needs to execute a trade based on their watchlist", "category": "success", "created_time": "2025-09-19 10:26:12", "modified_time": "2025-09-19 10:26:12", "generalized_query": "Retrieve user's current stock watchlist", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "3fbb3e368cec4dce95e4c1c66e0b6a54", "memory_type": "procedural", "when_to_use": "When executing order modifications and account verification in trading systems", "content": "The higher-scoring approach provided immediate confirmation of cancellation and linked it to account verification steps, ensuring transparency. It also maintained contextual awareness by referencing prior interactions (e.g., order ID 12446) to streamline the process, reducing user effort and minimizing errors.", "score": 0, "time_created": "2025-09-19 10:26:19", "time_modified": "2025-09-19 10:26:19", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Reflecting my revised financial direction, I've decided to retract the recent order. I'd be thankful for your assistance in carrying out the cancellation and confirming it.", "when_to_use": "When executing order modifications and account verification in trading systems", "category": "comparative", "created_time": "2025-09-19 10:26:19", "modified_time": "2025-09-19 10:26:19", "generalized_query": "User requests order cancellation and confirmation", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "232f957292e84e75bc99b02e4b9b16d0", "memory_type": "procedural", "when_to_use": "When comparing differences between two files in the same directory", "content": "Use 'diff' to line-by-line compare files directly. This provides clear, structured visibility into textual differences without manual inspection.", "score": 0, "time_created": "2025-09-19 10:26:03", "time_modified": "2025-09-19 10:26:03", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "articulate the distinctions", "when_to_use": "When comparing differences between two files in the same directory", "category": "success", "created_time": "2025-09-19 10:26:03", "modified_time": "2025-09-19 10:26:03", "generalized_query": "Compare two files for content differences", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "3e95481f992343cd885268cb129d8f38", "memory_type": "procedural", "when_to_use": "When calculating averages or statistical measures from dataset metadata (e.g., lines, words, characters)", "content": "Avoid conflating metadata metrics (lines/words/characters) with actual dataset values when computing averages. Always verify which numerical values the user intends to analyze.", "score": 0, "time_created": "2025-09-19 10:26:38", "time_modified": "2025-09-19 10:26:38", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Could you compute the average of the three numerical value obtained? Just for my personal use.", "when_to_use": "When calculating averages or statistical measures from dataset metadata (e.g., lines, words, characters)", "category": "failure", "created_time": "2025-09-19 10:26:38", "modified_time": "2025-09-19 10:26:38", "generalized_query": "Calculate an average from numerical metrics derived during data processing", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "c2223b440f5b4787801699fc22c4e388", "memory_type": "procedural", "when_to_use": "When handling pipe-separated CSV files with header rows", "content": "Verify data formatting consistency before writing to CSV. Ensure proper handling of special characters (like |) and maintain alignment between header fields and data rows.", "score": 0, "time_created": "2025-09-19 10:26:38", "time_modified": "2025-09-19 10:26:38", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Infuse 'DataSet1.csv' with some preliminary numbers... split by line each each row", "when_to_use": "When handling pipe-separated CSV files with header rows", "category": "failure", "created_time": "2025-09-19 10:26:38", "modified_time": "2025-09-19 10:26:38", "generalized_query": "Insert structured data into a CSV file with pipe delimiters", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "ba89eb07701f4f3999ca51264b56b676", "memory_type": "procedural", "when_to_use": "When a user requests to add a stock to their watchlist and retrieve its detailed information", "content": "The successful sequence involved first using 'add_to_watchlist' to integrate the stock, followed by 'get_watchlist' to confirm the update. For detailed stock information, 'get_stock_info' was called with the specific symbol. This approach ensures immediate action on the user's request while providing structured, verifiable results through sequential function calls.", "score": 0, "time_created": "2025-09-19 10:26:49", "time_modified": "2025-09-19 10:26:49", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Could you kindly integrate Apple's stock into my current watchlist and subsequently provide me with a detailed breakdown of the watchlist's contents?", "when_to_use": "When a user requests to add a stock to their watchlist and retrieve its detailed information", "category": "success", "created_time": "2025-09-19 10:26:49", "modified_time": "2025-09-19 10:26:49", "generalized_query": "Add a stock to the watchlist and retrieve comprehensive stock details", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "f9385eb10bb14458ba8ae609fb5b5b63", "memory_type": "procedural", "when_to_use": "When resolving tickets, especially after user feedback, ensure resolution details are provided unless explicitly instructed to leave them blank.", "content": "Always verify if the ticket is already resolved before applying a resolution, and ensure that leaving resolution fields blank aligns with system requirements to avoid potential errors.", "score": 0, "time_created": "2025-09-19 10:26:53", "time_modified": "2025-09-19 10:26:53", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "There's a minor snag in our ticketing system. Ticket #7423 is still unresolved, but with our recent brainstorming feedback, just go ahead and check it off as resolved. Leave it empty for resolve description.", "when_to_use": "When resolving tickets, especially after user feedback, ensure resolution details are provided unless explicitly instructed to leave them blank.", "category": "failure", "created_time": "2025-09-19 10:26:53", "modified_time": "2025-09-19 10:26:53", "generalized_query": "Resolve a ticket with minimal or empty resolution details based on user instructions.", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "abf77f9702584d1d8f7197da8a34dc1c", "memory_type": "procedural", "when_to_use": "Before performing file system operations, ensure the current directory context is correct to avoid unintended file modifications.", "content": "Always validate the current working directory context before executing file system commands to prevent accidental modifications or misinterpretations of results.", "score": 0, "time_created": "2025-09-19 10:26:53", "time_modified": "2025-09-19 10:26:53", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I would love to get the human-readable disk usage of the current working directory.", "when_to_use": "Before performing file system operations, ensure the current directory context is correct to avoid unintended file modifications.", "category": "failure", "created_time": "2025-09-19 10:26:53", "modified_time": "2025-09-19 10:26:53", "generalized_query": "Retrieve human-readable disk usage for the current directory.", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "96aa2900d9124d62876904c74093676e", "memory_type": "procedural", "when_to_use": "When handling stock transactions or order modifications", "content": "Always verify account balance before executing trades to prevent insufficient funds errors. Implement clear status checks for orders (e.g., 'completed' vs 'pending') to avoid attempting cancellations on finalized transactions.", "score": 0, "time_created": "2025-09-19 11:05:33", "time_modified": "2025-09-19 11:05:33", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I'm thinking about buying some shares today. Could you help me out by ordering 100 shares of AAPL at the current market price?", "when_to_use": "When handling stock transactions or order modifications", "category": "failure", "created_time": "2025-09-19 11:05:33", "modified_time": "2025-09-19 11:05:33", "generalized_query": "Initiating a stock purchase with a specified quantity and symbol", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "1c859f04613f4eb68ac4185583165559", "memory_type": "procedural", "when_to_use": "When preparing a vehicle for a long journey requiring fuel, safety checks, and navigation to service centers", "content": "Convert fuel volume to compatible units (liters to gallons), execute precise fueling, and sequentially verify safety systems (doors locked, parking brake engaged, brake pedal pressed) before starting the engine. Handle errors by retrying failed checks with explicit corrective actions.", "score": 0, "time_created": "2025-09-19 10:27:10", "time_modified": "2025-09-19 10:27:10", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Ensure the fuel tank is replenished adequately by adding 38 liters of gasoline so that we're well-prepared for the lengthy voyage ahead. Only fill with integer amount for volume; round when not integer. Once fueled, proceed to start the engine confidently with the ignition mode, and make certain that all doors are secure, and the parking brake is engaged as a safety measure.", "when_to_use": "When preparing a vehicle for a long journey requiring fuel, safety checks, and navigation to service centers", "category": "success", "created_time": "2025-09-19 10:27:10", "modified_time": "2025-09-19 10:27:10", "generalized_query": "Prepare a vehicle for a long trip by refueling, securing safety systems, and ensuring operational readiness", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "62c2c1c1b6f54bb28cfbf005117e3da3", "memory_type": "procedural", "when_to_use": "When handling account funding or deposits", "content": "The higher-scoring approach used 'fund_account' (directly tied to account funding) while the lower-scoring approach used 'make_transaction' (a more generic term requiring additional parameters like account_id). The higher-scoring sequence provided clearer tool usage by selecting the most specific function for the task, reducing ambiguity and ensuring efficient execution. This demonstrates the importance of choosing the most precise tool for the task to minimize errors and improve user clarity.", "score": 0, "time_created": "2025-09-19 11:05:21", "time_modified": "2025-09-19 11:05:21", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Armed with the account overview, you've resolved to infuse 5000 USD into your trading account for potential ventures ahead. Could you arrange for this deposit to be processed efficiently?", "when_to_use": "When handling account funding or deposits", "category": "comparative", "created_time": "2025-09-19 11:05:21", "modified_time": "2025-09-19 11:05:21", "generalized_query": "Process a deposit into a trading account to increase available balance", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "881d0c7a33db4449bcad6cafad20e8fe", "memory_type": "procedural", "when_to_use": "When providing order status updates", "content": "The higher-scoring approach explicitly calculated and communicated the total order value ($3,825.00) and used precise terminology like 'Open' status. The lower-scoring sequence omitted the total value calculation, reducing contextual clarity. This highlights the importance of adding value through incremental calculations and clear status explanations, which enhance user understanding and trust in the system.", "score": 0, "time_created": "2025-09-19 11:05:21", "time_modified": "2025-09-19 11:05:21", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Once you've positioned this order, curiosity strikes about its intricate details. Would you mind fetching those details for me now?", "when_to_use": "When providing order status updates", "category": "comparative", "created_time": "2025-09-19 11:05:21", "modified_time": "2025-09-19 11:05:21", "generalized_query": "Retrieve detailed information about an active order", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "78b1079adffb448786646ea3547f7cd8", "memory_type": "procedural", "when_to_use": "Before initiating any trading actions", "content": "Always verify market hours before executing trades to prevent failed transactions during non-trading periods", "score": 0, "time_created": "2025-09-19 11:05:34", "time_modified": "2025-09-19 11:05:34", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "is the market open or closed given the time right now?", "when_to_use": "Before initiating any trading actions", "category": "failure", "created_time": "2025-09-19 11:05:34", "modified_time": "2025-09-19 11:05:34", "generalized_query": "Determine market status based on current time", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "b7851e9958094158b232292f34cc95d3", "memory_type": "procedural", "when_to_use": "When creating and managing files in a structured directory hierarchy", "content": "Use 'touch' to create files directly in the target directory. Verify file existence with 'ls' before operations. For archiving, navigate to the destination directory first, then use 'cp' with relative paths to avoid path-related errors. Always confirm file operations with directory listings.", "score": 0, "time_created": "2025-09-19 11:06:07", "time_modified": "2025-09-19 11:06:07", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Kindly draft a document titled 'project_summary.txt' right here in documents directory. Yield an error if it already exists.", "when_to_use": "When creating and managing files in a structured directory hierarchy", "category": "success", "created_time": "2025-09-19 11:06:07", "modified_time": "2025-09-19 11:06:07", "generalized_query": "Create a file in a specified directory with a unique name and handle existing file conflicts", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "9d3fe828ffc54cee88863ceaf58fdb39", "memory_type": "procedural", "when_to_use": "When needing to search for specific patterns in text files", "content": "Use 'grep' with exact case-sensitive patterns. If no matches are found, systematically check: (1) file emptiness, (2) case sensitivity, (3) typos. Provide clear feedback to users about the search outcome and offer actionable follow-up options (e.g., editing the file).", "score": 0, "time_created": "2025-09-19 11:06:07", "time_modified": "2025-09-19 11:06:07", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "In the contents of 'summary_2024.txt', please fish out and highlight any lines featuring the term 'Progress'.", "when_to_use": "When needing to search for specific patterns in text files", "category": "success", "created_time": "2025-09-19 11:06:07", "modified_time": "2025-09-19 11:06:07", "generalized_query": "Search for specific text patterns in a file and handle potential absence of matches", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "4c6209ab1f774d1c97b8dbcd99379e99", "memory_type": "procedural", "when_to_use": "When a user requires real-time market data and sector-specific stock listings", "content": "Calling both `get_current_time` and `get_available_stocks` simultaneously ensures alignment of temporal data with market data, enabling informed decision-making. This pattern works by synchronizing time-sensitive operations with real-time stock availability.", "score": 0, "time_created": "2025-09-19 11:06:21", "time_modified": "2025-09-19 11:06:21", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Could you ascertain the current time? It seems vital for aligning my stock market ventures seamlessly. Additionally, could you do me the favor of identifying which stocks in the Technology sector are currently offered?", "when_to_use": "When a user requires real-time market data and sector-specific stock listings", "category": "success", "created_time": "2025-09-19 11:06:21", "modified_time": "2025-09-19 11:06:21", "generalized_query": "Retrieve current time and sector-specific stock listings for market analysis", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "af9370674f914c05ad8093ef5bd8d8e3", "memory_type": "procedural", "when_to_use": "When urgent order cancellation is needed due to market changes", "content": "Directly calling `cancel_order` with the order ID provides immediate execution without requiring additional verification steps. This works by leveraging the tool's design for rapid intervention in dynamic market conditions.", "score": 0, "time_created": "2025-09-19 11:06:21", "time_modified": "2025-09-19 11:06:21", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Promptly initiate the cancellation of order 12446", "when_to_use": "When urgent order cancellation is needed due to market changes", "category": "success", "created_time": "2025-09-19 11:06:21", "modified_time": "2025-09-19 11:06:21", "generalized_query": "Cancel an active order immediately", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "e1608d235d584b7fa4639180720c3b75", "memory_type": "procedural", "when_to_use": "When a user requests to calculate an average of mixed financial metrics including price, volume, and moving averages", "content": "The successful sequence involved retrieving stock data first (get_stock_info) to ensure accurate values, then applying the mean function to numerical metrics. The assistant proactively flagged unit inconsistencies (volume in billions vs. price in dollars) to prevent misleading results, demonstrating critical data validation before aggregation.", "score": 0, "time_created": "2025-09-19 11:06:29", "time_modified": "2025-09-19 11:06:29", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Using the current details of the 'AAPL' stock, calculate the average of price, trading volume, MA5, and MA20.", "when_to_use": "When a user requests to calculate an average of mixed financial metrics including price, volume, and moving averages", "category": "success", "created_time": "2025-09-19 11:06:29", "modified_time": "2025-09-19 11:06:29", "generalized_query": "Calculate the average of multiple stock metrics including price, volume, and moving averages", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "14d8213f151c4cf9b486ae34fab28308", "memory_type": "procedural", "when_to_use": "When updating market status depends on real-time temporal data", "content": "The process followed a two-step pattern: first retrieving the current time (get_current_time) and then using that temporal data to update the market status (update_market_status). This ensures the market status is always aligned with the actual trading session timeline.", "score": 0, "time_created": "2025-09-19 11:06:29", "time_modified": "2025-09-19 11:06:29", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Update the market status for me, as I need to know the current outlook.", "when_to_use": "When updating market status depends on real-time temporal data", "category": "success", "created_time": "2025-09-19 11:06:29", "modified_time": "2025-09-19 11:06:29", "generalized_query": "Determine the current market status based on time", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "e01371f991bc46a680d5b61904f87223", "memory_type": "procedural", "when_to_use": "When converting fuel volume units (e.g., liters to gallons) for vehicle refueling", "content": "Convert liters to gallons using the liter_to_gallon tool, then invoke fillFuelTank with the converted value. This ensures compatibility with vehicle systems that use gallons as the fuel measurement unit.", "score": 0, "time_created": "2025-09-19 11:05:45", "time_modified": "2025-09-19 11:05:45", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I am at the gas station and ready to fill up my car with gasoline. I would appreciate it if you could manage filling 30 liters into my vehicle to ensure it's properly fueled for the journey ahead. Use 2 decimal digit of the gallon amount", "when_to_use": "When converting fuel volume units (e.g., liters to gallons) for vehicle refueling", "category": "success", "created_time": "2025-09-19 11:05:45", "modified_time": "2025-09-19 11:05:45", "generalized_query": "Convert and fill a specified volume of fuel into a vehicle's tank using unit conversion", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "e922724ae15a4d618bb3263a126502b1", "memory_type": "procedural", "when_to_use": "When initiating vehicle engine startup with safety checks required", "content": "Systematically address engine startup errors by: 1) Locking all doors, 2) Pressing the brake pedal, and 3) Re-attempting startup. This follows vehicle safety protocols that prevent accidental movement during ignition.", "score": 0, "time_created": "2025-09-19 11:05:45", "time_modified": "2025-09-19 11:05:45", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "With the fuel tank now filled with some gas, let's proceed to start the car engine. I'd be grateful if you could initiate the engine in 'START' mode for me", "when_to_use": "When initiating vehicle engine startup with safety checks required", "category": "success", "created_time": "2025-09-19 11:05:45", "modified_time": "2025-09-19 11:05:45", "generalized_query": "Start a vehicle engine after completing pre-start safety checks", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "37952bdb717e4cbc81f736c51631b5a6", "memory_type": "procedural", "when_to_use": "When detecting vehicle vibrations or unusual behavior during operation", "content": "Tire pressure checks alone may not resolve vibration issues; consider additional diagnostics like wheel balance or suspension inspection for comprehensive troubleshooting.", "score": 0, "time_created": "2025-09-19 11:06:22", "time_modified": "2025-09-19 11:06:22", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "After starting the engine, there was a slight vibration while I was driving. Would you mind checking the tire pressure to confirm everything's in good working order?", "when_to_use": "When detecting vehicle vibrations or unusual behavior during operation", "category": "failure", "created_time": "2025-09-19 11:06:22", "modified_time": "2025-09-19 11:06:22", "generalized_query": "Investigate vehicle vibration by checking tire pressure", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "4ec1e2ace9114eb2bc7a2ad3927b9c37", "memory_type": "procedural", "when_to_use": "When a user requests to execute a stock transaction after modifying their watchlist", "content": "The successful sequence involved retrieving real-time stock information (get_stock_info) to confirm pricing before placing an order (place_order). This ensures accurate execution by aligning the transaction with current market conditions. Follow-up order confirmation via get_order_details provides transparency.", "score": 0, "time_created": "2025-09-19 11:06:46", "time_modified": "2025-09-19 11:06:46", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I am interested in purchasing 50 shares of 'Apple' at the present market price. Please proceed with the transaction.", "when_to_use": "When a user requests to execute a stock transaction after modifying their watchlist", "category": "success", "created_time": "2025-09-19 11:06:46", "modified_time": "2025-09-19 11:06:46", "generalized_query": "Execute a stock transaction based on current market data and user-specified parameters", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "2cb82653487b425a8bae78b820172512", "memory_type": "procedural", "when_to_use": "When handling travel insurance purchases or expense-related queries", "content": "Always validate the existence and correctness of required identifiers (e.g., booking IDs) before executing transactions that depend on them. Use placeholders only as temporary substitutes during development/testing phases.", "score": 0, "time_created": "2025-09-19 11:06:56", "time_modified": "2025-09-19 11:06:56", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I'm eager to use this card to purchase comprehensive travel insurance for an upcoming journey... Could we expedite this and use my booking record for booking_id?", "when_to_use": "When handling travel insurance purchases or expense-related queries", "category": "failure", "created_time": "2025-09-19 11:06:56", "modified_time": "2025-09-19 11:06:56", "generalized_query": "Initiate travel insurance purchase using a booking ID and credit card", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "81a3ac2f31fc4f268f5289b8aff622e1", "memory_type": "procedural", "when_to_use": "When handling file operations in an unknown directory structure", "content": "The higher-scoring approach systematically verified file existence and directory structure using 'pwd', 'ls', and 'cd' before attempting operations, while the lower-scoring approach failed to check for file location leading to errors. Proper directory navigation ensured successful file copying and comparison.", "score": 0, "time_created": "2025-09-19 11:06:50", "time_modified": "2025-09-19 11:06:50", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Whip up a duplicate of 'project_analysis.txt' and shift it over to this folder I've named 'project_archive'", "when_to_use": "When handling file operations in an unknown directory structure", "category": "comparative", "created_time": "2025-09-19 11:06:50", "modified_time": "2025-09-19 11:06:50", "generalized_query": "Copy a file to a specific directory in an unfamiliar file system", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "9ae0ff3b9d7f49dc9f06cdeefa2e30fa", "memory_type": "procedural", "when_to_use": "When sharing analysis results via social media with team collaboration", "content": "The successful sequence involved authenticating the Twitter account first (ensuring security) then using the post_tweet tool with structured parameters (mentions as array, tags as array). This approach ensures compliance with platform requirements and maximizes tweet visibility through proper formatting.", "score": 0, "time_created": "2025-09-19 11:07:01", "time_modified": "2025-09-19 11:07:01", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Toss a tweet out there about this comparative analysis, mentions @colleagues, and throw in #ProjectInsight", "when_to_use": "When sharing analysis results via social media with team collaboration", "category": "success", "created_time": "2025-09-19 11:07:01", "modified_time": "2025-09-19 11:07:01", "generalized_query": "Post a social media update with team mentions and relevant hashtags", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "137f802624f6412d873e2a72a7e4f6ed", "memory_type": "procedural", "when_to_use": "When performing file operations or comparisons", "content": "Always verify file existence and correct names before executing operations like diff to avoid errors", "score": 0, "time_created": "2025-09-19 11:07:02", "time_modified": "2025-09-19 11:07:02", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Look for draft and final report in my current directory. Compare the content difference of both.", "when_to_use": "When performing file operations or comparisons", "category": "failure", "created_time": "2025-09-19 11:07:02", "modified_time": "2025-09-19 11:07:02", "generalized_query": "Compare two files in the current directory by content", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "740f1935e0604ccca3fabea95bb385e3", "memory_type": "procedural", "when_to_use": "When resolving support tickets", "content": "Verify ticket status before resolving to prevent unnecessary actions on closed tickets", "score": 0, "time_created": "2025-09-19 11:07:02", "time_modified": "2025-09-19 11:07:02", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Retrieve the details of ticket #987654 and resolve it with 'Fixed through manual troubleshooting techniques.'", "when_to_use": "When resolving support tickets", "category": "failure", "created_time": "2025-09-19 11:07:02", "modified_time": "2025-09-19 11:07:02", "generalized_query": "Resolve an open support ticket with a custom resolution", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "98131adf1b844704ac3965f1d8eb7b94", "memory_type": "procedural", "when_to_use": "When booking flights with pre-linked payment methods and encountering API parameter inconsistencies", "content": "Systematically identify airports, retrieve cost estimates, and execute booking with multiple parameter iterations to resolve API inconsistencies. Validate success through booking confirmation and invoice retrieval before escalating issues to customer support.", "score": 0, "time_created": "2025-09-19 11:07:25", "time_modified": "2025-09-19 11:07:25", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I'm planning a journey from Los Angeles to New York on the morning of April 15th 2024, preferring to fly business class. Arrange this flight using my pre-linked credit card with id 'card_123456789' and access token 'abc123xyz'.", "when_to_use": "When booking flights with pre-linked payment methods and encountering API parameter inconsistencies", "category": "success", "created_time": "2025-09-19 11:07:25", "modified_time": "2025-09-19 11:07:25", "generalized_query": "Book a flight between two cities on a specific date with business class preference using a pre-linked credit card", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "0c384cc3cc7a415c9493273281c3b0e5", "memory_type": "procedural", "when_to_use": "When resolving technical issues during critical transaction processes", "content": "Document specific error patterns (e.g., parameter mismatches) and provide detailed context to customer support, including successful resolution steps to help diagnose systemic API issues.", "score": 0, "time_created": "2025-09-19 11:07:25", "time_modified": "2025-09-19 11:07:25", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Reach out to customer support and detail the challenges I faced.", "when_to_use": "When resolving technical issues during critical transaction processes", "category": "success", "created_time": "2025-09-19 11:07:25", "modified_time": "2025-09-19 11:07:25", "generalized_query": "Escalate technical issues during transaction processing to support teams", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "774b3c228f66460185178b0769dd4716", "memory_type": "procedural", "when_to_use": "When relying on tool responses for critical decisions like vehicle maintenance", "content": "Always validate tool outputs against explicit thresholds rather than trusting automated health indicators alone", "score": 0, "time_created": "2025-09-19 11:07:34", "time_modified": "2025-09-19 11:07:34", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I'm gearing up for a quick business getaway and need my ride all set. Would you be able to verify if my tire pressure is in check? If it falls under 37.5 PSI, perhaps we could swing by the nearest tire shop?", "when_to_use": "When relying on tool responses for critical decisions like vehicle maintenance", "category": "failure", "created_time": "2025-09-19 11:07:34", "modified_time": "2025-09-19 11:07:34", "generalized_query": "Check vehicle maintenance status and take action if thresholds are not met", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "8d6df454d5a44e198c408a07c6edb8e6", "memory_type": "procedural", "when_to_use": "When performing Twitter actions such as posting tweets", "content": "Always verify Twitter authentication status before executing tweet-related actions to avoid unauthorized operation errors", "score": 0, "time_created": "2025-09-19 11:07:22", "time_modified": "2025-09-19 11:07:22", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Post a tweet: 'Ensuring my wheels are well-maintained. Maintenance is key to success!' with the hashtag 'BusinessOnTheMove'", "when_to_use": "When performing Twitter actions such as posting tweets", "category": "failure", "created_time": "2025-09-19 11:07:22", "modified_time": "2025-09-19 11:07:22", "generalized_query": "Post a tweet with specific content and hashtags", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "5adc2944e6464b5da1e0610e5d3d49c6", "memory_type": "procedural", "when_to_use": "When handling trade execution with insufficient funds", "content": "The higher-scoring approach provided precise calculations (e.g., $85,188 funding gap, 22 shares max) and clear action options, while the lower-scoring approach offered only generic guidance. Specific numerical insights enabled faster decision-making and reduced user ambiguity.", "score": 0, "time_created": "2025-09-19 11:07:35", "time_modified": "2025-09-19 11:07:35", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Initiate a purchase order for 150 shares of TSLA at the prevailing market price leveraging my account balance", "when_to_use": "When handling trade execution with insufficient funds", "category": "comparative", "created_time": "2025-09-19 11:07:35", "modified_time": "2025-09-19 11:07:35", "generalized_query": "Execute a stock purchase order with specified quantity and price while managing account balance constraints", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "a7353c5ced06479fbee7b1de7387dc5f", "memory_type": "procedural", "when_to_use": "When the user specifies a file location that is not explicitly in the current directory", "content": "Always verify the file path and ensure the correct directory context before writing files, especially when the user indicates the file may be located elsewhere in the file system. Use 'find' or 'ls' to confirm the file's existence and location.", "score": 0, "time_created": "2025-09-19 11:08:08", "time_modified": "2025-09-19 11:08:08", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Can you write the answer rounded in nearest integer into a new file named 'MeanRevenue.txt'? Just the number and nothing", "when_to_use": "When the user specifies a file location that is not explicitly in the current directory", "category": "failure", "created_time": "2025-09-19 11:08:08", "modified_time": "2025-09-19 11:08:08", "generalized_query": "Write a calculated value to a specified file with specific formatting requirements", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "66bfb66a1c8643d79060775907974c05", "memory_type": "procedural", "when_to_use": "When extracting numerical values from text-based data", "content": "Automate value extraction by parsing text content first, rather than relying on hardcoded values. Use tools like 'grep' or 'awk' for robust data parsing in future workflows.", "score": 0, "time_created": "2025-09-19 11:08:06", "time_modified": "2025-09-19 11:08:06", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "What's the mean of the quarterly revenue?", "when_to_use": "When extracting numerical values from text-based data", "category": "failure", "created_time": "2025-09-19 11:08:06", "modified_time": "2025-09-19 11:08:06", "generalized_query": "Calculate the mean of numerical values extracted from textual data", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "96a9b59063bb490b8d118c3c2c7a4c67", "memory_type": "procedural", "when_to_use": "When ensuring vehicle readiness for a road trip with multiple interdependent systems", "content": "The higher-scoring approach achieved success by systematically addressing all preconditions (fuel, engine, tires) while the lower-scoring sequence failed to resolve the tire pressure issue. The higher score demonstrated better error handling by: 1) Adjusting fuel amount after capacity error, 2) Completing full engine startup sequence with multiple safety checks, 3) Proactively navigating to the tire shop even when system marked pressure as 'healthy', 4) Final tweet confirmation with proper formatting", "score": 0, "time_created": "2025-09-19 11:08:06", "time_modified": "2025-09-19 11:08:06", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I want to make certain my tires are roadworthy before setting off. If any of my car's tires are showing pressure below 40, point me in the direction of the closest tire service station", "when_to_use": "When ensuring vehicle readiness for a road trip with multiple interdependent systems", "category": "comparative", "created_time": "2025-09-19 11:08:06", "modified_time": "2025-09-19 11:08:06", "generalized_query": "Verify vehicle safety systems and provide emergency navigation support", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_32b", "memory_id": "efb1e506f36048c7a088ad95d3891847", "memory_type": "procedural", "when_to_use": "When preparing a vehicle for a road trip, especially when ensuring fuel levels and engine readiness.", "content": "Always verify the current fuel level before attempting to fill the tank, and ensure the fuel amount does not exceed the tank's capacity to prevent errors or damage.", "score": 0, "time_created": "2025-09-19 11:08:21", "time_modified": "2025-09-19 11:08:21", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I'm about to embark on a road trip adventure and I want my car to be in peak condition. Could you make sure to increase the current fuel level to ensure that my tank is full, so I don't have to keep stopping to refuel along the way?", "when_to_use": "When preparing a vehicle for a road trip, especially when ensuring fuel levels and engine readiness.", "category": "failure", "created_time": "2025-09-19 11:08:21", "modified_time": "2025-09-19 11:08:21", "generalized_query": "Ensure vehicle fuel level is maximized before a road trip to avoid refueling stops.", "utility": 0, "freq": 0}} diff --git a/docs/library/paper_data/task/bfcl_qwen3_8b.jsonl b/docs/library/paper_data/task/bfcl_qwen3_8b.jsonl deleted file mode 100644 index 2d9abb6a..00000000 --- a/docs/library/paper_data/task/bfcl_qwen3_8b.jsonl +++ /dev/null @@ -1,96 +0,0 @@ -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "3bd4929d874a4750b0d4ab78c0246299", "memory_type": "procedural", "when_to_use": "When a user requests stock information and subsequent watchlist management", "content": "1. Use get_symbol_by_name to map company name to stock symbol\n2. Fetch stock details via get_stock_info for price data\n3. Add symbol to watchlist using add_to_watchlist\n4. Verify watchlist state with get_watchlist\n5. Use send_message with proper receiver_id and formatted content for communication", "score": 0, "time_created": "2025-09-20 11:22:49", "time_modified": "2025-09-20 11:22:49", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "For your investment portfolio, could you inform me of the current price of 'Quasar Ltd.'?", "when_to_use": "When a user requests stock information and subsequent watchlist management", "category": "success", "created_time": "2025-09-20 11:22:49", "modified_time": "2025-09-20 11:22:49", "generalized_query": "Retrieve stock price and manage watchlist for a specific equity", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "60a6950ce215419ab8bc6092737779c7", "memory_type": "procedural", "when_to_use": "Before initiating vehicle operations such as starting the engine", "content": "Always verify all doors are locked and parking brake is engaged before attempting to start the engine to prevent operational failures.", "score": 0, "time_created": "2025-09-20 11:22:56", "time_modified": "2025-09-20 11:22:56", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Could you get the engine started for me? Make sure you do it in START mode, with all doors securely locked and the brake properly engaged.", "when_to_use": "Before initiating vehicle operations such as starting the engine", "category": "failure", "created_time": "2025-09-20 11:22:56", "modified_time": "2025-09-20 11:22:56", "generalized_query": "Initiate vehicle engine start with safety checks", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "1479882d641c4c4989c8d3f0246cb4ea", "memory_type": "procedural", "when_to_use": "When assessing trip feasibility based on vehicle capabilities", "content": "Combine distance estimation with vehicle mileage capabilities and fuel capacity to provide accurate trip feasibility assessments.", "score": 0, "time_created": "2025-09-20 11:22:56", "time_modified": "2025-09-20 11:22:56", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Is this something I could realistically pull off? I just want to know a answer; you don't need to refill if it's not reachable.", "when_to_use": "When assessing trip feasibility based on vehicle capabilities", "category": "failure", "created_time": "2025-09-20 11:22:56", "modified_time": "2025-09-20 11:22:56", "generalized_query": "Evaluate trip feasibility based on vehicle parameters", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "34cdf7e2ecb64cce849913f70c20d196", "memory_type": "procedural", "when_to_use": "When users request stock analysis and watchlist management", "content": "The higher-scoring approach provided detailed technical analysis (e.g., moving averages, price change) to justify the watchlist addition, while the lower-scoring response lacked contextual justification for the action. The higher-scoring sequence also offered proactive options (e.g., historical analysis, price alerts) to enhance decision-making, whereas the lower-scoring response ended the interaction prematurely.", "score": 0, "time_created": "2025-09-20 11:22:51", "time_modified": "2025-09-20 11:22:51", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Based on the insights gathered, if 'AMZN' appears promising, coordinate its addition to my watchlist. By promising I mean the price is larger than 300.", "when_to_use": "When users request stock analysis and watchlist management", "category": "comparative", "created_time": "2025-09-20 11:22:51", "modified_time": "2025-09-20 11:22:51", "generalized_query": "Add a stock to the watchlist based on price criteria and analysis", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "8609387709224491b021bbc1c2df39d2", "memory_type": "procedural", "when_to_use": "When users need order details without explicit order IDs", "content": "The higher-scoring approach automatically retrieved and displayed the most recent order details (ID 12446) after fetching the history, while the lower-scoring response only listed order IDs without immediate detail retrieval. This demonstrates efficiency in handling ambiguous user requests by combining history lookup with direct detail fetching.", "score": 0, "time_created": "2025-09-20 11:22:51", "time_modified": "2025-09-20 11:22:51", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Access and retrieve the details of my most recent order, as I've misplaced the ID but need the latest transaction.", "when_to_use": "When users need order details without explicit order IDs", "category": "comparative", "created_time": "2025-09-20 11:22:51", "modified_time": "2025-09-20 11:22:51", "generalized_query": "Retrieve recent order details when order ID is unavailable", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "591a34145a9f45c0a28633ed07402f30", "memory_type": "procedural", "when_to_use": "When verifying market availability for trading activities", "content": "Use get_current_time to obtain the current time, then update_market_status with this time to determine market hours. This sequential approach ensures accurate market status verification by aligning time data with market operating rules.", "score": 0, "time_created": "2025-09-20 11:22:52", "time_modified": "2025-09-20 11:22:52", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Provide a real-time update on the market status. Is it currently open or closed?", "when_to_use": "When verifying market availability for trading activities", "category": "success", "created_time": "2025-09-20 11:22:52", "modified_time": "2025-09-20 11:22:52", "generalized_query": "Check current market status for trading eligibility", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "10ea702092534d089059fe40ce558dcc", "memory_type": "procedural", "when_to_use": "When refueling a vehicle with unit conversions required (e.g., liters to gallons)", "content": "Convert target volume to native units using dedicated conversion tools (liter_to_gallon), then execute fueling operation. This ensures compatibility with vehicle systems that require native unit measurements.", "score": 0, "time_created": "2025-09-20 11:22:55", "time_modified": "2025-09-20 11:22:55", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I'd appreciate it if you could refill with 10 liters of gasoline to keep the adventure alive. Use 2 decimal digit of the gallon amount", "when_to_use": "When refueling a vehicle with unit conversions required (e.g., liters to gallons)", "category": "success", "created_time": "2025-09-20 11:22:55", "modified_time": "2025-09-20 11:22:55", "generalized_query": "Refuel vehicle with specified volume in non-native units", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "b74e0a8138534b88b80b9582d0d3cda6", "memory_type": "procedural", "when_to_use": "When initiating vehicle operations requiring safety checks", "content": "Implement sequential safety checks (door locks, brake pedal position) before engine start. This follows vehicle safety protocols to prevent mechanical failures and ensure operational readiness.", "score": 0, "time_created": "2025-09-20 11:22:55", "time_modified": "2025-09-20 11:22:55", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Now that the tank is replenished, let's fire up the engine with a swift ignition and take a peek at the dashboard stats...", "when_to_use": "When initiating vehicle operations requiring safety checks", "category": "success", "created_time": "2025-09-20 11:22:55", "modified_time": "2025-09-20 11:22:55", "generalized_query": "Start vehicle engine after safety checks", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "b4de97c12b94476c9b71063eb431c45f", "memory_type": "procedural", "when_to_use": "When analyzing vehicle tire health with numerical data", "content": "Use dedicated tire pressure inspection tool to obtain individual pressures, then apply mathematical averaging functions to determine overall health metrics. This provides both granular insights and summary statistics.", "score": 0, "time_created": "2025-09-20 11:22:55", "time_modified": "2025-09-20 11:22:55", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Before we venture further... check the current tire pressure for each one and let me know?", "when_to_use": "When analyzing vehicle tire health with numerical data", "category": "success", "created_time": "2025-09-20 11:22:55", "modified_time": "2025-09-20 11:22:55", "generalized_query": "Assess tire pressure and calculate average", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "bbba0ee9cf1f42ef8279ce45c8218b54", "memory_type": "procedural", "when_to_use": "When handling flight bookings with immediate cancellation and requiring high-priority support tickets", "content": "Successfully executed a flight booking followed by immediate cancellation using the booking ID, then created a priority 5 support ticket with detailed cancellation reasons. Key steps included: 1) Validating function parameters (removing invalid 'travel_cost' parameter), 2) Using booking ID for cancellation, 3) Structuring ticket details with priority and description.", "score": 0, "time_created": "2025-09-20 11:23:17", "time_modified": "2025-09-20 11:23:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I'm planning a business class trip from JFK in New York to LAX in Los Angeles on December 15, 2024... Once booked, I'll need to cancel the trip immediately due to unexpected changes in my schedule.", "when_to_use": "When handling flight bookings with immediate cancellation and requiring high-priority support tickets", "category": "success", "created_time": "2025-09-20 11:23:17", "modified_time": "2025-09-20 11:23:17", "generalized_query": "Book a flight and immediately cancel it while creating a high-priority support ticket for the cancellation", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "17a2174850a542ca8d0799308148ea43", "memory_type": "procedural", "when_to_use": "When handling user requests that require multiple interconnected system actions (e.g., account updates, order management, notifications)", "content": "The higher-scoring approach succeeded by systematically addressing dependencies: 1) Retrieving account info first, 2) Properly handling login status checks across trading and messaging systems, 3) Ensuring authentication before sending critical notifications. The lower-scoring approach failed due to incomplete login flow and missing order history retrieval, which created dependency gaps.", "score": 0, "time_created": "2025-09-20 11:23:39", "time_modified": "2025-09-20 11:23:39", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I require some confidence about my current financial positioning. Share a detailed overview of my account, including balances and any associated card numbers. Furthermore, logging in as USR001 to notify my financial advisor (user id 'USR003') promptly about this potential shift in my investment strategy with our latest account details.", "when_to_use": "When handling user requests that require multiple interconnected system actions (e.g., account updates, order management, notifications)", "category": "comparative", "created_time": "2025-09-20 11:23:39", "modified_time": "2025-09-20 11:23:39", "generalized_query": "Request for account information and cross-system notification to a financial advisor", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "210a9565a8dd4f09941d946456edceaf", "memory_type": "procedural", "when_to_use": "When a user requests to add a stock to their watchlist by company name", "content": "Use get_symbol_by_name to retrieve the stock symbol from the company name, then call add_to_watchlist with the symbol. This ensures accurate mapping between company names and stock symbols before adding to the watchlist.", "score": 0, "time_created": "2025-09-20 11:23:41", "time_modified": "2025-09-20 11:23:41", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Kindly include their stock in my watchlist so that I can monitor it.", "when_to_use": "When a user requests to add a stock to their watchlist by company name", "category": "success", "created_time": "2025-09-20 11:23:41", "modified_time": "2025-09-20 11:23:41", "generalized_query": "Add a stock to the watchlist using company name as input", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "d3169411aa3b4ded9c58152c9ed17a04", "memory_type": "procedural", "when_to_use": "When retrieving invoices for specific services like insurance or flights", "content": "Always verify that the booking ID used for invoice retrieval corresponds to the exact service type (e.g., insurance vs. flight) to avoid mismatched results.", "score": 0, "time_created": "2025-09-20 11:23:41", "time_modified": "2025-09-20 11:23:41", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Retrieve an invoice for this insurance to ensure my financial records are precise?", "when_to_use": "When retrieving invoices for specific services like insurance or flights", "category": "failure", "created_time": "2025-09-20 11:23:41", "modified_time": "2025-09-20 11:23:41", "generalized_query": "Retrieve an invoice for a specific service (e.g., insurance) using the correct booking ID", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "42ef08cd7f0d41568542ecf9de97c6b5", "memory_type": "procedural", "when_to_use": "When booking a flight with a cost parameter that may not be supported by the API", "content": "Before booking, verify the actual flight cost using get_flight_cost() to avoid parameter mismatches. Use the returned cost value in book_flight() instead of the estimated cost. This resolves errors caused by unsupported parameters and ensures accurate booking.", "score": 0, "time_created": "2025-09-20 11:23:39", "time_modified": "2025-09-20 11:23:39", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Book a flight to Los Angeles for next Friday 2024-11-10 in business class with estimated cost $1200", "when_to_use": "When booking a flight with a cost parameter that may not be supported by the API", "category": "success", "created_time": "2025-09-20 11:23:39", "modified_time": "2025-09-20 11:23:39", "generalized_query": "Book a flight with specific date, class, and cost parameters", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "c0048fa73ec945bd8ec908743c31cd97", "memory_type": "procedural", "when_to_use": "When booking flights with specific class and date requirements", "content": "Successfully booked a flight by first verifying traveler information, obtaining correct airport codes for departure/arrival cities, and ensuring parameters match the API's required fields (e.g., omitting invalid parameters like travel_cost when function definitions change). This approach ensures compatibility with system constraints while maintaining user intent.", "score": 0, "time_created": "2025-09-20 11:23:55", "time_modified": "2025-09-20 11:23:55", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I need a first-class seat from New York to Los Angeles for this upcoming Sunday October 15th 2024.", "when_to_use": "When booking flights with specific class and date requirements", "category": "success", "created_time": "2025-09-20 11:23:55", "modified_time": "2025-09-20 11:23:55", "generalized_query": "Book a flight with specific class, date, and route requirements", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "1dd21950280a410aaf6f1efa200d972f", "memory_type": "procedural", "when_to_use": "When users request order reviews or cancellations without providing necessary parameters like order IDs", "content": "Proactively prompt users for missing parameters (e.g., order ID) or provide options to retrieve recent orders when critical information is absent", "score": 0, "time_created": "2025-09-20 11:24:15", "time_modified": "2025-09-20 11:24:15", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Review the order that I had placed, looking at its details, and let me know if it should be cancelled.", "when_to_use": "When users request order reviews or cancellations without providing necessary parameters like order IDs", "category": "failure", "created_time": "2025-09-20 11:24:15", "modified_time": "2025-09-20 11:24:15", "generalized_query": "Review an order's details to determine if cancellation is required", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "b40c73bd40e348bb98b1d5980288c499", "memory_type": "procedural", "when_to_use": "When a user needs to assess market conditions and make informed trading decisions", "content": "The successful sequence involved first retrieving the current time using get_current_time, then updating the market status with update_market_status. This pattern ensures accurate market status determination by aligning the temporal context with market rules (e.g., open/close hours). The combination of time-awareness and direct status verification creates a reliable foundation for subsequent trading decisions.", "score": 0, "time_created": "2025-09-20 11:24:17", "time_modified": "2025-09-20 11:24:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Check on the market conditions for me by updating the status to understand its current state.", "when_to_use": "When a user needs to assess market conditions and make informed trading decisions", "category": "success", "created_time": "2025-09-20 11:24:17", "modified_time": "2025-09-20 11:24:17", "generalized_query": "Determine the current market status to evaluate trading opportunities", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "0ae40629548347e09a506559c26776c8", "memory_type": "procedural", "when_to_use": "When a user requests detailed stock analysis and watchlist management", "content": "The sequence first used get_stock_info to gather quantitative metrics (price, volume, moving averages) and then add_to_watchlist for persistent tracking. This pattern ensures users receive both immediate analysis and long-term monitoring capabilities. Prioritizing data collection before watchlist modification maintains clarity on the stock's current state before committing to tracking.", "score": 0, "time_created": "2025-09-20 11:24:17", "time_modified": "2025-09-20 11:24:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I need details on the performance of a particular stock, 'SYNX', can you provide me with the critical information? It should be added to my watchlist.", "when_to_use": "When a user requests detailed stock analysis and watchlist management", "category": "success", "created_time": "2025-09-20 11:24:17", "modified_time": "2025-09-20 11:24:17", "generalized_query": "Retrieve stock performance metrics and add to watchlist for ongoing monitoring", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "6beeba061b68441290447ae44bff972d", "memory_type": "procedural", "when_to_use": "When initiating vehicle operations like starting the engine or performing safety-critical actions", "content": "Always verify all safety conditions (locked doors, brake pedal position) before initiating engine start to prevent operational failures", "score": 0, "time_created": "2025-09-20 11:24:17", "time_modified": "2025-09-20 11:24:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I'm planning ahead for our big trip and realized our car's fuel tank is running low. It would be great if you could top it up with an additional 30 gallons before I turn on the ignition using the 'START' mode.", "when_to_use": "When initiating vehicle operations like starting the engine or performing safety-critical actions", "category": "failure", "created_time": "2025-09-20 11:24:17", "modified_time": "2025-09-20 11:24:17", "generalized_query": "Perform vehicle maintenance tasks (e.g., fueling, tire checks) while ensuring all safety prerequisites are met before critical operations", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "2976652568294f6fb35ff99e23e70c89", "memory_type": "procedural", "when_to_use": "When handling social media interactions with multiple action types", "content": "Validate content formatting and platform-specific requirements before executing social media actions to avoid post-publication corrections", "score": 0, "time_created": "2025-09-20 11:24:17", "time_modified": "2025-09-20 11:24:17", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Would you mind retweeting it for me?", "when_to_use": "When handling social media interactions with multiple action types", "category": "failure", "created_time": "2025-09-20 11:24:17", "modified_time": "2025-09-20 11:24:17", "generalized_query": "Perform social media actions (post, retweet, comment) with format and content validation", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "15466b5f0cca4ff492235fb6ec10ea0c", "memory_type": "procedural", "when_to_use": "When assessing travel feasibility with a vehicle's fuel capacity", "content": "Always use the estimate_drive_feasibility_by_mileage tool to verify if current fuel can cover the trip distance before confirming travel readiness", "score": 0, "time_created": "2025-09-20 11:24:25", "time_modified": "2025-09-20 11:24:25", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Will I be able to get there?", "when_to_use": "When assessing travel feasibility with a vehicle's fuel capacity", "category": "failure", "created_time": "2025-09-20 11:24:25", "modified_time": "2025-09-20 11:24:25", "generalized_query": "Determine if a vehicle's fuel is sufficient for a planned trip distance", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "fe58504a020a4e5fa1e6e611c8b19d7a", "memory_type": "procedural", "when_to_use": "When initiating vehicle operations", "content": "Verify brake pedal position is correct before starting the engine to prevent operational errors", "score": 0, "time_created": "2025-09-20 11:24:25", "time_modified": "2025-09-20 11:24:25", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Initiate the engine ensuring safety protocols are followed", "when_to_use": "When initiating vehicle operations", "category": "failure", "created_time": "2025-09-20 11:24:25", "modified_time": "2025-09-20 11:24:25", "generalized_query": "Start vehicle engine with required safety prerequisites", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "6ee9bf5958cf4942a89e121f50ae833c", "memory_type": "procedural", "when_to_use": "When handling file-based statistical queries", "content": "For file-based statistical calculations, first extract the numerical data using 'grep' or 'cat', then use math tools for computations. Direct statistical operations on files require intermediate data extraction steps.", "score": 0, "time_created": "2025-09-20 11:24:23", "time_modified": "2025-09-20 11:24:23", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Look at the student_record.txt and tell me the average score.", "when_to_use": "When handling file-based statistical queries", "category": "failure", "created_time": "2025-09-20 11:24:23", "modified_time": "2025-09-20 11:24:23", "generalized_query": "Request statistical analysis (mean, standard deviation) from a text file containing numerical data", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "ac82b6552eb546b3b1bfa3eadf83f1d5", "memory_type": "procedural", "when_to_use": "When handling account information discrepancies or user-reported sync issues", "content": "Verify account details through system-validated channels (e.g., email verification, 2FA) after updates, and ensure support tickets include specific error codes or screenshots for faster resolution", "score": 0, "time_created": "2025-09-20 11:24:46", "time_modified": "2025-09-20 11:24:46", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "User-reported issue where updated account information, such as email and phone number, is not displaying correctly and is not syncing across services despite attempts to log out and back in.", "when_to_use": "When handling account information discrepancies or user-reported sync issues", "category": "failure", "created_time": "2025-09-20 11:24:46", "modified_time": "2025-09-20 11:24:46", "generalized_query": "Detect and resolve account information synchronization failures across platforms", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "3ee948658071456e96f81c98c842aa17", "memory_type": "procedural", "when_to_use": "When initiating critical transactions like order cancellations or account modifications", "content": "Confirm order details through multiple verification steps (e.g., cross-check price, quantity, and symbol) before finalizing transactions to prevent accidental executions", "score": 0, "time_created": "2025-09-20 11:24:46", "time_modified": "2025-09-20 11:24:46", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Initiate a purchase of 100 shares of Tesla at $700 per share", "when_to_use": "When initiating critical transactions like order cancellations or account modifications", "category": "failure", "created_time": "2025-09-20 11:24:46", "modified_time": "2025-09-20 11:24:46", "generalized_query": "Execute trade orders with precise parameters", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "97fb126a89ee4079a93117f9c625b489", "memory_type": "procedural", "when_to_use": "When a user needs to determine travel distance between two locations for a trip and wants to share updates via social media", "content": "Use location-based tools to convert city names to zip codes, then calculate distance. Follow with social media actions (posting and retweeting) to engage audience. This creates a seamless flow from logistical planning to community engagement.", "score": 0, "time_created": "2025-09-20 11:24:45", "time_modified": "2025-09-20 11:24:45", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Determine the road distance between San Francisco and Stonebrook for my genealogy exploration.", "when_to_use": "When a user needs to determine travel distance between two locations for a trip and wants to share updates via social media", "category": "success", "created_time": "2025-09-20 11:24:45", "modified_time": "2025-09-20 11:24:45", "generalized_query": "Calculate travel distance between two cities and share trip updates on social media", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "93e17e0751d94d27839ba33c663b746e", "memory_type": "procedural", "when_to_use": "When a user needs to determine the market status to inform trading decisions", "content": "The successful sequence involved first retrieving the current time using get_current_time, then updating the market status with that time via update_market_status. This ensures the user has accurate timing data to make informed trading decisions. The direct use of time-based functions creates a clear link between temporal context and market activity awareness.", "score": 0, "time_created": "2025-09-20 11:25:04", "time_modified": "2025-09-20 11:25:04", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I just arrived at the office and want to know the current market status to plan my trading activities for the day. Update the market status with the current time so I can adjust my strategy accordingly.", "when_to_use": "When a user needs to determine the market status to inform trading decisions", "category": "success", "created_time": "2025-09-20 11:25:04", "modified_time": "2025-09-20 11:25:04", "generalized_query": "Determine market status and update it with current time to inform trading decisions", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "5b5fc8939ae04fe7b36ec0776bab4883", "memory_type": "procedural", "when_to_use": "When initiating vehicle operations like starting the engine or refueling", "content": "Always verify critical safety conditions (locked doors, brake position) before engine startup to avoid operational failures", "score": 0, "time_created": "2025-09-20 11:24:59", "time_modified": "2025-09-20 11:24:59", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Start up the engine and let me know the battery voltage and fuel level", "when_to_use": "When initiating vehicle operations like starting the engine or refueling", "category": "failure", "created_time": "2025-09-20 11:24:59", "modified_time": "2025-09-20 11:24:59", "generalized_query": "Perform pre-start vehicle checks and retrieve system status metrics", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "8b4a5bdff64543e2bfa4cc80560a8903", "memory_type": "procedural", "when_to_use": "When requiring social media interactions like retweeting or commenting", "content": "Authentication credentials must be explicitly provided by the user before performing any Twitter API actions", "score": 0, "time_created": "2025-09-20 11:24:59", "time_modified": "2025-09-20 11:24:59", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Amplify its reach by retweeting it? And if you could add a comment saying, 'Ready for the next adventure!'", "when_to_use": "When requiring social media interactions like retweeting or commenting", "category": "failure", "created_time": "2025-09-20 11:24:59", "modified_time": "2025-09-20 11:24:59", "generalized_query": "Enhance tweet visibility through social media engagement actions", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "6c86455e09114ad59f78f5622fceeb1e", "memory_type": "procedural", "when_to_use": "When converting between fuel units or handling vehicle measurements", "content": "Use dedicated unit conversion tools rather than manual calculations for accuracy and consistency", "score": 0, "time_created": "2025-09-20 11:24:59", "time_modified": "2025-09-20 11:24:59", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Fill with the second decimal digit precision in gallon", "when_to_use": "When converting between fuel units or handling vehicle measurements", "category": "failure", "created_time": "2025-09-20 11:24:59", "modified_time": "2025-09-20 11:24:59", "generalized_query": "Convert liquid volumes between metric and imperial units with precision", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "0c575e7d4cf846718634a7c8b356840b", "memory_type": "procedural", "when_to_use": "When a user requests stock market data for a specific company", "content": "Use get_symbol_by_name to find the stock symbol, then get_stock_info to fetch comprehensive market metrics. This sequence ensures accurate data collection before making informed decisions.", "score": 0, "time_created": "2025-09-20 11:25:28", "time_modified": "2025-09-20 11:25:28", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Could you provide their stock symbol and detail their market activity?", "when_to_use": "When a user requests stock market data for a specific company", "category": "success", "created_time": "2025-09-20 11:25:28", "modified_time": "2025-09-20 11:25:28", "generalized_query": "Retrieve stock symbol and market data for a company", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "9a11be81503b4168a9435115454bdcec", "memory_type": "procedural", "when_to_use": "When verifying account status before critical transactions", "content": "Call get_account_info to validate balance and payment linkage. This ensures transactional integrity by confirming sufficient funds and proper account configuration before proceeding.", "score": 0, "time_created": "2025-09-20 11:25:28", "time_modified": "2025-09-20 11:25:28", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "deliver an update on my account, including the current balance and the linked card number", "when_to_use": "When verifying account status before critical transactions", "category": "success", "created_time": "2025-09-20 11:25:28", "modified_time": "2025-09-20 11:25:28", "generalized_query": "Confirm account details and payment method alignment", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "1dc795523f644d77bc6eb9342b0c5242", "memory_type": "procedural", "when_to_use": "When executing a stock purchase order and needing to confirm transaction details", "content": "Use place_order with the stock symbol, price, and quantity. Follow with get_order_details to verify the order ID and status, ensuring transparency and control over the transaction lifecycle.", "score": 0, "time_created": "2025-09-20 11:25:28", "time_modified": "2025-09-20 11:25:28", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "initiate a purchase of 50 shares at the prevailing market rate", "when_to_use": "When executing a stock purchase order and needing to confirm transaction details", "category": "success", "created_time": "2025-09-20 11:25:28", "modified_time": "2025-09-20 11:25:28", "generalized_query": "Place a buy order for a specific number of shares at current market price", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "042b8a6949b64dcb84d99ef083786f8d", "memory_type": "procedural", "when_to_use": "When performing file operations like copying or moving files", "content": "Always verify file existence and correct path before performing copy/move operations. Use absolute paths and check for directory creation prerequisites.", "score": 0, "time_created": "2025-09-20 11:25:34", "time_modified": "2025-09-20 11:25:34", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Transfer the 'annual_report.txt' in Documents directory to the 'Reports' directory that's in Documents directory, but also make sure it remains available in its current spot.", "when_to_use": "When performing file operations like copying or moving files", "category": "failure", "created_time": "2025-09-20 11:25:34", "modified_time": "2025-09-20 11:25:34", "generalized_query": "Move a file between directories while preserving its original location", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "a21d40d4fafc44939f1c29fcd3af0eee", "memory_type": "procedural", "when_to_use": "When dealing with file listings and hidden files", "content": "Use the 'ls -a' command for basic listings, but for comprehensive results combine with 'find' with proper path parameters to ensure recursive search coverage.", "score": 0, "time_created": "2025-09-20 11:25:34", "time_modified": "2025-09-20 11:25:34", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Arrange a complete listing of all files and directories presently located here, making sure you don't overlook the hidden ones too.", "when_to_use": "When dealing with file listings and hidden files", "category": "failure", "created_time": "2025-09-20 11:25:34", "modified_time": "2025-09-20 11:25:34", "generalized_query": "List all files and directories including hidden ones", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "aa4c2ff14d724b06a09d9ad20c21168c", "memory_type": "procedural", "when_to_use": "When verifying the status of vehicle systems (e.g., doors, tires) before performing critical actions", "content": "Use the displayCarStatus function with 'doors' option to check door statuses, then lock all doors using lockDoors with unlock=False. This ensures physical security before proceeding with other actions.", "score": 0, "time_created": "2025-09-20 11:25:36", "time_modified": "2025-09-20 11:25:36", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I've noticed that some of my car doors are slightly ajar while others seem to be securely locked. Would you be able to verify and make sure all doors are properly locked for safety?", "when_to_use": "When verifying the status of vehicle systems (e.g., doors, tires) before performing critical actions", "category": "success", "created_time": "2025-09-20 11:25:36", "modified_time": "2025-09-20 11:25:36", "generalized_query": "Verify and secure vehicle systems (e.g., doors, tires) before initiating a drive", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "0f0684e4b63e49b3bd0a5af2e65c0e6a", "memory_type": "procedural", "when_to_use": "When sending messages to external contacts via a messaging system", "content": "Handle authentication first using message_login with the sender's user ID before sending messages. This ensures message delivery reliability and avoids authentication errors.", "score": 0, "time_created": "2025-09-20 11:25:36", "time_modified": "2025-09-20 11:25:36", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I'd appreciate it if you could send a quick message 'I am on my way to your place.' to my cousin (user id USR002), updating them my status.", "when_to_use": "When sending messages to external contacts via a messaging system", "category": "success", "created_time": "2025-09-20 11:25:36", "modified_time": "2025-09-20 11:25:36", "generalized_query": "Send a status update message to a specified user in a messaging system", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "5098b0203f1c47f1bb96ad712bc64cb1", "memory_type": "procedural", "when_to_use": "When moving files between directories using tools with strict parameter constraints", "content": "Validate destination parameters against tool specifications to avoid invalid path syntax (e.g., trailing slashes)", "score": 0, "time_created": "2025-09-20 11:25:32", "time_modified": "2025-09-20 11:25:32", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Move analysis_report.csv to the 'archive' directory in the same directory of analysis report", "when_to_use": "When moving files between directories using tools with strict parameter constraints", "category": "failure", "created_time": "2025-09-20 11:25:32", "modified_time": "2025-09-20 11:25:32", "generalized_query": "Transfer a file to a target directory while handling path validation", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "c4a1797bfe81435cbf16ef8cbabaaf8d", "memory_type": "procedural", "when_to_use": "When posting a tweet with specific content and hashtags, followed by a comment to reinforce achievements", "content": "Authenticate using TwitterAPI, post the tweet with content and tags via 'post_tweet', then use 'comment' with the tweet ID to add a follow-up message. Ensure the tweet ID is correctly referenced for the comment.", "score": 0, "time_created": "2025-09-20 11:25:34", "time_modified": "2025-09-20 11:25:34", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Craft a tweet stating 'Managed to archive important data files!' with hashtags #DataManagement and #Efficiency, then comment 'Another successful task completed today!'", "when_to_use": "When posting a tweet with specific content and hashtags, followed by a comment to reinforce achievements", "category": "success", "created_time": "2025-09-20 11:25:34", "modified_time": "2025-09-20 11:25:34", "generalized_query": "Post a tweet with custom content and hashtags, followed by a comment to highlight achievements", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "d1b25749bcc34302875de3c333fe9d29", "memory_type": "procedural", "when_to_use": "When sorting file contents alphabetically for review or analysis", "content": "Use 'cat' to retrieve the file content, then apply 'sort' to alphabetize the lines. This ensures clarity when analyzing single-line or multi-line outputs.", "score": 0, "time_created": "2025-09-20 11:25:34", "time_modified": "2025-09-20 11:25:34", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Display the contents of 'archive_summary.txt' in the current working directory. Sort the contents alphabetically for easy review and analysis.", "when_to_use": "When sorting file contents alphabetically for review or analysis", "category": "success", "created_time": "2025-09-20 11:25:34", "modified_time": "2025-09-20 11:25:34", "generalized_query": "Sort the contents of a text file alphabetically for organized review", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "fe37dd287ecd4f519c2d5263ad30986e", "memory_type": "procedural", "when_to_use": "When searching for files or directories with specific names", "content": "Use case-insensitive and partial-name matching for file searches instead of exact matches. Combine 'find' with wildcards or simpler terms when exact names are uncertain.", "score": 0, "time_created": "2025-09-20 11:26:07", "time_modified": "2025-09-20 11:26:07", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Please cd into project folder and find Kelly's test report somewhere in the directory and read the content to me.", "when_to_use": "When searching for files or directories with specific names", "category": "failure", "created_time": "2025-09-20 11:26:07", "modified_time": "2025-09-20 11:26:07", "generalized_query": "Locate and retrieve a specific file within a directory structure", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "920c70d263184313aaeeccec0776bd4a", "memory_type": "procedural", "when_to_use": "When handling user communication history requests", "content": "Always use 'view_messages_sent' explicitly to access message history rather than relying on implicit state tracking. Verify authentication status before accessing message data.", "score": 0, "time_created": "2025-09-20 11:26:07", "time_modified": "2025-09-20 11:26:07", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I'd appreciate a list of all the communications I've sent until now.", "when_to_use": "When handling user communication history requests", "category": "failure", "created_time": "2025-09-20 11:26:07", "modified_time": "2025-09-20 11:26:07", "generalized_query": "Retrieve historical message records for a user", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "95008f787f634dcf85095605b0a739c8", "memory_type": "procedural", "when_to_use": "When initiating vehicle operations such as starting the engine", "content": "Always verify and lock all doors before attempting to start the engine to prevent operational errors.", "score": 0, "time_created": "2025-09-20 11:26:21", "time_modified": "2025-09-20 11:26:21", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I would like to increase the amount of fuel in my car to completely full, but first I need to ascertain the present level to determine the appropriate amount to add.", "when_to_use": "When initiating vehicle operations such as starting the engine", "category": "failure", "created_time": "2025-09-20 11:26:21", "modified_time": "2025-09-20 11:26:21", "generalized_query": "Fill vehicle fuel tank and perform pre-engine-start checks", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "db4286e9f67f4e4eb6fe59272635a538", "memory_type": "procedural", "when_to_use": "When initiating vehicle operations requiring multiple preconditions (e.g., engine start, cruise control activation)", "content": "The higher-scoring approach systematically addressed dependencies (locked doors, pressed brake) before engine start, while the lower-scoring approach failed to resolve door lock state errors, preventing engine ignition. Proper error handling and sequential execution of safety-critical steps (locking doors → braking → engine start) enabled successful cruise control activation in the higher-scoring sequence.", "score": 0, "time_created": "2025-09-20 11:26:19", "time_modified": "2025-09-20 11:26:19", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "With every door now open, please proceed to fire up the engine; I need to ensure everything's in working order before hitting the road.", "when_to_use": "When initiating vehicle operations requiring multiple preconditions (e.g., engine start, cruise control activation)", "category": "comparative", "created_time": "2025-09-20 11:26:19", "modified_time": "2025-09-20 11:26:19", "generalized_query": "Initiate vehicle engine start and verify system readiness for operation", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "839cc6a1b6794d2aa507621f88aca74c", "memory_type": "procedural", "when_to_use": "When handling vehicle-related tasks that require multiple preconditions (e.g., starting the engine, refueling, or navigation).", "content": "Always verify critical system states (e.g., locked doors, fuel level) before executing actions like engine startup to prevent procedural errors.", "score": 0, "time_created": "2025-09-20 11:26:27", "time_modified": "2025-09-20 11:26:27", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Turn on my vehicle's engine in 'START' mode.", "when_to_use": "When handling vehicle-related tasks that require multiple preconditions (e.g., starting the engine, refueling, or navigation).", "category": "failure", "created_time": "2025-09-20 11:26:27", "modified_time": "2025-09-20 11:26:27", "generalized_query": "Initiate vehicle engine startup after ensuring all safety prerequisites are met.", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "51dc91124b534f39a165581c51b234f0", "memory_type": "procedural", "when_to_use": "When estimating travel feasibility based on vehicle specifications.", "content": "Ensure fuel efficiency data is accurate and account for real-world variables (e.g., terrain, driving conditions) when estimating range.", "score": 0, "time_created": "2025-09-20 11:26:27", "time_modified": "2025-09-20 11:26:27", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I need that info to check if my vehicle can cover the distance without refueling.", "when_to_use": "When estimating travel feasibility based on vehicle specifications.", "category": "failure", "created_time": "2025-09-20 11:26:27", "modified_time": "2025-09-20 11:26:27", "generalized_query": "Assess vehicle capability to complete a trip based on fuel efficiency and tank capacity.", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "cfa0a66049f64fad9a12b74a007994b7", "memory_type": "procedural", "when_to_use": "When handling file operations and ticket updates based on file metadata", "content": "Verify file existence before performing operations and ensure all relevant files are evaluated when applying conditional logic to tickets", "score": 0, "time_created": "2025-09-20 11:26:42", "time_modified": "2025-09-20 11:26:42", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Open up ticket 654321. If the character count of any file is greater than 20, Set the priority to 3. Else, set to 2.", "when_to_use": "When handling file operations and ticket updates based on file metadata", "category": "failure", "created_time": "2025-09-20 11:26:42", "modified_time": "2025-09-20 11:26:42", "generalized_query": "Update ticket priority based on file content metrics", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "39570362a62546a29646fe25458cfa93", "memory_type": "procedural", "when_to_use": "When processing ambiguous file references in user queries", "content": "Confirm file existence and exact matching before assuming file names, especially when dealing with potentially ambiguous or non-standard naming conventions", "score": 0, "time_created": "2025-09-20 11:26:42", "time_modified": "2025-09-20 11:26:42", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "What's the character count of the file all text file with test?", "when_to_use": "When processing ambiguous file references in user queries", "category": "failure", "created_time": "2025-09-20 11:26:42", "modified_time": "2025-09-20 11:26:42", "generalized_query": "Retrieve file statistics for a file with a descriptive name", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "82cb4e9c761a4af7b470088c47eedb4e", "memory_type": "procedural", "when_to_use": "When exploring directory structures and identifying files with specific patterns", "content": "The agent used 'ls' with the 'a' flag to ensure hidden files were included, then navigated into subdirectories using 'cd' to systematically locate files containing specific strings. This method ensures comprehensive file discovery without missing hidden or nested files.", "score": 0, "time_created": "2025-09-20 11:26:45", "time_modified": "2025-09-20 11:26:45", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "In my workspace folder, direct your attention to the initial directory we have access to and list out the files present including the hidden files. Should you stumble upon a directory named 'test', go into there, dive deep and identify any files with 'test' in their names using 'ls'.", "when_to_use": "When exploring directory structures and identifying files with specific patterns", "category": "success", "created_time": "2025-09-20 11:26:45", "modified_time": "2025-09-20 11:26:45", "generalized_query": "Search directories for files matching a pattern and analyze their contents", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "7a2ddd72d3984ef390992f9ffe654d42", "memory_type": "procedural", "when_to_use": "When estimating flight costs for a specific route, date, and class", "content": "Use the get_flight_cost tool with precise parameters (travel_from, travel_to, travel_date, travel_class) to retrieve accurate pricing data. This approach ensures direct alignment with user requirements and leverages system-specific APIs for real-time cost estimation.", "score": 0, "time_created": "2025-09-20 11:26:57", "time_modified": "2025-09-20 11:26:57", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Could you assist in estimating the airfare between ORD and SVP from the comprehensive list available through the system?", "when_to_use": "When estimating flight costs for a specific route, date, and class", "category": "success", "created_time": "2025-09-20 11:26:57", "modified_time": "2025-09-20 11:26:57", "generalized_query": "Estimate travel cost between two locations on a specific date and class", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "9727a59364f04834b9efa30559625bd1", "memory_type": "procedural", "when_to_use": "When establishing a budget limit for travel expenses", "content": "Call the set_budget_limit tool with the access_token and budget_limit parameter. This ensures secure, authorized budget configuration while maintaining alignment with financial constraints identified by the user.", "score": 0, "time_created": "2025-09-20 11:26:57", "time_modified": "2025-09-20 11:26:57", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Could you help establish a budget limit of 20,000 USD using my currently active account?", "when_to_use": "When establishing a budget limit for travel expenses", "category": "success", "created_time": "2025-09-20 11:26:57", "modified_time": "2025-09-20 11:26:57", "generalized_query": "Set a budget limit for travel expenditures", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "f2ee0b879b8647e8a7b43e72464904d5", "memory_type": "procedural", "when_to_use": "When booking flights or interacting with APIs that require specific parameter names", "content": "Always verify parameter names in API functions against actual implementation details, as tool descriptions may contain inaccuracies. Use functions like 'get_flight_cost' to dynamically retrieve cost values instead of hardcoding them.", "score": 0, "time_created": "2025-09-20 11:26:55", "time_modified": "2025-09-20 11:26:55", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Book me a business class ticket from SFO to LAX for December 15, 2024", "when_to_use": "When booking flights or interacting with APIs that require specific parameter names", "category": "failure", "created_time": "2025-09-20 11:26:55", "modified_time": "2025-09-20 11:26:55", "generalized_query": "Book a flight with specified parameters including cost, date, and route", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "cafa7d9c33c4418b86259c8fd4b6483a", "memory_type": "procedural", "when_to_use": "When sending messages to specific recipients in a workspace", "content": "Ensure recipient IDs are correctly formatted and exist in the system before sending messages. Validate message content length and format to avoid unexpected errors.", "score": 0, "time_created": "2025-09-20 11:26:55", "time_modified": "2025-09-20 11:26:55", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Inform my travel companion with user ID m0llyTr@vel2k24 about the itinerary", "when_to_use": "When sending messages to specific recipients in a workspace", "category": "failure", "created_time": "2025-09-20 11:26:55", "modified_time": "2025-09-20 11:26:55", "generalized_query": "Send a message to a user with a specific recipient ID", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "690be23798d94275bc3a4c768f691a9e", "memory_type": "procedural", "when_to_use": "When registering a credit card after successful authentication.", "content": "Call register_credit_card with the access_token from authentication, formatted card details (number, expiration, name), and CVV. Validate parameters match the function's required fields (e.g., cardholder_name as full name).", "score": 0, "time_created": "2025-09-20 11:27:00", "time_modified": "2025-09-20 11:27:00", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Register credit card with number 2345-6789-1234-5678, expiration 08/2025, and CVV 567 under Maxwell Edison.", "when_to_use": "When registering a credit card after successful authentication.", "category": "success", "created_time": "2025-09-20 11:27:00", "modified_time": "2025-09-20 11:27:00", "generalized_query": "Register a credit card with specified details using an access token.", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "e5b5b1df36884ccaa2a4ccd5500de47e", "memory_type": "procedural", "when_to_use": "When calculating distances between locations based on city names", "content": "Use get_zipcode_based_on_city to convert cities to zip codes, then call estimate_distance with the zip codes as parameters. This provides precise distance metrics for trip planning.", "score": 0, "time_created": "2025-09-20 11:26:53", "time_modified": "2025-09-20 11:26:53", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "How far apart are these places? I'd like to gauge the distance before setting off on this adventure.", "when_to_use": "When calculating distances between locations based on city names", "category": "success", "created_time": "2025-09-20 11:26:53", "modified_time": "2025-09-20 11:26:53", "generalized_query": "Determine the distance between two locations using city names", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "3e43ee8080e242b7a7330a3206b5d3eb", "memory_type": "procedural", "when_to_use": "When converting fuel measurements between units for vehicle management", "content": "Call displayCarStatus with 'fuel' option to get fuel level in gallons, then use gallon_to_liter conversion tool for unit standardization. This enables accurate fuel tracking across different measurement systems.", "score": 0, "time_created": "2025-09-20 11:26:53", "time_modified": "2025-09-20 11:26:53", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "What's the current level of gasoline I have in liters?", "when_to_use": "When converting fuel measurements between units for vehicle management", "category": "success", "created_time": "2025-09-20 11:26:53", "modified_time": "2025-09-20 11:26:53", "generalized_query": "Convert vehicle fuel level from gallons to liters", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "f5d798bba835456aa5721160b45b8f2a", "memory_type": "procedural", "when_to_use": "When performing safety checks before engine startup", "content": "Implement sequential checks: lock all doors using lockDoors with unlock=false, press brake pedal with pedalPosition=1.0, and verify all systems before starting engine. This ensures compliance with vehicle safety requirements.", "score": 0, "time_created": "2025-09-20 11:26:53", "time_modified": "2025-09-20 11:26:53", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Engage the 'START' ignition mode to ready the vehicle", "when_to_use": "When performing safety checks before engine startup", "category": "success", "created_time": "2025-09-20 11:26:53", "modified_time": "2025-09-20 11:26:53", "generalized_query": "Execute pre-start vehicle safety protocols", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "05b16a709cd943f0bbaf61e67b2166ea", "memory_type": "procedural", "when_to_use": "When performing mathematical operations with specific precision requirements", "content": "Ensure parameter values align with mathematical definitions (e.g., base must be positive and not equal to 1). Verify unit consistency when using derived values from prior steps.", "score": 0, "time_created": "2025-09-20 11:26:56", "time_modified": "2025-09-20 11:26:56", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "the logarithm of the distance to the base the previous fuel value, computed to a precision of 10. Use base of 20", "when_to_use": "When performing mathematical operations with specific precision requirements", "category": "failure", "created_time": "2025-09-20 11:26:56", "modified_time": "2025-09-20 11:26:56", "generalized_query": "Calculating logarithm with specified base and precision", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "e334ef25bd454c2d83fbf463a50f786a", "memory_type": "procedural", "when_to_use": "When needing to retrieve specific file content details like last lines or compare files", "content": "Navigate to the target directory (cd), list files (ls) to identify the target file, then use tail to extract the last line. For file comparisons, use diff with the specific file names to highlight differences.", "score": 0, "time_created": "2025-09-20 11:27:20", "time_modified": "2025-09-20 11:27:20", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Display the last line of that file for me?", "when_to_use": "When needing to retrieve specific file content details like last lines or compare files", "category": "success", "created_time": "2025-09-20 11:27:20", "modified_time": "2025-09-20 11:27:20", "generalized_query": "Retrieve specific content from a file or compare files in a directory", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "50ee9e1e296a442a98f6bb2ef15d6150", "memory_type": "procedural", "when_to_use": "When handling file system navigation and operations", "content": "Implement checks for empty directories and handle edge cases explicitly to prevent failed operations on non-existent files", "score": 0, "time_created": "2025-09-20 11:27:24", "time_modified": "2025-09-20 11:27:24", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "In documents directory, there's a file that piques my curiosity regarding its contents. It's alphabetically first file in that directory. Could you display the last line of that file for me?", "when_to_use": "When handling file system navigation and operations", "category": "failure", "created_time": "2025-09-20 11:27:24", "modified_time": "2025-09-20 11:27:24", "generalized_query": "Access files in directories while accounting for potential empty states", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "c8ea012b816d4ddd8f42917356624304", "memory_type": "procedural", "when_to_use": "When handling user requests to create support tickets involving sensitive information", "content": "Never include sensitive information like usernames/passwords in ticket descriptions. Always authenticate users separately before creating tickets to ensure security and compliance.", "score": 0, "time_created": "2025-09-20 11:27:32", "time_modified": "2025-09-20 11:27:32", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I'd appreciate your help in initiating a priority level 3 support ticket labeled 'Urgent: Transaction Issue' with the description 'There is an issue with a recent transaction involving a canceled buy order for 100 shares of AAPL and I am requesting confirmation of the cancellation along with an account summary. My username is user123 and password is 12345 for the ticket login.", "when_to_use": "When handling user requests to create support tickets involving sensitive information", "category": "failure", "created_time": "2025-09-20 11:27:32", "modified_time": "2025-09-20 11:27:32", "generalized_query": "User attempts to create a support ticket with authentication credentials included in the description", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "00d817ff0d6d47e49fd42d78abe6f8c3", "memory_type": "procedural", "when_to_use": "When a user needs to retrieve their current stock watchlist", "content": "Directly call the 'get_watchlist' function without parameters to fetch the list of stocks in the user's watchlist. This provides an immediate and accurate view of the user's monitored assets without requiring additional context or steps.", "score": 0, "time_created": "2025-09-20 11:27:33", "time_modified": "2025-09-20 11:27:33", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "display the stocks I'm monitoring right now", "when_to_use": "When a user needs to retrieve their current stock watchlist", "category": "success", "created_time": "2025-09-20 11:27:33", "modified_time": "2025-09-20 11:27:33", "generalized_query": "Retrieve user's current watchlist of monitored stocks", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "d1a62fe69c1245d69d73ab6aca57ddc7", "memory_type": "procedural", "when_to_use": "When extracting numerical values from a CSV file for statistical calculations", "content": "Always validate the count of numerical values before performing calculations to avoid miscounting entries, especially when dealing with CSV files containing headers or non-numeric columns", "score": 0, "time_created": "2025-09-20 11:27:35", "time_modified": "2025-09-20 11:27:35", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Could you compute the average of the three numerical value obtained? Just for my personal use.", "when_to_use": "When extracting numerical values from a CSV file for statistical calculations", "category": "failure", "created_time": "2025-09-20 11:27:35", "modified_time": "2025-09-20 11:27:35", "generalized_query": "Calculate the average of numerical values from a dataset", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "bbd71485a86d40b2b8b61594b6fc15a0", "memory_type": "procedural", "when_to_use": "When a user requests to add a stock to their watchlist and retrieve detailed information about a specific stock", "content": "The successful sequence involved first using 'add_to_watchlist' to integrate the stock, followed by 'get_watchlist' to confirm the update. For detailed stock info, 'get_stock_info' was called with the specific symbol. This approach ensures immediate action on the user's request while verifying the operation's success before providing deeper insights.", "score": 0, "time_created": "2025-09-20 11:27:50", "time_modified": "2025-09-20 11:27:50", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Could you kindly integrate Apple's stock into my current watchlist and subsequently provide me with a detailed breakdown of the watchlist's contents?", "when_to_use": "When a user requests to add a stock to their watchlist and retrieve detailed information about a specific stock", "category": "success", "created_time": "2025-09-20 11:27:50", "modified_time": "2025-09-20 11:27:50", "generalized_query": "Add a stock to the watchlist and retrieve detailed information about a specific stock in the watchlist", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "5d598693254f43af8460576a6af0d8fb", "memory_type": "procedural", "when_to_use": "When creating a new file with specific content, especially when the file may already exist", "content": "Use the echo tool to write content directly to a file, which handles both creation and overwriting. Verify file existence before writing to avoid errors, but allow the tool to handle file creation if it doesn't exist. This approach avoids redundant steps like manual file creation with touch.", "score": 0, "time_created": "2025-09-20 11:27:38", "time_modified": "2025-09-20 11:27:38", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I need you to draft a comprehensive guide for our new initiative, and let's name it 'Project_Guide_1.md'. Put 'Comprehensive guide for the new initiative.' in it.", "when_to_use": "When creating a new file with specific content, especially when the file may already exist", "category": "success", "created_time": "2025-09-20 11:27:38", "modified_time": "2025-09-20 11:27:38", "generalized_query": "Create a file with specific content and ensure it is properly initialized", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "0a7b31166e6b416eadfd7623cf7c1e2f", "memory_type": "procedural", "when_to_use": "When needing human-readable disk usage information for a directory", "content": "Use the du tool with the human_readable parameter set to true. This provides an intuitive size representation (e.g., KB, MB) instead of raw bytes, making it easier to interpret storage usage at a glance.", "score": 0, "time_created": "2025-09-20 11:27:38", "time_modified": "2025-09-20 11:27:38", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I would love to get the human-readable disk usage of the current working directory.", "when_to_use": "When needing human-readable disk usage information for a directory", "category": "success", "created_time": "2025-09-20 11:27:38", "modified_time": "2025-09-20 11:27:38", "generalized_query": "Request human-readable disk usage for a directory", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "2903e8cca801490788de7550c7ecc4c8", "memory_type": "procedural", "when_to_use": "When resolving a ticket without requiring a resolution description", "content": "Use the resolve_ticket function with an empty string for the resolution parameter. This allows marking tickets as resolved efficiently when no additional details are needed, avoiding unnecessary input while maintaining system compliance.", "score": 0, "time_created": "2025-09-20 11:27:38", "time_modified": "2025-09-20 11:27:38", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "There's a minor snag in our ticketing system. Ticket #7423 is still unresolved, but with our recent brainstorming feedback, just go ahead and check it off as resolved. Leave it empty for resolve description.", "when_to_use": "When resolving a ticket without requiring a resolution description", "category": "success", "created_time": "2025-09-20 11:27:38", "modified_time": "2025-09-20 11:27:38", "generalized_query": "Mark a ticket as resolved without providing a resolution description", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "41b8c95c29a74e2f8688e5bd9f024d16", "memory_type": "procedural", "when_to_use": "When a user requests to modify their stock watchlist or manage orders, especially after initial setup", "content": "The agent successfully removed a stock from the watchlist by first retrieving the current watchlist (get_watchlist), then applying the removal action (remove_stock_from_watchlist). This pattern ensures accurate state awareness before modifying data. For order management, the agent retrieved stock details (get_stock_info) before placing an order (place_order), then verified details (get_order_details) before cancellation (cancel_order), demonstrating a reliable workflow for user-adjusted transactions.", "score": 0, "time_created": "2025-09-20 11:28:23", "time_modified": "2025-09-20 11:28:23", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Would you mind taking the first one off my watchlist?", "when_to_use": "When a user requests to modify their stock watchlist or manage orders, especially after initial setup", "category": "success", "created_time": "2025-09-20 11:28:23", "modified_time": "2025-09-20 11:28:23", "generalized_query": "User-initiated modification of a stock watchlist or order management", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "c26268bd288447e3887ec644144a55df", "memory_type": "procedural", "when_to_use": "When verifying market status before executing trades", "content": "The higher-scoring approach used the `update_market_status` function to programmatically verify market status, ensuring accuracy and reliability. The lower-scoring approach relied on manual time-based assumptions without validating through the system's API, creating potential gaps in market condition awareness.", "score": 0, "time_created": "2025-09-20 11:28:19", "time_modified": "2025-09-20 11:28:19", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Is the market open or closed given the time right now?", "when_to_use": "When verifying market status before executing trades", "category": "comparative", "created_time": "2025-09-20 11:28:19", "modified_time": "2025-09-20 11:28:19", "generalized_query": "Determine market status based on current time", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "d47b1f15fdb54305b640a5cef0109cd6", "memory_type": "procedural", "when_to_use": "When confirming order details after placement", "content": "The higher-scoring approach explicitly called `get_order_details` to validate order parameters post-placement, ensuring alignment with user intent. The lower-scoring sequence omitted this step, risking discrepancies between user expectations and actual order configurations.", "score": 0, "time_created": "2025-09-20 11:28:19", "time_modified": "2025-09-20 11:28:19", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Fetching details of the placed order", "when_to_use": "When confirming order details after placement", "category": "comparative", "created_time": "2025-09-20 11:28:19", "modified_time": "2025-09-20 11:28:19", "generalized_query": "Retrieve and confirm order execution status", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "827425590da348dd9efd4e8716ef0b93", "memory_type": "procedural", "when_to_use": "When preparing a vehicle for a long trip involving engine start and safety checks", "content": "Always verify door lock status explicitly before attempting to start the engine, as tool responses may not reliably reflect real-time mechanical states", "score": 0, "time_created": "2025-09-20 11:28:24", "time_modified": "2025-09-20 11:28:24", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Ensure the fuel tank is replenished adequately by adding 38 liters of gasoline so that we're well-prepared for the lengthy voyage ahead. Only fill with integer amount for volume; round when not integer. Once fueled, proceed to start the engine confidently with the ignition mode, and make certain that all doors are secure, and the parking brake is engaged as a safety measure.", "when_to_use": "When preparing a vehicle for a long trip involving engine start and safety checks", "category": "failure", "created_time": "2025-09-20 11:28:24", "modified_time": "2025-09-20 11:28:24", "generalized_query": "Prepare a vehicle for a journey by refueling, securing doors, engaging parking brake, and starting the engine", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "8ea3e0d7fd5f4006861ba70573db539e", "memory_type": "procedural", "when_to_use": "When checking tire pressure and addressing underinflation issues", "content": "Systematically check all tire pressures and immediately address discrepancies to maintain safety. Proactively locate service centers for quick resolution of tire issues.", "score": 0, "time_created": "2025-09-20 11:28:35", "time_modified": "2025-09-20 11:28:35", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Confirm that each tire is inflated to a stable 32 PSI. Should any tires fall short, chart a course to the nearest tire service center.", "when_to_use": "When checking tire pressure and addressing underinflation issues", "category": "failure", "created_time": "2025-09-20 11:28:35", "modified_time": "2025-09-20 11:28:35", "generalized_query": "Check tire pressure and resolve underinflation by locating nearby service centers", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "b7a1bb6f09fb4e9c8b1f7822c781a9e5", "memory_type": "procedural", "when_to_use": "When creating or modifying files in a directory structure that requires prior existence of target folders", "content": "Always verify the target directory exists before attempting file operations that require it. Use 'mkdir' to create missing directories when necessary.", "score": 0, "time_created": "2025-09-20 11:28:49", "time_modified": "2025-09-20 11:28:49", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Replicate it into the archive folder, but rename it to 'summary_2024.txt'", "when_to_use": "When creating or modifying files in a directory structure that requires prior existence of target folders", "category": "failure", "created_time": "2025-09-20 11:28:49", "modified_time": "2025-09-20 11:28:49", "generalized_query": "Move/replicate a file to a target directory with a renamed version", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "a469aa7cf28447c58e19ba55f2f37c61", "memory_type": "procedural", "when_to_use": "When converting between liters and gallons for fuel-related tasks", "content": "Use the liter_to_gallon function for accurate unit conversion, then call fillFuelTank with the calculated gallon amount. Ensure the fuel amount does not exceed the tank capacity (50 gallons).", "score": 0, "time_created": "2025-09-20 11:28:40", "time_modified": "2025-09-20 11:28:40", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I am at the gas station and ready to fill up my car with gasoline. I would appreciate it if you could manage filling 30 liters into my vehicle to ensure it's properly fueled for the journey ahead. Use 2 decimal digit of the gallon amount", "when_to_use": "When converting between liters and gallons for fuel-related tasks", "category": "success", "created_time": "2025-09-20 11:28:40", "modified_time": "2025-09-20 11:28:40", "generalized_query": "Convert a specified volume of fuel from liters to gallons and fill the tank", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "c2a5eecfced7423db8b79cc009d5f6eb", "memory_type": "procedural", "when_to_use": "When initiating vehicle startup procedures", "content": "Implement sequential safety checks: lock all doors, press brake pedal, and verify system readiness before starting the engine. Address errors step-by-step (e.g., unlock doors → press brake → retry ignition).", "score": 0, "time_created": "2025-09-20 11:28:40", "time_modified": "2025-09-20 11:28:40", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "start the car engine in 'START' mode", "when_to_use": "When initiating vehicle startup procedures", "category": "success", "created_time": "2025-09-20 11:28:40", "modified_time": "2025-09-20 11:28:40", "generalized_query": "Start the vehicle engine with safety checks", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "109222fd1e4f46009f9b74ccda6b158c", "memory_type": "procedural", "when_to_use": "When a user requests to execute a trade order for a specific stock", "content": "The successful execution followed a structured pattern: 1) Retrieve stock details (price, market data) using get_stock_info, 2) Place the order with precise parameters (order_type, symbol, price, amount) via place_order, 3) Verify order status through get_order_details, and 4) Cancel the order using cancel_order when needed. This approach ensures accurate pricing, clear order tracking, and immediate status updates.", "score": 0, "time_created": "2025-09-20 11:29:02", "time_modified": "2025-09-20 11:29:02", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Arrange the acquisition of 150 Microsoft shares at the going market rate.", "when_to_use": "When a user requests to execute a trade order for a specific stock", "category": "success", "created_time": "2025-09-20 11:29:02", "modified_time": "2025-09-20 11:29:02", "generalized_query": "Execute a trade order for a specific stock quantity at current market price", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "f04e71c57e5c4ab39b2a2aed0e718131", "memory_type": "procedural", "when_to_use": "When providing order status updates to users", "content": "Implement automated status checks for orders to ensure users receive accurate and timely updates", "score": 0, "time_created": "2025-09-20 11:29:07", "time_modified": "2025-09-20 11:29:07", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Retrieve details of the placed order to confirm its status", "when_to_use": "When providing order status updates to users", "category": "failure", "created_time": "2025-09-20 11:29:07", "modified_time": "2025-09-20 11:29:07", "generalized_query": "Obtain real-time status of an active order", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "e8629c83dd9a46eabd075b6b62500ef4", "memory_type": "procedural", "when_to_use": "When determining market status, especially for time-sensitive trading decisions", "content": "First retrieve the current time with get_current_time, then use update_market_status with the time string to establish market status. This ensures accurate timing-based market state determination.", "score": 0, "time_created": "2025-09-20 11:29:07", "time_modified": "2025-09-20 11:29:07", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Update the market status for me, as I need to know the current outlook.", "when_to_use": "When determining market status, especially for time-sensitive trading decisions", "category": "success", "created_time": "2025-09-20 11:29:07", "modified_time": "2025-09-20 11:29:07", "generalized_query": "Determine market status using current time data", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "59eadbebc514403ebe8af264a4a38ed2", "memory_type": "procedural", "when_to_use": "When calculating aggregated metrics from multiple financial indicators", "content": "Use the mean function with an array containing price, volume, and moving averages. This provides a concise summary of key metrics for trend analysis and decision-making.", "score": 0, "time_created": "2025-09-20 11:29:07", "time_modified": "2025-09-20 11:29:07", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Calculate the average of price, trading volume, MA5, and MA20.", "when_to_use": "When calculating aggregated metrics from multiple financial indicators", "category": "success", "created_time": "2025-09-20 11:29:07", "modified_time": "2025-09-20 11:29:07", "generalized_query": "Compute the mean of numerical financial metrics", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "58e509d2954d4d9a952f1fa99348b80b", "memory_type": "procedural", "when_to_use": "When a user requests to manage their stock watchlist or execute a trade", "content": "Use get_watchlist to retrieve the current watchlist, then apply remove_stock_from_watchlist for deletions. For trades, combine get_stock_info (to validate price) with place_order (to execute the transaction) while ensuring proper order parameters (type, symbol, price, amount).", "score": 0, "time_created": "2025-09-20 11:29:19", "time_modified": "2025-09-20 11:29:19", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Could you help me by identifying the stocks currently present on my watchlist?", "when_to_use": "When a user requests to manage their stock watchlist or execute a trade", "category": "success", "created_time": "2025-09-20 11:29:19", "modified_time": "2025-09-20 11:29:19", "generalized_query": "Retrieve and modify a user's stock watchlist or execute a trade", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "ab4756184db24deab9c0055626f330dc", "memory_type": "procedural", "when_to_use": "When confirming the status of a recent transaction", "content": "Call get_order_details with the specific order ID to provide accurate, real-time updates. This builds trust by offering transparency and actionable insights into the transaction lifecycle.", "score": 0, "time_created": "2025-09-20 11:29:19", "time_modified": "2025-09-20 11:29:19", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Would you be able to show me the details of my most recent order?", "when_to_use": "When confirming the status of a recent transaction", "category": "success", "created_time": "2025-09-20 11:29:19", "modified_time": "2025-09-20 11:29:19", "generalized_query": "Retrieve order details by order ID", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "b47a2718b8d641b1872cdaffc72095ae", "memory_type": "procedural", "when_to_use": "When handling travel-related transactions requiring booking IDs or credit cards", "content": "Always validate the existence and validity of critical identifiers (booking IDs, credit card details) before executing financial transactions to prevent system errors and failed operations", "score": 0, "time_created": "2025-09-20 11:29:36", "time_modified": "2025-09-20 11:29:36", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I'm eager to use this card to purchase comprehensive travel insurance for an upcoming journey...", "when_to_use": "When handling travel-related transactions requiring booking IDs or credit cards", "category": "failure", "created_time": "2025-09-20 11:29:36", "modified_time": "2025-09-20 11:29:36", "generalized_query": "Initiate a travel insurance purchase using a credit card and booking reference", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "d47cf9589d554686b08e30a0e9ee19c0", "memory_type": "procedural", "when_to_use": "When needing to compare file versions and share insights via social media", "content": "Successfully combined file comparison (using diff) with social media outreach (Twitter post). Key steps: 1) Authenticate Twitter account 2) Create tweet with content, mentions (@colleagues), and hashtags (#ProjectInsight) 3) Post tweet. This approach ensures clear communication of findings while leveraging social media for visibility.", "score": 0, "time_created": "2025-09-20 11:29:29", "time_modified": "2025-09-20 11:29:29", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Toss a tweet out there about this comparative analysis, mentions @colleagues, and throw in #ProjectInsight to amplify its reach. Here is the post content: Just completed a comparative analysis between the latest and previous project data. Some insightful findings! My username is tech_guru and password is securePass123.", "when_to_use": "When needing to compare file versions and share insights via social media", "category": "success", "created_time": "2025-09-20 11:29:29", "modified_time": "2025-09-20 11:29:29", "generalized_query": "Share comparative analysis results with team members using social media with specific mentions and hashtags", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "74c020a91965457284258cb5de185801", "memory_type": "procedural", "when_to_use": "When managing file versions and archives", "content": "Effectively used 'cp' command to copy files to a target directory. Preemptively checked directory existence with 'mkdir' (even though it failed due to existing directory), demonstrating awareness of potential errors. This pattern ensures version control while avoiding accidental overwrites.", "score": 0, "time_created": "2025-09-20 11:29:29", "time_modified": "2025-09-20 11:29:29", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Could you whip up a duplicate of 'project_analysis.txt' and shift it over to this folder I've named 'project_archive'?", "when_to_use": "When managing file versions and archives", "category": "success", "created_time": "2025-09-20 11:29:29", "modified_time": "2025-09-20 11:29:29", "generalized_query": "Create a duplicate file and move it to an archive directory", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "9eee335e82854093b93d3ab81d52cc3e", "memory_type": "procedural", "when_to_use": "When handling user authentication and social media interactions", "content": "Validate authentication credentials before executing social media actions to prevent failed operations", "score": 0, "time_created": "2025-09-20 11:29:32", "time_modified": "2025-09-20 11:29:32", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Toss a tweet out there about this comparative analysis, mentions @colleagues, and throw in #ProjectInsight", "when_to_use": "When handling user authentication and social media interactions", "category": "failure", "created_time": "2025-09-20 11:29:32", "modified_time": "2025-09-20 11:29:32", "generalized_query": "Post a tweet with mentions and hashtags", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "5a52d5a789804c249ec7d0d790a62cdb", "memory_type": "procedural", "when_to_use": "When performing file comparisons or operations where filenames are not immediately known", "content": "Always validate filenames from prior discovery steps before performing operations; use exact filenames obtained from search tools rather than assuming base names", "score": 0, "time_created": "2025-09-20 11:29:47", "time_modified": "2025-09-20 11:29:47", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Look for draft and final report in my current directory. Compare the content difference of both.", "when_to_use": "When performing file comparisons or operations where filenames are not immediately known", "category": "failure", "created_time": "2025-09-20 11:29:47", "modified_time": "2025-09-20 11:29:47", "generalized_query": "Compare two files in the current directory by identifying their exact names and content differences", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "6c9e0322d64c4bb0b2354d0cdebf051c", "memory_type": "procedural", "when_to_use": "When resolving tickets with custom resolution summaries", "content": "Verify ticket existence and current status before resolving; ensure resolution summaries are concise and actionable", "score": 0, "time_created": "2025-09-20 11:29:47", "time_modified": "2025-09-20 11:29:47", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Resolve ticket 987654 with summary: 'Fixed through manual troubleshooting techniques.'", "when_to_use": "When resolving tickets with custom resolution summaries", "category": "failure", "created_time": "2025-09-20 11:29:47", "modified_time": "2025-09-20 11:29:47", "generalized_query": "Update a ticket status and provide a resolution summary", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "ae27a167dc044aca9e338aee75754d60", "memory_type": "procedural", "when_to_use": "When initiating social media actions like posting tweets", "content": "Always verify Twitter authentication status before attempting to post tweets to avoid failed operations due to unauthenticated sessions", "score": 0, "time_created": "2025-09-20 11:29:55", "time_modified": "2025-09-20 11:29:55", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Post a tweet: 'Ensuring my wheels are well-maintained. Maintenance is key to success!' with the hashtag 'BusinessOnTheMove'", "when_to_use": "When initiating social media actions like posting tweets", "category": "failure", "created_time": "2025-09-20 11:29:55", "modified_time": "2025-09-20 11:29:55", "generalized_query": "Post a status update with specific content and hashtags on a social media platform", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "879b335e2e9046cebb99c3de4d78195b", "memory_type": "procedural", "when_to_use": "When handling vehicle maintenance tasks", "content": "Cross-verify sensor readings with actionable thresholds and ensure location-based services are functional before recommending physical interventions", "score": 0, "time_created": "2025-09-20 11:29:55", "time_modified": "2025-09-20 11:29:55", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Verify tire pressure and locate nearest tire shop", "when_to_use": "When handling vehicle maintenance tasks", "category": "failure", "created_time": "2025-09-20 11:29:55", "modified_time": "2025-09-20 11:29:55", "generalized_query": "Check vehicle safety metrics and locate service providers", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "799e6732195445c6931de65e6e6d3f14", "memory_type": "procedural", "when_to_use": "When a user requests to place a trade order with specific stock and quantity, followed by order modification or cancellation", "content": "The successful sequence involved first retrieving account information to confirm balance, then fetching real-time stock data for price validation, and finally placing the order while proactively notifying of insufficient funds. Key steps included: 1) Using get_account_info for balance verification, 2) Checking stock price via get_stock_info before ordering, 3) Placing the order with place_order while including price and quantity parameters, 4) Managing order status through get_order_details and cancel_order when needed. The workflow ensured transparency about account limitations and maintained control over order lifecycle management.", "score": 0, "time_created": "2025-09-20 11:30:04", "time_modified": "2025-09-20 11:30:04", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "I'm reviewing my account, and I'd like you to confirm the current balance and provide the account details. Subsequently, initiate a purchase order for 150 shares of TSLA at the prevailing market price leveraging my account balance.", "when_to_use": "When a user requests to place a trade order with specific stock and quantity, followed by order modification or cancellation", "category": "success", "created_time": "2025-09-20 11:30:04", "modified_time": "2025-09-20 11:30:04", "generalized_query": "Verify account balance and execute a trade order with subsequent order management (modification/cancellation)", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "26339f9669d249929ed1961db5667c6c", "memory_type": "procedural", "when_to_use": "When booking flights with pre-linked payment methods and requiring invoice retrieval", "content": "Successfully booked a flight by first obtaining airport codes via location lookup, using flight cost estimation to validate pricing, and executing the booking with correct API parameters. Post-booking, retrieved the invoice using the booking ID. Key to success was iterative parameter adjustment based on API error feedback and maintaining authentication state for subsequent actions.", "score": 0, "time_created": "2025-09-20 11:30:03", "time_modified": "2025-09-20 11:30:03", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Arrange this flight using my pre-linked credit card with id 'card_123456789' and access token 'abc123xyz'", "when_to_use": "When booking flights with pre-linked payment methods and requiring invoice retrieval", "category": "success", "created_time": "2025-09-20 11:30:03", "modified_time": "2025-09-20 11:30:03", "generalized_query": "Book a flight with specified payment method and retrieve booking confirmation", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "fcb8d36dc0cb465d9aeb42150c5ea5da", "memory_type": "procedural", "when_to_use": "When resolving booking errors and communicating with stakeholders", "content": "Effectively resolved booking errors by first attempting parameter correction, then escalating via customer support with precise error details. Success relied on systematic error diagnosis and clear communication of technical issues (e.g., parameter mismatches) to support teams.", "score": 0, "time_created": "2025-09-20 11:30:03", "time_modified": "2025-09-20 11:30:03", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Reach out to customer support and detail the challenges I faced", "when_to_use": "When resolving booking errors and communicating with stakeholders", "category": "success", "created_time": "2025-09-20 11:30:03", "modified_time": "2025-09-20 11:30:03", "generalized_query": "Resolve booking anomalies through customer support escalation", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "5b6ad6f974d241668bf99da5ea648200", "memory_type": "procedural", "when_to_use": "When synchronizing travel updates across teams", "content": "Established secure messaging by first authenticating as the sender, then leveraging the Message API to deliver targeted updates. Success depended on maintaining proper authentication context and using precise recipient identifiers for reliable communication.", "score": 0, "time_created": "2025-09-20 11:30:03", "time_modified": "2025-09-20 11:30:03", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Brief my colleague Catherine (id='USR003') on the situation using my sender id 'MichaelTpss'", "when_to_use": "When synchronizing travel updates across teams", "category": "success", "created_time": "2025-09-20 11:30:03", "modified_time": "2025-09-20 11:30:03", "generalized_query": "Notify stakeholders about travel status changes", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "0b280570e3ca4ef6b9b0d05e90a970e1", "memory_type": "procedural", "when_to_use": "When writing files with specific content requirements", "content": "Always verify file creation location and content validity after writing. Use 'pwd' to confirm current directory and 'ls' to check file existence before proceeding with dependent tasks.", "score": 0, "time_created": "2025-09-20 11:30:34", "time_modified": "2025-09-20 11:30:34", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Could you populate 'annual_report.txt' with data on quarterly revenue: 'Q1: $5000, Q2: $7000, Q3: $6000, Q4: $8000'? I only want to store the quoted text in my file. The file is somewhere inside the file system.", "when_to_use": "When writing files with specific content requirements", "category": "failure", "created_time": "2025-09-20 11:30:34", "modified_time": "2025-09-20 11:30:34", "generalized_query": "Write specific text content to a file while ensuring the file's location meets user expectations", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "6deac918258c4f46bebadeeef5c8a678", "memory_type": "procedural", "when_to_use": "When processing numerical data from text files", "content": "Extract numerical values programmatically rather than manually to avoid errors from inconsistent formatting or typos in the source text.", "score": 0, "time_created": "2025-09-20 11:30:34", "time_modified": "2025-09-20 11:30:34", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "What's the mean of the quarterly revenue?", "when_to_use": "When processing numerical data from text files", "category": "failure", "created_time": "2025-09-20 11:30:34", "modified_time": "2025-09-20 11:30:34", "generalized_query": "Calculate the mean of numerical values extracted from textual data", "utility": 0, "freq": 0}} -{"workspace_id": "bfcl_qwen3_8b", "memory_id": "d706ee5451364c3eb246dde5a9622139", "memory_type": "procedural", "when_to_use": "Before initiating a road trip to ensure vehicle readiness", "content": "Use incremental fueling with status checks to avoid overfilling. Start with displayCarStatus(\"fuel\") to assess current levels, then use fillFuelTank() with calculated amounts based on tank capacity and current level.", "score": 0, "time_created": "2025-09-20 11:30:31", "time_modified": "2025-09-20 11:30:31", "author": "qwen3-8b", "metadata": {"author": "qwen3-8b", "task_query": "Could you make sure to increase the current fuel level to ensure that my tank is full?", "when_to_use": "Before initiating a road trip to ensure vehicle readiness", "category": "success", "created_time": "2025-09-20 11:30:31", "modified_time": "2025-09-20 11:30:31", "generalized_query": "Verify and optimize vehicle fuel level for long-distance travel", "utility": 0, "freq": 0}} diff --git a/docs/library/research_plan.jsonl b/docs/library/research_plan.jsonl deleted file mode 100644 index 74034e29..00000000 --- a/docs/library/research_plan.jsonl +++ /dev/null @@ -1,295 +0,0 @@ -{"workspace_id": "finance_plan_test", "experience_id": "d538a37fc6434659aa81301649a1268a", "experience_type": "text", "when_to_use": "此规划框架适用于金融市场的日常策略分析、大类资产跟踪报告、投资决策支持分析等任务,尤其适合需要快速整合多维度信息并形成明确交易建议的场景。", "content": "[{'step': 1, 'action': '明确报告目标与受众', 'output': '确定报告的核心目标(如提供交易策略、评估市场风险)和主要受众(如机构投资者、个人客户)。', 'criteria_for_success': '目标清晰且与受众需求高度契合;报告内容能够直接服务于目标。', 'common_issues': '目标模糊或过于宽泛,导致后续内容无法聚焦。', 'solutions': '在开始撰写前,明确回答‘谁会读这份报告’和‘他们最关心什么’的问题。'}, {'step': 2, 'action': '构建章节结构并分配优先级', 'output': '设计报告的逻辑框架,包括大类资产跟踪、政策及要闻、交易策略和风险提示等模块,并按重要性排序。', 'criteria_for_success': '章节安排符合逻辑递进关系,核心结论优先展示;每个模块内容独立但相互关联。', 'common_issues': '章节间逻辑不连贯或重点内容被弱化。', 'solutions': '采用‘总-分-总’结构,先概述整体市场趋势,再分模块展开细节,最后总结关键策略建议。'}, {'step': 3, 'action': '收集与整理数据', 'output': '从公开渠道获取定量数据(如市场指数、成交量)和定性信息(如政策解读、专家观点),并进行初步清洗和分类。', 'criteria_for_success': '数据来源可靠且覆盖全面;信息分类合理,便于后续分析。', 'common_issues': '数据缺失或质量不高,影响分析深度。', 'solutions': '建立固定的数据源清单,确保数据更新及时;对不确定数据标注来源并说明局限性。'}, {'step': 4, 'action': '分析市场动态与趋势', 'output': '结合历史数据和当前事件,分析各资产类别(如股票、债券、外汇、商品)的表现及背后驱动因素。', 'criteria_for_success': '分析深入且基于事实,观点有数据支撑;能揭示潜在机会和风险。', 'common_issues': '过度依赖单一数据点或忽略宏观经济背景。', 'solutions': '使用多维度数据交叉验证趋势,并结合政策变化和技术指标综合判断。'}, {'step': 5, 'action': '提出交易策略', 'output': '根据分析结果,针对不同资产类别提出具体操作建议(如逢低做多、战略看空等),并附带支撑理由。', 'criteria_for_success': '策略具有可执行性,逻辑清晰且与前期分析一致;风险控制措施明确。', 'common_issues': '策略缺乏细节或未充分考虑风险。', 'solutions': '每条策略都需包含入场点、止损位和目标位,并说明触发条件。'}, {'step': 6, 'action': '识别与阐述风险因素', 'output': '列出可能影响市场的主要风险(如贸易战、地缘政治),并评估其发生的概率及潜在影响。', 'criteria_for_success': '风险描述具体且量化;应对措施切实可行。', 'common_issues': '风险提示过于笼统或忽视高概率事件。', 'solutions': '通过情景分析法,模拟不同风险发生后的市场反应,并制定相应预案。'}, {'step': 7, 'action': '制作图表与可视化材料', 'output': '将复杂数据转化为直观图表(如K线图、趋势线),并嵌入报告中以增强表达效果。', 'criteria_for_success': '图表简洁明了,信息传达准确;与文字内容互为补充。', 'common_issues': '图表过多或过于复杂,分散读者注意力。', 'solutions': '每个图表只传递一个核心信息,并配以简短注释。'}, {'step': 8, 'action': '审阅与优化报告', 'output': '检查报告的语言表达、逻辑连贯性和格式规范性,确保无错误且阅读体验良好。', 'criteria_for_success': '报告语言专业但易懂,逻辑严密且无明显错误。', 'common_issues': '语法错误或排版问题降低专业性。', 'solutions': '设置专门校对环节,邀请同事交叉审阅。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-13 23:02:10", "modified_time": "2025-08-13 23:02:10", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "57acd786a4cb4762b15b9c73680a6fcc", "experience_type": "text", "when_to_use": "此规划框架适用于短期市场分析报告、行业动态评估、投资策略建议等需要快速整合多源信息并提供明确结论的金融任务。它特别适合在市场波动较大或重大新闻事件发生后,为投资者提供及时且结构化的决策支持。", "content": "[{'step': 1, 'action': '收集和整理基础数据', 'output': '获取市场指数表现(如上证指数、深证成指、创业板指)、行业涨跌情况、资金流向、成交量等核心量化数据,并将其分类整理。', 'completion_criteria': '数据来源可靠(如Wind、同花顺iFinD),覆盖关键指标(如涨跌幅、成交量、主力资金净流入),并以图表形式清晰呈现。', 'common_issues': '数据不完整或滞后;应对方法:确保使用实时更新的数据源,并标注数据截止时间。', 'context_adaptation': '在不同场景下,可根据任务需求调整数据范围,例如加入国际市场的对比数据或特定行业的细分数据。'}, {'step': 2, 'action': '梳理当日重要新闻和政策动态', 'output': '筛选与市场表现直接相关的新闻事件,包括宏观经济政策、行业动态、国际关系等,并按影响程度排序。', 'completion_criteria': '新闻内容与市场表现高度相关,逻辑链条清晰,能够解释当天市场走势的主要驱动因素。', 'common_issues': '新闻过多导致重点不突出;应对方法:优先选择对市场有直接影响的新闻,并用简短语言概括其核心内容。', 'context_adaptation': '针对长期研究报告,可扩展至更长时间跨度的政策趋势分析;针对特定行业分析,可聚焦于行业专属新闻。'}, {'step': 3, 'action': '构建分析框架并组织章节结构', 'output': '根据数据和新闻的重要性,设计报告结构,通常包括行情回顾、市场表现、板块分析、风险提示等部分。', 'completion_criteria': '章节安排符合逻辑顺序,从整体到局部逐步展开,确保读者能够快速抓住核心信息。', 'common_issues': '章节内容重复或重点偏移;应对方法:提前规划每部分内容的核心目标,避免冗余。', 'context_adaptation': '对于深度行业研究,可增加历史数据分析和未来预测章节;对于风险评估报告,可强化不确定性分析部分。'}, {'step': 4, 'action': '进行定量与定性分析结合', 'output': '通过定量数据分析市场表现(如涨跌幅、成交量),并通过定性分析解释背后的原因(如政策影响、市场情绪)。', 'completion_criteria': '定量与定性分析相互印证,形成完整的论证链条,能够清晰解释市场现象。', 'common_issues': '分析过于偏向某一方面;应对方法:在每一部分中均设置定量与定性的对应分析点。', 'context_adaptation': '在预测类任务中,可增加模型预测结果作为定量支持;在政策解读类任务中,可加强政策背景的定性分析。'}, {'step': 5, 'action': '提出风险提示和不确定性分析', 'output': '识别潜在风险因素(如国际市场扰动、政策变化),并在适当位置提出,同时说明可能的影响路径。', 'completion_criteria': '风险提示具体且有依据,能够在不影响整体逻辑流畅性的情况下引起读者关注。', 'common_issues': '风险提示过于笼统或遗漏重要风险;应对方法:基于数据和新闻提炼出最相关的风险点。', 'context_adaptation': '在高不确定性环境下(如经济危机),可单独设立风险分析章节;在低波动环境中,可简化为简短提示。'}, {'step': 6, 'action': '总结核心结论并提出行动建议', 'output': '提炼报告的核心观点(如市场整体向好、特定行业领涨),并结合分析给出明确的投资建议或观察方向。', 'completion_criteria': '结论简洁明了,建议具有可操作性,能够直接指导投资决策。', 'common_issues': '结论模糊或建议缺乏针对性;应对方法:确保结论与前期分析紧密关联,并结合实际市场环境提出具体建议。', 'context_adaptation': '针对机构客户,可增加详细的策略建议;针对个人投资者,可简化为直观的操作指南。'}, {'step': 7, 'action': '审核和优化报告格式', 'output': '检查报告的语言表达、图表展示、数据准确性以及格式规范性,确保最终输出的专业性和易读性。', 'completion_criteria': '报告无明显错误,图表清晰美观,语言简洁专业,符合公司品牌标准。', 'common_issues': '图表混乱或语言冗长;应对方法:采用统一模板并由专人复核。', 'context_adaptation': '在公开发布前,可根据受众调整语言风格,例如学术报告需更正式,而社交媒体发布需更通俗。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-13 23:03:47", "modified_time": "2025-08-13 23:03:47", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "f089a11f102947fd90fba8c77db03c0d", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析、风险评估报告等金融分析任务,尤其在需要对市场动态、政策影响、企业财务表现和交易数据进行综合分析时具有显著适用性。", "content": "[{'step': 1, 'action': '明确核心目标与研究范围', 'output': '定义报告的核心观点,确定覆盖的时间段、市场(如北交所)、关键指标(如成交活跃度、两融余额、估值水平)及主题(如IPO、政策更新)。', 'completion_criteria': '核心观点清晰且涵盖所有主要研究维度;章节结构初步成型,包括市场概况、行情回顾、个股表现、基金表现、新股概览、政策更新等。', 'common_problems': '目标过于宽泛或模糊,导致后续信息收集无重点。', 'solutions': '通过与客户沟通或内部讨论,聚焦关键问题并制定具体研究提纲。'}, {'step': 2, 'action': '数据采集与整理', 'output': '从合规渠道获取定量数据(如成交量、市值、财务指标)和定性信息(如政策公告、公司公告),并按时间序列、行业分布、公司类型等分类整理。', 'completion_criteria': '数据完整、准确,并以表格、图表等形式呈现,能够支持后续分析。', 'common_problems': '数据缺失或不一致,影响分析结论的可靠性。', 'solutions': '建立数据校验机制,确保多来源数据交叉验证;使用权威数据库(如Choice、Wind)补充遗漏信息。'}, {'step': 3, 'action': '构建章节结构与优先级排序', 'output': '根据数据分析结果,安排章节顺序:先展示整体市场数据(如成交额、市值变化),再深入到细分领域(如行业表现、个股龙虎榜),最后结合政策和事件进行总结。', 'completion_criteria': '章节逻辑连贯,信息展示由宏观到微观,核心结论在前几页突出显示。', 'common_problems': '章节间逻辑断裂,或核心结论未能有效突出。', 'solutions': '反复检查章节间的衔接性,确保每部分服务于整体目标;将最重要的发现放在开头部分。'}, {'step': 4, 'action': '定量与定性分析结合', 'output': '通过历史数据分析趋势(如月度成交金额环比变化),结合定性信息解释异常点(如政策影响、重大事件)。例如,用成交额下降和政策监管加强说明市场波动原因。', 'completion_criteria': '定量分析与定性解读相辅相成,既能反映客观事实,又能揭示背后的原因。', 'common_problems': '过度依赖单一类型数据,导致分析片面化。', 'solutions': '在每个分析模块中强制要求同时包含定量与定性内容,确保全面性。'}, {'step': 5, 'action': '层层递进建立论证逻辑', 'output': '从基础数据入手,逐步推导出核心结论。例如,从成交额下降引出流动性风险,再到政策调整对其的影响,最终得出市场信心恢复的可能性。', 'completion_criteria': '论证链条完整,每一层逻辑都有数据或事实支撑,避免跳跃式推论。', 'common_problems': '论证路径不够清晰,容易让读者迷失。', 'solutions': '为每个推论环节添加小标题或引导语,帮助读者理解逻辑关系。'}, {'step': 6, 'action': '适时提出风险因素', '输出': '在分析过程中合理引入潜在风险(如业绩增长不及预期、外部环境不确定性),并在结论部分集中提示。', 'completion_criteria': '风险提示具体且有依据,不会显得突兀或冗余。', 'common_problems': '风险提示过于笼统或偏离主题。', 'solutions': '针对每项风险提供实际案例或数据支持,确保其相关性和可信度。'}, {'step': 7, 'action': '处理不确定性和多种可能性', 'output': '对于未明朗的情况(如政策效果、市场未来走势),采用情景假设法或多路径预测,提供不同可能性下的应对策略。', 'completion_criteria': '不确定性表述清晰,建议具有操作性。', 'common_problems': '忽略不确定性,导致结论过于绝对化。', 'solutions': '设置专门章节讨论“不确定性”,并引用专家意见或模型模拟结果增强说服力。'}, {'step': 8, 'action': '制作可视化材料', 'output': '绘制图表(如折线图、柱状图、饼图)辅助表达关键数据,确保复杂信息直观易懂。', 'completion_criteria': '图表设计简洁美观,标注清晰,能直接支持文字论述。', 'common_problems': '图表过多或过少,导致信息过载或不足。', 'solutions': '限定每部分内容最多3-5张图表,并确保每张图表都有明确的解读说明。'}, {'step': 9, 'action': '撰写结论与建议', 'output': '基于前述分析提炼核心结论,提出具体投资建议(如“优于大市”评级),并附带实施指南(如配置比例、关注方向)。', 'completion_criteria': '结论简明扼要,建议可执行性强。', 'common_problems': '结论与分析脱节,建议缺乏针对性。', 'solutions': '在撰写结论时回溯分析过程,确保两者紧密关联;建议需贴合客户需求。'}, {'step': 10, 'action': '审查与修订', 'output': '审阅报告内容是否符合合规要求,核对数据准确性,优化语言表达,删除冗余内容。', 'completion_criteria': '报告无明显错误,语言流畅,逻辑严谨。', 'common_problems': '忽视细节错误,导致专业性受损。', 'solutions': '设立双人复核机制,分别负责内容和技术审核。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-13 23:05:16", "modified_time": "2025-08-13 23:05:16", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "a99d82df78fd40a7ab8a49eebbad3501", "experience_type": "text", "when_to_use": "此框架适用于行业深度研究、投资标的分析、风险评估报告等金融分析任务,尤其适合需要结合定量与定性数据进行综合判断的场景。", "content": "[{'step': 1, 'action': '明确核心目标和受众需求', 'output': '定义报告的核心观点(如北证50指数的表现)及目标受众(如机构投资者或专业分析师)。', 'evaluation_criteria': '核心观点是否清晰且聚焦于关键指标;目标受众的需求是否被充分考虑。', 'common_issues': '核心观点过于宽泛或偏离受众需求。', 'solutions': '通过与客户或团队讨论,明确报告的重点和预期用途。'}, {'step': 2, 'action': '收集并整理基础数据', 'output': '获取市场表现数据(如指数涨跌幅、成交额、换手率)、行业分类数据(如各行业的涨跌幅分布)以及个股表现数据(如涨幅前十、跌幅前十股票)。', 'evaluation_criteria': '数据来源是否可靠;数据覆盖是否全面;是否有历史对比和趋势分析。', 'common_issues': '数据缺失或不一致;缺乏历史数据支持。', 'solutions': '使用权威数据库(如iFinD)确保数据质量,并补充历史数据以提供上下文。'}, {'step': 3, 'action': '组织章节结构并分配信息优先级', 'output': '设计报告结构,包括核心观点、市场概况、行业分析、个股表现、估值分析和风险提示等部分,优先展示最能支撑核心观点的数据。', 'evaluation_criteria': '章节逻辑是否清晰;信息优先级是否合理;核心结论是否突出。', 'common_issues': '章节安排混乱或信息冗余。', 'solutions': '采用倒金字塔结构,先呈现核心结论,再逐步展开支撑细节。'}, {'step': 4, 'action': '构建论证逻辑并分层递进', 'output': '从宏观到微观层层递进,首先分析整体市场表现(如北证50指数),然后细化到行业层面(如国防军工、机械设备),最后聚焦个股表现(如星辰科技、生物谷)。', 'evaluation_criteria': '论证路径是否清晰;是否有效结合定量与定性分析;是否涵盖多种可能性。', 'common_issues': '论证跳跃性强或缺乏连贯性。', 'solutions': '使用数据图表辅助说明,并在每一步提供简短的小结以强化逻辑连接。'}, {'step': 5, 'action': '平衡定量与定性信息', 'output': '通过定量数据(如涨跌幅、市盈率)与定性分析(如政策影响、行业趋势)相结合,提供全面的市场解读。', 'evaluation_criteria': '定量与定性信息是否均衡;是否有效解释数据背后的驱动因素。', 'common_issues': '过度依赖定量数据或忽视定性分析。', 'solutions': '在数据分析中加入行业动态和政策解读,增强背景信息的丰富性。'}, {'step': 6, 'action': '识别并处理不确定性', 'output': '明确提出潜在风险因素(如政策支持力度不足、科技创新性不足),并探讨其对市场的可能影响。', 'evaluation_criteria': '风险因素是否全面;是否提供了应对策略或情景分析。', 'common_issues': '风险提示过于笼统或缺乏实际意义。', 'solutions': '结合具体案例和历史数据,量化风险的可能性和影响范围。'}, {'step': 7, 'action': '总结并提出行动建议', 'output': '提炼核心发现,为投资者提供明确的操作建议(如关注高成长性行业或规避高估值个股)。', 'evaluation_criteria': '总结是否简洁有力;建议是否具有可操作性。', 'common_issues': '总结流于形式或建议不够具体。', 'solutions': '结合报告中的关键数据和分析,给出基于证据的建议。'}, {'step': 8, 'action': '校验数据和语言表达', 'output': '检查数据准确性、逻辑连贯性和语言表达的专业性,确保报告无误。', 'evaluation_criteria': '数据是否准确;语言是否简洁明了;格式是否统一。', 'common_issues': '数据错误或语言表达模糊。', 'solutions': '进行多轮校对,并邀请同事或专家进行交叉验证。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-13 23:06:44", "modified_time": "2025-08-13 23:06:44", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "e9fee429e6bb45a98520bdd3293e8876", "experience_type": "text", "when_to_use": "此规划框架适用于金融领域的资金流分析、市场动态评估以及投资标的筛选等任务,尤其是需要结合定量与定性数据进行综合判断的场景,例如月度或季度资金流向报告、跨市场投资机会挖掘、外资行为分析等。", "content": "[{'step': 1, 'action': '明确分析目标和范围', 'output': '一份清晰的研究问题清单,包括核心目标(如分析外资流向变化)、覆盖的时间段(如过去一个月)以及涉及的市场(如全球主要股市、中国市场、港股等)。', 'evaluation_criteria': '目标是否具体且可量化;范围是否合理且涵盖关键变量;时间跨度是否足够捕捉趋势。', 'common_issues_and_solutions': [{'issue': '目标过于宽泛导致无法聚焦', 'solution': '通过与利益相关者沟通,细化研究问题并优先考虑对决策最有影响的因素。'}, {'issue': '时间跨度不足可能遗漏长期趋势', 'solution': '在短期分析之外增加对比历史数据的环节,以验证趋势的持续性。'}]}, {'step': 2, 'action': '收集和整理数据', 'output': '完整的数据集,包括定量数据(如资金净流入/流出金额、成交额占比)和定性信息(如地缘政治事件、政策变动),并按市场、时间段分类。', 'evaluation_criteria': '数据来源是否可靠;数据是否全面覆盖所需变量;是否有适当的清洗和标准化处理。', 'common_issues_and_solutions': [{'issue': '数据缺失或不一致', 'solution': '采用替代指标或估算方法填补空白,并注明假设条件。'}, {'issue': '数据格式混乱难以整合', 'solution': '使用统一的数据处理工具(如Excel、Python脚本)进行预处理。'}]}, {'step': 3, 'action': '构建逻辑框架和章节结构', 'output': '报告大纲,包含引言、数据分析、结论与建议等部分,确保信息按照从宏观到微观、从整体到细节的顺序展开。', 'evaluation_criteria': '章节安排是否符合读者认知逻辑;信息展示是否突出核心结论;不同类型信息(定量/定性、历史/预测)是否平衡分布。', 'common_issues_and_solutions': [{'issue': '章节结构松散缺乏连贯性', 'solution': '提前设计每章的核心论点和支撑材料,确保层层递进。'}, {'issue': '信息过载导致重点模糊', 'solution': '限制每个章节的信息密度,仅保留最能支持结论的关键数据。'}]}, {'step': 4, 'action': '进行数据分析和可视化', 'output': '图表、表格及文字描述,用于阐述资金流向、市场表现及相关驱动因素,同时标注异常值和趋势变化。', 'evaluation_criteria': '图表是否直观易懂;分析是否揭示关键洞察;是否有效结合定量与定性信息。', 'common_issues_and_solutions': [{'issue': '图表复杂难懂', 'solution': '简化图表设计,避免过多颜色或元素干扰;辅以简短的文字说明。'}, {'issue': '忽略异常值或反常现象', 'solution': '专门分析异常值背后的原因,并将其作为补充讨论的一部分。'}]}, {'step': 5, 'action': '建立论证逻辑并提出风险提示', 'output': '逐层递进的观点推导路径,包括核心发现(如外资回流迹象)、潜在机会(如低配行业重回标配)和风险因素(如地缘政治紧张局势升级)。', 'evaluation_criteria': '论证是否严密且有说服力;风险提示是否及时且全面;是否提供多种可能性的应对策略。', 'common_issues_and_solutions': [{'issue': '论证过程跳跃缺乏衔接', 'solution': '逐条列出推理链条,确保每一步都基于前一步的结论。'}, {'issue': '风险提示滞后削弱可信度', 'solution': '在分析早期提及主要风险,并贯穿全文多次强调。'}]}, {'step': 6, 'action': '总结核心结论并给出操作建议', 'output': '简洁明了的结论摘要,附带具体的行动指南(如关注低配行业的结构性机会、警惕流动性趋紧的风险)。', 'evaluation_criteria': '结论是否高度概括且易于理解;建议是否切实可行;是否针对不同受众定制化。', 'common_issues_and_solutions': [{'issue': '结论冗长失去焦点', 'solution': '提炼出3-5个最重要的发现,用一句话总结每个发现的意义。'}, {'issue': '建议空泛缺乏实操性', 'solution': '结合实际案例或模拟情景,为每条建议提供具体实施路径。'}]}, {'step': 7, 'action': '审查和优化最终报告', 'output': '经过校对和润色后的完整报告,确保语言精炼、逻辑清晰、格式规范。', 'evaluation_criteria': '是否存在语法错误或表述不清;是否符合公司品牌风格;是否满足合规要求。', 'common_issues_and_solutions': [{'issue': '格式不统一影响专业形象', 'solution': '制定文档模板,统一字体、标题、引用格式等细节。'}, {'issue': '忽略合规条款引发法律风险', 'solution': '邀请法务团队审核报告内容,特别是免责声明部分。'}]}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-13 23:08:22", "modified_time": "2025-08-13 23:08:22", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "164b31b700944a6e94f250123eef98b5", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、市场走势分析、投资标的筛选与评估、风险提示报告等金融分析任务。尤其适合需要结合宏观经济环境、政策导向、市场数据以及行业动态进行综合研判的场景。", "content": "[{'step': 1, 'action': '明确分析目标与范围', 'output': '确定分析的核心主题(如市场走势、行业表现、投资机会),并列出相关的宏观、中观和微观层面的关键因素。', 'completion_criteria': '能够清晰定义分析的具体问题,并列出至少3个关键维度(如经济环境、政策导向、行业数据)作为后续分析的基础。', 'common_issues': '目标过于宽泛或模糊,导致分析缺乏聚焦点。', 'solutions': '通过与利益相关方沟通确认核心需求,确保目标具体且可操作。'}, {'step': 2, 'action': '收集并整理基础数据与信息', 'output': '获取最新的市场数据(如指数表现、成交量)、行业动态(如涨跌幅分布)、政策文件及宏观经济指标,并将其分类汇总。', 'completion_criteria': '所有数据来源可靠,覆盖全面,且以表格、图表等形式呈现,便于直观理解。', 'common_issues': '数据不完整或过时,影响分析准确性。', 'solutions': '优先使用权威数据库(如Wind),并标注数据的时间戳,确保时效性。'}, {'step': 3, 'action': '构建逻辑结构与章节安排', 'output': '设计报告的整体框架,包括市场综述、后市研判、投资建议等部分,并根据重要性分配篇幅。', 'completion_criteria': '每个章节都有明确的功能定位,例如市场综述突出当前走势特征,后市研判侧重趋势预测,投资建议提供具体操作指引。', 'common_issues': '章节间逻辑不连贯,或内容重复。', 'solutions': '提前绘制内容地图,确保各部分既独立又相互支撑。'}, {'step': 4, 'action': '展开市场走势分析', 'output': '从定量角度描述市场表现(如指数涨跌、行业排名),并结合定性分析解释背后的原因(如政策驱动、资金流入)。同时辅以图表展示。', 'completion_criteria': '定量与定性分析相结合,且结论有数据支持;图表清晰且与文字内容呼应。', 'common_issues': '忽略定性分析,使结论显得单薄。', 'solutions': '引入专家观点或政策解读,增强分析深度。'}, {'step': 5, 'action': '提出后市研判与投资建议', 'output': '基于历史数据与当前市场环境,推导未来可能的趋势,并给出具体的行业配置建议(如关注航天航空、游戏等行业)。', 'completion_criteria': '研判逻辑严密,建议具有实操性,能直接指导投资决策。', 'common_issues': '建议过于笼统,缺乏针对性。', 'solutions': '结合量化指标(如市盈率水平、成交量变化)细化推荐理由。'}, {'step': 6, 'action': '识别风险因素并提出应对策略', 'output': '列举潜在的风险点(如海外经济衰退、国内政策调整),并针对每项风险提出缓解措施。', 'completion_criteria': '风险提示全面,应对策略具体可行。', 'common_issues': '风险描述流于表面,未深入探讨其可能性与影响。', 'solutions': '采用情景模拟法,量化不同风险发生时的潜在损失。'}, {'step': 7, 'action': '校验与优化报告质量', 'output': '检查报告是否符合逻辑一致性、语言简洁性和专业规范性要求,并补充必要的声明与免责声明。', 'completion_criteria': '报告无明显错误,格式统一,且包含合规声明。', 'common_issues': '忽视细节问题,如单位错误或表述歧义。', 'solutions': '建立多轮审阅机制,邀请同事交叉检查。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-13 23:10:24", "modified_time": "2025-08-13 23:10:24", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "cb8c0c12acb642cb87462bdcad0a7e7b", "experience_type": "text", "when_to_use": "此规划框架适用于金融市场的每日策略分析、投资组合管理建议、大类资产跟踪报告及风险提示相关任务,尤其在需要快速整合多市场动态信息并输出交易建议的场景中适用。", "content": "[{'step': 1, 'action': '收集和整理当日金融市场数据,包括利率债、股市、外汇、商品等大类资产的表现,并提取关键指标(如国债期货价格、指数涨跌幅、汇率波动、商品指数变化)。', 'output': '形成初步数据表格和图表,确保所有数据来源可靠且标注清晰。', 'completion_criteria': '数据完整覆盖主要市场,且图表直观展示核心趋势。', 'common_issues': '数据遗漏或来源不一致可能导致结论偏差;应对方法是建立标准化数据采集流程并设置校验机制。'}, {'step': 2, 'action': '分析各资产类别表现背后的核心驱动因素,结合历史数据和当前政策背景,梳理出逻辑链条(如货币政策宽松对债市的影响、财政政策转向对股市的支撑)。', 'output': '生成针对每个资产类别的简要分析段落,突出核心驱动因素和未来展望。', 'completion_criteria': '每段分析逻辑清晰,能通过数据或政策事实支持观点。', 'common_issues': '忽略次要但重要的驱动因素;应对方法是引入多维度交叉验证机制,比如结合技术面与基本面分析。'}, {'step': 3, 'action': '整合重要政策和新闻事件,评估其对市场的短期和长期影响,并将这些信息与资产表现分析相结合。', 'output': '形成政策及要闻总结部分,明确标注事件对各类资产的具体影响路径。', 'completion_criteria': '政策解读准确,且能清晰映射到具体资产类别。', 'common_issues': '政策解读过于笼统,缺乏针对性;应对方法是建立政策-市场映射表,明确关联性。'}, {'step': 4, 'action': '基于以上分析,提出具体的交易策略建议,包括买入/卖出信号、支撑位/阻力位参考点,以及仓位调整建议。', 'output': '形成交易策略模块,包含明确的操作指导和风险控制措施。', 'completion_criteria': '策略建议具体可行,且附有风险提示。', 'common_issues': '策略过于模糊或缺乏风险控制;应对方法是引入量化模型辅助决策,同时设定止损规则。'}, {'step': 5, 'action': '识别潜在风险因素,评估其发生的可能性和影响程度,并在报告中单独列出风险提示。', 'output': '形成风险提示模块,涵盖主要风险点及其应对建议。', 'completion_criteria': '风险提示全面且具有前瞻性,能有效引导投资者规避风险。', 'common_issues': '风险提示不足或过于泛化;应对方法是建立风险矩阵,量化风险等级。'}, {'step': 6, 'action': '组织报告结构,按照‘大类资产跟踪→政策及要闻→交易策略→风险提示’的顺序编排内容,并确保核心结论突出。', 'output': '完成最终报告,结构清晰,重点突出,便于读者快速获取关键信息。', 'completion_criteria': '报告逻辑连贯,章节安排合理,符合目标受众需求。', 'common_issues': '章节结构混乱导致信息传递效率低;应对方法是制定固定模板,统一格式要求。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-13 23:11:56", "modified_time": "2025-08-13 23:11:56", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "38f6ab4543554462817d1d8b6a1b98f9", "experience_type": "text", "when_to_use": "此规划框架适用于宏观经济分析、金融市场趋势研究、汇率预测报告等需要结合定量与定性分析的金融任务。尤其适合涉及多维度数据解读、政策影响评估及市场预期管理的研究场景。", "content": "[{'step': 1, 'action': '明确核心主题及目标', 'output': '定义报告的核心问题和目标受众,例如本文聚焦于美元走势分析及其驱动因素,目标是为投资者提供交易决策支持。', 'how_to_judge': '是否清晰界定了研究主题,并明确了其对目标受众的价值;判断依据包括是否有明确的问题陈述和逻辑起点。', 'common_issues': '主题过于宽泛或模糊,导致后续分析难以聚焦。', 'solutions': '通过初步调研和团队讨论,提炼出一个具体且有实际意义的核心问题。'}, {'step': 2, 'action': '构建章节结构并分配信息优先级', 'output': '设计报告的章节框架,确保逻辑递进性和信息层次感。例如,本文从宏观叙事(关税影响)到短期刺激因素(经济数据+美联储立场),再到长期趋势(债务周期与利差收窄)逐步展开。', 'how_to_judge': '章节安排是否符合‘由表及里’的原则,即先呈现直观现象再深入剖析原因;核心结论是否在前半部分突出展示。', 'common_issues': '章节顺序混乱或缺乏连贯性,导致读者难以跟随思路。', 'solutions': '使用‘总-分-总’结构,在开头概述主要发现,中间详细论证,结尾总结展望。'}, {'step': 3, 'action': '收集与整理关键数据', 'output': '整合定量数据(如非农就业数据、GDP增长率)和定性信息(如政策声明、市场情绪),形成支撑论点的基础材料。例如,本文引用了新增非农就业人数骤降的数据以及鲍威尔的鹰派言论。', 'how_to_judge': '数据来源是否权威可靠,覆盖范围是否全面;是否能够有效支撑后续分析。', 'common_issues': '数据缺失或质量不高,导致分析基础薄弱。', 'solutions': '优先选择官方统计数据和机构发布的信息,同时补充第三方验证以增强可信度。'}, {'step': 4, 'action': '建立多层次论证路径', 'output': '采用‘事实→解释→推导’的三步论证法,逐步建立观点。例如,本文首先指出非农数据走弱的事实,然后分析其背后可能反映的劳动力市场风险,最后推测这对美元走势的影响。', 'how_to_judge': '论证过程是否环环相扣,每一步推导是否合理且有据可依。', 'common_issues': '论证跳跃过大,忽略中间环节,使读者难以信服。', 'solutions': '增加过渡性说明,将复杂推导分解为更易理解的小步骤。'}, {'step': 5, 'action': '平衡历史回顾与未来预测', 'output': '结合历史数据和当前动态,对未来趋势进行合理预测。例如,本文既回顾了4月和7月美元表现的历史对比,又基于当前经济状况预测四季度美元或将回落。', 'how_to_judge': '历史与预测的比例是否适当,预测是否有充分依据而非空谈。', 'common_issues': '过度依赖历史数据而忽视新变化,或预测过于激进而缺乏支撑。', 'solutions': '在历史分析中加入时间敏感变量,同时用多种情景假设覆盖不同可能性。'}, {'step': 6, 'action': '适时引入风险提示', 'output': '在论证过程中自然嵌入潜在风险因素,避免突兀或生硬。例如,本文在最后提到美国经贸政策大幅变动可能导致全球经济放缓的风险。', 'how_to_judge': '风险提示是否恰到好处地融入整体论述,不会削弱主论点但又能提醒注意。', 'common_issues': '风险提示过早出现分散注意力,或过晚提出显得仓促。', 'solutions': '将风险提示放在论证高潮之后、总结之前的位置,作为补充内容呈现。'}, {'step': 7, 'action': '制作可视化图表辅助表达', 'output': '根据内容需求插入图表,帮助直观展示复杂数据关系。例如,本文通过柱状图展示非农就业数据的变化趋势,通过折线图比较利差水平。', 'how_to_judge': '图表是否简洁明了,直接服务于核心论点;是否存在冗余或无关图表。', 'common_issues': '图表设计粗糙或信息量不足,未能充分发挥作用。', 'solutions': '遵循‘一图一意’原则,每个图表只传达一个核心信息,并配以简短说明文字。'}, {'step': 8, 'action': '撰写总结与行动建议', 'output': '提炼全文核心观点,给出具体的行动建议。例如,本文最终建议投资者关注美元中长期偏弱的趋势,并警惕短期内反弹的高点。', 'how_to_judge': '总结是否精炼准确,行动建议是否具有实操性。', 'common_issues': '总结流于形式,未真正归纳要点;建议过于笼统无法落地。', 'solutions': '总结时回溯各章节核心内容,建议则需结合具体市场环境和投资工具制定。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-13 23:13:55", "modified_time": "2025-08-13 23:13:55", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "42875310082f45b68b12f41e1f4ef23a", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究、主题投资机会分析、技术趋势跟踪报告等需要整合多维度信息(包括海外科技动态、国内政策变化、市场热点主题)的金融分析任务。尤其适合在需要快速响应新兴技术或政策变化,并结合定量与定性数据进行综合判断时使用。", "content": "[{'step': 1, 'action': '明确分析目标和受众需求,确定核心主题及信息优先级。', 'output': '清晰的主题定义文档,包含分析范围、目标读者群体以及关键问题列表。', 'completion_criteria': '主题具有高度相关性,能够覆盖当前市场热点;信息优先级排序合理,确保最重要的内容占据主要篇幅。', 'common_issues': '可能忽略次要但重要的背景信息,导致分析不够全面。', 'solutions': '通过团队讨论或专家咨询补充遗漏的关键点,同时保持主次分明。'}, {'step': 2, 'action': '收集并分类整理相关信息,分为海外科技映射、国内热门主题、政策关注三大模块。', 'output': '每个模块下的细分领域数据汇总表,包括最新动态、关键事件描述、相关图表和引用来源。', 'completion_criteria': '资料完整且权威,能体现近期重大进展;分类逻辑清晰,便于后续展开论述。', 'common_issues': '数据来源单一或过时,影响结论可靠性。', 'solutions': '广泛利用多种渠道(如官方公告、学术论文、行业报告),并标注时间戳以保证时效性。'}, {'step': 3, 'action': '构建章节结构,按照从宏观到微观、从外部环境到内部动因的顺序组织内容。', 'output': '初步框架草稿,包括各部分标题、子标题及其对应的核心论点。', 'completion_criteria': '框架层次分明,逻辑连贯;每部分内容均围绕核心主题展开,无偏离主线的情况。', 'common_issues': '章节间衔接不流畅,容易造成阅读障碍。', 'solutions': '增加过渡段落或总结性语句,强化逻辑联系。'}, {'step': 4, 'action': '撰写详细内容,注重定量与定性信息的平衡分布,采用数据支撑观点的同时辅以案例说明。', 'output': '完整的初稿文本,涵盖所有模块的具体分析,附带可视化图表和注释。', 'completion关键词': '内容详实、准确;数据分析深入,案例选取典型;语言表达专业且易懂。', 'common_issues': '过于偏重某一方面(如只强调技术突破而忽视政策影响),导致整体失衡。', 'solutions': '定期回顾框架要求,调整侧重点;引入同行评审机制优化内容比例。'}, {'step': 5, 'action': '突出核心结论,使用加粗字体、独立段落或专门章节呈现最终建议。', 'output': '经过提炼后的核心结论摘要,放在报告开头或结尾处。', 'completion_criteria': '核心结论简明扼要,直击要害;与前文分析紧密呼应,避免突兀感。', 'common_issues': '结论泛化或缺乏针对性,无法指导实际操作。', 'solutions': '基于具体场景推导结论,尽量给出可执行的策略建议。'}, {'step': 6, 'action': '提出风险提示,将潜在不确定性因素单独列出,并用中立语气阐述其可能影响。', 'output': '风险提示章节,列举颠覆性技术商业化落地、政策实施效果等方面的风险点。', 'completion_criteria': '风险提示全面、客观;表述方式审慎,不引发恐慌情绪。', 'common_issues': '风险提示被弱化甚至省略,削弱报告可信度。', 'solutions': '将风险提示作为固定模块纳入模板,强制执行。'}, {'step': 7, 'action': '校对与格式优化,检查语法错误、排版问题以及引用规范性。', 'output': '最终版本报告,符合专业出版标准,具备良好的视觉效果。', 'completion_criteria': '文字无误,图表清晰;引用来源标注规范,杜绝抄袭嫌疑。', 'common_issues': '忽视细节问题,例如单位换算错误或图片分辨率低。', 'solutions': '安排专人负责校对工作,借助自动化工具辅助检查。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-13 23:15:18", "modified_time": "2025-08-13 23:15:18", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "43dbdb643cb04b5f8adf560b2d0db3b4", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、政策影响分析、投资标的筛选与评估、以及跨领域技术应用前景预测等任务。特别适合需要结合宏观政策、行业趋势、技术发展和市场动态的综合分析场景。", "content": "[{'step': 1, 'action': '明确核心主题和分析目标', 'output': '清晰界定研究的核心问题,例如政策对AI产业的影响、市场规模预测、技术落地场景等,并列出关键假设和预期成果。', 'completion_criteria': '核心主题和目标是否聚焦且可操作;是否明确了主要分析维度(如政策、技术、市场)。', 'common_issues': '主题过于宽泛或模糊,导致后续分析缺乏针对性。', 'solutions': '通过与利益相关方沟通确认研究范围,确保目标具体化。'}, {'step': 2, 'action': '构建章节结构并分配信息优先级', 'output': '根据分析逻辑设计报告框架,通常包括背景介绍、现状分析、未来展望、重点领域推荐和风险提示。将定量数据(如市场规模、增长率)放在前段以支撑结论,定性分析(如政策解读、技术趋势)用于补充和深化。', 'completion_criteria': '章节安排是否符合逻辑递进关系;核心结论是否在前段突出展示。', 'common_issues': '章节内容重复或逻辑跳跃,导致读者难以跟随。', 'solutions': '采用“总-分-总”结构,确保各部分紧密衔接,并在撰写时反复检查逻辑连贯性。'}, {'step': 3, 'action': '收集并整合多源数据', 'output': '从政策文件、行业报告、市场调研和专家访谈中提取关键数据和观点,形成支持分析的基础资料库。特别是注重历史数据与未来预测的平衡分布,以增强论证的可信度。', 'completion_criteria': '数据是否全面且权威;历史与预测数据比例是否合理(建议3:1或2:1)。', 'common_issues': '数据来源单一或过时,导致分析结果缺乏说服力。', 'solutions': '优先选择官方统计、知名咨询机构和学术研究的数据,同时标注数据时效性和局限性。'}, {'step': 4, 'action': '建立层层递进的论证逻辑', 'output': '按照“现状描述→驱动因素分析→未来趋势预测→潜在机会挖掘”的路径展开论述。每个环节需引用数据或案例佐证,并用图表直观呈现复杂信息。', 'completion_criteria': '论证链条是否完整;每个环节是否有充分的数据或案例支持。', 'common_issues': '论证过程跳跃或缺乏过渡,使读者难以理解。', 'solutions': '使用连接词(如“因此”、“此外”)引导逻辑流动,必要时添加小结段落强化衔接。'}, {'step': 5, 'action': '识别并讨论关键风险因素', 'output': '在分析末尾单独设立“风险提示”章节,列出可能影响结论实现的主要风险(如政策推进不及预期、技术迭代不确定性),并提出应对策略或缓解措施。', 'completion_criteria': '风险是否覆盖全面;应对措施是否具体可行。', 'common_issues': '风险提示流于形式,缺乏实际指导意义。', 'solutions': '结合行业特点和实际情况,提供具体的规避或缓解方案,而非泛泛而谈。'}, {'step': 6, 'action': '优化信息展示方式', 'output': '通过图表、数据可视化工具和简明语言提升报告的易读性。确保每张图表都有标题、注释和数据来源,避免信息冗余或混乱。', 'completion_criteria': '图表是否直观且信息量适中;文字表述是否简洁明了。', 'common_issues': '图表过多或过少,导致信息密度失衡。', 'solutions': '遵循“一图一意”原则,每张图表只传递一个核心信息点,并与正文内容呼应。'}, {'step': 7, 'action': '总结核心观点并提出行动建议', 'output': '在报告结尾提炼出3-5个核心观点,并针对不同受众(如投资者、企业高管、政策制定者)提供具体的行动建议或投资方向指引。', 'completion_criteria': '核心观点是否精炼且具有洞察力;行动建议是否切实可行。', 'common_issues': '总结过于笼统,未能为读者提供明确的决策依据。', 'solutions': '基于前文分析提炼出最具价值的发现,并结合实际需求设计行动指南。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-13 23:17:13", "modified_time": "2025-08-13 23:17:13", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "a5cef0f4099142d3857ac95617d688b4", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、政策影响分析、中长期投资策略制定以及宏观经济趋势预测等需要系统性组织信息和推导结论的金融分析任务。", "content": "[{'step': 1, 'action': '明确分析目标与核心主题', 'output': '清晰界定报告的核心主题(如十五五规划产业布局猜想),并确定其在更广泛背景下的定位,例如外部不确定性对政策方向的影响。', 'how_to_judge_completion': '是否能用一句话概括分析目标,并确保所有后续内容都围绕这一目标展开。', 'common_issues_and_solutions': {'issue': '主题过于宽泛或模糊', 'solution': '通过限定时间范围(如2025-2030年)或聚焦具体领域(如科技创新、数字经济)来缩小范围。'}}, {'step': 2, 'action': '梳理政策与历史数据,提取关键驱动因素', 'output': '整理相关政策文件(如十四五规划、政治局会议决议)、历史数据(如产业增长趋势)及最新动态(如中美贸易谈判结果),识别出主要驱动因素(如科技自立自强、产业链安全)。', 'how_to_judge_completion': '是否能够归纳出至少3-5个核心驱动因素,并用定量/定性证据支持这些因素的重要性。', 'common_issues_and_solutions': {'issue': '信息过载导致难以聚焦', 'solution': '优先选择直接影响当前主题的关键变量,忽略次要细节;使用表格或图表辅助筛选重点信息。'}}, {'step': 3, 'action': '构建逻辑框架,划分章节结构', 'output': '基于核心主题和驱动因素,设计一个层级分明的章节结构,通常包括宏观背景、核心议题、细分领域展望、风险提示等部分,确保逻辑连贯且层次递进。', 'how_to_judge_completion': '每个章节是否有明确的功能定位,且整体结构是否符合由总到分、由大到小的原则。', 'common_issues_and_solutions': {'issue': '章节之间缺乏衔接或重复冗余', 'solution': \"采用'提出问题→分析原因→给出解决方案'的三段式逻辑,避免内容交叉。\"}}, {'step': 4, 'action': '平衡定量与定性信息,突出核心结论', 'output': '结合数据分析(如GDP增长率、行业市场规模)与专家观点(如政策解读、技术发展趋势),形成多层次论证,并通过加粗标题、总结段落等方式强化核心结论。', 'how_to_judge_completion': '读者能否快速抓住每部分内容的重点,且核心结论是否贯穿始终。', 'common_issues_and_solutions': {'issue': '信息堆砌而无重点', 'solution': '设置每部分的小结,提炼关键洞察;利用可视化工具(如折线图、饼图)直观展示数据。'}}, {'step': 5, 'action': '融入情景化假设与多可能性讨论', 'output': '针对不确定性强的部分(如AI算力卡脖子问题),列举多种可能情景(乐观、中性、悲观),并通过概率赋权或敏感性分析评估其潜在影响。', 'how_to_judge_completion': '是否涵盖了主流观点之外的边缘情况,且讨论是否具有实操指导意义。', 'common_issues_and_solutions': {'issue': '忽视极端情景或过度简化复杂性', 'solution': '引入外部专家意见作为补充,同时保持开放态度,承认部分领域的不可预测性。'}}, {'step': 6, 'action': '提出行动建议与投资机会', 'output': '根据前述分析,为不同利益相关方(如投资者、企业决策者)提供具体行动指南,例如推荐关注的行业板块(如低空经济、脑机接口)或规避的风险区域(如地缘政治冲突)。', 'how_to_judge_completion': '建议是否具备可操作性,且是否紧密贴合前文分析。', 'common_issues_and_solutions': {'issue': '建议泛泛而谈,缺乏针对性', 'solution': '结合特定行业或公司的实际案例,说明如何落地实施这些建议。'}}, {'step': 7, 'action': '校验完整性与一致性,完善报告格式', 'output': '检查报告是否存在遗漏的重要维度(如未提及的文化强国建设),并对语言表达、排版风格进行统一优化,确保专业性和易读性。', 'how_to_judge_completion': '是否满足客户或受众的需求,且报告是否易于理解。', 'common_issues_and_solutions': {'issue': '格式混乱或术语晦涩难懂', 'solution': '邀请非专业背景人员试读,收集反馈后调整表述方式;参考公司内部模板规范格式。'}}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-13 23:19:18", "modified_time": "2025-08-13 23:19:18", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "8b92e2e579934b26a39a3700774a8065", "experience_type": "text", "when_to_use": "适用于行业深度研究、资产配置分析、投资策略制定及风险评估报告等任务,尤其是需要结合历史数据复盘、量化模型预测、行业周期分析与市场风格研判的场景。", "content": "[{'step': 1, 'action': '明确研究主题和目标,梳理背景政策或市场趋势', 'output': '清晰的主题定义和研究框架(如‘反内卷’政策背景下的行业机会挖掘)。', 'evaluation': '是否准确提炼出核心问题和研究范围,是否有明确的时间节点和逻辑主线。', 'common_issues': '主题过于宽泛或缺乏聚焦。应对方法:通过政策解读、市场热点筛选明确方向。', 'confidence': 0.95}, {'step': 2, 'action': '进行历史复盘,提取相似事件的经验教训', 'output': '详细的行业历史数据分析(如供给侧改革期间钢铁、煤炭行业的表现),并总结关键驱动因素。', 'evaluation': '是否覆盖了所有相关的历史案例,是否对数据变化和市场反应有深入解释。', 'common_issues': '忽略次要但重要的影响因素。应对方法:多维度对比历史数据,避免单一视角。', 'confidence': 0.9}, {'step': 3, 'action': '构建量化模型,分析当前市场的景气度、估值水平和资金流向', 'output': '基于高频数据和因子模型的市场预测(如权益、利率、黄金、地产等大类资产的量化观点)。', 'evaluation': '模型是否具有较高的胜率和稳定性,是否能有效捕捉市场趋势。', 'common_issues': '模型过拟合或样本不足。应对方法:定期更新模型参数,增加样本多样性。', 'confidence': 0.85}, {'step': 4, 'action': '结合供需关系和库存周期,判断行业所处阶段', 'output': '行业状态划分(如出清期、反转期、景气期等),并推荐具体行业配置策略。', 'evaluation': '是否合理划分行业状态,推荐逻辑是否清晰且可验证。', 'common_issues': '行业状态划分标准不一致。应对方法:建立统一的指标体系,确保分类逻辑连贯。', 'confidence': 0.9}, {'step': 5, 'action': '分析市场风格轮动,提出风格配置建议', 'output': '基于市值因子、机构关注度、季节效应等维度的风格综合观点(如成长/价值、大盘/小盘的相对强弱)。', 'evaluation': '是否全面考虑了不同风格的影响因素,是否能够动态调整。', 'common_issues': '忽视长期趋势或短期波动。应对方法:结合宏观环境和微观结构,平衡长期与短期。', 'confidence': 0.88}, {'step': 6, 'action': '整合信息,形成最终的投资建议', 'output': '具体的行业配置权重和风险提示(如胜率赔率策略和出清反转策略组合)。', 'evaluation': '是否逻辑自洽,是否充分考虑了不确定性和潜在风险。', 'common_issues': '结论过于乐观或悲观。应对方法:引入敏感性分析,提供多种情景假设。', 'confidence': 0.92}, {'step': 7, 'action': '撰写报告,优化信息展示结构', 'output': '层次分明、重点突出的分析报告,包括目录、图表、表格和附录。', 'evaluation': '是否逻辑清晰、信息完整,是否便于读者快速获取核心结论。', 'common_issues': '章节安排混乱或信息冗余。应对方法:优先展示核心结论,辅以必要的支持材料。', 'confidence': 0.95}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-13 23:20:44", "modified_time": "2025-08-13 23:20:44", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "f7e73902b6d6408580826753edb1ddc8", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析、风险评估报告等需要综合定量与定性信息的任务。尤其适合对资本市场动态进行快速解读和结构化呈现的场景,如日度、周度或月度市场分析报告。", "content": "[{'step': 1, 'action': '明确核心目标和受众需求', 'output': '确定报告的核心目标(如:解读市场表现、评估投资机会)和目标受众(如:机构投资者、个人投资者)。', 'completion_criteria': '核心目标清晰,能够用一句话概括;受众需求明确且与报告内容匹配。', 'common_issues': '目标过于宽泛或模糊,导致后续章节设计缺乏聚焦。', 'solutions': '通过与客户或团队沟通,明确报告的具体用途和受众关注点。'}, {'step': 2, 'action': '组织章节结构并分配优先级', 'output': '构建报告的逻辑框架,包括市场概览、行业分析、个股表现、估值分析、风险提示等部分,并按重要性排序。', 'completion_criteria': '章节结构完整,信息优先级合理,能够引导读者快速抓住重点。', 'common_issues': '章节顺序不合理,可能导致读者难以理解逻辑关联。', 'solutions': '按照从整体到局部的原则,先呈现宏观数据,再深入细节分析。'}, {'step': 3, 'action': '收集并整理基础数据', 'output': '获取市场指数、行业涨跌幅、个股表现、财务数据等定量信息,以及政策动态、行业趋势等定性信息。', 'completion_criteria': '数据全面、准确,来源可靠,覆盖所有关键维度。', 'common_issues': '数据遗漏或来源不可靠,影响分析的可信度。', 'solutions': '使用权威数据平台(如iFinD),并交叉验证数据一致性。'}, {'step': 4, 'action': '分析市场表现并提炼核心观点', 'output': '基于数据,分析市场整体走势、行业轮动、个股异动等现象,并提炼出核心结论(如:北证50上涨的主要驱动因素)。', 'completion_criteria': '核心观点明确,与数据分析结果一致,具有说服力。', 'common_issues': '分析流于表面,未能挖掘深层次原因。', 'solutions': '结合历史数据和行业背景,深入探讨数据变化背后的逻辑。'}, {'step': 5, 'action': '平衡定量与定性信息分布', 'output': '在报告中合理分配定量数据(如涨跌幅、市盈率)和定性分析(如政策解读、行业前景)的比例,确保信息丰富但不冗余。', 'completion_criteria': '定量与定性信息比例适中,能够互相补充和支持。', 'common_issues': '定量数据过多导致报告枯燥,或定性分析不足缺乏深度。', 'solutions': '根据受众需求调整信息比例,注重数据可视化以增强可读性。'}, {'step': 6, 'action': '提出风险因素并评估不确定性', 'output': '在适当时机引入风险提示,分析可能影响市场的政策、技术、竞争等因素,并评估其发生的概率和潜在影响。', 'completion_criteria': '风险提示全面且具体,能够帮助读者理解潜在威胁。', 'common_issues': '风险提示过于笼统或滞后,无法提供实质性指导。', 'solutions': '结合历史案例和当前市场环境,量化风险的可能性和影响程度。'}, {'step': 7, 'action': '制作图表和可视化工具', 'output': '将复杂数据转化为直观的图表(如折线图、柱状图、表格),并配以简明的文字说明。', 'completion_criteria': '图表清晰易懂,能够有效支持文字分析。', 'common_issues': '图表设计不当,导致信息传递效率低下。', 'solutions': '遵循数据可视化最佳实践,确保图表简洁、直观且标注清晰。'}, {'step': 8, 'action': '撰写总结与展望', 'output': '总结当日市场表现的核心要点,并对未来趋势进行展望,提出投资建议或关注方向。', 'completion_criteria': '总结精炼,展望具有前瞻性,能够为决策提供参考。', 'common_issues': '总结过于泛泛,缺乏实际指导意义。', 'solutions': '结合当前市场热点和长期趋势,提出具体可行的投资建议。'}, {'step': 9, 'action': '审阅与优化报告', 'output': '检查报告的逻辑性、数据准确性、语言表达和格式规范性,确保最终版本无误。', 'completion_criteria': '报告内容准确无误,语言流畅,格式统一。', 'common_issues': '校对不充分,导致出现低级错误。', 'solutions': '采用多人交叉审阅机制,确保内容质量。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-13 23:22:12", "modified_time": "2025-08-13 23:22:12", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "2090aee95a2746578120c0fec122888f", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究、投资标的分析、风险评估报告、市场动态监控等金融分析任务,尤其适合需要结合定量与定性信息进行多维度分析的场景。", "content": "[{'step': 1, 'action': '明确分析目标和范围', 'output': '确定报告的核心主题(如融资趋势、行业分布、地域热点),并列出需要覆盖的关键维度(如融资金额、轮次分布、退出案例)。', 'evaluation': '是否清晰界定了分析目标,并确保所有后续步骤围绕目标展开。常见问题是目标过于宽泛或模糊,解决方法是通过初步数据扫描聚焦核心问题。', 'common_issues_and_solutions': [{'issue': '目标不明确导致内容散乱。', 'solution': '在开始前与利益相关方确认目标,或通过快速数据概览提炼关键议题。'}]}, {'step': 2, 'action': '收集和整理基础数据', 'output': '从可靠来源获取数据(如融资事件、金额、行业分类、地域分布),并对数据进行清洗和分类,确保准确性和完整性。', 'evaluation': '数据是否覆盖全面且无明显错误,是否有遗漏重要信息或异常值未处理。常见问题是数据延迟披露或缺失,解决方法是注明数据限制并在结论中加以说明。', 'common_issues_and_solutions': [{'issue': '数据不完整或存在偏差。', 'solution': '采用保守估计填补缺失值,并在报告中披露假设前提。'}]}, {'step': 3, 'action': '构建章节结构和逻辑框架', 'output': '根据目标设计报告结构,包括概述、数据分析(行业分布、地域分布、融资轮次)、重点事件解读、退出情况分析等部分,确保逻辑递进。', 'evaluation': '章节安排是否合理,信息展示是否符合优先级原则(核心结论前置)。常见问题是结构混乱或信息堆砌,解决方法是先列提纲再填充内容。', 'common_issues_and_solutions': [{'issue': '章节间逻辑不连贯。', 'solution': '使用过渡句连接不同部分,确保每部分内容自然衔接。'}]}, {'step': 4, 'action': '执行定量分析并可视化', 'output': '对融资金额、事件数量等进行统计分析,生成图表(如柱状图、饼图、折线图),直观呈现趋势和分布。', 'evaluation': '图表是否简洁明了且支持论点,避免过度复杂化。常见问题是图表过多或冗余,解决方法是筛选最能支撑结论的图表。', 'common_issues_and_solutions': [{'issue': '图表难以理解或缺乏解释。', 'solution': '为每个图表添加简短说明,突出关键发现。'}]}, {'step': 5, 'action': '补充定性分析和案例解读', 'output': '选取代表性融资事件或IPO案例,深入解读背景、影响及潜在机会,结合政策变化或行业趋势提供洞察。', 'evaluation': '案例是否具有典型性且与整体分析呼应,避免泛泛而谈。常见问题是案例选择不当,解决方法是优先选择高影响力或高频提及的事件。', 'common_issues_and_solutions': [{'issue': '案例解读缺乏深度。', 'solution': '引入专家访谈或第三方资料增强权威性。'}]}, {'step': 6, 'action': '识别风险因素和不确定性', 'output': '分析可能影响市场的外部因素(如政策调整、经济波动),并提出多种可能性及其应对策略。', 'evaluation': '风险提示是否及时且充分,避免避重就轻。常见问题是忽视负面因素,解决方法是单独设立“风险与挑战”章节。', 'common_issues_and_solutions': [{'issue': '风险描述过于笼统。', 'solution': '具体列举风险来源并量化其潜在影响。'}]}, {'step': 7, 'action': '总结核心结论并提出建议', 'output': '提炼主要发现(如行业热点、地域优势、轮次偏好),并给出针对性行动建议(如关注早期项目、布局特定赛道)。', 'evaluation': '结论是否凝练有力,建议是否切实可行。常见问题是结论空洞或建议脱离实际,解决方法是回溯数据分析验证建议合理性。', 'common_issues_and_solutions': [{'issue': '结论与数据分析脱节。', 'solution': '确保每一项结论都有数据支撑,并附上详细推导过程。'}]}, {'step': 8, 'action': '审校与格式优化', 'output': '检查语言表达、数据一致性及格式规范,确保报告专业、易读。', 'evaluation': '是否存在语法错误或排版问题,整体风格是否统一。常见问题是细节疏漏,解决方法是邀请同行评审或使用自动化工具辅助校对。', 'common_issues_and_solutions': [{'issue': '报告格式不统一。', 'solution': '制定标准化模板,涵盖标题、字体、图表样式等细节。'}]}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-13 23:23:53", "modified_time": "2025-08-13 23:23:53", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "d4ad078ad53346a898dea7c78ea98d55", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及市场展望类报告的制作,尤其是涉及金融市场(如港股、A股等)的动态分析与投资建议场景。它也可用于风险评估报告和政策影响分析。", "content": "[{'step': 1, 'action': '明确核心观点和报告目标', 'output': '提炼出本周市场的关键数据和趋势,形成核心结论,例如港股指数表现、资金流动情况和估值水平。', 'completion_criteria': '核心观点清晰且能概括全篇内容,需包含定量数据支持,例如恒生指数跌幅、南向资金净流入额等。', 'common_issues': '可能忽略某些关键指标或数据导致结论不全面。', 'solutions': '通过交叉验证数据来源(如Wind数据库),确保涵盖所有重要维度(如指数、行业、资金流动)。'}, {'step': 2, 'action': '组织章节结构并分配信息优先级', 'output': '分为市场回顾、投资展望和风险提示三大板块,按照“现状描述→数据分析→未来展望→风险控制”的逻辑展开。', 'completion_criteria': '各章节内容分布合理,重点突出。例如,市场回顾部分应占较大篇幅,而风险提示需简明扼要但覆盖全面。', 'common_issues': '章节间可能存在重复信息或逻辑断裂。', 'solutions': '在撰写前绘制思维导图,确保每部分内容独立且连贯;使用过渡句衔接不同章节。'}, {'step': 3, 'action': '收集和整理定量与定性数据', 'output': '从权威数据源(如Wind、官方统计数据)获取最新市场数据,并结合行业新闻、政策动向等定性信息进行补充。', 'completion_criteria': '数据准确无误,且能够支撑核心观点。例如,引用南向资金净流入数据时需注明时间范围及变化幅度。', 'common_issues': '数据过时或缺乏上下文解释,导致说服力不足。', 'solutions': '定期更新数据池,同时为每个数据点提供背景说明,比如对比历史水平或行业均值。'}, {'step': 4, 'action': '建立论证路径,层层递进阐述观点', 'output': '采用“现象→原因→影响→对策”的论证方式。例如,先描述港股下跌现象,再分析其背后原因(如关税政策扰动),最后提出应对策略(如关注高股息标的)。', 'completion_criteria': '论证链条完整,逻辑严密,读者能轻松理解因果关系。', 'common_issues': '论证跳跃过大或过于冗长,使读者难以跟上思路。', 'solutions': '每段落开头设置小标题,明确该部分的核心论点;控制每段字数不超过300字。'}, {'step': 5, 'action': '平衡不同类型信息的分布', 'output': '将定量数据(如PE、PB估值)、定性分析(如政策解读)和预测内容(如未来市场走势)有机结合,避免单一类型信息过多。', 'completion_criteria': '各类信息比例均衡,例如70%定量+30%定性,或者60%现状+40%预测。', 'common_issues': '信息失衡可能导致报告枯燥或缺乏前瞻性。', 'solutions': '根据目标受众调整信息比重,例如针对机构投资者可增加定量分析,而针对普通投资者则强化定性解读。'}, {'step': 6, 'action': '处理不确定性和多种可能性', 'output': '通过情景假设法探讨不同结果,例如“若美联储降息,则市场可能反弹;若未降息,则波动加剧”。同时,在风险提示部分列举具体潜在风险及其发生概率。', 'completion_criteria': '不确定性被充分讨论,且有明确的风险管理建议。', 'common_issues': '忽视极端情况或对风险轻描淡写。', 'solutions': '引入敏感性分析工具,量化不同变量对结论的影响;设置专门章节详细说明风险因素。'}, {'step': 7, 'action': '设计视觉化呈现形式', 'output': '利用图表(如折线图、柱状图)展示复杂数据,例如港股估值分位数、行业涨跌幅排名等,并配以简洁的文字说明。', 'completion_criteria': '图表直观易懂,且与正文内容紧密相关。', 'common_issues': '图表过多或设计不当,分散注意力。', 'solutions': '限制图表数量,确保每张图表都有明确目的;统一风格以增强专业感。'}, {'step': 8, 'action': '校对和优化语言表达', 'output': '确保报告语言精炼、专业,避免歧义或冗余表述。例如,“本周港股流动性下降”改为“本周港股日均成交金额减少52.08亿港元”。', 'completion_criteria': '语言流畅,无语法错误,术语使用规范。', 'common_issues': '行文啰嗦或用词不精准。', 'solutions': '邀请同事审阅初稿,重点关注语言逻辑和术语准确性。'}, {'step': 9, 'action': '添加免责声明和分析师声明', 'output': '在报告末尾附上免责声明、分析师资质介绍及联系方式,提升报告可信度。', 'completion_criteria': '声明内容符合监管要求,且格式统一。', 'common_issues': '遗漏必要法律条款或格式混乱。', 'solutions': '参考公司模板,确保声明内容完整且合规。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-13 23:25:17", "modified_time": "2025-08-13 23:25:17", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "35e9864a64b94d41a56b357b3be91709", "experience_type": "text", "when_to_use": "此规划框架适用于需要对金融市场进行周期性回顾、趋势分析及投资策略调整的任务场景,例如:行业深度研究、市场表现评估、融资融券动态分析、风险与机会识别等。尤其适合需要结合定量和定性数据,快速形成清晰结论并指导后续行动的分析任务。", "content": "[{'step': 1, 'action': '明确分析目标与范围', 'output': '定义本次分析的核心目标(如市场表现、融资融券动态)、时间范围(如一周)以及覆盖的主要市场或行业。', 'evaluation_criteria': '是否清晰界定了分析对象、时间跨度和目标受众;是否为后续步骤提供了明确的方向。', 'common_issues': '目标过于宽泛或模糊,导致后续分析缺乏聚焦点。', 'solutions': '通过团队讨论或客户需求确认,明确具体问题(如‘本周A股市场的表现如何?’)。'}, {'step': 2, 'action': '收集并整理基础数据', 'output': '获取相关市场指数(如上证指数、深证成指)、行业表现数据(如涨跌幅排名)、融资融券数据(如余额变化、净买入额)等。', 'evaluation_criteria': '数据是否全面、准确且来源可靠;是否涵盖了关键指标以支持后续分析。', 'common_issues': '数据不完整或滞后,影响分析的时效性和准确性。', 'solutions': '优先使用权威数据库(如Wind),并设置自动化更新机制确保数据及时性。'}, {'step': 3, 'action': '结构化组织章节内容', 'output': '按照逻辑顺序划分章节,通常包括市场概览、行业表现、融资融券动态、图表展示等部分。', 'evaluation_criteria': '章节安排是否符合信息递进原则,是否便于读者快速抓住重点。', 'common_issues': '章节之间逻辑断裂,导致阅读体验不佳。', 'solutions': '采用‘总-分-总’结构,即先概述整体情况,再深入细节,最后总结核心发现。'}, {'step': 4, 'action': '突出核心结论与关键趋势', 'output': '提炼出市场表现的关键趋势(如‘价值风格板块普遍下跌’)、行业亮点(如‘医药生物涨幅居前’)和融资融券动态(如‘两融余额增长集中在医药生物’)。', 'evaluation_criteria': '核心结论是否直观呈现,是否能帮助决策者快速理解当前形势。', 'common_issues': '结论埋藏在大量数据中,未能有效凸显。', 'solutions': '用加粗标题、摘要段落或可视化图表强调核心结论。'}, {'step': 5, 'action': '平衡定量与定性信息', 'output': '将定量数据(如指数涨跌幅、成交金额)与定性分析(如行业驱动因素、政策影响)相结合,解释数据背后的原因。', 'evaluation_criteria': '是否既展示了数据事实,又提供了合理的背景解读。', 'common_issues': '过度依赖数据而忽略背景分析,或反之。', 'solutions': '为每个定量数据匹配至少一个定性解释,例如‘医药生物上涨可能受到政策利好推动’。'}, {'step': 6, 'action': '引入风险提示与不确定性管理', 'output': '在适当位置提出潜在风险因素(如‘煤炭行业受需求疲软拖累’)以及对未来走势的多种可能性预测。', 'evaluation_criteria': '风险提示是否适时出现,是否基于充分证据;是否提供多种情景假设。', 'common_issues': '风险提示过早或过晚,显得突兀或不足。', 'solutions': '在分析主体完成后单独设立‘风险与展望’小节,系统梳理潜在风险。'}, {'step': 7, 'action': '制作可视化辅助材料', 'output': '生成图表(如指数涨跌幅柱状图、行业分布饼图)以直观展示数据关系。', 'evaluation_criteria': '图表是否简洁明了,是否直接支持文字分析。', 'common_issues': '图表复杂难懂或与正文脱节。', 'solutions': '每张图表配简短说明,确保其与上下文紧密关联。'}, {'step': 8, 'action': '撰写分析师声明与免责声明', 'output': '添加分析师资质声明、公司业务资格说明以及法律免责声明。', 'evaluation_criteria': '声明是否合规,是否保护了报告发布方的权益。', 'common_issues': '遗漏必要声明,增加法律风险。', 'solutions': '参考监管要求模板,确保声明内容完整无误。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-13 23:26:35", "modified_time": "2025-08-13 23:26:35", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "95af109560f64569b9847b295578ecd0", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究、投资标的分析以及多维度的证券推荐报告制作。尤其适合需要结合定量和定性信息,为客户提供明确交易建议的研究任务,例如月度或季度金股推荐报告。", "content": "[{'step': 1, 'action': '明确研究目标与范围', 'output': '确定报告的目标受众(如机构投资者)和核心主题(如8月金股推荐),并列出需要覆盖的行业组及关键公司。', 'how_to_judge_completion': '是否清晰定义了每个行业组的重点领域,并分配了相应的分析师负责具体板块。', 'common_problems': '目标过于宽泛或未充分考虑客户需求。', 'solutions': '通过内部讨论确认优先级,确保覆盖客户最关心的行业和个股。'}, {'step': 2, 'action': '收集与整理基础数据', 'output': '从公开财报、市场动态、政策变化等渠道获取相关公司的财务表现、运营状况和竞争格局数据;同时汇总宏观经济趋势和行业催化剂。', 'how_to_judge_completion': '是否建立了完整且可追溯的数据来源记录,包括历史数据、预测模型输入假设等。', 'common_problems': '数据不全面或缺乏更新。', 'solutions': '利用自动化工具监控实时新闻和数据库,定期验证数据时效性。'}, {'step': 3, 'action': '构建初步筛选池', 'output': '基于估值指标(如P/E、EV/EBITDA)、增长潜力(如收入增速、利润率改善空间)和技术优势(如专利、产品创新)筛选出候选标的。', 'how_to_judge_completion': '是否形成了一份包含多个备选标的的清单,并附有简要理由说明。', 'common_problems': '筛选标准单一,忽略了非财务因素。', 'solutions': '引入多维度评分体系,综合考量财务健康度、市场地位和政策支持等因素。'}, {'step': 4, 'action': '深入分析与比较', 'output': '对候选标的进行详细分析,包括但不限于商业模式评估、竞争优势剖析、风险识别及未来增长路径推演;同时对比同行业内其他公司以突出相对价值。', 'how_to_judge_completion': '是否生成了针对每个标的的专业分析文档,涵盖定性和定量两方面内容。', 'common_problems': '分析流于表面,未能揭示深层次逻辑。', 'solutions': '采用SWOT分析法系统梳理优劣势,结合案例研究强化论证力度。'}, {'step': 5, 'action': '提出投资建议与评级', 'output': '根据前述分析结果,对每只股票给出明确的投资建议(优于大市/中性/弱于大市)及其对应的目标价区间,并阐述主要驱动因素。', 'how_to_judge_completion': '是否提供了清晰的买入/持有/卖出指引,并解释了背后的逻辑链条。', 'common_problems': '建议过于笼统,缺乏操作指导意义。', 'solutions': '将建议细化至具体的仓位配置比例,并辅以情景模拟提高实用性。'}, {'step': 6, 'action': '组织结构化呈现', 'output': '按照章节顺序编排报告内容,通常先呈现整体市场观点,再分行业逐一解读重点标的;在展示时平衡使用图表、表格和文字描述,确保信息直观易懂。', 'how_to_judge_completion': '是否形成了逻辑连贯、层次分明的最终报告版本。', 'common_problems': '信息堆砌导致阅读体验差。', 'solutions': '运用视觉设计原则优化布局,设置小标题引导读者快速定位关键信息。'}, {'step': 7, 'action': '审阅与合规检查', 'output': '由资深分析师或合规团队审核报告内容,确保符合监管要求和公司内部规范;同时核查所有引用数据的准确性和一致性。', 'how_to_judge_completion': '是否获得正式批准发布,且无重大错误或遗漏。', 'common_problems': '忽视合规细节引发法律风险。', 'solutions': '建立标准化审核流程,提前预留充足时间应对潜在问题。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-13 23:28:09", "modified_time": "2025-08-13 23:28:09", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "aaccee36144842db9ef7372e85337d56", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及资本市场策略报告等任务,特别是需要结合定量数据与定性分析、强调行业趋势和个股表现的场景。", "content": "[{'step': 1, 'action': '明确研究主题与目标', 'output': '确定核心研究领域(如AI及机器人产业链),并定义具体的研究问题(如北交所相关企业的市场表现、估值逻辑等)。', 'criteria_for_completion': '研究主题清晰,目标明确,且与客户需求或市场热点高度契合。', 'common_issues': '研究范围过于宽泛或模糊不清。', 'solution': '通过初步市场扫描和内部讨论,聚焦于最具价值的细分领域。'}, {'step': 2, 'action': '收集与整理基础数据', 'output': '获取相关行业的财务数据、市场表现、政策动态等信息,并进行分类整理(如按行业、公司、时间维度)。', 'criteria_for_completion': '数据来源可靠,覆盖全面,且经过初步清洗和验证。', 'common_issues': '数据不完整或存在统计误差。', 'solution': '采用多源交叉验证方法,确保数据准确性和一致性。'}, {'step': 3, 'action': '构建章节结构与内容框架', 'output': '根据研究目标设计报告结构,通常包括行业背景、数据分析、案例展示、风险提示等模块。', 'criteria_for_completion': '章节安排逻辑清晰,能够引导读者逐步理解核心结论。', 'common_issues': '章节顺序混乱,信息分布不均衡。', 'solution': '以“从宏观到微观”或“从现状到未来”的逻辑排列章节,确保信息流畅传递。'}, {'step': 4, 'action': '进行定量与定性分析', 'output': '对行业数据进行量化分析(如市盈率、市值变化),同时结合定性描述(如技术突破、政策支持)解释数据背后的趋势。', 'criteria_for_completion': '分析结果具有洞察力,能有效揭示行业动态和企业竞争力。', 'common_issues': '过度依赖单一类型的数据,缺乏综合视角。', 'solution': '平衡定量与定性分析,辅以图表直观呈现关键发现。'}, {'step': 5, 'action': '提炼核心观点与投资建议', 'output': '总结主要发现,提出具体的投资建议(如推荐关注的标的及其理由)。', 'criteria_for_completion': '核心观点突出,建议具备可操作性。', 'common_issues': '建议过于笼统,缺乏针对性。', 'solution': '针对不同投资者群体(如风险偏好型、稳健型)定制化建议。'}, {'step': 6, 'action': '加入风险提示与不确定性分析', 'output': '识别潜在风险因素(如宏观经济波动、市场竞争加剧),并说明其可能影响。', 'criteria_for_completion': '风险提示全面且客观,帮助投资者形成理性预期。', 'common_issues': '忽视负面因素或低估风险。', 'solution': '系统梳理内外部风险点,并提供应对策略或情景假设。'}, {'step': 7, 'action': '优化可视化表达', 'output': '制作高质量的图表和表格,辅助文字内容,提升报告的专业性和易读性。', 'criteria_for_completion': '图表简洁明了,能快速传递关键信息。', 'common_issues': '图表冗余或难以理解。', 'solution': '遵循“少即是多”的原则,只保留最核心的数据和对比项。'}, {'step': 8, 'action': '审阅与完善报告', 'output': '检查报告的语言准确性、逻辑连贯性以及格式规范性,确保最终版本无误。', 'criteria_for_completion': '报告内容严谨,无明显错误,符合机构标准。', 'common_issues': '遗漏重要细节或出现低级错误。', 'solution': '引入同行评审机制,增加复核环节。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-13 23:29:32", "modified_time": "2025-08-13 23:29:32", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "070e44a181a94339989accc29113c342", "experience_type": "text", "when_to_use": "此规划框架适用于金融领域的综合性市场分析任务,包括但不限于行业深度研究、大类资产配置建议、投资策略制定以及宏观经济与政策对市场影响的评估。尤其适合需要结合定量和定性信息、平衡短期与中长期视角、并提供明确配置建议的场景。", "content": "[{'step': 1, 'action': '明确分析目标与核心观点', 'output': \"形成一个清晰的核心观点,作为报告的主线,统领后续章节结构。例如:'权益市场冲高回落,短期调整不改上行趋势'。\", 'completion_criteria': '核心观点应简洁明了,能够概括当前市场的主要特征,并为后续分析提供方向指引。', 'common_issues': '观点可能过于模糊或缺乏数据支持,导致后续分析失去焦点。', 'solutions': '通过初步数据分析(如市场走势、成交量等)提炼核心观点,并确保其与实际市场表现一致。'}, {'step': 2, 'action': '组织章节结构,按资产类别划分分析模块', 'output': '将报告分为多个模块,分别针对权益市场、债券市场、商品市场等大类资产进行独立分析,每个模块包含核心观点、具体分析和配置建议。', 'completion_criteria': '每个模块应有明确的逻辑层次,从宏观背景到具体市场表现再到配置建议,内容连贯且无遗漏。', 'common_issues': '章节安排可能过于分散,缺乏统一的逻辑线索。', 'solutions': '在每个模块开头设置小标题,明确该部分的核心结论,并确保各模块之间通过宏观背景或政策导向建立联系。'}, {'step': 3, 'action': '优先展示关键数据与核心结论', 'output': '在每个模块的开头,优先展示最能反映市场现状的关键数据(如指数涨跌幅、成交量等),并直接引出核心结论。', 'completion_criteria': '读者能够在阅读每个模块的前几段后快速抓住重点,无需深入细节即可理解主要结论。', 'common_issues': '过多铺垫导致核心结论被淹没,或关键数据未突出显示。', 'solutions': '使用表格、图表等形式直观呈现数据,并在正文开头用简短语言总结数据背后的趋势。'}, {'step': 4, 'action': '结合定量与定性分析,层层递进论证观点', 'output': '在每个模块中,先通过定量数据(如市场指数、成交量、资金流向等)描述现状,再结合定性分析(如政策解读、国际局势等)解释原因,最后得出结论。', 'completion_criteria': '定量与定性分析之间应有明确的逻辑关联,避免数据堆砌或空泛的定性描述。', 'common_issues': '定量分析与定性分析脱节,或定性分析缺乏权威来源支持。', 'solutions': '引用权威数据源(如Wind、国家统计局等)和政策文件,确保定性分析有据可依,并通过逻辑推理连接定量与定性分析。'}, {'step': 5, 'action': '适时引入风险因素,平衡乐观与谨慎态度', 'output': '在分析过程中,适时提及潜在风险因素(如国际市场突发利空、政策不确定性等),并在配置建议中考虑这些风险。', 'completion_criteria': '风险因素的提出应基于客观数据或权威信息,避免过度悲观或忽视风险。', 'common_issues': '风险提示过于笼统或滞后,未能有效引导决策。', 'solutions': '在分析初期提及风险因素,并在配置建议中提供应对方案(如哑铃型策略)。'}, {'step': 6, 'action': '处理不确定性和多种可能性,提供灵活配置建议', 'output': '在配置建议中,针对不同时间维度(短期 vs 中长期)和市场情景(乐观 vs 谨慎)提供差异化建议,例如哑铃型策略。', 'completion_criteria': '配置建议应具有操作性,并能适应多种市场情景,避免单一化或过于僵化。', 'common_issues': '建议可能过于保守或激进,无法满足多样化需求。', 'solutions': '结合历史数据和未来预测,设计灵活的配置方案,并明确适用条件。'}, {'step': 7, 'action': '总结全文,强化核心观点', 'output': '在报告结尾,重申核心观点,并简要总结各模块的主要结论,形成闭环。', 'completion_criteria': '总结部分应回应开篇核心观点,使整篇报告逻辑完整。', 'common_issues': '总结部分可能流于形式,未能有效强化核心观点。', 'solutions': '通过简短的语言回顾关键数据和结论,确保总结部分言之有物。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-13 23:30:38", "modified_time": "2025-08-13 23:30:38", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "92680cf05acb445e9a77e5a8aa078d43", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究、投资标的分析以及市场策略报告等金融分析任务。尤其适合需要结合宏观环境、市场数据和政策导向,形成综合性投资建议的场景。", "content": "[{'step': 1, 'action': '明确核心观点与分析目标', 'output': '撰写摘要部分,提炼出报告的核心结论及主要支撑点,例如市场调整原因、未来走势预期和行业配置建议。', 'completion_criteria': '核心观点清晰简洁,并能统领后续章节;包括定量(如指数涨跌幅)和定性信息(如政策预期)。', 'common_issues': '核心观点过于宽泛或缺乏数据支持。', 'solutions': '确保每个核心观点有至少一个关键数据点或逻辑链条作为支撑。'}, {'step': 2, 'action': '组织章节结构并分配优先级', 'output': '构建内容目录,将信息按逻辑顺序分为策略观点、市场数据、事件日历和风险提示四大模块。', 'completion_criteria': '章节安排符合‘从宏观到微观’的递进逻辑,优先展示对决策影响最大的信息(如全球市场表现和降息预期)。', 'common_issues': '章节间逻辑跳跃或信息冗余。', 'solutions': '通过反复审查各章节间的衔接关系,删除重复信息,强化逻辑连贯性。'}, {'step': 3, 'action': '收集并整理基础数据', 'output': '制作表格和图表,汇总全球及国内市场的关键指数表现、PMI分项指标变化等数据。', 'completion_criteria': '数据准确且来源可靠(如Wind),并以直观形式呈现(如折线图、柱状图)。', 'common_issues': '数据过时或可视化效果不佳。', 'solutions': '定期更新数据库,选择适合的数据展现方式(如同比/环比对比)。'}, {'step': 4, 'action': '展开论证与分析', 'output': '逐层递进建立观点,例如从全球权益市场调整的原因入手,逐步推导至美联储降息预期和国内制造业PMI边际走弱的影响。', 'completion_criteria': '每一步论证都有明确的因果关系,使用历史数据和预测模型支持结论。', 'common_issues': '论证过程存在逻辑漏洞或忽略重要变量。', 'solutions': '引入多方验证机制,例如交叉引用不同来源的数据或邀请同行评审。'}, {'step': 5, 'action': '提出风险因素与应对策略', 'output': '在独立章节列出潜在风险(如经济复苏不及预期、汇率波动等),并提供缓解建议。', 'completion_criteria': '风险提示全面且具有前瞻性,能够帮助读者理解不确定性的来源。', 'common_issues': '风险描述过于笼统或缺乏实际操作指导。', 'solutions': '针对每项风险设计具体情景假设,并给出量化评估方法。'}, {'step': 6, 'action': '总结投资建议与行业配置方向', 'output': '基于前述分析,提出明确的投资方向(如科技、先进制造、内需驱动领域)及相关主题配置策略。', 'completion_criteria': '建议具体可行,涵盖成长性行业和防御性板块。', 'common_issues': '建议过于理论化或脱离实际。', 'solutions': '结合客户画像定制化调整建议,确保契合其风险偏好和收益目标。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-13 23:31:47", "modified_time": "2025-08-13 23:31:47", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "85e796d04d4d4924b625052e29ba685d", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究、资产配置报告、宏观经济分析及投资策略制定等金融任务。尤其适合需要综合定量与定性信息、处理复杂政策和市场动态的场景,如关税谈判对市场的影响分析、大类资产配置建议等。", "content": "[{'step': 1, 'action': '明确核心结论和投资建议', 'output': '提炼出简洁的核心结论(如‘关税风险有望平稳过渡,利好风险资产价格’),并初步形成投资建议(如超配权益和美元)。', 'completion_criteria': '核心结论清晰且具有前瞻性,投资建议逻辑严密并与结论一致。', 'common_issues': '核心结论模糊或缺乏数据支持,导致后续分析失去方向。', 'solutions': '在撰写前确保所有团队成员对结论达成共识,并通过关键数据验证其合理性。'}, {'step': 2, 'action': '构建章节结构并分配内容优先级', 'output': '按照‘配置逻辑-权益-利率-大宗-汇率’的顺序组织报告,优先展示宏观配置逻辑和权益相关内容,随后逐步展开利率、大宗和汇率的分析。', 'completion_criteria': '章节逻辑清晰,各部分内容平衡分布,且信息展示符合‘从全局到局部’的原则。', 'common_issues': '章节间逻辑脱节或内容详略不当,影响整体流畅性。', 'solutions': '提前设计好每部分的重点内容,并确保每个章节之间有自然衔接。'}, {'step': 3, 'action': '整合定量与定性信息,突出关键数据点', 'output': '将历史数据(如股指变化、通胀率)与预测数据(如未来一个月涨跌幅预期)结合,使用图表和表格直观呈现,同时辅以定性分析(如政策解读、事件展望)。', 'completion_criteria': '数据准确无误,图表清晰易懂,定性分析与定量数据相互印证。', 'common_issues': '数据冗余或图表设计不直观,导致读者难以抓住重点。', 'solutions': '精简数据,仅保留与核心结论直接相关的内容,并优化图表设计,如添加注释说明关键趋势。'}, {'step': 4, 'action': '层层递进建立论证路径', 'output': '通过‘现状描述→政策解读→市场反应→未来展望’的逻辑链条建立观点,例如先阐述美国与其他国家关税谈判进展,再分析其对美股和美债的影响,最后提出配置建议。', 'completion_criteria': '论证逻辑连贯,每一步推导均有数据或理论支撑,且最终结论与初始假设一致。', 'common_issues': '论证跳跃过大或缺乏中间环节,使读者难以理解。', 'solutions': '增加过渡句或补充背景知识,确保每一步推导都有据可依。'}, {'step': 5, 'action': '适时引入风险因素并提供应对策略', 'output': '在讨论主要结论时,及时提及潜在风险(如‘中美关系恶化’‘政策收紧超预期’),并通过情景假设或敏感性分析探讨可能后果。', 'completion_criteria': '风险提示全面且具体,应对策略切实可行。', 'common_issues': '风险因素过于笼统或缺乏针对性,无法指导实际操作。', 'solutions': '针对不同资产类别分别列出具体风险,并结合历史案例进行分析。'}, {'step': 6, 'action': '总结并优化表达,确保结论易于传播', 'output': '用简洁语言重申核心结论和投资建议,附上关键图表作为辅助材料,确保非专业读者也能快速理解。', 'completion_criteria': '总结部分言简意赅,能够独立传达报告核心价值。', 'common_issues': '总结过于冗长或偏离主题,削弱了报告的传播效果。', 'solutions': '控制总结篇幅,聚焦于最核心的观点,并避免重复细节。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-13 23:33:40", "modified_time": "2025-08-13 23:33:40", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "23b965d319704d2180b2da3fdeddc21a", "experience_type": "text", "when_to_use": "适用于行业深度研究、政策解读报告、投资标的分析、风险评估报告等需要综合定量与定性分析的任务。", "content": "[{'step': 1, 'action': '明确分析主题并收集基础资料', 'output': '形成初步的主题框架,包括政策背景、核心目标、主要影响等。', 'criteria_for_completion': '框架覆盖所有关键要素,且逻辑清晰。', 'common_issues_and_solutions': {'issue': '信息过载导致难以聚焦。', 'solution': '优先筛选权威来源,剔除无关信息,集中于核心主题。'}}, {'step': 2, 'action': '构建报告结构并分配权重', 'output': '确定章节划分及每个部分的重点内容,例如‘总-分-总’结构。', 'criteria_for_completion': '各章节内容分配合理,优先级明确。', 'common_issues_and_solutions': {'issue': '章节之间逻辑不连贯。', 'solution': '使用过渡句连接不同部分,确保逻辑顺畅。'}}, {'step': 3, 'action': '撰写核心结论和亮点解读', 'output': '提炼政策或事件的核心结论,结合亮点解读说明其重要性。', 'criteria_for_completion': '核心结论简明扼要,亮点解读层次分明。', 'common_issues_and_solutions': {'issue': '核心结论不够突出。', 'solution': '将核心结论置于开头,并通过加粗或标题强调。'}}, {'step': 4, 'action': '分析具体领域的机会与挑战', 'output': '针对不同行业或领域,分别阐述其受益点和发展潜力。', 'criteria_for_completion': '分析全面且针对性强,涵盖定量与定性信息。', 'common_issues_and_solutions': {'issue': '缺乏量化数据支持。', 'solution': '引用权威统计数据或模型预测结果。'}}, {'step': 5, 'action': '识别风险并提出应对策略', 'output': '列举潜在风险因素,并给出相应的缓解措施。', 'criteria_for_completion': '风险提示全面且具有操作性。', 'common_issues_and_solutions': {'issue': '风险提示过于笼统。', 'solution': '细化风险类型,结合实际案例说明影响程度。'}}, {'step': 6, 'action': '添加免责声明和完善报告格式', 'output': '补充法律声明、分析师简介等内容,确保报告合规。', 'criteria_for_completion': '免责声明符合监管要求,格式统一规范。', 'common_issues_and_solutions': {'issue': '免责声明冗长复杂。', 'solution': '采用标准化模板,保持简洁易读。'}}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-13 23:35:25", "modified_time": "2025-08-13 23:35:25", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "e7791e3c40b942c2bf15381dd102edb6", "experience_type": "text", "when_to_use": "适用于全球大类资产配置的周度或月度分析、宏观经济事件驱动下的投资策略制定、多市场(商品、债券、汇率、权益)联动影响评估等任务。这些任务通常需要综合定量与定性信息,结合历史数据和未来预测,形成对市场的全面解读并提出投资建议。", "content": "[{'step': 1, 'action': '明确核心经济事件及背景环境', 'output': '提炼出当前最重要的经济事件及其对市场的潜在影响,例如非农数据爆冷、美联储政策分歧、中美贸易谈判进展等。', 'completion_criteria': '确保所有关键事件都被覆盖,并且每个事件的影响逻辑清晰可追溯。', 'common_issues': '遗漏次要但相关的事件;未能充分解释事件间的关联性。', 'solutions': '通过团队讨论补充遗漏点;建立事件-市场影响矩阵图梳理关系。'}, {'step': 2, 'action': '组织章节结构以反映分析重点', 'output': '按照‘宏观背景→各资产类别表现→风险提示’的顺序安排内容,确保逻辑连贯且易于理解。', 'completion_criteria': '每部分的内容紧密围绕主题展开,信息分布合理,避免冗余或缺失。', 'common_issues': '章节间缺乏过渡;某些资产类别分析过于简略或详尽失衡。', 'solutions': '提前规划大纲,设定每部分内容字数限制;使用跨章节引用强化逻辑衔接。'}, {'step': 3, 'action': '优先展示核心结论并分层递进论证', 'output': '在开篇直接呈现核心观点(如“非农爆冷引发降息预期”),随后逐步分解为子论点(如黄金支撑、原油波动原因等)进行详细论述。', 'completion_criteria': '核心结论突出且支持论据充足;读者能快速抓住报告主旨。', 'common_issues': '核心结论埋藏过深;论证链条断裂导致说服力不足。', 'solutions': '采用倒金字塔写作法;引入图表辅助说明复杂论据。'}, {'step': 4, 'action': '平衡定量与定性信息的分布', 'output': '对于每种资产类别,同时提供数据支持(如收益率变化、库存环比增减)和定性判断(如地缘风险升温、政策声明偏向鹰派)。', 'completion_criteria': '数据准确无误,定性分析有理有据;两者比例适当,不偏废一方。', 'common_issues': '数据堆砌过多而缺乏解读;定性分析空洞缺乏依据。', 'solutions': '设置数据可视化模板;增加案例研究增强定性分析深度。'}, {'step': 5, 'action': '适时提出风险因素并评估其可能性', 'output': '在各类资产分析完成后,单独列出风险提示部分,逐一阐述海外降息不确定性、特朗普政策风险等潜在威胁。', 'completion_criteria': '风险因素覆盖全面且排序符合重要性原则;风险评估具备前瞻性。', 'common_issues': '忽略低概率高影响事件;风险描述模糊无法量化。', 'solutions': '构建风险清单并评分排序;引入情景模拟方法量化风险敞口。'}, {'step': 6, 'action': '处理不确定性和多种可能性', 'output': '针对市场中的未知变量(如美联储降息节奏、OPEC+增产计划),设计不同假设场景并推演结果。', 'completion_criteria': '假设场景多样化且具有现实基础;推演过程严谨可信。', 'common_issues': '假设过于单一或脱离实际;推演逻辑跳跃过大。', 'solutions': '参考历史类似事件验证假设合理性;邀请专家参与讨论完善推演路径。'}, {'step': 7, 'action': '总结并展望中长期趋势', 'output': '基于短期分析,提炼出中长期市场走势的关键驱动力(如美国经济放缓、地缘冲突频发)。', 'completion_criteria': '总结简洁明了,展望具体可行;能够指导后续投资决策。', 'common_issues': '总结流于形式;展望缺乏操作性。', 'solutions': '提炼高频关键词作为总结要点;结合具体标的给出投资建议。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-13 23:36:42", "modified_time": "2025-08-13 23:36:42", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "7e3fbd4395f641028a0aa33d2282ff39", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及资本市场定期报告的制作。特别适合需要结合宏观行业动态、市场表现和个股财务数据进行综合评估的任务,同时兼顾定量与定性信息,强调逻辑递进和风险提示。", "content": "[{'step': 1, 'action': '收集并整理基础数据和新闻资讯', 'output': '形成包含资本市场新闻、行业动态、市场表现和公司公告的初步素材库。', 'completion_criteria': '确保所有信息来源可靠且最新,覆盖关键领域(如政策、技术突破、市场趋势等)。', 'common_issues': '数据不完整或滞后,信息冗余导致重点不突出。', 'solutions': '设定明确的数据筛选标准,优先选择权威来源,并通过团队协作交叉验证信息准确性。'}, {'step': 2, 'action': '组织章节结构,明确信息优先级', 'output': '设计清晰的目录结构,将核心结论和市场表现放在靠前位置,辅助信息(如个股表现、风险提示)放在后部。', 'completion_criteria': '章节安排符合逻辑递进原则,读者能快速定位到核心内容。', 'common_issues': '章节顺序混乱,导致阅读体验不佳。', 'solutions': '遵循“从宏观到微观”的信息展示逻辑,先呈现整体市场动态,再深入个股和细节。'}, {'step': 3, 'action': '构建论证逻辑,层层递进建立观点', 'output': '通过数据支持和案例分析,逐步展开对市场趋势、行业前景和个股表现的论证。', 'completion_criteria': '每个观点都有充分的数据或事实支撑,且前后逻辑连贯。', 'common_issues': '论证过程跳跃,缺乏过渡性说明。', 'solutions': '使用连接词或小段落总结,确保每一步推导自然流畅。'}, {'step': 4, 'action': '平衡定量与定性信息,合理分布历史与预测数据', 'output': '在市场表现部分以定量数据为主,辅以定性分析;在行业新闻和风险提示中加入对未来趋势的预测。', 'completion_criteria': '定量与定性信息比例均衡,历史数据与预测数据互为补充。', 'common_issues': '过于依赖单一类型信息,导致分析片面。', 'solutions': '根据任务需求设定信息比例,例如70%定量+30%定性,或60%历史+40%预测。'}, {'step': 5, 'action': '提出风险因素并讨论不确定性', 'output': '在报告末尾集中列出主要风险点,并针对多种可能性提供应对建议。', 'completion_criteria': '风险提示全面且具体,能够帮助投资者做出更谨慎的决策。', 'common_issues': '风险描述笼统,缺乏实际指导意义。', 'solutions': '结合具体案例和数据说明潜在影响,并提供缓解策略。'}, {'step': 6, 'action': '制作图表和可视化内容,增强信息传达效果', 'output': '生成直观的图表(如指数涨跌幅、成交额走势等),用以支持文字分析。', 'completion_criteria': '图表清晰易懂,与正文内容紧密相关。', 'common_issues': '图表过多或过少,分散注意力或无法有效支撑论点。', 'solutions': '限制图表数量,确保每张图表都能直接服务于某个关键结论。'}, {'step': 7, 'action': '撰写免责声明和附注,完善法律合规性', 'output': '添加免责声明、评级标准等内容,确保报告符合监管要求。', 'completion_criteria': '所有法律声明准确无误,避免引发争议。', 'common_issues': '忽略必要的法律条款,增加合规风险。', 'solutions': '参考模板并咨询法务部门,确保措辞严谨。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-13 23:38:17", "modified_time": "2025-08-13 23:38:17", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "787cd5f43dd04c1f9b25fddf13529405", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究、投资标的分析以及市场展望类报告的撰写,尤其是需要结合定量与定性信息、历史数据与未来预测,并涵盖多维度市场动态(如资金流向、估值变动、政策解读等)的任务。此外,也适合用于需要在复杂市场环境中提炼核心观点并提出配置建议的场景。", "content": "[{'step': 1, 'action': '明确核心目标和受众需求', 'output': '确定报告的核心主题(如本周A股市场回顾与展望),并明确受众为专业投资者或机构客户。', 'completion_criteria': '核心目标清晰,能够通过标题和摘要直接传达给读者。', 'common_issues': '目标过于宽泛或模糊,导致内容组织缺乏聚焦。', 'solutions': '在开始前,基于客户需求和市场热点,定义一个具体的研究问题或主题。'}, {'step': 2, 'action': '收集并整理基础数据', 'output': '获取市场行情(指数表现、风格表现、行业涨跌幅)、资金流向(成交额、换手率、北向资金、融资融券)、估值变动(PE、PB、分位数)等相关数据。', 'completion_criteria': '数据覆盖全面且准确,包括定量指标和图表展示,确保能够支持后续分析。', 'common_issues': '数据缺失或不一致,影响结论的可靠性。', 'solutions': '建立标准化的数据采集流程,并使用权威来源(如Wind、交易所公开数据)。'}, {'step': 3, 'action': '按逻辑结构组织章节', 'output': '将报告分为三个主要部分:(1) 当前市场回顾(指数、资金流向、估值);(2) 投资展望(短期、中期、长期趋势分析);(3) 风险提示及配置建议。', 'completion_criteria': '各章节层次分明,内容递进合理,符合从现状到未来的逻辑顺序。', 'common_issues': '章节安排混乱,无法引导读者逐步理解分析思路。', 'solutions': '遵循“现状→原因→展望”的叙事逻辑,确保每部分内容紧密衔接。'}, {'step': 4, 'action': '优先呈现关键结论', 'output': '在开头用简短段落总结核心观点,例如本周市场震荡调整的原因、主要资金动向、估值变化趋势等。', 'completion_criteria': '核心结论突出,能在1分钟内让读者快速掌握重点。', 'common_issues': '关键信息埋藏在细节中,难以被迅速抓住。', 'solutions': '采用倒金字塔结构,先呈现最重要的发现,再展开详细分析。'}, {'step': 5, 'action': '平衡定量与定性分析', 'output': '结合量化数据(如PE、PB分位数、资金流入流出规模)与定性判断(如政策解读、行业趋势),形成综合视角。', 'completion_criteria': '定量数据与定性分析相互印证,避免单一维度导致的片面性。', 'common_issues': '过度依赖定量数据而忽略背景因素,或反之过于主观缺乏数据支撑。', 'solutions': '对每一项定性论点均提供相应的数据支持,同时解释数据背后的驱动因素。'}, {'step': 6, 'action': '层层递进建立论证路径', 'output': '从市场表现出发,逐步深入探讨背后的原因(如政策、经济数据、国际事件),最后引出对未来走势的预测。', 'completion_criteria': '论证过程环环相扣,每个推论都有充分依据,且无跳跃式推理。', 'common_issues': '论证链条断裂,导致结论可信度下降。', 'solutions': '在每一步推导中加入过渡句,说明当前分析如何导向下一步。'}, {'step': 7, 'action': '适时引入风险提示', 'output': '在讨论投资机会之后,单独列出潜在风险(如政策效果不确定、地缘因素扰动等),并评估其可能影响。', 'completion_criteria': '风险提示既不过于笼统也不过分夸大,能有效帮助决策者权衡利弊。', 'common_issues': '忽视风险或将其弱化处理,降低报告的专业性。', 'solutions': '设置专门的风险提示模块,系统梳理各类不确定性因素。'}, {'step': 8, 'action': '提出具体配置建议', 'output': '基于分析结果,给出明确的投资方向(如反内卷概念、科技成长板块、高股息资产等)及其逻辑支撑。', 'completion_criteria': '配置建议具有可操作性,且与前面的分析保持一致。', 'common_issues': '建议空泛或脱离实际,无法指导具体投资行动。', 'solutions': '针对不同资产类别分别阐述理由,并附上相关行业/个股筛选标准。'}, {'step': 9, 'action': '可视化辅助表达', 'output': '制作高质量图表(如指数涨跌幅图、资金流向图、估值分位数分布图)以直观展示数据分析结果。', 'completion_criteria': '图表设计简洁明了,能显著提升信息传递效率。', 'common_issues': '图表过多或过少,分散注意力或未能充分支撑文字内容。', 'solutions': '根据内容需求选择最能体现关键信息的图表类型,避免堆砌。'}, {'step': 10, 'action': '校验与优化语言表述', 'output': '检查报告的语言是否流畅、术语是否规范,确保内容易于理解且专业性强。', 'completion_criteria': '语言精准,无歧义,且整体阅读体验良好。', 'common_issues': '语言晦涩难懂或存在语法错误,削弱专业形象。', 'solutions': '邀请同事进行交叉审阅,重点关注逻辑连贯性和措辞准确性。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-13 23:40:04", "modified_time": "2025-08-13 23:40:04", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "f499eb25cdee4ac889d4eff9bf979f47", "experience_type": "text", "when_to_use": "适用于行业深度研究、投资标的分析、风险评估报告等需要全面、系统分析的任务。", "content": "[{'step': 1, 'action': '收集和整理最新宏观和行业动态信息。', 'output': '形成包含关键事件、数据和政策变化的初步信息汇总。', 'completion_criteria': '所有相关信息均被涵盖,无遗漏重要动态。', 'common_issues': '信息来源不全或数据过时。', 'solutions': '建立稳定的信息渠道,定期更新数据库。'}, {'step': 2, 'action': '按优先级排序信息,将核心结论和最新动态置于报告开头。', 'output': '清晰呈现最关键信息,引导读者快速把握重点。', 'completion_criteria': '核心结论明确且突出,读者能迅速理解主要内容。', 'common_issues': '信息堆砌,缺乏条理。', 'solutions': '使用金字塔原理,先总后分,逐层展开。'}, {'step': 3, 'action': '结合定量和定性分析,展示历史数据与未来预测。', 'output': '生成包含数据图表、趋势分析和专家点评的综合分析部分。', 'completion_criteria': '数据准确,分析合理,预测有据可依。', 'common_issues': '数据不准确或分析过于主观。', 'solutions': '严格校验数据,引用权威来源,保持客观立场。'}, {'step': 4, 'action': '构建多层次论证逻辑,从宏观到微观逐步细化。', 'output': '形成逻辑严密、层次分明的分析框架。', 'completion_criteria': '各部分紧密衔接,观点层层递进。', 'common_issues': '逻辑混乱,论证不充分。', 'solutions': '制定清晰的论证路径,反复推敲逻辑关系。'}, {'step': 5, 'action': '识别并讨论潜在风险因素,提出应对策略。', 'output': '生成专门的风险提示部分,集中讨论可能影响的因素。', 'completion_criteria': '风险因素全面且有针对性,应对策略切实可行。', 'common_issues': '忽略重要风险或应对措施空泛。', 'solutions': '广泛调研,结合实际情况制定具体方案。'}, {'step': 6, 'action': '总结并提出明确的投资建议或决策依据。', 'output': '生成最终结论和建议部分,为读者提供行动指南。', 'completion_criteria': '建议具体且有操作性,能指导实际决策。', 'common_issues': '建议模糊或缺乏依据。', 'solutions': '基于前文分析得出结论,确保建议与数据一致。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-13 23:41:23", "modified_time": "2025-08-13 23:41:23", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "6e968566ecad47d0a578241b683014a4", "experience_type": "text", "when_to_use": "此规划框架适用于制作金融市场的日常分析报告(如市场日报、周报)、行业动态跟踪报告或短期投资策略建议。特别适合需要快速整合定量与定性信息,提供清晰的投资观点和风险提示的场景。", "content": "[{'step': 1, 'action': '明确报告目标和受众', 'output': '定义报告的核心目的(如为投资者提供当日市场动态和投资建议),并确定目标读者(如专业投资者或普通投资者)。', 'criteria_for_success': '目标清晰且符合受众需求,能直接指导后续内容组织。', 'common_issues': '目标过于宽泛或模糊,导致内容组织缺乏重点。', 'solution': '在撰写前与团队或客户确认报告的具体用途和预期成果。'}, {'step': 2, 'action': '收集和整理数据', 'output': '从可靠来源(如Wind、交易所数据)获取市场指数、行业表现、板块涨跌等定量数据,同时整理相关定性信息(如政策变化、市场情绪)。', 'criteria_for_success': '数据全面、准确且及时,能够支撑后续分析。', 'common_issues': '数据不完整或过时,影响分析的可信度。', 'solution': '建立数据校验机制,确保数据来源的权威性和时效性。'}, {'step': 3, 'action': '设计报告结构', 'output': '按照逻辑顺序组织章节,通常包括市场回顾、行业/板块分析、投资要点和风险提示。', 'criteria_for_success': '章节安排合理,信息展示优先级明确,核心结论易于识别。', 'common_issues': '章节间逻辑不连贯,信息堆砌无重点。', 'solution': '使用金字塔原理,先呈现核心结论,再逐步展开支持性细节。'}, {'step': 4, 'action': '撰写市场回顾部分', 'output': '以图表和简短文字描述市场整体表现,包括主要指数涨跌幅、行业涨跌分布及个股表现。', 'criteria_for_success': '数据可视化清晰,文字描述简洁明了,突出关键趋势。', 'common_issues': '图表信息过多或过少,文字描述冗长或缺乏深度。', 'solution': '每张图表配以不超过3句话的说明,聚焦于最重要的市场动态。'}, {'step': 5, 'action': '分析行业和板块表现', 'output': '对领涨和领跌行业进行深入分析,结合历史数据和当前市场环境解释原因。', 'criteria_for_success': '分析有理有据,能够揭示行业表现背后的驱动因素。', 'common_issues': '分析流于表面,缺乏对行业基本面的深入探讨。', 'solution': '结合宏观经济、政策导向和行业周期性因素进行多维度分析。'}, {'step': 6, 'action': '提炼投资要点', 'output': '基于市场和行业分析,提出具体的投资建议(如关注军工、机械设备等行业)。', 'criteria_for_success': '建议具体可行,能够直接指导投资决策。', 'common_issues': '建议过于笼统,缺乏实际操作性。', 'solution': '结合定量数据和定性判断,提供明确的标的或策略建议。'}, {'step': 7, 'action': '加入风险提示', 'output': '列出可能影响市场的风险因素(如政策不确定性、外部经济环境变化)。', 'criteria_for_success': '风险提示全面且客观,能够帮助投资者规避潜在损失。', 'common_issues': '风险提示过于简单或遗漏关键风险点。', 'solution': '参考历史案例和当前市场环境,系统性梳理潜在风险。'}, {'step': 8, 'action': '审核和优化报告', 'output': '检查报告的逻辑性、数据准确性和语言表达,确保内容无误。', 'criteria_for_success': '报告内容无错误,表述清晰流畅,格式统一。', 'common_issues': '遗漏重要信息或存在语言表述问题。', 'solution': '由第二人进行交叉审核,重点关注数据和逻辑一致性。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-13 23:42:33", "modified_time": "2025-08-13 23:42:33", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "3514612d5a5040c6a2b55cbfe66df0d9", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、短期市场分析报告、投资策略建议以及风险评估报告等任务。尤其适合需要结合定量数据和定性分析的场景,涵盖宏观经济环境、行业动态及个股/行业的投资建议。", "content": "[{'step': 1, 'action': '明确分析目标与受众', 'output': '定义报告的核心主题(如A股市场走势分析)、目标读者(如机构投资者)以及核心信息需求(如短期市场趋势与投资机会)。', 'completion_criteria': '报告主题清晰,能够直接回答目标读者的核心关切;受众需求被具体化为可操作的分析维度(如市场走势、行业表现、政策影响等)。', 'common_issues': '分析目标过于宽泛或模糊,导致后续章节结构混乱。', 'solutions': '通过与客户或团队沟通,明确报告的具体用途和预期成果,确保目标聚焦。'}, {'step': 2, 'action': '收集并整理基础数据', 'output': '从权威来源(如Wind、交易所数据)获取定量数据(如指数涨跌幅、成交量、市盈率)和定性信息(如政策声明、行业新闻),并将数据分类整理。', 'completion_criteria': '数据完整且准确,涵盖所有关键指标(如市场表现、行业分布、资金流向等),并按时间序列或逻辑关系排序。', 'common_issues': '数据来源不一致或覆盖范围不足,可能导致结论偏差。', 'solutions': '建立数据核查机制,确保使用权威、可靠的数据源,并对异常值进行验证和说明。'}, {'step': 3, 'action': '设计章节结构以突出逻辑递进', 'output': '按照“总-分-总”结构组织报告:开篇概述市场整体走势,随后分章节分析行业表现、资金流向、政策影响等细节,最后总结投资建议。', 'completion_criteria': '章节安排符合逻辑递进原则,核心结论在首尾部分得到强化,各章节内容紧密围绕主题展开。', 'common_issues': '章节间缺乏连贯性,或重点内容被次要信息掩盖。', 'solutions': '采用提纲先行的方法,确保每章节有明确的目标和产出;优先展示高价值信息。'}, {'step': 4, 'action': '量化市场表现并识别关键驱动因素', 'output': '基于定量数据(如指数涨跌幅、成交金额)描述市场整体走势,并结合定性分析(如政策导向、国际环境)解释背后的原因。', 'completion_criteria': '市场表现的描述准确无误,驱动因素的分析逻辑清晰且有数据支持。', 'common_issues': '过度依赖单一数据点或忽略潜在的多因素交互作用。', 'solutions': '使用多维度数据分析方法,结合历史对比和行业交叉验证,提升结论的全面性。'}, {'step': 5, 'action': '评估行业与个股表现', 'output': '分析不同行业和板块的表现(如通信设备领涨),并结合资金流向和估值水平判断其投资价值。', 'completion_criteria': '行业表现分析覆盖主要板块,资金流向和估值数据支持结论,且逻辑自洽。', 'common_issues': '忽略行业间的关联性或未充分考虑估值合理性。', 'solutions': '引入行业轮动模型或相对估值法,增强分析的科学性和实用性。'}, {'step': 6, 'action': '提出投资建议并管理风险', 'output': '基于前述分析,提出具体的投资建议(如关注通信设备、消费电子等行业),同时列出潜在风险(如海外经济衰退、政策变化)。', 'completion_criteria': '投资建议具有可操作性,风险提示全面且及时,能够帮助投资者形成平衡决策。', 'common_issues': '建议过于笼统或忽视风险因素,导致实际指导意义不足。', 'solutions': '将建议细化到具体行业或标的,并针对每项建议附带明确的风险应对措施。'}, {'step': 7, 'action': '可视化数据以增强信息传递效果', 'output': '制作图表(如市盈率变化图、成交金额趋势图)辅助说明关键数据和结论。', 'completion_criteria': '图表简洁直观,能够有效支持文字内容,避免信息冗余或误导。', 'common_issues': '图表设计复杂或与正文内容脱节,降低报告易读性。', 'solutions': '遵循“一图一意”原则,确保每张图表只传递一个核心信息,并配以简明注释。'}, {'step': 8, 'action': '撰写总结与展望', 'output': '总结当前市场特征和核心结论,并展望未来可能的变化方向(如科技成长与周期制造主线)。', 'completion_criteria': '总结提炼精炼且全面,展望具有前瞻性和启发性。', 'common_issues': '总结流于形式,缺乏深度或独特见解。', 'solutions': '结合最新市场动态和长期趋势,提供差异化视角和洞察。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-13 23:44:16", "modified_time": "2025-08-13 23:44:16", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "d16300334e5a4891b7e1221e9b27b7de", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、市场大势研判、投资组合策略分析等需要综合定量与定性信息的金融分析任务。它特别适合于需要结合宏观经济数据、政策解读和市场表现进行多维度分析的场景。", "content": "[{'step': 1, 'action': '明确分析目标并收集基础数据', 'output': '确定核心分析目标(如市场趋势、板块轮动)并整理相关数据,包括指数表现、成交量、板块涨跌幅、概念板块表现等。', 'completion_criteria': '确保数据覆盖全面且来源可靠,并能清晰反映当前市场的整体状况。', 'common_issues': '数据不完整或来源不可靠可能导致结论偏差。', 'solutions': '建立数据验证机制,例如交叉引用多个权威数据源,并注明数据采集时间点以保证时效性。'}, {'step': 2, 'action': '组织章节结构并分配信息优先级', 'output': '设计报告结构,通常分为市场表现、板块排名、后市展望和风险提示四部分,按照从宏观到微观、从现状到未来的逻辑展开。', 'completion_criteria': '章节间逻辑连贯,信息分布合理,重点突出(如市场表现和后市展望为核心内容)。', 'common_issues': '章节安排混乱或信息堆砌导致读者难以抓住重点。', 'solutions': '使用视觉化工具(如表格、图表)辅助展示关键数据,同时在每章开头简要说明该部分内容的核心价值。'}, {'step': 3, 'action': '整合定量与定性分析,构建论证链条', 'output': '通过历史数据(如指数走势、成交量变化)和政策解读(如免费学前教育政策、金融支持新型工业化意见),逐步推导出对未来市场趋势的判断。', 'completion_criteria': '论证过程层次分明,能够清晰解释市场现象背后的驱动因素。', 'common_issues': '缺乏对定性信息的深入解读,或过于依赖单一数据点。', 'solutions': '引入多角度分析方法,例如对比不同时间段的历史数据,结合专家访谈或政策文件解读增强说服力。'}, {'step': 4, 'action': '提出风险因素并处理不确定性', 'output': '在后市展望中提前预警可能的风险(如海外经济超预期下滑、中美贸易摩擦恶化),并通过情景假设法探讨多种可能性。', 'completion_criteria': '风险提示具体且具有针对性,能够帮助投资者制定应对策略。', 'common_issues': '风险描述过于笼统或忽略潜在的重大风险。', 'solutions': '采用系统化的风险评估框架(如PEST分析),并结合近期市场动态和政策变化更新风险清单。'}, {'step': 5, 'action': '总结核心观点并提供操作建议', 'output': '提炼报告中的关键发现(如短期震荡反复但长期向好),给出明确的投资建议(如关注金融、有色金属等行业)。', 'completion_criteria': '核心观点简洁有力,操作建议切实可行,符合客户的风险偏好和投资目标。', 'common_issues': '建议过于泛泛而谈或脱离实际市场环境。', 'solutions': '基于客户需求定制化建议,例如根据不同投资者类型(保守型、积极型)调整推荐标的和配置比例。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-13 23:45:54", "modified_time": "2025-08-13 23:45:54", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "16a08092512f4507815b09bc8ca30d22", "experience_type": "text", "when_to_use": "该规划框架适用于行业景气度分析、投资组合构建及资产配置建议等金融任务,尤其适合需要结合定量模型与定性分析进行高频跟踪和预测的场景。", "content": "[{'step': 1, 'action': '明确研究目标和范围', 'output': '确定分析的核心主题(如中观景气度高频跟踪)、覆盖的行业板块(如上游、中游、下游、金融房建、支持服务)以及时间跨度(如周度、月度、季度数据)。', 'how_to_judge': '是否清晰定义了研究问题,并确保所有相关行业和指标均被覆盖。', 'common_issues': ['研究目标过于宽泛,导致分析缺乏聚焦。', '遗漏重要行业或关键指标。'], 'solutions': ['在初期阶段与团队或客户确认核心需求。', '基于历史经验和行业分类标准,列出完整的研究框架。']}, {'step': 2, 'action': '收集并整理数据', 'output': '从可靠数据源(如Wind数据库)获取定量和定性数据,包括但不限于价格、产量、销量、开工率、库存、出口量等指标,按行业分类整理成表格形式。', 'how_to_judge': '数据是否全面且准确,是否按照统一格式进行分类和标注。', 'common_issues': ['数据来源不可靠或存在滞后性。', '数据清洗不彻底,导致后续分析误差。'], 'solutions': ['优先选择权威数据平台,并定期验证数据质量。', '使用自动化工具进行数据清洗和标准化处理。']}, {'step': 3, 'action': '建立定量模型并生成预测结果', 'output': '基于已有数据,应用统计学或机器学习模型(如时间序列分析、回归模型等),预测未来一段时间内各行业的表现趋势,形成候选行业列表。', 'how_to_judge': '模型是否具备较高的解释力和预测能力,预测结果是否具有可操作性。', 'common_issues': ['模型过度拟合历史数据,导致预测偏差。', '忽略外部宏观环境对模型的影响。'], 'solutions': ['通过交叉验证优化模型参数。', '引入宏观经济变量作为补充输入,增强模型鲁棒性。']}, {'step': 4, 'action': '分板块进行景气度跟踪', 'output': '将所有行业划分为若干板块(如上游、中游、下游等),分别展示每个板块的关键景气度指标变化情况,用图表辅助说明。', 'how_to_judge': '板块划分是否合理,信息呈现是否直观易懂。', 'common_issues': ['板块间界限模糊,导致重复分析。', '图表设计复杂,难以快速抓住重点。'], 'solutions': ['参考行业分类标准(如申万行业分类),确保逻辑清晰。', '采用简洁明了的可视化方式,例如柱状图、折线图等。']}, {'step': 5, 'action': '整合核心结论并提出投资建议', 'output': '综合定量预测和定性分析,提炼出未来表现较优的行业及其逻辑支撑,同时给出具体的投资配置建议(如行业组合持仓策略)。', 'how_to_judge': '结论是否基于充分的数据支持,投资建议是否具有实操价值。', 'common_issues': ['结论与数据分析脱节,缺乏说服力。', '投资建议过于笼统,无法落地执行。'], 'solutions': ['每条结论都需回溯至具体数据点,确保逻辑闭环。', '细化建议内容,例如提供权重分配比例或时间窗口。']}, {'step': 6, 'action': '识别并提示潜在风险', 'output': '系统梳理可能影响预测准确性的风险因素(如市场波动性、政策变化、模型局限性等),并在报告末尾单独列出风险提示。', 'how_to_judge': '风险提示是否全面且针对性强,是否能帮助读者规避潜在损失。', 'common_issues': ['风险提示流于形式,未能触及实质问题。', '忽略新兴风险或非传统风险。'], 'solutions': ['结合当前市场热点和历史案例,动态更新风险清单。', '邀请跨领域专家参与审阅,拓宽风险视角。']}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-13 23:47:01", "modified_time": "2025-08-13 23:47:01", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "dc3f242355824234b69677e968f15531", "experience_type": "text", "when_to_use": "该规划框架适用于金融领域的策略绩效评估、投资组合分析和市场趋势研究,特别是涉及ESG(环境、社会与治理)相关主题的深度研究报告。这类任务通常需要结合定量数据分析、定性风险评估以及对未来市场表现的预测。", "content": "[{'step': 1, 'action': '明确目标与范围', 'output': '定义报告的核心目标(如评估ESG筛选策略的表现)、覆盖的时间段(如最近一个月或成立以来的整体表现),以及关键指标(如总回报率、夏普比率等)。', 'how_to_judge_completion': '是否清晰列出了研究目的、时间范围和核心关注点,并且这些内容能够引导后续章节展开。', 'common_problems': '目标模糊导致信息堆砌;解决方法是通过团队讨论确定优先级并聚焦于最具决策价值的信息。'}, {'step': 2, 'action': '构建结构化框架', 'output': '设计逻辑清晰的报告结构,包括摘要、策略观察、市场行情分析、估值情况、附录及风险提示等部分,确保每部分内容都有明确的功能定位。', 'how_to_judge_completion': '各章节之间是否存在自然过渡,信息分布是否均衡,是否能帮助读者快速抓住重点。', 'common_problems': '章节安排混乱,缺乏层次感;解决方法是对每一部分进行功能归类,并按重要性和逻辑顺序排列。'}, {'step': 3, 'action': '收集并整理数据', 'output': '从权威来源(如Wind数据库)获取定量数据(如收益率、波动率)和定性信息(如政策变化、市场情绪),并将其分类存储以备使用。', 'how_to_judge_completion': '数据是否全面、准确,是否包含多个维度(历史/当前/预测),并且已按统一格式整理。', 'common_problems': '数据缺失或不一致;解决方法是建立标准化的数据清洗流程,并设置复核机制。'}, {'step': 4, 'action': '分析策略表现', 'output': '对不同策略(如ESG筛选策略、舆情整合策略)进行详细的绩效分解,计算关键指标(如相对回报、最大回撤、夏普比率),并通过图表展示结果。', 'how_to_judge_completion': '是否用直观的方式呈现了策略的优势与劣势,是否提供了充分的上下文解释。', 'common_problems': '分析过于复杂难以理解;解决方法是简化语言表达,同时辅以可视化工具增强可读性。'}, {'step': 5, 'action': '对比与关联分析', 'output': '将不同策略的表现与基准指数(如沪深300、万得全A)或其他策略进行比较,揭示其超额收益或不足之处,并探讨背后的原因。', 'how_to_judge_completion': '是否有效突出了策略的独特性及其相对于其他选项的价值主张。', 'common_problems': '对比缺乏深度;解决方法是增加多角度分析,例如引入行业背景、宏观经济因素等外部变量。'}, {'step': 6, 'action': '识别与管理风险', 'output': '在适当位置(如专门的风险提示章节)列出潜在风险因素(如政策不确定性、市场情绪波动),并提出应对建议。', 'how_to_judge_completion': '风险描述是否具体、合理,是否有针对性地提出了缓解措施。', 'common_problems': '忽视某些隐性风险;解决方法是采用头脑风暴法系统梳理所有可能的风险点。'}, {'step': 7, 'action': '总结与展望', 'output': '提炼核心结论,强调策略的主要优势和局限性,同时对未来趋势做出简要预测,为投资者提供行动指南。', 'how_to_judge_completion': '总结是否精炼有力,能否让读者迅速掌握全文要点,以及是否激发进一步思考。', 'common_problems': '总结冗长无重点;解决方法是限制篇幅,仅保留最关键的观点和支持证据。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-13 23:48:12", "modified_time": "2025-08-13 23:48:12", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "f1c67e24107f47d7a5e4c20ec7a12e5d", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究、投资标的分析以及市场策略报告等金融分析任务。尤其适合需要结合定量与定性数据,通过历史规律和当前趋势推导未来市场机会的场景。", "content": "[{'step': 1, 'action': '明确分析目标并定义核心问题', 'output': '清晰的研究目标和问题陈述,例如‘8月市场轻指数重结构’的核心观点。', 'completion_criteria': '目标是否具体且可操作,是否能指导后续章节安排。', 'common_issues': '目标过于宽泛或模糊,导致后续章节缺乏逻辑主线。', 'solution': '通过团队讨论或客户反馈确认目标,并以一句话总结核心结论作为指引。'}, {'step': 2, 'action': '组织章节结构并分配优先级', 'output': '完整的目录和内容框架,包括大势与风格、中观行业与景气、风险提示等部分。', 'completion_criteria': '章节是否按逻辑顺序递进,信息展示是否符合从宏观到微观的层次。', 'common_issues': '章节间存在重复或逻辑断层,信息分布不均衡。', 'solution': '采用‘总-分-总’结构,先概述整体市场趋势,再深入细分领域,最后总结风险和建议。'}, {'step': 3, 'action': '收集和整理相关数据与信息', 'output': '全面的数据表格、图表和引用来源,如PMI数据、行业表现、资金流向等。', 'completion_criteria': '数据是否准确、全面且具有时效性,是否支持核心观点。', 'common_issues': '数据来源单一或过时,无法支撑分析结论。', 'solution': '多渠道验证数据,优先使用权威机构发布的最新数据,并注明来源。'}, {'step': 4, 'action': '构建论证逻辑并提出观点', 'output': '基于数据分析得出的观点和支持性论据,如‘低估值、弱盈利、小市值为占优风格’。', 'completion_criteria': '观点是否有充分的数据和逻辑支持,是否层层递进。', 'common_issues': '观点与数据脱节,或论证过程跳跃性过大。', 'solution': '采用‘数据→现象→原因→预测’的逻辑链条,逐步建立观点。'}, {'step': 5, 'action': '平衡定量与定性信息,突出核心结论', 'output': '核心结论在摘要和正文中多次强调,如‘科技成长有望迎来反弹机会’。', 'completion_criteria': '核心结论是否在开头、中间和结尾均有体现,是否易于理解。', 'common_issues': '核心结论被次要信息淹没,导致读者难以抓住重点。', 'solution': '将核心结论放在显眼位置(如摘要和标题),并在正文中用粗体或颜色标注。'}, {'step': 6, 'action': '识别和处理不确定性和多种可能性', 'output': '对潜在风险因素的详细说明及应对策略,如‘政策落地不及预期’的风险提示。', 'completion_criteria': '是否涵盖主要风险点,是否提供具体的应对方案。', 'common_issues': '风险描述过于笼统,缺乏实际操作建议。', 'solution': '列出所有可能的风险,逐一分析其影响程度,并提出针对性措施。'}, {'step': 7, 'action': '制作可视化图表和附录', 'output': '高质量的图表和附录,如AI产业链配置模型Top10行业列表。', 'completion_criteria': '图表是否直观易懂,是否与正文内容紧密相关。', 'common_issues': '图表质量差或与正文脱节,增加阅读负担。', 'solution': '确保图表设计简洁明了,必要时添加注释说明关键点。'}, {'step': 8, 'action': '审查和优化报告语言表达', 'output': '经过润色的语言表达,避免歧义和冗长句式。', 'completion_criteria': '报告是否流畅、专业,是否无明显语法错误。', 'common_issues': '语言晦涩难懂或存在拼写/语法错误。', 'solution': '由专业编辑审阅全文,重点关注语言精炼度和术语准确性。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-13 23:49:52", "modified_time": "2025-08-13 23:49:52", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "149ca1f2bf9a4cd38bb8a817d9f78bde", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究、宏观经济形势分析、投资策略制定及风险评估报告等金融分析任务。尤其适合需要结合国内外经济数据、政策动态、市场情绪和行业趋势,为投资者提供前瞻性建议的场景。", "content": "[{'step': 1, 'action': '明确分析目标与核心问题', 'output': '清晰界定本次分析的核心议题,包括国内与国际经济形势的关键变量(如政治局会议、非农就业数据)以及其对市场的潜在影响。', 'criteria_for_completion': '是否明确列出了分析的重点主题,并且每个主题都直接服务于最终的投资建议或策略输出。', 'common_issues': '可能忽略次要但重要的变量,导致分析不够全面。', 'solutions': '采用头脑风暴法列出所有相关变量,并根据优先级筛选出最相关的内容。'}, {'step': 2, 'action': '收集并整理基础数据与信息', 'output': '系统性地收集国内外宏观经济数据(如PMI、非农就业、失业率)、政策动态(如政治局会议决议、FOMC声明)和高频指标(如地铁客运量、工业生产腾落指数)。', 'criteria_for_completion': '数据来源可靠、覆盖全面,且按时间序列或逻辑结构整理完毕,便于后续分析。', 'common_issues': '数据不完整或更新滞后,可能导致结论偏差。', 'solutions': '建立固定的数据跟踪机制,定期更新关键指标数据库,并交叉验证数据来源。'}, {'step': 3, 'action': '构建章节结构与信息优先级排序', 'output': '设计报告框架,分为国内经济、国际经济、行业配置建议三个主要部分,确保从宏观到微观层层递进,同时突出核心结论和投资建议。', 'criteria_for_completion': '报告结构逻辑清晰,重点内容(如政治局会议、非农数据)在开头部分优先呈现,支持快速抓住关键信息。', 'common_issues': '章节安排混乱,容易让读者迷失在细节中。', 'solutions': '提前拟定提纲,邀请同事或客户反馈,优化信息展示顺序。'}, {'step': 4, 'action': '定量与定性分析相结合', 'output': '通过图表展示定量数据(如PMI分项、非农新增就业人数),结合定性分析(如政策解读、地缘冲突影响)解释数据背后的趋势和驱动因素。', 'criteria_for_completion': '每项数据分析都有明确的结论,且定量与定性部分相互支撑,形成完整论证链条。', 'common_issues': '定量与定性分析脱节,无法有效呼应。', 'solutions': '针对每一组数据提出具体问题,用定性分析回答这些问题,确保两者紧密关联。'}, {'step': 5, 'action': '识别风险因素并适时引入', 'output': '在分析过程中适时提及潜在风险(如地缘冲突超预期、海外通胀持续性超预期),并通过情景假设探讨其可能影响。', 'criteria_for_completion': '风险提示贯穿全文,既不过于前置削弱信心,也不过于后置忽视预警作用。', 'common_issues': '风险提示过于笼统,缺乏针对性。', 'solutions': '针对每项核心结论逐一检查是否存在未覆盖的风险点,并补充详细说明。'}, {'step': 6, 'action': '提炼核心观点与行动建议', 'output': '基于前述分析,提炼出明确的投资主线(如科技AI+、消费估值修复、低估红利崛起),并给出具体行业配置建议(如重视恒生互联网)。', 'criteria_for_completion': '核心观点简洁明了,行动建议具有实操性,能够指导实际投资决策。', 'common_issues': '建议过于泛泛,缺乏可执行性。', 'solutions': '将建议细化到具体标的或策略层面,并附上实施路径和监控指标。'}, {'step': 7, 'action': '撰写总结与展望', 'output': '总结当前分析的主要发现,并对未来重要事件(如下一次FOMC会议、重大政策发布)进行前瞻,提醒关注潜在变化。', 'criteria_for_completion': '总结全面概括了前文要点,展望部分提供了新的观察视角或行动方向。', 'common_issues': '总结流于形式,未能真正归纳核心价值。', 'solutions': '采用“总-分-总”结构,确保总结部分既能回溯前文,又能启发未来思考。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-13 23:51:01", "modified_time": "2025-08-13 23:51:01", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "1ba51c63bc844b1991e7873bd24988ab", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及市场趋势预测类金融分析任务。尤其适合需要结合定量与定性数据,从宏观到微观逐步递进的复杂研究报告制作场景。", "content": "[{'step': 1, 'action': '明确报告主题与核心观点', 'output': '确定本周的核心观点,例如‘工业X射线检测高景气’和‘可降解餐饮具前景广阔’,并围绕这些主题组织内容。', 'criteria_for_completion': '核心观点清晰且具有前瞻性,能够为后续章节提供逻辑支撑;各章节标题直接关联核心观点。', 'common_pitfalls': '核心观点过于宽泛或缺乏数据支持。', 'solutions': '通过初步数据分析验证假设,并确保观点聚焦于当前市场热点或未来趋势。'}, {'step': 2, 'action': '构建章节结构并分配优先级', 'output': '将报告分为‘本周观点’、‘市场表现’、‘重大事项’、‘专题分析’和‘推荐主题’等模块,按照重要性和逻辑顺序排列。', 'criteria_for_completion': '章节布局合理,信息优先级分明;定量与定性信息分布均衡,历史数据与预测展望有机结合。', 'common_pitfalls': '章节间逻辑不连贯,或关键信息被弱化。', 'solutions': '提前设计整体框架图,确保每个模块既独立又服务于全局;在初稿完成后重新审视章节间的过渡是否自然流畅。'}, {'step': 3, 'action': '收集并整理基础数据与案例', 'output': '获取相关行业的最新数据(如市场规模、政策动态)、个股业绩表现及市场事件,形成详实的数据支撑。', 'criteria_for_completion': '数据来源可靠,覆盖全面;对不同来源的信息进行交叉验证以保证准确性。', 'common_pitfalls': '数据陈旧或片面,导致结论失真。', 'solutions': '建立标准化数据采集流程,定期更新数据库;引入第三方权威机构发布的统计数据作为补充。'}, {'step': 4, 'action': '展开多层次论证,提出风险提示', 'output': '通过层层递进的方式阐述观点,例如从下游需求旺盛到具体公司订单增长,再到技术突破;同时适时提及潜在风险因素,如宏观经济波动或政策调整。', 'criteria_for_completion': '论证路径清晰,观点环环相扣;风险提示时机恰当,避免过度渲染负面信息影响整体基调。', 'common_pitfalls': '论证过程跳跃性强,缺乏逻辑衔接;风险提示要么过早干扰主线,要么过晚显得仓促。', 'solutions': '采用‘问题-原因-解决’的三段式论证方法;风险提示应放在论证充分后,作为补充说明而非主导内容。'}, {'step': 5, 'action': '平衡不确定性和多种可能性', 'output': '针对未来发展趋势给出多个情景假设,例如‘若禁限塑政策进一步推进,则可降解塑料渗透率将持续提升’,并基于概率评估其影响。', 'criteria_for_completion': '不确定性表述客观中立,多情景假设涵盖主要变量;最终建议兼顾稳健性与灵活性。', 'common_pitfalls': '忽略次要但可能颠覆性的变量,导致分析不够全面。', 'solutions': '运用敏感性分析工具识别关键变量;邀请团队成员参与头脑风暴,挖掘潜在盲点。'}, {'step': 6, 'action': '生成总结性推荐意见', 'output': '根据前述分析提炼出具体的投资建议,包括重点推荐的主题和个股,例如‘智能汽车’、‘高端制造’等方向及其代表性企业。', 'criteria_for_completion': '推荐意见具有操作性,能指导实际投资决策;个股选择依据充分,包含财务指标、估值水平等多维度考量。', 'common_pitfalls': '推荐意见空洞无物,缺乏具体执行路径。', 'solutions': '为每项推荐意见附上详细的分析支持材料;设置内部审核机制,确保推荐内容经得起推敲。'}, {'step': 7, 'action': '复核与优化报告质量', 'output': '检查报告的语言表达、图表呈现以及格式规范,确保内容精炼准确且视觉效果良好。', 'criteria_for_completion': '语言简练无歧义,图表直观易懂;整篇报告风格统一,符合专业标准。', 'common_pitfalls': '忽视细节错误,如错别字、图表标注不清等,降低报告可信度。', 'solutions': '实行双人校对制度,一人负责内容核查,另一人专注形式审查;利用自动化工具辅助排版与校正。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-13 23:52:10", "modified_time": "2025-08-13 23:52:10", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "02deaa65ed404da69723e5b665f3bf9d", "experience_type": "text", "when_to_use": "此规划框架适用于金融市场的日常策略分析、大类资产跟踪报告、投资组合建议制定,以及宏观经济与政策解读相关的分析任务。尤其适合需要整合多维度信息(如定量数据、定性分析、政策动态)并快速形成交易策略的场景。", "content": "[{'step': 1, 'action': '明确报告目标和受众需求', 'output': '确定报告的核心主题(如市场趋势、资产配置建议),明确受众(如机构投资者、个人客户)及其关注点(如风险偏好、收益预期)。', 'completion_criteria': '能够清晰列出报告的主要目标(如提供短期交易建议或中长期资产配置策略),并确认目标与受众需求一致。', 'common_issues': '目标过于宽泛或模糊,导致后续内容组织散乱。', 'solutions': '在开始前通过团队讨论或客户沟通明确核心目标,并将其作为后续每一步的指导原则。'}, {'step': 2, 'action': '收集和整理相关数据与信息', 'output': '从公开市场数据(如利率、股指、商品价格)、政策动态(如新闻、政府声明)和行业研究中提取关键信息,并分类存储为定量数据(如表格、图表)和定性描述(如政策解读)。', 'completion_criteria': '所有数据来源可靠且完整,信息分类清晰,能够直接支持后续分析。', 'common_issues': '数据不完整或过时,导致分析结论缺乏依据。', 'solutions': '使用自动化工具(如爬虫、API接口)实时获取最新数据,并建立数据验证机制(如交叉比对多个来源)。'}, {'step': 3, 'action': '构建章节结构并分配优先级', 'output': '按照“大类资产跟踪→重要政策及要闻→交易策略→风险提示”的顺序组织内容,确保逻辑清晰且重点突出。优先展示核心结论(如市场趋势预测、交易建议),再补充背景信息和支撑数据。', 'completion_criteria': '章节结构合理,信息分布均衡,读者能快速找到核心结论。', 'common_issues': '章节安排混乱,次要信息过多掩盖了核心结论。', 'solutions': '在撰写前绘制内容框架图,确保每个章节服务于整体目标,避免冗余内容。'}, {'step': 4, 'action': '进行分板块深度分析', 'output': '针对每个资产类别(如债券、股票、外汇、商品)分别进行定量与定性分析,结合历史数据、当前市场动态和未来预期,得出具体观点(如“债市预计震荡下跌后高位震荡”)。', 'completion_criteria': '每个板块的分析逻辑严密,数据与结论之间有明确因果关系,且分析结果可操作性强。', 'common_issues': '分析过于表面化,缺乏深入洞察或实际指导意义。', 'solutions': '引入专家意见或参考权威研究报告,确保分析具有专业性和前瞻性。'}, {'step': 5, 'action': '整合政策与新闻动态', 'output': '筛选当日重要的国内外政策及新闻事件,评估其对市场的影响,并将相关影响融入资产分析中(如“7月政治局会议对海外风险的乐观定调”)。', 'completion_criteria': '政策解读与资产分析紧密结合,能够解释市场走势或预测未来变化。', 'common_issues': '政策解读脱离实际市场表现,显得孤立无关联。', 'solutions': '在解读政策时始终结合市场数据,强调政策对资产价格的具体传导路径。'}, {'step': 6, 'action': '提出交易策略和风险提示', 'output': '基于前述分析,给出具体的交易建议(如“逢低做多”、“战略看多美元”),同时列举潜在风险因素(如贸易战加剧、地缘风险)以提醒投资者。', 'completion_criteria': '交易策略具体可行,风险提示全面且针对性强。', 'common_issues': '策略过于笼统或忽略重大风险,导致实用性不足。', 'solutions': '在制定策略时充分考虑不同情景下的应对方案,并通过模拟测试验证可行性。'}, {'step': 7, 'action': '可视化呈现关键数据', 'output': '制作直观易懂的图表(如指数走势图、降息概率表),辅助说明核心观点,提升报告的专业性和可读性。', 'completion_criteria': '图表设计简洁明了,能够有效传递复杂信息。', 'common_issues': '图表设计繁琐或与正文内容脱节,削弱表达效果。', 'solutions': '遵循“少即是多”的原则,仅保留最必要的图表元素,并确保图表与文字内容高度匹配。'}, {'step': 8, 'action': '审查与校对', 'output': '检查报告内容的准确性、逻辑连贯性和语言表达,确保无错误或歧义。', 'completion_criteria': '报告内容无明显错误,语言流畅且逻辑清晰。', 'common_issues': '遗漏重要信息或存在语法/格式问题,影响报告质量。', 'solutions': '采用多人交叉审阅机制,结合自动化校对工具提高效率。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-13 23:53:20", "modified_time": "2025-08-13 23:53:20", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "2822c0bcf6f844a8b47dabc41cd26619", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、宏观经济分析、政策解读及资本市场动态跟踪等类型的金融分析任务。尤其适合需要结合定量与定性信息,进行多层次逻辑推导并提出投资建议或风险提示的场景。", "content": "[{'step': 1, 'action': '明确分析目标和核心问题', 'output': '清晰定义报告的核心主题和目标受众,例如本次案例中聚焦于宏观政策、行业动态和市场表现的综合分析。', 'evaluation_criteria': '是否准确识别了关键问题,并将其分解为可操作的研究子问题;是否明确了报告的核心受众(如投资者、政策制定者等)。', 'common_issues': '目标过于宽泛或模糊,导致后续分析缺乏焦点。', 'solutions': '通过头脑风暴或初步调研,将复杂问题拆解为具体子问题,并明确优先级。'}, {'step': 2, 'action': '收集和整理相关信息', 'output': '按类别整理数据,包括宏观政策、行业动态、市场表现(如利率、汇率、股市指数等),并确保信息来源权威可靠。', 'evaluation_criteria': '数据是否全面且具有时效性;是否覆盖了定量和定性两方面信息;是否有明确的数据来源标注。', 'common_issues': '信息冗余或缺失关键数据,导致分析失衡。', 'solutions': '建立标准化信息收集模板,确保覆盖所有必要维度(如政策、经济指标、市场表现等)。'}, {'step': 3, 'action': '构建章节结构并安排信息优先级', 'output': '按照“从宏观到微观”的逻辑组织内容,例如先分析宏观政策背景,再深入行业动态,最后聚焦市场表现和投资建议。', 'evaluation_criteria': '章节安排是否符合逻辑递进关系;核心结论是否在开头或显眼位置突出展示;次要信息是否合理分布。', 'common_issues': '章节结构混乱,信息堆砌而无重点。', 'solutions': '使用金字塔原理,先呈现核心结论,再逐步展开支撑论据;确保每章有明确的小标题和总结段落。'}, {'step': 4, 'action': '分析观点并建立论证路径', 'output': '基于数据和事实,逐层推导出观点,例如从政策导向推导出行业趋势,再结合市场数据验证观点。', 'evaluation_criteria': '论证是否逻辑严密;是否充分考虑多种可能性;是否引用数据支持结论。', 'common_issues': '论证过程跳跃或缺乏数据支持,导致可信度下降。', 'solutions': '采用“假设-验证”方法,逐一验证每个论点;引入对比分析以增强说服力。'}, {'step': 5, 'action': '评估不确定性和风险因素', 'output': '在分析过程中适时引入风险提示,例如政策执行力度、市场波动等不确定性因素。', 'evaluation_criteria': '风险提示是否全面且及时;是否提供了应对策略或情景分析。', 'common_issues': '忽视潜在风险或处理方式过于简单化。', 'solutions': '建立风险矩阵,评估不同风险的影响程度和发生概率;提供多情景假设下的应对方案。'}, {'step': 6, 'action': '总结核心结论并提出行动建议', 'output': '提炼核心观点并转化为具体的投资建议或政策解读,例如“关注反内卷政策对行业的长期影响”。', 'evaluation_criteria': '结论是否简洁明了;建议是否具有可操作性;是否与前文分析形成闭环。', 'common_issues': '结论空洞或与前文分析脱节。', 'solutions': '在总结部分回顾主要论点,确保前后呼应;结合实际场景提出具体建议。'}, {'step': 7, 'action': '优化信息展示形式', 'output': '通过图表、数据可视化工具和简明的语言提升信息传达效率,例如用折线图展示利率走势,用表格对比行业表现。', 'evaluation_criteria': '图表是否直观易懂;文字说明是否简洁有力;整体排版是否美观。', 'common_issues': '图表过多或过少,导致信息密度不均衡。', 'solutions': '遵循“一图一意”原则,确保每个图表都有明确的说明;控制图表数量,避免视觉疲劳。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-13 23:54:34", "modified_time": "2025-08-13 23:54:34", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "8e2adeb8a046459e955881ef2e9f6ec5", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及市场动态解读类的金融分析任务。尤其适合需要结合定量与定性信息,对特定市场的表现进行综合评价,并提供清晰的投资建议或风险提示的工作场景。", "content": "[{'step': 1, 'action': '明确核心目标和受众需求', 'output': '确定报告的核心目标(如解读北交所当日市场表现)和目标受众(如机构投资者、个人投资者等),形成初步的问题清单。', 'completion_criteria': '能够清晰回答:本次分析的目标是什么?受众希望从报告中获得哪些关键信息?', 'common_issues': '目标不明确可能导致内容散乱;解决方法是提前与团队或客户确认需求。', 'contextual_adaptation': '在不同场景下,例如政策解读报告,需调整目标为政策影响评估,同时考虑监管机构的关注点。'}, {'step': 2, 'action': '收集并整理基础数据', 'output': '汇总相关市场指数、成交额、个股表现、行业涨跌幅等定量数据,同时搜集政策、宏观经济等定性信息。', 'completion_criteria': '确保所有数据来源可靠且覆盖全面,无明显遗漏或错误。例如,检查北证50、上证指数等是否完整记录。', 'common_issues': '数据缺失或质量不足;应对方法包括多源验证和及时更新数据库。', 'contextual_adaptation': '对于长期趋势分析,需扩展历史数据范围;对于短期波动分析,则聚焦于最近交易日的数据。'}, {'step': 3, 'action': '组织章节结构并分配优先级', 'output': '设计报告结构,包含核心观点、市场表现综述、行业分析、个股亮点、估值情况和风险提示等模块,并按重要性排序。', 'completion_criteria': '结构逻辑清晰,重点突出。例如,核心观点应放在开头,便于快速抓住读者注意力。', 'commonissues': '章节重复或次序混乱;可参考类似成功案例优化布局。', 'contextualadaptation': '若针对专业投资者,可前置技术分析部分;若面向普通读者,则简化术语并增加背景介绍。'}, {'step': 4, 'action': '撰写核心观点和整体市场表现', 'output': '提炼当天市场表现的关键数据(如北证50涨跌幅、成交额变化等),并用简明语言总结整体趋势。', 'completioncriteria': \"核心观点准确反映市场动态,且具备高度概括性。例如,'北证50小幅上涨,但成交额较上周有所下降'。\", 'commonissues': '表述过于冗长或模糊;可通过反复精炼语言提高精准度。', 'contextualadaptation': '根据不同市场环境(牛市/熊市),调整语气以匹配情绪基调。'}, {'step': 5, 'action': '深入解析行业和个股表现', 'output': '详细列出各行业的涨跌幅排名及个股异动(如涨幅前十、跌幅前十),并结合财务指标解释背后原因。', 'completioncriteria': '行业与个股分析既有广度又有深度,涵盖主要驱动因素(如政策利好、业绩增长)。例如,指出通信行业上涨受政策支持推动。', 'commonissues': '忽略次要但重要的细节;解决方法是交叉核对数据并补充遗漏。', 'contextualadaptation': '在高波动市场中,强化异常个股的分析;在平稳期则侧重基本面挖掘。'}, {'step': 6, 'action': '对比估值水平并探讨潜在机会', 'output': '计算并比较北交所与其他板块(如科创板、创业板)的估值倍数,识别低估或高估领域。', 'completioncriteria': \"估值分析客观公正,结论基于充分数据支撑。例如,'北交所估值持续高于创业板,但低于科创板'。\", 'commonissues': '估值判断主观化;避免偏见的方法是引用权威第三方数据。', 'contextualadaptation': '当市场情绪低迷时,更注重寻找低估值区域;反之则关注成长性高的行业。'}, {'step': 7, 'action': '提出风险提示和不确定性管理', 'output': '系统梳理政策、市场、竞争等方面的潜在风险,并给出应对策略建议。', 'completioncriteria': \"风险提示全面且具有前瞻性,能有效引导投资者规避损失。例如,'警惕政策支持力度低于预期的风险'。\", 'commonissues': '风险描述笼统或避重就轻;改进方法是结合具体案例展开论述。', 'contextualadaptation': '在新兴市场分析中,强调创新失败的风险;在成熟市场中,则更多关注周期性波动。'}, {'step': 8, 'action': '审阅、校正并优化呈现形式', 'output': '检查全文逻辑连贯性,修正语法错误,优化图表展示效果,确保最终版本简洁美观。', 'completioncriteria': '报告内容无明显错误,视觉呈现直观易懂。例如,表格排版整齐,图形标注清晰。', 'commonissues': '格式问题影响阅读体验;定期更新模板规范可以减少此类问题。', 'contextualadaptation': '针对电子版报告,增强互动元素(如超链接);纸质版则注重印刷质量。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-13 23:56:03", "modified_time": "2025-08-13 23:56:03", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "1fe3fcea0b4d4846baea01add47c0bea", "experience_type": "text", "when_to_use": "适用于行业深度研究、投资标的分析、宏观经济政策解读和风险评估报告等。", "content": "[{'step': 1, 'action': '明确目标受众和核心问题', 'output': '确定报告的核心主题及需要解决的具体问题(如育儿补贴对消费的影响)。', 'completion_criteria': '核心问题清晰,与目标受众的需求高度相关。', 'common_issues': ['目标过于宽泛或模糊'], 'solutions': ['通过内部讨论或客户反馈明确关键需求']}, {'step': 2, 'action': '收集和整理基础数据', 'output': '获取定量数据(如市场成交额、融资余额)和定性信息(如政策文件、专家观点)。', 'completion_criteria': '数据来源可靠,覆盖所有关键维度(如历史、现状、预测)。', 'common_issues': ['数据不完整或过时'], 'solutions': ['使用权威数据库和实时新闻更新']}, {'step': 3, 'action': '构建分析框架', 'output': '设计章节结构,确保逻辑清晰(如从宏观到微观、从历史到预测)。', 'completion_criteria': '各部分之间逻辑连贯,无明显遗漏。', 'common_issues': ['章节重复或缺乏层次感'], 'solutions': ['参考类似成功案例,优化结构']}, {'step': 4, 'action': '提炼核心结论', 'output': '在每个模块开头突出核心观点,并用数据和案例支持。', 'completion_criteria': '核心结论简洁明了,具有说服力。', 'common_issues': ['结论过于复杂或缺乏依据'], 'solutions': ['多次打磨语言,确保精准传达']}, {'step': 5, 'action': '处理不确定性和风险因素', 'output': '在适当位置引入风险提示,并通过多情景分析降低不确定性。', 'completion_criteria': '风险提示合理且不影响整体结论的可信度。', 'common_issues': ['忽略重要风险或过度强调负面因素'], 'solutions': ['咨询多方意见,平衡正负两方面']}, {'step': 6, 'action': '可视化数据和信息', 'output': '制作图表(如趋势图、对比表)辅助说明复杂数据。', 'completion_criteria': '图表直观易懂,与文字内容高度一致。', 'common_issues': ['图表过多或信息冗余'], 'solutions': ['筛选关键数据,避免信息过载']}, {'step': 7, 'action': '撰写最终报告', 'output': '整合所有内容,形成完整报告,包括摘要、正文和附录。', 'completion_criteria': '报告内容全面且条理清晰,满足目标受众需求。', 'common_issues': ['格式不统一或语言不够专业'], 'solutions': ['制定模板,统一风格']}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-13 23:57:39", "modified_time": "2025-08-13 23:57:39", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "377783a6eff84b0a8d7dce7e3a540c3e", "experience_type": "text", "when_to_use": "此规划框架适用于金融领域的定期市场分析报告、行业深度研究、投资标的分析以及宏观经济形势解读等任务。尤其适合需要整合多维度信息(如资本市场动态、行业数据、个股表现)并形成清晰结论的场景。", "content": "[{'step': 1, 'action': '明确报告目标与受众需求', 'output': '确定报告的核心主题(如经济形势解读、市场表现分析)、受众群体(如投资者、分析师)以及关键问题(如政策影响、市场趋势)。', 'completion_criteria': '报告目标清晰,能够回答受众最关心的问题;核心主题和受众需求被明确定义。', 'common_issues': '目标过于宽泛或不明确,导致内容分散。', 'solutions': '通过与客户或团队沟通,聚焦于2-3个核心问题,确保主题集中。'}, {'step': 2, 'action': '收集和整理相关信息', 'output': '从权威来源(如政府发布会、行业统计数据、公司公告)获取最新数据,并按类别(资本市场新闻、行业动态、市场表现、公司公告等)分类整理。', 'completion_criteria': '所有关键信息已覆盖,数据来源可靠且经过初步验证,分类逻辑清晰。', 'common_issues': '信息遗漏或来源不可靠,数据未及时更新。', 'solutions': '建立固定的信息采集渠道清单,设置数据校验步骤,确保时效性和准确性。'}, {'step': 3, 'action': '设计章节结构并分配优先级', 'output': '根据信息的重要性和逻辑关系设计章节结构,通常包括背景介绍(如政策解读)、核心数据分析(如市场表现)、风险提示等部分。', 'completion_criteria': '章节安排合理,优先展示核心结论和关键数据,次要信息作为补充。', 'common_issues': '章节顺序混乱,重点不突出。', 'solutions': '采用“倒金字塔”原则,先呈现最重要信息,再逐步展开细节。'}, {'step': 4, 'action': '构建论证逻辑并分层递进', 'output': '围绕核心观点(如政策对市场的影响)构建论证路径,使用定量数据(如指数涨跌幅)和定性分析(如政策解读)相结合的方式支持结论。', 'completion_criteria': '论证过程条理清晰,每个论点有充分的数据或案例支撑,逻辑链条完整。', 'common_issues': '论证缺乏层次感,数据与观点脱节。', 'solutions': '为每个论点单独列出支持证据,确保数据与观点直接关联。'}, {'step': 5, 'action': '平衡定量与定性信息分布', 'output': '在报告中合理分配历史数据、当前表现和未来预测的比例,确保读者既能了解现状,也能理解潜在趋势。', 'completion_criteria': '定量与定性信息比例适中,历史数据、现状分析和预测展望均有覆盖。', 'common_issues': '过度依赖某一类信息,导致分析片面。', 'solutions': '制定信息分布模板,例如60%定量+40%定性,避免失衡。'}, {'step': 6, 'action': '识别并处理不确定性和风险因素', 'output': '在适当位置(如章节末尾或独立部分)提出主要风险因素(如政策不及预期、贸易摩擦加剧),并分析其可能影响。', 'completion_criteria': '风险因素全面且具体,提出的应对建议具有实操性。', 'common_issues': '风险提示流于形式,缺乏针对性。', 'solutions': '结合实际案例说明风险的具体表现及潜在后果,增强说服力。'}, {'step': 7, 'action': '可视化数据以提升可读性', 'output': '将复杂数据转化为图表(如涨跌幅图、成交额走势),并通过简短注释解释图表含义。', 'completion_criteria': '图表直观易懂,与文字内容紧密配合,无冗余信息。', 'common_issues': '图表过多或过少,未能有效辅助说明。', 'solutions': '限制图表数量,每张图表只表达一个核心信息点。'}, {'step': 8, 'action': '撰写总结与行动建议', 'output': '在报告结尾提炼核心结论,并给出基于分析结果的具体行动建议(如投资方向、规避风险策略)。', 'completion_criteria': '总结简洁有力,建议切实可行,能指导决策。', 'common_issues': '总结空洞,建议缺乏针对性。', 'solutions': '回溯前文分析,确保总结与建议呼应,避免泛泛而谈。'}, {'step': 9, 'action': '审阅与优化语言表达', 'output': '检查报告的语言是否准确、专业,避免歧义;同时调整格式,确保排版规范统一。', 'completion_criteria': '报告语言精炼,术语使用恰当,整体风格一致。', 'common_issues': '语言啰嗦或不够严谨,格式混乱。', 'solutions': '邀请同行评审,重点关注语言流畅性和专业性。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-13 23:58:56", "modified_time": "2025-08-13 23:58:56", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "0e4c90c54d0843fcabdb6609c3944c5d", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及资本市场信息挖掘相关的金融分析任务。它尤其适合需要从大量调研数据中提取有效信息并生成清晰结论的场景,例如机构调研跟踪报告、市场热点分析、行业趋势研究等。", "content": "[{'step': 1, 'action': '明确分析目标与范围', 'output': '确定分析的核心主题(如机构调研信息)和覆盖的时间范围(如周度、月度),并定义输出内容的主要维度(如行业视角、个股视角)。', 'completion_criteria': '分析目标清晰且与客户需求一致;时间范围和维度划分合理,能够全面覆盖所需信息。', 'common_issues': '目标过于宽泛或模糊,导致后续分析难以聚焦。', 'solutions': '与利益相关方确认目标,并以具体问题为导向细化分析范围。'}, {'step': 2, 'action': '收集和整理基础数据', 'output': '汇总公开的机构调研信息,包括被调研总次数、参与机构数量、行业分布等定量数据,以及调研纪要中的定性信息(如管理层问答、行业动态)。', 'completion_criteria': '数据来源可靠,涵盖所有关键指标,且数据清洗完整,确保无遗漏或错误。', 'common_issues': '数据不完整或存在重复,影响后续分析准确性。', 'solutions': '使用自动化工具辅助数据收集,并通过交叉验证确保数据质量。'}, {'step': 3, 'action': '组织章节结构并分配优先级', 'output': '按照“行业视角→个股视角→风险提示”的逻辑安排章节顺序,优先展示核心结论(如关注度较高的行业和个股),随后补充细节信息。', 'completion_criteria': '章节结构符合逻辑,信息展示优先级合理,读者能快速抓住重点。', 'common_issues': '章节安排混乱,导致信息传递效率低下。', 'solutions': '提前设计目录草稿,并根据受众需求调整信息权重。'}, {'step': 4, 'action': '进行定量与定性分析', 'output': '对调研热度进行量化分析(如环比、同比变化),结合定性信息(如行业政策、公司战略)解释数据背后的原因和趋势。', 'completion_criteria': '定量分析准确且可视化效果清晰;定性分析深入,能有效支撑数据解读。', 'common_issues': '定量与定性分析脱节,无法形成统一观点。', 'solutions': '在每项分析中建立明确的因果关系链,确保两者互为补充。'}, {'step': 5, 'action': '提炼边际变化和增量信息', 'output': '识别行业和个股调研热度的边际变化(如同比增加的领域),并总结调研公告中的新增信息(如新产品进展、政策影响)。', 'completion_criteria': '边际变化和增量信息突出,能够反映最新动态并具有前瞻性。', 'common_issues': '增量信息不足,未能体现独特价值。', 'solutions': '重点关注高频提及的主题,并通过对比历史数据挖掘潜在趋势。'}, {'step': 6, 'action': '提出风险提示', 'output': '列出可能影响分析结论的风险因素(如公司经营风险、政策风险),并在适当位置加以说明。', 'completion_criteria': '风险提示全面且客观,不会削弱整体结论的可信度。', 'common_issues': '风险提示过于笼统或忽视重要风险点。', 'solutions': '基于实际案例梳理常见风险类型,并针对特定行业补充额外注意事项。'}, {'step': 7, 'action': '制作图表与附注支持结论', 'output': '创建直观的图表(如调研热度柱状图、行业信息表格),并在必要处添加详细注释,帮助读者理解复杂数据。', 'completion_criteria': '图表简洁明了,注释详实,能够显著提升报告可读性。', 'common_issues': '图表设计冗余或缺乏关键标注。', 'solutions': '遵循“一图一意”原则,避免堆叠过多信息,并检查每个图表是否配有必要说明。'}, {'step': 8, 'action': '撰写总结与展望', 'output': '在报告结尾部分概括核心发现,并对未来趋势给出预测或建议。', 'completion_criteria': '总结精炼且富有洞察力,展望内容具备指导意义。', 'common_issues': '总结流于表面,缺乏深度见解。', 'solutions': '回顾整个分析过程,提炼最具价值的观点作为总结要点。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 00:00:05", "modified_time": "2025-08-14 00:00:05", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "cef7a4b0222c4c07acb5a1e89f8ec4e5", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析、风险评估报告等任务。", "content": "[{'step': 1, 'action': '收集并整理宏观和行业新闻,确定近期最重要的经济和政策事件。', 'output': '一份包含宏观要闻和行业要闻的初步报告,明确核心事件和背景。', 'completion_criteria': '报告清晰呈现了当前最重要的经济和政策背景,能够为后续分析奠定基础。', 'common_issues': '信息冗余或不相关,无法突出重点。', 'solutions': '筛选最关键的信息,删除无关内容,确保每条信息都有助于整体分析。'}, {'step': 2, 'action': '收集和分析关键金融市场数据,包括利率、汇率、全球和本地市场表现。', 'output': '一组包含关键数据走势的图表和简要分析,直观展示市场状况。', 'completion_criteria': '图表清晰、数据准确,简要分析能够解释数据背后的趋势和原因。', 'common_issues': '数据来源不可靠或分析过于复杂。', 'solutions': '使用权威数据源,简化分析语言,确保非专业读者也能理解。'}, {'step': 3, 'action': '详细分析各行业表现,包括涨跌情况、资金流动和热门概念。', 'output': '一份详细的行业表现报告,列出表现最好的行业和资金流向。', 'completion_criteria': '报告能够清楚说明各行业的表现,并指出资金流动的主要方向。', 'common_issues': '忽略小众但潜力巨大的行业,导致分析片面。', 'solutions': '兼顾大行业和小众行业,确保分析全面。'}, {'step': 4, 'action': '识别并列出潜在风险因素,结合当前市场和政策环境进行评估。', 'output': '一份风险提示列表,详细说明每个风险的可能性和影响。', 'completion_criteria': '风险提示具体且有针对性,能够帮助读者提前做好准备。', 'common_issues': '风险提示过于笼统,缺乏实际操作建议。', 'solutions': '细化风险提示,提供应对策略和建议。'}, {'step': 5, 'action': '撰写信息披露部分,确保报告透明性和合规性。', 'output': '一份完整的信息披露声明,包括研究员承诺、投资评级定义和免责条款。', 'completion_criteria': '信息披露部分符合监管要求,确保报告合法合规。', 'common_issues': '信息披露不完整或不符合规定。', 'solutions': '参照相关法规和公司规定,逐条检查信息披露内容。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 00:01:37", "modified_time": "2025-08-14 00:01:37", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "bd5c1b69875b4139865b26a5f6f7a8e1", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、宏观经济与市场趋势分析、投资组合策略制定以及风险评估报告等任务,尤其适合需要结合定量和定性分析、历史数据与未来预测的复杂金融分析场景。", "content": "[{'step': 1, 'action': '明确核心主题与目标受众', 'output': '确定分析的核心主题(如盈利回升主线、降息条件成熟)及目标受众(如机构投资者、政策制定者),并基于此设计报告的整体结构。', 'completion_criteria': '核心主题清晰且与目标受众需求匹配,章节安排逻辑顺畅,能够引导读者逐步理解分析结论。', 'common_issues': '主题过于宽泛或偏离目标受众需求,导致信息冗余或难以聚焦。', 'solutions': '在撰写前进行受众调研,明确其关注点;通过头脑风暴提炼出最具价值的研究问题。'}, {'step': 2, 'action': '构建历史数据分析框架', 'output': '从历史数据中提取关键指标(如ROE触底回升节点、行业轮动速度等),并用图表形式展示趋势性特征。', 'completion_criteria': '历史数据覆盖全面,分析方法科学合理,图表直观易懂,能有效支持后续论证。', 'common_issues': '数据选择不具代表性,或图表呈现方式不够清晰。', 'solutions': '优先选取权威公开数据源,利用专业工具优化图表设计,确保数据与结论紧密关联。'}, {'step': 3, 'action': '引入对比案例增强说服力', 'output': '通过对比相似历史事件(如2016年供给侧改革与本轮反内卷)来验证当前趋势的合理性,并突出差异点以说明独特性。', 'completion_criteria': '案例选择恰当,对比维度明确,能够帮助读者快速理解当前情境下的机会与挑战。', 'common_issues': '案例对比流于表面,缺乏深入洞察。', 'solutions': '采用多维度分析法(如政策侧重点、行业分布变化),并通过定量与定性结合提升分析深度。'}, {'step': 4, 'action': '分层次推导核心观点', 'output': '按照‘现象描述-原因剖析-影响预测’的逻辑顺序层层递进,逐步建立主要观点(如盈利回升是长期趋势)。同时,适时提出潜在风险因素作为补充。', 'completion Criteria': '每个层次之间逻辑连贯,核心观点突出,风险提示恰到好处,既不过度渲染也不忽视。', 'common_issues': '论证过程跳跃性强,缺乏过渡性解释;风险提示过早或过晚影响整体阅读体验。', 'solutions': '使用小标题划分段落,每段开头简述本节主旨;将风险提示放在结论之前,避免削弱正面论点。'}, {'step': 5, 'action': '平衡定量与定性信息', 'output': '综合运用定量数据(如GDP增速、PMI指数)与定性分析(如政策解读、市场情绪观察),确保两种信息类型相辅相成。', 'completion_criteria': '定量数据准确可靠,定性分析有理有据,两者比例适中,不会出现偏重某一方的情况。', 'common_issues': '定量分析过多显得枯燥,定性分析过多则缺乏客观支撑。', 'solutions': '根据受众偏好调整信息比重,例如机构投资者可能更注重定量分析,而普通投资者则更关注定性解读。'}, {'step': 6, 'action': '总结配置建议与风险提示', 'output': '基于前述分析,给出具体的投资配置建议(如上游资源品、非银金融等),并详细列出可能的风险因素。', 'completion_criteria': '配置建议具有可操作性,风险提示全面且具体,能够为决策提供实际指导。', 'common_issues': '配置建议空泛无针对性,风险提示模糊不清。', 'solutions': '结合行业特点细化配置方向,对风险因素分类列举并附上应对策略。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 00:02:56", "modified_time": "2025-08-14 00:02:56", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "713c23a060af4aeab7d764df08d92793", "experience_type": "text", "when_to_use": "适用于行业深度研究、并购重组事件分析、投资标的动态跟踪及政策驱动型市场机会评估等任务,尤其是需要结合定量与定性信息进行系统化整合的金融分析场景。", "content": "[{'step': 1, 'action': '明确分析目标与核心问题', 'output': '定义清晰的研究主题和目标,例如本案例中聚焦于北交所并购活动的趋势、政策影响及企业资本运作策略。', 'how_to_judge_completion': '是否明确了具体的研究范围(如时间跨度、行业领域)、核心关注点(如政策红利、交易活跃度)以及预期输出内容(如数据汇总、趋势分析)。', 'common_issues': '目标过于宽泛或模糊,导致后续工作缺乏方向性。', 'solutions': '通过团队讨论或客户沟通明确优先级,细化研究目标。'}, {'step': 2, 'action': '收集并整理基础数据与背景信息', 'output': '形成全面的数据集和背景资料库,包括历史交易数据、政策文件、行业动态及相关公司的公告。', 'how_to_judge_completion': '是否有足够覆盖研究主题的数据支持,且所有关键信息来源均经过验证和标注出处。', 'common_issues': '数据不完整或存在偏差,可能影响结论的准确性。', 'solutions': '建立多渠道数据采集机制,并对数据质量进行交叉核验。'}, {'step': 3, 'action': '设计报告结构并分配权重', 'output': '构建逻辑清晰的章节框架,合理安排信息展示顺序,确保重点突出且层次分明。', 'how_to_judge_completion': '各部分之间是否衔接紧密,核心结论是否能够快速被读者捕捉到。', 'common_issues': '结构松散或信息冗余,导致阅读体验不佳。', 'solutions': '参考优秀模板,预先绘制内容地图,反复优化布局。'}, {'step': 4, 'action': '按模块展开深入分析', 'output': '针对不同维度(如政策解读、数据分析、案例剖析)分别进行详细阐述,使用图表辅助说明复杂关系。', 'how_to_judge_completion': '每个模块是否独立成篇但又服务于整体,是否能有效回答研究目标中的问题。', 'common_issues': '论证过程不够严谨,容易忽略次要但重要的细节。', 'solutions': '采用假设-验证的方法论,逐步推导结论,并补充边缘情境下的可能性探讨。'}, {'step': 5, 'action': '提炼核心观点与行动建议', 'output': '总结出简明扼要的核心洞见,并提出基于当前分析的实际操作建议。', 'how_to_judge_completion': '核心观点是否直击要害,行动建议是否具有可执行性和现实意义。', 'common_issues': '结论空洞或脱离实际,无法为决策提供价值。', 'solutions': '从用户视角出发,将理论转化为实践指南,避免过度抽象。'}, {'step': 6, 'action': '加入风险提示与不确定性管理', 'output': '识别潜在风险因素,评估其发生概率及影响程度,并在报告中以适当方式呈现。', 'how_to_judge_completion': '是否涵盖了主要风险点,且表述方式既专业又易于理解。', 'common_issues': '风险提示流于形式,未能体现深度思考。', 'solutions': '结合历史案例与当前环境综合判断,增强说服力。'}, {'step': 7, 'action': '校对与格式调整', 'output': '确保语言表达精准、排版美观,同时检查引用数据和图表的一致性。', 'how_to_judge_completion': '文档是否达到专业出版标准,无明显语法错误或格式混乱现象。', 'common_issues': '忽视细节处理,降低报告可信度。', 'solutions': '引入第三方审阅者,用工具辅助查错。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 00:04:42", "modified_time": "2025-08-14 00:04:42", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "439f874a52b84a1ab2551afeaf6eafb7", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及公司财务业绩解读等金融分析任务。尤其适合需要结合定量与定性信息、历史与预测数据,并对不确定性进行系统化处理的场景,例如季度财报分析、行业趋势评估或资本市场展望。", "content": "[{'step': 1, 'action': '明确分析目标和受众需求', 'output': '清晰定义报告的目标(如解读东京电子FY1Q26财务表现)及主要受众(如机构投资者、分析师),确保后续内容聚焦。', 'completion_criteria': '目标是否具体化,是否明确了核心问题(如财务表现、市场前景、技术突破)。', 'common_issues': '目标过于宽泛或模糊,导致后续章节结构松散。', 'solutions': '通过与客户或团队讨论,提炼出关键问题清单,确保每个问题都有对应章节覆盖。'}, {'step': 2, 'action': '收集并整理基础数据', 'output': '从可靠来源获取相关财务数据(如净销售额、营业利润)、市场动态(如WFE预测)、技术进展(如XLO技术)等,形成数据表格或图表。', 'completion_criteria': '数据是否全面且准确,是否涵盖了定量(财务指标)和定性(技术突破)信息。', 'common_issues': '数据缺失或不一致,影响分析的可信度。', 'solutions': '建立数据验证流程,例如交叉核对多个来源的数据,标注不确定性的范围。'}, {'step': 3, 'action': '设计章节结构以突出核心结论', 'output': '按照“事件-点评-风险”的逻辑组织章节,优先展示核心结论(如财务表现符合预期),再逐步展开细节(如产品线表现、区域销售构成)。', 'completion_criteria': '章节安排是否符合逻辑递进原则,核心结论是否在前几段中明确呈现。', 'common_issues': '核心结论被埋没在细节中,读者难以快速抓住重点。', 'solutions': '使用摘要或小标题明确标识每部分的核心内容,确保关键信息一目了然。'}, {'step': 4, 'action': '平衡定量与定性信息分布', 'output': '将定量数据(如销售额、利润率)与定性分析(如技术突破的意义、市场需求韧性)有机结合,避免单一维度的信息过载。', 'completion_criteria': '是否合理分配了定量与定性信息的比例,是否通过图表或文字解释增强了可读性。', 'common_issues': '过度依赖数字而忽略背景分析,或反之。', 'solutions': '为每组数据提供简短的背景说明,同时用案例或趋势解释定性观点。'}, {'step': 5, 'action': '引入风险因素并提出应对策略', 'output': '在适当位置(如分析末尾)列出主要风险(如需求疲软、竞争加剧),并结合实际情况说明其潜在影响及缓解措施。', 'completion_criteria': '风险因素是否全面且具体,是否提供了可行的应对建议。', 'common_issues': '风险描述过于笼统,缺乏针对性。', 'solutions': '针对每个风险点,引用实际案例或数据支持分析,并补充具体的观察指标或预警信号。'}, {'step': 6, 'action': '总结长期趋势与短期波动', 'output': '区分短期调整(如全年业绩预期下调)与长期驱动因素(如AI服务器推动尖端芯片升级),帮助读者理解整体格局。', 'completion_criteria': '是否清晰划分了短期与长期视角,是否通过数据或案例支撑了长期趋势判断。', 'common_issues': '混淆短期波动与长期趋势,导致结论不够稳健。', 'solutions': '为短期和长期分别设置独立的小节,使用时间轴图或对比表增强直观性。'}, {'step': 7, 'action': '审阅与优化语言表达', 'output': '检查报告的语言简洁性和专业性,确保术语准确、逻辑清晰,并附上免责声明和利益冲突披露。', 'completion_criteria': '语言是否精炼无歧义,是否符合专业规范(如FINRA规则)。', 'common_issues': '语言冗长或存在歧义,可能引发误解。', 'solutions': '邀请同行审阅报告,并使用模板化的免责声明减少法律风险。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 00:06:17", "modified_time": "2025-08-14 00:06:17", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "87b1f97b29804f3aa43ede7454ca76af", "experience_type": "text", "when_to_use": "此规划框架适用于短期市场分析报告、投资策略建议书、大势研判类研究报告等任务,尤其适合需要结合定量与定性分析、历史数据和未来预测的场景。", "content": "[{'step': 1, 'action': '明确分析目标与受众需求', 'output': '一份简短的问题定义文档,包括分析的核心目标(如:市场趋势判断、板块轮动分析)、目标受众(如:机构投资者、个人投资者)及其关注点(如:收益潜力、风险控制)。', 'completion_criteria': '问题定义文档清晰且涵盖所有关键要素,能够指导后续分析方向。', 'common_issues': ['目标过于宽泛或模糊,导致分析缺乏针对性。', '未充分考虑受众需求,可能导致最终报告实用性不足。'], 'solutions': ['通过前期调研或与利益相关方沟通,明确具体问题。', '将目标分解为可量化的小目标,例如‘评估未来6个月的市场走势’。']}, {'step': 2, 'action': '收集并整理基础数据', 'output': '一张或多张数据表,包含市场指数、行业表现、概念板块、宏观经济指标等关键信息;以及重要的新闻和政策动态摘要。', 'completion_criteria': '数据完整、来源可靠,且经过初步清洗,便于后续分析使用。', 'common_issues': ['数据覆盖不全,遗漏重要变量(如:特定行业的政策变化)。', '数据质量不佳,存在错误或过时信息。'], 'solutions': ['建立标准化的数据采集流程,确保多源验证。', '定期更新数据,并记录更新时间和来源。']}, {'step': 3, 'action': '构建章节结构并分配信息优先级', 'output': '一个详细的报告大纲,标明各部分的内容重点和逻辑顺序,例如:市场表现概述 → 板块排名 → 后市展望 → 风险提示。', 'completion_criteria': '大纲逻辑清晰,信息分布合理,核心结论突出,次要信息适度补充。', 'common_issues': ['章节安排混乱,导致读者难以抓住重点。', '信息堆砌过多,忽视了简洁性和可读性。'], 'solutions': ['采用‘总-分-总’结构,先概述整体情况,再展开细节,最后总结。', '限制每个章节的信息量,避免冗长描述。']}, {'step': 4, 'action': '进行定量与定性分析', 'output': '一组图表和文字说明,展示定量数据分析结果(如:指数涨跌幅、成交量变化)与定性分析观点(如:政策影响解读、市场情绪评估)。', 'completion_criteria': '分析全面且深入,既包括历史数据回溯,也涵盖未来趋势预测,同时有数据支撑的观点。', 'common_issues': ['过度依赖单一类型分析(如仅做定量分析而忽略定性因素)。', '缺乏对不确定性的讨论,使结论显得过于绝对。'], 'solutions': ['平衡定量与定性分析的比例,确保两者相辅相成。', '引入情景分析法,探讨多种可能性及其概率。']}, {'step': 5, 'action': '提出风险提示并制定应对策略', 'output': '一段专门的风险提示段落,列出可能影响市场的负面因素(如:海外经济超预期下滑、贸易摩擦恶化),并给出相应的避险建议。', 'completion_criteria': '风险提示全面且及时,提出的应对措施切实可行。', 'common_issues': ['风险提示过于笼统,缺乏实际操作意义。', '未充分考虑极端情景下的潜在威胁。'], 'solutions': ['针对不同风险分类讨论,提供具体的应对方案。', '参考历史类似事件的影响,增强风险预判能力。']}, {'step': 6, 'action': '撰写报告并优化表达形式', 'output': '一份完整的市场分析报告,包括标题、正文、图表、附录等内容,语言简洁明了,逻辑连贯流畅。', 'completion_criteria': '报告内容准确无误,格式规范统一,易于理解。', 'common_issues': ['报告内容晦涩难懂,专业术语过多。', '图表设计不够直观,降低了信息传递效率。'], 'solutions': ['尽量使用通俗易懂的语言,必要时添加注释。', '优化图表布局,确保关键信息一目了然。']}, {'step': 7, 'action': '审阅与反馈迭代', 'output': '修订后的终版报告,已根据内部审核或外部反馈做出调整。', 'completion_criteria': '报告经多方确认无误,符合发布标准。', 'common_issues': ['忽略审阅环节,导致低级错误未被发现。', '反馈意见处理不当,未能有效改进报告质量。'], 'solutions': ['设置严格的审阅流程,邀请领域专家参与审查。', '系统化记录反馈意见,并逐一回应修改情况。']}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 00:08:23", "modified_time": "2025-08-14 00:08:23", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "48fe13af68194489864d3a0ff9e22305", "experience_type": "text", "when_to_use": "适用于行业深度研究、投资策略报告、主题投资机会挖掘以及风险评估等金融分析任务。该框架特别适合需要结合定量与定性分析、历史数据与未来预测的综合性研究报告,尤其是涉及政策解读、市场趋势判断和资产配置建议的任务。", "content": "[{'step': 1, 'action': '明确目标与范围', 'output': '清晰定义分析的核心问题和目标受众,例如本次的目标是为投资者提供8月市场策略应对波动的建议。', 'completion_criteria': '能够用一句话概括分析的主要目的,并列出关键变量(如市场波动、反内卷政策影响、行业细分机会)。', 'common_issues': '目标过于宽泛或模糊,导致后续分析方向不聚焦。', 'solutions': '通过团队讨论或客户反馈确认核心问题,确保目标具体且可操作。'}, {'step': 2, 'action': '收集并整理数据', 'output': '构建全面的数据集,包括宏观经济指标(如PMI)、行业数据(如创新药估值)、市场情绪指标(如涨停家数)以及政策动态(如反内卷政策)。', 'completion_criteria': '数据覆盖所有关键维度,来源可靠且经过初步清洗,形成结构化表格或图表。', 'common_issues': '数据缺失或质量不佳,可能影响结论的可信度。', 'solutions': '优先选择权威数据库(如万得),并通过交叉验证补充不足之处。'}, {'step': 3, 'action': '分解问题并建立逻辑框架', 'output': '按照从宏观到微观、从现状到未来的顺序组织内容,例如先复盘7月市场表现,再分析当前波动原因,最后提出应对策略。', 'completion_criteria': '每个部分之间有明确的逻辑递进关系,章节标题能体现整体思路。', 'common_issues': '逻辑跳跃或层次混乱,导致读者难以跟随。', 'solutions': '使用思维导图梳理章节结构,确保每部分内容服务于整体目标。'}, {'step': 4, 'action': '量化分析与定性描述相结合', 'output': '利用统计方法和图表展示关键发现(如静态估值分布、行业超额收益),同时配以文字解释其背后驱动因素。', 'completion_criteria': '定量结果与定性分析相互印证,避免单一依赖某一种形式。', 'common_issues': '过度强调数字而忽略背景解读,或者反之。', 'solutions': '在每个数据点后添加简短注释,说明其意义及对整体结论的支持作用。'}, {'step': 5, 'action': '引入时间维度进行动态分析', 'output': '区分短期波动(如近期赚钱效应松动)与长期趋势(如ROA-PB框架下的基本面修复路径),并分别阐述。', 'completion_criteria': '时间维度划分合理,不同阶段的变化规律得到充分阐释。', 'common_issues': '忽视时间序列的重要性,导致结论缺乏前瞻性。', 'solutions': '绘制时间轴图,标注关键事件及其影响,帮助识别周期性特征。'}, {'step': 6, 'action': '平衡确定性与不确定性', 'output': '针对已知事实给出明确结论(如“仅亏利润”优于“亏利润+亏现金流”),同时坦率承认未知领域(如海外货币政策节奏的不确定性)。', 'completion_criteria': '结论稳健且具有弹性,既不过分乐观也不过于保守。', 'common_issues': '对不确定性的表述含糊不清,降低报告的专业性。', 'solutions': '设置专门的风险提示章节,系统列举潜在风险并评估其概率与影响。'}, {'step': 7, 'action': '提炼核心观点并突出展示', 'output': '将最重要的结论置于显眼位置(如摘要部分),并通过加粗、图表等方式强化视觉效果。', 'completion_criteria': '核心观点一目了然,即使快速浏览也能抓住重点。', 'common_issues': '信息堆砌过多,令读者难以分辨主次。', 'solutions': '采用金字塔原则,先呈现高层次结论,再逐步展开细节支持。'}, {'step': 8, 'action': '撰写行动建议', 'output': '基于前述分析,提出具体的策略建议(如均衡配置、关注供需匹配行业),并附带实施路径。', 'completion_criteria': '建议切实可行,符合投资者的实际需求与能力。', 'common_issues': '建议空洞无物,无法落地执行。', 'solutions': '结合案例模拟操作步骤,增强建议的实操性。'}, {'step': 9, 'action': '审稿与优化表达', 'output': '检查语言是否简洁流畅,专业术语是否准确,格式是否统一。', 'completion_criteria': '报告整体风格一致,无明显语法或排版错误。', 'common_issues': '术语晦涩难懂,或格式混乱影响阅读体验。', 'solutions': '邀请同事或外部专家审阅初稿,收集反馈意见后改进。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 00:10:19", "modified_time": "2025-08-14 00:10:19", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "16106c5cb5744eaba721c1bda7a9b66c", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及市场趋势研判类金融分析任务,尤其是需要结合宏观政策、市场热点和行业动态进行综合分析的场景。该框架特别适合在宏观经济事件(如政治局会议、美联储议息会议等)后对市场影响进行评估,并为投资者提供明确配置建议的情况。", "content": "[{'step': 1, 'action': '明确分析目标与核心问题', 'output': '确定报告的核心观点和主要回答的问题,例如市场趋势判断、行业配置建议及风险提示。', 'criteria_for_success': '核心问题是否清晰且具有针对性,能否直接回应客户或市场的关注点。', 'common_issues': '问题定义过于宽泛或模糊,导致后续分析缺乏聚焦。', 'solution': '通过团队讨论和市场调研,确保问题定义具体且与当前市场热点紧密相关。'}, {'step': 2, 'action': '搭建章节结构并分配优先级', 'output': '设计报告的逻辑框架,包括市场热点分析、行业配置建议和风险提示三大模块,并根据信息的重要性安排章节顺序。', 'criteria_for_success': '章节结构是否逻辑清晰,信息优先级是否合理,核心结论是否能在开头部分突出展示。', 'common_issues': '章节顺序混乱,次要信息占据过多篇幅,削弱了核心结论的影响力。', 'solution': '采用倒金字塔结构,将最重要的结论放在最前,随后逐步展开细节支持性内容。'}, {'step': 3, 'action': '收集并整理定量与定性数据', 'output': '从公开渠道获取权威数据(如Wind、公司财报等),并对数据进行分类处理,区分历史数据、预测数据以及定性分析。', 'criteria_for_success': '数据来源是否可靠,数据是否经过交叉验证,定量与定性信息是否平衡分布。', 'common_issues': '数据陈旧或不准确,定性分析缺乏足够支撑,导致结论可信度降低。', 'solution': '建立数据核查机制,确保所有引用数据均来自权威渠道,并辅以专家访谈或行业调研补充定性分析。'}, {'step': 4, 'action': '构建论证逻辑链', 'output': '针对每个市场热点或行业配置建议,逐层递进地提出论点、论据和推导过程,使用历史复盘、案例对比等方式增强说服力。', 'criteria_for_success': '论证路径是否环环相扣,是否有充分的数据和事实支撑,是否存在逻辑漏洞。', 'common_issues': '论证链条断裂或跳跃过大,使得读者难以理解结论的形成过程。', 'solution': '采用“总-分-总”结构,先概述总体观点,再分解为子论点逐一证明,最后总结强化核心结论。'}, {'step': 5, 'action': '识别并处理不确定性因素', 'output': '列出可能的风险因素,例如政策变化、经济基本面下行等,并说明其潜在影响及应对策略。', 'criteria_for_success': '风险提示是否全面且及时,是否提供了可行的应对措施。', 'common_issues': '忽视重大风险或低估其影响,导致建议缺乏稳健性。', 'solution': '引入情景分析法,模拟不同可能性下的市场表现,制定相应的投资策略调整预案。'}, {'step': 6, 'action': '提炼可操作的配置建议', 'output': '基于前述分析,给出具体的行业配置方向和个股推荐,同时明确买入/卖出时机。', 'criteria_for_success': '建议是否明确具体,是否具有可执行性,是否符合当前市场环境。', 'common_issues': '建议过于笼统,缺乏实操价值,或者脱离实际市场条件。', 'solution': '结合历史数据和当前市场特征,设定量化指标(如估值百分位、交易拥挤度等)作为行动依据。'}, {'step': 7, 'action': '撰写报告并优化表达', 'output': '完成报告初稿,检查语言表述是否简洁明了,图表是否直观易懂,整体排版是否美观。', 'criteria_for_success': '报告是否易于阅读,关键信息是否一目了然,视觉呈现是否专业。', 'common_issues': '文字冗长晦涩,图表复杂难懂,影响用户体验。', 'solution': '邀请非专业人士审阅报告,收集反馈意见并优化表达方式;使用统一模板规范排版格式。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 00:12:53", "modified_time": "2025-08-14 00:12:53", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "0e3ad8ed45024e8c95567937198bb9e0", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究、投资标的分析以及市场情绪评估类的金融分析任务。尤其适合需要结合定量与定性数据,从多维度指标(如资产联动、市场配置、交易情绪等)展开综合性评估的工作场景。", "content": "[{'step': 1, 'action': '明确分析目标并定义核心问题', 'output': '一份清晰的研究目标和关键问题清单,例如:‘当前市场交易情绪是否过热?’或‘股票资产相对于债券的配置价值如何?’', 'completion_criteria': '目标是否具体且可操作;问题清单是否涵盖所有关键变量。', 'common_issues': '目标过于宽泛或模糊,缺乏明确的研究方向。', 'solutions': '通过与利益相关方沟通,明确分析的具体用途及决策需求,确保目标聚焦。'}, {'step': 2, 'action': '设计章节结构以逻辑递进组织信息', 'output': '一个包含大类指标分类及细分指标的框架,如‘资产联动指标→市场配置指标→市场交易/情绪指标→投资者行为’。', 'completion_criteria': '章节安排是否符合从宏观到微观、从静态到动态的逻辑顺序;是否能有效引导读者逐步理解结论。', 'common_issues': '章节间逻辑断层或信息堆砌,导致阅读体验不佳。', 'solutions': '在每个章节开头加入简短概述,说明本部分的核心内容及其对整体分析的意义。'}, {'step': 3, 'action': '优先展示最核心的结论,并用数据支撑', 'output': '一张汇总表或图表,突出显示关键指标的历史分位数、当前值及变化趋势,例如‘股债相对收益率’和‘ERP’。', 'completion_criteria': '核心结论是否一目了然;支持数据是否准确且易于理解。', 'common_issues': '过多细节掩盖了主要发现,使重点不突出。', 'solutions': '采用可视化工具(如柱状图、折线图)呈现核心数据,并辅以简洁的文字解释。'}, {'step': 4, 'action': '平衡定量与定性信息,进行多层次论证', 'output': '每一类指标下既有历史数据对比,也有对未来可能走势的预测,例如‘持有股债收益差’的历史低点与当前水平比较。', 'completion_criteria': '定量数据是否充分验证定性观点;预测是否基于合理假设。', 'common_issues': '定量与定性信息失衡,导致论证力度不足。', 'solutions': '为每项定性判断提供至少两个定量数据点作为支撑,同时标注不确定性来源。'}, {'step': 5, 'action': '适时引入风险提示,讨论不确定性和多种可能性', 'output': '专门的风险提示章节,列出潜在风险因素及其影响路径,例如‘海外局势演化超预期’。', 'completion_criteria': '风险提示是否全面覆盖关键领域;是否提供了应对策略建议。', 'common_issues': '风险提示流于形式,未深入探讨实际影响。', 'solutions': '针对每种风险情景,设计具体的敏感性测试或压力测试,量化其潜在冲击。'}, {'step': 6, 'action': '总结全文,提炼行动建议', 'output': '一段总结段落,概括主要发现并提出具体的投资或政策建议,例如‘建议关注估值偏低的创业板指’。', 'completion_criteria': '总结是否言简意赅;建议是否具有可操作性。', 'common_issues': '总结空洞无物,未能提炼出实质性的行动指南。', 'solutions': '围绕核心结论,提炼出不超过三条的关键行动建议,并附上实施步骤。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 00:15:02", "modified_time": "2025-08-14 00:15:02", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "ad9ddeafe40542e38166c4b4113046d7", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、资产配置分析、宏观经济与市场趋势预测等类型的金融分析任务,尤其适合需要综合定量和定性数据,结合政策、市场动态及全球宏观环境进行多维度评估的场景。", "content": "[{'step': 1, 'action': '明确核心观点与资产配置建议', 'output': '形成简洁清晰的核心观点,包括对权益、债券、商品市场的整体看法及具体资产配置建议。', 'completion_criteria': '核心观点逻辑清晰,能够直接指导投资决策;资产配置建议需基于当前经济周期、政策导向和市场情绪,具备可操作性。', 'common_issues': ['核心观点过于宽泛,缺乏针对性。', '未能充分结合最新市场数据或政策动态。'], 'solutions': ['在撰写核心观点时,优先引用关键数据(如PMI、就业数据)和事件(如政治局会议、贸易协定)作为支撑。', '确保观点与实际市场表现一致,避免过度推测。']}, {'step': 2, 'action': '回顾并整理全球大类资产表现', 'output': '提供涵盖权益、债券、商品、外汇等主要资产类别的周度回顾,包括涨跌幅、驱动因素及相互关系。', 'completion_criteria': '数据准确且来源可靠,解释各资产类别表现的核心驱动因素需明确,能够反映市场情绪与基本面变化。', 'common_issues': ['数据覆盖不全面,遗漏重要资产类别或关键驱动因素。', '对资产间相关性分析不足,导致结论缺乏全局视角。'], 'solutions': ['使用权威数据库(如同花顺、Wind)获取数据,确保准确性。', '通过图表展示资产间的跷跷板效应(如股债、商品与权益),增强直观性。']}, {'step': 3, 'action': '分析国内权益市场表现', 'output': '梳理风格轮动、行业涨跌幅及成交额变化,揭示市场热点及资金流向。', 'completion_criteria': '风格划分清晰,行业涨跌排序合理,能够体现市场偏好;成交额变化需与市场情绪相匹配。', 'common_issues': ['忽略中小盘股或冷门行业表现,导致分析片面。', '对资金流动方向的解读不够深入。'], 'solutions': ['采用申万一级行业分类标准,确保行业划分科学性。', '结合两融余额、基金仓位等指标,分析资金流向及市场情绪。']}, {'step': 4, 'action': '跟踪利率与汇率动态', 'output': '分析国内外利率走势、汇率波动及其背后驱动因素,评估流动性环境。', 'completion_criteria': '利率与汇率分析需结合央行货币政策、国际资本流动及市场预期,形成对未来趋势的判断。', 'common_issues': ['忽略短期扰动因素(如月末效应、季节性波动)的影响。', '对外部冲击(如关税政策、地缘政治)的敏感性不足。'], 'solutions': ['分阶段拆解影响因素,例如将跨月流动性压力单独列出。', '利用CME FedWatch工具监测美联储政策预期变化。']}, {'step': 5, 'action': '追踪大宗商品价格走势', 'output': '针对原油、黄金、金属铜等重点商品,分析供需格局、库存变化及价格波动原因。', 'completion_criteria': '商品价格分析需结合高频数据(如EIA库存、LME铜价)及宏观背景,揭示短期波动与长期趋势。', 'common_issues': ['仅关注价格本身,忽略产业链上下游联动。', '对突发事件(如地缘冲突、政策调整)反应滞后。'], 'solutions': ['引入远期现货指数、加工费等指标,全面刻画供需关系。', '实时更新突发事件信息,快速调整分析框架。']}, {'step': 6, 'action': '行业与主题高频数据跟踪', 'output': '汇总地产、消费、制造业等行业高频数据,识别结构性亮点与潜在风险。', 'completion_criteria': '高频数据选取具有代表性,能够反映行业景气度;分析需兼顾季节性与长期趋势。', 'common_issues': ['数据颗粒度过粗,无法捕捉细微变化。', '忽视区域差异或细分领域表现。'], 'solutions': ['细化数据维度,例如区分一二三线城市地产销售数据。', '增加专题分析,聚焦高成长性或政策扶持领域。']}, {'step': 7, 'action': '总结重要市场数据与政策动态', 'output': '提炼近期重大政策、经济数据及市场事件,分析其潜在影响。', 'completion_criteria': '政策解读需结合历史经验与当前环境,经济数据分析需突出边际变化。', 'common_issues': ['政策解读流于表面,缺乏实质性洞见。', '对经济数据的解读脱离实际市场反馈。'], 'solutions': ['对比历史类似政策的效果,增强预测可信度。', '结合市场交易行为验证经济数据的影响力。']}, {'step': 8, 'action': '提出风险提示与应对策略', 'output': '列举可能影响市场的不确定性因素,并给出相应的风险缓释措施。', 'completion_criteria': '风险提示需具体且有依据,应对策略需切实可行。', 'common_issues': ['风险提示过于笼统,缺乏针对性。', '应对策略过于保守或激进,不符合客户风险偏好。'], 'solutions': ['逐一列出风险点并量化其潜在影响。', '根据不同投资者类型设计差异化应对方案。']}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 00:17:11", "modified_time": "2025-08-14 00:17:11", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "01d2c435d16c48e69862f32a3d32a922", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及资本市场工具创新评估等任务,尤其是涉及创新型金融工具(如定向可转债)的分析场景。它能够帮助分析师系统性地组织信息、论证逻辑,并平衡定量与定性分析。", "content": "[{'step': 1, 'action': '明确研究目标和背景,定义核心问题', 'output': '清晰的研究目标和背景描述,例如北交所定向可转债的制度特点、市场定位及其对企业和投资者的意义。', 'criteria_for_completion': '目标是否具体且具有针对性;背景信息是否充分支持后续分析展开。', 'common_issues': '研究目标过于宽泛或模糊,导致后续章节结构松散。', 'solutions': '通过团队讨论或客户反馈确认研究的核心方向,并确保背景信息与目标高度相关。'}, {'step': 2, 'action': '构建章节结构,安排信息优先级', 'output': '包含政策背景、产品特性、市场实践、展望与风险提示的完整章节框架,确保逻辑层次递进。', 'criteria_for_completion': '章节间是否有明确的逻辑关系;核心结论是否在早期章节突出展示。', 'common_issues': '章节之间缺乏连贯性,或者核心结论被淹没在细节中。', 'solutions': '使用金字塔原理组织内容,先呈现结论,再逐步展开支持性论据。'}, {'step': 3, 'action': '收集并整合定量与定性数据', 'output': '包括政策文件、市场数据、案例公司财务信息等在内的全面数据集,辅以图表展示关键发现。', 'criteria_for_completion': '数据是否准确、全面,且能有效支撑观点;图表是否直观易懂。', 'common_issues': '数据来源单一或不具代表性,图表设计复杂难懂。', 'solutions': '多渠道验证数据可靠性,简化图表设计,突出核心指标。'}, {'step': 4, 'action': '运用对比分析法,突出差异化优势', 'output': '通过横向(如北交所 vs 沪深市场)和纵向(如历史 vs 当前)对比,提炼出定向可转债的独特价值。', 'criteria_for_completion': '对比结果是否清晰呈现;差异化优势是否得到充分阐释。', 'common_issues': '对比维度选择不当,导致分析流于表面。', 'solutions': '基于研究目标选择最具代表性的对比维度,深入挖掘差异背后的原因。'}, {'step': 5, 'action': '构建论证路径,层层递进建立观点', 'output': '从政策推动到市场实践,再到未来展望,形成完整的论证链条,每一步都以前一步为基础。', 'criteria_for_completion': '论证是否环环相扣;每个环节是否都有充分的数据和逻辑支持。', 'common_issues': '论证跳跃性大,缺乏过渡性解释。', 'solutions': '增加过渡段落或小结,确保各部分之间的衔接自然流畅。'}, {'step': 6, 'action': '适时引入风险因素,增强报告可信度', 'output': '在结论部分之后单独列出风险提示,涵盖宏观环境、数据误差、流动性不足等潜在风险。', 'criteria_for_completion': '风险提示是否全面且客观;是否与正文内容保持一致。', 'common_issues': '风险提示过于简略,或与正文脱节。', 'solutions': '结合实际案例补充风险说明,确保其与正文紧密关联。'}, {'step': 7, 'action': '撰写总结与展望,提出具体建议', 'output': '对未来发展趋势进行预测,并给出针对企业、投资者及监管机构的具体行动建议。', 'criteria_for_completion': '展望是否基于现有数据和趋势;建议是否具有操作性。', 'common_issues': '展望空洞无物,建议泛泛而谈。', 'solutions': '结合数据分析提炼切实可行的建议,避免空谈概念。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 00:18:44", "modified_time": "2025-08-14 00:18:44", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "047cc27357e349d3b1d3877fcdd7358a", "experience_type": "text", "when_to_use": "此规划框架适用于涉及复杂国际贸易政策分析、关税动态跟踪及投资建议的金融分析任务,尤其是需要结合定量数据与定性评估,提供多维度市场洞察和策略建议的场景。例如:行业深度研究、宏观经济政策解读、投资标的筛选与配置建议等。", "content": "[{'step': 1, 'action': '明确分析目标与核心问题', 'output': '定义报告的核心关注点,如本次分析聚焦于美国对等关税政策动态及其对市场的潜在影响。', 'completion_criteria': '能够清晰回答‘本次分析要解决什么问题?’,并形成具体的目标陈述(如:评估关税政策变化对市场的影响)。', 'common_issues': '目标过于宽泛或模糊,导致后续分析缺乏方向。', 'solutions': '通过团队讨论或客户沟通明确优先级,确保目标具体且可操作。'}, {'step': 2, 'action': '收集与整理相关信息', 'output': '系统化地整理政策动态、历史数据、相关国家协议内容及市场反应信息,形成结构化的数据集。', 'completion_criteria': '数据覆盖全面且分类清晰,包括定量数据(如税率变化)和定性信息(如谈判进展)。', 'common_issues': '信息来源单一或数据不完整,可能导致结论偏差。', 'solutions': '使用多种权威来源(如政府公告、新闻媒体、行业报告)交叉验证,并标注信息可信度。'}, {'step': 3, 'action': '设计章节结构与信息优先级', 'output': '根据逻辑递进关系安排章节,优先展示关键背景信息(如政策时间线)、核心结论(如税率调整对市场的影响)及后续风险因素。', 'completion_criteria': '章节结构清晰,信息优先级合理,读者能快速抓住重点。', 'common_issues': '章节间逻辑断裂或信息堆砌,导致报告难以阅读。', 'solutions': '采用‘总-分-总’结构,先概述全局,再深入细节,最后总结关键点。'}, {'step': 4, 'action': '构建论证逻辑与观点递进', 'output': '通过政策动态的时间线梳理,逐步推导出当前局势及其潜在影响,同时引入不同情景假设以应对不确定性。', 'completion_criteria': '观点层层递进,逻辑链条完整,能有效支撑最终结论。', 'common_issues': '论证过程跳跃过大或缺乏数据支持,削弱说服力。', 'solutions': '在每个论点后附上数据或案例佐证,确保逻辑严密且有据可依。'}, {'step': 5, 'action': '平衡定量与定性信息分布', 'output': '结合历史数据(如过往税率变化)与定性分析(如谈判背景),确保两者比例适中且互为补充。', 'completion_criteria': '定量与定性信息分布均衡,既不过于枯燥也不失严谨。', 'common_issues': '过度依赖某一类信息,导致分析片面或缺乏深度。', 'solutions': '设立检查清单,确保每部分内容都包含至少一个定量和定性元素。'}, {'step': 6, 'action': '提出风险因素与应对策略', 'output': '在适当时机(如分析末尾)列出主要风险因素,并提供缓解措施或观察指标。', 'completion_criteria': '风险因素全面且具体,提出的应对策略具有可行性。', 'common_issues': '风险因素表述笼统或缺乏针对性,无法指导实际决策。', 'solutions': '针对每个风险点匹配具体的监控指标或行动方案。'}, {'step': 7, 'action': '提炼投资建议与行业配置策略', 'output': '基于前述分析,提出明确的投资建议(如重点关注硬科技领域龙头公司)及相关行业配置方向。', 'completion_criteria': '建议具体且可操作,能够直接指导投资决策。', 'common_issues': '建议泛泛而谈,缺乏实际落地价值。', 'solutions': '结合市场热点与客户需求,细化建议至具体行业或标的。'}, {'step': 8, 'action': '校验与优化报告呈现形式', 'output': '检查图表、数据格式及语言表达是否清晰准确,确保报告易于理解。', 'completion_criteria': '报告视觉效果良好,语言简洁明了,无明显错误。', 'common_issues': '图表混乱或语言冗长,影响阅读体验。', 'solutions': '邀请同行审阅并反馈,进行必要的修改与优化。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 01:19:19", "modified_time": "2025-08-14 01:19:19", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "7d8e7c90a251433a96fdc7a64daa272a", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及市场趋势解读类任务。尤其适合需要结合定量数据分析(如市场表现、交易数据)和定性分析(如政策解读、产业趋势展望)的场景,同时需兼顾风险提示与不确定性管理。", "content": "[{'step': 1, 'action': '明确报告目标与受众', 'output': '确定报告的核心主题(如本周市场回顾、产业趋势展望等),并基于受众需求设置信息优先级。', 'criteria_for_completion': '核心主题清晰且与当前市场热点高度相关;信息优先级合理,能快速抓住读者注意力。', 'common_issues': '主题过于宽泛或偏离受众需求,导致内容缺乏聚焦。', 'solutions': '在开篇部分直接点明报告目标,并通过小标题或摘要明确各部分内容与目标的关联性。'}, {'step': 2, 'action': '组织章节结构,确保逻辑递进', 'output': '按照“现状描述→数据分析→趋势展望→风险提示”的顺序安排章节,逐步从基础信息过渡到深层洞察。', 'criteria_for_completion': '章节间逻辑连贯,信息展示层次分明;核心结论在趋势展望部分得到充分支撑。', 'common_issues': '章节顺序混乱,导致读者难以跟随分析思路;结论缺乏数据支持。', 'solutions': '使用流程图或提纲提前规划章节结构,确保每一部分为下一阶段提供必要铺垫。'}, {'step': 3, 'action': '整合定量与定性信息,平衡历史与预测视角', 'output': '将定量数据(如市场成交额、涨跌幅)与定性分析(如政策解读、产业趋势)相结合,同时覆盖历史表现与未来展望。', 'criteria_for_completion': '定量与定性信息比例适当,历史数据与预测分析互为补充;图表清晰直观,便于理解。', 'common_issues': '过度依赖某一种类型的信息,导致分析片面化;图表复杂难懂。', 'solutions': '对每种信息类型设置独立模块,并通过简短注释解释关键数据和趋势的意义。'}, {'step': 4, 'action': '突出核心结论,采用分层论证方法', 'output': '在趋势展望部分提炼出3-5个核心观点,并通过层层递进的论证路径(如从宏观到微观、从整体到局部)加以支撑。', 'criteria_for_completion': '核心结论明确且具有前瞻性;论证过程逻辑严密,能够说服读者接受观点。', 'common_issues': '核心结论模糊或缺乏新意;论证过程跳跃,无法形成闭环。', 'solutions': '在趋势展望部分设置总结性段落,用简练语言概括核心观点,并附上支撑论据的索引。'}, {'step': 5, 'action': '适时提出风险因素,处理不确定性和多种可能性', 'output': '在报告末尾专门设置风险提示章节,列出潜在风险点及其可能影响,同时讨论应对策略。', 'criteria_for_completion': '风险提示全面且具体;不确定性被合理纳入分析框架,避免过度乐观或悲观。', 'common_issues': '风险提示过于笼统或遗漏关键风险;未对多种可能性进行情景化分析。', 'solutions': '针对每个风险点设计假设情景,并说明不同情境下的潜在结果及应对措施。'}, {'step': 6, 'action': '优化信息展示形式,提升可读性', 'output': '通过图表、表格、重点标注等方式增强信息可视化效果,确保复杂数据易于理解。', 'criteria_for_completion': '图表与文字内容高度契合;视觉呈现简洁美观,无冗余信息。', 'common_issues': '图表过多或过少,导致信息密度失衡;关键数据未被突出显示。', 'solutions': '为每个图表添加简短说明,强调其在整体分析中的作用;使用颜色或加粗标记关键数据。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 01:20:29", "modified_time": "2025-08-14 01:20:29", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "cd7e22d6d30f4fadab225d6ff8cee6d1", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究、投资标的分析、风险评估报告等金融分析任务,尤其是需要结合定量与定性数据进行行业轮动模型构建和ETF组合推荐的场景。", "content": "[{'step': 1, 'action': '明确分析目标和范围', 'output': '确定报告的核心主题(如行业轮动模型构建及ETF组合推荐),并列出需要覆盖的关键内容模块(如模型介绍、历史回测、策略跟踪、情景分析、风险提示)。', 'evaluation': '是否清晰定义了分析目标,是否涵盖所有必要的内容模块。', 'common_issues': '目标模糊或遗漏关键模块。', 'solution': '在项目启动时通过团队讨论明确目标,并参考过往成功案例确保模块完整性。'}, {'step': 2, 'action': '收集和整理基础数据', 'output': '获取公开历史数据(如Wind数据库中的行业因子、收益率数据),并对数据进行清洗和标准化处理,确保数据质量。', 'evaluation': '数据是否完整、准确,是否经过清洗和标准化处理。', 'common_issues': '数据缺失或不一致。', 'solution': '建立数据检查清单,使用自动化脚本进行初步清洗,必要时手动校正异常值。'}, {'step': 3, 'action': '设计核心分析模型', 'output': '基于理论框架(如相似预期差因子和动态分析师预期因子)设计数学模型,明确变量定义和计算方法。', 'evaluation': '模型逻辑是否清晰,计算方法是否合理且可复现。', 'common_issues': '模型复杂度过高或变量定义不明确。', 'solution': '简化模型结构,优先选择易解释的变量,并通过同行评审验证合理性。'}, {'step': 4, 'action': '执行历史回测和绩效评估', 'output': '利用样本期内的历史数据对模型进行回测,生成IC统计、年化收益率、波动率、最大回撤等关键指标。', 'evaluation': '回测结果是否稳定,关键指标是否符合预期。', 'common_issues': '过拟合或样本外表现不佳。', 'solution': '采用交叉验证方法,避免过度优化参数,确保模型泛化能力。'}, {'step': 5, 'action': '制定行业配置策略', 'output': '根据模型输出推荐行业配置方案,提供月度或季度更新的具体行业名单及权重分配。', 'evaluation': '配置建议是否具有逻辑性和可操作性,是否与市场环境匹配。', 'common_issues': '配置过于集中或忽视短期市场变化。', 'solution': '引入多样化约束条件,定期调整配置以应对市场变化。'}, {'step': 6, 'action': '构建ETF组合', 'output': '筛选符合条件的ETF基金标的,列出基金代码、名称及相关信息,并形成最终投资组合。', 'evaluation': 'ETF组合是否覆盖所有推荐行业,是否满足流动性要求。', 'common_issues': '标的数量不足或流动性不足。', 'solution': '设置最低规模门槛(如基金份额>1亿),优先选择交易活跃的标的。'}, {'step': 7, 'action': '撰写报告并突出核心结论', 'output': '按照章节结构组织报告内容,优先展示核心结论(如最新配置观点、收益率表现),并通过图表辅助说明。', 'evaluation': '信息展示是否层次分明,核心结论是否一目了然。', 'common_issues': '内容冗长或重点不突出。', 'solution': '采用金字塔结构,先呈现结论再详细展开,每页PPT或段落聚焦一个主题。'}, {'step': 8, 'action': '加入情景分析和风险提示', 'output': '针对不同市场情景(如快速下跌、强劲反弹)测试策略表现,并列举潜在风险因素。', 'evaluation': '情景分析是否全面,风险提示是否充分。', 'common_issues': '忽略极端情况或低估风险。', 'solution': '模拟多种市场情景,邀请多方专家审阅风险提示部分。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 01:21:40", "modified_time": "2025-08-14 01:21:40", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "ea6948b2900b4329b47fbc7798f17756", "experience_type": "text", "when_to_use": "此规划框架适用于金融市场的短期走势分析、行业板块轮动研究、投资策略制定以及宏观经济与政策影响评估等任务。尤其适合需要结合定量数据(如市场指数、成交量)和定性信息(如政策解读、风险提示)的综合分析场景。", "content": "[{'step': 1, 'action': '明确分析目标与核心问题', 'output': '确定本次分析的核心主题,例如市场走势研判、板块表现评估或政策影响分析,并定义关键问题(如:当前市场调整的原因是什么?未来可能的机会在哪里?)。', 'completion_criteria': '核心问题清晰且具有针对性,能够指导后续章节结构设计。', 'common_issues': '目标过于宽泛或模糊,导致后续分析缺乏聚焦。', 'solutions': '通过客户沟通或团队讨论,明确分析的具体需求和优先级。'}, {'step': 2, 'action': '收集并整理基础数据', 'output': '获取市场表现数据(如指数涨跌幅、成交量)、行业板块数据(如申万行业排名)、政策动态(如发改委新闻发布会内容)及外部环境信息(如美国PCE物价指数)。', 'completion_criteria': '数据来源可靠且覆盖全面,能够支持后续的定量和定性分析。', 'common_issues': '数据不完整或时效性不足,影响分析准确性。', 'solutions': '建立固定的数据源清单,确保及时更新;使用专业数据库(如iFinD)提高效率。'}, {'step': 3, 'action': '设计章节结构并安排信息优先级', 'output': '按照“市场表现→板块分析→后市展望→风险提示”的逻辑组织内容,确保核心结论(如短期调整但中期向好)在前段突出展示。', 'completion_criteria': '章节结构清晰,信息分布合理,核心结论易于识别。', 'common_issues': '章节顺序混乱或信息堆砌,导致读者难以抓住重点。', 'solutions': '采用“总-分-总”结构,先概述整体情况,再展开细节分析,最后总结观点。'}, {'step': 4, 'action': '进行定量与定性分析', 'output': '对市场表现数据进行定量分析(如指数涨跌幅、成交额变化),结合定性信息(如政策解读、市场情绪)推导出趋势判断(如技术性调整、获利盘回吐压力)。', 'completion_criteria': '分析过程逻辑严密,定量与定性信息相互印证,得出可信的结论。', 'common_issues': '定量与定性分析脱节,导致结论缺乏说服力。', 'solutions': '在每个分析环节中,确保定量数据有定性解释支撑,反之亦然。'}, {'step': 5, 'action': '提出多层次的风险提示', 'output': '从宏观(如全球经济下滑)到微观(如板块回调风险)梳理潜在风险点,并提供应对建议(如关注机械设备、大消费板块)。', 'completion_criteria': '风险提示全面且具体,能够帮助投资者规避潜在损失。', 'common_issues': '风险提示过于笼统或遗漏重要风险因素。', 'solutions': '参考历史案例和行业经验,系统化梳理风险清单,并结合当前市场环境进行筛选。'}, {'step': 6, 'action': '撰写最终报告并优化表达', 'output': '整合所有分析内容,形成完整的研究报告,包括图表展示、文字说明和评级建议(如板块配置建议)。', 'completion_criteria': '报告语言简洁明了,图表直观易懂,结论与分析紧密关联。', 'common_issues': '报告冗长或表述晦涩,影响阅读体验。', 'solutions': '采用模块化写作方式,每部分内容独立成段;邀请同事审阅以优化表达。'}, {'step': 7, 'action': '复核与合规检查', 'output': '检查报告中的数据准确性、逻辑一致性和合规性(如避免利益冲突声明)。', 'completion_criteria': '报告无明显错误,符合公司内部审核标准和监管要求。', 'common_issues': '忽略合规细节,可能导致法律或声誉风险。', 'solutions': '建立标准化的复核清单,逐项核对报告内容。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 01:23:03", "modified_time": "2025-08-14 01:23:03", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "c76cf23c3e784e14a5adf51f98719339", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及市场表现评估等金融分析任务。尤其适合需要结合定量与定性数据,同时关注市场动态、政策变化及企业基本面的综合性研究报告制作场景。", "content": "[{'step': 1, 'action': '明确报告目标和核心主题', 'output': '确定本次分析的核心关注点(如北交所市场表现、产业催化与中报高增标的),并列出关键问题清单(例如:市场表现如何?有哪些政策或行业新闻影响?哪些标的值得关注?)。', 'completion_criteria': '核心主题清晰,能够通过主题快速判断报告适用的读者群体(如机构投资者、个人投资者)。', 'common_issues': '目标过于宽泛,导致后续章节结构松散;应对方法是先聚焦于1-2个核心问题展开。', 'contextual_adaptation': '在不同场景下,可根据需求调整主题范围,如从单一市场扩展到跨市场比较,或从短期表现转向长期趋势分析。'}, {'step': 2, 'action': '组织章节结构并分配信息优先级', 'output': '按照逻辑顺序安排章节,通常包括市场表现回顾、行业新闻、观点分析、新股上市情况、投资建议和风险提示等部分。优先展示定量数据(如指数涨跌幅、成交额)以提供直观的市场概览,随后用定性分析(如政策解读、产业催化)补充背景。', 'completion_criteria': '章节结构清晰且信息分布合理,能够引导读者逐步深入理解分析内容。', 'common_issues': '章节间逻辑不连贯,可能导致信息重复或遗漏;应对方法是提前绘制信息流图,确保每部分内容服务于整体目标。', 'contextual_adaptation': '根据任务需求调整章节权重,如在风险评估报告中可增加风险因素的篇幅,而在投资标的分析中则突出个股推荐理由。'}, {'step': 3, 'action': '收集和整理定量与定性数据', 'output': '获取相关市场的历史数据(如指数走势、成交量)、最新行业动态(如政策公告、技术突破)以及公司基本面信息(如财务报表、估值水平)。将数据分类为历史/预测、定量/定性,并标注来源。', 'completion_criteria': '数据全面且准确,能够支持后续的观点论证;所有引用数据均标明出处。', 'common_issues': '数据过时或来源不可靠;应对方法是优先选择权威数据库(如Wind、iFinD)并交叉验证。', 'contextual_adaptation': '针对不同类型的任务,可以灵活调整数据侧重点,如在宏观经济分析中更注重时间序列数据,在个股分析中则侧重财务指标。'}, {'step': 4, 'action': '构建核心观点并进行分层论证', 'output': '基于数据分析提炼出核心观点(如“北证50指数回调压力明显”、“关注中报高增与产业催化共振标的”),并通过多层论证路径逐步建立可信度。例如,先陈述定量事实,再结合定性分析解释原因,最后提出行动建议。', 'completion_criteria': '观点明确且论据充分,能够自然过渡到投资建议或决策指导。', 'common_issues': '论证过程跳跃性太强,缺乏逻辑链条;应对方法是采用金字塔原理,逐层递进地展开论述。', 'contextual_adaptation': '根据不同场景调整论证深度,如面向专业投资者可增加技术细节,而面向普通读者则强调结论的易读性。'}, {'step': 5, 'action': '处理不确定性和风险因素', 'output': '识别潜在风险(如政策风险、流动性风险)并适时引入讨论,通常放在报告后半部分但需与前文形成呼应。使用概率语言描述不确定性(如“可能进一步加剧分歧”),并提供多种情景假设。', 'completion_criteria': '风险提示具体且具有针对性,不会让读者感到突兀或模糊。', 'common_issues': '忽略风险因素或表述过于笼统;应对方法是系统梳理内外部环境中的潜在威胁,并量化其影响。', 'contextual_adaptation': '在不同任务中,可以根据重要性调整风险提示的位置和篇幅,如在危机预警报告中将其置于开头。'}, {'step': 6, 'action': '总结并给出具体投资建议', 'output': '提炼全文精华,重申核心观点,并给出明确的操作指引(如“优先配置估值安全边际较高的标的”)。附上估值指标(如PE TTM)作为参考依据。', 'completion_criteria': '建议具体可行,能够直接转化为投资决策;估值指标计算无误。', 'common_issues': '建议空洞或脱离实际;应对方法是确保建议与前文分析紧密关联,并提供数据支撑。', 'contextual_adaptation': '根据受众需求调整建议风格,如对机构客户可用复杂模型,而对个人投资者则简化表达。'}, {'step': 7, 'action': '校验报告完整性和合规性', 'output': '检查报告是否符合内部规范(如免责声明、评级标准),并核对数据、图表和文字的一致性。确认所有引用资料均已注明来源。', 'completion_criteria': '报告内容完整且格式统一,无重大错误或遗漏。', 'common_issues': '忽略合规要求或格式混乱;应对方法是设立专门的校对环节,并使用模板化工具提高效率。', 'contextual_adaptation': '根据监管要求和客户偏好调整报告形式,如某些地区可能需要额外披露特定信息。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 01:25:05", "modified_time": "2025-08-14 01:25:05", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "74bfdd8b1acf461d8d53f33e7ffbaeea", "experience_type": "text", "when_to_use": "此规划框架适用于金融领域的策略报告撰写,包括但不限于行业深度研究、市场展望分析、投资组合管理建议、风险评估报告等。尤其适合需要结合宏观经济数据、政策变化和市场动态进行综合研判的任务。", "content": "[{'step': 1, 'action': '明确目标与主题', 'output': '确定报告的核心主题(如市场震荡分析)以及目标受众(如机构投资者、个人投资者),并列出关键问题(如债市拐点、股市震荡原因等)。', 'completion_criteria': '能够清晰定义报告的主题、核心问题及目标读者群体,确保所有后续内容围绕这些要素展开。', 'common_issues': '主题过于宽泛或模糊,导致分析缺乏聚焦。', 'solutions': '通过团队讨论或客户沟通明确需求,优先选择当前市场热点或客户关注的重点问题作为切入点。'}, {'step': 2, 'action': '收集与整理相关数据', 'output': '从权威来源(如Wind、官方统计数据、政策文件等)获取定量数据(如GDP、PMI、利率)和定性信息(如政策声明、市场情绪),并对数据进行初步分类和标注。', 'completion_criteria': '形成一个结构化的数据集,包含历史数据、近期事件、未来预测三类信息,并确保数据来源可靠且具有时效性。', 'common_issues': '数据不完整或过时,影响分析的准确性。', 'solutions': '建立固定的数据更新机制,定期检查权威数据源,同时对多渠道信息交叉验证以提高可靠性。'}, {'step': 3, 'action': '设计章节框架与逻辑路径', 'output': '根据报告目标设计章节结构,通常包括背景介绍、数据分析、市场展望、风险提示等部分,确保逻辑递进且重点突出。', 'completion_criteria': '章节安排合理,逻辑连贯,能够引导读者逐步理解复杂问题,同时核心结论在开头或显眼位置呈现。', 'common_issues': '章节之间逻辑断裂,或重要信息被埋没在次要内容中。', 'solutions': '采用“倒金字塔”结构,将最重要信息放在最前;使用过渡句连接各章节,确保阅读流畅性。'}, {'step': 4, 'action': '构建核心观点与论证链条', 'output': '基于数据提炼出核心观点,并通过层层递进的方式进行论证,例如从宏观环境到微观细节,从历史趋势到未来预测。', 'completion_criteria': '观点明确且有充分支持,论证过程条理清晰,避免跳跃式推理或未经验证的假设。', 'common_issues': '论证链条薄弱,无法有效支撑观点。', 'solutions': '引入更多维度的数据和案例补充论据,必要时加入专家访谈或模型测算结果增强说服力。'}, {'step': 5, 'action': '平衡定量与定性分析', 'output': '在报告中均衡分布定量分析(如图表、数据对比)和定性分析(如政策解读、市场情绪),并通过可视化工具强化展示效果。', 'completion_criteria': '定量与定性分析比例适当,图表简洁直观,文字说明精准到位,整体信息密度适中。', 'common_issues': '过度依赖某一种分析方式,导致报告单调乏味或难以理解。', 'solutions': '制定定量与定性内容配比规则,例如60%定量+40%定性,并严格遵循;使用专业制图软件优化图表表现形式。'}, {'step': 6, 'action': '提出风险因素与不确定性处理', 'output': '识别潜在风险(如政策变动、地缘政治冲突),并在合适时机(如市场展望后)单独列出,同时提供应对策略或情景分析。', 'completion_criteria': '风险提示全面且具体,涵盖多种可能性,且提出的解决方案切实可行。', 'common_issues': '风险因素表述笼统,缺乏针对性或实际操作价值。', 'solutions': '结合历史案例和市场现状细化风险描述,同时模拟不同情景下的应对措施,增加实用性。'}, {'step': 7, 'action': '总结与展望', 'output': '用简短段落总结核心发现,并对未来走势给出方向性建议,同时附上下一步重点关注事项。', 'completion_criteria': '总结言简意赅,展望具有前瞻性和指导意义,让读者快速抓住关键点。', 'common_issues': '总结冗长或偏离主题,展望空洞无物。', 'solutions': '限制总结字数,仅保留最关键信息;展望部分结合具体事件或时间节点,增强可操作性。'}, {'step': 8, 'action': '审阅与优化', 'output': '检查报告的语言表达、数据准确性、格式规范性,确保内容无误且符合发布标准。', 'completion_criteria': '报告语言精炼,数据准确无误,排版美观,符合公司品牌风格。', 'common_issues': '存在语法错误、数据偏差或格式混乱等问题。', 'solutions': '实施双人校对制度,一人负责内容审核,另一人负责格式检查;利用自动化工具辅助纠错。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 01:26:24", "modified_time": "2025-08-14 01:26:24", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "52c0e3b88ec84e89a92f339057b8985c", "experience_type": "text", "when_to_use": "此框架适用于金融领域的行业深度研究、政策影响分析、市场动态跟踪及投资标的筛选等任务。尤其适合需要结合宏观政策、行业趋势和个股表现进行综合分析的场景,例如定期市场报告、政策解读与投资建议。", "content": "[{'step': 1, 'action': '明确分析目标与受众需求', 'output': '确定本次分析的核心目标(如政策解读、市场表现评估)以及受众(如投资者、机构客户),并列出需要覆盖的关键主题。', 'completion_criteria': '目标清晰且与受众需求匹配,关键主题无遗漏。', 'common_issues': '目标过于宽泛或模糊,导致后续分析缺乏重点。', 'solutions': '通过团队讨论或客户反馈细化目标,并制定初步主题清单。'}, {'step': 2, 'action': '收集与整理数据', 'output': '从权威来源(如政府文件、交易所公告、第三方数据库)获取定量和定性数据,包括政策文件、市场行情、公司公告等,并按类别(资本市场新闻、行业动态、市场表现等)分类整理。', 'completion_criteria': '数据全面、准确,分类清晰,来源可靠。', 'common_issues': '数据不完整或过时,影响分析质量。', 'solutions': '建立数据核查机制,优先使用官方发布的信息,并标注数据来源。'}, {'step': 3, 'action': '构建报告结构与信息优先级排序', 'output': '设计章节结构(如资本市场新闻、行业动态、市场表现、公司公告等),并将核心结论(如政策影响、市场趋势)置于显眼位置。', 'completion_criteria': '章节逻辑清晰,信息展示优先级合理,核心结论突出。', 'common_issues': '章节安排混乱,次要信息喧宾夺主。', 'solutions': '遵循“重要性递减”原则,确保前两章涵盖最关键内容。'}, {'step': 4, 'action': '撰写分析内容并平衡定量与定性信息', 'output': '在每个章节中结合定量数据(如市场涨跌幅、成交量)和定性分析(如政策解读、行业趋势),并通过图表直观展示定量信息。', 'completion_criteria': '定量与定性信息分布均衡,图表清晰且有说明性。', 'common_issues': '过度依赖定量数据或定性分析,导致信息失衡。', 'solutions': '在每章末尾加入总结性段落,提炼核心观点并补充定性分析。'}, {'step': 5, 'action': '层层递进论证核心观点', 'output': '从宏观到微观逐步展开分析,先阐述政策背景,再分析行业动态,最后聚焦于个股表现,并通过逻辑链条强化观点。', 'completion_criteria': '论证路径清晰,观点层层递进,逻辑链条完整。', 'common_issues': '论证跳跃性强,缺乏过渡性解释。', 'solutions': '在章节之间增加过渡段落,明确前后内容的逻辑关系。'}, {'step': 6, 'action': '识别与披露风险因素', 'output': '在报告末尾列出主要风险因素(如政策不及预期、行业竞争加剧),并以客观语言描述其可能影响。', 'completion_criteria': '风险因素全面且表述客观,不影响整体分析的中立性。', 'common_issues': '风险提示过于笼统或偏向负面。', 'solutions': '结合具体案例说明风险,避免空洞表述。'}, {'step': 7, 'action': '审阅与优化报告', 'output': '对报告进行语言润色、数据核对和格式统一,确保内容专业、排版美观。', 'completion_criteria': '报告无明显错误,语言简洁专业,图表清晰。', 'common_issues': '语言冗长或格式不统一,影响阅读体验。', 'solutions': '指定专人负责审阅,使用模板规范格式。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 01:27:53", "modified_time": "2025-08-14 01:27:53", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "927590222bbe4bc29bc0b96f9f8b2c22", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究、投资标的分析以及市场趋势预测类的金融分析任务。尤其适合需要结合定量与定性数据,评估市场表现、提出投资建议,并平衡风险提示的场景。", "content": "[{'step': 1, 'action': '明确分析目标并定义核心问题', 'output': '清晰的研究主题和具体问题,例如‘北交所市场7月表现及未来展望’。', 'criteria_for_completion': '能够用一句话概括分析的核心目标,并确保所有后续内容围绕这一目标展开。', 'common_issues': '目标过于宽泛或模糊,导致后续分析缺乏聚焦。', 'solutions': '在开始时列出所有可能的问题点,通过团队讨论或初步数据分析筛选出最相关的核心问题。'}, {'step': 2, 'action': '收集和整理相关数据,包括历史数据、当前市场表现和预测数据', 'output': '一个包含定量(如指数涨跌幅、成交量、估值倍数)和定性信息(如政策导向、市场情绪)的数据集。', 'criteria_for_completion': '数据覆盖全面且准确,来源可靠,能支持后续分析所需的所有维度。', 'common_issues': '数据缺失或不一致,影响分析的可信度。', 'solutions': '优先使用权威数据库(如iFind、Wind),并通过交叉验证确保数据一致性;对缺失数据采用合理假设填补。'}, {'step': 3, 'action': '构建章节结构并分配信息优先级', 'output': '报告框架,通常包括‘周观点’、‘市场表现’、‘新股动态’等部分,按重要性排序展示信息。', 'criteria_for_completion': '章节逻辑清晰,信息优先级合理,核心结论突出。', 'common_issues': '章节间逻辑断裂,或次要信息占据过多篇幅。', 'solutions': '以‘从宏观到微观’或‘从整体到局部’为原则组织章节;将核心结论放在显眼位置,如每章开头或结尾。'}, {'step': 4, 'action': '进行定量分析,结合图表呈现关键指标变化', 'output': '一系列可视化图表(如折线图、柱状图)及其对应的解读说明,例如‘北证50指数7月下跌1.68%’。', 'criteria_for_completion': '图表直观易懂,数据解读精准,能直接支撑观点。', 'common_issues': '图表设计复杂或难以理解,数据解读流于表面。', 'solutions': '简化图表设计,避免过多装饰;确保每张图表都有明确标题和注释,解读时注重挖掘背后的原因和意义。'}, {'step': 5, 'action': '进行定性分析,提炼行业趋势和投资机会', 'output': '基于细分行业表现和公司案例的投资建议,例如‘关注高端智造+泛科技产业链标的’。', 'criteria_for_completion': '分析深入且有洞察力,提出的建议具有可操作性。', 'common_issues': '建议泛泛而谈,缺乏针对性。', 'solutions': '结合具体公司的财务数据和业务特点,提供量化的支持依据;同时考虑不同投资者的需求分层给出建议。'}, {'step': 6, 'action': '识别并阐述潜在风险因素', 'output': '针对宏观经济环境、市场竞争等的风险提示,例如‘宏观经济环境变动风险’。', 'criteria_for_completion': '风险提示全面且适时,既不过于悲观也不忽视潜在威胁。', 'common_issues': '风险描述笼统,未与实际情况挂钩。', 'solutions': '列举具体事件或数据作为风险背景,例如政策调整、经济周期波动等;同时提供应对策略供参考。'}, {'step': 7, 'action': '撰写总结与展望,强化核心结论', 'output': '一段简明扼要的文字,重申主要发现和投资建议,例如‘全年保持乐观态度,重点关注稀缺标的’。', 'criteria_for_completion': '总结简洁有力,令读者印象深刻。', 'common_issues': '总结冗长或偏离主题,未能有效突出重点。', 'solutions': '限制总结段落长度,仅保留最关键的观点;重复强调核心结论,增强记忆点。'}, {'step': 8, 'action': '校验报告内容的准确性与完整性', 'output': '经过多轮审核后的最终版本,确保无重大错误。', 'criteria_for_completion': '报告内容真实可靠,符合专业标准。', 'common_issues': '存在计算错误、遗漏重要内容等问题。', 'solutions': '设置多人交叉检查机制,特别是对数字和图表进行二次核对;邀请外部专家审阅以提高质量。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 01:29:26", "modified_time": "2025-08-14 01:29:26", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "526b31cd4bbd4765a3cda69dd167d918", "experience_type": "text", "when_to_use": "此规划框架适用于金融行业中的宏观与微观综合分析任务,如行业深度研究、投资标的分析、政策影响评估、市场趋势预测等。尤其适合需要整合定量数据和定性观点,并在复杂信息中提炼核心结论的场景。", "content": "[{'step': 1, 'action': '明确分析目标与受众需求', 'output': '清晰定义报告的核心主题(如宏观经济政策、行业动态、市场表现)及其目标受众(如投资者、机构决策者)。', 'evaluation_criteria': '是否能够用一句话概括报告的核心问题或目标;是否能识别出受众的关键关注点。', 'common_issues': '目标过于宽泛或模糊,导致后续分析缺乏聚焦。', 'solutions': '通过头脑风暴与团队讨论,细化目标并列出关键问题清单,确保每个部分都服务于最终目标。'}, {'step': 2, 'action': '收集与整理多维度数据', 'output': '从公开渠道(如政府公告、行业报告、市场数据)获取相关定量和定性信息,并按类别整理(如宏观经济、行业动态、市场表现)。', 'evaluation_criteria': '数据来源是否权威可靠;信息覆盖是否全面且与目标相关;是否有遗漏重要变量或事件。', 'common_issues': '数据冗余或不足,信息质量参差不齐。', 'solutions': '建立标准化的数据筛选流程,优先选择权威来源,剔除无关或低质量数据,并补充缺失信息。'}, {'step': 3, 'action': '构建章节结构与逻辑框架', 'output': '设计报告的章节结构,包括宏观背景、行业动态、市场表现、风险提示等模块,并确定各部分的内容优先级。', 'evaluation_criteria': '章节安排是否符合逻辑递进关系;是否突出核心结论;是否便于读者快速抓住重点。', 'common_issues': '章节顺序混乱,信息分布不均,核心结论被弱化。', 'solutions': '采用“倒金字塔”原则,将最重要信息放在前部,次要信息逐步展开;使用小标题和图表强化重点内容。'}, {'step': 4, 'action': '分析与论证核心观点', 'output': '基于数据与事实,通过定量分析(如趋势图、统计指标)和定性分析(如专家点评、政策解读)相结合的方式,层层递进建立核心观点。', 'evaluation_criteria': '论证是否严谨,数据支持是否充分;是否能清晰展示因果关系;是否考虑了多种可能性。', 'common_issues': '论证过程跳跃或缺乏逻辑性,忽略潜在的不确定性。', 'solutions': '使用“假设-验证”方法,逐一排除不合理假设;引入敏感性分析以应对不确定性。'}, {'step': 5, 'action': '平衡定量与定性信息', 'output': '在报告中合理分配定量数据(如图表、指标变化)与定性信息(如政策解读、专家观点),确保两者相辅相成。', 'evaluation_criteria': '定量信息是否直观易懂;定性信息是否具有洞察力;两者结合是否自然流畅。', 'common_issues': '定量数据过多导致阅读困难,或定性信息缺乏数据支撑。', 'solutions': '优化图表设计,确保清晰简洁;为定性观点提供具体案例或数据佐证。'}, {'step': 6, 'action': '提出风险因素与不确定性', 'output': '在适当位置(通常为后半部分)引入风险提示,列出可能影响结论的关键风险因素,并分析其潜在影响。', 'evaluation_criteria': '风险提示是否全面且及时;是否对每种风险提供了应对建议。', 'common_issues': '风险提示过于笼统或滞后,未能引起足够重视。', 'solutions': '按照“可能性-影响程度”矩阵对风险进行分类,优先处理高可能性高影响的风险。'}, {'step': 7, 'action': '总结核心结论与行动建议', 'output': '提炼报告的核心发现,形成简明扼要的总结,并针对不同受众提供具体的行动建议(如投资策略、政策建议)。', 'evaluation_criteria': '总结是否精炼且涵盖所有关键点;行动建议是否切实可行。', 'common_issues': '总结冗长或偏离主题,行动建议缺乏针对性。', 'solutions': '采用“3-5条关键点”法则,确保总结简洁有力;根据受众需求定制行动建议。'}, {'step': 8, 'action': '审查与优化报告形式', 'output': '检查报告的语言表达、图表设计、排版格式,确保整体专业性和可读性。', 'evaluation_criteria': '语言是否准确无误;图表是否直观美观;排版是否整齐统一。', 'common_issues': '语言晦涩难懂,图表信息过载或不清晰。', 'solutions': '邀请同行或非专业人士审阅,收集反馈并优化语言和图表设计。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 01:30:36", "modified_time": "2025-08-14 01:30:36", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "835a3dce35ed4090a86dcf7b1dd33a06", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究、投资标的分析以及宏观经济趋势与消费市场结合的综合报告。尤其适合需要整合多维度数据(如定量和定性信息)、平衡历史表现与未来预测,并提供明确投资建议的金融分析任务。", "content": "[{'step': 1, 'action': '明确分析目标与受众需求', 'output': '确定报告的核心主题(如中国可选消费行业的2025年上半年回顾与下半年展望)及目标读者群体(如机构投资者、基金经理等),并制定清晰的大纲结构。', 'completion_criteria': '大纲结构逻辑清晰,涵盖宏观经济背景、行业细分领域分析、风险提示及选股逻辑,且符合目标受众的需求。', 'common_issues': '目标不明确可能导致内容散乱或偏离主题。', 'solutions': '通过与利益相关方沟通确认需求,确保目标一致;定期检查内容是否紧扣主题。'}, {'step': 2, 'action': '收集与整理多源数据', 'output': '从官方统计(如国家统计局)、第三方数据库(如彭博、奥维云网)、企业财报及行业调研中获取定量和定性数据,并进行初步清洗与分类。', 'completion_criteria': '数据完整、准确,来源可靠,并按类别(如宏观、行业、公司)归档以便后续使用。', 'common_issues': '数据可能存在滞后性或偏差,影响分析结论的准确性。', 'solutions': '优先选择权威数据源,同时对异常值进行交叉验证;标注数据时间戳以提醒时效性限制。'}, {'step': 3, 'action': '构建章节结构,分配信息优先级', 'output': '按照‘总-分-总’模式组织内容:先概述整体趋势,再深入各子板块(如旅游、零售、服装、家电),最后总结核心观点与投资建议。', 'completion_criteria': '章节间逻辑连贯,重点突出;核心结论(如看好出海品牌、警惕价格战)在开篇即明确呈现。', 'common_issues': '信息堆砌导致关键结论被弱化。', 'solutions': '采用金字塔原理,将最重要的信息放在最前面,次要信息作为支撑材料逐步展开。'}, {'step': 4, 'action': '运用多层次论证路径建立观点', 'output': '针对每个子板块,从宏观驱动因素(如政策补贴、关税变化)到微观经营指标(如同店销售增长、毛利率波动),层层递进地推导出具体判断。', 'completion_criteria': '每项观点均基于充分的数据支持,且论证过程透明、合理,无跳跃式推理。', 'common_issues': '论据不足或逻辑链条断裂可能削弱说服力。', 'solutions': '为每个关键假设提供至少两个独立数据点支持;邀请同行评审补充潜在漏洞。'}, {'step': 5, 'action': '引入不确定性管理机制', 'output': '识别关键变量(如中美贸易摩擦、消费者信心指数)中的不确定性,提出多种情景假设(乐观/中性/悲观),并评估其对行业的影响。', 'completion_criteria': '所有主要风险均得到充分讨论,且有应对策略或观察指标供后续跟踪。', 'common_issues': '忽视极端情况可能导致决策失误。', 'solutions': '设置敏感性分析表,量化不同情境下的财务影响;动态更新假设条件以反映最新进展。'}, {'step': 6, 'action': '设计可视化工具强化表达', 'output': '制作图表(如同比增速曲线、市场份额分布图)辅助说明复杂数据关系,提升信息传递效率。', 'completion_criteria': '图表直观易懂,与文字描述相辅相成,避免冗余或误导。', 'common_issues': '过度依赖图表可能掩盖细节问题。', 'solutions': '确保每张图表都有简短注释解释其意义,避免单纯罗列数字。'}, {'step': 7, 'action': '提炼投资建议与行动指南', 'output': '根据前述分析结果,筛选优质标的(如安踏、泡泡玛特),并提供具体的买入/持有/卖出评级及理由。', 'completion_criteria': '投资建议具有操作性,能够直接指导交易决策;评级依据清晰,便于复核。', 'common_issues': '推荐过于笼统缺乏实操价值。', 'solutions': '细化至个股层面,结合估值模型(如DCF、PE倍数)给出具体目标价区间。'}, {'step': 8, 'action': '撰写免责声明与披露声明', 'output': '详细列明分析师的利益冲突声明、数据来源合法性声明及相关法律条款,确保合规性。', 'completion_criteria': '声明覆盖全面,语言严谨,符合监管要求。', 'common_issues': '遗漏重要披露可能引发法律风险。', 'solutions': '参照模板逐条核对,必要时咨询法务团队协助审查。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 01:32:20", "modified_time": "2025-08-14 01:32:20", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "4290c717f18e4db8b0147739a1093dfb", "experience_type": "text", "when_to_use": "适用于行业深度研究、投资标的分析、风险评估报告等需要结合定量与定性数据,进行系统性论证并得出投资建议的金融分析任务。", "content": "[{'step': 1, 'action': '明确分析目标和核心问题,定义需要回答的关键问题(如:全面慢牛的条件是什么?当前A股是否符合这些条件?)。', 'output': '清晰的研究目标和问题清单。', 'completion_criteria': '目标明确且具体,问题涵盖所有关键变量(基本面、政策、流动性等)。', 'common_issues': '目标过于宽泛或模糊,导致后续分析方向不明确。', 'solution': '通过团队讨论或客户需求确认,细化研究目标和范围。'}, {'step': 2, 'action': '收集相关历史数据和案例,构建分析框架的基础(如:美股全面慢牛的历史数据、A股快牛和结构性慢牛的历史经验)。', 'output': '整理出包含时间序列、经济指标、市场表现等多维度的历史数据集。', 'completion_criteria': '数据覆盖全面,时间跨度足够长,能够支持后续趋势分析和对比。', 'common_issues': '数据来源不一致或缺失关键变量。', 'solution': '优先使用权威数据库(如Wind、iFinD),并通过交叉验证确保数据质量。'}, {'step': 3, 'action': '对历史数据进行分类和归纳,提取驱动因素和规律(如:美股全面慢牛的核心驱动因素是基本面、分红、流动性;A股快牛的核心驱动因素是情绪、估值、政策)。', 'output': '形成驱动因素清单,并总结不同市场环境下的共性和差异。', 'completion_criteria': '驱动因素分类清晰,逻辑链条完整,能够解释历史走势的主要波动。', 'common_issues': '忽略次要但可能重要的驱动因素,导致结论片面。', 'solution': '采用多维度分析方法,结合专家意见反复验证假设。'}, {'step': 4, 'action': '将当前市场状况与历史经验进行对比,识别相似点和差异点(如:当前A股是否具备美股全面慢牛的条件?是否符合A股快牛或结构性慢牛的特征?)。', 'output': '生成对比分析表格或图表,突出当前市场的独特性和潜在机会/风险。', 'completion_criteria': '对比结果直观易懂,能够有效支撑后续结论推导。', 'common_issues': '过度依赖历史经验,忽视当前市场的新变化。', 'solution': '引入实时数据和动态模型,捕捉最新市场信号。'}, {'step': 5, 'action': '基于对比分析,提出中期和短期的投资策略建议(如:短期逢低布局科技成长和周期板块,中期关注反内卷政策带来的基本面修复)。', 'output': '详细的投资配置建议,包括行业选择、估值筛选、时机把握等。', 'completion_criteria': '建议具体可行,逻辑自洽,能够直接指导投资决策。', 'common_issues': '建议过于笼统,缺乏操作细节。', 'solution': '结合实际市场数据,提供量化标准(如PE分位数、换手率等)。'}, {'step': 6, 'action': '梳理潜在风险因素,制定应对方案(如:历史经验未来不一定适用、政策超预期变化、经济修复不及预期)。', 'output': '风险提示列表及相应的应对措施。', 'completion_criteria': '风险因素全面,应对措施合理,能够降低不确定性影响。', 'common_issues': '风险提示流于形式,未充分考虑极端情况。', 'solution': '参考压力测试结果,设计多层次的风险管理计划。'}, {'step': 7, 'action': '撰写最终报告,组织信息展示结构(如:先阐述背景和方法论,再逐步展开分析,最后总结核心结论和建议)。', 'output': '完整的分析报告,包含章节划分、图表展示、核心结论突出。', 'completion_criteria': '报告逻辑清晰,信息分布均衡,重点突出,便于读者快速抓住要点。', 'common_issues': '章节安排不合理,信息过载或不足。', 'solution': '提前规划报告框架,邀请同事或客户反馈初稿以优化内容。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 01:33:58", "modified_time": "2025-08-14 01:33:58", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "682f68a6c6d34709919222628ad9cc9f", "experience_type": "text", "when_to_use": "该规划框架适用于需要对金融市场动态(如机构调研、股东增持、公司回购等)进行深度分析并提出投资建议的场景。尤其适合于行业研究、投资标的筛选和风险评估报告制作,能够帮助分析师系统化地处理大量数据并提炼出清晰的投资逻辑。", "content": "[{'step': 1, 'action': '明确分析目标与范围', 'output': '确定核心主题(如机构调研、股东增持、公司回购),以及分析的时间跨度(如本周、近30天或年初至今)。', 'how_to_judge_completion': '确认分析目标是否具体且可执行,例如是否明确了要覆盖的指标(如调研次数、增持金额、回购比例等)。', 'common_issues': '目标过于宽泛或模糊,导致后续数据分析难以聚焦。', 'solutions': '在任务开始前与团队或客户确认分析的核心需求,确保目标具体化。'}, {'step': 2, 'action': '收集和整理相关数据', 'output': '获取目标时间段内的关键数据,包括定量数据(如调研次数、增持金额、回购金额)和定性信息(如评级机构家数、市场情绪等)。', 'how_to_judge_completion': '数据完整且来源可靠,能够覆盖所有分析维度。', 'common_issues': '数据缺失或不一致,可能导致结论偏差。', 'solutions': '使用权威数据源(如Wind、Bloomberg等),并对数据进行交叉验证和清理。'}, {'step': 3, 'action': '分层次组织数据与信息', 'output': '将数据按时间、行业、公司规模等维度分类,并构建表格或图表展示关键指标。', 'how_to_judge_completion': '数据结构清晰,便于后续分析;表格和图表直观易懂。', 'common_issues': '数据堆砌过多,缺乏逻辑性,导致信息过载。', 'solutions': '优先展示最重要的数据,次要数据可通过附录形式补充。'}, {'step': 4, 'action': '提炼核心观点与投资逻辑', 'output': '基于数据分析,提炼出核心结论(如哪些公司值得关注、哪些行业资金流入明显),并结合历史/预测数据形成投资建议。', 'how_to_judge_completion': '结论清晰、逻辑严谨,能够直接支持投资决策。', 'common_issues': '观点分散或缺乏数据支撑,导致说服力不足。', 'solutions': '采用“数据+逻辑+案例”的方式逐步推导结论,确保每一步都有据可依。'}, {'step': 5, 'action': '识别并披露潜在风险', 'output': '列出可能影响结论的关键风险因素(如市场波动、业绩不及预期等),并说明其可能的影响程度。', 'how_to_judge_completion': '风险提示全面且具体,能够帮助投资者理性决策。', 'common_issues': '风险提示过于笼统,缺乏针对性。', 'solutions': '针对每个核心结论逐一分析可能的风险点,并提供应对策略。'}, {'step': 6, 'action': '撰写报告并优化呈现形式', 'output': '按照“投资要点-数据分析-投资建议-风险提示”的结构撰写报告,确保逻辑清晰、重点突出。', 'how_to_judge_completion': '报告结构合理,语言简洁明了,图表与文字相辅相成。', 'common_issues': '内容冗长或重点不突出,导致阅读体验不佳。', 'solutions': '精简语言,优先展示核心内容,次要内容通过附录或注释补充。'}, {'step': 7, 'action': '复核与反馈', 'output': '检查报告中的数据准确性、逻辑一致性及表达清晰度,并根据反馈进行调整。', 'how_to_judge_completion': '报告经过多轮校对,无明显错误且符合客户需求。', 'common_issues': '因时间紧迫忽略细节,导致错误遗漏。', 'solutions': '设置专门的复核环节,邀请同事或专家审阅报告。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 01:35:23", "modified_time": "2025-08-14 01:35:23", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "907bf3f40e6f4c249a8cc3410d4fbd29", "experience_type": "text", "when_to_use": "此规划框架适用于短期市场分析报告(如每日、每周市场研判)、投资策略建议、以及宏观经济与政策影响评估。特别适合需要结合定量数据和定性分析,快速形成观点并给出行动建议的场景。", "content": "[{'step': 1, 'action': '收集并整理核心市场数据', 'output': '生成清晰的市场表现表格,包括主要指数的收盘点位、涨跌幅、成交量等关键指标。', 'completion_criteria': '数据准确无误,覆盖所有主要指数,并能够直观反映市场整体走势。', 'common_issues': '数据缺失或延迟可能导致结论不准确;应对方法是设置备用数据源或延后发布时间以确保数据完整性。'}, {'step': 2, 'action': '进行板块和行业排名分析', 'output': '生成板块表现前五和后五的对比表格,标注出涨幅最大和跌幅最大的行业及概念板块。', 'completion_criteria': '排名逻辑清晰,数据来源可靠,且能突出当前市场的热点和冷门领域。', 'common_issues': '部分行业分类可能不够细化;应对方法是参考多个权威数据源进行交叉验证。'}, {'step': 3, 'action': '整合近期重要新闻和政策动态', 'output': '提炼出对市场有直接影响的关键消息,比如税收优惠政策、国际贸易动态、国内财政政策等。', 'completion_criteria': '信息全面且相关性强,能够解释市场走势的部分原因。', 'common_issues': '信息过载可能导致重点不突出;应对方法是优先筛选直接影响市场情绪和资金流向的消息。'}, {'step': 4, 'action': '构建市场展望和投资建议', 'output': '基于数据分析和新闻解读,提出对未来市场走势的判断,并给出具体的板块配置建议。', 'completion_criteria': '观点明确,逻辑严密,建议具有可操作性,能够为投资者提供清晰的方向指引。', 'common_issues': '建议过于笼统或缺乏依据;应对方法是结合历史数据和当前市场环境进行论证。'}, {'step': 5, 'action': '识别潜在风险并提出警示', 'output': '列出可能影响市场的内外部风险因素,如经济下滑、贸易摩擦、货币政策调整等。', 'completion_criteria': '风险提示全面且具体,能够帮助投资者提前做好心理准备和应对策略。', 'common_issues': '风险描述过于抽象或缺乏量化分析;应对方法是结合历史案例和模型预测进行补充说明。'}, {'step': 6, 'action': '撰写报告并优化信息展示结构', 'output': '形成最终报告文档,包含标题、章节划分、图表支持和结论摘要,确保信息层次分明。', 'completion_criteria': '报告内容条理清晰,信息展示优先级合理,核心结论易于理解。', 'common_issues': '章节安排混乱导致阅读体验差;应对方法是遵循“总-分-总”结构,先概述再详细展开最后总结。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 01:36:22", "modified_time": "2025-08-14 01:36:22", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "feb508c4477e45ffad24396d5b76665b", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及市场策略报告等需要结合定量与定性分析的金融任务。尤其适合在市场波动较大或政策变化后,对市场趋势进行解读并提出配置建议的场景。", "content": "[{'step': 1, 'action': '明确分析目标和核心问题', 'output': '确定本次分析的核心议题(如:市场情绪反转的原因、政策落地后的市场影响),并列出关键问题清单。', 'completion_criteria': '核心议题清晰,所有相关方对分析目标达成一致;问题清单覆盖了市场表现、投资者情绪、政策影响等多个维度。', 'common_issues': '目标过于宽泛或模糊,导致后续分析难以聚焦。', 'solutions': '通过团队讨论和客户沟通,确保目标具体且可操作;优先筛选出最紧迫的问题。'}, {'step': 2, 'action': '收集和整理数据', 'output': '获取并清洗相关数据,包括市场指数、行业轮动指标、投资者情绪指数等,并生成初步数据图表。', 'completion_criteria': '数据完整、准确,图表清晰呈现关键趋势,能够支持后续分析。', 'common_issues': '数据来源不一致或数据缺失,影响分析质量。', 'solutions': '建立标准化的数据采集流程,使用可信来源,并设置数据校验机制。'}, {'step': 3, 'action': '分解市场表现并识别驱动因素', 'output': '从时间序列、风格、市值、行业等多个维度分析市场表现,提炼出主要驱动因素(如:政策预期、投资者情绪)。', 'completion_criteria': '每个维度的表现都被量化并解释清楚,驱动因素逻辑清晰,能与数据对应。', 'common_issues': '忽略某些维度或过度关注单一因素,导致分析片面。', 'solutions': '采用多维度分析框架,确保覆盖全面;通过交叉验证避免偏见。'}, {'step': 4, 'action': '构建高频数据跟踪模型', 'output': '设计并计算能够反映市场动态的高频指标(如:行业轮动速度、红利性价比),并用历史数据验证其有效性。', 'completion_criteria': '模型结果能够解释当前市场状态,并具备一定的预测能力。', 'common_issues': '模型复杂度高但实用性低,或缺乏历史数据支持。', 'solutions': '优先选择简单直观的指标;确保有足够的历史数据用于回测。'}, {'step': 5, 'action': '形成后市展望及投资观点', 'output': '基于前几步的分析,提出对未来市场的判断(如:政策真空期、景气交易回归),并给出具体的配置建议。', 'completion_criteria': '观点逻辑严密,建议具体可行,能够直接指导投资决策。', 'common_issues': '观点空洞或缺乏实操性,无法转化为实际操作。', 'solutions': '结合定量分析和定性判断,确保观点有据可依;建议需考虑实施难度和风险。'}, {'step': 6, 'action': '识别和评估潜在风险', 'output': '列出可能的风险因素(如:经济数据不及预期、地缘冲突),并评估其发生的可能性及影响。', 'completion_criteria': '风险因素全面且分类合理,评估方法透明。', 'commonissues': '忽视低概率但高影响事件,导致风险管理不足。', 'solutions': '采用情景分析法,模拟不同风险情境下的应对策略。'}, {'step': 7, 'action': '组织报告结构并优化信息展示', 'output': '按照“市场回顾→数据分析→未来展望→风险提示”的逻辑编排章节,突出核心结论,平衡定量与定性信息。', 'completion_criteria': '报告条理清晰,读者能快速抓住重点;图表和文字比例适当。', 'common_issues': '信息堆砌无序,核心结论被淹没。', 'solutions': '使用金字塔原理,先总结后展开;通过视觉化手段强化关键信息。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 01:37:35", "modified_time": "2025-08-14 01:37:35", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "2d2b3845823f43449281eda6225ce3dc", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及资本市场定期报告的编制,尤其是需要综合定量与定性信息、平衡历史数据和未来预测的场景。例如:市场表现评估、政策影响分析、行业趋势跟踪等。", "content": "[{'step': 1, 'action': '明确报告目标和受众需求', 'output': '确定报告的核心主题(如北交所市场表现)和受众(如投资者、分析师),并制定内容大纲。', 'completion_criteria': '核心主题清晰,内容大纲覆盖所有关键模块(如资本市场新闻、行业动态、市场表现、公司公告、风险提示等)。', 'common_issues': '目标不明确可能导致内容冗长或偏离主题。', 'solutions': '在初期阶段与团队或客户确认报告的具体用途和优先级。'}, {'step': 2, 'action': '收集和整理相关数据与信息', 'output': '获取定量数据(如市场成交额、指数涨跌幅)和定性信息(如政策文件、行业新闻),并分类存储。', 'completion_criteria': '数据来源可靠且全面,信息分类清晰,涵盖资本市场、行业动态、公司公告等多个维度。', 'common_issues': '数据不足或信息过时可能影响分析质量。', 'solutions': '优先使用权威数据库(如ifind)和官方发布渠道,确保数据时效性和准确性。'}, {'step': 3, 'action': '构建章节结构并分配信息权重', 'output': '按照逻辑顺序组织章节,优先展示核心结论和关键数据,随后逐步展开详细分析。', 'completion_criteria': '章节结构清晰,信息优先级合理,核心结论突出(如北证50指数收涨0.96%放在开头)。', 'common_issues': '章节顺序混乱可能导致读者难以抓住重点。', 'solutions': '遵循‘总-分-总’原则,先概述整体情况,再深入细节,最后总结关键点。'}, {'step': 4, 'action': '进行数据分析与论证', 'output': '对定量数据进行趋势分析和对比(如开户数同比环比增长),结合定性信息解释背后原因(如政策推动数字经济)。通过图表辅助说明。', 'completion_criteria': '分析逻辑严密,定量与定性信息结合紧密,图表直观且支持论点。', 'common_issues': '过度依赖单一数据源或忽略背景因素可能削弱论证力度。', 'solutions': '多角度验证数据,结合宏观经济、政策环境等背景信息进行综合分析。'}, {'step': 5, 'action': '识别并处理风险因素', 'output': '列出潜在风险(如个股盈利不及预期、贸易摩擦加剧),并提出应对策略或警示。', 'completion_criteria': '风险提示全面且具体,时机恰当(通常在报告末尾)。', 'common_issues': '风险提示过于笼统或遗漏重要风险点。', 'solutions': '参考类似案例的风险列表,并结合当前市场环境动态调整。'}, {'step': 6, 'action': '撰写报告并优化语言表达', 'output': '以简洁明了的语言撰写报告,避免专业术语堆砌,同时保持严谨性。确保图表与文字一致。', 'completion_criteria': '语言流畅,逻辑清晰,图表与正文匹配无误。', 'common_issues': '语言晦涩或图表错误可能降低报告可信度。', 'solutions': '由非专业人士审阅语言表达,团队交叉检查图表准确性。'}, {'step': 7, 'action': '审校与发布', 'output': '检查报告中的数据、图表、语言表达是否准确无误,并按需添加免责声明和评级标准。', 'completion_criteria': '报告无明显错误,格式规范,符合发布要求。', 'common_issues': '遗漏审校环节可能导致低级错误。', 'solutions': '建立标准化审校流程,指定专人负责最终审核。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 01:39:08", "modified_time": "2025-08-14 01:39:08", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "0c01b7373fdb49da9fdc7c711b557e30", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及市场策略报告等需要综合定量与定性信息的金融分析任务,尤其适合在市场波动较大或指数调整窗口期临近时进行预测和策略制定。", "content": "[{'step': 1, 'action': '明确报告的核心目标和受众', 'output': '清晰定义报告的主题(如北证50调仓窗口期临近)及主要受众(如专业投资者、机构客户),并确认核心结论需突出的内容(如指数基金规模增长、高β震荡应对策略)。', 'evaluation_criteria': '是否准确识别了报告的关键主题,并确保目标与受众需求一致。', 'common_issues': '可能忽略受众的具体需求,导致内容过于泛化或偏离实际应用。', 'solutions': '在初期阶段通过与客户或内部团队沟通,明确报告的目标和预期用途。'}, {'step': 2, 'action': '收集和整理相关数据', 'output': '从公开数据库(如Wind)、交易所公告和其他权威来源提取关键数据,包括指数成分股变化、交易量、估值水平、企业财务表现等。', 'evaluation_criteria': '数据是否全面且准确,是否覆盖了所有必要的维度(如历史数据、预测数据、行业细分数据)。', 'common_issues': '数据遗漏或不一致可能导致分析偏差。', 'solutions': '建立标准化的数据采集流程,并引入多源交叉验证机制以提高数据质量。'}, {'step': 3, 'action': '设计章节结构并分配优先级', 'output': '根据逻辑顺序安排章节,通常从宏观背景切入(如市场整体表现),再到具体分析(如个股调入调出名单),最后提出策略建议。优先展示核心结论(如指数基金规模增长趋势)。', 'evaluation_criteria': '章节结构是否合理,信息分布是否符合读者的认知路径,核心结论是否得到充分突出。', 'common_issues': '章节安排可能过于松散或缺乏连贯性,影响阅读体验。', 'solutions': '采用“总-分-总”结构,先概述全局情况,再深入细节,最后总结策略方向。'}, {'step': 4, 'action': '构建论证逻辑并逐步推进观点', 'output': '通过层层递进的方式展开分析,例如从规则解读(如北证50样本调整规则)到定量计算(如市值排名筛选),再到定性评估(如稀缺性公司潜力)。同时选择适当时机提出风险因素(如高估值企业的业绩不及预期风险)。', 'evaluation_criteria': '论证是否严密,观点是否具有说服力,风险提示是否及时且恰当。', 'common_issues': '论证过程可能跳跃性较强,导致逻辑链条断裂;或对不确定性的处理不够谨慎。', 'solutions': '确保每一步推导都有充分依据,并通过图表、案例等辅助说明复杂问题。'}, {'step': 5, 'action': '平衡不同类型信息的分布', 'output': '结合定量数据(如PE TTM、日均成交额)与定性描述(如行业分类估值分布),同时兼顾历史回顾(如过往涨跌幅)与未来展望(如下半年α收益挖掘)。确保信息呈现比例适当。', 'evaluation_criteria': '信息类型是否均衡,是否存在偏重某一方面而忽视其他重要维度的情况。', 'common_issues': '过度依赖单一信息类型(如仅关注定量指标)可能导致分析片面。', 'solutions': '定期检查各部分信息占比,并补充缺失视角以完善整体框架。'}, {'step': 6, 'action': '制作可视化材料增强表达效果', 'output': '利用图表(如折线图、柱状图、表格)直观展示关键数据(如指数基金规模变化、行业市盈率对比),并附注详细来源和计算方法。', 'evaluation_criteria': '图表是否简洁明了,是否能够有效支持文字叙述,是否便于快速理解。', 'common_issues': '图表设计可能过于繁琐或缺乏标注,降低信息传递效率。', 'solutions': '遵循“一图一意”原则,确保每个图表只传达一个核心信息点,并添加必要的解释性注释。'}, {'step': 7, 'action': '撰写最终报告并审校', 'output': '整合所有分析内容形成完整文档,包括标题、目录、正文、图表、附录等部分,并进行语言润色和格式统一。', 'evaluation_criteria': '报告是否条理清晰,表述是否精准,格式是否规范。', 'common_issues': '可能存在语法错误、术语不一致或排版混乱等问题。', 'solutions': '设置专门的校对环节,邀请同行评审或借助自动化工具优化文档质量。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 01:40:13", "modified_time": "2025-08-14 01:40:13", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "4d4e492891fc470690300e5be6a27337", "experience_type": "text", "when_to_use": "此规划框架适用于金融领域的策略报告撰写,包括但不限于指数化投资策略分析、市场风格轮动研究、行业/主题指数轮动策略评估以及可转债投资价值分析等任务。该框架尤其适合需要整合定量和定性信息、进行多维度数据分析并得出明确投资建议的场景。", "content": "[{'step': 1, 'action': '明确报告的核心目标与受众需求', 'output': '定义报告的主要观点和结论(如中证全指的风险溢价百分位、市净率百分位等关键指标),并确保其与客户需求相关联。', 'completion_criteria': '核心观点清晰且与数据支持一致,受众需求明确。', 'common_issues': '目标模糊或偏离客户需求。', 'solutions': '在开始前与利益相关方沟通确认目标,确保所有内容围绕核心需求展开。'}, {'step': 2, 'action': '设计章节结构以逻辑递进的方式呈现信息', 'output': '将报告分为宽基指数择时、市场风格轮动、行业/主题指数轮动、可转债指数增强等部分,每部分独立但相互关联。', 'completion_criteria': '章节安排合理,逻辑清晰,能够引导读者逐步理解核心结论。', 'common_issues': '章节间缺乏连贯性或信息冗余。', 'solutions': '通过大纲预览检查逻辑链条完整性,去除重复内容,强化过渡段落。'}, {'step': 3, 'action': '优先展示核心结论,并辅以数据支撑', 'output': '在报告开头直接列出主要观点(如风险溢价百分位、市净率百分位等),并在后续章节详细解释这些结论的依据。', 'completion_criteria': '核心结论突出,数据支持充分,且易于快速抓取。', 'common_issues': '核心结论被埋没在细节中或缺乏数据支撑。', 'solutions': '使用图表、表格等形式直观展示数据,同时在正文开头总结关键发现。'}, {'step': 4, 'action': '平衡定量与定性信息,历史与预测数据', 'output': '结合历史数据(如近6个月表现)与当前状态(如最新时点的乖离率),并提出未来可能的趋势(如成长风格占优)。', 'completion_criteria': '定量与定性信息比例适当,历史与预测数据分布均衡。', 'common_issues': '过于依赖单一类型数据或忽视预测的重要性。', 'solutions': '建立标准化模板,强制要求每个部分包含定量与定性分析,并加入对未来趋势的讨论。'}, {'step': 5, 'action': '采用层次化的论证路径,逐步推导观点', 'output': '从基础指标(如风险溢价百分位)到复杂策略(如双动量轮动策略),逐层深入分析,形成完整的逻辑链条。', 'completion_criteria': '论证过程条理清晰,每一步都有明确的数据或理论支持。', 'common_issues': '论证跳跃过大或缺乏中间步骤。', 'solutions': '为每个论点提供详细的计算公式或参考文献,确保逻辑严密。'}, {'step': 6, 'action': '适时引入风险因素并提供应对建议', 'output': '在分析过程中穿插风险提示(如宏观经济变化、行业增长不及预期等),并针对不同情景提出具体建议(如淡化估值因素影响)。', 'completion_criteria': '风险提示全面且有针对性,建议切实可行。', 'common_issues': '忽略潜在风险或建议空泛无操作性。', 'solutions': '设立专门的风险评估模块,系统梳理可能的风险点,并结合实际案例制定应对措施。'}, {'step': 7, 'action': '处理不确定性和多种可能性', 'output': '通过对比不同市场风格(如成长 vs 价值)、不同属性品种(如偏股性 vs 偏债性)的表现,识别最优选择,同时承认其他可能性的存在。', 'completion_criteria': '对不确定性有清晰的认识,且能提供多种备选方案。', 'common_issues': '对不确定性避而不谈或过度简化。', 'solutions': '利用敏感性分析工具量化不确定性范围,并在结论中明确说明假设条件。'}, {'step': 8, 'action': '整理参考资料和声明法律合规性', 'output': '附上数据来源、免责声明、分析师声明等内容,确保报告合法合规。', 'completion_criteria': '所有引用数据均有可靠来源,法律声明完整无遗漏。', 'common_issues': '数据来源不透明或法律声明缺失。', 'solutions': '设置统一的格式模板,自动插入必要的法律声明和参考文献列表。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 01:41:41", "modified_time": "2025-08-14 01:41:41", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "36d42110047a4ed78adc61c3b64771ff", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究、大类资产配置分析、政策影响评估以及宏观经济与市场联动分析等任务,尤其在需要结合国内外政策动态、金融市场表现和风险因素进行综合研判的场景中具有高度适用性。", "content": "[{'step': 1, 'action': '明确分析目标与核心问题', 'output': '定义分析的核心主题(如政策对市场的影响、资产轮动趋势)及关键问题(如政策导向如何影响权益、固收、外汇等市场)。', 'completion_criteria': '形成清晰的问题清单和分析框架,确保所有相关维度(政策、经济数据、市场表现)被覆盖。', 'common_issues': '可能忽略某些关键变量或低估跨领域影响。', 'solutions': '通过团队头脑风暴或参考类似成功案例,确保全面性。'}, {'step': 2, 'action': '收集与整理基础数据', 'output': '从可靠来源获取定量数据(如PMI、非农就业数据、利率变化)和定性信息(如政策声明、会议纪要),并按时间线或主题分类整理。', 'completion_criteria': '数据覆盖全面且无重大遗漏,关键指标有明确的时间序列对比。', 'common_issues': '数据来源不一致或更新滞后。', 'solutions': '优先使用权威数据库(如Wind、Bloomberg),并设置数据校验机制。'}, {'step': 3, 'action': '构建章节结构与信息优先级', 'output': '按照逻辑顺序组织章节,通常包括政策要闻、市场回顾、政策影响分析、未来展望与风险提示;确保核心结论(如政策导向对市场的影响)优先展示。', 'completion_criteria': '章节安排符合“从宏观到微观”的递进逻辑,核心结论突出且易于理解。', 'common_issues': '章节间逻辑断裂或信息分布失衡。', 'solutions': '采用“总-分-总”结构,先概述全局再细化分析,最后总结核心观点。'}, {'step': 4, 'action': '进行多层次论证与风险评估', 'output': '通过历史对比、定量分析与定性推导逐步建立观点;在适当时机引入风险因素(如地缘政治不确定性、政策执行风险)并提供应对策略。', 'completion_criteria': '论证链条完整,观点层层递进,风险提示具体且具有可操作性。', 'common_issues': '论证过于片面或忽视潜在风险。', 'solutions': '引入多方视角验证假设,并设置专门章节讨论不确定性和多种可能性。'}, {'step': 5, 'action': '平衡定量与定性信息', 'output': '合理分配定量数据(如图表、统计结果)与定性分析(如政策解读、专家观点),确保两者相辅相成。', 'completion_criteria': '定量信息支撑定性结论,且呈现形式直观易懂(如图表辅助说明)。', 'common_issues': '定量数据过多导致冗长,或定性分析缺乏数据支撑。', 'solutions': '限定每个部分的数据量,确保每张图表都有明确的解读和结论。'}, {'step': 6, 'action': '提出可操作的展望与建议', 'output': '基于当前分析,对未来市场走势或政策效应给出具体预测与建议(如资产配置方向、风险规避策略)。', 'completion_criteria': '展望具有前瞻性且建议切实可行,能为决策者提供明确指导。', 'common_issues': '建议过于笼统或脱离实际。', 'solutions': '结合历史经验与当前环境,提出具体情境下的行动方案。'}, {'step': 7, 'action': '审查与优化报告内容', 'output': '检查报告的语言表达是否准确、逻辑是否连贯、格式是否统一,并根据反馈进行修改完善。', 'completion_criteria': '报告内容无明显错误,语言精炼且专业性强,适合目标受众阅读。', 'common_issues': '细节错误或表述模糊。', 'solutions': '采用多人交叉审阅机制,借助工具检查语法与格式问题。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 01:42:47", "modified_time": "2025-08-14 01:42:47", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "54c16ba9bfe14765a079649af8948679", "experience_type": "text", "when_to_use": "该规划框架适用于需要对行业分红政策、股息率变化及其影响进行深度研究的金融分析任务,例如银行股分红策略分析、投资标的分红潜力评估、股息率变动预测等。也适用于涉及定量与定性数据结合、历史与预测趋势对比的复杂研究报告制作。", "content": "[{'step': 1, 'action': '明确核心观点和分析目标', 'output': '提炼出报告的核心结论,例如‘中报分红将显著提升股息率’,并围绕其构建整体逻辑框架。', 'completion_criteria': '核心观点清晰且具有实际指导意义;目标读者能够快速理解报告的重点。', 'common_issues': '核心观点可能过于笼统或缺乏数据支持。', 'solutions': '确保核心观点基于初步数据分析,并在后续章节逐步验证。'}, {'step': 2, 'action': '组织章节结构,划分信息优先级', 'output': '按照‘背景→问题→分析→结论’的顺序安排章节,确保每部分逻辑递进。例如:第1章介绍分红对股息率的影响机制,第2章分析近期股息率下降原因,第3章预测未来分红对股息率的提升。', 'completion_criteria': '章节内容逻辑清晰,信息分布合理,优先展示关键结论和支撑数据。', 'common_issues': '章节间逻辑不连贯或信息重复。', 'solutions': '使用大纲工具提前梳理章节间关系,避免冗余内容。'}, {'step': 3, 'action': '收集并整理定量与定性数据', 'output': '从公开渠道获取分红金额、股息率、股价等数据,并结合监管政策、市场趋势等定性信息形成数据集。', 'completion_criteria': '数据准确、全面,来源可靠;定性信息与定量数据相辅相成。', 'common_issues': '数据缺失或不一致,定性信息难以量化。', 'solutions': '交叉验证数据来源,通过假设和敏感性分析补充不确定性。'}, {'step': 4, 'action': '建立论证路径,分解复杂问题', 'output': '将复杂问题拆解为多个子问题,逐层分析。例如:先计算分红对股息率的影响系数,再结合不同银行的分红节奏预测未来股息率变化。', 'completion_criteria': '论证过程条理清晰,每个子问题都有明确的数据或逻辑支持。', 'common_issues': '论证链条断裂或逻辑跳跃。', 'solutions': '确保每个步骤有明确的输入和输出,必要时增加中间推导环节。'}, {'step': 5, 'action': '处理不确定性和多种可能性', 'output': '通过情景分析(如保守、中性、乐观假设)和敏感性测试评估不同结果的可能性。例如:预测2026年分红规模时,采用复合增速和最低增速作为区间。', 'completion_criteria': '不确定性得到充分讨论,结论稳健且具备弹性。', 'common_issues': '忽略极端情况或过度依赖单一假设。', 'solutions': '引入多维度假设,明确每种情景的概率和影响。'}, {'step': 6, 'action': '设计图表和可视化工具,突出关键信息', 'output': '制作直观的图表(如柱状图、折线图、表格),清晰展示关键数据和趋势。例如:用柱状图对比不同银行的分红金额占比。', 'completion_criteria': '图表简洁明了,能有效辅助文字说明,增强可读性。', 'common_issues': '图表过于复杂或信息过载。', 'solutions': '遵循‘一图一意’原则,避免在一个图表中展示过多信息。'}, {'step': 7, 'action': '总结核心结论并提出风险提示', 'output': '汇总主要发现,强调未来股息率提升的具体时间和幅度,同时列出潜在风险因素(如分红规模偏差、市场波动)。', 'completion_criteria': '结论简明扼要,风险提示全面且具体。', 'common_issues': '忽视风险提示或表述模糊。', 'solutions': '系统梳理所有可能的风险点,并提供应对建议。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 01:44:20", "modified_time": "2025-08-14 01:44:20", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "f1c44f1c5a1c47a2adca638d4fee2a7f", "experience_type": "text", "when_to_use": "此规划框架适用于金融领域的策略绩效评估报告、投资组合分析、ESG相关研究以及量化投资策略的阶段性表现总结。这类任务通常需要结合定量与定性分析,突出超额收益、风险控制和策略逻辑,并向专业投资者提供清晰的决策支持。", "content": "[{'step': 1, 'action': '明确核心目标与关键信息优先级', 'output': '确定报告的核心结论(如超额收益数据)及优先展示的信息层次(如策略表现、相对基准的优劣势)。', 'completion_criteria': '核心观点部分清晰呈现了本周策略表现的关键指标(如超额收益、夏普比率),并以简洁语言概述背景逻辑。', 'common_issues': '信息堆砌过多,未能快速聚焦到核心结论。', 'solutions': '在撰写前梳理出最重要的3-5个数据点,确保这些内容在报告开头部分直接呈现。'}, {'step': 2, 'action': '构建章节结构并合理分布内容', 'output': '设计报告目录,将内容分为策略表现、数据分析、附录和支持材料等模块,确保逻辑清晰且层次分明。', 'completion_criteria': '每个章节的内容围绕特定主题展开,避免重复或跳跃式叙述;图表与文字说明紧密结合。', 'common_issues': '章节之间缺乏连贯性,导致阅读体验割裂。', 'solutions': '采用‘总-分’结构:先总体概述策略逻辑,再逐步深入细节,最后通过附录补充技术性说明。'}, {'step': 3, 'action': '整合定量与定性信息,平衡历史与预测视角', 'output': '提供详实的定量数据(如收益率统计表)的同时,辅以定性解释(如策略背后的理论依据),并兼顾短期表现与长期趋势。', 'completion_criteria': '定量数据覆盖多个时间维度(如最近1个月、6个月、成立以来),定性分析能够有效支撑数据解读。', 'common_issues': '过度依赖单一类型信息,忽略对不确定性的讨论。', 'solutions': '在每组数据后添加简短注释,阐明其意义及潜在影响;对于未来展望,明确提及假设条件和可能偏差。'}, {'step': 4, 'action': '建立递进式论证路径,强化逻辑链条', 'output': '从策略理念出发,逐步推导至具体表现数据,并通过对比基准指数验证策略有效性。', 'completion_criteria': '每一层论证都建立在前一层基础上,形成完整闭环;例如,从ESG筛选方法论到实际收益结果,再到风险提示。', 'common_issues': '论证过程断裂,缺乏对因果关系的充分阐述。', 'solutions': '使用‘因为→所以→因此’的逻辑模板,确保每一步推导都有据可依。'}, {'step': 5, 'action': '适时引入风险因素,处理不确定性', 'output': '在报告末尾设置专门的风险提示章节,系统列举可能影响策略表现的因素,并提出应对建议。', 'completion_criteria': '风险提示不仅列出问题,还包含对可能性大小的评估及缓解措施。', 'common_issues': '风险因素被轻描淡写或完全忽略。', 'solutions': '提前制定风险清单,根据历史数据和市场环境动态调整权重;同时,用案例说明类似情境下的后果。'}, {'step': 6, 'action': '优化视觉呈现,提升信息传递效率', 'output': '利用图表直观展示复杂数据,配以精准的文字标注,帮助读者快速抓住重点。', 'completion_criteria': '所有图表均配有标题、来源声明和必要的图例说明;视觉元素与正文内容高度契合。', 'common_issues': '图表设计混乱,难以理解。', 'solutions': '遵循‘一图一意’原则,确保每张图表只表达一个核心思想;尽量减少颜色种类,保持风格统一。'}, {'step': 7, 'action': '复核与润色,确保报告质量', 'output': '检查语法错误、数据准确性以及格式一致性,最终生成正式版本。', 'completion_criteria': '报告无明显错漏,整体排版美观,便于打印或电子传播。', 'common_issues': '低级错误频现,损害专业形象。', 'solutions': '安排至少两名团队成员交叉校对,重点关注数字和公式计算是否正确。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 01:46:18", "modified_time": "2025-08-14 01:46:18", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "9d7eddd85f8a481483239b9229e1dbc6", "experience_type": "text", "when_to_use": "该规划框架适用于需要综合分析宏观经济、行业动态和资本市场表现的金融研究报告制作,例如投资策略报告、行业深度研究、政策影响评估或区域经济分析等。尤其适合涉及多层次数据整合(如宏观与微观)、多维度信息展示(如定量与定性)以及复杂论证逻辑的任务。", "content": "[{'step': 1, 'action': '明确分析目标与受众需求', 'output': '清晰定义报告的核心目标(如提供投资参考、解读政策影响),并根据受众特点(如机构投资者、企业决策者)确定内容深度与风格。', 'evaluation_criteria': '是否准确识别了核心目标与受众需求,并在后续步骤中保持一致性。', 'common_issues': '目标模糊或偏离实际需求,导致内容冗余或重点不突出。', 'solutions': '通过与利益相关方沟通确认目标,建立明确的提纲以确保方向一致。'}, {'step': 2, 'action': '构建章节结构与信息优先级', 'output': '设计一个逻辑清晰的目录结构,按照从宏观到微观、从政策到市场的顺序组织内容;优先展示对决策最具影响力的结论与数据。', 'evaluation_criteria': '章节安排是否符合逻辑递进关系,关键信息是否在显眼位置呈现。', 'common_issues': '章节间衔接不流畅,信息分布失衡,次要内容占据过多篇幅。', 'solutions': '采用“倒金字塔”原则,将核心结论前置,同时利用小标题和图表增强可读性。'}, {'step': 3, 'action': '收集与整理数据及政策信息', 'output': '系统搜集全国及区域层面的最新政策文件、统计数据、市场表现等资料,分类归档为定量(如PMI指数)与定性(如政策解读)两类。', 'evaluation_criteria': '数据来源是否权威可靠,覆盖范围是否全面且时效性强。', 'common_issues': '数据更新滞后或片面依赖单一来源,导致分析缺乏说服力。', 'solutions': '使用多样化的数据源(如官方统计、第三方数据库),并注明引用出处以提高透明度。'}, {'step': 4, 'action': '逐步建立观点与论证路径', 'output': '基于数据与政策信息,分层次提出主要观点,并运用因果分析、对比分析等方法进行支撑,形成层层递进的论证链条。', 'evaluation_criteria': '观点是否具有逻辑连贯性,论证过程是否充分且无明显漏洞。', 'common_issues': '论证跳跃过大或证据不足,使读者难以信服。', 'solutions': '每项观点都应辅以具体案例或数据支持,必要时加入专家意见作为补充。'}, {'step': 5, 'action': '平衡不同类型信息的比重', 'output': '合理分配历史回顾、现状描述与未来预测的内容比例,确保既体现当前趋势又展望未来发展潜力。', 'evaluation_criteria': '各部分信息量是否均衡,是否存在过度偏向某一方面的情况。', 'common_issues': '历史背景过长或预测过于乐观/悲观,影响整体客观性。', 'solutions': '设定固定篇幅限制,严格控制历史与预测部分的占比,强调实证分析。'}, {'step': 6, 'action': '处理不确定性与多种可能性', 'output': '针对风险因素与未知变量,采用情景分析法(如基准、乐观、悲观三种情景)予以阐述,并结合敏感性测试说明潜在影响。', 'evaluation_criteria': '是否全面识别了关键风险点,并提供了合理的应对建议。', 'common_issues': '忽视潜在风险或仅简单提及,未深入探讨解决方案。', 'solutions': '设立专门的风险模块,详细讨论各种可能情况及其缓解措施。'}, {'step': 7, 'action': '撰写总结与投资建议', 'output': '提炼核心发现,给出明确的操作指引(如买入、持有或卖出评级),并附带适用条件与注意事项。', 'evaluation_criteria': '总结是否简洁有力,建议是否具体可行且贴合实际情况。', 'common_issues': '建议泛化或脱离实际,无法直接指导投资决策。', 'solutions': '结合具体标的与市场环境,制定差异化建议,避免一刀切。'}, {'step': 8, 'action': '审阅与优化表达形式', 'output': '检查语言表述是否准确、图表是否直观,并调整格式以提升视觉效果与阅读体验。', 'evaluation_criteria': '报告是否易于理解,是否存在语法错误或排版问题。', 'common_issues': '术语晦涩难懂或图表信息混乱,降低专业性与可信度。', 'solutions': '邀请同行评审,模拟目标受众反馈,持续改进内容质量。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 01:47:50", "modified_time": "2025-08-14 01:47:50", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "aa54bedbd1a44423a5d8bedbc07059dc", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及公司财务与业务前景评估等任务。尤其适合需要结合定量与定性分析,同时涵盖历史数据、当前表现和未来预测的场景。", "content": "[{'step': 1, 'action': '明确分析目标与核心问题', 'output': '清晰定义报告的核心主题和关键问题,例如:公司业绩增长驱动因素、行业趋势或投资评级建议。', 'completion_criteria': '能够用一句话概括报告的核心目标,并列出3-5个关键问题。', 'common_issues': '目标过于宽泛或模糊,导致后续分析缺乏聚焦。', 'solutions': '通过与利益相关方(如客户或团队)沟通,提炼出最紧迫的问题作为分析重点。'}, {'step': 2, 'action': '收集并整理基础数据', 'output': '完整的数据集,包括公司财务数据(如收入、利润、毛利率等)、行业数据(如市场规模、增长率)和外部环境信息(如政策、技术趋势)。', 'completion_criteria': '数据覆盖全面,来源可靠且经过初步清洗,确保无明显错误或遗漏。', 'common_issues': '数据不完整或质量不高,影响后续分析的准确性。', 'solutions': '优先使用权威来源(如公司财报、行业协会报告),并对数据进行交叉验证。'}, {'step': 3, 'action': '构建章节结构与逻辑框架', 'output': '报告的大纲,包含引言、数据分析、结论与建议等部分,各部分逻辑清晰且层层递进。', 'completion_criteria': '每章节有明确的目标和内容范围,整体结构符合“问题-分析-解决方案”的逻辑。', 'common_issues': '章节安排不合理,导致信息冗余或逻辑断裂。', 'solutions': '参考成功案例的结构设计,确保每一部分都服务于核心目标。'}, {'step': 4, 'action': '进行定量分析与定性评估', 'output': '对财务指标、市场数据等进行详细分析,结合行业趋势、公司战略等定性信息得出初步结论。', 'completion_criteria': '定量分析结果准确,定性评估有据可依,两者结合能够有效支持核心观点。', 'common_issues': '定量与定性分析脱节,无法形成统一的结论。', 'solutions': '在分析过程中不断回顾核心问题,确保两种分析方法相互补充。'}, {'step': 5, 'action': '提出风险因素与不确定性分析', 'output': '识别主要风险点(如市场波动、政策变化、技术迭代)并评估其潜在影响。', 'completion_criteria': '风险因素全面且具体,分析方法科学合理(如情景分析、敏感性分析)。', 'common_issues': '忽视潜在风险或分析过于笼统,缺乏实际指导意义。', 'solutions': '从历史数据中寻找类似案例,结合行业专家意见细化风险分析。'}, {'step': 6, 'action': '形成最终结论与投资建议', 'output': '基于前文分析得出明确的投资评级(如“推荐”或“回避”)及具体理由。', 'completion_criteria': '结论与分析过程一致,建议具有可操作性且符合目标受众需求。', 'common_issues': '结论与分析脱节,或建议过于模糊。', 'solutions': '在撰写结论时反复核对分析结果,确保逻辑严密且语言简洁明了。'}, {'step': 7, 'action': '优化信息展示与视觉呈现', 'output': '图表、文字排版清晰,重点信息突出,便于读者快速抓住核心内容。', 'completion_criteria': '报告易于阅读,关键数据和结论一目了然。', 'common_issues': '信息堆砌过多,缺乏层次感和重点。', 'solutions': '使用分层标题、加粗字体和图表标注等方式突出核心信息。'}, {'step': 8, 'action': '复核与校正', 'output': '经过校正的最终版本,确保内容无误且格式规范。', 'completion_criteria': '报告无事实性错误,语言表达流畅,符合公司或机构的标准。', 'common_issues': '忽略细节错误(如拼写、单位不一致),影响专业形象。', 'solutions': '采用多人交叉检查机制,确保每个细节都被仔细审查。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 01:49:59", "modified_time": "2025-08-14 01:49:59", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "3cbb13bf56684cf78210d29623d0d1ce", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、宏观经济政策解读、资本市场趋势分析等任务,尤其是需要结合政策导向、经济数据和市场动态进行综合研判的场景。", "content": "[{'step': 1, 'action': '明确报告目标与核心问题', 'output': '定义报告的核心主题(如本次为“落实落细政策,巩固经济与资本市场回升向好势头”)及关键问题(如当前经济形势、下半年政策部署等)。', 'criteria_for_completion': '报告主题清晰,能够准确反映客户需求或市场关注点;关键问题覆盖全面且逻辑关联紧密。', 'common_issues_and_solutions': {'问题': '主题过于宽泛或模糊。', '解决方案': '通过初步调研锁定核心议题,并与团队讨论确认聚焦方向。'}}, {'step': 2, 'action': '收集并整理基础信息', 'output': '系统性收集相关数据(如GDP增长率、CPI、PPI等)、政策文件(如政治局会议纪要)、权威观点(如官方媒体解读)以及历史案例。', 'criteria_for_completion': '数据来源可靠,涵盖定量与定性信息;政策内容完整无遗漏;历史案例具有代表性。', 'common_issues_and_solutions': {'问题': '数据不全或过时。', '解决方案': '确保使用最新公开数据,并交叉验证多个来源以提高准确性。'}}, {'step': 3, 'action': '设计章节结构与优先级排序', 'output': '根据逻辑递进关系安排章节顺序,例如先分析宏观形势,再提出具体政策部署,最后提示风险。', 'criteria_for_completion': '章节结构合理,符合读者认知习惯;信息展示优先级突出重点,避免冗余。', 'common_issues_and_solutions': {'问题': '章节间逻辑断裂或重复。', '解决方案': '采用思维导图工具梳理各部分之间的逻辑联系,剔除冗余内容。'}}, {'step': 4, 'action': '构建论证路径与分解核心结论', 'output': '逐层推导观点,从宏观环境到微观领域逐步展开,同时提炼出每部分的核心结论(如“保持政策连续性稳定性,增强灵活性预见性”)。', 'criteria_for_completion': '论证过程严谨,观点层层递进;核心结论明确易懂,便于快速抓住重点。', 'common_issues_and_solutions': {'问题': '论证缺乏说服力或跳跃式推理。', '解决方案': '引用权威数据支撑每个论点,并确保前后衔接自然流畅。'}}, {'step': 5, 'action': '平衡不同类型信息的分布', 'output': '将定量数据(如经济指标表)与定性分析(如政策解读)有机结合,同时兼顾历史回顾与未来预测。', 'criteria_for_completion': '各类信息比例均衡,既不过于偏重某一方面,又能有效补充彼此不足。', 'common_issues_and_solutions': {'问题': '信息失衡导致理解困难。', '解决方案': '定期审视各部分内容占比,必要时增加图表或注释辅助说明。'}}, {'step': 6, 'action': '适时引入风险提示与不确定性处理', 'output': '在适当位置(通常靠近结尾)加入风险因素分析(如政策落实进度不及预期),并提供可能的情景假设。', 'criteria_for_completion': '风险提示全面但不过度渲染;情景假设基于现实可能性而非主观臆测。', 'common_issues_and_solutions': {'问题': '风险描述过于笼统或忽视潜在隐患。', '解决方案': '结合实际案例细化风险描述,并参考专家意见完善情景假设。'}}, {'step': 7, 'action': '撰写总结与投资建议', 'output': '概括全文核心发现,并给出具体的行动指南(如“增强国内资本市场的吸引力和包容性”)。', 'criteria_for_completion': '总结简明扼要,直击要害;投资建议切实可行且针对性强。', 'common_issues_and_solutions': {'问题': '建议空洞或脱离实际。', '解决方案': '确保建议来源于前述分析结果,避免泛泛而谈。'}}, {'step': 8, 'action': '审阅与优化表达', 'output': '检查语言是否专业规范,图表是否清晰直观,整体排版是否美观整洁。', 'criteria_for_completion': '文本无语法错误,术语运用得当;图表设计简洁明了,易于理解。', 'common_issues_and_solutions': {'问题': '表达晦涩难懂或格式混乱。', '解决方案': '邀请同行评审,采纳反馈意见改进表达方式与视觉呈现。'}}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 01:51:54", "modified_time": "2025-08-14 01:51:54", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "401ec7b598604f818ec01315a4beefb6", "experience_type": "text", "when_to_use": "适用于行业深度研究、投资标的分析、风险评估报告等需要从宏观到微观逐步展开的金融分析任务。", "content": "[{'step': 1, 'action': '收集并整理相关市场数据,包括但不限于指数表现、成交量、行业涨跌幅等。', 'output': '生成初步数据表格或图表,确保信息准确且来源可靠。', 'completion_criteria': '数据覆盖全面,无明显遗漏;来源标注清晰。', 'common_issues': '数据不完整或来源不可靠。', 'solutions': '优先使用权威数据源(如Wind、同花顺iFinD),并交叉验证数据一致性。'}, {'step': 2, 'action': '撰写市场回顾,概述当天市场的整体表现,突出核心结论(如指数涨跌幅、量能变化)。', 'output': '一段简洁的文字描述,附带关键数据支持。', 'completion_criteria': '核心结论清晰,且有数据支撑;语言简练易懂。', 'common_issues': '过于冗长或缺乏数据支撑。', 'solutions': '提炼核心信息,避免过多细节;确保每个结论都有数据佐证。'}, {'step': 3, 'action': '列出主要风险因素,提前揭示潜在市场扰动。', 'output': '一段简短但明确的风险提示,涵盖政策、国际环境等关键变量。', 'completion_criteria': '风险提示具有前瞻性,且与后续分析逻辑一致。', 'common_issues': '风险提示过于笼统或与后续分析脱节。', 'solutions': '结合最新政策和市场动态,确保风险提示具体且相关。'}, {'step': 4, 'action': '整理当日重要新闻和政策动态,筛选对市场有重大影响的事件。', 'output': '一份精选的新闻摘要,附带简要分析其对市场的影响。', 'completion_criteria': '新闻选择精准,分析逻辑清晰。', 'common_issues': '新闻选择不够聚焦或分析流于表面。', 'solutions': '优先选择与市场表现直接相关的新闻,并结合数据进行深入解读。'}, {'step': 5, 'action': '分析指数、板块和资金表现,结合图表展示数据。', 'output': '一系列图表和文字分析,涵盖指数涨跌幅、板块轮动、资金流向等。', 'completion_criteria': '图表直观,文字分析逻辑清晰且与图表一致。', 'common_issues': '图表信息过载或文字分析与图表不符。', 'solutions': '精简图表内容,确保每张图表只传递一个核心信息;文字分析紧扣图表数据。'}, {'step': 6, 'action': '总结并展望,提出对未来市场的预测性分析。', 'output': '一段总结性文字,包含对未来趋势的判断及潜在风险。', 'completion_criteria': '预测性分析基于已有数据和逻辑推导,避免主观臆断。', 'common_issues': '预测过于绝对或缺乏依据。', 'solutions': '采用假设情景分析法,列举多种可能性并说明其概率。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 01:54:07", "modified_time": "2025-08-14 01:54:07", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "5bf886d5178f4b64a4437ec9be04b075", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及市场趋势研判类金融分析任务,尤其是需要结合定量与定性信息进行综合评估的场景。", "content": "[{'step': 1, 'action': '明确分析目标和核心问题', 'output': '定义清晰的研究主题和目标(如:A股市场走势综述及后市研判),并确定核心关注点(如:市场表现、行业热点、投资机会)。', 'how_to_judge_completion': '是否明确了具体的研究范围和目标,并能用简洁语言概括核心问题。', 'common_issues_and_solutions': {'issue': '目标过于宽泛或模糊', 'solution': '通过细化问题(如限定时间范围、特定行业或指数)来聚焦分析方向。'}}, {'step': 2, 'action': '收集和整理基础数据', 'output': '收集市场表现数据(如主要指数涨跌幅、成交量)、行业分类数据(如中信一级行业涨跌幅分布)以及宏观经济背景信息(如美联储议息会议结果)。', 'how_to_judge_completion': '是否涵盖了所有必要的数据维度,且数据来源可靠、更新及时。', 'common_issues_and_solutions': {'issue': '数据不完整或过时', 'solution': '确保使用权威数据库(如Wind)并验证数据的时效性,补充缺失信息。'}}, {'step': 3, 'action': '构建章节结构并分配信息优先级', 'output': '按照逻辑顺序组织内容,通常包括市场综述、数据分析、后市研判及投资建议等部分,优先展示核心结论(如短期震荡上行趋势)。', 'how_to_judge_completion': '是否遵循从整体到局部的逻辑结构,核心结论是否在前几段突出呈现。', 'common_issues_and_solutions': {'issue': '信息堆砌无重点', 'solution': '先提炼关键发现,再围绕其展开详细分析,避免冗长描述。'}}, {'step': 4, 'action': '进行定量与定性分析相结合', 'output': '结合定量指标(如市盈率、成交量)与定性判断(如政策影响、资金流入趋势)得出综合结论。', 'how_to_judge_completion': '是否实现了定量与定性分析的平衡,且两者之间有清晰的逻辑关联。', 'common_issues_and_solutions': {'issue': '定量与定性脱节', 'solution': '确保每项定性观点都有相应的定量数据支撑,同时解释数据背后的意义。'}}, {'step': 5, 'action': '提出风险因素并探讨不确定性', 'output': '列出可能的风险点(如海外超预期衰退、国内政策变化),并在合理时机提出应对策略。', 'how_to_judge_completion': '是否全面覆盖了潜在风险,且风险提示出现在结论之后以保持客观性。', 'common_issues_and_solutions': {'issue': '风险提示不足或过于笼统', 'solution': '针对每个风险点提供具体案例或数据支持,并说明其对市场的潜在影响。'}}, {'step': 6, 'action': '形成投资建议并总结核心观点', 'output': '基于前述分析,给出明确的投资方向(如科技成长+周期制造双主线)及相关行业推荐(如光伏设备、医药、银行)。', 'how_to_judge_completion': '是否提出了可操作性强的投资建议,且总结能够复盘全文要点。', 'common_issues_and_solutions': {'issue': '建议缺乏针对性或可行性', 'solution': '根据分析结果筛选出最具潜力的标的,并附上简明理由。'}}, {'step': 7, 'action': '审阅与优化报告表达', 'output': '检查语言表述是否精炼准确,图表是否直观易懂,格式是否统一规范。', 'how_to_judge_completion': '是否达到专业水准,无明显语法错误,且图表与文字相辅相成。', 'common_issues_and_solutions': {'issue': '表达冗长或图表复杂难懂', 'solution': '删减冗余内容,简化图表设计,并增加注释帮助理解。'}}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 01:55:25", "modified_time": "2025-08-14 01:55:25", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "9ca54fdbe46d4235aea989ec1fae3a5b", "experience_type": "text", "when_to_use": "此规划框架适用于大类资产配置分析、投资策略报告撰写、市场趋势预测等金融分析任务,尤其适合需要综合定量和定性信息、结合宏观与微观视角的复杂场景。", "content": "[{'step': 1, 'action': '明确分析目标与范围', 'output': '清晰界定研究主题(如A股、港股、美股、黄金等)及时间跨度(如月度或季度),并确定输出形式(如报告、图表或模型)。', 'how_to_judge_success': '目标是否具体且具有可操作性;范围是否覆盖所有关键变量;输出形式是否符合受众需求。', 'common_problems_and_solutions': {'问题': '目标过于宽泛导致难以聚焦。', '解决方案': '通过初步数据扫描和团队讨论,缩小研究范围至核心问题。'}}, {'step': 2, 'action': '构建多维度分析框架', 'output': '设计包含基本面、资金面、国际面、估值面和技术面等维度的综合分析框架,并分配权重。', 'how_to_judge_success': '框架是否全面覆盖影响市场的关键因素;各维度权重分配是否合理且有依据。', 'common_problems_and_solutions': {'问题': '某些重要维度可能被忽略。', '解决方案': '参考历史成功案例,确保涵盖所有相关维度,并根据最新市场动态调整权重。'}}, {'step': 3, 'action': '收集与处理数据', 'output': '从可靠来源获取宏观经济指标、行业数据、市场情绪指标等,并进行清洗和标准化处理。', 'how_to_judge_success': '数据是否准确、完整且及时;处理后的数据是否便于后续建模和分析。', 'common_problems_and_solutions': {'问题': '数据质量参差不齐或缺失。', '解决方案': '采用插值法填补缺失值,或使用替代指标补充不足的数据点。'}}, {'step': 4, 'action': '建立量化模型', 'output': '基于选定框架开发低频和高频择时模型,计算各维度得分并汇总为综合信号。', 'how_to_judge_success': '模型结果是否与历史表现高度吻合;是否能有效捕捉市场变化趋势。', 'common_problems_and_solutions': {'问题': '模型可能出现过度拟合。', '解决方案': '增加交叉验证环节,避免单一时间段内的偶然性干扰。'}}, {'step': 5, 'action': '整合定性分析', 'output': '结合政策解读、事件驱动分析、地缘政治风险等因素,对量化结果进行补充说明。', 'how_to_judge_success': '定性分析是否逻辑严密并与量化结论一致;是否揭示了潜在风险和机会。', 'common_problems_and_solutions': {'问题': '定性分析缺乏深度或偏离主题。', '解决方案': '引入专家意见或外部研究报告作为支持材料,增强分析说服力。'}}, {'step': 6, 'action': '形成核心结论', 'output': '提炼出简洁明了的核心观点(如“震荡后重振旗鼓”),并辅以详细论证路径。', 'how_to_judge_success': '结论是否直击要点;是否能够指导实际投资决策。', 'common_problems_and_solutions': {'问题': '结论模糊或冗长。', '解决方案': '反复打磨语言表达,确保每句话都服务于核心论点。'}}, {'step': 7, 'action': '可视化展示与优先级排序', 'output': '制作直观易懂的图表(如收益率统计、风险趋势图),并将核心结论置于显眼位置。', 'how_to_judge_success': '图表是否清晰传达信息;优先级排序是否符合受众关注重点。', 'common_problems_and_solutions': {'问题': '图表过于复杂导致理解困难。', '解决方案': '遵循“少即是多”的原则,仅保留最关键的信息元素。'}}, {'step': 8, 'action': '提出风险提示与应对措施', 'output': '识别潜在风险(如政策不确定性、突发事件),并给出针对性建议。', 'how_to_judge_success': '风险提示是否全面且具前瞻性;应对措施是否切实可行。', 'common_problems_and_solutions': {'问题': '风险提示流于表面。', '解决方案': '结合情景模拟和压力测试,提供具体的预警指标和触发条件。'}}, {'step': 9, 'action': '复盘与优化', 'output': '回顾整个分析过程,总结经验教训,记录改进方向。', 'how_to_judge_success': '是否有明确的改进建议;是否为未来类似项目积累了宝贵经验。', 'common_problems_and_solutions': {'问题': '复盘环节被忽视。', '解决方案': '设置固定时间窗口专门用于反思和总结,形成制度化习惯。'}}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 01:57:20", "modified_time": "2025-08-14 01:57:20", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "54263c8e791c44a1978fd9991cf82f66", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究、跨市场关联性分析、投资策略制定等任务,尤其是需要结合历史数据、定量与定性分析、风险因素评估的金融分析场景。", "content": "[{'step': 1, 'action': '明确核心问题和目标', 'output': '定义清晰的研究主题(如中美股市能否逐渐脱钩),确定研究的核心结论方向。', 'completion_criteria': '核心问题是否明确、目标是否具体且可验证。', 'common_issues': '问题过于宽泛或模糊。应对方法:通过初步讨论或文献回顾聚焦问题范围。', 'example': '明确研究主题为中美股市相关性及未来可能的脱钩趋势。'}, {'step': 2, 'action': '收集并整理历史数据', 'output': '整理关键历史事件和数据(如美股剧烈波动期间A股的表现、日美股市的历史相关性数据)。', 'completion_criteria': '数据是否覆盖了足够长的时间跨度,是否具有代表性。', 'common_issues': '数据不完整或时间跨度不足。应对方法:补充缺失数据或扩大数据来源。', 'example': '整理2000年以来美股剧烈波动期A股的表现数据,以及日美股市的相关性数据。'}, {'step': 3, 'action': '构建章节结构和信息优先级', 'output': '设计报告的章节结构,确保逻辑清晰且信息展示优先级合理(如先呈现核心结论,再展开详细分析)。', 'completion_criteria': '章节安排是否符合从整体到局部的逻辑顺序,核心结论是否突出。', 'common_issues': '章节逻辑混乱或重点不突出。应对方法:重新梳理章节结构,确保结论先行。', 'example': '将核心结论放在开头,随后分为历史数据分析、案例对比、当前市场判断等部分。'}, {'step': 4, 'action': '进行定量与定性分析', 'output': '结合定量数据(如涨跌幅统计)和定性分析(如经济背景、政策影响)得出阶段性结论。', 'completion_criteria': '定量与定性分析是否平衡,结论是否有充分的数据支持。', 'common_issues': '过度依赖定性分析或忽略定量支持。应对方法:增加数据图表,强化论证。', 'example': '通过2000年以来美股剧烈波动期A股表现的统计数据,结合估值差异和经济背景得出中美股市可能脱钩的结论。'}, {'step': 5, 'action': '引入对比案例以增强论证', 'output': '选择合适的对比案例(如日本股市与美股的历史关系),用以支持核心观点。', 'completion_criteria': '案例是否贴合主题,是否能有效增强论证。', 'common_issues': '案例选择不当或缺乏相关性。应对方法:重新筛选更具代表性的案例。', 'example': '通过日美股市在1965-1980年和1990-2000年的背离案例,说明股市脱钩的可能性。'}, {'step': 6, 'action': '提出风险因素并评估不确定性', 'output': '列出主要风险因素(如房地产下行风险、美股剧烈波动),并评估其对结论的影响。', 'completion_criteria': '风险因素是否全面,是否提供了合理的应对建议。', 'common_issues': '忽视潜在风险或评估过于乐观。应对方法:增加敏感性分析或情景假设。', 'example': '指出房地产超预期下行和美股剧烈波动可能导致历史规律失效的风险。'}, {'step': 7, 'action': '总结并提出配置建议', 'output': '基于分析结果,提出具体的市场配置建议(如增配非银金融、周期股等)。', 'completion_criteria': '建议是否具体且可操作,是否与分析结论一致。', 'common_issues': '建议过于笼统或脱离实际。应对方法:细化建议内容,提供具体标的或策略。', 'example': '建议增加弹性配置,重点关注非银金融、有色金属等行业。'}, {'step': 8, 'action': '制作可视化图表', 'output': '根据分析内容制作图表(如涨跌幅对比图、估值差异图),以直观展示数据和结论。', 'completion_criteria': '图表是否清晰易懂,是否能有效支持分析内容。', 'common_issues': '图表信息过载或难以理解。应对方法:简化图表设计,突出关键信息。', 'example': '制作A股与美股估值差异图,直观展示中美股市脱钩的可能性。'}, {'step': 9, 'action': '撰写最终报告并审核', 'output': '整合所有章节内容,完成报告撰写,并进行内部审核以确保质量。', 'completion_criteria': '报告是否逻辑清晰、内容完整,是否经过严格校对。', 'common_issues': '内容存在遗漏或错误。应对方法:组织多轮审阅,确保准确性。', 'example': '完成《中美股市能否逐渐脱钩》的策略周报,并提交团队审核。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 01:59:34", "modified_time": "2025-08-14 01:59:34", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "0e568c9a28904496a8a1cc66b721bf6c", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、宏观经济分析、投资标的筛选及风险评估报告等金融分析任务。它特别适合需要结合定量与定性信息,从多维度解读市场动态并提出投资建议的场景。", "content": "[{'step': 1, 'action': '明确分析目标和受众需求', 'output': '一份清晰的研究目标文档,包括分析的核心问题、目标受众(如投资者、管理层)以及预期成果形式(如日报、专题报告)。', 'criteria_for_success': '目标是否具体且可操作,能否准确反映受众的关注点和决策需求。', 'common_issues_and_solutions': [{'issue': '目标过于宽泛或模糊', 'solution': '通过与利益相关方沟通,明确核心问题和优先级。例如,本次案例中聚焦于宏观经济数据对市场的潜在影响。'}]}, {'step': 2, 'action': '收集和整理关键数据', 'output': '一个包含定量和定性数据的数据集,涵盖宏观指标(如PMI指数)、行业动态(如房地产销售数据)以及市场表现(如A股指数、成交额等)。', 'criteria_for_success': '数据是否全面、准确且来源可靠,是否能支持后续分析。', 'common_issues_and_solutions': [{'issue': '数据缺失或不完整', 'solution': '利用替代数据源或补充历史数据,并在分析中注明局限性。例如,本次案例中引用了国家统计局和Wind数据平台的权威数据。'}]}, {'step': 3, 'action': '构建章节结构并安排信息优先级', 'output': '一个逻辑清晰的章节框架,按重要性排序展示核心结论、支撑数据和背景信息。', 'criteria_for_success': '章节结构是否符合“结论先行”原则,是否能引导读者快速抓住重点。', 'common_issues_and_solutions': [{'issue': '信息堆砌导致重点不突出', 'solution': '采用倒金字塔结构,先呈现核心结论,再逐步展开细节。例如,本次案例中首先列出7月PMI数据及其影响,随后深入分析原因。'}]}, {'step': 4, 'action': '进行分层论证,建立观点链条', 'output': '一系列层层递进的论证段落,每一段均围绕一个子主题展开,并通过数据和逻辑推导得出结论。', 'criteria_for_success': '论证是否连贯且具有说服力,是否能有效回应初始问题。', 'common_issues_and_solutions': [{'issue': '论证逻辑断裂或缺乏数据支持', 'solution': '确保每个观点都有数据或事实支撑,并使用过渡句连接不同段落。例如,本次案例中通过季节性因素、天气影响和出口数据变化解释PMI下降原因。'}]}, {'step': 5, 'action': '平衡定量与定性信息分布', 'output': '一篇综合使用图表、统计数据和文字分析的报告,既能直观展示趋势,又能深入探讨背后的原因。', 'criteria_for_success': '定量与定性信息是否相辅相成,是否能帮助读者全面理解问题。', 'common_issues_and_solutions': [{'issue': '过度依赖单一类型信息', 'solution': '确保每一页内容都包含至少一种定量数据(如图表)和一段定性分析(如专家点评)。例如,本次案例中结合了PMI数据和政策解读。'}]}, {'step': 6, 'action': '识别并讨论风险因素', 'output': '一个专门的风险提示部分,列出可能影响分析结论的关键风险,并提供应对建议。', 'criteria_for_success': '风险因素是否全面且有实际意义,是否能为决策提供参考。', 'common_issues_and_solutions': [{'issue': '风险描述过于笼统或忽视特定场景', 'solution': '结合具体行业和市场环境,细化风险描述。例如,本次案例中提到政策力度不及预期和中美关系升温等风险。'}]}, {'step': 7, 'action': '总结核心结论并提出行动建议', 'output': '一段简洁明了的总结段落,提炼核心发现并给出具体的投资或决策建议。', 'criteria_for_success': '总结是否简练有力,建议是否具有可操作性。', 'common_issues_and_solutions': [{'issue': '结论冗长或建议模糊', 'solution': '用一句话概括核心结论,并附上1-2条明确的行动建议。例如,本次案例中建议关注制造业景气度和房地产政策调整方向。'}]}, {'step': 8, 'action': '校验报告质量和合规性', 'output': '一份经过校对和审核的最终报告,确保内容无误且符合监管要求。', 'criteria_for_success': '报告是否无语法错误、数据准确且符合信息披露规范。', 'common_issues_and_solutions': [{'issue': '忽略合规性审查', 'solution': '设立独立审核环节,检查报告是否符合公司内部合规标准和外部监管要求。例如,本次案例中附有免责条款和研究员声明。'}]}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 02:01:21", "modified_time": "2025-08-14 02:01:21", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "54711ce54ae44877b4b12bdd4b18e878", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、政策影响分析、投资标的筛选及市场趋势跟踪等金融分析任务,尤其在涉及宏观政策解读与微观企业受益分析相结合的场景中具有高度适用性。", "content": "[{'step': 1, 'action': '明确分析目标和核心主题', 'output': '确定报告的核心主题(如“两新”政策对北交所相关企业的影响),并列出关键问题(如哪些企业将受益于政策、市场表现如何等)。', 'criteria_for_completion': '核心主题清晰,问题列表全面且具体,能够覆盖政策背景、市场表现、企业受益情况等多个维度。', 'common_issues': '主题过于宽泛或模糊,导致后续分析缺乏聚焦点。', 'solutions': '通过团队讨论或与客户沟通,明确分析目标和优先级。'}, {'step': 2, 'action': '收集和整理政策信息及相关数据', 'output': '系统梳理相关政策文件、统计数据和市场动态,形成结构化信息表(如政策支持范围、资金规模、实施时间表等)。', 'criteria_for_completion': '政策内容完整无遗漏,数据来源权威可靠,信息结构化便于后续引用和分析。', 'common_issues': '数据来源不一致或信息碎片化,难以支撑全面分析。', 'solutions': '建立统一的数据采集标准,并使用权威渠道(如政府官网、行业协会数据)确保信息准确性。'}, {'step': 3, 'action': '构建章节框架并安排信息优先级', 'output': '根据分析逻辑设计章节结构(如政策背景→市场表现→企业受益→风险提示),确保信息展示逻辑清晰、层层递进。', 'criteria_for_completion': '章节结构合理,信息优先级符合读者需求(政策背景优先,核心结论突出,次要信息补充说明)。', 'common_issues': '章节安排混乱,信息优先级不符合逻辑,导致阅读体验差。', 'solutions': '在初稿完成后邀请同事或客户审阅,调整章节顺序以优化逻辑性。'}, {'step': 4, 'action': '定量与定性信息结合分析', 'output': '通过图表、数据对比等方式展示定量信息(如销售额增长、市盈率变化),同时辅以定性分析(如政策驱动逻辑、企业竞争力评估)。', 'criteria_for_completion': '定量信息准确且直观,定性分析有理有据,两者结合能够有效支持核心结论。', 'common_issues': '定量与定性信息割裂,无法形成有力论证。', 'solutions': '在每部分分析中设置小结,确保定量与定性信息有机结合。'}, {'step': 5, 'action': '提出核心观点并逐层论证', 'output': '基于数据分析提炼核心观点(如“两新”政策显著推动消费与投资),并通过多角度论证(如历史数据对比、行业趋势分析、企业案例研究)。', 'criteria_for_completion': '核心观点明确且有充分数据支持,论证路径清晰,能够引导读者逐步接受结论。', 'common_issues': '论证过程跳跃性强,缺乏连贯性,导致说服力不足。', 'solutions': '采用“总-分-总”结构,先提出观点,再分层次论证,最后总结强化结论。'}, {'step': 6, 'action': '引入风险提示并讨论不确定性', 'output': '在适当位置(通常为报告末尾)引入风险提示(如宏观经济波动、市场竞争加剧),并讨论可能的应对策略。', 'criteria_for_completion': '风险提示全面且客观,不确定性分析合理,能够帮助读者理解潜在挑战。', 'common_issues': '风险提示过于简略或偏乐观,未能充分揭示潜在问题。', 'solutions': '参考类似报告的风险提示部分,确保覆盖所有可能风险因素。'}, {'step': 7, 'action': '制作图表和可视化工具辅助展示', 'output': '根据分析内容设计图表(如柱状图、折线图、饼图等),确保数据直观易懂,同时标注数据来源以增强可信度。', 'criteria_for_completion': '图表设计简洁美观,信息传达高效,与正文内容紧密配合。', 'common_issues': '图表过多或过少,信息冗余或不足,影响整体阅读体验。', 'solutions': '在设计阶段预览图表效果,确保其与正文内容相辅相成。'}, {'step': 8, 'action': '撰写结论与建议', 'output': '总结核心发现(如受益企业名单、市场估值变化),并提供具体投资建议(如关注特定行业或标的)。', 'criteria_for_completion': '结论精炼且具有操作性,建议明确且符合分析逻辑。', 'common_issues': '结论空洞或建议不切实际,无法指导决策。', 'solutions': '在撰写前回顾分析过程,确保结论与建议基于充分证据。'}, {'step': 9, 'action': '审阅与优化报告', 'output': '对报告进行语言润色、格式调整和逻辑校验,确保内容专业、表达流畅、排版规范。', 'criteria_for_completion': '报告无明显语法错误,逻辑通顺,格式统一。', 'common_issues': '语言表达不够精准,格式不一致,影响专业性。', 'solutions': '邀请同事或外部专家进行审阅,重点检查语言和格式问题。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 02:03:03", "modified_time": "2025-08-14 02:03:03", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "5ce865408a1e4e84947efe96cc62edb8", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及宏观经济与市场策略报告的撰写。尤其适合需要结合宏观政策、行业动态、市场数据和投资建议,向专业投资者提供决策支持的场景。", "content": "[{'step': 1, 'action': '明确报告目标与受众需求', 'output': '确定报告的核心主题(如本次为‘AI技术发展与经济环境分析’)及目标受众(如机构投资者、企业高管),并列出需涵盖的关键内容模块(如宏观政策解读、行业动态、市场表现)。', 'completion_criteria': '核心主题清晰,关键模块无遗漏,目标受众需求明确。', 'common_issues': '可能忽略某些重要模块或未充分考虑受众需求。', 'solutions': '通过头脑风暴列出所有潜在模块,并根据目标受众筛选优先级;参考类似成功案例进行校验。'}, {'step': 2, 'action': '收集与整理基础信息', 'output': '搜集相关宏观政策、行业动态、市场数据等信息,分类整理为定量(如PMI指数、企业利润数据)和定性(如政策解读、专家观点)两类。', 'completion_criteria': '信息来源权威且全面,数据准确无误,分类清晰便于后续使用。', 'common_issues': '数据不完整或来源不可靠,分类混乱。', 'solutions': '优先选择官方统计数据和权威机构发布的信息,建立标准化的数据分类模板。'}, {'step': 3, 'action': '构建章节结构与逻辑框架', 'output': '设计报告的章节结构,通常包括资讯要闻、市场概览、投资建议、风险提示等部分,确保逻辑层次分明(从宏观到微观、从现状到展望)。', 'completion_criteria': '章节安排合理,逻辑连贯,能有效引导读者理解核心结论。', 'common_issues': '章节顺序不合理或重点内容被弱化。', 'solutions': '先绘制章节逻辑图,反复推敲各部分之间的衔接关系;将核心结论提前突出展示。'}, {'step': 4, 'action': '分析与提炼关键信息', 'output': '对收集的数据和信息进行深入分析,提炼出核心结论(如‘装备制造业支撑作用突出’、‘AI技术赋能产业升级’),并形成初步观点。', 'completion_criteria': '分析过程严谨,结论基于数据支持,观点鲜明且有说服力。', 'common_issues': '分析过于浅显或缺乏数据支撑,观点模糊。', 'solutions': '采用对比分析、趋势分析等方法强化论证;确保每个观点都能追溯到具体数据或事实依据。'}, {'step': 5, 'action': '撰写正文内容', 'output': '按照章节结构撰写报告正文,优先展示核心结论(如‘7月制造业PMI回落但大型企业保持韧性’),并通过图表、案例等形式增强可读性。', 'completion_criteria': '内容详略得当,语言简洁明了,图表与文字相辅相成。', 'common_issues': '内容冗长或图表过多影响阅读体验。', 'solutions': '严格控制篇幅,删除冗余内容;确保每张图表都有明确的说明和价值。'}, {'step': 6, 'action': '提出投资建议与风险提示', 'output': '基于分析结果提出具体的投资建议(如关注AI算力、创新药等领域),并系统梳理潜在风险因素(如政策变化、市场波动)。', 'completion_criteria': '建议具有实操性,风险提示全面且客观。', 'common_issues': '建议泛化或缺乏针对性,风险提示流于形式。', 'solutions': '结合实际市场情况细化建议;以情景分析法评估不同风险的可能性及其影响。'}, {'step': 7, 'action': '审阅与优化报告', 'output': '检查报告的语言表达、数据准确性、逻辑连贯性,调整格式使其更符合专业标准。', 'completion_criteria': '报告无语法错误,数据核对无误,整体呈现专业美观。', 'common_issues': '存在低级错误或格式不统一。', 'solutions': '组织团队交叉审阅,使用工具辅助校对;制定统一的格式规范。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 02:04:35", "modified_time": "2025-08-14 02:04:35", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "4928dafbbf1d44618ad50ae869662f4f", "experience_type": "text", "when_to_use": "此规划框架适用于短期市场分析报告(如日报、周报)的制作,尤其在需要快速总结市场动态、提供投资建议和风险提示的场景下。也可用于其他需要结合定量与定性分析的金融任务,例如行业趋势跟踪或投资组合监控。", "content": "[{'step': 1, 'action': '收集和整理基础数据', 'output': '获取当日主要指数涨跌幅、行业表现、板块表现等核心数据,并将其分类整理为表格或图表形式。', 'completion_criteria': '数据完整且准确,涵盖所有主要指数、行业和概念板块的表现;图表清晰展示涨跌幅分布。', 'common_issues': '数据来源不一致可能导致误差;部分数据可能缺失。', 'solutions': '确保使用权威数据源(如Wind),并设置备用数据渠道;对缺失数据进行标注并在后续补充。'}, {'step': 2, 'action': '分析市场整体表现', 'output': '撰写市场回顾部分,描述三大股指涨跌情况、个股涨跌分布及成交额变化,突出市场整体趋势。', 'completion_criteria': '能够用简洁语言概括市场整体表现,明确指出上涨或下跌的主要驱动因素。', 'common_issues': '信息过于冗长或缺乏重点,未能有效突出核心结论。', 'solutions': '遵循“总-分”结构,先概述整体趋势,再分点说明具体表现;优先展示影响最大的指标。'}, {'step': 3, 'action': '深入分析行业和板块表现', 'output': '按行业和概念板块分别分析领涨和领跌领域,结合数据说明其表现原因,形成详细的文字描述和图表支持。', 'completion_criteria': '行业和板块分析逻辑清晰,能够解释涨跌背后的原因;图表直观展示关键数据。', 'common_issues': '分析深度不足,未能揭示行业或板块表现的根本原因。', 'solutions': '结合宏观经济、政策变化或市场热点,提供背景分析;引用相关事件或数据支持观点。'}, {'step': 4, 'action': '提出风险提示', 'output': '在报告末尾单独列出风险提示部分,强调市场不确定性及潜在风险,提醒投资者谨慎决策。', 'completion_criteria': '风险提示内容简明扼要,涵盖主要风险因素(如市场波动、政策变化等)。', 'common_issues': '风险提示过于笼统,缺乏针对性。', 'solutions': '结合当日市场表现,具体指出可能的风险点;避免泛泛而谈,提供实际案例或数据支持。'}, {'step': 5, 'action': '组织报告结构并优化展示', 'output': '按照“投资要点→市场回顾→风险提示”的顺序组织报告内容,确保逻辑清晰、层次分明;添加目录和图表索引以增强可读性。', 'completion_criteria': '报告结构合理,信息展示优先级明确;核心结论突出,读者能快速抓住重点。', 'common_issues': '章节安排混乱,导致阅读体验不佳。', 'solutions': '遵循固定模板,保持章节顺序一致性;通过标题、小节划分和图表辅助提升信息展示效果。'}, {'step': 6, 'action': '审阅和校正', 'output': '检查报告中的数据准确性、语言表达流畅性和格式规范性,确保无明显错误。', 'completion_criteria': '报告无数据错误、语言清晰、格式统一;符合公司内部质量标准。', 'common_issues': '遗漏细节错误或格式不统一。', 'solutions': '采用双人交叉校对机制;制定标准化格式指南并严格执行。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 02:06:10", "modified_time": "2025-08-14 02:06:10", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "818f425d0cd54288a20c784c08ca3c0a", "experience_type": "text", "when_to_use": "此规划框架适用于制作金融市场的日常分析报告、行业动态跟踪、短期市场预测及风险提示等任务,尤其适合需要结合定量与定性分析、快速响应市场变化的场景。", "content": "[{'step': 1, 'action': '明确报告目标和受众', 'output': '确定报告的核心目标(如市场回顾、风险提示、投资建议等)以及目标受众(如机构投资者、个人投资者或内部决策层)。', 'evaluation': '目标是否清晰且符合受众需求;报告框架是否围绕目标展开。', 'common_issues': '目标过于宽泛或偏离受众需求。', 'solutions': '通过与利益相关方沟通确认目标,确保报告内容聚焦于关键信息。'}, {'step': 2, 'action': '收集并整理数据', 'output': '从公开数据源(如Wind、国家统计局等)获取市场行情、行业表现、资金流向等数据,并进行初步清洗和分类。', 'evaluation': '数据是否全面、准确且及时;是否涵盖了定量和定性信息。', 'common_issues': '数据来源单一或数据更新滞后。', 'solutions': '建立多渠道数据采集机制,定期核查数据质量和时效性。'}, {'step': 3, 'action': '构建章节结构并分配信息优先级', 'output': '按照“行情回顾→当日要闻→指数及板块表现→资金流动→风险提示”的顺序组织内容,确保核心结论(如市场下跌原因、风险因素)优先展示。', 'evaluation': '章节安排是否逻辑清晰;核心结论是否突出且易于理解。', 'common_issues': '信息堆砌导致重点不突出。', 'solutions': '使用图表、加粗标题等方式突出核心结论,避免冗长描述。'}, {'step': 4, 'action': '撰写行情回顾与数据分析', 'output': '详细描述市场整体表现(如三大指数涨跌幅、成交量等),结合历史数据对比分析趋势变化。', 'evaluation': '是否准确反映了市场动态;是否提供了足够的背景信息支持分析。', '常见问题': '缺乏历史对比或忽略细节波动。', '应对方法': '引入同比/环比分析,补充关键时间节点的市场表现。'}, {'step': 5, 'action': '整合当日要闻并提炼影响', 'output': '筛选重要新闻事件(如经济数据、政策变动),简要说明其对市场的潜在影响。', 'evaluation': '新闻选择是否相关且具有代表性;影响分析是否合理。', 'common_issues': '新闻过多导致冗余,或分析流于表面。', 'solutions': '精选3-5条最具影响力的新闻,深入剖析其与市场的关联。'}, {'step': 6, 'action': '可视化数据以增强可读性', 'output': '将关键数据(如指数涨跌幅、板块表现、资金流向)转化为图表形式,便于读者快速理解。', 'evaluation': '图表是否直观且信息完整;是否有助于提升报告的专业性。', 'common_issues': '图表设计复杂或信息缺失。', 'solutions': '遵循简洁原则,标注数据来源和单位,确保图表自解释性强。'}, {'step': 7, 'action': '提出风险提示与不确定性分析', 'output': '基于当前市场环境,列出可能的风险因素(如经济数据不及预期、国际关系紧张),并评估其概率与影响。', 'evaluation': '风险提示是否全面且具体;是否包含应对策略建议。', 'common_issues': '风险提示泛化或缺乏实际操作指导。', 'solutions': '结合历史案例和专家意见,提供针对性的风控建议。'}, {'step': 8, 'action': '审核与优化报告内容', 'output': '检查报告的语言表达、逻辑连贯性和数据准确性,确保无明显错误。', 'evaluation': '报告是否专业、严谨且无低级错误;是否满足发布标准。', 'common_issues': '语言表述模糊或存在数据错误。', 'solutions': '实行双人交叉校对制度,必要时引入外部专家审阅。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 02:07:26", "modified_time": "2025-08-14 02:07:26", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "ffcffc8454274a3594439bcbb1f0341d", "experience_type": "text", "when_to_use": "适用于行业深度研究、投资策略报告撰写、资产配置建议制定等金融分析任务。尤其是需要结合宏观与微观视角,同时兼顾定量和定性分析的场景。", "content": "[{'step': 1, 'action': '明确核心主题与目标受众', 'output': '确定分析的核心主题(如PPI修复、科技板块机会)及其目标受众(如专业投资者),并以此为基础设计报告框架。', 'completion_criteria': '核心主题清晰,目标受众明确,框架逻辑连贯且符合受众需求。', 'common_issues': '主题过于宽泛或模糊,导致后续内容难以聚焦。', 'solutions': '通过初步市场调研和团队讨论,提炼出最具价值的主题方向,并用一句话概括报告的核心目标。'}, {'step': 2, 'action': '构建章节结构并分配信息优先级', 'output': '根据逻辑递进原则划分章节,将最重要的结论和支撑性论据放在前半部分,次要支持性信息(如历史数据、补充图表)放在后半部分。', 'completion_criteria': '章节安排合理,信息优先级符合“结论先行”的原则,读者能快速抓住关键点。', 'common_issues': '章节间逻辑跳跃过大或信息堆砌无序,影响阅读体验。', 'solutions': '采用金字塔原理,确保每一章都有明确的小标题,并通过提纲检查各章节间的逻辑衔接是否流畅。'}, {'step': 3, 'action': '收集并整理数据与案例', 'output': '从公开数据库、内部资源及第三方渠道获取相关数据,筛选出最能支持核心观点的关键指标和案例。', 'completion_criteria': '数据来源可靠,覆盖全面,能够有效支撑主要论点;案例选择具有代表性。', 'common_issues': '数据不完整或缺乏权威性,案例与主题关联度不高。', 'solutions': '建立数据验证机制,优先使用Wind、Bloomberg等权威平台的数据,并对案例进行多维度筛选以确保相关性。'}, {'step': 4, 'action': '开展多层次论证,形成观点链条', 'output': '基于定量分析(如M1同比变化、PPI趋势)和定性判断(如政策解读、市场情绪),逐层递进建立观点链条,确保每个推论都有充分依据。', 'completion_criteria': '观点层次分明,论证路径清晰,所有假设和推论均得到数据或理论支持。', 'common_issues': '论证过程存在逻辑漏洞或过度依赖单一变量解释复杂现象。', 'solutions': '引入敏感性分析方法,测试不同假设下的结果稳健性;同时引用多种独立证据增强说服力。'}, {'step': 5, 'action': '平衡不同类型信息分布', 'output': '在报告中合理分配定量数据(如图表)、定性描述(如政策解读)、历史回顾(如周期复盘)和未来预测(如盈利预期),避免某一方面占比过高。', 'completion合理性标准': '各类信息比例协调,整体叙事节奏顺畅,既不过于枯燥也不流于空泛。', '常见问题': '信息失衡导致部分章节显得冗长或单薄。', '解决方案': '设定每类信息的篇幅上限,并通过交叉审阅调整内容密度,确保重点突出但不偏颇。'}, {'step': 6, 'action': '识别并处理风险因素', 'output': '在适当位置(通常为后半部分)提出潜在风险(如政策超预期变动、地缘政治恶化),并提供应对建议或预警信号。', 'completion合理性标准': '风险揭示全面且客观,不掩盖核心结论,同时给出具体的应对措施。', '常见问题': '风险提示过于笼统或被忽略,削弱报告可信度。', '解决方案': '设置专门的风险评估环节,要求分析师列出至少三项可能影响结论的重大风险,并逐一讨论其发生概率和潜在影响。'}, {'step': 7, 'action': '总结核心结论并提出行动建议', 'output': '提炼出报告的核心发现,并据此提出具体的投资配置建议(如科技+军工+反内卷方向)。确保建议可操作性强,便于实施。', 'completion合理性标准': '结论简洁明了,建议切实可行,与前面的分析保持一致。', '常见问题': '结论与正文脱节,或建议过于抽象难以执行。', '解决方案': '重新审视全文,确保结论是对前文的高度概括;建议应包含明确的行业/标的推荐以及时间窗口指引。'}, {'step': 8, 'action': '进行最终校验与优化', 'output': '由团队成员交叉审阅报告,检查语言表达准确性、数据计算正确性、图表美观性等细节,同时确认是否满足合规要求。', 'completion合理性标准': '报告无明显错误,格式统一规范,符合监管和公司内部标准。', '常见问题': '因疏忽遗漏重要信息或违反披露规定。', '解决方案': '制定详细的校验清单,涵盖语言、数据、图表、合规等多个维度,确保每项都经过严格审核。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:04:36", "modified_time": "2025-08-14 03:04:36", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "3e4dff13668f4f809e150f09b263461d", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究、投资标的分析以及估值报告撰写等金融分析任务。尤其适合需要对全球及特定市场(如A股)进行多维度估值跟踪与对比的场景,包括但不限于:宽基指数、行业赛道、新兴产业及热门概念的估值分析及性价比评估。", "content": "[{'step': 1, 'action': '明确分析目标和范围,确定关键指标', 'output': '清晰定义报告的目标(如全球估值收敛趋势分析)、覆盖范围(如全球主要市场、A股宽基指数、一级行业、新兴产业等),并列出核心指标(PE、PB、PS、PCF及其分位数)。', 'evaluation_criteria': '目标是否具体且可操作;范围是否全面但不过度扩展;指标是否能够有效支撑结论。', 'common_issues': '目标过于宽泛或模糊,导致后续分析缺乏聚焦点;忽略某些重要指标,影响结论的完整性。', 'solutions': '通过团队讨论或专家评审确认目标和范围;确保指标选取符合行业惯例,并能反映当前市场动态。'}, {'step': 2, 'action': '收集并整理数据,构建统一的数据框架', 'output': '从合规渠道获取历史和最新数据(如WIND、Bloomberg),并以表格形式整理各市场的估值水平、涨跌幅及分位数情况,形成结构化数据库。', 'evaluation_criteria': '数据来源是否可靠;数据是否完整、准确;是否便于后续分析使用。', 'common_issues': '数据缺失或不一致,影响分析质量;未及时更新最新数据,导致结论滞后。', 'solutions': '建立数据校验机制,定期核查数据完整性;采用自动化工具提升数据处理效率。'}, {'step': 3, 'action': '组织章节结构,设计信息展示优先级', 'output': '按照“宏观→中观→微观”的逻辑安排内容顺序:先分析全球市场整体表现,再深入A股宽基指数、一级行业及赛道,最后聚焦于新兴领域及热门概念。核心结论通过图表突出显示。', 'evaluation_criteria': '章节结构是否逻辑清晰;核心结论是否直观易懂;不同类型信息(定量/定性、历史/预测)是否平衡分布。', 'common_issues': '章节间衔接不够流畅;重点信息被次要内容掩盖;图表过多或过少,影响阅读体验。', 'solutions': '提前绘制内容大纲,邀请同行审阅;合理控制图表数量,确保每张图表都有明确意义。'}, {'step': 4, 'action': '运用多层次论证路径,逐步推导观点', 'output': '从市场整体表现切入,结合涨跌幅与估值变化,逐层递进到细分领域的估值性价比分析。例如,通过比较PE、PB、PS、PCF的长期分位数,揭示必选消费行业的估值优势。', 'evaluation_criteria': '论证是否层层递进、环环相扣;风险因素是否在适当时机提出;不确定性和多种可能性是否得到妥善处理。', 'common_issues': '论证跳跃过大,读者难以跟随思路;忽视潜在风险,降低报告可信度;未充分讨论不确定性,显得主观片面。', 'solutions': '增加过渡段落解释逻辑关系;在合适位置加入风险提示;用情景假设方法探讨不同可能性。'}, {'step': 5, 'action': '制作可视化图表,增强信息传达效果', 'output': '生成静态与动态相结合的图表,包括折线图、热力图、柱状图等,用于展示估值分位数、涨跌幅变化及行业对比情况。', 'evaluation_criteria': '图表是否简洁明了;是否能快速传递关键信息;是否与文字内容相辅相成。', 'common_issues': '图表复杂难懂;颜色搭配混乱,干扰视线;图表与正文脱节。', 'solutions': '遵循“少即是多”原则,减少冗余元素;选择高对比度配色方案;确保图表标题与正文呼应。'}, {'step': 6, 'action': '总结核心发现,提炼投资建议', 'output': '基于前述分析,提炼出具有实际指导意义的结论,如“必选消费行业估值性价比凸显”,并附上具体的投资评级建议。', 'evaluation_criteria': '结论是否紧扣分析内容;建议是否切实可行;语言是否简练有力。', 'common_issues': '结论空洞无物,缺乏支撑;建议脱离现实,难以落地;表述冗长拖沓。', 'solutions': '反复打磨结论部分,确保言之有物;参考过往成功案例优化措辞;请同事或客户反馈意见。'}, {'step': 7, 'action': '复核报告内容,完善细节', 'output': '检查报告中的数据、图表、文字描述是否存在错误,补充必要的免责声明和分析师承诺。', 'evaluation_criteria': '报告是否无明显错误;格式是否统一规范;法律声明是否齐全。', 'common_issues': '遗漏重要信息;格式不统一,显得杂乱;法律声明不足,埋下隐患。', 'solutions': '设立专门的校对环节,由多人交叉检查;制定标准化模板,统一格式要求;咨询法务部门完善声明条款。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:06:20", "modified_time": "2025-08-14 03:06:20", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "eac51cc13051418b890ed3dcfa58e9ae", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及资本市场策略报告等任务,尤其是需要结合宏观经济政策、市场数据和行业趋势进行综合分析的场景。", "content": "[{'step': 1, 'action': '明确核心观点与目标受众', 'output': '提炼出报告的核心观点(如短期调整不改中期牛市趋势),并明确目标受众(如机构投资者、高净值客户)。', 'evaluation_criteria': '核心观点是否清晰、具有逻辑性且能吸引目标受众;是否能直接回应市场热点或客户需求。', 'common_issues': '核心观点过于模糊或缺乏吸引力;未能准确定位目标受众的需求。', 'solutions': '通过团队讨论和市场反馈迭代优化核心观点;深入调研目标受众的投资偏好。'}, {'step': 2, 'action': '构建章节结构与信息优先级', 'output': '设计章节结构(如摘要、正文、投资建议、风险提示),并将核心结论前置展示,确保读者快速抓住重点。', 'evaluation_criteria': '章节安排是否逻辑清晰、层次分明;核心结论是否突出且易于理解。', 'common_issues': '信息分布不均,次要内容喧宾夺主;核心结论埋没在细节中。', 'solutions': '采用倒金字塔结构,先呈现核心结论再逐步展开支撑论据;通过图表和标题强化关键信息。'}, {'step': 3, 'action': '收集并整合多维度数据', 'output': '整合定量数据(如市场指数、融资余额)和定性信息(如政策解读、市场情绪),形成全面的数据支持体系。', 'evaluation_criteria': '数据来源是否权威可靠;定量与定性信息是否平衡且相互印证。', 'common_issues': '数据陈旧或片面;定性分析缺乏深度或与定量数据脱节。', 'solutions': '优先选择权威数据库(如Wind、同花顺);通过交叉验证确保数据一致性;结合专家访谈补充定性分析。'}, {'step': 4, 'action': '建立论证逻辑与递进路径', 'output': '从短期现象切入,逐步过渡到中期趋势判断,并通过政策、资金流向、市场风格切换等多角度论证。', 'evaluation_criteria': '论证是否层层递进、逻辑严密;是否能有效引导读者接受最终结论。', 'common_issues': '论证跳跃或缺乏连贯性;未能充分解释复杂现象。', 'solutions': '使用因果关系图梳理论证路径;每一步骤都应有明确的数据或理论支撑。'}, {'step': 5, 'action': '识别并处理不确定性和风险因素', 'output': '在适当时机提出潜在风险(如政策不及预期、地缘政治事件),并通过情景假设分析多种可能性。', 'evaluation_criteria': '风险因素是否全面覆盖;是否提供应对策略或概率评估。', 'common_issues': '忽视重要风险点;仅简单罗列风险而未深入探讨影响。', 'solutions': '利用历史案例对比分析当前风险;引入敏感性分析量化不确定性的影响。'}, {'step': 6, 'action': '总结投资建议与行动指南', 'output': '基于前述分析,给出具体的投资建议(如关注军工、资源品等主线)以及操作时点提示。', 'evaluation_criteria': '建议是否具体可行;是否与前期分析保持一致。', 'common_issues': '建议空泛无实际指导意义;与分析脱节导致可信度下降。', 'solutions': '结合市场热点细化建议;确保建议有充分的分析依据支持。'}, {'step': 7, 'action': '完善视觉化表达与附录补充', 'output': '通过图表、图片等形式直观展示关键数据;在附录中补充详细计算过程或参考文献。', 'evaluation_criteria': '图表是否简洁明了、辅助理解;附录是否详实且便于查阅。', 'common_issues': '图表冗余或难以读懂;附录缺失导致信息不完整。', 'solutions': '遵循“少即是多”原则,精选关键图表;规范整理附录内容以提升专业性。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:07:34", "modified_time": "2025-08-14 03:07:34", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "370cbb2fe13e4cff93da5220180cc68a", "experience_type": "text", "when_to_use": "此规划框架适用于金融领域的策略周报、市场分析报告或投资建议类任务,尤其是需要对市场数据进行量化与定性结合分析,并提供投资建议和风险提示的场景。例如:行业深度研究、指数表现跟踪、投资标的筛选及风险评估等。", "content": "[{'step': 1, 'action': '收集并整理基础市场数据', 'output': '生成上周主要指数涨跌幅、行业板块表现、全市场交易数据(成交数量、金额、涨跌家数)以及历史新高新低数据的汇总表格。', 'completion_criteria': '数据来源可靠且完整,覆盖所有关键指标;表格清晰呈现,无遗漏或错误。', 'common_issues': '数据来源不一致可能导致误差;解决方法是统一使用权威数据库(如Wind、iFinD)并交叉验证。', 'adaptation_guidance': '根据不同任务需求调整数据范围,如增加特定行业或个股的数据。'}, {'step': 2, 'action': '分析市场整体表现和行业板块动态', 'output': '形成对上周市场表现的总结,包括指数走势、行业涨跌幅排名、资金流向等。', 'completion_criteria': '分析逻辑清晰,结论基于数据支持;能够准确识别市场热点和冷门板块。', 'common_issues': '可能忽略某些小众但重要的行业变化;解决方法是通过多维度数据分析补充遗漏信息。', 'adaptation_guidance': '在更长期的趋势分析中加入历史对比,或针对特定行业做深入解读。'}, {'step': 3, 'action': '评估市场情绪和技术指标', 'output': '提供市场情绪相关数据(如创新高/新低股票数量)、两融余额变动情况,以及估值水平(市盈率百分位)的分析。', 'completion_criteria': '技术指标计算准确,解释合理;能有效反映当前市场情绪和估值状态。', 'common_issues': '单一时间窗口可能导致偏差;解决方法是采用多个时间截面进行对比分析。', 'adaptation_guidance': '根据具体任务扩展技术指标种类,如MACD、RSI等,以增强分析深度。'}, {'step': 4, 'action': '提出投资建议', 'output': '基于以上分析,给出明确的投资方向建议,包括关注低估值区域、规避高风险板块等。', 'completion_criteria': '建议具有可操作性,逻辑连贯,与前期分析紧密衔接;避免空泛或脱离实际。', 'commonissues': '建议可能过于保守或激进;解决方法是结合历史经验和当前市场环境平衡推荐。', 'adaptationguidance': '针对不同客户群体调整建议内容,如机构投资者偏好宏观视角,而个人投资者更关注个股选择。'}, {'step': 5, 'action': '揭示潜在风险因素', 'output': '列出可能影响市场的风险点,如市场波动风险、政策风险等,并说明其时机和应对方式。', 'completioncriteria': '风险提示全面且及时,表述客观;能够让读者充分理解潜在威胁。', 'commonissues': '风险描述可能过于笼统;解决方法是结合具体案例或数据支撑。', 'adaptationguidance': '在复杂环境中细化风险分类,如区分系统性风险与非系统性风险。'}, {'step': 6, 'action': '撰写最终报告并审校', 'output': '完成包含摘要、正文、图表、附录等内容的完整报告文档。', 'completioncriteria': '报告结构层次分明,语言流畅,图表规范;符合公司内部质量标准。', 'commonissues': '可能存在排版混乱或内容冗余;解决方法是严格遵循模板并多次校对。', 'adaptationguidance': '根据受众调整报告形式,如简化版本供快速阅读,详尽版本用于深度研究。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:08:58", "modified_time": "2025-08-14 03:08:58", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "210c34ce7e754ce49b06479ee4f7b74a", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及市场趋势研判类金融分析任务,尤其是需要结合定量与定性信息进行综合评估并提出投资建议的场景。", "content": "[{'step': 1, 'action': '明确分析目标和范围', 'output': '确定研究的核心主题(如A股市场走势及投资建议),定义分析的时间跨度和关注的重点行业或板块。', 'completion_criteria': '分析目标清晰且具体,涵盖市场综述、后市研判及投资建议三大核心模块。', 'common_issues': '目标过于宽泛或模糊,导致后续分析缺乏聚焦点。', 'solutions': '通过与利益相关方沟通,明确优先级最高的问题,并将其作为分析的切入点。'}, {'step': 2, 'action': '收集并整理基础数据', 'output': '获取市场指数表现、行业涨跌幅分布、资金流向等定量数据,以及宏观经济政策、行业动态等定性信息。', 'completion_criteria': '数据来源可靠,覆盖全面,能够支持后续的分析逻辑推导。', 'common_issues': '数据不完整或过时,影响分析的准确性和时效性。', 'solutions': '建立固定的数据采集渠道(如Wind、Bloomberg等),定期更新数据库,并交叉验证数据的准确性。'}, {'step': 3, 'action': '构建章节结构并安排信息优先级', 'output': '设计报告结构,包括市场综述、数据分析、后市研判及投资建议;确保核心结论(如短期震荡上行趋势)在开头部分突出展现。', 'completion_criteria': '章节逻辑清晰,信息展示符合“先总后分”的原则,重点内容(如市场走势、投资机会)优先呈现。', 'common_issues': '信息堆砌无序,导致读者难以快速抓住重点。', 'solutions': '使用金字塔原理组织内容,优先展示结论,再逐步展开支撑细节。'}, {'step': 4, 'action': '定量与定性分析相结合', 'output': '结合历史数据(如市盈率变化、成交量趋势)和当前市场环境(如政策导向、流动性状况)进行综合分析,得出市场运行特征。', 'completion_criteria': '定量分析与定性分析相辅相成,能够有效解释市场现象并预测未来趋势。', 'common_issues': '过度依赖单一类型数据,导致分析片面化。', 'solutions': '确保每项结论都有至少一个定量指标和一个定性因素共同支撑,避免单一维度的推测。'}, {'step': 5, 'action': '层层递进论证观点', 'output': '从短期市场走势(如低开高走)到中长期趋势(如科技成长与周期制造主线),逐步展开逻辑链条,提出明确的投资建议。', 'completion_criteria': '论证过程环环相扣,每一层结论都基于前一层的推导,最终形成完整的投资建议。', 'common_issues': '论证跳跃性强,缺乏连贯性,使结论显得牵强。', 'solutions': '采用“现状描述→原因分析→未来展望”的三步论证路径,确保逻辑严密。'}, {'step': 6, 'action': '识别并处理风险因素', 'output': '在适当时机引入风险提示(如海外衰退、国内政策不及预期等),并通过情景假设等方式探讨多种可能性。', 'completion_criteria': '风险提示全面且适时,能够帮助投资者理性决策,同时提供应对策略。', 'common_issues': '忽视潜在风险或仅在结尾简单提及,未能充分引起重视。', 'solutions': '将风险因素融入整体分析框架,在关键节点(如行业选择、投资建议)针对性地讨论其影响。'}, {'step': 7, 'action': '总结并提炼核心结论', 'output': '以简明扼要的语言概括市场走势、投资机会及注意事项,形成易于理解的行动指南。', 'completion_criteria': '总结内容高度凝练,能够快速传递核心信息,便于投资者执行。', 'common_issues': '总结冗长或重复,无法直接指导行动。', 'solutions': '采用“一句话总结+具体操作建议”的格式,确保结论简洁实用。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:10:05", "modified_time": "2025-08-14 03:10:05", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "7e024753abf04c82bdfe0608fceaf984", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究、ESG投资分析、政策影响评估以及风险与机遇综合报告等金融任务,尤其适合需要整合定量和定性数据的复杂分析场景。", "content": "[{'step': 1, 'action': '明确目标与受众', 'output': '清晰定义分析的核心目标(如揭示ESG热点趋势、评估政策影响)及主要受众(如投资者、政策制定者),并据此确定信息优先级。', 'completion_criteria': '目标与受众定义明确,且能指导后续章节结构设计与信息筛选。', 'common_issues': '目标过于宽泛或模糊,导致信息过载或偏离主题。', 'solution': '通过头脑风暴和团队讨论,聚焦于3-5个核心问题,并确保所有内容围绕这些问题展开。'}, {'step': 2, 'action': '构建逻辑框架与章节结构', 'output': '根据目标划分章节,通常包括背景介绍、事件梳理、数据分析、学术前沿、风险提示等模块,确保信息层次分明。', 'completion_criteria': '各章节之间逻辑连贯,能够自然推进至核心结论;章节标题准确反映内容重点。', 'common_issues': '章节安排不合理,导致重要信息被弱化或遗漏。', 'solution': '采用倒推法:从最终结论出发,逆向思考支撑结论所需的证据链,确保关键信息得到充分覆盖。'}, {'step': 3, 'action': '收集与整理多源数据', 'output': '系统性地搜集政策文件、市场动态、学术研究成果等多维度数据,并按时间线或主题分类整理成表格或图表形式。', 'completion_criteria': '数据来源可靠,涵盖定量与定性信息,且经过初步清洗以去除冗余或无关内容。', 'common_issues': '数据不完整或质量参差不齐,影响分析可信度。', 'solution': '建立数据审核机制,对每项数据标注来源并进行交叉验证;优先选择权威机构发布的公开数据。'}, {'step': 4, 'action': '提炼核心观点与论证路径', 'output': '通过归纳法或演绎法,将零散信息转化为具有洞察力的观点,并用具体案例或数据支持每个论点。', 'completion准则': '观点鲜明且有充分证据支撑,论证过程层层递进,无明显逻辑漏洞。', 'common_issues': '观点缺乏深度或过于表面化,未能触及本质问题。', 'solution': '结合SWOT分析或PESTEL模型,深入剖析内外部因素如何共同作用于现状。'}, {'step': 5, 'action': '平衡历史与预测信息', 'output': '在展示当前状况的同时,引入未来趋势预测,例如政策走向、技术突破或资本流动方向,并说明其潜在影响。', 'completion_criteria': '历史数据分析详实,预测部分基于合理假设,且包含多种可能性的探讨。', 'common_issues': '过度依赖历史数据,忽视前瞻性视角;或反之,预测缺乏依据。', 'solution': '采用情景分析法,分别设定乐观、中性和悲观三种情景,并为每种情景提供可能性评估。'}, {'step': 6, 'action': '识别与呈现风险因素', 'output': '在适当位置(通常接近结论部分)提出主要风险点,并附上缓解措施建议。', 'completion_criteria': '风险描述具体且切合实际,提出的应对策略可操作性强。', 'common_issues': '风险披露不足或流于形式,未引起足够重视。', 'solution': '参考类似项目的失败案例,从中提取共性风险,并结合本次分析的具体情境调整表述。'}, {'step': 7, 'action': '突出核心结论与行动建议', 'output': '总结全文的主要发现,并给出针对不同受众的具体行动指南(如投资建议、政策建议等)。', 'completion_criteria': '核心结论简明扼要,易于理解;行动建议切实可行,符合受众需求。', 'common_issues': '结论泛泛而谈,缺乏针对性或实用性。', 'solution': '邀请目标受众代表参与评审,确保结论和建议贴合他们的实际关切。'}, {'step': 8, 'action': '优化信息展示方式', 'output': '利用图表、时间轴、对比表等可视化工具增强信息表达效果,同时保持整体布局简洁美观。', 'completion_criteria': '信息展示直观易懂,视觉元素与文字内容相辅相成。', 'common_issues': '图表设计过于复杂,反而干扰了信息传递。', 'solution': '遵循“少即是多”原则,仅保留最关键的数据点,并使用统一的颜色和字体风格。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:11:48", "modified_time": "2025-08-14 03:11:48", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "1d7045e6bc8a4dad84e41ea225aab634", "experience_type": "text", "when_to_use": "此规划框架适用于短期市场分析报告(如日报、周报)、行业动态跟踪、投资决策支持等任务。尤其适合需要快速整合数据、提炼核心结论并为投资者提供即时指导的场景。", "content": "[{'step': 1, 'action': '明确分析目标和受众需求', 'output': '定义报告的核心主题(如市场回顾、行业表现)和受众关注点(如投资者短期交易决策)。', 'completion_criteria': '能够清晰回答‘报告的主要目的是什么?’以及‘目标读者最关心哪些信息?’。', 'common_issues': '目标过于宽泛或模糊,导致后续内容组织缺乏焦点。', 'solutions': '在开始分析前与团队或客户确认核心需求,并列出具体问题清单作为分析方向。'}, {'step': 2, 'action': '收集和整理基础数据', 'output': '获取市场指数、行业板块、个股涨跌幅、成交量等定量数据,并分类标注来源。', 'completion_criteria': '所有关键指标完整且准确,数据来源可靠(如Wind、交易所官方数据)。', 'common_issues': '数据缺失或不一致,影响后续分析可信度。', 'solutions': '建立标准化的数据采集流程,优先使用权威数据库,并设置交叉验证机制。'}, {'step': 3, 'action': '设计章节结构以突出核心结论', 'output': '确定报告逻辑框架:从整体市场表现到细分领域分析再到风险提示;确保核心结论(如涨幅领先的板块)优先呈现。', 'completion_criteria': '章节安排符合‘从宏观到微观’的原则,且每个部分都有明确的信息传递目标。', 'common_issues': '章节顺序混乱,导致读者难以抓住重点。', 'solutions': '采用‘倒金字塔’结构,将最重要的信息放在开头,次要信息依次递进。'}, {'step': 4, 'action': '进行定量与定性结合的深度分析', 'output': '对市场指数、行业涨跌情况进行量化分解,同时辅以政策、事件驱动等定性因素解释。', 'completion_criteria': '定量分析覆盖全面,定性分析逻辑严密且有据可依。', 'common_issues': '定量与定性分析脱节,无法形成统一叙事。', 'solutions': '通过图表展示定量结果,并用简短注释补充定性解读,确保两者紧密衔接。'}, {'step': 5, 'action': '平衡历史回顾与未来预测', 'output': '总结当日市场表现(历史),并对次日或近期趋势提出合理推测(预测)。', 'completion_criteria': '历史数据描述详实,预测基于明确假设且留有余地。', 'common_issues': '过度依赖历史数据而忽视未来可能性,或预测过于武断。', 'solutions': '引入多种情景假设,并注明每种情况的概率及触发条件。'}, {'step': 6, 'action': '识别并阐述潜在风险', 'output': '在报告末尾单独设立‘风险提示’章节,列举可能影响市场的负面因素。', 'completion_criteria': '风险提示全面、客观,避免夸大或隐瞒。', 'common_issues': '风险披露不足或措辞含糊,削弱报告专业性。', 'solutions': '参考监管要求和行业惯例,按重要性排序列出主要风险点。'}, {'step': 7, 'action': '优化信息展示形式', 'output': '利用表格、图表等形式直观呈现复杂数据,减少纯文字叙述比例。', 'completion_criteria': '图表设计简洁美观,能快速传达关键信息。', 'common_issues': '图表冗长或难以理解,分散读者注意力。', 'solutions': '遵循‘一图一意’原则,每张图表只表达一个核心观点,并配以简明标题和注释。'}, {'step': 8, 'action': '撰写总结性投资建议', 'output': '根据前述分析提炼出具体操作建议(如增持某行业、规避高波动板块)。', 'completion_criteria': '建议具有可执行性,且与分析内容高度一致。', 'common_issues': '建议空洞无物,缺乏实际指导意义。', 'solutions': '基于数据分析结果推导建议,确保逻辑链条完整。'}, {'step': 9, 'action': '审阅与校正', 'output': '检查报告语言是否精炼、数据是否准确、格式是否规范。', 'completion_criteria': '无语法错误、数据误差或排版问题。', 'common_issues': '因时间紧迫忽略细节,导致报告质量下降。', 'solutions': '预留充足时间进行多轮审核,必要时引入第三方校对。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:13:12", "modified_time": "2025-08-14 03:13:12", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "38b603b013e24877ae12dc2d31d2ccaf", "experience_type": "text", "when_to_use": "适用于行业深度研究、投资策略报告、市场环境分析及风险评估等金融分析任务,特别是需要结合宏观经济、政策导向与资本市场动态的综合性研究报告。", "content": "[{'step': 1, 'action': '明确核心目标和受众需求', 'output': '清晰定义报告的核心目标(如:8月行情研判)、受众(如:机构投资者)以及关键结论的呈现形式(如:震荡整固中夯实上行基础)。', 'criteria_for_completion': '报告的目标和受众需求明确,且能贯穿后续章节的组织逻辑。', 'common_problems': '目标模糊或偏离受众需求,导致内容结构松散。', 'solutions': '通过初步调研和内部讨论确认报告的核心问题,并围绕此设计提纲。'}, {'step': 2, 'action': '构建章节框架并分配信息优先级', 'output': '按照“总-分-总”逻辑设计章节结构,确保信息展示从宏观到微观层层递进。例如:先总结市场表现(总),再分析国内外经济环境(分),最后回归市场研判(总)。', 'criteria_for_completion': '章节安排合理,信息优先级符合逻辑(如:先展示核心数据和结论,后展开详细分析)。', 'common_problems': '章节之间缺乏连贯性,或信息分布不均。', 'solutions': '在每章开头设置简短引言,明确本章重点;使用表格、图表等形式平衡定量与定性信息。'}, {'step': 3, 'action': '收集并整合多维度数据', 'output': '整合宏观经济指标(如GDP、PMI)、资本市场表现(如指数涨跌幅、两融余额)以及政策动态(如政治局会议、美联储议息会议)等多维度数据。', 'criteria_for_completion': '数据来源可靠,覆盖全面,且能够有效支撑观点论证。', 'common_problems': '数据缺失或过时,导致分析不够深入。', 'solutions': '建立常用数据库清单,定期更新关键指标;引用权威数据源(如IMF、Wind)。'}, {'step': 4, 'action': '运用多层次论证逻辑推导结论', 'output': '通过“现状描述→原因分析→未来预测”的路径层层递进。例如:先说明7月市场表现,再分析内外部因素影响,最后得出8月行情展望。', 'criteria_for_completion': '论证过程清晰,逻辑链条完整,避免跳跃式推论。', 'common_problems': '论证过于简单或缺乏深度,无法说服读者。', 'solutions': '引入对比分析法(如历史与当前数据对比)、因果分析法(如政策对市场的影响)增强说服力。'}, {'step': 5, 'action': '平衡定量与定性信息', 'output': '结合图表(如指数走势、行业涨跌幅)展示定量数据,辅以政策解读、专家观点等定性分析。', 'criteria_for_completion': '定量与定性信息比例适中,互为补充,增强报告可读性和专业性。', 'common_problems': '过度依赖某一种类型信息,导致内容单一或枯燥。', 'solutions': '根据受众偏好调整信息比重,增加可视化元素提升吸引力。'}, {'step': 6, 'action': '适时提出风险提示并处理不确定性', 'output': '在核心结论之后,单独列出风险提示部分,涵盖外部冲击(如美国关税政策变动)、内部结构性矛盾等潜在威胁。', 'criteria_for_completion': '风险提示具体且有针对性,同时提供应对建议。', 'common_problems': '忽略风险因素或表述含糊,削弱报告可信度。', 'solutions': '采用情景假设法(如乐观/悲观情景)分析多种可能性,并给出相应策略。'}, {'step': 7, 'action': '优化视觉呈现和语言表达', 'output': '通过图表、插图、颜色标注等方式突出核心结论;使用简洁明了的语言传递复杂信息。', 'criteria_for_completion': '报告排版美观,语言精炼,便于快速阅读和理解。', 'common_problems': '视觉效果差或语言冗长,降低用户体验。', 'solutions': '统一图表风格,控制文字密度,邀请同事进行交叉审阅。'}, {'step': 8, 'action': '复盘验证与反馈改进', 'output': '完成初稿后,邀请同行评审,收集意见并优化报告内容。', 'criteria_for_completion': '修改后的版本显著优于初稿,满足客户或团队期望。', 'common_problems': '忽视反馈环节,导致最终成果存在瑕疵。', 'solutions': '制定标准化反馈表单,记录并跟踪每项改进建议。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:14:42", "modified_time": "2025-08-14 03:14:42", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "10758fc8f580460eb2c4964547192187", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及市场趋势评估类任务,特别是需要结合宏观政策、行业动态与个股/标的财务表现进行综合分析的场景。例如:有机硅行业景气度分析、北交所化工新材料行业表现评估等。", "content": "[{'step': 1, 'action': '明确研究主题并定义核心问题', 'output': '确定研究的具体方向和目标,例如有机硅行业的景气上行趋势及北交所相关标的筛选。', 'completion_criteria': '核心问题清晰,能用一句话概括(如‘有机硅行业景气上行,关注北交所硅烷科技、华密新材等标的’)。', 'common_issues': '主题过于宽泛或模糊,导致后续分析缺乏聚焦。', 'solutions': '通过政策文件、行业数据和市场热点缩小范围,确保研究主题具有实际意义且可操作性强。'}, {'step': 2, 'action': '收集并整理基础信息', 'output': '获取政策文件(如工信部通知)、行业数据(如多晶硅产能、化工品价格走势)和公司公告(如戈碧迦终止项目、利通科技购房计划)。', 'completion_criteria': '信息全面覆盖政策、行业和公司层面,且来源可靠(如Wind、工信部公告、公司财报)。', 'common_issues': '信息不完整或来源不可靠,导致分析基础薄弱。', 'solutions': '优先选择权威数据源,并交叉验证关键数据点;建立标准化信息采集模板。'}, {'step': 3, 'action': '构建章节结构并分配信息优先级', 'output': '设计报告结构,包括行业背景(政策与市场)、核心标的分析(如硅烷科技、华密新材)、市场表现(如北交所化工新材行业涨跌幅)和风险提示。', 'completion_criteria': '章节逻辑清晰,信息分布合理,核心结论在开头部分突出。', 'common_issues': '章节安排混乱,信息堆砌而无重点。', 'solutions': '采用‘总-分-总’结构,先概述行业趋势,再深入分析核心标的,最后总结关键结论和风险。'}, {'step': 4, 'action': '展开定量与定性分析', 'output': '对行业趋势(如有机硅产业链)、公司财务表现(如硅烷科技毛利率、华密新材研发费用占比)和市场表现(如化工新材二级行业涨跌幅)进行量化分析,同时结合定性判断(如政策影响、技术优势)。', 'completion_criteria': '定量数据准确且可视化清晰,定性分析逻辑严谨并有数据支持。', 'common_issues': '定量与定性分析脱节,数据图表无法有效支撑观点。', 'solutions': '确保每张图表或数据都直接服务于核心论点,并配以简明扼要的文字说明。'}, {'step': 5, 'action': '引入风险因素并处理不确定性', 'output': '识别宏观经济环境变动、市场竞争和技术迭代等潜在风险,并提出应对建议(如关注募投项目进展、优化成本结构)。', 'completion_criteria': '风险因素全面且具体,提出的建议具有可操作性。', 'common_issues': '风险提示过于笼统或忽视关键风险。', 'solutions': '结合行业特点和公司实际情况,逐一列出可能的风险点,并参考历史案例提出解决方案。'}, {'step': 6, 'action': '撰写结论并提炼投资建议', 'output': '总结行业趋势和公司表现,明确推荐标的(如硅烷科技、华密新材),并给出具体的投资评级(如‘买入’或‘增持’)。', 'completion_criteria': '结论简洁有力,投资建议与分析内容一致且具有实操性。', 'common_issues': '结论与分析内容脱节,投资建议缺乏依据。', 'solutions': '确保结论部分回扣前文分析,避免引入未经论证的新观点。'}, {'step': 7, 'action': '审阅与优化报告', 'output': '检查报告语言是否简洁、数据是否准确、图表是否清晰,并调整格式以便阅读。', 'completion_criteria': '报告整体逻辑清晰,语言专业且易懂,图表美观且标注规范。', 'common_issues': '语言冗长、图表混乱或排版不统一。', 'solutions': '制定报告审阅清单,逐项检查内容和形式问题,并邀请同事进行交叉审阅。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:16:01", "modified_time": "2025-08-14 03:16:01", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "bee43d980b944111a34c8f4ab9959660", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究、投资标的分析以及股票组合推荐报告等金融分析任务。尤其适合需要结合宏观经济环境、行业趋势、个股基本面分析及市场数据,向专业投资者提供决策支持的场景。", "content": "[{'step': 1, 'action': '明确分析目标与核心结论', 'output': '清晰界定报告的目标(如股票组合推荐),并提前提炼出核心结论(如8月行情研判:震荡整固中夯实上行基础)。', 'completion_criteria': '目标是否明确;核心结论是否具有指导性且能够贯穿全文。', 'common_issues': '目标模糊或结论缺乏支撑。', 'solutions': '在撰写前进行头脑风暴,确保团队对目标和结论达成一致,并检查是否有足够的数据支持结论。'}, {'step': 2, 'action': '组织章节结构并安排信息优先级', 'output': '按照从宏观到微观的逻辑构建报告结构,依次包括市场回顾、行情研判、个股分析及风险提示。', 'completion_criteria': '章节是否层次分明;信息展示是否符合“先全局后局部”的逻辑顺序。', 'common_issues': '信息堆砌无序,关键内容被次要信息掩盖。', 'solutions': '采用倒金字塔原则,优先呈现最重要的结论和数据,再逐步展开细节。'}, {'step': 3, 'action': '收集与整理定量与定性数据', 'output': '获取最新的市场数据(如指数涨跌幅、个股表现)、财务指标(如EPS预测值、市盈率)及行业动态(如政策变化、技术创新)。', 'completion$criteria': '数据是否准确、全面且及时更新;是否覆盖历史、当前及未来预测。', 'common_issues': '数据来源单一或过时,导致分析缺乏说服力。', 'solutions': '多渠道验证数据可靠性,同时关注权威机构发布的最新统计与预测数据。'}, {'step': 4, 'action': '建立论证逻辑并递进观点', 'output': '通过分层论证逐步强化观点,例如从宏观经济环境切入,过渡到行业趋势,最后聚焦于具体公司业务亮点。', 'completion_criteria': '论证路径是否连贯;每个论点是否有充分的数据或案例支持。', 'common_issues': '论证跳跃过大或缺乏中间环节。', 'solutions': '使用图表、对比数据等可视化工具辅助说明,确保逻辑链条完整。'}, {'step': 5, 'action': '平衡不同类型信息分布', 'output': '合理分配定量(如财务数据)与定性(如管理层战略)信息的比例,并兼顾历史回顾、现状描述与未来展望。', 'completion_criteria': '各类信息比例是否均衡;是否存在偏重某一方面的情况。', 'common_issues': '过于依赖单一类型信息,忽视其他维度。', 'solutions': '制定信息配比表,强制要求每部分都包含一定比例的定量与定性信息。'}, {'step': 6, 'action': '突出不确定性与风险因素', 'output': '在适当时机(如个股分析后)提出潜在风险,并用客观语言表述可能的影响。', 'completion_criteria': '风险提示是否全面且不夸大;是否避免影响整体正面基调。', 'common_issues': '忽略重要风险或措辞过于消极。', 'solutions': '设立专门的风险评估模块,邀请多方专家参与讨论以确保全面性。'}, {'step': 7, 'action': '总结与行动建议', 'output': '基于前述分析给出明确的投资建议(如买入/增持评级),并附带具体操作指引(如目标价、时间周期)。', 'completion_criteria': '建议是否具体可行;是否与前文分析保持一致性。', 'common_issues': '建议空泛或与分析脱节。', 'solutions': '将建议细化为可执行步骤,并再次核对与分析内容的一致性。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:17:09", "modified_time": "2025-08-14 03:17:09", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "249ace8fce0a4cf6a009ef374856a736", "experience_type": "text", "when_to_use": "此规划框架适用于制作金融市场的日常分析报告、行业动态解读、宏观经济事件影响评估,以及短期投资策略建议等任务。尤其适合需要结合定量与定性信息,快速响应市场变化并提供清晰结论的场景。", "content": "[{'step': 1, 'action': '明确报告目标和受众', 'output': '确定报告的核心目的(如解读市场表现、分析特定事件影响)及目标读者(如机构投资者、个人投资者)。', 'criteria_for_success': '目标清晰且与受众需求匹配,能够指导后续内容组织。', 'common_issues': '目标过于宽泛或模糊,导致内容缺乏聚焦。', 'solutions': '在开始撰写前,列出3-5个关键问题,确保报告内容能够回答这些问题。'}, {'step': 2, 'action': '收集和整理数据', 'output': '从权威来源(如Wind、国家统计局、交易所公告)获取定量数据,并结合新闻、政策文件等定性信息。', 'criteria_for_success': '数据全面、准确且来源可靠,涵盖市场表现、行业动态、宏观经济指标等多维度。', 'common_issues': '数据缺失或来源不可靠,导致分析基础薄弱。', 'solutions': '建立常用数据源清单,并定期更新;对关键数据进行交叉验证。'}, {'step': 3, 'action': '设计报告结构', 'output': '按照“总-分-总”逻辑组织章节:开篇概述核心结论,中间部分详细展开分析,结尾总结并提出建议。', 'criteria_for_success': '结构清晰,信息展示优先级合理,核心结论突出。', 'common_issues': '章节安排混乱,信息堆砌而无重点。', 'solutions': '使用思维导图提前规划章节内容,确保每部分服务于整体目标。'}, {'step': 4, 'action': '撰写行情回顾和市场表现', 'output': '描述当日市场走势(如指数涨跌、板块轮动),并辅以图表和数据支持。', 'criteria_for_success': '内容简洁明了,能够快速传递市场全貌。', 'common_issues': '过度关注细节,忽略整体趋势。', 'solutions': '聚焦于主要指数和关键板块的表现,避免过多技术性细节。'}, {'step': 5, 'action': '分析驱动因素', 'output': '结合当日要闻(如非农数据、政策变动)解释市场表现,运用因果逻辑递进建立观点。', 'criteria_for_success': '论证路径清晰,能够将事件与市场表现关联起来。', 'common_issues': '因果关系不明确,分析流于表面。', 'solutions': '逐一分析每个事件的影响路径,并用数据或案例支持论点。'}, {'step': 6, 'action': '评估风险因素', 'output': '识别潜在风险(如国际市场扰动、政策变化),并在适当位置提出预警。', 'criteria_for_success': '风险提示时机恰当,表述客观且具有前瞻性。', 'common_issues': '风险提示过于笼统或滞后。', 'solutions': '结合历史数据和当前环境,具体说明风险发生的可能性及影响范围。'}, {'step': 7, 'action': '处理不确定性和多种可能性', 'output': '通过情景分析或概率评估,讨论不同假设下的市场走向。', 'criteria_for_success': '分析全面,能够帮助读者理解潜在变数。', 'common_issues': '忽略小概率事件,导致分析片面。', 'solutions': '列出所有可能的情景,并为每种情景分配合理的权重。'}, {'step': 8, 'action': '总结并提出建议', 'output': '提炼核心结论,给出明确的投资建议或操作指引。', 'criteria_for_success': '结论简明扼要,建议具体可行。', 'common_issues': '建议空洞或缺乏依据。', 'solutions': '基于前面的分析推导出建议,确保逻辑连贯。'}, {'step': 9, 'action': '审阅和优化报告', 'output': '检查报告的语言表达、数据准确性、格式一致性,并添加必要的免责声明。', 'criteria_for_success': '报告专业、规范,无明显错误。', 'common_issues': '语言冗长或存在低级错误。', 'solutions': '邀请同事审阅,重点关注易被忽视的细节。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:18:23", "modified_time": "2025-08-14 03:18:23", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "6a31120373cc44918a22face17425019", "experience_type": "text", "when_to_use": "此规划框架适用于金融政策分析、货币政策解读、宏观经济趋势预测等需要结合定量与定性信息,同时需处理高度不确定性和多维度变量的分析任务。典型场景包括央行会议声明解读(如FOMC会议)、经济数据点评、政策影响评估等。", "content": "[{'step': 1, 'action': '明确核心议题和目标受众', 'output': '清晰定义报告的核心主题(如本次为“7月FOMC会议声明解读”)及目标受众(如机构投资者、政策研究者等)。', 'completion_criteria': '核心议题无歧义,且能通过标题和摘要直接传达给目标受众。', 'common_issues': '议题范围过于宽泛或模糊,导致后续分析失去焦点。', 'solution': '在初步调研阶段,列出3-5个关键问题作为报告的核心关注点,并确保这些问题直接服务于目标受众的需求。'}, {'step': 2, 'action': '收集并整理基础数据和背景信息', 'output': '汇总所有相关的定量数据(如GDP增速、通胀率、失业率等)和定性信息(如政策声明、记者会问答等),并进行分类整理。', 'completion_criteria': '数据完整、来源可靠,且已按照时间线或逻辑关系排列,便于后续引用。', 'common_issues': '数据缺失或信息过时,导致分析缺乏说服力。', 'solution': '优先从权威机构(如美联储官网、CME工具)获取最新数据,并标注数据发布时间以确保时效性。'}, {'step': 3, 'action': '构建章节结构,合理安排信息优先级', 'output': '根据分析目标设计章节结构(如本次为“核心观点—相关背景—市场反应—风险提示”),并确定信息展示的优先级(如先呈现核心结论,再展开详细论证)。', 'completion_criteria': '章节结构逻辑清晰,信息优先级符合“金字塔原理”,即重要信息优先呈现。', 'common_issues': '章节之间逻辑不连贯,或信息优先级混乱导致读者难以抓住重点。', 'solution': '使用“倒金字塔”原则,将核心结论放在最前面,随后依次展开背景、细节和延伸讨论。'}, {'step': 4, 'action': '逐层递进建立论证逻辑', 'output': '围绕核心议题,逐步展开论证(如本次从经济增长放缓、通胀压力、政策分歧等角度分别论述),并通过数据和事实支持每个论点。', 'completion_criteria': '每个论点均有明确的数据或事实支撑,且论点之间的逻辑链条完整。', 'common_issues': '论证过程跳跃性过大,或缺乏足够的数据支持。', 'solution': '为每个论点单独列出支撑数据和案例,并确保论点之间的过渡自然流畅。'}, {'step': 5, 'action': '平衡定量与定性信息,突出不确定性', 'output': '在分析中合理分配定量(如GDP增速、失业率)和定性(如政策声明措辞变化)信息,并通过专门章节讨论不确定性(如本次对关税传导、降息预期的分析)。', 'completion_criteria': '定量与定性信息比例均衡,且不确定性部分有独立章节或段落进行深入探讨。', 'common_issues': '定量信息过多导致分析枯燥,或定性描述缺乏数据支持显得主观。', 'solution': '制定信息分布计划,例如60%定量+40%定性,并在不确定性部分引入多种情景假设。'}, {'step': 6, 'action': '提出风险因素并给出应对建议', 'output': '识别潜在风险(如本次提到“美联储货币政策超预期”、“美国经济下行超预期”),并提供针对性的风险管理建议。', 'completion_criteria': '风险因素全面覆盖主要变量,且建议具有可操作性。', 'common_issues': '风险提示过于笼统,或缺乏具体应对措施。', 'solution': '采用“风险-应对”矩阵,逐一列出风险因素及其对应的缓解策略。'}, {'step': 7, 'action': '总结核心结论并展望未来', 'output': '提炼出报告的核心结论(如本次为“9月不降息概率上升”),并基于当前分析对未来趋势做出简要展望。', 'completion_criteria': '核心结论简洁明了,且展望部分能够激发进一步思考或行动。', 'common_issues': '总结冗长或偏离主题,展望部分缺乏实际意义。', 'solution': '限制总结篇幅至2-3句话,并在展望部分提出1-2个具体的研究方向或投资建议。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:19:31", "modified_time": "2025-08-14 03:19:31", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "793119f4581c412ea08715b3fece7e56", "experience_type": "text", "when_to_use": "此规划框架适用于宏观经济与大类资产月报、投资策略建议报告以及跨市场分析等任务,尤其适合需要结合定量数据和定性趋势的综合性金融分析。", "content": "[{'step': 1, 'action': '明确报告目标与受众', 'output': '确定报告的核心目标(如提供投资建议、揭示市场趋势)及主要受众(如机构投资者、政策制定者),并据此设计报告结构。', 'criteria_for_success': '报告的目标清晰,且章节安排能有效满足目标受众的信息需求。', 'common_issues_and_solutions': {'issue': '目标过于宽泛或模糊', 'solution': '在开始撰写前,通过与团队或客户沟通,明确核心问题和预期成果。'}}, {'step': 2, 'action': '收集和整理基础数据', 'output': '从权威数据源(如WIND、官方统计机构)获取最新的宏观经济指标、行业数据和市场动态,并分类整理为定量和定性两类信息。', 'criteria_for_success': '数据全面且来源可靠,能够支持后续分析。', 'common_issues_and_solutions': {'issue': '数据缺失或质量不佳', 'solution': '优先选择权威数据源,并在必要时使用替代数据或标注不确定性。'}}, {'step': 3, 'action': '构建章节结构并分配信息权重', 'output': '按照“回顾-分析-建议-风险提示”的逻辑顺序组织内容,确保历史数据、当前分析和未来预测的平衡分布。', 'criteria_for_success': '章节间逻辑连贯,信息展示优先级合理,核心结论突出。', 'common_issues_and_solutions': {'issue': '章节间逻辑不清晰或重点不突出', 'solution': '在编写前绘制内容大纲,确保每部分有明确的功能定位(如“回顾”用于铺垫,“建议”用于行动指导)。'}}, {'step': 4, 'action': '进行数据分析与趋势解读', 'output': '对关键经济指标(如PMI、CPI、就业数据等)进行深入分析,结合图表展示其变化趋势,并用简明语言解释其背后的驱动因素。', 'criteria_for_success': '分析深入且可视化效果直观,能够帮助读者快速理解复杂数据。', 'common_issues_and_solutions': {'issue': '分析过于冗长或缺乏洞察', 'solution': '聚焦于对核心结论影响最大的数据点,避免过度堆砌细节。'}}, {'step': 5, 'action': '提出投资策略与建议', 'output': '基于前期分析,提出具体的投资标的推荐(如股票、债券、大宗商品)和操作建议(如买入、卖出、持有),并附上支撑论据。', 'criteria_for_success': '建议具有可操作性,且与前期分析紧密关联。', 'common_issues_and_solutions': {'issue': '建议与分析脱节或缺乏依据', 'solution': '逐一检查每条建议是否能在分析部分找到明确支持点。'}}, {'step': 6, 'action': '识别并披露潜在风险', 'output': '列出可能影响投资决策的关键风险因素(如政策变化、地缘政治风险),并在适当位置(如章节末尾)进行详细说明。', 'criteria_for_success': '风险提示全面且表述中立,能够帮助读者权衡利弊。', 'common_issues_and_solutions': {'issue': '风险提示过于笼统或遗漏重要风险', 'solution': '参考历史案例和当前市场动态,确保覆盖所有相关风险点。'}}, {'step': 7, 'action': '校对与优化呈现形式', 'output': '检查报告的语言表达、图表格式和整体排版,确保信息传递准确且视觉效果专业。', 'criteria_for_success': '报告内容无明显错误,且易于阅读和理解。', 'common_issues_and_solutions': {'issue': '图表混乱或文字冗长', 'solution': '邀请同事或外部专家审阅,重点关注信息密度和视觉效果。'}}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:20:54", "modified_time": "2025-08-14 03:20:54", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "08dc2e7344fb47109e4543ec97888309", "experience_type": "text", "when_to_use": "适用于需要基于多维数据进行深度分析的任务,例如行业深度研究、投资标的分析、风险评估报告等。", "content": "[{'step': 1, 'action': '收集并整理背景信息和宏观数据(如天气监测、区域性降水量等)。', 'output': '生成一组背景数据图表,为后续分析奠定基础。', 'completion_criteria': '背景信息完整且相关性强,能够为后续分析提供逻辑起点。', 'common_issues': '数据来源不一致或数据质量不高。', 'solutions': '确保数据来源权威可靠,并对异常值进行清洗和标注。'}, {'step': 2, 'action': '筛选关键变量并构建核心分析框架(如水电站的水位、流量等技术指标)。', 'output': '列出核心变量清单,并绘制相关图表展示其趋势和关系。', 'completion_criteria': '核心变量覆盖全面,图表清晰直观,能够反映主要影响因素。', 'common_issues': '变量选择过于宽泛或遗漏关键指标。', 'solutions': '结合领域知识和数据分析结果,聚焦于高影响力的变量。'}, {'step': 3, 'action': '分层次展示数据(从区域性数据到具体标的物的技术指标)。', 'output': '生成一组按层级排列的数据图表,展示从宏观到微观的变化趋势。', 'completion_criteria': '数据展示逻辑清晰,层次分明,便于读者理解。', 'common_issues': '图表过多导致信息过载,或图表太少缺乏细节支持。', 'solutions': '根据目标受众的需求调整图表数量,保持重点突出。'}, {'step': 4, 'action': '基于历史数据验证模型准确性,并提出预测数据。', 'output': '生成历史数据与预测数据的对比表格或图表,标注误差范围。', 'completion_criteria': '预测数据合理且有据可依,误差范围明确。', 'common_issues': '模型误差过大或预测数据缺乏可信度。', 'solutions': '引入更多验证数据,优化模型参数,提高预测精度。'}, {'step': 5, 'action': '总结核心结论并提出风险提示。', 'output': '撰写一段简短的文字说明,突出核心结论,并列出潜在风险因素。', 'completion_criteria': '核心结论明确且具有指导意义,风险提示全面。', 'common_issues': '核心结论模糊或风险提示过于笼统。', 'solutions': '结合具体案例和数据支撑核心结论,细化风险描述。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:22:11", "modified_time": "2025-08-14 03:22:11", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "e15041c8e84a4bffaa95200661a9c343", "experience_type": "text", "when_to_use": "此规划框架适用于宏观经济分析、区域经济解读、行业深度研究以及投资标的筛选与评估等任务,尤其是需要结合定量数据和定性分析来形成全面结论的场景。", "content": "[{'step': 1, 'action': '明确分析目标与受众需求', 'output': '清晰定义报告的核心目的(如解读深圳市2025年上半年经济运行情况)及受众(如投资者、政策制定者),并列出需要回答的关键问题。', 'criteria_for_completion': '目标明确且具体,关键问题涵盖经济运行的主要维度(如GDP、外贸、工业生产、消费、金融等)。', 'common_issues': '目标过于宽泛或未考虑受众需求。', 'solutions': '通过初步调研和内部讨论确认目标,并以受众视角审视问题清单。'}, {'step': 2, 'action': '收集和整理数据', 'output': '从权威来源(如统计局、金融机构、行业协会)获取相关定量数据,并补充背景信息(如政策变化、市场动态)。', 'criteria_for_completion': '数据覆盖全面,来源可靠,时间跨度合理(如半年度数据对比年度趋势),并按主题分类整理。', 'common_issues': '数据缺失或来源不可靠。', 'solutions': '优先选择官方统计数据,必要时结合第三方数据库,并注明数据局限性。'}, {'step': 3, 'action': '构建章节结构与逻辑框架', 'output': '根据分析目标设计报告结构,包括摘要、核心指标解读、细分领域分析、风险提示等模块,并确定各部分优先级。', 'criteria_for_completion': '结构清晰,内容安排符合逻辑递进关系,重要信息(如核心结论)优先展示。', 'common_issues': '章节间逻辑断裂或重点不突出。', 'solutions': '使用思维导图梳理逻辑,确保每部分内容服务于整体目标。'}, {'step': 4, 'action': '进行定量与定性分析', 'output': '对数据进行统计分析,结合图表可视化呈现趋势;同时加入定性判断(如政策影响、市场情绪)以补充数据不足。', 'criteria_for_completion': '分析方法科学,图表直观易懂,定性与定量信息平衡分布。', 'common_issues': '过度依赖数据或定性分析缺乏依据。', 'solutions': '采用交叉验证法,将多种数据源与专家意见结合,避免单一视角偏差。'}, {'step': 5, 'action': '提出风险因素与不确定性处理', 'output': '在适当位置(如章节末尾或独立部分)讨论潜在风险(如海外市场波动),并提供应对策略或情景假设。', 'criteria_for_completion': '风险因素覆盖全面,表述客观中立,解决方案切实可行。', 'common_issues': '忽略风险或夸大负面因素。', 'solutions': '基于历史案例和当前环境预测可能风险,并用概率语言描述不确定性。'}, {'step': 6, 'action': '撰写总结与建议', 'output': '提炼核心发现,形成简明扼要的结论,并针对不同受众提出具体行动建议(如投资方向、政策调整)。', 'criteria_for_completion': '总结凝练,建议具有针对性和可操作性。', 'common_issues': '结论冗长或建议空洞无物。', 'solutions': '聚焦关键洞察,确保建议与分析结果高度关联。'}, {'step': 7, 'action': '审阅与优化报告', 'output': '检查报告的语言表达、数据准确性和格式规范,并邀请同行评审以完善内容。', 'criteria_for_completion': '报告无重大错误,语言专业流畅,图表美观一致。', 'common_issues': '遗漏低级错误或排版混乱。', 'solutions': '建立标准化校对流程,利用工具辅助检查语法和数据一致性。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:23:17", "modified_time": "2025-08-14 03:23:17", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "2a4cd34ae7b642d794404f0dd5cf52e4", "experience_type": "text", "when_to_use": "此规划框架适用于宏观经济分析、行业景气度评估、PMI相关解读以及政策影响分析等任务。尤其适合需要结合定量数据与定性分析,输出综合结论的金融研究场景。", "content": "[{'step': 1, 'action': '明确研究目标和核心问题', 'output': '定义报告的核心主题和目标受众(如:制造业与非制造业景气度分析),并列出关键问题(如需求、供给、价格、库存等维度的变化及原因)。', 'how_to_judge_completion': '核心问题清晰且覆盖全面,能够引导后续章节结构设计。', 'common_issues_and_solutions': [{'issue': '问题过于宽泛或不聚焦', 'solution': '通过团队讨论或参考历史成功案例,细化研究范围,确保每个问题可量化或可分析。'}]}, {'step': 2, 'action': '收集和整理基础数据', 'output': '从可靠来源获取最新数据(如PMI指数、供需变化、价格指数等),并将其分类为定量数据(如时间序列指标)和定性信息(如政策解读、市场预期)。', 'how_to_judge_completion': '数据完整且经过验证,涵盖所有关键变量,并附有来源标注。', 'common_issues_and_solutions': [{'issue': '数据缺失或质量不足', 'solution': '利用替代数据源或补充说明数据局限性,同时注明不确定性对分析的影响。'}]}, {'step': 3, 'action': '构建逻辑清晰的章节结构', 'output': '根据研究目标设计章节结构,通常包括宏观事件综述、核心观点提炼、分项指标分析(需求、供给、价格、库存等)、风险提示和结论展望。', 'how_to_judge_completion': '章节安排合理,优先展示最重要的信息,确保读者快速抓住重点。', 'common_issues_and_solutions': [{'issue': '章节顺序混乱或内容重复', 'solution': '采用倒金字塔原则,先呈现核心结论,再逐步展开细节;每部分内容应有独立价值且避免冗余。'}]}, {'step': 4, 'action': '逐层递进地展开分析', 'output': '按照需求→供给→价格→库存的逻辑顺序,逐一分析各维度的变化趋势及背后的驱动因素,并辅以图表支持。', 'how_to_judge_completion': '每个部分逻辑连贯,论点有充分的数据支撑,图表与文字内容高度匹配。', 'common_issues_and_solutions': [{'issue': '论证过程薄弱或缺乏深度', 'solution': '增加对比分析(如同比、环比、三年均值)和多维度解释(如政策、季节性因素)。'}]}, {'step': 5, 'action': '平衡定量与定性信息', 'output': '在数据分析基础上加入定性解读(如政策效应、市场情绪),并通过差值计算(如供需差、利润差)突出潜在风险或机会。', 'how_to_judge_completion': '定量数据与定性分析比例均衡,既提供直观数据,又给出深层次洞察。', 'common_issues_and_solutions': [{'issue': '过度依赖定量数据导致分析单一', 'solution': '引入专家访谈或行业动态作为补充材料,增强分析的全面性和说服力。'}]}, {'step': 6, 'action': '识别并揭示风险因素', 'output': '在适当位置(如分析末尾或单独章节)提出可能的风险点(如经济周期下行、上游价格波动),并说明其潜在影响。', 'how_to_judge_completion': '风险描述具体、客观,且与正文分析紧密关联,未遗漏重大隐患。', 'common_issues_and_solutions': [{'issue': '风险提示流于形式或缺乏针对性', 'solution': '结合实际数据和外部环境(如政策、天气、国际局势)进行情景模拟,提升预警价值。'}]}, {'step': 7, 'action': '形成总结性观点与未来展望', 'output': '基于前文分析提炼核心结论,预测短期趋势(如9月出口反弹),并提出应对策略(如政策建议或投资方向)。', 'how_to_judge_completion': '总结简洁明了,展望具有操作性,能为决策者提供明确指导。', 'common_issues_and_solutions': [{'issue': '结论空洞或缺乏前瞻性', 'solution': '结合历史规律和当前形势推导可能性,避免单纯陈述现状。'}]}, {'step': 8, 'action': '优化表达与可视化呈现', 'output': '将复杂数据转化为易于理解的图表(如折线图、柱状图),并在正文中嵌入关键数据点,确保信息传达高效。', 'how_to_judge_completion': '图表设计美观、直观,与正文内容无缝衔接,无歧义。', 'common_issues_and_solutions': [{'issue': '图表过多或信息过载', 'solution': '筛选最具代表性的数据制作图表,其他次要信息可通过附录或脚注呈现。'}]}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:24:45", "modified_time": "2025-08-14 03:24:45", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "da6e18000e6e4bcfb525e0193aaa5486", "experience_type": "text", "when_to_use": "该规划框架适用于宏观经济数据解读与行业分析类任务,例如PMI、GDP、CPI等经济指标的点评报告,以及基于这些指标对特定行业或市场趋势进行的深度研究。此框架也适合用于政策导向型分析(如政府会议及国际经贸谈判的经济影响评估)和风险提示场景。", "content": "[{'step': 1, 'action': '明确核心主题和目标受众', 'output': '确定报告的核心主题(如2025年7月PMI数据点评),并定义目标受众(如机构投资者、企业高管、政策制定者)。', 'how_to_judge_completion': '主题清晰且具有针对性,能够回答受众关心的关键问题(如景气度变化、政策影响、未来趋势)。', 'common_problems_and_solutions': {'problem': '主题过于宽泛或模糊,无法聚焦。', 'solution': '通过团队讨论或客户反馈,明确最需要解决的问题,并围绕这一问题构建主题。'}}, {'step': 2, 'action': '收集和整理基础数据', 'output': '从权威来源(如Wind、官方统计机构)获取定量数据,并结合定性信息(如政策文件、新闻报道)形成全面的数据集。', 'how_to_judge_completion': '数据覆盖全面,包括历史趋势、当前表现和预测展望;数据来源可靠,格式统一便于后续分析。', 'common_problems_and_solutions': {'problem': '数据缺失或不一致。', 'solution': '使用替代数据源填补空白,或标注数据局限性以避免误导。'}}, {'step': 3, 'action': '分解关键变量并建立分析框架', 'output': '将核心主题拆解为多个维度(如制造业、服务业、建筑业),每个维度进一步细分为子指标(如生产指数、新订单指数、价格指数)。', 'how_to_judge_completion': '分析框架逻辑清晰,各维度之间相互独立但又共同支撑整体结论。', 'common_problems_and_solutions': {'problem': '维度划分不合理,导致重复或遗漏。', 'solution': '参考类似成功案例,确保维度设置符合行业惯例和数据分析需求。'}}, {'step': 4, 'action': '逐层递进地展开分析', 'output': '从宏观到微观逐步深入:先概述总体趋势(如制造业PMI回落至49.3%),再分板块解析原因(如淡季效应、外需波动),最后聚焦具体行业或企业规模差异。', 'how_to_judge_completion': '分析层次分明,每一部分都自然衔接,且能有效支持最终结论。', 'common_problems_and_solutions': {'problem': '分析跳跃性强,缺乏连贯性。', 'solution': '采用“总-分-总”结构,用小标题和过渡句增强逻辑流畅性。'}}, {'step': 5, 'action': '平衡定量与定性信息', 'output': '在定量分析中融入定性解释(如政策背景、市场情绪),并通过图表直观展示数据趋势。', 'how_to_judge_completion': '定量与定性内容比例适中,图表设计简洁明了,帮助读者快速理解复杂信息。', 'common_problems_and_solutions': {'problem': '过度依赖数字而忽略背后逻辑,或反之。', 'solution': '根据受众偏好调整内容权重,同时确保所有观点都有数据支撑。'}}, {'step': 6, 'action': '突出核心结论和行动建议', 'output': '提炼出主要发现(如“制造业仍处收缩区间,但预期改善”),并提出具体可行的行动建议(如“关注高技术制造业投资机会”)。', 'how_to_judge_completion': '核心结论简明扼要,建议切实可行,能够直接指导决策。', 'common_problems_and_solutions': {'problem': '结论泛泛而谈,缺乏实际价值。', 'solution': '结合具体案例和数据验证建议的合理性与可行性。'}}, {'step': 7, 'action': '识别并处理不确定性', 'output': '列出潜在风险因素(如“国内政策落地不及预期”),并探讨多种可能性及其应对策略。', 'how_to_judge_completion': '风险提示全面且客观,未夸大或低估其影响;应对方案具备操作性。', 'common_problems_and_solutions': {'problem': '忽视不确定性或表述含糊。', 'solution': '系统梳理可能的风险点,并提供详尽的假设情景分析。'}}, {'step': 8, 'action': '审阅与优化报告呈现', 'output': '检查语言表达是否准确、专业,图表是否规范,排版是否美观,并附上必要的声明(如免责条款)。', 'how_to_judge_completion': '报告整体质量高,无明显错误,阅读体验良好。', 'common_problems_and_solutions': {'problem': '细节疏漏(如拼写错误、图表错位)。', 'solution': '安排多人交叉校对,并预留充足时间进行最终修订。'}}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:26:13", "modified_time": "2025-08-14 03:26:13", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "3f6c64d0940e437a844510ca6119b354", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、大类资产配置分析、宏观经济周期与政策影响评估等任务。尤其适合需要结合定量与定性信息,进行跨周期、多维度分析的金融研究报告制作。", "content": "[{'step': 1, 'action': '明确研究主题和核心目标,确定分析的核心问题和受众需求。', 'output': \"形成清晰的研究主题和目标,例如'从经济四周期视角分析大类资产配置'。\", 'completion_criteria': '研究主题与目标是否能直接指导后续章节结构设计;是否明确了受众(如投资者、政策制定者)的需求。', 'common_issues': '主题过于宽泛或模糊,导致后续分析缺乏聚焦点。', 'solutions': '通过头脑风暴或与团队讨论,提炼出最核心的问题,并用一句话概括研究目标。'}, {'step': 2, 'action': '构建报告的总体结构,按照逻辑顺序组织章节,确保内容层层递进。', 'output': '形成完整的章节框架,例如:摘要、背景介绍、周期定义、政策分析、市场展望等。', 'completion_criteria': '章节安排是否符合逻辑递进关系;是否能够引导读者逐步理解核心结论。', 'common_issues': '章节之间缺乏连贯性,或信息分布不均。', 'solutions': '绘制思维导图,检查各章节之间的逻辑联系,确保每部分内容都服务于整体目标。'}, {'step': 3, 'action': '收集并整理数据,区分定量和定性信息,为分析提供坚实基础。', 'output': '形成包含历史数据、预测模型、政策文件、市场动态等的综合数据库。', 'completion_criteria': '数据是否全面且准确;是否能够支持后续的论证和结论。', 'common_issues': '数据来源单一或不够权威,影响分析可信度。', 'solutions': '优先选择公开可验证的数据源,如官方统计机构、权威第三方数据库,并标注数据来源。'}, {'step': 4, 'action': '运用周期理论和其他分析工具,对数据进行深度解读,建立核心观点。', 'output': '形成基于周期理论的分析框架,例如基钦周期、朱格拉周期等的叠加作用解释市场变化。', 'completion_criteria': '核心观点是否清晰且有数据支撑;是否能够回答研究主题中的关键问题。', 'common_issues': '分析过于表面化,未能深入挖掘数据背后的逻辑。', 'solutions': '采用对比分析法,将当前周期特征与历史周期进行对比,找出相似性和差异点。'}, {'step': 5, 'action': '提出风险因素和不确定性,并在适当位置融入分析中,避免突兀。', 'output': '形成关于风险因素的详细说明,例如政策执行力度、国际市场波动等。', 'completion_criteria': '风险因素是否全面且合理;是否在不影响整体逻辑流畅性的前提下被提及。', 'common_issues': '风险因素被孤立处理,未与核心分析有机结合。', 'solutions': '在每个主要章节末尾加入简短的风险提示,确保风险分析贯穿全文。'}, {'step': 6, 'action': '总结核心结论,并给出具体的投资建议或政策启示。', 'output': \"形成简洁明了的核心结论和行动指南,例如'大宗商品价格有望在年底前迎来主升浪'。\", 'completion_criteria': '核心结论是否突出且具有可操作性;是否能够满足受众的实际需求。', 'common_issues': '结论过于笼统,缺乏具体指导意义。', 'solutions': '结合实际案例或数据,将抽象结论转化为具体的行动建议。'}, {'step': 7, 'action': '优化信息展示方式,平衡定量与定性信息,增强报告的可读性。', 'output': '形成图文并茂的报告,例如图表展示周期波动、文字阐述政策影响。', 'completion_criteria': '报告是否易于阅读和理解;是否能够吸引受众注意力。', 'common_issues': '图表过多或过少,导致信息呈现失衡。', 'solutions': '根据内容重点分配图表比例,确保每张图表都有明确的解读说明。'}, {'step': 8, 'action': '审阅和校对报告,确保语言表达准确、格式规范。', 'output': '形成最终版本的报告,无语法错误、排版问题或数据遗漏。', 'completion_criteria': '报告是否达到专业标准;是否能够直接交付给客户或发布。', 'commonissues': '语言表达不够精炼,或存在低级错误。', 'solutions': '邀请同行或编辑进行交叉审阅,重点关注语言流畅性和数据准确性。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:27:28", "modified_time": "2025-08-14 03:27:28", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "79de1a59cfb34066b0b232c5821f2363", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、宏观经济形势分析、政策建议报告以及房地产等支柱产业的专项研究。它特别适合需要结合定量与定性分析,同时提出系统性解决方案的任务场景。", "content": "[{'step': 1, 'action': '明确研究目标和范围,确定核心问题及输出需求(如:研判当前房地产形势并提出政策建议)。', 'output': '清晰的研究目标说明,包括研究主题、关键问题和预期成果。', 'criteria_for_success': '研究目标是否聚焦且可操作;是否明确了受众群体及其信息需求。', 'common_issues': '目标过于宽泛或模糊,导致后续分析难以聚焦。', 'solutions': '通过头脑风暴或与利益相关者沟通,细化研究目标,并确保其与实际需求一致。'}, {'step': 2, 'action': '收集和整理基础数据,构建定量分析框架,包括历史趋势、现状指标和预测模型。', 'output': '包含关键数据的表格、图表和初步分析结论(如房价走势、销售面积变化、投资增速等)。', 'criteria_for_success': '数据来源可靠且覆盖全面;分析框架逻辑清晰,能有效支持后续论证。', 'common_issues': '数据不完整或过时,导致分析结果失真。', 'solutions': '优先选择权威机构发布的最新数据,并在必要时补充专家访谈或市场调研数据。'}, {'step': 3, 'action': '进行定性分析,识别问题根源及潜在风险,结合定量数据形成综合判断。', 'output': '对核心问题的深入剖析,包括因果关系推导、风险因素识别和情景假设(如房价下跌的原因及可能后果)。', 'criteria_for_success': '定性分析是否基于充分的事实依据,且逻辑链条完整;风险提示是否具体且具有前瞻性。', 'common_issues': '定性分析缺乏数据支撑,或过于主观。', 'solutions': '将定性分析与定量数据紧密结合,避免空泛论述;引入多方观点以增强客观性。'}, {'step': 4, 'action': '设计章节结构,按“背景—问题—解决方案”的顺序组织内容,确保逻辑递进。', 'output': '完整的报告目录及各章节的核心内容提纲(如本文分为四部分:形势研判、问题分析、底部信号、政策建议)。', 'criteria_for_success': '章节安排是否符合逻辑顺序;信息展示是否突出重点。', 'common_issues': '章节结构混乱,信息堆砌而无层次感。', 'solutions': '遵循“总分总”原则,先概述全局,再逐层展开细节,最后总结归纳。'}, {'step': 5, 'action': '撰写核心章节,使用“数据+案例+理论”三重论证方法强化观点表达。', 'output': '详细阐述每个核心章节的内容,包括数据支持、案例佐证和理论引用(如房价止跌回稳的内在支撑分析)。', 'criteria_for_success': '论证是否严密且多样化;信息分布是否平衡(定量与定性、历史与预测)。', 'common_issues': '论证单一化,缺乏说服力。', 'solutions': '结合多种论证手段,确保每一点都有数据、案例或理论作为支撑。'}, {'step': 6, 'action': '提炼政策建议,确保方案具备可行性、针对性和系统性。', 'output': '针对核心问题提出的政策建议清单,涵盖短期应对措施和长期改革方向(如设立房地产稳定基金、优化限购政策等)。', 'criteria_for_success': '建议是否具体且可执行;是否兼顾短期与长期目标。', 'common_issues': '建议空洞或脱离实际。', 'solutions': '结合实际情况制定具体实施路径,并参考成功案例验证其可行性。'}, {'step': 7, 'action': '审阅和优化报告,检查语言表达、数据准确性和格式规范性。', 'output': '经过校对后的最终版本报告,确保内容无误且易于阅读。', 'criteria_for_success': '报告是否简洁明了;是否存在错误或遗漏。', 'common_issues': '语言冗长或专业术语过多,影响理解。', 'solutions': '简化语言表达,增加图表辅助说明;邀请同行评审以发现潜在问题。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:28:48", "modified_time": "2025-08-14 03:28:48", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "76e2cc92b938463abc354088290e6384", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、宏观经济分析、投资标的评估以及风险评估报告等金融分析任务。尤其适合需要结合定量和定性数据,对复杂经济现象进行多层次论证的场景。", "content": "[{'step': 1, 'action': '明确核心研究问题与目标', 'output': '清晰的研究主题和目标,例如本案例中聚焦于‘反内卷’政策对制造业和非制造业价格分化的具体影响。', 'criteria_for_success': '研究问题是否具体且可操作,目标是否明确,并能通过后续分析回答。', 'common_issues': '研究问题过于宽泛或模糊,导致分析缺乏焦点。', 'solutions': '在开始阶段与团队或客户充分沟通,确保研究问题具有实际意义并符合需求。'}, {'step': 2, 'action': '构建章节结构,组织信息优先级', 'output': '逻辑清晰的章节结构,如本案例分为‘制造业PMI连涨的两重因素’、‘制造业价格端亮点与分化’、‘非制造业内部价格背离’三大模块。', 'criteria_for_success': '章节安排是否遵循从宏观到微观、从整体到局部的逻辑顺序,是否便于读者理解。', 'common_issues': '章节内容重复或信息分布不均,导致报告冗长或重点不突出。', 'solutions': '提前绘制思维导图,明确各章节的核心内容及彼此关系,避免重复和遗漏。'}, {'step': 3, 'action': '收集和整理数据,平衡定量与定性信息', 'output': '全面的数据支持,包括定量指标(如PMI指数、购进价格指数)和定性分析(如政策解读、行业动态),如本案例中的PMI数据与‘反内卷’政策解读相结合。', 'criteria_for_success': '数据来源是否权威可靠,定量与定性信息是否有机结合,是否能有效支撑论点。', 'common_issues': '数据不足或来源不可靠,导致分析缺乏说服力。', 'solutions': '优先使用官方统计数据和权威第三方数据,同时结合专家访谈或行业调研补充定性信息。'}, {'step': 4, 'action': '建立层层递进的论证路径', 'output': '逐步推导出核心结论,如本案例中首先分析极端天气和订单回流对PMI的影响,再深入探讨价格端的变化及其背后的‘反内卷’逻辑。', 'criteria_for_success': '论证是否逻辑严密,观点是否能够自然衔接,是否能引导读者逐步接受核心结论。', 'common_issues': '论证跳跃性强,缺乏过渡,导致读者难以跟随思路。', 'solutions': '在每一步推导后加入小结,帮助读者理解当前结论与下一步的关系。'}, {'step': 5, 'action': '识别并提出关键风险因素', 'output': '明确的风险提示,如本案例中提到‘消费者信心修复偏慢’、‘政策落地不及预期’等潜在风险。', 'criteria_for_success': '风险因素是否全面且切中要害,是否能在不影响整体逻辑的情况下被合理引入。', 'common_issues': '风险因素被忽略或过于笼统,无法为决策提供参考。', 'solutions': '在分析过程中预留专门环节讨论不确定性,并结合历史案例或情景模拟进行说明。'}, {'step': 6, 'action': '可视化展示关键数据与趋势', 'output': '图表与文字相结合的呈现方式,如本案例中通过折线图展示PMI变化趋势、柱状图对比价格端指标。', 'criteria_for_success': '图表是否直观易懂,是否能有效突出核心信息,是否与文字分析形成互补。', 'common_issues': '图表过多或过少,导致信息过载或表达不足。', 'solutions': '根据内容重要性选择关键图表,确保每张图表都有明确的解读说明。'}, {'step': 7, 'action': '总结核心结论并展望未来', 'output': '简洁明了的核心结论,如本案例中指出‘反内卷’政策对价格端的阶梯式传导效应,以及对基建景气度的乐观展望。', 'criteria_for_success': '总结是否凝练有力,是否能有效回应研究问题,是否对未来趋势给出合理预测。', 'common_issues': '总结冗长或偏离主题,未能提炼出关键洞察。', 'solutions': '在撰写总结时回顾研究目标,确保每个结论都能直接回答最初的问题。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:30:28", "modified_time": "2025-08-14 03:30:28", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "0662f87831404beab37c06dabd96495b", "experience_type": "text", "when_to_use": "此规划框架适用于宏观经济专题分析、行业深度研究或投资策略报告等需要结合定量与定性数据,进行多层次论证并得出核心结论的金融分析任务。", "content": "[{'step': 1, 'action': '明确分析目标和核心问题', 'output': '定义报告的核心主题(如:7月出口韧性、供需动态变化等)及关键问题(如:哪些因素支撑出口?供需如何演变?)。', 'how_to_judge_completion': '通过清晰的主题声明和问题清单判断是否完成。例如,‘7月出口或有韧性’这一主题明确,并列出供需、价格、地产、流动性等多个维度。', 'common_issues': '主题过于宽泛或模糊,导致后续分析缺乏聚焦。', 'solutions': '在初期阶段与团队或客户确认核心目标,确保问题具体化。'}, {'step': 2, 'action': '构建章节结构并分配信息优先级', 'output': '根据逻辑顺序组织章节,通常从宏观到微观,从供需到价格再到特定领域(如地产、出口)。优先展示最能支持核心结论的信息。', 'how_to_judge_completion': '章节标题直接对应核心问题,信息优先级明确(如:先讨论供需再谈价格),且图表目录清晰反映内容分布。', 'common_issues': '章节之间逻辑不连贯,信息堆砌而无层次感。', 'solutions': '使用‘总-分-总’结构,先概述整体趋势,再细分领域,最后总结回扣主题。'}, {'step': 3, 'action': '收集并整理定量与定性数据', 'output': '针对每个章节,系统性地搜集历史数据、当前指标及预测模型结果,同时结合政策、市场情绪等定性因素。', 'how_to_judge_completion': '每部分均包含充足的数据支持,且数据来源可靠(如Wind、开源证券研究所),并配有可视化图表。', 'common_issues': '数据覆盖不足或仅依赖单一来源,导致论证不够全面。', 'solutions': '建立标准化数据采集流程,确保多维度验证;定期更新数据库以提高时效性。'}, {'step': 4, 'action': '设计论证路径并建立观点递进关系', 'output': '通过层层递进的方式展开论证,例如从供需弱化→商品价格波动→地产成交低迷→出口韧性的逻辑链条,逐步推导最终结论。', 'how_to_judge_completion': '各章节间的过渡自然,观点环环相扣,能够引导读者理解核心结论的形成过程。', 'common_issues': '论证跳跃性大,缺乏连贯性,使读者难以跟随思路。', 'solutions': '为每个章节设定小结句,帮助承上启下,增强逻辑流畅度。'}, {'step': 5, 'action': '平衡不同类型信息的分布', 'output': '将定量数据(如开工率、价格指数)与定性分析(如政策解读、市场预期)合理搭配,避免过度偏向某一方面。', 'how_to_judge_completion': '每个章节既有表格、图表等量化证据,又有文字描述阐释背后原因及影响。', 'common_issues': '过分倚重某一类信息,造成分析失衡。', 'solutions': '采用‘1+1模式’,即每段文字至少配一个相关图表,确保信息互补。'}, {'step': 6, 'action': '适时提出风险提示并处理不确定性', 'output': '在接近尾声时,集中说明潜在风险(如大宗商品价格波动超预期、政策力度超预期),并提供多种可能性情景。', 'how_to_judge_completion': '风险提示独立成章,涵盖主要变量的波动范围,并给出应对建议。', 'common_issues': '忽略风险提示或将其置于不起眼位置,削弱报告可信度。', 'solutions': '将风险提示作为固定模块纳入报告模板,确保其重要性得到体现。'}, {'step': 7, 'action': '提炼核心结论并突出展示', 'output': '在开头摘要部分简明扼要地呈现核心结论(如:7月出口或仍有韧性),并在正文中多次呼应。', 'how_to_judge_completion': '摘要凝练且直击要点,正文反复提及核心结论,强化记忆点。', 'common_issues': '核心结论埋没于细节中,未能快速抓住读者注意力。', 'solutions': '撰写摘要时采用‘金字塔原理’,先亮出结论,再逐步展开支持论据。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:31:57", "modified_time": "2025-08-14 03:31:57", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "9c544d334adf440a8e5a1133538dca97", "experience_type": "text", "when_to_use": "适用于宏观经济深度研究报告、行业趋势分析、政策影响评估等需要结合定量和定性信息进行综合研判的场景,尤其适合涉及复杂因素(如国内外经济联动、产业链传导机制、政策干预效果)的研究任务。", "content": "[{'step': 1, 'action': '明确研究主题和核心问题', 'output': '清晰界定研究范围和核心问题,例如本报告中聚焦于‘低通胀’的原因及其对经济的影响。', 'completion_criteria': '能够用一句话概括研究目标,并列出至少3个关键子问题。', 'common_issues': '主题过于宽泛或模糊。', 'solutions': '通过初步文献调研和数据浏览,缩小研究范围,确保主题具体且可操作。'}, {'step': 2, 'action': '构建章节结构并安排逻辑顺序', 'output': '设计包含背景、成因、影响和风险提示的章节框架,确保逻辑递进,例如本报告先分析‘低通胀’的表现及成因,再探讨其经济影响。', 'completion_criteria': '每个章节有明确的任务分工,且整体结构符合‘现象-原因-结果-对策’的经典分析路径。', 'common_issues': '章节间逻辑不连贯或内容重复。', 'solutions': '绘制章节间的逻辑图,确保每部分内容服务于整体目标,避免冗余。'}, {'step': 3, 'action': '收集和整理数据与资料', 'output': '搜集定量数据(如CPI、PPI、社零增速)和定性信息(如政策文件、专家观点),并按主题分类整理。', 'completion_criteria': '形成完整的数据表和文献清单,数据覆盖时间跨度足够长以支持趋势分析。', 'common_issues': '数据来源单一或缺乏权威性。', 'solutions': '优先选择官方统计机构、权威数据库(如Wind)和可信第三方报告作为数据来源。'}, {'step': 4, 'action': '数据分析与验证假设', 'output': '利用统计方法(如相关性分析、回归分析)验证假设,例如本报告中计算生产资料与生活资料价格的相关性。', 'completion_criteria': '得出明确的数据结论,并能用图表直观展示分析结果。', 'common_issues': '分析方法不当或过度依赖单一指标。', 'solutions': '采用多种分析方法交叉验证,并结合定性信息解释定量结果。'}, {'step': 5, 'action': '撰写正文并突出核心结论', 'output': '按照章节结构撰写报告,优先展示核心结论,并辅以数据支持,例如本报告开篇即点明‘低通胀’的核心成因。', 'completion_criteria': '核心结论在前言或摘要部分明确呈现,正文内容围绕结论展开。', 'common_issues': '信息堆砌,缺乏重点。', 'solutions': '使用金字塔原理组织内容,确保每段文字都有明确的目的性和逻辑性。'}, {'step': 6, 'action': '平衡定量与定性信息', 'output': '合理分配定量数据和定性分析的比例,例如本报告中既有详实的统计数据,也有对政策影响的解读。', 'completion_criteria': '定量数据占比不低于40%,定性分析提供必要的背景和解释。', 'common_issues': '定量与定性信息失衡,导致论证不够全面。', 'solutions': '根据研究目标调整两类信息的比例,确保两者相辅相成。'}, {'step': 7, 'action': '提出风险提示与不确定性分析', 'output': '在报告末尾专门设置‘风险提示’部分,列举可能的风险因素及其潜在影响,例如本报告提到海外通胀韧性、地缘政治局势等。', 'completion_criteria': '风险提示涵盖主要外部变量,并提供应对建议或情景分析。', 'common_issues': '风险提示过于笼统或缺乏针对性。', 'solutions': '结合研究主题,识别关键风险点,并引用权威预测或案例支持分析。'}, {'step': 8, 'action': '图表制作与信息可视化', 'output': '将复杂数据转化为清晰易懂的图表,例如本报告中使用折线图展示CPI与PPI的变化趋势。', 'completion_criteria': '每张图表有明确标题和注释,且与正文内容紧密相关。', 'common_issues': '图表过多或信息杂乱。', 'solutions': '遵循‘少而精’原则,确保每张图表都能传递一个核心信息点。'}, {'step': 9, 'action': '审阅与优化语言表达', 'output': '检查报告的语言是否简洁准确,术语是否规范,例如本报告中对专业术语(如实际利率、名义利率)的定义清晰。', 'completion_criteria': '无语法错误,术语使用一致,语言风格正式且易于理解。', 'common_issues': '表述冗长或术语滥用。', 'solutions': '邀请同行或编辑进行语言润色,确保报告的专业性和可读性。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:34:14", "modified_time": "2025-08-14 03:34:14", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "5e7461f008af46228b4d4091df959c06", "experience_type": "text", "when_to_use": "此规划框架适用于宏观经济分析、行业深度研究、投资标的分析以及风险评估报告等任务,尤其在需要综合定量与定性信息、历史与预测数据,并提出政策影响和市场趋势判断的场景中具有高度适用性。", "content": "[{'step': 1, 'action': '明确分析目标和核心问题', 'output': '确定本次分析的核心主题(如宏观经济运行情况),并列出需要解答的关键问题(如经济增长动力、政策效果、未来风险点)。', 'completion_criteria': '能够清晰界定分析范围和目标,确保所有后续章节和内容都围绕这些目标展开。', 'common_issues': '目标过于宽泛或模糊,导致分析缺乏聚焦点。', 'solutions': '通过头脑风暴或与利益相关方沟通,提炼出最具价值的核心问题。'}, {'step': 2, 'action': '收集和整理基础数据', 'output': '构建一个包含关键经济指标(如GDP、工业增加值、固定资产投资等)的表格,并标注数据来源和时间范围。', 'completion_criteria': '数据覆盖全面、来源权威且格式统一,便于后续分析和可视化。', 'common_issues': '数据缺失或质量不高,导致分析结论不可靠。', 'solutions': '优先选择官方统计机构发布数据,并对异常值进行交叉验证。'}, {'step': 3, 'action': '构建章节结构并分配信息优先级', 'output': '设计报告的章节框架,包括摘要、宏观经济与行业运行情况、价格与就业分析、财政与信用环境、政策环境等部分,并明确每部分的重点。', 'completion_criteria': '章节安排逻辑清晰,信息展示顺序符合“从整体到局部、从宏观到微观”的原则,核心结论在摘要中突出呈现。', 'common_issues': '章节间内容重复或逻辑混乱,导致读者难以抓住重点。', 'solutions': '使用思维导图工具梳理章节间的逻辑关系,确保每部分内容独立且互为补充。'}, {'step': 4, 'action': '进行定量与定性分析', 'output': '对数据进行趋势分析(如同比增速变化)、结构性分析(如出口产品占比调整)以及因果分析(如政策对消费的影响),并结合图表展示结果。', 'completion_criteria': '分析过程严谨,结论基于数据支持,且能揭示潜在的风险和机会。', 'common_issues': '分析过于依赖单一维度,忽略多因素交互作用。', 'solutions': '采用SWOT分析法或多变量回归模型,综合考虑多种影响因素。'}, {'step': 5, 'action': '处理不确定性和多种可能性', 'output': '识别主要风险因素(如关税冲击、内需疲软),并提出不同情景假设下的应对策略(如政策加码、企业转型)。', 'completion_criteria': '风险因素表述具体且时机恰当,情景假设合理并附有可行建议。', 'common_issues': '对不确定性描述笼统,缺乏实际操作指导。', 'solutions': '引入专家访谈或模拟推演,增强分析的前瞻性和实用性。'}, {'step': 6, 'action': '撰写摘要和总结核心观点', 'output': '提炼报告中的关键发现(如经济增长动力放缓、政策边际效应递减)和未来展望(如三、四季度增速可能回落),形成简洁有力的摘要。', 'completion_criteria': '摘要内容精炼,涵盖核心结论且语言通俗易懂,适合不同背景的读者快速理解。', 'common_issues': '摘要冗长或偏离主题,未能有效传递核心信息。', 'solutions': '采用金字塔原理,先陈述结论再逐步展开支撑论据。'}, {'step': 7, 'action': '制作可视化图表', 'output': '根据分析内容生成折线图、柱状图和饼图等可视化图表,标注关键趋势和数据点。', 'completion_criteria': '图表清晰直观,标题和注释准确传达信息,避免过度复杂化。', 'common_issues': '图表设计不当,导致信息传递不准确或难以解读。', 'solutions': '遵循“少即是多”原则,去除冗余元素,突出核心数据。'}, {'step': 8, 'action': '审阅和优化报告', 'output': '检查报告的语言流畅性、数据一致性以及逻辑连贯性,确保无明显错误或遗漏。', 'completion_criteria': '报告经过至少两轮校对,内容准确无误,表达专业规范。', 'common_issues': '因时间紧迫导致质量下降,出现低级错误。', 'solutions': '预留充足时间进行审阅,必要时邀请同行评审。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:35:33", "modified_time": "2025-08-14 03:35:33", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "de680a9f2c3844a2b9468ba348845e50", "experience_type": "text", "when_to_use": "此规划框架适用于宏观策略分析、大类资产配置建议、大宗商品投资机会评估等金融研究任务。尤其适合需要结合宏观经济数据、政策导向、市场情绪和行业基本面的复杂分析场景。", "content": "[{'step': 1, 'action': '明确分析目标与核心问题', 'output': '清晰定义本次分析的目标,例如:地缘局势对市场的影响、政策变化对资产价格的作用等;列出关键问题清单(如:地缘冲突是否会升级?中美经贸谈判结果如何影响外需?)。', 'completion_criteria': '能够用一句话概括分析的核心目标,并形成具体的研究问题列表。', 'common_issues': '目标过于宽泛或模糊,导致后续分析难以聚焦。', 'solutions': '通过团队讨论或与客户沟通,确保目标明确且具有可操作性。'}, {'step': 2, 'action': '收集并整理基础数据与信息', 'output': '构建宏观经济指标跟踪表,涵盖GDP、PMI、CPI、PPI、进出口、社会融资规模等核心数据;同时搜集相关政策声明、市场新闻和行业动态。', 'completion_criteria': '数据覆盖全面,时间跨度合理(如过去一年至未来一年预测),并以表格形式呈现关键数据趋势。', 'common_issues': '数据来源不一致或更新滞后,影响分析准确性。', 'solutions': '优先选择权威数据库(如Wind、Bloomberg),并设定固定时间节点检查最新数据。'}, {'step': 3, 'action': '分解主要矛盾与驱动因素', 'output': '识别当前市场的核心矛盾(如地缘局势、贸易谈判、国内政策调整)及其对资产价格的主要驱动逻辑;将矛盾按短期、中期、长期分类。', 'completion_criteria': '每个核心矛盾均有明确的时间维度划分,以及对应的资产类别影响路径说明。', 'common_issues': '忽略次要矛盾可能引发的风险扰动,导致结论片面化。', 'solutions': '在主要矛盾之外保留次要矛盾的简要分析,作为风险提示部分补充。'}, {'step': 4, 'action': '搭建章节结构与内容布局', 'output': '设计报告框架,包括前期市场回顾、当前宏观环境分析、资产表现特征总结、未来展望及具体品种观点;确保各部分内容逻辑连贯,重点突出。', 'completion_criteria': '每章内容有明确的主题和信息分布,无重复冗余,且核心结论易于提取。', 'common_issues': '章节安排缺乏层次感,重要信息被淹没。', 'solutions': '采用倒金字塔结构,先呈现核心结论,再逐步展开支撑论据。'}, {'step': 5, 'action': '定量与定性分析相结合', 'output': '利用历史数据绘制趋势图(如铜金比、油金比),并通过统计方法验证假设;结合政策解读与市场情绪分析解释数据背后的逻辑。', 'completion_criteria': '图表与文字分析相辅相成,定量结论有定性支持,反之亦然。', 'common_issues': '过度依赖单一类型的分析,导致论证不够充分。', 'solutions': '强制要求每项结论至少包含一个定量证据和一个定性推导过程。'}, {'step': 6, 'action': '处理不确定性与多种可能性', 'output': '针对不确定事件(如地缘冲突升级概率、关税谈判结果)设置情景假设(乐观/中性/悲观),并给出不同情景下的市场反应预判。', 'completion_criteria': '每种情景假设均附带发生概率估算和对应的投资策略建议。', 'common_issues': '忽略极端情景的可能性,低估潜在风险。', 'solutions': '引入压力测试方法,模拟极端条件下的市场表现。'}, {'step': 7, 'action': '提炼核心结论与行动建议', 'output': '总结出未来1-2个月的关键投资主题(如“反内卷”政策落地、美元弱势震荡),并为不同资产类别提供具体的配置建议(如超配科技成长板块、关注低位多玻璃空纯碱策略)。', 'completion_criteria': '核心结论简洁明了,行动建议具体可行,便于投资者执行。', 'common_issues': '结论过于抽象,缺乏实际指导意义。', 'solutions': '增加案例或模拟交易示例,帮助读者理解策略实施方式。'}, {'step': 8, 'action': '审阅与优化输出格式', 'output': '检查语言表达是否准确流畅,图表是否清晰美观,整体排版是否专业规范;添加免责声明和分析师信息。', 'completion_criteria': '最终文档符合公司标准模板,无语法错误或排版混乱现象。', 'common_issues': '忽视细节问题,降低报告的专业形象。', 'solutions': '设立独立校对环节,邀请非作者人员进行交叉审核。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:36:44", "modified_time": "2025-08-14 03:36:44", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "672b519550694b809eaff4b76b354210", "experience_type": "text", "when_to_use": "此规划框架适用于政策解读与宏观经济分析类任务,尤其是针对中央政治局会议、经济工作会议等重要政策事件的点评和展望。同时,也可用于行业深度研究、投资标的分析以及风险评估报告中涉及宏观环境部分的工作。", "content": "[{'step': 1, 'action': '明确事件背景与核心议题', 'output': '撰写事件描述段落,包括会议时间、参与方、主要内容概述。', 'evaluation_criteria': '是否清晰界定事件背景及核心议题;是否为后续分析奠定基础。', 'common_issues': '遗漏关键信息或对背景理解不足。', 'solutions': '通过多渠道验证事件细节,确保全面掌握公开资料。'}, {'step': 2, 'action': '梳理数据支持的核心结论', 'output': '整理并展示定量数据(如GDP增速、出口贡献等)以支撑核心观点,并结合定性分析说明政策满意度及目标达成可能性。', 'evaluation_criteria': '数据是否准确且具有代表性;定量与定性分析是否平衡分布。', 'common_issues': '数据选择不够严谨或缺乏解释。', 'solutions': '引用权威来源数据,辅以图表增强可视化效果。'}, {'step': 3, 'action': '构建逻辑递进的论证路径', 'output': '分层次阐述政策方向及其背后的逻辑信号,如灵活性和预见性的具体含义及应用场景。', 'evaluation_criteria': '论证是否层层递进,逻辑链条是否完整。', 'common_issues': '逻辑跳跃或论点分散。', 'solutions': '采用总分结构,先提出总体方向再细化到具体措施。'}, {'step': 4, 'action': '识别并讨论潜在风险因素', 'output': '在合适时机提出风险提示,例如中美关税谈判未落地可能带来的出口不确定性。', 'evaluation_criteria': '风险提示是否及时且针对性强;是否提供应对方案。', 'common_issues': '忽视风险或处理过于笼统。', 'solutions': '基于历史案例和当前形势预判风险,给出具体情境下的应对建议。'}, {'step': 5, 'action': '制定具体工作抓手与行动指南', 'output': '围绕促消费、扩投资、防风险等方面列出具体政策措施及其实现路径。', 'evaluation_criteria': '是否覆盖主要领域;每项抓手是否有可操作性。', 'common_issues': '内容空泛,缺乏落地指导。', 'solutions': '结合实际需求设计政策工具箱,注重跨部门协调。'}, {'step': 6, 'action': '总结全文并突出核心结论', 'output': '重申短期稳增长与长期结构转型并重的主题,强调五位一体政策安排的重要性。', 'evaluation_criteria': '核心结论是否鲜明突出;总结是否呼应开头。', 'common_issues': '结尾冗长或偏离主题。', 'solutions': '精炼语言,用一句话概括核心发现。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:38:11", "modified_time": "2025-08-14 03:38:11", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "30bfa6ee028e42bb88c80988ffd69a5a", "experience_type": "text", "when_to_use": "此规划框架适用于宏观经济数据分析、行业深度研究、投资决策支持报告以及风险评估等金融分析任务。尤其在需要结合定量与定性数据,进行趋势预测和政策影响评估的场景下具有高度适用性。", "content": "[{'step': 1, 'action': '明确分析目标和核心问题', 'output': '清晰界定分析的核心目标(如非农就业数据对美联储政策的影响),并列出关键问题清单(如就业总量变化、薪资增速趋势及其经济含义)。', 'how_to_judge_completion': '是否能用一句话概括分析的核心目标,并确保所有后续章节围绕此目标展开。', 'common_issues_and_solutions': '常见问题:目标过于宽泛或模糊。应对方法:通过与利益相关方沟通,聚焦于具体问题,例如‘非农数据如何影响货币政策’。'}, {'step': 2, 'action': '收集并整理基础数据', 'output': '从可靠来源(如美国劳工部、iFinD 数据库)获取定量数据(如新增就业人数、失业率)和定性信息(如市场情绪、政策预期),并分类整理为结构化表格或图表。', 'how_to_judge_completion': '数据覆盖全面,且经过交叉验证以确保准确性;能够直观展示数据的时间序列或结构性特征。', 'common_issues_and_solutions': '常见问题:数据不完整或来源不可靠。应对方法:优先选择权威机构发布的数据,并注明数据来源及潜在局限性。'}, {'step': 3, 'action': '分解核心指标,构建逻辑框架', 'output': '将核心指标(如非农就业、薪资增速)分解为多个维度(总量、行业结构、人口特征等),并设计章节结构以反映这些维度的递进关系。', 'how_to_judge_completion': '每个章节均围绕一个明确的子主题展开,且章节间逻辑连贯,逐步深化分析。', 'common_issues_and_solutions': '常见问题:章节安排杂乱无章。应对方法:先绘制思维导图,确保各部分之间的逻辑关系清晰后再撰写正文。'}, {'step': 4, 'action': '量化分析与定性解读相结合', 'output': '对定量数据进行趋势分析(如同比、环比变化),并通过定性解读揭示其背后的经济意义(如劳动力市场疲软可能预示经济衰退)。', 'how_to_judge_completion': '每组数据分析均附有清晰的结论,且结论与数据紧密关联;避免单纯罗列数字而缺乏解释。', 'common_issues_and_solutions': '常见问题:过度依赖数据而忽略背景信息。应对方法:引入专家观点或历史案例作为补充,增强分析的说服力。'}, {'step': 5, 'action': '提出风险因素与不确定性', 'output': '识别分析中的主要风险点(如上游价格快速上涨、通胀不及预期)和不确定性(如未来政策路径的多种可能性),并在适当位置予以提示。', 'how_to_judge_completion': '风险提示既不过于笼统也不过于分散,而是集中于最可能影响核心结论的关键变量上。', 'common_issues_and_solutions': '常见问题:风险讨论被边缘化或忽视。应对方法:设置专门章节讨论风险,并将其与核心结论形成对照。'}, {'step': 6, 'action': '总结核心结论并给出建议', 'output': '提炼出最重要的发现(如‘就业降温叠加薪资韧性暗示经济动能减弱’),并提供基于分析的具体行动建议(如押注降息的概率提升)。', 'how_to_judge_completion': '核心结论简洁明了,易于理解;建议具有操作性,能够直接指导投资决策或其他实际应用。', 'common_issues_and_solutions': '常见问题:结论冗长或含糊不清。应对方法:采用‘三句话法则’——用不超过三句话概述核心结论,同时辅以图表支持。'}, {'step': 7, 'action': '可视化呈现与报告优化', 'output': '利用图表(如柱状图、折线图)和文字说明相结合的方式,突出关键数据和趋势;调整排版以提高可读性(如标题加粗、段落分隔)。', 'how_to_judge_completion': '读者无需仔细阅读正文即可快速抓住重点信息;图表设计美观且信息量充足。', 'common_issues_and_solutions': '常见问题:图表过多导致信息过载。应对方法:筛选最具代表性的图表,删除冗余内容,保持页面整洁。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:39:20", "modified_time": "2025-08-14 03:39:20", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "be3ae9fb058645d68b18f42d04f55e83", "experience_type": "text", "when_to_use": "此规划框架适用于需要对宏观经济政策(如央行利率决策)进行深度分析的任务,尤其是涉及政策解读、市场预期管理以及不确定性评估的场景。例如:货币政策点评、宏观经济展望报告、投资策略制定等。", "content": "[{'step': 1, 'action': '明确分析目标与核心问题', 'output': '确定本次分析的核心问题和目标,例如:美联储是否降息、政策背后的逻辑及市场影响。', 'completion_criteria': '核心问题清晰且具有可操作性,能够指导后续分析。', 'common_issues': '问题过于宽泛或模糊,可能导致分析失去焦点。', 'solutions': '在任务初期与利益相关方确认分析目标,确保问题具体化。'}, {'step': 2, 'action': '收集与整理关键数据和信息', 'output': '整理定量数据(如利率水平、通胀率、就业数据)和定性信息(如政策声明、官员讲话),并标注信息来源和可靠性。', 'completion_criteria': '数据覆盖全面,包含历史趋势、当前状态和未来预测;信息来源权威且标注清晰。', 'common_issues': '数据不完整或过时,导致分析缺乏说服力。', 'solutions': '建立数据更新机制,优先使用权威机构(如美联储、IMF)发布的最新数据。'}, {'step': 3, 'action': '构建章节结构并分配信息优先级', 'output': '设计报告结构,通常包括背景介绍、政策解读、市场影响分析、风险因素讨论和结论建议,并明确信息展示的优先级。', 'completion_criteria': '章节结构逻辑清晰,信息优先级合理,核心结论突出。', 'common_issues': '章节安排混乱,导致读者难以抓住重点。', 'solutions': '采用“倒金字塔”原则,将最重要信息放在开头,次要信息逐步展开。'}, {'step': 4, 'action': '逐层递进论证核心观点', 'output': '通过定量分析(如经济数据对比)和定性分析(如政策意图解读)结合,层层递进建立观点,例如从政策声明到市场反应再到长期影响。', 'completion_criteria': '论证逻辑严密,每一层观点都有数据或事实支持。', 'common_issues': '论证跳跃或缺乏数据支持,削弱可信度。', 'solutions': '每一步推理都需明确引用数据或事实,避免主观推测。'}, {'step': 5, 'action': '识别与评估风险因素', 'output': '列出主要风险因素(如政策不确定性、外部冲击),并分析其可能的影响路径和概率。', 'completion_criteria': '风险因素全面且评估客观,能够为决策提供参考。', 'common_issues': '忽略潜在风险或评估过于乐观,导致分析失真。', 'solutions': '引入情景分析法,考虑多种可能性及其对应影响。'}, {'step': 6, 'action': '处理不确定性和多种可能性', 'output': '通过情景假设(如基准情形、乐观情形、悲观情形)分析不同政策路径的可能性及其影响。', 'completion_criteria': '情景假设合理,能够涵盖主要可能性,且分析有据可依。', 'common_issues': '情景假设过于简单或脱离实际,缺乏实用性。', 'solutions': '基于历史数据和专家意见,设定合理的假设范围。'}, {'step': 7, 'action': '总结核心结论并提出行动建议', 'output': '提炼核心结论,明确政策方向和市场预期,并提出具体的投资建议或应对策略。', 'completion_criteria': '结论简洁明了,建议具体可行,能够直接指导实践。', 'common_issues': '结论过于笼统或建议缺乏操作性。', 'solutions': '结合客户需求和市场环境,提出量身定制的建议。'}, {'step': 8, 'action': '可视化呈现与信息补充', 'output': '制作图表(如趋势图、对比图)以直观展示数据,并附上详细注释和数据来源。', 'completion_criteria': '图表清晰易懂,信息补充完整,增强报告可读性。', 'common_issues': '图表复杂或信息缺失,影响理解。', 'solutions': '遵循“少即是多”原则,确保图表简洁且信息充分。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:41:20", "modified_time": "2025-08-14 03:41:20", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "95e2cb4a83c34eb7ba93c84567cf10fe", "experience_type": "text", "when_to_use": "此规划框架适用于宏观经济分析、货币政策解读以及投资决策支持相关的深度研究报告,尤其是需要结合定量与定性信息、处理复杂政策博弈和评估多种不确定性的情境。", "content": "[{'step': 1, 'action': '明确研究主题与核心问题', 'output': '确定报告的核心问题(如美联储政策立场及其影响),并将其分解为若干子问题(如政策背景、经济数据解读、未来风险点等)。', 'evaluation': '核心问题是否清晰且具有针对性;子问题是否全面覆盖了研究目标。', 'common_issues': '核心问题过于宽泛或模糊,导致后续分析缺乏聚焦。', 'solutions': '通过初步文献回顾或团队讨论明确研究范围,并用一句话概括核心问题。'}, {'step': 2, 'action': '收集并整理关键数据与背景信息', 'output': '涵盖宏观经济指标(如GDP、就业数据)、政策声明(如FOMC会议纪要)、历史对比数据(如联储主席任期反对票统计)以及相关图表。', 'evaluation': '数据是否权威可靠;是否涵盖了定量与定性信息;是否能有效支持后续分析。', 'common_issues': '数据来源单一或不完整,导致分析基础薄弱。', 'solutions': '优先选择官方或权威机构发布的数据,并确保涵盖多维度信息(如历史趋势与当前动态)。'}, {'step': 3, 'action': '构建报告的章节结构与逻辑框架', 'output': '按照“背景-现状-分析-展望”的顺序组织内容,先铺垫政策背景,再解读当期经济数据,接着分析政策逻辑,最后提出未来风险与潜在影响。', 'evaluation': '章节安排是否符合读者认知路径;逻辑是否层层递进。', 'common_issues': '章节之间逻辑跳跃或重复,导致阅读体验不佳。', 'solutions': '绘制逻辑流程图,确保每一部分紧密衔接且无冗余。'}, {'step': 4, 'action': '深入解读核心数据与政策信号', 'output': '对关键数据(如PDFP增速、GDP分项贡献)进行详细拆解,并结合政策声明(如鲍威尔讲话)分析其背后的隐含意义。', 'evaluation': '是否挖掘出数据背后的趋势与矛盾点;是否将政策信号与数据分析有机结合。', 'common_issues': '停留在表面描述,未能揭示深层次含义。', 'solutions': '采用对比法(如历史与当前对比)和假设推演法(如不同政策情景下的影响)提升分析深度。'}, {'step': 5, 'action': '平衡定量与定性信息的展示', 'output': '在定量分析(如GDP增速、失业率)基础上,加入定性判断(如对鲍威尔鹰派立场的评价),并通过图表直观呈现。', 'evaluation': '定量与定性信息是否均衡分布;图表是否简洁明了且具说服力。', 'common_issues': '过度依赖某一类信息,导致结论片面。', 'solutions': '制定信息分类清单,确保每种类型的信息都有适当权重。'}, {'step': 6, 'action': '识别并阐述主要风险因素', 'output': '列出可能影响未来发展的关键风险(如中东局势、特朗普政策不确定性),并说明其潜在传导路径。', 'evaluation': '风险因素是否全面且具体;是否提供了应对思路。', 'common_issues': '风险提示流于形式,缺乏实际指导价值。', 'solutions': '针对每个风险因素设计简要情景模拟,增强实用性。'}, {'step': 7, 'action': '总结核心观点并突出行动建议', 'output': '提炼出报告的核心结论(如鲍威尔鹰派立场的长期影响),并给出明确的投资或政策建议(如关注9月降息可能性)。', 'evaluation': '核心观点是否清晰易懂;建议是否可行且具有操作性。', 'common_issues': '结论过于笼统,无法直接指导实践。', 'solutions': '使用金字塔原理,从具体到抽象逐步归纳核心观点。'}, {'step': 8, 'action': '审阅与优化表达方式', 'output': '检查语言表述是否精准,避免歧义;调整图表布局以提高可读性。', 'evaluation': '整体表达是否流畅且专业;是否符合目标受众需求。', 'common_issues': '术语过多或表述晦涩,影响理解。', 'solutions': '邀请非专业人士试读,收集反馈并优化语言风格。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:42:42", "modified_time": "2025-08-14 03:42:42", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "24c543f0e95c4d699bc69820a96cde2d", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、宏观经济分析、投资标的评估以及政策影响分析等任务。它尤其适合需要结合定量和定性数据,从多维度解读经济指标或市场动态的场景。", "content": "[{'step': 1, 'action': '明确报告目标与核心问题', 'output': '确定分析的核心目标(如解释PMI数据变化原因)和关键问题(如供需两端表现、价格预期变化等),并列出需回答的具体问题清单。', 'completion_criteria': '核心问题清晰且具有针对性,能够直接指导后续数据收集和分析。', 'common_issues': '目标过于宽泛或模糊,导致后续分析缺乏聚焦。', 'solutions': '通过与利益相关方沟通,明确报告受众需求,并将目标细化为具体问题。'}, {'step': 2, 'action': '收集并整理定量与定性数据', 'output': '获取权威数据来源(如WIND数据库、彭博预期值),并对数据进行清洗和分类,确保数据准确性和完整性;同时整理相关政策、市场动态等定性信息。', 'completion_criteria': '数据覆盖全面,包括历史数据、当前数据和预测数据,且所有数据经过验证无误。', 'common_issues': '数据来源单一或数据质量不高,影响分析可信度。', 'solutions': '优先选择权威数据源,交叉验证数据一致性,并补充专家访谈或行业调研作为定性支持。'}, {'step': 3, 'action': '设计章节结构与信息展示逻辑', 'output': '根据分析目标,划分章节结构,例如按“现状描述→深层原因分析→未来展望”顺序组织内容,确保逻辑清晰、层层递进。', 'completion_criteria': '章节安排合理,能够引导读者逐步理解核心结论,且各部分之间衔接自然。', 'common_issues': '章节之间存在重复或跳跃,导致阅读体验不佳。', 'solutions': '提前绘制逻辑框架图,检查每部分内容是否服务于整体目标,避免冗余或脱节。'}, {'step': 4, 'action': '开展定量分析与定性论证', 'output': '对定量数据进行趋势分析、对比分析(如PMI指数环比变化、分项指标分解),结合定性信息(如政策导向、极端天气影响)解释数据变动背后的原因。', 'completion_criteria': '分析结果清晰呈现数据变化规律,并能有效关联至宏观背景或微观现象。', 'common_issues': '定量分析与定性论证脱节,无法形成有力支撑。', 'solutions': '在每个分析点中,明确指出定量数据如何反映定性判断,确保两者紧密结合。'}, {'step': 5, 'action': '识别风险因素并提出应对策略', 'output': '基于数据分析,归纳潜在风险(如外需走弱、企业利润承压),并在适当位置(如章节末尾或单独段落)提出应对建议。', 'completion_criteria': '风险因素表述客观且有据可依,应对策略具体可行,能够为决策提供参考。', 'common_issues': '风险提示过于笼统,缺乏针对性或操作性。', 'solutions': '结合实际案例说明风险可能的影响路径,并从政策、市场等角度提出多层次解决方案。'}, {'step': 6, 'action': '总结核心结论并突出行动建议', 'output': '提炼全文核心观点(如“内需复苏不稳,外需回落加剧”),并以简明语言概括主要发现及行动方向(如“政策需加力巩固内需恢复趋势”)。', 'completion_criteria': '核心结论一目了然,行动建议具体且贴合实际,便于读者快速抓住重点。', 'common_issues': '结论冗长或偏离主题,难以引起读者关注。', 'solutions': '采用金字塔原则,先亮明结论再展开佐证,确保表达简洁有力。'}, {'step': 7, 'action': '制作可视化图表与附注说明', 'output': '针对关键数据和分析结果,制作清晰直观的图表(如折线图、柱状图),并添加详细的数据来源说明和注释。', 'completion_criteria': '图表设计美观易懂,能够辅助读者快速理解复杂数据关系。', 'common_issues': '图表过多或过少,信息密度不均,降低阅读效率。', 'solutions': '控制图表数量,确保每张图表都有明确目的,并配以简短文字说明其意义。'}, {'step': 8, 'action': '撰写免责声明与格式校对', 'output': '编写免责声明,声明报告仅供交流使用,不构成投资建议;同时检查全文格式、语法和引用规范。', 'completion_criteria': '文档格式统一,语言流畅,引用标注完整,符合专业出版标准。', 'common_issues': '格式错误或语言不够严谨,影响报告专业性。', 'solutions': '设立专门审核环节,由不同人员分别负责内容和格式审查。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:44:25", "modified_time": "2025-08-14 03:44:25", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "67794954d3cc4cff99a33c24f8e217ac", "experience_type": "text", "when_to_use": "此规划框架适用于需要进行区域经济分析、投资机会评估、政策影响解读的金融分析任务,尤其是涉及跨区域经济数据对比和政策导向的研究场景。例如:行业深度研究、宏观经济趋势预测、区域投资策略制定等。", "content": "[{'step': 1, 'action': '明确分析目标与范围', 'output': '清晰界定报告的核心主题(如区域经济表现、消费提振效果等),并确定覆盖的地理范围和时间跨度。', 'criteria_for_completion': '核心主题明确,范围无遗漏且符合实际需求;例如:涵盖所有31个省份的2024年上半年经济数据。', 'common_issues': '范围过于宽泛导致信息冗余,或过于狭窄使结论缺乏代表性。', 'solutions': '根据客户需求和数据可用性调整范围,并确保关键变量(如GDP、固定资产投资、消费等)被纳入分析。'}, {'step': 2, 'action': '收集与整理多维度数据', 'output': '从官方统计、政府报告、行业数据库等渠道获取定量和定性数据,并按类别(如GDP、投资、消费、出口)进行分类整理。', 'criteria_for_completion': '数据完整、准确且来源可靠;数据结构化便于后续分析,例如表格形式展示各省份GDP增速。', 'common_issues': '数据缺失或不一致,导致分析基础薄弱。', 'solutions': '使用交叉验证方法核实数据准确性,必要时通过专家访谈补充定性信息。'}, {'step': 3, 'action': '设计章节结构与优先级', 'output': '根据分析逻辑安排章节顺序,通常以宏观总览开篇,逐步细化至具体领域(如GDP、投资、消费、出口等),并在最后提出风险提示。', 'criteria_for_completion': '章节逻辑清晰,信息展示优先级合理;例如:先呈现整体经济表现,再深入分省数据分析。', 'common_issues': '章节顺序混乱,导致读者难以理解核心结论。', 'solutions': '遵循“总-分-总”结构,确保每个章节围绕一个核心主题展开,并在开头和结尾强化核心结论。'}, {'step': 4, 'action': '构建多层次论证逻辑', 'output': '采用层层递进的方式建立观点,从数据描述到因果分析再到政策建议,结合定量和定性分析支持结论。', 'criteria_for_completion': '论证链条完整,逻辑严密;例如:广东经济承压的原因被分解为房地产调整、出口压力等具体因素。', 'common_issues': '论证过程跳跃,缺乏充分的数据支撑。', 'solutions': '每一步论证都需引用具体数据或案例,避免主观推测。'}, {'step': 5, 'action': '平衡定量与定性信息分布', 'output': '在分析中穿插图表、统计数据与政策解读,既突出关键数字又提供背景解释。', 'criteria_for_completion': '定量与定性信息分布均衡,图表直观易懂;例如:用柱状图展示各省GDP增速,同时附上政策解读说明差异原因。', 'common_issues': '过度依赖单一类型信息,导致分析偏颇或说服力不足。', 'solutions': '根据不同受众需求调整信息比例,注重图表设计以增强视觉效果。'}, {'step': 6, 'action': '适时引入风险因素与不确定性讨论', 'output': '在核心结论后单独设立风险提示部分,详细列出潜在风险(如政策落实不及预期、外部贸易环境变化等)及其可能影响。', 'criteria_for_completion': '风险提示全面且具有针对性;例如:提及海南、山西等地完成全年增长目标的压力较大。', 'common_issues': '忽略风险因素,导致分析显得片面。', 'solutions': '提前识别主要风险点,并结合历史数据和政策趋势进行预判。'}, {'step': 7, 'action': '总结行动建议与未来展望', 'output': '基于前文分析提炼出可操作的政策建议或投资方向,并展望下一阶段的发展重点(如“十五五”规划编制)。', 'criteria_for_completion': '建议具体可行,展望紧扣当前形势;例如:针对经济大省提出科技创新、产业升级的具体路径。', 'common_issues': '建议空洞或脱离实际,无法指导决策。', 'solutions': '结合区域特点和国家政策导向,确保建议具备落地性。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:45:42", "modified_time": "2025-08-14 03:45:42", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "22261cf600024c32b0ef2b6696658be6", "experience_type": "text", "when_to_use": "该规划框架适用于宏观经济分析、行业深度研究、投资策略制定以及政策影响评估等任务。尤其适合需要结合定量与定性数据,对经济运行状况或市场趋势进行全面解读的场景。", "content": "[{'step': 1, 'action': '明确分析目标并收集核心数据', 'output': '形成清晰的研究问题和全面的数据清单,包括宏观经济指标(GDP、CPI、PPI等)、行业细分数据(固定资产投资、消费、出口等)以及政策动态。', 'completion_criteria': '确保所有关键数据来源可靠且覆盖全面;能够回答研究问题所需的核心变量是否已涵盖。', 'common_issues': ['数据不完整或过时可能导致结论偏差。', '忽略某些重要变量会削弱分析的全面性。'], 'solutions': ['优先选择权威机构发布的最新数据,例如国家统计局、Wind等。', '通过交叉验证补充遗漏的关键变量。']}, {'step': 2, 'action': '组织章节结构,按逻辑顺序安排内容', 'output': '设计一个层次分明的报告框架,通常从整体到局部展开,先呈现宏观背景,再逐步深入至具体领域(如产业、消费、投资等)。', 'completion_criteria': '各部分之间逻辑连贯,信息分布合理,能引导读者快速抓住重点。', 'common_issues': ['章节间缺乏衔接,导致阅读体验割裂。', '信息堆砌无序,难以突出核心观点。'], 'solutions': ['采用总-分-总的结构:开篇概述全局情况,中间详细拆解各子领域,结尾总结主要发现。', '用图表辅助说明复杂数据,增强可读性。']}, {'step': 3, 'action': '构建论证路径,层层递进支持核心观点', 'output': '基于历史数据、当前表现及未来预测,建立严谨的因果链条,从现象描述到原因剖析再到趋势展望。', 'completion_criteria': '每个论点都有充分证据支撑,且前后推导自然流畅。', 'common_issues': ['论证过程跳跃,缺少必要的过渡。', '过度依赖单一类型数据(如仅使用定量数据),忽视多维度视角。'], 'solutions': ['引入定性和定量相结合的方法,比如结合统计数据与专家访谈。', '在每一步骤后加入简短的小结,强化逻辑连接。']}, {'step': 4, 'action': '平衡不同类型信息的展示权重', 'output': '将定量数据(如同比增速、环比变化)与定性分析(如政策解读、市场情绪)有机结合,并根据不同受众调整比重。', 'completion_criteria': '各类信息比例协调,既不过于枯燥也不流于表面,满足目标受众需求。', 'common_issues': ['过于偏重某一类信息,使报告失衡。', '未能针对特定受众优化内容表达方式。'], 'solutions': ['根据受众背景决定技术术语的使用程度。', '利用可视化工具(如折线图、柱状图)提升数据直观性。']}, {'step': 5, 'action': '识别并妥善处理不确定性因素', 'output': '明确指出潜在风险点及其可能影响,并提出应对方案或情景假设。', 'completion_criteria': '风险因素被适时提及且表述客观,不夸大也不隐瞒。', 'common_issues': ['风险披露不足,低估负面事件的可能性。', '缺乏实际可行的应对建议。'], 'solutions': ['提前梳理可能的风险来源(如政策变动、外部环境冲击)。', '提供多种情景模拟,帮助决策者理解不同结果的概率。']}, {'step': 6, 'action': '提炼核心结论并突出展示', 'output': '以简洁的语言总结关键发现,并通过标题、加粗字体或专门的“小结”部分加以强调。', 'completion_criteria': '核心结论一目了然,即使非专业读者也能迅速把握。', 'common_issues': ['核心结论淹没在大量细节中,不易察觉。', '语言冗长,无法精准传达核心思想。'], 'solutions': ['为每节设置明确的主题句,提示本节主旨。', '使用列表或框图形式突出重点内容。']}, {'step': 7, 'action': '添加免责声明和后续行动建议', 'output': '在报告末尾附上法律声明,同时给出基于分析的具体行动指南(如投资方向、政策建议等)。', 'completion_criteria': '免责声明措辞合规,行动建议具有操作性。', 'common_issues': ['免责声明缺失或表述模糊,增加法律风险。', '行动建议空泛,缺乏落地价值。'], 'solutions': ['参考同类报告模板完善免责声明。', '结合实际案例细化行动建议,例如推荐具体标的或策略。']}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:47:20", "modified_time": "2025-08-14 03:47:20", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "90121f71c2ac4785a78182ee7bc62795", "experience_type": "text", "when_to_use": "此规划框架适用于宏观经济政策解读、投资环境分析、行业趋势研究以及风险评估报告等任务。尤其适合需要结合定量与定性信息,从宏观到微观层层递进分析的任务场景。", "content": "[{'step': 1, 'action': '明确核心主题和目标受众', 'output': '确定分析的核心主题(如本次为‘中央政治局会议要点解读’)及目标受众(如投资者、政策制定者或企业高管),形成清晰的问题定义。', 'completion_criteria': '问题定义具体且与实际需求高度相关;能够准确识别目标受众的关键关注点。', 'common_issues': '主题过于宽泛或模糊,导致后续分析缺乏聚焦。', 'solutions': '通过与利益相关方沟通,明确最紧迫的问题,并围绕其构建分析框架。'}, {'step': 2, 'action': '收集并整理基础数据与背景信息', 'output': '整合定量数据(如GDP增速、产业增加值等)和定性信息(如政策声明、国际经贸动态),并分类标注来源和时效性。', 'completion_criteria': '数据覆盖全面,来源可靠,时间跨度合理,且信息经过初步筛选和验证。', 'common_issues': '数据冗余或缺失关键信息,导致分析不完整。', 'solutions': '建立标准化的数据采集模板,确保涵盖所有必要维度(如历史对比、预测假设)。'}, {'step': 3, 'action': '构建逻辑框架并组织章节结构', 'output': '设计分析的逻辑路径(如从现状描述到风险分析再到政策建议),并按优先级安排章节顺序,确保核心结论前置。', 'completion_criteria': '章节结构清晰,逻辑连贯,信息分布合理,重点突出。', 'common_issues': '章节之间逻辑断裂,或次要信息喧宾夺主。', 'solutions': '采用‘倒金字塔’结构,先呈现核心结论,再逐步展开支持性细节。'}, {'step': 4, 'action': '定量与定性分析结合,逐层递进建立观点', 'output': '通过定量数据分析揭示趋势(如GDP增速、物价水平),结合定性信息解释成因(如政策调整、外部环境变化),并提出可能的影响。', 'completion_criteria': '数据分析结果与定性解释相互印证,观点层次分明,论证充分。', 'common_issues': '定量与定性分析脱节,导致结论缺乏说服力。', 'solutions': '在每一步分析中,明确定量数据如何支撑定性判断,避免孤立呈现数据或主观推测。'}, {'step': 5, 'action': '识别并评估潜在风险因素', 'output': '系统梳理可能的风险点(如外需放缓、房地产市场调整),并结合情景分析探讨其影响范围和程度。', 'completion_criteria': '风险评估全面且客观,包含多种可能性及其应对策略。', 'common_issues': '忽视小概率高影响事件,或风险分析过于笼统。', 'solutions': '使用情景模拟方法,设定乐观、中性和悲观三种情景,分别评估其发生概率和潜在后果。'}, {'step': 6, 'action': '提出可操作的政策或投资建议', 'output': '基于前文分析,提出针对性建议(如降息、促消费政策),并说明其实施路径和预期效果。', 'completion_criteria': '建议具体可行,与分析结论紧密关联,且具有较强的可操作性。', 'common_issues': '建议空洞或脱离实际,难以落地执行。', 'solutions': '确保每条建议都有明确的执行主体、时间节点和量化目标。'}, {'step': 7, 'action': '总结核心结论并优化信息展示', 'output': '提炼全文核心观点,以简洁语言概括主要发现和建议,并通过图表、关键数据等形式增强可视化效果。', 'completion_criteria': '核心结论清晰易懂,信息展示直观高效,便于受众快速抓住重点。', 'common_issues': '总结过于冗长或缺乏视觉辅助,削弱传播效果。', 'solutions': '使用‘一句话总结法’提炼核心结论,并配合可视化工具强化表达效果。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:48:30", "modified_time": "2025-08-14 03:48:30", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "2273fdd582524e298932d934dcd4e0f7", "experience_type": "text", "when_to_use": "适用于需要全面分析政策、市场或行业动态的任务,尤其是涉及多维度信息整合、风险评估和未来预测的场景。", "content": "[{'step': 1, 'action': '明确分析目标和受众需求', 'output': '一份简要的目标清单,包括核心问题、关键变量和预期成果。', 'evaluation_criteria': '是否清晰定义了分析范围和目标?是否考虑了受众的关注点?', 'common_issues': '目标过于宽泛或模糊。', 'solutions': '通过头脑风暴或与利益相关者沟通,细化分析目标。'}, {'step': 2, 'action': '收集和整理基础数据', 'output': '按时间线或主题分类的数据表格,涵盖定量和定性信息。', 'evaluation_criteria': '数据是否全面、准确且来源可靠?是否覆盖了所有关键变量?', 'common_issues': '数据缺失或质量不高。', 'solutions': '使用多重数据源交叉验证;必要时补充专家访谈或调研数据。'}, {'step': 3, 'action': '提炼核心结论并构建逻辑框架', 'output': '一个分层的逻辑框架,包含核心结论、支持论据和次要细节。', 'evaluation_criteria': '核心结论是否突出?逻辑是否清晰连贯?', 'common_issues': '结论不够聚焦或逻辑跳跃。', 'solutions': '反复推敲核心结论,确保每一步推理都有充分依据。'}, {'step': 4, 'action': '撰写报告初稿,按模块组织内容', 'output': '一份初步报告,包含形势分析、政策解读、风险评估和未来展望等模块。', 'evaluation_criteria': '各模块是否条理清晰?信息展示是否符合优先级?', 'common_issues': '模块之间衔接不流畅或信息重复。', 'solutions': '使用过渡句连接模块;删除冗余信息。'}, {'step': 5, 'action': '处理不确定性和风险因素', 'output': '针对不确定性和风险的专项分析,附带应对策略。', 'evaluation_criteria': '是否全面识别了潜在风险?应对策略是否可行?', 'common_issues': '风险分析流于表面或缺乏解决方案。', 'solutions': '引入情景分析法,模拟不同可能性下的结果。'}, {'step': 6, 'action': '审阅和优化报告', 'output': '最终版本的报告,语言精炼、逻辑严密、格式规范。', 'evaluation_criteria': '是否达到专业标准?是否满足受众需求?', 'common_issues': '语言冗长或图表不直观。', 'solutions': '邀请同行评审;优化图表设计以提升可读性。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:49:57", "modified_time": "2025-08-14 03:49:57", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "d3d7ae8f6e9649cf842a926e8c410b40", "experience_type": "text", "when_to_use": "此规划框架适用于宏观市场周报、行业深度研究、投资标的分析以及风险评估报告等金融分析任务。它特别适合需要整合多维度经济数据、政策动态、市场表现并提出配置建议的场景,如宏观经济环境下的资产配置策略制定。", "content": "[{'step': 1, 'action': '明确报告目标和受众需求', 'output': '确定报告的核心目的(如为投资者提供短期资产配置建议),以及受众的核心关注点(如股票、债券、外汇等市场的走势)。', 'how_to_judge_completion': '是否清晰定义了报告的目标和受众,并将其贯穿于后续章节的设计中。', 'common_issues_and_solutions': {'issue': '目标不明确可能导致信息堆砌而缺乏重点。', 'solution': '在开始撰写前,与团队或客户确认核心目标,并以该目标为导向筛选信息。'}}, {'step': 2, 'action': '组织章节结构并安排信息优先级', 'output': '形成清晰的章节框架,通常包括:本周小结及下周配置建议、国内外经济数据概览、资本市场表现分析、重要新闻事件解读、风险因素提示。', 'how_to_judge_completion': '章节逻辑是否连贯,是否按照从宏观到微观的顺序展开,且信息优先级是否合理(如关键结论和配置建议前置)。', 'common_issues_and_solutions': {'issue': '章节之间内容重复或逻辑混乱。', 'solution': '使用思维导图工具预先梳理章节关系,确保每个部分有明确的主题和递进逻辑。'}}, {'step': 3, 'action': '收集并整理定量与定性数据', 'output': '汇总国内外经济数据(如PMI、GDP、利率变动)、资本市场表现(如股指期货、国债收益率)以及政策动态(如政治局会议、央行操作)。', 'how_to_judge_completion': '是否全面覆盖了相关领域的核心指标,且数据来源可靠、更新及时。', 'common_issues_and_solutions': {'issue': '数据不足或过时导致分析失准。', 'solution': '建立数据追踪机制,定期更新关键数据源,并交叉验证数据准确性。'}}, {'step': 4, 'action': '进行分层论证,构建观点链条', 'output': '从宏观经济环境切入,逐步深入至具体市场表现和资产类别分析;通过历史数据对比、趋势预测、政策解读等方式支持观点。', 'how_to_judge_completion': '是否形成了层层递进的论证路径,每一步是否有充分的数据或理论支撑。', 'common_issues_and_solutions': {'issue': '论证过程跳跃性强,缺乏逻辑衔接。', 'solution': '采用“总-分-总”结构,先概述整体背景,再逐一分析细节,最后总结归纳。'}}, {'step': 5, 'action': '平衡不同类型信息的分布', 'output': '结合定量数据(如经济指标变化)和定性分析(如政策解读),历史数据(如过去一周的市场表现)与前瞻性预测(如下周配置建议)。', 'how_to_judge_completion': '是否在各部分均匀分布了定量与定性信息,避免过度依赖单一类型数据。', 'common_issues_and_solutions': {'issue': '定量数据过多导致可读性差,或定性分析过多显得空洞。', 'solution': '设定每部分内容的比例限制,例如70%定量+30%定性,确保两者有机结合。'}}, {'step': 6, 'action': '识别并处理不确定性和多种可能性', 'output': '对潜在风险因素(如关税谈判结果、货币政策调整)进行情景假设分析,提出不同情况下的应对策略。', 'how_to_judge_completion': '是否全面列举了主要风险因素,并对其影响进行了量化或定性评估。', 'common_issues_and_solutions': {'issue': '忽视极端情景导致策略缺乏弹性。', 'solution': '引入压力测试或敏感性分析方法,模拟最坏/最好情景下的市场反应。'}}, {'step': 7, 'action': '提炼核心结论并突出展示', 'output': '将核心结论(如配置建议、市场展望)放在显眼位置(如开头或结尾),并通过图表、加粗字体等形式增强视觉效果。', 'how_to_judge_completion': '读者能否快速抓住报告的核心要点,无需逐字阅读即可理解。', 'common_issues_and_solutions': {'issue': '核心结论淹没在大量文字中难以发现。', 'solution': '设计单独的摘要页或结论框,集中呈现关键信息。'}}, {'step': 8, 'action': '校验并优化语言表达与格式排版', 'output': '检查报告的语言是否简洁明了,图表是否清晰易懂,格式是否统一美观。', 'how_to_judge_completion': '是否存在语言歧义或图表错误,格式是否符合专业标准。', 'common_issues_and_solutions': {'issue': '语言冗长或图表复杂降低阅读体验。', 'solution': '邀请外部审阅者提供反馈,并根据意见优化表达方式和视觉设计。'}}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:51:06", "modified_time": "2025-08-14 03:51:06", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "8566ba34468148b89ba9286cf86af46b", "experience_type": "text", "when_to_use": "此规划框架适用于宏观经济数据分析、行业深度研究、投资标的分析及风险评估报告等任务,尤其是需要结合定量数据和定性分析的金融报告制作场景。", "content": "[{'step': 1, 'action': '明确分析目标与核心问题', 'output': '清晰定义报告的核心关注点(如:PMI数据波动的原因、经济景气度变化趋势等),并列出需要解答的关键问题。', 'completion_criteria': '能够用一句话概括报告的核心结论方向,并列出至少3个具体问题作为后续分析的切入点。', 'common_issues': '分析目标过于宽泛或模糊,导致后续章节结构松散。', 'solutions': '在开始前,与利益相关方确认报告的用途和受众需求,确保目标聚焦。'}, {'step': 2, 'action': '收集并整理数据', 'output': '从权威来源(如iFinD、Wind)获取相关数据,包括历史数据、当前数据以及预测数据,并以表格或图表形式初步展示。', 'completion_criteria': '数据覆盖全面且准确,时间序列完整,关键指标(如制造业PMI、非制造业PMI)及其分项数据均有呈现。', 'common_issues': '数据来源不一致或缺失关键分项数据。', 'solutions': '制定数据收集清单,优先选择官方或权威第三方数据源,并进行交叉验证。'}, {'step': 3, 'action': '设计章节结构并安排信息优先级', 'output': '根据分析目标,将报告分为若干章节(如:制造业PMI分析、非制造业PMI分析、风险提示等),并确定各章节的信息展示逻辑。', 'completion_criteria': '章节结构清晰,信息优先级合理,核心结论能够在前两章中突出呈现。', 'common_issues': '章节间逻辑不连贯,或次要信息占据过多篇幅。', 'solutions': '采用“总-分-总”结构,先概述整体趋势,再深入细分领域,最后总结核心观点及建议。'}, {'step': 4, 'action': '构建论证逻辑与递进关系', 'output': '通过层层递进的方式展开分析,从宏观到微观、从总体到分项,逐步揭示现象背后的驱动因素。', 'completion_criteria': '每个分项分析均能回答上一层次提出的问题,并自然引出下一层次的讨论。', 'common_issues': '论证跳跃性强,缺乏过渡性说明。', 'solutions': '使用连接句或小标题明确各部分之间的逻辑关系,确保读者能够顺畅理解分析路径。'}, {'step': 5, 'action': '平衡定量与定性信息分布', 'output': '结合定量数据(如PMI数值变化)和定性分析(如季节性因素、政策影响),对主要发现进行解释。', 'completion_criteria': '定量数据支持定性判断,两者比例协调,避免单一维度过度倾斜。', 'common_issues': '定性分析过于主观,或定量数据堆砌无解读。', 'solutions': '为每组数据提供简短但精准的解读,同时引用权威观点或案例增强说服力。'}, {'step': 6, 'action': '识别与处理不确定性', 'output': '针对数据中的异常值或潜在风险因素(如极端天气、政策落地不及预期),单独设立章节详细讨论。', 'completion_criteria': '所有可能影响结论的不确定因素均被提及,并给出应对策略或情景假设。', 'common_issues': '忽略或低估关键风险,导致结论过于乐观。', 'solutions': '建立风险评估矩阵,按可能性和影响程度分类,逐一分析。'}, {'step': 7, 'action': '可视化数据与提炼核心结论', 'output': '制作直观的图表(如折线图、柱状图)辅助说明,并在文末提炼出3-5条核心结论。', 'completion_criteria': '图表清晰易懂,核心结论简洁明了,便于快速抓住重点。', 'common_issues': '图表过于复杂或冗余,核心结论淹没在细节中。', 'solutions': '遵循“少即是多”的原则,只保留最关键的数据和图表,确保每张图表都服务于一个明确的目的。'}, {'step': 8, 'action': '审阅与优化语言表达', 'output': '检查全文逻辑是否流畅,术语是否专业,语言是否精炼,确保符合目标受众的阅读习惯。', 'completion_criteria': '报告内容无明显逻辑漏洞,语言风格统一且专业。', 'common_issues': '术语使用不当或表述冗长晦涩。', 'solutions': '邀请同行评审,重点关注术语准确性与语言流畅性。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:52:21", "modified_time": "2025-08-14 03:52:21", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "33caa447b0f74da2bbfa54222cbc2aa1", "experience_type": "text", "when_to_use": "适用于宏观经济周报、行业深度研究、投资标的分析以及风险评估报告等需要综合定量和定性信息的金融分析任务。尤其适合需要平衡历史数据与预测、政策解读与市场反应、资产配置建议与风险管理的场景。", "content": "[{'step': 1, 'action': '明确分析目标和受众需求,确定报告的核心主题(如宏观趋势、政策影响、资产配置建议)。', 'output': '一份清晰的分析大纲,包含报告的主要章节标题及每个部分的目标。', 'completion_criteria': '核心主题明确,章节结构逻辑清晰,能够覆盖受众关注的重点问题。', 'common_issues': '主题过于宽泛或缺乏针对性,导致后续内容难以聚焦。', 'solutions': '通过与客户或团队讨论,明确报告的核心目标和受众需求,确保主题集中且实用。'}, {'step': 2, 'action': '收集并整理相关数据和信息,包括政策动态、经济指标、市场表现和行业新闻。', 'output': '一份初步数据汇总表,涵盖关键指标(如GDP、通胀、就业数据)和图表素材(如股市指数、利率曲线、商品价格走势)。', 'completion_criteria': '数据来源可靠,信息全面且更新及时,图表清晰直观。', 'common_issues': '数据缺失或过时,图表展示不够直观,无法有效支持分析结论。', 'solutions': '优先使用权威数据源(如彭博、万得),并通过多渠道验证数据准确性;优化图表设计以突出关键趋势。'}, {'step': 3, 'action': '对数据进行分类和分层分析,形成定量和定性结合的初步结论。', 'output': '一份初步分析文档,按章节结构组织,包含高频数据观察、宏观经济数据解读、政策影响分析等内容。', 'completion_criteria': '数据分析逻辑清晰,定量结论有数据支撑,定性分析基于合理假设和背景知识。', 'common_issues': '分析过于表面化,未能深入挖掘数据背后的驱动因素。', 'solutions': '结合行业专家意见和历史案例,对数据异常点进行深入探讨,提出可能的原因和影响。'}, {'step': 4, 'action': '构建论证逻辑,逐层递进地推导出核心观点,并提出潜在风险和不确定性。', 'output': '一份完整的论证框架,明确核心观点、支持证据、风险提示和应对策略。', 'completion_criteria': '论证路径清晰,观点层层递进,风险提示全面且具有前瞻性。', 'common_issues': '论证逻辑断裂,风险提示不足或过于笼统。', 'solutions': '采用“数据→趋势→影响→风险”的递进式论证方法,确保逻辑连贯;对不确定性和多种可能性进行情景分析。'}, {'step': 5, 'action': '撰写报告正文,注重信息优先级和展示方式,确保核心结论突出且易于理解。', 'output': '一份初稿报告,包含摘要、章节内容、图表和附录,信息优先级合理分布。', 'completion_criteria': '核心结论在摘要和章节开头明确呈现,不同类型信息(定量/定性、历史/预测)平衡分布。', 'common_issues': '信息堆砌,重点不突出,读者难以快速抓住核心内容。', 'solutions': '将核心结论放在显眼位置,通过图表和小标题强化视觉引导,避免冗长描述。'}, {'step': 6, 'action': '审阅和优化报告,确保语言简洁、逻辑严谨、格式统一。', 'output': '一份最终版报告,经过校对和排版,符合专业标准。', 'completion_criteria': '报告无语法错误,逻辑流畅,格式规范,图表清晰。', 'common_issues': '语言啰嗦或术语过多,影响可读性;格式不统一。', 'solutions': '邀请同事或外部专家进行审阅,提供反馈意见;使用模板工具统一格式。'}, {'step': 7, 'action': '发布报告并跟踪反馈,根据受众反应调整后续分析方向。', 'output': '一份反馈总结,记录受众的主要疑问和建议。', 'completion_criteria': '反馈信息完整,能够为后续分析提供参考。', 'common_issues': '忽视反馈或未及时响应,导致分析方向偏离实际需求。', 'solutions': '建立定期沟通机制,主动收集反馈并快速调整分析策略。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:53:36", "modified_time": "2025-08-14 03:53:36", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "ff5cc54461e14c719ffe03f2e74826fe", "experience_type": "text", "when_to_use": "此规划框架适用于复杂的宏观经济分析任务,包括但不限于行业深度研究、政策影响评估、投资标的分析、风险评估报告等场景。尤其适合涉及多国经济数据对比、政策谈判影响、金融市场反应的综合分析。", "content": "[{'step': 1, 'action': '明确研究目标和范围,定义分析的核心问题及所需回答的关键问题。', 'output': '清晰的研究目标声明,例如:评估美国贸易协议对全球经济的影响,或预测下半年主要经济体GDP增长趋势。', 'completion_criteria': '确保所有团队成员对目标有统一理解,且目标具体、可量化。', 'common_issues': '目标过于宽泛或模糊,可能导致分析方向偏离。应对方法是通过与利益相关者沟通确认核心需求。'}, {'step': 2, 'action': '收集并整理相关数据,包括定量(如GDP增长率、CPI、失业率)和定性信息(如政策声明、市场情绪)。', 'output': '包含时间序列数据、政策文件、市场指标的综合数据库,按章节需求分类整理。', 'completion_criteria': '数据覆盖全面,来源可靠,格式统一便于后续处理。', 'common_issues': '数据缺失或不一致。应对方法是提前制定数据采集计划,并设置备用数据源。'}, {'step': 3, 'action': '构建章节结构,按照逻辑顺序组织内容,通常从宏观背景到具体分析再到展望未来。', 'output': '初步章节框架,例如:摘要→各经济体GDP表现→关税政策影响→央行货币政策→未来展望。', 'completion_criteria': '章节安排合理,层次分明,能够有效引导读者理解分析结论。', 'common_issues': '章节间逻辑衔接不紧密。应对方法是多次审阅调整顺序,确保过渡自然。'}, {'step': 4, 'action': '分析数据以建立观点,使用定量模型(如回归分析)和定性推理(如政策解读)相结合的方式。', 'output': '详细的数据分析结果,包括图表、关键指标变化趋势及背后驱动因素解释。', 'completion_criteria': '分析过程透明,结论基于数据且具有说服力。', 'common_issues': '过度依赖单一类型数据导致结论片面。应对方法是平衡定量与定性分析权重。'}, {'step': 5, 'action': '突出核心结论,将最重要的发现放在显眼位置,例如摘要部分或每章开头的小结。', 'output': '提炼出的关键洞察,例如“美国经济增速因贸易协议而提升”或“欧盟制造业面临长期萎缩风险”。', 'completion_criteria': '核心结论简明扼要,能够快速抓住读者注意力。', 'common_issues': '结论埋没在细节中未被突出。应对方法是设计专门的总结模块强调重点。'}, {'step': 6, 'action': '讨论不确定性及潜在风险,说明不同情景下的可能性及其影响。', 'output': '针对不确定性的详细讨论,例如关税政策延期的可能性及其对市场的连锁反应。', 'completion_criteria': '涵盖主要风险点,提供多种假设条件下的预测路径。', 'common_issues': '忽略次要但可能重要的风险。应对方法是系统化梳理所有潜在变量。'}, {'step': 7, 'action': '提出建议或展望,结合分析结果为决策者提供行动指南。', 'output': '具体的政策建议或投资策略,例如“建议投资者关注美元指数区间震荡机会”。', 'completion_criteria': '建议切实可行,与分析结论直接相关。', 'common_issues': '建议脱离实际或缺乏依据。应对方法是确保建议来源于扎实的分析基础。'}, {'step': 8, 'action': '校对与优化语言表达,检查技术术语准确性及整体行文流畅度。', 'output': '最终版本报告,无语法错误,语言专业且易读。', 'completion_criteria': '报告经过至少一轮同行评审,反馈意见已全部采纳。', 'common_issues': '语言晦涩难懂或存在表述歧义。应对方法是邀请非专业人士试读并提供建议。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:54:49", "modified_time": "2025-08-14 03:54:49", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "d8dfb7b169c043359a436ed7ce1aa021", "experience_type": "text", "when_to_use": "适用于宏观市场分析、大类资产配置建议、地缘政治与经济政策影响评估等综合金融研究任务,尤其在需要结合定量与定性分析、历史回顾与未来预测的情境下。", "content": "[{'step': 1, 'action': '明确报告目标和核心受众', 'output': '一份清晰的研究问题定义,包括报告的核心主题(如特朗普新政对全球经济的影响)、目标受众(如机构投资者、政策制定者)以及预期成果(如资产配置建议)。', 'completion_criteria': '报告目标与受众需求高度匹配,能够通过内部团队或客户反馈验证内容的相关性和实用性。', 'common_issues': '目标过于宽泛或模糊,导致后续章节组织混乱。', 'solutions': '在初期阶段与利益相关方确认目标,并通过头脑风暴细化核心问题。'}, {'step': 2, 'action': '构建章节结构并安排信息优先级', 'output': '一个逻辑清晰的章节框架,包括背景回顾、现状分析、资产市场表现、中期配置建议等部分,确保核心结论(如资产配置建议)在报告末尾突出呈现。', 'completion_criteria': '章节结构层次分明,信息分布合理,读者能够快速定位关键结论。', 'common_issues': '章节间逻辑不连贯或信息冗余。', 'solutions': '使用逆向设计法,从最终结论反推所需支持信息,避免无关内容堆砌。'}, {'step': 3, 'action': '收集并整理定量与定性数据', 'output': '一组经过筛选和分类的数据集,涵盖宏观经济指标(如GDP、CPI)、金融市场表现(如利率、汇率)、政策动态(如关税调整)等,辅以图表展示。', 'completion_criteria': '数据来源可靠且具有时效性,图表清晰直观,能够有效支撑观点。', 'common_issues': '数据过时或缺乏权威性,图表设计复杂难以理解。', 'solutions': '优先选择权威数据库(如Wind、Bloomberg),并遵循“一图一意”原则优化图表设计。'}, {'step': 4, 'action': '分层论证核心观点', 'output': '逐层递进的论证路径,例如从政策变化到经济影响,再到金融市场反应,最后落脚于资产配置建议,每个环节均基于前一步骤的分析结果。', 'completion_criteria': '论证链条完整,逻辑严密,读者能轻松跟随分析思路得出结论。', 'common_issues': '论证跳跃性过大,忽略中间步骤。', 'solutions': '采用“总-分-总”结构,每部分开头概述主要论点,结尾总结关键发现。'}, {'step': 5, 'action': '识别并评估风险因素', 'output': '对潜在风险的系统梳理,包括政策不确定性、通胀压力、地缘政治冲突等,结合情景分析探讨其可能影响。', 'completion_criteria': '风险因素全面覆盖,评估方法科学合理,能够为决策提供参考。', 'common_issues': '风险描述过于笼统,缺乏具体量化分析。', 'solutions': '引入敏感性分析或蒙特卡洛模拟工具,量化不同情景下的风险敞口。'}, {'step': 6, 'action': '平衡历史回顾与未来预测', 'output': '将历史数据与未来趋势相结合的分析框架,例如通过历史数据验证假设,再利用预测模型(如时间序列分析)展望未来。', 'completion_criteria': '历史数据与预测模型互为补充,预测结果具备一定可信度。', 'common_issues': '过度依赖历史数据或模型预测,忽视现实约束条件。', 'solutions': '结合专家访谈、行业调研等多种方法校准预测结果。'}, {'step': 7, 'action': '提出具体的资产配置建议', 'output': '基于前述分析形成的大类资产配置方案,包括超配、中配、低配的具体标的及其理由,同时列出主要风险因素。', 'completion_criteria': '建议操作性强,符合当前市场环境,能够直接指导投资决策。', 'common_issues': '建议过于理论化,缺乏实际可执行性。', 'solutions': '结合客户投资偏好和市场流动性状况调整配置比例。'}, {'step': 8, 'action': '撰写报告并进行质量控制', 'output': '一份格式规范、语言精炼、逻辑严谨的完整研究报告,附带必要的免责声明和引用说明。', 'completion_criteria': '报告内容准确无误,表达流畅,符合专业标准。', 'common_issues': '文字表述晦涩难懂,格式不符合要求。', 'solutions': '邀请同事或外部专家审阅初稿,根据反馈修改完善。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:56:24", "modified_time": "2025-08-14 03:56:24", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "0cde05a126dc4950b9d6e62510d9f8d5", "experience_type": "text", "when_to_use": "此规划框架适用于宏观经济分析、行业深度研究、投资策略制定以及风险评估报告等任务,特别是需要结合定量与定性数据,对经济趋势、政策变化和市场动态进行综合研判的场景。", "content": "[{'step': 1, 'action': '明确分析目标与核心问题', 'output': '确定本次分析的核心议题,例如滞涨风险、货币政策调整预期等,并列出需要解答的关键问题(如:美联储是否会降息?失业率和通胀如何演变?)。', 'completion_criteria': '核心议题清晰,关键问题具体且可操作,能够直接指导后续数据收集与分析。', 'common_issues': ['问题定义过于宽泛或模糊。', '未能聚焦于实际决策需求。'], 'solutions': ['通过与利益相关方沟通,明确分析目的。', '分解复杂问题为更小的具体子问题。']}, {'step': 2, 'action': '收集并整理相关数据', 'output': '从权威来源(如Wind、官方统计数据)获取定量数据(如PMI、CPI、就业数据等),同时搜集定性信息(如政策声明、企业反馈等)。将数据分类存储,便于后续分析。', 'completion_criteria': '数据覆盖全面,包括历史趋势、当前状态及预测指标;数据质量高,来源可靠。', 'common_issues': ['数据缺失或不完整。', '数据更新滞后,无法反映最新情况。'], 'solutions': ['建立多渠道数据采集机制,确保及时性。', '使用替代指标填补空白(如用生产者价格指数PPI补充消费者价格指数CPI)。']}, {'step': 3, 'action': '构建章节结构,组织逻辑框架', 'output': '根据分析目标设计报告结构,通常按以下顺序展开:宏观背景→核心数据解读→细分领域分析→风险因素讨论→结论与展望。确保每一部分紧密衔接,逐步递进。', 'completion_criteria': '章节安排合理,逻辑流畅,各部分内容围绕核心议题展开,没有冗余或遗漏。', 'common_issues': ['章节之间缺乏连贯性。', '信息堆砌而无逻辑推导。'], 'solutions': ['在每章开头设置引导段落,说明该部分的目的。', '采用总分总结构,先概述后深入再总结。']}, {'step': 4, 'action': '解析核心数据,提炼关键洞察', 'output': '对核心数据(如PMI、GDP增速、就业指数等)进行详细解读,结合历史趋势和理论模型,揭示其背后的经济含义。例如,服务业PMI接近临界值表明经济增长动能减弱。', 'completion_criteria': '数据解读准确,与实际情况吻合,能有效支撑后续观点。', 'common_issues': ['过度依赖单一数据点。', '忽略异常值或特殊事件的影响。'], 'solutions': ['交叉验证多个数据源,避免片面结论。', '标注异常值并分析其成因(如季节性波动或政策冲击)。']}, {'step': 5, 'action': '引入定性信息,增强论证力度', 'output': '引用专家观点、企业反馈或政策声明,补充定量分析的不足。例如,引用鲍威尔讲话解释美联储可能的政策路径。', 'completion_criteria': '定性信息与定量数据相互印证,共同支持核心结论。', 'common_issues': ['定性信息与定量分析脱节。', '引用内容权威性不足。'], 'solutions': ['优先选择权威来源,如央行官员发言或知名机构报告。', '确保定性信息与数据分析结果一致。']}, {'step': 6, 'action': '评估风险因素,提出应对建议', 'output': '识别潜在风险(如滞涨风险、关税影响等),分析其发生概率及影响程度,并给出相应的对策建议。例如,针对滞涨风险,建议投资者关注防御性资产。', 'completion_criteria': '风险因素全面覆盖,分析透彻,建议具有可操作性。', 'common_issues': ['忽视低概率但高影响的风险。', '建议空泛,缺乏针对性。'], 'solutions': ['运用情景分析法,模拟不同风险情景下的结果。', '结合客户偏好和市场环境,定制化建议。']}, {'step': 7, 'action': '撰写结论与展望,突出核心观点', 'output': '总结主要发现,强调核心结论(如“预计美联储年内两次降息”),并提供未来观察重点(如Jackson Hole会议)。', 'completion_criteria': '结论简明扼要,与前面分析呼应,展望方向明确。', 'common_issues': ['结论模糊或与分析不符。', '展望过于笼统,缺乏实质内容。'], 'solutions': ['提前归纳分析中的关键点,确保结论有据可依。', '展望应包含具体的监测指标或时间节点。']}, {'step': 8, 'action': '审阅与优化报告呈现形式', 'output': '检查报告的语言表达是否清晰,图表是否直观,布局是否美观,并根据受众需求调整内容深度。', 'completion_criteria': '报告整体专业性强,易于理解,视觉效果良好。', 'common_issues': ['语言晦涩难懂。', '图表信息过载或不清晰。'], 'solutions': ['邀请非专业人士试读,测试易读性。', '简化图表内容,突出关键信息。']}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:57:37", "modified_time": "2025-08-14 03:57:37", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "409b1be6bf844add9c9bb6d48a588317", "experience_type": "text", "when_to_use": "此规划框架适用于宏观经济数据分析、行业深度研究、投资标的分析、风险评估报告等需要结合定量和定性信息进行综合判断的金融分析任务,尤其是涉及政策影响、市场预期变化以及数据修订对市场信心冲击的场景。", "content": "[{'step': 1, 'action': '明确分析目标与核心问题', 'output': '清晰定义本次分析的核心议题(如:美国就业市场降温是否预示降息转折点)及其对市场的潜在影响。', 'completion_criteria': '核心问题被明确界定,并能直接关联到当前市场关注点或决策需求。', 'common_issues': '目标过于宽泛或模糊,导致后续分析缺乏聚焦。', 'solution': '通过团队讨论或客户沟通,提炼出具体的分析目标,确保其具有实际意义。'}, {'step': 2, 'action': '收集并整理基础数据', 'output': '获取权威来源的最新数据(如BLS非农就业数据),并对数据进行初步清洗和分类(如按部门拆分新增就业和时薪增速)。', 'completion_criteria': '数据完整且来源可靠,能够覆盖分析所需的关键维度(历史/预测、定量/定性)。', 'common_issues': '数据不完整或存在滞后性,影响分析时效性和准确性。', 'solution': '优先选择官方统计机构发布的高频数据,并建立数据更新机制以确保实时性。'}, {'step': 3, 'action': '构建章节结构并分配信息优先级', 'output': '设计报告框架,通常包括事件背景、核心观点、细分领域分析(如生产部门和服务部门表现)、风险提示及结论。', 'completion_criteria': '章节逻辑清晰,信息展示顺序符合“从整体到局部”的原则,核心结论在开头部分突出呈现。', 'common_issues': '章节安排混乱,次要信息占据过多篇幅,削弱了核心观点的表达。', 'solution': '采用倒金字塔结构,将最重要的发现放在最前面,并控制每个子章节的字数占比。'}, {'step': 4, 'action': '逐层递进论证核心观点', 'output': '通过对比历史数据(如5-7月非农数据下修幅度)和当前趋势(如服务业驱动增长但生产疲软),逐步推导出核心结论(如就业市场加速降温可能推动美联储降息)。', 'completion_criteria': '论证链条严密,每一步逻辑都能找到数据支持,且无明显跳跃式推理。', 'common_issues': '论证过程缺乏数据支撑,或忽视反面证据。', 'solution': '为每个论点配备充分的数据佐证,并主动提及可能的反驳意见及应对理由。'}, {'step': 5, 'action': '平衡不同类型信息的分布', 'output': '结合定量分析(如新增就业人数、时薪增速环比变化)和定性解读(如移民政策减少劳动力供给),同时兼顾历史回顾与未来预测(如库存周期切换对就业的影响)。', 'completion_criteria': '各类信息比例合理,既不过于依赖单一类型数据,也不偏废长期或短期视角。', 'common_issues': '过度侧重某一种信息类型,导致分析片面化。', 'solution': '制定检查清单,确保定量与定性、历史与预测的信息均得到体现。'}, {'step': 6, 'action': '适时提出风险因素', 'output': '在合适时机揭示关键风险(如关税政策导致通胀超预期、就业数据下行过快),并通过图表或文字说明其潜在影响路径。', 'completion_criteria': '风险因素被客观陈述,且与整体分析内容自然衔接,不会显得突兀或夸大其词。', 'common_issues': '风险提示过于笼统或滞后,无法有效预警。', 'solution': '提前规划风险提示的位置,并结合具体情境提供量化评估或情景模拟。'}, {'step': 7, 'action': '处理不确定性和多种可能性', 'output': '针对不确定性(如9月是否降息),列出不同假设条件下的可能结果(如通胀大幅上行则按兵不动;否则可能降息25bp)。', 'completion_criteria': '所有可能性均被考虑,且有合理的概率分配或触发条件描述。', 'common_issues': '忽略某些极端情况或未明确触发条件,导致建议不够全面。', 'solution': '引入决策树模型或敏感性分析工具,系统梳理各种情景及其发生概率。'}, {'step': 8, 'action': '总结并提炼行动建议', 'output': '基于前述分析,给出明确的投资建议或政策展望(如市场降息预期升温可能利好黄金资产)。', 'completion_criteria': '建议具体可行,与分析内容紧密相关,且具备可操作性。', 'common_issues': '建议空洞或脱离实际分析内容。', 'solution': '确保每条建议都有对应的分析支撑,并尽量细化至可执行层面。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 03:59:10", "modified_time": "2025-08-14 03:59:10", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "8f09b912cc794a8e9b8fb715f55543bd", "experience_type": "text", "when_to_use": "该规划框架适用于宏观经济数据分析、行业深度研究、投资决策支持报告等需要结合定量与定性分析的金融任务,尤其是涉及政策解读、市场趋势评估和风险预测的场景。", "content": "[{'step': 1, 'action': '明确分析目标和核心问题', 'output': '清晰定义分析的核心目标(如劳动力市场降温对美联储政策的影响)以及需要解答的关键问题(如就业数据如何影响降息预期)。', 'how_to_judge_completion': '判断是否完成:目标是否具体且可操作,关键问题是否覆盖了所有相关维度(如数据、政策、市场预期等)。', 'common_problems_and_solutions': [{'problem': '目标过于宽泛或模糊。', 'solution': '通过细化问题范围(如聚焦于非农就业数据的具体指标),确保目标具体化。'}]}, {'step': 2, 'action': '收集并整理相关数据和信息', 'output': '系统性地收集定量数据(如新增非农就业人数、失业率、薪资增速等)和定性信息(如政策声明、市场情绪指标),并进行初步清洗和分类。', 'how_to_judge_completion': '判断是否完成:数据是否全面覆盖所需维度,是否有遗漏重要变量,数据质量是否可靠。', 'common_problems_and_solutions': [{'problem': '数据来源不一致或存在偏差。', 'solution': '优先使用权威机构发布的数据,并注明数据来源及潜在局限性。'}]}, {'step': 3, 'action': '构建章节结构并安排信息优先级', 'output': '根据逻辑递进关系组织内容,先从宏观数据切入(如新增非农就业数据),再深入到细分领域(如行业分布、薪资变化),最后总结为政策建议或市场展望。', 'how_to_judge_completion': '判断是否完成:章节结构是否符合‘由表及里’的原则,信息展示是否突出核心结论,次要信息是否合理补充。', 'common_problems_and_solutions': [{'problem': '信息堆砌导致重点不突出。', 'solution': '在每个章节开头明确本部分的核心观点,并用图表直观呈现关键数据。'}]}, {'step': 4, 'action': '逐层展开论证并引入多维度视角', 'output': '通过逐步拆解关键指标(如新增就业下行原因、薪资增速背后驱动因素),结合历史对比、跨行业分析以及政策背景,形成多层次论证。', 'how_to_judge_completion': '判断是否完成:论证路径是否清晰,是否兼顾了定量与定性分析,不同维度之间的衔接是否自然流畅。', 'common_problems_and_solutions': [{'problem': '论证过程单一,缺乏多维度支撑。', 'solution': '引入额外视角(如国际局势对通胀的影响),增强论证的全面性。'}]}, {'step': 5, 'action': '识别并处理不确定性与风险因素', 'output': '在适当位置(如章节末尾或单独的风险提示部分)讨论可能的不确定性和风险(如通胀超预期、政策反复等),并提供应对策略。', 'how_to_judge_completion': '判断是否完成:是否充分识别了主要风险点,提出的解决方案是否具有可行性。', 'common_problems_and_solutions': [{'problem': '风险提示流于形式,未提出具体应对措施。', 'solution': '针对每项风险设计针对性预案,例如关注未来特定时间节点的数据发布。'}]}, {'step': 6, 'action': '提炼核心结论并制定行动建议', 'output': '基于前述分析提炼出简洁明了的核心结论(如“美国劳动力市场正在走软”),并转化为具体的投资或政策建议(如“维持4季度首次降息判断”)。', 'how_to_judge_completion': '判断是否完成:核心结论是否直击主题,行动建议是否具备实操性。', 'common_problems_and_solutions': [{'problem': '结论过于笼统,缺乏实际指导意义。', 'solution': '将结论与具体场景挂钩,例如明确降息时间窗口或资产配置方向。'}]}, {'step': 7, 'action': '优化报告呈现形式以提升传播效果', 'output': '通过图表、数据可视化工具以及简练的语言表达,提升报告的专业性和易读性。', 'how_to_judge_completion': '判断是否完成:图表是否直观易懂,文字描述是否精炼准确,整体布局是否美观。', 'common_problems_and_solutions': [{'problem': '图表过多导致阅读负担加重。', 'solution': '精选最具代表性的图表,避免冗余信息干扰核心内容。'}]}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:00:14", "modified_time": "2025-08-14 04:00:14", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "dd142bf8b42b45079a573735ce292d29", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、宏观经济高频数据分析、投资标的评估以及风险提示报告等金融分析任务。尤其适合需要从生产端、需求端、价格端等多个维度综合评价经济运行状况的场景,同时需兼顾定量与定性信息,并结合历史数据和未来预测进行论证。", "content": "[{'step': 1, 'action': '明确分析目标并定义核心问题', 'output': '清晰界定分析的核心主题(如:7月高频经济数据跟踪),确定需要回答的关键问题(如:生产端开工率变化趋势、需求端地产市场表现等)。', 'completion_criteria': '核心问题是否具体且可量化;目标是否能指导后续章节结构设计。', 'common_issues': '目标过于宽泛或模糊,缺乏明确的聚焦点。', 'solutions': '通过头脑风暴或与团队讨论,提炼出最紧迫或最具价值的问题作为切入点。'}, {'step': 2, 'action': '设计章节结构并分配优先级', 'output': '根据分析目标划分主要模块(如生产端、需求端、价格端),并以逻辑顺序组织章节(通常按产业链上下游或经济活动流程排序)。', 'completion_criteria': '章节是否覆盖所有核心问题;是否存在重复或遗漏;逻辑是否连贯。', 'common_issues': '章节间逻辑断裂或信息分布不均。', 'solutions': '绘制思维导图确保各部分紧密衔接,避免重叠内容。'}, {'step': 3, 'action': '收集并整理基础数据', 'output': '获取相关领域的高频数据(如开工率、库存、价格指数等),并对数据进行初步清洗和分类,形成结构化数据库。', 'completion_criteria': '数据是否全面且准确;是否涵盖定量与定性信息;是否包含历史对比和最新动态。', 'common_issues': '数据来源单一或更新滞后,导致结论偏差。', 'solutions': '多渠道验证数据可靠性,必要时补充专家访谈或第三方调研数据。'}, {'step': 4, 'action': '逐层展开分析,建立观点支撑体系', 'output': '在每个章节中,先展示关键指标的变化趋势,再结合背景因素解释原因,最后提出可能的影响路径(如:钢铁开工率改善→基建实物量加速形成)。', 'completion_criteria': '观点是否有充分的数据支持;因果关系是否合理;是否体现多层次分析。', 'common_issues': '分析停留在表面描述,缺乏深入洞察。', 'solutions': '引入宏观政策、行业周期等外部变量增强解释力,使用图表辅助说明复杂关系。'}, {'step': 5, 'action': '平衡不同类型信息的比重', 'output': '确保定量数据(如开工率、库存增速)与定性判断(如消费升温、电影票房修复)有机结合;历史回顾与未来预测比例适当。', 'completion_criteria': '信息分布是否均衡;读者能否快速抓住重点。', 'common_issues': '过度依赖某类信息,忽略其他视角。', 'solutions': '制定信息权重表,为每种类型设定合理占比。'}, {'step': 6, 'action': '突出核心结论并强化表达', 'output': '将最重要的发现置于摘要或开篇位置,通过加粗字体、颜色标注等方式强调;结合图表直观呈现结果。', 'completion_criteria': '核心结论是否一目了然;是否便于决策者快速理解。', 'common_issues': '核心结论埋没在细节中,难以被注意到。', 'solutions': '采用金字塔原则,先呈现结论后展开论述。'}, {'step': 7, 'action': '识别风险因素并提出应对建议', 'output': '在分析过程中适时提及潜在风险(如政策落地不及预期、海外政策超预期),并在结尾集中总结风险提示。', 'completion_criteria': '风险是否全面覆盖;是否提供可行的应对策略。', 'common_issues': '风险提示流于形式,缺乏实质性内容。', 'solutions': '基于情景模拟或敏感性分析,给出具体的预警信号和行动指南。'}, {'step': 8, 'action': '校验逻辑一致性并优化语言表达', 'output': '检查全文是否存在矛盾之处,调整措辞使语言更加精准简练,同时保持专业性和客观性。', 'completion_criteria': '逻辑是否严密;语言是否通俗易懂但不失专业水准。', 'common_issues': '表述冗长或含糊不清,降低阅读体验。', 'solutions': '邀请同行评审或利用AI工具进行语法和风格优化。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:01:40", "modified_time": "2025-08-14 04:01:40", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "57eb38e1a1ed4428bf816d8abc45acc8", "experience_type": "text", "when_to_use": "适用于宏观和大类资产配置分析、投资策略制定、政策影响评估等综合性金融研究报告的制作场景,尤其适合需要结合宏观经济数据、政策动态、市场表现及风险因素进行多维度分析的任务。", "content": "[{'step': 1, 'action': '明确报告目标与核心观点', 'output': '确定报告的核心结论(如资产配置建议)和主要关注点(如宏观经济趋势、政策变化对市场的影响)。', 'criteria_for_completion': '核心观点清晰且能贯穿整个报告,所有章节内容围绕核心结论展开。', 'common_issues_and_solutions': {'问题': '核心观点模糊或缺乏逻辑一致性。', '解决方案': '在撰写前召开内部讨论会,确保团队对核心观点达成一致,并列出支持观点的关键论据。'}}, {'step': 2, 'action': '组织章节结构,分配信息优先级', 'output': '设计报告框架,包括宏观背景、数据解读、资产表现回顾、配置建议、风险提示等部分,并明确各部分的重点。', 'criteria_for_completion': '章节安排合理,信息展示的优先级符合逻辑顺序,核心结论突出且易于理解。', 'common_issues_and_solutions': {'问题': '章节结构混乱,信息分布不均。', '解决方案': '使用金字塔原理,先呈现核心结论,再逐步展开支持性细节;通过图表和表格直观展示关键数据。'}}, {'step': 3, 'action': '收集并整理定量与定性数据', 'output': '从权威来源获取宏观经济指标、市场表现数据、政策文件及相关研究,并按主题分类整理。', 'criteria_for_completion': '数据来源可靠且覆盖全面,定量与定性信息比例均衡,能够有效支撑分析。', 'common_issues_and_solutions': {'问题': '数据缺失或过时。', '解决方案': '建立数据更新机制,定期跟踪官方统计机构和主流财经媒体发布的最新信息。'}}, {'step': 4, 'action': '构建论证逻辑,分层递进表达观点', 'output': '采用“现象-原因-影响-对策”的路径,逐层深入分析经济趋势、政策变化及其对市场的潜在影响。', 'criteria_for_completion': '每一层逻辑紧密衔接,论证过程条理清晰,观点具有说服力。', 'common_issues_and_solutions': {'问题': '论证跳跃性大,缺乏连贯性。', '解决方案': '为每个观点提供充分的数据和案例支持,避免直接跳跃到结论;引入过渡句以增强逻辑流畅度。'}}, {'step': 5, 'action': '提出风险因素并评估不确定性', 'output': '识别可能影响资产价格的风险事件(如通胀上行、地缘政治复杂化),并结合情景分析探讨其发生概率和潜在后果。', 'criteria_for_completion': '风险提示具体且有针对性,同时包含应对不确定性的策略建议。', 'common_issues_and_solutions': {'问题': '风险提示泛泛而谈,缺乏实际意义。', '解决方案': '针对不同时间窗口(短期、中期、长期)分别列举具体风险因素,并提供相应的缓解措施。'}}, {'step': 6, 'action': '总结并形成最终资产配置建议', 'output': '基于上述分析,给出明确的大类资产配置顺序(如股票 > 大宗商品 > 债券 > 货币),并附上操作指南。', 'criteria_for_completion': '配置建议具体可行,与前期分析高度契合,便于投资者理解和执行。', 'common_issues_and_solutions': {'问题': '配置建议过于笼统或脱离分析。', '解决方案': '将配置建议与报告中的数据分析和风险提示逐一对应,确保每项建议都有据可依。'}}, {'step': 7, 'action': '审阅与优化语言表达', 'output': '检查报告的语言是否简洁明了,术语是否准确,图表是否直观易懂。', 'criteria_for_completion': '报告整体专业性强,无明显语法错误或表述歧义,图表注释完整。', 'common_issues_and_solutions': {'问题': '术语晦涩难懂,图表标注不清。', '解决方案': '邀请非专业人士试读报告,收集反馈意见;对图表添加详细说明文字,确保读者无需额外解释即可理解。'}}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:03:04", "modified_time": "2025-08-14 04:03:04", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "b6f92c5eb07c478bbfc3b79863fd73e7", "experience_type": "text", "when_to_use": "此框架适用于行业深度研究、政策影响分析、宏观经济趋势解读以及投资标的筛选等场景。尤其适合需要结合定量和定性信息,进行多维度数据整合与风险评估的金融分析任务。", "content": "[{'step': 1, 'action': '明确分析目标与范围', 'output': '确定分析主题(如育儿福利政策推进、反内卷政策对生产行业的影响)及覆盖的产业链环节(上游、中游、下游)。', 'completion_criteria': '目标清晰且可量化;范围界定合理,能够涵盖关键变量而不失焦点。', 'common_issues': '目标过于宽泛或模糊,导致后续分析难以聚焦。', 'solutions': '通过团队讨论或客户沟通确认核心关注点,并列出具体问题清单以指导后续工作。'}, {'step': 2, 'action': '收集并整理基础数据', 'output': '获取相关行业的历史数据、当前市场表现、政策文件及图表支持(如开工率、价格指标、信用利差等),并按分类存储。', 'completion_criteria': '数据来源可靠,覆盖全面,已初步清洗并标注时间戳和单位。', 'common_issues': '数据缺失或不一致,可能影响分析的准确性。', 'solutions': '优先选择权威数据库(如iFind),并通过交叉验证补充不足部分;对异常值进行标记处理。'}, {'step': 3, 'action': '构建章节结构并分配信息权重', 'output': '设计报告框架,包括总览、分行业分析、图表展示及结论建议,确保信息层次分明,核心结论突出。', 'completion_criteria': '各章节逻辑连贯,信息分布均衡,重点内容得到充分展开。', 'common_issues': '章节安排混乱,次要信息喧宾夺主,削弱了核心观点的说服力。', 'solutions': '采用金字塔原理组织内容,先呈现最重要的结论,再逐步展开支撑细节;利用标题和小结强化关键点。'}, {'step': 4, 'action': '结合定量与定性方法论证观点', 'output': '使用统计数据分析趋势(如价格同比变化、开工率波动),同时引用政策文件和专家意见解释背后的驱动因素。', 'completion_criteria': '论证路径清晰,证据链完整,能够有效回答设定的研究问题。', 'common_issues': '过度依赖单一类型信息(仅定量或仅定性),导致分析片面化。', 'solutions': '为每个主要发现提供至少一种定量和一种定性支持;定期检查是否遗漏重要视角。'}, {'step': 5, 'action': '识别并嵌入风险因素', 'output': '在适当位置引入潜在风险(如经济政策超预期调整、地缘政治冲突),说明其对预测结果的可能影响。', 'completion_criteria': '风险提示时机恰当,表述客观中立,不会引发不必要的恐慌情绪。', 'common_issues': '忽视风险或将其作为附录草草带过,降低报告可信度。', 'solutions': '将风险分析融入主体内容而非单独列出;用情景模拟法探讨不同可能性。'}, {'step': 6, 'action': '制作可视化图表辅助表达', 'output': '根据数据特点选择合适的图表形式(如折线图展示趋势、柱状图对比差异),并统一格式风格。', 'completion_criteria': '图表简洁直观,注释详尽,能直接传递核心信息。', 'common_issues': '图表复杂冗长,缺乏必要说明,读者难以理解。', 'solutions': '遵循“一图一意”原则,每张图表只传达一个核心信息;添加简短但精准的注释文字。'}, {'step': 7, 'action': '撰写总结与建议', 'output': '提炼主要发现,提出基于分析的具体行动指南(如关注育儿福利政策带来的长期机会,规避地产销售低迷的风险)。', 'completion_criteria': '总结概括性强,建议具有操作性,能直接应用于决策。', 'common_issues': '总结流于表面,未能提炼出实质性洞见;建议空洞无物。', 'solutions': '重新审视分析过程中的高亮点,提炼最具价值的信息;建议需结合实际情况给出具体实施路径。'}, {'step': 8, 'action': '审阅与优化报告', 'output': '通读全文,检查语言流畅性、逻辑严密性及格式规范性,修正错误并优化措辞。', 'completion Criteria': '报告无语法错误,逻辑顺畅,排版美观。', 'common_issues': '忽略细节问题,如错别字、标点符号错误,影响专业形象。', 'solutions': '邀请同事或外部专家审阅,从第三方角度发现问题;使用工具(如Grammarly)辅助校对。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:04:35", "modified_time": "2025-08-14 04:04:35", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "1655215da6c241df9a5f80f108ed4c1b", "experience_type": "text", "when_to_use": "适用于宏观经济分析、政策解读与市场趋势预测相结合的深度研究报告,尤其是涉及多维度数据整合(定量+定性)、政策影响评估以及中长期经济展望的任务。", "content": "[{'step': 1, 'action': '明确研究目标和核心问题', 'output': '确定报告的核心主题和关键问题,例如本次报告聚焦于政治局会议政策解读及其对经济的影响。', 'criteria_for_completion': '核心问题清晰且具有明确的研究方向;能够指导后续章节结构设计。', 'common_issues_and_solutions': {'问题': '研究目标过于宽泛或模糊。', '解决方案': '通过初步阅读相关背景资料,提炼出2-3个具体的研究子问题,确保研究范围可操作。'}}, {'step': 2, 'action': '收集并整理基础数据与政策信息', 'output': '形成数据表格、图表及政策文本摘要,涵盖宏观经济指标、行业动态、政策文件等。', 'criteria_for_completion': '数据覆盖全面,来源可靠(如Wind数据库);政策文件解读准确,并标注出处。', 'common_issues_and_solutions': {'问题': '数据缺失或不一致。', '解决方案': '优先选择权威数据源,对异常值进行交叉验证;必要时补充说明数据局限性。'}}, {'step': 3, 'action': '构建逻辑框架,安排章节结构', 'output': '设计报告结构,包括摘要、主要章节(如政策解读、数据分析、市场展望)和附录。', 'criteria_for_completion': '章节顺序符合逻辑递进关系,优先展示核心结论和高价值信息。', 'common_issues_and_solutions': {'问题': '章节内容重复或层次混乱。', '解决方案': '制定详细提纲,每部分内容限定在单一主题下,避免交叉重叠。'}}, {'step': 4, 'action': '撰写核心章节,突出重点分析', 'output': '完成各章节初稿,包含政策解读、经济数据变化、行业影响等内容,辅以图表支持。', 'criteria_for_completion': '观点表达清晰,论证充分;图表与文字紧密结合,直观呈现关键发现。', 'common_issues_and_solutions': {'问题': '论述冗长或偏离主题。', '解决方案': '严格控制篇幅,围绕核心论点展开,删除无关细节;使用小标题分隔不同部分。'}}, {'step': 5, 'action': '引入风险因素与不确定性讨论', 'output': '在适当位置加入对潜在风险的分析,如政策实施力度、外部环境变化等。', 'criteria_for_completion': '风险讨论时机恰当,既不过早导致读者困惑,也不过晚削弱报告严谨性。', 'common_issues_and_solutions': {'问题': '风险描述过于笼统或缺乏针对性。', '解决方案': '结合具体场景列举可能情景,并提供应对策略建议,增强实用性。'}}, {'step': 6, 'action': '总结核心结论,提出行动建议', 'output': '提炼全文要点,给出明确的投资或决策建议。', 'criteria_for_completion': '总结简明扼要,建议切实可行;能为读者提供直接参考价值。', 'common_issues_and_solutions': {'问题': '建议空洞或脱离实际。', '解决方案': '基于前文分析结果推导建议,确保逻辑连贯;引用案例增加说服力。'}}, {'step': 7, 'action': '审校与优化语言表达', 'output': '检查语法、格式、术语一致性,调整语言风格以匹配目标受众需求。', 'criteria_for_completion': '报告无明显错误,语言流畅,专业术语使用得当。', 'common_issues_and_solutions': {'问题': '术语晦涩难懂或表述啰嗦。', '解决方案': '邀请同行评审,简化复杂概念;针对非专业读者添加注释。'}}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:05:42", "modified_time": "2025-08-14 04:05:42", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "792e4c6398284ba2aaabf247f4bb3ff2", "experience_type": "text", "when_to_use": "适用于行业深度研究、宏观经济形势分析、投资决策支持等需要整合多源数据并推导未来趋势的任务。", "content": "[{'step': 1, 'action': '明确目标和受众', 'output': '确定报告的核心问题(如‘美联储是否会提前降息’)及目标读者群体(如机构投资者或政策制定者)。', 'criteria_for_success': '核心问题清晰且聚焦;目标受众需求明确。', 'common_issues_and_solutions': [{'issue': '问题过于宽泛导致无法深入分析。', 'solution': '将大问题分解为小问题,例如从整体经济状况细化到具体数据变化。'}]}, {'step': 2, 'action': '收集和整理相关数据', 'output': '获取最新的定量数据(如就业、通胀数据)和定性信息(如政策声明、专家评论)。', 'criteria_for_success': '数据来源权威且时效性强;涵盖所有必要的维度(如历史、当前、预测)。', 'common_issues_and_solutions': [{'issue': '数据不足或不一致。', 'solution': '利用多种渠道验证数据准确性,必要时注明数据局限性。'}]}, {'step': 3, 'action': '构建逻辑框架', 'output': '设计报告结构,包括引言、数据分析、结论和风险提示。', 'criteria_for_success': '各部分衔接自然,逻辑清晰;重点突出,便于快速抓住核心信息。', 'common_issues_and_solutions': [{'issue': '结构松散导致阅读困难。', 'solution': '采用经典三段式结构,确保每部分内容服务于整体目标。'}]}, {'step': 4, 'action': '逐层展开分析', 'output': '先描述现状(如最新数据表现),再解释原因(如政策效应),最后推测未来趋势(如降息概率)。', 'criteria_for_success': '每个步骤有充分的数据或理论支撑;过渡平滑无跳跃感。', 'common_issues_and_solutions': [{'issue': '论证不够严密,缺乏说服力。', 'solution': '引入更多实证案例或引用权威观点加强论据。'}]}, {'step': 5, 'action': '可视化呈现关键发现', 'output': '制作图表(如柱状图、折线图)直观展示重要数据。', 'criteria_for_success': '图表简洁明了,能够独立传达核心信息。', 'common_issues_and_solutions': [{'issue': '图表复杂难以理解。', 'solution': '简化图表元素,仅保留最关键的信息,并添加简短注释。'}]}, {'step': 6, 'action': '总结与展望', 'output': '提炼核心结论(如‘降息可能提前’),并列出主要风险因素。', 'criteria_for_success': '结论明确且具有操作性;风险提示全面但不过分悲观。', 'common_issues_and_solutions': [{'issue': '结论模糊或偏向单一方向。', 'solution': '同时考虑多种可能性,并用条件语句表达不同情景下的结果。'}]}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:06:59", "modified_time": "2025-08-14 04:06:59", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "f95f06e2189c47e792c5504e0bc26bdc", "experience_type": "text", "when_to_use": "此规划框架适用于宏观经济政策分析、资本市场策略研究、行业趋势预测以及投资标的评估等任务。尤其适合需要结合定性与定量分析,涵盖中长期战略展望与短期市场动态的综合报告制作。", "content": "[{'step': 1, 'action': '明确分析目标与核心问题', 'output': '清晰界定分析的核心主题和关键问题,例如本次案例中的政治局会议对经济形势的判断及政策方向。', 'completion_criteria': '能够用一句话概括分析目标,并确保所有后续章节都围绕该目标展开。', 'common_issues': '目标过于宽泛或模糊,导致后续分析偏离主题。', 'solutions': '在开始前,列出3-5个关键问题,确保每个章节都能回答其中至少一个问题。'}, {'step': 2, 'action': '构建结构化框架,分层递进组织内容', 'output': '形成从宏观到微观、从现状到未来的逻辑递进结构,如‘形势判断 → 战略重心 → 指导思想 → 战略布局’。', 'completion_criteria': '每个部分之间有明确的逻辑衔接,且整体结构能被快速理解。', 'common_issues': '章节间缺乏逻辑连贯性,导致信息分散。', 'solutions': '使用思维导图工具提前梳理框架,确保每一部分都有明确的上下文关系。'}, {'step': 3, 'action': '优先展示核心结论,突出关键信息', 'output': '将最重要的判断和结论放在显眼位置(如开篇总结或章节开头),并辅以数据支持。', 'completion_criteria': '读者能在3分钟内抓住报告的核心观点和主要依据。', 'common_issues': '核心结论被埋没在细节中,导致信息传递效率低下。', 'solutions': '采用‘倒金字塔’结构,先呈现结论,再逐步展开论证和细节。'}, {'step': 4, 'action': '平衡定量与定性信息,合理分布历史与预测', 'output': '结合具体数据(如GDP增速、指数走势)和政策解读,同时涵盖历史背景与未来展望。', 'completion_criteria': '定量数据准确无误,定性分析有充分依据;历史与预测的比例适中,避免偏重某一方面。', 'common_issues': '数据冗长或缺乏解释,定性分析过于主观。', 'solutions': '为每个数据点添加简短注释,说明其意义;定性分析引用权威来源或政策文件作为支撑。'}, {'step': 5, 'action': '层层递进建立观点,提出风险因素并处理不确定性', 'output': '通过多层论证路径(如从数据到趋势,从趋势到政策影响)逐步建立观点,同时在适当时机引入风险提示。', 'completion_criteria': '观点建立过程清晰,风险提示不突兀且融入整体逻辑。', 'common_issues': '风险提示过早或过晚,影响整体流畅性。', 'solutions': '在论述正面趋势后,紧接着讨论潜在风险,保持逻辑连贯。'}, {'step': 6, 'action': '提供跨场景适应指导,优化语言表达与可视化', 'output': '根据不同受众调整语言风格(如专业术语 vs. 简化表述),并利用图表、表格增强信息传达效果。', 'completion_criteria': '报告内容易于理解,图表设计直观且相关。', 'common_issues': '图表过多或无关,语言晦涩难懂。', 'solutions': '每张图表附带简短说明,确保其直接支持文本内容;针对不同受众版本化报告。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:08:28", "modified_time": "2025-08-14 04:08:28", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "bc4a33fe1b444016a47543c67af441ef", "experience_type": "text", "when_to_use": "此规划框架适用于政策解读类金融分析任务,尤其是需要结合定量与定性方法进行深度解析的场景,例如中央政策会议解读、宏观经济形势研判、行业政策影响评估等。该框架也适合用于需要借助AI模型进行语义量化分析的任务。", "content": "[{'step': 1, 'action': '明确分析目标与核心问题', 'output': '形成清晰的研究问题和目标,例如本次任务中明确了‘捕捉下半年政策边际变化’的目标。', 'evaluation_criteria': '目标是否具体且可操作,是否能指导后续步骤。', 'common_issues': '目标过于宽泛或模糊,导致后续分析缺乏方向。', 'solution': '通过团队讨论或与客户沟通,细化研究问题并明确输出形式(如报告、图表等)。'}, {'step': 2, 'action': '收集并整理基础数据与文本材料', 'output': '获取政策原文、历史对比数据、市场相关指标等,例如本次任务中的政治局会议通稿、关键词词频统计、国债收益率数据等。', 'evaluation_criteria': '数据是否全面、准确,能否支持后续分析。', 'common_issues': '数据来源单一或不完整,导致分析结果可信度不足。', 'solution': '建立多渠道数据采集机制,确保数据覆盖广度和质量。'}, {'step': 3, 'action': '设计分析框架与方法论', 'output': '制定分析逻辑与工具使用方案,例如本次任务中采用‘国信自主量化’框架结合DeepSeek模型进行语义量化。', 'evaluation_criteria': '框架是否系统化,方法是否科学合理且可复用。', 'common_issues': '框架设计过于复杂或缺乏灵活性,难以适应不同任务需求。', 'solution': '参考过往成功案例,提炼通用分析框架,并根据具体任务微调。'}, {'step': 4, 'action': '执行定量分析与定性解读', 'output': '完成数据处理与模型运行,例如本次任务中的政策强度打分、关键词频次跟踪及趋势分析。', 'evaluation_criteria': '定量结果是否准确,定性解读是否深入且符合逻辑。', 'common_issues': '定量与定性部分脱节,未能有效结合。', 'solution': '在分析过程中保持两者的互动,用定量结果支撑定性结论,同时用定性解读解释定量异常。'}, {'step': 5, 'action': '构建章节结构与信息优先级', 'output': '组织报告内容,例如本次任务按‘事项-评论-风险提示’的顺序展开,突出核心结论(如政策基调转向‘提质促转型’)。', 'evaluation_criteria': '结构是否逻辑清晰,核心结论是否突出。', 'common_issues': '章节安排杂乱无章,重要信息被淹没。', 'solution': '采用金字塔原理,先呈现核心结论,再逐步展开细节。'}, {'step': 6, 'action': '平衡不同类型信息分布', 'output': '合理分配定量与定性、历史与预测信息的比例,例如本次任务中既有基于历史数据的环比同比分析,也有对未来政策方向的预测。', 'evaluation_criteria': '信息分布是否均衡,是否兼顾事实描述与前瞻判断。', 'common_issues': '过度依赖某一类信息,导致分析片面化。', 'solution': '设定各类型信息占比范围,确保分析全面性。'}, {'step': 7, 'action': '提出风险因素与不确定性管理', 'output': '识别潜在风险并提出应对建议,例如本次任务中提到的‘AI大模型的不稳健性’‘海外市场波动’等风险。', 'evaluation_criteria': '风险因素是否全面且切中要害,应对措施是否可行。', 'common_issues': '忽视风险或提出的应对措施空洞无物。', 'solution': '基于数据分析识别风险点,并结合专家经验提出具体解决方案。'}, {'step': 8, 'action': '撰写报告并优化可视化呈现', 'output': '生成最终报告,包括文字内容、图表和附录,例如本次任务中的词频统计图、政策得分趋势图等。', 'evaluation_criteria': '报告是否简洁易懂,图表是否直观美观。', 'common_issues': '文字冗长或图表混乱,影响阅读体验。', 'solution': '遵循‘少即是多’原则,精简文字,优化图表布局。'}, {'step': 9, 'action': '校对与审核', 'output': '完成报告校对,确保无语法错误、数据准确且逻辑严密。', 'evaluation_criteria': '报告是否无明显错误,是否达到专业水准。', 'common_issues': '忽略校对环节,导致低级错误频发。', 'solution': '设立独立审核流程,邀请同事或外部专家审阅。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:10:03", "modified_time": "2025-08-14 04:10:03", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "7e2332efc7af427697b185c4bcea2b6b", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、宏观经济分析、政策影响评估以及跨领域经济数据整合的报告撰写任务。特别适合包含定量与定性分析结合、历史数据分析与未来趋势预测的任务场景。", "content": "[{'step': 1, 'action': '明确核心主题和目标受众', 'output': '定义清晰的研究主题(如生育补贴政策对经济的影响)和目标受众(如机构投资者、政策制定者),确保内容逻辑服务于受众需求。', 'how_to_judge_completion': '主题是否聚焦,受众定位是否明确;可以通过检查报告标题、目录和开头段落确认。', 'common_issues_and_solutions': {'issue': '主题过于宽泛或模糊', 'solution': '在初期收集背景信息时,通过头脑风暴和问题清单缩小范围,确保每个章节都围绕核心主题展开。'}}, {'step': 2, 'action': '构建章节结构并分配信息优先级', 'output': '设计清晰的章节结构(如政策解读、行业分析、风险提示等),优先展示核心结论和关键数据,后续章节逐步展开详细分析。', 'how_to_judge_completion': '章节逻辑是否连贯,核心结论是否在前几页突出呈现;通过快速浏览目录和摘要即可获取主要观点。', 'common_issues_and_solutions': {'issue': '章节内容重复或信息分布不均', 'solution': '使用思维导图工具梳理各章节的核心要点,避免内容重叠,并确保每部分内容有独立的价值贡献。'}}, {'step': 3, 'action': '整合定量与定性信息,平衡历史与预测数据', 'output': '在每一章节中结合历史数据(如PMI指数变化)、当前政策(如生育补贴方案)和未来预测(如杠杆效应测算),并通过图表直观展示。', 'how_to_judge_completion': '数据是否充分支持观点,预测是否有合理依据;通过交叉验证数据来源和模型假设判断合理性。', 'common_issues_and_solutions': {'issue': '数据支撑不足或预测过于乐观', 'solution': '引入第三方权威数据源(如OECD统计数据)进行补充,并在预测部分明确列出假设条件和不确定性范围。'}}, {'step': 4, 'action': '层层递进建立论证逻辑', 'output': '从基础事实出发(如政策实施细节),逐步推导出短期和长期影响(如GDP拉动作用、人口增长预期),并在过程中引用相关案例或学术研究支持。', 'how_to_judge_completion': '论证路径是否清晰,观点是否有层次感;通过检查段落间的过渡句和总结句确认逻辑连贯性。', 'common_issues_and_solutions': {'issue': '论证跳跃过大或缺乏说服力', 'solution': '增加中间步骤的解释(如政策如何转化为具体经济行为),并通过引用权威文献提升可信度。'}}, {'step': 5, 'action': '适时提出风险因素并处理不确定性', 'output': '在报告后半部分单独设置风险提示章节,列举可能的风险点(如政策效果不及预期、外部经济环境恶化),并提供情景化分析应对多种可能性。', 'how_to_judge_completion': '风险讨论是否全面且具有前瞻性;通过对比其他类似报告的风险提示部分评估完整性。', 'common_issues_and_solutions': {'issue': '风险提示过于简略或忽略重要变量', 'solution': '采用SWOT分析法系统梳理潜在风险,并结合蒙特卡洛模拟等方法量化不确定性影响。'}}, {'step': 6, 'action': '制作可视化图表以增强信息传达效果', 'output': '为关键数据和结论设计高质量图表(如柱状图、折线图、回归分析图),并确保图表标题、注释和单位清晰易懂。', 'how_to_judge_completion': '图表是否直接支持核心观点,视觉呈现是否专业;通过非专业人士测试阅读反馈确认理解难度。', 'common_issues_and_solutions': {'issue': '图表复杂难以解读或信息冗余', 'solution': '遵循“一图一意”原则,去除不必要的装饰元素,只保留最核心的信息点。'}}, {'step': 7, 'action': '审阅与优化语言表达', 'output': '对全文进行语言润色,确保术语准确、表述简洁,并针对不同受众调整语言风格(如更通俗的语言面向大众媒体发布版本)。', 'how_to_judge_completion': '语言是否流畅且无歧义;通过同行评审或多轮校对发现并修正错误。', 'common_issues_and_solutions': {'issue': '术语过多导致理解困难', 'solution': '添加术语表或脚注解释专业词汇,同时用类比或比喻帮助读者理解复杂概念。'}}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:12:16", "modified_time": "2025-08-14 04:12:16", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "d273667ddf6b442a84f51a497bcdae42", "experience_type": "text", "when_to_use": "此规划框架适用于金融领域的深度分析任务,如利率走势预测、投资策略制定、宏观经济政策影响评估等。尤其适合需要结合定量与定性信息、平衡历史数据和未来预测的任务场景。", "content": "[{'step': 1, 'action': '明确核心观点与目标受众', 'output': \"清晰的核心观点陈述(如'10年期利率维持在特定走廊内波动')以及对目标受众需求的理解。\", 'how_to_judge_completion': '核心观点简洁明了,能够涵盖报告的主要结论,并符合目标受众的专业背景和关注点。', 'common_problems_and_solutions': [{'problem': '核心观点过于模糊或宽泛。', 'solution': '通过多次提炼和聚焦,确保观点具体且有实证支持。'}, {'problem': '忽略目标受众的需求差异。', 'solution': '在撰写前明确受众特征,例如机构投资者更注重政策解读,而个人投资者可能更关注市场情绪。'}]}, {'step': 2, 'action': '组织章节结构并分配信息优先级', 'output': '按照逻辑递进的顺序安排章节,例如从宏观背景到具体分析再到风险提示。', 'how_to_judge_completion': '章节结构层次分明,信息展示由浅入深,优先呈现核心结论和关键数据。', 'common_problems_and_solutions': [{'problem': '章节结构混乱,导致读者难以抓住重点。', 'solution': \"采用'问题-分析-解决'的经典逻辑框架,确保每一部分都有明确的目标。\"}, {'problem': '信息堆砌过多,缺乏筛选和优先级排序。', 'solution': '根据受众需求和分析目标,剔除非必要信息,突出关键论据和结论。'}]}, {'step': 3, 'action': '整合定量与定性信息,形成论证链条', 'output': '通过历史数据验证理论模型,同时结合定性分析解释潜在驱动因素(如政策预期、市场情绪)。', 'how_to_judge_completion': '论证过程严谨,定量数据支撑定性判断,且两者之间的关联清晰可追溯。', 'common_problems_and_solutions': [{'problem': '定量分析与定性分析脱节,无法有效互证。', 'solution': '确保每项定性分析都有对应的定量数据支持,反之亦然。'}, {'problem': '数据分析过于复杂,超出目标受众理解范围。', 'solution': '简化复杂模型,使用图表直观展示关键结果,并辅以简明的文字说明。'}]}, {'step': 4, 'action': '引入风险提示并处理不确定性', 'output': '列出主要风险因素及其可能的影响路径,同时讨论多种可能性及应对策略。', 'how_to_judge_completion': '风险提示全面且具有前瞻性,未遗漏重大风险;不确定性的处理方式合理,避免过度悲观或乐观。', 'common_problems_and_solutions': [{'problem': '风险提示流于形式,缺乏实际意义。', 'solution': '针对每个风险因素提供具体的触发条件和潜在后果分析。'}, {'problem': '忽视不确定性,导致结论过于单一。', 'solution': '引入情景分析,探讨不同假设下的可能结果,并提出灵活应对方案。'}]}, {'step': 5, 'action': '总结与展望,形成闭环', 'output': '回顾核心结论,强调其现实意义,并为下一步行动提供建议。', 'how_to_judge_completion': '总结部分呼应开头,强化核心观点,同时给出明确的后续行动计划或观察指标。', 'common_problems_and_solutions': [{'problem': '总结内容空洞,未能有效提升报告价值。', 'solution': '将总结作为升华全篇的机会,提炼出最具操作性的建议。'}, {'problem': '缺乏对未来趋势的预判,显得被动。', 'solution': '基于现有分析,推测未来可能的变化方向,并提出动态调整策略。'}]}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:13:36", "modified_time": "2025-08-14 04:13:36", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "8b08fe9e1a684c44a62af4091ac968d7", "experience_type": "text", "when_to_use": "适用于宏观经济分析、行业深度研究、投资策略报告等需要结合定量与定性信息的任务。尤其适合涉及政策解读、经济指标分析和市场趋势预测的场景。", "content": "[{'step': 1, 'action': '明确分析目标与核心问题', 'output': '清晰定义报告的核心关注点,例如本次分析的核心问题是“PMI数据变化对经济的影响”。', 'completion_criteria': '核心问题被明确界定,并能够指导后续章节结构设计。', 'common_issues': '目标过于宽泛或模糊,导致分析重点分散。', 'solutions': '通过团队讨论或客户沟通,聚焦于最紧迫的经济或市场问题。'}, {'step': 2, 'action': '收集并整理基础数据', 'output': '获取权威来源的关键数据(如官方PMI指数、高频数据),并按类别整理(如生产、需求、库存、价格等)。', 'completion_criteria': '数据完整且分类清晰,能够支持后续分项指标的深入解读。', 'common_issues': '数据来源不权威或数据覆盖不全面。', 'solutions': '优先选择国家统计局、Wind等权威渠道,确保数据时效性和准确性。'}, {'step': 3, 'action': '构建章节结构以突出逻辑递进', 'output': '按照“总-分-总”模式组织内容:开头概述整体趋势,中间分解为供需、库存、非制造业等具体领域,最后总结经济压力及政策展望。', 'completion_criteria': '章节结构层次分明,信息展示符合从宏观到微观的递进逻辑。', 'common_issues': '章节间逻辑断裂或重复,影响阅读流畅性。', 'solutions': '在撰写前绘制思维导图,确保各部分既独立又相互关联。'}, {'step': 4, 'action': '优先展示核心结论', 'output': '开篇直接呈现关键数据(如PMI指数及其变化),并结合预期值说明主要趋势(如“小幅回落”、“经济压力加大”)。', 'completion_criteria': '读者能在第一段快速把握报告主旨,无需翻阅全文即可了解核心观点。', 'common_issues': '核心结论埋藏在细节中,未及时传递给读者。', 'solutions': '采用倒金字塔写作法,将最重要信息放在最前面。'}, {'step': 5, 'action': '平衡定量与定性信息', 'output': '在每个分项指标中,先列出具体数值变化,再辅以定性描述(如“供需两端放缓”、“关税负面影响显现”)。', 'completion_categories': '定量数据与定性分析相辅相成,共同支撑观点。', 'common_issues': '过度依赖某一类信息,导致论证单薄。', 'solutions': '设定比例限制,例如每段至少包含一个核心数据点和一段解释性文字。'}, {'step': 6, 'action': '引入风险因素并提出应对策略', 'output': '在分析经济下行压力时,提及潜在风险(如“抢出口透支效应”、“内需走弱”),同时给出政策建议(如“托而不举”)。', 'completion_criteria': '风险因素被充分识别,并提供可行的应对措施。', 'common_issues': '忽略风险或提出的解决方案缺乏操作性。', 'solutions': '结合历史案例和当前政策环境,提出具体且可实施的建议。'}, {'step': 7, 'action': '处理不确定性和多种可能性', 'output': '针对未来走势,列举多种情景假设(如“经贸谈判进展顺利/恶化”),并评估其概率和影响。', 'completion_criteria': '不确定性被坦诚面对,且不同情景下的应对策略清晰。', 'common_issues': '对不确定性避而不谈或过于乐观/悲观。', 'solutions': '使用概率语言(如“可能”、“大概率”)表达不确定性,并引用多方观点增强说服力。'}, {'step': 8, 'action': '添加可视化图表以辅助理解', 'output': '插入相关图表(如PMI趋势图、分项指标柱状图),并将图表与正文内容紧密结合。', 'completion_criteria': '图表直观易懂,且与文本论述形成互补。', 'common_issues': '图表冗余或与正文脱节。', 'solutions': '仅保留能显著提升信息传达效率的图表,并在正文中明确指向图表内容。'}, {'step': 9, 'action': '审校与优化语言表达', 'output': '检查报告的语言是否简洁专业,避免冗长句式或歧义表述。', 'completion_criteria': '报告语言精炼,术语使用准确,无明显语法错误。', 'common_issues': '语言晦涩难懂或存在低级错误。', 'solutions': '邀请同行评审,并利用工具进行语法校验。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:15:08", "modified_time": "2025-08-14 04:15:08", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "d4a2e34085df46389037100210b1af17", "experience_type": "text", "when_to_use": "此规划框架适用于宏观经济政策分析、行业深度研究及资本市场趋势解读等任务。尤其适合需要结合定量数据与定性分析,对政策方向、市场预期和风险因素进行综合评估的场景。", "content": "[{'step': 1, 'action': '明确核心观点和报告目标', 'output': '形成一段简洁的核心观点总结,直接点明报告的主要结论和政策信号。', 'completion_criteria': '核心观点应清晰、简练,并能概括全文重点;判断标准是读者仅通过核心观点即可快速了解报告主旨。', 'common_issues': ['核心观点过于冗长或模糊', '缺乏明确的结论导向'], 'solutions': ['提炼关键信息,避免过多细节', '确保观点与后续章节内容高度一致']}, {'step': 2, 'action': '构建章节结构并分配优先级', 'output': '设计一个逻辑清晰的目录,按重要性和递进关系排列章节内容,确保从宏观到微观逐步展开。', 'completion_criteria': '章节安排合理,能够引导读者从整体到细节逐步深入理解;每个章节有明确的主题和信息分布。', 'common_issues': ['章节间逻辑不连贯', '信息堆砌而无层次感'], 'solutions': ['在编写前绘制思维导图,明确各章节间的逻辑关系', '每章开头用一句话概述本章重点']}, {'step': 3, 'action': '整合定量与定性信息,形成论证基础', 'output': '使用图表、数据和政策表述支持核心观点,确保历史数据与预测分析相结合。', 'completion_criteria': '定量信息准确且来源可靠,定性分析逻辑严密;图表与正文内容相辅相成,增强说服力。', 'common_issues': ['数据陈旧或来源不可靠', '定性分析缺乏政策依据'], 'solutions': ['优先选择权威机构发布的最新数据', '引用官方文件或权威媒体作为定性分析支撑']}, {'step': 4, 'action': '层层递进建立论证逻辑', 'output': '按照总分结构展开论述,先提出总体判断,再通过具体事实和数据逐一验证。', 'completion_criteria': '论证过程条理清晰,逻辑链条完整;每一步推导都有充分的事实依据。', 'common_issues': ['论证跳跃性强,缺乏过渡', '忽略反向假设或不确定性'], 'solutions': ['在每段落之间增加过渡句,保持流畅性', '主动讨论潜在风险和多种可能性']}, {'step': 5, 'action': '适时引入风险提示,平衡乐观预期', 'output': '在报告末尾专门设置“风险提示”部分,列出可能影响结论实现的关键风险因素。', 'completion_criteria': '风险提示全面且具有针对性,既不过度悲观也不避重就轻;语言表达中立客观。', 'common_issues': ['风险提示过于笼统', '未充分考虑外部环境变化'], 'solutions': ['针对不同风险分类阐述,提供具体应对建议', '定期更新外部动态以补充风险评估']}, {'step': 6, 'action': '撰写总结并优化呈现方式', 'output': '制作精炼的摘要、图表目录和附录,方便读者快速获取核心信息。', 'completion_criteria': '报告结构紧凑,内容易于检索;图表和文字比例适当,视觉效果良好。', 'common_issues': ['摘要冗长,无法突出重点', '图表设计复杂难懂'], 'solutions': ['将摘要控制在3-5句话内,直击要点', '简化图表设计,突出关键数据']}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:16:33", "modified_time": "2025-08-14 04:16:33", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "fd58a598dad54327b1efb75f65a0435a", "experience_type": "text", "when_to_use": "适用于宏观经济和行业动态分析、政策影响评估、投资策略制定等任务,特别是需要结合国内外经济数据、政策变化及市场趋势的综合性金融分析。", "content": "[{'step': 1, 'action': '明确分析目标与范围', 'output': '确定报告的核心主题(如国内政策解读、海外经济动态)和覆盖的时间段(如一周大事记、月度数据点评)。', 'criteria_for_completion': '主题清晰,时间范围明确,能够指导后续章节设计和数据收集。', 'common_issues': '分析目标过于宽泛或模糊,导致内容组织散乱。', 'solutions': '在初步规划阶段与团队讨论并确认核心问题和受众需求。'}, {'step': 2, 'action': '构建结构化的章节框架', 'output': '将报告分为逻辑清晰的章节,比如‘一周大事记’、‘高频数据’、‘下周重点关注’,确保各部分信息有序呈现。', 'criteria_for_completion': '章节划分合理,每部分有明确的内容定位,且整体叙述流畅。', 'common_issues': '章节之间存在重复或脱节现象,影响阅读体验。', 'solutions': '采用思维导图工具提前规划章节关系,避免内容重叠,并通过过渡句增强连贯性。'}, {'step': 3, 'action': '优先展示关键结论与核心观点', 'output': '在每个子主题开头直接提出主要发现或判断(如‘工业企业利润同比有望止跌企稳’),然后展开详细论述。', 'criteria_for_completion': '核心结论突出,读者能快速抓住重点,同时支持论据充分。', 'common_issues': '过多背景铺垫掩盖了核心结论,降低了可读性。', 'solutions': '遵循“结论先行”原则,在撰写时先列出要点再补充细节。'}, {'step': 4, 'action': '平衡定量与定性信息的比例', 'output': '结合具体数据(如GDP增长率、CPI变化)与专家解读(如政策效果预测),使分析既具实证基础又富洞察力。', 'criteria_for_completion': '定量数据准确且来源可靠,定性分析逻辑严密并与数据相互印证。', 'common_issues': '过度依赖单一类型信息,导致分析缺乏全面性。', 'solutions': '建立标准化模板,要求每部分内容都包含一定比例的定量与定性内容。'}, {'step': 5, 'action': '引入风险因素并适时提示不确定性', 'output': '在适当位置(如政策实施效果展望或海外市场前景)提及潜在风险(如欧盟内部分歧、通胀压力增大),并说明其可能的影响路径。', 'criteria_for_completion': '风险提示及时且客观,未夸大也未忽视潜在威胁。', 'common_issues': '风险因素被忽略或处理不当,削弱报告权威性。', 'solutions': '设立专门环节审查风险点,确保所有重大假设均经过验证。'}, {'step': 6, 'action': '整合图表与文字描述以提升可视化效果', 'output': '插入高频数据表、趋势图等辅助材料(如布伦特原油价格走势图),帮助读者直观理解复杂数据。', 'criteria_for_completion': '图表设计简洁明了,与文字描述相辅相成,无冗余信息。', 'common_issues': '图表过多或过少,难以有效支撑文本内容。', 'solutions': '根据内容复杂度选择合适的图表数量,并统一风格以保持专业感。'}, {'step': 7, 'action': '总结未来关注焦点与行动建议', 'output': '列出短期内值得关注的关键事件(如下周重要经济数据发布)及相应的操作指引(如调整资产配置策略)。', 'criteria_for_completion': '总结言简意赅,建议切实可行,便于决策参考。', 'common_issues': '总结流于形式,未能提炼出真正有价值的行动方向。', 'solutions': '邀请资深分析师参与最终审稿,确保总结部分紧扣核心议题。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:17:46", "modified_time": "2025-08-14 04:17:46", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "18c0f851c95a4400979d833ccc0e2594", "experience_type": "text", "when_to_use": "适用于宏观经济和金融市场的深度分析任务,尤其是涉及货币政策预测、就业数据解读、资产价格影响评估等场景。此框架特别适合包含定量与定性信息结合的复杂分析,例如美联储政策展望、劳动市场数据分析以及基于多维度经济指标的投资建议。", "content": "[{'step': 1, 'action': '明确分析目标并定义核心问题', 'output': '形成清晰的研究问题或假设,例如‘当前劳动数据是否支持9月降息’。', 'completion_criteria': '研究问题具体化,能够直接指导后续数据分析方向。', 'common_issues': '问题过于宽泛或模糊,导致后续分析缺乏聚焦点。', 'solutions': '通过团队讨论或客户反馈细化问题范围,确保研究目标可操作且具有实际意义。'}, {'step': 2, 'action': '收集并整理相关数据,包括定量和定性信息', 'output': '生成一份全面的数据清单,涵盖关键经济指标(如非农就业、失业率、薪资增速)及背景信息(如季节性调整、问卷回收率)。', 'completion_criteria': '数据覆盖所有相关领域,来源可靠且标注清晰。', 'common_issues': '数据遗漏或质量不足,可能导致结论偏颇。', 'solutions': '采用多源验证法,交叉核对官方统计数据与其他独立来源;提前识别潜在数据质量问题并记录疑点。'}, {'step': 3, 'action': '组织章节结构,优先展示核心结论', 'output': '设计报告框架,将最重要的发现放在开头部分,随后按逻辑顺序展开详细分析。', 'completion_criteria': '读者能够在前几段快速理解主要观点及其依据。', 'common_issues': '信息堆砌无序,核心结论被次要细节淹没。', 'solutions': '使用倒金字塔写作原则,先呈现关键结论,再逐步深入解释支撑论据。'}, {'step': 4, 'action': '分解数据趋势并进行对比分析', 'output': '提供图表和文字说明,揭示数据变化背后的驱动因素,例如新增就业下修的主要原因。', 'completion_criteria': '每个数据点的变化都有合理解释,且与整体逻辑一致。', 'common_issues': '忽略异常值或未能充分解释数据波动。', 'solutions': '针对显著异常值单独设立小节剖析,引用专家观点或历史案例增强说服力。'}, {'step': 5, 'action': '构建多层次论证路径,从宏观到微观递进阐述', 'output': '通过层层递进的方式,从经济增长动能弱化到劳动市场表现,再到资产价格反应,搭建完整的逻辑链条。', 'completion_criteria': '每一步推导均建立在前一步基础上,逻辑连贯。', 'common_issues': '论证跳跃过大,缺乏过渡性连接。', 'solutions': '引入过渡句或段落,确保各部分之间自然衔接;适当增加背景知识介绍以帮助读者理解。'}, {'step': 6, 'action': '适时提出风险因素,强调不确定性和多种可能性', 'output': '列出可能影响结论的风险因素,并探讨不同情境下的结果分布。', 'completion_criteria': '风险提示全面且不偏颇,避免过度乐观或悲观。', 'common_issues': '风险提示不足或过于笼统,削弱报告可信度。', 'solutions': '分类列举风险因素,并提供具体应对策略;参考同行研究补充盲点。'}, {'step': 7, 'action': '平衡定量与定性信息,优化信息展示方式', 'output': '利用图表、表格等形式直观呈现定量数据,同时辅以定性分析阐释其意义。', 'completion_criteria': '信息展示形式多样但不冗余,便于读者快速获取关键信息。', 'common_issues': '过分依赖某一类信息,导致内容失衡。', 'solutions': '定期检查各类信息占比,必要时调整篇幅分配;邀请外部审阅者提供建设性意见。'}, {'step': 8, 'action': '总结核心观点并给出行动建议', 'output': '提炼出简明扼要的结论,并为决策者提供具体操作指南。', 'completion_criteria': '结论明确,建议可行性强,能直接应用于实践。', 'common_issues': '结论空洞或建议脱离实际。', 'solutions': '结合行业经验和客户需求制定建议;多次迭代完善语言表达。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:19:15", "modified_time": "2025-08-14 04:19:15", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "a3592de638374c0aa7ef7c41922c1d71", "experience_type": "text", "when_to_use": "适用于短期市场分析、投资标的分析、行业动态跟踪等需要快速响应的任务。", "content": "[{'step': 1, 'action': '明确市场现象,提炼核心结论', 'output': '一段简短的文字,概述当前市场表现及初步判断。', 'completion_criteria': '能够用一句话概括市场现状,并提出核心结论。', 'common_issues': ['核心结论模糊', '缺乏量化支持'], 'solutions': ['确保结论具体且有数据支撑', '避免过多技术术语']}, {'step': 2, 'action': '分析宏观背景,解释现象成因', 'output': '对国内外宏观经济事件的解读,说明其对市场的直接影响。', 'completion_criteria': '宏观分析与市场现象之间存在明确因果关系。', 'common_issues': ['宏观分析过于宽泛', '与市场脱节'], 'solutions': ['聚焦关键事件', '结合具体市场数据']}, {'step': 3, 'action': '深挖基本面,验证核心结论', 'output': '详细的供需分析,包括定量数据和定性判断。', 'completion_criteria': '基本面分析能有效支撑核心结论。', 'common_issues': ['数据陈旧', '忽略潜在变量'], 'solutions': ['引用最新权威数据', '考虑多种情景']}, {'step': 4, 'action': '综合评估,提出未来展望', 'output': '对未来趋势的预测,以及短期内的关键观察点。', 'completion_criteria': '展望具备合理性和操作指导意义。', 'common_issues': ['展望空洞无依据', '忽略反向可能性'], 'solutions': ['基于现有分析推导', '列举多情景假设']}, {'step': 5, 'action': '列出风险因素,完善报告完整性', 'output': '分类列出下行和上行风险,并简要说明触发条件。', 'completion_criteria': '风险提示覆盖全面且条理清晰。', 'common_issues': ['遗漏重要风险', '表述含糊'], 'solutions': ['参考历史案例', '采用标准化格式']}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:20:59", "modified_time": "2025-08-14 04:20:59", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "9163e78a73b24ab99c814b126893a1fe", "experience_type": "text", "when_to_use": "适用于行业深度研究、政策导向型投资分析、跨部门协同规划解读等任务,尤其在五年规划或长期战略分析中具有较高的适用性。", "content": "[{'step': 1, 'action': '明确分析目标和时间框架', 'output': '确定报告的核心目标(如解析‘十五五’规划的产业趋势)及时间节点(如2024-2026年的规划进度)。', 'how_to_judge_completion': '核心目标是否清晰,时间节点是否与实际政策推进节奏一致。', 'common_issues': '目标过于宽泛或时间节点不明确。', 'solutions': '通过政策文件和历史数据锁定关键主题,梳理官方发布的具体时间表。'}, {'step': 2, 'action': '收集并整理多源信息', 'output': '汇总来自各部委、地方政府、国际组织的公开课题、政策文件及相关统计数据。', 'how_to_judge_completion': '信息覆盖全面,来源权威且无重大遗漏。', 'common_issues': '信息冗余或关键数据缺失。', 'solutions': '使用关键词检索和交叉验证方法筛选高相关性内容,并标注数据来源以确保可靠性。'}, {'step': 3, 'action': '构建逻辑框架和章节结构', 'output': '设计报告的整体结构,包括宏观背景、细分领域分析、区域差异解读、未来方向预测等模块。', 'how_to_judge_completion': '章节安排合理,层次分明,能够引导读者逐步深入理解主题。', 'common_issues': '章节间逻辑断裂或重点偏移。', 'solutions': '根据信息优先级调整章节顺序,确保核心结论贯穿全文。'}, {'step': 4, 'action': '定量与定性结合分析', 'output': '对历史数据进行量化分析(如GDP增长率、研发投入占比),同时结合定性描述(如政策导向、技术突破点)形成综合判断。', 'how_to_judge_completion': '定量数据支持定性推论,两者相辅相成。', 'common_issues': '数据孤立或缺乏解释。', 'solutions': '为每个关键数据提供上下文说明,并用图表直观呈现趋势变化。'}, {'step': 5, 'action': '识别风险因素并提出应对策略', 'output': '列出潜在风险(如政策不确定性、国际市场波动),并针对每项风险给出缓解方案。', 'how_to_judge_completion': '风险因素覆盖全面,应对措施切实可行。', 'common_issues': '忽视次要但可能爆发的风险。', 'solutions': '采用情景模拟法评估不同可能性,确保预案多样化。'}, {'step': 6, 'action': '提炼核心结论并突出展示', 'output': '总结关键发现(如重点关注科技、金融、农业、能源四大领域),并通过摘要、图示等方式强化表达效果。', 'how_to_judge_completion': '核心结论简洁有力,易于记忆和传播。', 'common_issues': '结论模糊或过于复杂。', 'solutions': '运用金字塔原理提炼要点,确保信息传递高效。'}, {'step': 7, 'action': '撰写附录和免责声明', 'output': '补充详细数据表格、参考文献及法律声明,增强报告的专业性和可信度。', 'how_to_judge_completion': '附录内容详实,免责声明符合监管要求。', 'common_issues': '附录内容杂乱或免责条款不充分。', 'solutions': '分类整理附录资料,定期更新合规条款模板。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:22:04", "modified_time": "2025-08-14 04:22:04", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "5ac6c898375042ba82ca47b54288f4f2", "experience_type": "text", "when_to_use": "适用于行业深度研究、政策对经济影响的分析、关税或贸易政策对微观经济传导的研究,以及宏观经济与微观企业/消费者行为交叉分析的场景。此框架尤其适合在数据有效性受到挑战时,通过结合宏观和微观视角进行综合推导的研究任务。", "content": "[{'step': 1, 'action': '明确研究目标和核心问题', 'output': '定义清晰的研究主题和方向,例如‘美国关税政策对物价传导的影响’。', 'completion_criteria': '能够用一句话概括研究的核心问题,并确定其对投资者或决策者的实际意义。', 'common_issues': '研究目标过于宽泛或模糊。', 'solutions': '通过团队讨论或客户反馈,聚焦于一个具体且有实际应用价值的问题。'}, {'step': 2, 'action': '构建章节结构并分配信息优先级', 'output': '设计报告的逻辑框架,包括宏观现状、微观线索、展望及风险提示等部分。', 'completion_criteria': '每个章节都有明确的信息承载功能,且章节间逻辑连贯。', 'common_issues': '章节内容重复或信息分布不均。', 'solutions': '根据信息类型(定量/定性、历史/预测)合理分配章节篇幅,确保层次分明。'}, {'step': 3, 'action': '收集并整理定量数据', 'output': '从权威来源获取相关数据,如海关数据、企业财报、消费品价格跟踪等,并进行初步计算和趋势分析。', 'completion_criteria': '数据覆盖全面且计算准确,能够支持后续分析。', 'common_issues': '数据来源不可靠或数据缺失。', 'solutions': '优先选择官方或权威第三方数据源,并对缺失数据进行合理假设或补充说明。'}, {'step': 4, 'action': '结合定性分析补充定量数据', 'output': '利用草根调研、专家访谈、企业声明等方式,验证和丰富定量数据的结论。', 'completion_criteria': '定性分析能解释定量数据中的异常点或趋势变化。', 'common_issues': '定性分析缺乏实证支持。', 'solutions': '确保定性分析引用的事实或案例具有代表性,并与定量数据形成互补。'}, {'step': 5, 'action': '建立多层次论证逻辑', 'output': '从政策维度、行业维度、企业维度到消费者维度,逐层递进分析关税影响。', 'completion_criteria': '每层论证都围绕核心问题展开,且逻辑链条完整。', 'common_issues': '论证跳跃过大,缺乏过渡。', 'solutions': '使用图表、案例或具体数据作为论据,增强逻辑连贯性。'}, {'step': 6, 'action': '识别和评估不确定性与风险', 'output': '列出可能的风险因素(如国际局势复杂化、流动性收紧),并评估其对主要结论的影响。', 'completion_criteria': '风险因素被充分考虑,且有应对策略建议。', 'common_issues': '忽略潜在风险或低估其影响。', 'solutions': '邀请外部专家审阅报告,或参考类似情境下的历史经验。'}, {'step': 7, 'action': '总结核心结论并提出行动建议', 'output': '提炼关键洞察,形成简洁明了的核心结论,并为投资者或决策者提供可操作的建议。', 'completion_criteria': '核心结论突出且易于理解,行动建议具体可行。', 'common_issues': '结论冗长或建议空泛。', 'solutions': '通过模拟读者反馈优化结论表述,确保语言精炼且直击要点。'}, {'step': 8, 'action': '制作可视化材料辅助表达', 'output': '将复杂数据转化为直观的图表(如时间序列图、对比柱状图等),并在报告中嵌入。', 'completion_criteria': '图表清晰美观,能有效传递信息。', 'common_issues': '图表过多导致信息过载,或图表质量不高。', 'solutions': '控制图表数量,仅保留最能支撑观点的部分,并统一风格提升专业感。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:23:25", "modified_time": "2025-08-14 04:23:25", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "422c3f8da2ce47c5b67b6970af57c671", "experience_type": "text", "when_to_use": "此规划框架适用于宏观金融分析、行业深度研究、投资策略报告以及政策影响评估等任务。尤其适合需要整合多维度信息(如宏观经济数据、政策动态、市场情绪)并形成明确投资建议的场景。", "content": "[{'step': 1, 'action': '明确报告目标与核心问题', 'output': \"确定报告的核心主题和关键问题,例如本次报告围绕'短期情绪反复,商品高位波动加大'展开,聚焦于国内外经济形势及政策变化对市场的潜在影响。\", 'how_to_judge_completion': '是否清晰定义了核心议题,并能用一句话概括报告的目标。', 'common_issues': '目标过于宽泛或模糊,导致后续分析缺乏焦点。', 'solutions': '通过团队讨论或客户沟通明确最紧迫的问题,确保目标具体且可操作。'}, {'step': 2, 'action': '收集和整理相关数据与信息', 'output': '系统性地搜集定量数据(如GDP增长率、PMI指数、就业数据)和定性信息(如政策声明、市场情绪),并按主题分类归档,例如海外经济、国内经济、专题分析等。', 'how_to_judge_completion': '数据覆盖全面且来源可靠,能够支持后续分析;信息分类逻辑清晰。', 'common_issues': '数据遗漏重要变量或信息来源不可靠。', 'solutions': '建立固定的数据源清单,定期更新并交叉验证数据质量。'}, {'step': 3, 'action': '构建章节结构并安排优先级', 'output': '根据信息的重要性和逻辑递进关系设计章节结构。例如,先分析海外经济(关税、美联储政策、非农数据),再转向国内经济(PMI、政治局会议),最后得出综合结论。', 'how_to_judge_completion': '章节安排合理,符合从宏观到微观、从外部到内部的逻辑顺序;核心结论在开头部分突出。', 'common_issues': '章节之间逻辑不连贯,或核心结论被埋没在细节中。', 'solutions': '采用倒金字塔结构,优先呈现最重要的结论,再逐步展开详细分析。'}, {'step': 4, 'action': '展开分项分析并提出假设', '输出': '针对每个子主题进行深入分析,结合数据和图表说明现状、趋势和潜在风险。例如,在分析美国关税政策时,列出税率清单并探讨其对贸易的影响;在分析非农数据时,解读新增就业人数下降的原因及其经济意义。', 'how_to_judge_completion': '每项分析都有充分的数据支撑,观点清晰且有逻辑推导过程;图表与文字内容高度匹配。', 'common_issues': '分析流于表面,缺乏深度或过度依赖单一数据点。', 'solutions': '引入对比分析方法,将当前数据与历史趋势、市场预期进行比较,增强说服力。'}, {'step': 5, 'action': '平衡不同类型信息的分布', 'output': '在定量与定性、历史与预测之间保持平衡。例如,既展示过去几个月的非农就业数据,又基于当前趋势预测未来失业率的变化;既引用官方政策文件,又结合专家观点补充解读。', 'how_to_judge_completion': '定量与定性信息比例适中,预测内容有依据且不过度夸大不确定性。', 'common_issues': '过度依赖定量数据而忽略定性分析,或反之。', 'solutions': '制定标准模板,确保每类信息占据适当篇幅,并辅以案例说明其实际意义。'}, {'step': 6, 'action': '识别并处理风险因素', 'output': '适时引入风险因素讨论,避免过早或过晚提及。例如,在分析美国经济韧性后指出劳动力市场走软的风险;在国内经济分析中强调下半年下行压力。', 'how_to_judge_completion': '风险因素得到全面覆盖,且与上下文紧密衔接;表述客观中立,未引发不必要的恐慌。', 'common_issues': '风险描述过于笼统或偏离主题。', 'solutions': '使用具体数据和场景模拟来量化风险,并提供应对建议。'}, {'step': 7, 'action': '总结核心结论并提供建议', 'output': \"提炼出具有行动指导意义的核心结论。例如,本次报告总结为'短期情绪反复,商品高位波动加大',并建议关注既有政策落实情况及未来增量政策出台的可能性。\", 'how_to_judge_completion': '核心结论简洁明了,建议切实可行;读者能够快速抓住重点。', 'common_issues': '结论冗长或建议空洞无物。', 'solutions': '通过问答形式测试结论的实用性,确保每条建议都能直接应用于决策。'}, {'step': 8, 'action': '审阅与优化表达', 'output': '检查语言是否精炼准确,图表是否直观易懂,格式是否统一规范。例如,调整表格布局使其更易读,修正术语错误以提升专业性。', 'how_to_judge_completion': '文档整体风格一致,无明显语法或排版错误;图表标注清晰。', 'common_issues': '语言啰嗦或图表复杂难懂。', 'solutions': '邀请同事或外部专家进行交叉审阅,收集反馈意见并改进。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:24:40", "modified_time": "2025-08-14 04:24:40", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "47515e88b1f14b9aab70e000e950bb3b", "experience_type": "text", "when_to_use": "该规划框架适用于宏观经济分析、行业深度研究、季度经济预测报告以及政策影响评估等场景。尤其适合需要结合定量与定性数据进行综合判断的任务,例如GDP预测、通胀分析、社融信贷趋势评估等。", "content": "[{'step': 1, 'action': '明确分析目标和范围', 'output': '清晰界定报告的核心主题(如三季度宏观经济展望)及需覆盖的关键指标(如GDP、CPI、工业增加值等),并列出数据需求清单。', 'completion_criteria': '是否明确了所有关键变量及其对应的分析维度;是否列出了所需数据来源。', 'common_issues': '目标过于宽泛或缺乏具体指标;数据需求不明确。', 'solutions': '通过团队讨论细化目标,并提前整理历史数据以确认所需信息的完整性。'}, {'step': 2, 'action': '收集和整理高频及低频数据', 'output': '从公开数据库(如Wind)、政府统计报告或其他权威渠道获取历史数据和最新高频数据(如PMI、港口吞吐量等),并对数据进行清洗和标准化处理。', 'completion_criteria': '数据是否完整且经过验证;是否有异常值被标记和处理。', 'common_issues': '数据缺失或格式不统一;未及时更新最新数据。', 'solutions': '建立自动化数据采集脚本,定期检查数据质量,并设置数据审核流程。'}, {'step': 3, 'action': '构建逻辑框架并组织章节结构', 'output': '根据分析目标设计报告框架,优先展示核心结论,随后按逻辑顺序展开各分项分析(如工业增加值→社零→固定资产投资→贸易→通胀→GDP→社融信贷)。', 'completion_criteria': '章节安排是否符合逻辑递进关系;核心结论是否突出。', 'common_issues': '章节之间逻辑断裂;次要信息喧宾夺主。', 'solutions': '使用思维导图工具梳理整体框架,确保每部分服务于最终结论。'}, {'step': 4, 'action': '逐项分析并提出假设', 'output': '针对每个关键变量(如CPI、PPI、出口同比增速等),结合高频数据和定性因素(如政策变化、天气扰动)提出合理假设,并计算预测值。', 'completion_criteria': '假设是否基于充分证据支持;预测结果是否具有一致性和合理性。', 'common_issues': '假设脱离实际或缺乏依据;忽略重要外部变量。', 'solutions': '引入专家评审机制,对假设进行多轮验证,同时参考同行研究成果。'}, {'step': 5, 'action': '平衡定量与定性信息', 'output': '在分析中穿插图表(如PMI季节性比较图)与文字描述,既展现数据趋势,又解释背后驱动因素(如“反内卷”政策对大宗商品价格的影响)。', 'completion_criteria': '图表是否直观易懂;定性分析是否补充了定量数据的不足。', 'common_issues': '图表冗余或难以解读;定性分析流于表面。', 'solutions': '优化图表设计,减少冗余信息;深入挖掘数据背后的经济逻辑。'}, {'step': 6, 'action': '识别风险因素并提出应对策略', 'output': '在适当位置(通常为报告后半段)讨论潜在风险(如政策不确定性、海外地缘政治风险),并给出可能的情景分析。', 'completion_criteria': '风险因素是否全面且具有针对性;情景分析是否覆盖主要可能性。', 'common_issues': '风险提示过于笼统;未提供具体的应对建议。', 'solutions': '采用SWOT分析法系统梳理风险点,并制定分级预警机制。'}, {'step': 7, 'action': '撰写总结与展望', 'output': '提炼核心观点,概括未来趋势,并为决策者提供简明扼要的操作建议(如“预计三季度GDP同比约4.9%,建议关注消费和基建支撑作用”)。', 'completion_criteria': '总结是否精炼准确;建议是否具备可操作性。', 'common_issues': '总结冗长或偏离重点;建议空洞无物。', 'solutions': '邀请非专业读者审阅总结部分,确保语言通俗易懂且直击要害。'}, {'step': 8, 'action': '校验与发布', 'output': '完成初稿后,由团队成员交叉校验数据准确性、逻辑连贯性和表达规范性,最终生成正式版本。', 'completion_criteria': '报告是否无明显错误;格式是否符合公司标准。', 'common_issues': '校验环节遗漏错误;排版不符合要求。', 'solutions': '实施双人复核制度,确保每一环节都经过严格审查。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:25:53", "modified_time": "2025-08-14 04:25:53", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "3206313f44b34c8aa197597656fc8531", "experience_type": "text", "when_to_use": "此规划框架适用于需要对宏观经济政策(如央行货币政策会议)进行深度解读,并结合市场反应和未来展望的分析任务,例如:行业深度研究、投资标的分析、资产配置建议报告或风险评估报告等。尤其适合在面对复杂信息环境时,需将定量与定性分析相结合,并平衡短期波动与长期趋势的情境。", "content": "[{'step': 1, 'action': '明确分析目标和核心问题', 'output': '清晰的目标陈述,包括本次分析的核心关注点(如美联储政策声明的影响、市场预期的变化等)。', 'completion_criteria': '目标是否具体且可操作;是否涵盖了关键驱动因素(如经济数据、政策信号)。', 'common_issues': '目标过于宽泛或模糊,导致后续分析缺乏聚焦。', 'solutions': '通过与利益相关者沟通确认优先级,确保目标直接服务于决策需求。'}, {'step': 2, 'action': '收集并整理基础数据和背景信息', 'output': '全面的数据集和背景资料,包括政策声明原文、关键经济指标(如就业、通胀)、市场反应数据(如资产价格变动)以及相关历史对比。', 'completion_criteria': '数据覆盖范围是否完整;是否包含最新的官方发布信息和权威第三方来源。', 'common_issues': '数据遗漏或过时,影响分析的准确性。', 'solutions': '建立标准化的数据采集清单,定期更新数据源,并交叉验证其可靠性。'}, {'step': 3, 'action': '组织章节结构以逻辑递进方式展开分析', 'output': \"初步的章节框架,按照'现状描述→事件解读→市场反应→未来展望'的顺序安排内容。\", 'completion_criteria': '章节间逻辑连贯,信息呈现符合从已知到未知的认知路径;重点突出核心结论。', 'common_issues': '章节顺序混乱,导致读者难以抓住主线。', 'solutions': '使用逆向设计法,先确定最终结论,再倒推支撑材料的布局顺序。'}, {'step': 4, 'action': '逐层拆解政策声明和市场动态,形成观点链条', 'output': '详细解析政策声明中的关键词句变化及其潜在含义;结合市场反应(如资产价格波动)论证这些变化的实际影响。', 'completion_criteria': '观点是否层层递进,每一步都有数据或逻辑支持;是否有效揭示了政策与市场之间的因果关系。', 'common_issues': '论证跳跃性大,缺乏中间环节的衔接。', 'solutions': \"采用'现象-原因-结果'三段式推理模式,确保每个观点都有充分依据。\"}, {'step': 5, 'action': '识别并处理不确定性因素', 'output': '列出所有可能影响未来发展的不确定因素(如政治压力、通胀走势),并提供不同情景下的假设分析。', 'completion_criteria': '是否全面考虑了各种可能性;是否为每种情景提供了合理的概率评估和应对策略。', 'common_issues': '忽略极端情况或低估风险,导致分析过于乐观或悲观。', 'solutions': '引入敏感性分析工具,量化关键变量的影响范围,增强结论的稳健性。'}, {'step': 6, 'action': '总结核心结论并提出行动建议', 'output': '提炼出简洁明了的核心结论,附带具体的资产配置或交易建议,同时强调主要风险点。', 'completion_criteria': '结论是否直击要害,建议是否具有实操性;是否兼顾了收益潜力与风险控制。', 'common_issues': '结论冗长或含糊不清,无法指导实际操作。', 'solutions': '用一句话概括核心发现,并辅以可视化图表强化表达效果。'}, {'step': 7, 'action': '审阅与优化报告格式和语言风格', 'output': '经过润色的最终报告,确保语言流畅、专业性强,且视觉呈现直观易懂。', 'completion_criteria': '是否无语法错误;图表是否清晰标注;整体排版是否美观。', 'common_issues': '语言晦涩难懂,图表信息过载。', 'solutions': '邀请非专业人士试读,获取反馈后调整表述方式和图表设计。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:27:14", "modified_time": "2025-08-14 04:27:14", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "ebfc198a9a20496e9b30e3a0ede49172", "experience_type": "text", "when_to_use": "此规划框架适用于需要对宏观经济、政策影响及资本市场表现进行深度分析的任务,例如行业深度研究、政策解读报告、资本市场展望或风险评估报告。尤其适合在政策变化密集期(如中央政治局会议后)快速生成高质量的分析材料。", "content": "[{'step': 1, 'action': '明确分析目标与核心议题', 'output': '确定报告的核心主题和关键问题,例如本次报告聚焦于中央政治局会议对经济形势、政策方向及资本市场的综合影响。', 'completion_criteria': '能够清晰定义报告的目标受众和解决的主要问题,确保所有后续内容围绕这些主题展开。', 'common_issues': '目标过于宽泛或模糊,导致后续章节结构散乱。', 'solutions': '通过团队讨论或头脑风暴,将目标细化为具体的研究问题,例如‘政策如何影响内需’或‘资本市场未来走势的可能性’。'}, {'step': 2, 'action': '构建逻辑清晰的章节结构', 'output': '设计章节顺序以反映从宏观到微观、从现状到未来的逻辑递进。例如:形势判断 → 工作基调 → 宏观政策 → 扩内需 → 产业政策 → 资本市场。', 'completion_criteria': '每个章节之间具有明确的逻辑联系,且整体结构能够自然引导读者理解核心结论。', 'common_issues': '章节安排缺乏层次感,信息堆砌而非逐步递进。', 'solutions': '使用‘总-分-总’结构,先概述背景与形势,再逐层深入具体领域,最后总结核心观点并提出行动建议。'}, {'step': 3, 'action': '优先展示核心结论与关键数据', 'output': '在每一章节开头或段落首句突出核心结论,并辅以定量数据支持。例如,在‘形势判断’部分直接指出‘GDP同比增长5.3%’,并附上相关图表。', 'completion_criteria': '核心结论能够在阅读报告前几页时被快速捕捉,且数据与结论高度一致。', 'common_issues': '核心结论埋藏在细节中,未及时吸引读者注意力。', 'solutions': '采用‘倒金字塔’写作法,优先展示最重要的信息,并用图表直观呈现数据趋势。'}, {'step': 4, 'action': '平衡定性与定量分析', 'output': '结合历史数据(定量)与政策解读(定性),形成全面视角。例如,引用GDP增速、居民收入信心指数等定量指标,同时分析政策措辞的变化及其潜在影响。', 'completion_criteria': '定量数据与定性分析相互支撑,避免单一维度导致结论偏颇。', 'common_issues': '过度依赖某一种类型的信息,导致分析失衡。', 'solutions': '建立检查清单,确保每部分内容都包含定量与定性两方面信息,并定期校验两者是否匹配。'}, {'step': 5, 'action': '层层递进建立论证路径', 'output': '通过逐步推导的方式建立观点,例如从‘政策连续性稳定性’到‘增强灵活性预见性’,再到具体的财政与货币政策措施。', 'completion_criteria': '每个新观点都有前文作为铺垫,且不存在跳跃式推理。', 'common_issues': '论证过程跳跃或缺乏连贯性,使读者难以跟随。', 'solutions': '采用‘如果-那么’逻辑链,确保每个新论点都能从前文推导出来。'}, {'step': 6, 'action': '适时引入风险提示与不确定性管理', 'output': '在适当位置(如章节末尾或报告结尾)提出可能的风险因素,并说明应对策略。例如,提及‘全球贸易下滑’和‘宏观经济不确定性’,但同时强调政策储备的重要性。', 'completion_criteria': '风险提示既不过早分散注意力,也不过晚削弱可信度;同时提供解决方案或缓解措施。', 'common_issues': '风险提示过于笼统或仅停留在负面描述,未能给出建设性意见。', 'solutions': '针对每项风险,列出至少一条可行的应对方案,例如‘通过灵活调整政策储备来应对外部冲击’。'}, {'step': 7, 'action': '多情境适应指导与跨任务复用准备', 'output': '总结报告中的通用方法论,例如如何解读政策语言、如何优化数据可视化,以便在其他场景中复用。', 'completion_criteria': '提炼出的方法论能够脱离当前案例的具体背景,应用于类似任务。', 'common_issues': '方法论总结过于具体,无法迁移到其他任务中。', 'solutions': '聚焦于高层次的分析框架和原则,而非特定案例的细节操作。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:28:53", "modified_time": "2025-08-14 04:28:53", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "d089d3ebcb194c34b16820bf37a622db", "experience_type": "text", "when_to_use": "适用于行业深度研究、政策解读、投资标的分析、风险评估报告等需要系统化论证和多维度信息整合的任务。", "content": "[{'step': 1, 'action': '明确任务背景与核心目标', 'output': '撰写一段简短但精炼的引言,概述事件/主题背景及其重要性。', 'criteria_for_completion': '背景描述是否能快速让读者理解任务的核心价值;目标是否清晰且具有指导意义。', 'common_issues_and_solutions': [{'issue': '背景信息冗长或模糊', 'solution': '限制字数,仅保留最关键的事实和数据,确保语言简洁有力。'}]}, {'step': 2, 'action': '梳理并划分主要内容模块', 'output': '根据任务需求,将报告分为若干逻辑清晰的模块(如政策解读可分为宏观政策、内需驱动、改革动能等)。', 'criteria_for_completion': '各模块之间是否有明确界限,是否存在重复或遗漏;每个模块是否围绕单一主题展开。', 'common_issues_and_solutions': [{'issue': '模块划分不够合理', 'solution': '参考成功案例,结合任务特点重新调整模块顺序,确保逻辑连贯。'}]}, {'step': 3, 'action': '收集并整理定量与定性信息', 'output': '针对每个模块,搜集相关统计数据、历史案例及专家观点,并标注来源。', 'criteria_for_completion': '信息是否准确无误;是否能够有效支撑模块内的论点;是否做到定量与定性信息的均衡分布。', 'common_issues_and_solutions': [{'issue': '信息不足或质量不高', 'solution': '利用权威公开资源补充数据,必要时引用第三方专业机构的研究成果。'}]}, {'step': 4, 'action': '构建模块内部论证逻辑', 'output': '采用‘问题—对策—效果’路径,对每个模块进行详细阐述。', 'criteria_for_completion': '论证过程是否层次分明;对策是否切实可行;效果预测是否合乎逻辑。', 'common_issues_and_solutions': [{'issue': '论证缺乏说服力', 'solution': '增加对比分析或引用成功案例,增强论证的可信度。'}]}, {'step': 5, 'action': '集中讨论风险因素与不确定性', 'output': '设置专门模块讨论潜在风险,并提出应对策略。', 'criteria_for_completion': '风险因素是否全面覆盖;应对策略是否具体且具备操作性。', 'common_issues_and_solutions': [{'issue': '风险讨论过于笼统', 'solution': '细化风险分类,针对不同风险制定差异化解决方案。'}]}, {'step': 6, 'action': '总结核心结论与行动建议', 'output': '以简短段落形式总结全文主要发现,并提出下一步行动计划或建议。', 'criteria_for_completion': '总结是否提炼出所有关键要点;建议是否符合实际执行条件。', 'common_issues_and_solutions': [{'issue': '总结过于泛泛', 'solution': '回溯前文,提炼最核心的观点,确保总结部分高度概括且重点突出。'}]}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:30:10", "modified_time": "2025-08-14 04:30:10", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "5bd17379ed924eeeb269fede05f48ef3", "experience_type": "text", "when_to_use": "此规划框架适用于宏观经济分析、流动性研究、投资策略制定以及风险评估报告等任务。尤其适合需要结合定量数据和定性分析,对复杂金融现象进行结构化拆解的任务。", "content": "[{'step': 1, 'action': '明确核心问题与研究目标', 'output': '定义清晰的研究主题和目标(如:美国流动性状况及其潜在风险)。', 'evaluation': '是否准确识别了市场关注的核心问题,并将其转化为可操作的研究目标。', 'common_issues': '目标过于宽泛或模糊,导致后续分析缺乏聚焦。', 'solutions': '通过团队讨论或客户沟通,确保目标具体且具有实际意义。'}, {'step': 2, 'action': '收集并整理相关数据与背景信息', 'output': '汇总关键数据(如超额准备金水平、国债利率、回购市场流动性等)以及相关政策和市场事件背景。', 'evaluation': '数据是否全面覆盖研究所需的关键变量,背景信息是否足够支持后续分析。', 'common_issues': '数据来源单一或不完整,可能导致分析偏差。', 'solutions': '多渠道验证数据准确性,优先使用权威机构(如FFIEC、FDIC)的数据。'}, {'step': 3, 'action': '构建分析框架并组织章节结构', 'output': '设计逻辑清晰的章节结构,通常包括现状描述、数据解读、风险分析和结论建议。', 'evaluation': '章节安排是否符合从现象到本质的递进逻辑,是否便于读者理解。', 'common_issues': '章节间逻辑跳跃过大或重复内容过多。', 'solutions': '提前绘制思维导图,确保各部分紧密衔接且无冗余。'}, {'step': 4, 'action': '展开定量分析并辅以可视化展示', 'output': '利用图表(如超额准备金趋势图、资产负债表构成图等)直观呈现数据变化,结合文字解释关键发现。', 'evaluation': '图表是否清晰传达核心信息,文字说明是否补充了图表未尽之意。', 'common_issues': '图表过于复杂或与文字脱节,影响阅读体验。', 'solutions': '遵循“一图一意”原则,每张图表只传递一个核心观点,并配以简洁注释。'}, {'step': 5, 'action': '深入剖析定性因素与潜在风险', 'output': '基于定量分析结果,探讨政策、市场情绪及其他非量化因素的影响,并提出可能的风险点。', 'evaluation': '是否全面考虑了多种情景下的不确定性,风险提示是否合理且有依据。', 'common_issues': '忽视某些重要假设条件,导致分析片面。', 'solutions': '采用“假设-推演-验证”的方法,逐一检验不同假设下的可能性。'}, {'step': 6, 'action': '形成核心结论与行动建议', 'output': '提炼主要发现为简明扼要的结论,并提供针对性的策略建议(如关注信用创造效率、警惕资产泡沫化)。', 'evaluation': '结论是否直击要害,建议是否具备实操性。', 'common_issues': '结论空洞或建议脱离实际。', 'solutions': '将结论与初始研究目标对照,确保两者一致;邀请行业专家审阅建议部分。'}, {'step': 7, 'action': '撰写风险提示与免责声明', 'output': '列出可能影响分析结果的外部因素及不确定性,并附上法律声明保护公司权益。', 'evaluation': '风险提示是否覆盖所有重大不确定因素,声明是否符合监管要求。', 'common_issues': '遗漏某些高概率风险,或声明措辞不够严谨。', 'solutions': '参考类似报告模板,确保条款详尽无遗。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:31:32", "modified_time": "2025-08-14 04:31:32", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "e65115f38f16450db1b7518383d47968", "experience_type": "text", "when_to_use": "此规划框架适用于宏观经济分析、行业深度研究、投资标的分析以及风险评估报告等任务,特别是需要结合定量与定性数据进行多层次论证的场景。", "content": "[{'step': 1, 'action': '明确核心主题和目标受众', 'output': '确定分析的核心问题(如制造业PMI回落的原因及影响)以及目标受众(如投资者、政策制定者或企业高管)。', 'completion_criteria': '核心主题清晰且能用一句话概括;目标受众的需求被明确列出。', 'common_issues': '主题过于宽泛或模糊,导致后续分析缺乏聚焦点。', 'solutions': '通过初步调研和与利益相关者的沟通,明确核心问题并细化分析范围。'}, {'step': 2, 'action': '收集和整理基础数据', 'output': '从权威来源(如国家统计局、WIND数据库)获取定量数据,并结合定性信息(如政策变化、行业动态)形成初步数据集。', 'completion_criteria': '数据覆盖全面,包括历史趋势、当前状态和未来预测;数据来源可靠且标注清晰。', 'common_issues': '数据不完整或来源不可靠,导致分析结论缺乏可信度。', 'solutions': '优先选择权威数据源,并对数据进行交叉验证以确保准确性。'}, {'step': 3, 'action': '构建章节结构并分配信息优先级', 'output': '根据分析逻辑设计章节结构,通常包括背景介绍、核心数据分析、细分领域拆解、风险提示和总结展望。', 'completion_criteria': '章节结构逻辑清晰,信息分布合理,核心结论在前两章突出展示。', 'common_issues': '章节安排混乱,导致读者难以快速抓住重点。', 'solutions': '采用“倒金字塔”原则,将最重要信息前置,并通过图表辅助说明复杂数据。'}, {'step': 4, 'action': '逐层递进展开论证', 'output': '通过定量指标(如PMI指数)和定性因素(如政策影响)相结合的方式,逐步建立观点并支持结论。', 'completion_criteria': '每一步论证都有数据支撑,逻辑链条完整且无跳跃性推论。', 'common_issues': '论证过程缺乏连贯性,或忽略关键变量的影响。', 'solutions': '使用假设检验法逐一排除干扰因素,并补充敏感性分析以增强说服力。'}, {'step': 5, 'action': '平衡不同类型信息的分布', 'output': '在报告中合理分配定量(如指数变化)、定性(如政策解读)和预测信息的比例,避免某一类型信息过度集中。', 'completion_criteria': '报告内容均衡,各部分信息相互补充且无冗余。', 'common_issues': '过度依赖单一类型信息,导致分析视角局限。', 'solutions': '提前规划信息比例,并在撰写过程中多次检查调整。'}, {'step': 6, 'action': '识别和处理不确定性', 'output': '明确指出可能影响结论的不确定因素(如经济增长放缓、外部环境变化),并提供多种情景假设下的预测。', 'completion_criteria': '不确定性被充分讨论,且有应对策略或建议。', 'common_issues': '忽视潜在风险或未提供解决方案,导致报告实用性降低。', 'solutions': '引入专家意见或模拟模型,为不确定性提供量化参考。'}, {'step': 7, 'action': '制作可视化图表', 'output': '利用雷达图、折线图等形式直观展示关键数据,并附简短注释帮助理解。', 'completion_criteria': '图表清晰易懂,能够独立传递信息且与正文内容呼应。', 'common_issues': '图表过多或设计复杂,反而增加阅读负担。', 'solutions': '遵循“少即是多”原则,仅保留最能支持核心观点的图表。'}, {'step': 8, 'action': '总结核心发现并提出行动建议', 'output': '提炼出主要结论,并针对不同受众提供具体的行动指南或投资建议。', 'completion_criteria': '总结简洁有力,建议具有可操作性且符合目标受众需求。', 'common_issues': '总结流于表面,未能提炼出真正有价值的洞见。', 'solutions': '反复提炼语言,确保每个结论都经过严格验证。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:33:01", "modified_time": "2025-08-14 04:33:01", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "4ed40cd446a2448ab4d218c7ba47f357", "experience_type": "text", "when_to_use": "此规划框架适用于政策解读与宏观经济分析类任务,尤其是涉及对政府政策、经济趋势和市场影响的深度解读。例如:行业深度研究、投资标的分析(基于宏观视角)、风险评估报告等。", "content": "[{'step': 1, 'action': '明确分析目标并定义核心问题', 'output': '清晰陈述本次分析的核心目标,如‘解读政治局会议内容及其对经济和市场的影响’。', 'completion_criteria': '核心问题是否具体且可操作;目标是否与客户需求或场景匹配。', 'common_issues': '目标过于宽泛或模糊,导致后续分析缺乏焦点。', 'solutions': '通过与利益相关方沟通确认目标,并用SMART原则(具体、可衡量、可实现、相关性、时限性)细化目标。'}, {'step': 2, 'action': '梳理背景信息,建立分析框架', 'output': '列出关键事件(如政治局会议时间、主题)、相关政策文件以及历史报告,形成初步章节结构。', 'completion_criteria': '章节结构是否逻辑清晰,涵盖背景、核心观点、政策解读、市场影响等要素。', 'common_issues': '章节安排可能过于冗长或遗漏重要部分,例如未突出核心结论。', 'solutions': '参考类似成功案例的结构设计,确保每个章节服务于整体目标,避免重复或偏离主题。'}, {'step': 3, 'action': '优先展示核心结论,并分层递进论证', 'output': '在开头直接呈现主要观点(如‘巩固拓展经济回升向好势头’),随后逐步展开支持性论据。', 'completion_criteria': '核心结论是否简洁有力,且能够在后续章节中被充分支撑。', 'common_issues': '核心结论不够突出,或论证过程缺乏连贯性。', 'solutions': '使用金字塔原理组织内容,确保每一层论证都紧密围绕上一层展开,同时利用图表和数据增强说服力。'}, {'step': 4, 'action': '平衡定量与定性信息,结合历史与预测', 'output': '整合定量数据(如GDP增长率、政策力度指标)与定性分析(如政策导向、市场情绪),并通过历史对比和未来展望补充视角。', 'completion_criteria': '是否合理分配定量与定性信息的比例,且两者之间是否存在逻辑关联。', 'common_issues': '数据堆砌过多而忽略洞察,或定性分析缺乏事实依据。', 'solutions': '为每组数据提供简短解释,确保其意义明确;同时引用权威来源支持定性判断。'}, {'step': 5, 'action': '识别并讨论风险因素', 'output': '在适当位置(如政策解读后或市场影响前)提出潜在风险(如地缘政治、债务压力),并评估其可能性和影响。', 'completion_criteria': '风险因素是否全面覆盖,且讨论时机是否恰到好处,不会削弱正面预期。', 'common_issues': '风险讨论过于集中,导致整体基调偏悲观;或者风险揭示不足,缺乏警示作用。', 'solutions': '采用SWOT分析法系统化整理风险,并用概率语言(如‘低/中/高可能性’)量化描述。'}, {'step': 6, 'action': '处理不确定性和多种可能性', 'output': '针对复杂议题(如货币政策调整方向),列举不同情景假设及对应策略建议。', 'completion_criteria': '是否涵盖主要可能性,并提供切实可行的应对方案。', 'common_issues': '仅关注单一路径,忽视其他可能性;或应对措施过于笼统,难以落地。', 'solutions': '构建多情景模型,结合敏感性分析验证假设合理性,并给出具体操作指南。'}, {'step': 7, 'action': '总结并提炼行动建议', 'output': '以精炼的语言概括核心发现,并根据目标受众需求提出明确的行动指引(如‘关注下半年基建投资机会’)。', 'completion_criteria': '总结是否言简意赅,行动建议是否具有实操价值。', 'common_issues': '总结流于形式,未能提炼关键洞见;或建议脱离实际,无法执行。', 'solutions': '从决策者角度审视建议的可行性,并通过模拟演练测试其效果。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:34:34", "modified_time": "2025-08-14 04:34:34", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "f388a7008575443b9bc5c346399090d5", "experience_type": "text", "when_to_use": "此规划框架适用于宏观经济分析、政策影响评估以及市场趋势预测类的金融分析任务,特别是需要结合定量与定性数据对复杂经济事件进行深度解读的场景。", "content": "[{'step': 1, 'action': '明确分析目标和核心问题', 'output': '定义清晰的研究范围和核心结论方向,例如分析特朗普关税政策、美国经济现状及美联储降息路径对市场的影响。', 'criteria_for_completion': '能够用简短的几句话概括分析的核心问题和预期成果,确保研究方向聚焦。', 'common_issues': '目标过于宽泛或模糊,导致后续章节无法有效支撑核心结论。', 'solutions': '通过团队讨论或客户沟通明确优先级,聚焦于关键变量(如关税、就业数据、货币政策)对市场的直接影响。'}, {'step': 2, 'action': '构建报告结构并分配权重', 'output': '设计报告的章节框架,包括关键数据、交易模式、重要事件、本周关注等模块,并根据信息的重要性安排展示顺序。', 'criteria_for_completion': '各章节逻辑连贯,信息分布合理,优先突出核心结论(如衰退交易重现),次要信息(如周度数据更新)作为补充。', 'common_issues': '章节间逻辑断裂或信息冗余,导致读者难以抓住重点。', 'solutions': '采用“倒金字塔”原则,将最重要的结论放在开头,逐步展开细节;定期回顾整体结构是否服务于核心目标。'}, {'step': 3, 'action': '收集和整理定量与定性数据', 'output': '从官方机构(如美国劳工部、欧盟统计局)、市场数据提供商(如Wind)及其他权威来源获取最新数据,同时结合历史趋势和预测模型进行验证。', 'criteria_for_completion': '数据准确且来源可靠,涵盖多维度(如GDP、就业、通胀等),能支持后续分析论证。', 'common_issues': '数据不完整或时效性不足,影响分析的可信度。', 'solutions': '建立标准化的数据采集流程,设置优先级以确保关键指标及时更新;必要时使用替代指标填补空白。'}, {'step': 4, 'action': '构建分析框架并分层递进论述', 'output': '基于数据搭建分析框架,例如从宏观层面(GDP、就业)到微观层面(具体行业和商品价格变化),并通过层层递进的方式得出结论。', 'criteria_for_completion': '观点之间逻辑严密,每一步推导都有充分数据和理论支撑,避免跳跃式推理。', 'common_issues': '论点缺乏足够的证据支持,或者逻辑链条断裂。', 'solutions': '在每个阶段结束时进行内部审查,确保每个论点都经过充分论证;引入外部专家意见增强说服力。'}, {'step': 5, 'action': '识别风险因素并提出情景假设', 'output': '详细列出潜在风险(如关税冲击、通胀压力)及其可能影响,并针对不同情景提供应对策略(如9月降息概率上升)。', 'criteria_for_completion': '风险分析全面且有前瞻性,情景假设具有现实意义,为决策者提供有价值的参考。', 'common_issues': '忽视某些关键风险,或未充分考虑多种可能性。', 'solutions': '采用头脑风暴法列举所有可能的风险点,并结合敏感性分析评估其影响程度;确保情景假设覆盖乐观、中性和悲观三种情况。'}, {'step': 6, 'action': '平衡定量与定性信息展示', 'output': '通过图表、表格等形式直观呈现定量数据,同时辅以文字说明解释背后的定性逻辑(如就业数据走弱的原因分析)。', 'criteria_for_completion': '图表清晰易懂,文字说明简洁有力,两者相辅相成,共同强化核心结论。', 'common_issues': '图表过多导致信息过载,或文字描述冗长掩盖了关键信息。', 'solutions': '遵循“少即是多”的原则,只保留最能支持核心结论的图表;文字部分则聚焦于补充图表未能传达的背景信息。'}, {'step': 7, 'action': '总结核心结论并提出行动建议', 'output': '提炼出报告中最关键的发现(如衰退交易重现、9月降息概率反弹),并给出具体的市场操作建议(如避险资产配置)。', 'criteria_for_completion': '结论精炼且具可操作性,能够直接指导投资决策。', 'common_issues': '结论过于笼统或偏离实际需求,缺乏实用性。', 'solutions': '邀请目标受众参与反馈环节,确保结论贴近实际需求;强调结论的具体应用场景。'}, {'step': 8, 'action': '审阅和优化最终版本', 'output': '检查报告的语言表达、格式规范和数据准确性,确保内容无误且符合专业标准。', 'criteria_for_completion': '报告语言流畅,格式统一,无明显错误或遗漏。', 'common_issues': '语法错误、排版混乱或数据更新滞后。', 'solutions': '指定专人负责校对和格式调整;利用自动化工具辅助检测常见问题。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:36:15", "modified_time": "2025-08-14 04:36:15", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "0c8ea4a0f17c48b88ffac98aff06c35b", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、宏观经济分析、政策影响评估以及短期市场动态跟踪等金融分析任务。尤其适合需要结合定量和定性信息,快速响应中观层面经济事件的场景。", "content": "[{'step': 1, 'action': '明确分析目标与范围', 'output': '确定报告的核心主题(如能源价格波动、政策影响等)及其覆盖的行业链条(上游、中游、下游)。', 'completion_criteria': \"报告范围清晰,能够回答关键问题:'哪些领域最受关注?' '为何这些领域重要?'\", 'common_issues': '目标过于宽泛或狭窄,导致分析缺乏聚焦。', 'solutions': '通过初步数据筛选和行业热点梳理,明确核心议题并设定优先级。'}, {'step': 2, 'action': '收集与整理基础数据', 'output': '获取定量数据(如价格指标、开工率、库存量)和定性信息(如政策解读、市场情绪),并分类存储。', 'completion_criteria': '数据来源可靠且全面,涵盖历史趋势、当前状态及未来预测。', 'common_issues': '数据不完整或时效性不足,导致分析结论缺乏支撑。', 'solutions': '多渠道交叉验证数据,并优先使用权威机构发布的最新数据。'}, {'step': 3, 'action': '构建章节结构并安排信息优先级', 'output': \"按照'宏观-中观-微观'逻辑组织内容,确保核心结论在开头部分突出展示,随后逐步展开详细分析。\", 'completion_criteria': '章节结构合理,信息层次分明,读者能在前几段快速抓住重点。', 'common_issues': '信息堆砌无序,导致阅读体验差。', 'solutions': \"遵循'总分'模式,先提炼核心观点,再补充支持性细节;避免过多技术术语。\"}, {'step': 4, 'action': '平衡定量与定性信息', 'output': '将定量数据以图表形式呈现,同时辅以定性描述解释其背后逻辑和潜在影响。', 'completion_criteria': '定量数据直观易懂,定性分析深入浅出,两者相辅相成。', 'common_issues': '过度依赖单一类型信息,造成分析片面化。', 'solutions': '为每个主要发现搭配至少一个相关图表,并用简短文字说明其意义。'}, {'step': 5, 'action': '递进式论证与风险提示', 'output': '从事件背景到具体影响逐层推导,适时引入风险因素讨论可能的不确定性。', 'completion结论': '论证路径连贯,风险提示恰到好处,既不过度渲染也不轻描淡写。', '常见问题': '论证跳跃性大,或忽略关键风险点。', '解决方案': \"采用'原因→结果→应对措施'的三步论证法,确保逻辑严密;对重大风险单独设节阐述。\"}, {'step': 6, 'action': '处理不确定性和多种可能性', 'output': '针对未来趋势提供情景假设(如乐观、中性和悲观),并给出每种情境下的概率预估。', 'completion_criteria': '情景假设合理且有据可依,能帮助决策者理解不同发展路径。', 'common_issues': '忽视替代方案,导致建议缺乏灵活性。', 'solutions': '结合历史数据和专家意见制定情景模型,并标注各情景的关键驱动因素。'}, {'step': 7, 'action': '总结与行动建议', 'output': '提炼核心洞察,提出具体可行的操作建议,包括投资策略、政策响应或风险管理措施。', 'completion_criteria': '建议具有实操性,能直接指导后续行动。', 'common_issues': '建议空泛或脱离实际,难以落地。', 'solutions': '基于前期分析成果生成针对性强的建议清单,并附上实施步骤和预期效果。'}, {'step': 8, 'action': '审阅与优化表达', 'output': '检查报告语言是否简洁明了,图表是否清晰美观,并添加必要的免责声明。', 'completion_criteria': '报告整体专业性强,无明显错误或歧义。', 'common_issues': '表述冗长或存在法律风险。', 'solutions': '邀请同行评审,重点关注语言精炼度和合规性;必要时咨询法律顾问。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:37:40", "modified_time": "2025-08-14 04:37:40", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "9989a8c098864dd2917feb86835b9cbb", "experience_type": "text", "when_to_use": "此规划框架适用于需要进行长期政策或行业趋势分析的任务,例如五年规划研究、宏观经济政策解读、战略投资方向分析等。它特别适合涉及多维度数据整合(定量与定性)、跨领域目标权衡(如创新、民生、生态等)以及对未来政策方向有预测需求的金融分析任务。", "content": "[{'step': 1, 'action': '明确分析目标和范围', 'output': '定义报告的核心主题和目标,例如‘五年规划’的历史演变、结构安排及未来政策方向。', 'completion_criteria': '确保目标清晰且与客户需求一致,能够回答关键问题,如‘未来五年政策将如何影响市场?’。', 'common_issues': '目标过于宽泛或模糊,导致后续章节难以聚焦。', 'solutions': '通过前期调研和客户沟通,明确核心关注点,并将其分解为可操作的具体问题。'}, {'step': 2, 'action': '收集和整理基础信息', 'output': '系统梳理历史数据、政策文件及相关文献,形成初步资料库,涵盖经济增速目标、产业政策、重大工程项目等内容。', 'completion_criteria': '数据来源可靠,覆盖全面,能够支持后续的深度分析。', 'common_issues': '数据不完整或过时,影响分析的准确性。', 'solutions': '优先选择权威机构发布的公开数据,并结合专家访谈补充最新动态。'}, {'step': 3, 'action': '设计报告结构', 'output': '根据分析内容的逻辑层次划分章节,通常包括总体目标、分领域规划和落实机制三部分。', 'completion_criteria': '章节结构清晰,符合目标导向,各部分内容紧密衔接。', 'common_issues': '章节间逻辑关系不强,导致信息分散。', 'solutions': '使用‘总-分-总’结构,先概述全局趋势,再分领域深入讨论,最后总结机制保障。'}, {'step': 4, 'action': '分析主要目标和指标', 'output': '对定量目标(如GDP增速、民生福祉指标)和定性目标(如创新政策导向)进行分类解读,突出弹性化和多元化的特征。', 'completion_criteria': '目标分析条理清晰,能够揭示政策变化背后的驱动因素。', 'common_issues': '忽视目标间的相互关系,导致分析片面。', 'solutions': '采用对比分析法,从历史演变中提取趋势,结合当前背景解释目标调整的原因。'}, {'step': 5, 'action': '评估产业政策焦点', 'output': '识别重点产业布局及其发展方向,例如新质生产力、绿色低碳转型等,并分析其对经济的影响。', 'completion_criteria': '产业政策分析具有前瞻性和洞察力,能指导实际投资决策。', 'common_issues': '过度依赖定性描述,缺乏量化支持。', 'solutions': '引入行业数据和案例研究,增强论证的说服力。'}, {'step': 6, 'action': '解析重大工程项目', 'output': '梳理重大工程项目的分布领域、实施进度及区域布局,评估其潜在经济和社会效益。', 'completion_criteria': '项目分析具体且有针对性,能够揭示政策实施的关键抓手。', 'common_issues': '忽略项目落地的实际挑战,导致结论过于乐观。', 'solutions': '结合地方政策和资源禀赋,评估项目可行性并提示潜在风险。'}, {'step': 7, 'action': '提出风险提示和不确定性分析', 'output': '识别政策执行中的潜在风险,例如目标理解偏差或外部环境变化,并提供应对建议。', 'completion_criteria': '风险提示全面且具有针对性,能够帮助读者规避潜在损失。', 'common_issues': '风险分析流于形式,缺乏实质性内容。', 'solutions': '基于历史经验和专家意见,构建情景分析模型,量化不同情境下的影响。'}, {'step': 8, 'action': '撰写结论和展望', 'output': '总结核心发现,提炼关键趋势,并给出具体的行动建议或投资方向。', 'completion_criteria': '结论简洁有力,能够直接指导决策,避免冗长和重复。', 'common_issues': '结论与分析脱节,缺乏实际应用价值。', 'solutions': '围绕客户需求提炼要点,确保结论与前文分析高度一致。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:40:16", "modified_time": "2025-08-14 04:40:16", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "9893346eb4724cd097aa622fab0a1fe6", "experience_type": "text", "when_to_use": "适用于宏观经济分析、政策影响评估、行业深度研究及投资策略制定等需要综合定量与定性信息的任务。特别适合于涉及复杂经济变量(如GDP、CPI、PPI)、政策导向(如财政与货币政策)以及市场波动(如汇率、商品价格)的综合性金融报告制作。", "content": "[{'step': 1, 'action': '定义分析目标和范围,明确核心问题', 'output': '清晰的目标陈述,例如:‘分析2025年上半年中国经济运行情况及其对下半年政策方向的影响’。', 'completion_criteria': '目标是否具体化,是否明确了时间范围、核心变量和关键假设。', 'common_issues': '目标过于宽泛或模糊,导致后续分析缺乏聚焦点。', 'solutions': '通过团队讨论和背景资料梳理,逐步细化目标,并确认所需数据和资源是否可获取。'}, {'step': 2, 'action': '收集并整理相关数据,包括定量和定性信息', 'output': '完整的数据表格、图表和注释,涵盖主要经济指标(如GDP、CPI、PPI、PMI等)、政策文件、市场动态和外部环境变化。', 'completion_criteria': '数据覆盖全面且准确,来源可靠,能够支持后续分析。', 'common_issues': '数据不完整或存在滞后,无法反映最新趋势。', 'solutions': '结合官方统计数据(如国家统计局、央行)、第三方数据库(如Wind)和实时新闻更新,确保数据时效性和权威性。'}, {'step': 3, 'action': '构建章节结构,按逻辑顺序组织内容', 'output': '目录框架,包含以下部分:经济基本面与宏观供需、价格水平变动情况、货币与财政政策、汇率与商品市场波动。', 'completion_criteria': '章节安排是否符合从宏观到微观、从现状到预测的逻辑递进关系,核心结论是否突出。', 'common_issues': '章节间逻辑联系不紧密,或重点内容被次要信息掩盖。', 'solutions': '优先展示高优先级信息(如核心经济指标),并通过图表和总结性段落强化关键结论。'}, {'step': 4, 'action': '开展定量分析,结合历史和预测数据揭示趋势', 'output': '定量分析结果,包括同比/环比增长率、季节性调整、历史分位数对比等;生成可视化图表(如折线图、柱状图)。', 'completion_criteria': '分析是否全面覆盖主要变量,趋势是否清晰,结论是否基于数据而非主观推测。', 'common_issues': '忽略异常值或短期波动,导致趋势判断失准。', 'solutions': '采用多维度分析方法(如3MMA平滑处理),并结合定性信息解释异常现象。'}, {'step': 5, 'action': '进行定性分析,探讨政策、风险和不确定性因素', 'output': '针对政策导向(如“反内卷”政策)、外部风险(如中美贸易摩擦)和不确定性(如外需波动)的详细讨论。', 'completion_criteria': '定性分析是否充分考虑了多种可能性,是否提出了应对策略。', 'common_issues': '只关注单一可能性,忽视其他潜在情景。', 'solutions': '引入情景分析法,设置基准情景、乐观情景和悲观情景,分别探讨其影响路径。'}, {'step': 6, 'action': '平衡定量与定性信息,形成综合判断', 'output': '综合结论,例如:‘尽管名义产出承压,但价格修复将支撑名义增长,预计全年GDP增速可达5%’。', 'completion_criteria': '结论是否同时基于定量和定性分析,是否具有说服力。', 'common_issues': '过度依赖某一种分析方法,导致结论片面。', 'solutions': '通过交叉验证不同分析方法的结果,确保结论稳健性。'}, {'step': 7, 'action': '撰写报告正文,优化语言表达和信息呈现方式', 'output': '最终报告文档,包括文字叙述、图表、表格和附录。', 'completion_criteria': '语言简洁明了,信息层次分明,视觉效果良好。', 'common_issues': '冗长的文字叙述削弱了核心信息的传递效果。', 'solutions': '精简语言,使用小标题、项目符号和图表辅助说明,提升可读性。'}, {'step': 8, 'action': '审查和修订报告,确保质量达标', 'output': '经过校对和修订后的最终版本,无明显错误或遗漏。', 'completion_criteria': '报告内容是否准确无误,格式是否统一,逻辑是否连贯。', 'common_issues': '校对不充分,出现数据错误或表述歧义。', 'solutions': '邀请同行评审,对照原始数据逐一核对,确保万无一失。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:41:54", "modified_time": "2025-08-14 04:41:54", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "51f3a0c5204941b7a476c788359d405f", "experience_type": "text", "when_to_use": "此规划框架适用于金融行业中的深度市场分析、投资组合策略制定、资金流向监控以及机构行为研究等任务。尤其适合需要整合宏观流动性、交易热度、机构调研、分析师预测、北上/两融/ETF资金流动等多维度数据的综合分析场景。", "content": "[{'step': 1, 'action': '明确分析目标与范围,确定报告的核心主题和关注点(如市场流动性、资金流向、板块热度等)。', 'output': '清晰的目标定义文档,包括分析的时间范围、覆盖的主要指标(如美元指数、交易热度、波动率等)。', 'criteria': '目标需具体且可量化,能够指导后续数据收集和分析方向。', 'common_issues': '目标过于宽泛或模糊,导致后续分析缺乏重点。', 'solution': '在初步讨论中明确优先级,确保每个分析模块与最终目标直接相关。'}, {'step': 2, 'action': '收集并整理相关数据,涵盖宏观流动性、市场交易热度、机构行为、分析师预期等多维度信息。', 'output': '完整的数据表格和可视化图表,包括但不限于美元指数、利差、交易量、波动率、调研热度、净利润预测调整等。', 'criteria': '数据来源可靠,覆盖全面,并按时间序列进行标准化处理以便于比较。', 'common_issues': '数据缺失或质量不高,影响后续分析结论的准确性。', 'solution': '建立数据验证机制,对异常值进行核查和补充;引入多个数据源交叉验证。'}, {'step': 3, 'action': '构建章节结构,将分析内容分为主逻辑线(如宏观流动性→市场交易热度→机构行为→风险提示)。', '输出': '报告目录及各章节标题,体现从宏观到微观、从现状到预测的递进逻辑。', 'criteria': '章节安排合理,符合读者的认知习惯;核心结论突出,便于快速获取关键信息。', 'common_issues': '章节顺序混乱,导致逻辑不连贯或信息冗余。', 'solution': '采用“总-分-总”结构,先概述全局趋势,再深入细分领域,最后总结核心观点。'}, {'step': 4, 'action': '通过定量与定性结合的方式展开分析,平衡历史数据与未来预测,突出不同维度的信息对比。', 'output': '包含详细数据分析和解读的正文部分,例如宏观流动性变化、板块交易热度排名、机构调研偏好等。', 'criteria': '定量分析精确,定性描述有理有据;历史数据与预测之间形成合理推导链条。', 'common_issues': '过度依赖单一类型数据,忽视其他维度的支持。', 'solution': '设置专门团队成员负责不同类型数据的整合,确保多视角分析的一致性。'}, {'step': 5, 'action': '运用分层论证路径,逐步建立观点,从宏观环境到微观行为层层递进,揭示潜在的风险因素。', 'output': '逐层递进的观点阐述,例如从美元指数回升到A股资金流出,再到板块间的资金博弈。', 'criteria': '论证过程逻辑严密,每一步推导都有数据支撑;风险因素提出时机恰当,避免突兀。', 'common_issues': '论证跳跃过大,缺少必要的过渡环节。', 'solution': '增加中间步骤说明,确保每一层推导都自然流畅。'}, {'step': 6, 'action': '处理不确定性和多种可能性,通过敏感性分析、情景假设等方式展现不同结果的概率分布。', 'output': '包含多种情景假设的分析段落,例如基于不同政策预期下的市场反应模拟。', 'criteria': '不确定性处理得当,未遗漏重要变量;情景假设具有现实意义。', 'common_issues': '忽略极端情况或低估其发生概率。', 'solution': '引入蒙特卡洛模拟或其他统计方法,评估尾部风险的影响。'}, {'step': 7, 'action': '撰写总结与风险提示,提炼核心结论并强调行动建议,同时提醒潜在风险。', 'output': '总结段落和风险提示部分,简明扼要地概括主要发现和操作指引。', 'criteria': '总结言之有物,直击要害;风险提示具体可行,帮助决策者规避陷阱。', 'common_issues': '总结流于表面,缺乏实际指导价值。', 'solution': '邀请外部专家审阅总结部分,确保语言精炼且实用性强。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:43:19", "modified_time": "2025-08-14 04:43:19", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "9ca46c77995849989230298361a9a16f", "experience_type": "text", "when_to_use": "此规划框架适用于宏观政策分析、行业深度研究、投资策略制定以及资本市场展望等金融分析任务,尤其适合在需要结合政策导向和市场动态的场景下使用。", "content": "[{'step': 1, 'action': '明确背景与目标', 'output': '清晰界定分析的背景、目标及核心问题。例如,本次报告的核心问题是分析2025年7月中央政治局会议对经济形势和政策方向的影响。', 'completion_criteria': '背景和目标是否明确,是否能够为后续章节提供逻辑起点。', 'common_issues': '背景描述过于宽泛或缺乏针对性。', 'solutions': '聚焦于关键事件(如政治局会议)及其对经济和市场的直接影响,确保目标具体且与客户关注点相关。'}, {'step': 2, 'action': '组织章节结构并分配权重', 'output': '将报告分为多个逻辑清晰的章节,按优先级安排内容。例如:先概述政策基调,再深入分析具体领域(如财政政策、货币政策、产业政策等),最后总结资本市场影响。', 'completion_criteria': '章节是否逻辑连贯,信息分布是否合理,是否能引导读者逐步理解核心观点。', 'common_issues': '章节结构混乱或信息分布不均,导致重点不突出。', 'solutions': '采用“总-分-总”结构,确保每个章节有明确的主题,并通过过渡句连接各部分。'}, {'step': 3, 'action': '优先展示核心结论', 'output': '在开头段落中直接呈现核心结论,例如:“本次会议政策重在优化存量、提质增效,未提出新的大规模强刺激措施。”', 'completion_criteria': '核心结论是否简洁明了,是否能让读者快速抓住重点。', 'common_issues': '核心结论被淹没在细节中,导致读者难以快速理解。', 'solutions': '使用加粗、标题或单独段落突出核心结论,并避免过多技术术语。'}, {'step': 4, 'action': '平衡定量与定性信息', 'output': '结合定量数据(如GDP增长率、产能利用率图表)和定性分析(如政策解读、市场预期),确保两者相辅相成。例如,通过图表展示上半年政府债发行情况,同时分析其对财政政策的影响。', 'completion_criteria': '定量和定性信息是否有机结合,是否能共同支持核心观点。', 'common_issues': '定量数据过多导致分析冗长,或定性分析缺乏数据支撑。', 'solutions': '确保每组数据都有对应的解读,避免单纯堆砌数据;同时,定性分析需引用权威来源增强可信度。'}, {'step': 5, 'action': '层层递进建立论证逻辑', 'output': '从宏观经济形势到具体政策领域(如财政、货币、产业政策),再到资本市场影响,逐步展开论证。例如,先分析经济增长形势,再探讨财政政策如何优化存量,最后讨论其对资本市场的潜在影响。', 'completion_criteria': '论证路径是否清晰,逻辑是否严密,是否能自然引导读者接受最终结论。', 'common_issues': '论证跳跃性大或逻辑断裂,导致读者难以跟上思路。', 'solutions': '使用过渡句连接不同部分,确保每一步推导都基于前文已建立的基础。'}, {'step': 6, 'action': '适时提出风险因素', 'output': '在讨论具体政策时,适时提及潜在风险。例如,在分析“反内卷”政策时指出可能对企业投资增速的影响,并提出基建投资作为对冲手段。', 'completion_criteria': '风险因素是否全面且及时提出,是否能帮助读者全面理解政策影响。', 'common_issues': '风险因素被忽略或提出过晚,导致分析显得片面。', 'solutions': '在每一项政策分析后单独列出风险因素,并结合解决方案进行讨论。'}, {'step': 7, 'action': '处理不确定性和多种可能性', 'output': '针对不确定性提出多种情景假设。例如,在分析货币政策时提到“降准降息空间有限”,但强调结构性工具的重要性。', 'completion_criteria': '是否充分考虑了多种可能性,是否能为决策者提供灵活应对的建议。', 'common_issues': '忽视不确定性或仅依赖单一预测,导致分析缺乏灵活性。', 'solutions': '列出至少两种可能的情景,并为每种情景提供相应的应对策略。'}, {'step': 8, 'action': '总结与展望', 'output': '以总结性段落收尾,重申核心观点并展望未来趋势。例如,强调“反内卷”政策对企业效率的积极影响,以及资本市场延续向好的潜力。', 'completion_criteria': '总结是否简明扼要,是否能强化核心观点并激发读者信心。', 'common_issues': '总结过于冗长或偏离主题,削弱整体效果。', 'solutions': '总结段落控制在3-5句话,集中重申核心结论并适当展望未来。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:44:46", "modified_time": "2025-08-14 04:44:46", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "704ce38da76c42538f6c17d9b8188512", "experience_type": "text", "when_to_use": "适用于行业深度研究、宏观经济周报或月报、投资组合策略制定等需要综合分析多维度信息的任务。", "content": "[{'step': 1, 'action': '收集并整理基础信息', 'output': '创建一个包含所有相关事件的时间轴文档,标注每个事件的关键细节(如日期、主体、具体内容)。确保覆盖宏观政策、经济指标、市场表现等方面。', 'completion_criteria': '时间轴完整无遗漏;每条信息均附有可靠来源链接或参考文献。', 'common_issues_and_solutions': [{'issue': '信息过载导致难以筛选重点。', 'solution': '根据任务目标设定筛选标准,例如仅保留直接影响市场的重大事件。'}]}, {'step': 2, 'action': '构建章节框架', 'output': '设计报告结构,包括背景概述、核心数据分析、市场影响评估及未来展望等模块。', 'completion_criteria': '各模块标题明确,逻辑连贯;能够体现从现状到预测的自然过渡。', 'common_issues_and_solutions': [{'issue': '章节划分过于琐碎或混乱。', 'solution': \"遵循'总-分-总'原则,先概括全貌,再深入细节,最后总结要点。\"}]}, {'step': 3, 'action': '展开核心数据分析', 'output': '针对每个重要事件或数据点,撰写详细分析段落,包括定量描述、定性评价及其潜在市场影响。', 'completion_criteria': '分析段落中既有数据支撑又有逻辑推理;语言简洁但不模糊。', 'common_issues_and_solutions': [{'issue': '缺乏足够的数据支持。', 'solution': '利用官方统计数据、第三方数据库或同行研究成果补充证据。'}]}, {'step': 4, 'action': '识别并阐释风险因素', 'output': '列出可能影响市场走势的风险点,并对其发生的可能性和潜在后果进行量化或定性评估。', 'completion_criteria': '风险描述具体且具有针对性;建议应对措施切实可行。', 'common_issues_and_solutions': [{'issue': '风险分析流于表面。', 'solution': '结合历史案例和当前环境,深入剖析风险背后的驱动因素。'}]}, {'step': 5, 'action': '提炼核心结论并展望未来', 'output': '总结本周最重要的发现,并基于现有信息预测短期内可能发生的重要事件或趋势。', 'completion_criteria': '核心结论简明扼要,容易记忆;未来展望具备操作指导意义。', 'common_issues_and_solutions': [{'issue': '结论过于宽泛或缺乏依据。', 'solution': '回溯前文分析,确保结论建立在充分论证的基础上。'}]}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:46:01", "modified_time": "2025-08-14 04:46:01", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "ec9b4f31b3d148abbecc6905c8335222", "experience_type": "text", "when_to_use": "此规划框架适用于宏观经济分析、行业深度研究、资本市场展望及政策影响评估等任务。尤其适合需要结合定量与定性信息,进行多维度论证、风险提示和未来展望的金融分析场景。", "content": "[{'step': 1, 'action': '明确核心观点与分析目标', 'output': \"提炼出报告的核心观点,并围绕其构建分析框架。例如,本报告明确了'反内卷政策驱动量价再平衡'为核心逻辑。\", 'completion_criteria': '核心观点清晰且具有逻辑一致性,能够贯穿全文;分析框架包含供需、生产、价格、非制造业等多个维度。', 'common_issues': '核心观点模糊或过于宽泛,导致后续分析缺乏聚焦。', 'solutions': '在初步调研后,列出可能的核心观点并评估其对整体分析的支撑力,选择最具解释力的观点作为主线。'}, {'step': 2, 'action': '组织章节结构,按逻辑递进安排内容', 'output': '将分析分为供需分析、生产动能、价格修复、非制造业景气度等模块,确保各部分逻辑连贯且层层递进。', 'completion_criteria': '每个章节的内容紧密围绕核心观点展开,章节间逻辑顺畅,避免信息重复或跳跃。', 'common_issues': '章节结构松散,内容之间缺乏联系,导致读者难以抓住重点。', 'solutions': '绘制章节逻辑图,确保每部分内容既独立又服务于整体,必要时调整章节顺序以增强连贯性。'}, {'step': 3, 'action': '优先展示关键结论,辅以数据和图表支持', 'output': '在开篇明确提出核心结论,并通过图表(如PMI分项、供需缺口变化等)直观展示关键数据。', 'completion_criteria': '核心结论突出,数据和图表与文字分析紧密结合,能够快速传递信息。', 'common_issues': '关键结论被淹没在大量背景信息中,未能第一时间吸引读者注意力。', 'solutions': \"采用'结论先行'的写作方式,将核心结论放在段落开头,并用简明扼要的语言表达。\"}, {'step': 4, 'action': '平衡定量与定性信息,历史与预测数据', 'output': '结合历史数据(如PMI指数变化)和未来预测(如PPI同比增速边际改善),同时加入定性分析(如政策影响解读)。', 'completion_criteria': '定量数据准确且来源可靠,定性分析有理论依据;历史数据与预测数据分布合理,避免偏重某一类信息。', 'common_issues': '过度依赖定量数据而忽视定性分析,或反之;历史数据与预测数据比例失衡。', 'solutions': '制定信息分布计划,确保每种类型的信息占比均衡,并在分析中强调两者的关联性。'}, {'step': 5, 'action': '提出风险因素并评估不确定性', 'output': '在分析后期单独列出风险提示,讨论全球贸易摩擦和地缘政治冲突等潜在风险。', 'completion_criteria': '风险提示全面且具体,能够覆盖主要不确定因素;对每种风险的可能性和影响程度进行评估。', 'common_issues': '风险提示过于笼统,缺乏针对性;忽略某些重要风险因素。', 'solutions': '建立风险清单,逐一评估其可能性和影响,并在报告中提供应对策略或监控建议。'}, {'step': 6, 'action': '总结展望并提出行动建议', 'output': '基于当前分析,提出对未来市场走势的判断(如三季度资本市场回稳向好),并给出关注方向(如价格修复可持续性)。', 'completion_criteria': '总结部分简洁有力,行动建议切实可行,能够为决策者提供明确指导。', 'common_issues': '总结流于形式,缺乏实质性内容;行动建议空洞或不切实际。', 'solutions': '从分析中提炼关键洞察,结合实际情况提出具体操作建议,并附上实施路径。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:47:13", "modified_time": "2025-08-14 04:47:13", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "b65bea54c39f4c62be6c2f9573d053df", "experience_type": "text", "when_to_use": "适用于宏观经济分析、政策影响评估、市场趋势预测及投资策略制定等金融分析任务,尤其是需要结合定量与定性数据进行深度解析的场景。", "content": "[{'step': 1, 'action': '明确分析目标和核心问题', 'output': '确定报告的核心主题(如关税政策对全球经济的影响、非农数据对美联储货币政策的影响),并列出需要解答的关键问题。', 'evaluation': '是否清晰定义了核心问题,并围绕其展开逻辑框架。常见问题是目标过于宽泛,导致分析缺乏聚焦,应对方法是通过团队讨论或客户沟通明确优先级。', 'common_issues': ['目标模糊', '关键问题未覆盖'], 'solutions': ['细化问题清单', '与利益相关方确认']}, {'step': 2, 'action': '收集并整理多维度数据', 'output': '从官方渠道(如白宫官网、统计局)获取定量数据,并结合行业动态、政策文件等定性信息,形成初始数据集。', 'evaluation': '数据是否全面且来源可靠,是否涵盖历史、当前和预测数据。常见问题是数据不完整或过时,应对方法是交叉验证数据来源。', 'common_issues': ['数据不完整', '数据时效性不足'], 'solutions': ['多渠道验证数据', '定期更新数据库']}, {'step': 3, 'action': '构建章节结构和信息优先级', 'output': '设计报告框架,按照“宏观观察→国内事件/数据→海外事件/数据→未来展望”的顺序组织内容,确保核心结论在前,支撑细节在后。', 'evaluation': '章节安排是否逻辑清晰,核心结论是否突出。常见问题是信息堆砌无序,应对方法是先提炼核心观点再补充支持材料。', 'common_issues': ['信息堆砌', '优先级混乱'], 'solutions': ['提前规划章节结构', '使用摘要突出核心结论']}, {'step': 4, 'action': '进行定量与定性分析', 'output': '对关键指标(如关税税率、就业数据、通胀率)进行定量建模与趋势分析,同时结合政策解读和市场反应进行定性推演。', 'evaluation': '分析是否平衡了定量与定性视角,是否能够揭示潜在风险和机会。常见问题是忽略定性因素,应对方法是引入专家访谈或政策解读。', 'common_issues': ['定量与定性失衡', '忽略政策背景'], 'solutions': ['增加政策解读模块', '引入外部专家意见']}, {'step': 5, 'action': '提出风险因素和不确定性处理方案', 'output': '识别主要风险点(如关税对通胀的传导滞后性、就业市场的波动性),并通过情景分析(乐观/中性/悲观)展示多种可能性。', 'evaluation': '风险因素是否全面且及时提出,是否提供了应对策略。常见问题是风险分析流于表面,应对方法是深入挖掘潜在影响。', 'common_issues': ['风险分析浅显', '缺乏应对建议'], 'solutions': ['引入情景模拟', '制定具体应对措施']}, {'step': 6, 'action': '整合大类资产方向与投资建议', 'output': '基于前述分析,给出针对不同资产类别(如美元、黄金、A股)的投资策略,强调短期波动与长期趋势的结合。', 'evaluation': '投资建议是否具体且具有可操作性,是否与前期分析一致。常见问题是建议脱离实际,应对方法是回溯验证。', 'common_issues': ['建议空洞', '与分析脱节'], 'solutions': ['结合数据分析', '提供具体执行路径']}, {'step': 7, 'action': '撰写报告并优化表达', 'output': '完成初稿后,检查语言简洁性、逻辑连贯性和图表美观度,确保读者能快速抓住重点。', 'evaluation': '报告是否易读且专业,是否避免冗长和技术术语堆砌。常见问题是表述晦涩,应对方法是邀请非专业人员审阅。', 'common_issues': ['语言晦涩', '图表杂乱'], 'solutions': ['简化语言', '统一图表风格']}, {'step': 8, 'action': '复核与发布', 'output': '由团队成员交叉审核,确保数据准确性和结论一致性,最终对外发布。', 'evaluation': '是否经过严格校对,是否存在明显错误。常见问题是遗漏错误,应对方法是建立标准化审核流程。', 'common_issues': ['数据错误', '审核流程缺失'], 'solutions': ['设立审核清单', '多人交叉验证']}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:48:19", "modified_time": "2025-08-14 04:48:19", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "0108a9a255a8454c97b7f09ef0f8ade0", "experience_type": "text", "when_to_use": "此规划框架适用于政策影响分析、宏观经济研究、行业深度报告以及涉及公共财政与社会政策的金融分析任务。特别适合需要评估政策实施效果、资金来源及综合施策方案的任务。", "content": "[{'step': 1, 'action': '明确政策背景和预期目标,梳理政策出台的逻辑链条。', 'output': '生成政策背景概述段落,包括政策出台的原因、符合预期的理由以及未来可能的发展方向。', 'evaluation_criteria': '是否清晰阐述了政策的历史沿革、当前背景和潜在趋势?是否能够帮助读者快速理解政策的核心驱动力?', 'common_issues': '背景信息过于冗长或缺乏重点;未能有效突出政策的关键驱动因素。', 'solutions': '聚焦于关键历史节点和政策动向,避免过多细节;使用简明的语言概括政策意图和预期目标。'}, {'step': 2, 'action': '分解政策的核心意义,从多维度分析其直接和间接影响。', 'output': '形成政策意义分析章节,涵盖对居民部门、消费市场及宏观经济的多层次影响。', 'evaluation_criteria': '是否全面覆盖了政策的核心意义?是否平衡了定量与定性分析?是否突出了信号意义的重要性?', 'common_issues': '分析维度单一,忽略间接影响;过度依赖定性描述而缺乏数据支持。', 'solutions': '确保每个维度(如生育意愿、消费提振、信号意义)都有独立论述,并结合定量数据进行支撑;通过案例或类比增强说服力。'}, {'step': 3, 'action': '估算政策规模及其经济效应,结合乘数效应进行扩展分析。', 'output': '生成政策规模预测段落,包括年度发放金额、消费提升规模及经济循环的逻辑推导。', 'evaluation_criteria': '是否提供了清晰的计算逻辑和合理的假设?是否充分考虑了乘数效应的影响?', 'common_issues': '计算过程不透明或假设不合理;忽视经济循环的动态反馈机制。', 'solutions': '详细列出计算公式和假设条件;通过图表或示例展示经济循环的作用路径。'}, {'step': 4, 'action': '探讨资金来源问题,提出具体的解决方案并评估可行性。', 'output': '形成资金来源分析章节,涵盖多种资金来源的可能性及建议改革方向。', 'evaluation_criteria': '是否提出了多样化且可行的资金来源方案?是否对每种方案进行了可行性评估?', 'common_issues': '资金来源单一,缺乏创新性;未对方案的可行性进行深入讨论。', 'solutions': '结合实际情况提出多种资金来源(如一般公共预算、国资上缴等),并逐一分析其优劣势;引用相关案例增强可信度。'}, {'step': 5, 'action': '设计综合施策方案,提出配套措施以增强政策效果。', 'output': '生成综合施策建议章节,包括教育、住房、假期制度等方面的补充政策建议。', 'evaluation_criteria': '是否提出了系统性、可操作性强的配套措施?是否充分考虑了政策间的协同效应?', 'common_issues': '配套措施不具体或缺乏实际操作性;忽视政策间的相互作用。', 'solutions': '针对每个领域提出具体且可落地的措施;通过逻辑推导说明各政策间的协同关系。'}, {'step': 6, 'action': '识别并分析潜在风险,提出应对策略。', 'output': '形成风险提示部分,明确政策实施过程中可能的风险及应对方法。', 'evaluation_criteria': '是否全面识别了主要风险?提出的应对策略是否具有针对性和可操作性?', 'common_issues': '风险识别不足或流于表面;应对策略缺乏具体实施路径。', 'solutions': '基于政策内容和外部环境,系统性地识别潜在风险;为每项风险提供切实可行的应对建议。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:49:52", "modified_time": "2025-08-14 04:49:52", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "3c437e9a29724bbcbd2e78d7bae99a6b", "experience_type": "text", "when_to_use": "适用于宏观经济分析、央行政策解读、投资策略制定等需要结合定量与定性信息的任务。", "content": "[{'step': 1, 'action': '明确核心结论', 'output': '提炼出一个简洁的核心结论(如‘9月降息仍需等待数据支持’),并将其置于报告开头。', 'evaluation': '核心结论是否清晰且具有指导意义,能否快速抓住读者注意力。', 'common_issues': ['核心结论模糊或过于复杂。', '未充分考虑目标受众需求。'], 'solutions': ['反复打磨核心结论,确保其简洁有力。', '提前了解目标受众的关注点。']}, {'step': 2, 'action': '收集并整理关键数据', 'output': '汇总相关定量数据(如GDP、通胀指标),并按时间序列或逻辑关系分类。', 'evaluation': '数据是否全面、准确,是否能支撑后续分析。', 'common_issues': ['数据来源不权威或更新滞后。', '数据过多导致信息冗余。'], 'solutions': ['使用权威机构发布的最新数据。', '筛选最具代表性的数据点,避免堆砌。']}, {'step': 3, 'action': '进行定量与定性分析', 'output': '基于定量数据展开定性解读,揭示背后的趋势与逻辑(如‘净进口减少拉动GDP增长’)。', 'evaluation': '分析是否逻辑严密,是否能将数据转化为洞察。', 'commonissues': ['定量与定性脱节,缺乏关联性。', '忽视次要变量的影响。'], 'solutions': ['建立清晰的因果链条,确保定量与定性紧密结合。', '适当提及次要变量,展现全面视角。']}, {'step': 4, 'action': '构建未来展望', 'output': '根据现有数据和趋势,推导未来可能的情景(如‘进口量可能在三季度回升’)。', 'evaluation': '展望是否合理且多样,是否涵盖主要可能性。', 'common_issues': ['展望过于单一或武断。', '忽略极端情况。'], 'solutions': ['提供至少两种可能情景,保持开放态度。', '特别标注极端情况的可能性及其影响。']}, {'step': 5, 'action': '总结风险因素', 'output': '列出潜在风险(如‘美联储独立性遭受破坏’),并简要说明其可能后果。', 'evaluation': '风险提示是否全面且具体,是否能引起读者重视。', 'common_issues': ['风险因素遗漏或泛化。', '风险描述不够具体。'], 'solutions': ['参考行业共识,确保覆盖主要风险。', '用实际案例或数据支持风险描述。']}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:51:21", "modified_time": "2025-08-14 04:51:21", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "3bcbcc0b03e64c2fb5cb2c023e934bd5", "experience_type": "text", "when_to_use": "此规划框架适用于宏观经济与市场分析任务,特别是涉及货币政策、经济数据解读和市场表现评估的定期报告。例如:行业深度研究、投资策略制定、风险评估报告等。", "content": "[{'step': 1, 'action': '明确报告目标与受众', 'output': '定义报告的核心主题(如美国劳动力市场降温对货币政策的影响)及目标受众(如机构投资者或宏观策略团队)。', 'completion_criteria': '报告的主题清晰且与当前市场热点高度相关,能够直接服务于投资决策需求。', 'common_issues': '主题过于宽泛或偏离实际投资需求。', 'solutions': '在开题阶段与团队讨论确认,并结合市场动态调整主题范围。'}, {'step': 2, 'action': '收集并整理关键数据', 'output': '从权威来源(如CME FedWatch、Wind、Fred等)获取最新宏观数据、政策声明和市场表现数据,并分类存储(如就业数据、央行政策路径、市场反应等)。', 'completion_criteria': '数据覆盖全面且准确,能够支持后续分析;数据来源明确标注。', 'common_issues': '数据不完整或滞后,影响分析时效性。', 'solutions': '建立固定的数据更新机制,提前规划数据采集时间表。'}, {'step': 3, 'action': '构建章节结构并分配信息优先级', 'output': '按照逻辑顺序组织章节:1)央行动态/政策路径;2)重点经济数据;3)市场表现;4)结论与投资建议。优先展示核心结论和关键数据。', 'completion_criteria': '章节结构清晰,信息优先级合理,核心结论突出且易于理解。', 'common_issues': '章节安排混乱或信息堆砌导致重点不突出。', 'solutions': '通过内部评审优化结构,确保每部分内容紧密围绕主题展开。'}, {'step': 4, 'action': '进行多层次论证分析', 'output': '采用递进式论证方法:1)描述现象(如非农数据异常波动);2)解释原因(如劳动力市场需求走弱);3)推导影响(如降息预期升温);4)提出应对策略(如配置黄金和新兴市场资产)。', 'completion_criteria': '论证逻辑严密,观点层层递进,能够有效引导读者理解分析思路。', 'common_issues': '论证跳跃性强或缺乏数据支撑。', 'solutions': '确保每个论点都有充分的数据或图表佐证,避免主观臆断。'}, {'step': 5, 'action': '平衡定量与定性分析', 'output': '结合定量数据(如非农新增就业人数、失业率变化)和定性判断(如美联储鹰派表态的意义),并通过图表直观呈现。', 'completion_criteria': '定量与定性分析比例均衡,图表设计简洁明了,能快速传递关键信息。', 'common_issues': '过度依赖单一类型分析,忽视其他维度。', 'solutions': '为每类信息设定最低占比要求,确保多样化视角。'}, {'step': 6, 'action': '适时引入风险提示', 'output': '在结论部分明确提出潜在风险(如海外流动性恶化、地缘冲突超预期),并说明其可能影响。', 'completion_criteria': '风险提示具体且具有针对性,不会显得空洞或敷衍。', 'common_issues': '风险提示位置不当或内容模糊。', 'solutions': '将风险提示放在结论后,用简短语言概括但不失专业性。'}, {'step': 7, 'action': '总结并提炼投资建议', 'output': '基于前述分析,给出明确的投资建议(如看好黄金配置价值、关注新兴市场表现),并附带操作窗口期。', 'completion_criteria': '建议具体可行,与分析内容高度一致,便于执行。', 'common_issues': '建议泛泛而谈或脱离分析基础。', 'solutions': '确保建议直接来源于分析结果,避免无依据扩展。'}, {'step': 8, 'action': '审阅与优化表述', 'output': '检查报告的语言表达是否简洁流畅,术语使用是否规范,图表标题和注释是否完整。', 'completion_criteria': '报告整体质量高,无明显语言错误或格式问题。', 'common_issues': '表述冗长或存在歧义。', 'solutions': '邀请同事交叉审阅,重点关注复杂段落的清晰度。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:52:33", "modified_time": "2025-08-14 04:52:33", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "a68d3d40784f4e33a84939734f766dfe", "experience_type": "text", "when_to_use": "适用于行业深度研究、政策影响分析、宏观经济事件解读以及跨市场风险评估等任务。尤其适合涉及复杂政策变化(如关税调整)、全球供应链冲击或国际贸易局势的研究场景。", "content": "[{'step': 1, 'action': '明确研究背景与核心问题', 'output': '撰写清晰的背景介绍,定义研究的核心议题及其重要性。', 'completion_criteria': '背景部分需包括关键事件的时间线、相关方的主要行动和动机,能够快速引导读者理解问题的紧迫性和复杂性。', 'common_issues': '背景信息过于冗长或偏离主题。', 'solutions': '聚焦于关键事件和数据点,避免过多细节干扰主线逻辑。'}, {'step': 2, 'action': '构建结构化的章节框架', 'output': '设计报告的目录,确保各章节逻辑连贯且层次分明。', 'completion_criteria': '章节安排应遵循从整体到局部的原则,例如:先概述政策变化,再深入具体条款,最后分析影响。', 'common_issues': '章节划分不清晰,导致内容重复或遗漏。', 'solutions': '提前列出每个章节的关键问题,并在写作过程中严格对标。'}, {'step': 3, 'action': '收集并整理定量与定性数据', 'output': '汇总相关政策文件、历史数据、图表以及专家观点,形成初步数据库。', 'completion_criteria': '数据覆盖全面,来源可靠;定量数据需有清晰标注,定性分析需引用权威来源。', 'common_issues': '数据过时或缺乏代表性。', 'solutions': '优先使用最新官方数据,同时结合多渠道验证信息准确性。'}, {'step': 4, 'action': '进行政策条款的逐条解析', 'output': '详细说明政策变化的具体内容,包括税率调整、适用范围、执行细则等。', 'completion_criteria': '每一条款的解释需准确无误,且附带实际案例或数据支持。', 'commonissues': '条款解读流于表面,未能揭示深层意义。', 'solutions': '通过对比新旧政策差异,突出变化背后的逻辑和潜在影响。'}, {'step': 5, 'action': '评估政策对不同利益相关方的影响', 'output': '分别从国家层面(如财政收入、通胀水平)、行业层面(如供应链稳定性)和个人层面(如消费者成本)分析政策后果。', 'completion_criteria': '分析需兼顾短期和长期影响,涵盖正面与负面效应。', 'common_issues': '忽略次要但重要的利益相关方。', 'solutions': '采用系统思维,绘制利益相关方地图,逐一覆盖所有主要群体。'}, {'step': 6, 'action': '提出风险提示与不确定性管理建议', 'output': '识别可能的政策超预期变动及外部环境变化,给出应对策略。', 'completion_criteria': '风险提示需具体、可操作,避免泛泛而谈。', 'common_issues': '风险提示过于笼统,缺乏针对性。', 'solutions': '基于数据分析,量化风险发生的概率和潜在损失。'}, {'step': 7, 'action': '总结核心结论与投资建议', 'output': '提炼报告中的关键发现,提供明确的投资指导或政策建议。', 'completion_criteria': '结论简洁有力,建议具有实操性。', 'common_issues': '结论模糊或建议脱离实际情况。', 'solutions': '回溯全文逻辑链,确保结论与分析一致。'}, {'step': 8, 'action': '优化信息展示方式', 'output': '制作高质量的图表和可视化工具,辅助核心观点表达。', 'completion_criteria': '图表直观易懂,能有效补充文字内容。', 'common_issues': '图表信息过载或形式单一。', 'solutions': '选择合适的图表类型,注重颜色搭配和排版布局。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:54:26", "modified_time": "2025-08-14 04:54:26", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "2174a1c3be0e41b8abe0d78f4263441b", "experience_type": "text", "when_to_use": "适用于地缘政治与经济政策相关的深度分析任务,尤其是涉及复杂国际关系、贸易关税政策影响评估以及多国博弈的金融研究报告。这类报告通常需要结合定量和定性分析,涵盖历史背景、当前动态及未来情景预测,并强调风险提示。", "content": "[{'step': 'Step 1: 确定核心主题与关键问题', 'action': '明确研究的核心主题(如:美国二级关税对中俄印等国的影响),并提炼出3-5个关键问题(例如:俄乌冲突最新态势、美国威胁俄罗斯停火的原因、中国应对二级关税的可能性)。这些问题应覆盖事件背景、利益相关方动机、潜在后果等方面。', 'output': '形成清晰的研究框架,包括章节标题和每个部分的目标。', 'completion_criteria': '核心问题是否全面覆盖了议题的主要维度;框架是否逻辑连贯且易于读者理解。', 'common_issues_and_solutions': [{'issue': '问题过于宽泛,难以聚焦。', 'solution': '通过头脑风暴列出所有可能的问题点,然后筛选出最具代表性和紧迫性的几个问题进行深入探讨。'}, {'issue': '框架缺乏层次感。', 'solution': '按照‘从宏观到微观’或‘从现状到未来’的顺序组织内容,确保信息呈现有条理。'}]}, {'step': 'Step 2: 收集和整理数据与资料', 'action': '收集与核心主题相关的公开数据(如关税税率表、能源进口量)、官方声明(如特朗普讲话、外交部新闻发布会)和第三方报道(如彭博社、路透社)。同时,记录重要时间线和关键事件。', 'output': '建立一个结构化的数据库,包含定量数据(如图表中的税率变化)和定性描述(如谈判进展、战场形势)。', 'completion_criteria': '数据来源是否权威可靠;数据是否足够支持后续分析;是否有遗漏重大事件。', 'common_issues_and_solutions': [{'issue': '数据来源单一,可能存在偏差。', 'solution': '尽量使用多种来源交叉验证信息,并注明引用出处以增强可信度。'}, {'issue': '数据不完整或更新滞后。', 'solution': '利用实时新闻跟踪工具补充最新动态,并主动联系行业专家获取一手信息。'}]}, {'step': 'Step 3: 构建论证逻辑与分析路径', 'action': '针对每个关键问题,设计逐步递进的论证路径。例如,在解释‘美国为什么威胁俄罗斯停火’时,先说明俄罗斯战场推进如何触动特朗普底线,再分析其对欧洲安全影响力的需求,最后讨论压制通胀和抢占市场份额的经济考量。', 'output': '形成一套完整的因果链条,确保每个观点都有充分的事实依据支撑。', 'completion_criteria': '论证是否严密无漏洞;是否合理平衡定量和定性信息;结论是否自然得出而非强行推导。', 'common_issues_and_solutions': [{'issue': '论证跳跃,中间环节缺失。', 'solution': '采用‘假设-验证’的方法,逐一填补推理过程中的空白。'}, {'issue': '过度依赖单一变量忽略其他可能性。', 'solution': '引入多元视角,考虑不同利益相关方的行为模式及其互动效应。'}]}, {'step': 'Step 4: 编写报告主体内容', 'action': '根据前期构建的框架撰写正文,遵循‘总分总’结构——开篇概述核心观点,中间详细展开各子议题,结尾总结主要发现并提出展望。注意语言简洁明了,避免冗长赘述。', 'output': '完成初稿,内容涵盖所有预定章节,每部分均围绕核心问题展开。', 'completion_criteria': '段落衔接是否流畅;信息展示优先级是否符合预期;核心结论是否突出。', 'common_issues_and_solutions': [{'issue': '内容堆砌,缺乏重点。', 'solution': '重新审查每段文字,删除冗余信息,保留最能体现核心论点的内容。'}, {'issue': '术语晦涩难懂。', 'solution': '用通俗易懂的语言解释专业概念,必要时添加注释或案例辅助说明。'}]}, {'step': 'Step 5: 插入可视化图表与附录', 'action': '为支持正文内容,插入相关图表(如税率变化图、资产表现图)和附录(如地缘事件追踪表)。确保图表设计直观易读,与文本内容高度关联。', 'output': '生成最终版本文档,包含图文并茂的正文和详尽的附录信息。', 'completion_criteria': '图表是否准确反映数据;是否增强了信息传达效果;附录是否补充了必要的细节。', 'common_issues_and_solutions': [{'issue': '图表过多导致视觉疲劳。', 'solution': '精选最关键的数据制作图表,其余以文字形式简要说明。'}, {'issue': '图表与正文脱节。', 'solution': '在正文中明确引用图表内容,并解释其意义。'}]}, {'step': 'Step 6: 风险提示与情景预判', 'action': '基于现有信息,识别潜在的风险因素(如美俄对峙升级、中东局势恶化),并提出多种可能的情景预判(如‘折中路线’或‘全面泛化’)。这部分内容需谨慎措辞,避免引发误解。', 'output': '撰写风险提示章节,提供清晰的预警信号和应对建议。', 'completion_criteria': '风险提示是否全面;情景预判是否合理;是否存在夸大或低估风险的情况。', 'common_issues_and_solutions': [{'issue': '风险提示过于笼统,缺乏实际指导意义。', 'solution': '结合具体案例阐述风险发生的条件及后果,增加可操作性。'}, {'issue': '情景预判脱离现实。', 'solution': '参考历史类似事件的发展轨迹,提高预判的可信度。'}]}, {'step': 'Step 7: 审核与优化', 'action': '由团队成员或外部专家审阅报告,检查逻辑一致性、数据准确性及表达清晰度。根据反馈修改完善,直至达到发布标准。', 'output': '定稿版本,满足内部审核要求并准备对外发布。', 'completion_criteria': '是否获得一致认可;是否解决了所有已知问题;是否具备较高的专业水准。', 'common_issues_and_solutions': [{'issue': '审核意见分歧较大。', 'solution': '召开集体讨论会,综合各方意见找到最佳解决方案。'}, {'issue': '反复修改耗时过长。', 'solution': '制定严格的审核时间表,限定每轮修改次数。'}]}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:56:09", "modified_time": "2025-08-14 04:56:09", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "da1d801bfb934df7a31260ab7b8e17c0", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、宏观经济分析、大宗商品市场评估以及风险评估报告等任务。尤其适合需要结合定量与定性信息,从宏观到微观层层递进分析的复杂金融任务。", "content": "[{'step': 1, 'action': '明确研究主题和目标,定义核心问题', 'output': '清晰的研究目标和核心问题陈述,例如‘分析美国关税政策对全球经济及铜行业的影响’。', 'completion_criteria': '核心问题是否聚焦且具有实际意义;目标是否可量化或可验证。', 'common_issues': '目标过于宽泛或模糊,导致后续分析缺乏方向性。', 'solutions': '通过头脑风暴和初步数据扫描,提炼出具体且可操作的核心问题。'}, {'step': 2, 'action': '收集并整理相关数据和信息', 'output': '结构化数据集(如经济指标、行业数据)和非结构化信息(如政策声明、市场新闻)的初步汇总。', 'completion_criteria': '数据覆盖全面,来源可靠;信息分类合理,便于后续分析。', 'common_issues': '数据不完整或过时,信息冗余或无关。', 'solutions': '优先选择权威数据源(如Wind、官方统计),建立数据清洗和筛选机制。'}, {'step': 3, 'action': '设计报告章节结构,确定信息展示优先级', 'output': '目录和章节框架,明确各部分的内容重点和逻辑顺序。', 'completion_criteria': '章节安排是否符合由宏观到微观的递进逻辑;核心结论是否在关键位置突出。', 'common_issues': '章节间逻辑断裂,信息堆砌而缺乏层次感。', 'solutions': '遵循‘背景→现状→影响→展望’的经典分析路径,确保每章服务于整体目标。'}, {'step': 4, 'action': '进行宏观热点分析,揭示大环境变化', 'output': '对宏观经济政策、国际局势及其潜在影响的详细解读。', 'completion_criteria': '分析是否涵盖关键事件和数据;是否能够清晰解释政策对市场的传导机制。', 'common_issues': '忽视政策细节或低估其影响,分析流于表面。', 'solutions': '结合历史案例和当前数据,深入拆解政策逻辑及其连锁反应。'}, {'step': 5, 'action': '展开行业和标的分析,结合定量与定性方法', 'output': '针对特定行业或资产(如铜行业)的供需、库存、价格趋势等多维度分析。', 'completion_criteria': '定量数据是否支撑定性判断;分析是否涵盖短期波动与长期趋势。', 'common_issues': '过度依赖单一数据类型,忽略其他重要因素。', 'solutions': '平衡使用图表、统计数据和专家观点,确保分析全面且有说服力。'}, {'step': 6, 'action': '总结核心结论,提出行动建议', 'output': '简明扼要的总结段落,包含主要发现、未来展望和投资建议。', 'completion_criteria': '结论是否直接回应研究目标;建议是否具体可行。', 'common_issues': '结论冗长或偏离主题,建议空泛无操作性。', 'solutions': '采用金字塔原理,先呈现最核心的观点,再逐步展开细节。'}, {'step': 7, 'action': '审阅与优化报告内容', 'output': '经过校对和调整后的最终版本,包括语言表达、图表格式和逻辑连贯性改进。', 'completion_criteria': '报告是否条理清晰、无明显错误;是否符合专业标准。', 'common_issues': '语言啰嗦或术语过多,图表不够直观。', 'solutions': '邀请同行评审,确保内容简洁易懂;优化图表设计以增强视觉效果。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:57:32", "modified_time": "2025-08-14 04:57:32", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "fc469d967a224f50a92596eb79df1803", "experience_type": "text", "when_to_use": "此规划框架适用于宏观金融分析任务,包括但不限于行业深度研究、宏观经济形势研判、投资标的分析及风险评估报告。特别适合在复杂经济环境下,需要整合国内外数据、政策解读与市场动态的综合分析场景。", "content": "[{'step': 1, 'action': '明确分析目标并制定整体框架', 'output': '确定分析的核心主题(如“东稳西缓”宏观周报),划分章节结构(国内宏观、国际宏观、货币流动性等),并列出关键指标清单。', 'evaluation_criteria': '是否清晰定义了分析范围和核心问题;章节结构是否逻辑严谨且覆盖全面。', 'common_issues': '主题过于宽泛或章节重复交叉。', 'solutions': '通过头脑风暴梳理主要变量,并参考历史成功案例优化框架。'}, {'step': 2, 'action': '收集与整理定量和定性数据', 'output': '从权威来源(如Wind、官方统计数据)获取高频数据,结合政策文件、会议纪要等定性信息,形成初步数据库。', 'evaluation_criteria': '数据是否全面、准确且具时效性;是否对数据进行了初步清洗和分类。', 'common_issues': '数据缺失或来源不可靠;数据冗余导致分析效率低下。', 'solutions': '建立标准化数据采集流程,优先选择可信度高的来源,必要时补充推算或替代指标。'}, {'step': 3, 'action': '分模块深入分析,突出核心结论', 'output': '按章节逐一展开分析,例如国内需求端(消费/外需)、生产端(制造业景气度)、物价表现(CPI/PPI)等,提炼每部分的关键发现。', 'evaluation_criteria': '各模块是否有独立的洞察且彼此关联;核心结论是否简明扼要地呈现。', 'common_issues': '分析流于表面,缺乏深度;结论分散未聚焦。', 'solutions': '采用“现象-原因-影响”三步法逐层剖析,确保每个模块至少提出一个明确结论。'}, {'step': 4, 'action': '平衡历史回顾与未来预测', 'output': '基于当前数据解释过去趋势,同时结合政策导向和外部环境变化进行前瞻性判断(如美联储降息预期、专项债发行进度)。', 'evaluation_criteria': '历史数据分析是否为预测奠定基础;预测是否合理且具有可操作性。', 'common_issues': '过度依赖历史数据忽略新变量;预测过于主观缺乏支撑。', 'solutions': '使用情景分析法,设定多种可能性并评估其概率;引用权威机构观点增强说服力。'}, {'step': 5, 'action': '识别并处理不确定性与风险因素', 'output': '列举潜在风险点(如政策落地不及预期、海外贸易摩擦加剧),并讨论其可能影响路径。', 'evaluation_criteria': '风险识别是否全面;应对措施是否具体可行。', 'common_issues': '忽视次要但重要的风险;应对策略空泛无实操价值。', 'solutions': '构建风险矩阵,根据发生概率和影响程度排序;提供具体的监测指标和预警信号。'}, {'step': 6, 'action': '整合信息,撰写报告并设计可视化图表', 'output': '将所有分析结果汇总成完整报告,辅以图表展示关键数据(如地铁客运量、国债收益率曲线),形成直观易懂的内容。', 'evaluation_criteria': '报告是否条理清晰、重点突出;图表是否有效支持文字论述。', 'common_issues': '内容堆砌,缺乏逻辑主线;图表过多干扰阅读体验。', 'solutions': '遵循“金字塔原理”,先总后分组织内容;精选最具代表性的图表,避免冗余。'}, {'step': 7, 'action': '审阅与反馈优化', 'output': '邀请同行专家审阅初稿,根据反馈调整语言表述、补充遗漏内容,最终定稿。', 'evaluation_criteria': '是否充分吸收反馈意见;终稿是否达到专业水准。', 'common_issues': '忽略外部建议;修改过程拖延。', 'solutions': '设置固定时间窗口用于收集反馈;指定专人负责修订工作。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:58:51", "modified_time": "2025-08-14 04:58:51", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "0b07363d91e747e1bc943377b48198ba", "experience_type": "text", "when_to_use": "该规划框架适用于宏观经济与市场分析任务,特别是涉及多资产类别、跨区域经济数据解读和政策影响评估的报告制作。例如:宏观策略周报、投资组合策略建议、全球市场动态跟踪等。", "content": "[{'step': 1, 'action': '明确分析目标与核心问题', 'output': '确定本次分析的核心结论方向(如短期市场交易逻辑、资产配置建议)以及需要解决的关键问题(如国内政策对市场的影响、美国非农数据下修的意义)。', 'evaluation': '是否能够清晰定义出报告的核心投资要点,并确保其具有实际指导意义。', 'common_issues': '可能忽略次要但重要的背景信息,导致分析片面。', 'solutions': '通过团队讨论或初步资料收集,全面梳理当前市场热点和潜在风险点。'}, {'step': 2, 'action': '组织章节结构并分配优先级', 'output': '根据分析内容的重要性,构建清晰的章节框架。通常包括国内外经济与政策分析、重要事件回顾、资产价格走势、高频数据展示及流动性分析。', 'evaluation': '章节安排是否符合逻辑递进关系,信息展示是否突出重点。', 'common_issues': '章节间可能存在重复或逻辑断裂,导致阅读体验不佳。', 'solutions': '在初稿完成后进行整体审查,确保各部分衔接流畅且不冗余。'}, {'step': 3, 'action': '收集并整理定量与定性数据', 'output': '整合宏观经济指标(如GDP、PMI、就业数据)、金融市场表现(如股指、商品价格、汇率)以及政策声明等多维度数据。', 'evaluation': '数据是否全面覆盖关键领域,且来源可靠、更新及时。', 'common_issues': '数据过时或遗漏重要变量,影响分析准确性。', 'solutions': '建立固定的数据获取渠道,定期验证数据质量。'}, {'step': 4, 'action': '构建论证逻辑与观点支撑', 'output': '采用层层递进的方式,先从宏观环境切入,再逐步细化到具体市场和资产类别;结合历史数据与预测模型推导未来趋势。', 'evaluation': '论证是否严密,观点是否有充分的证据支持。', 'common_issues': '过度依赖单一数据点或假设条件过于乐观/悲观。', 'solutions': '引入敏感性分析或多情景模拟,增强结论稳健性。'}, {'step': 5, 'action': '提出风险因素并探讨不确定性', 'output': '识别主要风险点(如美联储货币政策转向、地缘政治冲突),并在适当时机以独立小节呈现,同时提供应对策略。', 'evaluation': '风险提示是否全面且具有前瞻性,是否能帮助读者理解潜在波动来源。', 'common_issues': '风险描述流于表面,缺乏深度剖析。', 'solutions': '结合案例研究或专家访谈,深入挖掘风险背后的驱动因素。'}, {'step': 6, 'action': '形成投资建议与排序', 'output': '基于前述分析,给出具体的投资标的强弱排序(如四大股指>国债>商品)及相关操作建议。', 'evaluation': '建议是否具有可执行性,是否与前期分析一致。', 'common_issues': '建议偏离分析基础,显得突兀或难以实施。', 'solutions': '重新核对每条建议的逻辑链条,确保其与数据和论点匹配。'}, {'step': 7, 'action': '设计可视化图表与附录', 'output': '为关键数据和趋势制作直观图表(如商品指数变化图、国债收益率曲线),并添加必要的注释和说明。', 'evaluation': '图表是否简洁明了,是否有助于快速理解复杂信息。', 'common_issues': '图表过多或设计混乱,分散注意力。', 'solutions': '限制图表数量,优化配色与布局,确保每个图表都有明确目的。'}, {'step': 8, 'action': '撰写总结与声明', 'output': '提炼核心结论,强调报告仅供参考,并注明免责条款。', 'evaluation': '总结是否简练有力,是否有效传达报告主旨。', 'common_issues': '总结篇幅过长,掩盖了关键信息。', 'solutions': '聚焦于最重要的3-5个发现,用精炼语言概括。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 04:59:54", "modified_time": "2025-08-14 04:59:54", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "e5436dfe336649bf8f0948b975a2dbda", "experience_type": "text", "when_to_use": "此规划框架适用于宏观经济数据预测与分析报告、行业深度研究、投资决策支持报告等需要结合定量与定性分析并形成明确结论的金融分析任务。尤其适合在数据驱动型预测场景中使用,例如季度经济指标预测、政策影响评估、市场趋势展望等。", "content": "[{'step': 1, 'action': '明确分析目标和范围', 'output': '确定报告的核心主题(如2025年7月宏观经济数据预测),以及需要覆盖的主要经济指标(如CPI、PPI、工业增加值等)。', 'completion_criteria': '目标清晰,范围界定合理,确保所有关键指标均被纳入分析框架。', 'common_issues': '范围过于宽泛或狭窄,导致分析重点不突出。', 'solutions': '通过团队讨论或客户沟通明确优先级,聚焦于对决策最有价值的指标。'}, {'step': 2, 'action': '收集和整理基础数据', 'output': '从合规渠道获取历史数据(如WIND数据库)、相关研究报告及政策文件,构建数据表单以支持后续分析。', 'completion_criteria': '数据完整且来源可靠,能够支撑对各经济指标的趋势分析。', 'common_issues': '数据缺失或质量不佳,影响分析准确性。', 'solutions': '采用多源交叉验证方法补充数据,必要时进行合理假设并说明依据。'}, {'step': 3, 'action': '设计章节结构并分配信息优先级', 'output': '按照“总-分-总”逻辑组织内容:开头概述主要结论,中间部分详细展开各项指标分析,结尾总结风险提示及未来展望。', 'completion_criteria': '章节安排符合逻辑,核心结论突出,信息分布均衡。', 'common_issues': '章节间衔接不流畅,信息堆砌导致重点不突出。', 'solutions': '提前绘制内容架构图,确保每部分内容服务于整体目标;通过图表和标题强化视觉引导。'}, {'step': 4, 'action': '开展定量分析与建模', 'output': '运用统计模型(如时间序列分析、回归模型)预测各经济指标的变化趋势,并生成预测值表格。', 'completion_criteria': '预测结果具有科学性和可解释性,能反映当前经济环境下的合理预期。', 'common_issues': '模型复杂度过高或过低,导致结果难以理解或缺乏说服力。', 'solutions': '选择适配问题背景的模型,注重透明性,提供参数选择和假设条件的详细说明。'}, {'step': 5, 'action': '整合定性分析与外部因素考量', 'output': '结合政策动态、国际市场变化等定性信息,调整定量预测结果,形成综合判断。', 'completion_criteria': '定性分析与定量预测相辅相成,能够全面反映内外部影响因素。', 'common_issues': '忽视重要外部变量,导致分析片面化。', 'solutions': '定期跟踪最新政策和市场动态,建立外部变量清单,逐一评估其潜在影响。'}, {'step': 6, 'action': '识别并披露风险因素', 'output': '列出可能影响预测准确性的主要风险点(如海外市场动荡),并提出应对建议。', 'completion_criteria': '风险提示具体且有据可依,能够帮助读者理解不确定性。', 'common_issues': '风险描述模糊或遗漏关键隐患。', 'solutions': '参考历史案例和同行研究成果,系统梳理潜在风险类别。'}, {'step': 7, 'action': '撰写报告并优化呈现形式', 'output': '完成最终版报告,包括摘要、正文、图表、附录等内容模块,确保语言简洁专业,视觉效果直观。', 'completion_criteria': '报告内容连贯,格式规范统一,便于阅读和引用。', 'common_issues': '排版混乱或表达冗长,降低用户体验。', 'solutions': '邀请同事审阅并反馈,根据意见优化布局和措辞。'}, {'step': 8, 'action': '发布及后续跟进', 'output': '将报告发送至目标受众,同时准备答疑材料,回应潜在疑问。', 'completion_criteria': '报告传播效果良好,用户反馈积极。', 'common_issues': '忽略后续互动机会,错失品牌塑造契机。', 'solutions': '主动收集反馈,持续改进分析方法,增强客户粘性。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 05:01:34", "modified_time": "2025-08-14 05:01:34", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "56209a17431449169f3331b9e5f8e2b0", "experience_type": "text", "when_to_use": "此规划框架适用于金融领域的宏观数据分析、行业深度研究、投资标的分析以及风险评估报告等任务,尤其是需要结合定量与定性信息进行预测和决策支持的场景。", "content": "[{'step': 1, 'action': '明确核心目标与关键问题', 'output': '定义清晰的核心预判或结论(如:社融增速阶段性见顶),并列出需回答的关键问题(如:信贷需求趋势、M1/M2增速变化原因)。', 'completion_criteria': '核心目标具体且可量化,所有相关问题均被识别并分类为定量/定性两类。', 'common_issues': '目标过于宽泛或模糊,导致后续分析缺乏方向。', 'solutions': '通过团队讨论或客户反馈确认核心目标,并将其分解为若干子问题。'}, {'step': 2, 'action': '收集和整理基础数据', 'output': '获取权威来源的历史数据(如央行官网、交易所数据),并对数据进行清洗和初步分析,形成基础数据表格(如图表6中的历史分项数据)。', 'completion_criteria': '数据完整、准确,涵盖所需时间范围及变量维度;无明显异常值或缺失值。', 'common_issues': '数据来源不可靠或覆盖不全,影响分析可信度。', 'solutions': '优先选择官方渠道数据,并交叉验证不同来源的一致性。'}, {'step': 3, 'action': '构建逻辑框架与假设条件', 'output': '基于行业规律和过往经验提出假设(如季初月信贷投放较低),并通过历史数据验证这些假设是否成立(如7月底转贴现利率接近零)。', 'completion_criteria': '假设合理且有据可依,能够解释大部分观察到的现象。', 'common_issues': '假设脱离实际,无法有效指导后续分析。', 'solutions': '参考同行研究成果或专家意见,确保假设符合市场现实。'}, {'step': 4, 'action': '分模块展开详细分析', 'output': '按照主题划分章节结构(如新增贷款、M1/M2增速、社融增量),每个模块分别包含定量分析(如预测值计算)、定性分析(如政策影响解读)。', 'completion_criteria': '各模块内容详实,结论之间逻辑连贯,避免重复或遗漏。', 'common_issues': '模块间关联性不足,导致整体分析碎片化。', 'solutions': '在每章开头简述本模块与其他部分的关系,并在结尾总结其对全局的意义。'}, {'step': 5, 'action': '整合信息并突出核心结论', 'output': '提炼出最核心的观点(如“社融增速将在7月见顶”),并以图表、标题等形式直观呈现,同时辅以文字说明支撑论点。', 'completion_criteria': '核心结论显而易见,无需读者自行归纳;次要信息作为补充但不过度喧宾夺主。', 'common_issues': '信息堆砌过多,使重点难以辨识。', 'solutions': '采用金字塔原理组织内容,先展示核心结论再逐步展开细节。'}, {'step': 6, 'action': '引入风险提示与不确定性管理', 'output': '系统梳理潜在风险因素(如出口超预期、经济复苏过快),并评估其可能对核心结论的影响,提供应对建议。', 'completion_criteria': '风险提示全面且客观,未回避敏感问题;应对措施切实可行。', 'common_issues': '忽视某些重大风险,导致分析失真。', 'solutions': '建立风险清单,逐一排查可能出现的极端情况及其概率。'}, {'step': 7, 'action': '撰写最终报告并优化表达', 'output': '完成正式文档,包括摘要、正文、图表、附录等内容,并使用专业术语和标准化格式提升可读性。', 'completion_criteria': '报告语言精炼、逻辑清晰,图表设计美观且易于理解;符合行业规范。', 'common_issues': '表述冗长或晦涩,降低传播效率。', 'solutions': '邀请非专业人士审阅,确保语言通俗易懂;利用图形化工具增强视觉效果。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 05:03:18", "modified_time": "2025-08-14 05:03:18", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "81ef7fb4d2274b23887311f8f8dbb2d5", "experience_type": "text", "when_to_use": "适用于宏观经济分析、行业深度研究、投资策略报告等需要结合定量与定性信息,且需对复杂经济现象进行结构化拆解的金融分析任务。", "content": "[{'step': 1, 'action': '明确核心问题和背景设定', 'output': '定义分析的核心问题(如美国经济能否摆脱关税和高利率影响)并概述宏观背景(如关税政策、市场反应等),为后续章节展开奠定基础。', 'completion_criteria': '核心问题清晰且具有针对性;背景信息能够直接支持分析目标。', 'common_pitfalls': '背景描述过于宽泛或脱离具体问题,导致读者难以聚焦。', 'solutions': '通过数据和关键事件(如非农数据、GDP增速)快速切入主题,避免冗长铺垫。'}, {'step': 2, 'action': '组织章节结构以逻辑递进呈现信息', 'output': '将报告分为若干部分(如外需、内需、投资、展望),每部分专注于一个维度的深入分析,并逐步揭示整体结论。', 'completion_criteria': '各章节内容独立但相互关联,逻辑链条完整,最终形成统一的结论。', 'common_pitfalls': '章节间缺乏连贯性或重复信息过多,削弱说服力。', 'solutions': '在每一章开头简述该部分的重点及与整体的关系,确保层次分明。'}, {'step': 3, 'action': '优先展示核心结论并辅以数据支撑', 'output': '在每个章节中先提出主要观点(如“进口回落掩盖了内需疲软”),随后用定量数据(如GDP贡献率)和定性解释(如关税政策影响)加以验证。', 'completion_criteria': '核心结论突出且有充分证据支持,使读者能迅速抓住重点。', 'common_pitfalls': '数据堆砌而无解读,或定性分析缺乏量化依据。', 'solutions': '采用图表+文字说明的方式,直观呈现数据趋势及其意义。'}, {'step': 4, 'action': '平衡历史回顾与未来预测', 'output': '通过历史数据分析当前状况(如过去几个季度的GDP变化),同时基于现有趋势推测未来发展(如三季度经济下行风险加大)。', 'completion_criteria': '历史数据与未来预测之间存在合理推导关系,避免过度猜测。', 'common_pitfalls': '预测缺乏依据或忽略潜在变数,显得空洞。', 'solutions': '结合多种情景假设(如不同降息时间点的影响)增强预测可信度。'}, {'step': 5, 'action': '适时引入风险因素并提供应对视角', 'output': '在接近尾声时系统梳理可能的风险(如特朗普政策激进、地缘政治升温),并讨论其对结论的潜在冲击。', 'completion_criteria': '风险提示全面且贴合实际,不流于形式。', 'common_pitfalls': '风险提示过早出现分散注意力,或仅罗列问题未提解决方案。', 'solutions': '将风险提示作为总结的一部分,在全面剖析后自然引出,并附带缓解措施建议。'}, {'step': 6, 'action': '总结并提炼跨场景适用的洞察', 'output': '归纳出普适性的方法论框架(如如何识别虚假繁荣、评估债务置换压力),为类似任务提供参考。', 'completion_criteria': '总结内容高度凝练且具操作性,可复用于其他分析任务。', 'common_pitfalls': '总结过于笼统或局限于具体案例,缺乏通用价值。', 'solutions': '从案例中抽象出具体的步骤和工具(如固定投资分析模板),便于迁移应用。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 05:04:27", "modified_time": "2025-08-14 05:04:27", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "9dc76b1d066b40eda0ee53b3e64efcbc", "experience_type": "text", "when_to_use": "此规划框架适用于宏观金融分析、行业深度研究、大类资产走势展望以及政策影响评估等任务。尤其适合需要结合定量与定性信息,进行多维度论证、风险提示和未来趋势预测的场景。", "content": "[{'step': 1, 'action': '明确分析目标及核心问题', 'output': '清晰定义报告的核心主题和目标受众,例如本次报告聚焦于国内经济底部已现、反内卷政策的影响,以及国外市场基本面变化对大类资产的影响。', 'evaluation_criteria': '是否明确了研究范围、目标和关键变量?是否合理划分了章节结构以支持后续分析逻辑?', 'common_issues': '主题过于宽泛或模糊,导致后续分析缺乏聚焦点。', 'solutions': '通过与客户或团队讨论,确认最核心的关注点,并在开篇摘要中直接点明。'}, {'step': 2, 'action': '收集并整理数据,构建初步分析框架', 'output': '根据研究目标,收集相关历史数据、政策文件、市场表现等(如房地产销售增速、消费数据、关税协议等),并初步形成分析框架。', 'evaluation_criteria': '是否涵盖了所有关键变量?数据来源是否可靠且具有时效性?是否能够支撑后续章节的具体分析?', 'common_issues': '数据不完整或过时,导致结论缺乏说服力。', 'solutions': '优先选择权威数据库(如Wind)和官方发布的信息,必要时补充专家访谈或调研数据。'}, {'step': 3, 'action': '分模块展开详细分析,逐层递进论证', 'output': '按照章节结构,依次展开分析。例如:(1) 国内部分从三驾马车切入,逐步深入到房地产和消费的趋势;(2) 国外部分结合关税协议和美国经济数据,剖析市场风险偏好变化;(3) 大类资产部分基于前文分析推导具体投资建议。', 'evaluation_criteria': '是否逻辑清晰、层层递进?是否平衡了定量与定性信息?是否充分考虑了多种可能性和潜在风险?', 'common_issues': '论据堆砌而缺乏逻辑连贯性,或者忽略重要变量。', 'solutions': '使用图表辅助说明关键数据趋势,同时在每部分结尾总结核心发现,确保逻辑闭环。'}, {'step': 4, 'action': '突出核心结论,并提出风险提示', 'output': '在正文各部分自然引出核心结论,并在最后汇总为总体判断,同时明确指出可能的风险因素(如“美国经济超预期走强”、“国内政策超预期”)。', 'evaluation_criteria': '核心结论是否简洁明了、易于理解?风险提示是否全面且适时提出?', 'common_issues': '忽视风险提示或将其置于次要位置,削弱报告可信度。', 'solutions': '将风险提示作为独立小节呈现,并结合实际案例增强说服力。'}, {'step': 5, 'action': '优化信息展示方式,提升可读性', 'output': '通过图表、表格、颜色标注等方式优化信息展示,使复杂数据更直观(如房地产销售增速图、关税税率表)。', 'evaluation_criteria': '信息展示是否直观易懂?是否有助于读者快速抓住重点?', 'common_issues': '图表设计冗余或混乱,影响阅读体验。', 'solutions': '遵循“一图一意”原则,仅保留最关键的数据和注释,避免信息过载。'}, {'step': 6, 'action': '审阅与完善,确保内容准确性和完整性', 'output': '检查报告中的数据准确性、语言表达流畅性以及格式规范性,确保无遗漏或错误。', 'evaluation_criteria': '是否存在明显的事实错误或表述不清?整体布局是否协调统一?', 'common_issues': '因时间紧迫导致校对不足,出现低级错误。', 'solutions': '预留充足时间进行交叉校对,邀请同事或外部专家参与审核。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 05:06:41", "modified_time": "2025-08-14 05:06:41", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "67558b4c5e5947aab6a8f11c22c34fc8", "experience_type": "text", "when_to_use": "此规划框架适用于宏观经济分析、行业深度研究、投资策略制定以及风险评估报告等任务。尤其适合需要结合定量和定性信息,综合政策、市场情绪、经济数据等多维度因素进行分析的场景。", "content": "[{'step': 1, 'action': '明确分析目标与核心结论优先级', 'output': '确定报告的核心观点(如权益市场缩量下跌、固收市场宽幅波动等)并将其作为贯穿全文的主线。', 'completion_criteria': '核心观点清晰且具有逻辑一致性,能够直接回答分析任务的目标问题。', 'common_issues': '核心观点模糊或过于分散,导致后续分析缺乏聚焦点。', 'solutions': '通过团队讨论或客户反馈确认核心结论,并在初稿中反复检查是否贯穿始终。'}, {'step': 2, 'action': '收集与整理宏观变量数据', 'output': '形成包含关键指标(如PMI、就业数据、利率变化等)的表格或图表,标注数据来源和时间范围。', 'completion_criteria': '数据覆盖全面,无明显遗漏;数据来源可靠且标注清晰。', 'common_issues': '数据过时或不完整,影响分析可信度。', 'solutions': '优先使用权威数据源(如Wind、官方统计),并在报告中注明数据更新日期。'}, {'step': 3, 'action': '分解事件并进行结构性分析', 'output': '对重大事件(如政治局会议、PMI数据发布)进行逐条解读,分别从基本面、政策面、市场情绪等角度展开。', 'completion_criteria': '每个事件都有独立的分析模块,且各模块之间逻辑连贯、互为补充。', 'common_issues': '事件分析过于笼统,缺乏深度或视角单一。', 'solutions': '采用“现象-原因-影响”的三段式结构,确保分析层次分明。'}, {'step': 4, 'action': '构建论证路径,层层递进', 'output': '基于数据和事件分析,逐步推导出核心结论,包括短期和长期趋势、潜在风险及机会。', 'completion_criteria': '论证过程逻辑严密,能够有效支撑核心结论;不同部分之间的过渡自然流畅。', 'common_issues': '论证跳跃性强,缺乏必要的衔接或支持材料。', 'solutions': '引入中间结论作为过渡,例如“当前供需矛盾加大可能进一步抑制需求复苏”。'}, {'step': 5, 'action': '平衡定量与定性信息', 'output': '在数据分析(如PMI分项指标)的基础上,结合定性判断(如政策基调、市场情绪),形成综合评价。', 'completion_criteria': '定量与定性内容比例适中,避免过度依赖某一方面。', 'common_issues': '定量分析过于复杂难懂,或定性分析缺乏依据。', 'solutions': '通过图表简化复杂数据,并用简短文字解释其意义;定性分析则需引用具体政策文件或权威观点。'}, {'step': 6, 'action': '识别与处理不确定性', 'output': '列出主要风险因素(如“基本面超预期弱化”、“贸易摩擦上升”),并提出应对策略或观察窗口。', 'completion_criteria': '风险提示具体且有操作指导意义,不会显得空泛或无关紧要。', 'common_issues': '风险描述过于泛化,未提供实际解决方案。', 'solutions': '将风险分为短期和长期两类,针对每类提出明确监控指标或行动建议。'}, {'step': 7, 'action': '设计章节结构与信息展示顺序', 'output': '按照“宏观变量回顾→事件分析→未来关注点”的顺序组织内容,确保逻辑清晰。', 'completioncriteria': '章节安排符合读者认知习惯,信息展示由浅入深,先呈现背景再深入细节。', 'commonissues': '章节顺序混乱,导致阅读体验不佳。', 'solutions': '提前制作大纲并与团队确认,确保各部分内容分工明确且衔接合理。'}, {'step': 8, 'action': '生成可视化图表与总结性语言', 'output': '制作雷达图、热力图等辅助图表,并提炼简洁有力的总结语句。', 'completioncriteria': '图表直观易懂,总结语言精炼准确。', 'commonissues': '图表冗余或难以理解,总结语言啰嗦。', 'solutions': '限制图表数量,只保留最能说明问题的部分;总结语言控制在1-2句话内。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 05:41:53", "modified_time": "2025-08-14 05:41:53", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "9a659065ece243799bf38fd60823be7f", "experience_type": "text", "when_to_use": "此规划框架适用于宏观经济政策分析、货币政策解读(如美联储会议分析)、投资决策支持报告等任务,尤其在需要结合定量和定性信息进行前瞻性预测的场景中。", "content": "[{'step': 1, 'action': '明确分析目标并定义核心问题', 'output': '确定本次分析的核心问题是‘美联储是否会在短期内降息’,以及关键变量包括通胀、就业数据、关税政策影响等。', 'completion_criteria': '能够清晰列出所有与问题相关的关键变量,并确认其对最终结论的重要性。', 'common_issues': '可能会忽略某些潜在影响因素,例如关税政策的长期效应。', 'solutions': '通过团队头脑风暴或参考历史案例,确保覆盖所有可能的相关变量。'}, {'step': 2, 'action': '收集并整理相关数据和背景信息', 'output': '整理美联储会议声明、鲍威尔讲话内容、近期经济数据(如CPI、就业数据)及市场预期,并形成初步信息框架。', 'completion_criteria': '数据应全面覆盖定量(如通胀率、就业数据)和定性(如政策声明、市场情绪)两方面,且来源可靠。', 'common_issues': '数据可能存在滞后或不完整,导致分析基础薄弱。', 'solutions': '使用多渠道交叉验证数据,并标注数据的时间范围和局限性。'}, {'step': 3, 'action': '构建章节结构以逻辑递进的方式组织内容', 'output': '按照‘背景介绍 → 核心变量分析 → 不同情景假设 → 结论与建议’的顺序安排章节,确保读者能逐步理解分析过程。', 'completion_criteria': '章节之间逻辑连贯,信息展示优先级合理,核心结论突出且易于识别。', 'common_issues': '章节结构可能过于松散或信息堆砌,导致重点不突出。', 'solutions': '在每章开头添加简短导语,明确本章目的;在结尾总结关键点,强化逻辑链条。'}, {'step': 4, 'action': '逐层递进分析核心变量', 'output': '分别从通胀、就业、关税政策等角度展开分析,结合定量数据与定性判断,指出当前经济状况及未来可能的变化趋势。', 'completion_criteria': '每个变量的分析都应包含现状描述、历史对比、未来预测三部分,并与最终结论直接相关。', 'common_issues': '变量分析可能缺乏深度,或未能充分连接到整体结论。', 'solutions': '为每个变量设置单独的子目标(如‘解释通胀为何仍高于目标’),并确保其服务于整体分析框架。'}, {'step': 5, 'action': '提出不同情景假设并评估可能性', 'output': '基于现有数据,提出两种主要情景:9月降息(若就业和通胀数据支持)或延迟至10月降息(若数据模棱两可),并详细说明每种情景的触发条件。', 'completion Criteria': '情景假设需覆盖主要可能性,且每种情景的概率评估应基于具体数据支持。', 'common_issues': '情景假设可能过于单一或脱离实际数据支持。', 'solutions': '引入敏感性分析工具,量化不同变量对结果的影响程度,增强假设的可信度。'}, {'step': 6, 'action': '整合风险因素并讨论不确定性', 'output': '将特朗普激进关税政策、降息过慢引发衰退等风险因素纳入讨论,强调这些因素对结论的潜在影响。', 'completion_criteria': '风险因素应在适当时机提出(如在情景假设后),并提供应对策略或缓解措施。', 'common_issues': '风险因素可能被忽略或处理过于简单化。', 'solutions': '建立专门的风险矩阵,系统化评估各风险因素的可能性和影响程度。'}, {'step': 7, 'action': '提炼核心结论并给出行动建议', 'output': '总结认为‘最快9月开始降息,全年有50个基点降息’,并建议投资者关注未来两个月的关键数据发布。', 'completion_criteria': '核心结论应简洁明了,行动建议具体可行,且与前文分析紧密呼应。', 'common_issues': '结论可能过于笼统或缺乏操作性。', 'solutions': '通过模拟决策路径测试结论的实用性,并加入具体的实施步骤(如‘跟踪哪些指标’)。'}, {'step': 8, 'action': '附加补充材料以增强可信度', 'output': '附上近期相关报告列表、免责声明、分析师证明等,提升报告的专业性和透明度。', 'completion_criteria': '补充材料应与正文内容高度相关,且格式规范统一。', 'common_issues': '补充材料可能冗余或偏离主题。', 'solutions': '仅保留最相关的辅助信息,并确保其排版清晰易读。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 05:43:00", "modified_time": "2025-08-14 05:43:00", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "eaab791eaa49438e86053fb820c7c776", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、宏观经济分析、区域经济合作评估以及投资标的筛选等任务。尤其适合在需要结合定量与定性信息、历史数据与未来趋势预测的综合性金融分析场景中使用。", "content": "[{'step': 1, 'action': '明确核心观点和分析目标', 'output': '形成一个清晰的核心观点,概括报告的主要结论和逻辑主线。', 'completion_criteria': '核心观点应能够用一句话概括,且能贯穿后续章节的论述。', 'common_issues': '核心观点过于宽泛或模糊,无法有效引导后续分析。', 'solutions': '通过团队讨论和初步数据分析,提炼出最具洞察力和相关性的核心结论。'}, {'step': 2, 'action': '设计章节结构并安排信息优先级', 'output': '构建逻辑清晰的章节框架,按照从宏观到微观、从短期到长期、从现象到本质的顺序组织内容。', 'completion_criteria': '每个章节的主题明确,且能够自然过渡到下一章节;信息展示顺序符合读者的认知逻辑。', 'common_issues': '章节间逻辑不连贯,信息堆砌导致重点不突出。', 'solutions': '采用金字塔原理,确保每一层信息都为上一层提供支持,并通过图表和数据强化关键点。'}, {'step': 3, 'action': '收集和分析定量与定性数据', 'output': '整合多来源的数据(如海关数据、IMF预测、企业财报等),进行定量分析和趋势推导,同时结合政策解读和专家访谈补充定性信息。', 'completion_criteria': '数据覆盖全面,分析方法科学严谨,定量与定性信息相互印证。', 'common_issues': '数据样本不足或分析方法单一,导致结论缺乏说服力。', 'solutions': '引入多种数据源和分析工具,确保数据的多样性和可靠性;必要时引用第三方权威机构的研究成果。'}, {'step': 4, 'action': '建立论证路径并提出风险因素', 'output': '通过层层递进的方式建立论证逻辑,从现象描述到原因分析再到未来展望,适时引入风险提示以增强报告的客观性。', 'completion Criteria': '论证链条完整,每一步推论都有充分的数据或理论支撑;风险提示具体且合理。', 'common_issues': '论证过程跳跃性过大,忽略潜在的风险点。', 'solutions': '逐一梳理论证链条中的假设条件和推论依据,确保逻辑严密;在适当位置设置专门的风险提示模块。'}, {'step': 5, 'action': '平衡历史回顾与未来预测', 'output': '通过对比历史数据与当前趋势,推导未来可能的发展方向,并对不确定性作出情景化假设。', 'completion_criteria': '历史数据与未来预测之间的关系清晰,预测基于合理假设且具有可操作性。', 'common_issues': '过度依赖历史数据,忽视外部环境变化带来的新变量。', 'solutions': '结合最新政策动态和市场反馈调整预测模型,增加对不确定性的敏感性分析。'}, {'step': 6, 'action': '可视化数据并优化信息呈现', 'output': '利用图表、表格等形式直观展示复杂数据,突出核心结论,减少冗长文字描述。', 'completion_criteria': '图表设计简洁明了,信息传达高效,能够独立支撑部分结论。', 'common_issues': '图表过多或过少,信息密度不均,影响阅读体验。', 'solutions': '根据内容重要性分配图表数量,确保每个图表都有明确的解读说明。'}, {'step': 7, 'action': '总结与展望,提出行动建议', 'output': '总结全文核心发现,并针对不同利益相关方(如投资者、政策制定者)提出具体可行的行动建议。', 'completion_criteria': '总结简明扼要,建议切实可行,与前文分析紧密衔接。', 'common_issues': '总结流于形式,行动建议缺乏针对性。', 'solutions': '重新审视前文分析,提炼最核心的发现,确保建议与实际需求匹配。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 05:44:27", "modified_time": "2025-08-14 05:44:27", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "1e01737b930341788f03f9cd15b30647", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究、宏观经济分析、投资策略制定及风险评估报告等任务,尤其是需要结合定量与定性数据进行综合判断的场景。此框架特别适合在政策变化、经济周期波动或国际贸易环境不确定性增加时,为投资者提供前瞻性建议。", "content": "[{'step': 'Step 1: 数据收集与整理', 'action': '从公开数据源(如Wind、政府统计部门、行业协会等)获取宏观经济指标、行业运行数据、金融市场表现等信息,并按类别(如增长动力、生产、需求、物价等)进行分类整理。', 'output': '形成清晰的数据表格和趋势图,涵盖关键指标的历史变化及最新数据。', 'completion_criteria': '确保所有相关数据完整且准确,能够支持后续分析;数据来源需权威可靠。', 'common_issues': '数据缺失或不一致可能导致分析偏差。', 'solutions': '通过交叉验证不同来源的数据,补充缺失值或剔除异常值,确保数据质量。'}, {'step': 'Step 2: 宏观与行业动态分析', 'action': '基于整理的数据,对宏观经济形势(如GDP、PMI、就业、通胀等)和重点行业运行状况(如钢铁、化工、房地产、消费等)进行分层分析,识别主要驱动因素和潜在风险点。', 'output': '生成一份宏观与行业动态综述,包括当前经济运行的核心特征、主要问题及未来可能的变化趋势。', 'completion_criteria': '分析需逻辑清晰,能够解释数据背后的原因,并指出影响未来的潜在变量。', 'common_issues': '忽略季节性或短期扰动因素可能导致误判。', 'solutions': '结合历史数据对比,区分长期趋势与短期波动,明确每项因素的影响权重。'}, {'step': 'Step 3: 政策解读与事件跟踪', 'action': '梳理近期重要政策文件、会议纪要以及国际经贸谈判结果,分析其对经济、市场及行业的具体影响,并预测政策落地的时间表和效果。', 'output': '形成政策解读报告,总结政策方向及其对市场的正面或负面影响。', 'completion_criteria': '政策解读需全面覆盖关键领域,并能结合实际案例说明其实施路径。', 'common_issues': '政策表述模糊或未完全公开可能引发理解偏差。', 'solutions': '通过多渠道验证政策细节,并参考过往类似政策的实际执行情况。'}, {'step': 'Step 4: 市场表现与资金面监测', 'action': '分析股票、债券、商品等大类资产的表现,监测资金流向(如IPO、增发、减持等),并评估流动性环境(如央行操作、利率水平等)对市场情绪的影响。', 'output': '生成市场表现与资金面跟踪报告,突出各资产类别的涨跌原因及资金流动趋势。', 'completion_criteria': '报告需包含核心结论,并能有效解释市场异动的根本原因。', 'common_issues': '忽视非公开信息或市场情绪可能导致分析片面化。', 'solutions': '引入高频数据(如交易量、换手率)和市场情绪指标(如VIX指数)辅助分析。'}, {'step': 'Step 5: 风险提示与情景模拟', 'action': '识别当前市场面临的主要风险(如政策不及预期、外部制裁升级等),并通过情景模拟探讨多种可能性下的市场反应。', 'output': '生成风险提示部分,列出最可能发生的风险事件及其应对策略。', 'completion_criteria': '风险提示需详尽且具有可操作性,能够帮助投资者提前布局。', 'common_issues': '过于乐观或悲观的情景设定可能误导决策。', 'solutions': '采用概率加权法,综合考虑各种情景的发生概率及潜在影响。'}, {'step': 'Step 6: 投资配置建议', 'action': '根据上述分析,提出针对不同资产类别(如股票、债券、商品等)和风格(如成长、价值、周期等)的投资配置建议,并明确推荐标的。', 'output': '形成投资配置策略报告,包括具体板块、个股或基金的推荐清单。', 'completion_criteria': '建议需具备实操性,即投资者可以根据报告内容直接调整持仓。', 'common_issues': '缺乏量化依据可能导致建议缺乏说服力。', 'solutions': '引入量化模型(如DCF估值、相对估值法)验证推荐标的合理性。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 05:45:38", "modified_time": "2025-08-14 05:45:38", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "ad4e69df25d04ad88937ca3782798c2d", "experience_type": "text", "when_to_use": "适用于宏观经济数据分析、行业深度研究以及投资策略制定类任务,特别是涉及PMI等经济指标的解读与预测。此框架也适合用于需要结合定量数据和定性分析来形成投资建议或政策判断的场景。", "content": "[{'step': 1, 'action': '明确核心事件和数据背景', 'output': '清晰界定报告的核心主题(如7月PMI数据)及其发布背景(国家统计局公布),并列出相关关键数据点(制造业PMI、非制造业PMI等)。', 'criteria_for_success': '是否准确识别了报告的核心事件,并能用简洁语言描述其背景和重要性。', 'common_issues': '可能忽略次要但相关的数据点,导致分析不够全面。', 'solutions': '在初步整理时,列出所有相关数据指标,确保不遗漏可能影响结论的关键信息。'}, {'step': 2, 'action': '提炼核心观点并组织章节结构', 'output': '根据数据特征和市场背景,总结出核心观点(如“上游价格回升”、“反内卷推进效果显现”),并将报告分为引言、数据分析、行业细分、风险提示等部分。', 'criteria_for_success': '章节安排是否逻辑清晰,能否引导读者快速抓住重点,同时为后续详细分析铺垫。', 'common_issues': '章节间逻辑衔接不紧密,导致读者难以跟随分析思路。', 'solutions': '使用过渡句明确章节间的逻辑关系,例如从整体趋势到细分领域分析的递进关系。'}, {'step': 3, 'action': '优先展示核心结论并突出关键数据', 'output': '在报告开头以简短段落概括核心结论(如“制造业PMI略弱于季节性”),并通过图表直观呈现关键数据(如图1、图2)。', 'criteria_for_success': '核心结论是否一目了然,关键数据是否通过可视化手段强化理解。', 'common_issues': '过多技术细节掩盖了核心结论,导致读者难以抓住重点。', 'solutions': '将技术细节放在附录或补充说明中,确保正文聚焦于结论和主要支持数据。'}, {'step': 4, 'action': '分层次展开定量与定性分析', 'output': '对制造业PMI、非制造业PMI等定量数据进行逐项拆解(如供需同步回落、价格指数上升),并结合定性分析解释原因(如“反内卷”政策推动上游价格回升)。', 'criteria_for_success': '定量与定性分析是否有机结合,是否能够层层递进地解释数据变化。', 'common_issues': '定量分析缺乏定性支撑,或定性分析过于主观,缺乏数据支持。', 'solutions': '每项定性分析都需引用具体数据或外部证据作为支撑,确保论据充分。'}, {'step': 5, 'action': '平衡历史与预测信息', 'output': '对比当前数据与历史均值(如“近5年同期均值”),并基于现有趋势预测未来可能的变化(如“政策部署后实物工作量有望保持高位”)。', 'criteria_for_success': '历史数据与预测信息是否合理分布,预测是否基于可靠的历史趋势。', 'common_issues': '过度依赖历史数据可能导致预测缺乏前瞻性,或预测过于乐观/悲观。', 'solutions': '引入多种可能性情景分析(如乐观、中性和悲观情景),并明确假设条件。'}, {'step': 6, 'action': '适时提出风险因素并提供缓解方案', 'output': '在报告后半部分(如“风险提示”章节)明确提出潜在风险(如“稳增长政策落地不及预期”),并给出应对建议(如关注政策动态)。', 'criteria_for_success': '风险因素是否全面且适时提出,缓解方案是否具有可操作性。', 'common_issues': '风险提示过于笼统,缺乏针对性。', 'solutions': '针对每个风险因素,提供具体的监测指标或行动建议。'}, {'step': 7, 'action': '整合图表与文字说明,增强信息传递效果', 'output': '通过图表(如图1至图7)直观展示数据趋势,并配以简明的文字说明,确保读者能够快速理解。', 'criteria_for_success': '图表是否简洁明了,文字说明是否精准补充图表信息。', 'common_issues': '图表过多或过少,导致信息冗余或不足。', 'solutions': '根据内容需求筛选关键图表,确保每张图表都有明确的信息传递目标。'}, {'step': 8, 'action': '撰写总结与评级说明', 'output': '在报告结尾总结核心观点,并提供明确的投资评级建议(如“看多”、“超配”等),帮助投资者快速决策。', 'criteria_for_success': '总结是否简明扼要,评级建议是否清晰且具有参考价值。', 'common_issues': '总结过于冗长,或评级建议缺乏数据支持。', 'solutions': '总结控制在3-5句话内,评级建议需引用前文分析中的关键数据点。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 05:47:05", "modified_time": "2025-08-14 05:47:05", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "f79deecff58e493a956afc3fc8cea435", "experience_type": "text", "when_to_use": "此框架适用于宏观经济分析、市场动态评估以及政策影响预测类的金融分析任务,尤其是需要结合定量与定性数据进行综合判断的情境,例如非农就业数据解读、货币政策分析和国际贸易局势评估等。", "content": "[{'step': 1, 'action': '明确核心问题并定义分析目标', 'output': '清晰的核心观点陈述,例如‘美国经济是否处于软着陆周期’或‘关税政策对市场的影响’。', 'completion_criteria': '核心问题需具体且具有可操作性,能够通过数据和逻辑推理解决。若目标过于宽泛或模糊,则视为未完成。', 'common_issues': '可能忽略市场背景或事件关联性,导致目标设定不够聚焦。', 'solution': '在初步分析时,先梳理关键事件和数据点,确保目标与当前市场热点紧密相关。'}, {'step': 2, 'action': '收集和整理相关数据,区分定量与定性信息', 'output': '包括但不限于宏观经济指标(如GDP、非农就业、PMI)、市场表现数据(如股票指数、债券收益率)和政策文件(如行政命令、FOMC声明)。', 'completion_criteria': '数据应覆盖全面,来源可靠,并按时间序列或主题分类整理。若数据缺失或分布不均,则视为未完成。', 'common_issues': '数据可能存在滞后性或不一致性,影响分析准确性。', 'solution': '优先使用权威来源(如彭博、美联储),并对异常值进行单独标注和解释。'}, {'step': 3, 'action': '构建章节结构,合理安排信息优先级', 'output': '以核心结论为引领,依次展开背景介绍、数据分析、风险提示和未来展望。例如,本报告首先提出‘美国经济处于软着陆周期’的核心观点,随后分大类资产、海外经济、货币政策、海外政治四个部分展开论述。', 'completion_criteria': '章节结构需逻辑清晰,信息展示优先级符合读者需求。若重要信息被埋没或次序混乱,则视为未完成。', 'common_issues': '可能因追求完整性而忽视重点,导致核心结论被淹没。', 'solution': '在撰写前制定提纲,确保每一章节都服务于核心观点,并在开头和结尾强化结论。'}, {'step': 4, 'action': '采用递进式论证逻辑,逐步建立观点', 'output': '通过多层数据支持和情景假设验证观点。例如,本报告通过非农就业数据、GDP增长率、ISM制造业PMI等多维度数据,逐步证明‘美国经济仍处于软着陆周期’的观点。', 'completion_criteria': '论证链条完整,每个论点都有充分的数据支撑。若存在逻辑断层或数据不足,则视为未完成。', 'common_issues': '可能因过度依赖单一数据源而导致论证薄弱。', 'solution': '引入多种数据源和分析视角,必要时补充专家访谈或模型预测结果。'}, {'step': 5, 'action': '平衡历史数据与预测分析,处理不确定性', 'output': '结合历史数据趋势和未来预测模型,同时明确指出不确定性和潜在风险。例如,本报告既回顾了过去几个月的经济意外指数变化,又结合亚特兰大联储GDPNow模型对未来GDP增长进行了预测。', 'completion_criteria': '历史数据与预测分析比例均衡,风险提示清晰且及时。若缺乏预测或风险提示不足,则视为未完成。', 'common_issues': '可能因过度乐观或悲观而忽略其他可能性。', 'solution': '在分析中加入敏感性测试或多情景模拟,确保涵盖多种可能性。'}, {'step': 6, 'action': '可视化呈现关键数据,增强可读性', 'output': '通过图表(如利率曲线、经济意外指数趋势图)直观展示核心数据,辅助文字说明。例如,本报告附带了10年期美债利率周度变动图、非农就业数据修正幅度图等。', 'completion_criteria': '图表设计简洁明了,数据准确无误。若图表过多或过少,或数据错误,则视为未完成。', 'common_issues': '图表可能过于复杂或缺乏标注,影响理解。', 'solution': '遵循‘一图一意’原则,确保每张图表只传达一个核心信息,并附上详细注释。'}, {'step': 7, 'action': '总结核心结论并提出行动建议', 'output': '提炼出简明扼要的核心结论,并基于分析结果给出投资策略或政策应对建议。例如,本报告建议关注美国经济下行斜率的变化,以及短期内市场波动性提升的可能性。', 'completion_criteria': '结论需直接回应分析目标,建议具体可行。若结论模糊或建议空泛,则视为未完成。', 'common_issues': '可能因急于得出结论而忽略细节,导致建议不够精准。', 'solution': '在总结阶段重新审视分析过程,确保结论和建议与数据支持一致。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 05:48:39", "modified_time": "2025-08-14 05:48:39", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "df1e4402a68646b5b868ce56e7dca0bf", "experience_type": "text", "when_to_use": "此规划框架适用于宏观经济分析、高频数据跟踪、资产价格预测类的金融研究报告制作,尤其是需要结合定量与定性分析,进行短期经济趋势判断和资产配置建议的任务。也可扩展至行业深度研究或风险评估报告中涉及宏观背景分析的部分。", "content": "[{'step': 1, 'action': '明确核心观点和主要结论', 'output': '提炼出报告的核心观点(如:高频指标运行稳健,房地产表现较优)及主要结论(如:预计下周十年期国债利率将上行,上证综合指数将下行)。', 'criteria_for_success': '核心观点简洁明了,能直接反映报告的研究重点;主要结论逻辑清晰且基于数据分析得出,具有可操作性。', 'common_issues_and_solutions': [{'issue': '核心观点过于宽泛或模糊', 'solution': '通过聚焦于关键指标(如国信高频宏观扩散指数)及其变化趋势,确保观点具体且有数据支撑。'}]}, {'step': 2, 'action': '构建章节结构并分配信息优先级', 'output': '形成分层清晰的章节结构,包括经济增长高频跟踪、资产价格预测、CPI/PPI高频跟踪等模块,优先展示高频指标和核心预测结果。', 'criteria_for_success': '章节安排符合读者逻辑认知顺序,先呈现高频数据和宏观趋势,再深入到具体领域(如食品、非食品价格),最后总结预测和风险提示。', 'common_issues_and_solutions': [{'issue': '章节间逻辑松散或重复', 'solution': '在撰写前绘制内容目录,确保每个章节专注一个主题,并与其他部分保持递进关系。'}]}, {'step': 3, 'action': '收集和整理基础数据', 'output': '汇总定量数据(如国信高频宏观扩散指数A/B、CPI/PPI环比同比)和定性信息(如分项景气度变化),并按时间序列和类别分类。', 'criteria_for_success': '数据来源可靠,更新及时,且经过标准化处理以便比较;图表清晰标注时间范围和单位。', 'common_issues_and_solutions': [{'issue': '数据不完整或滞后', 'solution': '提前规划数据获取渠道,并设置备用数据源以应对突发情况。'}]}, {'step': 4, 'action': '建立论证逻辑并验证假设', 'output': '从高频指标入手,逐步推导出对经济增长、资产价格、物价水平的具体判断,并通过历史均值对比验证结论合理性。', 'criteria_for_success': '论证路径层层递进,每一步都有数据支持;假设验证过程透明,偏差原因解释清楚。', 'common_issues_and_solutions': [{'issue': '论证链条断裂或缺乏说服力', 'solution': '增加中间步骤说明,用历史数据回测模型准确性,提高可信度。'}]}, {'step': 5, 'action': '平衡定量与定性分析', 'output': '在定量分析(如CPI/PPI环比预测值)基础上补充定性描述(如海外市场动荡的风险提示),增强报告全面性。', 'criteria_for_success': '定量与定性分析比例适中,既避免过度依赖单一方法,又确保两者相互印证。', 'common_issues_and_solutions': [{'issue': '定性分析过多导致主观性强', 'solution': '引入更多客观指标作为佐证,减少纯文字论述占比。'}]}, {'step': 6, 'action': '突出核心结论并设计可视化展示', 'output': '使用表格、折线图等形式直观呈现关键发现(如十年期国债收益率预测值与实际值对比),并将核心结论置于显眼位置。', 'criteria_for_success': '可视化工具选择恰当,能够快速传递信息;核心结论醒目易读。', 'common_issues_and_solutions': [{'issue': '图表复杂难以理解', 'solution': '简化图表设计,仅保留必要元素,并添加注释帮助解读。'}]}, {'step': 7, 'action': '提出风险提示并处理不确定性', 'output': '识别潜在风险因素(如海外市场动荡),并在报告末尾单独列出,同时提供多种情景下的预测结果。', 'criteria_for_success': '风险提示具体且有针对性,未忽视重大不确定因素;多情景分析覆盖范围广,体现审慎态度。', 'common_issues_and_solutions': [{'issue': '风险提示过于笼统', 'solution': '细化风险来源,结合当前市场环境给出具体影响路径。'}]}, {'step': 8, 'action': '校验报告完整性和一致性', 'output': '检查所有章节是否衔接流畅,数据引用是否准确无误,语言表达是否专业规范。', 'criteria_for_success': '报告整体逻辑严密,无明显错误或遗漏;术语统一,格式整齐。', 'common_issues_and_solutions': [{'issue': '部分内容前后矛盾', 'solution': '采用多人交叉校对机制,确保各部分协调一致。'}]}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 05:49:48", "modified_time": "2025-08-14 05:49:48", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "0f8b551e56344033840b1829f8fa887d", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、高频经济数据跟踪分析、投资标的筛选与评估、以及宏观经济与政策动态结合的风险提示报告等任务。特别适合需要整合定量和定性信息,并对行业发展进行短期预测的情景。", "content": "[{'step': 1, 'action': '明确核心观点和目标受众', 'output': '提炼出一个清晰的核心观点,说明报告的主要发现(如‘国信周频高技术制造业扩散指数走强’),并定义目标受众(如机构投资者、政策制定者)。', 'completion_criteria': '核心观点应简洁有力,能够用一句话概括报告主旨;目标受众的需求在后续分析中得到充分满足。', 'common_issues': '核心观点模糊或过于复杂,导致读者难以快速抓住重点。', 'solutions': '通过团队讨论或头脑风暴,确保核心观点聚焦且具有吸引力;使用‘电梯测试’验证其简明性。'}, {'step': 2, 'action': '组织章节结构,优先展示关键结论', 'output': '设计报告的章节结构,将核心结论放在开头部分,随后依次展开支持性数据、分项分析和风险提示。', 'completion_criteria': '章节逻辑清晰,信息展示顺序符合‘从重要到次要’的原则,读者能在前两页获取主要信息。', 'common_issues': '章节安排杂乱无章,次要信息喧宾夺主。', 'solutions': '采用倒金字塔结构,先呈现最重要的结论,再逐步补充细节;定期回顾章节是否围绕核心观点展开。'}, {'step': 3, 'action': '收集并整理高频数据,形成定量分析基础', 'output': '从可靠来源(如Wind、行业协会)获取高频数据,分类整理为价格、产量、政策动态等维度,并计算关键指标(如扩散指数A和B)。', 'completion_criteria': '数据完整且准确,能够支撑后续的定量分析;所有数据来源均标注明确。', 'common_issues': '数据缺失或不一致,影响分析可信度。', 'solutions': '建立标准化的数据清洗流程,确保数据质量;与数据供应商保持沟通,及时更新异常值。'}, {'step': 4, 'action': '结合定性信息,解读数据变化背后的原因', 'output': '分析数据变动的驱动因素,结合行业动态和政策动向,提供定性解释(如‘DRAM价格上涨源于半导体需求回暖’)。', 'completion_criteria': '定性分析与定量数据相辅相成,能够合理解释数据波动。', 'common_issues': '定性分析缺乏深度,未能揭示数据背后的真正原因。', 'solutions': '引入行业专家访谈或参考权威报告,增强定性分析的专业性和说服力。'}, {'step': 5, 'action': '平衡历史与预测信息,构建完整的趋势视角', 'output': '通过图表对比历史数据和当前趋势,同时基于现有数据推测未来可能的变化方向(如‘预计短期内DRAM价格将继续上升’)。', 'completion_criteria': '历史数据与预测信息比例适当,既体现现状又展望未来。', 'common_issues': '过度依赖历史数据,忽视前瞻性分析。', 'solutions': '增加对未来情景的假设和敏感性分析,提升预测的科学性和实用性。'}, {'step': 6, 'action': '识别并阐述潜在风险,提出应对建议', 'output': '列出可能影响行业发展的风险因素(如政策干预、经济增速下滑),并附带简要的应对策略或观察点。', 'completion_criteria': '风险提示全面且具体,能够帮助读者提前做好准备。', 'common_issues': '风险提示流于形式,缺乏实际指导意义。', 'solutions': '针对每个风险因素提供具体的监测指标或预警信号,使建议更具操作性。'}, {'step': 7, 'action': '制作可视化图表,强化信息传递效果', 'output': '生成直观的图表(如折线图、柱状图),用于展示关键数据及其变化趋势,并配以简短的文字说明。', 'completion_criteria': '图表简洁明了,能够独立传达信息,无需额外解释。', 'common_issues': '图表过多或过于复杂,分散读者注意力。', 'solutions': '遵循‘少即是多’原则,只保留最核心的图表;确保每张图表都有明确的主题和标题。'}, {'step': 8, 'action': '撰写总结与免责声明,完善报告完整性', 'output': '在报告末尾添加总结段落,重申核心观点及行动建议;同时附上免责声明,保护作者和机构权益。', 'completion_criteria': '总结言简意赅,能够概括全文要点;免责声明内容详尽且合规。', 'common_issues': '总结冗长或偏离主题,免责声明表述不规范。', 'solutions': '总结部分控制在1-2段内,突出核心价值;免责声明参考行业标准模板,确保法律合规性。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 05:51:35", "modified_time": "2025-08-14 05:51:35", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "63bc023f20cd4b29a40f3ea45a4e835d", "experience_type": "text", "when_to_use": "适用于行业深度研究、宏观经济分析、历史比较研究、政策效果评估等需要跨时间、跨区域进行案例对比的复杂金融分析任务。", "content": "[{'step': 1, 'action': '明确核心问题和目标,定义研究范围。', 'output': '形成清晰的研究主题和目标,例如‘如何从失衡到再平衡’。', 'evaluation': '是否能够用一句话概括研究的核心问题,并明确其对当前或未来决策的价值。', 'common_issues': '研究目标过于宽泛或模糊,导致后续分析难以聚焦。', 'solutions': '通过与利益相关者(如客户或团队)讨论,逐步细化研究问题。'}, {'step': 2, 'action': '选择典型案例并构建分析框架。', 'output': '选定具有代表性的历史案例(如长期萧条、大萧条、日本去产能),并设计章节结构以支持逻辑展开。', 'evaluation': '案例是否覆盖了研究问题的关键维度,章节结构是否能有效引导读者理解。', 'common_issues': '案例选择不够典型,或框架设计缺乏系统性。', 'solutions': '参考类似成功报告,确保案例选择和框架设计符合专业标准。'}, {'step': 3, 'action': '收集定量和定性数据,进行初步整理和分析。', 'output': '生成基础数据图表(如GDP增速、CPI变化等)和关键事件描述,为后续论证提供支撑。', 'evaluation': '数据是否准确且全面,能否直接服务于研究目标。', 'common_issues': '数据缺失或质量不高,导致分析结论缺乏说服力。', 'solutions': '优先使用权威数据来源,必要时补充文献综述或专家访谈。'}, {'step': 4, 'action': '按时间线或因果关系组织案例分析内容。', 'output': '完成每个案例的详细分析,包括背景、表现、应对措施及结果。', 'evaluation': '案例分析是否层次分明,信息展示是否遵循‘背景→问题→解决方案→结果’的逻辑。', 'common_issues': '信息堆砌,缺乏逻辑连贯性。', 'solutions': '在每部分开头添加简短的过渡段落,强调各部分内容之间的联系。'}, {'step': 5, 'action': '提炼共性规律,提出主要结论。', 'output': '总结案例中的共同点和差异点,形成可推广的经验教训。', 'evaluation': '结论是否具体且有操作性,能否指导实际决策。', 'common_issues': '结论过于抽象,无法落地应用。', 'solutions': '结合当前经济环境或行业趋势,说明结论的实际应用场景。'}, {'step': 6, 'action': '识别风险因素,列出潜在局限性。', 'output': '撰写风险提示部分,指出研究方法或数据可能存在的不足。', 'evaluation': '风险提示是否全面且客观,是否增强了报告的可信度。', 'common_issues': '忽略重要风险,影响报告的专业性。', 'solutions': '邀请同行评审,补充遗漏的风险点。'}, {'step': 7, 'action': '优化表达方式,突出核心信息。', 'output': '调整语言风格和排版,确保核心观点易于理解(如加粗结论、插入图表标题)。', 'evaluation': '读者能否快速抓住重点,报告整体是否简洁明了。', 'common_issues': '文字冗长,图表过多干扰阅读体验。', 'solutions': '删除冗余内容,确保每张图表都有明确解释和意义。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 05:52:47", "modified_time": "2025-08-14 05:52:47", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "d21f9bbd6480451d8ddbb0a5861f6d90", "experience_type": "text", "when_to_use": "该规划框架适用于需要综合定量与定性分析的金融研究报告制作,特别是涉及宏观经济、政策影响及市场趋势的深度研究任务,如行业周报、经济指数分析或投资策略报告。", "content": "[{'step': 1, 'action': '明确核心主题和目标受众', 'output': '确定报告的核心主题(如债券增值税对实体经济资产配置的影响)以及目标受众(如机构投资者、政策制定者等)。', 'completion_criteria': '核心主题清晰且具有明确的研究边界;目标受众的需求被充分考虑,包括信息颗粒度和专业术语使用。', 'common_issues': '主题过于宽泛导致分析缺乏深度,或未能准确匹配目标受众需求。', 'solutions': '通过初步调研收集背景信息,结合客户反馈确认研究方向;设定具体的研究问题以聚焦内容。'}, {'step': 2, 'action': '构建逻辑章节结构并分配优先级', 'output': '设计报告的章节框架,确保信息按从宏观到微观、从数据到结论的顺序展开,并突出核心结论。', 'completion_criteria': '章节结构合理,包含双指数概览(ECI/ELI)、高频数据分析、政策解读和风险提示;重点章节围绕核心结论展开。', 'common_issues': '章节安排混乱,信息展示无序,关键结论被淹没在细节中。', 'solutions': '提前绘制信息流图,标注每个部分的信息权重;用图表或摘要形式强化核心结论的呈现。'}, {'step': 3, 'action': '收集和整理基础数据', 'output': '基于主题搜集相关高频数据(如工业生产、消费、投资、出口等领域的指标),并对数据进行清洗和分类。', 'completion_criteria': '数据来源可靠,更新及时;数据表格和图表完整,支持后续分析。', 'common_issues': '数据缺失或过时,影响分析可信度;数据格式不统一难以整合。', 'solutions': '建立标准化的数据采集模板;利用自动化工具提高数据处理效率,同时保留人工复核环节。'}, {'step': 4, 'action': '量化分析与趋势解读', 'output': '对高频数据进行量化分析,提取主要趋势和异常点,并结合历史对比和预测模型形成初步观点。', 'completion_criteria': '每项高频数据均配有简明的趋势描述和关键驱动因素分析;异常点有合理的解释。', 'common_issues': '过度依赖单一数据维度,忽略全局视角;分析结果缺乏前瞻性。', 'solutions': '采用多维交叉验证方法,例如将工业生产与消费数据联动分析;引入外部变量(如政策变化)增强预测能力。'}, {'step': 5, 'action': '政策解读与情景模拟', 'output': '梳理近期相关政策动态,评估其潜在影响,并通过情景模拟探讨不同可能性。', 'completion_criteria': '政策解读全面且贴近主题;情景模拟覆盖多种假设,为不确定性提供应对策略。', 'common_issues': '政策解读表面化,未深入挖掘长期影响;情景模拟过于简单,缺乏实际指导意义。', 'solutions': '邀请领域专家参与讨论;结合历史案例验证情景模拟的合理性。'}, {'step': 6, 'action': '风险提示与敏感性分析', 'output': '识别潜在风险因素,对其进行分级排序,并通过敏感性分析评估其对核心结论的影响。', 'completion_criteria': '风险提示涵盖所有关键领域(如政策、市场、国际环境等);敏感性分析结果直观易懂。', 'common_issues': '风险提示过于笼统,未能针对具体场景;敏感性分析缺乏量化支撑。', 'solutions': '建立风险因子清单,逐一排查;使用可视化工具(如热力图)展示敏感性分析结果。'}, {'step': 7, 'action': '撰写报告并优化表达', 'output': '按照既定框架撰写报告,确保语言简洁精准,同时辅以图表和附注提升可读性。', 'completion_criteria': '报告条理清晰,符合目标受众阅读习惯;图表与文字内容高度契合,无冗余信息。', 'common_issues': '行文啰嗦,偏离主题;图表设计复杂,削弱信息传递效果。', 'solutions': '多次审稿,删除冗余内容;遵循“一图一意”原则简化图表设计。'}, {'step': 8, 'action': '审查与发布', 'output': '完成最终审查,包括数据准确性、逻辑一致性和合规性检查,随后正式发布。', 'completion_criteria': '报告经过至少两轮内部审查,无重大错误;发布流程符合公司规范。', 'common_issues': '审查不彻底导致低级错误遗漏;发布时间选择不当影响传播效果。', 'solutions': '设立专门审查小组,分工负责不同模块;根据受众活跃时间选择最佳发布时间。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 05:54:00", "modified_time": "2025-08-14 05:54:00", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "ac6d9a5debae48b58e3c8c3ac6cb2c2b", "experience_type": "text", "when_to_use": "此规划框架适用于金融领域的市场分析、投资策略报告、资产配置建议等任务,特别是需要结合宏观经济事件、政策变化以及资产表现进行综合评估的场景。例如:行业深度研究、资本市场展望、大类资产配置分析等。", "content": "[{'step': 1, 'action': '明确分析目标和核心问题', 'output': '定义本次分析的核心问题(如:市场波动原因、未来走势预测)并确定分析范围。', 'criteria_for_success': '核心问题清晰且具有实际意义,能够指导后续章节结构设计。', 'common_issues': '问题定义过于宽泛或模糊,导致后续分析难以聚焦。', 'solutions': '在初期与团队或客户确认核心问题,并用具体数据或事件支撑问题的重要性。'}, {'step': 2, 'action': '组织章节结构以逻辑递进方式展开', 'output': '按照‘事件概述 → 原因分析 → 数据支持 → 结论与展望’的顺序构建报告框架。', 'criteria_for_success': '章节之间逻辑连贯,信息分布合理,优先级明确(如:先展示核心结论,再提供支持性细节)。', 'common_issues': '章节结构混乱,信息堆砌而无逻辑递进。', 'solutions': '在撰写前绘制思维导图,确保每个章节服务于整体逻辑链条。'}, {'step': 3, 'action': '收集并整合定量与定性数据', 'output': '从公开渠道获取相关数据(如:市场指数、经济指标、政策文件),并将定量数据与定性分析结合。', 'criteria_for_success': '数据来源可靠,分析结果能直接支持观点;不同类型数据分布均衡,避免单一维度偏颇。', 'common_issues': '数据不足或过时,导致分析缺乏说服力。', 'solutions': '建立标准化数据采集流程,定期更新数据库,确保信息时效性和准确性。'}, {'step': 4, 'action': '通过层层递进的方式建立论证逻辑', 'output': '使用‘现象描述 → 原因剖析 → 影响评估 → 预测推演’的路径逐步深化分析。', 'criteria_for_success': '每一步都基于上一步得出的结论,逻辑严密且易于理解;关键结论有充分的数据或理论支撑。', 'common_issues': '论证跳跃性强,缺乏过渡或衔接。', 'solutions': '为每个逻辑环节设置明确的小标题,并在段落开头简要说明本节如何承接上文及引出下文。'}, {'step': 5, 'action': '适时引入风险因素', 'output': '在分析过程中自然融入潜在风险点,通常安排在核心结论之后,作为补充说明。', 'criteria_for_success': '风险提示既不过早削弱信心,也不过晚影响决策;表述客观中立,不夸大也不忽视。', 'common_issues': '风险提示缺失或过度渲染,影响报告可信度。', 'solutions': '将风险因素分类(如:短期波动 vs 长期趋势),并根据其重要性和紧迫性选择合适的披露时机。'}, {'step': 6, 'action': '处理不确定性和多种可能性', 'output': '针对不确定性提出情景假设(如:乐观、中性、悲观三种情形),并分别给出对应的应对策略。', 'criteria_for_success': '情景假设覆盖全面,应对策略具体可行;语言表达保持专业冷静,避免情绪化措辞。', 'common_issues': '对不确定性轻描淡写或完全回避,导致读者无法全面了解潜在挑战。', 'solutions': '采用概率分析法量化不同情景的可能性,并引用权威机构的研究成果增强可信度。'}, {'step': 7, 'action': '总结核心结论并提出行动建议', 'output': '提炼报告中最关键的观点,形成简洁明了的投资建议或策略指引。', 'criteria_for_success': '核心结论突出,建议具体且可操作;篇幅控制得当,避免冗长拖沓。', 'common_issues': '总结部分流于形式,未能有效提炼精华。', 'solutions': '在撰写总结时回顾整篇报告,筛选出最具价值的信息,同时考虑目标受众的实际需求。'}, {'step': 8, 'action': '审阅与优化报告内容', 'output': '检查报告的语言表达、格式规范、图表呈现等方面是否符合专业标准。', 'criteria_for_success': '报告内容清晰准确,图表直观易懂,整体风格统一;无重大错误或遗漏。', 'common_issues': '语言晦涩难懂,图表复杂冗余,影响阅读体验。', 'solutions': '邀请同行评审,重点关注逻辑流畅性和视觉效果;利用工具(如:Excel、Tableau)优化图表制作。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 05:55:18", "modified_time": "2025-08-14 05:55:18", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "ba973a8b66ce4d969e1822fa7bb10b1f", "experience_type": "text", "when_to_use": "适用于行业深度研究、宏观经济分析、政策影响评估、资产配置建议等需要综合定量和定性数据的复杂金融分析任务。", "content": "[{'step': 1, 'action': '明确报告的核心主题与目标受众,梳理关键问题并定义报告框架。', 'output': '确定报告结构(如:摘要、章节划分、重点事件分析、经济与政策评估、展望与建议),以及核心结论的初步方向。', 'completion_criteria': '章节安排逻辑清晰,能够覆盖所有关键问题;团队对框架达成共识。', 'common_issues': '可能忽略某些次要但重要的议题,或框架过于冗长导致重点不突出。', 'solutions': '通过头脑风暴列出所有潜在议题,根据重要性和相关性筛选出核心内容,并在框架中预留补充说明的空间。'}, {'step': 2, 'action': '收集并整理相关数据,包括历史数据、当前市场状况、政策动态及预测信息。', 'output': '形成一个全面的数据集,涵盖定量(如GDP增长率、通胀率、利率等)和定性(如政策解读、地缘政治分析)信息。', 'completion_criteria': '数据来源可靠且多样化,数据完整性满足分析需求;团队确认无重大遗漏。', 'common_issues': '数据来源单一或过时,可能导致分析偏差;部分数据难以获取。', 'solutions': '优先选择权威机构发布的数据,结合多渠道交叉验证;对于缺失数据,可通过模型推算或引用替代指标。'}, {'step': 3, 'action': '从宏观到微观逐步展开分析,按照时间线、因果链条或政策影响路径构建论证逻辑。', 'output': '形成逐层递进的观点支持体系,例如:从特朗普新政的背景出发,分析其对美国经济、全球经济及具体资产类别的影响。', 'completion_criteria': '各部分逻辑连贯,观点之间有明确的因果关系;读者能轻松理解政策如何传导至具体结果。', 'common_issues': '论证过程可能跳跃性过大,或缺乏足够的证据支撑。', 'solutions': '使用图表和案例强化论点,确保每一步推导都有充分依据;必要时加入专家访谈或文献引用作为补充。'}, {'step': 4, 'action': '平衡不同类型信息的分布,确保定量分析与定性判断相辅相成,同时兼顾历史回顾与未来预测。', 'output': '呈现形式多样化的分析内容,既有统计数据支持的趋势描述,也有基于政策解读的情景假设。', 'completion_criteria': '各类信息比例合理,没有过度偏重某一方面;对未来预测提供多种可能性并解释条件。', 'common_issues': '定量分析可能掩盖定性洞察的重要性,或者预测部分显得空洞。', 'solutions': '在定量分析基础上提炼关键趋势,用定性语言总结其意义;为预测设置不同情景,分别探讨概率和影响。'}, {'step': 5, 'action': '识别并阐述主要风险因素,提出应对策略或观察指标。', 'output': '列出潜在风险清单及其触发条件,并给出具体的监测方法和缓解措施。', 'completion_criteria': '风险因素覆盖全面,应对方案切实可行;客户能够据此制定行动计划。', 'common_issues': '风险提示可能流于表面,缺乏针对性解决方案。', 'solutions': '结合实际案例说明类似风险的历史表现,设计多层次的风险管理计划。'}, {'step': 6, 'action': '撰写最终报告,突出核心结论并通过可视化工具增强信息传递效果。', 'output': '完成一份包含摘要、详细分析、图表辅助及行动建议的完整报告。', 'completion_criteria': '报告语言简练易懂,图表直观且与文字内容高度匹配;审阅者反馈积极。', 'common_issues': '报告篇幅过长或表达不够精炼,导致阅读体验不佳。', 'solutions': '严格控制篇幅,删除冗余内容;邀请外部审阅者提供反馈以优化表述方式。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 05:56:50", "modified_time": "2025-08-14 05:56:50", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "7b36c7a0db14462bacddc83f37d4b4c1", "experience_type": "text", "when_to_use": "此规划框架适用于宏观经济分析、货币政策解读以及投资策略制定类任务,特别是涉及央行决策(如美联储FOMC会议)对市场影响的深度研究。它也可用于其他需要综合定量与定性信息、平衡历史数据与未来预测的金融分析场景。", "content": "[{'step': 1, 'action': '明确核心议题和背景信息', 'output': '一份清晰的研究背景说明,包括事件的时间、地点、主要参与者及市场预期。', 'completion_criteria': '背景信息完整且准确,能为后续分析奠定坚实基础;读者能够快速理解分析的起点和目标。', 'common_issues': '背景信息过于冗长或模糊,导致读者难以抓住重点。', 'solutions': '提炼关键事实,使用简洁的语言概述背景,并通过时间线或事件框架突出核心内容。'}, {'step': 2, 'action': '提取并组织核心观点', 'output': '一份包含核心结论的观点摘要,通常以‘投资要点’形式呈现,涵盖政策决议、市场分歧、经济指标变化等。', 'completion_criteria': '核心观点逻辑清晰,直接回应背景信息中的问题;结论具有指导性和可操作性。', 'common_issues': '核心观点分散,未能集中反映最重要的市场影响因素。', 'solutions': '优先列出对市场影响最大的结论,辅以简短的解释;避免过多细节干扰整体逻辑。'}, {'step': 3, 'action': '分章节展开详细分析', 'output': '按主题划分的章节结构,每个章节围绕一个核心议题展开,例如政策声明解读、经济指标分析、就业市场评估等。', 'completion_criteria': '章节安排合理,逻辑连贯;每章内容既能独立成篇,又能与其他章节形成有机联系。', 'common_issues': '章节顺序混乱,导致读者难以跟随分析思路。', 'solutions': '按照‘从宏观到微观’或‘从已知到未知’的逻辑安排章节顺序,确保信息递进自然。'}, {'step': 4, 'action': '结合定量与定性信息进行论证', 'output': '在每一章节中,通过定量数据(如失业率、通胀率)和定性分析(如政策声明解读)相结合的方式支持观点。', 'completion_criteria': '数据准确且相关性强,定性分析深入但不过度主观;两者相辅相成,共同支撑结论。', 'common_issues': '定量与定性信息脱节,导致论证不够充分。', 'solutions': '设计表格或图表直观展示数据,同时用简短文字说明其含义和影响。'}, {'step': 5, 'action': '识别并讨论不确定性与风险', 'output': '在适当位置提出可能的风险因素,例如政策路径的不确定性、外部环境的变化等,并评估其潜在影响。', 'completion_criteria': '风险提示全面且及时,既不夸大也不忽视;风险讨论融入整体分析而非孤立存在。', 'common_issues': '风险提示过于笼统,缺乏具体案例或数据支持。', 'solutions': '引用具体数据或历史案例说明风险来源,并提供应对建议。'}, {'step': 6, 'action': '总结并展望未来趋势', 'output': '一段总结性文字,重申核心结论,同时对未来市场走势或政策方向提出预测。', 'completion_criteria': '总结简洁有力,预测基于现有数据和逻辑推导,具有一定的前瞻性。', 'common_issues': '总结部分过于平淡,缺乏实际指导意义。', 'solutions': '强调核心结论的实际应用价值,并结合当前市场动态提出具体的投资建议。'}, {'step': 7, 'action': '附上补充材料和免责声明', 'output': '包括数据来源、图表、分析师声明及免责条款等内容,确保报告透明且合规。', 'completion_criteria': '补充材料详实可靠,免责声明符合监管要求。', 'common_issues': '补充材料不足或格式混乱,影响报告的专业性。', 'solutions': '统一格式规范,确保所有引用数据注明来源,并定期更新免责声明内容。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 05:58:23", "modified_time": "2025-08-14 05:58:23", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "85f22acce7384414bd3831cb4d7e69be", "experience_type": "text", "when_to_use": "该规划框架适用于流动性分析、市场资金流动监控、行业配置建议等金融研究任务,特别是需要结合定量与定性数据对市场动态进行深度解析的场景。例如:周报/月报类分析、资金流向跟踪报告、宏观流动性评估等。", "content": "[{'step': 1, 'action': '明确分析目标和核心问题', 'output': '定义报告的核心主题(如流动性变化、资金流向趋势),形成清晰的问题导向。', 'completion_criteria': '核心问题是否聚焦且具有实际意义,是否能指导后续章节安排。', 'common_issues': '目标过于宽泛或缺乏明确方向。', 'solutions': '通过团队讨论或客户反馈精炼核心问题,确保主题具体且可操作。'}, {'step': 2, 'action': '收集与整理基础数据', 'output': '获取并清洗相关市场数据(如成交额、换手率、资金流入流出情况、ETF份额变动等),确保数据准确性和完整性。', 'completion_criteria': '数据覆盖全面,来源可靠,并能支持后续分析需求。', 'common_issues': '数据缺失或滞后导致分析不准确。', 'solutions': '提前建立稳定的数据源渠道,并设置数据校验机制。'}, {'step': 3, 'action': '设计章节结构与信息优先级', 'output': '按照逻辑顺序组织内容,通常从宏观到微观展开,先呈现总体结论,再深入细节分析;同时确定信息展示优先级,将核心结论放在显眼位置。', 'completion_criteria': '章节安排是否符合读者阅读习惯,核心结论是否突出。', 'common_issues': '章节结构混乱,信息冗余或重点不突出。', 'solutions': '参考类似成功案例模板,保持简洁和逻辑连贯性。'}, {'step': 4, 'action': '构建定量与定性分析框架', 'output': '基于数据分解关键变量(如资金供给端、需求端),使用图表直观展示定量结果,辅以定性解读说明趋势背后的驱动因素。', 'completion_criteria': '定量与定性信息平衡分布,图表清晰易懂,解释合理。', 'common_issues': '过度依赖单一类型信息,忽略其他视角。', 'solutions': '采用多维度交叉验证方法,避免偏倚。'}, {'step': 5, 'action': '提出风险提示与不确定性管理', 'output': '在适当环节加入风险提示(如市场波动、数据时滞性),并通过假设条件或情景模拟处理多种可能性。', 'completion_criteria': '风险提示是否及时且充分,是否包含应对策略。', 'common_issues': '风险提示流于形式,未提供实质性建议。', 'solutions': '结合历史案例和当前环境细化潜在风险点及其影响路径。'}, {'step': 6, 'action': '优化视觉呈现与语言表达', 'output': '制作高质量图表,确保排版整齐美观,文字表述专业但通俗易懂,便于目标受众快速理解。', 'completion_criteria': '图表与文字是否协同一致,整体风格是否统一。', 'common_issues': '图表过多或过少,语言晦涩难懂。', 'solutions': '遵循“一页一图”原则,尽量减少复杂术语。'}, {'step': 7, 'action': '复核与发布前审查', 'output': '检查所有数据、图表、文字描述的一致性,确认无错误后提交最终版本。', 'completion_criteria': '报告无明显错误,内容完整且逻辑严密。', 'common_issues': '遗漏重要信息或存在计算错误。', 'solutions': '引入多人交叉审核机制,提高质量控制标准。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 05:59:43", "modified_time": "2025-08-14 05:59:43", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "7d48171a681d454b9db113f097a69be9", "experience_type": "text", "when_to_use": "适用于宏观经济分析、季度经济数据点评、投资策略报告等任务,尤其是需要结合定量与定性信息,对经济趋势进行深度解析并给出前瞻预测的场景。", "content": "[{'step': 1, 'action': '明确核心观点和分析目标', 'output': '提炼出关键结论(如GDP超预期的原因及经济动能放缓的核心问题),并将其作为全文的统领性内容。', 'completion_criteria': '核心观点清晰简洁,能够用一句话概括全文主旨,并且逻辑上能贯穿所有后续章节。', 'common_issues': '核心观点过于模糊或冗长,导致读者难以抓住重点。', 'solutions': '在撰写前反复推敲核心观点,确保其精炼且具有高度概括性。可以通过团队讨论或客户反馈验证核心观点是否足够有力。'}, {'step': 2, 'action': '组织章节结构,确定信息优先级', 'output': '将分析分为几个主要部分(如消费、投资、贸易、库存、政府支出等),并按照重要性和逻辑递进安排顺序。', 'completion_criteria': '各章节之间逻辑连贯,信息展示由宏观到微观逐步深入,核心结论在开篇和总结中均得到突出。', 'common_issues': '章节安排混乱,导致信息呈现缺乏条理,或次要信息过多分散注意力。', 'solutions': '提前绘制思维导图,明确每个部分的功能定位,并确保次要信息仅作为补充说明而非主导内容。'}, {'step': 3, 'action': '收集和整理定量与定性数据', 'output': '通过图表、表格等形式展示关键数据(如GDP分项贡献率、环比折年增长率等),并结合定性分析解释数据背后的趋势。', 'completion_criteria': '数据准确无误,图表清晰直观,定性分析与定量数据相辅相成,避免单纯罗列数字。', 'common_issues': '数据来源不权威或数据解读偏差,导致结论可信度下降。', 'solutions': '使用权威数据库(如FRED、iFinD)获取数据,并通过交叉验证确保准确性;同时结合行业背景解释数据变化原因。'}, {'step': 4, 'action': '逐层递进论证,建立完整逻辑链条', 'output': '从整体经济状况入手,逐步细化至具体领域(如消费、投资、贸易等),并通过对比历史数据和当前表现揭示趋势。', 'completion_criteria': '每一部分的论点都紧密围绕核心观点展开,论证过程环环相扣,没有跳跃式推理或逻辑断层。', 'common_issues': '论证过程松散,导致结论缺乏说服力。', 'solutions': '采用“总-分-总”结构,在每部分开头明确论点,中间提供详实数据支持,结尾呼应核心观点。'}, {'step': 5, 'action': '适时引入风险提示,平衡乐观与悲观视角', 'output': '在适当位置(通常为后半段)提出潜在风险(如政策超预期、经济下行压力等),并评估其可能影响。', 'completion_criteria': '风险提示既不过于笼统也不过度渲染,能够帮助读者全面理解形势复杂性,同时不影响整体分析的专业性。', 'common_issues': '风险提示缺失或处理不当,导致报告偏向片面化。', 'solutions': '设置专门章节或段落系统梳理风险因素,并结合情景分析探讨不同可能性。'}, {'step': 6, 'action': '总结展望与行动建议', 'output': '基于前述分析,对未来趋势做出预测,并提出针对性建议(如关注关税传导效应、警惕消费与投资承压等)。', 'completion_criteria': '总结简明扼要,预测合理有据,建议切实可行,能够为决策者提供明确指导。', 'common_issues': '总结空洞泛化,缺乏实际操作价值。', 'solutions': '针对不同受众(投资者、政策制定者等)定制化建议,确保其具有可执行性。'}, {'step': 7, 'action': '审阅与优化表达', 'output': '检查语言表述是否流畅、术语是否规范、图表是否美观,以及是否存在错别字或格式错误。', 'completion_criteria': '文档整洁专业,阅读体验良好,内容符合目标受众的知识水平。', 'common_issues': '语言晦涩难懂,或图表设计粗糙,影响整体观感。', 'solutions': '邀请同行评审或借助编辑工具进行多轮校对,确保最终版本质量过硬。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 06:00:54", "modified_time": "2025-08-14 06:00:54", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "f60fb594e89f497cac88d4b39c7d296a", "experience_type": "text", "when_to_use": "此规划框架适用于宏观经济分析、行业深度研究、投资策略制定及政策影响评估等任务。尤其适合需要结合定量和定性数据,涵盖多维度经济指标,并对市场趋势、政策导向、产业动态进行综合研判的金融分析工作。", "content": "[{'step': 1, 'action': '明确分析目标与核心问题', 'output': '确定报告的核心主题(如反内卷政策对经济的影响),并列出关键关注点(如PMI、进出口、房地产、货币流动性等)。', 'completion_criteria': '确保核心问题清晰且具有针对性,能够通过后续数据分析验证或解答。', 'common_issues': '问题定义过于宽泛或模糊,导致后续分析缺乏聚焦。', 'solutions': '通过头脑风暴或与团队讨论,细化核心问题,确保其具体性和可操作性。'}, {'step': 2, 'action': '收集和整理相关数据', 'output': '从权威来源(如WIND、国家统计局等)获取定量数据(如GDP、CPI、PPI等)和定性信息(如政策文件、会议纪要等)。', 'completion_criteria': '数据覆盖全面,包含历史趋势、当前状态及预测值;数据来源可靠且标注清楚。', 'common_issues': '数据不完整或来源不可靠,可能导致结论偏差。', 'solutions': '建立数据质量审核机制,优先选择官方或权威机构发布的信息,并标注数据更新日期和范围限制。'}, {'step': 3, 'action': '构建章节结构,分配信息优先级', 'output': '设计以“宏观-中观-微观”为逻辑主线的章节框架,先展示总体经济趋势,再深入分行业和区域分析,最后聚焦于特定领域(如价格指数、就业、对外贸易等)。', 'completion_criteria': '章节安排合理,层次分明,信息展示优先级符合读者需求,核心结论突出。', 'common_issues': '章节间逻辑跳跃过大,导致读者难以理解整体脉络。', 'solutions': '采用金字塔原理,由总到分逐步展开,确保每部分之间有自然过渡和逻辑衔接。'}, {'step': 4, 'action': '进行定量与定性分析', 'output': '结合图表和文字说明,对定量数据(如同比增速、环比变化)和定性信息(如政策解读、市场预期)进行交叉分析,形成初步观点。', 'completion_criteria': '定量分析准确无误,定性分析逻辑清晰,两者结合能有效支撑观点。', 'common_issues': '定量分析过于复杂或定性分析缺乏深度,导致结论不够有力。', 'solutions': '使用可视化工具简化数据呈现,同时引用专家观点或权威文献增强定性分析可信度。'}, {'step': 5, 'action': '提炼核心结论,提出行动建议', 'output': '基于分析结果,总结出月度经济运行的主要特征(如制造业景气水平回落、消费复苏乏力等),并提出针对性的投资策略或政策建议(如关注新兴行业机会、规避高风险资产)。', 'completion_criteria': '核心结论明确且与数据分析一致,行动建议切实可行。', 'common_issues': '结论与数据脱节,或建议过于笼统无法落地。', 'solutions': '反复核对数据与结论的关联性,确保建议具体化、场景化,便于读者决策参考。'}, {'step': 6, 'action': '识别和评估风险因素', 'output': '在适当节点引入风险提示(如外部环境不确定性、行业供需偏弱等),并分析可能的应对措施。', 'completion_criteria': '风险因素被充分识别,评估方法科学合理,且时机选择恰当(通常在结论前或后单独成段)。', 'common_issues': '忽视潜在风险或风险描述过于简略,削弱报告的全面性。', 'solutions': '提前梳理可能的风险点,结合情景分析法提供多种可能性及其影响。'}, {'step': 7, 'action': '平衡不同信息类型分布', 'output': '在报告中均衡展示定量数据(如表格、图表)、定性分析(如政策解读)以及预测展望(如未来趋势判断),避免单一类型信息过载。', 'completion_criteria': '报告内容丰富但不过度冗长,各类型信息比例协调,读者体验良好。', 'common_issues': '过度依赖某一类信息,导致报告失衡或难以阅读。', 'solutions': '根据目标受众需求调整信息比例,例如投资者更关注定量数据,而政策研究者偏好定性分析。'}, {'step': 8, 'action': '撰写报告并优化语言表达', 'output': '用简洁明了的语言撰写报告,确保专业术语解释清晰,图表注释完整,且行文流畅。', 'completion_criteria': '报告语言精炼准确,排版美观,图表与文字说明相辅相成。', 'common_issues': '语言晦涩难懂,图表说明缺失或排版混乱。', 'solutions': '多次校对文本,邀请同事审阅反馈,确保语言通俗易懂;图表设计遵循一致性原则。'}, {'step': 9, 'action': '添加免责声明与附录', 'output': '补充研究报告的局限性声明、数据来源说明及免责条款,增加附录以支持详细数据查询。', 'completion_criteria': '免责声明和附录内容完备,符合行业规范,提升报告的专业性和合规性。', 'common_issues': '忽略免责声明或未标明数据来源,引发法律或信任风险。', 'solutions': '严格遵守公司模板要求,检查所有引用数据是否注明来源,必要时征求法务意见。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 06:03:55", "modified_time": "2025-08-14 06:03:55", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "e5288c1fac9a48d2bc5fb67f3c732f37", "experience_type": "text", "when_to_use": "适用于宏观经济分析、财政政策解读、行业深度研究等需要结合定量与定性分析的任务。", "content": "[{'step': 1, 'action': '明确核心结论并概述整体框架', 'output': '简要总结关键发现(如收入端改善、支出端发力特征)并列出后续章节的主要内容。', 'completion_criteria': '核心结论是否清晰,框架是否能引导读者理解后续细节。', 'common_issues': '核心结论过于笼统或缺乏吸引力。', 'solutions': '使用具体数据或政策背景支持核心结论,增强说服力。'}, {'step': 2, 'action': '分解数据并逐项分析', 'output': '按收入、支出、政府性基金等模块,逐一分析各分项数据的变化及其背后原因。', 'completion_criteria': '每个模块是否有明确的数据支持,分析是否逻辑清晰。', 'common_issues': '数据堆砌过多,缺乏对变化原因的深入解读。', 'solutions': '结合经济背景(如PPI下行、房地产市场调整)解释数据变化,提升分析深度。'}, {'step': 3, 'action': '结合政策背景展望未来', 'output': '引用相关政策文件或会议内容,分析未来可能的政策方向及其潜在影响。', 'completion_criteria': '政策展望是否基于前期数据分析,是否提供了多种可能性。', 'common_issues': '政策展望过于空泛或缺乏数据支持。', 'solutions': '将政策展望与前期数据分析紧密结合,提供具体措施的可能性分析。'}, {'step': 4, 'action': '适时提出风险因素并评估影响', 'output': '在适当节点提出可能的风险(如收入偏弱制约支出空间),并评估其对整体形势的影响。', 'completion_criteria': '风险因素是否客观且时机恰当,是否对整体结论构成威胁。', 'common_issues': '风险因素被过度强调或忽视。', 'solutions': '在逻辑递进过程中适时提出风险,确保不影响整体结论的连贯性。'}, {'step': 5, 'action': '总结并突出核心结论', 'output': '重申核心结论,并结合政策展望和风险评估给出最终建议。', 'completion_criteria': '总结是否简洁有力,是否能引导读者得出明确结论。', 'common_issues': '总结过于冗长或偏离核心主题。', 'solutions': '聚焦于核心结论,避免重复细节,强化政策建议的实际意义。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 06:05:17", "modified_time": "2025-08-14 06:05:17", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "6629c7d5e3d6454da45a7e38da2717b0", "experience_type": "text", "when_to_use": "此规划框架适用于对上市公司或行业进行深度财务分析、业绩解读和投资建议的场景,尤其适合季度财报解读、业务增长驱动因素分析以及未来展望评估。它也可用于撰写综合性的投资研究报告,涵盖定量与定性分析,并结合风险提示。", "content": "[{'step': 1, 'action': '明确报告目标和受众', 'output': '确定分析的核心主题(如Uber FY2Q25业绩表现)和目标受众(如机构投资者、分析师等),并据此设计报告结构。', 'criteria_for_success': '报告目标清晰且符合受众需求;结构设计合理,能有效传递核心信息。', 'common_issues': '目标不明确可能导致内容偏离主题;未充分考虑受众背景可能降低报告实用性。', 'solutions': '在撰写前与团队或客户确认目标,确保分析重点与受众需求一致。'}, {'step': 2, 'action': '收集和整理数据', 'output': '从公司财报、行业数据、市场动态中提取关键定量和定性信息,例如营收增长率、利润率变化、用户行为数据等。', 'criteria_for_success': '数据全面且来源可靠;关键指标覆盖全面,无遗漏。', 'common_issues': '数据不足或质量不高可能导致分析结论不准确;数据冗余会增加阅读负担。', 'solutions': '优先选择官方财报和权威第三方数据源,剔除无关或低价值数据。'}, {'step': 3, 'action': '构建章节结构并分配信息优先级', 'output': '设计逻辑清晰的章节结构,通常包括事件概述、数据分析、业务点评、未来展望和风险提示,确保核心结论优先展示。', 'criteria_for_success': '章节安排符合逻辑顺序,信息优先级突出;核心结论易于识别。', 'common_issues': '章节过于分散或信息堆砌可能导致读者难以抓住重点。', 'solutions': '遵循“总-分-总”原则,先呈现核心结论,再逐步展开细节支持论点。'}, {'step': 4, 'action': '量化分析与定性评价相结合', 'output': '通过定量数据(如营收、利润、用户增长)支持定性观点(如平台效应增强、出行业务稳健增长),形成多层次论证。', 'criteria_for_success': '定量与定性分析相辅相成,论据充分且逻辑严密。', 'common_issues': '过度依赖单一类型信息可能导致分析片面化。', 'solutions': '平衡使用历史数据、当前表现和未来预测,确保多维度支撑观点。'}, {'step': 5, 'action': '引入风险因素并提出应对策略', 'output': '在适当位置(如章节末尾或展望部分)提出潜在风险(如需求疲软、竞争加剧),并简要讨论可能的缓解措施。', 'criteria_for_success': '风险提示全面且时机恰当;应对策略具有可行性。', 'common_issues': '风险因素过早提及可能削弱正面信息的传递效果;忽略风险则显得不够客观。', 'solutions': '在核心分析后自然引出风险,保持语气中立,避免过度渲染负面情绪。'}, {'step': 6, 'action': '总结并提炼行动建议', 'output': '基于分析结果,提炼出明确的投资建议或业务发展建议,例如维持买入评级、关注特定领域增长机会等。', 'criteria_for_success': '总结简洁明了,建议具体可行;与分析内容高度一致。', 'common_issues': '总结过于笼统或缺乏实际指导意义。', 'solutions': '将总结与核心发现直接挂钩,提供清晰的下一步行动指引。'}, {'step': 7, 'action': '校对与合规审查', 'output': '检查报告内容是否符合法律和行业规范,包括披露声明、利益冲突声明等;同时确保语言表达准确无误。', 'criteria_for_success': '报告内容合规且语言流畅;无重大错误或遗漏。', 'common_issues': '忽视合规要求可能导致法律责任;语言问题影响专业形象。', 'solutions': '设立专门的合规审查流程,确保所有必要声明完整无误。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 06:06:30", "modified_time": "2025-08-14 06:06:30", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "d08be702293945d984d8ebd22f88b619", "experience_type": "text", "when_to_use": "适用于行业深度研究、投资标的分析、风险评估报告等需要结合定量与定性信息,且需在不确定性中提出明确建议的金融分析任务。", "content": "[{'step': 1, 'action': '明确分析目标与框架结构', 'output': '形成清晰的章节划分(如板块行情、数据跟踪、行业新闻、公司公告、风险提示),并确定每个部分的核心内容和优先级。', 'criteria_for_completion': '章节结构完整,各部分逻辑连贯,能够覆盖行业的关键维度(市场表现、交易数据、政策动态、企业行为、潜在风险)。', 'common_issues_and_solutions': [{'issue': '章节划分过于零散或重叠。', 'solution': '通过反复审视各部分内容,确保每章聚焦一个核心主题,并与其他章节形成互补而非重复。'}]}, {'step': 2, 'action': '收集并整理定量与定性数据', 'output': '生成数据图表(如成交面积、同比环比变化)、政策解读摘要及公司公告要点。', 'criteria_for_completion': '数据来源可靠且经过交叉验证,图表展示直观易懂,定性信息提炼精炼且相关性强。', 'common_issues_and_solutions': [{'issue': '数据不完整或存在偏差。', 'solution': '采用多个权威数据源进行比对,标注数据限制条件,避免单一来源导致误差。'}]}, {'step': 3, 'action': '构建核心观点的论证逻辑', 'output': '基于数据分析,逐层递进地建立观点(如从市场表现到政策影响再到个股推荐),并使用对比法(历史 vs 当前、不同城市能级 vs 整体趋势)增强说服力。', 'criteria_for_completion': '观点清晰,论据充分,逻辑链条无断裂,能够有效支撑最终的投资建议。', 'common_issues_and_solutions': [{'issue': '论证过程中忽略重要变量或假设。', 'solution': '引入敏感性分析,探讨多种可能性,确保结论稳健性。'}]}, {'step': 4, 'action': '平衡不同类型信息的分布', 'output': '将定量数据(如成交面积、同比变化)与定性信息(如政策解读、公司公告)有机结合,并按时间维度(当周、当月、年初至今)分层呈现。', 'criteria_for_completion': '信息分布均衡,读者能快速获取关键数据,同时理解背景和趋势。', 'common_issues_and_solutions': [{'issue': '信息堆砌而缺乏重点。', 'solution': '通过加粗、颜色标记等方式突出核心数据和结论,减少冗余描述。'}]}, {'step': 5, 'action': '处理不确定性和多种可能性', 'output': '在风险提示部分详细说明潜在下行因素(如量价超预期下行、融资环境恶化),并通过情景模拟(乐观/中性/悲观)提供应对策略。', 'criteria_for_completion': '风险提示全面但不过度夸大,提出的应对措施具体可行。', 'common_issues_and_solutions': [{'issue': '风险提示流于形式,未深入分析。', 'solution': '结合历史案例和当前环境,量化风险概率及其潜在影响,提升可信度。'}]}, {'step': 6, 'action': '总结并提炼投资建议', 'output': '根据前述分析,给出明确的投资评级(如“看好”)及具体标的推荐(如滨江集团、绿城中国等),并附上筛选标准(如核心城市布局、拿地能力、产品力强)。', 'criteria_for_completion': '投资建议具体且可操作,与前期分析高度一致,能够指导实际投资决策。', 'common_issues_and_solutions': [{'issue': '投资建议模糊或缺乏依据。', 'solution': '回溯分析过程,确保每条建议都有扎实的数据支持和逻辑推导。'}]}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 06:07:32", "modified_time": "2025-08-14 06:07:32", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "289552232df74fb4b178ccee7f043717", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及周期性市场动态跟踪报告。尤其适合涉及多维度数据(如定量价格波动与定性政策影响)的金融分析任务,需要对市场趋势、行业动态和投资建议进行系统化整合的场景。", "content": "[{'step': 1, 'action': '明确报告目标与受众需求', 'output': '确定报告的核心主题(如本周有色新材料行业的市场表现)、受众(如机构投资者)以及主要关注点(如价格波动、分红事件、政策影响等)。', 'how_to_judge_completion': '报告目标清晰,能够通过目录或摘要快速了解核心内容,且目标与实际内容一致。', 'common_issues_and_solutions': {'问题': '目标模糊或偏离受众需求。', '解决方案': '在撰写前与目标受众沟通,明确其关注的核心问题,并围绕这些需求构建报告结构。'}}, {'step': 2, 'action': '收集并整理基础数据', 'output': '从权威来源(如Wind、LME等)获取定量数据(如金属价格、库存变化)和定性信息(如政策公告、公司分红计划),并分类整理为表格、图表等形式。', 'how_to_judge_completion': '数据完整、准确,且已按类别(贵金属、工业金属、稀有金属等)和时间维度(周度、月度)进行清晰组织。', 'common_issues_and_solutions': {'问题': '数据不完整或存在偏差。', '解决方案': '确保数据来源可靠,并通过交叉验证(如对比多个数据库)提升准确性;对缺失数据标注说明。'}}, {'step': 3, 'action': '构建章节结构并安排信息优先级', 'output': '设计逻辑清晰的章节结构(如行情回顾→价格分析→重大事件→投资建议→风险提示),优先展示核心结论(如稀土价格上涨、分红预期)。', 'how_to_judge_completion': '章节层次分明,重点突出,读者能快速定位关键信息;摘要部分全面概括报告核心内容。', 'common_issues_and_solutions': {'问题': '信息堆砌无序,缺乏逻辑连贯性。', '解决方案': '按照“总-分-总”结构组织内容,先概述整体趋势,再细分具体领域,最后总结投资建议和风险。'}}, {'step': 4, 'action': '展开详细分析并平衡定量与定性信息', 'output': '针对每个子行业(如贵金属、工业金属、稀有金属)分别进行定量分析(如价格涨跌幅、库存变化)和定性讨论(如政策影响、供需关系),并结合图表直观呈现。', 'how_to_judge_completion': '分析全面且深入,既涵盖历史数据也包含未来预测;图表与文字说明相辅相成,信息分布均衡。', 'common_issues_and_solutions': {'问题': '过度依赖定量数据而忽略定性分析,或反之。', '解决方案': '制定标准化模板,要求每部分内容同时包含定量数据支持和定性解释,确保两者平衡。'}}, {'step': 5, 'action': '提炼投资建议并提出风险提示', 'output': '基于分析结果,给出明确的投资建议(如看好稀土板块),并列出潜在风险因素(如国际关系、自然灾害等)。', 'how_to_judge_completion': '投资建议具体可行,风险提示全面覆盖主要不确定性,帮助投资者权衡收益与风险。', 'common_issues_and_solutions': {'问题': '投资建议过于笼统或忽视风险。', '解决方案': '采用SWOT分析法评估行业优劣势及外部机会威胁,确保建议和风险提示均有据可依。'}}, {'step': 6, 'action': '校验数据与语言表达,优化可视化效果', 'output': '检查所有数据计算是否正确,语言表述是否简洁明了,图表是否美观易读。', 'how_to_judge_completion': '报告无明显错误,图表清晰直观,文字流畅专业,符合目标受众阅读习惯。', 'common_issues_and_solutions': {'问题': '图表混乱或语言冗长。', '解决方案': '使用统一的图表风格指南,限制每段文字长度,避免术语滥用。'}}, {'step': 7, 'action': '发布报告并收集反馈', 'output': '将报告发送至目标受众,并通过问卷调查或直接沟通收集反馈意见。', 'how_to_judge_completion': '收到积极反馈,报告被广泛引用或作为决策参考。', 'common_issues_and_solutions': {'问题': '反馈较少或负面评价较多。', '解决方案': '主动跟进用户需求,定期更新报告内容,持续改进质量。'}}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 06:08:34", "modified_time": "2025-08-14 06:08:34", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "61518f2bdb7e4662a30b44ab2c48de20", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究、投资标的分析以及风险评估报告等金融分析任务,特别是需要结合定量与定性数据进行全面论证的场景。例如:医药生物行业的双周报分析、创新药领域的BD交易评估、或对政策、市场动态和企业财务表现的综合研判。", "content": "[{'step': 'Step 1: 数据收集与整理', 'action': '从权威渠道(如Wind、NMPA、国家医保局等)获取行业动态、政策法规、公司公告及市场表现等多维度数据,并进行分类整理。', 'output': '形成清晰的数据表格和图表,包括行业涨跌幅、估值水平、重点覆盖公司盈利预测等。', 'criteria_for_completion': '确保数据来源可靠、分类清晰且无遗漏;所有数据均经过核对并标注来源。', 'common_issues_and_solutions': [{'issue': '数据不完整或更新滞后', 'solution': '通过多方交叉验证补充缺失数据,优先使用最新公开信息,并注明数据的时间范围。'}]}, {'step': 'Step 2: 行业回顾与趋势分析', 'action': '基于收集的数据,分析行业整体表现、子行业差异及估值变化,结合历史数据识别短期波动和长期趋势。', 'output': '生成行情回顾部分,涵盖指数涨跌幅、估值水平分布及重要子行业的表现描述。', 'criteria_for_completion': '分析逻辑清晰,能够准确反映行业现状,突出关键驱动因素;图表直观易懂。', 'common_issues_and_solutions': [{'issue': '不同子行业间表现差异难以概括', 'solution': '采用对比法,将领先和落后子行业分别列出,并用具体数字说明其表现差距。'}]}, {'step': 'Step 3: 政策解读与事件影响分析', 'action': '剖析近期相关政策法规、重大事件及其对行业和个股的影响,重点关注监管导向、支付体系改革、国际化进展等。', 'output': '撰写“行业重要资讯”章节,详细阐述政策背景、实施细节及潜在市场影响。', 'criteria_for_completion': '政策解读全面深入,能准确预判其对企业经营和市场竞争格局的影响;语言简洁明了。', 'common_issues_and_solutions': [{'issue': '政策条款复杂且专业性强', 'solution': '提炼核心要点,结合实际案例解释政策可能带来的具体后果。'}]}, {'step': 'Step 4: 公司动态与财务分析', 'action': '针对重点覆盖公司,进行盈利预测、评级调整及财务健康状况分析,同时关注股东增减持行为。', 'output': '完成“公司动态”部分,包括盈利预测表、增减持统计表及相关投资建议。', 'criteria_for_completion': '每家公司分析独立成块,结论明确;盈利预测合理且有据可依;增减持情况与股价走势关联性得到体现。', 'common_issues_and_solutions': [{'issue': '盈利预测过于乐观或保守', 'solution': '参考行业平均增长率、公司过往业绩及同行比较,建立合理假设模型。'}]}, {'step': 'Step 5: 投资建议与风险提示', 'action': '综合以上分析,提出明确的投资策略,聚焦于具备“真创新”、“平台化”、“国际化”等特质的企业,并提示主要风险。', 'output': '撰写“投资建议”章节,总结推荐标的和操作方向,同时强调政策、研发进展及市场风险。', 'criteria_for_completion': '建议切中要害,符合当前市场环境;风险提示全面但不过度悲观。', 'common_issues_and_solutions': [{'issue': '投资建议缺乏针对性', 'solution': '根据行业特性筛选目标企业,避免泛泛而谈;结合定量与定性分析提供支撑。'}]}, {'step': 'Step 6: 结构优化与最终校审', 'action': '按照目录顺序重新组织内容,确保逻辑连贯、信息展示优先级合理;检查语法错误和格式问题。', 'output': '形成完整的行业双周报文档,包含目录、正文、图表及附录。', 'criteria_for_completion': '结构紧凑有序,核心结论醒目;全文无明显错漏;图表编号统一规范。', 'common_issues_and_solutions': [{'issue': '章节衔接不流畅', 'solution': '增加过渡段落,确保前后内容自然衔接;必要时调整章节顺序以增强逻辑性。'}]}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 06:10:04", "modified_time": "2025-08-14 06:10:04", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "6d82393698f24a34a14f99b75f21f580", "experience_type": "text", "when_to_use": "此规划框架适用于生物医药行业的深度研究、创新药物动态跟踪分析、投资标的筛选与评估,以及涉及复杂数据整合和多维度论证的金融分析任务。特别适合需要结合定量(临床数据)与定性(药物潜力、市场前景)信息的任务场景。", "content": "[{'step': 1, 'action': '明确分析目标与核心问题', 'output': '定义报告的核心主题和关键问题,例如:选定创新药赛道中的具体药物类别(如ADC药物),并确定分析的重点(如疗效、耐受性和市场潜力)。', 'completion_criteria': '核心问题清晰且具有可操作性,能够指导后续章节结构设计。', 'common_issues': '目标过于宽泛或模糊,导致后续分析缺乏聚焦。', 'solutions': '通过头脑风暴或与团队讨论,提炼出最能影响决策的关键问题。'}, {'step': 2, 'action': '构建逻辑清晰的章节结构', 'output': '根据分析目标设计章节框架,例如:市场表现概述、药物点评(按适应症分类)、临床数据解读、风险提示等。', 'completion_criteria': '章节层次分明,信息分布合理,重点内容突出(如临床数据和疗效分析优先展示)。', 'common_issues': '章节间逻辑不连贯或信息重复。', 'solutions': '采用金字塔原理,确保每一章服务于整体目标,并通过提纲检查避免冗余。'}, {'step': 3, 'action': '优先展示核心结论与关键数据', 'output': '在报告开头或每章节起始部分,直接呈现核心结论(如ORR、PFS等关键指标),并辅以图表支持。', 'completion_criteria': '读者能在短时间内抓住重点,无需翻阅全文即可理解主要发现。', 'common_issues': '次要信息占据过多篇幅,掩盖核心结论。', 'solutions': '使用“倒金字塔”写作法,将最重要信息放在最前面,并限制背景信息的篇幅。'}, {'step': 4, 'action': '平衡定量与定性信息', 'output': '结合定量数据(如临床试验结果、ORR、PFS等)和定性分析(如药物机制、市场潜力、竞争格局),形成全面视角。', 'completion_criteria': '定量数据准确且来源可靠,定性分析有理有据,两者相辅相成。', 'common_issues': '过度依赖定量数据而忽视定性背景,或反之。', 'solutions': '为定量数据提供上下文解释,同时用定性分析补充数据无法覆盖的部分。'}, {'step': 5, 'action': '分层递进论证观点', 'output': '从基础事实出发,逐步推导至更复杂的结论。例如:先展示单药疗效,再分析联合疗法的优势,最后探讨市场潜力。', 'completion_criteria': '论证过程条理清晰,每一步都建立在前一步的基础上,无跳跃性推理。', 'common_issues': '论证链条断裂或逻辑跳跃。', 'solutions': '绘制论证路径图,确保每个环节都有充分的数据或理论支撑。'}, {'step': 6, 'action': '适时提出风险因素', 'output': '在结论部分或单独的风险提示章节中,系统列出潜在风险(如长期生存证据不足、研发进度延迟等)。', 'completion_criteria': '风险提示全面且客观,不影响整体结论的可信度。', 'common_issues': '风险提示过早出现,削弱正面结论;或过于简略,缺乏实质性内容。', 'solutions': '将风险提示安排在结论之后,确保其作为独立模块存在,同时提供应对策略建议。'}, {'step': 7, 'action': '处理不确定性和多种可能性', 'output': '对尚无定论的问题(如某些药物的长期OS获益)进行假设分析,并说明不同情景下的可能结果。', 'completion_criteria': '不确定性被透明化处理,且提供了合理的推测范围。', 'common_issues': '对不确定性避而不谈或处理过于武断。', 'solutions': '引入敏感性分析或情景模拟工具,量化不确定性的影响。'}, {'step': 8, 'action': '总结与行动建议', 'output': '在报告结尾总结核心发现,并给出明确的投资建议或下一步行动计划(如重点关注某几款药物的研发进展)。', 'completion_criteria': '总结简洁有力,建议具体可行,便于决策者采纳。', 'common_issues': '总结流于形式,缺乏实际指导意义。', 'solutions': '始终围绕分析目标,确保总结与建议直接服务于决策需求。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 06:11:24", "modified_time": "2025-08-14 06:11:24", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "6957a74fec73497488a35e062270357e", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及宏观经济驱动型的供需格局评估,尤其适合能源、化工等大宗商品领域的研究报告制作。该框架注重从历史数据出发,结合定量与定性分析,揭示行业趋势和投资机会,并对风险因素进行系统性提示。", "content": "[{'step': 1, 'action': '明确研究目标和逻辑框架', 'output': '清晰的投资逻辑声明(如:从原油消费结构演变探讨行业发展与投资方向)。', 'completion_criteria': '报告开篇需明确阐述研究主题、背景及核心结论的应用场景。', 'common_issues': '研究目标过于宽泛或缺乏实际应用场景。', 'solutions': '通过细化研究问题(如聚焦于供需变化、政策影响等),确保逻辑链条简洁且可操作。'}, {'step': 2, 'action': '收集并整理多维度的历史数据', 'output': '涵盖全球及主要地区的历史消费量、产能利用率、产品结构等数据的图表和分析。', 'completion_criteria': '数据覆盖至少过去30-40年的趋势,并包含区域对比(如亚太、北美、欧洲等)。', 'common_issues': '数据来源不一致或时间跨度不足,导致分析缺乏说服力。', 'solutions': '优先选择权威机构(如EIA、IEA、OPEC)发布的数据,确保数据质量和一致性。'}, {'step': 3, 'action': '分析需求端的结构性变化', 'output': '识别主要消费国的需求特征(如美国汽油消费占比高、中国成品油达峰下滑等),并结合宏观经济指标(如GDP增速)建立相关性。', 'completion_criteria': '清晰展示需求端的主要驱动因素及其变化趋势,并用图表支持分析。', 'common_issues': '忽视区域间的差异性或过度依赖单一变量解释需求变化。', 'solutions': '采用分区域、分产品的细化分析方法,同时结合多种宏观指标验证结论。'}, {'step': 4, 'action': '评估供给端的现状与前景', 'output': '分析全球炼厂产能利用率、新增项目分布及未来供需预测,结合高频边际数据(如库存、产量)提供动态视角。', 'completion_criteria': '量化供给过剩程度,并通过高频数据跟踪短期变化,形成对未来供需格局的判断。', 'common_issues': '仅关注长期趋势而忽略短期波动,或未充分考虑政策和技术的影响。', 'solutions': '整合高频数据与政策动向,构建多层次的供需分析模型。'}, {'step': 5, 'action': '提出行业转型的关键驱动因素', 'output': '总结行业面临的核心挑战(如新能源替代、环保政策)及应对策略(如“减油增化”、炼化一体化)。', 'completion_criteria': '提炼出具体的转型路径,并辅以案例说明其可行性。', 'common_issues': '提出的建议过于理论化或缺乏实操性。', 'solutions': '结合龙头企业实践和政策导向,提供切实可行的行动指南。'}, {'step': 6, 'action': '归纳投资建议和风险提示', 'output': '基于上述分析,筛选符合行业趋势的投资标的,并列出潜在风险点。', 'completion_criteria': '投资建议需具体到企业或项目类型,风险提示需全面覆盖地缘政治、技术革新等多方面。', 'common_issues': '投资建议过于笼统或风险提示不够全面。', 'solutions': '结合定量分析和定性判断,确保投资建议具备针对性,同时引入外部专家意见完善风险评估。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 06:12:40", "modified_time": "2025-08-14 06:12:40", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "448de3d4f5444976b73076f205b7aaa4", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及资本市场趋势解读等金融分析任务。尤其适合需要结合定量与定性数据,从宏观到微观进行系统性分析的场景,如消费电子行业动态、AI技术应用领域的市场机会挖掘。", "content": "[{'step': 1, 'action': '明确分析主题和目标,识别关键驱动因素。', 'output': '确定核心议题(如WAIC大会对AI应用落地的影响、Meta财报亮点),并列出主要关注点(如技术突破、市场规模、竞争格局)。', 'evaluation_criteria': \"是否清晰定义了分析范围,并能回答'为什么这个问题重要'和'它将如何影响决策'。\", 'common_issues': '可能过于宽泛或偏离实际需求。', 'solutions': '通过与利益相关者沟通确认优先级,聚焦于最直接影响业务的关键变量。'}, {'step': 2, 'action': '收集并整理相关信息,包括定量数据(财务数据、市场份额)、定性信息(行业趋势、专家观点)和历史背景。', 'output': '形成初步的数据集和资料库,涵盖公开报告、公司公告、第三方研究及图表支持材料。', 'evaluation_criteria': '数据来源是否权威可靠,覆盖度是否全面,且逻辑上互为补充。', 'common_issues': '数据不完整或存在偏差。', 'solutions': '交叉验证多个来源的信息一致性,必要时引入外部专家意见以弥补盲点。'}, {'step': 3, 'action': '构建章节结构,按照从宏观到微观、由整体到细节的方式组织内容。', 'output': '设计一个层次分明的框架,例如:先概述行业大趋势,再深入具体公司业绩表现,最后提出风险提示。', 'evaluation_criteria': '各部分之间是否有自然过渡,是否围绕核心论点展开论述。', 'common_issues': '章节安排松散,缺乏连贯性。', 'solutions': '提前绘制思维导图,确保每一节都服务于整体目标;定期回顾调整框架。'}, {'step': 4, 'action': '采用递进式论证路径,逐步建立观点,同时平衡不同类型信息的分布。', 'output': '输出逐层推进的分析段落,比如:技术突破→规模化应用→企业收益→未来展望。', 'evaluation_criteria': '论证是否环环相扣,定量与定性信息是否均衡呈现。', 'common_issues': '论证跳跃过大或忽视某些类型的证据。', 'solutions': '使用“金字塔原理”,确保每个结论都有充分的事实支撑,避免过度推断。'}, {'step': 5, 'action': '适时引入风险因素,用对比方式突出不确定性和多种可能性。', 'output': '在合适位置加入风险提示,如地缘政治冲突、新技术替代路径的挑战等。', 'evaluation_criteria': '风险讨论是否基于现实情境,是否提供了应对策略。', 'common_issues': '忽略潜在风险或处理过于简单化。', 'solutions': '结合SWOT分析法,全面审视内部优势/劣势与外部机会/威胁。'}, {'step': 6, 'action': '总结核心发现,并提炼出可操作的投资建议或战略方向。', 'output': '生成简洁有力的结论,附带具体的行动指南,如推荐关注特定标的或规避某类风险。', 'evaluation_criteria': '结论是否直击要害,建议是否切实可行。', 'common_issues': '结论空洞或脱离实际。', 'solutions': '始终回归原始问题,检查每条建议是否直接回应最初设定的目标。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 06:13:39", "modified_time": "2025-08-14 06:13:39", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "29df89815cc64f2babd78199bd04ea1c", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析、风险评估报告等需要综合定量与定性数据、历史与预测信息的金融分析任务。尤其适合覆盖多个子行业或市场区域,且需在有限时间内清晰传递核心投资建议的场景。", "content": "[{'step': 1, 'action': '明确分析目标和核心问题', 'output': '形成清晰的研究主题和分析框架,例如:本周观察聚焦于Adidas财报表现及其对纺织服装行业的启示。', 'completion_criteria': '研究主题是否具体且具有实际投资指导意义;是否涵盖关键变量(如财务指标、市场动态)。', 'common_issues': '目标过于宽泛或缺乏明确的投资相关性。', 'solutions': '通过团队讨论或客户反馈确认核心问题,并围绕其构建初步分析框架。'}, {'step': 2, 'action': '收集和整理数据', 'output': '获取并分类整理定量数据(如财务报表、市场数据)和定性信息(如行业新闻、政策变化)。', 'completion_criteria': '数据来源是否可靠;是否涵盖所有相关维度(如区域市场、品牌表现、原材料价格)。', 'common_issues': '数据缺失或不一致。', 'solutions': '优先使用权威来源(如Wind、国家统计局),并通过交叉验证确保数据质量。'}, {'step': 3, 'action': '分层分析数据并提炼核心结论', 'output': '从宏观到微观逐步展开分析,例如:先分析公司整体财务表现,再拆解至区域市场和品牌层面。', 'completion_criteria': '分析逻辑是否清晰;是否突出关键驱动因素(如Adidas品牌的营收增长和毛利率提升原因)。', 'common_issues': '分析层次混乱或遗漏重要变量。', 'solutions': '使用结构化思维工具(如MECE原则)确保分析全面且无重叠。'}, {'step': 4, 'action': '平衡定量与定性信息,展示核心结论', 'output': '将定量数据与定性洞察结合,形成直观图表和文字说明,例如:用柱状图展示各区域市场营收增长率。', 'completion_criteria': '信息展示是否直观;是否能快速抓住核心结论。', 'common_issues': '信息冗余或重点不突出。', 'solutions': '优先展示与投资建议最相关的数据,次要信息可放在附录或补充说明中。'}, {'step': 5, 'action': '提出投资建议并识别潜在风险', 'output': '基于分析结果,给出明确的投资建议(如推荐安踏体育、361度),并列出主要风险因素(如关税风险、消费信心恢复不及预期)。', 'completion_criteria': '建议是否具有可操作性;风险提示是否全面且具体。', 'common_issues': '建议过于笼统或忽视重大风险。', 'solutions': '结合定量分析结果和行业趋势,确保建议有数据支撑;风险提示需覆盖宏观经济、行业政策等多个维度。'}, {'step': 6, 'action': '撰写报告并优化结构', 'output': '按照“总-分-总”逻辑组织章节,例如:开篇概述核心观察,中间详细分析,结尾总结建议。', 'completion_criteria': '报告结构是否逻辑清晰;是否便于读者快速获取关键信息。', 'common_issues': '章节安排不合理或信息分布不均。', 'solutions': '采用目录预览法,确保每个章节内容紧密围绕核心主题展开。'}, {'step': 7, 'action': '校验和反馈优化', 'output': '完成初稿后进行内部校验,收集反馈并优化语言表达和数据准确性。', 'completion_criteria': '报告是否无明显错误;是否符合专业性和合规性要求。', 'common_issues': '语言表述不够严谨或存在数据误差。', 'solutions': '由资深分析师复核关键数据和结论,必要时邀请外部专家审阅。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 06:14:32", "modified_time": "2025-08-14 06:14:32", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "323910383cd24b038a3fb3cc5e1ae193", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及风险评估报告等金融分析任务,尤其是需要综合定量与定性信息、平衡历史数据与未来预测的场景。", "content": "[{'step': 1, 'action': '明确分析目标和核心问题', 'output': '清晰定义报告的核心关注点(如资产定价的不确定性、市场回调的原因等),并确定关键结论的呈现方式。', 'completion_criteria': '核心问题被明确定义,且能够直接指导后续章节结构设计。', 'common_issues': '目标过于宽泛或模糊,导致分析缺乏聚焦。', 'solutions': '通过团队讨论或客户反馈,将目标细化为可操作的具体问题。'}, {'step': 2, 'action': '设计报告的章节结构,确保逻辑递进', 'output': '形成清晰的章节划分,例如:市场行情回顾、重要事件分析、近期事件预告、风险提示等。', 'completion_criteria': '章节安排符合从宏观到微观、从现状到未来的逻辑顺序,且各部分之间的衔接自然。', 'common_issues': '章节内容重复或逻辑跳跃,影响阅读体验。', 'solutions': '在初稿完成后进行整体审阅,确保每个章节有明确的独立功能,同时与其他部分保持连贯性。'}, {'step': 3, 'action': '优先展示核心结论,突出关键信息', 'output': '在报告开头或每章节起始处,用简练的语言总结核心结论,并通过图表或数据支持。', 'completion_criteria': '读者能够在短时间内抓住报告的重点,无需通读全文即可理解主要观点。', 'common_issues': '核心结论被埋没在大量细节中,未能第一时间吸引注意力。', 'solutions': '使用醒目的标题、摘要段落或视觉化工具(如图表)强化核心结论的展示效果。'}, {'step': 4, 'action': '整合定量与定性信息,平衡历史与预测', 'output': '结合定量数据(如市值变化、交易额)和定性分析(如政策影响、市场情绪),并通过历史数据验证预测的合理性。', 'completion_criteria': '定量与定性信息分布均衡,历史数据与未来预测相互印证,避免单一维度的偏颇。', 'common_issues': '过度依赖某一种类型的信息,导致分析不够全面。', 'solutions': '制定信息收集清单,确保每种类型的数据都有对应的来源和分析方法。'}, {'step': 5, 'action': '逐步建立论证逻辑,层层递进支持观点', 'output': '从基础事实出发,通过数据分析、案例引用等方式,逐步推导出最终结论。', 'completion_criteria': '论证过程清晰且无明显逻辑漏洞,读者能够跟随分析路径理解结论。', 'common_issues': '论证链条断裂,导致结论缺乏说服力。', 'solutions': '在撰写过程中,反复检查每一步推导是否基于前一步的结论,确保逻辑严密性。'}, {'step': 6, 'action': '适时提出风险因素,增强报告可信度', 'output': '在分析接近尾声时,系统梳理潜在风险(如技术发展不及预期、利率波动等),并说明其对结论的影响。', 'completion_criteria': '风险提示全面且具体,能够帮助读者评估结论的可靠性。', 'common_issues': '风险提示过于笼统或遗漏关键风险点。', 'solutions': '参考类似案例或行业标准,确保覆盖所有可能的风险因素。'}, {'step': 7, 'action': '处理不确定性,提供多种可能性分析', 'output': '针对不确定因素(如非农数据波动、政策变化),列出不同情景下的潜在结果,并给出概率评估。', 'completion_criteria': '不确定性被合理纳入分析框架,读者能够理解各种可能性及其影响。', 'common_issues': '忽略不确定性,导致分析显得过于乐观或悲观。', 'solutions': '采用情景分析法,模拟不同假设条件下的结果,并附上相应的数据支持。'}, {'step': 8, 'action': '完善可视化表达,提升信息传递效率', 'output': '制作高质量图表(如涨跌幅对比表、ETF流入流出图),并确保图表与文字内容紧密相关。', 'completion_criteria': '图表直观易懂,能够有效辅助文字内容,提升整体阅读体验。', 'common_issues': '图表信息冗余或与正文脱节,降低信息传递效率。', 'solutions': '根据目标受众的需求优化图表设计,去除不必要的复杂元素。'}, {'step': 9, 'action': '校验与修订,确保报告质量', 'output': '完成初稿后进行全面校验,包括数据准确性、语言流畅性和格式一致性。', 'completion_criteria': '报告无重大错误,内容表述专业且符合行业规范。', 'common_issues': '校验不充分,导致出现低级错误或不符合客户需求的内容。', 'solutions': '引入多轮审核机制,由不同角色(如分析师、编辑、客户代表)分别审查。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 06:15:47", "modified_time": "2025-08-14 06:15:47", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "77e0cf2405eb40efa98f5eb524c13492", "experience_type": "text", "when_to_use": "适用于行业深度研究、投资标的分析、风险评估报告等需要全面综合信息并形成明确结论的金融分析任务。尤其适合涉及多业务线、多市场区域、涵盖历史复盘与未来展望的复杂企业或行业的综合性研究。", "content": "[{'step': 1, 'action': '明确分析目标和范围,定义核心问题和关键变量。', 'output': '清晰界定研究对象(如春风动力),包括其业务板块(全地形车、摩托车、电摩)以及各板块的核心驱动因素(销量、收入、利润、市场份额等)。', 'evaluation_criteria': '是否准确识别了所有关键业务板块及其对整体业绩的影响权重;是否列出了影响每个板块的核心变量(如关税、产品周期、市场需求等)。', 'common_issues': '可能忽略某些次要但重要的业务板块或变量。', 'solution': '通过初步数据梳理和行业调研,确保覆盖所有重要板块,并列出潜在影响因素清单。'}, {'step': 2, 'action': '收集并整理基础数据,包括定量和定性信息,构建完整的数据框架。', 'output': '按时间序列、区域分布、业务板块等维度整理历史数据(如销量、收入、毛利率等),同时收集行业背景、政策环境、竞争格局等定性信息。', 'evaluation_criteria': '数据是否完整且准确;是否涵盖了所有相关的时间段、区域和业务板块;是否有可靠的来源支持定性分析。', 'common_issues': '数据可能存在缺失或不一致;定性信息可能过于泛泛而缺乏具体支撑。', 'solution': '交叉验证数据来源,补充缺失数据;引用权威报告或行业专家访谈以增强定性分析的可信度。'}, {'step': 3, 'action': '进行历史复盘,分析过往表现的关键驱动因素和变化趋势。', 'output': '总结公司过去在不同阶段的表现(如销量增长、市占率提升、股价波动等),提炼出成功经验和失败教训。', 'evaluation_criteria': '是否能够清晰解释主要业绩波动的原因;是否能识别出关键转折点和驱动因素(如产品周期、外部扰动等)。', 'common_issues': '可能只关注表面现象而忽视深层次原因;可能遗漏某些重要时间段或事件。', 'solution': '结合定量与定性分析,深入挖掘每一个重大变化背后的原因;借助对比分析法(如对标竞品)强化结论的说服力。'}, {'step': 4, 'action': '拆解当前业务结构,分板块剖析现状及竞争力。', 'output': '针对每个业务板块(如全地形车、摩托车、电摩),分析其市场规模、竞争格局、产品矩阵、渠道布局等,总结各自的优势与劣势。', 'evaluation_criteria': '是否全面覆盖了所有业务板块;是否准确描述了各板块的竞争地位和成长潜力;是否提出了具体的改进建议。', 'common_issues': '可能无法平衡不同板块之间的信息密度;可能忽略了某些细分市场的特殊性。', 'solution': '根据各板块的重要性分配篇幅,确保重点突出;引入更多细分市场案例以丰富分析视角。'}, {'step': 5, 'action': '预测未来发展趋势,提出基于数据和逻辑的增长假设。', 'output': '基于历史复盘和现状分析,预测未来3-5年的市场规模、产品周期、技术升级、政策影响等,并量化这些假设对财务指标的影响。', 'evaluation_criteria': '预测是否建立在充分的数据支持之上;假设是否合理且具备可操作性;是否考虑了多种可能性(如乐观/中性/悲观情景)。', 'common_issues': '预测可能过于乐观或保守;未充分考虑不确定性。', 'solution': '采用敏感性分析方法测试不同情景下的结果;参考行业标杆企业的经验作为校准依据。'}, {'step': 6, 'action': '整合信息,形成核心结论和投资建议。', 'output': '总结各业务板块的发展前景,结合估值模型得出整体公司的投资评级(如买入、增持等),并提供具体的风险提示。', 'evaluation_criteria': '核心结论是否简洁明了且有数据支撑;投资建议是否符合逻辑推导;风险提示是否全面。', 'common_issues': '结论可能显得模糊或缺乏说服力;风险提示可能不够详尽。', 'solution': '用图表和关键数据直观呈现结论;列举所有已知和潜在的风险点,并说明应对策略。'}, {'step': 7, 'action': '优化报告结构,确保信息展示优先级合理,便于读者快速获取重点。', 'output': '将核心结论放在开头部分,随后依次展开业务分析、历史复盘、未来展望等内容,最后附上详细数据表格和图表。', 'evaluation_criteria': '章节结构是否条理清晰;信息展示是否遵循“由重到轻”的原则;图表是否有效辅助文字内容。', 'common_issues': '信息堆砌过多导致阅读困难;图表设计不够直观。', 'solution': '精简非必要信息,保留最核心的内容;优化图表设计,确保一目了然。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 06:16:52", "modified_time": "2025-08-14 06:16:52", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "e990b1814c9841ac9a9dfe66799e6bfa", "experience_type": "text", "when_to_use": "此规划框架适用于行业周报、季度分析报告或短期投资建议报告等任务,尤其是需要快速整合市场数据、行业动态和投资机会的场景。它适合用于对特定行业(如风电、光伏等)进行定期跟踪分析,并向投资者提供清晰的投资建议和风险提示。", "content": "[{'step': 1, 'action': '明确分析目标与范围', 'output': '确定报告的核心主题(如风电行业),并界定分析的时间范围(如本周)、覆盖的行业细分领域(如风电设备、原材料价格等)以及目标受众(如机构投资者)。', 'completion_criteria': '输出清晰的任务定义文档,包括时间范围、行业细分和目标受众。', 'common_issues': '范围过于宽泛或模糊,导致后续分析难以聚焦。', 'solution': '通过团队讨论或与客户沟通,确保目标和范围具体且可操作。'}, {'step': 2, 'action': '收集并整理基础数据', 'output': '从权威来源(如Wind、交易所、行业协会等)获取定量数据(如指数表现、原材料价格、招标容量)和定性信息(如政策动态、行业事件)。', 'completion_criteria': '完成数据表的初步整理,确保数据准确无误且结构化存储。', 'common_issues': '数据来源不一致或更新滞后,影响分析的可靠性。', 'solution': '建立标准化的数据采集流程,并优先选择权威、实时更新的数据库。'}, {'step': 3, 'action': '构建章节结构并分配内容权重', 'output': '设计报告的逻辑框架,按“行情回顾→数据分析→事件解读→投资建议→风险提示”顺序组织内容,突出核心结论(如本周风电设备指数上涨)。', 'completion_criteria': '完成目录和各章节的内容概要,确保逻辑清晰、重点突出。', 'common_issues': '章节安排松散或重点不突出,导致读者难以抓住关键信息。', 'solution': '在设计框架时,始终以目标受众的需求为导向,优先展示对决策最有价值的信息。'}, {'step': 4, 'action': '量化分析与趋势解读', 'output': '对定量数据进行深入分析(如指数涨跌幅、原材料价格波动),结合图表可视化展示,并用简明语言解释其背后的趋势和意义。', 'completion_criteria': '生成包含数据图表和文字说明的分析段落,确保数据与结论一致。', 'common_issues': '数据分析缺乏深度或与结论脱节,无法支撑观点。', 'solution': '在分析中增加对比维度(如同比、环比)和背景信息,强化论证逻辑。'}, {'step': 5, 'action': '定性分析与事件解读', 'output': '梳理行业动态(如政策变化、重大事件),分析其对行业的短期和长期影响,并结合历史案例验证观点。', 'completion_criteria': '完成事件分析段落,确保观点有事实依据且逻辑连贯。', 'common_issues': '事件解读流于表面,未能揭示深层次影响。', 'solution': '引入专家访谈或参考类似历史事件的分析,提升解读深度。'}, {'step': 6, 'action': '提出投资建议', 'output': '基于前文分析,提炼出具体的投资方向(如海风板块、海外拿单能力强的企业),并给出明确的操作建议。', 'completion_criteria': '投资建议部分清晰简洁,逻辑严密且具有可操作性。', 'common_issues': '建议过于笼统或缺乏数据支持,难以指导实际操作。', 'solution': '结合具体公司或细分领域,提供量化的支持数据(如市场份额、估值水平)。'}, {'step': 7, 'action': '识别并披露风险因素', 'output': '列出可能影响投资决策的风险点(如原材料价格波动、项目开工延迟),并评估其潜在影响。', 'completion_criteria': '风险提示部分全面且具体,能够帮助投资者规避潜在问题。', 'common_issues': '风险因素遗漏或描述过于简单,未能引起重视。', 'solution': '采用头脑风暴法,尽可能全面识别风险,并引用相关案例增强说服力。'}, {'step': 8, 'action': '校验与优化报告', 'output': '检查报告的逻辑一致性、数据准确性以及语言表达的专业性,确保最终版本符合发布标准。', 'completion_criteria': '报告经过多轮审核,无明显错误或遗漏。', 'common_issues': '校验过程流于形式,未能发现潜在问题。', 'solution': '建立多人交叉审核机制,并使用自动化工具辅助检查数据和格式。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 06:19:07", "modified_time": "2025-08-14 06:19:07", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "b62724bcc70c41da989087f9bd1a7be9", "experience_type": "text", "when_to_use": "适用于行业深度研究、投资标的分析以及产业链跟踪报告的制作,尤其是涉及新兴技术领域(如机器人、人工智能等)的复杂分析任务。这类任务需要整合定量与定性数据,结合市场动态和政策导向,提供综合性投资建议。", "content": "[{'step': 1, 'action': '明确目标与范围', 'output': '确定分析的核心主题(如具身智能机器人产业链),定义覆盖的时间段、地理区域及关键指标(如市场规模、技术进展、政策支持等)。', 'completion_criteria': '目标清晰,范围界定合理;所有团队成员对分析方向达成一致。', 'common_issues': '范围过于宽泛或模糊,导致后续信息收集和分析难以聚焦。', 'solutions': '通过初步讨论和文献调研,明确研究边界,并列出需要回答的关键问题清单。'}, {'step': 2, 'action': '构建指数与量化框架', 'output': '设计并计算行业指数(如银河证券具身智能指数),用于跟踪市场表现;同时搭建估值、成交量、换手率等多维度的数据框架。', 'completion_criteria': '指数逻辑严谨,能够有效反映行业动态;数据框架全面且可操作性强。', 'common_issues': '数据来源不统一或更新滞后,影响指数准确性和时效性。', 'solutions': '确保数据来自权威机构(如iFind),并建立自动化更新机制以减少人工误差。'}, {'step': 3, 'action': '梳理近期事件与趋势', 'output': '整理行业重要事件(如IDC预测、企业发布新技术产品等)、政策动态及市场热点,形成结构化的时间线。', 'completion_criteria': '事件分类清晰,时间线完整;每个事件均附有可靠来源链接。', 'common_issues': '遗漏关键事件或未能突出其战略意义。', 'solutions': '采用多渠道信息采集(新闻、公司公告、行业会议纪要等),并对事件进行优先级排序。'}, {'step': 4, 'action': '展开观点论证', 'output': '基于前期数据分析和事件梳理,提炼出核心观点(如主机厂量产规划、应用场景落地潜力等),并通过定量与定性相结合的方式逐步验证。', 'completion_criteria': '论证层次分明,每项观点都有充分证据支撑;结论具有前瞻性但不过度推测。', 'common_issues': '论证过程缺乏递进关系,或依赖单一类型数据导致说服力不足。', 'solutions': '采用“现状描述→驱动因素分析→未来展望”的三段式论证路径,平衡使用历史数据、预测模型和专家意见。'}, {'step': 5, 'action': '风险提示与不确定性管理', 'output': '识别潜在风险因素(如关键技术突破不及预期、下游需求增长缓慢等),说明可能发生的情景及其影响。', 'completion_criteria': '风险提示具体且贴近实际;针对不同情景提出应对策略。', 'common_issues': '风险描述过于笼统,未考虑多种可能性。', 'solutions': '引入情景分析法(如乐观/中性/悲观假设),并结合敏感性测试评估关键变量变化的影响。'}, {'step': 6, 'action': '推荐标的与投资建议', 'output': '根据上述分析,筛选出值得重点关注的企业或细分领域,给出明确的投资建议(如机械组、汽车组的具体标的列表)。', 'completion_criteria': '推荐标的逻辑清晰,与前文分析紧密关联;投资建议具备可执行性。', 'common_issues': '推荐标的与分析脱节,或缺乏足够的差异化视角。', 'solutions': '将推荐标的与核心观点直接挂钩,强调其在产业链中的独特优势或边际变化。'}, {'step': 7, 'action': '撰写报告与图表优化', 'output': '按照固定格式组织内容(如目录、正文、图表、分析师简介等),确保语言简洁流畅,排版美观易读。', 'completion_criteria': '报告逻辑连贯,章节安排合理;图表直观且标注规范。', 'common_issues': '内容冗长或重点不突出,图表质量参差不齐。', 'solutions': '遵循“先总后分”原则,优先呈现核心结论;图表尽量标准化,并添加简明注释。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 06:20:44", "modified_time": "2025-08-14 06:20:44", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "df6634f9809f43b7b5b697e4bf50ed2d", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及宏观经济驱动型资产价格预测报告。尤其适合需要结合定量数据(如就业数据、货币政策)与定性分析(如政策风险、市场情绪)的金融任务。", "content": "[{'step': 1, 'action': '明确核心主题和目标受众', 'output': '确定分析的核心主题(如金价趋势)、关键驱动因素(如非农数据、货币政策)以及目标受众(如机构投资者、行业分析师)。', 'completion_criteria': '核心主题清晰,目标受众明确,能够用一句话概括分析目的(例如:‘分析非农数据下修对金价的影响’)。', 'common_issues': '主题过于宽泛或模糊,未能聚焦于特定驱动因素。', 'solutions': '通过头脑风暴列出所有可能的主题点,筛选出最具影响力的因素,并优先考虑目标受众最关心的问题。'}, {'step': 2, 'action': '收集并整理相关数据和信息', 'output': '形成一个包含定量数据(如就业数据、利率变化)和定性信息(如政策声明、市场情绪)的数据集,并初步分类为历史数据、当前事件和未来预测。', 'completion_criteria': '数据来源可靠且全面,涵盖至少三种不同类型的信息(如政府统计数据、市场评论、学术研究),并按时间维度分类。', 'common_issues': '数据不完整或来源单一,导致分析缺乏说服力。', 'solutions': '建立多渠道数据采集流程,包括官方统计、第三方数据库和专家访谈,确保信息多样性。'}, {'step': 3, 'action': '构建章节结构并安排信息展示优先级', 'output': '设计报告的章节结构,按照‘背景-核心驱动因素-影响分析-结论与建议’的逻辑顺序组织内容,确保核心结论在前半部分突出呈现。', 'completion_criteria': '章节结构合理,信息展示优先级明确,核心结论能在前两页被快速捕捉。', 'common_issues': '章节安排混乱,核心结论被埋没在细节中。', 'solutions': '采用‘倒金字塔’结构,先呈现最重要的结论,再逐步展开支持性论据。'}, {'step': 4, 'action': '逐层递进论证观点', 'output': '使用‘数据-逻辑-推论’的论证路径,从定量数据出发,通过定性分析得出具体观点,并以历史案例或类比强化说服力。', 'completion_criteria': '每个主要观点都有明确的数据支持和逻辑推导过程,且能通过历史案例验证。', 'common_issues': '论证链条断裂,观点缺乏数据支持或逻辑跳跃。', 'solutions': '为每个观点列出支持性数据和逻辑链条,确保每一步推导都清晰且有据可依。'}, {'step': 5, 'action': '评估风险因素并提出应对策略', 'output': '在分析过程中适时引入风险因素(如政策不确定性、市场波动),并通过情景分析或敏感性测试探讨多种可能性。', 'completion_criteria': '风险因素全面覆盖,应对策略具体可行,且与核心结论紧密关联。', 'common_issues': '风险因素提及过晚或过于笼统,未能提供实质性解决方案。', 'solutions': '在分析早期阶段识别潜在风险,并将其作为核心变量纳入模型,同时提出具体的应对措施。'}, {'step': 6, 'action': '平衡定量与定性信息分布', 'output': '确保定量数据(如就业人数变化)和定性分析(如政策解读)的比例合理,避免过度依赖某一类信息。', 'completion_criteria': '定量与定性信息分布均衡,两者互为补充,共同支撑核心结论。', 'common_issues': '定量数据过多导致分析枯燥,或定性分析过多导致缺乏客观依据。', 'solutions': '制定信息分布比例计划,例如60%定量+40%定性,并根据实际情况动态调整。'}, {'step': 7, 'action': '总结核心结论并提出投资建议', 'output': '提炼出不超过三条核心结论,并基于这些结论提出具体的投资建议(如关注黄金板块相关标的)。', 'completion_criteria': '核心结论简洁明了,投资建议具有操作性且与分析内容一致。', 'common_issues': '结论冗长或建议模糊,无法直接指导投资决策。', 'solutions': '通过内部评审机制确保结论和建议的清晰度,并邀请外部专家进行反馈优化。'}, {'step': 8, 'action': '添加附录和免责声明', 'output': '补充技术细节(如数据来源、计算方法)和法律声明(如免责条款),确保报告的专业性和合规性。', 'completion_criteria': '附录内容详实,免责声明符合监管要求,无遗漏重要法律信息。', 'common_issues': '附录过于简略或免责声明不充分,存在合规风险。', 'solutions': '参考行业标准模板,确保附录和免责声明的完整性,并由法务团队审核。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 06:21:48", "modified_time": "2025-08-14 06:21:48", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "ae567ed41afc46a78e4957ed368803a9", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析、风险评估报告等金融分析任务,尤其适合需要结合定量与定性数据并提出明确投资建议的场景。", "content": "[{'step': 1, 'action': '明确分析目标和范围', 'output': '定义清晰的研究主题(如食品饮料行业的投资机会),确定覆盖的核心板块(白酒、乳制品、软饮料等)及其关键驱动因素。', 'how_to_judge_completion': '是否明确了具体的研究问题,并列出需要覆盖的关键领域及子板块。', 'common_problems': '目标过于宽泛或模糊,导致后续分析难以聚焦。', 'solutions': '通过初步调研和团队讨论,确保研究问题具体化,并形成明确的分析大纲。'}, {'step': 2, 'action': '收集和整理基础数据', 'output': '获取行业指数表现、个股涨跌幅、估值水平、政策动态、成本指标等定量数据,以及市场趋势、竞争格局、消费者行为等定性信息。', 'how_to_judge_completion': '数据是否全面且来源可靠,是否涵盖历史、当前和预测数据。', 'common_problems': '数据不完整或缺乏时效性,影响分析准确性。', 'solutions': '建立标准化数据采集流程,优先使用权威数据库和公开渠道,定期更新数据。'}, {'step': 3, 'action': '构建章节结构并安排信息优先级', 'output': '设计报告结构,包括行情回顾、板块分析、观点更新、投资建议和风险提示,确保核心结论在前,次要细节在后。', 'how_to_judge_completion': '章节逻辑是否清晰,信息展示是否符合“由总到分”原则,核心结论是否突出。', 'common_problems': '章节间逻辑混乱,重要信息被次要内容掩盖。', 'solutions': '遵循“结论先行”原则,先呈现关键发现,再逐步展开支持性论据。'}, {'step': 4, 'action': '分析各子板块的现状与趋势', 'output': '针对每个子板块(如白酒、乳制品、软饮料),结合定量与定性数据,分析其短期表现、长期趋势及驱动因素。', 'how_to_judge_completion': '是否对每个子板块进行了独立且深入的分析,是否有足够的数据和案例支撑观点。', 'common_problems': '分析流于表面,缺乏实质性的洞察或数据支持。', 'solutions': '引入行业专家访谈、企业财报解读等多维度信息,增强分析深度。'}, {'step': 5, 'action': '识别关键驱动因素和潜在风险', 'output': '总结影响行业发展的关键因素(如政策、成本变化、消费需求),并详细说明可能的风险点(如需求不及预期、原材料价格上涨)。', 'how_to_judge_completion': '是否全面识别了正向和负向驱动因素,风险提示是否具体且具有操作性。', 'common_problems': '忽视负面因素或低估不确定性带来的影响。', 'solutions': '采用情景分析法,模拟不同假设下的结果,提高对不确定性的应对能力。'}, {'step': 6, 'action': '提出投资建议', 'output': '基于前述分析,推荐具体的标的(如贵州茅台、伊利股份)及投资策略(如关注高线光瓶酒赛道)。', 'how_to_judge_completion': '建议是否明确、可行,是否与前面的分析逻辑一致。', 'common_problems': '建议与分析脱节,缺乏实际指导意义。', 'solutions': '确保每条建议都有充分的数据和逻辑支撑,避免空洞表述。'}, {'step': 7, 'action': '制作图表和可视化辅助材料', 'output': '生成直观的图表(如PE-TTM估值图、批价走势、产量增速图),帮助读者快速理解复杂信息。', 'how_to_judge_completion': '图表是否简洁明了,是否有效传达了核心信息。', 'common_problems': '图表冗余或信息过载,分散读者注意力。', 'solutions': '遵循“少即是多”原则,只保留最能支持核心观点的图表。'}, {'step': 8, 'action': '撰写最终报告并进行内部审核', 'output': '整合所有内容,形成完整的研究报告,并进行多轮校对和审核,确保语言规范、逻辑严谨。', 'how_to_judge_completion': '报告是否无明显错误,逻辑是否流畅,是否符合专业标准。', 'common_problems': '格式不统一或语言表达不够精准。', 'solutions': '制定统一的写作模板,邀请同事交叉审阅,减少疏漏。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 06:23:12", "modified_time": "2025-08-14 06:23:12", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "7f419179f58b479a9d5fe35ef7285b84", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究、投资标的分析以及基金重仓配置的跟踪与评估。尤其适合需要结合定量数据(如基金持仓比例、估值变化)和定性分析(如市场情绪、政策风险)的任务,目标是为投资决策提供清晰的方向。", "content": "[{'step': 1, 'action': '明确分析目标并定义关键问题', 'output': '清晰的研究目标及核心问题清单,例如:传媒行业的资金活跃度、基金重仓配置趋势、子板块表现等。', 'criteria_for_success': '目标应具体且可量化,问题清单需覆盖行业现状、趋势、风险点及投资机会。', 'common_issues': '目标过于宽泛或模糊,导致后续分析缺乏聚焦。', 'solutions': '通过团队讨论或客户沟通明确优先级,确保研究目标与客户需求一致。'}, {'step': 2, 'action': '收集和整理相关数据', 'output': '包含历史数据、当前行情、基金持仓比例、估值水平等在内的综合数据集,以表格或图表形式呈现。', 'criteria_for_success': '数据来源可靠、完整,时间跨度足够支持趋势分析,重点数据可视化处理以便于解读。', 'common_issues': '数据缺失或不一致,影响分析结论的可信度。', 'solutions': '提前确认数据源的权威性,并在必要时进行多源交叉验证;对缺失数据采用合理假设填补。'}, {'step': 3, 'action': '构建章节结构并组织信息优先级', 'output': '章节安排逻辑清晰,包括行业概况、基金重仓配置分析、子板块对比、投资建议及风险提示。', 'criteria_for_success': '核心结论(如低配修复、游戏板块超配)突出展示,次要信息(如个股行情表现)作为补充支撑。', 'common_issues': '章节之间逻辑混乱,信息堆砌而无层次感。', 'solutions': '遵循“总-分-总”结构,先概述整体趋势,再深入细节,最后总结投资建议。'}, {'step': 4, 'action': '展开定量与定性分析', 'output': '基于数据的趋势分析(如估值震荡上升)、持仓比例变动(如游戏板块超配提升),以及市场行为解读(如抱团现象加剧)。', 'criteria_for_success': '定量分析精确,定性判断有据可依,两者相互印证。', 'common_issues': '过度依赖单一维度分析,忽略其他重要因素。', 'solutions': '结合历史数据与当下市场热点,定期复盘调整分析权重。'}, {'step': 5, 'action': '识别并处理不确定性因素', 'output': '针对监管政策、新游延期、技术发展等潜在风险提出应对策略。', 'criteria_for_success': '风险因素全面且时机恰当,在核心结论后单独列出,避免削弱正面观点。', 'common_issues': '风险提示流于形式,未能真正揭示可能影响投资的关键变量。', 'solutions': '参考同行案例及过往经验,系统梳理高概率风险点,并给出具体规避方法。'}, {'step': 6, 'action': '提炼核心结论并形成投资建议', 'output': '明确的投资建议(如关注游戏版号储备丰富的企业)及评级意见(如“强于大市”)。', 'criteria_for_success': '建议具有操作性,与前文分析紧密呼应,能够直接指导投资决策。', 'common_issues': '结论泛化,无法落地执行。', 'solutions': '从投资者视角出发,确保每条建议都具备实际意义,同时附带实施条件说明。'}, {'step': 7, 'action': '审阅与优化报告表达', 'output': '最终版本语言简洁、逻辑连贯,图表布局合理且注释详尽。', 'criteria_for_success': '非专业读者也能快速理解主要内容,所有术语均附有解释。', 'common_issues': '表述冗长或晦涩难懂,图表标注不清。', 'solutions': '邀请非专业人士试读反馈,根据意见修改措辞和排版。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 06:24:31", "modified_time": "2025-08-14 06:24:31", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "880ce0bff8a04329b08e727097d78464", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析、风险评估报告等金融分析任务,尤其是需要结合定量与定性数据并提出前瞻性预测的场景。", "content": "[{'step': 1, 'action': '明确分析目标和核心问题', 'output': '清晰定义报告的核心关注点(如市场趋势、资本化率变化、投资策略建议)。', 'completion_criteria': '能够用一句话概括报告的核心目标,并确保所有后续章节都围绕该目标展开。', 'common_issues': '目标过于宽泛或模糊,导致后续章节偏离主题。', 'solution': '在团队内部进行初步讨论,列出所有可能的研究方向,然后通过投票或优先级排序确定最核心的问题。'}, {'step': 2, 'action': '构建章节结构并分配信息权重', 'output': '制定报告的章节框架,包括市场回顾、数据分析、预测更新、投资策略建议等模块,并明确每个模块的重点内容。', 'completion_criteria': '章节结构逻辑清晰,信息展示优先级合理,核心结论能够在前三分之一篇幅中突出呈现。', 'common_issues': '章节安排冗长或重点不突出,导致读者难以快速抓住关键信息。', 'solution': '使用“倒金字塔”原则,将最重要的结论放在最前面,次要信息逐步展开;同时确保每个章节都有明确的小标题和总结段落。'}, {'step': 3, 'action': '收集和整理定量与定性数据', 'output': '整理历史数据(如交易额、资本化率)、当前市场动态(如政策变化、投资者行为)以及未来预测(如资本化率走势、投资机会)。', 'completion_criteria': '数据来源可靠且标注清晰,定量与定性信息平衡分布,能够支持后续的论证逻辑。', 'common_issues': '数据不足或来源不可靠,导致分析缺乏说服力。', 'solution': '优先选择权威机构发布的数据(如央行、行业协会),并在必要时通过专家访谈补充定性信息。'}, {'step': 4, 'action': '建立论证逻辑并逐层递进', 'output': '从宏观到微观、从历史到未来,层层递进建立观点。例如,先分析市场整体趋势,再聚焦具体资产类别,最后提出具体投资建议。', 'completion_criteria': '论证路径清晰,观点之间的逻辑关系紧密,能够引导读者自然接受最终结论。', 'common_issues': '论证跳跃性过大,导致观点之间缺乏连贯性。', 'solution': '在撰写过程中使用“过渡句”或“小结段落”,帮助读者理解不同部分之间的逻辑联系。'}, {'step': 5, 'action': '引入风险因素并评估不确定性', 'output': '在适当时机(通常是在数据分析后、预测前)引入风险因素,并通过情景分析或多可能性评估的方式处理不确定性。', 'completion_criteria': '风险因素的提出既不过于突兀也不被忽视,能够为后续预测提供合理的假设基础。', 'common_issues': '风险因素被简单罗列而未深入分析,或过于强调负面因素导致结论悲观。', 'solution': '采用“可能性矩阵”或“敏感性分析”工具,量化不同风险对结果的影响程度。'}, {'step': 6, 'action': '提出具体的投资策略和行动建议', 'output': '基于前述分析,提出针对不同类型投资者的具体策略建议(如关注消费领域资产、布局一线城市核心物业等)。', 'completion_criteria': '建议具有可操作性和针对性,能够直接指导投资者决策。', 'common_issues': '建议过于笼统或脱离实际,无法落地实施。', 'solution': '结合具体案例或成功经验说明建议的实际应用价值,并附上相关数据支持。'}, {'step': 7, 'action': '校对和完善报告格式', 'output': '检查报告的语言表达、图表设计和排版是否专业,确保信息传递直观且易于理解。', 'completion_criteria': '报告无明显语法错误,图表清晰且标注完整,整体风格统一。', 'common_issues': '图表信息过载或排版混乱,影响阅读体验。', 'solution': '邀请非专业背景人员试读报告,收集反馈并优化视觉呈现效果。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 06:26:13", "modified_time": "2025-08-14 06:26:13", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "7981cf691a574f4d999dc0c71c48aae3", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及资本市场相关的前瞻性报告撰写。尤其适合需要结合定量与定性信息、历史表现与未来预测,同时需对多种不确定性进行权衡和风险提示的金融分析任务。", "content": "[{'step': 1, 'action': '明确分析目标与核心结论', 'output': '确定本次分析的核心观点(如:细分板块景气度展望、重点推荐标的等),并形成初步结论框架。', 'evaluation': '是否能清晰回答‘本次分析的核心问题是什么’以及‘最终希望传递给读者的关键信息是什么’。', 'common_issues': '目标不聚焦或过于宽泛,导致后续章节内容松散。', 'solutions': '通过团队讨论或头脑风暴,确保核心观点具有高度相关性和可操作性。'}, {'step': 2, 'action': '设计章节结构与信息优先级', 'output': '根据分析目标,将内容分为几个主要部分(如:细分板块跟踪、行业数据、市场行情、风险提示等),并明确各部分的信息展示优先级。', 'evaluation': '章节安排是否逻辑清晰,是否能有效引导读者从整体到细节逐步深入理解。', 'common_issues': '章节间逻辑关联性弱,或信息分布不平衡(如过多关注历史数据而忽视预测)。', 'solutions': '采用‘总-分-总’结构,先概述整体趋势,再深入细分领域,最后总结核心结论与投资建议。'}, {'step': 3, 'action': '收集并整理数据与事实依据', 'output': '针对每个细分板块,收集最新的行业动态、公司财报、政策文件及宏观经济数据,并将其分类归档。', 'evaluation': '数据是否全面、准确且来源可靠,能否支持核心观点的论证。', 'common_issues': '数据陈旧或来源单一,缺乏代表性。', 'solutions': '优先使用权威数据库(如Wind、国家统计局)和一手资料,并标注数据时效性。'}, {'step': 4, 'action': '构建论证逻辑与观点递进路径', 'output': '在每个细分板块中,按照‘现状描述→驱动因素分析→未来展望’的逻辑展开论述,同时注重定量与定性信息的平衡。', 'evaluation': '论证是否层层递进,是否能够自然引出核心结论。', 'common_issues': '论证跳跃性强,或忽略关键假设前提。', 'solutions': '为每个细分板块绘制逻辑图,确保每一步推导都有据可依。'}, {'step': 5, 'action': '处理不确定性和风险因素', 'output': '识别潜在风险点(如自然灾害、消费力恢复不及预期、宏观经济下行等),并在适当位置以独立章节或段落形式提出。', 'evaluation': '风险提示是否全面且具体,是否会影响核心结论的可信度。', 'common_issues': '风险因素被弱化或遗漏,导致报告显得过于乐观。', 'solutions': '在报告末尾设置专门的风险提示章节,并逐一列举可能影响结论的负面因素。'}, {'step': 6, 'action': '提炼核心结论与投资建议', 'output': '基于前述分析,提炼出明确的投资建议(如:推荐标的、关注方向等),并用简洁语言突出显示。', 'evaluation': '核心结论是否简明扼要且易于执行,是否能直接指导投资决策。', 'common_issues': '结论模糊或泛泛而谈,缺乏实际操作性。', 'solutions': '用表格或图表形式呈现重点覆盖股票的盈利预测与估值,直观展现推荐理由。'}, {'step': 7, 'action': '校验与优化表达方式', 'output': '检查报告的语言表述是否专业、流畅,图表是否清晰美观,格式是否统一规范。', 'evaluation': '报告是否具备专业性与易读性,是否能在短时间内抓住读者注意力。', 'common_issues': '语言冗长或术语堆砌,图表信息过载。', 'solutions': '邀请同行审阅反馈,优化文字表达;精简图表内容,仅保留关键信息。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 06:27:31", "modified_time": "2025-08-14 06:27:31", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "01f9b0e444294f97a03e8b465fb44796", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及风险评估报告等金融分析任务,尤其是需要结合市场数据、政策动态和产业链信息进行综合判断的场景。", "content": "[{'step': 1, 'action': '明确分析目标与受众需求', 'output': '确定报告的核心主题(如光伏行业的市场表现及投资建议),并根据受众(如投资者或内部决策者)的需求设定优先级。', 'criteria_for_completion': '核心主题清晰且与受众需求高度匹配,能够回答关键问题(如市场趋势、投资机会、风险因素)。', 'common_issues': '目标过于宽泛或偏离受众需求。', 'solutions': '通过初步调研和与利益相关者的沟通,明确核心问题和受众关注点。'}, {'step': 2, 'action': '收集与整理基础数据', 'output': '从权威来源(如Wind、Solarzoom、工信部公告等)获取定量数据(如价格走势、市场份额)和定性信息(如政策动态、行业新闻)。', 'criteria_for_completion': '数据覆盖全面,来源可靠,且经过初步清洗和分类。', 'common_issues': '数据不完整或存在重复信息。', 'solutions': '建立数据收集清单,确保覆盖所有关键维度,并使用标准化模板记录数据来源和处理过程。'}, {'step': 3, 'action': '组织章节结构并分配内容权重', 'output': '按照逻辑顺序安排章节(如市场表现回顾→产业链分析→行业动态→风险提示→投资建议),优先展示核心结论和关键数据。', 'criteria_for_completion': '章节结构清晰,信息分布合理,核心结论突出且易于理解。', 'common_issues': '章节间逻辑不连贯或信息堆砌。', 'solutions': '使用思维导图梳理各章节之间的逻辑关系,确保每部分内容服务于整体目标。'}, {'step': 4, 'action': '构建论证逻辑并层层递进', 'output': '从历史数据出发,结合当前市场表现和政策动态,推导出未来趋势预测,并用图表和案例支持观点。', 'criteria_for_completion': '论证路径清晰,观点有数据支撑,且能有效回应潜在质疑。', 'common_issues': '论证缺乏深度或忽略反面观点。', 'solutions': '在每个关键论点后加入“假设检验”环节,考虑不同情景下的可能性,并补充相应数据或案例。'}, {'step': 5, 'action': '平衡定量与定性信息', 'output': '在定量分析(如价格走势、装机容量)的基础上,加入定性解读(如政策影响、技术突破),形成综合性结论。', 'criteria_for_completion': '定量与定性信息比例适当,能够互相补充说明。', 'common_issues': '过度依赖某一类信息导致分析失衡。', 'solutions': '制定信息配比规则,例如60%定量+40%定性,确保两者有机结合。'}, {'step': 6, 'action': '提出风险因素并融入分析框架', 'output': '在分析过程中适时引入风险提示(如原材料价格波动、政策变化),并通过情景分析量化潜在影响。', 'criteria_for_completion': '风险因素被充分讨论,且与整体分析无缝衔接。', 'common_issues': '风险提示过于笼统或滞后。', 'solutions': '将风险提示嵌入各章节相关内容中,而非单独列出,增强关联性。'}, {'step': 7, 'action': '总结核心结论并提供具体建议', 'output': '提炼全文核心观点,给出明确的投资建议(如关注N型产品占比高的企业),并附上实施路径。', 'criteria_for_completion': '结论简明扼要,建议可操作性强。', 'common_issues': '结论模糊或建议缺乏针对性。', 'solutions': '采用“结论-行动-预期结果”的三段式表述,确保建议清晰可行。'}, {'step': 8, 'action': '校对与优化呈现形式', 'output': '检查语言表达是否准确,图表是否直观易懂,格式是否统一。', 'criteria_for_completion': '报告无明显错误,视觉效果专业,便于阅读。', 'common_issues': '排版混乱或图表信息冗余。', 'solutions': '邀请同事进行交叉校对,重点关注图表标题、单位标注等细节。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 06:28:43", "modified_time": "2025-08-14 06:28:43", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "58c8b71826cf4deba3de6924c996eaec", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究、投资标的分析以及大宗商品市场趋势预测等任务,尤其是需要结合宏观政策、供需结构、成本收益分析与价格波动的复杂金融分析场景。", "content": "[{'step': 1, 'action': '明确研究目标和范围,定义核心问题', 'output': '清晰界定研究主题(如澳大利亚煤炭产业),确定分析维度(如政策影响、供需变化、成本结构等)。', 'criteria_for_completion': '目标是否具体且可量化,范围是否覆盖所有关键变量。', 'common_issues': '研究范围过于宽泛或模糊,导致后续分析缺乏针对性。', 'solutions': '通过初步文献调研和行业数据筛选,聚焦核心议题。'}, {'step': 2, 'action': '收集并整理相关数据,构建基础信息框架', 'output': '形成包含宏观经济数据、行业统计数据、企业财务指标及政策文件的完整数据库。', 'criteria_for_completion': '数据来源可靠且全面,能够支持后续章节展开分析。', 'common_issues': '数据缺失或不一致,可能影响结论的准确性。', 'solutions': '优先选择权威机构发布的公开数据,并对异常值进行交叉验证。'}, {'step': 3, 'action': '设计章节结构,按照逻辑递进安排内容顺序', 'output': '生成目录草稿,包括宏观背景、供需动态、成本与盈利分析、投资建议等模块。', 'criteria_for_completion': '章节之间逻辑连贯,逐步深入,便于读者理解。', 'common_issues': '章节间存在重复或脱节现象,削弱整体流畅性。', 'solutions': '在撰写前绘制思维导图,确保每个部分有独特贡献。'}, {'step': 4, 'action': '分析历史趋势与当前状况,突出关键驱动因素', 'output': '用图表展示过去20年的行业演变轨迹,结合定性和定量分析解释主要变化原因。', 'criteria_for_completion': '趋势描述准确,驱动因素分析透彻,能反映行业本质特征。', 'common_issues': '忽略次要但重要的细节,导致分析片面化。', 'solutions': '引入多视角对比方法,例如不同国家、不同时间段的横向比较。'}, {'step': 5, 'action': '评估未来风险与不确定性,提出情景假设', 'output': '识别潜在风险点(如政策调整、市场价格波动),并通过敏感性分析探讨其影响。', 'criteria_for_completion': '风险讨论具有前瞻性,情景假设合理且多样化。', 'common_issues': '忽视长期趋势下的短期扰动,导致预测过于乐观或悲观。', 'solutions': '结合专家访谈和模拟模型提升预测的科学性。'}, {'step': 6, 'action': '整合研究成果,提炼核心结论与投资建议', 'output': '总结行业现状与前景,推荐具体投资标的并附估值表。', 'criteria_for_completion': '结论简洁明了,投资建议具备操作性。', 'common_issues': '结论与前面分析脱节,显得突兀或缺乏依据。', 'solutions': '回溯前文论证过程,确保每条建议都有充分支撑。'}, {'step': 7, 'action': '审阅与优化报告,确保语言表达精准、格式规范', 'output': '最终版研究报告,包括正文、图表、参考文献等内容。', 'criteria_for_completion': '报告无明显语法错误,图表美观易读,符合专业标准。', 'common_issues': '排版混乱或术语使用不当,降低报告可信度。', 'solutions': '邀请同行评审,利用工具检查格式一致性。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 06:29:45", "modified_time": "2025-08-14 06:29:45", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "6d0d5d94e73f407d9aee375092e0dbb1", "experience_type": "text", "when_to_use": "适用于行业深度研究、投资标的分析、风险评估报告等需要结合定量与定性信息,且需提出明确投资建议的金融分析任务。", "content": "[{'step': 1, 'action': '明确核心观点和投资主题', 'output': '提炼出一个清晰的核心观点(如‘半导体维持高景气,看好模拟及存储左侧布局良机’),并围绕该主题构建分析框架。', 'completion_criteria': '核心观点具有明确的投资导向,并能贯穿整个报告;框架逻辑清晰,涵盖关键子领域(如半导体、消费电子、设备材料等)。', 'common_issues': '核心观点模糊或缺乏数据支持,导致后续分析偏离主题。', 'solutions': '通过团队讨论和初步数据分析验证核心观点的合理性,并确保与市场趋势一致。'}, {'step': 2, 'action': '组织章节结构以突出优先级', 'output': '按照‘宏观背景→行业动态→细分领域分析→重点公司推荐’的顺序安排章节,确保信息展示从全局到局部逐步深入。', 'completion_criteria': '每章内容紧密围绕核心观点展开,信息分布合理,历史数据、当前状态和未来预测有机结合。', 'common_issues': '章节间逻辑不连贯,或过多细节掩盖了核心结论。', 'solutions': '提前规划章节大纲,限制每个部分的篇幅比例,避免过度堆砌数据。'}, {'step': 3, 'action': '整合定量与定性信息,形成论证链条', 'output': '使用行业数据(如硅晶圆出货量、资本开支增长)、公司财报、政策文件等定量信息,结合专家访谈、新闻事件等定性信息,逐层递进地支撑核心观点。', 'completion_criteria': '论证路径清晰,数据来源可靠,定性信息补充了定量分析的不足。', 'common_issues': '数据陈旧或片面,定性信息主观性强,削弱了论证力度。', 'solutions': '优先选择权威机构发布的最新数据,并在引用定性信息时注明具体来源和背景。'}, {'step': 4, 'action': '引入风险因素并进行情景假设', 'output': '在阐述正面观点的同时,识别潜在风险(如下游需求不及预期、地缘政治影响),并通过情景分析探讨多种可能性。', 'completion_criteria': '风险因素全面且有依据,情景假设合理,能够帮助投资者理解不确定性。', 'common_issues': '忽视负面因素或将风险描述得过于笼统,导致分析失衡。', 'solutions': '建立标准化的风险检查清单,确保覆盖主要变量(如宏观经济、政策变化、技术迭代)。'}, {'step': 5, 'action': '制定重点投资组合并附详细推荐理由', 'output': '列出具体的投资标的(如中芯国际、华虹半导体),并提供基于估值、盈利预测、行业地位等多维度的支持证据。', 'completion_criteria': '每只标的都有明确的买入逻辑,且与核心观点直接相关;估值模型透明,数据可追溯。', 'common_issues': '投资标的推荐缺乏量化依据,或与核心观点脱节。', 'solutions': '采用统一的估值方法(如PE、PS)对标的进行横向比较,并定期更新财务预测。'}, {'step': 6, 'action': '制作图表和可视化工具增强表达效果', 'output': '利用折线图、柱状图、表格等形式呈现关键数据(如股价走势、PE分位点),直观展示行业趋势和个股表现。', 'completion_criteria': '所有图表均配有简明注释,数据准确无误,视觉设计简洁专业。', 'common_issues': '图表复杂难懂,或数据标注不清晰。', 'solutions': '遵循‘一图一意’原则,只保留最核心的数据点,并用颜色区分重点信息。'}, {'step': 7, 'action': '撰写总结段落并重申核心结论', 'output': '在报告末尾用简洁语言概括核心观点、投资建议和风险提示,强化读者记忆。', 'completion_criteria': '总结段落精炼有力,与开头呼应,令读者快速抓住重点。', 'common_issues': '总结冗长或重复,未能有效提炼亮点。', 'solutions': '控制总结长度在1-2段内,仅保留最关键的信息。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 06:31:00", "modified_time": "2025-08-14 06:31:00", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "b689d778eb264a4a889c70a1aef5ea8b", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及风险评估报告等金融分析任务,尤其是需要综合定量与定性信息、涉及多维度数据整合和论证的复杂场景。", "content": "[{'step': 1, 'action': '明确研究目标与范围', 'output': '清晰界定研究主题的核心问题(如低空经济产业链结构、投融动态趋势),并确定所需覆盖的关键领域(政策、技术、市场、企业等)。', 'completion_criteria': '形成一份包含研究目标、主要章节安排及信息优先级排序的大纲。', 'common_issues': '目标过于宽泛或狭窄,导致后续内容难以聚焦。', 'solutions': '通过初步资料收集验证目标可行性,并根据反馈调整范围。'}, {'step': 2, 'action': '构建逻辑清晰的章节结构', 'output': '设计一个层次分明的目录,确保各部分之间有自然递进关系,例如从宏观概览到细分赛道深入探讨再到具体案例分析。', 'completion_criteria': '目录能够体现整体叙事脉络,且每章标题均能直接回应核心研究问题。', 'common_issues': '章节划分不合理,出现重复或遗漏重要方面的情况。', 'solutions': '参考类似成功报告的结构,结合当前任务需求进行优化;邀请同行评审提供建议。'}, {'step': 3, 'action': '优先展示核心结论', 'output': '在开篇用简洁语言概述最值得关注的趋势、发现或预测,辅以图表强化视觉效果。', 'completion Criteria': '读者能在5分钟内快速抓住全文重点。', 'common_issues': '核心结论被埋没在冗长背景描述中,影响阅读效率。', 'solutions': '采用“倒金字塔”写作方式,先呈现最关键成果,再逐步展开支持性细节。'}, {'step': 4, 'action': '平衡定量与定性信息分布', 'output': '系统整理统计数据、政策文件、技术进展等内容,同时补充专家访谈、案例研究等定性材料,保证两者比例适当。', 'completion_criteria': '报告中的每个观点都有充分的数据支撑,同时避免过度堆砌数字而忽视洞察提炼。', 'common_issues': '信息失衡,可能偏重一方而削弱说服力。', 'solutions': '设立专门团队负责不同类型信息的采集与整合,定期检查内容配比是否合理。'}, {'step': 5, 'action': '层层递进建立论证路径', 'output': '按照“现象-原因-影响-对策”的逻辑链条组织论述,使用因果分析、对比分析等方法增强说服力。', 'completion_criteria': '每一层论述都能为下一层提供坚实基础,最终得出令人信服的结论。', 'common_issues': '论证跳跃性强,缺乏连贯性。', 'solutions': '绘制逻辑图梳理思路,确保每一步推导都紧密衔接。'}, {'step': 6, 'action': '适时提出风险因素', 'output': '在讨论机遇的同时,及时揭示潜在风险(如政策不确定性、技术瓶颈),并通过情景模拟等方式量化其可能性与影响。', 'completion_criteria': '风险分析独立成节但又贯穿全文,不会孤立于其他部分。', 'common_issues': '风险提示滞后或流于表面,未能引起足够重视。', 'solutions': '建立标准化模板规范风险披露格式,并引入多方视角丰富分析维度。'}, {'step': 7, 'action': '处理不确定性和多种可能性', 'output': '针对模糊地带,列出不同假设条件下的发展路径,并基于概率赋予权重,形成弹性预测。', 'completion_criteria': '报告展现出对未来变化的开放态度,同时具备操作性强的具体建议。', 'common_issues': '对不确定性避而不谈或处理草率,降低可信度。', 'solutions': '运用蒙特卡洛模拟等工具提升预测科学性;强调透明度,公开所有假设前提。'}, {'step': 8, 'action': '总结并提炼跨场景适用的经验框架', 'output': '归纳整体制作流程中的通用原则与技巧,形成可复用的方法论。', 'completion_criteria': '经验框架具有高度抽象性和普适性,能指导未来类似工作。', 'common_issues': '总结过于具体,难以迁移到新情境。', 'solutions': '反复测试框架在不同案例中的适应性,不断迭代优化。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 07:15:15", "modified_time": "2025-08-14 07:15:15", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "f31eea33ad5c410ea18587dfe00a584d", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及市场机会评估类任务,尤其是涉及全球市场分布、竞争格局和品牌出海策略的场景。它特别适合需要结合定量数据(如市场规模、渗透率)与定性洞察(如消费者偏好、竞争动态)进行综合判断的任务。", "content": "[{'step': 1, 'action': '明确核心观点和目标受众', 'output': '提炼出报告的核心观点,并确定目标受众的需求和关注点。例如,本报告明确了摩托车出口具备海外销量空间大、自主品牌产品力提升等稀缺属性,并针对投资者和行业从业者提供清晰的市场前景展望。', 'criteria_for_completion': '核心观点是否简洁明了且具有吸引力;目标受众需求是否被准确识别。', 'common_issues_and_solutions': [{'issue': '核心观点过于宽泛或模糊', 'solution': '通过具体数据和案例支撑,确保观点精准且有说服力。'}, {'issue': '未能充分考虑目标受众背景', 'solution': '在撰写前调研目标受众的专业水平和兴趣点,调整语言和技术深度。'}]}, {'step': 2, 'action': '构建章节结构并安排信息优先级', 'output': '根据逻辑顺序组织内容,先从宏观市场概况切入,再逐步聚焦到区域市场、细分领域和企业表现。例如,本报告首先呈现全球市场容量及渗透率,接着按欧洲、美洲、亚洲分区域展开,最后落脚于国产品牌的出海策略。', 'criteria_for_completion': '章节结构是否条理清晰,信息展示是否符合由总到分、由面到点的逻辑递进。', 'common_issues_and_solutions': [{'issue': '信息堆砌无序,导致阅读困难', 'solution': '采用金字塔原理,将关键结论置于开头,用次级信息支持主论点。'}, {'issue': '过度偏重某一类型信息(如只强调定量而忽略定性)', 'solution': '平衡定量和定性内容,确保两者相辅相成。'}]}, {'step': 3, 'action': '收集并整合多源数据', 'output': '利用公开数据、历史记录和假设推算,形成对市场规模、竞争格局和趋势变化的全面描述。例如,本报告基于合理假设测算全球250cc+摩托车销量,并结合各国实际注册量验证模型合理性。', 'criteria_for_completion': '数据来源是否可靠,计算过程是否透明,结果是否能经受交叉验证。', 'common_issues_and_solutions': [{'issue': '数据不完整或存在偏差', 'solution': '引入多种数据来源进行对比,标注不确定性范围以提高可信度。'}, {'issue': '假设条件过于主观', 'solution': '详细说明假设依据,并与行业专家讨论以优化参数设定。'}]}, {'step': 4, 'action': '建立层层递进的论证路径', 'output': '通过逐层拆解问题,从整体市场到细分领域再到具体企业,逐步建立因果关系链。例如,本报告先分析全球市场总量,然后细化到欧洲、美洲、亚洲的具体国家和地区,最后聚焦于春风动力、隆鑫通用、钱江摩托三家企业的竞争力。', 'criteria_for_completion': '论证链条是否严密,每一步推导是否自然流畅。', 'common_issues_and_solutions': [{'issue': '论证跳跃过大,缺乏中间环节', 'solution': '补充必要的过渡性内容,确保逻辑连贯性。'}, {'issue': '忽视潜在反例或矛盾现象', 'solution': '主动提及可能的异议,并提供解释或反驳。'}]}, {'step': 5, 'action': '适时提出风险因素并给出应对建议', 'output': '在适当位置揭示潜在风险(如贸易摩擦、原材料价格波动),并提出缓解措施。例如,本报告在结尾部分列出四大主要风险,并提示投资者需关注国际环境变化。', 'criteria_for_completion': '风险提示是否全面且及时,解决方案是否具体可行。', 'common_issues_and_solutions': [{'issue': '风险提示流于形式,未深入探讨', 'solution': '结合案例和数据分析风险发生的可能性及其影响程度。'}, {'issue': '缺乏可操作的应对策略', 'solution': '设计具体的行动指南,帮助决策者规避或降低风险。'}]}, {'step': 6, 'action': '总结核心结论并突出亮点', 'output': '在报告末尾再次强调核心发现,同时指出未来的增长潜力和战略方向。例如,本报告总结了中国品牌在海外市场加速扩张的趋势,并呼吁关注250cc+大排量车型的长期机会。', 'criteria_for_completion': '总结是否简明扼要且富有启发性,能否引导读者采取行动。', 'common_issues_and_solutions': [{'issue': '总结冗长或重复正文内容', 'solution': '提炼精华内容,避免赘述,专注于传递独特价值主张。'}, {'issue': '缺少激励性的号召', 'solution': '加入前瞻性建议或行动指引,激发读者兴趣。'}]}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 07:21:32", "modified_time": "2025-08-14 07:21:32", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "0bf4e30e880f40198b320c80f71f80bb", "experience_type": "text", "when_to_use": "适用于行业深度研究、投资标的分析以及市场趋势预测类的金融研究报告。尤其适合在政策驱动型行业(如化工、新材料等)中,结合宏观经济政策、行业发展动态和市场表现进行综合分析的任务。", "content": "[{'step': 1, 'action': '明确核心主题与投资逻辑', 'output': \"定义报告的核心议题和投资逻辑框架,例如'反内卷'政策对供给侧的影响、AI和机器人需求的增长对化工新材料的拉动作用。\", 'criteria_for_completion': '核心议题清晰且与当前市场热点高度相关;投资逻辑能够串联起宏观政策、行业动态和个股表现。', 'common_issues': '主题过于宽泛或缺乏聚焦,导致后续分析难以深入。', 'solutions': '通过团队讨论或客户反馈,精炼主题范围,确保议题具有实际指导意义。'}, {'step': 2, 'action': '收集并整理多维度数据', 'output': '整合定量数据(如价格、价差、涨跌幅)和定性信息(如政策解读、行业新闻),形成初步数据池。', 'criteria_for_completion': '数据覆盖全面,包括但不限于宏观经济指标、行业供需数据、个股财务表现等;数据来源可靠且更新及时。', 'common_issues': '数据冗余或缺失关键变量,影响分析的完整性。', 'solutions': '建立标准化数据采集模板,定期检查数据质量,并补充第三方权威数据库。'}, {'step': 3, 'action': '设计章节结构以突出重点', 'output': '按照“宏观背景→行业动态→市场表现→投资建议”的逻辑组织章节内容,确保信息优先级合理分布。', 'criteria_for_completion': '章节安排符合读者认知路径,先呈现宏观背景和政策导向,再逐步细化至具体行业和个股分析;核心结论直观易懂。', 'common_issues': '章节顺序混乱或信息堆砌,导致阅读体验不佳。', 'solutions': '提前规划目录框架,邀请同事或目标用户预览,根据反馈调整结构。'}, {'step': 4, 'action': '采用分层论证方法支持观点', 'output': \"从政策、供需、技术进步等多个角度层层递进,构建完整的论证链条。例如,'反内卷'政策如何推动供给侧改革,进而影响特定子行业的竞争格局。\", 'criteria_for_completion': '每个论点都有充分的数据或案例支撑,且逻辑连贯;风险提示部分适时出现,避免过度乐观。', 'common_issues': '论证过程跳跃性强,缺乏过渡,使读者难以跟上思路。', 'solutions': '使用小标题或段落总结强化逻辑衔接,确保每一步推导自然流畅。'}, {'step': 5, 'action': '平衡历史回顾与未来展望', 'output': '结合历史数据分析当前市场状态,同时基于趋势预测提出前瞻性建议。例如,通过硅晶圆出货量的历史增长推测半导体材料需求潜力。', 'criteria_for_completion': '历史数据与未来预测比例适当,既不偏重回溯也不盲目乐观;预测依据充分且透明。', 'common_issues': '历史数据占比过高,掩盖了对未来机会的洞察;或预测缺乏依据,显得空洞。', 'solutions': '设定固定篇幅比例(如60%现状+40%展望),并引入专家访谈或模型验证增强可信度。'}, {'step': 6, 'action': '制定具体投资建议', 'output': '基于前述分析,筛选弹性较大板块及优势品种,提供明确的操作策略。例如,关注有机硅、膜材料等供给压缩弹性大的领域。', 'criteria_for_completion': '建议具体可行,包含标的名称、理由和潜在收益/风险;语言简洁明了,便于投资者快速决策。', 'common_issues': '建议模糊或过于笼统,无法直接落地执行。', 'solutions': '增加附录部分详细列出推荐标的的基本面数据和估值区间,提高实用性。'}, {'step': 7, 'action': '审慎处理不确定性和风险因素', 'output': '在合适位置(如章节末尾或独立章节)系统阐述可能的风险点,例如地缘政治波动、下游需求疲软等。', 'criteria_for_completion': '风险提示全面且客观,涵盖政策、市场和技术等多个层面;表述语气中立,避免引发恐慌情绪。', 'common_issues': '风险提示过于简略或被忽视,降低报告的专业性。', 'solutions': '设置专门团队负责风险评估模块,确保其独立性和完整性。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 07:23:03", "modified_time": "2025-08-14 07:23:03", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "31d0f60d28424c2d9d7e5b88d9298565", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及宏观经济趋势解读等金融分析任务。尤其适合需要结合定量与定性数据,进行多维度评估并提出投资建议的场景。", "content": "[{'step': 1, 'action': '明确核心观点和研究目标', 'output': '形成清晰的核心观点,概述研究背景、主要结论及投资建议。', 'completion_criteria': '核心观点应能够用一句话概括,并能直接指导后续章节内容的展开;投资建议需具体且可操作。', 'common_issues': '核心观点模糊或过于宽泛,导致后续分析缺乏聚焦点。', 'solutions': '在撰写初期反复推敲核心观点,确保其简洁有力,并贯穿全文。'}, {'step': 2, 'action': '组织章节结构,划分信息优先级', 'output': '构建逻辑清晰的目录结构,将信息分为宏观背景、行业分析、具体标的推荐等部分。', 'completion_criteria': '各章节之间有明确的递进关系,信息展示顺序符合“从整体到局部”的原则,核心结论在开头和结尾均得到强调。', 'common_issues': '章节安排杂乱无章,导致读者难以抓住重点。', 'solutions': '遵循“总-分-总”结构,先概述全局,再深入细节,最后总结归纳。'}, {'step': 3, 'action': '收集并整理定量与定性数据', 'output': '生成包含历史数据、预测模型、政策导向、市场趋势等内容的综合数据集。', 'completion_criteria': '数据来源可靠,覆盖全面,且通过图表形式直观呈现关键指标。', 'common_issues': '数据不完整或缺乏权威性,影响分析可信度。', 'solutions': '优先选择官方统计机构或知名咨询公司的数据,并注明数据来源。'}, {'step': 4, 'action': '建立论证逻辑,层层递进支持核心观点', 'output': '运用对比分析法(如中日消费社会对比)、趋势外推法(如灵活用工市场规模预测)等工具,逐步推导出核心结论。', 'completion_criteria': '每个论点都有充分的数据支撑,且不同论点之间存在内在联系,共同服务于核心观点。', 'common_issues': '论证过程跳跃性强,论据不足以支撑论点。', 'solutions': '采用“假设-验证”模式,逐一检验每个论点的合理性,并补充相关数据或案例。'}, {'step': 5, 'action': '适时引入风险提示,平衡不确定性', 'output': '在报告中明确列出潜在风险因素,并说明这些风险对投资决策的影响。', 'completion_criteria': '风险提示既不过于笼统也不过于悲观,而是基于实际数据和合理推测。', 'common_issues': '忽视风险提示或将其置于次要位置,削弱报告的客观性。', 'solutions': '在每项投资建议后立即附上对应的风险提示,确保投资者充分了解可能的负面后果。'}, {'step': 6, 'action': '提炼投资建议,突出可执行性', 'output': '针对不同行业或标的,提供具体的买入/持有评级、估值区间及业绩预测。', 'completion_criteria': '投资建议具备明确的时间框架和量化指标,便于投资者参考。', 'common_issues': '投资建议过于理论化,缺乏实际操作价值。', 'solutions': '结合财务数据和市场动态,给出详细的盈利预测和估值依据。'}, {'step': 7, 'action': '校验与优化报告内容', 'output': '完成最终版本的报告,确保语言精炼、格式规范、图表清晰。', 'completion_criteria': '报告内容准确无误,所有引用数据均已注明来源,且整体阅读体验流畅。', 'common_issues': '语法错误、排版混乱或图表标注不清。', 'solutions': '设置专门的校对环节,邀请同事或外部专家审阅报告,发现并修正问题。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 07:24:24", "modified_time": "2025-08-14 07:24:24", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "54cf2241f6454a8caaa534f0f843bfe0", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及政策驱动型市场机会评估等任务。尤其适合需要结合宏观政策、行业竞争格局、企业成本优势和风险因素的综合分析场景。", "content": "[{'step': 1, 'action': '明确研究主题与核心问题,梳理相关背景信息。', 'output': '形成清晰的研究目标,例如‘反内卷背景下纯碱行业的投资机会’,并确定需回答的核心问题(如产能分布、供需关系、政策影响等)。', 'completion_criteria': '研究目标和核心问题是否具体化,是否能指导后续数据分析。', 'common_issues': '研究问题过于宽泛或模糊,可能导致分析缺乏聚焦。', 'solutions': '通过与利益相关方沟通或参考已有研究报告,细化研究范围和目标。'}, {'step': 2, 'action': '收集并整理行业数据,包括历史数据、当前状态及未来预测。', 'output': '生成关键数据图表,如产能分布图、开工率趋势图、价格走势等,并标注数据来源。', 'completion_criteria': '数据覆盖全面且准确,图表清晰展示关键趋势,便于后续分析。', 'common_issues': '数据不完整或来源不可靠,导致结论可信度下降。', 'solutions': '优先选择权威机构发布的数据(如Bloomberg、百川盈孚),并对数据进行交叉验证。'}, {'step': 3, 'action': '分析行业供给与需求格局,重点突出集中度、产能结构和政策影响。', 'output': '输出行业供给端(如CR5、老旧装置占比)和需求端(如下游应用领域)的关键指标及趋势分析。', 'completion_criteria': '是否清楚揭示了行业现状及其驱动因素,逻辑是否连贯。', 'common_issues': '忽略政策或技术变革对行业的影响,导致分析片面。', 'solutions': '结合政策法规解读行业变化,关注新技术或工艺对传统模式的冲击。'}, {'step': 4, 'action': '评估行业内企业的竞争优势,特别是成本结构和技术路径。', 'output': '对比不同工艺路线的成本、能耗和环保表现,识别具备长期竞争力的企业。', 'completion_criteria': '是否能够量化不同企业的优势,并提供支持性证据(如天然碱法 vs 合成法)。', 'common_issues': '仅定性描述而缺乏定量支持,结论说服力不足。', 'solutions': '引入历史成本数据和第三方评测结果,强化论证的客观性。'}, {'step': 5, 'action': '提出投资建议,筛选具备潜力的标的公司。', 'output': '推荐重点关注的上市公司,附带其核心竞争力、扩产计划及潜在风险。', 'completion_criteria': '建议是否基于充分的数据和逻辑支撑,是否具有可操作性。', 'common_issues': '建议过于笼统或缺乏针对性,难以落地。', 'solutions': '结合具体财务指标、项目进展和行业地位,精准锁定优质标的。'}, {'step': 6, 'action': '识别和披露主要风险因素,确保分析的全面性和审慎性。', 'output': '列出可能影响行业或标的表现的风险点(如原材料价格波动、政策调整等),并说明应对策略。', 'completion_criteria': '风险提示是否系统化,是否涵盖所有重大不确定性。', 'common_issues': '风险提示流于形式,未能深入探讨潜在后果。', 'solutions': '从多维度(宏观经济、行业周期、企业运营)出发,构建完整的风险矩阵。'}, {'step': 7, 'action': '组织报告结构,合理安排章节顺序以优化信息传递效率。', 'output': '形成逻辑清晰、层次分明的报告文档,包含摘要、正文、图表和附录。', 'completion_criteria': '报告是否易于理解,核心结论是否突出且令人信服。', 'common_issues': '章节安排混乱,导致读者难以抓住重点。', 'solutions': '采用‘总-分-总’结构,先概述全局再逐步展开细节,最后总结核心观点。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 07:25:43", "modified_time": "2025-08-14 07:25:43", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "bebe3e745d0b40b8ab6d2e238fd8b6cd", "experience_type": "text", "when_to_use": "适用于行业深度研究、市场动态更新、投资标的分析或风险评估报告等需要结合定量与定性分析的任务。", "content": "[{'step': 1, 'action': '明确时间范围和事件背景', 'output': '简短概述分析的时间范围和核心事件(如本周风电招中标情况)。', 'completion_criteria': '确保背景信息简洁明了,能够快速让读者理解分析的上下文。', 'common_issues': ['背景信息过于冗长,导致重点模糊。', '缺乏明确的时间范围,使分析显得无序。'], 'solutions': ['限制背景描述在3-4句话内,直击核心。', '使用清晰的时间标记(如‘2025年7月28日-8月1日’)。']}, {'step': 2, 'action': '收集并整理定量数据', 'output': '按主题分类整理核心数据(如招标规模、中标规模、价格分布等),并制作表格或图表辅助展示。', 'completion_criteria': '数据完整且准确,表格清晰易读,能快速传递关键信息。', 'common_issues': ['数据来源不明确或数据不完整。', '表格设计复杂,难以快速理解。'], 'solutions': ['标注数据来源,确保透明性。', '简化表格设计,突出关键指标(如中标均价、最高/最低单价)。']}, {'step': 3, 'action': '分析数据并提炼趋势', 'output': '从数据中提炼关键趋势(如价格波动、区域分布、开发商偏好等),并用简洁语言总结。', 'completion_criteria': '趋势总结应基于数据,逻辑清晰,避免主观臆断。', 'common_issues': ['趋势总结过于笼统,缺乏数据支撑。', '忽略异常值或特殊情况。'], 'solutions': ['每条趋势总结都需引用具体数据支持。', '单独列出异常值并解释其可能原因。']}, {'step': 4, 'action': '结合趋势提出投资建议', 'output': '根据数据分析结果,提出具体的行动建议(如关注特定领域或企业)。', 'completion_criteria': '建议应具体可行,与前面的数据分析逻辑一致。', 'common_issues': ['建议过于宽泛,缺乏针对性。', '建议与数据分析脱节,显得突兀。'], 'solutions': ['确保建议与数据分析紧密相关,避免空泛表述。', '列举具体标的或领域,增强实用性。']}, {'step': 5, 'action': '识别并披露风险因素', 'output': '列出可能影响结论的风险因素(如政策风险、市场波动),并简要说明其潜在影响。', 'completion_criteria': '风险提示全面且客观,不影响核心结论的权威性。', 'common_issues': ['风险提示过于简单,缺乏说服力。', '风险提示过长,削弱投资建议的吸引力。'], 'solutions': ['每项风险提示均需附带具体说明和可能后果。', '控制风险提示篇幅,保持与投资建议的平衡。']}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 07:27:41", "modified_time": "2025-08-14 07:27:41", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "3a3095fb18c445638ef8991f62e91aa0", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及市场趋势预测等金融分析任务,尤其是需要结合定量与定性数据进行综合评估的场景。", "content": "[{'step': 1, 'action': '明确分析目标和核心问题', 'output': '清晰定义报告的核心主题(如儿童彩妆市场),并列出关键问题(市场规模、供需状况、竞争格局及未来趋势)。', 'evaluation_criteria': '是否能用一句话概括分析目标,并确保所有后续章节围绕该目标展开。', 'common_issues': '目标过于宽泛或模糊,导致后续分析缺乏聚焦。', 'solution': '在初始阶段反复确认目标,并通过小组讨论或客户反馈验证方向。'}, {'step': 2, 'action': '构建逻辑清晰的章节结构', 'output': '设计目录,分为背景、现状、竞争、趋势四大模块,确保信息从宏观到微观逐步递进。', 'evaluation_criteria': '章节安排是否符合‘由浅入深’原则,且每个部分都有明确的子目标支持整体目标。', 'common_issues': '章节之间存在重复内容或逻辑断层。', 'solution': '绘制思维导图,检查各章节间的逻辑衔接,并删除冗余部分。'}, {'step': 3, 'action': '收集并筛选定量与定性数据', 'output': '整理市场规模、增长率、品牌排名等定量数据,同时搜集消费者偏好、政策法规等定性信息。', 'evaluation_criteria': '数据来源是否权威可靠,且覆盖了历史、现状和预测三个时间维度。', 'common_issues': '数据不完整或过时,影响结论可信度。', 'solution': '使用多渠道交叉验证数据,并标注最新更新日期以提高透明度。'}, {'step': 4, 'action': '建立多维度评估模型', 'output': '针对竞争格局,设计基于销售额、均价等指标的品牌评估体系,量化市场竞争态势。', 'evaluation_criteria': '评估模型是否客观公正,能够准确反映不同品牌的相对优势。', 'common_issues': '评估维度单一,无法全面体现品牌综合实力。', 'solution': '引入更多相关变量(如用户满意度、创新力),并通过敏感性测试优化权重分配。'}, {'step': 5, 'action': '突出核心结论并提出行动建议', 'output': '总结市场规模增长驱动因素、竞争格局变化规律及未来发展趋势,形成简明扼要的结论。', 'evaluation_criteria': '核心结论是否直击要害,且附带具体的执行建议供决策参考。', 'common_issues': '结论过于笼统,缺乏实际指导意义。', 'solution': '将结论细化为可操作步骤,并结合案例说明其落地可行性。'}, {'step': 6, 'action': '识别并处理不确定性', 'output': '分析潜在风险(如监管趋严、市场竞争加剧),并探讨多种可能性及其应对策略。', 'evaluation_criteria': '是否充分考虑了内外部环境变化对结论的影响,并提供了灵活的解决方案。', 'common_issues': '忽略极端情景假设,导致方案鲁棒性不足。', 'solution': '采用情景分析法模拟不同结果,并为每种情景制定备选计划。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 07:29:02", "modified_time": "2025-08-14 07:29:02", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "caa103f83de44b64a1e2a126aa5b43fe", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及战略咨询报告等任务,特别是需要结合定量与定性信息评估复杂业务场景的金融分析工作。例如:药物开发投资回报率分析、供应链整合价值评估、跨阶段项目风险收益建模等。", "content": "[{'step': 1, 'action': '明确目标和受众', 'output': '清晰定义报告的核心目标(如量化单一供应商整合模式的价值)及主要受众(如制药公司决策者、投资者等)。', 'completion_criteria': \"能够用一句话回答核心问题,例如'我们希望证明单一供应商整合模式如何提高药物开发效率和投资回报率'。\", 'common_issues': '目标过于宽泛或模糊,导致后续章节结构松散。', 'solutions': '通过与利益相关方沟通确认目标,并确保所有内容围绕目标展开。'}, {'step': 2, 'action': '构建逻辑清晰的章节结构', 'output': '设计一个从背景到结论逐步递进的章节架构,包括执行摘要、挑战描述、方法论、数据分析、案例研究和结论。', 'completion_criteria': '每个章节都有明确的目的,且逻辑链条完整,读者能轻松理解从问题到解决方案的推导过程。', 'common_issues': '章节安排不连贯,导致信息割裂或重复。', 'solutions': '使用思维导图或提纲工具验证章节间的逻辑关系,确保信息流动自然。'}, {'step': 3, 'action': '优先展示关键结论', 'output': '在执行摘要中突出核心发现(如投资回报率增长、净现值收益等),并以图表形式直观呈现。', 'completion_criteria': '读者能在5分钟内快速抓住报告的核心价值主张。', 'common_issues': '将关键结论埋藏在细节中,影响阅读体验。', 'solutions': '采用倒金字塔结构,先呈现最重要的结论,再补充支持性数据和分析。'}, {'step': 4, 'action': '平衡定量与定性信息', 'output': '结合历史数据(如行业基准)、预测模型(如eNPV分析)和定性洞察(如客户案例),全面支持观点。', 'completion_criteria': '每项主张都有充分的数据支撑,同时避免过度依赖单一类型的信息。', 'common_issues': '定量信息过多导致枯燥,或定性信息缺乏数据佐证显得主观。', 'solutions': '为每个定量指标配以简短解释,为定性内容提供具体案例或引用权威来源。'}, {'step': 5, 'action': '建立层层递进的论证路径', 'output': '从行业痛点(如成本高、效率低)入手,过渡到解决方案(如单一供应商整合模式),并通过财务模型和敏感性分析验证其价值。', 'completion_criteria': '论证过程环环相扣,没有跳跃式推理,且每一步都建立在前一步的基础上。', 'common_issues': '论证链条断裂,或未能有效回应潜在质疑。', 'solutions': '提前识别可能的反对意见,在适当位置加入反驳或补充说明。'}, {'step': 6, 'action': '适时提出风险因素', 'output': '在讨论后期开发阶段优势时引入风险因素(如市场条件波动),并通过敏感性分析证明方案的稳健性。', 'completion_criteria': '风险因素被合理融入整体叙事,而非单独列出显得突兀。', 'common_issues': '忽略风险或处理不当,使分析显得片面。', 'solutions': '始终从正面角度讨论风险,强调解决方案如何缓解这些风险。'}, {'step': 7, 'action': '处理不确定性和多种可能性', 'output': '通过敏感性分析和多情景模拟,展示不同假设条件下的结果范围,增强分析的可信度。', 'completion_criteria': '读者能够理解即使在最不利条件下,方案仍具备一定优势。', 'common_issues': '未充分考虑极端情况,导致分析不够严谨。', 'solutions': '选择代表性强的情景进行测试,确保覆盖主要变量的变化区间。'}, {'step': 8, 'action': '总结并引导行动', 'output': '在结论部分重申核心价值主张,并提供具体的下一步建议(如联系团队了解详情)。', 'completion_criteria': '读者不仅理解了分析内容,还知道接下来该做什么。', 'common_issues': '结尾草率收场,缺乏行动号召力。', 'solutions': '设计明确的CTA(Call to Action),并附上联系方式或资源链接。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 07:30:38", "modified_time": "2025-08-14 07:30:38", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "3bced880cad4435bb0260bb1759a0ce6", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究、投资标的分析以及资本市场动态跟踪类的金融分析任务,尤其适合需要结合定量与定性信息、历史数据与未来预测、市场热点与潜在风险的综合性报告制作。", "content": "[{'step': 1, 'action': '明确分析目标和核心投资主题', 'output': '清晰定义报告的核心主题(如:创新药赛道进展)和投资逻辑(如:IO2.0赛道的BD出海潜力),并确定关键问题(如:哪些公司具备BD出海潜力?下半年催化事件有哪些?)。', 'evaluation': '判断是否完成得好:核心主题是否聚焦,是否能够通过标题和投资要点快速传达给读者。', 'common_issues': '主题过于宽泛或模糊,导致后续章节缺乏逻辑连贯性。', 'solutions': '通过头脑风暴和团队讨论,提炼出最具市场吸引力和投资价值的主题。'}, {'step': 2, 'action': '构建章节结构,分配信息优先级', 'output': '按照“行情回顾→配置思路→重点赛道分析→产业动态→风险提示”的逻辑顺序组织内容,确保信息展示从宏观到微观、从整体到局部逐步展开。', 'evaluation': '判断是否完成得好:章节之间是否有逻辑递进关系,核心结论是否在前几部分突出展现。', 'common_issues': '章节安排杂乱无章,导致重要信息被埋没或不易理解。', 'solutions': '采用金字塔原理,将最重要的信息放在最前面,并用图表和数据支撑关键观点。'}, {'step': 3, 'action': '收集和整理定量与定性数据', 'output': '整合历史财务数据、临床试验结果、市场表现、政策动态等多维度信息,形成支持论点的数据基础。例如,使用SW医药生物指数涨幅、个股涨跌幅、ORR/DCR等临床指标。', 'evaluation': '判断是否完成得好:数据是否全面、准确且相关性强,是否能有效支撑观点。', 'common_issues': '数据来源单一或过时,无法反映当前市场状况。', 'solutions': '建立标准化数据采集流程,优先选择权威公开渠道(如Wind、ASCO会议摘要)。'}, {'step': 4, 'action': '设计论证路径,分层递进建立观点', 'output': '通过“现状描述→趋势分析→案例佐证→未来展望”的方式层层推进,确保每个观点都有充分的事实依据。例如,在阐述IO2.0赛道时,先介绍全球首款PD-1三抗CS2009的分子设计优势,再列举其临床前和临床数据。', 'evaluation': '判断是否完成得好:论证是否严密,是否存在跳跃式推导或逻辑漏洞。', 'common_issues': '论据不足或偏离主题,导致说服力下降。', 'solutions': '每段落设置小结句,确保论点与论据一一对应,避免冗余信息干扰主线。'}, {'step': 5, 'action': '平衡不同类型信息的分布', 'output': '合理分配定量数据(如股价涨跌幅、临床试验ORR)、定性分析(如技术平台优势)、历史回顾(如上半年板块表现)和未来预测(如下半年催化事件)的比例,使报告兼具深度与广度。', 'evaluation': '判断是否完成得好:各类信息是否均衡分布,是否兼顾短期波动与长期趋势。', 'common_issues': '过度依赖某类信息(如仅关注历史数据而忽略未来预测),导致视角单一。', 'solutions': '制定信息比例分配表,确保各部分内容占比适中。'}, {'step': 6, 'action': '提出风险因素并融入整体框架', 'output': '在正文最后部分系统梳理潜在风险(如研发失败、竞争加剧、地缘政治风险),并将其与前期分析相呼应,增强报告的客观性和可信度。', 'evaluation': '判断是否完成得好:风险提示是否全面且具体,是否与前期分析内容关联紧密。', 'common_issues': '风险提示流于形式,缺乏针对性和实操性。', 'solutions': '针对不同细分领域分别列出具体风险项,并提供应对策略建议。'}, {'step': 7, 'action': '制作可视化材料,优化信息呈现', 'output': '为关键数据和结论设计直观易懂的图表(如股价走势图、临床试验结果表格),并标注核心发现,提升阅读体验。', 'evaluation': '判断是否完成得好:图表是否简洁明了,是否能帮助读者快速抓住重点。', 'common_issues': '图表过多或过于复杂,反而分散注意力。', 'solutions': '遵循“一图一意”原则,确保每张图表只表达一个核心信息。'}, {'step': 8, 'action': '撰写投资建议和总结', 'output': '基于前述分析,提炼出具体的配置思路和推荐标的(如:关注ADC、双抗赛道;重点跟踪药明合联、映恩生物-B等公司),并明确预期收益和时间窗口。', 'evaluation': '判断是否完成得好:投资建议是否切实可行,是否与分析过程一致。', 'common_issues': '建议空洞或脱离实际,缺乏操作性。', 'solutions': '结合客户反馈和市场调研,细化投资建议的具体实施步骤。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 07:32:24", "modified_time": "2025-08-14 07:32:24", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "910318f52a8347b59d45627551c9360d", "experience_type": "text", "when_to_use": "此规划框架适用于跨境电商行业趋势分析、市场动态评估、竞争格局研究等需要深度数据整合与洞察生成的任务,也可扩展至其他领域的行业研究报告制作。", "content": "[{'step': 1, 'action': '明确报告目标和受众需求,定义核心主题及关键问题。', 'output': \"清晰的报告范围说明文档,如本次报告围绕'2025年上半年跨境电商行业趋势'展开,并划分为行业发展概览、大事记、图解分析、市场趋势四大模块。\", 'completion_criteria': '报告结构初稿完成,涵盖所有主要议题(如区域市场、消费行为、平台动态等),并获得团队内部确认。', 'common_issues': '主题过于宽泛或模糊,可能导致内容冗长且缺乏重点。', 'solutions': '通过头脑风暴与利益相关者沟通,聚焦于最能反映行业变化的关键领域。'}, {'step': 2, 'action': '收集多维度数据,包括定量(如市场规模、增长率)和定性信息(如政策解读、消费者偏好),确保覆盖全面。', 'output': '一份完整的数据清单,包含来源、时间跨度、统计方法等元数据,例如中国海关进出口数据、Statista电商收入预测、平台财报等。', 'completion_criteria': '数据验证无误,逻辑一致;能够支持后续章节所需的所有论证点。', 'common_issues': '数据更新不及时或来源不可靠,影响结论可信度。', 'solutions': '优先选择权威机构发布的最新数据,同时标注数据时效性和潜在局限性。'}, {'step': 3, 'action': '设计报告结构,按总分原则组织内容,从宏观到微观逐步深入,确保信息展示有条理。', 'output': '详细的目录框架,包括各部分标题、子标题及其对应的页码分配,例如‘行业发展概览’下设‘中国跨境电商市场’‘区域电商市场’‘消费市场变化’三个子章节。', 'completion_criteria': '章节间逻辑连贯,信息分布平衡合理,且符合读者阅读习惯。', 'common_issues': '章节安排混乱,导致重要信息被埋没或重复。', 'solutions': '采用金字塔原理构建内容层次,先呈现总体趋势再细化至具体案例。'}, {'step': 4, 'action': '撰写正文,结合数据分析提出观点,并使用图表辅助说明复杂概念或数据关系。', 'output': '完整章节内容,每部分均以简短引言开头,随后用数据和事实支撑论点,最后总结关键发现,例如北美电商增速放缓的原因分析。', 'completion Criteria': '文字表达准确流畅,图表设计直观易懂,能够有效传递核心信息。', 'common_issues': '文字堆砌过多,缺乏可视化工具降低理解难度。', 'solutions': '精炼文字,善用柱状图、折线图等可视化手段突出数据对比。'}, {'step': 5, 'action': '嵌入风险提示和不确定性讨论,适时引入多种可能性假设,避免单一视角误导决策。', 'output': '专门段落或注释,针对特定事件(如关税政策调整)进行情景模拟分析,例如‘中美双边贸易额下降9.3%对跨境商家的影响’。', 'completion_criteria': '风险因素表述客观中立,提供应对策略建议而非单纯预警。', 'common_issues': '忽视负面因素或过度强调乐观预期,削弱报告公信力。', 'solutions': '基于历史数据推演未来可能路径,同时引用专家意见增强说服力。'}, {'step': 6, 'action': '提炼核心结论,形成行动指南,帮助读者快速抓住重点。', 'output': '摘要或执行摘要,概括报告主要内容及主要建议,例如‘下半年重点关注欧洲市场机会’‘优化物流成本控制策略’等。', 'completion_criteria': '结论高度凝练,语言简洁明了,直接服务于决策需求。', 'common_issues': '结论空洞或脱离实际,难以指导实践。', 'solutions': '基于前文分析提炼出可落地的具体措施,避免泛泛而谈。'}, {'step': 7, 'action': '审校与润色,检查语法错误、格式统一性以及数据准确性。', 'output': '最终版PDF文件,页面布局整洁美观,所有引用资料注明来源。', 'completion_criteria': '无明显错漏,整体风格专业严谨,满足发布标准。', 'common_issues': '细节疏忽导致品牌形象受损,如拼写错误或图片模糊。', 'solutions': '由多人交叉校对,借助自动化工具提升效率。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 07:34:12", "modified_time": "2025-08-14 07:34:12", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "3984e32795284f8ea3ab85819f290d65", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、政策影响分析、投资标的筛选与推荐等金融分析任务,尤其在政策法规变动对行业产生重大影响时最为适用。", "content": "[{'step': 1, 'action': '明确分析目标和核心问题', 'output': '清晰定义报告的核心目标(如政策解读、市场供需分析、投资建议),并列出需要解答的关键问题。', 'completion_criteria': '目标明确且具体,关键问题覆盖全面,能直接指导后续章节安排。', 'common_issues': '目标过于宽泛或模糊,导致后续分析缺乏聚焦。', 'solutions': '通过团队讨论或与利益相关方沟通,确保目标与实际需求一致。'}, {'step': 2, 'action': '收集和整理相关信息', 'output': '汇总政策法规原文、行业数据、历史案例、专家观点等多维度信息,并进行初步分类。', 'completion_criteria': '信息来源权威可靠,涵盖定量和定性数据,能够支持后续分析。', 'common_issues': '信息不完整或过时,可能导致结论偏差。', 'solutions': '优先使用官方文件和权威数据库,必要时补充专家访谈或第三方研究报告。'}, {'step': 3, 'action': '设计章节结构并分配信息优先级', 'output': '根据逻辑递进关系安排章节顺序,先介绍背景事件,再分析政策影响,最后提出投资建议和风险提示。', 'completion_criteria': '章节结构清晰,信息展示顺序符合读者认知习惯,核心结论突出。', 'common_issues': '章节安排混乱,导致信息传递效率低下。', 'solutions': '采用“总-分-总”结构,确保开头引入背景,中间深入分析,结尾总结结论并提出行动建议。'}, {'step': 4, 'action': '展开政策解读和行业影响分析', 'output': '逐条解读政策条款,结合行业现状分析其潜在影响,并用定量数据(如产能变化)和定性判断(如管理趋势)支持观点。', 'completion_criteria': '政策解读全面准确,影响分析逻辑严密,数据与观点匹配。', 'common_issues': '政策解读过于表面化,缺乏深度分析。', 'solutions': '对比新旧政策差异,引用具体案例说明影响,避免空泛描述。'}, {'step': 5, 'action': '构建供需分析和价格预测模型', 'output': '基于历史数据和当前市场动态,建立供需平衡表,预测未来价格走势,并标注关键驱动因素。', 'completion_criteria': '模型假设合理,预测结果有据可依,与实际情况吻合度高。', 'common_issues': '模型过于复杂或脱离实际,导致预测不可信。', 'solutions': '简化模型输入变量,注重敏感性分析,确保结果稳健性。'}, {'step': 6, 'action': '筛选和推荐投资标的', 'output': '根据政策影响和市场前景,筛选具备竞争优势的公司,提供详细的投资逻辑和估值分析。', 'completion_criteria': '推荐标的逻辑清晰,估值合理,与政策和市场分析一致。', 'common_issues': '推荐标的缺乏差异化,投资逻辑不充分。', 'solutions': '结合公司基本面、成长性和市场情绪,多维度评估投资价值。'}, {'step': 7, 'action': '识别和披露风险因素', 'output': '系统梳理可能的风险点(如政策变化、市场需求波动等),并在报告中明确提示。', 'completion_criteria': '风险提示全面、客观,不影响整体结论的可信度。', 'common_issues': '风险提示过于笼统或隐藏在细节中,未能引起重视。', 'solutions': '将风险提示单独列为章节,用具体案例说明潜在影响。'}, {'step': 8, 'action': '撰写总结和行动建议', 'output': '提炼核心结论,明确投资者应采取的具体行动(如买入、持有或规避),并附上分析师联系方式。', 'completion_criteria': '总结简洁有力,行动建议具体可行,便于决策参考。', 'common_issues': '总结冗长或缺乏操作性,无法直接指导行动。', 'solutions': '聚焦关键结论,避免重复细节,用清晰语言表达行动建议。'}, {'step': 9, 'action': '校对和优化报告格式', 'output': '检查报告内容的准确性、语言表达的专业性和图表的美观性,确保最终版本无错误。', 'completion_criteria': '报告内容无误,排版规范,适合对外发布。', 'common_issues': '格式不统一或存在低级错误,影响专业形象。', 'solutions': '多人交叉校对,使用模板统一格式,确保一致性。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 07:35:19", "modified_time": "2025-08-14 07:35:19", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "f99353f95b4c49598881e5dedce63173", "experience_type": "text", "when_to_use": "适用于行业深度研究、投资标的分析、风险评估报告等需要结合定量与定性信息的任务。", "content": "[{'step': 1, 'action': '明确分析目标与受众需求', 'output': '一份简短的问题定义文档,包括分析的核心主题、目标受众及其关注点。', 'completion_criteria': '能够清晰回答‘为什么要写这份报告’以及‘谁会阅读它’。', 'common_issues': ['目标模糊导致内容散乱'], 'solutions': ['与利益相关方沟通确认需求;设定SMART目标']}, {'step': 2, 'action': '收集并整理相关信息', 'output': '按主题分类的数据表/资料库,包含定量数据(如财务指标、统计数据)和定性信息(如专家观点、政策文件)。', 'completion_criteria': '所有引用信息来源可靠,覆盖全面且无遗漏。', 'common_issues': ['数据过时或不可靠', '信息冗余'], 'solutions': ['优先选择权威渠道;剔除重复或低价值信息']}, {'step': 3, 'action': '构建逻辑框架与章节结构', 'output': '一个初步的大纲,列出各章节标题及其主要讨论点。', 'completion_criteria': '大纲逻辑清晰,各章节之间有明确的过渡关系。', 'commonissues': ['结构松散或过于复杂'], 'solutions': ['遵循‘总-分-总’模式;控制层级不超过三级']}, {'step': 4, 'action': '撰写初稿并突出核心结论', 'output': '一份完整的初稿,每章开头均包含核心结论,随后是支持性论据。', 'completion_criteria': '读者能通过快速浏览得出主要观点。', 'common_issues': ['论据不足或偏离主题'], 'solutions': ['逐段检查是否紧扣主旨;增加图表辅助说明']}, {'step': 5, 'action': '平衡定量与定性信息', 'output': '调整后的报告,确保数据与分析比例适当,历史与预测信息互为补充。', 'completion_criteria': '没有过多依赖某类信息,整体内容丰富多样。', 'common_issues': ['数据堆砌或缺乏深度分析'], 'solutions': ['引入案例研究;加入行业专家访谈']}, {'step': 6, 'action': '识别并阐述风险因素', 'output': '新增的风险提示部分,列举潜在挑战及应对策略。', 'completion_criteria': '风险描述客观中立,不掩盖正面论点。', 'common_issues': ['忽略重要风险或表述不当'], 'solutions': ['参考同行报告;咨询风控团队']}, {'step': 7, 'action': '审阅与优化表达', 'output': '最终版本报告,语言简洁流畅,格式统一规范。', 'completion_criteria': '无语法错误,所有术语解释清楚,适合目标受众理解。', 'common_issues': ['行文晦涩难懂', '格式混乱'], 'solutions': ['请非专业人士试读;使用模板统一排版']}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 07:37:01", "modified_time": "2025-08-14 07:37:01", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "65a210a37e5147a5a5efb4047e4ed917", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究、政策影响分析、可持续发展评估以及绿色金融相关报告的制作。尤其适合需要结合定量与定性分析,同时涉及复杂价值链和多利益相关方协作的情景,例如脱碳路径设计、ESG报告编制或产业链协同优化。", "content": "[{'step': 1, 'action': '明确分析目标和受众需求', 'output': '定义清晰的研究问题(如制浆造纸行业的脱碳路径),并确定核心受众(如政策制定者、企业高管或投资者)。', 'completion_criteria': '确保研究问题具体且聚焦,并能够满足目标受众的信息需求。', 'common_issues': '目标过于宽泛或模糊,导致后续章节结构松散。', 'solutions': '通过前期调研和与利益相关方沟通,不断细化研究范围和重点。'}, {'step': 2, 'action': '构建逻辑清晰的章节结构', 'output': '按照“引言→现状分析→挑战与机遇→解决方案→案例启示→展望与建议”的顺序组织内容。', 'completion_criteria': '每个章节有明确的主题,且各部分之间逻辑连贯,无明显信息重复或遗漏。', 'common_issues': '章节间缺乏过渡或层次感,读者难以理解整体脉络。', 'solutions': '使用小标题、图表和总结段落强化结构化表达,确保每部分内容紧密衔接。'}, {'step': 3, 'action': '优先展示核心结论', 'output': '在开头部分直接呈现关键发现(如制浆造纸行业碳排放占比及主要来源),并通过视觉化手段(如图表)突出显示。', 'completion_criteria': '核心结论易于识别,且能快速抓住读者注意力。', 'commonissues': '过多背景铺垫掩盖了核心观点。', 'solutions': '采用倒金字塔写作法,将最重要的信息放在最前面,辅以简洁有力的数据支持。'}, {'step': 4, 'action': '平衡定量与定性信息', 'output': '结合统计数据(如市场规模增长率)、技术细节(如CCUS应用)和专家意见(如国际脱碳案例),形成全面视角。', 'completion_criteria': '定量数据准确可靠,定性分析深入透彻,两者相辅相成。', 'common_issues': '偏重某一类信息,导致分析失衡。', 'solutions': '预先分配不同类型信息的比例,并根据实际需要灵活调整。'}, {'step': 5, 'action': '逐层递进建立论证逻辑', 'output': '从宏观趋势(如全球气候变化挑战)到微观实践(如企业节能改造),逐步展开分析,确保每一层都为下一层提供支撑。', 'completion_criteria': '论证过程条理分明,读者可以轻松跟随思路推进。', 'common_issues': '跳跃式论述使逻辑断裂。', 'solutions': '利用流程图或思维导图梳理论证路径,确保每一步都有据可依。'}, {'step': 6, 'action': '适时引入风险因素', 'output': '在讨论挑战时详细阐述潜在风险(如供应链中断、技术成本高企),并提出应对策略。', 'completion_criteria': '风险描述客观中立,解决方案切实可行。', 'common_issues': '忽视风险或仅简单提及,缺乏实质性探讨。', 'solutions': '设立专门的风险管理模块,系统化地识别、评估和缓解风险。'}, {'step': 7, 'action': '处理不确定性和多种可能性', 'output': '通过情景模拟(如不同减排路径的效果对比)和敏感性分析(如能源价格波动对成本的影响),探索多种未来场景。', 'completion_criteria': '不确定性被充分考虑,且提供了适应性强的行动指南。', 'common_issues': '假设条件过于理想化,忽略外部环境变化。', 'solutions': '定期更新模型参数,保持灵活性以应对新情况。'}, {'step': 8, 'action': '提炼跨任务复用的经验框架', 'output': '总结出一套通用方法论(如“全产业链协同减碳”模式),供其他类似项目参考。', 'completion_criteria': '框架具备高度适用性,能在不同场景下有效实施。', 'common_issues': '经验总结流于表面,缺乏操作性。', 'solutions': '邀请多方参与验证,确保框架既理论扎实又实践可行。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 07:38:31", "modified_time": "2025-08-14 07:38:31", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "9188342e9c964fb6954f801cdff340b2", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究、政策影响分析、房地产市场趋势预测等任务,尤其是需要结合定量数据与定性分析,并评估政策变革对市场结构和参与者行为的长期及短期影响的场景。", "content": "[{'step': 1, 'action': '明确研究主题与目标', 'output': '形成清晰的研究问题和目标,例如:现房销售制度的历史演变、现状及未来影响。', 'criteria_for_completion': '研究问题需具体且可操作,能够直接指导后续章节安排;目标应涵盖政策背景、市场现状、案例分析及未来展望。', 'common_issues': '研究范围过于宽泛或模糊,导致后续章节难以聚焦。', 'solutions': '在初期阶段通过团队讨论或专家咨询,确认核心研究问题和边界。'}, {'step': 2, 'action': '收集并整理基础数据与文献', 'output': '形成完整的数据集(如现房销售占比、价格差异等)和政策文件汇编(如海南现房销售政策)。', 'criteria_for_completion': '数据覆盖全面,来源权威可靠;文献包括政策法规、行业报告及学术研究,且内容相关性强。', 'common_issues': '数据不完整或过时,文献缺乏权威性或时效性。', 'solutions': '优先选择官方统计机构、政府网站及知名研究机构发布的数据和文献,并进行交叉验证。'}, {'step': 3, 'action': '设计章节结构并分配信息权重', 'output': '确定章节顺序(如现状→历史→案例→影响),并明确各部分的核心信息展示优先级。', 'criteria_for_completion': '章节逻辑连贯,信息分布合理,核心结论在摘要和关键章节中突出。', 'common_issues': '章节间逻辑断裂,信息堆砌导致重点不突出。', 'solutions': '采用“总-分-总”结构,确保摘要和结论部分高度概括核心观点。'}, {'step': 4, 'action': '建立论证逻辑并展开分析', 'output': '通过历史复盘、案例分析和数据对比,层层递进地论证核心观点(如现房销售对市场的多方面影响)。', 'criteria_for_completion': '论证路径清晰,每一论点均有数据或案例支撑,风险因素适时提出。', 'common_issues': '论证过程跳跃,缺乏数据支持或忽视反面观点。', 'solutions': '使用时间轴、因果链等工具梳理逻辑,同时引入多方视角以增强说服力。'}, {'step': 5, 'action': '平衡定量与定性信息', 'output': '将定量数据(如现房销售占比、价格差异)与定性分析(如政策背景、市场反馈)有机结合,形成综合洞察。', 'criteria_for_completion': '定量数据准确且可视化呈现,定性分析深入且具有前瞻性。', 'common_issues': '定量与定性信息割裂,缺乏整合性分析。', 'solutions': '通过图表和文字结合的方式,直观展示数据与分析之间的关联。'}, {'step': 6, 'action': '处理不确定性和多种可能性', 'output': '针对政策落地进程、市场反应等不确定性,提出情景化假设及应对策略。', 'criteria_for_completion': '不确定性被清晰识别,不同情景下的潜在结果有详细说明。', 'common_issues': '对未来变化的分析流于表面,未考虑多种可能性。', 'solutions': '构建情景分析框架,结合敏感性测试,评估不同变量对结果的影响。'}, {'step': 7, 'action': '总结核心结论并提出行动建议', 'output': '提炼核心发现(如现房销售推动高质量发展),并为不同利益相关方(如房企、政府、投资者)提供具体建议。', 'criteria_for_completion': '结论简明扼要,建议具有针对性和可操作性。', 'common_issues': '结论空洞,建议缺乏实际指导意义。', 'solutions': '结合前期分析成果,确保建议基于数据和逻辑推导。'}, {'step': 8, 'action': '撰写风险提示与免责声明', 'output': '列出可能的风险因素(如政策执行不及预期、市场下行风险)及免责条款。', 'criteria_for_completion': '风险提示全面且客观,免责声明符合合规要求。', 'common_issues': '风险提示遗漏重要变量,免责声明表述不严谨。', 'solutions': '参考类似报告规范,确保风险提示和免责声明语言精确无歧义。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 07:39:37", "modified_time": "2025-08-14 07:39:37", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "ac3aa171b22549d484530f54c1da37a6", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究、投资标的分析以及宏观经济与能源市场相关的预测性报告,特别是涉及原油等大宗商品的供需分析和价格趋势预测。这类任务需要整合多来源数据(如IEA、EIA、OPEC等权威机构的月报),并结合定量及定性分析,以得出全面且具有前瞻性的结论。", "content": "[{'step': 1, 'action': '明确研究主题与目标,定义核心问题', 'output': '清晰的研究目标和范围说明书,包括需回答的关键问题(如:未来一年全球原油供需变化趋势、库存水平预测等)。', 'how_to_judge_completion': '确保研究问题具体化,能够指导后续数据收集和分析工作,例如明确需要关注的时间段(年度/季度)、区域划分(OECD/非OECD国家)及主要变量(供给、需求、库存等)。', 'common_issues_and_solutions': [{'issue': '研究目标过于宽泛或模糊。', 'solution': '通过头脑风暴与团队讨论,将大问题拆解为若干小问题,并根据优先级排序。'}]}, {'step': 2, 'action': '收集并整理基础数据,构建数据框架', 'output': '涵盖历史数据、当前数据及权威机构预测的完整数据集,包括价格、库存、供需预测等关键指标。', 'how_to_judge_completion': '数据覆盖全面且来源可靠,能够支持后续章节的展开,同时对不同来源的数据进行一致性校验。', 'common_issues_and_solutions': [{'issue': '数据来源不一致导致结果冲突。', 'solution': '优先选择权威机构发布的最新数据,并注明数据差异原因(如统计口径不同)。'}]}, {'step': 3, 'action': '按逻辑顺序组织章节结构,突出重点信息', 'output': '包含价格回顾、库存分析、供需总览及分区域细化分析的报告初稿,章节安排符合“从整体到局部”的逻辑。', 'how_to_judge_completion': '每部分内容紧密围绕研究目标展开,核心结论在前几章即得到体现,次要细节则逐步递进补充。', 'common_issues_and_solutions': [{'issue': '章节结构混乱,读者难以抓住重点。', 'solution': '采用“倒金字塔”原则,先呈现最重要的结论,再逐步深入解释支撑这些结论的证据。'}]}, {'step': 4, 'action': '运用多层次论证方法建立观点,平衡定量与定性分析', 'output': '基于三大机构(IEA、EIA、OPEC)预测数据,结合图表展示供需变化趋势,并辅以地缘政治、经济环境等定性因素解读。', 'how_to_judge_completion': '论证过程条理清晰,定量分析有充分数据支撑,定性分析能有效填补数据空白或不确定性。', 'common_issues_and_solutions': [{'issue': '过度依赖单一类型分析,缺乏全面视角。', 'solution': '在定量分析中加入定性解读(如政策影响、突发事件),并在定性分析中引用相关量化指标作为佐证。'}]}, {'step': 5, 'action': '识别并评估风险因素,提出应对策略', 'output': '详细列出潜在风险因素(如地缘政治、宏观经济波动、新能源替代等),并针对每种风险提供可能的影响路径及缓解措施。', 'how_to_judge_completion': '风险因素覆盖全面,不仅限于短期波动,还包含长期结构性变化;提出的应对策略具有可操作性。', 'common_issues_and_solutions': [{'issue': '忽视某些重要但低频发生的风险。', 'solution': '参考历史案例,系统梳理所有可能的风险点,并根据其发生的概率和潜在影响进行分级管理。'}]}, {'step': 6, 'action': '总结核心发现,提炼投资建议', 'output': '一份简明扼要的核心结论摘要,结合行业评级(如“看好”或“看淡”)给出明确的投资建议。', 'how_to_judge_completion': '核心结论与前期分析保持一致,投资建议基于扎实的分析而非主观臆断。', 'common_issues_and_solutions': [{'issue': '核心结论与正文内容脱节。', 'solution': '重新审阅全文,确保摘要部分准确反映正文中的主要论点和数据支持。'}]}, {'step': 7, 'action': '设计可视化工具,优化信息传递效果', 'output': '一系列高质量图表(如折线图、柱状图、饼图等),直观呈现复杂数据关系。', 'how_to_judge_completion': '图表简洁美观,标注清晰,能够快速帮助读者理解关键信息。', 'common_issues_and_solutions': [{'issue': '图表过多或过少,影响阅读体验。', 'solution': '根据内容重要性和复杂度决定是否使用图表,并控制图表数量以避免信息冗余。'}]}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 07:40:56", "modified_time": "2025-08-14 07:40:56", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "509493c9a75d44a8be7ac14ceac084b8", "experience_type": "text", "when_to_use": "此规划框架适用于金融行业深度研究、投资标的分析、理财产品市场动态跟踪、风险评估报告等需要综合定量与定性信息的任务。尤其适合需要在短时间内对市场变化作出快速反应并提供决策支持的场景,例如周度或月度市场跟踪报告。", "content": "[{'step': 1, 'action': '明确报告目标和受众', 'output': '确定报告的核心主题(如银行理财市场动态)和目标读者(如机构投资者、监管机构等),以决定内容的重点和语言风格。', 'completion_criteria': '能够清晰描述报告的目标,并列出关键受众的需求。', 'common_issues': '可能忽略特定受众的关注点,导致内容偏离需求。', 'solutions': '通过与潜在用户沟通或参考类似报告确定受众关注的核心问题。'}, {'step': 2, 'action': '收集和整理数据', 'output': '从公开数据源(如Wind、普益标准)、政策公告、市场新闻等渠道获取最新数据,分类为定量(收益率、破净率等)和定性(政策解读、创新动态)两类。', 'completion_criteria': '数据覆盖全面且准确,已按类别整理成表格或图表形式。', 'common_issues': '数据来源不完整或滞后,影响分析的时效性和准确性。', 'solutions': '建立固定的数据采集流程,优先选择权威数据供应商并定期验证其可靠性。'}, {'step': 3, 'action': '设计章节结构和逻辑框架', 'output': '根据信息的重要性和逻辑关系安排章节顺序:先展示核心结论(如收益率表现),再深入分析背景(如政策变化)和细节(如同业创新动态)。', 'completion_criteria': '章节结构合理,重点突出,能够引导读者逐步理解报告内容。', 'common_issues': '章节之间逻辑松散,信息堆砌而缺乏递进。', 'solutions': '提前绘制逻辑图,确保每个章节服务于整体目标,避免冗余信息。'}, {'step': 4, 'action': '撰写核心内容', 'output': '按照章节框架逐项展开:监管政策解读、市场收益率分析、产品创新案例等,结合图表和数据增强说服力。', 'completion_criteria': '每部分内容完整、论据充分,能够支撑核心观点。', 'common_issues': '分析过于表面化,缺乏深度;或过度依赖数据,忽视定性分析。', 'solutions': '引入专家访谈或文献支持,补充背景知识;平衡定量与定性信息的比例。'}, {'step': 5, 'action': '处理不确定性和风险提示', 'output': '在适当位置提出风险因素(如信用利差走扩对破净率的影响),并说明多种可能性,保持客观中立。', 'completion_criteria': '风险提示具体且基于事实,未夸大或隐瞒潜在问题。', 'common_issues': '风险提示模糊或遗漏重要风险点。', 'solutions': '制定标准化的风险评估清单,逐一核对潜在风险。'}, {'step': 6, 'action': '审阅和优化表达', 'output': '检查语言是否简洁明了,图表是否直观易懂,确保报告符合专业规范。', 'completion_criteria': '报告无明显语法错误,图表清晰标注,整体阅读体验流畅。', 'common_issues': '术语使用不当或表述不够精准。', 'solutions': '邀请同行评审,特别关注专业术语的准确性。'}, {'step': 7, 'action': '发布与反馈收集', 'output': '将报告发送给目标受众,并通过问卷调查或直接沟通收集反馈。', 'completion_criteria': '收到至少一次正式反馈,用于改进未来报告。', 'common_issues': '缺乏系统化的反馈机制,难以持续优化。', 'solutions': '设置固定的反馈渠道(如邮件模板或在线表单)。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 07:42:23", "modified_time": "2025-08-14 07:42:23", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "3ac0a43cd1ad4f95a3a72a24413d653e", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及区域产业政策评估等任务。尤其适合于需要从宏观到微观全面解析某一特定行业的场景,例如智能家电产业的现状、趋势及未来潜力分析,或针对某一地区产业链布局的研究。", "content": "[{'step': 1, 'action': '明确分析目标与逻辑框架', 'output': '形成报告的主题和核心逻辑路径,包括行业背景、发展历史、当前状况、未来展望等关键模块。', 'completion_criteria': '能够清晰回答核心问题(如:为什么安徽智能家电产业值得关注?)并构建出层次分明的章节结构。', 'common_issues': '可能忽视对整体逻辑连贯性的把控,导致章节之间缺乏递进关系。', 'solutions': '在初始阶段绘制思维导图,确保各章节内容紧密衔接,且服务于核心结论。'}, {'step': 2, 'action': '数据与信息收集,构建定量与定性基础', 'output': '整理相关统计数据、政策文件、企业案例和发展历程,形成系统化的信息库。', 'completion_criteria': '数据覆盖全面,来源可靠;定性分析基于权威资料,且能有效支持后续论证。', 'common_issues': '数据分散或不完整,难以支撑深入分析。', 'solutions': '提前制定数据需求清单,利用多渠道(如政府公告、行业协会、上市公司公告)获取信息,并进行交叉验证。'}, {'step': 3, 'action': '分层递进式展开论述,逐步建立观点', 'output': '按照时间线、产业要素、技术驱动、市场趋势等维度,分步骤递进建立核心论点。', 'completion_criteria': '每一部分的论述逻辑清晰,能够自然过渡到下一章节,最终汇聚成完整的分析结论。', 'common_issues': '可能存在论证跳跃,未能充分铺垫观点。', 'solutions': '在每章结尾设置小结,回顾本章核心要点并引出下一章主题,确保递进关系顺畅。'}, {'step': 4, 'action': '结合定量与定性分析,突出核心结论', 'output': '通过图表、数据对比和案例剖析,强化核心结论的说服力,同时平衡历史回顾与未来预测。', 'completion_criteria': '核心结论有明确的数据或案例支撑,且对未来趋势的预测具备合理性。', 'common_issues': '过于依赖单一类型信息,导致分析不够全面。', 'solutions': '采用‘数据+解读’模式,确保定量与定性信息相辅相成,同时引入专家访谈或行业报告补充视角。'}, {'step': 5, 'action': '识别风险因素并提出应对策略', 'output': '列出潜在风险(如政策、市场、技术),并结合实际情况提出针对性建议。', 'completion_criteria': '风险提示具体且有依据,应对策略具有可操作性。', 'common_issues': '风险描述过于笼统,缺乏实际应对措施。', 'solutions': '结合历史案例和行业动态,量化风险影响,并提供切实可行的解决方案。'}, {'step': 6, 'action': '总结与展望,提炼行动指南', 'output': '总结主要发现,提炼未来发展路径,并给出具体的实施建议。', 'completion_criteria': '总结简明扼要,展望具有前瞻性,行动指南明确且可执行。', 'common_issues': '总结流于形式,缺乏实质性指导意义。', 'solutions': '围绕政策、技术、市场三大维度提炼具体发展方向,并附上量化目标和时间节点。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 07:43:55", "modified_time": "2025-08-14 07:43:55", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "83b65234674f42b8855887abb0e08ea4", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析、市场趋势报告以及政策影响评估等金融分析任务。尤其适合需要综合定量与定性信息、历史与预测数据,并涵盖产业链、市场规模、竞争格局等多维度内容的复杂分析。", "content": "[{'step': 1, 'action': '明确分析目标与核心问题', 'output': '形成清晰的研究问题清单,例如市场规模变化的原因、竞争格局的关键驱动因素等。', 'completion_criteria': '研究问题清单应覆盖所有关键维度(如产业链、市场规模、政策影响等),并得到客户或团队确认。', 'common_issues': '研究问题过于宽泛或模糊。', 'solutions': '通过头脑风暴和初步资料收集,细化问题范围,确保每个问题具体且可操作。'}, {'step': 2, 'action': '构建章节结构与信息优先级', 'output': '设计报告框架,包括行业定义、分类、特征、发展历程、市场规模、竞争格局、政策梳理等模块,并确定信息展示优先级。', 'completion_criteria': '章节安排逻辑清晰,优先突出核心结论(如市场规模、增长驱动因素等),并确保各模块间有自然过渡。', 'common_issues': '章节结构松散或重点不突出。', 'solutions': '围绕核心结论组织内容,使用金字塔原理,先结论后支撑细节。'}, {'step': 3, 'action': '收集与整理数据', 'output': '获取定量数据(如市场规模、增长率)和定性信息(如政策解读、消费者行为趋势),并进行分类整理。', 'completion_criteria': '数据来源可靠(如官方统计、行业报告),且数据覆盖所有关键维度(如历史数据、预测数据、上下游产业链等)。', 'common_issues': '数据不完整或来源不可靠。', 'solutions': '交叉验证数据来源,优先选择权威机构发布的数据;对于缺失数据,采用合理假设补充。'}, {'step': 4, 'action': '建立论证逻辑与递进关系', 'output': '通过层层递进的方式,从宏观背景到微观细节,逐步推导出核心结论。例如,从宏观经济形势到消费者行为,再到市场规模的变化。', 'completion_criteria': '论证路径清晰,每一步推导都有充分的数据或理论支持,且逻辑连贯。', 'common_issues': '论证跳跃性大或缺乏数据支持。', 'solutions': '使用“原因-结果”链条,确保每一步推导都基于前一步的结论;引入图表辅助说明复杂关系。'}, {'step': 5, 'action': '平衡定量与定性信息', 'output': '在报告中合理分布定量数据(如市场规模、增长率)和定性分析(如政策解读、消费者偏好),并通过图表和文字结合的方式呈现。', 'completion_criteria': '定量与定性信息比例适中,且两者之间有明确关联,能够共同支持核心结论。', 'common_issues': '过度依赖某一种类型的信息,导致分析片面。', 'solutions': '制定信息分布计划,确保每部分都有定量与定性信息的结合;定期回顾信息分布是否均衡。'}, {'step': 6, 'action': '处理不确定性与风险因素', 'output': '在适当位置(如市场规模预测或政策影响分析)提出不确定性来源,并提供多种可能性的分析。', 'completion_criteria': '风险因素被明确列出,并通过情景分析或敏感性分析等方式量化其潜在影响。', 'common_issues': '忽略不确定性或对风险描述过于笼统。', 'solutions': '引入情景分析(如乐观、中性、悲观情景)和敏感性分析,量化不同假设下的结果差异。'}, {'step': 7, 'action': '总结核心结论与行动建议', 'output': '提炼报告的核心结论,并根据分析结果提出具体的行动建议(如投资机会、风险规避策略等)。', 'completion_criteria': '核心结论简洁明了,行动建议具有针对性和可操作性。', 'common_issues': '结论冗长或建议缺乏实际指导意义。', 'solutions': '将核心结论浓缩为3-5个关键点,并确保行动建议基于数据分析得出。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 07:45:19", "modified_time": "2025-08-14 07:45:19", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "fa1f18a07cf14daca56311b4d4a56054", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及房地产与医疗科技交叉领域的战略咨询报告。尤其适合需要结合定量和定性数据,同时涉及长期趋势预测和风险评估的复杂任务。", "content": "[{'step': 1, 'action': '明确研究主题和目标受众', 'output': '一份清晰的研究问题定义文档,包括核心研究主题(如生物技术对房地产的影响)、目标受众(如投资者或开发商)以及预期成果(如市场机会识别或投资建议)。', 'evaluation_criteria': '是否能够准确界定研究范围并确保与客户需求一致;是否涵盖所有关键利益相关方的需求。', 'common_issues': '研究范围过于宽泛或模糊,导致后续分析难以聚焦。', 'solutions': '通过与客户或利益相关方进行初步访谈,确认研究边界和优先级。'}, {'step': 2, 'action': '收集和整理基础数据', 'output': '一个包含定量和定性信息的数据集,例如市场规模、增长率、政策支持、技术趋势等,并附带来源标注。', 'evaluation_criteria': '数据是否全面且可靠;是否覆盖了历史、现状及未来预测三个维度。', 'common_issues': '数据来源单一或过时,无法反映最新动态。', 'solutions': '多渠道验证数据,包括权威机构报告、行业专家访谈和公开数据库。'}, {'step': 3, 'action': '构建逻辑框架以组织内容', 'output': '章节结构草稿,包括引言、背景分析、核心发现、案例研究、结论与建议等部分。', 'evaluation_criteria': '章节安排是否符合逻辑递进关系;是否能有效引导读者理解复杂议题。', 'common_issues': '章节顺序混乱,导致信息传递不流畅。', 'solutions': '采用金字塔原理,从宏观到微观逐步展开,确保每部分内容服务于整体叙事。'}, {'step': 4, 'action': '设计视觉化展示方案', 'output': '图表、图像和表格的设计初稿,用于直观呈现关键数据点和趋势。', 'evaluation_criteria': '视觉元素是否增强了信息可读性;是否避免了冗余或不必要的装饰。', 'common_issues': '图表过于复杂,掩盖了核心信息。', 'solutions': '使用简洁明了的图表形式,并为每个图表添加简短说明文字。'}, {'step': 5, 'action': '撰写主体内容并整合分析', 'output': '完整的报告初稿,包括详细的背景分析、数据驱动的核心观点阐述、案例支持以及对未来趋势的预测。', 'evaluation_criteria': '内容是否条理清晰;是否平衡了定量与定性信息的比例。', 'common_issues': '信息堆砌而缺乏洞察力,未能提炼出有价值的结论。', 'solutions': '在每一节末尾加入小结段落,总结该部分的主要发现及其意义。'}, {'step': 6, 'action': '突出核心结论并提出行动建议', 'output': '强调核心结论的摘要部分,以及针对不同利益相关方的具体行动建议清单。', 'evaluation_criteria': '核心结论是否直击要害;行动建议是否切实可行。', 'common_issues': '结论泛泛而谈,缺乏针对性。', 'solutions': '结合实际案例和数据支撑结论,确保建议具有操作性。'}, {'step': 7, 'action': '评估风险因素并讨论不确定性', 'output': '专门的风险评估章节,列出潜在挑战和应对策略。', 'evaluation_criteria': '是否全面考虑了内外部风险;是否提供了多种情景下的解决方案。', 'common_issues': '忽略某些重要风险,导致建议不够稳健。', 'solutions': '利用SWOT分析法系统梳理风险,并邀请领域专家审阅补充。'}, {'step': 8, 'action': '最终审查与优化', 'output': '经过校对和格式调整后的终稿,确保语言精炼、排版美观且无明显错误。', 'evaluation_criteria': '报告整体质量是否达到专业水准;是否满足最初设定的目标。', 'common_issues': '因时间紧迫导致细节疏漏,影响最终交付效果。', 'solutions': '预留充足时间进行多轮审阅,并由团队成员交叉检查。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 07:47:07", "modified_time": "2025-08-14 07:47:07", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "a558eb09e86c481e8bbf1bb601830759", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究、投资标的分析、风险评估报告等金融分析任务,尤其在需要结合宏观政策、行业动态与个股基本面进行综合判断时效果显著。", "content": "[{'step': 1, 'action': '明确分析目标和范围', 'output': '定义清晰的研究主题及核心问题,如本周电新&公用行业的表现、政策影响、重点公司前景等。', 'completion_criteria': '能够用一句话概括分析的核心目标,并确定涵盖的行业细分领域(如光伏、风电、锂电、公用事业)。', 'common_issues': '目标过于宽泛或模糊,导致后续分析缺乏聚焦点。', 'solutions': '通过初步资料梳理,提炼出关键驱动因素,确保目标具体且可操作。'}, {'step': 2, 'action': '收集并整理数据和信息', 'output': '形成包含市场行情、行业新闻、公司公告、产业链价格趋势等多维度的数据集。', 'completion_criteria': '数据覆盖全面,包括定量指标(如涨跌幅、EPS、PE)和定性信息(如政策解读、行业动态),并按类别分类存储。', 'common_issues': '数据来源单一或不完整,可能遗漏重要信息。', 'solutions': '采用多种权威数据源(如Wind、第三方咨询机构)交叉验证,并建立固定的信息采集模板。'}, {'step': 3, 'action': '构建章节结构以组织内容', 'output': '设计逻辑清晰的报告框架,通常包括行情回顾、行业动态、行业跟踪、投资建议和风险提示等部分。', 'completion_criteria': '各章节之间逻辑连贯,信息分布合理;优先展示核心结论和高价值信息。', 'common_issues': '章节安排杂乱无章,导致读者难以快速抓住重点。', 'solutions': '遵循“从整体到局部”的原则,先呈现大盘走势和行业排名,再深入具体领域和个股分析。'}, {'step': 4, 'action': '层层递进建立观点', 'output': '通过历史数据分析、政策解读、技术进展等逐步推导出投资建议和风险预警。', 'completion_criteria': '每个观点都有充分的事实依据支撑,论证路径清晰,避免跳跃式推理。', 'common_issues': '论据不足或过度依赖预测,削弱说服力。', 'solutions': '结合定量与定性分析,引入专家访谈、案例研究等补充材料增强可靠性。'}, {'step': 5, 'action': '提出风险因素并讨论不确定性', 'output': '系统梳理宏观经济、政策变化、市场竞争等潜在风险,并提供应对策略。', 'completion_criteria': '风险提示全面且具有针对性,同时对不确定性的处理方式透明化。', 'common_issues': '忽视某些隐性风险或未充分说明其影响程度。', 'solutions': '参考过往类似情境下的实际案例,量化风险发生的可能性及其后果。'}, {'step': 6, 'action': '生成最终报告并优化表达', 'output': '撰写完整的分析报告,包括图表、表格和文字说明,确保信息直观易懂。', 'completion_criteria': '报告语言简洁专业,图表设计美观且功能性强,便于决策者快速获取关键信息。', 'common_issues': '表述冗长或图表复杂,降低阅读体验。', 'solutions': '使用统一的视觉风格和简明的语言,必要时增加注释和小结帮助理解。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 07:48:15", "modified_time": "2025-08-14 07:48:15", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "cbbb400c79164da2a2921c624e79b9d2", "experience_type": "text", "when_to_use": "适用于行业深度研究、政策解读、投资标的分析、风险评估报告等需要系统梳理背景、法规或市场动态的任务。", "content": "[{'step': 1, 'action': '明确分析目标与受众需求', 'output': '形成初步的问题清单,包括受众关心的核心议题(如政策影响、市场变化等)。', 'completion_criteria': '问题清单覆盖所有关键维度,能够指导后续资料搜集。', 'common_issues': ['目标过于宽泛,缺乏针对性;忽视受众实际需求'], 'solutions': ['细化目标范围,与利益相关方沟通确认需求']}, {'step': 2, 'action': '收集并整理基础信息', 'output': '生成包含政策原文、历史背景、统计数据的基础材料库。', 'completion_criteria': '信息来源可靠,涵盖定量与定性两类数据。', 'common_issues': ['信息不完整或过时;忽略非官方渠道的重要线索'], 'solutions': ['交叉验证多方数据源,补充专家访谈或第三方报告']}, {'step': 3, 'action': '构建逻辑框架与章节结构', 'output': '设计‘总-分-总’的报告结构,划分背景、核心内容、影响分析、总结等模块。', 'completion_criteria': '各模块之间逻辑连贯,无明显遗漏或冗余。', 'common_issues': ['结构混乱,缺乏层次感;重点不突出'], 'solutions': ['参考经典案例,邀请同行评审优化结构']}, {'step': 4, 'action': '撰写核心内容并嵌入定量/定性分析', 'output': '完成条例解读、市场现状描述及预测分析,确保每项论点有数据支撑。', 'completion_criteria': '核心结论清晰,数据图表直观易懂。', 'common_issues': ['数据分析浅显,无法支撑观点;图表过多导致阅读疲劳'], 'solutions': ['精选高价值数据,简化复杂图表']}, {'step': 5, 'action': '评估风险与不确定性', 'output': '识别潜在风险因素,将其融入中长期影响分析,避免单独放大负面效应。', 'completion_criteria': '风险讨论客观公正,不偏离整体基调。', 'common_issues': ['风险评估过于悲观或乐观;缺乏应对建议'], 'solutions': ['引入多情景模拟,提供灵活应对策略']}, {'step': 6, 'action': '提炼核心结论与未来展望', 'output': '总结政策或事件的主要影响,展望未来发展趋势,给出明确建议。', 'completion_criteria': '结论简洁有力,具有实际操作性。', 'common_issues': ['结论空洞,缺乏实质性建议;展望过于理想化'], 'solutions': ['回归原始问题清单,确保建议回应核心关切']}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 07:49:36", "modified_time": "2025-08-14 07:49:36", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "b5a07df3e83444a383ec8a2f1b6bf98b", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、创新药物动态更新分析、投资标的评估以及跨领域疗法潜力评估等任务。特别适合需要结合定量和定性数据,从研发进展到市场前景进行全面分析的场景。", "content": "[{'step': 1, 'action': '明确分析目标与范围', 'output': '确定核心主题(如GLP-1+Amylin疗法)及分析维度(市场表现、临床数据、竞争格局等)。', 'completion_criteria': '主题清晰且可操作;范围涵盖所有关键维度,无明显遗漏。', 'common_issues': '范围过于宽泛或狭窄,导致信息过载或不足。', 'solutions': '通过初步文献调研和团队讨论,聚焦于最具价值的研究方向。'}, {'step': 2, 'action': '收集并整理基础数据', 'output': '构建数据表格或图表,包括定量数据(如临床试验结果、市场增长率)和定性信息(如专家观点、政策趋势)。', 'completion_criteria': '数据来源可靠、覆盖全面,且经过初步清洗和分类。', 'common_issues': '数据不完整或质量参差不齐。', 'solutions': '优先选择权威数据库和公开报告,必要时联系相关机构获取补充资料。'}, {'step': 3, 'action': '设计章节结构以优化信息展示', 'output': '按照“背景介绍→核心发现→风险提示→结论与展望”的逻辑组织内容。', 'completion_criteria': '章节间逻辑连贯,信息层次分明,重点突出。', 'common_issues': '章节安排混乱,导致读者难以抓住核心信息。', 'solutions': '使用思维导图提前规划内容框架,并邀请同事进行预审反馈。'}, {'step': 4, 'action': '逐层递进建立论证逻辑', 'output': '从宏观行业趋势切入,逐步深入至具体疗法机制、临床数据解读和市场预测,最后总结潜在机会与挑战。', 'completion_criteria': '每一步推导合理,前后呼应,支持最终结论。', 'common_issues': '论证跳跃性强,缺乏过渡衔接。', 'solutions': '确保每段落开头有简短承上启下的句子,增强逻辑流畅性。'}, {'step': 5, 'action': '平衡定量与定性信息分布', 'output': '在每个主要部分中嵌入定量数据(如减重效果百分比)和定性分析(如疗法优势对比),并通过可视化工具(如柱状图、折线图)辅助呈现。', 'completion_criteria': '两类信息比例适中,既不过分依赖数据堆砌,也不忽视实证支持。', 'common_issues': '信息失衡,导致分析显得单薄或冗长。', 'solutions': '设定每部分的信息密度上限,并定期回顾整体篇幅分配。'}, {'step': 6, 'action': '适时提出风险因素并处理不确定性', 'output': '在核心发现后单独设立“风险提示”部分,列出可能影响未来发展的关键变量(如仿制药竞争、研发失败风险),并对多种可能性进行情景假设分析。', 'completion_criteria': '风险描述具体、量化,情景假设覆盖全面。', 'common_issues': '风险因素被弱化或忽略,影响决策参考价值。', 'solutions': '采用SWOT分析法系统梳理内外部风险,并结合历史案例佐证其可能性。'}, {'step': 7, 'action': '提炼核心结论与行动建议', 'output': '用简洁语言概括主要发现(如CagriSema减重效果优于单一疗法),并提供明确的投资评级或策略建议(如“领先大市-B”)。', 'completion_criteria': '结论直击要害,建议切实可行,便于后续执行。', 'common_issues': '结论模糊或建议脱离实际。', 'solutions': '邀请非专业背景人士试读,确认表述是否通俗易懂且具有指导意义。'}, {'step': 8, 'action': '校对与格式优化', 'output': '检查语法错误、统一术语表达、调整排版风格,确保报告专业美观。', 'completion_criteria': '文档无明显瑕疵,阅读体验良好。', 'common_issues': '格式不一致或细节疏漏降低整体质量。', 'solutions': '制定标准化模板,借助自动化工具(如Grammarly)提高效率。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 07:51:01", "modified_time": "2025-08-14 07:51:01", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "4d739f83fa444cc4bb98153f00c75246", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、政策影响分析、投资标的筛选与推荐等类型的金融分析任务。尤其适合需要结合宏观政策、技术发展趋势、产业落地场景以及资本市场联动的综合性研究报告。", "content": "[{'step': 1, 'action': '明确核心事件及背景信息', 'output': '提炼并概述关键事件(如政策发布、技术突破等)及其对行业的潜在影响,形成报告的开篇部分。', 'completion_criteria': '能够清晰回答‘发生了什么’和‘为什么重要’的问题,确保读者快速理解背景。', 'common_issues': '可能忽略事件的宏观背景或细节支撑,导致信息不够全面。', 'solutions': '通过多源信息验证(如政府文件、行业新闻、专家访谈)补充背景信息,确保全面性。'}, {'step': 2, 'action': '构建章节结构,分层次展开分析', 'output': '按照‘政策解读—技术路径—应用场景—市场潜力’的逻辑顺序组织内容,形成递进式分析框架。', 'completion_criteria': '每个章节应有明确的主题,且前后逻辑连贯,确保整体结构紧凑。', 'common_issues': '章节之间可能存在重复或逻辑断层,导致信息冗余或跳跃感。', 'solutions': '在撰写前绘制思维导图,明确各章节的核心内容与衔接点,确保逻辑流畅。'}, {'step': 3, 'action': '优先展示定量数据与核心结论', 'output': '在每一章节中,优先呈现定量数据(如市场规模、补贴金额)和核心结论,定性分析作为补充说明。', 'completion_criteria': '读者能在每部分开头快速抓住重点信息,无需深入阅读即可理解核心观点。', 'common_issues': '过度依赖定性描述,导致信息缺乏说服力。', 'solutions': '尽量引用权威数据来源,并通过图表形式直观展示关键数据。'}, {'step': 4, 'action': '采用‘模型驱动’论证路径,层层递进建立观点', 'output': '围绕技术攻关、平台建设、应用示范等维度,逐步揭示产业发展路径及其可行性。', 'completion_criteria': '论证过程需体现因果关系,确保观点具有逻辑支撑。', 'common_issues': '论证链条可能断裂,导致观点孤立无援。', 'solutions': '使用‘问题—解决方案—预期效果’的三段式逻辑,强化论证连贯性。'}, {'step': 5, 'action': '适时提出风险因素,保持客观性', 'output': '在核心分析之后,单独列出风险提示部分,涵盖宏观经济、技术进展、商业化进程等方面的风险。', 'completion_criteria': '风险提示应具体且可操作,避免泛泛而谈。', 'common_issues': '风险提示过于笼统,无法为决策提供实际参考。', 'solutions': '针对每个风险点提供应对策略或观察指标,增强实用性。'}, {'step': 6, 'action': '总结投资建议,突出行动指引', 'output': '基于前述分析,明确推荐的投资标的及理由,形成具体的行动建议。', 'completion_criteria': '投资建议应直接关联核心分析结论,且具备可执行性。', 'common_issues': '投资建议与分析内容脱节,缺乏针对性。', 'solutions': '确保投资标的选择依据与政策、技术、市场分析紧密相关,避免随意推荐。'}, {'step': 7, 'action': '校验信息准确性与完整性', 'output': '核对所有引用数据、政策文件、公司信息等内容的真实性与时效性。', 'completion_criteria': '报告中所有信息均经过多方验证,无明显错误或遗漏。', 'common_issues': '引用过时数据或非权威信息,降低报告可信度。', 'solutions': '建立信息核查清单,逐一确认数据来源与更新时间。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 07:52:09", "modified_time": "2025-08-14 07:52:09", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "5660bd36d84047f581df7c0a4381f52d", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及市场趋势评估类的金融分析任务。它特别适合需要结合定量和定性数据,从多维度(如技术发展、市场竞争格局、政策导向)进行综合判断的场景。", "content": "[{'step': 1, 'action': '明确报告的核心主题和目标受众', 'output': '一份简明扼要的投资要点,概述关键信息(如核心事件、主要结论和投资建议)。', 'completion_criteria': '投资要点是否清晰传达了报告的核心价值,并能吸引目标受众的兴趣。', 'common_issues': '主题过于宽泛或模糊,导致后续内容难以聚焦。', 'solutions': '在启动阶段与团队讨论,明确报告的具体目标(如为投资者提供决策支持),并围绕目标筛选相关内容。'}, {'step': 2, 'action': '收集和整理定量与定性数据', 'output': '包含行业数据、市场表现、技术进展和政策动态的综合数据集。', 'completion_criteria': '数据是否全面覆盖关键领域,且来源可靠;是否存在明显的遗漏或偏差。', 'common_issues': '数据分散或不一致,导致信息整合困难。', 'solutions': '建立标准化的数据收集流程,优先使用权威来源(如政府报告、行业数据库),并对数据进行交叉验证。'}, {'step': 3, 'action': '构建章节结构,按逻辑顺序组织内容', 'output': '报告分为背景介绍、数据分析、竞争格局、政策影响和投资建议等模块。', 'completion_criteria': '章节安排是否符合逻辑递进关系,是否便于读者快速获取核心信息。', 'common_issues': '章节间存在重复或逻辑断裂,影响整体流畅性。', 'solutions': '采用金字塔原理,先呈现核心结论,再逐步展开支撑细节,并确保每个章节有明确的主题和作用。'}, {'step': 4, 'action': '通过定量分析支持定性判断', 'output': '包括市场份额、用户增长、技术指标等数据图表,以及对这些数据的解读。', 'completion_criteria': '定量数据是否有效支撑定性观点,且图表设计是否直观易懂。', 'common_issues': '数据与结论之间缺乏直接关联,或图表复杂难懂。', 'solutions': '每张图表应配以简洁的文字说明,突出其核心意义;避免堆砌无关数据。'}, {'step': 5, 'action': '引入风险因素并评估不确定性', 'output': '列出可能的风险点(如技术发展不及预期、政策变化),并提供应对策略。', 'completion_criteria': '风险提示是否全面且具有针对性,是否与核心分析内容相关联。', 'common_issues': '风险分析过于笼统,缺乏实际指导意义。', 'solutions': '结合具体案例或历史经验,量化风险可能性及潜在影响,提出可操作的缓解措施。'}, {'step': 6, 'action': '提炼核心结论并提出投资建议', 'output': '基于前文分析,形成明确的投资评级和推荐标的清单。', 'completion_criteria': '投资建议是否具有可行性和逻辑一致性,是否能够帮助投资者做出决策。', 'common_issues': '建议过于模糊或缺乏依据,无法落地实施。', 'solutions': '确保每条建议都有充分的数据和分析支持,并考虑不同投资者的风险偏好。'}, {'step': 7, 'action': '审阅和优化语言表达', 'output': '最终版本的报告,语言精炼、专业术语准确、格式统一。', 'completion_criteria': '报告是否读起来流畅,是否无明显语法错误或歧义。', 'common_issues': '语言冗长或晦涩,影响阅读体验。', 'solutions': '邀请同事或外部专家进行审阅,重点关注表述的清晰度和专业性。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 07:53:47", "modified_time": "2025-08-14 07:53:47", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "0bc8c8df4e574a68a6b9eae225ca75d3", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及宏观经济与市场联动分析等任务,尤其是需要结合定量数据(如PMI指数)和定性分析(如政策风险、市场情绪)的场景。它强调对经济指标、市场表现和投资策略的综合评估,适合周期性行业或高波动性板块的研究。", "content": "[{'step': 1, 'action': '明确分析目标与核心问题', 'output': '定义报告的核心主题(如证券行业周报),并确定关键问题(如上周市场表现、未来投资策略)。', 'criteria_for_completion': '核心问题清晰,能够指导后续章节设计;内容聚焦于目标受众的需求(如投资者关注的市场表现与策略)。', 'common_issues': '目标过于宽泛或模糊,导致后续分析缺乏重点。', 'solutions': '在开始时与团队或客户确认具体需求,确保目标明确且可操作。'}, {'step': 2, 'action': '组织章节结构,优先展示核心结论', 'output': '构建清晰的章节框架:投资摘要→每周一谈(宏观数据解读)→市场回顾(上周表现)→本周投资策略→风险提示。', 'criteria_for_completion': '章节逻辑连贯,信息展示优先级合理,核心结论(如评级“增持”)在前两部分突出呈现。', 'common_issues': '章节顺序混乱,导致读者难以快速抓住重点。', 'solutions': '采用“倒金字塔”结构,先展示核心结论,再逐步展开支持性分析。'}, {'step': 3, 'action': '收集与分析定量数据', 'output': '整理关键经济指标(如PMI指数)和市场数据(如沪深300指数、个股涨跌幅),并进行趋势分析。', 'criteria_for_completion': '数据来源可靠,分析方法科学(如分类指数对比、环比变化分析),结果可视化(如图表)。', 'common_issues': '数据不完整或分析方法单一,导致结论缺乏说服力。', 'solutions': '使用权威数据源(如国家统计局、Wind),结合多种分析方法(如同比、环比、分类对比)。'}, {'step': 4, 'action': '结合定性分析,建立论证逻辑', 'output': '通过定性分析(如政策风险、市场情绪)补充定量数据,层层递进建立观点(如“证券板块高弹性需注意短期震荡”)。', 'criteria_for_completion': '定量与定性分析有机结合,论证逻辑清晰且有层次感。', 'common_issues': '定性分析脱离定量数据,导致观点空洞或主观。', 'solutions': '确保每一定性论点都有定量数据支撑,避免过度依赖主观判断。'}, {'step': 5, 'action': '提出风险因素与应对建议', 'output': '在适当位置(如最后章节)提出主要风险(如政策风险、市场波动风险),并给出简要应对建议。', 'criteria_for_completion': '风险因素全面且及时提出,建议具有可行性。', 'common_issues': '风险提示过于笼统或滞后,缺乏实际指导意义。', 'solutions': '结合当前市场环境和历史经验,提前预判潜在风险,并提供具体应对措施。'}, {'step': 6, 'action': '总结与展望,形成投资策略', 'output': '基于前文分析,提出明确的投资策略(如“短期行业指数或仍处震荡格局”),并给出评级建议(如“增持”)。', 'criteria_for_completion': '策略与分析结论一致,评级依据充分。', 'common_issues': '策略与分析脱节,导致结论缺乏可信度。', 'solutions': '确保策略直接来源于前文分析,避免跳跃性结论。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 07:55:15", "modified_time": "2025-08-14 07:55:15", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "1c735edd4c214223a33d35b9fc66ffe3", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及市场趋势评估类金融报告。尤其适合需要结合定量与定性数据,从产业链、竞争格局、消费行为等多维度进行综合分析的任务。", "content": "[{'step': 1, 'action': '明确研究主题和核心问题', 'output': '清晰定义研究目标(如“谷子经济”的崛起原因及其对市场的潜在影响)并确定分析的逻辑主线(如Z世代+IP双轮驱动)。', 'how_to_judge_completion': '是否能用一句话概括研究的核心结论,并列出3-5个关键分析维度(如产业链、竞争格局、消费画像等)。', 'common_issues': '主题过于宽泛或模糊,导致后续章节无法聚焦。', 'solutions': '通过头脑风暴和初步资料收集,提炼出最具价值的研究角度,并围绕这些角度构建核心问题。'}, {'step': 2, 'action': '搭建报告结构并分配优先级', 'output': '形成目录式框架,涵盖背景介绍、产业链分析、竞争格局、市场影响、投资建议和风险提示等内容,确保信息分布合理且层次分明。', 'how_to_judge_completion': '每个章节是否有明确的目标和产出,章节之间的逻辑递进关系是否顺畅。', 'common_issues': '章节内容重叠或遗漏重要部分(如未提及政策支持或技术趋势)。', 'solutions': '在初稿完成后重新审视整体结构,检查是否存在冗余或缺失的关键点,并调整顺序以增强连贯性。'}, {'step': 3, 'action': '收集和整理定量与定性数据', 'output': '整合权威来源的数据(如市场规模、增速、消费者画像等),同时引用专家观点、案例研究和行业动态作为补充。', 'how_to_judge_completion': '所有数据均来自可靠渠道,图表注释完整,且能够支撑核心论点。', 'common_issues': '数据陈旧或缺乏代表性,导致结论可信度下降。', 'solutions': '优先选择最新发布的公开数据,必要时通过调研或访谈获取一手信息,并标注数据时效性和局限性。'}, {'step': 4, 'action': '逐步展开论证逻辑,建立观点的层层递进', 'output': '从宏观背景切入,逐步深入到产业链细节、竞争格局分析,再到具体的投资建议,确保每一层论证都基于前一层的铺垫。', 'how_to_judge_completion': '读者可以轻松理解每一步推导过程,且无跳跃式结论。', 'common_issues': '论证链条断裂,某些环节缺乏充分证据支持。', 'solutions': '为每个主要观点提供至少两个独立的支持依据,包括统计数据、案例分析或理论模型。'}, {'step': 5, 'action': '突出核心结论并平衡不同类型信息', 'output': '将最核心的观点置于显眼位置(如标题、开头段落),并通过图表、加粗等方式强化表达;同时兼顾历史数据与未来预测的比例。', 'how_to_judge_completion': '报告开篇即呈现核心结论,且各类信息比例协调,不偏倚某一侧。', 'common_issues': '过度依赖单一类型信息(如只强调历史数据而忽略预测),导致视角失衡。', 'solutions': '采用“三明治”策略,在历史数据与未来预测之间插入当前趋势分析,使内容更加均衡。'}, {'step': 6, 'action': '识别并处理不确定性与风险因素', 'output': '在适当位置(如章节末尾或单独的风险提示部分)系统梳理潜在风险,并提出应对措施或情景假设。', 'how_to_judge_completion': '风险提示覆盖全面,且针对不同可能性提供了具体的解决方案。', 'common_issues': '风险描述空洞或流于形式,未能真正揭示潜在威胁。', 'solutions': '结合实际案例说明风险可能带来的后果,并引入敏感性分析工具量化其影响范围。'}, {'step': 7, 'action': '撰写投资建议并验证逻辑闭环', 'output': '根据前述分析得出具体的投资建议,包括推荐标的、评级理由及操作策略,同时回溯全文验证逻辑一致性。', 'how_to_judge_completion': '投资建议直接源自前期分析,且与核心结论高度契合。', 'common_issues': '投资建议与正文脱节,或缺乏足够的实操指导意义。', 'solutions': '设置专门的审核环节,由第三方审阅者核验投资建议与正文内容的一致性。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 07:56:47", "modified_time": "2025-08-14 07:56:47", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "6039d05af28a4bbfa0d5e31dfa0a8298", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及资本市场动态解读等金融分析任务。尤其适合需要结合定量数据(如财报、市场表现)和定性信息(如技术趋势、政策环境)进行综合评估的场景。", "content": "[{'step': 1, 'action': '明确分析目标与核心受众', 'output': '确定报告的主题、目标(如为投资者提供决策支持),以及核心受众(如机构投资者、个人投资者)。', 'completion_criteria': '能够清晰描述分析的核心问题,并将其与受众需求直接关联,例如:‘帮助投资者了解科技行业最新动态及潜在投资机会’。', 'common_issues': '目标模糊或过于宽泛,导致后续章节结构混乱。', 'solutions': '通过头脑风暴列出关键问题,优先聚焦于对决策最有价值的信息点。'}, {'step': 2, 'action': '收集并整理相关数据与信息', 'output': '形成包含定量数据(如财务指标、市场表现)和定性信息(如行业趋势、技术进展)的初步数据集。', 'completion_criteria': '数据覆盖全面且来源可靠,例如:包含主要公司的财报、行业指数、技术动态等;所有数据标注出处。', 'common_issues': '数据不完整或缺乏权威性,可能导致结论不可信。', 'solutions': '优先选择官方财报、权威机构发布的统计数据,确保引用内容透明可追溯。'}, {'step': 3, 'action': '设计章节结构并分配信息权重', 'output': '制定逻辑清晰的章节结构,将信息按照优先级分布,例如:市场回顾 → 核心事件分析 → 投资建议 → 风险提示。', 'completion_criteria': '章节安排符合‘从宏观到微观’或‘从背景到具体建议’的逻辑顺序,且各部分信息量均衡。', 'common_issues': '章节间逻辑脱节或信息分布失衡,导致阅读体验不佳。', 'solutions': '绘制章节大纲图,确保每部分内容有明确的承接关系;通过模拟读者视角检查信息流畅性。'}, {'step': 4, 'action': '构建核心观点与论证路径', 'output': '提炼核心观点(如‘北美科技巨头资本开支持续加码体现AI领域高景气度’),并通过数据、案例层层递进论证。', 'completion_criteria': '核心观点明确且具有说服力,论证路径清晰,例如:先展示数据趋势,再结合事件分析,最后得出结论。', 'common_issues': '观点缺乏支撑或论证过程跳跃,导致可信度不足。', 'solutions': '使用‘数据+案例+推论’三步法,确保每一步都有事实依据支持。'}, {'step': 5, 'action': '平衡定量与定性信息', 'output': '在报告中合理分配定量数据(如增长率、市场份额)与定性分析(如技术趋势、政策影响)的比例,确保两者相辅相成。', 'completion_criteria': '定量数据占比合理(如60%-70%),并与定性分析有机结合,例如:用历史数据说明趋势,用定性分析解释原因。', 'common_issues': '过度依赖某一种信息类型,导致分析单一化。', 'solutions': '根据主题调整比例,例如:技术驱动型行业可适当增加定性分析比重,成熟行业则侧重定量数据。'}, {'step': 6, 'action': '提出风险因素与不确定性处理', 'output': '在合适时机(如章节末尾)提出主要风险因素,并通过情景分析或概率评估说明应对策略。', 'completion_criteria': '风险因素全面且表述客观,例如:‘下游景气度不及预期’‘政策推进不及预期’等;同时提供多种可能性分析。', 'common_issues': '风险提示过于笼统或忽视多种可能性。', 'solutions': '采用‘假设-后果-应对’模式,详细说明不同情境下的潜在影响及应对措施。'}, {'step': 7, 'action': '总结核心结论并提出行动建议', 'output': '提炼出简明扼要的核心结论,并基于结论提出具体的行动建议(如‘关注算力相关标的’)。', 'completion_criteria': '结论突出且建议可操作性强,例如:‘AI大模型迭代加速,建议重点关注算力基础设施供应商’。', 'common_issues': '结论过于泛泛,缺乏针对性建议。', 'solutions': '以‘问题-解决方案’为导向,确保每条建议都能直接回应核心问题。'}, {'step': 8, 'action': '审阅与优化报告表达', 'output': '完成报告后进行全面审阅,确保语言简洁、图表清晰、格式规范。', 'completion_criteria': '报告无明显语法错误,图表与文字一致,整体风格统一。', 'common_issues': '图表与文字脱节或语言冗长。', 'solutions': '邀请同事进行交叉审阅,重点检查图表与文字的一致性及语言精炼度。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 07:58:17", "modified_time": "2025-08-14 07:58:17", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "42e9a449295a4ee08e252be458c22a96", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究、投资标的分析以及资本市场相关的政策和市场趋势解读。尤其适合需要结合定量与定性数据,提供明确投资建议的金融分析任务。", "content": "[{'step': 1, 'action': '明确分析目标并定义核心问题', 'output': '清晰的投资建议主题和分析范围(如:乘用车、新能源汽车、智能汽车等细分领域)。', 'how_to_evaluate': '目标是否具体且聚焦,能否直接指导后续章节安排和信息筛选。', 'common_issues': '目标过于宽泛或模糊,导致分析缺乏针对性。', 'solution': '通过初步市场调研和团队讨论,确定当前热点和客户需求,锁定核心问题。'}, {'step': 2, 'action': '收集并整理相关数据和信息', 'output': '完整的数据表格、图表及关键事件摘要(如销量、政策动态、技术进展等)。', 'how_to_evaluate': '数据是否全面、准确,是否覆盖了历史、现状和未来预测。', 'common_issues': '数据来源单一或不完整,可能影响结论的可靠性。', 'solution': '多渠道验证数据(如政府公告、行业协会数据、公司财报),并标注数据来源。'}, {'step': 3, 'action': '构建分析结构并分配优先级', 'output': '逻辑清晰的章节结构,包括市场回顾、热点分析、核心观点和风险提示。', 'how_to_evaluate': '章节安排是否符合从宏观到微观、从数据到结论的递进逻辑。', 'common_issues': '章节顺序混乱,导致读者难以理解分析思路。', 'solution': '采用“总-分-总”结构,先概述全局,再深入细节,最后总结核心观点。'}, {'step': 4, 'action': '展开定量与定性分析', 'output': '基于数据的趋势分析、同比环比增长率计算,以及对政策、技术、市场的定性评估。', 'how_to_evaluate': '分析是否兼顾数据支持和逻辑推导,是否平衡了历史表现与未来预期。', 'common_issues': '过度依赖定量数据而忽略定性因素,或反之。', 'solution': '在每个分析模块中同时呈现定量和定性内容,并用图表辅助说明。'}, {'step': 5, 'action': '提出投资建议并匹配标的', 'output': '明确的投资方向和推荐标的列表,附带盈利预测和估值分析。', 'how_to_evaluate': '投资建议是否基于充分的分析,标的是否具有可操作性和高潜力。', 'common_issues': '建议过于笼统,缺乏具体标的或估值依据。', 'solution': '结合定量分析结果和行业发展前景,精选标的并提供详细评级依据。'}, {'step': 6, 'action': '识别并评估风险因素', 'output': '全面的风险提示,涵盖政策、市场、技术和竞争等方面。', 'how_to_evaluate': '风险提示是否及时且具有针对性,是否与核心观点形成对照。', 'common_issues': '风险提示流于形式,未能有效揭示潜在威胁。', 'solution': '结合行业动态和不确定性,逐一列出主要风险点并提出应对策略。'}, {'step': 7, 'action': '撰写报告并优化展示', 'output': '格式规范、语言简练的完整分析报告,包含图表、目录和附录。', 'how_to_evaluate': '报告是否易于阅读,核心结论是否突出,视觉效果是否专业。', 'common_issues': '排版混乱或信息堆砌,影响阅读体验。', 'solution': '使用统一模板,确保图表清晰、段落分明,并通过目录引导阅读顺序。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 07:59:30", "modified_time": "2025-08-14 07:59:30", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "98cc5a4a45fb4206bb34aae353925bc9", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究、投资标的分析以及宏观经济趋势与政策影响评估等任务。尤其适合需要结合定量数据和定性分析,探讨结构性变化对特定行业或市场的影响的场景。", "content": "[{'step': 1, 'action': '明确研究主题和目标', 'output': '清晰界定研究的核心问题和最终目标,例如‘分析欧盟化工行业的衰退原因及其全球竞争力下降’。', 'criteria_for_completion': '研究目标是否具体且可量化;是否明确了核心变量(如能源价格、碳中和政策等)。', 'common_issues': '研究范围过于宽泛或模糊,导致后续分析缺乏聚焦。', 'solutions': '通过团队讨论或客户反馈,精炼研究主题,并列出关键变量清单。'}, {'step': 2, 'action': '收集并整理基础数据和信息', 'output': '构建一个全面的数据集,包括历史数据(如欧盟化学品销售额、资本开支)、政策文件(如碳关税法规)和行业动态(如企业产能退出公告)。', 'criteria_for_completion': '数据覆盖全面,来源可靠,且结构化存储便于后续分析;初步识别出数据中的显著趋势。', 'common_issues': '数据不完整或质量不高,可能导致结论偏差。', 'solutions': '优先选择权威机构发布的统计数据,并通过交叉验证确保数据准确性;对于缺失数据,采用合理的假设填补。'}, {'step': 3, 'action': '设计章节结构并分配信息权重', 'output': '根据逻辑递进安排章节顺序,从宏观背景到具体案例逐步展开,同时平衡定量与定性信息的比例。例如:先介绍行业概况,再深入分析关键驱动因素(如能源成本、监管政策),最后总结企业行为。', 'criteria_for_completion': '章节之间逻辑连贯,信息分布合理,核心结论易于识别;每个章节都有明确的子目标支持整体研究目标。', 'common_issues': '章节内容重复或信息堆砌,导致报告冗长且重点不突出。', 'solutions': '绘制思维导图梳理各部分之间的关系,删除冗余内容,确保每部分内容都服务于核心结论。'}, {'step': 4, 'action': '建立论证路径并提出观点', 'output': '通过分层推理形成观点链,例如:‘能源价格上涨削弱了欧洲化工行业的成本竞争力 → 成本劣势导致企业盈利能力下降 → 企业为维持利润选择退出产能’。在此过程中,使用图表、表格等多种形式辅助说明。', 'criteria_for_completion': '论证过程严密,观点层层推进,能够有效回应研究目标;图表和文字内容相辅相成。', 'common_issues': '论证跳跃性强,缺乏充分的事实支撑,或者忽略潜在反例。', 'solutions': '逐一检查每一步推论是否有事实依据,并补充可能遗漏的重要视角;引入对比分析增强说服力。'}, {'step': 5, 'action': '评估风险因素和不确定性', 'output': '在适当位置引入对风险因素的讨论,例如:‘尽管碳中和政策长期利好环境,但短期内会加剧企业成本压力’。同时,对不确定性的处理保持透明,例如:‘未来能源价格波动可能进一步改变行业格局’。', 'criteria_for_completion': '风险评估时机恰当,既不过早分散注意力也不过晚掩盖问题;不确定性描述客观且基于合理推测。', 'common_issues': '风险因素被弱化或完全忽略,导致结论显得片面。', 'solutions': '设立专门的小节讨论风险,并鼓励团队成员提出不同意见以完善分析。'}, {'step': 6, 'action': '总结核心结论并提供行动建议', 'output': '提炼出简明扼要的核心结论,例如:‘高能源成本和严格监管是化工巨头退出欧洲市场的主要原因’,并据此提出针对性建议,例如:‘投资者应关注亚洲市场的增长机会’。', 'criteria_for_completion': '核心结论高度概括,行动建议具有实操性;语言表达精准无歧义。', 'common_issues': '总结过于笼统或偏离实际应用场景,无法指导决策。', 'solutions': '邀请非专业读者审阅总结部分,确认其易懂性和实用性。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 08:00:51", "modified_time": "2025-08-14 08:00:51", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "9490c04f4c4d496596897ce6fb8b8da5", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究报告、投资标的分析、市场趋势评估等金融分析任务,尤其是需要结合定量与定性数据、历史与预测信息,并覆盖从基础研究到投资建议的全流程分析场景。", "content": "[{'step': 1, 'action': '明确研究主题和目标', 'output': '清晰定义报告的核心主题、目标受众和最终用途(如:胶原蛋白行业的市场前景及投资机会)。', 'completion_criteria': '主题和目标被明确定义,且与客户需求或行业热点高度相关。', 'common_issues': '主题过于宽泛或模糊,导致后续分析难以聚焦。', 'solution': '通过初步调研和团队讨论,缩小研究范围并明确关键问题。'}, {'step': 2, 'action': '构建章节结构和逻辑框架', 'output': '设计报告的章节安排,确保内容层次分明、逻辑连贯(如:背景介绍→技术对比→市场规模→应用场景→代表公司→投资建议→风险提示)。', 'completion_criteria': '章节结构合理,每部分有明确的内容分工,能够引导读者逐步深入理解。', 'common_issues': '章节间逻辑不连贯,或信息分布不均。', 'solution': '采用思维导图工具梳理整体框架,确保每个章节服务于核心结论。'}, {'step': 3, 'action': '收集和整理数据', 'output': '系统性地搜集定量和定性数据,包括市场规模、增速、政策支持、竞争格局等,并进行分类整理。', 'completion_criteria': '数据来源可靠,涵盖多维度信息,且经过初步清洗和验证。', 'common_issues': '数据不完整或过时,影响分析准确性。', 'solution': '优先选择权威机构发布的数据,并注明数据来源和时间范围。'}, {'step': 4, 'action': '分析和解读数据', 'output': '对数据进行深度分析,提炼关键趋势和洞察,形成观点(如:重组胶原蛋白增速高于动物源胶原蛋白,未来市场空间广阔)。', 'completion_criteria': '数据分析结果能直接支撑核心结论,且具有说服力。', 'common_issues': '分析流于表面,缺乏深度或独特视角。', 'solution': '引入专家访谈或跨领域知识,增加分析的广度和深度。'}, {'step': 5, 'action': '撰写正文和图表制作', 'output': '按照章节结构撰写详细内容,同时制作辅助图表以直观展示数据和观点(如:市场规模增长曲线、产品应用领域分布图)。', 'completion_criteria': '文字表达简洁专业,图表清晰易懂,且与正文内容紧密配合。', 'common_issues': '图表过多或过少,导致信息冗余或不足。', 'solution': '根据内容需求精简图表数量,确保每张图表都有明确目的。'}, {'step': 6, 'action': '提出投资建议和风险提示', 'output': '基于前文分析,给出具体的投资建议(如:关注锦波生物、巨子生物等龙头企业),并对潜在风险进行充分说明。', 'completion_criteria': '投资建议具体可行,风险提示全面且客观。', 'common_issues': '建议过于笼统,或忽略重要风险因素。', 'solution': '结合市场动态和企业基本面,细化建议内容;风险提示需涵盖政策、技术和市场等多个维度。'}, {'step': 7, 'action': '审校和优化报告', 'output': '对报告进行语言润色、逻辑校验和格式调整,确保内容无误且符合专业规范。', 'completion_criteria': '报告内容准确无误,格式统一,读起来流畅自然。', 'common_issues': '语法错误或排版混乱,影响阅读体验。', 'solution': '邀请同事交叉审阅,使用专业编辑工具检查语法和格式。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 08:02:27", "modified_time": "2025-08-14 08:02:27", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "56a2ef186dee40c2a005f39b5c5bc479", "experience_type": "text", "when_to_use": "适用于行业深度研究、投资标的分析、大宗商品价格预测等任务。", "content": "[{'step': 1, 'action': '明确核心逻辑,概述影响目标变量(如价格)的关键因素。', 'output': '一段简明扼要的核心逻辑陈述,说明关键驱动因素及其作用机制。', 'evaluation': '是否清晰传达了分析的重点?读者能否快速理解核心观点?', 'common_issues': ['核心逻辑过于复杂或模糊', '缺乏对关键变量的定义'], 'solutions': ['简化语言,突出重点', '用图表或案例辅助说明']}, {'step': 2, 'action': '按时间顺序复盘历史数据,结合重大事件解释价格波动原因。', 'output': '一个包含历史数据和事件的时间轴,辅以图表说明。', 'evaluation': '是否准确捕捉了价格拐点?事件与数据之间是否有强因果关系?', 'common_issues': ['忽略重要事件', '数据与事件关联性不足'], 'solutions': ['补充遗漏事件', '增加数据分析深度']}, {'step': 3, 'action': '收集并整理定量数据(如出口量、产能变化),构建供需平衡表。', 'output': '一张详细的供需平衡表,显示各分项的月度变化及总供需情况。', 'evaluation': '数据是否全面且准确?平衡表是否能有效捕捉价格拐点?', 'common_issues': ['数据不完整或过时', '模型过于简单'], 'solutions': ['更新数据源', '优化模型设计']}, {'step': 4, 'action': '基于供需平衡表,设定合理假设,预测未来价格走势。', 'output': '一份预测报告,包括不同情景下的价格变化趋势。', 'evaluation': '假设是否合理?预测结果是否具有说服力?', 'common_issues': ['假设脱离现实', '预测结果单一'], 'solutions': ['参考多方数据验证假设', '提供多情景分析']}, {'step': 5, 'action': '提出投资建议,并列出主要风险因素。', 'output': '一段投资建议文字,附带风险提示列表。', 'evaluation': '建议是否具体且可行?风险提示是否全面?', 'common_issues': ['建议空泛无操作性', '忽视潜在风险'], 'solutions': ['细化建议内容', '增加风险覆盖范围']}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 08:03:40", "modified_time": "2025-08-14 08:03:40", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "e8ebb77b2da449ba9bcc29e0aeb8a358", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及风险评估报告等任务,尤其是需要对市场数据、行业动态和重大事件进行整合分析的场景。它适合于金融分析师在制作周报、月报或专题研究报告时使用,能够帮助系统化地组织信息、突出核心结论,并有效处理不确定性。", "content": "[{'step': 1, 'action': '明确报告目标与受众', 'output': '定义报告的核心主题(如半导体行业动态)及目标受众(如投资者或企业决策者),并确定关键指标(如市场指数、财务数据、技术趋势)。', 'completion_criteria': '是否清晰界定了报告的目标和受众,是否列出需要覆盖的关键维度(如市场表现、行业数据、重大事件、风险提示)。', 'common_issues': '目标过于宽泛或模糊,导致后续内容缺乏聚焦。', 'solutions': '通过与利益相关方沟通确认报告的核心需求,确保目标具体且可操作。'}, {'step': 2, 'action': '收集和整理基础数据', 'output': '从可靠来源(如Wind、Digitimes、公司财报等)收集定量数据(如市场指数变化、出货量预测)和定性信息(如重大事件、政策变化),并对数据进行初步清洗和分类。', 'completion_criteria': '数据是否全面覆盖所需维度,是否标注了数据来源以确保可信度。', 'common_issues': '数据来源单一或不完整,可能导致分析偏差。', 'solutions': '采用多源验证策略,优先选择权威机构发布的数据,并记录数据获取时间以保证时效性。'}, {'step': 3, 'action': '构建章节结构并分配信息权重', 'output': '根据逻辑顺序设计报告结构,通常包括市场回顾、行业数据、重大事件、风险提示等部分;优先展示核心结论(如市场表现和关键趋势),并将次要信息(如详细数据表)置于附录或图表中。', 'completion_criteria': '章节安排是否符合读者认知习惯,核心结论是否在前几页突出呈现。', 'common_issues': '章节间逻辑混乱或信息分布失衡,影响阅读体验。', 'solutions': '参考成功案例的结构模板,确保每部分内容紧密衔接,同时避免冗长描述。'}, {'step': 4, 'action': '建立论证路径并层层递进', 'output': '从宏观到微观逐步展开分析,例如先阐述整体市场表现(如AI芯片指数波动),再深入细分领域(如存储芯片、功率半导体),并通过对比历史数据和未来预测增强说服力。', 'completion_criteria': '论证是否条理清晰,观点是否有充分的数据支持。', 'common_issues': '论据不足或跳跃式推理,削弱了结论的可信度。', 'solutions': '每一步推导都需引用具体数据或事实支撑,必要时补充背景解释。'}, {'step': 5, 'action': '平衡定量与定性信息', 'output': '将定量数据(如财务指标、市场涨跌幅)与定性分析(如政策解读、技术趋势)相结合,通过图表直观展示数据,用文字补充说明背后的原因和意义。', 'completion_criteria': '信息是否均衡分布,是否兼顾了数据可视化和文字阐释。', 'common_issues': '过度依赖某类信息,造成分析片面化。', 'solutions': '针对不同类型的读者调整比例,例如为专业投资者提供更多量化分析,而为管理层提供简明扼要的趋势总结。'}, {'step': 6, 'action': '引入风险因素并提出应对建议', 'output': '在适当位置(如报告末尾或每个章节后)提出潜在风险(如下游需求不及预期、贸易摩擦加剧),并结合情景假设给出应对策略(如多元化供应链、关注政策变化)。', 'completion_criteria': '风险提示是否全面且及时,应对建议是否切实可行。', 'common_issues': '忽略重要风险或提出的解决方案空洞无物。', 'solutions': '持续跟踪行业动态,定期更新风险清单,并邀请专家评审建议的合理性。'}, {'step': 7, 'action': '校验与优化报告质量', 'output': '检查报告的语言表达、格式规范和逻辑连贯性,确保没有语法错误、排版问题或数据矛盾;同时验证所有图表和表格是否准确反映文本内容。', 'completion_criteria': '报告是否达到发布标准,是否能快速传递核心信息。', 'commonissues': '细节疏漏导致专业形象受损,例如数据标注错误或图表标题缺失。', 'solutions': '设立内部审核机制,由团队成员交叉检查报告内容,确保零失误。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 08:51:00", "modified_time": "2025-08-14 08:51:00", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "fdd2c5216f474195b727c761e8646052", "experience_type": "text", "when_to_use": "此规划框架适用于对上市公司季度业绩进行深度分析的任务,尤其是针对需要结合定量数据(如收入、利润)和定性信息(如业务战略、市场趋势)的场景。它适合用于投资标的分析、行业动态跟踪以及风险评估报告等任务。", "content": "[{'step': 1, 'action': '明确核心问题与目标', 'output': '确定分析的核心问题,例如本案例中聚焦于安森美的FY2Q25业绩表现,包括收入、利润、各业务板块表现及未来展望。', 'completion_criteria': '形成清晰的问题定义文档或简要提纲,列出关键指标和关注点(如收入、毛利率、非核心业务退出计划等)。', 'common_issues': '可能忽视某些次要但重要的维度,例如非核心业务的退出影响。', 'solutions': '通过团队讨论或参考类似案例,确保覆盖所有相关维度。'}, {'step': 2, 'action': '收集并整理基础数据', 'output': '从公司财报、管理层评论、行业报告等来源提取定量和定性数据,例如本案例中收入、YoY变化率、营业费用等数据。', 'completion_criteria': '完成一份结构化数据表,包含所有关键财务指标及其同比/环比变化,并附注数据来源。', 'common_issues': '数据来源不一致或遗漏重要指标。', 'solutions': '建立标准化数据收集模板,确保覆盖所有必要字段,并交叉验证数据来源。'}, {'step': 3, 'action': '分模块组织信息', 'output': '将信息按逻辑模块划分,例如本案例中分为“事件”、“点评”、“未来展望”和“风险”四个部分。', 'completion_criteria': '每个模块的内容完整且逻辑清晰,能够独立传递信息,同时与其他模块形成连贯性。', 'common_issues': '模块之间内容重叠或逻辑断裂。', 'solutions': '在编写前制定详细的章节大纲,明确每个模块的重点和边界。'}, {'step': 4, 'action': '突出核心结论与关键驱动因素', 'output': '提炼出最核心的结论,例如本案例中AI数据中心收入翻倍、汽车收入触底回升等,并结合具体数据和事实支持。', 'completion_criteria': '核心结论明确且有数据支撑,在报告开头或每个模块的起始部分优先呈现。', 'common_issues': '核心结论被淹没在细节中,未能第一时间抓住读者注意力。', 'solutions': '采用“金字塔原则”,先呈现结论后展开分析,并使用图表强化关键数据。'}, {'step': 5, 'action': '平衡定量与定性信息', 'output': '结合定量数据(如收入、利润)和定性分析(如市场趋势、战略调整),例如本案例中详细分析了Treo平台需求增长的原因。', 'completion_criteria': '定量与定性信息分布合理,定性分析能够有效解释定量数据的变化趋势。', 'common_issues': '过于偏重某一方面,导致分析不够全面。', 'solutions': '为定量和定性信息分别设定篇幅比例,例如60%定量+40%定性,并确保两者紧密关联。'}, {'step': 6, 'action': '识别并分析风险因素', 'output': '系统性地识别潜在风险,例如本案例中提到的需求疲软、非核心业务退出推迟和竞争加剧。', 'completion_criteria': '风险因素分类清晰,分析逻辑严谨,并提出应对策略或观察点。', 'common_issues': '风险分析流于表面,缺乏深入探讨。', 'solutions': '引入SWOT分析或情景模拟方法,增强风险分析的深度和实用性。'}, {'step': 7, 'action': '提供前瞻性预测与建议', 'output': '基于现有数据和趋势,给出未来展望和建议,例如本案例中对3Q25收入、毛利率和EPS的预测。', 'completion_criteria': '预测具有合理的假设基础,并附带敏感性分析以应对不确定性。', 'common_issues': '预测过于乐观或悲观,缺乏现实依据。', 'solutions': '采用多情景分析法(如基准、乐观、悲观情景),并明确每种情景的触发条件。'}, {'step': 8, 'action': '优化信息展示方式', 'output': '通过表格、图表和简洁的语言优化信息展示,例如本案例中使用了清晰的收入对比表格和增长率数据。', 'completion_criteria': '信息展示直观易懂,关键数据一目了然,避免冗长的文字描述。', 'common_issues': '图表设计复杂或信息过载,影响阅读体验。', 'solutions': '遵循“少即是多”的原则,仅保留最关键的数据和图表,并确保设计简洁美观。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 08:52:59", "modified_time": "2025-08-14 08:52:59", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "26b9f737bcdd46d5bf0ada216952c162", "experience_type": "text", "when_to_use": "适用于行业深度研究、政策解读、投资标的分析、风险评估报告等需要系统性分析的任务。", "content": "[{'step': 1, 'action': '明确分析目标,梳理背景信息', 'output': '背景概述文档,包含相关政策、市场现状及核心问题。', 'completion_criteria': '背景信息全面且无遗漏,能够为后续分析提供充分支撑。', 'common_issues': '背景信息过于冗长或缺乏重点。', 'solutions': '使用结构化框架(如SWOT分析)提炼关键信息。'}, {'step': 2, 'action': '逐条解读政策或事件的核心条款/要素', 'output': '条款解析文档,每条条款附带简要说明和潜在影响。', 'completion_criteria': '条款覆盖全面,解读准确,且与分析目标相关联。', 'common_issues': '条款解读过于表面,缺乏深度。', 'solutions': '结合历史案例和专家意见,深化分析。'}, {'step': 3, 'action': '从多维度分析影响,包括供需、行业规范、市场预期等', 'output': '影响分析文档,包含定性和定量分析,明确短期与长期影响。', 'completion_criteria': '分析维度全面,结论有数据或逻辑支持。', 'common_issues': '分析维度单一,忽略某些重要方面。', 'solutions': '使用矩阵分析法(如PEST分析)确保覆盖所有关键维度。'}, {'step': 4, 'action': '提出风险因素并评估其可能性与影响', 'output': '风险评估文档,列出主要风险及其应对策略。', 'completion_criteria': '风险识别全面,评估客观,应对策略可行。', 'common_issues': '风险评估过于乐观或悲观。', 'solutions': '引入第三方数据或多方意见验证风险评估结果。'}, {'step': 5, 'action': '总结核心结论并提出未来展望', 'output': '总结文档,包含政策或事件的核心意义及未来发展趋势。', 'completion_criteria': '结论简洁明了,展望具有前瞻性。', 'common_issues': '总结过于冗长或缺乏实际指导意义。', 'solutions': '使用金字塔原理提炼核心结论,确保逻辑清晰。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 08:54:48", "modified_time": "2025-08-14 08:54:48", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "db06d21875b54c8291d02fada06a86a1", "experience_type": "text", "when_to_use": "此规划框架适用于对上市公司或科技企业的季度业绩进行深度分析,特别是涉及财务数据解读、产品线进展评估、市场竞争动态和未来展望的场景。它特别适合用于投资标的分析、行业趋势研究以及向机构投资者提供决策支持的报告制作。", "content": "[{'step': 1, 'action': '明确分析目标与核心受众', 'output': '定义报告的目标(如评估公司业绩、预测未来增长潜力)和受众(如机构投资者、内部决策者),并据此确定信息优先级。', 'completion_criteria': '目标清晰且与受众需求匹配,例如是否聚焦于财务数据、市场动态或技术进展。', 'common_issues': '目标过于宽泛或未充分考虑受众需求。', 'solutions': '通过与客户或团队讨论确认目标,并制定简明的任务清单。'}, {'step': 2, 'action': '收集并整理定量与定性数据', 'output': '整理关键财务数据(如收入、利润、毛利率)、业务分部表现、产品进展(如MI350系列性能)以及外部环境因素(如出口管制影响)。', 'completion_criteria': '数据完整且来源可靠,涵盖所有重要维度(历史表现、当前状态、未来展望)。', 'common_issues': '数据遗漏或缺乏一致性,例如未区分不同业务板块的表现。', 'solutions': '使用标准化模板记录数据,并交叉验证来源的可靠性。'}, {'step': 3, 'action': '构建章节结构并安排信息优先级', 'output': '设计报告结构,通常包括:事件概述、财务数据分析、产品/技术亮点、风险因素及未来展望。优先展示核心结论(如超预期收入、AI业务增长)。', 'completion_criteria': '章节逻辑清晰,信息分布合理,核心结论在前几段突出呈现。', 'common_issues': '结构混乱或信息冗余,导致读者难以快速抓住重点。', 'solutions': '采用倒金字塔结构,先呈现最重要信息,再逐步展开细节。'}, {'step': 4, 'action': '建立论证逻辑并层层递进', 'output': '从财务数据出发,结合定性分析(如产品竞争力、市场需求),逐步推导出对未来增长的判断。例如,MI355的强劲需求如何驱动下半年数据中心业务增长。', 'completion_criteria': '论证路径清晰,观点之间有逻辑联系,避免跳跃式推理。', 'common_issues': '论证不够严谨,可能忽略反面证据或假设。', 'solutions': '列出所有假设条件并逐一验证,同时引入对比数据(如竞品性能)增强说服力。'}, {'step': 5, 'action': '平衡定量与定性信息,融合历史与预测', 'output': '将定量数据(如YoY增长率)与定性描述(如客户兴趣增加)结合,同时兼顾历史表现与未来预测(如MI400的潜在市场机会)。', 'completion_criteria': '信息分布均衡,既不过度依赖单一类型数据,也不忽视历史背景。', 'common_issues': '过度偏重量化数据而忽略定性洞察,或者反之。', 'solutions': '为每种信息类型设定固定比例,并确保两者互为补充。'}, {'step': 6, 'action': '识别并处理风险因素', 'output': '在适当时机(通常接近尾声)提出主要风险(如需求疲软、竞争加剧),并用具体案例或数据支撑(如MI308审查延迟的影响)。', 'completion_criteria': '风险因素全面且表述客观,不夸大也不淡化。', 'common_issues': '风险披露不足或位置不当,影响整体可信度。', 'solutions': '提前规划风险部分的位置,并确保其与核心结论形成平衡。'}, {'step': 7, 'action': '总结核心结论并提供行动建议', 'output': '提炼报告的核心发现(如AMD AI业务的强劲增长),并给出明确的投资建议或后续行动方向(如关注MI355爬坡速度)。', 'completion_criteria': '总结简洁有力,建议具有可操作性。', 'common_issues': '总结过于笼统或建议缺乏针对性。', 'solutions': '围绕核心结论提炼关键点,并根据受众需求定制建议内容。'}, {'step': 8, 'action': '附加法律声明与合规检查', 'output': '添加必要的免责声明、利益冲突披露和评级定义,确保符合相关法律法规要求。', 'completion_criteria': '声明完整且符合监管要求,无遗漏或错误。', 'common_issues': '声明内容不符合最新规定或遗漏重要条款。', 'solutions': '定期更新声明模板并与法务团队协作审核。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 08:56:28", "modified_time": "2025-08-14 08:56:28", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "4a9a36b021124e7bae346f46145e3557", "experience_type": "text", "when_to_use": "适用于行业深度研究、投资标的分析以及资本市场动态解读等金融分析任务。此框架特别适合需要结合定量数据与定性洞察,同时涉及宏观趋势、公司财务表现和技术创新的综合性报告制作。", "content": "[{'step': 1, 'action': '明确目标受众与核心主题', 'output': '确定报告的目标读者(如机构投资者、企业高管等)及核心主题(如AI驱动的科技公司财报分析)。根据目标受众调整信息优先级,并决定是否聚焦于短期投资机会或长期战略方向。', 'completion_criteria': '清晰定义报告的核心问题(如‘哪些科技公司在AI领域具有高增长潜力?’),并列出关键子主题(如Capex、收入增长、AI应用进展等)。', 'common_issues': '未能准确定位目标受众可能导致信息冗余或缺乏针对性;解决方案是通过客户反馈或市场调研验证需求。', 'confidence': 0.95}, {'step': 2, 'action': '收集与整理基础数据', 'output': '从公开渠道(如财报、行业报告、新闻)获取相关公司的财务数据、市场动态和技术进展。确保数据覆盖定量指标(如营收增长率、资本支出)和定性信息(如管理层评论、技术突破)。', 'completion_criteria': '形成一个结构化数据表,包括各公司的关键财务指标、业务亮点、风险因素等,并标注数据来源。', 'common_issues': '数据不完整或过时可能影响分析质量;建议使用自动化工具跟踪最新财报更新,并交叉验证多个数据源。', 'confidence': 0.9}, {'step': 3, 'action': '设计章节结构与信息优先级', 'output': '按照逻辑顺序组织内容:先概述宏观背景(如AI行业趋势),再深入具体公司/案例分析,最后总结投资建议。确保核心结论(如‘微软Azure增速超预期’)在摘要部分突出展示。', 'completion_criteria': '生成一份初步提纲,包含主要章节标题及其对应的内容要点,且每个章节都有明确的信息优先级排序。', 'common_issues': '章节安排过于松散或重复;可通过同行评审优化结构,确保每部分内容紧密衔接且无冗余。', 'confidence': 0.88}, {'step': 4, 'action': '进行逐层递进的论证分析', 'output': '采用“事实-推论-预测”的路径构建观点。例如,从微软Azure收入增长的事实出发,推导出其在云计算市场的领导地位,并进一步预测未来Capex对股价的影响。', 'completion_criteria': '每段落均包含至少一个支持性数据点或图表,并有清晰的因果关系阐述。', 'common_issues': '论证过程跳跃性强,缺乏连贯性;可通过添加过渡句或补充中间推导步骤来改善。', 'confidence': 0.87}, {'step': 5, 'action': '平衡定量与定性信息分布', 'output': '将历史数据(如过去四个季度的财务表现)与前瞻性预测(如下一财年的Capex计划)相结合,同时融入管理层评论等定性信息以提供上下文。', 'completion_criteria': '检查文档中定量与定性信息的比例是否均衡,通常建议6:4或7:3的比例。', 'common_issues': '过度依赖单一类型信息导致分析片面;可设置内部审查机制,确保两种信息充分融合。', 'confidence': 0.85}, {'step': 6, 'action': '适时引入风险因素与不确定性处理', 'output': '在论证过程中穿插讨论潜在风险(如宏观经济波动、技术竞争加剧),并对多种可能性(如不同Capex情景下的盈利前景)进行敏感性分析。', 'completion_criteria': '每家公司或行业板块后附带简短的风险提示,并用表格形式呈现敏感性分析结果。', 'common_issues': '忽略负面因素可能降低报告可信度;应主动识别并合理评估所有重大风险。', 'confidence': 0.86}, {'step': 7, 'action': '提炼核心结论并提出行动建议', 'output': '基于前述分析,提炼出明确的投资建议(如‘重点关注英伟达、微软等算力基础设施受益标的’),并附带具体操作策略(如买入/持有评级及目标价区间)。', 'completion_criteria': '核心结论不超过3条,且每条建议都配有详细的支撑理由和执行方案。', 'common_issues': '建议泛化或缺乏实操指导;需与实际交易环境匹配,增加可行性。', 'confidence': 0.92}, {'step': 8, 'action': '可视化与格式优化', 'output': '为关键数据制作直观的图表(如折线图、柱状图),并将文字排版调整为便于阅读的形式(如分段清晰、重点加粗)。', 'completion_criteria': '所有图表均带有标题、注释和数据来源说明,且整体布局美观整洁。', 'common_issues': '图表复杂难懂或缺乏标注;应遵循极简设计原则,确保信息传达高效。', 'confidence': 0.9}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 08:58:20", "modified_time": "2025-08-14 08:58:20", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "13c1b8abedef45acb1c5b13adfb0e4ca", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析、风险评估报告等需要综合定量与定性信息的金融分析任务。尤其适合涉及政策解读、技术趋势分析、市场竞争格局评估以及消费者需求洞察的场景。", "content": "[{'step': 1, 'action': '明确研究目标和核心问题', 'output': '定义清晰的研究范围和关键问题,例如未来行业标准方向、头部企业竞争力分析、区域市场特点等。', 'evaluation_criteria': '是否能够用简洁的语言概括出研究的核心目标,并确保所有后续内容围绕这些目标展开。', 'common_issues': '目标过于宽泛或模糊,导致后续章节偏离主题。', 'solutions': '通过头脑风暴列出所有可能的问题,然后筛选出最相关且可操作的核心问题。'}, {'step': 2, 'action': '收集并整理基础数据和政策背景', 'output': '形成完整的政策、市场和技术数据集,包括定量数据(如市场规模、增长率)和定性信息(如政策趋势、技术发展方向)。', 'evaluation_criteria': '数据来源是否权威可靠,信息是否覆盖全面且逻辑清晰。', 'common_issues': '数据不完整或过时,缺乏对政策细节的深入解读。', 'solutions': '多渠道交叉验证数据,优先使用官方发布或第三方权威机构的数据,并对政策条款进行逐条分析。'}, {'step': 3, 'action': '构建章节结构,按逻辑递进展示信息', 'output': '设计一个层次分明的章节结构,通常从宏观到微观递进:先讨论行业整体趋势,再聚焦具体企业表现,最后细化到消费者需求和区域差异。', 'evaluation_criteria': '章节安排是否符合逻辑递进关系,是否能引导读者自然理解结论。', 'common_issues': '章节之间衔接不流畅,信息堆砌而无重点。', 'solutions': '在每个章节开头设置简短的过渡段落,明确本章目的及与前后内容的关系。'}, {'step': 4, 'action': '突出核心结论并辅以可视化支持', 'output': '将核心结论放在显眼位置(如每章开头或结尾),并通过图表、表格等形式直观呈现关键数据。', 'evaluation_criteria': '核心结论是否一目了然,图表是否有效增强了信息传递效果。', 'common_issues': '结论埋藏在大量文字中,图表设计复杂难懂。', 'solutions': '提炼每部分的关键点作为小标题,优化图表设计,避免过多颜色或冗余元素。'}, {'step': 5, 'action': '平衡不同类型信息的分布', 'output': '合理分配定量与定性信息的比例,例如历史数据占比约30%,预测数据占比约20%,政策解读和市场分析各占一定比例。', 'evaluation_criteria': '信息分布是否均衡,是否存在某类信息过度集中或缺失的情况。', 'common_issues': '过于依赖单一类型信息(如只关注定量数据),忽视其他维度的补充。', 'solutions': '制定信息分布计划表,确保各类信息均匀分布并相互印证。'}, {'step': 6, 'action': '引入风险因素和不确定性分析', 'output': '在结论部分之前,专门讨论潜在风险,例如政策监管滞后、技术合规挑战等,并提出应对策略。', 'evaluation_criteria': '风险因素是否全面且具有前瞻性,提出的解决方案是否切实可行。', 'common_issues': '风险分析流于表面,缺乏实际案例支撑。', 'solutions': '结合实际案例说明风险影响,引用专家观点增强说服力。'}, {'step': 7, 'action': '总结并提出行动建议', 'output': '基于前文分析,提炼出具体的投资或战略建议,例如技术研发方向、市场进入策略等。', 'evaluation_criteria': '建议是否具体且可执行,是否与前面的分析紧密关联。', 'common_issues': '建议空洞无物,无法落地实施。', 'solutions': '针对不同利益相关方(如投资者、企业高管)分别提供定制化建议。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 08:59:53", "modified_time": "2025-08-14 08:59:53", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "922baac7954c46a9bade6e295eb62cf3", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及公司业绩解读等金融分析任务。特别是针对需要结合定量与定性数据,综合评估公司当前表现和未来前景的任务。它也可用于风险评估报告,帮助识别潜在的市场、运营或竞争风险。", "content": "[{'step': 1, 'action': '明确分析目标和核心问题', 'output': '定义本次分析的核心目标(如解读英飞凌FY25 3Q业绩表现),并列出需要回答的关键问题(如收入增长驱动因素、毛利率提升原因、未来展望等)。', 'how_to_judge_success': '成功标准包括是否清晰界定了分析范围,是否列出了所有关键问题,并且这些问题是否具有逻辑连贯性。', 'common_issues_and_solutions': [{'issue': '目标过于宽泛,导致分析缺乏焦点。', 'solution': '在初步阶段通过与利益相关方沟通,明确优先级最高的问题。'}, {'issue': '忽略潜在次要但重要的问题。', 'solution': '采用头脑风暴法,确保全面覆盖可能影响结论的因素。'}]}, {'step': 2, 'action': '收集和整理基础数据', 'output': '收集定量数据(如财务报表、市场数据)和定性信息(如管理层评论、行业动态),并将这些数据分类整理为可分析的形式(如表格、图表)。', 'how_to_judge_success': '成功标准包括数据的完整性、准确性和时效性,以及是否能够支持后续分析。', 'common_issues_and_solutions': [{'issue': '数据来源不一致,导致分析结果偏差。', 'solution': '优先选择权威、可靠的公开数据源,并对不同来源的数据进行交叉验证。'}, {'issue': '数据量过大,难以快速筛选出关键信息。', 'solution': '使用数据可视化工具(如Excel、Tableau)快速生成初步洞察,聚焦于核心指标。'}]}, {'step': 3, 'action': '分解和解释关键财务指标', 'output': '对核心财务指标(如收入、毛利率、库存周转天数)进行逐项分析,解释其变化趋势及背后的原因,并将定量数据与定性信息相结合。', 'how_to_judge_success': '成功标准包括是否清晰解释了每个指标的变化原因,是否提供了支持性证据(如管理层声明、行业数据),以及是否避免了过度推测。', 'common_issues_and_solutions': [{'issue': '仅关注表面数字,未能深入挖掘原因。', 'solution': '结合背景信息(如行业趋势、公司战略)和管理层评论,构建多维度的解释框架。'}, {'issue': '忽视异常值或波动较大的指标。', 'solution': '单独分析异常值,探讨其潜在影响,并在最终结论中加以说明。'}]}, {'step': 4, 'action': '建立分层论证逻辑', 'output': '按照从宏观到微观的顺序,逐步递进地建立观点(如先讨论整体市场环境,再分析公司具体业务表现,最后聚焦于个别关键驱动因素)。', 'how_to_judge_success': '成功标准包括论证逻辑是否清晰、层次分明,是否避免了跳跃式推论,以及是否能够引导读者自然得出结论。', 'common_issues_and_solutions': [{'issue': '论证过程过于复杂,导致结论晦涩难懂。', 'solution': '采用简明的语言和直观的图表辅助说明,确保每一步推理都易于理解。'}, {'issue': '忽略了某些重要变量的影响。', 'solution': '在论证过程中反复检查,确保涵盖所有已知的关键变量。'}]}, {'step': 5, 'action': '平衡展示不同类型的信息', 'output': '合理分配定量和定性信息的比例,同时兼顾历史数据和未来预测,确保信息分布均衡且重点突出。', 'how_to_judge_success': '成功标准包括是否在报告中有效平衡了各类信息,是否突出了核心结论,以及是否避免了信息过载。', 'common_issues_and_solutions': [{'issue': '过分依赖定量数据,忽视定性分析的价值。', 'solution': '增加对行业动态、管理策略等内容的讨论,补充定量数据的局限性。'}, {'issue': '预测部分过于乐观或悲观,缺乏可信度。', 'solution': '基于历史数据和行业趋势,提供多种情景假设,并说明每种假设的合理性。'}]}, {'step': 6, 'action': '识别和讨论风险因素', 'output': '系统梳理潜在风险(如需求疲软、竞争加剧),并在适当的时间点提出,同时附带应对措施或缓解方案。', 'how_to_judge_success': '成功标准包括是否全面覆盖了主要风险,是否提供了具体的应对建议,以及是否避免了过度夸大或轻视风险。', 'common_issues_and_solutions': [{'issue': '风险论述过于笼统,缺乏针对性。', 'solution': '结合具体案例和数据,详细说明每种风险的可能性及其影响。'}, {'issue': '风险讨论时机不当,影响整体阅读体验。', 'solution': '在核心结论之后、未来展望之前引入风险讨论,以保持逻辑流畅性。'}]}, {'step': 7, 'action': '形成总结性结论和行动建议', 'output': '提炼核心发现,形成简洁明了的总结性结论,并根据分析结果提出具体的投资或运营建议。', 'how_to_judge_success': '成功标准包括是否准确概括了主要发现,是否提出了切实可行的建议,以及是否能够激发读者采取行动。', 'common_issues_and_solutions': [{'issue': '结论过于冗长,缺乏重点。', 'solution': '提炼最核心的3-5个发现,避免堆砌细节。'}, {'issue': '建议过于模糊,缺乏操作性。', 'solution': '针对每个建议提供具体实施路径和预期效果。'}]}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 09:01:52", "modified_time": "2025-08-14 09:01:52", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "f0fac77f22db492ea5ee5488d3e5e8d3", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及技术趋势评估类金融分析任务,尤其是涉及复杂技术背景(如芯片、AI等)的产业链和市场竞争格局的研究。该框架可帮助分析师系统性地梳理技术发展路径、市场需求变化、竞争格局演变及国产替代机遇。", "content": "[{'step': 1, 'action': '明确分析目标与范围', 'output': '定义报告的核心主题(如车载SOC芯片市场),确定分析维度(技术演进、市场需求、竞争格局、国产化机会等)。', 'evaluation_criteria': '是否清晰界定了研究问题,并合理划分了章节结构以覆盖所有关键维度。', 'common_issues': '主题过于宽泛或狭窄,导致分析深度不足或偏离核心问题。', 'solutions': '通过头脑风暴与团队讨论,聚焦于对客户最有价值的核心议题,确保逻辑连贯性和内容完整性。'}, {'step': 2, 'action': '构建逻辑清晰的章节结构', 'output': '按照从宏观到微观、从基础到应用的顺序组织内容,例如:先介绍技术背景,再深入具体领域需求,最后分析市场格局与企业布局。', 'evaluation_criteria': '章节安排是否符合读者的认知逻辑,信息优先级是否突出,核心结论是否易于提取。', 'common_issues': '章节之间衔接不流畅,信息堆砌而缺乏层次感。', 'solutions': '使用思维导图工具提前规划章节间的关系,确保每个部分服务于整体论点。'}, {'step': 3, 'action': '收集并整合定量与定性数据', 'output': '结合历史数据(如市场规模、增长率)、预测数据(未来5-10年趋势)和技术参数(算力、制程工艺)进行综合分析。', 'evaluation_criteria': '数据来源是否权威可靠,定量与定性信息是否平衡分布且互为支撑。', 'common_issues': '数据陈旧或片面,无法全面反映现状与趋势。', 'solutions': '优先选择公开数据库、行业协会报告及公司公告作为数据来源,同时交叉验证不同渠道的数据一致性。'}, {'step': 4, 'action': '建立递进式论证链条', 'output': '采用“现象→原因→影响→对策”的逻辑逐步展开,例如:从汽车智能化趋势出发,分析其对计算芯片的需求变化,进而探讨SOC芯片的技术特点与市场潜力。', 'evaluation_criteria': '观点是否层层递进,是否有充足的证据支持每一步推论,是否存在逻辑跳跃。', 'common_issues': '论证过程松散,缺乏足够的实证支持。', 'solutions': '在每段落末尾总结小结,确保每一层推论都自然过渡到下一层。'}, {'step': 5, 'action': '适时引入风险因素分析', 'output': '在技术成熟度、市场竞争态势或政策环境等关键节点提出潜在风险,并给出应对建议。', 'evaluation_criteria': '风险提示是否及时且切中要害,是否提供切实可行的解决方案。', 'common_issues': '风险分析流于表面,未深入剖析可能的影响。', 'solutions': '参考行业专家意见,结合实际案例阐述风险发生的可能性及其后果。'}, {'step': 6, 'action': '处理不确定性与多种可能性', 'output': '针对技术路径尚未收敛或市场格局尚不稳定的情况,列出几种可能的发展方向,并评估各自的概率。', 'evaluation_criteria': '是否充分考虑了各种情景,是否对每种可能性进行了合理的权重分配。', 'common_issues': '忽略次要但重要的变量,导致分析结果偏颇。', 'solutions': '运用决策树或蒙特卡洛模拟等方法量化不确定性,增强分析的科学性。'}, {'step': 7, 'action': '提炼跨场景适用的洞察框架', 'output': '基于前述分析,总结出一套通用的方法论,包括如何识别关键技术趋势、评估市场需求、判断竞争格局等。', 'evaluation_criteria': '总结是否具有普适性,能否指导其他类似任务。', 'common_issues': '总结过于具体,难以迁移至其他场景。', 'solutions': '抽象出共性规律,用简洁的语言表述核心原则,避免过多依赖特定案例细节。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 09:03:38", "modified_time": "2025-08-14 09:03:38", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "398ba38082474244946fb43819cb6d82", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、信用风险评估报告、投资标的分析等需要结合定量与定性信息的综合性金融分析任务。它特别适合于对宏观环境、政策影响、企业基本面及未来趋势进行系统性评估的场景。", "content": "[{'step': 1, 'action': '明确分析目标和核心问题', 'output': '清晰定义分析的核心目标,例如本次案例中是评估房地产行业的信用风险及未来展望。', 'criteria_for_completion': '目标明确且具体,能够指导后续章节安排和数据收集方向。', 'common_issues': '目标过于宽泛或模糊,导致后续分析缺乏聚焦。', 'solutions': '在开始时列出关键问题清单,确保每个问题都能被后续章节覆盖。'}, {'step': 2, 'action': '构建逻辑清晰的章节结构', 'output': '将内容分为几个主要部分(如供需端、融资端、政策端),并按从宏观到微观、从历史到预测的顺序组织。', 'criteria_for_completion': '各章节主题明确,层次分明,信息分布合理,避免重复或遗漏。', 'common_issues': '章节之间逻辑不连贯,或者信息堆砌无序。', 'solutions': '提前绘制章节框架图,确保每部分内容服务于整体目标,并通过同行评审优化结构。'}, {'step': 3, 'action': '优先展示核心结论和关键数据', 'output': '在每一章节开头直接呈现最重要的发现,例如销售降幅收窄、库存去化周期高位等。', 'criteria_for_completion': '核心结论突出,读者能在短时间内抓住重点。', 'common_issues': '将核心结论埋藏在大量细节中,导致阅读体验不佳。', 'solutions': '采用总分结构,先概述后展开,同时使用图表直观展示关键数据。'}, {'step': 4, 'action': '平衡定量与定性信息', 'output': '结合统计数据(如销售面积、房价变化)和定性分析(如政策解读、市场情绪),形成全面视角。', 'criteria_for_completion': '定量与定性信息相互补充,既提供事实依据又解释背后原因。', 'common_issues': '过度依赖单一类型信息,导致分析片面或说服力不足。', 'solutions': '为每项定性观点配以相关数据支持,同时用专家访谈或文献引用增强可信度。'}, {'step': 5, 'action': '层层递进建立论证逻辑', 'output': '从现状描述到原因剖析再到未来展望,逐步深入探讨问题。', 'criteria_for_completion': '论点环环相扣,前后呼应,最终形成完整的故事线。', 'common_issues': '论证跳跃性强,缺乏过渡或铺垫。', 'solutions': '为每个论点设计小标题,确保段落间自然衔接,必要时加入过渡句。'}, {'step': 6, 'action': '适时提出风险因素并量化其影响', 'output': '在适当位置讨论潜在风险(如政策效应衰减、偿债压力增大),并通过数据或情景模拟说明可能后果。', 'criteria_for_completion': '风险因素表述客观且有据可依,不会引发不必要的恐慌或误解。', 'common_issues': '风险提示过于笼统或滞后,削弱报告权威性。', 'solutions': '设立专门章节或子节集中阐述风险,同时附上应对策略建议。'}, {'step': 7, 'action': '处理不确定性和多种可能性', 'output': '针对未来不确定性(如房价走势、政策效果),给出不同情景假设及其概率。', 'criteria_for_completion': '多情景分析合理且具有操作性,帮助决策者制定灵活计划。', 'common_issues': '忽略不确定性或仅做简单推测,无法满足复杂决策需求。', 'solutions': '引入敏感性分析工具,设定乐观、中性和悲观三种情景,分别测算结果。'}, {'step': 8, 'action': '总结并提炼行动建议', 'output': '在最后部分提炼出简明扼要的行动指南,例如“关注央国企融资优势”、“警惕高负债房企流动性风险”。', 'criteria_for_completion': '总结精炼有力,建议切实可行,能直接指导实践。', 'common_issues': '总结冗长空洞,缺乏实际价值。', 'solutions': '站在用户角度思考,提炼最核心的几点建议,并用通俗语言表达。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 09:05:20", "modified_time": "2025-08-14 09:05:20", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "2ae30f26332b46b9bc5fc64f6293ab41", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及政策驱动型市场机会评估等任务,尤其适合需要结合定量与定性信息进行综合判断的金融分析场景。", "content": "[{'step': 1, 'action': '明确报告目标和受众需求', 'output': '清晰的研究目标和核心问题陈述(例如:中国创新药产业的价值重估逻辑)。', 'completion_criteria': '目标是否具体、可操作,是否能直接指导后续章节安排。', 'common_issues': '目标过于宽泛或模糊,无法聚焦。', 'solution': '通过与利益相关方沟通确认关键问题,并用SMART原则细化目标。'}, {'step': 2, 'action': '收集并整理多维度数据', 'output': '涵盖定量(如市场表现、财务数据)和定性(如政策动态、行业新闻)的数据集合。', 'completion_criteria': '数据来源是否权威且多样化,是否覆盖所有关键变量。', 'common_issues': '数据不完整或存在偏差。', 'solution': '建立数据校验机制,优先选择官方或高可信度第三方数据源,并标注数据假设和限制条件。'}, {'step': 3, 'action': '设计章节结构以支持逻辑递进', 'output': '包含行情回顾、行业更新、风险提示等内容的层次化框架。', 'completion_criteria': '章节之间是否有逻辑衔接,能否引导读者从背景理解到核心结论。', 'common_issues': '章节顺序混乱或内容重复。', 'solution': '使用金字塔原理组织内容,确保每一部分为下一部分提供支撑。'}, {'step': 4, 'action': '优先展示核心结论', 'output': '在摘要中突出主要发现(如‘医保政策支持与海外价值认可双主线逻辑’),并辅以图表强化视觉效果。', 'completion_criteria': '核心结论是否一目了然,是否能在短时间内抓住读者注意力。', 'common_issues': '结论埋藏过深或表达冗长。', 'solution': '采用‘倒金字塔’写作法,将最重要信息放在最前面,并控制篇幅。'}, {'step': 5, 'action': '平衡不同类型信息分布', 'output': '历史数据(如过去6个月医保收支)、当前状况(如7月市场表现)和未来预测(如创新药定价机制影响)的均衡呈现。', 'completion_criteria': '各类信息比例是否合理,是否既反映现状又展望趋势。', 'common_issues': '过分依赖某类信息导致失衡。', 'solution': '制定信息权重分配表,根据分析目标调整各部分内容占比。'}, {'step': 6, 'action': '构建层层递进的论证路径', 'output': '观点逐步深入展开,例如从政策解读到企业案例再到市场反应。', 'completion_criteria': '论证链条是否连贯,每一步推导是否基于前一步。', 'common_issues': '论证跳跃或缺乏过渡。', 'solution': '使用‘如果-那么’逻辑连接短语,确保推理过程流畅自然。'}, {'step': 7, 'action': '适时提出风险因素', 'output': '在正文末尾单独设置‘风险提示’部分,系统梳理潜在威胁(如政策变动、市场竞争加剧)。', 'completion_criteria': '风险描述是否全面且具体,是否给出应对建议。', 'common_issues': '风险提及过于笼统或忽视可能性较低但影响较大的事件。', 'solution': '引入情景分析方法,分类讨论不同风险的概率与后果。'}, {'step': 8, 'action': '处理不确定性和多种可能性', 'output': '对关键变量设定区间范围(如PEG估值倍数),并通过敏感性分析探讨极端情况。', 'completion_criteria': '是否充分考虑各种情景,是否提供了量化参考。', 'common_issues': '忽略不确定性或仅做定性描述。', 'solution': '运用蒙特卡洛模拟等工具量化不确定性,同时附上专家意见作为补充。'}, {'step': 9, 'action': '总结并形成行动建议', 'output': '提炼出可执行的投资策略或政策建议(如‘关注CXO和生物科技子板块’)。', 'completion_criteria': '建议是否切实可行,是否与先前分析一致。', 'common_issues': '建议空洞或脱离实际。', 'solution': '基于数据分析结果反向验证建议合理性,并征求多方反馈优化表述。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 09:06:56", "modified_time": "2025-08-14 09:06:56", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "63493f6b299a4df6bd12ced4b72486ca", "experience_type": "text", "when_to_use": "适用于行业深度研究、政策影响分析、投资标的评估等需要结合定量与定性分析的任务。", "content": "[{'step': 1, 'action': '明确分析目标与受众,确定核心问题和关键变量。', 'output': '一份清晰的问题定义文档,包含分析目标、核心问题和关键变量清单。', 'completion_criteria': '问题定义文档需涵盖所有相关维度,且逻辑清晰。', 'common_issues': '问题定义过于宽泛或模糊,导致后续分析缺乏针对性。', 'solutions': '通过头脑风暴或与利益相关者沟通,细化问题范围。'}, {'step': 2, 'action': '收集并整理相关数据,包括政策文件、市场数据、行业趋势等。', 'output': '一个数据汇总表,包含定量数据(如增长率、市场份额)和定性信息(如政策要点、专家观点)。', 'completion_criteria': '数据覆盖全面,来源可靠,且经过初步清洗和分类。', 'common_issues': '数据不完整或过时,影响分析准确性。', 'solutions': '建立多渠道数据采集机制,并定期更新数据源。'}, {'step': 3, 'action': '按照‘背景→措施→影响→建议’的逻辑结构组织内容。', 'output': '一个初步的内容框架,包含各章节标题及核心要点。', 'completion_criteria': '框架逻辑连贯,章节划分合理,能够引导读者逐步深入理解。', 'common_issues': '章节之间逻辑断裂或重复,导致阅读体验不佳。', 'solutions': '反复检查各章节之间的衔接,确保每部分内容都有其独特价值。'}, {'step': 4, 'action': '撰写主体内容,优先展示核心结论,并辅以数据支持。', 'output': '一份完整的分析报告初稿,包含政策解读、市场分析和投资建议。', 'completion_criteria': '核心结论突出,数据与论点匹配,语言简洁明了。', 'common_issues': '论点缺乏数据支持,或数据堆砌过多导致冗长。', 'solutions': '在撰写过程中不断交叉检查数据与论点的相关性,删减冗余内容。'}, {'step': 5, 'action': '补充风险提示和不确定性分析,确保报告全面性。', 'output': '一段独立的风险提示部分,列出潜在风险及其应对策略。', 'completion_criteria': '风险提示客观中立,覆盖主要风险点,且不影响核心结论的可信度。', 'common_issues': '风险提示过于悲观或简略,削弱报告的专业性。', 'solutions': '参考类似报告的风险提示部分,确保内容详实且平衡。'}, {'step': 6, 'action': '审阅和优化报告,确保逻辑清晰、语言流畅、格式规范。', 'output': '一份最终版报告,包含图表、注释和免责声明。', 'completion_criteria': '报告无明显错误,格式统一,内容易于理解。', 'common_issues': '排版混乱或语言晦涩,影响阅读体验。', 'solutions': '邀请同事或外部专家进行审阅,提出改进建议。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 09:08:53", "modified_time": "2025-08-14 09:08:53", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "baa0bd75fb5d4ff58ad3d0fe06783f35", "experience_type": "text", "when_to_use": "适用于行业深度研究、投资标的分析、风险评估报告等需要结合定量与定性数据,进行系统化论证和多层次信息整合的金融分析任务。", "content": "[{'step': 1, 'action': '明确研究目标与框架设计', 'output': '清晰界定研究主题(如航运港口2025年7月专题),并设计章节结构以逻辑递进方式展开分析。例如:综述进出口总额及货物吞吐量情况→集装箱运价及吞吐量分析→液体散货(原油)运价及吞吐量分析→干散货运价及铁矿石、煤炭吞吐量分析→重点港口上市公司月度表现→风险提示。', 'completion_criteria': '章节内容覆盖全面,各部分逻辑连贯,能够引导读者逐步深入理解核心问题。', 'common_issues': '章节间逻辑跳跃或信息冗余可能导致读者难以抓住重点。', 'solutions': '提前规划好每一部分的核心输出,并确保前后章节自然衔接,避免重复讨论相同内容。'}, {'step': 2, 'action': '收集并整理基础数据', 'output': '从权威来源(如iFinD、Clarksons等)获取定量数据(如进出口总额、吞吐量、运价指数等),以及定性信息(如政策变化、市场动态等)。制作数据表格和图表,直观展示关键指标的变化趋势。', 'completion_criteria': '所有数据准确无误,且经过交叉验证;图表清晰易懂,标注完整。', 'common_issues': '数据不一致或缺失可能影响后续分析的可信度。', 'solutions': '采用多源数据对比,优先选择官方或第三方权威机构发布的信息;对异常值进行单独说明。'}, {'step': 3, 'action': '分层次分析数据与趋势', 'output': '按时间维度(当月/累计)、空间维度(国内区域/国际地区)、品类维度(机电产品、高新技术产品、农产品等)拆解数据,识别增长点、下滑领域及其背后驱动因素。例如:通过同比和环比数据分析发现原油吞吐量6月同比转正,干散货吞吐量复苏。', 'completion_criteria': '每项分析均能提炼出明确的结论,且这些结论与整体研究目标相关联。', 'common_issues': '过度依赖单一维度的数据可能导致片面解读。', 'solutions': '结合多种维度综合分析,同时引入历史对比和行业背景知识,增强结论的说服力。'}, {'step': 4, 'action': '构建观点支撑体系', 'output': '基于数据分析结果,提出核心观点,并通过逐层论证强化其合理性。例如:使用波罗的海干散货运价指数BDI同比增长17.47%支持“干散货吞吐量复苏”的判断,同时辅以港口库存和吞吐量数据进一步佐证。', 'completion_criteria': '每个核心观点都有充分的数据和事实依据,且论证路径清晰。', 'common_issues': '论据不足或论证过程松散会削弱观点的可信度。', 'solutions': '确保每个观点至少有两个独立但相关的论据支持,必要时增加补充性分析。'}, {'step': 5, 'action': '处理不确定性和多种可能性', 'output': '在适当位置提出潜在风险因素(如宏观经济不及预期、油轮船队规模扩张超预期),并讨论其对核心结论的影响。例如:指出若航运环保监管执行力度不及预期,则全球油运运价弹性可能低于预期。', 'completion_criteria': '风险提示具体且针对性强,能够帮助决策者更好地理解潜在变数。', 'common_issues': '忽略不确定性或低估风险可能导致误导性建议。', 'solutions': '主动识别并量化主要风险,提供情景假设下的不同预测结果,提升报告的稳健性。'}, {'step': 6, 'action': '总结核心结论与投资建议', 'output': '提炼全文精华,突出关键洞察(如“吞吐量整体表现平稳”),并给出明确的投资评级(如“看好”)。例如:维持航运港口板块“看好”评级,强调重点港口企业的月度吞吐量表现作为参考。', 'completion_criteria': '总结简明扼要,投资建议具有可操作性,直接服务于目标受众需求。', 'common_issues': '总结过于笼统或缺乏实际指导意义。', 'solutions': '聚焦于最核心的几个结论,用简洁语言表达,并附上具体的行动指南或关注方向。'}, {'step': 7, 'action': '优化呈现形式与审校', 'output': '检查报告格式是否规范,包括目录、图示编号、数据单位一致性等;确保文字表述准确无误,图表美观清晰,便于阅读。', 'completion_criteria': '报告整体专业性强,无明显错误,视觉效果佳。', 'common_issues': '格式混乱或排版问题影响专业形象。', 'solutions': '制定标准化模板,安排专人负责最终校对,确保细节完善。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 09:10:37", "modified_time": "2025-08-14 09:10:37", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "bcaca4228bc4457294c918c7eb99238d", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究、投资标的分析以及中长期趋势预测类的金融任务。尤其适合需要结合宏观经济环境、政策导向、行业动态、公司财务数据及市场表现等多维度信息进行综合分析的任务场景,例如汽车行业周报、季度展望报告或特定主题的投资建议书。", "content": "[{'step': 1, 'action': '明确核心观点与逻辑主线', 'output': '提炼出贯穿全文的核心结论和投资建议,确保所有后续章节围绕这一主线展开。例如,本案例中明确了‘关注自主品牌崛起和增量零部件机遇’作为核心逻辑。', 'criteria_for_completion': '核心观点清晰且具备可操作性,能够直接指导投资决策;逻辑主线连贯,无明显偏离主题的内容。', 'common_issues_and_solutions': [{'issue': '缺乏明确的核心观点,导致内容散乱。', 'solution': '在撰写前通过团队讨论确定关键驱动因素,并用一句话概括核心结论。'}, {'issue': '逻辑主线不够聚焦,涉及过多次要信息。', 'solution': '定期回顾各部分内容是否服务于核心观点,删减冗余信息。'}]}, {'step': 2, 'action': '组织章节结构并分配优先级', 'output': '设计报告框架,包括宏观背景、月度/周度数据、行情回顾、重点公司分析、风险提示等模块,按照从全局到局部、从定性到定量的原则安排内容顺序。', 'criteria_for_completion': '章节结构合理,信息展示层次分明;重要数据和结论优先呈现,次要信息适当后置。', 'common_issues_and_solutions': [{'issue': '章节间衔接不流畅,影响阅读体验。', 'solution': '使用过渡段落连接不同部分,确保逻辑递进自然。'}, {'issue': '信息堆砌,未突出重点。', 'solution': '采用图表、加粗标题等方式强调核心数据和结论,避免平铺直叙。'}]}, {'step': 3, 'action': '收集并整合多源数据', 'output': '从行业协会(如乘联会、中汽协)、上市公司公告、第三方数据库(如Wind)以及其他公开渠道获取最新数据,涵盖销量、库存、成本、汇率等多个维度。', 'criteria_for_completion': '数据来源权威可靠,更新及时;数据覆盖全面,能支持后续分析需求。', 'common_issues_and_solutions': [{'issue': '数据缺失或滞后。', 'solution': '提前建立稳定的数据获取渠道,必要时联系相关机构补充数据。'}, {'issue': '数据口径不一致。', 'solution': '统一数据定义和计算方法,在注释中说明差异来源。'}]}, {'step': 4, 'action': '构建论证路径并验证假设', 'output': '基于历史数据、当前市场动态和未来预期,分层递进建立论点。例如,先阐述行业总量变化趋势,再分析细分领域表现,最后提出具体投资建议。', 'criteria_for_completion': '论证过程严密,每个论点均有充分的事实依据支撑;对未来预测提供多种可能性分析。', 'common_issues_and_solutions': [{'issue': '论证链条断裂,缺少中间环节。', 'solution': '增加辅助性数据分析,填补逻辑空隙。'}, {'issue': '忽略不确定性,导致结论过于绝对。', 'solution': '引入敏感性分析,探讨不同情景下的潜在结果。'}]}, {'step': 5, 'action': '平衡定量与定性信息', 'output': '将定量数据(如销量增速、渗透率)与定性描述(如政策解读、技术变革)有机结合,形成互补关系。例如,用定量数据支持新能源车高增长趋势,同时结合政策导向解释原因。', 'criteria_for_completion': '定量数据准确详实,定性分析深入浅出;两者比例适中,互为佐证。', 'common_issues_and_solutions': [{'issue': '过度依赖定量数据,忽视定性洞察。', 'solution': '加入专家访谈或行业调研,补充软性信息。'}, {'issue': '定性分析主观性强,缺乏事实支撑。', 'solution': '引用权威文献或实际案例增强说服力。'}]}, {'step': 6, 'action': '处理不确定性和多种可能性', 'output': '识别主要风险因素(如经济下行压力、市场竞争加剧),并针对每种风险提出应对策略;对于未来可能的变化,列出几种情景假设及其概率分布。', 'criteria_for_completion': '风险提示全面且具体,包含短期和长期风险;情景假设合理,覆盖范围广。', 'common_issues_and_solutions': [{'issue': '风险提示泛化,无法落地。', 'solution': '结合实际业务场景细化风险描述,提出切实可行的缓解措施。'}, {'issue': '仅考虑单一情景,忽视其他可能性。', 'solution': '采用蒙特卡洛模拟等工具生成多种情景,提高预测鲁棒性。'}]}, {'step': 7, 'action': '制作可视化材料辅助表达', 'output': '利用折线图、柱状图、表格等形式直观展示复杂数据,便于读者快速理解。例如,通过对比历史销量曲线揭示行业周期性特征。', 'criteria_for_completion': '图表设计简洁明了,标注完整;视觉效果与内容匹配,提升信息传递效率。', 'common_issues_and_solutions': [{'issue': '图表过多,干扰正文阅读。', 'solution': '精选最具代表性的图表,其余以附录形式呈现。'}, {'issue': '图表信息量不足,未能有效传达关键点。', 'solution': '优化图表设计,添加趋势线、参考值等辅助元素。'}]}, {'step': 8, 'action': '总结并输出最终成果', 'output': '汇总所有分析结果,形成完整的报告文档,包括封面、目录、正文、附录等内容;同时生成简版摘要供快速浏览。', 'criteria_for_completion': '报告格式规范,语言精炼;核心结论易于查找,方便用户快速掌握要点。', 'common_issues_and_solutions': [{'issue': '报告篇幅过长,难以抓住重点。', 'solution': '提炼关键信息置于摘要部分,正文中保持适度详细。'}, {'issue': '排版混乱,降低专业形象。', 'solution': '遵循标准化模板,统一字体、间距、编号等细节。'}]}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 09:12:18", "modified_time": "2025-08-14 09:12:18", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "d2fc175ec73f472ba2ba0f9a231d46e9", "experience_type": "text", "when_to_use": "此规划框架适用于需要结合定量与定性分析的金融行业深度研究报告,特别是涉及技术趋势、企业战略转型或ERP系统升级等复杂主题的研究。这类任务通常需要整合数据预测、市场洞察和风险评估,并以清晰的逻辑结构呈现给决策者。", "content": "[{'step': 1, 'action': '明确研究目标和受众需求', 'output': '一份简短的研究目标声明,包括报告的核心问题(如‘AI驱动ERP对企业核心竞争力的影响’)和受众群体(如CFO、CTO或投资者)。', 'completion_criteria': '目标清晰且具体,能够指导后续内容组织;受众需求被准确识别并反映在目标中。', 'common_issues': '目标过于宽泛或模糊,导致后续章节难以聚焦。', 'solutions': '通过头脑风暴列出潜在受众的核心关注点,并从中提炼出最具价值的研究方向。'}, {'step': 2, 'action': '构建报告的章节框架', 'output': '一个分层的章节大纲,涵盖背景信息、核心发现、数据分析、风险因素和行动建议。', 'completion_criteria': '章节结构逻辑清晰,能够引导读者从宏观到微观逐步深入;每个部分都有明确的功能定位。', 'common_issues': '章节安排不平衡,可能导致关键信息被弱化或冗余内容过多。', 'solutions': '采用‘金字塔原理’,将最重要的结论放在最前面,随后逐步展开支持性论据和细节。'}, {'step': 3, 'action': '收集和整理定量与定性数据', 'output': '一组经过筛选的数据图表(如市场份额预测、技术采用率统计)和关键引用(如专家观点、行业报告)。', 'completion_criteria': '数据来源可靠,覆盖全面,且与研究目标高度相关;定性信息与定量数据形成互补。', 'common_issues': '数据过于单一或缺乏权威性,影响论证的说服力。', 'solutions': '优先选择知名机构发布的数据(如IDC、Gartner),并通过交叉验证确保准确性。'}, {'step': 4, 'action': '建立核心观点的论证路径', 'output': '一套完整的论证链条,包括背景铺垫、数据支撑、案例说明和推导结论。', 'completion_criteria': '论证逻辑严密,每一步都有充分依据;观点层层递进,易于理解。', 'common_issues': '论证跳跃性过大,或忽略潜在的反面观点。', 'solutions': '使用‘假设-验证’方法,逐一检验每一步推导是否成立;主动引入反面观点并加以回应。'}, {'step': 5, 'action': '平衡历史信息与未来预测', 'output': '对比表格或时间轴图示,展示当前状态与未来趋势之间的关系。', 'completion_criteria': '历史数据为预测提供了坚实基础,预测部分基于合理假设且具有可操作性。', 'common_issues': '过度依赖历史数据,忽视未来不确定性;或预测过于乐观,缺乏实际落地路径。', 'solutions': '结合情景分析法,提出多种可能性及其触发条件,增强预测的可信度。'}, {'step': 6, 'action': '突出核心结论并设计视觉化呈现', 'output': '一页总结页,包含3-5个关键发现,以及图表、图形化的支持材料。', 'completion_criteria': '核心结论一目了然,视觉化元素直观且美观,能快速抓住读者注意力。', 'commonissues': '信息过载,导致重点不突出;或视觉化效果不佳,削弱信息传递效率。', 'solutions': '遵循‘少即是多’原则,只保留最关键的信息;利用专业工具(如Tableau、Power BI)优化图表设计。'}, {'step': 7, 'action': '处理不确定性和风险因素', 'output': '一段专门讨论风险的部分,包括已知风险、未知变量及应对策略。', 'completion_criteria': '风险描述具体且真实,应对措施切实可行;整体语气既坦诚又积极。', 'common_issues': '风险被低估或回避,使报告显得不够客观。', 'solutions': '参考行业标准和类似案例,量化风险的可能性和影响;同时强调企业的适应能力。'}, {'step': 8, 'action': '撰写执行摘要和最终校对', 'output': '一份精炼的执行摘要,以及无语法错误、格式统一的完整报告。', 'completion_criteria': '执行摘要独立成篇,无需阅读正文即可理解全文要点;语言流畅、专业性强。', 'common_issues': '执行摘要冗长或偏离主题;正文存在拼写或格式问题。', 'solutions': '让非专业人士审阅执行摘要,确认其易读性;使用自动化工具检查语法和格式一致性。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 09:14:14", "modified_time": "2025-08-14 09:14:14", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "2a9522afd524463b82944d1581a9df90", "experience_type": "text", "when_to_use": "该规划框架适用于贵金属及相关大宗商品的周度或短期市场观察、投资建议报告撰写,尤其适合需要结合宏观经济数据、市场表现和特定商品基本面进行综合分析的任务。也可扩展至其他周期性较强的行业(如能源、工业金属)的研究场景。", "content": "[{'step': 1, 'action': '明确分析目标与受众', 'output': '确定报告的目标(如为投资者提供短期交易建议或长期配置策略),并根据受众需求选择关键指标和信息深度。', 'completion_criteria': '清晰定义了报告的核心目的,并列出主要受众群体的需求点。', 'common_issues': '目标模糊或过于宽泛可能导致内容冗长且重点不突出。', 'solutions': '通过与团队或客户沟通,明确核心问题和优先级。'}, {'step': 2, 'action': '收集并整理基础数据', 'output': '汇总上周市场表现(板块涨跌幅、个股表现)、价格走势(SHFE黄金/白银)、宏观数据(CPI、利率、PMI等)及特有比值指标(金银比、金油比等)。', 'completion_criteria': '所有相关数据均完整呈现,涵盖定量与定性信息,且来源可靠。', 'common_issues': '数据缺失或滞后可能影响分析时效性。', 'solutions': '建立固定的数据获取渠道,设置自动化提醒更新最新数据。'}, {'step': 3, 'action': '设计章节结构以逻辑递进', 'output': '按照‘市场回顾→指标跟踪→投资建议→风险提示’的顺序组织内容,确保从现状描述到未来展望逐步深入。', 'completion_criteria': '每个部分之间逻辑连贯,无跳跃式论述;图表与文字说明相辅相成。', 'common_issues': '章节安排杂乱无章,容易让读者感到困惑。', 'solutions': '提前绘制思维导图,梳理各部分内容之间的关系。'}, {'step': 4, 'action': '构建核心观点与论证路径', 'output': '基于数据提炼核心结论(如看好黄金资产的理由:去美元化驱动+央行购金支撑),并通过多维度证据(历史趋势、当前动态、未来预测)层层递进支持。', 'completion_criteria': '核心观点明确且具有说服力,论证过程条理清晰。', 'common_issues': '缺乏充分依据的观点可能显得主观。', 'solutions': '每项论点至少配备两个以上独立但相关的数据或案例作为支撑。'}, {'step': 5, 'action': '平衡定量与定性分析', 'output': '在展示市场表现时侧重定量数据(如涨跌幅、库存变化),而在阐述投资逻辑时融入定性判断(如工业需求增长潜力)。', 'completion_criteria': '不同类型信息分布均衡,避免单一类型信息过载。', 'common_issues': '过度依赖某类信息可能削弱整体分析的全面性。', 'solutions': '制定比例分配规则,例如60%定量+40%定性。'}, {'step': 6, 'action': '适时提出风险因素', 'output': '在投资建议后单独列出潜在风险(如宏观经济变化、地缘政治不确定性),并说明其可能影响。', 'completion_criteria': '风险提示具体且贴近实际,能够引起读者警觉。', 'common_issues': '忽视风险因素或表述过于笼统。', 'solutions': '采用情景模拟法列举不同可能性及其后果。'}, {'step': 7, 'action': '制作可视化图表辅助理解', 'output': '针对复杂数据制作直观图表(如价格走势曲线、金银比变化图),并与正文紧密结合。', 'completion_criteria': '图表清晰易懂,与文字内容高度契合。', 'common_issues': '图表过多或设计不当会分散注意力。', 'solutions': '筛选最关键的信息制图,统一风格并添加简明注释。'}, {'step': 8, 'action': '审阅与优化语言表达', 'output': '检查全文逻辑是否流畅,用词是否精准,同时确保格式规范一致。', 'completion_criteria': '报告语言简洁专业,无明显语法错误或排版问题。', 'common_issues': '术语使用不当或行文啰嗦降低可读性。', 'solutions': '邀请同事交叉校对,特别关注专业术语的准确性。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 09:16:00", "modified_time": "2025-08-14 09:16:00", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "6aaeadb1a2204db3a02833e00a365f32", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及市场趋势预测等金融分析任务,特别是需要结合定量与定性数据进行综合评估的场景。例如,智能硬件、医疗设备、消费电子等行业研究报告或竞争格局分析。", "content": "[{'step': 1, 'action': '明确研究目标和核心问题', 'output': '定义清晰的研究范围和关键问题,例如市场规模、竞争格局、技术壁垒等。', 'evaluation': '是否明确了报告的核心结论方向,并能指导后续章节安排。', 'common_issues': '研究目标过于宽泛,导致信息冗余;应对方法是聚焦于2-3个核心问题。'}, {'step': 2, 'action': '构建逻辑清晰的章节结构', 'output': '按行业定义→分类→特征→发展历程→产业链分析→市场规模→竞争格局→政策梳理→企业分析的顺序组织内容。', 'evaluation': '章节间是否有递进关系,信息展示是否符合从基础到深入的认知路径。', 'common_issues': '章节顺序混乱或信息堆砌;应对方法是遵循“背景→现状→未来”的时间线逻辑。'}, {'step': 3, 'action': '优先展示核心结论', 'output': '在摘要部分直接呈现关键数据(如市场规模增长率、未来趋势)和主要观点(如生态协同化、技术创新驱动)。', 'evaluation': '读者是否能在前几页快速抓住报告的核心价值点。', 'common_issues': '核心结论被埋没在细节中;应对方法是在开头使用加粗字体或图表突出显示关键数据。'}, {'step': 4, 'action': '平衡定量与定性信息', 'output': '通过历史数据(如市场规模变化)、预测模型(如复合增长率)支持定性分析(如行业趋势),并辅以案例说明。', 'evaluation': '是否既提供了可靠的数据支撑,又避免了过度依赖单一类型信息。', 'common_issues': '数据不足或过多导致失衡;应对方法是确保每项定性分析都有至少一组数据佐证。'}, {'step': 5, 'action': '采用逐层递进的论证逻辑', 'output': '从宏观背景切入(如政策影响),逐步深入到具体领域(如医疗级设备渗透率提升),最后聚焦到企业竞争力。', 'evaluation': '论证是否环环相扣,且每个层次之间有自然过渡。', 'common_issues': '跳跃式论述造成理解困难;应对方法是增加过渡段落,解释上下文联系。'}, {'step': 6, 'action': '适时引入风险因素', 'output': '在讨论市场规模、竞争格局时提及供应链脆弱性、技术壁垒等潜在威胁。', 'evaluation': '风险因素是否在合理时机提出,且不破坏整体积极基调。', 'common_issues': '风险描述过早或过晚;应对方法是在正面分析后紧接提出相关挑战。'}, {'step': 7, 'action': '处理不确定性和多种可能性', 'output': '对未来的预测给出不同情景假设(如乐观/中性/悲观),并附上敏感性分析。', 'evaluation': '是否充分考虑了各种可能情况,同时保持结论稳健。', 'common_issues': '忽略极端情况导致结论偏颇;应对方法是加入概率分布或区间估计。'}, {'step': 8, 'action': '总结并提炼跨领域适应性洞察', 'output': '基于前述分析,提取可复用的经验框架(如技术突破如何推动细分市场发展)。', 'evaluation': '总结是否具有普适性,能够应用于其他类似行业研究。', 'common_issues': '总结过于局限,缺乏通用性;应对方法是抽象出更高维度的规律。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 09:17:36", "modified_time": "2025-08-14 09:17:36", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "8b17c153e27d46f1a7ea0a41b6d06b9e", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究、投资标的分析以及资本市场趋势解读等金融分析任务。尤其适合需要结合政策动态、技术发展、公司动态和市场表现进行综合评估的场景,例如周报、月报或专题研究报告的撰写。", "content": "[{'step': 1, 'action': '明确核心观点与主题', 'output': '提炼出报告的核心观点,例如本期报告聚焦于人形机器人、低空经济和AI基建等领域,并基于政府政策、公司动态和行业新闻构建整体分析框架。', 'completion_criteria': '核心观点清晰且具有前瞻性,能够引导后续章节展开;需涵盖政策支持、技术突破和市场机会三大要素。', 'common_issues': '核心观点过于宽泛或缺乏数据支撑。', 'solutions': '通过初步筛选关键事件和数据,确保核心观点有据可依。'}, {'step': 2, 'action': '组织章节结构并分配优先级', 'output': '按照“行业动态 → 政府新闻 → 公司动态 → 投资观点”的逻辑顺序安排内容,确保信息从宏观到微观逐步深入。', 'completion_criteria': '每个章节都有明确的信息重点,例如行业动态突出近期热点事件,政府新闻强调政策导向,公司动态聚焦具体企业进展,投资观点提供明确建议。', 'common_issues': '章节间逻辑不连贯或信息重叠。', 'solutions': '在编写前绘制信息地图,确保每部分内容独立且互补。'}, {'step': 3, 'action': '收集并整理多源数据', 'output': '整合来自政府公告、公司财报、行业新闻和市场表现的数据,形成定量与定性相结合的信息基础。', 'completion_criteria': '数据来源权威可靠,覆盖全面;定量数据包括股价变动、估值指标,定性信息涵盖政策解读和技术进展。', 'common_issues': '数据更新滞后或不完整。', 'solutions': '建立实时监控机制,利用Wind等专业工具快速获取最新数据。'}, {'step': 4, 'action': '构建论证逻辑链', 'output': '采用递进式论证方法,先阐述背景(如政策支持),再分析现状(如技术进展),最后提出未来展望(如投资机会)。', 'completion_criteria': '论证过程层次分明,逻辑链条完整;风险因素在合适时机提及,避免过早削弱信心。', 'common_issues': '论证跳跃性强或缺乏说服力。', 'solutions': '使用过渡句连接不同部分,确保逻辑流畅;引用权威数据增强论点可信度。'}, {'step': 5, 'action': '平衡历史与预测信息分布', 'output': '在回顾历史数据的同时,结合当前趋势作出合理预测,例如针对人形机器人领域,既总结过去的技术突破,又展望商业化应用前景。', 'completion_criteria': '历史与预测信息比例均衡,预测部分基于充分的历史数据分析。', 'common_issues': '过度依赖历史数据忽略未来可能性。', 'solutions': '引入专家意见或模型预测,为未来趋势提供科学依据。'}, {'step': 6, 'action': '设计可视化图表辅助表达', 'output': '制作表格和图表展示关键数据,例如公司盈利预测表、股价变动趋势图等,帮助读者直观理解复杂信息。', 'completion_criteria': '图表设计简洁明了,标注清晰;与正文内容紧密相关,无冗余信息。', 'common_issues': '图表过多导致信息冗杂或图表不足影响理解。', 'solutions': '根据信息密度选择合适的图表数量,确保每张图表都服务于核心观点。'}, {'step': 7, 'action': '提出投资建议与风险提示', 'output': '基于前述分析,给出明确的投资评级和目标标的,同时列出潜在风险,如技术发展不及预期或下游需求疲软。', 'completion_criteria': '投资建议具体可行,风险提示全面且客观;两者均以数据和事实为基础。', 'common_issues': '投资建议模糊或风险提示缺失。', 'solutions': '在结论部分设置专门的风险讨论环节,逐条列举可能的不确定性。'}, {'step': 8, 'action': '校对与优化语言表达', 'output': '检查报告的语言表述是否准确、简洁,避免歧义;确保格式统一、排版美观。', 'completion_criteria': '全文无语法错误或语义模糊之处;图表、表格与文字描述一致。', 'common_issues': '语言啰嗦或术语使用不当。', 'solutions': '邀请同事交叉审阅,重点关注术语规范性和语言流畅性。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 09:19:26", "modified_time": "2025-08-14 09:19:26", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "0a1eed54a6f24ff898ad289e5f7b1705", "experience_type": "text", "when_to_use": "适用于行业深度研究、投资标的分析、风险评估报告等需要结合历史数据、未来预测和市场催化因素的金融分析任务,尤其适合军工、科技等政策驱动型行业的投资逻辑推导。", "content": "[{'step': 1, 'action': '明确分析目标与核心逻辑', 'output': '提炼出清晰的投资逻辑框架,包括主要驱动因素(如阅兵、军贸、景气反转、政策规划等)。', 'completion_criteria': '投资逻辑框架是否覆盖了关键驱动因素,并能有效解释行业发展趋势。', 'common_issues': '可能忽略次要但重要的驱动因素。', 'solutions': '通过团队讨论或外部专家意见补充遗漏点。'}, {'step': 2, 'action': '组织章节结构并分配信息优先级', 'output': '形成内容目录,将核心结论放在显眼位置,如开头部分;定量与定性信息分布合理,历史复盘与未来预测平衡呈现。', 'completion_criteria': '章节安排是否逻辑清晰,信息展示是否符合读者认知顺序,核心结论是否突出。', 'common_issues': '章节之间衔接不流畅,或信息堆砌导致重点模糊。', 'solutions': '采用金字塔原理设计结构,确保每个章节服务于投资逻辑主线。'}, {'step': 3, 'action': '收集并分析历史数据以验证逻辑假设', 'output': '生成历史复盘图表及数据分析结果,展示过往类似事件对市场的具体影响。', 'completion_criteria': '历史数据是否充分支持当前逻辑假设,且无明显偏差或误导。', 'common_issues': '数据样本不足或代表性差。', 'solutions': '扩大数据来源范围,交叉验证不同时间段的案例。'}, {'step': 4, 'action': '整合最新动态与催化剂事件', 'output': '梳理近期行业重大事件(如阅兵官宣、地缘冲突),分析其对市场情绪和板块表现的潜在影响。', 'completion_criteria': '是否捕捉到所有重要催化剂,并准确评估其权重。', 'common_issues': '遗漏某些短期但高影响力的事件。', 'solutions': '建立实时跟踪机制,及时更新事件库。'}, {'step': 5, 'action': '构建多层次论证路径', 'output': '从宏观政策、中观行业趋势到微观企业订单情况,逐层递进支撑核心观点。', 'completion_criteria': '论证链条是否完整,各层次间是否存在逻辑断裂。', 'common_issues': '论证过于单一,缺乏多维度视角。', 'solutions': '引入更多维度的数据和案例,增强说服力。'}, {'step': 6, 'action': '提出风险提示并评估不确定性', 'output': '列出可能的风险因素(如订单进度不及预期),并说明应对策略。', 'completion_criteria': '风险提示是否全面且客观,应对措施是否切实可行。', 'common_issues': '风险描述流于表面,未深入探讨潜在后果。', 'solutions': '参考过往失败案例,细化风险情景模拟。'}, {'step': 7, 'action': '形成具体投资建议', 'output': '根据前述分析,推荐相关标的及其配置逻辑。', 'completion_criteria': '投资建议是否基于严密分析,且具有可操作性。', 'common_issues': '建议泛化,缺乏针对性。', 'solutions': '针对不同客户群体调整建议颗粒度,提供定制化方案。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 09:20:51", "modified_time": "2025-08-14 09:20:51", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "6746976134094b1b834ee6e5c81bb2fc", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究、投资标的分析以及周期性市场观察报告,特别是针对大宗商品(如钾肥、磷化工、农药)等资源型行业的供需动态、价格趋势和政策影响的分析。", "content": "[{'step': 1, 'action': '明确研究范围与核心观点', 'output': '确定分析的核心主题及关键结论,例如钾肥的供需紧平衡、磷矿石价格高位运行、农药行业景气拐点等。', 'evaluation': '是否清晰定义了研究目标,并围绕核心观点展开论述,能够通过后续章节内容验证其逻辑一致性。', 'common_issues': '研究范围过于宽泛或核心观点模糊。应对方法是聚焦于特定领域并提炼出可量化的结论。'}, {'step': 2, 'action': '构建章节结构并分配信息优先级', 'output': '按照从宏观到微观的顺序组织章节,例如先讨论全球供需格局,再深入国内市场的具体动态,最后提出投资建议。', 'evaluation': '章节结构是否逻辑清晰,信息展示是否符合从重要到次要的优先级原则,核心结论是否突出且易于理解。', 'common_issues': '章节安排混乱或信息冗余。应对方法是提前制定详细提纲,确保每部分内容服务于整体分析目标。'}, {'step': 3, 'action': '整合定量与定性数据,平衡历史与预测信息', 'output': '结合统计数据(如产量、库存、价格)、图表(如供需曲线、价格走势)和定性描述(如政策变化、行业趋势),并通过时间线对比历史表现与未来预测。', 'evaluation': '是否全面覆盖定量与定性信息,历史数据是否准确支持当前分析,预测是否有合理依据(如政策导向、供需变化)。', 'common_issues': '数据不足或预测缺乏依据。应对方法是多源验证数据可靠性,并参考权威机构预测模型。'}, {'step': 4, 'action': '层层递进建立论证路径', 'output': '从基础背景入手,逐步引入供需关系、价格驱动因素、政策影响等内容,使用因果关系链强化论点,例如‘钾肥资源稀缺→进口依赖度高→价格上涨’。', 'evaluation': '论证是否环环相扣,每一步推导是否有充分的数据或逻辑支撑,是否存在跳跃式推理。', 'common_issues': '论证链条断裂或过度简化复杂问题。应对方法是细化每个推导环节,补充必要的中间结论。'}, {'step': 5, 'action': '适时揭示风险因素并处理不确定性', 'output': '在核心分析完成后,单独列出潜在风险(如国际贸易摩擦、原材料价格波动),并说明如何应对这些不确定性。', 'evaluation': '风险因素是否全面且及时披露,是否提供针对性解决方案以降低负面影响。', 'common_issues': '忽略重大风险或未给出缓解措施。应对方法是系统梳理可能影响分析结果的所有变量。'}, {'step': 6, 'action': '形成投资建议与估值表', 'output': '基于前述分析推荐具体标的公司,附带详细的盈利预测和估值指标(如PE、PB),并解释推荐理由。', 'evaluation': '投资建议是否与前文分析一致,估值表是否包含关键财务指标,推荐逻辑是否清晰。', 'common_issues': '建议脱离实际分析或估值参数不透明。应对方法是以数据为支撑,确保推荐与分析无缝衔接。'}, {'step': 7, 'action': '总结全文并附加免责声明', 'output': '简要回顾核心观点,强调主要发现,并加入法律声明以规避责任。', 'evaluation': '总结是否精炼且涵盖所有重点,免责声明是否规范。', 'common_issues': '总结流于形式或遗漏重要内容。应对方法是对照提纲检查总结完整性。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 09:22:20", "modified_time": "2025-08-14 09:22:20", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "2f76461af8e34d94ac1fcd60b11ff957", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究报告、投资标的分析、政策影响评估以及新能源和公用事业领域的战略决策支持。特别适合包含定量与定性分析结合、历史数据与未来预测并重的场景,如能源行业动态跟踪、政策解读及企业投资价值评估。", "content": "[{'step': 1, 'action': '明确报告目标与核心问题', 'output': '确定报告的研究范围、目标受众和关键议题(如风光新增装机下滑原因、雅下水电工程对行业的影响等)。', 'how_to_judge_completion': '是否清晰定义了研究的边界条件,并列出了所有需要回答的核心问题。', 'common_issues': '目标过于宽泛或模糊,导致后续分析缺乏聚焦。', 'solutions': '通过团队讨论或客户沟通明确优先级,确保目标具体且可执行。'}, {'step': 2, 'action': '收集并整理相关数据与政策信息', 'output': '从权威来源(如国家能源局、发改委等)获取最新政策文件、行业统计数据及相关背景资料。', 'how_to_judge_completion': '数据覆盖全面,包括定量(如装机容量、发电量)和定性(如政策解读、市场趋势)信息,且来源可靠。', 'common_issues': '数据不完整或过时,可能影响结论的准确性。', 'solutions': '建立固定的数据更新机制,定期检查官方发布渠道,确保及时更新。'}, {'step': 3, 'action': '设计章节结构与逻辑框架', 'output': '根据内容复杂度安排章节顺序,通常按照“现状描述→问题剖析→未来展望”的逻辑组织内容。', 'how_to_judge_completion': '章节间逻辑连贯,重点突出,能够引导读者逐步深入理解主题。', 'common_issues': '章节之间存在重复或脱节现象,削弱整体流畅性。', 'solutions': '提前绘制思维导图,梳理各部分之间的关系,避免冗余或遗漏。'}, {'step': 4, 'action': '进行定量与定性分析', 'output': '对历史数据进行统计分析,同时结合政策导向和市场动态展开定性推演,形成初步结论。', 'how_to_judge_completion': '定量分析结果准确无误,定性分析观点鲜明且有据可依。', 'common_issues': '定量分析方法选择不当或定性分析缺乏深度。', 'solutions': '采用标准化的分析工具(如Excel、Python),并在定性分析中引用多方专家意见增强说服力。'}, {'step': 5, 'action': '提出风险因素与不确定性应对策略', 'output': '识别潜在风险(如装机规模不及预期、煤炭价格波动),并针对不同情景制定应对方案。', 'how_to_judge_completion': '风险因素覆盖全面,应对措施切实可行,能有效降低不确定性带来的负面影响。', 'common_issues': '忽视某些重要风险点,或提出的解决方案不够具体。', 'solutions': '参考类似案例中的风险清单,邀请领域专家参与审阅,完善风险评估。'}, {'step': 6, 'action': '撰写核心结论与投资建议', 'output': '基于前述分析提炼出简洁明了的核心结论,并给出具体的投资建议(如推荐关注特定企业或板块)。', 'how_to_judge_completion': '结论逻辑严密,建议操作性强,符合目标受众需求。', 'common_issues': '结论过于笼统,无法直接指导行动。', 'solutions': '将结论与实际案例挂钩,用数字和实例支撑观点,提高实用性。'}, {'step': 7, 'action': '制作图表与可视化展示', 'output': '利用专业软件生成直观的图表(如发电装机增速对比图、碳交易价格走势),辅助说明关键发现。', 'how_to_judge_completion': '图表清晰易懂,与文本内容高度契合,增强了报告的可读性。', 'common_issues': '图表设计混乱,难以快速抓住重点。', 'solutions': '遵循统一的设计规范,使用颜色和标注突出核心信息。'}, {'step': 8, 'action': '校对与反馈优化', 'output': '完成初稿后,邀请同行或客户审阅,根据反馈调整语言表达、补充遗漏内容。', 'how_to_judge_completion': '最终版本无明显错误,内容详实且格式统一。', 'common_issues': '忽略细节问题(如拼写错误、单位不一致),影响专业形象。', 'solutions': '设置多轮校对流程,指定专人负责质量把控。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 09:23:43", "modified_time": "2025-08-14 09:23:43", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "3eaed6915ff24f1dae378f3beed164ca", "experience_type": "text", "when_to_use": "适用于行业深度研究、投资标的分析、风险评估报告等需要综合定量与定性信息的任务。", "content": "[{'step': 1, 'action': '明确目标受众并收集关键信息', 'output': '确定报告面向的客户群体,并整理市场动态、政策更新、公司公告等基础资料。', 'completion_criteria': '所有相关信息已分类汇总,无遗漏重要事件或数据。', 'common_issues': ['信息来源不足', '数据不完整'], 'solutions': ['拓宽数据渠道', '联系行业专家获取补充信息']}, {'step': 2, 'action': '构建报告框架,按优先级排列章节', 'output': '制定包含摘要、市场概览、个股表现、行业新闻、公司公告、风险提示等内容的大纲。', 'completion_criteria': '章节间逻辑连贯,信息分布合理,满足目标受众需求。', 'common_issues': ['章节顺序混乱', '重点信息被弱化'], 'solutions': ['参考类似成功案例调整结构', '邀请同行评审优化框架']}, {'step': 3, 'action': '填充核心内容,注重数据支持', 'output': '撰写各章节内容,确保定量数据准确且定性分析有据可依。', 'completion_criteria': '每一章节均包含清晰的核心观点,并附有可靠的数据支撑。', 'common_issues': ['数据错误', '分析过于主观'], 'solutions': ['双重校验数据源', '引入多方视角验证结论']}, {'step': 4, 'action': '加入风险提示与不确定性分析', 'output': '列出主要风险因素,并针对不确定性提出多种可能性。', 'completion_criteria': '风险提示具体且具有指导意义,未忽略重大隐患。', 'common_issues': ['风险描述模糊', '缺乏应对策略'], 'solutions': ['参考历史案例完善风险描述', '增加情景模拟分析']}, {'step': 5, 'action': '提炼核心结论并优化表达', 'output': '将核心结论置于摘要或开头部分,确保简洁明了。', 'completion_criteria': '读者能在短时间内抓住报告主旨。', 'common_issues': ['结论冗长', '缺乏吸引力'], 'solutions': ['精简语言', '使用图表辅助说明']}, {'step': 6, 'action': '审阅与反馈修正', 'output': '完成初稿后进行内部审核,根据反馈修改完善。', 'completion_criteria': '最终版本无明显错误,逻辑通顺且易于理解。', 'common_issues': ['审阅流于形式', '反馈意见分歧'], 'solutions': ['设立严格的审阅流程', '召开讨论会统一意见']}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 09:25:06", "modified_time": "2025-08-14 09:25:06", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "66ad815e04db40bc8856a74621774b82", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及风险评估报告等金融分析任务,尤其是需要结合定量与定性数据、历史与预测信息进行综合判断的场景。", "content": "[{'step': 1, 'action': '明确分析目标和范围,定义核心问题', 'output': '清晰界定本次分析的核心主题(如通信行业的市场表现及投资机会)和具体范围(如时间区间、行业细分领域)。', 'completion_criteria': '能够用一句话概括分析目标,并确保所有后续内容围绕该目标展开。', 'common_issues': '目标过于宽泛或模糊,导致分析缺乏聚焦。', 'solution': '在任务开始时与利益相关方确认目标,使用SMART原则(具体、可衡量、可实现、相关性、时限性)来定义目标。'}, {'step': 2, 'action': '收集并整理基础数据,包括定量和定性信息', 'output': '形成数据表格、图表和关键指标汇总,涵盖市场表现(如涨跌幅、估值水平)、行业动态(如政策、技术进展)和企业行为(如财报、战略动向)。', 'completion_criteria': '数据覆盖全面且来源可靠,能够支撑后续分析的逻辑推导。', 'common_issues': '数据不完整或来源不可靠,影响分析的准确性。', 'solution': '优先选择权威数据源(如Wind、官方统计),并通过交叉验证确保数据一致性。'}, {'step': 3, 'action': '构建章节结构,安排信息优先级', 'output': '设计报告框架,将最核心结论放在开头(如通信板块跑赢大盘),随后依次展示支持性数据(如个股涨跌、PE分位数)、行业动态和技术趋势。', 'completion_criteria': '章节逻辑清晰,信息优先级符合“重要性递减”原则,读者能快速抓住重点。', 'common_issues': '章节顺序混乱或信息堆砌,导致阅读体验不佳。', 'solution': '采用金字塔原理,先呈现结论,再逐步展开支持性细节。'}, {'step': 4, 'action': '深入分析行业动态和技术趋势,提炼关键驱动因素', 'output': '识别行业内的主要增长点(如AI应用、光通信需求)和潜在风险(如技术创新进展缓慢、地缘政治影响),并结合数据进行论证。', 'completion_criteria': '每个关键驱动因素都有数据或案例支持,且与整体分析目标一致。', 'common_issues': '分析流于表面,缺乏深度洞察。', 'solution': '针对每个驱动因素,提出“为什么重要”、“如何影响行业”的问题,并通过多角度数据验证。'}, {'step': 5, 'action': '提出投资建议,结合风险提示', 'output': '基于前文分析,给出明确的投资方向(如关注运营商、光通信公司、技术创新企业),并列出可能的风险因素(如产业发展不及预期)。', 'completion_criteria': '建议具体可行,风险提示全面且具有针对性。', 'common_issues': '建议过于笼统或忽视潜在风险。', 'solution': '建议需结合行业特点和当前市场环境,风险提示应覆盖宏观、中观和微观层面。'}, {'step': 6, 'action': '总结报告,突出核心结论', 'output': '以简洁的语言重申核心观点(如通信行业估值回升、创新应用前景广阔),并附上关键图表和数据作为佐证。', 'completion_criteria': '总结部分能够独立成篇,让读者快速了解报告主旨。', 'common_issues': '总结冗长或偏离主题。', 'solution': '总结时仅保留最关键的信息,避免重复细节。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 09:26:41", "modified_time": "2025-08-14 09:26:41", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "e1c4ef0bfcaf499f832ba49d702635f5", "experience_type": "text", "when_to_use": "适用于行业深度研究、市场动态分析、投资标的筛选及风险评估等任务。", "content": "[{'step': 1, 'action': '明确目标受众和核心主题', 'output': '确定报告的目标(如为投资者提供决策依据)和核心主题(如化妆品行业的最新动态)。', 'evaluation_criteria': '是否能够清晰回答‘谁是读者’和‘报告要解决什么问题’。', 'common_issues': '主题过于宽泛或模糊,导致后续内容难以聚焦。', 'solution': '通过头脑风暴或初步调研缩小范围,确保主题具体且相关性强。'}, {'step': 2, 'action': '收集并整理定量与定性数据', 'output': '获取权威来源的数据(如统计局、企业财报),并分类整理为历史数据、当前动态和预测趋势三大类。', 'evaluation_criteria': '数据是否准确、全面,并能覆盖所有关键维度(如市场规模、企业表现、政策环境)。', 'common_issues': '数据缺失或不一致,影响分析可靠性。', 'solution': '多渠道交叉验证数据,标注数据来源和时效性。'}, {'step': 3, 'action': '构建逻辑清晰的章节结构', 'output': '设计由宏观到微观的章节顺序,通常包括总览、细分领域动态、政策法规、资本事件等模块。', 'evaluation_criteria': '章节之间是否有逻辑递进关系,是否便于读者快速找到所需信息。', 'common_issues': '章节内容重复或跳跃,导致阅读体验差。', 'solution': '绘制思维导图,确保每个章节内容独立且相互关联。'}, {'step': 4, 'action': '撰写核心结论并突出重点', 'output': '将最重要的发现(如市场规模变化、重大政策调整)放在报告开头,并用图表辅助说明。', 'evaluation_criteria': '核心结论是否一目了然,是否能引导读者继续深入阅读。', 'common_issues': '核心结论埋没在细节中,未能第一时间吸引注意。', 'solution': '使用加粗字体或视觉元素(如图表标题)强化关键信息。'}, {'step': 5, 'action': '平衡定量与定性信息', 'output': '将统计数字与案例分析相结合,例如用企业财报数据支撑对其战略的评价。', 'evaluation_criteria': '定量与定性信息是否比例恰当,是否能共同构建完整的故事线。', 'common_issues': '信息偏向单一类型,缺乏多样性。', 'solution': '制定信息配比计划,确保每部分内容都有数据支持和案例佐证。'}, {'step': 6, 'action': '识别并阐述风险因素', 'output': '列举行业内的潜在风险(如政策变动、市场竞争加剧),并通过实际案例加以说明。', 'evaluation_criteria': '风险描述是否客观且有据可依,是否能帮助读者形成全面认识。', 'common_issues': '风险分析过于笼统,缺乏针对性。', 'solution': '引用具体事件或数据,增强风险描述的可信度。'}, {'step': 7, 'action': '处理不确定性和多种可能性', 'output': '针对未决事项(如政策实施效果)列出多种假设场景,并附上相应的概率估算。', 'evaluation_criteria': '是否充分考虑了各种可能性,是否提供了合理的应对建议。', 'common_issues': '忽略不确定性,导致分析显得片面。', 'solution': '引入专家意见或模型预测,提升分析的科学性。'}, {'step': 8, 'action': '审阅与优化表达', 'output': '检查语言是否简洁明了,图表是否直观易懂,格式是否统一。', 'evaluation_criteria': '报告是否专业、易于理解,是否符合行业标准。', 'common_issues': '术语过多或表述冗长,影响阅读体验。', 'solution': '邀请同行评审,根据反馈修改语言和排版。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 09:28:53", "modified_time": "2025-08-14 09:28:53", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "f72935a72a334ee5b3cb007e19ed18c8", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及周期性商品(如生猪养殖)的市场动态评估。尤其适合需要结合定量数据和定性政策导向,输出投资建议及风险提示的金融分析任务。", "content": "[{'step': 1, 'action': '明确分析主题与目标', 'output': '确定核心议题(如出栏均重、价格走势等关键指标),并定义分析目标(如预测市场趋势、评估政策影响)。', 'completion_criteria': '能够清晰回答‘本次分析的核心问题是什么’,并列出至少3个具体分析维度。', 'common_issues': '目标过于宽泛或模糊,导致后续分析无法聚焦。', 'solutions': '在初期阶段与团队或客户确认核心关注点,并用量化指标衡量分析目标是否达成。'}, {'step': 2, 'action': '收集并整理基础数据', 'output': '获取权威来源的定量数据(如钢联数据、农业农村部监测数据)和定性信息(如政策文件、行业新闻),并进行初步清洗。', 'completion_criteria': '数据覆盖所有分析维度,且来源可靠,无明显缺失或异常值。', 'common_issues': '数据来源不一致或缺乏权威性,导致分析结论可信度下降。', 'solutions': '优先选择官方统计数据或行业公认的第三方数据平台,同时标注数据来源以备核查。'}, {'step': 3, 'action': '构建章节结构并分配信息权重', 'output': '设计报告框架,包括投资摘要、数据分析、政策解读、投资策略和风险提示,确保核心结论在前两页突出展示。', 'completion_criteria': '章节逻辑清晰,信息分布合理,读者能在5分钟内抓住核心观点。', 'common_issues': '章节安排杂乱,次要信息占用过多篇幅,削弱核心结论的影响力。', 'solutions': '先列出每个章节的关键内容清单,再根据重要性排序,确保核心结论优先呈现。'}, {'step': 4, 'action': '逐层递进分析数据', 'output': '通过环比、同比等时间序列分析方法揭示趋势,结合历史数据与当前市场状况推导未来可能的变化路径。', 'completion_criteria': '每项数据都配有清晰的解释和上下文关联,形成连贯的论证链条。', 'common_issues': '仅罗列数据而缺乏深入解读,导致分析流于表面。', 'solutions': '对每组数据提出至少一个问题(例如‘为什么会出现这种变化?’),并通过进一步分析找到答案。'}, {'step': 5, 'action': '引入政策与外部环境因素', 'output': '结合近期政策动向(如农业农村部座谈会)和外部条件(如环保趋严),评估其对市场的潜在影响。', 'completion_criteria': '政策解读与数据分析紧密结合,形成对未来趋势的综合判断。', 'common_issues': '政策分析脱离实际数据支持,显得空洞或主观。', 'solutions': '将政策内容拆解为具体措施,并逐一与数据变化建立联系。'}, {'step': 6, 'action': '处理不确定性与多种可能性', 'output': '识别主要风险因素(如猪价下行风险、疫病风险),并通过情景模拟或敏感性分析探讨不同假设下的结果。', 'completion_criteria': '风险提示全面且有依据,包含至少两种可能的情景预测。', 'common_issues': '忽视不确定性或仅简单提及风险,未提供应对策略。', 'solutions': '针对每个风险点制定具体的监控指标和缓解方案,增强报告实用性。'}, {'step': 7, 'action': '形成投资建议与策略', 'output': '基于前述分析,推荐具体的投资标的(如牧原股份、温氏股份)及其逻辑支撑,并分板块给出操作建议。', 'completion_criteria': '投资建议具有可操作性,且与分析结论高度一致。', 'common_issues': '投资建议泛化或缺乏针对性,难以指导实际决策。', 'solutions': '为每个推荐标的附上详细的筛选标准和预期收益区间,提升建议的专业性和说服力。'}, {'step': 8, 'action': '撰写总结与风险提示', 'output': '提炼核心观点,强调关键风险,并再次提醒投资者注意市场波动。', 'completion_criteria': '总结部分简洁有力,风险提示涵盖所有重大不确定性。', 'common_issues': '总结过于冗长或偏离主题,风险提示不够全面。', 'solutions': '采用‘一句话总结+三点核心要点’的格式,确保信息传递高效且准确。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 09:31:26", "modified_time": "2025-08-14 09:31:26", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "c806956842e7405282bbed95c9511ddb", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究、投资标的分析以及市场趋势评估类的金融分析任务。尤其适合需要结合定量与定性数据,对细分领域进行多维度拆解,并提出明确投资建议和风险提示的场景。", "content": "[{'step': 1, 'action': '明确报告目标与结构框架', 'output': '确定报告的核心目标(如分析有色金属行业的短期表现及投资机会),并设计章节结构(行情回顾、细分领域分析、重大事件解读、投资建议与风险提示)。', 'completion_criteria': '章节安排逻辑清晰,覆盖行情回顾、细分领域分析、重大事件解读、投资建议与风险提示等核心模块。', 'common_issues': '章节间可能存在重复或信息遗漏。', 'solutions': '制定检查清单,确保每个模块内容独立且完整;通过同行评审确认结构合理性。'}, {'step': 2, 'action': '收集并整理定量与定性数据', 'output': '从权威数据源(如Wind、SMM、iFinD)获取金属价格、市场指数、政策公告等定量数据,同时整合行业新闻、公司公告等定性信息。', 'completion_criteria': '数据来源可靠,涵盖近两周、近一月及年初至今的时间维度,确保各细分领域的关键指标无遗漏。', 'common_issues': '数据更新滞后或来源不一致。', 'solutions': '优先选择实时更新的数据平台,标注数据时间戳,确保时效性;对不同来源的数据进行交叉验证。'}, {'step': 3, 'action': '分领域展开深入分析', 'output': '按贵金属、工业金属、小金属、稀土、能源金属等细分领域逐一分析,结合供需关系、政策影响、价格走势等多维度展开论述。', 'completion_criteria': '每个细分领域的分析均包含价格变化、驱动因素、未来展望三部分内容,且有图表支持。', 'common_issues': '分析深度不足或缺乏数据支撑。', 'solutions': '使用SWOT分析法梳理驱动因素;为每个领域制作至少一张趋势图或对比表。'}, {'step': 4, 'action': '提炼核心结论与投资建议', 'output': '基于分析结果,提炼出明确的投资建议(如重点关注能源金属、小金属及稀土投资机会),并结合市场情绪和政策拐点提供具体操作策略。', 'completion_criteria': '投资建议具有可操作性,且与前文分析逻辑一致,能够直接指导投资者决策。', 'common_issues': '建议过于笼统或与分析脱节。', 'solutions': '在撰写建议时回溯前文分析,确保每条建议都有数据或逻辑支持;加入情景化假设以增强实用性。'}, {'step': 5, 'action': '识别并阐述潜在风险', 'output': '列出宏观经济风险、政策变动风险、供需变化等可能影响投资收益的风险因素,并说明其潜在影响。', 'completion_criteria': '风险提示全面且具体,能够帮助投资者提前规避潜在损失。', 'common_issues': '风险描述过于泛化,缺乏针对性。', 'solutions': '针对每个细分领域单独分析风险;结合历史案例说明风险的实际影响。'}, {'step': 6, 'action': '优化信息展示与视觉呈现', 'output': '通过表格、图表等形式直观展示数据,并合理安排信息优先级,确保核心结论突出。', 'completion_criteria': '报告中所有图表均配有清晰标题和数据来源,且与正文内容紧密关联;核心结论在摘要部分得到充分展现。', 'common_issues': '图表过多或过少,信息分布不均衡。', 'solutions': '根据内容重要性分配图表数量;确保每张图表都能直接支持某个分析点。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 09:32:53", "modified_time": "2025-08-14 09:32:53", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "9c1222d60fcd4da5af86d3c0d2189ea0", "experience_type": "text", "when_to_use": "此规划框架适用于行业动态分析、突发事件影响评估、投资标的筛选与推荐等类型的金融分析任务。尤其适合在医疗健康、传染病防控等具有政策导向和快速变化特征的行业中,对突发公共卫生事件进行及时解读,并结合资本市场提供投资建议。", "content": "[{'step': 1, 'action': '明确分析主题和背景信息', 'output': '确定核心事件(如基孔肯雅热病例增加及诊疗方案发布)及其影响范围,包括时间、地点、涉及人群和政策动态。', 'completion_criteria': '能够清晰界定事件的核心要素(如病毒传播特点、政策发布时间点等),并列出关键利益相关方(如政府机构、检测公司等)。', 'common_issues': '可能忽略事件的多维度影响(如经济、社会、政策等)。应对方法是通过多方数据源交叉验证,确保全面覆盖。', 'context_adaptation': '若应用于其他行业,需根据行业特性调整背景信息收集的重点,例如在科技行业中关注技术突破或监管变化。'}, {'step': 2, 'action': '构建章节结构以逻辑化组织内容', 'output': '按照“事件概述-数据分析-市场影响-投资建议”的顺序组织报告,确保从基础信息到具体行动建议逐步递进。', 'completion_criteria': '每个章节间有清晰的逻辑衔接,且信息分布合理:事件概述聚焦于事实陈述,数据分析强调定量与定性结合,市场影响突出行业动态,投资建议则基于前文推导得出。', 'common_issues': '章节之间的过渡生硬或信息重复。应对方法是提前设计好每部分的核心目标,避免冗余。', 'context_adaptation': '对于不同场景,可调整章节权重。例如,在风险评估报告中,可将风险因素单独列为一个重点章节。'}, {'step': 3, 'action': '优先展示核心结论并辅以数据支持', 'output': '在摘要部分直接呈现最重要的发现(如基孔肯雅热的传播趋势、诊疗手段现状)以及投资标的推荐,随后用详细数据和图表支撑这些结论。', 'completion_criteria': '核心结论简洁明了,能在30秒内让读者抓住重点;数据支持充分且来源可靠。', 'common_issues': '过度依赖复杂数据导致核心结论被淹没。应对方法是采用金字塔原理,先结论后细节。', 'context_adaptation': '在不同任务中,可根据受众需求调整优先级。例如,面向决策层时更注重战略层面的结论,而面向执行层时则需细化操作步骤。'}, {'step': 4, 'action': '平衡定量与定性信息,融合历史与预测视角', 'output': '整合定量数据(如病例数量、检测方法参数)与定性描述(如政策解读、临床表现),同时对比历史数据(如过往传播案例)与未来预测(如潜在传播区域)。', 'completion_criteria': '定量与定性信息比例适中,历史与预测视角均得到体现,且两者之间有逻辑关联。', 'common_issues': '可能偏重某一类信息,导致整体失衡。应对方法是设置检查清单,确保各类信息均有所涵盖。', 'context_adaptation': '在不同场景下,可根据任务性质调整信息类型的比例。例如,在风险评估中更侧重定量分析,而在策略制定中更重视定性判断。'}, {'step': 5, 'action': '层层递进建立论证路径', 'output': '从病毒传播机制出发,逐步引申至检测技术的应用现状,再进一步讨论其对资本市场的潜在影响,最终提出具体投资建议。', 'completion_criteria': '每一步论证都建立在上一步的基础上,形成连贯的逻辑链条,且无跳跃式推理。', 'common_issues': '论证过程缺乏层次感,容易显得杂乱无章。应对方法是使用流程图或思维导图梳理思路。', 'context_adaptation': '在跨领域应用时,需根据领域特点调整论证路径。例如,在消费品行业中,可从消费者行为入手,逐步延伸至品牌价值和市场表现。'}, {'step': 6, 'action': '适时提出风险因素并探讨应对策略', 'output': '在分析过程中适时引入风险提示(如传播范围扩大、检测量不及预期),并在最后总结部分集中讨论如何规避或减轻这些风险。', 'completion_criteria': '风险提示既不过早也不过晚出现,且针对每个风险都提供了可行的应对措施。', 'common_issues': '风险提示过于笼统或缺乏针对性。应对方法是结合具体情境剖析风险成因,并匹配相应的解决方案。', 'context_adaptation': '在不同场景中,风险提示的时机和方式需灵活调整。例如,在长期战略规划中,可将风险作为独立模块深入探讨。'}, {'step': 7, 'action': '处理不确定性和多种可能性', 'output': '通过敏感性分析、情景模拟等方式,探讨不同假设条件下的结果差异(如病毒传播速度的不同情景对检测需求的影响)。', 'completion_criteria': '能够清晰展示不确定性对结论的影响,并为每种可能性提供合理的解释和应对预案。', 'common_issues': '忽视不确定性可能导致结论过于绝对化。应对方法是主动识别关键变量,并测试其波动范围。', 'context_adaptation': '在不同任务中,可选择适合的工具处理不确定性。例如,在财务建模中使用蒙特卡洛模拟,在政策分析中采用多方案比较。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 09:34:54", "modified_time": "2025-08-14 09:34:54", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "90d42dc5180d4a05b8c2deed19b5f971", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究、投资标的分析、周期性行业(如农业、养殖业)趋势预测及风险评估报告。尤其适合在需结合定量与定性数据,对复杂市场动态进行梳理和投资建议的情境下使用。", "content": "[{'step': 1, 'action': '明确分析目标与范围', 'output': '确定报告的核心主题(如饲料行业回升周期、生猪养殖边际改善),并界定分析对象的边界(如农林牧渔板块中的具体子行业)。', 'how_to_judge_completion': '核心主题清晰且与当前市场热点或客户关注点高度相关;范围界定合理,覆盖主要影响因素。', 'common_issues_and_solutions': {'问题': '目标过于宽泛导致难以聚焦。', '解决方案': '通过团队讨论或客户反馈,优先锁定最具价值的细分领域。'}}, {'step': 2, 'action': '构建逻辑框架与章节结构', 'output': '设计报告的章节结构,通常包括:宏观背景分析、行业现状与数据解读、关键驱动因素分析、投资建议与风险提示。', 'how_to_judge_completion': '章节安排逻辑清晰,信息层次分明,符合从宏观到微观的递进顺序。', 'common_issues_and_solutions': {'问题': '章节间缺乏连贯性。', '解决方案': '确保每个章节都围绕核心主题展开,并通过过渡句或图表强化逻辑连接。'}}, {'step': 3, 'action': '收集与整理数据', 'output': '从公开数据源(如Wind、USDA)、公司公告、行业调研等渠道获取定量与定性数据,涵盖历史表现、当前状态及未来预测。', 'how_to_judge_completion': '数据来源可靠且全面,覆盖了时间维度(历史、当前、未来)和空间维度(全球、国内、区域)。', 'common_issues_and_solutions': {'问题': '数据不完整或存在偏差。', '解决方案': '交叉验证数据来源,补充缺失数据或标注不确定性。'}}, {'step': 4, 'action': '数据分析与模型构建', 'output': '运用专业分析工具(如供需平衡表、猪价与能繁母猪存栏量的象限模型)对数据进行处理,提炼出关键结论。', 'how_to_judge_completion': '分析结果能够直接支持核心结论,模型选择合理且解释性强。', 'common_issues_and_solutions': {'问题': '模型过于复杂或难以解释。', '解决方案': '优先选择简单直观的模型,并辅以图表说明。'}}, {'step': 5, 'action': '撰写主体内容', 'output': '按章节结构撰写报告正文,确保信息展示的优先级合理,核心结论突出,同时兼顾定量与定性数据的平衡。', 'how_to_judge_completion': '报告内容条理清晰,重点突出,图表与文字相辅相成。', 'common_issues_and_solutions': {'问题': '信息堆砌而无重点。', '解决方案': '每段文字开头明确阐述其核心观点,并通过加粗或颜色标记强调关键结论。'}}, {'step': 6, 'action': '提出投资建议与风险提示', 'output': '基于分析结果,给出明确的投资评级(如买入、增持等)及相关标的推荐,同时列出潜在风险因素。', 'how_to_judge_completion': '投资建议具有可操作性,风险提示全面且具体。', 'common_issues_and_solutions': {'问题': '投资建议过于笼统或缺乏依据。', '解决方案': '结合数据与模型输出,提供量化支持的投资理由及风险应对策略。'}}, {'step': 7, 'action': '审阅与优化报告', 'output': '检查报告的语言表达、数据准确性及逻辑一致性,确保最终版本符合专业标准。', 'how_to_judge_completion': '报告语言简洁准确,无明显错误,整体阅读体验流畅。', 'common_issues_and_solutions': {'问题': '报告中存在语法或格式错误。', '解决方案': '采用多人审阅机制,并利用自动化工具辅助校对。'}}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 09:36:09", "modified_time": "2025-08-14 09:36:09", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "0c73ced6e1a24986b8fe9e37680b21f0", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究、投资标的分析以及市场供需动态评估等任务,尤其适合需要结合定量与定性信息、预测未来趋势并提出明确投资建议的金融分析场景。", "content": "[{'step': 1, 'action': '明确分析目标和核心问题', 'output': '确定本次分析的核心目标,例如评估电力市场的供需关系及其对投资的影响。', 'completion_criteria': '核心问题清晰定义,且与后续章节逻辑一致,如PJM容量拍卖价格创新高的原因及影响。', 'common_issues': '目标过于宽泛或模糊,导致分析缺乏焦点。', 'solutions': '在团队内部进行初步讨论,确保目标具体化并与客户需求匹配。'}, {'step': 2, 'action': '收集和整理基础数据', 'output': '获取关键定量和定性数据,包括历史拍卖价格、供需变化、政策调整等。', 'completion_criteria': '数据来源可靠,覆盖所有相关维度(如时间序列、区域分布、政策背景)。', 'common_issues': '数据不完整或存在偏差,影响分析准确性。', 'solutions': '使用多源交叉验证数据,并注明数据来源和潜在局限性。'}, {'step': 3, 'action': '构建章节结构并组织信息优先级', 'output': '设计报告结构,确保逻辑递进,例如事件描述→数据分析→市场影响→投资建议。', 'completion_criteria': '章节安排合理,信息展示优先级符合读者需求,核心结论突出。', 'common_issues': '信息堆砌无序,重点不突出。', 'solutions': '采用金字塔原理,先呈现结论,再逐步展开支持性论据。'}, {'step': 4, 'action': '进行定量分析和趋势建模', 'output': '通过定量方法分析供需缺口、价格趋势及未来预测,例如PJM地区AI负载需求增长模型。', 'completion_criteria': '模型假设合理,结果可解释性强,能够支持后续定性分析。', 'common_issues': '模型复杂度不足或过度拟合,导致预测失准。', 'solutions': '选择适当的模型复杂度,定期回测模型性能。'}, {'step': 5, 'action': '结合定性分析深化洞察', 'output': '从政策、技术、市场行为等角度补充定量分析,例如高稳定性电力资源的重要性增强的原因。', 'completion_criteria': '定性分析与定量结果相互印证,形成全面视角。', 'common_issues': '定性分析缺乏数据支撑,显得主观。', 'solutions': '引用权威第三方数据或案例支持定性观点。'}, {'step': 6, 'action': '提出风险因素和不确定性处理', 'output': '识别潜在风险(如装机变动、需求不及预期),并提出应对策略。', 'completion_criteria': '风险因素全面且时机恰当,不影响核心结论的可信度。', 'common_issues': '风险提示过早或过晚,削弱报告整体逻辑性。', 'solutions': '在核心分析完成后单独列出风险部分,保持逻辑连贯性。'}, {'step': 7, 'action': '提炼投资建议并总结', 'output': '基于分析结果提出明确的投资建议,例如关注特定公司或资产类别。', 'completion_criteria': '建议具体可行,与分析结论紧密相关。', 'common_issues': '建议泛泛而谈,缺乏实际操作性。', 'solutions': '结合客户投资偏好和市场现状,提供定制化建议。'}, {'step': 8, 'action': '审阅和优化报告表达', 'output': '检查语言简洁性、逻辑流畅性和格式一致性,确保报告专业性。', 'completion_criteria': '报告无明显错误,表达清晰易懂。', 'common_issues': '术语过多或表述冗长,影响阅读体验。', 'solutions': '邀请非专业背景同事审阅,确保内容通俗易懂。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 09:37:17", "modified_time": "2025-08-14 09:37:17", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "e2dd04c8ade34153bd9d15db2eadb0fc", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究、信用风险评估报告、债券市场分析以及投资标的筛选等任务。尤其适合需要结合宏观环境、行业供需动态、企业信用状况及未来展望的综合性金融分析场景。", "content": "[{'step': 1, 'action': '明确分析目标与核心问题', 'output': '定义分析的核心关注点(如钢铁行业的信用风险、债券市场表现),并确定信息需求范围,包括定量数据(如产量、价格)和定性分析(如政策影响、行业趋势)。', 'completion_criteria': '是否清晰界定了分析目标,并列出所有需覆盖的关键维度(如供需关系、信用等级分布、到期债务规模等)。', 'common_issues': '目标过于宽泛或模糊,导致后续分析缺乏聚焦。', 'solutions': '通过与利益相关方沟通,细化分析目标;使用SMART原则确保目标具体、可衡量。'}, {'step': 2, 'action': '收集与整理基础数据', 'output': '从公开数据库(如Wind)、行业报告及政策文件中提取关键数据,涵盖历史数据(如过去几年的债券发行情况)和预测数据(如未来到期债务规模)。', 'completion_criteria': '数据是否全面、准确,且能支持后续分析逻辑;是否有清晰的数据来源标注。', 'common_issues': '数据不完整或时效性不足,导致分析结论不可靠。', 'solutions': '建立数据验证机制,交叉核对多个来源;优先选择权威数据源。'}, {'step': 3, 'action': '构建章节结构与信息展示逻辑', 'output': '设计报告框架,通常按“行业概况→市场回顾→风险展望”顺序展开;优先展示核心结论(如信用风险可控),再逐步展开支撑细节(如供需动态、信用等级分布)。', 'completion_criteria': '章节安排是否逻辑清晰,信息优先级是否合理,核心结论是否突出。', 'common_issues': '章节结构松散,信息堆砌而无重点。', 'solutions': '采用金字塔原理,先呈现结论,再逐层递进解释;用图表辅助说明复杂数据。'}, {'step': 4, 'action': '进行定量与定性分析', 'output': '对定量数据(如债券发行规模、到期债务分布)进行趋势分析和对比,结合定性因素(如政策影响、行业竞争格局)得出综合判断。', 'completion_criteria': '定量与定性分析是否平衡,是否能有效支撑观点;分析方法是否科学严谨。', 'common_issues': '过度依赖单一类型数据,忽略多维度验证。', 'solutions': '结合多种分析工具(如回归分析、情景模拟),确保结论稳健性。'}, {'step': 5, 'action': '识别与评估风险因素', 'output': '在分析中期阶段提出主要风险(如供需双弱、盈利能力下降),并结合数据论证其潜在影响;同时讨论不确定性和多种可能性(如政策变化、市场需求波动)。', 'completion_criteria': '风险因素是否全面且有据可依,是否提供应对策略或缓解措施。', 'common_issues': '风险描述过于笼统,缺乏针对性或量化支持。', 'solutions': '将风险分类(如短期/长期、内部/外部),并结合具体案例或数据加以说明。'}, {'step': 6, 'action': '总结与展望', 'output': '提炼核心结论(如整体信用风险可控),并对未来趋势做出预测(如行业景气度下行但信用分化加剧);给出具体的行动建议(如关注高负债企业流动性压力)。', 'completion_criteria': '总结是否简明扼要,展望是否具有前瞻性和指导意义。', 'common_issues': '总结流于表面,未能提炼出实质性的洞察。', 'solutions': '回溯分析过程,提炼关键发现;结合行业动态,提出切实可行的建议。'}, {'step': 7, 'action': '可视化与格式优化', 'output': '制作图表(如柱状图、饼图)直观呈现数据,调整排版以提升阅读体验;确保报告语言简洁专业,符合金融行业标准。', 'completion_criteria': '图表是否清晰易懂,格式是否统一规范,语言是否精炼。', 'common_issues': '图表过多或过少,信息冗余或缺失。', 'solutions': '遵循“一图一意”原则,每张图表只表达一个核心信息;使用模板统一风格。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 09:39:09", "modified_time": "2025-08-14 09:39:09", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "89a31864b8e74bd38de4c7c17395c8b7", "experience_type": "text", "when_to_use": "此框架适用于行业深度研究、投资标的分析、风险评估报告等金融分析任务,尤其适合针对复杂行业(如房地产)进行多维度研究时使用。该框架能够帮助分析师从宏观政策、供需关系、产业链地位、信用评级等多个角度系统性地构建分析逻辑,并形成清晰的结论。", "content": "[{'step': 1, 'action': '明确分析目标和范围', 'output': '一份清晰的研究问题定义,包括分析的核心目标(如市场趋势、供需平衡、信用风险等)和覆盖的时间范围(如季度、年度)。', 'criteria_for_success': '目标是否具体且可操作;范围是否合理且涵盖关键变量。', 'common_issues': '目标过于宽泛或模糊,导致后续分析难以聚焦。', 'solutions': '通过与利益相关者沟通确认核心需求,确保目标明确并具有实际意义。'}, {'step': 2, 'action': '收集和整理数据', 'output': '一套完整的数据集,包括定量数据(如市场规模、价格变化、销售量)和定性信息(如政策导向、行业动态),并按时间序列或主题分类。', 'criteria_for_success': '数据是否全面、准确且来源可靠;是否能支持后续分析。', 'common_issues': '数据缺失或质量不高,影响分析的可信度。', 'solutions': '优先选择权威数据源(如Wind、国家统计局),并通过交叉验证提高数据可靠性。'}, {'step': 3, 'action': '构建章节结构并分配内容权重', 'output': '一个逻辑清晰的章节框架,通常包括摘要、供给能力分析、需求匹配能力分析、产业链地位分析、创新能力分析、信用评级分析及周期展望。', 'criteria_for_success': '章节安排是否符合逻辑递进关系;核心结论是否突出。', 'common_issues': '章节之间缺乏连贯性,导致读者难以理解整体逻辑。', 'solutions': '以“总-分-总”的方式组织内容,确保每一部分都服务于最终结论。'}, {'step': 4, 'action': '进行供需分析', 'output': '对行业供给能力和需求匹配能力的详细分析,包括历史趋势、当前状态及未来预测,配以图表展示。', 'criteria_for_success': '是否充分结合定量与定性信息;是否揭示出供需关系的关键驱动因素。', 'common_issues': '忽视长期结构性变化,仅关注短期波动。', 'solutions': '引入宏观经济背景和政策导向,确保分析兼具短期洞察和长期视角。'}, {'step': 5, 'action': '评估产业链地位', 'output': '对行业在上下游中的议价能力、价格波动规律及创新潜力的深入探讨。', 'criteria_for_success': '是否识别出行业的核心竞争力和潜在风险点。', 'common_issues': '忽略特定环节的特殊性,导致分析流于表面。', 'solutions': '细化到具体环节(如土地供应、建材采购等),结合案例说明其影响。'}, {'step': 6, 'action': '分析政策和融资环境', 'output': '对宏观政策导向、供需端政策工具以及融资状况的解读,包括信用利差、债券发行情况和违约风险。', 'criteria_for_success': '是否捕捉到政策变化对行业发展的深远影响;是否量化融资端的风险敞口。', 'common_issues': '政策解读过于笼统,未能反映实际执行效果。', 'solutions': '结合具体政策条款和实施路径,辅以实证数据支撑分析。'}, {'step': 7, 'action': '提出周期展望和建议', 'output': '基于前述分析得出的行业发展趋势判断,以及针对投资者或决策者的建议。', 'criteria_for_success': '结论是否基于充分的数据和逻辑推导;建议是否具有可操作性。', 'common_issues': '结论脱离数据分析,显得主观臆断。', 'solutions': '始终围绕数据展开论证,避免过度推测未发生的事件。'}, {'step': 8, 'action': '优化信息呈现形式', 'output': '经过调整后的报告,包含摘要、图表、表格等形式,以增强信息传递效率。', 'criteria_for_success': '信息是否直观易懂;核心结论是否一目了然。', 'common_issues': '图表过多或过少,导致重点不突出。', 'solutions': '根据内容重要性和复杂度选择合适的可视化手段,确保每张图表都有明确目的。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 09:41:11", "modified_time": "2025-08-14 09:41:11", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "0b858e63487c413bbb29c239f37ecb38", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及市场趋势预测类金融分析任务,尤其是涉及新材料、高新技术产业等需要结合定量与定性数据的复杂场景。该框架适合用于撰写需要兼顾市场表现、产业链动态、政策影响和风险提示的综合性研究报告。", "content": "[{'step': 1, 'action': '明确报告主题与目标受众', 'output': '确定核心主题(如人形机器人领域材料进展)及其对目标受众(投资者、行业从业者等)的价值,制定清晰的研究问题(例如:哪些材料将受益于人形机器人市场的增长?)。', 'evaluation_criteria': '是否明确了研究问题,并且与当前市场热点或行业趋势高度相关。', 'common_issues': '主题过于宽泛或缺乏针对性。', 'solutions': '通过行业新闻、政策文件和市场数据筛选最具时效性和重要性的议题。'}, {'step': 2, 'action': '组织章节结构并分配优先级', 'output': '设计逻辑清晰的章节结构,包括二级市场表现、产业链数据跟踪、行业要闻、投资建议和风险提示,确保信息展示层次分明,优先突出核心结论和关键数据。', 'evaluation_criteria': '章节安排是否合理,是否能引导读者快速抓住重点信息;投资建议是否基于充分的数据支撑。', 'common_issues': '章节顺序混乱或内容重复。', 'solutions': '采用“总-分-总”结构,先概述整体市场表现,再分模块深入分析,最后总结投资建议和风险提示。'}, {'step': 3, 'action': '收集并整理基础数据', 'output': '从权威来源(Wind、博亚和讯、海关统计数据平台等)获取定量数据(价格、涨跌幅、进出口量等)和定性信息(政策、技术突破等),并进行初步清洗和分类。', 'evaluation_criteria': '数据是否全面、准确且来源可靠;是否涵盖历史、现状和未来预测三个维度。', 'common_issues': '数据缺失或过时。', 'solutions': '建立固定数据更新机制,定期核查数据源的时效性,同时结合专家访谈补充未公开信息。'}, {'step': 4, 'action': '构建论证逻辑链', 'output': '通过层层递进的方式,从宏观到微观逐步展开分析,例如:从全球市场规模预测到具体材料需求增长,再到推荐相关标的公司,形成环环相扣的论证路径。', 'evaluation_criteria': '论证是否严密,是否能够有效支撑最终的投资建议;是否存在逻辑漏洞或跳跃式推导。', 'common_issues': '论据不足或推理不充分。', 'solutions': '增加中间环节的过渡性分析,引用更多第三方数据或案例佐证观点。'}, {'step': 5, 'action': '平衡不同类型信息的分布', 'output': '在报告中均衡呈现定量与定性、历史与预测的信息,避免偏重某一方面导致失衡。例如,在产业链数据跟踪部分既展示近期价格变化,也讨论长期趋势。', 'evaluation_criteria': '各类信息是否比例恰当,是否有助于读者全面理解问题。', 'common_issues': '过度依赖单一类型信息,忽略其他方面。', 'solutions': '设定每部分内容字数比例限制,强制要求覆盖多种信息类型。'}, {'step': 6, 'action': '处理不确定性和多种可能性', 'output': '针对潜在风险因素(如原材料价格波动、技术发展不及预期等),提前识别并在合适时机提出,同时提供多情景假设下的应对策略。', 'evaluation_criteria': '是否充分考虑了各种不确定性;风险提示是否具体可行。', 'common_issues': '风险提示过于笼统或忽视极端情况。', 'solutions': '引入敏感性分析工具,量化不同变量对结果的影响范围。'}, {'step': 7, 'action': '提炼核心结论并优化表达', 'output': '将复杂分析结果简化为易于理解的核心结论,用图表、表格等形式直观呈现关键数据,同时确保语言简洁明了。', 'evaluation_criteria': '核心结论是否突出,是否便于非专业读者理解;可视化效果是否美观且功能性强。', 'common_issues': '结论冗长或表达模糊。', 'solutions': '使用金字塔原理提炼核心观点,并辅以高质量图形设计提升视觉体验。'}, {'step': 8, 'action': '审阅与校正', 'output': '检查报告中的语法错误、数据一致性及格式规范,确保内容无误后发布。', 'evaluation_criteria': '是否发现并修正所有明显错误;排版是否符合标准。', 'common_issues': '遗漏细节错误或格式不统一。', 'solutions': '实施双人交叉校对制度,借助自动化工具辅助审核。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 09:57:32", "modified_time": "2025-08-14 09:57:32", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "d5005bd6e7814194b14f1aadf11a2a21", "experience_type": "text", "when_to_use": "适用于行业深度研究、投资标的分析、风险评估报告等需要综合定量与定性信息的任务。", "content": "[{'step': 1, 'action': '明确报告目标和受众需求。', 'output': '确定报告的核心主题(如房地产市场动态)、目标受众(如机构投资者)及其关注点(如收益率、风险)。', 'completion_criteria': '能够清晰描述报告的核心问题和目标受众。', 'common_issues': '目标不明确可能导致内容散乱。', 'solutions': '在开始前与客户或团队沟通确认报告目标。'}, {'step': 2, 'action': '收集并整理定量和定性数据。', 'output': '汇总市场指数、个股表现、行业新闻、公司公告等数据,并分类标注其重要性。', 'completion_criteria': '数据覆盖全面且分类清晰,无明显遗漏。', 'common_issues': '数据来源单一或更新不及时。', 'solutions': '使用多个权威数据源,并定期检查数据时效性。'}, {'step': 3, 'action': '构建报告框架并分配信息优先级。', 'output': '设计章节结构(如摘要、市场行情、个股表现、行业新闻等),并确定每部分内容的优先级。', 'completion_criteria': '章节逻辑清晰,信息优先级合理。', 'common_issues': '章节内容重复或重点不突出。', 'solutions': '参考类似成功报告的结构,并邀请同行评审框架。'}, {'step': 4, 'action': '撰写核心内容并突出关键结论。', 'output': '完成市场行情、个股表现、行业新闻等部分的撰写,确保核心结论显眼(如加粗、图表展示)。', 'completion_criteria': '核心结论清晰易懂,数据支持充分。', 'common_issues': '结论缺乏数据支撑或表述模糊。', 'solutions': '确保每条结论都有至少一条数据或案例支持。'}, {'step': 5, 'action': '加入风险提示和不确定性分析。', 'output': '列出主要风险因素(如行业下行风险、政策不确定性),并提供应对建议。', 'completion_criteria': '风险提示全面且表达谨慎。', 'common_issues': '风险提示过于笼统或忽略潜在风险。', 'solutions': '结合历史数据和行业动态,细化风险描述。'}, {'step': 6, 'action': '审查报告并优化语言表达。', 'output': '检查语法错误、数据准确性,并优化语言表达以提升可读性。', 'completion_criteria': '报告无明显错误,语言简洁流畅。', 'common_issues': '语言冗长或专业术语过多。', 'solutions': '邀请非专业人士阅读并反馈意见。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 10:00:12", "modified_time": "2025-08-14 10:00:12", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "7bc4b163d7294d8daecf6effcb994fb6", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析、政策影响评估以及短期市场动态与长期趋势结合的综合金融分析任务。尤其适合需要整合定量和定性数据,同时对政策、市场和技术因素进行多层次论证的场景。", "content": "[{'step': 1, 'action': '明确分析目标与核心问题', 'output': '清晰定义报告的核心主题和关键问题(例如:6月用电量趋势及其对火电行业的潜在影响)。', 'completion_criteria': '能够用一句话概括报告的核心结论,并列出3-5个支持该结论的关键数据点或论据。', 'common_issues': '目标过于宽泛或模糊,导致后续章节结构松散。', 'solutions': '通过团队讨论或客户反馈确认核心问题,确保聚焦于一个具体的投资决策或市场现象。'}, {'step': 2, 'action': '组织章节结构并分配优先级', 'output': '按照“背景信息 → 数据展示 → 核心分析 → 结论与建议”的逻辑顺序安排章节内容。', 'completion_criteria': '每个章节有明确的主题和产出目标,例如背景章节提供宏观数据,核心分析章节解释因果关系。', 'common_issues': '章节间逻辑不连贯,导致读者难以理解分析路径。', 'solutions': '使用思维导图或提纲工具提前规划章节间的逻辑递进关系,确保每一部分都服务于最终结论。'}, {'step': 3, 'action': '收集和整理基础数据', 'output': '系统化地整理定量数据(如用电量、发电量)和定性信息(如政策变化、天气影响),并将数据分类存储。', 'completion_criteria': '所有数据来源均经过核验,且数据覆盖范围足够支撑分析结论。', 'common_issues': '数据来源单一或不完整,导致分析缺乏说服力。', 'solutions': '建立多渠道数据验证机制,确保关键数据点有至少两个独立来源支持。'}, {'step': 4, 'action': '构建定量与定性分析框架', 'output': '采用分层分析方法,先呈现历史数据趋势,再结合当前动态预测未来走势,并引入外部因素(如政策、天气)的影响分析。', 'completion_criteria': '分析框架能够清晰展示数据之间的因果关系,且对未来预测提供合理假设。', 'common_issues': '忽略不确定性因素,导致预测过于乐观或悲观。', 'solutions': '在分析中加入情景模拟(如乐观、中性和悲观三种情景),并通过敏感性分析测试关键变量的变化对结果的影响。'}, {'step': 5, 'action': '突出核心结论与投资建议', 'output': '将核心结论置于报告显眼位置(如摘要或投资要点部分),并辅以简明扼要的数据支持。', 'completion_criteria': '核心结论能够在30秒内被快速理解,且与后续详细分析保持一致。', 'common_issues': '结论与数据分析脱节,导致可信度下降。', 'solutions': '在撰写结论时,逐一对应到分析中的关键数据点,确保逻辑闭环。'}, {'step': 6, 'action': '识别并处理风险因素', 'output': '在分析中适时引入风险提示,包括宏观经济波动、政策不确定性等,并提出应对策略。', 'completion_criteria': '风险提示与核心结论相辅相成,且提出的应对策略具有可操作性。', 'common_issues': '风险提示过于笼统,缺乏针对性。', 'solutions': '针对每项风险因素提供具体的量化影响评估(如煤价上涨对火电利润的具体冲击百分比)。'}, {'step': 7, 'action': '优化信息展示方式', 'output': '通过图表、表格和关键指标摘要等形式,提升复杂数据的可读性和直观性。', 'completion_criteria': '非专业读者也能快速理解核心数据和结论。', 'common_issues': '图表设计冗余或信息过载,削弱了重点信息的突出性。', 'solutions': '遵循“一图一意”原则,确保每张图表只传递一个核心信息,并辅以简短说明。'}, {'step': 8, 'action': '审查与校对', 'output': '检查报告中是否存在数据错误、逻辑漏洞或表述不清的问题,并确保所有引用符合合规要求。', 'completion_criteria': '报告无重大错误,且语言风格统一、专业。', 'common_issues': '遗漏重要披露声明或未遵守合规要求。', 'solutions': '设立专门的合规审查环节,确保所有分析师认证和利益冲突披露完整无误。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 10:02:01", "modified_time": "2025-08-14 10:02:01", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "26c3b4d89d5949e1865dcc348f7ec103", "experience_type": "text", "when_to_use": "适用于行业深度研究、投资标的分析、风险评估报告等需要整合定量与定性信息并提供投资建议的任务。", "content": "[{'step': 1, 'action': '收集并整理基础数据和信息', 'output': '包括市场表现数据(如涨跌幅、行业排名)、公司公告、行业动态、相关政策等。', 'completion_criteria': '数据来源可靠,信息完整且无重大遗漏。', 'common_issues': '数据不完整或过时。', 'solutions': '建立稳定的数据源渠道,定期更新数据库。'}, {'step': 2, 'action': '按优先级组织章节结构', 'output': '形成清晰的章节划分,如市场表现、行业动态、公司要闻、投资建议等。', 'completion_criteria': '章节逻辑清晰,信息层次分明,便于读者快速定位关键内容。', 'common_issues': '章节间逻辑混乱,信息重复或缺失。', 'solutions': '提前制定标准化模板,确保每次分析遵循一致的结构。'}, {'step': 3, 'action': '突出核心结论和关键数据', 'output': '在报告开头或每个章节的开头部分,用简洁的语言总结核心结论,并辅以关键数据支持。', 'completion_criteria': '核心结论直观易懂,关键数据准确无误。', 'common_issues': '结论埋藏在细节中,缺乏吸引力。', 'solutions': '使用图表、加粗字体等方式突出核心信息。'}, {'step': 4, 'action': '平衡定量与定性信息', 'output': '结合定量数据(如财务指标、市场涨跌幅)和定性分析(如行业趋势、政策解读),确保信息全面。', 'completion_criteria': '定量与定性信息比例合理,相互支撑。', 'common_issues': '过度依赖某一种类型信息,导致分析片面。', 'solutions': '设定信息比例目标,例如70%定量+30%定性。'}, {'step': 5, 'action': '构建论证逻辑并提出风险因素', 'output': '从宏观到微观逐步展开分析,提出可能的风险因素并说明应对措施。', 'completion_criteria': '论证逻辑严密,风险提示客观且及时。', 'common_issues': '风险因素被忽略或过于乐观。', 'solutions': '在每项利好消息后主动评估潜在风险。'}, {'step': 6, 'action': '提供明确的投资建议', 'output': '基于前述分析,给出具体的投资评级建议(如买入、持有、卖出)。', 'completion_criteria': '建议明确且有充分的数据和逻辑支持。', 'common_issues': '建议模糊或缺乏依据。', 'solutions': '确保每条建议都有对应的数据和分析支持。'}, {'step': 7, 'action': '撰写免责声明和附注', 'output': '包括数据来源声明、分析师资质、免责条款等。', 'completion_criteria': '声明清晰且符合监管要求。', 'common_issues': '声明内容不完整或不符合法规。', 'solutions': '参考行业标准模板,定期更新免责声明内容。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 10:03:37", "modified_time": "2025-08-14 10:03:37", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "df775ce437e84458ae4643862cb9c4b3", "experience_type": "text", "when_to_use": "适用于行业深度研究、投资标的分析、政策影响评估等任务。", "content": "[{'step': 1, 'action': '收集并整理相关政策文件或行业数据,明确分析的宏观背景。', 'output': '一份政策摘要,包含关键条款及其对行业的影响。', 'evaluation_criteria': '是否涵盖了所有相关的政策文件?是否清晰指出了政策的核心要点?', 'common_issues_and_solutions': {'问题': '政策解读不够深入。', '解决方案': '参考权威机构的解读文章,结合实际案例进行补充说明。'}}, {'step': 2, 'action': '梳理行业动态,包括并购案例、企业合作、技术创新等,并标注关键数据(如金额、时间、参与者)。', 'output': '一份行业动态清单,包含至少3-5个代表性案例及数据分析。', 'evaluation_criteria': '案例是否具有代表性?数据是否准确且来源可靠?', 'common_issues_and_solutions': {'问题': '案例数量不足或缺乏代表性。', '解决方案': '扩大搜索范围,关注头部企业和标志性事件。'}}, {'step': 3, 'action': '基于政策背景和行业动态,提炼核心观点,形成初步结论。', 'output': '一段不超过200字的核心观点摘要,明确指出行业趋势和机会。', 'evaluation_criteria': '观点是否清晰且有逻辑支持?是否能够引导后续分析?', 'common_issues_and_solutions': {'问题': '观点过于笼统或缺乏依据。', '解决方案': '增加具体数据和案例支撑,强化论证力度。'}}, {'step': 4, 'action': '结合核心观点,提出具体的投资建议,包括推荐标的和理由。', 'output': '一份投资建议清单,包含至少3个标的及其推荐理由。', 'evaluation_criteria': '标的是否多样化?推荐理由是否充分?', 'common_issues_and_solutions': {'问题': '标的集中度过高,风险较大。', '解决方案': '增加备选标的,分散投资风险。'}}, {'step': 5, 'action': '识别并列出潜在风险,确保分析全面且客观。', 'output': '一份风险提示清单,包含至少3个主要风险因素及其可能影响。', 'evaluation_criteria': '风险描述是否具体?是否覆盖了主要的不确定性?', 'common_issues_and_solutions': {'问题': '风险提示过于简单或遗漏重要内容。', '解决方案': '参考历史数据和同行分析,补充遗漏的风险点。'}}, {'step': 6, 'action': '撰写完整报告,优化语言表达,确保逻辑清晰、重点突出。', 'output': '一份完整的分析报告,包含政策背景、行业动态、核心观点、投资建议和风险提示。', 'evaluation_criteria': '报告是否易于阅读?是否逻辑连贯?', 'common_issues_and_solutions': {'问题': '报告冗长或逻辑混乱。', '解决方案': '使用小标题分隔不同部分,精简语言表达。'}}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 10:05:06", "modified_time": "2025-08-14 10:05:06", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "de698ec0c97d4ff5a658f4a9632cf01f", "experience_type": "text", "when_to_use": "此规划框架适用于涉及用户行为分析、教育与职业准备相关研究、以及技术对不同人群影响的金融或社会科学研究任务。例如:评估新兴技术对学生群体未来就业和教育选择的影响、行业人才需求预测研究、教育政策或培训项目的效果评估等。", "content": "[{'step': 1, 'action': '明确研究目标并设计核心问题', 'output': '清晰的研究目标和一组具体的核心问题,涵盖定量(如评分)和定性(如开放回答)数据收集。', 'evaluation_criteria': '目标是否聚焦于关键变量(如高中AI培训量、计划大学专业、性别),问题设计是否能有效区分不同人群的观点。', 'common_issues': '目标过于宽泛或问题设计未能完全覆盖研究变量。', 'solutions': '通过专家反馈和小范围试点测试优化问题设计,确保其能捕捉到所有关键变量的变化。'}, {'step': 2, 'action': '构建分层随机抽样框架以确保代表性', 'output': '一个分层随机样本,按关键特征(如种族/民族、性别、年级)进行比例失调抽样,并包含权重调整方案。', 'evaluation_criteria': '样本是否在关键特征上具有足够的代表性,权重调整是否能够有效反映总体分布。', 'common_issues': '某些子群体样本量过小导致分析结果不可靠。', 'solutions': '有意过抽样特定子群体(如少数族裔),并在后续分析中使用统计权重调整方法。'}, {'step': 3, 'action': '设计调查问卷并实施数据收集', 'output': '一份结构化的在线调查问卷,包括滑块评分、多选题、开放式回答等多样化问题形式,以及完成后的原始数据集。', 'evaluation_criteria': '问卷是否能全面捕捉目标变量,数据质量是否满足分析要求(如无显著偏差、缺失值可控)。', 'common_issues': '低回复率或数据不完整。', 'solutions': '通过激励措施提高回复率,并在数据分析前清理和加权处理数据。'}, {'step': 4, 'action': '进行描述性统计分析,初步探索数据分布', 'output': '一系列描述性统计图表(如箱线图、频率分布表)和均值比较结果,展示不同子群体的核心观点分布。', 'evaluation_criteria': '分析是否揭示了主要趋势和差异,图表是否直观且易于解读。', 'common_issues': '数据分布过于复杂或难以解释。', 'solutions': '结合可视化工具和简明注释突出关键发现,避免过度复杂化。'}, {'step': 5, 'action': '执行多层次的方差分析(ANOVA)及两两比较', 'output': 'ANOVA模型结果和基于Tukey-Kramer程序的两两比较统计量(如q值、效应量d),用于评估不同子群体间的显著差异。', 'evaluation_criteria': '统计显著性和效应量是否合理,是否能支持结论的稳健性。', 'common_issues': '多重比较导致假阳性风险增加。', 'solutions': '采用Bonferroni校正或其他多重检验校正方法,确保统计显著性结果可靠。'}, {'step': 6, 'action': '整合定性数据支持定量分析', 'output': '通过学生评论和开放回答补充定量分析,提供更丰富的背景信息和案例支持。', 'evaluation_criteria': '定性数据是否有效增强了定量分析的深度和可信度。', 'common_issues': '定性数据与定量结果脱节。', 'solutions': '在分析阶段建立明确的关联点,将定性数据与定量发现直接对应。'}, {'step': 7, 'action': '提炼关键发现并形成讨论部分', 'output': '总结各变量之间的关系(如高中AI培训与乐观态度的相关性),并提出潜在的实践建议(如针对不同专业提供更多定制化培训)。', 'evaluation_criteria': '讨论是否逻辑清晰、层次分明,是否提供了具体可行的建议。', 'common_issues': '讨论部分过于冗长或缺乏重点。', 'solutions': '围绕核心发现组织讨论,每段聚焦一个主题,避免过多细节分散注意力。'}, {'step': 8, 'action': '识别局限性并提出改进方向', 'output': '列出研究的局限性(如样本代表性不足、问卷设计缺陷),并提出未来研究的改进建议。', 'evaluation_criteria': '局限性是否全面且真实,改进建议是否具体可行。', 'common_issues': '忽视潜在的系统性偏差或未充分说明改进方法。', 'solutions': '从数据收集、分析方法、外部效度等多个角度审视研究局限性,并提供针对性解决方案。'}, {'step': 9, 'action': '撰写报告并优化信息展示优先级', 'output': '一份结构化的研究报告,包括概述、方法、结果、讨论和附录,核心结论突出且易于理解。', 'evaluation_criteria': '章节安排是否合理,信息展示是否符合读者优先关注的内容(如先呈现关键发现再深入讨论)。', 'common_issues': '报告结构混乱或信息过载。', 'solutions': '遵循“金字塔原则”,先呈现高层次结论,再逐步展开细节;使用图表和摘要框突出重点。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 10:08:57", "modified_time": "2025-08-14 10:08:57", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "f8c43c5e53c74ba0a6bf9c93faf9271a", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究、投资标的分析以及政策驱动型市场趋势评估等任务,尤其适合需要结合定量和定性数据进行综合判断的金融分析场景。", "content": "[{'step': 1, 'action': '明确核心研究目标与关键问题', 'output': \"形成清晰的研究方向和问题清单,例如:'房地产市场的短期走势与政策影响'。\", 'completion_criteria': '能够准确界定研究范围,并列出需要解决的核心问题,如政策导向、市场表现、未来趋势预测等。', 'common_issues': '研究目标过于宽泛或模糊。应对方法是通过初步资料收集和团队讨论细化研究主题。'}, {'step': 2, 'action': '设计结构化的章节框架,确保逻辑流畅且信息优先级合理', 'output': '制定报告目录,包括重点城市市场跟踪、土地市场分析、政策梳理、板块表现回顾、投资建议和风险提示等部分。', 'completion_criteria': '章节安排应符合从数据到结论的递进逻辑,且核心结论(如市场趋势)在早期章节中突出展示。', 'common_issues': '章节顺序混乱或信息堆砌。应对方法是反复检查各部分内容是否服务于核心目标,并调整优先级。'}, {'step': 3, 'action': '收集并整理定量与定性数据,确保数据覆盖全面且来源可靠', 'output': '生成包含新房成交、二手房成交、库存、土地市场等多维度的数据表格和图表。', 'completion_criteria': '数据完整且分类清晰,能够支持后续的分析和论证;所有数据来源需注明来源。', 'common_issues': '数据缺失或质量不高。应对方法是提前规划数据需求清单,并与可靠数据供应商合作。'}, {'step': 4, 'action': '采用分层论证法,逐步建立观点并验证假设', 'output': '通过逐层分析(如城市能级划分、环比同比变化对比),得出市场趋势和政策影响的具体结论。', 'completion_criteria': '每个观点都有充分的数据支撑,且逻辑链条完整,避免跳跃式推论。', 'common_issues': '论证过程缺乏严谨性。应对方法是引入同行评审机制,确保逻辑严密。'}, {'step': 5, 'action': '适时提出风险因素,平衡乐观与悲观预期', 'output': '在政策解读和投资建议部分,明确列出可能的风险点,如调控升级、销售下行等。', 'completion_criteria': '风险提示与核心结论相辅相成,既不夸大也不忽视潜在问题。', 'common_issues': '风险提示不足或过于笼统。应对方法是结合历史案例和当前环境具体分析风险情景。'}, {'step': 6, 'action': '提供具体的行动建议,帮助决策者快速理解核心结论', 'output': '总结出四条投资主线及推荐标的,如基本面稳定的一线房企、困境反转的中小房企等。', 'completion_criteria': '建议具有可操作性,能够直接指导投资决策,同时附上估值表等辅助工具。', 'common_issues': '建议空洞或缺乏针对性。应对方法是结合数据分析和市场动态提炼具体策略。'}, {'step': 7, 'action': '撰写附录和披露声明,增强报告透明度与可信度', 'output': '补充城市数据选取标准、评级体系说明、免责声明等附加内容。', 'completion_criteria': '附录部分详细说明数据处理方法和限制条件,披露声明体现独立性和客观性。', 'common_issues': '附录内容被忽略或过于简略。应对方法是将附录视为报告完整性的重要组成部分。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 10:10:16", "modified_time": "2025-08-14 10:10:16", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "abdf09f69b5c4ebc825c46a3ff566e58", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及风险评估报告等任务,尤其是需要从宏观到微观逐步分解复杂行业的金融分析场景。该框架特别适合涵盖供需关系、产业链结构、技术创新能力及政策影响的综合分析。", "content": "[{'step': 1, 'action': '明确分析目标与范围', 'output': '清晰定义分析的核心问题(如行业趋势、供需平衡、技术突破等),并确定覆盖的时间段和地理区域。', 'completion_criteria': '核心问题明确,时间范围和地理边界具体化,且能直接指导后续章节设计。', 'common_issues': '分析目标过于宽泛或模糊,导致内容组织混乱。', 'solutions': '在开始前通过头脑风暴列出关键变量,并优先聚焦于对决策最有价值的问题点。'}, {'step': 2, 'action': '构建逻辑清晰的章节结构', 'output': '分为行业供给能力、需求匹配能力、产业链地位、创新能力、信用评级及周期展望等主要模块,确保从宏观到微观层层递进。', 'completion_criteria': '每个章节有明确的主题,信息分布合理,逻辑连贯,避免重复或遗漏。', 'common_issues': '章节间存在重叠或信息孤立,未能形成整体论证链条。', 'solutions': '使用思维导图工具提前规划各章节内容,确保主题唯一性和逻辑衔接性。'}, {'step': 3, 'action': '收集并整理数据与信息', 'output': '包括定量数据(市场规模、增速、市场份额等)和定性信息(政策导向、技术创新趋势等),并按章节分类存储。', 'completion_criteria': '数据来源权威可靠,覆盖全面,且经过清洗和验证以保证准确性。', 'common_issues': '数据不完整或过时,影响分析可信度。', 'solutions': '建立多源交叉验证机制,优先选择官方统计机构或行业龙头发布的最新数据。'}, {'step': 4, 'action': '进行供需关系与价格波动分析', 'output': '结合历史数据和当前市场动态,评估基础、中端和高端市场的供需状况,预测未来价格底部区间。', 'completion_criteria': '供需关系分析细致,价格波动原因解释充分,预测依据合理。', 'common_issues': '忽略结构性分化,将供需失衡简单归因于单一因素。', 'solutions': '分层分析不同市场的需求特征,结合政策和技术变化探讨潜在影响。'}, {'step': 5, 'action': '剖析产业链上下游议价能力', 'output': '识别上游供应商、中游制造商和下游客户的议价能力差异,揭示竞争格局。', 'completion_criteria': '议价能力分析基于真实案例或数据支持,结论具有可操作性。', 'common_issues': '仅描述现状而未深入挖掘背后驱动因素。', 'solutions': '引入波特五力模型或其他产业经济学理论,增强分析深度。'}, {'step': 6, 'action': '评估政策导向与技术创新能力', 'output': '总结政策扶持方向(如财税优惠、融资便利),量化研发投入与专利成果,评估行业创新潜力。', 'completion_criteria': '政策解读准确,技术创新指标衡量科学,能够反映行业发展驱动力。', 'common_issues': '忽视政策落地效果或高估短期技术突破可能性。', 'solutions': '补充政策实施路径分析,并关注技术成熟度曲线(Technology Readiness Level)。'}, {'step': 7, 'action': '整合风险因素与不确定性', 'output': '系统梳理地缘政治、供应链稳定性、人才短缺等风险,提出应对策略。', 'completion_criteria': '风险因素全面且条理清晰,应对措施切实可行。', 'common_issues': '风险提示流于表面,缺乏针对性解决方案。', 'solutions': '采用情景分析法,模拟多种可能情境下的行业表现及应对方案。'}, {'step': 8, 'action': '提炼核心观点与行动建议', 'output': '总结行业发展趋势、关键机会与挑战,提供具体的投资或运营建议。', 'completion_criteria': '核心观点突出,建议与分析内容紧密相关,具备实践指导意义。', 'common_issues': '核心观点被冗长细节掩盖,建议空洞无物。', 'solutions': '使用金字塔原理提炼要点,确保每条建议都有充分论据支撑。'}, {'step': 9, 'action': '撰写报告并优化呈现形式', 'output': '编写包含摘要、正文、图表和附录的完整报告,注重信息可视化与语言精炼。', 'completion_criteria': '报告结构完整,图表直观易懂,文字表达专业流畅。', 'common_issues': '图表堆砌过多或排版杂乱,降低阅读体验。', 'solutions': '遵循“少即是多”原则,精选最能说明问题的图表,统一风格规范。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 10:11:53", "modified_time": "2025-08-14 10:11:53", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "df783c1686d0462199cd7395a958bcd8", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及宏观经济趋势预测等需要结合定量与定性数据进行综合分析的任务。尤其适合涉及多维度信息整合(如历史数据、市场动态、政策影响)和复杂因果关系推导的金融分析场景。", "content": "[{'step': 1, 'action': '明确分析目标和范围', 'output': '清晰界定研究的核心问题(如畜牧业发展趋势)、研究时间跨度(如2014-2023年)以及关键变量(如产量、价格、存栏量等)。', 'criteria_for_success': '目标是否具体化,范围是否合理且聚焦,变量选择是否覆盖核心驱动因素。', 'common_issues': '目标过于宽泛或模糊,导致后续分析缺乏方向感。', 'solutions': '通过初步文献调研和行业背景梳理,快速锁定研究重点,并制定清晰的研究提纲。'}, {'step': 2, 'action': '收集并整理基础数据', 'output': '按时间序列和分类维度(如生产对象、产品类型)整理定量数据(如产量、价格)和定性信息(如政策变化、自然因素)。', 'criteria_for_success': '数据完整性和一致性高,来源权威可靠;数据分类逻辑清晰,便于后续分析。', 'common_issues': '数据缺失或不一致,导致分析可信度下降。', 'solutions': '优先选择官方统计机构或行业权威报告的数据,并对异常值进行交叉验证和补充说明。'}, {'step': 3, 'action': '构建章节结构并分配信息优先级', 'output': '设计报告框架,将核心结论置于开头,随后按逻辑顺序展开(如现状→趋势→驱动因素→风险)。定量数据优先展示,辅以定性分析支持。', 'criteria_for_success': '章节安排符合读者认知习惯,信息分布平衡,核心结论突出。', 'common_issues': '章节结构混乱,信息堆砌而无逻辑递进。', 'solutions': '采用金字塔原理,先提出总论点,再分层论述支撑细节;使用图表直观呈现关键数据。'}, {'step': 4, 'action': '逐步建立论证逻辑', 'output': '从历史数据入手,描述现状特征(如波动趋势),继而分析背后驱动因素(如政策、市场需求),最后探讨未来可能的变化路径。', 'criteria_for_success': '论证过程层层递进,因果关系清晰,观点有充分数据支撑。', 'common_issues': '论证跳跃性强,缺乏过渡性解释;忽略次要但重要的影响因素。', 'solutions': '在每个子主题之间设置简短总结句,确保逻辑连贯;引入敏感性分析处理次要变量的影响。'}, {'step': 5, 'action': '识别并讨论风险因素', 'output': '在趋势展望部分适时引入潜在风险(如疫病、气候变化),并评估其对结论的影响程度。', 'criteria_for_success': '风险因素提出的时机恰当,不影响整体正面基调;风险分析全面且基于事实。', 'common_issues': '风险讨论过于笼统或偏负面,削弱报告说服力。', 'solutions': '结合历史案例和当前数据量化风险概率,同时提出缓解措施或替代方案。'}, {'step': 6, 'action': '处理不确定性与多种可能性', 'output': '通过情景模拟或区间预测方式展现不同发展路径下的结果分布。', 'criteria_for_success': '不确定性表达客观且具建设性,为决策提供参考依据。', 'common_issues': '忽略不确定性,导致结论单一化。', 'solutions': '采用蒙特卡洛模拟或专家访谈法生成多种情景假设,增强结论的稳健性。'}, {'step': 7, 'action': '提炼核心结论并优化展示形式', 'output': '用简洁语言总结主要发现,并配合可视化工具(如折线图、柱状图)突出关键数据。', 'criteria_for_success': '核心结论一目了然,视觉效果提升信息传递效率。', 'common_issues': '结论冗长或分散,难以抓住重点。', 'solutions': '遵循“一页纸原则”,确保核心结论能在一页内清晰传达;图表设计注重对比和趋势表现。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 10:13:19", "modified_time": "2025-08-14 10:13:19", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "5552c4a2b3c34b2f841e71ab435f27cc", "experience_type": "text", "when_to_use": "此规划框架适用于金融行业中的政策影响分析、投资标的深度研究以及风险评估报告等任务,尤其是涉及定量测算和定性分析结合的场景。例如:财税政策对特定行业财务表现的影响分析、资产配置策略调整建议、或宏观经济事件对投资组合的潜在影响评估。", "content": "[{'step': 1, 'action': '明确分析目标与核心问题', 'output': '定义清晰的研究问题和目标,例如本次分析的核心问题是财税新政策对保险公司净利润的影响。', 'completion_criteria': '能够用一句话概括分析的核心目标,并确保所有后续章节围绕该目标展开。', 'common_issues': '目标过于宽泛或模糊,导致后续分析缺乏聚焦。', 'solutions': '在开始时与利益相关方确认分析的具体范围和优先级。'}, {'step': 2, 'action': '收集并整理基础数据与背景信息', 'output': '整理相关政策文件、行业数据、公司财报等基础资料,例如本次分析中对财政部公告、保险公司年报、债券市场数据的引用。', 'completion_criteria': '数据来源可靠且覆盖全面,能够支持后续定量测算和定性分析。', 'common_issues': '数据不完整或过时,导致分析结论缺乏可信度。', 'solutions': '优先使用权威来源(如政府公告、上市公司财报),并在必要时补充第三方数据验证。'}, {'step': 3, 'action': '构建逻辑框架与章节结构', 'output': '设计报告的章节结构,包括事件背景、核心观点、定量测算、定性分析、结论与建议等部分。', 'completion_criteria': '章节安排合理,信息展示符合优先级,核心结论突出且易于理解。', 'common_issues': '章节顺序混乱,导致读者难以抓住重点。', 'solutions': '采用‘总-分-总’结构,先概述核心结论,再逐步展开细节,最后总结并提出建议。'}, {'step': 4, 'action': '进行定量测算与敏感性分析', 'output': '基于历史数据和假设条件,进行详细的定量测算,例如本次分析中对中国太保的利润影响测算。', 'completion_criteria': '测算过程透明,假设合理,结果可复现,且包含极端情况下的敏感性分析。', 'common_issues': '假设过于乐观或悲观,导致结果偏离实际。', 'solutions': '列出所有关键假设并说明其合理性,同时提供多种情景下的测算结果以增强说服力。'}, {'step': 5, 'action': '结合定性分析与行业洞察', 'output': '通过行业趋势、政策解读、竞争格局等角度补充定性分析,例如本次分析中对险资资产配置转向高股息资产的讨论。', 'completion_criteria': '定性分析与定量测算相辅相成,能够解释数据背后的驱动因素和潜在变化。', 'common_issues': '定性分析缺乏深度,未能有效支撑定量结论。', 'solutions': '引用专家观点、行业案例或历史经验来增强分析的说服力。'}, {'step': 6, 'action': '识别并评估风险因素', 'output': '系统梳理可能的风险点及其对结论的影响,例如本次分析中提到的保单销售不及预期、权益市场下行等风险。', 'completion_criteria': '风险因素全面且具体,提出的应对措施切实可行。', 'common_issues': '忽视某些重要风险,或应对措施流于形式。', 'solutions': '从政策、市场、公司运营等多个维度识别风险,并结合实际情况提出针对性解决方案。'}, {'step': 7, 'action': '总结核心结论与投资建议', 'output': '提炼核心结论,并根据分析结果提出具体的投资建议,例如本次分析中维持行业“看好”评级并推荐具体标的。', 'completion_criteria': '结论简明扼要,建议具有操作性,能直接指导投资决策。', 'common_issues': '结论与分析内容脱节,或建议过于笼统。', 'solutions': '确保结论与前文分析逻辑一致,并结合具体标的或策略提出明确建议。'}, {'step': 8, 'action': '撰写声明与信息披露', 'output': '添加分析师声明、一般声明、信息披露等内容,确保报告合规性与透明度。', 'completion_criteria': '声明内容完整,符合监管要求,无遗漏关键信息。', 'common_issues': '声明部分格式或内容不符合规范,存在合规风险。', 'solutions': '参考模板或过往成功案例,确保声明部分符合最新法规要求。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 10:15:00", "modified_time": "2025-08-14 10:15:00", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "37ead3d4da2345d49f152c87706f2fa1", "experience_type": "text", "when_to_use": "行业深度研究、投资标的分析、风险评估报告", "content": "[{'step': 'Step 1: 事件概述', 'action': '简要介绍公司发布的财务报告及其关键数据。', 'output': '一段简短的概述,包括报告发布时间、主要财务数据。', 'completion_criteria': '确保所有关键数据准确无误,时间线清晰。', 'common_issues': '遗漏重要数据或时间节点不清。', 'solutions': '使用标准化模板记录关键数据,交叉验证来源。'}, {'step': 'Step 2: 核心数据展示', 'action': '展示Q2的关键财务指标,并突出超预期的部分。', 'output': '一份包含核心数据的表格或图表,强调超出预期的数据。', 'completion_criteria': '数据准确且突出显示超预期部分。', 'common_issues': '数据不准确或未突出重点。', 'solutions': '使用自动化工具生成数据表格,反复校验数据源。'}, {'step': 'Step 3: 分项分析', 'action': '对不同业务板块进行详细拆解,并结合市场环境解释增长原因。', 'output': '各业务板块的详细分析,解释其增长驱动因素。', 'completion_criteria': '每个业务板块均有详细数据支持,市场环境分析合理。', 'common_issues': '缺乏具体数据支持或市场分析不足。', 'solutions': '收集更多细分市场数据,引用权威市场研究报告。'}, {'step': 'Step 4: 财务健康及现金流表现', 'action': '分析公司的毛利率、费用控制、现金流表现等财务健康指标。', 'output': '一份详细的财务健康指标分析,包括毛利率、费用率、现金流等。', 'completion_criteria': '各项财务指标均有详尽数据支持,分析合理。', 'common_issues': '忽略某些重要财务指标或分析不够深入。', 'solutions': '建立标准化财务分析模板,确保覆盖所有关键指标。'}, {'step': 'Step 5: 市场前景与估值', 'action': '分析公司在国内外市场的布局及其未来发展前景,并给出估值。', 'output': '市场前景分析及未来估值预测,包含多种情景假设。', 'completion_criteria': '市场前景分析合理,估值有充分数据支持。', 'common_issues': '市场前景过于乐观或悲观,估值依据不足。', 'solutions': '引入多情景假设,参考多方市场观点和历史数据。'}, {'step': 'Step 6: 风险提示', 'action': '列出可能的风险因素并进行分析。', 'output': '一份详细的风险提示列表,包含每种风险的具体影响。', 'completion_criteria': '涵盖所有主要风险,分析具体且客观。', 'common_issues': '风险提示过于简略或忽视某些潜在风险。', 'solutions': '定期更新风险数据库,参考同行报告和市场反馈。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 10:16:26", "modified_time": "2025-08-14 10:16:26", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "d7f5890729ac4227bb76642654b21936", "experience_type": "text", "when_to_use": "此规划框架适用于投资标的分析,尤其是针对医药生物行业的深度研究任务。它适合需要结合定量与定性信息、历史数据与未来预测的场景,同时需对研发管线进展、市场空间及潜在风险进行综合评估。", "content": "[{'step': 1, 'action': '明确分析目标与核心问题', 'output': '定义报告的核心目标(如:评估公司研发管线进展及其市场潜力),并确定关键问题(如:P134产品的临床进展、市场空间、竞争格局等)。', 'completion_criteria': '目标清晰,且所有后续章节均围绕该目标展开;问题清单完整覆盖定量与定性维度。', 'common_issues': '目标过于宽泛或模糊,导致后续内容缺乏聚焦。', 'solutions': '通过团队讨论或客户沟通明确优先级,确保目标具体、可衡量。'}, {'step': 2, 'action': '收集与整理基础数据', 'output': '整理公司公告、财务报表、行业数据、市场调研等多源信息,形成结构化数据库(如:收入增长、研发支出、市场份额等)。', 'completion_criteria': '数据来源可靠,涵盖定量(如财务指标)和定性(如政策支持、技术优势)信息,且逻辑条理清晰。', 'common_issues': '数据不完整或更新滞后,影响分析准确性。', 'solutions': '建立定期更新机制,优先使用权威来源,并交叉验证数据一致性。'}, {'step': 3, 'action': '构建分析框架与章节结构', 'output': '设计报告结构(如:支撑评级要点、估值分析、风险提示),确保逻辑递进:从产品进展到市场机会,再到财务预测与风险评估。', 'completion_criteria': '章节安排符合“从具体到抽象”的逻辑顺序,且各部分之间过渡自然。', 'common_issues': '章节间存在重复或逻辑断裂,削弱整体连贯性。', 'solutions': '绘制思维导图,明确每章的核心贡献,避免冗余内容。'}, {'step': 4, 'action': '深入解析核心驱动因素', 'output': '聚焦于公司研发管线进展(如P134临床试验)、市场空间(如GBM治疗市场规模)及竞争优势(如领先技术平台),提供多层次论证。', 'completion_criteria': '核心驱动因素得到充分论证,且支持材料详实(如引用行业报告、临床数据)。', 'common_issues': '论证单一,缺乏多角度支撑。', 'solutions': '采用“数据+案例+专家观点”相结合的方式增强说服力。'}, {'step': 5, 'action': '平衡展示定量与定性信息', 'output': '在报告中合理分布定量(如财务预测、估值倍数)与定性(如研发策略、政策环境)信息,突出关键结论(如买入评级依据)。', 'completion_criteria': '信息展示比例适当,且核心结论通过图表或文字加粗等形式凸显。', 'common_issues': '信息堆砌,未能有效突出重点。', 'solutions': '使用可视化工具(如表格、趋势图)提升信息传递效率。'}, {'step': 6, 'action': '识别与披露风险因素', 'output': '系统梳理潜在风险(如研发失败、市场竞争加剧),并在适当时机提出(通常位于结论前),以确保分析全面性。', 'completion_criteria': '风险因素分类清晰,且与正文内容呼应。', 'common_issues': '风险描述过于笼统,缺乏针对性。', 'solutions': '结合具体情境细化风险点,并量化其可能影响。'}, {'step': 7, 'action': '处理不确定性与多种可能性', 'output': '对不确定事件(如P134临床结果)进行情景分析,设置乐观/中性/悲观假设,并给出概率权重。', 'completion_criteria': '情景分析覆盖主要变量,且假设合理、透明。', 'common_issues': '忽略极端情况,低估尾部风险。', 'solutions': '引入敏感性分析,测试不同假设下的结果变化。'}, {'step': 8, 'action': '总结核心结论与投资建议', 'output': '提炼出简洁明了的投资建议(如买入评级),并附上估值依据(如PE/EV-EBITDA倍数)。', 'completion_criteria': '结论与正文内容一致,且逻辑闭环。', 'common_issues': '结论与分析脱节,或表述含糊。', 'solutions': '反复核对分析链条,确保结论有据可依。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 10:18:33", "modified_time": "2025-08-14 10:18:33", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "fadc8c37ef1147f795f11dcbf6c8517a", "experience_type": "text", "when_to_use": "适用于行业深度研究、投资标的分析、风险评估报告等需要结合定量与定性数据,进行多层次论证并提出明确投资建议的金融分析任务。", "content": "[{'step': 1, 'action': '明确分析目标和核心问题', 'output': '确定研究对象(如沪电股份)的核心业务及市场定位,提炼出关键的投资要点(如AI算力产品和汽车板业务的增长潜力)。', 'criteria_for_completion': '能够清晰定义分析范围,并列出2-3个主要研究方向。', 'common_issues': '目标过于宽泛或模糊,导致后续分析难以聚焦。', 'solutions': '通过初步文献调研和行业背景信息,明确研究对象的核心竞争力及市场前景。'}, {'step': 2, 'action': '收集和整理基础数据', 'output': '从财务报表、行业报告、公司公告等来源提取关键数据,包括收入结构、盈利能力、市场份额等,并按历史数据、当前数据和预测数据分类整理。', 'criteria_for_completion': '形成完整的数据表格和图表,覆盖至少过去3年的核心指标变化趋势。', 'common_issues': '数据不完整或缺乏权威性,影响分析可信度。', 'solutions': '优先选择上市公司公告、第三方研究机构报告等可靠数据源,并注明数据出处。'}, {'step': 3, 'action': '构建章节结构并分配信息优先级', 'output': '设计报告框架,按照“背景介绍→技术/市场优势分析→财务表现→风险提示→投资建议”的逻辑组织内容,确保核心结论在前两章突出展示。', 'criteria_for_completion': '各章节内容分工明确,且信息分布合理,重点章节占比超过50%。', 'common_issues': '章节间逻辑不连贯,或次要信息占用过多篇幅。', 'solutions': '先列出每章的主要论点和支持材料,再根据重要性调整顺序和篇幅比例。'}, {'step': 4, 'action': '层层递进地展开论证', 'output': '通过“宏观趋势→行业动态→公司战略”逐步深入的方式,结合具体案例和数据支持观点。例如,从AI需求增长到公司HDI产品的技术卡位优势,再到实际营收贡献。', 'criteria_for_completion': '每个论点都有充分的数据或案例支撑,且前后逻辑严密。', 'common_issues': '论证跳跃性大,或缺乏具体数据支持。', 'solutions': '为每个论点准备至少一组数据或图表作为佐证,避免空泛陈述。'}, {'step': 5, 'action': '平衡定量与定性信息', 'output': '将财务数据(如收入增长率、毛利率)、市场数据(如新能源汽车销量渗透率)与定性分析(如技术卡位优势、客户合作关系)有机结合,确保结论全面。', 'criteria_for_completion': '定量与定性信息的比例接近1:1,且彼此呼应。', 'common_issues': '偏重某一类信息,导致分析失衡。', 'solutions': '在每一章中同时包含定量和定性分析,避免单方面堆砌数据或主观判断。'}, {'step': 6, 'action': '适时引入风险因素', 'output': '在论证过程中自然提及潜在风险(如下游需求不及预期、原材料价格波动),并通过敏感性分析或情景假设量化风险影响。', 'criteria_for_completion': '风险提示部分清晰列出所有可能的风险点,并提供应对策略。', 'common_issues': '风险因素被忽略或过于简略,降低报告完整性。', 'solutions': '为每个风险点匹配相应的缓解措施,并用数据说明其潜在影响范围。'}, {'step': 7, 'action': '提出明确的投资建议', 'output': '基于前述分析,给出具体的买入、持有或减持建议,并附上估值模型或PE倍数等支持依据。', 'criteria_for_completion': '投资建议与分析结论高度一致,且有明确的时间框架和收益预期。', 'common_issues': '建议模糊或缺乏数据支撑,难以指导决策。', 'solutions': '使用标准化评级体系(如“买入”、“增持”),并详细解释建议背后的逻辑链。'}, {'step': 8, 'action': '校验和优化报告表达', 'output': '检查语言表述是否简洁明了,图表是否直观易懂,整体排版是否专业美观。', 'criteria_for_completion': '无明显语法错误,图表标注准确,阅读体验流畅。', 'common_issues': '语言冗长或图表混乱,影响读者理解。', 'solutions': '邀请同事交叉审阅,模拟目标受众阅读反馈,针对性修改。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 10:20:03", "modified_time": "2025-08-14 10:20:03", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "7dddbc13042d412692504209eae60141", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究、投资标的分析以及公司战略评估等金融分析任务。尤其适合需要结合定量与定性信息,综合评估公司现状、未来潜力和风险因素的场景。", "content": "[{'step': 1, 'action': '明确分析目标与核心问题', 'output': '确定本次分析的核心目标(如:评估海外投资项目对公司盈利能力的影响),并列出关键问题清单(如:项目背景、财务影响、市场前景等)。', 'completion_criteria': '目标清晰且具体,关键问题覆盖全面,能直接指导后续章节安排。', 'common_issues': '目标过于宽泛或模糊,导致后续分析缺乏聚焦点。', 'solutions': '通过与利益相关方沟通,明确分析的核心需求,并将目标分解为可量化的问题。'}, {'step': 2, 'action': '组织章节结构,优先展示核心结论', 'output': '设计报告结构,通常以“核心结论→背景与动机→详细分析→风险提示”的逻辑顺序展开。确保核心结论在开头部分突出呈现。', 'completion_criteria': '读者能在前两段快速了解分析的核心观点,章节安排逻辑清晰且服务于整体目标。', 'common_issues': '章节结构松散,信息堆砌而无逻辑递进。', 'solutions': '使用金字塔原理,从结论出发逐步展开支持论据,避免信息冗余。'}, {'step': 3, 'action': '收集并整合定量与定性数据', 'output': '整理历史财务数据、行业趋势、市场预测等定量信息,同时补充政策环境、竞争格局等定性信息,形成完整的信息基础。', 'completion_criteria': '数据来源可靠,信息覆盖全面,能够支撑后续分析论证。', 'common_issues': '数据不完整或质量不足,导致分析缺乏说服力。', 'solutions': '优先选择权威公开数据源(如Wind、公司公告),并通过交叉验证提高数据可信度。'}, {'step': 4, 'action': '分层次构建论证逻辑', 'output': '按照“事实陈述→因果分析→推导结论”的路径,逐层递进建立观点。例如,先描述海外项目的投资规模与产能规划,再分析其对市场份额和盈利弹性的潜在影响。', 'completion_criteria': '每个观点都有充分的事实依据支持,且逻辑链条完整。', 'common_issues': '论证跳跃性强,因果关系不够严密。', 'solutions': '采用MECE原则(相互独立、完全穷尽)拆解问题,确保每一步推理严谨。'}, {'step': 5, 'action': '平衡历史与预测信息,突出不确定性管理', 'output': '在展示历史数据的同时,提供基于合理假设的未来预测,并通过敏感性分析或情景模拟处理不确定性。', 'completion_constraints': '预测模型透明,假设条件合理,不确定性被充分讨论但不夸大。', 'common_issues': '过度依赖历史数据,忽略未来变化的可能性;或者预测过于激进,缺乏可信度。', 'solutions': '结合行业专家意见和多维度数据校准预测模型,并明确标注关键假设条件。'}, {'step': 6, 'action': '适时引入风险因素,保持客观中立', 'output': '在核心结论之后或详细分析末尾,系统性地提出风险因素,并评估其可能的影响程度。', 'completion_criteria': '风险提示全面且具有针对性,不会削弱整体结论的积极基调。', 'common_issues': '风险提示过于简略或滞后,显得敷衍了事。', 'solutions': '提前梳理潜在风险点,并将其融入到整体分析框架中,而非孤立呈现。'}, {'step': 7, 'action': '总结核心结论,给出明确建议', 'output': '在结尾部分重申核心结论,并根据分析结果提出具体的行动建议(如:“买入”评级、关注特定指标等)。', 'completion_criteria': '建议简洁明了,与分析内容高度一致,便于决策者采纳。', 'common_issues': '建议含糊不清,或与分析内容脱节。', 'solutions': '确保建议直接回应最初设定的核心问题,并附上量化依据增强说服力。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 10:21:32", "modified_time": "2025-08-14 10:21:32", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "fdf821682d8d40ffb5688bc173b89d72", "experience_type": "text", "when_to_use": "适用于行业深度研究、投资标的分析、风险评估报告等需要综合定量和定性分析的任务。", "content": "[{'step': 1, 'action': '收集和整理基础信息,包括公司概况、股票数据和相关研究报告。', 'output': '一份包含公司基本信息、股票数据和相关研究报告的背景资料。', 'completion_criteria': '所有关键背景信息完整且准确无误。', 'common_issues': '信息不全或过时。应对方法:多方核实数据来源,确保信息最新。'}, {'step': 2, 'action': '提取和分析关键财务数据,按季度、业务和地区细分,突出核心结论。', 'output': '一份详细的核心财务数据分析,包括收入、净利润及其增长率。', 'completion_criteria': '核心结论明确,数据支持充分。', 'common_issues': '数据解读偏差。应对方法:交叉验证数据,确保一致性。'}, {'step': 3, 'action': '分析盈利能力变化,包括毛利率、净利率和费用率的变化情况。', 'output': '一份关于盈利能力变化的详细分析,指出改善或恶化的原因。', 'completion_criteria': '盈利能力变化原因清晰,数据支撑充分。', 'common_issues': '忽略次要但重要的费用项目。应对方法:全面检查费用构成。'}, {'step': 4, 'action': '描述产品和渠道策略,展示公司在产品创新和全球化布局上的进展。', 'output': '一份关于产品和渠道策略的报告,突出创新点和市场扩展。', 'completion_criteria': '策略描述详尽,能够解释增长驱动因素。', 'common_issues': '忽视区域差异。应对方法:分地区分析市场策略。'}, {'step': 5, 'action': '给出投资建议和风险提示,附上详细的财务预测和指标。', 'output': '一份包含投资建议、风险提示和财务预测的综合报告。', 'completion_criteria': '投资建议合理,风险提示全面,预测数据可靠。', 'common_issues': '风险提示不足。应对方法:多方咨询专家意见,确保覆盖所有潜在风险。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 10:22:51", "modified_time": "2025-08-14 10:22:51", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "8799e27b7a874077b8d15e13bcfe7f04", "experience_type": "text", "when_to_use": "适用于行业深度研究、投资标的分析、风险评估报告等任务。", "content": "[{'step': 1, 'action': '明确分析目标和核心结论', 'output': '简明扼要的核心结论和投资建议', 'completion_criteria': '核心结论清晰且有数据支持,能快速传达主要观点', 'common_issues': '结论过于模糊或缺乏数据支持', 'solutions': '确保每个结论都有相应的数据和分析支撑'}, {'step': 2, 'action': '收集和整理相关数据', 'output': '包括历史数据、当前市场数据和未来预测数据的完整数据集', 'completion_criteria': '数据完整且来源可靠,覆盖所有关键指标', 'common_issues': '数据不完整或来源不可靠', 'solutions': '使用多个可靠数据源交叉验证,并注明数据来源'}, {'step': 3, 'action': '进行详细的数据分析', 'output': '详细的销量、财务和市场分析,涵盖定量和定性信息', 'completion_criteria': '分析深入且逻辑严密,能够解释数据背后的趋势和原因', 'common_issues': '分析浅显或缺乏逻辑性', 'solutions': '采用多层次分析方法,结合图表和文字说明'}, {'step': 4, 'action': '构建财务预测模型', 'output': '未来几年的收入、利润和关键财务比率预测', 'completion_criteria': '预测合理且有据可依,涵盖多种情景分析', 'common_issues': '预测过于乐观或悲观,缺乏情景分析', 'solutions': '基于历史数据和市场趋势,构建多种情景下的预测模型'}, {'step': 5, 'action': '识别和评估潜在风险', 'output': '详细的风险提示和应对策略', 'completion_criteria': '风险因素全面且具体,有相应的应对措施', 'common_issues': '风险提示过于笼统或缺乏应对策略', 'solutions': '结合行业和公司具体情况,提出针对性的风险管理方案'}, {'step': 6, 'action': '撰写报告并进行审阅', 'output': '完整的分析报告,包括引言、数据分析、财务预测、风险提示和结论', 'completion_criteria': '报告结构清晰,内容全面且无明显错误', 'common_issues': '报告结构混乱或存在明显错误', 'solutions': '多次审阅和校对,确保逻辑清晰和内容准确'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 10:23:56", "modified_time": "2025-08-14 10:23:56", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "5aee3fc5877f410db82d4759f76241df", "experience_type": "text", "when_to_use": "适用于行业深度研究、投资标的分析、风险评估报告等任务,尤其针对需要结合定量与定性数据,同时需覆盖市场趋势、技术突破、财务预测及潜在风险的综合性金融分析。", "content": "[{'step': 1, 'action': '明确分析目标和核心问题', 'output': '确定本次分析的核心问题(如:联得装备在8.6代AMOLED设备市场的竞争优势);梳理关键变量(如:市场需求、技术壁垒、竞争格局)。', 'evaluation_criteria': '是否清晰定义了分析目标,并能够围绕目标展开后续工作;是否涵盖了所有影响决策的关键变量。', 'common_issues': '目标过于宽泛或模糊,导致分析方向偏离;未充分识别关键变量。', 'solutions': '通过与客户或团队讨论明确目标;列出可能影响目标的所有变量并进行优先级排序。'}, {'step': 2, 'action': '收集和整理基础信息', 'output': '收集与目标相关的公开数据(如:行业市场规模、公司财务报表、竞争对手动态);整理历史数据和未来预测(如:OLED市场份额增长预测、固态电池市场潜力)。', 'evaluation_criteria': '数据来源是否可靠且全面;是否能区分历史事实与未来预测数据。', 'common_issues': '数据不完整或缺乏权威性;混淆历史数据与预测数据。', 'solutions': '优先使用权威机构发布的数据;对预测数据标注假设条件和来源。'}, {'step': 3, 'action': '构建逻辑框架和章节结构', 'output': '按照“总-分-总”结构组织内容:开篇概述核心结论,中间部分按主题展开详细分析(如:市场需求、技术优势、财务表现),结尾总结并提出投资建议。', 'evaluation_criteria': '章节安排是否符合逻辑递进关系;核心结论是否突出且易于理解。', 'common_issues': '章节间逻辑断裂或重复;核心结论被次要信息淹没。', 'solutions': '提前绘制章节结构图,确保每个部分服务于整体目标;将核心结论放在显眼位置。'}, {'step': 4, 'action': '进行定量分析', '输出': '基于财务数据和市场预测,计算关键指标(如:收入增长率、市盈率、毛利率);制作数据表格和图表以直观展示趋势。', 'evaluation_criteria': '定量分析是否准确且具有说服力;图表是否清晰传达信息。', 'common_issues': '数据计算错误或遗漏重要指标;图表设计复杂难以理解。', 'solutions': '反复核对数据;选择简洁明了的图表形式,避免过度装饰。'}, {'step': 5, 'action': '进行定性分析', 'output': '结合行业趋势和技术进展,评估公司的竞争优势和潜在风险(如:联得装备在高世代AMOLED设备中的技术突破及其面临的竞争压力)。', 'evaluation_criteria': '定性分析是否基于扎实的事实依据;是否平衡正面和负面观点。', 'common_issues': '定性分析缺乏事实支撑;过于乐观或悲观。', 'solutions': '引用具体案例和权威观点支持论点;同时考虑多种可能性并提供平衡视角。'}, {'step': 6, 'action': '整合定量与定性分析,形成综合判断', 'output': '综合定量和定性分析结果,得出关于公司前景的最终判断(如:联得装备的技术领先地位和苹果供应链机遇推动其成长)。', 'evaluation_criteria': '综合判断是否合理且有据可依;是否能有效指导投资决策。', 'common_issues': '综合判断与数据分析脱节;未能明确指导行动。', 'solutions': '确保每项结论都有对应的数据或分析支撑;提炼出具体的行动建议。'}, {'step': 7, 'action': '识别和评估风险因素', 'output': '列出主要风险因素(如:面板行业景气度不及预期、市场竞争加剧);评估其发生的概率和影响程度。', 'evaluation_criteria': '风险因素是否全面且具体;是否提出了应对措施。', 'common_issues': '忽略潜在风险或评估过于笼统;未提供解决方案。', 'solutions': '采用头脑风暴法列举所有可能风险;为每项风险制定缓解策略。'}, {'step': 8, 'action': '撰写报告并优化表达', 'output': '完成正式报告文档,包括标题、摘要、正文、附录等内容;优化语言表达,确保专业性和易读性。', 'evaluation_criteria': '报告是否条理清晰、重点突出;语言是否简练且无歧义。', 'common_issues': '内容冗长或表述晦涩;格式不统一。', 'solutions': '多次校对修改;遵循固定模板规范格式。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 10:25:32", "modified_time": "2025-08-14 10:25:32", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "6772c5a7e0f3486b8dadda5ff104557b", "experience_type": "text", "when_to_use": "适用于行业深度研究、投资标的分析、风险评估报告等需要全面综合定量和定性信息的金融分析任务。尤其适合涉及复杂行业趋势、公司竞争力分析及财务预测的场景,如节能服务、新能源领域或类似综合性产业的研究。", "content": "[{'step': 1, 'action': '明确研究主题并定义核心问题', 'output': '确定研究对象(如南网能源)及其在行业中的定位,明确核心问题(如节能行业的增长潜力及公司竞争优势)。', 'how_to_judge_completion': '是否清晰界定了研究范围,并列出需要解决的关键问题,例如市场规模、竞争格局、公司战略等。', 'common_issues': '研究主题过于宽泛或模糊,导致后续分析缺乏聚焦。', 'solutions': '通过与团队讨论或参考行业热点,细化研究目标和关键问题清单。'}, {'step': 2, 'action': '收集并整理基础数据', 'output': '整合公司财务数据、行业政策文件、市场统计数据及竞争对手信息,形成初步数据框架。', 'how_to_judge_completion': '是否涵盖了所有必要的定量和定性数据,且数据来源可靠(如iFind、EMCA等权威机构)。', 'common_issues': '数据不完整或质量不高,影响后续分析的准确性。', 'solutions': '优先选择权威数据源,补充缺失数据时注明假设条件,确保透明性。'}, {'step': 3, 'action': '设计章节结构并安排信息优先级', 'output': '按照逻辑顺序组织章节,包括公司背景、行业分析、竞争优势、盈利预测和风险提示,确保核心结论突出。', 'how_to_judge_completion': '章节结构是否层次分明,核心结论是否在摘要中清晰呈现,并贯穿全文。', 'common_issues': '章节间逻辑不连贯,或信息分布不平衡,导致读者难以抓住重点。', 'solutions': '采用“总-分-总”结构,先概述核心结论,再展开详细分析,最后总结展望。'}, {'step': 4, 'action': '进行行业趋势分析', 'output': '结合政策导向、市场规模、技术发展等维度,分析行业现状及未来前景,指出关键驱动因素。', 'how_to_judge_completion': '是否覆盖了行业的主要特征和发展趋势,并引用具体数据支持观点。', 'common_issues': '分析流于表面,未能深入挖掘行业痛点或机会。', 'solutions': '从产业链上下游切入,结合实际案例说明行业变化对企业的潜在影响。'}, {'step': 5, 'action': '评估公司竞争优势', 'output': '基于品牌、技术、资本等维度,分析公司在行业中的独特优势,并与竞争对手对比。', 'how_to_judge_completion': '是否清晰展示了公司的核心竞争力,并用数据或事实佐证。', 'common_issues': '忽略竞争对手动态,导致对公司优势的评价不够客观。', 'solutions': '引入可比公司分析,量化对比各项指标(如市场份额、毛利率等)。'}, {'step': 6, 'action': '构建财务模型并预测业绩', 'output': '根据历史数据和行业趋势,预测未来3-5年的收入、成本、利润等关键财务指标。', 'how_to_judge_completion': '财务预测是否合理,是否考虑了多种情景下的不确定性。', 'common_issues': '预测过于乐观或保守,未充分考虑外部环境变化。', 'solutions': '设置敏感性分析,调整关键假设参数以测试预测结果的稳健性。'}, {'step': 7, 'action': '识别并评估主要风险', 'output': '梳理政策、资金、竞争等方面的风险,并提出应对措施。', 'how_to_judge_completion': '是否全面列出了可能影响公司发展的风险点,并给出具体的缓解策略。', 'common_issues': '风险描述笼统,缺乏针对性建议。', 'solutions': '结合公司实际情况,提供操作性强的风险管理方案。'}, {'step': 8, 'action': '撰写最终报告并优化展示形式', 'output': '将分析内容转化为专业报告,辅以图表、数据可视化工具增强表达效果。', 'how_to_judge_completion': '报告是否条理清晰、格式规范,且能有效传递核心信息。', 'common_issues': '图表过多或过少,影响阅读体验;语言表述冗长或晦涩。', 'solutions': '控制图表数量,确保每张图表都有明确目的;使用简洁易懂的语言。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 10:27:11", "modified_time": "2025-08-14 10:27:11", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "3c1a4552472e476b85acd63b107fa2ef", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究、投资标的分析以及公司业绩点评类报告撰写,尤其是需要结合定量与定性信息进行综合评估,并提出明确投资建议的场景。", "content": "[{'step': 1, 'action': '明确分析目标和核心问题', 'output': '清晰定义报告的核心目的(如分析公司业绩表现、预测未来增长潜力),并列出关键问题(如收入增长驱动因素、盈利能力变化原因等)。', 'completion_criteria': '目标明确且具体,能够指导后续章节安排;所有关键问题均被覆盖。', 'common_issues': '目标过于宽泛或模糊,导致后续分析缺乏聚焦点。', 'solutions': '在任务开始前与利益相关方确认目标,确保分析方向一致。'}, {'step': 2, 'action': '收集和整理数据', 'output': '从公开财务报告、市场数据和其他可靠来源获取定量信息(如营收、净利润、毛利率等),同时搜集定性信息(如战略调整、技术创新进展等)。', 'completion_criteria': '数据全面且准确,涵盖历史表现、当前状态及未来预测;定性信息与定量数据相互印证。', 'common_issues': '数据不完整或存在时间滞后,影响分析质量。', 'solutions': '优先选择权威数据源,并对异常值进行交叉验证。'}, {'step': 3, 'action': '构建章节结构并分配信息优先级', 'output': '设计逻辑清晰的章节架构,将核心结论置于显眼位置(如摘要部分),按照“总-分”模式组织内容,先概述整体情况,再逐步深入到细分领域。', 'completion_criteria': '章节安排合理,信息展示层次分明;核心结论突出,易于读者快速抓住重点。', 'common_issues': '章节顺序混乱或信息堆砌,导致阅读体验不佳。', 'solutions': '遵循“重要性递减原则”,优先展示最关键的信息,并用小标题引导读者理解内容逻辑。'}, {'step': 4, 'action': '建立论证逻辑并展开分析', 'output': '采用层层递进的方式,通过对比历史趋势、行业基准和竞争对手表现,解释数据背后的驱动因素;结合定性信息阐述潜在机会与风险。', 'completion_criteria': '论证链条完整,观点有充分数据支持;定性分析与定量结果相辅相成。', 'common_issues': '论证过程跳跃性强或缺乏连贯性,削弱说服力。', 'solutions': '使用表格、图表等形式辅助说明复杂关系,确保每一步推导都有据可依。'}, {'step': 5, 'action': '处理不确定性和多种可能性', 'output': '识别并讨论主要风险因素(如市场需求波动、技术变革挑战等),提出应对策略;对于未来预测,考虑不同情景假设并给出概率分布。', 'completion_criteria': '风险提示全面且客观;预测方法科学,包含敏感性分析或蒙特卡洛模拟。', 'common_issues': '忽略负面因素或低估不确定性,造成决策误导。', 'solutions': '引入外部专家意见或参考类似案例,增强风险评估的可信度。'}, {'step': 6, 'action': '总结核心发现并提出行动建议', 'output': '提炼关键洞察形成简洁明了的总结,结合估值模型或评级标准给出具体的投资建议(如买入/持有/卖出)。', 'completion_criteria': '总结精炼且具有指导意义;建议操作性强,符合客户实际需求。', 'common_issues': '结论空洞或建议脱离实际情况。', 'solutions': '多次复核结论是否与数据分析结果一致,避免过度解读或主观臆断。'}, {'step': 7, 'action': '校验与优化报告呈现形式', 'output': '检查语言表达是否专业流畅,图表是否直观易懂,格式是否统一规范;确保附录中提供详尽的数据支持材料。', 'completion_criteria': '报告无语法错误,视觉效果良好;附录内容详实,便于进一步查阅。', 'common_issues': '排版粗糙或细节疏漏,降低报告可信度。', 'solutions': '邀请同事进行独立审阅,及时修正问题。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 10:28:28", "modified_time": "2025-08-14 10:28:28", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "c79b352d15f3499aa5cebdd973ef6abc", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及公司财务预测与风险评估报告等任务。尤其适合需要结合定量和定性分析,从多维度评估企业经营表现、市场竞争力及未来增长潜力的场景。", "content": "[{'step': 1, 'action': '明确分析目标并定义核心问题', 'output': '确定本次分析的核心目标(如:评估公司未来增长潜力和投资价值),并列出需回答的关键问题(如:收入增长驱动因素、盈利能力变化趋势、风险点等)。', 'how_to_judge_completion': '目标清晰且具体,关键问题覆盖全面,能够为后续分析提供明确方向。', 'common_issues_and_solutions': [{'issue': '目标过于宽泛或模糊。', 'solution': '通过与利益相关方沟通,聚焦于实际需求,确保目标可量化或可验证。'}, {'issue': '遗漏重要问题。', 'solution': '参考类似案例或行业标准框架,确保问题清单完整性。'}]}, {'step': 2, 'action': '收集并整理数据,构建基础信息框架', 'output': '整理公司财务报表、市场表现数据、行业动态及相关政策文件,形成结构化数据集,并初步标注异常值或关键趋势。', 'how_to_judge_completion': '数据完整、准确,涵盖定量(如财务指标)和定性(如管理层战略)内容,具备进一步分析的基础。', 'common_issues_and_solutions': [{'issue': '数据来源不一致或质量参差不齐。', 'solution': '优先选择权威渠道(如公司公告、Wind数据库),并对数据进行交叉验证。'}, {'issue': '数据量过大导致难以聚焦。', 'solution': '根据第一步定义的核心问题筛选关键数据,避免过度扩展范围。'}]}, {'step': 3, 'action': '分解业务模块,识别增长驱动因素', 'output': '按产品线、地区、客户群等维度拆解收入和利润构成,分析各部分的增长贡献率及其背后的驱动逻辑(如主粮产品优化提升毛利率)。', 'how_to_judge_completion': '每个业务模块的增长原因清晰,能用具体数据支持结论,同时揭示潜在协同效应或结构性优势。', 'common_issues_and_solutions': [{'issue': '忽略次要但重要的细分领域。', 'solution': '采用自上而下与自下而上相结合的方法,确保覆盖所有显著影响整体业绩的因素。'}, {'issue': '缺乏对行业背景的理解。', 'solution': '引入外部专家意见或行业研究报告补充视角。'}]}, {'step': 4, 'action': '建立财务预测模型,推演未来表现', 'output': '基于历史数据和合理假设,构建收入、成本、费用等科目预测模型,并测算不同情景下的盈利能力和估值水平。', 'how_to_judge_completion': '模型逻辑严谨,假设合理且透明,结果具有较高可信度,能反映多种可能性。', 'common_issues_and_solutions': [{'issue': '假设条件过于乐观或悲观。', 'solution': '参考行业平均水平及对标公司情况,设置敏感性分析以检验假设稳健性。'}, {'issue': '忽略非经常性损益的影响。', 'solution': '单独列示非经常性项目,区分核心业务与一次性收益。'}]}, {'step': 5, 'action': '评估风险因素,提出应对策略', 'output': '系统梳理内外部风险(如汇率波动、原材料价格变化等),并针对每项风险制定缓解措施或预警机制。', 'how_to_judge_completion': '风险分类清晰,描述详实,提出的解决方案切实可行。', 'common_issues_and_solutions': [{'issue': '风险描述过于笼统。', 'solution': '结合具体案例说明风险可能发生的场景及其后果。'}, {'issue': '缺乏应对措施。', 'solution': '咨询内部风控团队或外部顾问,获取专业建议。'}]}, {'step': 6, 'action': '撰写报告,突出核心结论', 'output': '按照“总-分-总”结构组织内容,开篇提炼核心观点,中间章节详细展开论证过程,结尾总结投资建议及风险提示。', 'how_to_judge_completion': '报告层次分明,语言简洁有力,图表辅助直观展示重点信息,便于读者快速抓住关键点。', 'common_issues_and_solutions': [{'issue': '内容冗长或重点不突出。', 'solution': '使用摘要、小标题和关键句加粗等方式引导阅读节奏。'}, {'issue': '图表设计复杂难懂。', 'solution': '遵循“一图一意”原则,确保每张图表仅传递单一信息。'}]}, {'step': 7, 'action': '审阅与迭代优化', 'output': '邀请同事或同行审阅报告初稿,收集反馈意见后调整措辞、补充遗漏信息,最终定稿。', 'how_to_judge_completion': '修改后的版本无重大错误,逻辑连贯,表述精准,符合专业规范。', 'common_issues_and_solutions': [{'issue': '忽视他人反馈。', 'solution': '主动寻求多元化意见,特别是来自不同职能领域的专家。'}, {'issue': '时间紧迫导致草率提交。', 'solution': '提前预留充足时间用于校对和润色。'}]}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 10:30:13", "modified_time": "2025-08-14 10:30:13", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "d0076164c826439c820aac7a42c4fa0a", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及公司财务与市场表现评估等任务。尤其适合需要结合定量数据和定性分析,对公司的业务表现、市场地位、财务健康度及未来增长潜力进行综合评价的场景。", "content": "[{'step': 1, 'action': '明确分析目标并收集基础数据', 'output': '确定分析的核心目标(如评估公司业绩、预测未来增长),整理公司财报、市场数据、行业趋势等关键信息。', 'how_to_judge_completion': '确保所有相关的财务报表、市场数据和行业动态均已系统化整理且来源可靠。', 'common_problems': '数据不完整或过时导致分析偏差。', 'solutions': '使用权威数据源(如Wind、SNE Research)并交叉验证,确保数据最新且准确。'}, {'step': 2, 'action': '构建章节结构并分配优先级', 'output': '根据分析逻辑安排章节顺序:从整体市场背景到公司具体表现,再到风险提示和估值建议。核心结论放在报告开头,方便读者快速抓住重点。', 'how_to_judge_completion': '章节结构清晰,信息展示优先级合理,核心结论突出且易于理解。', 'common_problems': '章节安排混乱,信息堆砌无序。', 'solutions': '遵循“总-分-总”逻辑,先概述全局情况,再深入细节,最后总结展望。'}, {'step': 3, 'action': '整合定量与定性信息,平衡历史与预测数据', 'output': '结合历史财务数据(如营收、净利润、毛利率)和未来预测(如市场规模、政策支持),通过图表和文字说明呈现分析结果。', 'how_to_judge_completion': '定量数据与定性分析比例均衡,历史数据与预测数据无缝衔接,支撑观点有力。', 'common_problems': '过度依赖单一类型数据,缺乏说服力。', 'solutions': '在每一部分同时引用定量数据和定性分析,并用图表直观展示变化趋势。'}, {'step': 4, 'action': '层层递进建立论证路径', 'output': '从宏观环境切入,逐步聚焦至行业现状、公司竞争力及具体业务表现,最终得出对公司未来发展的判断。', 'how_to_judge_completion': '论证逻辑严密,每一步推导自然流畅,前后呼应。', 'common_problems': '论证跳跃性大,缺乏连贯性。', 'solutions': '采用因果链条式推理,例如‘行业增长→公司市占率提升→盈利能力增强’。'}, {'step': 5, 'action': '适时提出风险因素并讨论不确定性', 'output': '在正向分析后,专门设立章节探讨潜在风险(如原材料价格波动、市场竞争加剧),并提供应对策略。', 'how_to_judge_completion': '风险因素全面覆盖,表述客观中立,避免夸大或忽视。', 'common_problems': '忽略重要风险或处理不当,影响可信度。', 'solutions': '列出所有可能影响公司发展的内外部风险,并通过情景假设分析多种可能性。'}, {'step': 6, 'action': '形成投资评级与估值建议', 'output': '基于前述分析,给出明确的投资评级(如增持、买入),附上详细的估值模型和敏感性分析。', 'how_to_judge_completion': '评级理由充分,估值方法科学,能为投资者提供决策参考。', 'common_problems': '评级依据不足,估值过于乐观或悲观。', 'solutions': '采用多种估值方法(如PE、PB、DCF)相互印证,并考虑不同假设条件下的结果范围。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 10:31:37", "modified_time": "2025-08-14 10:31:37", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "76c09792e8344ae29ded96b00a6f7417", "experience_type": "text", "when_to_use": "适用于行业深度研究、投资标的分析以及银行股的财务与战略评估。尤其适合需要结合定量和定性分析,同时对公司的战略方向、财务表现、风险因素进行全面审视的场景。", "content": "[{'step': 1, 'action': '明确研究目标和核心问题', 'output': '确定报告的核心观点(如中信银行零售转型成效显现,对公业务根基深厚)。', 'completion_criteria': '核心观点清晰且具有逻辑支撑,能直接回答投资者关心的主要问题。', 'common_issues': '目标过于宽泛或模糊,导致后续章节结构混乱。', 'solutions': '通过初步数据扫描和市场趋势分析,提炼出最具价值的研究主题。'}, {'step': 2, 'action': '构建章节结构并分配优先级', 'output': '形成清晰的章节框架,包括公司概况、经营特色、财务分析、盈利预测、估值与投资建议、风险提示等。', 'completion_criteria': '章节安排符合逻辑递进关系,信息展示顺序能够引导读者逐步深入理解。', 'common_issues': '章节间逻辑断裂或内容重复。', 'solutions': '采用“总-分-总”结构,确保每一部分都服务于整体论点,并避免冗余。'}, {'step': 3, 'action': '收集并整理基础数据', 'output': '整理历史财务数据、行业对比指标、公司战略文件等关键信息。', 'completion_criteria': '数据覆盖全面,来源可靠,且经过交叉验证以保证准确性。', 'common_issues': '数据不完整或未及时更新,影响分析结论的可信度。', 'solutions': '利用权威数据库(如Wind)获取最新数据,并补充公司公告和第三方研究报告。'}, {'step': 4, 'action': '进行定量分析', 'output': '基于杜邦分解、盈利能力指标、资产质量指标等计算得出具体数值。', 'completion_criteria': '定量分析结果支持核心观点,图表直观呈现关键发现。', 'common_issues': '过度依赖单一指标,忽略其他重要因素。', 'solutions': '结合多种指标综合分析,例如将ROE拆解为多个驱动因素,揭示变化背后的深层次原因。'}, {'step': 5, 'action': '开展定性分析', 'output': '解析公司战略定位、管理层能力、行业竞争格局等内容。', 'completion_criteria': '定性分析与定量分析相辅相成,共同支撑核心结论。', 'common_issues': '定性描述空洞无物,缺乏实际案例支持。', 'solutions': '引用具体事件(如中信银行零售战略升级过程)和公开资料增强说服力。'}, {'step': 6, 'action': '平衡不同信息类型', 'output': '合理分布定量/定性、历史/预测信息,使报告既有深度又具前瞻性。', 'completion_criteria': '各类信息比例协调,不存在偏重某一方面的情况。', 'common_issues': '忽视未来趋势预测,导致报告缺乏指导意义。', 'solutions': '加入敏感性分析和情景假设,提高报告的适用性和灵活性。'}, {'step': 7, 'action': '提出风险因素', 'output': '识别政策风险、财务风险、市场风险等潜在威胁,并讨论其可能影响。', 'completion_criteria': '风险提示详尽且客观,不会削弱报告的整体积极基调。', 'common_issues': '风险提示过于笼统,无法帮助投资者做出决策。', 'solutions': '针对每项风险提供具体应对策略,增加实用性。'}, {'step': 8, 'action': '总结并提出投资建议', 'output': '给出明确的投资评级和估值区间,如“优于大市”及合理股价范围。', 'completion_criteria': '投资建议基于充分论证,估值方法科学严谨。', 'common_issues': '建议与分析脱节,缺乏连贯性。', 'solutions': '确保建议直接来源于前文分析,保持一致性。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 10:33:12", "modified_time": "2025-08-14 10:33:12", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "86459a9f1f6846a58fea55ac51b02901", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及涉及多维度数据整合和预测的金融报告制作场景,尤其适合需要结合定量与定性分析、历史与未来趋势预测,并对市场机会与风险进行综合评估的任务。", "content": "[{'step': 1, 'action': '明确核心目标与投资要点', 'output': '提炼出报告的核心结论,形成清晰的投资建议或关键信息(如:共聚焦显微镜国产替代加速,激光雷达放量在即)。', 'how_to_judge_completion': '核心目标是否能够用简洁的语言表达,且能直接服务于后续分析;投资要点是否覆盖了公司业务的关键增长点。', 'common_issues': '容易陷入细节而忽略整体逻辑,导致核心信息不突出。', 'solutions': '先列出所有可能的重点,再通过优先级筛选出最具投资价值的信息。'}, {'step': 2, 'action': '组织章节结构并分配信息权重', 'output': '设计报告的章节结构,确保从背景到结论层层递进(如:从行业概况→公司业务表现→财务数据→估值分析→风险提示)。', 'how_to_judge_completion': '章节安排是否符合逻辑顺序,信息展示是否按照重要性优先排列,核心结论是否贯穿始终。', 'common_issues': '章节内容重复或逻辑断裂,导致阅读体验不佳。', 'solutions': '使用思维导图工具提前规划各章节重点,确保每部分有明确的目标和独立贡献。'}, {'step': 3, 'action': '收集并整理定量与定性数据', 'output': '整合行业统计数据、公司财务报表、市场趋势预测等定量数据,同时加入政策支持、技术优势等定性分析。', 'how_to_judge_completion': '数据是否全面准确,是否能有效支撑核心观点;定性分析是否提供了独特的视角或洞见。', 'common_issues': '数据来源单一或缺乏权威性,导致分析可信度不足。', 'solutions': '优先选择权威机构发布的公开数据,并注明数据来源以增强可信度。'}, {'step': 4, 'action': '建立论证逻辑,逐步推导结论', 'output': '通过分层递进的方式,将宏观环境、行业趋势、公司竞争力与财务数据有机结合,最终得出投资评级。', 'how_to_judge_completion': '论证路径是否清晰,每一层次是否为下一层次提供充分依据;结论是否基于扎实的数据和逻辑推导。', 'common_issues': '论证过程跳跃性强,缺乏连贯性,使读者难以理解。', 'solutions': '采用“总-分-总”结构,每一步都回扣主题,确保逻辑链条完整。'}, {'step': 5, 'action': '平衡历史与预测信息,处理不确定性', 'output': '结合历史数据与未来预测,合理分布篇幅,同时针对不确定性和多种可能性提出假设情景。', 'how_to_judge_completion': '历史数据与预测数据的比例是否适中,是否对潜在风险进行了充分讨论但不过度悲观。', 'common_issues': '过度依赖历史数据忽视未来变化,或对未来过于乐观忽略风险。', 'solutions': '引入敏感性分析或多情景模拟,为不同可能性提供量化参考。'}, {'step': 6, 'action': '总结与行动建议', 'output': '提炼出具体的投资建议(如买入/增持/减持),并对风险因素进行全面提示。', 'how_to_judge_completion': '是否给出了明确的操作指引,风险提示是否覆盖了主要潜在问题。', 'common_issues': '建议模糊不清,风险提示流于形式。', 'solutions': '用表格或图表直观呈现关键决策指标(如PE、PB、ROE等),并附上详细的风险应对策略。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 10:34:39", "modified_time": "2025-08-14 10:34:39", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "ff06c592f8f04bcd81a7e2c501f6cd8a", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析以及公司估值报告等任务,尤其是针对具有明确资源禀赋和成长潜力的上市公司进行系统性分析时使用。该框架对于需要整合定量与定性数据、评估长期增长潜力及风险因素的金融任务尤为适用。", "content": "[{'step': 'Step 1: 明确分析目标和核心逻辑', 'action': '确定分析的核心目标(如:评估公司投资价值),并基于公司业务模式和市场环境形成初步假设。例如,本案例中明确了九华旅游依托稀缺景区资源并通过新增项目扩容实现增长的核心逻辑。', 'output': '形成清晰的研究目标和初步假设,列出关键驱动因素(如客流增长、交通改善、新项目建设等)。', 'criteria_for_success': '目标具体且可验证,假设合理并能涵盖主要驱动力,无遗漏重要变量。', 'common_issues_and_solutions': [{'issue': '假设过于宽泛或缺乏数据支持', 'solution': '通过早期文献调研或行业数据验证假设合理性,并逐步细化假设范围。'}]}, {'step': 'Step 2: 组织章节结构以突出重点', 'action': '设计报告结构,确保信息按优先级展示。首先介绍公司概况和业务模式,然后展开市场需求和趋势分析,接着聚焦公司资源稀缺性和未来扩展计划,最后进行财务预测和估值。', 'output': '完整的章节大纲,包括公司背景、行业趋势、核心资源、新增项目、财务分析和投资建议。', 'criteria_for_success': '章节顺序符合逻辑递进关系,从基础信息到核心结论层层推进,信息分布均衡且重点突出。', 'common_issues_and_solutions': [{'issue': '章节间逻辑不连贯或内容重复', 'solution': '在撰写前绘制思维导图,明确每部分的功能定位,避免交叉重叠。'}]}, {'step': 'Step 3: 收集和整理定量与定性数据', 'action': '收集历史财务数据、行业统计数据、政策文件及管理层访谈资料;同时结合定性分析(如寺庙游客年轻化趋势)。将数据分类为历史表现、当前状态和未来预测三大类。', 'output': '包含历史经营数据、行业趋势图表、政策影响分析的数据集合。', 'criteria_for_success': '数据来源可靠且覆盖全面,历史/当前/预测数据比例合理,能够支撑后续论证。', 'common_issues_and_solutions': [{'issue': '数据不足或无法直接获取', 'solution': '通过公开财报、第三方数据库补充,或采用近似替代指标估算。'}]}, {'step': 'Step 4: 构建核心观点并分层论证', 'action': '围绕核心投资逻辑构建观点,例如‘九华山景区资源稀缺+交通改善+新增项目’共同推动业绩增长。使用多维度证据(如客流增速、毛利率提升、项目IRR测算)逐层验证。', 'output': '一系列经过验证的核心观点及其支撑材料,包括文字描述、表格和图表。', 'criteria_for_success': '论证路径清晰,各论据之间逻辑严密,所有观点均被充分证明。', 'common_issues_and_solutions': [{'issue': '论据不够充分或存在偏差', 'solution': '引入更多独立数据源验证,增加敏感性分析以应对不确定性。'}]}, {'step': 'Step 5: 处理不确定性和多种可能性', 'action': '识别潜在风险(如游客增速放缓、新项目延迟),并提出应对策略。通过情景分析(乐观/中性/悲观)量化不同情况下的影响。', 'output': '风险提示列表及对应的情景分析结果,例如不同客流增速下的收入预测区间。', 'criteria_for_success': '风险因素考虑全面,情景设定合理且计算准确,能够有效指导决策。', 'common_issues_and_solutions': [{'issue': '忽视极端情况或低估风险概率', 'solution': '参考行业历史波动率设定更保守的情景参数,增强模型鲁棒性。'}]}, {'step': 'Step 6: 提供投资建议和估值结论', 'action': '基于上述分析得出最终的投资评级和目标价。选择合适的估值方法(如PE、DCF),并与同行进行比较,确保估值水平具有市场参照意义。', 'output': '投资建议(如买入/持有/卖出)及详细估值过程,包括关键输入参数和计算结果。', 'criteria_for_success': '建议明确且依据充分,估值方法科学合理,与市场共识一致。', 'common_issues_and_solutions': [{'issue': '估值偏离市场预期过高或过低', 'solution': '重新审视输入参数合理性,并调整至贴近实际交易水平。'}]}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 10:36:26", "modified_time": "2025-08-14 10:36:26", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "193f570db5d349be910582d6291c321d", "experience_type": "text", "when_to_use": "此规划框架适用于行业深度研究、投资标的分析和风险评估报告等任务,尤其在需要对特定公司或行业进行财务预测、竞争力分析以及潜在风险评估时非常适用。该框架能够帮助分析师系统性地组织信息、建立逻辑清晰的论证路径,并有效处理不确定性因素。", "content": "[{'step': 1, 'action': '明确研究目标与核心问题', 'output': '确定分析的核心主题(如永兴股份的盈利潜力)及关键问题(如产能利用率提升的可能性及其影响)。', 'how_to_check': '检查是否清晰定义了分析范围和重点,例如是否明确了公司业务模式、市场地位、财务表现等主要维度。', 'common_issues': ['研究目标过于宽泛或模糊', '忽略行业背景对研究对象的影响'], 'solutions': ['通过初步资料收集聚焦核心问题', '结合行业趋势和公司特点设定具体研究方向']}, {'step': 2, 'action': '构建结构化章节框架,按逻辑顺序安排内容', 'output': '设计包含背景介绍、财务状况、运营效率、增长驱动因素、风险提示等内容的章节布局。', 'how_to_check': '确保每个章节服务于整体论证逻辑,且各部分之间过渡自然,例如从公司概况到财务数据再到未来展望。', 'common_issues': ['章节安排杂乱无章', '缺乏优先级导致重要信息被弱化'], 'solutions': ['采用‘总-分-总’结构,先概述后深入细节', '根据信息重要性和逻辑关系调整章节顺序']}, {'step': 3, 'action': '整理并展示定量与定性信息,平衡历史数据与预测', 'output': '整合财务报表、运营指标等定量数据,同时辅以政策支持、技术优势等定性描述;合理分布历史回顾与未来预测。', 'how_to_check': '验证是否有充分的数据支撑结论,同时注意定性分析是否补充了定量结果未覆盖的领域。', 'common_issues': ['过度依赖单一类型信息', '忽视历史数据与预测之间的联系'], 'solutions': ['交叉验证不同来源的数据', '利用图表直观呈现数据变化趋势']}, {'step': 4, 'action': '建立层层递进的论证路径,突出核心观点', 'output': '从宏观环境到微观主体,逐步推导出公司的竞争优势和潜在风险,最终得出投资评级建议。', 'how_to_check': '确认每一步推理都基于前一步的基础,且核心观点得到多角度验证。', 'common_issues': ['论证跳跃性强,缺乏连贯性', '核心观点不突出'], 'solutions': ['使用因果链连接各论点', '用加粗标题或总结段强调核心发现']}, {'step': 5, 'action': '适时提出风险因素并量化其影响', 'output': '在适当位置(如盈利预测之后)讨论可能的风险(如应收账款回收风险),并通过敏感性分析量化其潜在影响。', 'how_to_check': '确保风险提及及时且全面,同时附有相应的缓解措施或情景假设。', 'common_issues': ['风险披露滞后或遗漏', '缺乏具体数据支持风险评估'], 'solutions': ['提前识别关键风险点', '引入弹性测算模型模拟极端情况']}, {'step': 6, 'action': '处理不确定性和多种可能性,提供情景分析', 'output': '针对不确定因素(如陈腐垃圾掺烧进度),设计乐观、中性和悲观三种情景下的财务预测。', 'how_to_check': '判断是否涵盖所有主要变量的波动范围,且情景假设合理。', 'common_issues': ['忽略次要但重要的变量', '情景分类过于简单或复杂'], 'solutions': ['参考行业惯例设定情景边界', '邀请同行评审提高假设合理性']}, {'step': 7, 'action': '撰写结论与投资建议,提炼行动指引', 'output': '综合前述分析,给出明确的投资评级(如“买入”),并简要说明理由。', 'how_to_check': '确保结论简洁明了,且与前面的分析一致。', 'common_issues': ['结论与分析脱节', '缺乏实际操作指导意义'], 'solutions': ['回溯全文核对一致性', '增加投资者可执行的具体策略']}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 10:37:41", "modified_time": "2025-08-14 10:37:41", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "3fcf904528f4492d99104a1864485ea3", "experience_type": "text", "when_to_use": "此规划框架适用于对上市公司进行深度财务和业务分析的任务,尤其是针对半年度或年度财报发布后的快速解读(如Flash Analysis)。分析内容需涵盖定量数据、定性评估、市场动态和未来展望,并需要向投资者提供明确的投资建议。此外,该框架也适用于行业研究、投资标的筛选以及风险评估报告等场景。", "content": "[{'step': 1, 'action': '明确分析目标与核心问题', 'output': '确定本次分析的目标公司(如中宠股份)及其关键事件(如2025年半年报发布),并列出需要回答的核心问题(如收入增长驱动因素、盈利能力变化原因、未来指引调整逻辑等)。', 'how_to_judge_completion': '是否清晰定义了分析范围及核心问题清单?是否确保覆盖所有重要维度(财务表现、业务结构、市场动态、风险提示)?', 'common_problems': ['问题过于宽泛,缺乏聚焦点。', '忽略某些关键领域,例如海外业务或品牌战略。'], 'solutions': ['通过团队讨论细化问题清单。', '参考历史案例,确保不遗漏常见分析模块。']}, {'step': 2, 'action': '收集并整理基础数据', 'output': '汇总目标公司的公开财务数据(如收入、净利润、毛利率等)、管理层指引、行业对比基准以及宏观环境信息(如汇率波动、贸易政策)。', 'how_to_judge_completion': '是否完整获取了所有相关数据?数据来源是否可靠且经过交叉验证?', 'common_problems': ['数据缺失或存在错误。', '未考虑非财务指标(如市场份额、客户反馈)。'], 'solutions': ['建立标准化数据模板以提高效率。', '引入第三方数据库补充信息盲区。']}, {'step': 3, 'action': '拆解财务与运营数据,识别趋势与异常', 'output': '将总收入、利润、成本结构等按区域、产品线和时间周期分解,计算同比/环比变化率,标注显著变动项(如国内毛利率下降、海外工厂高增)。', 'how_to_judge_completion': '是否准确识别出主要驱动因素和异常值?是否能够解释这些变化背后的原因?', 'common_problems': ['仅停留在表面数字,缺乏深入洞察。', '未能区分短期波动与长期趋势。'], 'solutions': ['结合定性信息(如管理层评论)解读数据。', '使用图表直观展示趋势和对比关系。']}, {'step': 4, 'action': '构建逻辑论证链条,支持观点形成', 'output': '基于数据发现,逐步推导出关于公司当前状况和未来前景的结论(如“海外工厂拉动利润率提升”、“国内市场面临激烈竞争”),并通过多角度证据支撑每一条论点。', 'how_to_judge_completion': '每个观点是否有充分的数据和事实依据?论证路径是否连贯且无逻辑漏洞?', 'common_problems': ['论证过程跳跃性强,缺乏中间步骤。', '忽略反面证据,导致偏颇结论。'], 'solutions': ['采用MECE原则组织论证层次。', '主动寻找潜在反驳意见并回应。']}, {'step': 5, 'action': '平衡定量与定性信息,突出核心结论', 'output': '设计章节结构,优先呈现核心结论(如“归母净利润符合预期”),随后展开详细分析;在不同部分合理分配定量(如财务指标)与定性(如品牌推广策略)内容。', 'how_to_judge_completion': '是否让读者快速抓住重点?各部分内容是否协调一致,避免冗余或失衡?', 'common_problems': ['过度堆砌数据,导致信息过载。', '忽视定性分析的重要性,影响整体说服力。'], 'solutions': ['遵循‘倒金字塔’原则安排内容顺序。', '为复杂概念添加简明注释或总结段落。']}, {'step': 6, 'action': '嵌入风险提示与不确定性分析', 'output': '在适当位置(如分析末尾或特定章节后)提出可能的风险因素(如市场竞争加剧、汇率波动),并说明其潜在影响及应对措施。', 'how_to_judge_completion': '风险提示是否全面且及时?是否避免夸大或淡化风险?', 'common_problems': ['风险描述过于笼统,缺乏针对性。', '风险提示位置不当,削弱整体流畅性。'], 'solutions': ['根据具体情境定制风险清单。', '将风险提示融入相关主题而非单独罗列。']}, {'step': 7, 'action': '撰写最终报告,优化语言与格式', 'output': '完成研究报告初稿,包括标题页、目录、正文、附录等部分,确保语言简洁专业,图表美观易懂,排版统一规范。', 'how_to_judge_completion': '报告是否满足专业标准?是否便于目标受众理解与使用?', 'common_problems': ['语言表达晦涩难懂。', '图表设计混乱,无法有效传递信息。'], 'solutions': ['邀请同行审阅并提供反馈。', '利用可视化工具提升图表质量。']}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 10:39:16", "modified_time": "2025-08-14 10:39:16", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "e6830c5f6f8946fe90c87753cc1bdde4", "experience_type": "text", "when_to_use": "适用于行业深度研究、投资标的分析、企业价值评估等需要综合定性与定量分析的任务。", "content": "[{'step': 1, 'action': '明确核心目标与结论', 'output': '提炼出一条简洁的核心结论(如投资评级或主要发现)。', 'criteria_for_completion': '核心结论应直接反映分析目的,且能在后续章节得到充分支持。', 'common_issues_and_solutions': [{'issue': '结论模糊或偏离主题', 'solution': '重新审视原始数据和客户需求,确保结论聚焦且具有实际意义。'}]}, {'step': 2, 'action': '收集并整理基础数据', 'output': '包括公司财务数据、市场表现、行业趋势等,形成初步数据集。', 'criteria_for_completion': '数据来源可靠(如Wind、公司财报),覆盖全面且无重大遗漏。', 'common_issues_and_solutions': [{'issue': '数据不完整或不可靠', 'solution': '交叉验证多个数据源,标注不确定性较高的数据点。'}]}, {'step': 3, 'action': '构建分析框架', 'output': '设计章节结构,明确各部分功能(如背景介绍、数据分析、风险提示)。', 'criteria_for_completion': '框架逻辑清晰,符合‘从宏观到微观、从定性到定量’的原则。', 'common_issues_and_solutions': [{'issue': '框架过于松散或冗长', 'solution': '删除非必要章节,确保每部分都服务于核心结论。'}]}, {'step': 4, 'action': '撰写主体内容', 'output': '按照框架填充具体内容,包括定性分析、定量数据和图表。', 'criteria_for_completion': '内容详实,逻辑连贯,图表与文字相互补充。', 'common_issues_and_solutions': [{'issue': '内容单调或难以理解', 'solution': '增加案例分析或类比说明,使抽象概念更易接受。'}]}, {'step': 5, 'action': '加入风险提示与敏感性分析', 'output': '列出可能影响结论的关键风险因素,并进行多情景预测。', 'criteria_for_completion': '风险提示全面且客观,敏感性分析合理。', 'common_issues_and_solutions': [{'issue': '忽视重要风险', 'solution': '参考同行报告或咨询专家,补充遗漏的风险点。'}]}, {'step': 6, 'action': '校对与优化格式', 'output': '检查语言表达、数据准确性及排版美观度。', 'criteria_for_completion': '报告无明显错误,格式统一且易于阅读。', 'common_issues_and_solutions': [{'issue': '格式混乱或错别字较多', 'solution': '使用专业校对工具(如Grammarly),并邀请同事审阅。'}]}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 10:41:08", "modified_time": "2025-08-14 10:41:08", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "310246349295409e896616a097ac905c", "experience_type": "text", "when_to_use": "该规划框架适用于行业深度研究、投资标的分析以及公司业绩评估等金融分析任务。尤其适合需要结合定量与定性数据,综合评估公司财务表现、产品竞争力及未来增长潜力的场景。", "content": "[{'step': 1, 'action': '明确报告目标和受众', 'output': '确定核心问题(如公司业绩超预期的原因、未来增长逻辑)和适用的投资评级(如买入、增持等),并确保内容符合专业投资者的需求。', 'completion_criteria': '目标清晰且可量化,例如:明确指出报告旨在为投资者提供买入建议,并附带具体的目标价或估值区间。', 'common_issues': ['目标模糊或过于宽泛', '忽略特定受众需求'], 'solutions': ['在开头明确列出报告的核心目标和适用人群', '通过调研了解目标受众的关注点']}, {'step': 2, 'action': '收集并整理基础数据', 'output': '整理公司财务数据(如营收、净利润、毛利率等)、市场表现(如股价走势、市值变化)以及关键业务指标(如产品销量、渠道覆盖等)。', 'completion_criteria': '数据全面且来源可靠,涵盖过去3-5年的历史数据和未来2-3年的预测数据。', 'common_issues': ['数据不完整或缺乏时间序列对比', '数据来源不可靠'], 'solutions': ['优先使用权威数据库或公司财报', '补充第三方行业报告以验证数据']}, {'step': 3, 'action': '构建章节结构并分配信息优先级', 'output': '按照“结论先行—数据支撑—风险提示”的逻辑安排章节,将核心结论(如业绩超预期、盈利预测上调)放在开头,随后用定量与定性数据逐一支撑。', 'completion_criteria': '章节结构清晰,信息分布合理,核心结论在前两页内突出呈现。', 'common_issues': ['信息堆砌无序', '次要信息抢占篇幅'], 'solutions': ['采用金字塔原理组织内容', '限制次要信息篇幅,优先展示高影响因素']}, {'step': 4, 'action': '进行逐层递进的论证', 'output': '从宏观到微观逐步展开分析,先讨论整体市场环境或行业趋势,再聚焦于公司具体业务表现(如两轮车、割草机器人等),最后深入探讨财务指标和盈利能力。', 'completion_criteria': '每一步推导逻辑清晰,能够从前一步自然过渡到下一步,避免跳跃式推理。', 'common_issues': ['论证逻辑断裂', '忽视因果关系'], 'solutions': ['使用图表辅助说明关键逻辑链', '对每个推论提供至少一个数据支持']}, {'step': 5, 'action': '平衡定量与定性信息', 'output': '结合定量数据(如财务报表、市场份额)和定性分析(如管理层战略、产品竞争力),并通过可视化工具(如折线图、柱状图)增强理解。', 'completion_criteria': '定量与定性信息比例恰当,既不过分依赖单一维度,也不遗漏重要视角。', 'common_issues': ['定量数据过多导致枯燥', '定性分析缺乏依据'], 'solutions': ['设计简洁美观的图表', '引用专家访谈或行业案例作为定性补充']}, {'step': 6, 'action': '提出风险因素并评估不确定性', 'output': '识别可能影响公司未来发展的风险(如市场竞争加剧、新品销售不及预期),并给出应对策略或情景假设。', 'completion_criteria': '风险提示全面但不过度悲观,同时包含潜在机会的讨论。', 'common_issues': ['忽略重大风险', '风险描述空洞无物'], 'solutions': ['参考同行分析和行业动态提炼风险点', '结合敏感性分析量化风险影响']}, {'step': 7, 'action': '总结核心观点并重申投资建议', 'output': '汇总所有分析结果,再次强调核心结论(如“买入”评级),并简要回顾支撑理由。', 'completion_criteria': '总结部分言简意赅,不超过1页,且与开头呼应。', 'common_issues': ['总结冗长或偏离主题', '未回应开头承诺'], 'solutions': ['提炼关键词句形成记忆点', '检查开头与结尾的一致性']}, {'step': 8, 'action': '校验报告质量并优化表达', 'output': '检查报告语言是否专业准确,图表是否规范易读,格式是否统一协调。', 'completion_criteria': '报告无明显错误,阅读流畅,视觉效果良好。', 'common_issues': ['语法错误或术语误用', '排版混乱'], 'solutions': ['邀请同事交叉审阅', '使用模板保持格式一致性']}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 10:42:30", "modified_time": "2025-08-14 10:42:30", "extra_info": null}} -{"workspace_id": "finance_plan_test", "experience_id": "c90f1c049ad7450d8b0e860387bed667", "experience_type": "text", "when_to_use": "此规划框架适用于对上市公司进行深度财务与业务分析的任务,例如行业深度研究、投资标的分析、季度/年度财报点评以及风险评估报告。特别适合需要结合定量和定性信息,对公司的短期表现与长期潜力进行全面评估的场景。", "content": "[{'step': 1, 'action': '明确目标与核心问题', 'output': '确定分析的核心目的是为投资者提供决策支持(如维持买入评级),并锁定关键问题(如Q2盈利下滑原因及未来恢复潜力)。', 'criteria_for_success': '核心问题清晰且与投资决策直接相关,能够指导后续章节安排。', 'common_issues': '问题过于宽泛或偏离投资者关注点。', 'solution': '通过与客户沟通或参考市场热点,聚焦于影响公司价值的关键驱动因素。'}, {'step': 2, 'action': '组织章节结构以突出优先级', 'output': '采用‘总-分-总’结构:开头简要总结业绩表现,中间分模块详细分析业务、财务、风险等内容,结尾给出明确的投资建议。', 'criteria_for_success': '章节逻辑清晰,优先展示核心结论和高影响力信息(如Q2业绩与下半年展望),次要信息(如历史数据对比)作为补充。', 'common_issues': '章节顺序混乱,导致读者难以快速抓住重点。', 'solution': '遵循‘从结果到原因再到展望’的递进逻辑,确保每个部分紧密衔接。'}, {'step': 3, 'action': '定量与定性信息平衡分布', 'output': '将定量数据(如营收、净利润、单吨盈利)与定性分析(如新业务进展、政策影响)有机结合,形成互为支撑的论证链条。', 'criteria_for_success': '定量数据准确且具有代表性,定性分析能解释数据背后的驱动因素,并预测未来趋势。', 'common_issues': '过度依赖单一类型信息,缺乏全面视角。', 'solution': '在每项分析中同时引入定量证据和定性解读,例如用销量数据说明市场变化,再结合关税政策讨论其影响。'}, {'step': 4, 'action': '构建层层递进的论证路径', 'output': '从短期表现入手,逐步深入至长期战略布局;先描述现状,再剖析原因,最后提出解决方案或预期改善路径。', 'criteria_for_success': '观点之间环环相扣,没有跳跃式推论,最终得出令人信服的结论。', 'common_issues': '论证过程松散,无法有效支撑最终结论。', 'solution': '使用因果关系图梳理各变量间的联系,确保每一步推理都基于前一步的结果。'}, {'step': 5, 'action': '适时揭示风险因素并提供应对策略', 'output': '在分析过程中自然嵌入潜在风险(如产能释放不及预期),并通过正面展望(如韩国工厂投产)缓解担忧。', 'criteria_for_success': '风险提示具体且有依据,同时提供合理的应对措施,避免引发不必要的恐慌情绪。', 'common_issues': '风险披露滞后或过于笼统,削弱报告可信度。', 'solution': '在每一主要发现后立即提及相关风险,并辅以积极的管理举措或缓冲机制。'}, {'step': 6, 'action': '处理不确定性和多种可能性', 'output': '采用情景化假设(如不同关税政策下的销售预测)来覆盖多种可能性,并强调最可能的情景及其支撑理由。', 'criteria_for_success': '不确定性被充分披露,但整体基调保持稳健,不会因过多负面假设而动摇投资者信心。', 'common_issues': '忽视极端情况或低估其发生的概率。', 'solution': '列出所有合理假设并赋予相应权重,同时强调管理层的经验和资源储备以增强抗风险能力。'}, {'step': 7, 'action': '整合信息形成综合判断', 'output': '基于前述分析,更新盈利预测模型,调整估值倍数,并给出明确的投资评级(如维持买入)。', 'criteria_for_success': '结论与分析内容高度一致,且包含具体量化指标(如PE倍数、目标价)。', 'common_issues': '结论与分析脱节,缺乏实际操作指导意义。', 'solution': '逐一核对分析中的关键发现是否反映在最终结论中,必要时重新校准预测参数。'}]", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-14 10:43:50", "modified_time": "2025-08-14 10:43:50", "extra_info": null}} diff --git a/docs/library/research_tips.jsonl b/docs/library/research_tips.jsonl deleted file mode 100644 index 0e548abf..00000000 --- a/docs/library/research_tips.jsonl +++ /dev/null @@ -1,1392 +0,0 @@ -{"workspace_id": "finance_step_test", "experience_id": "3bb813d7a1534592b96b8eaa037ae88b", "experience_type": "text", "when_to_use": "在评估股票市场短期趋势时,特别是在低波动性牛市或复苏初期,当市场情绪从悲观转向乐观的阶段。", "content": "利用技术分析结合政策导向和宏观经济数据(如财政支出方向、政治局会议定调)综合判断市场情绪变化。例如,在A股市场中,关注政策向居民端倾斜的信号(如生育补贴政策)以及技术面上关键支撑位的表现(如上证指数3420点)。同时,结合成交量变化确认市场情绪的转向,建议多头思维对待,逢低做多。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:05:51", "modified_time": "2025-08-11 20:05:51", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a9cb76d619d94abb8d3d795848f2bd54", "experience_type": "text", "when_to_use": "在全球经济不确定性增加或非农数据大幅下修导致市场避险情绪上升的情况下,特别是在美股市场短期调整但中长期基本面依然稳健的场景中。", "content": "通过分析美国例外论逻辑(如关税收入增长和居民资产负债表健康状况)来评估美股相对于非美市场的表现潜力。在短期技术面呈现空头发散形态时,需警惕回调风险,但从中长期视角看,投机情绪回归可能推动指数挑战新高。建议投资者在短期调整中保持耐心,并关注贸易战结果对市场结构的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:05:51", "modified_time": "2025-08-11 20:05:51", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "83a75d95f0d24a319eeebf347734d608", "experience_type": "text", "when_to_use": "在外汇市场中,当美元指数因意外经济数据波动而出现短期大跌,但美国货币政策空间充足且基本面强劲时。", "content": "战略性看多美元,避免单纯基于短期数据波动进行反向操作。例如,尽管非农数据超预期下调引发美元指数大跌,但考虑到美国经济的基本面优势及货币政策灵活性,应将做多美元纳入投资视野。此外,离岸人民币兑美元突破下跌趋势时,需结合国际贸易谈判进展和汇率政策动态调整策略。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:05:51", "modified_time": "2025-08-11 20:05:51", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e02e29ea5f324945b3319937c2de231c", "experience_type": "text", "when_to_use": "在商品市场中,当国内定价商品受到政策支持(如反内卷政策),且行情处于关键支撑位附近时。", "content": "以文华商品指数为例,当价格回踩颈线后企稳回升,表明支撑有效。建议以起涨点(如7月10日低点)为基准,采取逢低做多策略。同时,密切跟踪政策定调是否发生改变,若无重大利空,则可延续多头思路。该方法适用于国内定价商品的中期战术操作。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:05:51", "modified_time": "2025-08-11 20:05:51", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8db21f2d9d1f4f21aaeb16314a3ad775", "experience_type": "text", "when_to_use": "在债券市场中,当股债跷跷板效应显著,且股市呈现企稳走高趋势时。", "content": "根据股债跷跷板效应,预计股市突破将带动债市震荡下跌后进入高位震荡。此时应关注利率债的技术面走势,例如国债期货的价格变化与买卖价差。建议投资者降低久期敞口,逐步减少债券配置,转而布局权益类资产以捕捉股市上涨机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:05:51", "modified_time": "2025-08-11 20:05:51", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "03d2b068e0af4d049fdc87a11af5ff02", "experience_type": "text", "when_to_use": "在市场整体上行且行业板块集体上涨时,评估市场情绪和资金流向以判断短期趋势", "content": "当市场处于牛市或阶段性反弹行情中(如沪指突破关键点位),应重点关注申万一级行业的资金净流入情况及领涨板块的驱动因素。结合市场成交量、涨停家数等指标分析市场情绪,并通过主力资金流向验证强势板块的持续性。例如,在2025年8月5日的市场中,综合、银行、钢铁等传统行业领涨,表明资金可能从成长股转向防御性和周期性板块。此类分析适用于日内交易或短期战术操作,帮助投资者抓住市场轮动机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:07:03", "modified_time": "2025-08-11 20:07:03", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ecd5ffb8adc84486aaedf73c44a5d592", "experience_type": "text", "when_to_use": "在宏观经济政策或国际贸易动态可能影响市场时,评估外部事件对资产价格的潜在冲击", "content": "当国际市场出现重大政策变化(如欧盟暂停对美关税反制措施)或国内经济刺激政策(如消费贷、经营贷贴息政策)出台时,需快速分析其对市场的直接和间接影响。重点关注政策实施的时间表、覆盖范围及其对相关行业的传导路径。例如,欧盟与美国的关税协议可能削弱欧洲市场的吸引力,利好美元资产;而国内贴息政策则可能推动消费和服务板块的估值修复。此类分析适用于中期组合调整和风险评估场景。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:07:03", "modified_time": "2025-08-11 20:07:03", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1d6bcfac5cf44ba49e37367445d4f6d1", "experience_type": "text", "when_to_use": "在构建投资组合时,根据行业评级和市场表现筛选具有超额收益潜力的标的", "content": "利用行业评级框架(如‘看好’、‘中性’、‘看淡’)结合市场表现数据,识别未来6-12个月内可能跑赢基准指数的行业。例如,在申万一级行业中,若某一行业连续多日主力资金净流入且涨幅居前,则可将其视为短期强势行业。同时,结合分析师报告中的定性与定量分析,评估行业基本面改善的可能性。这种方法特别适合长期战略规划和股票池筛选,为投资组合提供超额收益来源。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:07:03", "modified_time": "2025-08-11 20:07:03", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "47269fae1b1e4c28b0aa3ba2c0d67f51", "experience_type": "text", "when_to_use": "在市场波动率较低但量能回暖的情况下,寻找低风险套利机会或进行仓位管理优化", "content": "当市场波动率下降但成交额回升时(如2025年8月5日两市成交额接近1.6万亿),表明市场参与者信心增强,但趋势尚未明确。此时可通过观察个股涨跌分布、涨停跌停比等指标,寻找低估值板块或高流动性个股的短期交易机会。此外,可根据市场强弱指标(如上涨家数占比)调整仓位配置,优先布局资金流入明显的防御性或周期性板块。这种策略适用于发达市场的横盘整理阶段或新兴市场的低波动期。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:07:03", "modified_time": "2025-08-11 20:07:03", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "eddeb6f9cfba4aa3a5ef23693aaa1c7e", "experience_type": "text", "when_to_use": "在分析新兴市场中创新型中小企业板块(如北交所)的估值水平时,尤其是在市场波动较大或政策变化频繁的背景下。", "content": "通过对比行业市盈率中位数与整体指数估值分位数,识别高估值及低估值行业。例如,本月北交所计算机、建筑材料和通信行业的市盈率显著高于其他行业,分别为125倍、107倍和105倍。这表明投资者对特定行业的成长性预期较高,而传统行业估值偏低可能反映市场对其增长潜力的保守态度。建议结合行业政策导向、技术壁垒及市场需求进行进一步验证,并关注高估值行业的潜在回调风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:08:41", "modified_time": "2025-08-11 20:08:41", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "00d9c0a008624f9d8bf93ea45b45ad78", "experience_type": "text", "when_to_use": "在评估融资融券余额的变化趋势以判断市场杠杆资金参与度时,特别是在市场流动性改善或恶化的情况下。", "content": "北交所7月两融余额创历史新高,日均值达到60.45亿元,环比上升9.51%,且全月有9个交易日余额超过60亿元。这一数据表明杠杆资金的参与意愿增强,市场活跃度提升。然而,需警惕高杠杆可能带来的市场波动风险,尤其是在市场情绪转向或外部环境不确定时。建议结合个股交易量、换手率等指标,进一步分析资金流入的具体驱动因素。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:08:41", "modified_time": "2025-08-11 20:08:41", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "bf61a00882044511adf1732cc4b3449c", "experience_type": "text", "when_to_use": "在制定针对专精特新企业的投资策略时,尤其是当企业财务表现出现非线性波动或快速扩张的情况。", "content": "从鼎佳精密、基康技术和恒立钻具等公司的财务数据来看,研发费用占营业收入比例普遍较高(4%-8%),且净利润增速呈现波动但整体向上的趋势。例如,鼎佳精密2025年Q1净利润同比增长率达63.27%,研发费用占比为4.76%。这表明专精特新企业通常具有较高的研发投入和较强的业绩弹性,但也面临较大的盈利波动风险。建议优先选择研发能力强、现金流稳健且与国家战略方向契合的企业,同时关注其客户结构和市场份额。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:08:41", "modified_time": "2025-08-11 20:08:41", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "099aae5aa9c1467389a877dee0782da2", "experience_type": "text", "when_to_use": "在评估市场信息披露监管力度对投资者信心的影响时,特别是当市场处于扩容阶段或存在重大违规事件频发的背景下。", "content": "北交所7月针对信息披露违规、程序化交易风险防控及中介责任压实出台了一系列监管措施,如对骑士乳业、美登科技和数字人的处罚案例,以及《程序化交易管理实施细则》的落地。这些措施旨在强化信息披露及时性和准确性,修复市场信息环境。经验表明,此类监管组合拳短期内可能引发市场波动,但长期有助于提升投资者信心和市场透明度。建议关注受监管影响较小的优质标的,并适时布局因监管改善而受益的企业。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:08:41", "modified_time": "2025-08-11 20:08:41", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3c262f74bf2c489e9325b92bf5b66dab", "experience_type": "text", "when_to_use": "在观察市场资金流向和机构配置行为变化时,特别是在公募基金持仓规模和结构发生显著调整的阶段。", "content": "2025年Q2,北交所公募基金重仓市值环比激增56%至98.92亿元,主动权益公募配置系数创新高达0.66。这表明机构投资者对北交所市场的关注度和认可度显著提升,尤其偏好中小盘指数增强及红利指数产品。建议跟踪机构资金动向,优先选择被新增持仓覆盖的优质企业,同时关注北证50指数成分股中的龙头企业,因其更易获得增量资金支持。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:08:41", "modified_time": "2025-08-11 20:08:41", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c8c81672301b44cb87f3ccd3d341f3dd", "experience_type": "text", "when_to_use": "在评估特定市场(如北交所)的行业轮动和个股表现时,尤其是在牛市或高波动环境中,用于识别短期投资机会。", "content": "通过对比不同行业的涨跌幅及个股表现,优先关注涨幅领先的行业和个股。例如,国防军工、机械设备等行业在市场情绪积极时表现出色。同时,结合换手率和成交额数据,筛选出交易活跃且基本面良好的标的,如星辰科技和通易航天。此外,需注意高估值行业的潜在回调风险,例如电子和计算机行业。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:10:06", "modified_time": "2025-08-11 20:10:06", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c5ae2f5d730d4db992c7f8b682c9d572", "experience_type": "text", "when_to_use": "在进行跨市场估值比较分析时,特别是在发达市场与新兴市场之间,用于判断资产是否被高估或低估。", "content": "将目标市场的整体市盈率与基准指数(如北证50、沪深300)以及同类市场(如科创板、创业板)进行对比。例如,北交所整体市盈率为51.20倍,高于创业板但低于科创板,表明其估值水平处于中间位置。针对高估值行业(如电子、计算机),应进一步分析其成长性和盈利能力,以验证估值合理性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:10:06", "modified_time": "2025-08-11 20:10:06", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8374af79052e4e7795d42e52cbcc3c41", "experience_type": "text", "when_to_use": "在制定中期组合调整策略时,特别是在市场横盘或低波动环境下,用于优化资产配置并降低组合风险。", "content": "根据市场成交量和换手率的变化趋势判断市场活跃度。如果日成交额显著低于近期均值(如北交所今日成交额较上周日均下降20%以上),则可能预示市场情绪趋于谨慎。此时,可考虑减少高波动性资产的配置比例,增加防御性板块(如交通运输、公用事业)的权重,并密切关注政策支持方向带来的结构性机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:10:06", "modified_time": "2025-08-11 20:10:06", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b8aab8149e3543bf900cef4ee5961641", "experience_type": "text", "when_to_use": "在危机条件或市场大幅波动期间,用于快速识别下行风险较高的行业和个股。", "content": "通过分析跌幅较大的行业和个股,识别系统性风险的传导路径。例如,医药生物行业中的生物谷因净利润下滑导致股价暴跌,而机械设备行业的鼎佳精密尽管基本面稳健,但也受到市场情绪拖累。建议在危机条件下优先规避高杠杆、低流动性的标的,并加强对财务健康状况(如归母净利润、营收增速)的关注。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:10:06", "modified_time": "2025-08-11 20:10:06", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "962bec2317514707a70f72bc0db0d366", "experience_type": "text", "when_to_use": "在评估全球资金流向变化对不同市场(尤其是新兴市场和发达市场)的影响时,特别是在地缘政治风险缓和或市场情绪转变的背景下。", "content": "通过分析EPFR等数据源的资金流向,识别出外资和本土资金的行为差异及其对市场表现的影响。例如,当避险情绪回落时,外资倾向于重新配置风险资产,而本土资金可能因获利了结而减仓。此外,需特别关注被动型资金与主动型资金的流向差异,因为这可以揭示市场短期交易行为与长期配置趋势的分化。对于中国市场,外资回流通常由被动型资金驱动,而主动型资金的回流则需要更强的市场信心和基本面改善信号。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:11:09", "modified_time": "2025-08-11 20:11:09", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "527d5cfd9a1b4d01943867517edf14c5", "experience_type": "text", "when_to_use": "在制定针对港股市场的投资策略时,特别是当观察到南向资金加速流入以及主动型外资开始回流的迹象时。", "content": "通过分析南向资金的行业偏好和个股选择,发现其对优质高息股(如金融板块的银行、保险)和成长股(如生物医药、互联网、新能源汽车)的偏好。同时,结合主动型外资的低配行业(如信息科技和金融),识别潜在的结构性机会。例如,当主动型外资从低配转向标配时,相关行业可能出现显著的资金流入和股价上涨。此外,需密切关注AH溢价和中长期资金入市政策对南向资金流动的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:11:09", "modified_time": "2025-08-11 20:11:09", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a4f2dbd5cde0445d885b20aa4822cc4c", "experience_type": "text", "when_to_use": "在判断新兴市场对外资吸引力的变化趋势时,尤其是在全球经济波动加剧或美元走弱的背景下。", "content": "通过对比新兴市场与发达市场的资金流向和股价表现,评估新兴市场的相对吸引力。例如,尽管短期内新兴市场资金流入规模可能较小,但若其股价跑赢发达市场且赚钱效应上升,则可能吸引更多的全球资金配置。此外,需考虑分散配置需求和货币因素的影响,例如美元走弱通常利好新兴市场货币,从而增强其资产吸引力。对于中国等大型新兴市场,还需结合政策刺激预期和地缘政治风险进行综合评估。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:11:09", "modified_time": "2025-08-11 20:11:09", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b75b5d27356548359ab514da1c30824a", "experience_type": "text", "when_to_use": "在分析国内资金的逆向投资特征及其对市场稳定性的影响时,特别是在市场出现大幅波动或非理性上涨的情况下。", "content": "通过观察国内资金在市场下跌时集中增持、市场狂热时有序减持的行为模式,可以判断其对市场稳定性的贡献。例如,在市场恐慌情绪上升时,国内资金的大规模净流入有助于缓解外资流出带来的冲击;而在市场过热时,国内资金的适度减仓则能避免泡沫进一步扩大。这种逆向投资行为反映了国内资金的风险管理能力和市场调节功能,尤其在A股市场中表现显著。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:11:09", "modified_time": "2025-08-11 20:11:09", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a6126165cc6d47acacede3afb8f71842", "experience_type": "text", "when_to_use": "在评估市场趋势和行业轮动时,特别是在中报披露高峰期需要针对业绩验证压力进行分析的场景。", "content": "通过结合宏观经济环境、政策导向与市场流动性因素(如国内宽松流动性及美联储降息预期),综合判断行业表现。例如,科技成长与周期制造板块可能成为资金关注的核心领域;同时,需警惕高估值题材股因业绩不及预期而引发的回调风险。建议投资者基于中报数据筛选超预期个股,并避免追高主题炒作。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:12:09", "modified_time": "2025-08-11 20:12:09", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d262a3addefc4c41927860a0d1b7d445", "experience_type": "text", "when_to_use": "在制定短期战术性投资策略时,尤其是在震荡市或小幅上行市场环境中。", "content": "利用技术分析与资金流向监控,识别强势行业和潜在机会。例如,根据盘面热点分布,优先配置资金净流入居前且基本面支撑较强的行业(如航天航空、游戏、银行等)。此外,成交量变化可作为辅助指标,用于确认市场情绪是否支持进一步上涨。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:12:09", "modified_time": "2025-08-11 20:12:09", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "630cce9298e64993a73f3ac1eb987e05", "experience_type": "text", "when_to_use": "在跨资产类别配置或区域市场选择时,特别是在发达市场与新兴市场之间权衡投资方向的场景。", "content": "考虑美元指数走势及其对全球资本流动的影响。当美元走弱时,外资回流新兴市场的概率增加,这为A股等新兴市场提供了额外的资金支持。因此,在美元疲软阶段,可以适度增配新兴市场股票资产,同时关注本地经济复苏进程以规避宏观扰动风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:12:09", "modified_time": "2025-08-11 20:12:09", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8a858eda049741b39d3d07f09c10cf32", "experience_type": "text", "when_to_use": "在设计长期战略规划时,特别是基于估值水平判断市场吸引力的场景。", "content": "通过比较当前市场平均市盈率与历史中位数水平,确定整体市场的估值状态。例如,若上证综指与创业板指数的平均市盈率均处于近三年中位数附近,则表明市场具备中长期布局价值。此时应聚焦于具有结构性增长潜力的行业(如科技成长与周期制造),并采用分批建仓的方式降低择时风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:12:09", "modified_time": "2025-08-11 20:12:09", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "168a4a9be7ce48ebbfa216bc0aa8f323", "experience_type": "text", "when_to_use": "在评估股票市场短期趋势时,特别是在牛市中指数创新高的情况下,判断市场的支撑位和阻力位。", "content": "在A股市场中,当市场情绪乐观且成交额持续放大时,可以通过技术分析确定关键支撑位(如3420点)并将其作为短线强弱的参考。同时,结合政策导向(如财政支出向居民端倾斜)和外部环境(如中美贸易谈判进展),可以进一步验证上涨趋势的可持续性。建议采取多头思维,持股为主,并在回调至支撑位时逢低做多。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:13:09", "modified_time": "2025-08-11 20:13:09", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5c82af47f25f470b8e6360fb5e7f1e8e", "experience_type": "text", "when_to_use": "在外汇市场中,当考虑美元与其他货币的相对强弱时,特别是在美国经济基本面强劲且货币政策空间充足的情况下。", "content": "战略性看多美元是基于美国经济基本面和货币政策空间的分析。即使短期内非美货币可能因汇率波动而受益,但从长期来看,美元的吸引力更强。投资者应避免继续看空美元,而应将做多美元纳入投资视野,尤其是在全球经济不确定性增加的背景下。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:13:09", "modified_time": "2025-08-11 20:13:09", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1606269b70b749b1b5641f646ef734fb", "experience_type": "text", "when_to_use": "在商品市场中,特别是国内定价商品处于企稳回升阶段时,制定交易策略以捕捉中期上涨机会。", "content": "当文华商品指数呈现企稳回升趋势时,可将本轮行情的起涨点(如7月10日低点)视为关键支撑位。结合政策定调(如反内卷政策)和市场情绪,建议采取逢低做多的策略。这种策略适用于中期战术操作,尤其在经济复苏预期增强的背景下。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:13:09", "modified_time": "2025-08-11 20:13:09", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9a412a3d1c214c6cb121e9770a7dc297", "experience_type": "text", "when_to_use": "在债券市场中,当股市风险偏好上升且货币政策保持宽松时,评估债市的短期和中期走势。", "content": "在股涨债跌的大方向下,利率债可能呈现窄幅震荡甚至小幅下跌的格局。然而,由于货币政策整体宽松,基本面和流动性仍对债券构成支撑。因此,预计债市将在经历短期震荡下跌后进入高位震荡阶段。投资者应在调整中寻找配置机会,而非盲目追高。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:13:09", "modified_time": "2025-08-11 20:13:09", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6591380cb0e049dd81d55c87f8096540", "experience_type": "text", "when_to_use": "在美股市场中,当滞胀风险上升但居民资产负债表健康时,评估美股相对于非美股市的表现。", "content": "尽管滞胀风险有所回升,但由于美国居民资产负债表健康且能够应对温和关税冲击,美股相较于除中国外的非美股市仍具有更好的表现潜力。投机情绪回归时,美股有望挑战新高。投资者应关注ISM服务业PMI等领先指标的变化,及时调整仓位。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:13:09", "modified_time": "2025-08-11 20:13:09", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9fc0e60907aa4d6b98eeda86dac0e3c0", "experience_type": "text", "when_to_use": "在评估美元指数的短期波动性及其对宏观经济数据的反应时,特别是在非农就业数据发布后分析市场预期的变化。", "content": "通过结合新增非农就业人数、核心PCE增速和美联储议息会议声明等关键经济指标,构建多维度分析框架。首先,评估非农数据的绝对值与市场预期的偏离程度,并结合前值修正情况判断劳动力市场的潜在风险。其次,观察美联储主席言论是否与市场降息预期一致,识别政策导向对货币走势的短期催化作用。最后,综合关税政策、通胀预期及全球经济动态,判断美元指数的中期趋势(如100点位的关键支撑/阻力)。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:14:22", "modified_time": "2025-08-11 20:14:22", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8ade9bfefe0d4d06a8b6e8f634095ffe", "experience_type": "text", "when_to_use": "在对比发达市场与新兴市场的投资机会时,特别是在贸易摩擦或关税政策变化引发的全球市场重定价期间。", "content": "利用关税调整对不同经济体的实际影响,量化其对贸易额、企业盈利及消费者信心的传导路径。例如,通过分析主要经济体对等关税变动表,识别受关税冲击较大的行业和地区(如越南、中国台湾等),并评估其对外汇市场和跨境资本流动的溢出效应。同时,关注欧元区、德国等结构性因素较强的区域,结合财政政策转向和地缘政治缓和的可能性,预测其相对美国的经济修复潜力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:14:22", "modified_time": "2025-08-11 20:14:22", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "2241779940a2457ab6eeafb7f69a9d78", "experience_type": "text", "when_to_use": "在制定跨资产类别的交易策略时,尤其是基于利差收窄预期进行外汇、债券和股票的联动分析。", "content": "通过监测美国与德、日等主要经济体的名义利差和实际利差变化,判断美元流动性的短期支撑与长期压力。一方面,跟踪核心PCE、GDP增速等高频数据,评估美国经济韧性和通胀上行风险;另一方面,结合白宫施压和美联储独立性博弈,推演年内降息概率及名义利率下行空间。此外,考虑关税对海外经济体的紧缩效应,预测未来实际利差收窄对美元空头的推动作用。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:14:22", "modified_time": "2025-08-11 20:14:22", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "24e5587b8efe4fd2ba85721aa428aa22", "experience_type": "text", "when_to_use": "在评估颠覆性技术(如AI、存算一体芯片)对资本市场的影响时,特别是在高波动期或技术商业化初期。", "content": "通过分析技术进展、市场应用潜力和政策监管框架的综合影响,识别技术商业化落地的关键驱动因素与潜在风险。例如,结合美国《天才法案》和英伟达H20芯片的安全审查案例,关注技术是否符合监管要求以及其对行业竞争格局的重塑能力。同时,利用基准测试数据(如Grok-4的HLE得分)评估技术性能优势及其经济价值转化的可能性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:15:39", "modified_time": "2025-08-11 20:15:39", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1dab8adf80044b158b69b10873979aac", "experience_type": "text", "when_to_use": "在制定资产配置策略时,特别是面对新兴市场的基础设施投资(如雅鲁藏布江水电工程)与新质生产力(如AI算力需求)协同发展的场景。", "content": "采用'能源-算力协同'分析框架,评估大规模基建项目对经济增长、能源安全及新兴产业支持的多重意义。重点关注绿电利用率提升、新型电力系统稳定性及低成本电力供应对AI算力等新质生产力的支持作用。此外,结合市场反应(如相关概念股涨幅)和政策导向(如反内卷行动),判断投资机会的时间窗口与风险回报比。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:15:39", "modified_time": "2025-08-11 20:15:39", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "19f38e6484d14be1b346084dc0ace584", "experience_type": "text", "when_to_use": "在优化固定收益组合或参与药品集采相关的投资决策时,尤其是在政策变化导致市场竞争规则调整的情况下。", "content": "运用政策解读与规则变化分析方法,捕捉第十一批国家药品集采中引入的“N-3”竞价机制、复活机制等新规则对行业格局的影响。重点评估企业报价策略的合理性声明、单一企业带量封顶等措施对价格稳定性和市场份额分配的作用。同时,结合历史数据对比,预测政策落地后的市场表现及长期盈利能力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:15:39", "modified_time": "2025-08-11 20:15:39", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a8bb2b2564db4fc59d3be6ed619a50c1", "experience_type": "text", "when_to_use": "在进行跨境支付、数字货币或稳定币相关投资分析时,特别是在不同监管框架下评估货币工具的合规性与市场需求。", "content": "基于香港《稳定币条例》和美国《天才法案》的案例,构建多维度监管适应性分析模型,包括发行主体资质、储备资产管理透明度、反洗钱合规要求等。同时,跟踪CIPS业务规模增长(如175万亿年处理金额)与人民币国际化进程,评估跨境支付工具在全球贸易中的应用前景及其对传统金融体系的冲击。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:15:39", "modified_time": "2025-08-11 20:15:39", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "fa742c47e54f434fb465f8f09f9cae2e", "experience_type": "text", "when_to_use": "在评估新兴技术(如AI)对资本市场和产业发展的影响时,特别是在政策驱动下寻找投资机会的场景中。", "content": "通过分析政策导向与产业链成熟度的结合点,识别具备规模化商业化潜力的技术领域。例如,在本案例中,明确指出我国AI产业已进入‘规模提升’阶段,并基于此推导出工业机器人、消费级硬件等领域的增长潜力。同时,应关注算力基础设施、数据资源和算法创新等关键环节,这些是技术落地的核心驱动力。此外,建议优先布局数字化渗透率高的行业,如金融、医疗和交通,因其数据壁垒高且价值密度大,能够快速实现AI赋能。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:16:55", "modified_time": "2025-08-11 20:16:55", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3ff5045f7bee42ca8b7d210b2093bdbf", "experience_type": "text", "when_to_use": "在风险评估过程中,需要综合考虑政策推进、市场波动和技术迭代不确定性的情况下。", "content": "构建多层次的风险预警机制,涵盖政策执行力度、市场竞争格局和技术发展路径。具体而言,需警惕政策推进不及预期导致的落地延迟风险;同时,密切关注全球AI竞争态势,特别是主要经济体之间的技术标准争夺可能引发的市场动荡。此外,技术迭代的不确定性要求投资者保持灵活性,避免过度集中于单一技术路线或应用场景。例如,当前Transformer架构虽占据主导地位,但RNN等替代方案的崛起可能带来颠覆性变化。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:16:55", "modified_time": "2025-08-11 20:16:55", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "99fc915d745843ceb4051b01b9740c4b", "experience_type": "text", "when_to_use": "在分析新兴市场(如北交所)中个股和行业表现时,尤其是在市场交易活跃度波动较大的情况下。", "content": "结合市场整体交易数据(如成交额、换手率)与个股/行业的财务指标(如市盈率、归母净利润)进行交叉验证,识别短期内的高波动性标的。重点关注新股发行和行业轮动对市场情绪的影响,并通过历史行情对比判断市场热度是否可持续。例如,本周电子行业因新股鼎佳精密影响涨幅领先,但需警惕个别公司业绩变化对行业估值的短期扰动。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:18:05", "modified_time": "2025-08-11 20:18:05", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8a41a5e95e0148109474611a5478955c", "experience_type": "text", "when_to_use": "在制定以成长性为导向的投资策略时,特别是在筛选具有高潜力的中小企业或专精特新企业时。", "content": "采用自下而上的方法,基于财务指标(如营收增速、研发投入占比、产能释放潜力)筛选目标公司,同时关注其商业模式的独特性和稀缺性。例如,推荐布局人工智能、商业航天等新兴领域的公司,因其在A股市场具有稀缺属性,可能吸引更多增量资金。此外,需结合PE(TTM)及未来盈利预测评估估值合理性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:18:05", "modified_time": "2025-08-11 20:18:05", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "44d2d9421db54f2e9f0ce08205c5e9a0", "experience_type": "text", "when_to_use": "在评估政策和技术变革对特定板块的长期影响时,例如北交所证券代码切换、并购热潮等事件驱动型分析场景。", "content": "通过跟踪政策支持方向(如专精特新指数推出)、技术升级准备情况(如券商自查确保代码切换平稳实施)以及产业链整合动态(如近期北交所上市公司加速并购),综合判断市场关注度和投资价值的变化趋势。此类事件通常会提升板块辨识度并吸引更多优质企业和资金入场,从而推动中长期估值修复。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:18:05", "modified_time": "2025-08-11 20:18:05", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6408e5726b8a45338a681050f4eccb4a", "experience_type": "text", "when_to_use": "在管理跨市场资产配置风险时,尤其是面对不同经济周期和区域市场特征下的多元化投资组合调整需求。", "content": "根据不同市场的估值水平(如北交所与创业板的市盈率对比)、流动性状况(如换手率差异)以及宏观经济环境(如政策支持力度、技术迭代速度),优化资产配置权重。例如,在高波动期优先选择具备稳定现金流和较低估值的标的,而在牛市阶段则可适当增加高成长性中小企业的配置比例,以平衡收益与风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:18:05", "modified_time": "2025-08-11 20:18:05", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "fd25906c08b640c3adbcd5b605451df2", "experience_type": "text", "when_to_use": "在制定长期投资策略或资产配置时,特别是在经济周期转换、政策驱动型市场中(如五年规划发布期间)。", "content": "基于政策导向进行主题投资分析,优先关注国家中长期发展规划中的重点产业领域(如科技创新、数字经济、绿色转型等)。通过解读政策文件(如十四五、十五五规划),识别具有高增长潜力的行业方向,并结合产业链上下游关系筛选核心标的。同时,注重政策落地的节奏和执行力度,动态调整投资组合以捕捉政策红利。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:19:19", "modified_time": "2025-08-11 20:19:19", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d020e082f3c148759be9331cfd9e6059", "experience_type": "text", "when_to_use": "在评估产业链供应链安全相关的投资机会或风险时,特别是在地缘政治紧张局势加剧或关键技术领域受外部限制的情况下。", "content": "围绕‘补短板’和‘锻长板’两大维度,系统性分析关键领域的技术瓶颈和产业优势。例如,针对半导体、新能源、高端制造等行业,聚焦本土化替代能力较强的企业,以及具备国际竞争力的技术领先公司。此外,通过跟踪政策支持方向(如重大工程项目、研发资金投入)及行业整合趋势,提前布局受益标的,同时规避因外部制裁可能受损的相关企业。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:19:19", "modified_time": "2025-08-11 20:19:19", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "80ce466a29374d1a89d831ba13d45adf", "experience_type": "text", "when_to_use": "在新兴市场或前沿科技领域寻找未来产业的投资机会,尤其是在技术创新加速和技术应用场景不断扩展的背景下。", "content": "采用“未来产业”框架分析潜在颠覆性技术及其商业化路径,重点关注人形机器人、量子计算、脑机接口、6G网络等标志性产品领域。结合技术成熟度曲线(Hype Cycle)判断各细分领域所处发展阶段,选择处于快速成长期且具备明确落地场景的标的进行投资。同时,密切跟踪科研进展、试点项目推广情况以及资本市场对该领域的估值变化,及时调整仓位。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:19:19", "modified_time": "2025-08-11 20:19:19", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "419bec3ddafd46c1a93f88ac41a3a8fb", "experience_type": "text", "when_to_use": "在消费驱动型经济体中挖掘消费升级和服务消费的增长潜力,特别是在人口结构变化显著或社会保障体系逐步完善的阶段。", "content": "从收入分配改善和民生保障强化的角度出发,识别服务消费(如养老、育儿、医疗、教育)和新型消费(如低空经济、深海科技)的增量空间。结合人口老龄化趋势和促生育政策发力点,锁定银发经济、首发经济等相关主题。同时,通过分析居民可支配收入增速、消费信贷渗透率等数据验证消费复苏逻辑,并关注供给侧优化创新对需求端的拉动作用。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:19:19", "modified_time": "2025-08-11 20:19:19", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "41626bd017f74193a605ca2424a9573d", "experience_type": "text", "when_to_use": "在评估政策驱动的行业投资机会时,尤其是在供给侧改革或‘反内卷’等宏观政策背景下,判断哪些行业可能受益。", "content": "通过复盘历史供给侧改革(如2015-2018年钢铁和煤炭行业)的经验,识别政策推出后商品价格、行业盈利改善及库存周期的变化规律。结合当前政策覆盖行业的财务状态(如营收、库存、净利润增速等),优先选择处于主动去库存阶段且需求弹性较大的行业(如光伏、医疗器械)。同时关注景气确定性较高的行业(如化工、建材),以平衡短期波动与长期收益。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:20:48", "modified_time": "2025-08-11 20:20:48", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "05f7622c28d24a1cb9bba011208ad754", "experience_type": "text", "when_to_use": "在进行大类资产配置时,尤其是权益、利率、黄金和地产等资产的月度量化观点制定。", "content": "采用结构化静态因子模型分析利率和黄金的驱动因素,例如经济增长、通货膨胀、债务杠杆和短期利率对国债利率的影响,以及美国经济、就业、财政和负债对黄金走势的作用。结合高频景气度指数预测A股净利润增速,并通过三维择时体系(分歧度、流动性、景气度)判断市场趋势。对于地产压力指数,则需追踪供需两侧关键指标的边际变化。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:20:48", "modified_time": "2025-08-11 20:20:48", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8b47703878764f509e1c33f131bb0eb6", "experience_type": "text", "when_to_use": "在制定二元风格投资策略时,特别是在成长/价值、大盘/小盘风格轮动分析中。", "content": "利用美债利率作为红利/成长相对强弱的领先指标,观察其拐点对风格切换的影响(通常领先3-6个月)。结合机构调研强度与市值因子拥挤度,判断小盘/大盘轮动趋势。从季节效应看,8月小盘股相对大盘股有显著胜率和赔率优势,因此可适当增加小盘股配置。同时,关注预期成长优势差扩大的信号,推荐分析师预期类和主题类策略。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:20:48", "modified_time": "2025-08-11 20:20:48", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "37827650e73e4780829f9745dc53168c", "experience_type": "text", "when_to_use": "在行业配置中,特别是基于胜率赔率和出清反转逻辑筛选高潜力行业时。", "content": "从胜率(行业短周期实现超额收益的概率)和赔率(长周期绝对收益空间)两个维度综合评估行业吸引力,优先选择高胜率高赔率的行业(如计算机、电力设备及新能源)。对于出清反转策略,关注行业需求回升但供给尚未扩张的节点,推荐处于出清结束并进入反转期的行业(如石油石化、有色金属)。结合历史数据验证策略的有效性,确保样本外表现稳健。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:20:48", "modified_time": "2025-08-11 20:20:48", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "88ce69e4f74b44e098dbc0f482aa0ad6", "experience_type": "text", "when_to_use": "在评估特定市场或板块的短期投资机会时,特别是在市场波动性较高且行业轮动明显的环境下。", "content": "通过分析北交所等细分市场的日度数据(如成交额、换手率及行业涨跌幅),可以识别短期内表现突出的行业和个股。例如,汽车及国防军工等行业在8月6日表现出色,这可能与政策支持、市场需求变化或技术突破相关。结合估值数据(如市盈率)进一步验证是否存在过度炒作或低估的机会,从而制定战术性交易策略。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:21:51", "modified_time": "2025-08-11 20:21:51", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "783b584f38da4b498d2d2e6980e93fa8", "experience_type": "text", "when_to_use": "在进行跨市场比较以优化资产配置时,尤其是在不同经济周期阶段或市场环境差异显著的情况下。", "content": "利用北交所与沪深300、科创板和创业板之间的相对表现及估值水平对比,可以帮助投资者理解各市场的风险收益特征。例如,北交所整体估值高于创业板但低于科创板,表明其可能更适合寻求中等风险敞口的投资者。此外,关注高增长潜力的小市值公司(如华密新材、富恒新材)可为长期战略规划提供参考。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:21:51", "modified_time": "2025-08-11 20:21:51", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d4019ec7716443d89029867f3d32f464", "experience_type": "text", "when_to_use": "在构建多元化投资组合并需要平衡风险与回报时,特别是在面对不同行业基本面和财务健康状况的复杂情况下。", "content": "从涨幅和跌幅前十股票的财务指标(如营业收入、归母净利润)入手,筛选出具有稳健基本面支撑的标的。例如,尽管*ST广道当日涨幅较大,但其负利润提示可能存在较高风险;而华密新材不仅涨幅领先,且收入和利润均保持正向增长,显示出更强的投资吸引力。这种方法有助于同时考虑短期价格波动和长期价值创造。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:21:51", "modified_time": "2025-08-11 20:21:51", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "2b97d2a0fe8b48bb81a4d5bc41200943", "experience_type": "text", "when_to_use": "在预测市场趋势及调整投资策略时,特别是在政策导向、科技创新和市场竞争等因素驱动下。", "content": "综合宏观背景、行业动态及个股表现,形成对市场未来走势的判断。例如,报告提到的‘政策支持力度低于预期’、‘科技创新性不足’等风险点,提醒投资者警惕潜在下行压力。同时,高换手率个股(如方盛股份、*ST广道)反映出市场情绪活跃,但需谨慎对待流动性溢价带来的非理性上涨。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:21:51", "modified_time": "2025-08-11 20:21:51", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "13a9373c293545a0be826c1981435859", "experience_type": "text", "when_to_use": "在一级市场投资分析中,识别早期阶段(天使轮、A轮)投资机会时,特别是在科技创新和医疗健康领域。", "content": "通过分析融资事件的行业分布和地域集中度,结合政策导向(如人工智能和母婴赛道的利好政策),可以优先关注受政策支持且处于技术前沿的细分赛道。例如,本周数据显示信息技术和电子行业融资活跃,且人工智能相关企业融资金额显著增加,表明政策驱动下的高成长性领域值得重点关注。此外,早期融资事件占比提升表明市场风险偏好有所提高,适合布局高潜力初创企业。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:23:04", "modified_time": "2025-08-11 20:23:04", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f2720a6ceef04746a0f3a632afc72f4a", "experience_type": "text", "when_to_use": "在退出策略规划中,评估不同退出方式的可行性和市场环境影响,特别是在IPO、股权转让和并购等场景下。", "content": "从本周公开退出案例来看,股权转让和新三板挂牌仍是主要退出方式,但IPO退出案例尽管数量较少,却能带来显著的资本增值(如维立志博港股上市)。因此,在制定退出策略时,需结合行业特性、资本市场热度及企业成长阶段进行综合评估。例如,医疗健康和消费电子领域的高成长性企业更适合通过IPO实现溢价退出,而传统制造业或成熟企业则可通过股权转让或并购实现流动性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:23:04", "modified_time": "2025-08-11 20:23:04", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1bc1a62076444dcabec2a7f9c9f00600", "experience_type": "text", "when_to_use": "在评估港股市场投资机会时,尤其是在面对政策变化、国际贸易摩擦和宏观经济波动的背景下。", "content": "通过综合分析宏观经济指标(如PMI、失业率)、政策导向(如中央政治局会议内容)以及国际市场动态(如美联储利率决策、关税政策),可以有效识别市场的短期扰动因素和长期趋势。建议优先关注高股息标的以应对不确定性,并聚焦于受政策支持或业绩超预期的板块(如创新药、AI产业链)。此外,AH股溢价指数可作为衡量港股相对估值吸引力的重要参考。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:24:27", "modified_time": "2025-08-11 20:24:27", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "fa4e070437d747efaf22f33c5b4082d4", "experience_type": "text", "when_to_use": "在进行资产配置和风险评估时,特别是在不同市场环境(牛市/熊市/横盘)和经济周期下。", "content": "利用估值分位数(如PE、PB的历史分位数)和风险溢价模型(如恒生指数相对于10年期美债或中债的风险溢价率)来判断资产的估值水平和潜在回报空间。例如,当风险溢价处于历史低位时,表明市场可能被高估,需警惕下行风险;反之则可能存在较好的买入机会。同时,结合行业估值分化情况(如低估值的公用事业与高估值的信息技术),优化组合配置以平衡收益与风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:24:27", "modified_time": "2025-08-11 20:24:27", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b517e5d2f843459e9f699c919f69ae28", "experience_type": "text", "when_to_use": "在监测资金流动性和市场情绪时,特别是在南向资金大幅流入或沽空活动增加的情况下。", "content": "跟踪港交所日均成交金额、沽空金额占比以及南向资金流向,能够及时捕捉市场情绪变化和资金偏好。例如,南向资金大幅净流入通常反映内地投资者对港股的信心增强,而沽空金额占比上升可能预示短期市场承压。因此,建议将这些流动性指标与技术分析相结合,以更精准地把握市场拐点和交易时机。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:24:27", "modified_time": "2025-08-11 20:24:27", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "88caba9ab4224fa0b28f94869db70f7c", "experience_type": "text", "when_to_use": "在评估市场整体趋势与风格板块轮动时,特别是在牛市后期或熊市初期阶段,用于判断价值股与成长股的相对表现。", "content": "通过对比价值风格类指数(如上证50、沪深300)与成长风格类指数(如中证500、中证1000)的涨跌幅,结合行业资金流向(如两融余额变化),可以识别市场风格切换信号。例如,当价值股跌幅大于成长股时,可能预示市场风险偏好下降,投资者应关注防御性板块(如医药生物)的配置机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:25:34", "modified_time": "2025-08-11 20:25:34", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3630056076bd45dc97f9ee1a2afa29c8", "experience_type": "text", "when_to_use": "在分析特定行业的投资吸引力时,特别是在高波动期或经济周期转折点,用于评估行业资金流入流出情况。", "content": "利用两融余额及净买入数据的变化,结合行业涨跌幅,可以有效判断市场对某一行业的短期信心。例如,医药生物行业在本周两融余额增长显著(67.28亿元),且涨幅靠前(2.95%),表明其在市场不确定性中具有较强的防御属性和资金青睐,适合在经济下行压力较大的环境中作为避险资产配置。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:25:34", "modified_time": "2025-08-11 20:25:34", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "083068263c52415e8d54aa024b82e0ab", "experience_type": "text", "when_to_use": "在制定中期组合调整策略时,特别是在市场成交量萎缩或市场情绪低迷的情况下,用于优化资产配置比例。", "content": "通过监测全市场两融交易额占A股成交额的比例变化,可以捕捉市场情绪的边际改善或恶化信号。例如,本周两融交易额占比增加(1.79%),但日均成交金额减少(-2.11%),表明市场活跃度下降,但杠杆资金仍保持一定参与度。此时,建议降低高波动性资产(如有色金属)的仓位,同时增加低估值、高流动性的防御性资产(如银行)。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:25:34", "modified_time": "2025-08-11 20:25:34", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "04678cf07ee04b01b8c91667e7bd80b9", "experience_type": "text", "when_to_use": "在评估科技公司(如云计算和AI驱动型企业)的长期增长潜力时,特别是在高波动性和技术快速迭代的市场环境中。", "content": "采用双层分析框架:首先评估核心技术竞争力(如亚马逊AWS的规模效应与推理侧需求,谷歌TPU的领先性),其次结合财务指标(如云业务利润率提升趋势、广告收入增长)。同时,关注供应链动态和技术节点(如T3芯片送样进度)对估值的短期扰动影响,并将这些因素纳入DCF模型中进行敏感性分析。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:26:47", "modified_time": "2025-08-11 20:26:47", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e52070d27c3f40b19f4063fd3a86e10e", "experience_type": "text", "when_to_use": "在新兴市场的高成长行业中筛选具有显著成本优势和扩展潜力的企业,尤其是在竞争加剧但需求持续增长的情况下。", "content": "通过比较单位运营成本(如美团单均履约成本4.2元 vs 竞争对手11.5元)来量化企业的竞争优势。同时,利用SoTP(Sum of the Parts Valuation)方法分别对不同业务线(如零售、连锁诊所)进行估值,并根据其发展阶段赋予不同的PE倍数。例如,对于早期高增长业务给予更高估值溢价,而对于成熟现金牛业务则采用稳定市盈率。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:26:47", "modified_time": "2025-08-11 20:26:47", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7ec2ff9e388a429ba45498842e15c6b6", "experience_type": "text", "when_to_use": "在跨境投资或资产配置决策中,涉及汇率波动风险及非美元计价资产的投资价值评估。", "content": "建立多因子模型,综合考虑宏观经济变量(如利率政策)、货币兑换风险以及目标市场的监管环境。以SK Hynix为例,除核心产品HBM外,还需关注其全球客户认证进展(如三星未通过HBM3E认证带来的机会窗口)。此外,在估值时引入外汇对冲策略,确保收益稳定性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:26:47", "modified_time": "2025-08-11 20:26:47", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "22c6ca46cfcd45af9e69693329cea944", "experience_type": "text", "when_to_use": "针对医疗健康领域创新药企的价值发现,尤其是在研发管线进入商业化阶段的关键节点。", "content": "采用BD(Business Development)导向的预测框架,重点关注对外授权交易总额及其里程碑支付条款(如石药集团与AZ合作的53亿美元总包)。结合临床数据披露时间表(如SYS6010三期临床启动)推导收入峰值预测,并用概率加权法调整各阶段成功率后的NPV作为最终估值依据。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:26:47", "modified_time": "2025-08-11 20:26:47", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "71e8a427fae44ef49032be5432f55fb0", "experience_type": "text", "when_to_use": "在评估新兴技术(如AI、机器人)相关投资标的时,尤其是在行业展会或技术突破后进行市场机会分析。", "content": "通过整合行业展会信息(如WAIC)与北交所相关标的的财务和估值数据,识别具有高成长潜力的技术驱动型企业。重点关注企业在产业链中的位置(如核心技术、关键零部件供应商)以及其产品商业化进展。例如,华为昇腾384超节点和特斯拉机器人等前沿展品可作为技术趋势验证点,结合标的市值、市盈率TTM及净利润增长数据,筛选具备短期爆发潜力和长期价值的企业。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:28:06", "modified_time": "2025-08-11 20:28:06", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a1718c6ed506448586c400c17ea4324a", "experience_type": "text", "when_to_use": "在市场波动期或板块轮动明显时,评估不同行业和科技新产业的估值变化及资金流向。", "content": "通过对比北交所五大行业(高端装备、信息技术、化工新材、消费服务、医药生物)的周度涨跌幅与市盈率TTM中值变化,识别抗跌性强或逆势上涨的细分领域。例如,本周医药生物行业平均涨跌幅为+4.04%,且市盈率中值降至46.0X,显示出防御性资产配置的机会。同时,关注科技新产业中涨幅居前的个股(如*ST广道、迅安科技),分析其业务独特性及市场情绪驱动因素。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:28:06", "modified_time": "2025-08-11 20:28:06", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d9d41e8e545948cfaa007acddddc1168", "experience_type": "text", "when_to_use": "在跨国子公司投产或重大合作项目公告发布后,评估企业运营能力提升对其财务表现的潜在影响。", "content": "结合建邦科技泰国子公司的投产案例,建议从三方面展开分析:1)项目进展与验收情况(如IEAT认证);2)所在市场的竞争格局与需求前景(如东南亚汽车零部件市场);3)企业过往业绩表现及产能利用率。此外,可参考众诚科技签订大数据云平台服务合同的模式,评估新增订单对营收和利润的直接贡献,从而判断投资标的的成长性和风险水平。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:28:06", "modified_time": "2025-08-11 20:28:06", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6b07f1b423454b1f8fb6bded72e3a75c", "experience_type": "text", "when_to_use": "在权益市场经历短期冲高回落,且市场情绪仍保持健康的场景下进行资产配置分析。", "content": "当市场出现短暂回调时,避免过度关注短期指数波动,而是聚焦于成交量能、板块轮动和政策导向。建议采用哑铃型策略,一方面维持科技板块(如通信)的配置,另一方面保留红利板块作为防御性资产,并根据市场情况酌情减仓。此外,中长期可关注政策支持领域,例如科技、反内卷(如光伏、新能源产业链)和服务型消费(如旅游、餐饮)。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:29:13", "modified_time": "2025-08-11 20:29:13", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "76bb6722d173444c882b63368db50bce", "experience_type": "text", "when_to_use": "在债券市场受权益市场影响呈现股债跷跷板效应的情况下制定债券投资策略。", "content": "当权益市场回落时,部分资金可能流入债券市场,短期内对债市形成支撑。然而,在缺乏明确消息面刺激的情况下,需谨慎看待债市的后续表现。应密切关注权益市场的走势以及宏观经济政策的变化,灵活调整债券配置比例,避免过度乐观。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:29:13", "modified_time": "2025-08-11 20:29:13", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "742ee284f5494378b6cda4814653418b", "experience_type": "text", "when_to_use": "在全球经济稳定信号释放及中美贸易谈判背景下评估海外因素对国内权益市场的影响。", "content": "在国际经济环境趋于稳定或重大外交事件(如关税政策落地、中美谈判进展)发生时,结合国内外宏观政策导向综合判断市场趋势。例如,美国关税政策的稳定信号和国内政治局会议的积极表态可以增强市场信心,推动权益市场上行。此时应重点关注受益于政策利好的行业,如科技板块中的芯片、通信领域,以及与扩内需相关的服务型消费板块。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:29:13", "modified_time": "2025-08-11 20:29:13", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "74908a4bb24d4156838fbe1b5a1ea76f", "experience_type": "text", "when_to_use": "在商品市场因供需关系变化导致多品类回落的情况下进行大宗商品配置分析。", "content": "当商品市场失去上行动力时,需重点评估主要品类的基本面逻辑。例如,原油和黄金等关键商品若缺乏强劲的上行支撑,则整体商品市场可能继续疲软。在这种情况下,建议短期维持黄金配置以对冲风险,但中长期需持续观望,等待更明确的趋势信号。同时,需警惕黑色系产品产能过剩对相关商品价格的压制作用。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:29:13", "modified_time": "2025-08-11 20:29:13", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "09d64c6f707a4395b445d8d8d610185f", "experience_type": "text", "when_to_use": "在评估全球权益市场的短期波动和调整时机时,尤其是在获利盘累积、外部政策事件(如关税调整)或经济数据发布后引发的市场震荡期。", "content": "通过分析关键宏观经济指标(如PMI、劳动力市场数据、美联储降息预期等)与市场情绪之间的关系,识别市场调整的核心驱动因素。结合历史数据和当前市场环境,判断调整是否为短期现象,并关注企稳信号(如技术支撑位、政策预期稳定)。同时,利用全球主要指数的月度和日度涨跌幅对比,明确获利回吐压力释放后的潜在上行空间。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:30:37", "modified_time": "2025-08-11 20:30:37", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6f4c04d978e54bfcadf42ab016764045", "experience_type": "text", "when_to_use": "在进行行业及主题配置决策时,特别是在经济周期转折点或政策导向明确的时期(如“反内卷”政策推进、内需刺激政策出台等)。", "content": "基于PMI分项指标变化,优先选择生产指数和新订单指数持续扩张的行业,例如先进制造、科技领域(军工、AI+、人形机器人等)。同时,结合中报业绩改善方向和政策催化热点(如机械设备、家用电器、汽车等),动态调整投资组合权重。此外,关注估值分位数较低但基本面改善明显的行业,以捕捉估值修复机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:30:37", "modified_time": "2025-08-11 20:30:37", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a476c9972b074c8f9e7c8e937d3e170b", "experience_type": "text", "when_to_use": "在制定跨资产类别交易策略时,尤其是在美联储货币政策预期转变(如降息概率上升)或汇率波动加大的背景下。", "content": "通过监测芝加哥商品交易所的美联储观察工具以及美国非农就业数据、ISM服务业PMI等高频经济数据,提前布局对利率敏感的资产(如成长股、高收益债)。同时,考虑美元指数与人民币汇率的联动效应,灵活调整外汇敞口和海外资产配置比例。对于新兴市场资产,需特别注意贸易保护主义风险和资本流动变化。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:30:37", "modified_time": "2025-08-11 20:30:37", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0eb08f6313854c11a5d94a6b03966c1f", "experience_type": "text", "when_to_use": "在评估国际贸易政策(如关税谈判)对金融市场的影响时,尤其是在涉及多国谈判和复杂经济动态的场景中。", "content": "当分析国际贸易政策(例如美国与其他国家的关税谈判)对市场的影响时,应重点关注谈判进展、税率水平及其对通胀和企业成本的传导效应。同时,结合宏观经济数据(如出口景气度、PMI指数等)判断内需与外需的相对强弱,并通过因子分析量化其对不同资产类别(如权益、债券、大宗商品)的影响。此外,需警惕谈判结果可能引发的市场情绪波动及后续政策路径的变化。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:31:44", "modified_time": "2025-08-11 20:31:44", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c6b90104bdc24a80b0935c2d73a508dd", "experience_type": "text", "when_to_use": "在制定大类资产配置策略时,特别是在宏观经济环境存在通胀回升预期且利率政策面临调整的背景下。", "content": "在通胀预期回升且利率政策面临调整的环境中,建议优先关注利率变动对期限利差的影响,以及其对债券和权益市场的传导机制。具体而言,短期利率的稳定与长端利率的上行可能导致期限利差扩大,从而利好成长风格资产。同时,需结合流动性指标(如M2同比变化、社融增速)和市场情绪(如新发基金规模)综合评估市场资金流向,并适时调整高配、标配或低配建议。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:31:44", "modified_time": "2025-08-11 20:31:44", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9c308c5f15084ed2a0e31e7c6d355408", "experience_type": "text", "when_to_use": "在分析特定商品(如原油、铜、黄金)价格走势时,尤其是在供需关系和政策扰动共同作用的情境下。", "content": "对于国际大宗商品(如原油、铜、黄金),应结合供需基本面、库存变化、持仓量及净多头头寸进行综合分析。例如,原油价格受OPEC+增产节奏影响较大,需密切关注其会议决议和产能释放计划;铜价则易受关税政策和库存转移的阶段性影响;而黄金价格更多依赖于地缘政治风险、实际利率水平及降息预期。基于因子分析结果,合理分配资产权重并动态跟踪政策落地情况。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:31:44", "modified_time": "2025-08-11 20:31:44", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b92f4fdf16864f4283847527a56b7c57", "experience_type": "text", "when_to_use": "在预测汇率走势时,特别是当涉及主要经济体间的贸易谈判、货币政策分化及利差变化的情况下。", "content": "在评估汇率(如美元指数或人民币兑美元汇率)走势时,需综合考虑贸易谈判进展、货币政策差异及利差变化。例如,关税谈判顺利推进可能修复美元信用并支撑美元指数偏强运行;而中美利差“倒挂”收窄则有助于人民币回升。此外,外汇储备变动和市场对美联储政策路径的预期也是重要参考指标。通过构建息差逻辑和政策预期模型,可提升汇率预测的准确性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:31:44", "modified_time": "2025-08-11 20:31:44", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0bbd656fcf8242aab513672923794e33", "experience_type": "text", "when_to_use": "在政策驱动型市场中识别投资机会,特别是在政府推出支持新型工业化或产业升级的金融政策时。", "content": "通过分析政策文件中的具体目标和工具(如信贷、债券、股权融资等),结合行业重点领域的明确指引(如高端制造、绿色经济、数字经济等),可以快速锁定受益板块和企业。例如,关注政策提及的链主企业(如集成电路、工业母机)以及专精特新中小企业,评估其融资能力和市场竞争力。同时,需结合区域发展导向(如中西部和东北地区)优化资源配置策略。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:32:39", "modified_time": "2025-08-11 20:32:39", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "34611d6c4e4143c19e3535f682d65f6c", "experience_type": "text", "when_to_use": "在经济转型期或地缘政治不确定性较高的环境中进行风险评估和资产配置。", "content": "采用多层次的风险评估框架,将政策效果不确定性、地缘因素、市场情绪波动等纳入考量范围。同时,建议构建多元化的投资组合以对冲单一市场的波动性,例如结合绿色债券、硬科技成长股、传统制造业转型升级标的等多种资产类别。此外,密切关注海外降息预期和流动性环境变化,动态调整投资策略。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:32:39", "modified_time": "2025-08-11 20:32:39", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a53eac7e5cd143799b08ec24fdcbb89f", "experience_type": "text", "when_to_use": "为长期战略规划设计跨周期的投资组合,尤其是在高波动性和经济周期切换频繁的市场条件下。", "content": "利用政策引导与资本市场联动的深度分析方法(如并购、IPO、REITs等工具的应用),挖掘具有长期增长潜力的行业和企业。例如,聚焦于低碳产业、数字基础设施建设等领域,评估其技术壁垒和市场需求趋势。同时,结合时间跨度的不同需求,灵活分配短期战术操作(如日内交易)与中期组合调整(如季度再平衡)的比例,确保收益与风险的平衡。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:32:39", "modified_time": "2025-08-11 20:32:39", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "688908b846aa4d0792ca5e55c13754b2", "experience_type": "text", "when_to_use": "在新兴市场中寻找高成长性企业,特别是在监管框架复杂且货币波动较大的地理范围内。", "content": "针对新兴市场的本地动态(如特色产业集群化发展)、监管环境及货币因素,制定定制化的金融服务方案。例如,优先选择具备明确政策支持的先进制造业集群,并通过数字化产业金融服务平台提升信息获取效率。此外,需特别注意资金用途监控和信贷风险管理,避免因“内卷式”竞争导致的低效投资,从而助力高质量发展。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:32:39", "modified_time": "2025-08-11 20:32:39", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b6f011da13044b8db941f2c466fb5a09", "experience_type": "text", "when_to_use": "在宏观经济事件(如非农数据、GDP报告等)发布后,评估其对全球市场的短期和中期影响,尤其是在高波动期或经济衰退担忧加剧时。", "content": "利用宏观经济数据(如非农就业、PMI、GDP等)结合市场情绪指标(如VIX指数、债券收益率曲线)进行综合分析,判断市场风险偏好和资产价格的潜在走势。例如,在非农数据大幅低于预期的情况下,应重点关注美元指数、美债收益率及黄金的避险需求变化,并结合美联储政策声明评估降息预期升温的可能性及其对各类资产的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:33:46", "modified_time": "2025-08-11 20:33:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "4388bdca2a894659a87f9e75bfe5c132", "experience_type": "text", "when_to_use": "在全球贸易摩擦升级或地缘政治风险增加时,分析其对大宗商品(尤其是原油和黄金)供需动态及价格波动的影响。", "content": "通过跟踪地缘政治风险指数、OPEC+会议决议及关税政策变化,结合API/EIA库存数据和全球需求预测,评估原油市场的供需平衡点。同时,关注黄金作为避险资产的表现,特别是在地缘冲突频发或通胀预期上升时,需结合实际利率走势和央行购金行为判断黄金的中长期支撑力度。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:33:46", "modified_time": "2025-08-11 20:33:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b4f05bc406ae4e90822d3789292e485e", "experience_type": "text", "when_to_use": "在国内宏观政策调整或外部环境不确定性增加时,评估人民币汇率的短期波动及中长期趋势,特别是在中美经贸关系出现阶段性变化时。", "content": "结合中国央行中间价定价机制、国内经济增长动能(如制造业PMI、消费贷款贴息政策)及美联储货币政策转向的可能性,分析人民币兑美元的双向波动区间。短期内需关注贸易谈判进展和资本流动情况,中长期则需考虑中国经济基本面改善及国际化进程加速对人民币升值潜力的支持作用。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:33:46", "modified_time": "2025-08-11 20:33:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "282551d32ae24801b9a17ebec8633c52", "experience_type": "text", "when_to_use": "在权益市场受到外溢风险传导或内需疲软压制时,制定防御性投资策略并识别结构性机会,尤其是在政策真空期或市场情绪不稳定时。", "content": "通过分析全球主要宽基指数估值分位数及行业轮动规律,选择具备防御属性的板块(如公用事业、必需消费品)进行配置。同时,关注科技与成长板块在美联储转向宽松后的反弹潜力,并结合企业盈利修复预期筛选优质标的。此外,需警惕地缘因素扰动和政策落地效果不及预期带来的下行风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:33:46", "modified_time": "2025-08-11 20:33:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0f1c26a67f39492aaab10b764f5773c5", "experience_type": "text", "when_to_use": "在评估新兴技术行业(如机器人、具身智能)的投资机会时,特别是在市场对相关概念高度关注的环境下。", "content": "结合行业新闻和资本市场动态,优先关注具有明确政策支持和技术突破潜力的领域。例如,上海发布的《具身智能产业发展实施方案》明确了2027年的核心产业规模目标和技术突破方向,这为投资者提供了清晰的政策导向和量化指标。此外,通过分析参展企业数量增长和新品发布情况(如2025世界机器人大会的数据),可以判断行业景气度和市场热度。将这些信息与个股表现(如中大力德和山河智能的股价涨幅)相结合,可识别出高潜力标的。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:35:03", "modified_time": "2025-08-11 20:35:03", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f973b110a3b34cfba9722ecfed02f27d", "experience_type": "text", "when_to_use": "在宏观经济波动显著的情况下(如用电负荷创新高),用于评估能源相关行业的短期投资机会或风险。", "content": "利用高频数据(如国家电网的用电负荷数据)监测经济活动强度,并结合天气等外部因素预测需求变化。例如,连续三天创历史新高的用电负荷表明经济活动强劲,但后续降雨降温可能导致阶段性回落。这种分析方法适用于短期战术操作,尤其是在能源、公用事业和相关大宗商品领域。对于长期投资,则需进一步验证需求的可持续性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:35:03", "modified_time": "2025-08-11 20:35:03", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3032a5ec8e06402695c283f237c7bb3a", "experience_type": "text", "when_to_use": "在北交所等中小型市值股票市场中筛选潜在高回报标的,特别是在市场整体情绪偏积极的情况下。", "content": "通过分析北交所成分股的表现(如华密新材、富恒新材的涨幅居前),结合其所属板块(如新能源汽车、机器人概念)的市场热点,识别出符合当前主题投资逻辑的个股。同时,关注公司公告中的财务数据(如同惠电子的利润增长超50%),以验证基本面支撑。这种方法特别适合日内交易或短期战术操作,但在选择标的时需警惕高波动性和流动性风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:35:03", "modified_time": "2025-08-11 20:35:03", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3ce08bbf36da44609027958d8db10439", "experience_type": "text", "when_to_use": "在制定季度或半年度财务规划时,基于公司公告的业绩数据进行个股筛选和组合调整。", "content": "分析公司公告中的关键财务指标(如营业收入、归母净利润增长率),并将其与行业平均水平对比。例如,同惠电子的收入和利润均实现双位数增长,而华密新材则出现利润下滑。这种差异化的表现需要结合行业竞争格局和政策环境进一步解读。对于财务规划而言,建议优先配置基本面稳健且有政策支持的标的,同时规避盈利不及预期的个股。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:35:03", "modified_time": "2025-08-11 20:35:03", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "de39225345584567af5f3451f4a7d57d", "experience_type": "text", "when_to_use": "在市场经历前期上涨后进入震荡调整期,且投资者情绪波动较大的情况下,用于评估短期市场走势和资金博弈的影响。", "content": "通过分析市场交投活跃度、资金流向(如北向资金、融资融券余额)以及行业轮动情况,判断市场是否仍处于较高活跃水平。结合政策预期和外部事件(如关税谈判、议息会议等),识别可能加剧波动的不确定性因素,并建议关注结构性机会而非全面趋势性行情。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:36:19", "modified_time": "2025-08-11 20:36:19", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "60538e5266b4421b9f1c2a9b0cc2a8d7", "experience_type": "text", "when_to_use": "在经济周期转换或重大政策节点(如五年规划制定)期间,用于中长期投资策略的制定。", "content": "从宏观经济数据(如制造业PMI)和政策导向出发,聚焦于长期经济结构转型和产业趋势。例如,在“十五五”规划背景下,优先配置科技创新驱动的成长板块(如AI、国防军工)以及受益于反内卷政策的传统行业(如钢铁、煤炭)。同时,考虑高股息资产的安全边际以对冲不确定性风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:36:19", "modified_time": "2025-08-11 20:36:19", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e1da7f29ab674eab92a7989ab943b780", "experience_type": "text", "when_to_use": "在需要进行跨行业估值比较时,尤其是在估值分位数差异显著的情况下,用于筛选具有吸引力的投资标的。", "content": "利用PE(TTM)和PB(LF)的历史分位数,结合当前估值变化幅度,识别估值过高或过低的行业。对于估值分位数较高的行业(如房地产、计算机),需警惕回调风险;而对于估值分位数较低但基本面改善的行业(如农林牧渔、食品饮料),可视为潜在布局机会。此外,动态跟踪二级行业的细分领域表现,捕捉更精准的配置信号。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:36:19", "modified_time": "2025-08-11 20:36:19", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a3d09bd8e511414c84cef476722428c1", "experience_type": "text", "when_to_use": "在政策密集发布期或关键事件落地后,用于快速解读政策对资本市场的直接与间接影响。", "content": "通过梳理政策文件中的关键词汇(如“反内卷”、“增强资本市场吸引力”),提炼出政策主线及其对应的行业受益逻辑。例如,针对“反内卷”概念,重点挖掘供需格局改善的行业(如电力设备、新能源汽车)。同时,结合市场情绪和技术面指标,预判政策落地后的市场反应速度及持续时间。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:36:19", "modified_time": "2025-08-11 20:36:19", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "97f7d4918dd34679856b8eb583271d70", "experience_type": "text", "when_to_use": "在中美贸易谈判或类似双边经济协商期间,进行市场预期管理和投资策略调整。", "content": "在涉及重大国际经贸会谈的场景中(如关税展期、贸易协议等),应密切关注官方声明和谈判进展,并结合历史数据评估其对市场的潜在影响。例如,本次中美经贸会谈推动了关税展期90天,为市场提供了更明确的时间窗口,这表明政策延续性分析和时间敏感型资产配置的重要性。投资者可以在谈判结果公布后,通过动态调整股票、债券和外汇头寸来捕捉短期波动机会,同时为长期战略规划预留空间。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:37:46", "modified_time": "2025-08-11 20:37:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b1e39836aa024f10a7ad6018930d2bcb", "experience_type": "text", "when_to_use": "在居民储蓄率高企、消费与投资意愿低迷的情况下,制定针对零售客户的金融产品推广策略。", "content": "当央行调查数据显示居民储蓄倾向显著上升(如本季度储蓄意愿达63.8%),而消费和投资意愿下降时,金融机构应优先考虑推出低风险、稳定收益的理财产品(如货币基金、定期存款)以吸引保守型客户。同时,可以通过教育性内容(如市场分析报告、投资研讨会)引导客户逐步提升风险偏好,挖掘潜在的投资需求。此外,政策环境的变化(如财政刺激或降息预期)可能成为扭转趋势的关键节点,需保持高度敏感。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:37:46", "modified_time": "2025-08-11 20:37:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "58bf0febe1cf41ca990f6248fd89d4a4", "experience_type": "text", "when_to_use": "在全球主要央行货币政策分歧加剧时,优化跨资产类别的投资组合配置。", "content": "在美联储尚未准备好降息但其他央行可能采取宽松政策的背景下,建议采用多资产分散化策略,重点关注美元指数、美债收益率及新兴市场货币的表现。例如,当美元走强(如最新值98.92,涨幅0.26%)且10年期国债收益率上行时,可适当增加避险资产权重(如黄金、美元计价债券),同时减少对高贝塔值资产(如科技股、新兴市场股票)的敞口。这种基于宏观驱动因素的动态再平衡方法能够有效应对不同经济周期中的不确定性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:37:46", "modified_time": "2025-08-11 20:37:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "cccfbc0162e44d448c89fa386caf58bf", "experience_type": "text", "when_to_use": "在行业监管政策发生重大变化时,快速识别并布局相关领域的主题投资机会。", "content": "例如,在香港金管局宣布实施稳定币发行人监管制度后,资本市场可能迎来新型金融科技公司的上市潮或现有企业转型机遇。此时,可通过深入研究监管框架细节(如牌照申请要求、合规成本)以及行业竞争格局,筛选出受益标的。此外,结合技术进步(如AI大模型发布)和市场需求(如游戏产业扶持政策),可以进一步锁定高成长潜力领域,实现超额收益。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:37:46", "modified_time": "2025-08-11 20:37:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "2ae6ebbfaaa54aeebd4941182c39b529", "experience_type": "text", "when_to_use": "在进行市场回顾和短期投资决策时,特别是在需要快速评估市场趋势的场景中。", "content": "通过分析主要宽基指数的涨跌情况、行业板块表现以及市场成交量变化,可以有效识别市场的短期动向。例如,当主要指数普涨且成交量显著放大时,表明市场情绪乐观,适合关注领涨板块(如国防军工、机械设备等)以捕捉短期机会。同时,下跌板块(如医药生物、银行)可能暗示资金轮动或避险情绪升温,需结合宏观经济数据进一步验证。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:39:00", "modified_time": "2025-08-11 20:39:00", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f6b37f89efbc4f15b4d4da4fccaee5ea", "experience_type": "text", "when_to_use": "在牛市或高波动性市场环境中,用于筛选具有高增长潜力的行业和概念板块。", "content": "在牛市或高波动期,资金往往流向高贝塔值的行业和主题板块。例如,连板、军工集团、航母等概念板块的强势表现通常预示着市场对政策支持或地缘政治事件的高度敏感。投资者可以通过观察涨幅居前的概念板块,结合相关行业的基本面和技术面分析,快速锁定潜在的投资标的,并利用动量策略进行短期布局。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:39:00", "modified_time": "2025-08-11 20:39:00", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5832ea40f7de4a1bad975fe869694923", "experience_type": "text", "when_to_use": "在跨资产类别配置中,尤其是在经济周期转换或板块轮动明显的市场环境下。", "content": "通过对申万一级行业的涨跌幅分析,可以洞察不同资产类别的相对强弱关系。例如,在经济增长放缓阶段,防御性行业(如医药生物)可能表现优于周期性行业(如煤炭、机械设备)。而在经济复苏初期,周期性行业通常率先反弹。因此,投资者应根据经济周期的不同阶段调整资产配置,优先选择与当前经济环境相匹配的行业板块。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:39:00", "modified_time": "2025-08-11 20:39:00", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6fb6df9a98044b96bc1b3b5405ecd6aa", "experience_type": "text", "when_to_use": "在风险提示与投资组合管理中,特别是在市场波动加剧或存在系统性风险的时期。", "content": "通过监测市场整体涨跌分布(如上涨、下跌、持平个股数量)以及成交额变化,可以评估市场的健康度和潜在风险。例如,当市场出现大幅放量但个股涨跌分化严重时,可能预示着市场即将进入调整阶段。此时,投资者应降低仓位或增加对冲工具(如期权、期货)以控制风险。此外,定期跟踪跌幅居前的板块和个股,有助于及时发现潜在的系统性风险信号。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:39:00", "modified_time": "2025-08-11 20:39:00", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1ec86160b56f4883a210610c86b9c7d1", "experience_type": "text", "when_to_use": "在制定长期战略规划时,尤其是针对新兴市场或政策驱动型市场的投资研究。", "content": "在新兴市场或政策驱动型市场中,行业板块的表现往往受到政策导向的强烈影响。例如,军工、机器人、工业互联网等板块的强势表现可能与国家产业升级政策密切相关。因此,在进行长期战略规划时,应重点关注政策扶持领域,并结合技术进步、市场需求等多维度因素,筛选出具备长期增长潜力的投资标的。同时,需警惕政策不确定性带来的潜在风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:39:00", "modified_time": "2025-08-11 20:39:00", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "bb301cb7a98d401285e4cd407e8f2c0f", "experience_type": "text", "when_to_use": "在评估市场趋势和行业轮动时,特别是在中报或年报披露高峰期,需判断哪些板块可能面临业绩验证压力。", "content": "通过分析市盈率的中位数水平及成交量变化,结合宏观经济驱动力(如消费与投资)以及政策导向(如增强资本市场吸引力),可以识别具有长期布局价值的行业。例如,科技成长与周期制造主线通常在经济复苏期表现突出。同时,建议避免追高高估值题材股,尤其是在业绩披露窗口期。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:40:00", "modified_time": "2025-08-11 20:40:00", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0ae855ecd6e341588d1dba6bb38bfa1d", "experience_type": "text", "when_to_use": "当需要制定短期交易策略时,特别是在市场呈现震荡上行特征且某些行业领涨的情况下。", "content": "关注资金流向数据(如净流入/流出行业排名)和盘中热点表现,优先选择涨幅居前且基本面稳健的行业(如通信设备、消费电子、金融等)。同时,注意技术阻力位(如沪指3600点)对市场情绪的影响,并结合尾盘走势确认短期方向。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:40:00", "modified_time": "2025-08-11 20:40:00", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "361014f665a54e8193b010cd06236f3f", "experience_type": "text", "when_to_use": "在全球流动性预期变化(如美联储降息预期升温)影响本地市场时,需评估外资回流的可能性及其对市场的潜在影响。", "content": "利用美元指数和外资流向的相关性分析,结合国内流动性宽松环境(如杠杆资金、私募基金和ETF持续入场),预测外资偏好板块(如蓝筹股和成长股)。此外,关注国际宏观事件对外资风险偏好的影响,适时调整资产配置策略。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:40:00", "modified_time": "2025-08-11 20:40:00", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "03093abde6724e92885cfea23c46f0df", "experience_type": "text", "when_to_use": "在为客户提供投资建议时,特别是针对不同风险偏好的投资者群体,需明确行业评级和个股推荐逻辑。", "content": "基于未来6个月的行业相对沪深300指数的预期涨幅,将行业分为强于大市、同步大市和弱于大市三类;对于个股,则根据相对沪深300的涨幅区间进一步细分为买入、增持、观望和卖出等级别。这种分级方法不仅清晰易懂,还能帮助客户快速理解投资机会与风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:40:00", "modified_time": "2025-08-11 20:40:00", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9516c8e8a2ae49dea324be2b4acf44ac", "experience_type": "text", "when_to_use": "在市场处于放量上涨阶段,需要判断短期市场走势并调整投资组合时使用。", "content": "在指数放量上涨的情况下,应关注板块轮动和资金流向。例如,在本案例中,国防军工、机械设备等周期性行业领涨,而医药生物、商贸零售等防御性行业表现较弱,这表明市场情绪偏向风险偏好。建议结合宏观经济数据(如制造业PMI)和政策信号(如政治局会议定调),评估市场是否具备持续上行动力。同时需警惕高位震荡风险,适时调整仓位至具有基本面支撑的板块,如金融、有色金属和建筑装饰。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:41:05", "modified_time": "2025-08-11 20:41:05", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e7525131e68948509f1a60a76007a025", "experience_type": "text", "when_to_use": "在国内外经济环境不确定性较高时,用于制定跨市场的风险管理策略。", "content": "当面临海外关税规则变化、美国降息路径不确定或全球主要经济体延长加息周期等外部压力时,需特别关注外需承压对国内出口的影响,以及高利率环境对全球经济增速的潜在拖累。此时可采用多资产配置策略,分散单一市场风险。例如,增加黄金或其他避险资产的比例,同时减少对高贝塔值股票的敞口。此外,密切跟踪人民币汇率波动,以应对可能的资本外流压力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:41:05", "modified_time": "2025-08-11 20:41:05", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1b9b689c6ab145c086e7c763ff03c7c3", "experience_type": "text", "when_to_use": "在政策利好密集出台后,需要识别受益行业并优化行业配置时使用。", "content": "当政府发布重大政策(如免费学前教育意见、金融支持新型工业化指导意见)时,应及时分析政策对相关行业的长期影响。例如,免费学前教育政策将直接利好教育类企业,并间接推动消费行业复苏;而金融支持新型工业化的措施则有助于高端制造和科技创新领域的发展。通过筛选政策直接受益且估值合理的标的,可以提前布局结构性机会,同时避免过度炒作的概念板块。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:41:05", "modified_time": "2025-08-11 20:41:05", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3e4756872e1f439f82f85d9f18dae52d", "experience_type": "text", "when_to_use": "在牛市初期或中期,需要确定未来6-12个月的核心持仓方向时使用。", "content": "在牛市初期,通常表现为成交量放大、指数稳步抬升、个股普涨。此时应优先选择基本面扎实、成长性突出且符合国家产业导向的行业进行超配。例如,本案例中提到的机械设备、计算机等行业,不仅契合政策扶持方向,还具备较强的盈利修复预期。同时,考虑到牛市中后期可能出现的风格切换,建议保留一定比例的低估值蓝筹股作为底仓,以平衡组合波动率。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:41:05", "modified_time": "2025-08-11 20:41:05", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "755ec8f311ed4d04b0220a6350f4379d", "experience_type": "text", "when_to_use": "在进行行业配置和资产选择时,特别是在中期战术操作和短期市场波动较大的情况下。", "content": "通过结合中观景气度数据库和定量模型,预测未来4周表现较优的行业。具体方法包括:1)高频跟踪各行业的关键指标(如开工率、价格指数等),识别具有明显上行或下行趋势的领域;2)根据历史数据验证这些指标与未来表现的相关性,并动态调整权重;3)综合考虑宏观经济环境和市场流动性,筛选出符合当前经济复苏阶段和产业趋势的行业,例如科技AI+、消费股估值修复等方向。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:42:18", "modified_time": "2025-08-11 20:42:18", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "aee146119bd44e6d9bd5e4abccc0072c", "experience_type": "text", "when_to_use": "在面对复杂多样的资产类别配置需求时,特别是需要平衡风险暴露和收益潜力的情况下。", "content": "基于经济复苏阶段划分投资主线,将其降维为三个核心方向:1)Deepseek突破与开源引领的科技AI+;2)消费股的估值修复和分层复苏;3)低估红利崛起。针对不同方向,采用差异化策略,比如科技股注重技术创新进展,消费股关注低估值与政策支持,而低估红利则需警惕强势产业趋势对其压制的可能性。此外,强调跨资产类别的联动效应,如恒生互联网作为赛点攻坚中的重要标的。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:42:18", "modified_time": "2025-08-11 20:42:18", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "276f676fef074b47b0979d579312560d", "experience_type": "text", "when_to_use": "在设计长期战略规划或应对危机条件下的资产保值增值问题时。", "content": "全面整合定量分析结果与定性基本面研究,确保两者相互补充。例如,虽然模型可以有效捕捉行业景气度的变动趋势,但必须辅以深入的基本面调研来规避潜在的公司特异性风险。此外,构建多层次的风险管理体系,包括设置止损线、分散化投资以及灵活调整仓位比例,从而增强组合抗风险能力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:42:18", "modified_time": "2025-08-11 20:42:18", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f090bd8042b3490c9926b38dfc2292ae", "experience_type": "text", "when_to_use": "在构建基于ESG的投资策略时,尤其是在需要结合定量分析和风险管理理论的情况下。", "content": "利用马科维兹资产组合理论与ESG风险信息相结合的方法来筛选股票池,可以有效提升投资组合的风险调整后收益。例如,在沪深300指数中应用ESG筛选策略,剔除具有高ESG风险的公司,同时结合IC值高的量化因子进行综合选股,可显著提高夏普比率(如案例中的3.82)。此外,月度调仓的频率有助于及时捕捉市场动态变化,但需注意交易成本的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:43:29", "modified_time": "2025-08-11 20:43:29", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "074ac91ba39942d8987527d1137c8a68", "experience_type": "text", "when_to_use": "在评估舆情对市场情绪及投资表现的影响时,特别是在短期波动较大的市场环境中。", "content": "通过整合ESG舆情数据并将其纳入投资决策框架,可以在一定程度上预测市场情绪变化及其对资产价格的潜在影响。然而,需要注意的是,这种策略可能因舆情噪音而导致负回报(如案例中ESG舆情整合策略的-1%总回报)。因此,建议仅在明确识别出高质量舆情信号且相关性较高的情况下使用,并辅以其他风控措施,如限制单一因子权重或设置止损机制。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:43:29", "modified_time": "2025-08-11 20:43:29", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1c1a04f65fde4af2ad40f18e977c938b", "experience_type": "text", "when_to_use": "在估值处于低位、成交额上升的市场环境下寻找低估资产的机会。", "content": "当万得全A、央企和国企的市盈率及市净率均处于历史低位时(如案例中市盈率分别为20.38、9.88和9.70,市净率分别为1.68、1.03和1.12),表明这些资产可能存在被低估的情况。与此同时,如果成交额持续上升(如案例中万得全A日均成交额达16336亿元),则说明市场资金正在流入,为投资者提供了布局机会。此时应重点关注央国企板块,因为其往往具备较强的抗风险能力,在经济复苏阶段表现更优。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:43:29", "modified_time": "2025-08-11 20:43:29", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "beffbdcd4c7d426a8bf186feef3861d0", "experience_type": "text", "when_to_use": "在碳市场参与政策驱动型投资时,特别是在碳价和成交量出现趋势性增长的背景下。", "content": "全国碳市场的碳排放配额价格和成交量的变化反映了政策导向和市场需求。当碳价呈现稳步上涨趋势(如案例中从前期75.02元/吨降至72.48元/吨但仍保持高位)且成交量维持较高水平时,意味着碳市场活跃度增加,相关企业或将受益于碳交易机制。对于投资者而言,可通过配置与碳市场直接相关的行业(如清洁能源、环保技术等)来获取超额收益,但需警惕政策执行不及预期带来的下行风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:43:29", "modified_time": "2025-08-11 20:43:29", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "2d7f4b1acf004879836219c1e15d6159", "experience_type": "text", "when_to_use": "在评估科技成长股的结构性机会时,特别是在政策预期落地、市场情绪修复至高点且面临阶段性兑现行情的情况下。", "content": "基于风格因子模型,优先关注低估值、弱盈利、小市值的股票组合,并结合8月市场轻指数、重结构的特点,聚焦于具有补涨动力的国产算力和AI应用领域。此外,需警惕短期涨幅过高、缺乏基本面支撑的主题型方向,同时密切跟踪创新药板块的估值分化及CRO业绩回暖带来的长期配置价值。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:44:27", "modified_time": "2025-08-11 20:44:27", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e9eda357603240238a55728650ab347b", "experience_type": "text", "when_to_use": "在分析重大事件(如阅兵)对特定行业(如军工)股价波动的影响时,尤其是在历史规律可能因基本面变化而弱化的条件下。", "content": "通过回顾历次阅兵前军工行业的“冲高—提前兑现—回落”规律,识别资金预期兑现的时间节点(通常为事件前10-15个交易日)。然而,需结合当前军工行业的基本面驱动逻辑,特别是军贸等业绩预期偏强的方向,以规避短期调整风险并捕捉中长期布局机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:44:27", "modified_time": "2025-08-11 20:44:27", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "fcb059403d5e4c76b3d6710569035164", "experience_type": "text", "when_to_use": "在制定行业配置策略时,特别是在AI产业链景气趋势明确、软件应用端密集催化的背景下。", "content": "优先配置AI产业链中具备技术基座支撑的细分领域(如AI+医疗、AI+企服、AI+教育),并关注推理侧算力成本下降对商业化进程的推动作用。同时,结合国产算力性能提升的趋势,重点布局具备确定性需求的国产算力相关标的。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:44:27", "modified_time": "2025-08-11 20:44:27", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ddfce25383a04e0b8cac632f5f787dbb", "experience_type": "text", "when_to_use": "在分析主力资金流向及ETF申购情况,用于判断市场资金偏好和潜在轮动方向时。", "content": "通过追踪主力资金净流入/流出规模及ETF场内净申购金额的变化,识别资金集中流入的行业(如医药生物、港股板块)和机构资金赎回的主要方向(如A股权重指数)。结合短期战术操作,适时调整组合配置以应对市场波动风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:44:27", "modified_time": "2025-08-11 20:44:27", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f18be199ac1340f1b2515b3c41cf7afd", "experience_type": "text", "when_to_use": "在宏观经济政策转向对内,且市场面临经济复苏不确定性的背景下,用于制定投资策略和行业配置建议。", "content": "当政策重心转向对内时(如政治局会议强调实现‘十四五’圆满收官并筹备‘十五五’),应重点关注财政与货币政策的细化落实情况,特别是地方政府专项债发行、结构性货币政策工具的应用。同时,结合PMI数据中的供需端变化(如生产指数、新订单指数回落,价格指数回暖)判断制造业景气度及潜在机会。在此类环境下,优先配置受益于政策支持的科技AI+、消费估值修复和低估红利板块,并警惕市场短期过热带来的波动风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:45:33", "modified_time": "2025-08-11 20:45:33", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "db720948057e4f6f86cef295cd8a5d40", "experience_type": "text", "when_to_use": "在海外主要经济体就业数据不及预期且降息周期可能重启的情况下,用于调整跨境资产配置和外汇风险管理策略。", "content": "通过分析美国非农就业数据(如新增就业人数低于预期、失业率回升)以及FOMC会议声明,评估全球流动性环境的变化趋势。若数据显示劳动力市场需求降温且降息概率上升(例如CME FedWatch工具显示高概率降息),可考虑增加美元计价资产的敞口或利用衍生品对冲汇率波动风险。此外,关注新兴市场因资本流入加速而出现的投资机会,但需密切跟踪地缘冲突和通胀超预期等尾部风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:45:33", "modified_time": "2025-08-11 20:45:33", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1b16bf6545614c078f2be0342f8120a0", "experience_type": "text", "when_to_use": "在行业轮动明显且市场处于阶段性高位时,用于优化中短期组合配置并控制回撤风险。", "content": "在市场破新高后,资金加速进场导致交易驱动型行情加剧波动率放大时,建议采取稳扎稳打的策略。具体而言,将投资主线简化为三个方向:(1) 科技AI相关突破性领域(如Deepseek开源引领的技术进步);(2) 消费股估值修复逻辑(尤其在低估值、利率下行叠加政策催化下);(3) 低估红利板块(其表现高度依赖于强势产业趋势进展)。同时,重视恒生互联网作为跨区域分散风险的标的,在波折中寻找结构性机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:45:33", "modified_time": "2025-08-11 20:45:33", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b606a3cd5a2942d68653b144e6f2b174", "experience_type": "text", "when_to_use": "在评估工业技术领域(如X射线检测设备)的市场增长潜力时,特别是在高景气下游需求驱动的场景中。", "content": "通过分析下游行业(如电子半导体、锂电池、汽车零部件等)的需求趋势和技术升级路径,识别结构性增长机会。同时,关注核心部件(如X射线源)的国产替代进程,评估其对企业的竞争力和利润率的影响。结合订单数据和市场拓展计划,量化内生增长潜力,并考虑外延并购对市场份额和业务边界的扩展作用。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:46:26", "modified_time": "2025-08-11 20:46:26", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5960a0c3b8694c738426d8e84c71430e", "experience_type": "text", "when_to_use": "在研究消费类产品(如可降解餐饮具)的市场规模和渗透率提升潜力时,尤其是在政策驱动和消费升级的背景下。", "content": "利用政策导向(如禁限塑政策)和环保趋势,评估市场需求的增长空间。结合行业数据(如一次性餐具市场规模预测),分析高端市场的竞争格局和头部企业的技术壁垒。重点关注原材料产能提升(如PLA材料)对成本下降的推动作用,以及其对市场普及率的影响。通过客户资源和技术优势,判断企业能否抓住行业升级机遇。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:46:26", "modified_time": "2025-08-11 20:46:26", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "46735100466e42eda1214f5b55d86a03", "experience_type": "text", "when_to_use": "在制定投资组合策略时,特别是针对中小盘股的跨行业主题投资。", "content": "基于宏观经济环境和市场风格轮动(如中小盘优于大盘的表现),筛选具备高成长性和行业催化因素的个股。结合财务指标(如营收增长率、净利润增速)和估值水平,优先选择技术领先、客户资源优质且受益于国产替代的企业。同时,关注公司研发投入和新产品的市场导入进展,以评估长期增长潜力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:46:26", "modified_time": "2025-08-11 20:46:26", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "38dab76fb39a46568da70cfb640809ab", "experience_type": "text", "when_to_use": "在评估企业并购战略的有效性时,特别是在横向拓展与纵向深耕并举的场景中。", "content": "分析企业的并购逻辑是否与其发展战略一致(如日联科技的“横向拓展、纵向深耕”策略)。评估目标公司的技术协同效应(如珠海九源在新能源电能变换领域的布局)和市场拓展潜力。关注并购后的整合能力,尤其是研发团队、产品矩阵和渠道网络的融合效果。通过对比并购前后的财务表现和市场份额变化,验证战略成效。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:46:26", "modified_time": "2025-08-11 20:46:26", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "104a9d809d33404eb35e4176b5b513fa", "experience_type": "text", "when_to_use": "在评估股票市场短期趋势时,特别是在牛市中指数突破关键阻力位的情况下。", "content": "当市场情绪乐观且政策面支持经济增长时(如财政支出向居民端倾斜、贸易谈判取得进展),应采取多头思维并关注技术支撑位。例如,在上证指数重返3600点的背景下,建议以3420点作为短线强支撑,逢低做多。同时需结合行业轮动特征,优先配置领涨板块(如军工、机器人等)。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:47:38", "modified_time": "2025-08-11 20:47:38", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "656983f6dbb0421f9a32e9322159db19", "experience_type": "text", "when_to_use": "在预测美联储货币政策及美元汇率走势时,尤其是在高通胀或经济复苏阶段。", "content": "当美国经济基本面强劲且货币政策空间充足时,战略性看多美元更具性价比。通过CME FedWatch工具分析降息概率路径,可以提前布局美元资产。此外,非美经济体因前期汇率涨幅过大可能面临出口收入下降风险,这进一步强化了美元的吸引力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:47:38", "modified_time": "2025-08-11 20:47:38", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5e6d6326b3b249cab6d0c9cab49c28ea", "experience_type": "text", "when_to_use": "在商品市场企稳回升初期,特别是国内定价商品受政策导向影响较大的情况下。", "content": "在反内卷政策基调未变的前提下,可将重要时间节点(如7月10日低点)视为本轮行情的关键支撑位,并以此为依据逢低做多。文华商品指数显示企稳迹象后,投资者应密切关注政策驱动型商品的表现,例如与新兴产业相关的原材料价格变化。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:47:38", "modified_time": "2025-08-11 20:47:38", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1eb9f39ca93b4cb0970989fa47e285af", "experience_type": "text", "when_to_use": "在制定跨市场投资策略时,尤其是涉及发达市场与新兴市场的对比分析。", "content": "基于“美国例外论”逻辑回归的趋势判断,美股相较于除中国外的其他非美股市具有更优表现潜力。对于全球资产配置而言,建议增加对美股的风险敞口,同时审慎对待欧洲主权信用风险以及地缘政治不确定性带来的潜在冲击。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:47:38", "modified_time": "2025-08-11 20:47:38", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a6a7b17295d64cf8923d82c7cbaaeee1", "experience_type": "text", "when_to_use": "在宏观经济政策分析与资本市场展望中,尤其是在政治局会议或央行议息会议后评估政策方向及其对市场的影响。", "content": "通过解读高层政策信号(如政治局会议和美联储声明),结合经济周期、通胀趋势及就业数据,判断宏观政策的延续性或转向可能性。例如,本次政治局会议强调'反内卷'和产能治理,表明未来可能出台更多行业监管措施;而美联储鸽派信号则暗示降息窗口或将打开。此方法论适用于中期战略规划及资产配置调整。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:48:36", "modified_time": "2025-08-11 20:48:36", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7943fd3fe1a94187bd980055a5157e06", "experience_type": "text", "when_to_use": "在评估特定行业供需动态及价格趋势时,特别是涉及产能过剩或技术迭代较快的领域(如存储器、有色金属)。", "content": "利用行业数据追踪供需变化,并结合政策导向预测价格走势。例如,存储器大厂退出利基型DRAM市场导致供需反转,叠加国产化替代需求,推动价格上涨。类似地,中国对铜冶炼新增产能的限制将改善行业盈利能力。此类分析适合短期战术操作和长期投资主题挖掘。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:48:36", "modified_time": "2025-08-11 20:48:36", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e3fec8f0753d4f3c89a340f9bf38fc87", "experience_type": "text", "when_to_use": "在全球贸易摩擦升级或关税政策变动背景下,评估其对相关商品市场及产业链的冲击。", "content": "分析关税政策直接影响的商品类别及其上下游关系,同时关注国际市场情绪波动。例如,美国对半成品铜征收50%关税引发纽约期铜暴跌,这提示投资者需迅速调整大宗商品头寸并规避相关出口企业风险。该经验适用于日内交易和危机条件下的风险管理。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:48:36", "modified_time": "2025-08-11 20:48:36", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8558ec4287524d0293df0375016c5eec", "experience_type": "text", "when_to_use": "在A股市场板块轮动研究中,特别是在成交量、资金流向及行业表现出现显著分化时。", "content": "综合观察成交额占比、尾盘资金流入情况以及行业涨跌幅,识别当前市场热点及潜在轮动方向。例如,近期钢铁、石油石化等行业领涨,而TMT板块资金流出明显,反映出防御性板块受青睐。此框架可指导短期组合调整和个股选择。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:48:36", "modified_time": "2025-08-11 20:48:36", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1cc0b361d5f14b1baf78c1fc962a2227", "experience_type": "text", "when_to_use": "在快递等服务行业'反内卷'政策推进过程中,评估行业竞争格局优化的可能性及其对企业盈利的影响。", "content": "通过监管政策解读和局部提价现象观察,预判行业从价格战向价值战转变的趋势。例如,国家邮政局反对'内卷式'竞争,部分亏损严重区域已开始提价,预计后续旺季将进一步扩大范围。这种方法适用于中长期财务规划和企业估值模型更新。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:48:36", "modified_time": "2025-08-11 20:48:36", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "31a8167d11bd47aea5c0c4f2f9ca3262", "experience_type": "text", "when_to_use": "在评估中小型企业的市场表现和估值时,尤其是在北交所等新兴交易市场中进行行业轮动分析。", "content": "通过对比不同行业的当日涨跌幅和市盈率分布,识别出高增长潜力的行业(如通信、汽车)以及低估值行业(如交通运输、环保)。这有助于投资者在牛市中优先配置高增长行业,在熊市或横盘市场中选择防御性低估值板块。同时,需关注换手率较高的个股,它们通常具有较高的短期交易机会但伴随较高波动风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:49:28", "modified_time": "2025-08-11 20:49:28", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "decb2edf0edf42ee9650b6c29ac44cb4", "experience_type": "text", "when_to_use": "当需要判断特定市场的流动性状况及其对投资策略的影响时,例如北交所与A股其他板块之间的资金流动趋势分析。", "content": "利用成交额、换手率及市值数据,结合日均成交水平的变化,可以有效衡量市场活跃度。若整体成交额下降且换手率降低,则表明市场情绪可能趋于谨慎,适合采取保守型投资策略;反之,高换手率和大额成交额则提示可能存在短期套利机会,但需警惕过热后的回调风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:49:28", "modified_time": "2025-08-11 20:49:28", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d193f86395d541c1bffd01ddae179e8f", "experience_type": "text", "when_to_use": "在制定基于个股基本面和技术面相结合的投资决策时,特别是针对涨幅或跌幅较大的股票筛选。", "content": "综合考虑个股的当日涨跌幅、市盈率(PE)、营业收入和归母净利润等财务指标,以识别具有吸引力的投资标的。例如,对于市盈率显著高于行业平均水平但营收增速较快的公司,可视为成长型投资目标;而对于市盈率为负值或极低的公司,需进一步分析其盈利能力和潜在风险因素(如政策支持不足、市场竞争加剧等)。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:49:28", "modified_time": "2025-08-11 20:49:28", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b1cab67a8b25405fb0dca7822c5b0b59", "experience_type": "text", "when_to_use": "在评估政策对宏观经济和资本市场的影响时,尤其是在针对人口结构优化或消费提振的长期政策出台后。", "content": "育儿补贴等直接现金补贴政策不仅能降低家庭生育成本,还能通过增加居民可支配收入间接刺激消费。这种政策通常会对内需驱动型经济产生积极影响,特别是在消费占GDP比重较高的经济体中。此外,此类政策的实施往往伴随着市场对未来经济韧性的乐观预期,从而提升风险资产的表现。因此,在分析类似政策时,应关注其对消费、投资意愿的边际改善以及对相关行业(如婴幼儿用品、教育、医疗)的潜在拉动作用。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:50:31", "modified_time": "2025-08-11 20:50:31", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "2ad8882b7f2c4112bdf803e4837094c0", "experience_type": "text", "when_to_use": "在中美贸易谈判或其他双边经贸关系动态可能影响全球市场情绪和资产价格的情况下。", "content": "中美贸易摩擦的缓和不仅会减轻关税担忧,还可能成为股市突破盘整区间的催化剂。投资者行为表明,贸易紧张局势的缓解通常伴随着市场隐含风险溢价下降,进而推动权益市场的估值修复。此外,大型跨国企业供应链多元化战略的成功程度也会影响谈判结果及其对市场的传导效果。因此,在分析此类事件时,需结合关税预期变化、关键行业的议价能力以及市场流动性的边际改善进行综合判断。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:50:31", "modified_time": "2025-08-11 20:50:31", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "de2875fd63684a42818fbf3cead2574a", "experience_type": "text", "when_to_use": "在监测融资余额变动以预测市场趋势,尤其是在高波动期或牛市初期阶段。", "content": "融资余额的增长反映了市场风险偏好的改善和资金参与意愿的增强,是市场情绪的重要先行指标。例如,A股融资余额持续攀升至新高,通常预示着短期内市场仍有上行动力。然而,需要注意的是,融资余额快速增长也可能埋下未来回调的隐患,特别是在市场过热或外部环境突变时。因此,在使用这一指标时,应结合成交量、换手率及板块轮动情况,避免单一依赖融资数据。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:50:31", "modified_time": "2025-08-11 20:50:31", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "70b89356dfed423aaddf228ad92b5f7c", "experience_type": "text", "when_to_use": "在评估特定行业或主题的投资机会,尤其是受益于结构性改革或技术进步的领域。", "content": "反内卷政策的推进能够显著改善部分传统行业的盈利能力,例如能源、材料和公用事业板块。同时,AI算力需求爆发带来的高端PCB供需缺口,为科技制造产业链提供了明确的增长逻辑。对于这类主题性机会,建议优先配置具备技术和规模优势的龙头企业,因为它们更有可能在整合过程中扩大市场份额并提升利润率。此外,还需跟踪相关政策落地进度和下游需求的实际兑现情况,以验证投资假设。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:50:31", "modified_time": "2025-08-11 20:50:31", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8b36d1c512964145a8aafc9c8eaa9ddb", "experience_type": "text", "when_to_use": "在宏观经济政策解读与市场分析结合的场景中,例如发改委发布会后的市场影响评估。", "content": "通过分析政策发布会内容(如“两重”建设、医疗卫生强基工程等)与市场表现数据(如北证50、沪深300指数变化),识别政策对资本市场的短期和中期影响。重点在于将定性政策信息转化为定量市场预期,例如通过政策支持方向推测行业板块轮动趋势。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:51:24", "modified_time": "2025-08-11 20:51:24", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "58f3f597ff324f19ab8bedc39412cdc9", "experience_type": "text", "when_to_use": "在评估新兴行业或特定领域经济数据时,例如海洋经济或文化旅游业的增长潜力分析。", "content": "利用细分行业的经济数据(如海洋生产总值同比增长5.8%、国内居民出游花费增长15.2%)进行横向对比和纵向趋势分析,结合行业动态判断其对相关上市公司盈利能力的影响。同时,关注城乡差异数据(如农村居民出游人次增长30.6%)以捕捉潜在的投资机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:51:24", "modified_time": "2025-08-11 20:51:24", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f8ab63a9aec742d3a4858ad3eb64c69d", "experience_type": "text", "when_to_use": "在个股波动较大且需要快速解读市场情绪的场景中,例如北交所个股涨跌幅前五名的分析。", "content": "通过观察涨幅和跌幅前列的个股及其所属板块(如生物谷的医药电商概念、立方控股的AI智能体标签),结合市场成交额走势判断资金流向和热点切换。特别注意关联公告(如安徽凤凰股东减持)对个股价格的具体驱动因素,并评估其对整体板块的溢出效应。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:51:24", "modified_time": "2025-08-11 20:51:24", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3067b98888314aab82b1ac270be4ce76", "experience_type": "text", "when_to_use": "在并购交易或股权投资决策场景中,例如华光源海收购湖南汉牛物流科技有限公司股权的案例分析。", "content": "从标的公司的业务模式(如钢铁产业链垂直整合)、财务承诺(如未来五年净利润目标)及估值合理性入手,结合大宗商品运输行业的周期性和竞争格局,评估交易的战略价值和潜在风险。同时需考虑轻资产运营模式下的现金流稳定性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:51:24", "modified_time": "2025-08-11 20:51:24", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7415e3cad5b948ada95db6f1baa3e082", "experience_type": "text", "when_to_use": "在制定投资组合调整策略时,尤其是在高波动期或横盘市场的环境下。", "content": "基于市场指数表现(如科创50下跌1.06%、北证50下跌0.23%)以及成交量变化(如北交所成交额减少43.69亿元),优化资产配置比例。优先选择防御性强的板块(如医药电商、智慧城市)作为核心持仓,同时保留一定比例的现金以应对可能的市场反转。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:51:24", "modified_time": "2025-08-11 20:51:24", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ef9cd59a9f3b43e6a5ad00d85ec41cc8", "experience_type": "text", "when_to_use": "在评估行业投资机会时,尤其是在市场调研数据呈现下降趋势的背景下,需识别边际变化较大的行业。", "content": "通过对比周度和月度机构调研数据(如被调研总次数、机构调研家数),可以有效判断哪些行业的关注度正在提升。例如,汽车、电力设备和基础化工行业在同比数据中显示关注度增加,表明这些领域可能受到政策或市场需求的驱动,具备潜在的投资价值。此外,细分行业的增量信息(如面板价格上涨、机床国产化加速)可为行业动态提供深度洞察。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:52:16", "modified_time": "2025-08-11 20:52:16", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "46ed9fd102744579957192e445b58942", "experience_type": "text", "when_to_use": "在个股选择过程中,特别是在市场情绪波动较大或财报静默期期间,需要筛选出近期受到机构频繁调研的公司。", "content": "通过分析个股的调研热度(如被调研总次数和机构调研家数),可以快速锁定市场关注的焦点公司。例如,天龙股份和威力传动因新产品推进和产能扩张而受到机构密集调研,显示出其成长潜力。结合调研纪要中的具体业务进展(如泰国生产基地建设、风电增速器智慧工厂),可进一步验证公司的战略执行能力和市场竞争力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:52:16", "modified_time": "2025-08-11 20:52:16", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e6107d0e468245ce85ad0045162223d2", "experience_type": "text", "when_to_use": "在资产配置或战术调整时,尤其是在不同经济周期或板块轮动明显的市场环境下,需对行业和个股进行多维度交叉验证。", "content": "采用‘行业+个股’双重视角分析方法,可以从宏观到微观全面捕捉市场信号。例如,在月度数据中,机械设备和电子行业持续保持较高调研热度,同时冰轮环境、北方稀土等个股也表现出较强的吸引力。这种交叉验证不仅能帮助投资者把握行业趋势,还能发现具有超额收益潜力的优质标的,从而优化组合配置。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:52:16", "modified_time": "2025-08-11 20:52:16", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c0f46d759bfb41c8a8c38ba470467222", "experience_type": "text", "when_to_use": "在面对复杂市场环境(如高波动性或危机条件)时,需要利用机构调研信息作为基本面研究的重要补充,以降低决策风险。", "content": "机构调研信息因其披露及时性和内容多维性,能够弥补传统财务数据滞后的问题。例如,LCD TV面板价格的小幅下降反映了短期需求降温,但厂商去库存趋势延续可能预示未来价格反弹机会。结合此类增量信息与历史数据对比,可以帮助投资者更准确地预测行业拐点,并制定相应的交易策略。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:52:16", "modified_time": "2025-08-11 20:52:16", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f9db0c6238144455ae202eee1f11ab98", "experience_type": "text", "when_to_use": "在评估国际贸易政策调整对市场影响时,尤其是在中美贸易谈判背景下分析关税变化对全球经济的潜在冲击。", "content": "通过监测关键谈判时间节点(如8月12日关税最后期限)和各国达成新贸易协议的动态,结合宏观经济数据与市场情绪指标,可以有效预测全球市场的不确定性降低或加剧的趋势。此外,应关注特朗普政府政策的历史模式,例如其倾向通过社交媒体释放信号,从而提前布局投资策略。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:53:08", "modified_time": "2025-08-11 20:53:08", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8dde52330dc94fe3a6d0c92c7c80b023", "experience_type": "text", "when_to_use": "在分析区域经济开放政策对特定市场领域(如海南自贸港封关运作)带来的长期投资机会时。", "content": "利用政策文件、基础设施建设进展以及国际贸易单一窗口等软硬件条件作为核心分析依据,结合目标行业(如加工增值内销免关税商品、跨境电商)的增长潜力,识别具有高确定性的细分赛道。同时,需持续跟踪《海南自由贸易港建设总体方案》的实施效果,以判断政策红利的兑现节奏。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:53:08", "modified_time": "2025-08-11 20:53:08", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "71ebde7be6454899a98e649d65ec6ed5", "experience_type": "text", "when_to_use": "在科技驱动型行业中捕捉技术迭代与商业化落地的投资机会时,例如人工智能算力及低空经济相关方向。", "content": "密切跟踪产业端的技术突破(如Kimi发布K2基础大模型、沃兰特获得大额eVTOL订单)和政策端的支持力度(如工信部推动“人工智能+软件”行动),并结合头部企业的市场份额和技术壁垒,评估规模化商业化的可行性。建议优先选择具备明确落地场景且估值合理的标的进行配置。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:53:08", "modified_time": "2025-08-11 20:53:08", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "33247f9ed12c4cffa489d90f70eaddd6", "experience_type": "text", "when_to_use": "在多资产类别配置中优化风险收益比时,特别是在A股市场波动率较低但结构性分化明显的环境下。", "content": "基于换手率、融资余额和板块成交占比等流动性指标,结合行业资金流向(如非银金融、环保板块的资金净流入情况),识别短期战术性操作的机会。同时,对于长期战略规划,可参考年初至今涨幅较高的微盘股和双创板块表现,平衡高成长性与防御性资产的配比。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:53:08", "modified_time": "2025-08-11 20:53:08", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3b0ce3b42f7943d581988fead52ba3b3", "experience_type": "text", "when_to_use": "在评估市场是否处于盈利回升周期之前的估值驱动阶段时,尤其是在行业轮动加速、基本面较弱但市场情绪高涨的情况下。", "content": "通过历史数据分析发现,在全A非金融ROE触底回升前的一个季度到半年内,市场通常表现为估值驱动占主导、行业轮动加快的特征。这一阶段常被误认为是‘水牛’行情,但实际上可能是盈利回升主线的前奏。建议结合工业增加值增速与用电量增速差值、大企业与小企业PMI差异等指标,判断经济自发性反内卷的程度,并关注政策落地后对供给侧相关行业的长期影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:53:59", "modified_time": "2025-08-11 20:53:59", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "aafa6ddf63ee45f78565c116b04496b6", "experience_type": "text", "when_to_use": "在分析海外经济衰退交易信号及其对货币政策(如美联储降息)的影响时,特别是在就业数据大幅修正和制造业PMI分项表现分化的情况下。", "content": "衰退交易并不等同于实际经济衰退,需区分短期扰动与长期趋势。例如,美国非农就业数据下修可能引发市场对经济走弱的担忧,但若新增就业人数及薪资增速边际改善,则表明经济仍有韧性。同时,应关注制造业PMI中物价和库存分项的变化,以及其背后反映的贸易环境稳定性。这些因素或为降息条件成熟提供支撑,并与制造业投资趋势形成共振。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:53:59", "modified_time": "2025-08-11 20:53:59", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e27ad5e92ea74e759f4b2d1668bc0f67", "experience_type": "text", "when_to_use": "在全球贸易谈判结果不确定且潜在关税冲击可能影响市场情绪时,特别是涉及中美贸易关系的背景下。", "content": "尽管贸易问题可能成为市场扰动来源,但其影响幅度取决于关税水平的绝对值和国家间差异。如果新税率普遍低于前期高点且国家间差异缩小,则贸易不稳定性对全球经济预期的影响将减弱。此外,企业可通过转口贸易等方式缓解关税压力。因此,即使谈判未达成协议,市场反应也可能较为有限,不会重现类似4月初的剧烈波动。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:53:59", "modified_time": "2025-08-11 20:53:59", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c843f9cdf20a4e3f9016a3674c182e29", "experience_type": "text", "when_to_use": "在调整期寻找长期配置方向时,尤其是在市场因主题交易回摆而出现阶段性回调的情况下。", "content": "市场调整更多反映交易尺度上的回摆,而非对长期主线的否定。基于国内外经济修复趋势和政策导向,可优先配置受益于海外制造业复苏和国内‘反内卷’政策推进的上游资源品(如铜、铝、石油石化)、资本品(如工程机械、重卡)及中间品(如钢铁)。同时,关注非银金融资产端收益见底带来的机会,以及围绕‘民生’主线的红利型消费领域(如食品饮料、家电和服务型消费)。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:53:59", "modified_time": "2025-08-11 20:53:59", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6820b17232d148ee8ed4d44d826e12e8", "experience_type": "text", "when_to_use": "在分析中小企业并购趋势及政策影响时,特别是在北交所等针对创新型中小企业的资本市场中。", "content": "通过系统性梳理政策导向(如“并购六条”和北交所重组新规),结合交易数据的动态变化,识别并购活跃度的驱动因素。重点关注政策对产业链整合、科技制造领域并购的支持力度,以及小额快速通道等提效机制如何降低交易成本并提升效率。此外,跟踪大额交易案例及其行业分布,以洞察产业升级与资本流向的核心脉络。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:54:51", "modified_time": "2025-08-11 20:54:51", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "33376f9967d449d09b883d123c3b495e", "experience_type": "text", "when_to_use": "在评估企业国际化战略及海外布局相关投资行为时,尤其是在高成长性行业中。", "content": "关注企业在新兴市场或发达市场的子公司设立、合资项目及跨境并购活动,分析其战略布局是否符合全球化需求(如供应链属地化、区域市场辐射)。同时,结合宏观环境(如监管框架、货币风险)和微观动因(如技术引入、市场份额扩张)进行综合判断,确保投资决策与长期发展目标一致。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:54:51", "modified_time": "2025-08-11 20:54:51", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "df2ed162562d4d11a9b62d2378ede2ff", "experience_type": "text", "when_to_use": "在制定基于行业集中度和技术升级逻辑的投资组合调整策略时,特别是在科技制造和高端制造领域。", "content": "利用历史并购数据,识别行业内头部公司主导的大额交易及其对行业格局的影响。优先选择那些通过垂直整合强化供应链安全、横向拓展进入高成长赛道或借助技术创新实现业务转型的标的。同时,量化并购事件对公司财务指标(如ROE、现金流)和估值水平的潜在影响,为投资决策提供支撑。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:54:51", "modified_time": "2025-08-11 20:54:51", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "894d5964e6554ed8b2c99293b38342ff", "experience_type": "text", "when_to_use": "在风险管理过程中,需要对并购项目的审批进度、政策变动及宏观环境变化进行前瞻性预警时。", "content": "建立多维度的风险评估框架,包括政策合规性审查(如标的资产是否满足净利润+ROE门槛)、中介机构责任压实情况,以及宏观经济波动对并购成功率的潜在冲击。同时,定期更新股权事件进展状态(如中止审核、董事会预案阶段),及时捕捉可能导致交易失败的关键信号,并据此调整投资建议。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:54:51", "modified_time": "2025-08-11 20:54:51", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1ad154bc5ed046ce92b1a99900516258", "experience_type": "text", "when_to_use": "在评估半导体设备制造商的财务健康和市场前景时,特别是在分析其研发与资本支出对长期增长潜力的影响时使用。", "content": "通过分析东京电子FY1Q26的财务表现,发现尽管短期销售额和利润下滑,但公司显著增加了研发费用(同比增16.3%)和资本支出(同比增120.2%),用于关键技术如极端激光剥离(XLO)技术的量产线建设和研发中心扩建。这表明,即使在行业周期性低谷期,持续的技术投资是保持长期竞争力的关键。此外,自由现金流和稳定股息政策(派息率50%)显示了公司在短期波动中的财务韧性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:55:52", "modified_time": "2025-08-11 20:55:52", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "154d4402fea94476bf271be946b8ef11", "experience_type": "text", "when_to_use": "在分析市场趋势并预测未来走势时,尤其是在指数处于关键点位(如突破或支撑位)的情况下。", "content": "通过结合技术分析(如分时图、成交量变化)与基本面分析(如政策导向、行业数据),可以更全面地评估市场的短期和中期方向。例如,当沪指突破3600点时,结合放量成交和技术指标确认上行趋势,并辅以政策利好(如政治局会议的稳增长表态)和行业热点(如PEEK材料、银行板块走强),可为后市提供明确的看涨信号。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:56:39", "modified_time": "2025-08-11 20:56:39", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "47a886603a0f43ec88d6f93c9ec4e222", "experience_type": "text", "when_to_use": "在评估行业轮动和板块表现时,特别是在市场热点较为分散的情况下。", "content": "通过对申万行业分类及概念板块的排名分析,识别出表现最强和最弱的行业,并结合宏观经济数据(如PMI回落、新能源车销量增长)和政策导向(如上海支持基础研究措施),判断资金流向和潜在机会。例如,综合、银行等防御性板块领涨,而医药生物、计算机等成长性板块调整,表明市场风险偏好有所下降,但结构性机会依然存在。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:56:39", "modified_time": "2025-08-11 20:56:39", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3401c6f7357a497db139427c9ca1c7a7", "experience_type": "text", "when_to_use": "在进行资产配置决策时,特别是在经济不确定性较高且全球市场联动性增强的背景下。", "content": "通过综合考虑国内外宏观因素(如美国降息路径的不确定性、新关税规则的影响)以及国内政策环境(如稳增长基调、资本市场吸引力提升),建议超配金融、机械设备等受益于政策利好的行业,同时关注TMT等科技创新领域的机会。此外,需警惕海外经济下滑和信用收缩对流动性的冲击,保持组合的灵活性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:56:39", "modified_time": "2025-08-11 20:56:39", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8782e00ba0da4353806f393bc852bb97", "experience_type": "text", "when_to_use": "在制定投资策略时,需要平衡短期交易机会与中长期战略规划。", "content": "利用日内至季度级别的多时间框架分析,捕捉短期情绪驱动的交易机会(如7月新增开户数大幅增长带来的市场活跃度提升),同时基于中长期视角布局结构性主题(如集成电路、生物医药、人工智能等领域的企业基础研究支持政策)。这种多层次的时间跨度分析有助于优化收益风险比。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:56:39", "modified_time": "2025-08-11 20:56:39", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e33a6e2e69fa490e932d281b88063269", "experience_type": "text", "when_to_use": "在评估反内卷政策对市场结构和行业表现的影响时,尤其是在政策初期阶段需要判断哪些行业可能产生超额收益。", "content": "通过分析行业的利润与现金流组合,优先关注仅亏利润但不亏现金流的企业。历史数据显示,在政策初期阶段,这类企业在中长期表现优于既亏利润又亏现金流的公司。例如,2016年煤炭和钢铁行业的案例表明,仅亏利润组在政策实施后2-3个季度表现出更强的抗风险能力与股价弹性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:57:32", "modified_time": "2025-08-11 20:57:32", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3c7fbed451c645f1a4d340a86a225271", "experience_type": "text", "when_to_use": "在市场波动放大、赚钱效应减弱的情况下,需要优化投资组合以应对潜在的短期调整风险。", "content": "结合静态估值水平与市场情绪指标(如涨停家数、一进二成功率)进行综合判断。当大盘PE处于12-20倍区间且ERP接近历史均值-1倍标准差时,市场波动率可能显著上升,建议采取均衡配置策略,避免过度集中于前期强势板块。同时,关注ETF资金流向作为先行信号,及时调整仓位。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:57:32", "modified_time": "2025-08-11 20:57:32", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0e4d35c0f11249bf91e2f9a2851c2b01", "experience_type": "text", "when_to_use": "在主题投资中挖掘具有长期潜力的政策驱动型机会,尤其是涉及五年规划或人口政策方向的领域。", "content": "从政策落地方案和产业支持方向入手,识别直接受益、间接受益和长期小幅受益的细分行业。例如,生育补贴政策不仅利好母婴消费品和儿童医疗健康等直接受益领域,还间接推动亲子娱乐消费和女性消费,并衍生出辅助生殖、儿童保险等长期增长点。建议根据政策实施节奏分阶段布局。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:57:32", "modified_time": "2025-08-11 20:57:32", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e95899409b66416d93934715aaa6295b", "experience_type": "text", "when_to_use": "在供需匹配视角下筛选具备结构性机会的行业,特别是在供给收缩且需求边际改善的背景下。", "content": "利用固定资产周转率、存货增速、资本开支增速等核心指标构建中观比较体系,筛选出供需两端均有利好支撑的行业。例如,当前焦炭、风电设备、白电等行业显示出供给端收缩且需求上行的特征,这些领域可能成为未来超额收益的主要来源。同时需注意淡化基数效应较强的行业数据干扰。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:57:32", "modified_time": "2025-08-11 20:57:32", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3580901ce63140daac863ae932ba9b25", "experience_type": "text", "when_to_use": "在评估成长科技板块的市场表现及潜在风险时,尤其是在牛市或高波动期,需要判断行情是否接近尾声。", "content": "通过构建包含五个预警要素的分析框架(估值百分位、最大涨幅和持续时间、高位股跳水现象、行业扩散及大容量票补涨、交易拥挤度),可以系统性地评估成长科技行情的可持续性。当这些要素中仍有两项或以上未满足时,行情大概率仍将继续演绎。例如,在本轮科技行情中,尽管部分行业估值已接近天花板,但行业扩散和交易拥挤度尚未达到极限,因此预计行情仍将持续。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:58:34", "modified_time": "2025-08-11 20:58:34", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0d3c2ccc53874182bfa13a03d2d20ec2", "experience_type": "text", "when_to_use": "在政策驱动型市场的背景下,如中央政治局会议后对国内政策方向进行展望时,需结合政策基调与市场预期进行综合研判。", "content": "在政策解读中,应重点关注政策的延续性、灵活性和预见性,并结合具体领域的结构性政策调整进行机会挖掘。例如,本次政治局会议中虽然反内卷和地产政策略低于预期,但服务消费和外贸领域可能成为后续政策发力的重点,投资者可据此优化配置方向,聚焦于政策超预期的细分领域。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:58:34", "modified_time": "2025-08-11 20:58:34", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e1d295a03d9a48759920aaa638c98fa7", "experience_type": "text", "when_to_use": "在判断周期性行业的短期走势时,特别是在经济下行压力较大或政策支持力度减弱的情况下,需要结合景气度改善和政策催化进行分析。", "content": "对于传统强周期行业(如钢铁、煤炭、有色等),其行情的核心驱动因素是实际景气度的改善而非单纯的政策预期。当政策预期降温且行业基本面未见明显改善时,相关题材将进入修整期。例如,近期反内卷题材因缺乏景气支撑而进入估值消化阶段,未来需等待政策再起或实际供需状况显著改善才能重启上涨趋势。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:58:34", "modified_time": "2025-08-11 20:58:34", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "44b92ad1b5104c75924fee7e67a4b2ec", "experience_type": "text", "when_to_use": "在分析房地产板块的阶段性估值修复机会时,特别是在景气下行周期或底部区域,需结合政策宽松预期和历史行情模式进行推演。", "content": "房地产板块在景气下行周期中的上涨通常由政策转向或宽松预期驱动,其持续时间和涨幅具有一定的规律性。例如,本轮地产行情属于典型的政策宽松预期带动的估值修复模式,绝对收益空间和相对收益空间均存在一定上限。投资者可通过对比历史行情数据,估算当前行情的剩余空间并制定相应的交易策略。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:58:34", "modified_time": "2025-08-11 20:58:34", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "84bef1d0e1b944a082fe6f16ea851d02", "experience_type": "text", "when_to_use": "在评估股票与债券之间的资产配置价值时,特别是在市场情绪低落或经济复苏信心不足的环境中。", "content": "使用股债相对收益率(如相除和相减两种形式)以及股权风险溢价(ERP)作为核心指标,量化股票相对于债券的配置吸引力。当ERP处于历史高位(例如超过75%分位数)且股债相对收益率接近极端水平时,表明股票资产可能具备较高的长期配置价值。需结合估值水平、市场情绪和投资者行为数据综合判断,避免单一指标误导决策。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:59:23", "modified_time": "2025-08-11 20:59:23", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7fcef34eff8b4349a88eaf6921f147b8", "experience_type": "text", "when_to_use": "在分析市场交易活跃度及潜在过热风险时,尤其是在牛市中后期或短期波动加剧的情况下。", "content": "通过跟踪换手率、成交额占前高比例等高频交易指标,评估市场的交易热度和情绪状态。若换手率持续高于历史中位数(如80%分位以上),同时月频最大日成交额占前高比例接近或超过80%,则可能预示市场进入过热阶段,需警惕回调风险。建议结合行业趋势和个股分布情况进一步验证。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:59:23", "modified_time": "2025-08-11 20:59:23", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "2d6b97702e754d7e86261c4637f1ef8d", "experience_type": "text", "when_to_use": "在监测投资者行为以预测市场底部或顶部时,尤其是面对大规模回购潮或产业资本大幅增减持的情况。", "content": "观察上市公司回购规模和产业资本增减持行为的变化趋势。通常在市场底部区域,回购金额会显著增加(如达到月成交额的0.05%以上),而产业资本净减持规模会缩小甚至转为净增持。这一信号可作为市场触底的重要参考,但需注意其滞后性,并结合其他宏观和微观指标共同分析。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:59:23", "modified_time": "2025-08-11 20:59:23", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3505a53bc402492b8911a3fc037c05c3", "experience_type": "text", "when_to_use": "在进行多资产类别配置时,特别是需要识别不同板块轮动机会或结构性行情的背景下。", "content": "利用宽基指数PE估值的历史分位数和估值分化程度,判断各板块的投资性价比。例如,当创业板指PE估值分位数低于15%且整体市场估值分化程度较高时,可能暗示成长股存在低估机会;而当科创50估值分位数接近历史极值时,则需谨慎对待可能出现的泡沫风险。此外,关注行业MACD值分布,优先选择趋势向好的领域布局。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 20:59:23", "modified_time": "2025-08-11 20:59:23", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "cf9c88a194804e51a1a27d32cf5661f3", "experience_type": "text", "when_to_use": "在评估权益资产配置价值时,尤其是在股、债、商品市场波动加剧且宏观经济周期处于转折点的背景下。", "content": "通过分析股、债、商品市场的跷跷板效应,结合宏观经济周期和政策导向(如反内卷治理、产能优化等),判断基础原材料价格持续上涨的可能性较低,而权益资产更注重行情的持续性。因此,在商品价格回归理性、行业龙头稳定性提升的情况下,优先配置权益资产以捕捉长期收益,特别是在美国就业数据走弱、降息预期升温的环境中,中美利差压力减弱进一步凸显权益资产的配置价值。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:00:03", "modified_time": "2025-08-11 21:00:03", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ab4b8d96f8dc45b091692281011be8c8", "experience_type": "text", "when_to_use": "在利率债市场短期内受到基本面与市场情绪交错驱动、呈现震荡行情时,尤其是需要判断货币政策宽松节奏及债券收益率走势的场景。", "content": "基于PMI数据偏弱以及国债利息征税政策的影响,国内利率债收益率可能下行,但短期内债市仍呈现出“上有顶、下有底”的格局。恢复对国债等债券利息收入的增值税会被动提升老券和信用债吸引力,而中长期机会则需等待进一步宽松信号。此外,当外部约束(如美联储降息预期)缓解时,若银行息差承压或国内基本面进一步恶化,债市将迎来较好的配置窗口。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:00:03", "modified_time": "2025-08-11 21:00:03", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9bde340a8a9c4b2fa810d6af161beb6e", "experience_type": "text", "when_to_use": "在全球宏观经济数据疲软、地缘政治因素影响大宗商品价格波动,特别是原油、黄金和铜等核心商品的价格研判时。", "content": "对于能源类商品(如原油),需关注地缘政治局势(如伊以冲突)、供需平衡(如OPEC+增产预期)以及季节性低点后的反弹空间;对于贵金属(如黄金),应重点跟踪美元指数、美债收益率变化以及通胀黏性,因避险需求和美元贬值预期增强将推动黄金价格上涨;对于工业金属(如铜),则需结合制造业PMI、库存水平及关税政策,综合判断其短期偏弱运行趋势与长期供给紧缺逻辑。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:00:03", "modified_time": "2025-08-11 21:00:03", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8a653a6d5097456a9120dab698e10c23", "experience_type": "text", "when_to_use": "在评估创新型中小企业融资工具选择时,尤其是在轻资产、高成长性企业需要平衡股权稀释与债务压力的情况下。", "content": "定向可转债是一种适合创新型中小企业的融资工具,其“债性保底+股性弹性”的双重属性既能降低综合融资成本,又能通过转股机制优化资本结构。对于北交所的专精特新企业,建议优先考虑设置不低于市场均价120%的转股价格,并避免下修条款,以彰显企业信心并保障投资者权益。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:01:03", "modified_time": "2025-08-11 21:01:03", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "aff3cf845ac44753bdc5050d5e994455", "experience_type": "text", "when_to_use": "在设计投资组合时,希望寻找兼具安全性与收益性的投资品种,特别是在波动性较高的市场环境中。", "content": "定向可转债提供了“进可攻、退可守”的投资特性,在股价上涨时可通过转股获取超额收益,而在股价低迷时则依靠债性兜底提供安全垫。投资者应重点关注转股价格设定、票面利率水平及转股限售期安排,结合市场环境判断潜在收益与风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:01:03", "modified_time": "2025-08-11 21:01:03", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e5adee3e36f24b3ca0e00916b0a4cd01", "experience_type": "text", "when_to_use": "在评估全球市场同步下跌时,尤其是在发达市场与新兴市场均出现显著跌幅的情况下,用于分析潜在的宏观经济驱动因素及其对不同资产类别的影响。", "content": "通过综合分析就业数据、制造业PMI、GDP分项贡献等多维度经济指标,识别经济增长放缓的核心驱动因素,并结合市场情绪(如VIX指数变化、盈利修正幅度)和资金流向(如ETF净流入/流出),判断短期市场波动和长期趋势。例如,在美国非农就业数据疲软、制造业PMI收缩、以及美股乐观情绪回落的情况下,可以预期短期内市场将以震荡调整为主,但中长期仍由经济基本面和企业盈利韧性主导。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:02:11", "modified_time": "2025-08-11 21:02:11", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c1154145db374e88977e2f369b18a94c", "experience_type": "text", "when_to_use": "在分析特定市场(如港股或美股)的资金流动性和潜在增配机会时,特别是在市场回调期间观察南向资金、ETF资金流向及机构/散户行为。", "content": "当市场处于回调阶段时,观察资金流动性的变化可以提供重要的前瞻性信号。例如,港股回调期间南向资金加速流入科技股和医疗保健股,表明部分资金正在利用回调机会加仓。同时,关注ETF资金流向的行业分布(如科技、金融净流入最多,医疗保健净流出最多),可以帮助识别市场共识和分歧点,进而优化资产配置策略。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:02:11", "modified_time": "2025-08-11 21:02:11", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6d12d56c3c6d415fbcb6917549466c29", "experience_type": "text", "when_to_use": "在全球主要经济体实施关税政策或贸易摩擦升级时,用于评估其对相关国家市场风险偏好、行业板块表现及跨境资金流动的影响。", "content": "通过对关税政策的具体实施细节(如税率调整、生效时间)进行量化分析,并结合历史类似事件的市场反应(如标普500未来3个月平均下跌7.5%),可以预测关税政策对市场情绪和资金流动的短期冲击。此外,需特别关注受影响行业的供应链调整成本及需求端变化,以判断长期影响。例如,美国对华对等关税可能压制港股互联网科技股的风险偏好,但同时也为红利型股票提供了避险机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:02:11", "modified_time": "2025-08-11 21:02:11", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "2267d7f3f8af4156a32c51114691b893", "experience_type": "text", "when_to_use": "在美联储货币政策会议后,尤其是出现内部分歧或反对票的情况下,用于解读政策信号对未来利率路径、市场预期及资产价格的影响。", "content": "当美联储议息会议出现内部分歧(如理事投反对票)时,需重点关注会议声明、鲍威尔讲话及反对者的具体理由,结合通胀、就业等核心经济数据,评估政策立场的微妙变化。例如,本次会议两名成员认为应降息25bp,而多数成员认为当前政策适度限制性,这表明未来政策路径存在不确定性,市场可能提前定价偏“鹰”预期,从而加剧短期波动。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:02:11", "modified_time": "2025-08-11 21:02:11", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6086dcc7836b412ebf6188921393142b", "experience_type": "text", "when_to_use": "在评估市场整体估值水平及其未来潜在回报时,特别是在市场波动较大或经济周期转变的背景下。", "content": "通过分析宽基指数的PE、PB偏离度以及ERP(股权风险溢价)的变化趋势,识别当前市场的估值位置与历史均值的偏离程度。例如,当万得全A ERP上升并接近历史均值时,表明市场可能处于相对安全但需警惕进一步下行风险的阶段。结合PEG和PB-ROE框架,选择具有较高配置价值的风格或行业,如低PEG的红利指数或低PB-ROE的成长风格资产。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:03:02", "modified_time": "2025-08-11 21:03:02", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "155cfb1e20fb40e381e7bb92d0137337", "experience_type": "text", "when_to_use": "在进行行业轮动策略设计时,尤其是在市场结构性分化明显的情况下,比如部分行业估值处于历史低位而另一些行业估值偏高。", "content": "利用PE、PB偏离度和历史分位数据,筛选出估值较低且基本面改善预期较强的行业,如非银金融、交通运输、农林牧渔等。同时关注热门概念板块的三年估值分位,避免追高处于历史高位的概念主题(如半导体材料、培育钻石)。此外,结合盈利预期增速调整权重,优先配置盈利上调幅度较大的行业(如医药生物),规避盈利下修压力较大的行业(如计算机)。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:03:02", "modified_time": "2025-08-11 21:03:02", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b4d271087ee245ec8d172c0691393edc", "experience_type": "text", "when_to_use": "在制定跨资产类别投资组合调整方案时,特别是需要平衡风险与收益以适应不同时间跨度的投资目标。", "content": "根据不同资产类别的估值水平及宏观经济环境动态分配资金比例。例如,在金融地产估值高于50%历史分位而科技、消费等行业估值低于50%历史分位时,可适当减少对金融地产的超配,并增加科技和消费领域的布局。对于短期战术操作,关注微盘股、国证2000等表现优异的小市值指数;而对于长期战略规划,则重点考虑成长性和稳定性兼具的宽基指数(如创业板指/沪深300的相对PE-PB变化)。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:03:02", "modified_time": "2025-08-11 21:03:02", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "19e30ac7b6a34da3bb48696915dc77f0", "experience_type": "text", "when_to_use": "在评估国际贸易政策变化对投资组合的影响时,特别是在关税波动较大的市场环境中(如中美贸易谈判期间)。", "content": "通过跟踪和分析关税政策动态(如税率调整、豁免期限延长等),结合具体国家和行业的协议内容,可以量化潜在的经济影响。例如,在美国对等关税政策延期的情况下,维持实际执行税率不变有助于缓解市场不确定性,从而降低短期冲击。此外,需重点关注高附加值行业(如半导体、高端材料)的供应链调整机会,以及可能受益于国产替代的领域。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:03:51", "modified_time": "2025-08-11 21:03:51", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "fc37758296224364bb8f7fd47a76fe36", "experience_type": "text", "when_to_use": "在制定跨区域资产配置策略时,尤其是在发达市场与新兴市场之间存在显著关税差异或监管框架变化的情况下。", "content": "根据不同国家与美国达成的关税协议(如英国10%、越南20%),综合考虑货币因素、本地市场需求及转口贸易限制,优化全球供应链布局。例如,对于出口导向型企业,建议优先选择税率较低且具备长期合作潜力的地区进行投资;同时警惕通过第三地转运规避关税所带来的额外监管风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:03:51", "modified_time": "2025-08-11 21:03:51", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "fa4d9acc85824006935b6bb7aabfc615", "experience_type": "text", "when_to_use": "在预测宏观经济周期中的行业表现,并据此调整中长期战略规划时,尤其是在复杂多变的国际经贸关系背景下。", "content": "利用历史数据对比分析关税冲突高峰期(如2025年4月)与缓和期(如2025年7月)对各行业盈利能力的影响。例如,当关税税率从极端水平(125%)降至相对温和水平(34%)后,应关注具有较强自主研发能力和海外布局优势的硬科技企业,这些公司更有可能在不确定环境中实现超额收益。此外,还需密切跟踪技术进步节奏以验证其商业化可行性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:03:51", "modified_time": "2025-08-11 21:03:51", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3d68abda83d04b3a8a65d4de67622918", "experience_type": "text", "when_to_use": "在评估市场风格(如小盘股与大盘股、成长股与价值股)的相对表现时,特别是在宏观政策真空期或市场不确定性较高时。", "content": "通过滚动30个交易日的相对收益差分析市值和风格轮动趋势,识别小盘股和成长股在正数区间震荡回升的优势。这种分析方法可帮助投资者在不同市场环境下调整资产配置,尤其是在市场风格切换频繁的横盘或低波动期。结合A股市场的成交额变化和市场情绪指标(如涨停/跌停家数),可以进一步验证风格切换的有效性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:04:53", "modified_time": "2025-08-11 21:04:53", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8943916a96bd465189a492385d7b8b4d", "experience_type": "text", "when_to_use": "在跟踪产业趋势交易热点时,特别是在TMT、AI、新能源等高成长性领域出现重大技术突破或政策支持信号时。", "content": "通过监测行业新闻、公司公告和政策动态(如国常会审议通过“人工智能+”行动意见),快速识别创新驱动型产业的投资机会。例如,本周创新药领域的大型BD交易和光模块需求增长为相关板块提供了短期交易机会。建议结合强势题材的周涨幅排名筛选标的,并关注未来1-2个月内可能发布的重磅产品或业绩数据。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:04:53", "modified_time": "2025-08-11 21:04:53", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6dd784a0252f4a8f85770fbd9c1bd9fe", "experience_type": "text", "when_to_use": "在制定中长期战略投资组合时,特别是在大国博弈背景下需要平衡内循环与外循环投资逻辑时。", "content": "围绕“活跃内循环”、“科技自立自强”和“扩大对外开放”三大主题进行行业配置。例如,在内循环视角下,优先布局消费电子、工业自动化设备和环保等To G行业;在科技自立自强方向,重点关注人工智能产业链(如AI Agent、智能终端)、自主可控芯片制造和新型能源技术;在对外开放领域,关注跨境电商和数字贸易。通过分散配置降低单一政策或地缘政治风险的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:04:53", "modified_time": "2025-08-11 21:04:53", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f586f4ac63bf4d19a4ef86746158049e", "experience_type": "text", "when_to_use": "在风险评估和投资决策过程中,特别是在面临宏观经济复苏节奏不及预期、海外降息节奏不确定或地缘政治事件扰动时。", "content": "系统性梳理潜在风险因素,包括国内经济复苏力度、海外货币政策变化及地缘政治“黑天鹅”事件。同时,结合行业基本面分析(如供需波动、技术突破进度和产业政策变化)对个股和板块进行压力测试。建议定期更新风险提示清单,并将其作为投资决策的重要参考依据,以增强组合的抗风险能力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:04:53", "modified_time": "2025-08-11 21:04:53", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6bb4beebeead4d718d2044097b6293bb", "experience_type": "text", "when_to_use": "在构建基于行业轮动的ETF组合时,特别是在需要利用相似预期差因子进行行业筛选的场景下。", "content": "通过计算股票间的相似性(如市盈率、净资产收益率和资产增长率等关键财务指标的欧氏距离),识别出具有潜在超额收益的行业。对筛选出的相似股票进行市值加权的历史收益率分析,进一步优化行业配置。该方法在快速下跌或震荡下行市场环境中表现尤为突出,能够有效捕捉未被充分定价的行业机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:05:49", "modified_time": "2025-08-11 21:05:49", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9e7a44cceb4c4c268142bda226389888", "experience_type": "text", "when_to_use": "为投资者提供基于ETF的主题投资建议时,特别是针对特定行业(如煤炭、有色金属、非银行金融等)的资产配置需求。", "content": "结合行业轮动模型输出的最新配置观点,选择流动性较高且规模较大的行业主题ETF作为标的,同时考虑基金份额、跟踪误差等因素以降低交易成本。此外,明确提示相关风险,包括宏观环境变化、市场波动以及第三方数据不准确性等潜在影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:05:49", "modified_time": "2025-08-11 21:05:49", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "bd61b739e008443eb12e5de46f4c5e25", "experience_type": "text", "when_to_use": "在中期市场趋势分析中,特别是在牛市回调或高位震荡阶段,评估获利盘回吐压力和板块轮动效应。", "content": "当市场处于技术性调整时,需关注前期涨幅较高的板块是否出现回调迹象,并结合成交量变化判断获利盘回吐压力。同时,应根据政策导向(如国家发改委的消费刺激计划)寻找潜在受益板块(如机械设备、大消费、TMT等),以优化投资组合配置。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:06:38", "modified_time": "2025-08-11 21:06:38", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "dde06c9154214e0fb4b1b9baebbe29be", "experience_type": "text", "when_to_use": "在经济数据发布后,特别是涉及通胀指标(如美国PCE物价指数)时,评估其对全球货币政策和市场流动性的影响。", "content": "通过解读关键经济数据(如PCE物价指数同比上涨2.6%),分析其对美联储货币政策预期的影响(如降息预期减弱)。此类信息可用于调整资产配置策略,尤其是在高利率环境下对成长股和周期股的影响评估。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:06:38", "modified_time": "2025-08-11 21:06:38", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "963919c99f884802bb5ac3270cb9d4cc", "experience_type": "text", "when_to_use": "在跨市场分析中,特别是在中美贸易关系紧张或全球经济不确定性增加时,评估外需回落和信用收缩对国内市场的影响。", "content": "结合海外经济超预期下滑和贸易摩擦加剧的风险提示,关注出口相关行业(如制造业、科技板块)可能承压的情况。同时,密切跟踪全球主要经济体的加息周期延长对国内资金面的影响,提前布局防御性资产(如公用事业、必需消费品)。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:06:38", "modified_time": "2025-08-11 21:06:38", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "712675f14efd4ced882185ff2838d2ba", "experience_type": "text", "when_to_use": "在短期交易策略制定中,特别是在日内或短线操作时,利用板块轮动和概念热点捕捉交易机会。", "content": "观察当日领涨和领跌板块(如环保、传媒领涨,石油石化、国防军工领跌),结合市场情绪和技术指标(如成交量缩量3377亿)快速判断热点持续性。优先选择具有政策支持或事件驱动的概念板块(如动物疫苗、DRG/DIP)进行短线操作。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:06:38", "modified_time": "2025-08-11 21:06:38", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9e78e00c2a9f4c319b287acedf1f4a92", "experience_type": "text", "when_to_use": "在长期战略规划中,特别是在经济复苏或转型期,评估政策导向对行业基本面的深远影响。", "content": "深入研究国家政策(如支持消费品以旧换新、培育服务消费新增长点)对相关行业的长期利好作用。例如,消费升级、人工智能家庭消费等领域可能成为未来增长引擎,建议在长期配置中增加相关标的权重。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:06:38", "modified_time": "2025-08-11 21:06:38", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f6225aa7b3fe439bb2a4c1af2b9f25a1", "experience_type": "text", "when_to_use": "在评估中小型创新企业投资机会时,特别是在北交所等新兴市场中寻找具有技术壁垒和政策支持的标的。", "content": "优先关注具备技术壁垒与产业政策共振的企业,尤其是在中报披露期结合财务数据和行业催化因素筛选高增长潜力标的。例如,通过分析固态电池及人工智能相关企业的技术进展与政策支持情况,识别其短期市场表现的驱动因素,并结合PE估值水平判断安全边际。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:07:34", "modified_time": "2025-08-11 21:07:34", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3bbde8370f28473bbea9c31b5ac26dda", "experience_type": "text", "when_to_use": "在流动性风险较高的市场环境中进行资产配置决策,如北交所或类似低流动性板块。", "content": "通过监测日均成交额、换手率等流动性指标的变化趋势,判断市场交投活跃度的边际变化。当量能指标双降时(如本周北证A股日均成交额环比下降19.25%,换手率回落1.06个百分点),应警惕短期调整压力,并适当降低对高波动性标的的敞口,转而选择具备估值安全边际的防御性资产。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:07:34", "modified_time": "2025-08-11 21:07:34", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3f83ec1c7e1a4c43b2667b6164c9b24c", "experience_type": "text", "when_to_use": "需要根据宏观经济政策和国际事件动态调整投资组合时,如美联储利率决议及关税政策调整对全球市场的潜在影响。", "content": "密切关注主要经济体央行的货币政策分歧及其对市场预期的影响。例如,美联储维持利率不变但内部出现罕见分歧时,需重新评估未来降息路径的可能性,并结合核心PCE通胀和非农就业数据预测政策转向的时间点。同时,跟踪关税政策调整对特定行业(如铜制品、新能源汽车)的成本传导效应,以规避相关供应链风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:07:34", "modified_time": "2025-08-11 21:07:34", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5a5cb9d92e204a6cbbc979b760059bed", "experience_type": "text", "when_to_use": "在新股上市初期制定交易策略,尤其是针对首日涨幅较大且换手率极高的标的。", "content": "对于新上市股票,重点关注首日涨幅、振幅、成交额及换手率等关键数据,评估市场情绪和资金博弈情况。例如,鼎佳精密上市首日涨幅达479%,换手率高达89.34%,表明短期内可能存在过度炒作现象。此时可考虑利用高波动性设置止盈止损点,避免追高带来的回撤风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:07:34", "modified_time": "2025-08-11 21:07:34", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "2d54e317d7414fdaba3be2d99eab1c3e", "experience_type": "text", "when_to_use": "在分析债市趋势时,特别是在政策表述或经济数据引发市场预期变化的背景下", "content": "当政策会议中未提及可能引发通胀上升的激进措施(如产能出清或价格干预)时,可以判断市场对通胀预期将减弱,这通常会缓解债市压力并吸引配置盘入场。此外,央行通过逆回购等工具维持流动性稳定的态度,进一步表明利率债有望延续修复趋势。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:08:17", "modified_time": "2025-08-11 21:08:17", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "125893491dd948028f2b7272fc34b927", "experience_type": "text", "when_to_use": "在股市短期策略制定中,尤其是在增量政策真空期或外部扰动加剧的情况下", "content": "在缺乏新增刺激政策且海外不确定性(如关税谈判结果)较高的环境中,建议采取防御性配置策略,聚焦低波动板块(如银行、非银金融)作为指数稳定器,同时关注具有涨价逻辑的稀缺资源(如稀土)布局机会以应对主题轮动。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:08:17", "modified_time": "2025-08-11 21:08:17", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "26ad831085534779b233922563e2d36e", "experience_type": "text", "when_to_use": "在全球宏观多资产配置中,特别是面对地缘政治风险和贸易政策不确定性的场景", "content": "通过动态调整不同地区和资产类别的权重(如A股、美股、黄金及国债ETF),结合宏观经济和货币政策的变化,在风险资产与固收资产之间进行适度再平衡,能够有效提升组合夏普比率,并在高波动环境中实现超额收益。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:08:17", "modified_time": "2025-08-11 21:08:17", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c145e45627eb46a497a78e3f30ddef09", "experience_type": "text", "when_to_use": "在监测市场情绪及资金流向时,尤其是行业轮动速度放缓或交易热情下降的阶段", "content": "利用股债性价比指标(如红利指数和小盘指数的历史分位数)、市场换手率以及两市成交额等数据,可以快速识别市场情绪回落迹象,从而提示投资者降低操作频率,避免追高杀跌行为,同时为低位布局提供参考依据。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:08:17", "modified_time": "2025-08-11 21:08:17", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "94bec329f9dc43e6ab54536a07abc9b9", "experience_type": "text", "when_to_use": "在评估政策驱动型市场机会时,特别是涉及制造业高端化、智能化和绿色化的领域", "content": "当政府发布明确的金融支持政策(如七部门联合发布的《关于金融支持新型工业化的指导意见》)时,应优先关注政策重点扶持的行业和企业。这些行业通常包括集成电路、工业母机、医疗装备等关键技术领域。通过分析政策工具(如结构性货币政策、中长期融资支持、上市绿色通道等),可以识别出受益于政策红利的企业,并将其纳入投资组合。此外,需结合企业的技术突破能力、市场份额和财务健康状况进行综合评估。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:09:11", "modified_time": "2025-08-11 21:09:11", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "95d24e65d4744df3817c9400d54d4524", "experience_type": "text", "when_to_use": "在分析行业竞争动态和国际贸易环境对特定行业的影响时,例如光伏行业", "content": "在面对行业内部恶性竞争或国际贸易摩擦的情况下,应重点关注行业自律倡议和企业合规经营的表现。例如,中国机电商会发布的光伏行业倡议强调了技术创新、品质提升和有序产能扩张的重要性。投资者可以通过评估企业的研发投入、产品差异化程度以及国际市场份额变化,筛选出具有长期竞争力的企业。同时,需警惕因低于成本价出口或贸易壁垒导致的短期盈利波动风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:09:11", "modified_time": "2025-08-11 21:09:11", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "564cb0450bb54aedaf4776ef3c039e50", "experience_type": "text", "when_to_use": "在监测市场表现并制定短期交易策略时,特别是在北交所等中小型资本市场", "content": "通过对市场成交额、换手率和个股涨跌幅的实时监控,可以快速捕捉市场情绪和资金流向的变化。例如,在2025年8月5日的北交所数据中,尽管整体指数涨幅较小(北证50指数上涨0.25%),但部分个股(如华密新材、捷众科技)表现出显著的超额收益。这表明在板块轮动或政策利好驱动下,部分细分领域可能存在短期交易机会。建议结合技术指标(如成交量放大、突破关键阻力位)和基本面信息(如所属板块是否为政策支持领域)进行选股。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:09:11", "modified_time": "2025-08-11 21:09:11", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a3e03a03e4f54cffadd35306c1d6ed40", "experience_type": "text", "when_to_use": "在评估公司公告对公司价值的潜在影响时,尤其是涉及股东减持或知识产权进展", "content": "对于公司公告(如德瑞锂电的股东减持计划或浩淼科技的专利授权),需要区分事件的短期和长期影响。股东减持可能引发市场对公司前景的担忧,但若减持规模有限且不改变公司控制权,则影响较为短暂。而专利授权则可能提升公司的技术壁垒和市场竞争力,但其经济效益转化存在不确定性。因此,应结合公司所在行业的竞争格局、技术应用前景以及管理层的战略规划,全面评估公告的实际意义。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:09:11", "modified_time": "2025-08-11 21:09:11", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ffae5c99132c4b38a7b5578b361134b3", "experience_type": "text", "when_to_use": "在宏观经济政策变动(如价格法修正、货币政策调整)对市场产生重大影响时,进行投资组合的战略性调整。", "content": "通过分析政策法规的修订内容及潜在影响,结合当前市场流动性状况(如MLF操作和逆回购投放),评估其对不同资产类别的短期和长期影响。例如,在央行持续加量投放流动性的背景下,可优先配置利率敏感型资产(如债券)并关注高成长性股票的机会。同时,需根据政策引导方向(如‘反内卷’治理)识别可能受益的行业(如数据要素、电动自行车等)进行布局。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:10:35", "modified_time": "2025-08-11 21:10:35", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "75b04749f82c46a5afdaa59421d043a4", "experience_type": "text", "when_to_use": "在经济周期转折点或特定行业供需关系变化时,制定针对相关板块的战术性交易策略。", "content": "基于生猪产业座谈会透露的信息,结合季节性供给收缩窗口和政策调控意图,判断猪价上行趋势,并将此作为布局农业板块的切入点。类似地,对于其他周期性行业,可通过跟踪产能利用率、库存水平和政策导向来预测价格走势。建议采用分批建仓的方式以降低风险,同时设置动态止盈止损点以应对市场波动。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:10:35", "modified_time": "2025-08-11 21:10:35", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "cddb22c51791447c8fc5e66e09ac77e5", "experience_type": "text", "when_to_use": "在全球范围内寻找新兴技术驱动的投资机会,尤其是在消费电子、智能硬件等领域。", "content": "通过监测电商平台数据和技术迭代进展(如AI眼镜销量爆发式增长),提前锁定具有颠覆性创新潜力的细分赛道。此外,应关注重磅新品发布节点及其对产业链上下游的拉动效应。例如,随着OakleyMetaHSTN和小米AI眼镜等产品放量,可以重点布局光学元件、传感器及相关制造企业。同时,需警惕市场竞争加剧带来的估值泡沫风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:10:35", "modified_time": "2025-08-11 21:10:35", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "bfd0c31fef8140db969275b6a15b53ef", "experience_type": "text", "when_to_use": "在市场情绪波动较大或资金流向发生显著变化时,优化资金管理与风险控制。", "content": "利用成交额、换手率和融资余额等高频数据监控市场热度,当观察到成交量持续放大且融资余额快速攀升时,需警惕潜在回调风险。此时应适当降低仓位,增加防御性资产配置比例(如公用事业、医药生物)。同时,可根据尾盘资金流向捕捉短线交易机会,但需严格控制单笔交易规模,避免过度暴露于单一标的。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:10:35", "modified_time": "2025-08-11 21:10:35", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "57e2b4bcc2a44489980c2bc031d4d5bb", "experience_type": "text", "when_to_use": "在评估消费类行业(如零售、服装、家电等)的市场表现时,特别是在经济复苏阶段或政策刺激环境下。", "content": "通过分析宏观政策对消费者行为的影响(如以旧换新补贴、关税政策),结合细分行业的销售数据(如社会零售总额、品类增长率及渠道表现),可以预测需求波动和企业业绩前景。此外,需关注高基数效应和透支需求的风险,特别是在政策支持减弱或结束时,行业可能面临较大的下行压力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:11:40", "modified_time": "2025-08-11 21:11:40", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5fb2ebcc296d468d9146304dc395cedf", "experience_type": "text", "when_to_use": "在研究具有全球化布局的企业时,特别是面对国际贸易摩擦或关税政策变化的情境下。", "content": "评估企业应对关税风险的能力,包括其供应链灵活性、生产地多元化策略以及成本转嫁能力。同时,关注企业在新兴市场的布局进展,这些市场往往能提供更高的增长潜力和缓冲空间。对于成熟市场,则需分析其产品创新和技术优势是否能够维持竞争力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:11:40", "modified_time": "2025-08-11 21:11:40", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "40ed6d33c36a4a2687ac714734898f83", "experience_type": "text", "when_to_use": "在选择投资标的时,尤其是在行业周期性下行但头部企业仍具备较强竞争力的情况下。", "content": "优先选择那些具备多元化品牌矩阵、渠道优势和创新能力的龙头企业。即使整体行业承压,这些公司通常可以通过高端化、定制化产品或拓展海外市场来实现超额收益。此外,在估值较低时关注回购计划,这可能是股价支撑的重要信号。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:11:40", "modified_time": "2025-08-11 21:11:40", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5e522cc5c20d48389f6d6ed7207b1e67", "experience_type": "text", "when_to_use": "在判断潮玩、黄金珠宝等非必需消费品的增长潜力时,特别是在年轻消费者偏好快速变化的背景下。", "content": "利用货币供应指标(如M2增长率)作为领先指标,预判黄金珠宝等投资属性较强的消费品的销售趋势。同时,关注IP开发、粉丝互动和海外扩张的正循环,特别是在欧美和东南亚市场深化本地化策略的企业,其收入来源将更加多元化,并能够抵御单一市场波动。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:11:40", "modified_time": "2025-08-11 21:11:40", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "11f439d489ee4dccb67d8b5ad7d8a888", "experience_type": "text", "when_to_use": "在分析市场是否具备进入全面慢牛趋势的条件时,尤其是在评估基本面、分红和流动性等核心驱动因素的情况下。", "content": "成功识别全面慢牛趋势需要从三个关键维度进行综合评估:(1)基本面走强,包括企业盈利持续上升以及宏观经济指标如GDP增速、零售总额增速和制造业PMI的高位运行;(2)高分红水平,观察股利支付与股价走势的相关性,确保分红规模和分红率稳步提升;(3)流动性宽松环境,尤其是低利率和通胀水平较低的背景。通过对比历史数据和当前市场状况,可以判断市场是否具备开启全面慢牛的条件。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:12:40", "modified_time": "2025-08-11 21:12:40", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ca3b3abfb64f45d9b7fe4c6df2e261fb", "experience_type": "text", "when_to_use": "在制定短期行业配置策略时,尤其是在科技成长和周期板块之间进行选择,并结合估值性价比和景气度筛选行业。", "content": "短期行业配置应基于政策扶持方向和高景气行业的轮动规律进行筛选。(1)科技成长领域优先考虑政策支持和技术创新驱动的行业,如AI应用相关的计算机、传媒、通信和半导体;(2)周期行业则关注受益于反内卷政策和盈利预期改善的领域,如电新、有色金属、化工和大金融;(3)同时结合估值分位数和情绪指标(如成交额占比和换手率)筛选性价比高的标的。通过动态跟踪产业趋势和政策导向,能够优化行业配置的超额收益。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:12:40", "modified_time": "2025-08-11 21:12:40", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a75af2dfe6f546d59842cc7dab5e7115", "experience_type": "text", "when_to_use": "在分析机构调研数据以识别潜在投资标的时,特别是在市场信息不对称或需要快速筛选优质公司的情况下。", "content": "通过分析近30天和近5天的机构调研数据,结合评级机构数量、财务表现(如归母净利润增长)以及行业热度,可以有效识别出具有高关注度且基本面良好的公司。例如,沪电股份、燕京啤酒和京东方A因其较高的调研热度和强劲的财务表现成为值得关注的标的。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:13:40", "modified_time": "2025-08-11 21:13:40", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "78031167b58849b88ba0901ffdfc54c6", "experience_type": "text", "when_to_use": "在评估重要股东增持行为对股价可能产生的影响时,尤其是在市场波动较大或投资者信心不足的情况下。", "content": "优先关注评级机构家数大于10家且拟增持金额占市值比例超过1%的公司。这类增持行为通常表明大股东对公司未来发展的高度信心,并可能对股价形成支撑。例如,新集能源、隧道股份等公司在增持比例和机构背书方面表现出色,值得纳入投资组合。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:13:40", "modified_time": "2025-08-11 21:13:40", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "000dcefc5c5e4bb1a6bde7ea2420c828", "experience_type": "text", "when_to_use": "在制定基于公司回购策略的投资决策时,特别是当市场处于低迷阶段或个股估值被低估的情况下。", "content": "重点关注预计回购金额占预案日市值比例大于1%且回购进度明确的公司,尤其是处于董事会预案阶段的标的。这些公司往往希望通过回购传递积极信号并提升每股收益。例如,嘉益股份、海兴电力等公司在回购规模和执行进度上均具备吸引力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:13:40", "modified_time": "2025-08-11 21:13:40", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e81f764554b845fab1fd9d8b0d201218", "experience_type": "text", "when_to_use": "在判断行业资金流向以优化资产配置时,特别是在宏观环境变化导致资金轮动频繁的情况下。", "content": "利用申万一级行业的资金净流入数据,结合短期(周度)与中期(月度)趋势,可以捕捉到资金偏好的转变。例如,近期建筑装饰、交通运输等行业获得显著资金流入,表明相关板块可能存在阶段性机会,可据此调整行业配置权重。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:13:40", "modified_time": "2025-08-11 21:13:40", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e30f3b5d5906425da7635cf381eebdc2", "experience_type": "text", "when_to_use": "在进行市场趋势分析时,尤其是在牛市中评估指数表现和板块轮动的潜力。", "content": "通过综合指数涨跌幅、板块表现以及市场热点分布,识别短期强势板块和潜在回调风险。例如,当市场整体上涨但部分行业表现疲软时,应警惕获利盘回吐压力,并优先关注如国防军工、机械设备等表现出色的板块作为战术配置方向。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:14:37", "modified_time": "2025-08-11 21:14:37", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "2e5e38bb2908473ca1501a4d62a47311", "experience_type": "text", "when_to_use": "在经济政策或国际贸易环境变化对金融市场产生影响的情境下,制定投资策略并评估相关风险。", "content": "结合宏观经济数据与政策动态(如税收优惠政策、关税调整)预测其对特定行业(如出口导向型产业)的影响。同时,需考虑全球主要经济体货币政策延长期限可能带来的流动性紧缩效应,建议采取防御性资产配置以降低外部冲击风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:14:37", "modified_time": "2025-08-11 21:14:37", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7b2de8fa74954beeac95456b133d6ac2", "experience_type": "text", "when_to_use": "在跨周期视角下为客户提供财务规划服务,特别是在中期组合调整阶段。", "content": "基于当前市场的技术性调整压力和支撑逻辑,平衡进攻型和防守型资产的比例。推荐择机布局机械设备、公用事业等具有稳定现金流预期的行业,同时保留一定比例的现金或高流动性资产以应对高波动期的不确定性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:14:37", "modified_time": "2025-08-11 21:14:37", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5d7a153cea814d33a666eced2820db83", "experience_type": "text", "when_to_use": "在新兴市场国家开展投资研究时,需要特别关注本地监管框架及货币因素。", "content": "针对新兴市场特有的监管政策和汇率波动,建立多层次的风险监控体系。例如,在中国A股市场中,可以通过跟踪新型政策性金融工具的落地情况及其对资金面的提振作用,捕捉超额收益机会,同时密切监测海外信用收缩引发的系统性风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:14:37", "modified_time": "2025-08-11 21:14:37", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ee807411c8464e3fbdfedccb8e07e402", "experience_type": "text", "when_to_use": "在评估市场情绪对短期资产价格波动的影响时,特别是在政策预期调整或宏观经济事件后的情绪变化分析中。", "content": "通过构建和跟踪个人投资者情绪指数(如基于社交媒体、论坛讨论或融资盘数据),结合历史关联性分析,可以有效预测市场短期内的走势。当情绪指数进入极端区间(如过度乐观或消极)时,需警惕市场反转的可能性。此外,应结合融资盘活跃度等高频数据验证情绪信号的有效性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:15:29", "modified_time": "2025-08-11 21:15:29", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "586b5dd7770e4f2c9151751cf85437b0", "experience_type": "text", "when_to_use": "在分析行业轮动速度与强度以判断市场主线机会时,尤其是在横盘震荡或轮动加速的市场环境中。", "content": "采用量化方法衡量行业轮动的速度(如涨跌幅排名变化)和强度(如相对收益变动标准差)。历史数据显示,“高速度低强度”的轮动区间通常伴随指数横盘震荡,持续时间约为2个月。在此期间,建议关注轮动速度下降后的潜在主线板块,尤其是具备景气逻辑支撑的行业(如医药生物、通信等)。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:15:29", "modified_time": "2025-08-11 21:15:29", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9e734f3a286746178813ba8d1ef5f445", "experience_type": "text", "when_to_use": "在评估红利资产的投资性价比时,特别是在无风险利率下行或市场偏好防御性资产的背景下。", "content": "利用跨资产红利比价模型,将红利股收益率拆解为无风险利率、本金风险补偿和股债差异补偿三部分。当股债差异补偿降至接近阈值(如1%)时,表明红利资产的性价比可能不足,需警惕后续上涨动力减弱的风险。同时,关注分红政策变化对股息率的潜在影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:15:29", "modified_time": "2025-08-11 21:15:29", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5d3eb0df81954d9985735c9441fccb15", "experience_type": "text", "when_to_use": "在制定中期资产配置策略时,特别是在政策预期落地后市场缺乏明确方向的情况下。", "content": "根据政策周期和市场情绪的变化,识别主导交易逻辑的切换点。例如,在“反内卷”交易情绪退潮后,需求端复苏将成为关键驱动因素。此时应优先配置基本面改善且估值合理的成长性资产(如AI应用、算力链、创新药等),并灵活调整仓位以应对潜在的市场真空期。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:15:29", "modified_time": "2025-08-11 21:15:29", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e57a302eb5f04f379d8e599bfc9fbce9", "experience_type": "text", "when_to_use": "在评估新兴市场中的数字经济相关投资机会时,尤其是在政策支持和技术驱动的背景下。", "content": "通过分析海南省发布的《现代化产业体系三年行动方案》,可以识别出数字经济核心产业(如区块链、AI、大数据)将成为未来经济增长的重要驱动力。投资决策应关注政策导向明确、产业集群效应显著的区域和行业,例如海南的数字经济产业集群。此外,需结合数据要素市场的发展趋势,评估目标企业在算力产业、数据安全和数字化应用场景中的竞争力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:16:32", "modified_time": "2025-08-11 21:16:32", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "aa3cc0116acb45fa994ace6f58cd763c", "experience_type": "text", "when_to_use": "在牛市中寻找高增长潜力个股,特别是军工和AI硬件板块表现强势的市场环境。", "content": "根据北证50指数的表现和个股涨跌幅数据,军工、AI硬件等板块在市场强势时往往表现出更高的弹性。投资者可以通过筛选具有多重概念标签(如新能源汽车、军民融合、专精特新)的公司,结合其主营业务与政策支持方向,锁定高成长性标的。同时,需关注成交额变化以判断市场热度和资金流向。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:16:32", "modified_time": "2025-08-11 21:16:32", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e75a8d909a1d4df5b46c5cd81b3ca567", "experience_type": "text", "when_to_use": "在服务贸易快速增长的背景下,评估知识密集型服务行业的投资价值。", "content": "商务部数据显示,旅行服务和知识密集型服务进出口均呈现强劲增长,尤其是电信计算机和信息服务领域。投资者可优先关注出口增速高于进口增速的细分行业,这些领域可能受益于全球需求扩张和技术升级。此外,知识密集型服务的顺差扩大表明中国在该领域的国际竞争力增强,相关企业具备长期投资价值。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:16:32", "modified_time": "2025-08-11 21:16:32", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "889763a2e091418b921384e085d14948", "experience_type": "text", "when_to_use": "在机械工业稳增长预期下,选择具有优质供给能力和政策支持的龙头企业。", "content": "机械工业联合会的数据表明,汽车和电气机械行业是机械工业增长的主要驱动力。投资者应重点关注工信部即将出台的稳增长工作方案中提到的重点领域,例如高端装备制造和新能源汽车产业链。同时,需结合行业全年增速预测(如5.5%),选择估值合理且具备技术壁垒的龙头企业进行配置。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:16:32", "modified_time": "2025-08-11 21:16:32", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "bfebbff6730243849289c774ae9b1b4d", "experience_type": "text", "when_to_use": "在风险提示中评估个股盈利不及预期的可能性,特别是在行业竞争加剧或政策不确定性较高的情况下。", "content": "报告中提到的风险因素(如贸易摩擦、政策不及预期)提醒投资者需对个股的基本面保持高度敏感。建议采用情景分析法,模拟不同宏观经济和行业条件下企业的盈利能力,并结合行业动态和公司公告(如武器装备质量管理体系认证、新产品入选名单)验证其抗风险能力。此外,分散投资组合有助于降低单一风险事件的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:16:32", "modified_time": "2025-08-11 21:16:32", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d1072b0bbe014313b1bf5223e5cc79e3", "experience_type": "text", "when_to_use": "在指数基金调仓窗口期临近时,评估潜在的市场波动性和投资机会。", "content": "通过分析北证50指数样本股的定期调整规则(如基于市值和流动性排名的筛选机制),识别即将被调入或调出的公司。这些调整通常会导致被动型指数基金进行相应买卖操作,从而引发短期价格波动。投资者可以利用这一信息,在调仓生效日前后布局相关股票,获取交易性收益或规避风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:17:27", "modified_time": "2025-08-11 21:17:27", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "11cb976e4c364b43aba389463faf615c", "experience_type": "text", "when_to_use": "在高估值环境中寻找具有长期配置潜力的稀缺性标的。", "content": "当整体市场估值偏高时,应优先关注那些具备新型生产力、技术壁垒或行业领先地位的公司,并结合其未来盈利增长预期进行深入分析。例如,报告中提到的德源药业等公司,尽管当前PE较高,但其营收和利润增速预测显示其估值可能逐步回归合理区间。这种方法特别适用于希望平衡α与β收益的中长期投资者。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:17:27", "modified_time": "2025-08-11 21:17:27", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "90bcb991445248baa2e8f12e33061953", "experience_type": "text", "when_to_use": "针对新上市企业,快速判断其投资价值及市场表现潜力。", "content": "根据历史数据统计,北交所新股首日涨幅均值显著高于传统板块,且发行市盈率较低。因此,对于新上市企业,可通过分析其稀缺性、行业地位以及定价合理性来预估首日表现。同时,考虑到部分新股可能存在认知不足的情况,可进一步挖掘未被充分发现的价值,尤其是在上市初期资金关注度较低时介入。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:17:27", "modified_time": "2025-08-11 21:17:27", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7f6eb44dcdc04113b45c075d7ad47aa2", "experience_type": "text", "when_to_use": "在不同经济周期阶段优化资产配置策略。", "content": "报告指出,北交所双指数(北证50和北证专精特新指数)在2025年取得了优于主要宽基指数的表现,这表明中小型创新型企业可能在特定经济环境下展现出更强的韧性。因此,在经济增长放缓或转型期,建议增加对代表新兴产业方向的小市值优质公司的配置比例,以捕捉结构性机会,同时控制组合的整体风险暴露。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:17:27", "modified_time": "2025-08-11 21:17:27", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ac76a19bb9654acaaa743d431b4d3bc4", "experience_type": "text", "when_to_use": "在评估市场整体估值和风险溢价水平时,特别是在需要判断市场是否处于正常回报区域或低估状态的情况下。", "content": "通过计算宽基指数(如中证全指、上证指数等)的风险溢价百分位和市净率百分位,结合历史数据进行均值回归分析,可以有效识别市场的估值状态。例如,当风险溢价百分位处于60%-80%区间且市净率百分位低于50%时,通常表明市场处于正常回报区域但估值偏低,适合逐步布局低估资产。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:18:13", "modified_time": "2025-08-11 21:18:13", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "44c43e70f7c140df9a31ddd75a7012d5", "experience_type": "text", "when_to_use": "在分析市场风格轮动趋势时,尤其是在成长与价值、大市值与小市值风格切换的判断中。", "content": "通过对比不同风格指数(如价值风格代理指数与成长风格代理指数)的超额收益表现,可以识别占优风格。例如,若近6个月成长风格显著跑赢价值风格,且小市值风格优于大市值风格,则应优先配置成长型和小市值标的,并定期跟踪风格轮动的变化。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:18:13", "modified_time": "2025-08-11 21:18:13", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3eaba43cd5324966973cae174b8a08bd", "experience_type": "text", "when_to_use": "在行业/主题指数轮动策略中,特别是低估值轮动和双动量轮动的选择场景下。", "content": "对于低估值轮动策略,选择标的池中市盈率或市净率最低的行业/主题指数进行投资,利用估值均值回归逻辑获取收益;对于双动量轮动策略,筛选同时具备时序动量和截面动量优势的行业/主题指数,追随市场趋势以增强收益。两种策略可结合投资者偏好灵活调整。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:18:13", "modified_time": "2025-08-11 21:18:13", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f258e25f77cc43b58f781d93a1f0beb3", "experience_type": "text", "when_to_use": "在评估可转债的投资价值及属性分类时,特别是在股债市场表现分化明显的环境中。", "content": "通过比较中证转债与中证全指的超额收益,以及偏债性、偏股性和股债均衡型可转债的表现,可以判断当前市场环境下更适合配置哪类可转债。例如,当偏股性可转债表现显著优于其他类型时,建议优先关注偏股性标的,以捕捉权益市场的上涨潜力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:18:13", "modified_time": "2025-08-11 21:18:13", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3a75a29c537a4883ad1ed901b2eb9a47", "experience_type": "text", "when_to_use": "在分析全球宏观经济政策对资本市场的影响时,特别是在涉及贸易关税、货币政策调整等重大事件后。", "content": "通过结合国内外政策动态(如政治局会议、美联储决策)与市场反应(如股指、汇率波动),识别政策传导机制及其对不同资产类别的短期和长期影响。特别关注政策的'新老划断'原则以及其对存量和增量市场的差异化作用,以优化投资组合配置。例如,当恢复征收国债利息增值税时,需评估其对机构投资者行为的潜在影响,并提前调整利率债仓位。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:19:16", "modified_time": "2025-08-11 21:19:16", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "2ba85a2aff1f4bf4b5eda745857e7ea5", "experience_type": "text", "when_to_use": "在评估地缘政治风险或贸易摩擦升级对大宗商品市场的冲击时,尤其是原油、贵金属和工业金属的价格波动。", "content": "综合分析供给端因素(如OPEC+增产计划)和需求端变化(如制造业PMI数据),结合历史价格弹性模型预测商品价格走势。同时,利用避险资产(如黄金)与风险资产之间的负相关性,构建跨资产对冲策略。例如,在特朗普签署新一轮'对等关税'后,可通过增加黄金持仓来对冲潜在的市场不确定性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:19:16", "modified_time": "2025-08-11 21:19:16", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "814b04442a534c66a741869c3e5a561d", "experience_type": "text", "when_to_use": "在设计基于经济周期阶段的投资策略时,尤其是在横盘市场或高波动期寻找相对稳健的收益来源。", "content": "依据PMI、非农就业等领先指标判断经济所处周期,并据此选择适合的资产类别进行布局。例如,在制造业PMI连续低于荣枯线且新订单指数回落的情况下,优先考虑防御性板块(如必需消费品)及固定收益产品;同时,挖掘可转债市场中的结构性机会,以平衡风险与回报。此外,密切关注财政政策发力方向(如育儿补贴、城市更新),捕捉相关主题投资机遇。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:19:16", "modified_time": "2025-08-11 21:19:16", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3381e2bc96d649b88d220eac22534051", "experience_type": "text", "when_to_use": "在制定外汇交易策略时,特别是在美元指数反弹或人民币贬值压力抬头的背景下。", "content": "通过跟踪美元指数期货多空对比、FRA-OIS利差等流动性指标,结合中美经贸谈判进展与IMF全球经济展望,预判汇率趋势。例如,当美元因特朗普关税政策而走强时,应警惕人民币贬值压力,并适时调整跨境资金流动敞口。同时,利用离岸-在岸人民币价差扩大窗口,实施套利操作以增强收益。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:19:16", "modified_time": "2025-08-11 21:19:16", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "96b74e7cd7a643bd825af1157b979283", "experience_type": "text", "when_to_use": "在评估银行股的股息率变化趋势时,特别是在分红政策调整或派息频率增加的情况下。", "content": "银行股息率受近12个月累计分红金额边际变化的影响显著。当分红规模大幅增加或减少时,股息率会出现跳跃式变化,且变化幅度与分红金额的边际变动呈线性关系(每变动1亿元引起股息率百万分之6的变化)。因此,在分析银行股息率时,需精确追踪分红时间点和金额,结合历史分红节奏预测未来股息率的潜在提升空间。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:20:09", "modified_time": "2025-08-11 21:20:09", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "4e08524af0c143979f84041ff1744749", "experience_type": "text", "when_to_use": "在构建基于ESG的投资策略时,尤其是在市场波动性较高且投资者关注非财务风险因素的场景下(如熊市或危机条件)。", "content": "结合ESG因子与马科维兹资产组合理论可以有效提升投资组合的风险调整后收益。通过筛选具有优异ESG表现的标的,并动态整合舆情数据,可以在市场下行期间显著降低回撤风险,同时捕捉超额收益机会。例如,本周ESG舆情整合策略在沪深300下跌1.75%的情况下实现了1.58%的超额收益,表明舆情信息对增量风险识别具有重要价值。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:21:06", "modified_time": "2025-08-11 21:21:06", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d6c5d8e773454e108c03bacc2d5f2cec", "experience_type": "text", "when_to_use": "在设计复杂度较高的高级交易策略时,特别是针对机构客户提供的定制化解决方案。", "content": "利用Alpha、Beta、Sharpe比率以及信息比率等多维度指标进行深度量化分析,可以全面衡量策略的系统性风险暴露与超额收益能力。例如,ESG舆情整合策略在近一年的Alpha值达到32%,表明其在剔除市场整体影响后仍具备较强的独立盈利能力。这种精细化分析框架不仅适用于股票类资产,还可推广至固定收益、大宗商品等其他资产类别,满足资深从业者的需求。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:21:06", "modified_time": "2025-08-11 21:21:06", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0ec2eab6bfcb4ff480c9e7119f9243dd", "experience_type": "text", "when_to_use": "在宏观经济政策分析与投资组合调整中,特别是在政府出台重大经济政策或改革措施时。", "content": "通过跟踪和解读国家层面的政策发布(如货币政策、财政政策及产业支持政策),结合市场反应(如利率变动、资金流向及行业板块表现),识别政策对资本市场的影响路径和潜在机会。例如,当央行实施适度宽松的货币政策时,可通过流动性充裕的信号加大对成长型资产的投资配置,同时关注可能受益于政策导向的重点领域(如科技创新、绿色转型)。此外,结合区域政策(如地方政府化债措施)评估区域性投资标的的信用风险变化。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:22:18", "modified_time": "2025-08-11 21:22:18", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e4275f862f8e45ff86cddf748386924b", "experience_type": "text", "when_to_use": "在债券市场运行分析及固定收益产品投资决策中,特别是在收益率曲线波动较大或信用利差显著变化时。", "content": "利用国债、同业存单、城投债等多类型债券的到期收益率数据,结合货币市场利率(如DR007、R007)变化,判断当前市场流动性状况及其对未来利率走势的影响。例如,当短期利率下降且长期国债收益率下行幅度较大时,表明市场避险情绪升温,可考虑增加久期较长的优质债券持仓。同时,通过对信用利差的监测(如3年期中票-国债利差),评估信用风险溢价的变化,优化信用债配置比例,避免过度集中于高风险品种。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:22:18", "modified_time": "2025-08-11 21:22:18", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "27b55f546c054550bbd488f0b01d8bfc", "experience_type": "text", "when_to_use": "在股票市场行业轮动策略制定中,特别是在经济增长放缓或结构性改革深化阶段。", "content": "基于申万一级行业的涨跌幅及估值水平分析,结合宏观经济周期与政策导向,寻找低估值但具备基本面支撑的行业进行布局。例如,在经济复苏初期,优先关注受益于内需扩张的消费类行业;而在科技驱动的新质生产力发展背景下,则应重点挖掘人工智能、半导体等相关主题的投资机会。此外,通过观察机构资金流向,验证市场热点切换逻辑,及时调整仓位以捕捉超额收益。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:22:18", "modified_time": "2025-08-11 21:22:18", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b4a8dfc6f4964e3b81532771231729b5", "experience_type": "text", "when_to_use": "在跨境资产配置和汇率风险管理中,特别是在全球金融市场联动性增强或地缘政治风险加剧时期。", "content": "综合分析发达市场与新兴市场的指数表现、资金流动趋势以及主要经济体的货币政策差异,动态调整海外资产敞口。例如,当美元走强且新兴市场资本外流压力增大时,可适当降低权益类资产配置比例,转而增持防御性较强的美元计价债券。同时,运用远期合约或期权工具对冲外汇风险,确保投资组合的整体稳定性。此外,密切关注人民币国际化进程中的政策红利,适时参与离岸人民币市场相关产品交易。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:22:18", "modified_time": "2025-08-11 21:22:18", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1c9b07f649b147749f796911e7986d72", "experience_type": "text", "when_to_use": "在评估一家多元化经营企业的投资价值时,尤其是在传统业务与新兴高增长领域并存的情况下(如西部矿业和莲花控股)。", "content": "通过细分核心业务和新兴业务的财务表现及增长潜力,分别计算其对整体估值的贡献。重点关注核心业务的稳定性和盈利能力(如西部矿业的铜矿业务),同时评估新兴业务的增长逻辑和市场空间(如莲花控股的算力租赁业务)。结合行业趋势、技术壁垒和政策支持,构建分部估值模型以得出更精确的企业价值。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:23:21", "modified_time": "2025-08-11 21:23:21", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "fff089f2ab8f4c95b754fbaccf99f4ca", "experience_type": "text", "when_to_use": "在分析企业产能扩张计划及其对长期业绩的影响时,特别是在资源类或制造业公司中(如西部矿业的铜矿扩产项目)。", "content": "从项目建设进度、技术升级效果和市场需求匹配度三个维度进行综合评估。首先验证项目核准和投建时间表是否明确;其次分析技术改进对生产效率的提升(如选矿回收率优化);最后评估新增产能能否有效转化为收入增长,并考虑市场价格波动的风险。这类分析特别适用于周期性行业中具有显著资本支出的企业。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:23:21", "modified_time": "2025-08-11 21:23:21", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "47fec2a3d8df4900a8d1645c0960f91b", "experience_type": "text", "when_to_use": "在研究企业研发投入的实际效益时,尤其是在高科技或快速迭代行业(如莲花控股的算力技术研发)。", "content": "将研发费用的增长与具体科研项目进展挂钩,追踪技术成果的商业化路径。例如,关注企业在产业链中的定位(如算力租赁服务提供商),以及其与下游客户需求的契合度。此外,通过对比行业领先者的技术水平,判断公司在技术创新上的竞争力,从而预测研发转化为未来现金流的可能性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:23:21", "modified_time": "2025-08-11 21:23:21", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b8963366b06641dd95fcdf13228ccbbe", "experience_type": "text", "when_to_use": "在评估宏观经济环境变化对特定行业的影响时,尤其是涉及大宗商品价格波动或政策驱动型领域(如金属矿业和智能算力行业)。", "content": "结合经济周期、供需关系和政策导向,动态调整盈利预测模型的关键假设。例如,在金属矿业中,需密切关注全球经济增长预期、矿石品位下降风险及环保政策限制;而在智能算力行业,则需跟踪AI产业发展速度、地方性算力投资政策和芯片供应链稳定性。这种多因素联动分析能够提高预测的鲁棒性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:23:21", "modified_time": "2025-08-11 21:23:21", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3458b724c29c442eafb0cf53b4703246", "experience_type": "text", "when_to_use": "在宏观经济政策分析的背景下,特别是在评估未来五年规划(如“十五五”)对资本市场和经济形势的影响时。", "content": "在进行宏观经济政策分析时,需结合国际环境变化、国内长期战略目标及当前经济运行数据综合研判。重点关注政策连续性与灵活性的平衡,尤其是存量政策工具的落实落细,以及潜在增量政策的适时加力。同时,应通过关键指标(如GDP增速、CPI、PPI等)验证经济复苏的可持续性,并识别结构性问题(如消费疲软、企业投资不足)可能带来的风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:24:16", "modified_time": "2025-08-11 21:24:16", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ddd2fab30ced4e49a68303b9eb98f890", "experience_type": "text", "when_to_use": "在制定资本市场策略时,特别是当市场处于回稳向好但外部冲击仍存的阶段。", "content": "在资本市场的分析中,需关注政策层面对市场吸引力和包容性的提升措施,例如推动中长期资金入市、优化并购重组规则等。同时,结合市场韧性表现(如应对突发外部冲击的能力),判断市场是否具备进一步巩固回升势头的基础。此外,建议跟踪监管动态,预测政策放松或调整的可能性及其对市场情绪的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:24:16", "modified_time": "2025-08-11 21:24:16", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "97aba3885e3f4117bcce95c9d1e5d928", "experience_type": "text", "when_to_use": "在产业政策研究中,尤其是在供给侧改革和行业治理领域,如反内卷政策或重点行业产能治理的推进。", "content": "分析产业政策时,需明确政策方向的延续性和具体措辞的变化(如从“落后产能有序退出”到“重点行业产能治理”)。避免将政策简单化解读为针对特定行业,而应理解其背后的综合治理逻辑。同时,结合实际案例(如光伏、新能源车等行业整治行动),评估政策对企业行为和市场竞争秩序的影响,并预测后续执行中的潜在挑战。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:24:16", "modified_time": "2025-08-11 21:24:16", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "4df9f72a4ffd444fa6c45e181c9496bb", "experience_type": "text", "when_to_use": "在房地产行业的风险评估和投资决策中,特别是在城市更新和存量提质成为政策关注重点的背景下。", "content": "对于房地产行业,需从政策导向中识别新模式的转型方向,例如从传统开发转向高质量城市更新和存量资产优化。分析过程中,应关注中央和地方政策的一致性,以及地方政府债务化解进展对行业融资环境的影响。同时,结合区域市场动态(如发达市场与新兴市场的差异),评估城市更新项目的可行性和潜在回报。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:24:16", "modified_time": "2025-08-11 21:24:16", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5ee589da370e47f59ccf5e17fc66bcf1", "experience_type": "text", "when_to_use": "在分析国际贸易政策变化对市场的影响时,特别是在关税调整或贸易壁垒增加的情况下", "content": "当面对类似特朗普政府上调关税的政策冲击时,应优先评估受影响国家和行业的直接经济暴露程度。例如,对出口依赖度高的行业(如制造业、科技)进行敏感性分析,并结合历史数据(如2018-2019年中美贸易战期间的表现)预测市场反应。同时,关注资本流动和汇率波动,尤其是新兴市场货币可能因资本外流而承压。最后,建议构建情景分析框架,模拟不同关税税率下的企业盈利能力和供应链重组成本。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:25:07", "modified_time": "2025-08-11 21:25:07", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "565beab334974e1d8f25c0dda1ce0605", "experience_type": "text", "when_to_use": "在市场情绪低迷且成交量显著下降的环境下,判断短期市场走势并制定交易策略", "content": "当市场表现为冲高回落且成交量急剧萎缩时,表明投资者信心不足,市场可能进入观望阶段。此时,可以通过技术分析(如支撑位和阻力位测试)结合资金流向数据(如主力资金净流入/流出)来判断市场底部是否形成。此外,观察涨停与跌停家数的比例以及上涨家数占比,可辅助识别市场的赚钱效应强弱。若数据显示资金集中于防御性板块(如环保、传媒),则需警惕系统性风险,并考虑降低仓位或转向低贝塔资产配置。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:25:07", "modified_time": "2025-08-11 21:25:07", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e043d47d67064663ac132038f945e0cf", "experience_type": "text", "when_to_use": "在多空博弈激烈的横盘整理阶段,寻找具有超额收益潜力的行业轮动机会", "content": "在指数震荡且缺乏明确方向的市场中,可通过申万一级行业涨跌幅及主力资金流向筛选出领涨或抗跌板块。例如,本案例中环保、传媒等行业表现出较强韧性,可能受益于政策利好或估值修复逻辑。进一步深入研究这些行业的基本面驱动因素(如环保领域的碳中和政策推进,传媒领域的数字化转型趋势),并结合宏观经济周期和监管环境,选择具备持续增长潜力的标的进行布局。同时,注意规避受外部事件冲击较大的行业(如石油石化、钢铁等周期性行业)。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:25:07", "modified_time": "2025-08-11 21:25:07", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "cc94008c0fba478a9982ee2503983e69", "experience_type": "text", "when_to_use": "在评估A股市场短期波动性及其对中长期投资布局的影响时,特别是在温和复苏的经济环境下。", "content": "通过分析市场平均市盈率与历史中位数水平的对比,判断估值是否适合中长期布局。同时结合成交量数据,确认市场活跃度是否支持当前价格趋势。例如,当市盈率处于近三年中位数附近且成交量高于日均中位数区域时,表明市场具备较好的中长期投资价值,但需警惕短期技术性调整压力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:26:01", "modified_time": "2025-08-11 21:26:01", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "436a9e1d4aea40a085786aa8c0e442f3", "experience_type": "text", "when_to_use": "在设计跨资产类别投资组合时,特别是科技成长与周期制造双主线策略下的行业配置优化场景。", "content": "优先关注具有政策驱动和资金流入支持的行业(如光伏设备、医药、软件开发等),并结合宏观经济驱动力(如消费与投资)进行筛选。对于高股息板块(如银行、公用事业),可作为防御性配置以平衡组合风险。此外,应动态跟踪美联储货币政策变化,因其可能显著影响全球风险偏好和资金流向。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:26:01", "modified_time": "2025-08-11 21:26:01", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a0e994ac7d23412f84e5a4a8eaa38c24", "experience_type": "text", "when_to_use": "在分析特定行业表现及其潜在机会时,尤其是在轮动明显的市场环境中(如牛市或横盘整理阶段)。", "content": "利用中信一级行业涨跌幅分布及资金流向数据,识别近期强势行业(如光伏设备、医药)和弱势行业(如船舶制造、小金属)。进一步结合宏观经济背景(如温和复苏)以及政策导向(如战略新兴产业扶持),选择兼具基本面支撑和市场情绪助力的行业进行重点布局。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:26:01", "modified_time": "2025-08-11 21:26:01", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8f64d316dea745ed867975d34ab7357b", "experience_type": "text", "when_to_use": "在制定基于海外宏观流动性变化的投资策略时,尤其是面对美联储议息会议结果不确定性较大的情况。", "content": "密切关注美联储降息路径预期,并评估其对全球资本市场的溢出效应。若明确释放降息信号,则可适当增加风险资产敞口;反之,若紧缩预期增强,则需降低风险暴露并提升防御性资产比例。同时,注意国内与国际市场的联动性,避免因外盘剧烈波动导致的非系统性风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:26:01", "modified_time": "2025-08-11 21:26:01", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "20bf6f49589d4d25acd750a820480dbb", "experience_type": "text", "when_to_use": "在进行大类资产配置时,尤其是在评估A股和港股市场的短期至中期走势时,需结合宏观基本面、资金面、国际面、估值面和技术面等多维度数据。", "content": "通过构建综合评分模型(如权益宏微观月度低频择时模型),将基本面(30%)、资金面(30%)、国际面(20%)、估值面(10%)和技术面(10%)等五个维度量化打分,得出市场趋势的预测信号。当模型评分为0分时,历史数据显示胜率较高,可作为震荡偏强行情的判断依据。此外,在面对超涨状态时,应警惕宽幅震荡的可能性,并关注高景气投资板块的表现。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:27:06", "modified_time": "2025-08-11 21:27:06", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "75b930c8b0864f218c49ce5e7a415a8f", "experience_type": "text", "when_to_use": "分析美股与黄金对冲关系时,特别是在政策不确定性或经济数据波动较大的市场环境中,需要结合风险偏好切换和避险需求动态调整资产配置。", "content": "观察到美股与黄金存在明显的反向对冲效应:当美股因关税谈判、就业数据或通胀压力而下跌时,资金倾向于流向黄金寻求避险;反之,当风险偏好修复时,黄金价格受到压制。因此,可通过监测VIX指数、非农就业数据及美联储政策路径预期,提前布局对冲策略,利用两者之间的负相关性优化组合收益。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:27:06", "modified_time": "2025-08-11 21:27:06", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "116aed0d9d8941eeaf24326e69c9de5c", "experience_type": "text", "when_to_use": "在国债和美债的投资决策中,尤其是在利率下行周期或避险情绪升温的情况下,需重点评估基本面修复程度、供给端压力以及货币政策导向。", "content": "对于国内国债,关注CPI、PPI、PMI等经济数据的变化,同时跟踪央行公开市场操作及同业存单到期量,以判断短端利率中枢的稳定性。对于美债,则需重点关注就业数据走弱主导的基本面支撑,以及全球地缘政治风险引发的避险需求。若再融资节奏平稳且供给压力缓解,将进一步打开利率下行空间,建议增加长久期利率债配置。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:27:06", "modified_time": "2025-08-11 21:27:06", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "00962bf09aa849c79b95aa60a7034147", "experience_type": "text", "when_to_use": "在基金配置建议中,尤其是在预计市场处于宽幅震荡但结构性行情持续涌现的环境下,需采用均衡型ETF配置策略。", "content": "筛选成立时间满一年且规模大于一亿元的ETF产品,覆盖不同行业主题(如传媒、医药、军工、黄金等)和地区市场(如纳斯达克)。根据市场风格轮动特点,灵活调整成长型与价值型标的的比例,确保组合具备攻守兼备的特性。例如,在成长风格占优的阶段,可适当增配科技、通信类ETF;而在防御需求上升时,优先选择红利、黄金ETF。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:27:06", "modified_time": "2025-08-11 21:27:06", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7be1a0b4c9ea4fae8709072bd262a706", "experience_type": "text", "when_to_use": "在评估全球股市联动性或脱钩可能性时,特别是在新兴市场与发达市场之间的关系分析中。", "content": "通过对比不同市场的估值水平、经济增速和投资者结构,判断市场间相关性的强弱。例如,若某一市场的估值显著低于另一市场(如A股相对美股),即使外部市场剧烈波动,其受影响程度可能较小;尤其是在该市场处于牛市初期或中期阶段时,表现出较强的独立性。此外,历史数据表明,在经济增长强劲或行业竞争力提升的背景下,某些市场可能出现长期背离现象(如日美股市1965-1980年)。因此,建议结合宏观经济条件和估值差异,灵活调整对跨市场影响的预期。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:28:16", "modified_time": "2025-08-11 21:28:16", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "530cdca1be644c3ab21f5f82a6d6464d", "experience_type": "text", "when_to_use": "在制定投资组合配置策略时,特别是在多资产类别、跨区域的投资决策中。", "content": "采用哑铃策略向弹性策略转变的方法,根据市场资金流动性和风险偏好变化动态调整资产配置。例如,在区间震荡市中优先选择高股息板块(如银行)和主题驱动型板块(如AI、新能源),而在全面牛市启动后逐步增加具备业绩弹性的行业(如非银金融、周期品)。同时,关注政策导向和主题事件催化(如军工、黄金等),以捕捉阶段性超额收益机会。这种分阶段优化配置的方式能够有效平衡防御性和进攻性需求。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:28:16", "modified_time": "2025-08-11 21:28:16", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "efedeb382ad3442bb31ab0b48c7bb052", "experience_type": "text", "when_to_use": "在进行风险评估和压力测试时,特别是针对外部市场冲击对本地市场的影响预测。", "content": "利用历史回溯分析法,梳理过去20年内主要市场危机期间各市场的表现模式(如2008年次贷危机、2020年疫情冲击)。发现当本地市场估值较高且处于牛熊周期高点时,外部冲击容易引发共振效应,导致更大跌幅;而当估值较低且处于牛市初期时,抗压能力较强。此外,外资持仓比例下降会进一步削弱外部市场对本地市场的直接影响。因此,在风险评估中需综合考虑估值水平、市场周期位置以及外资参与度等因素,更精准地量化潜在损失范围。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:28:16", "modified_time": "2025-08-11 21:28:16", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "439053b1c79643b5b1a4799312a50159", "experience_type": "text", "when_to_use": "在宏观经济数据发布后,进行市场趋势分析和投资组合调整的场景,特别是在制造业和服务业PMI数据出现显著变化时。", "content": "通过分析PMI及其分项指数的变化,识别经济周期中的拐点。例如,当制造业PMI连续低于临界点(50%)且订单指数显著下降时,可能预示需求疲软,需降低对周期性行业的敞口,同时增加防御性资产配置,如必需消费品或公用事业板块。此外,在政策支持预期较强的情况下,可关注基建相关领域的机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:29:18", "modified_time": "2025-08-11 21:29:18", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b4281e93299c47ff8a02b0816dcbc9ea", "experience_type": "text", "when_to_use": "评估房地产行业数据下滑对整体经济影响的场景,尤其是在政治局会议提及城市更新和高质量住房供应后。", "content": "结合TOP100房企销售数据与政策导向,判断房地产市场的短期压力及长期潜力。若销售额持续同比下降且降幅扩大,则表明市场信心不足,应谨慎对待高杠杆开发商的信用风险;同时,关注政策推动的城市更新、危旧房改造等领域的结构性机会,这些领域可能成为未来稳定房地产投资的关键。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:29:18", "modified_time": "2025-08-11 21:29:18", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "94689491b2d84d5995b804f298f41e6b", "experience_type": "text", "when_to_use": "在全球科技巨头加速AI硬件扩张背景下,制定算力芯片及相关产业链投资策略的场景。", "content": "跟踪AI服务器、ASIC芯片、高频高速PCB等细分领域的需求增长趋势,优先布局具备技术优势和产能扩张能力的核心供应商。例如,观察到微软、Meta等公司资本支出大幅增加以及GB200/GB300服务器放量信号时,可以预测上游材料供应紧张将加剧,建议提前锁定具有议价能力的原材料厂商作为投资标的。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:29:18", "modified_time": "2025-08-11 21:29:18", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f83f3f6d8ed141d7928728ce76462689", "experience_type": "text", "when_to_use": "在A股市场成交量萎缩、换手率下降但融资余额仍处于高位的阶段,优化股票多头策略的场景。", "content": "根据市场成交额和换手率的变化,判断资金活跃度和情绪面状况。如果成交额持续低迷而融资余额居高不下,说明市场存在潜在抛压,此时适合减仓高估值板块(如电新、消费),并转向低估值且有政策催化预期的板块(如计算机、通信)。同时,密切监控尾盘资金流向,及时规避资金撤离明显的行业。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:29:18", "modified_time": "2025-08-11 21:29:18", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d854a289f7fb4dd4b42065c8f94e7abb", "experience_type": "text", "when_to_use": "在评估政策驱动型市场机会时,特别是在政府推出大规模经济刺激计划(如设备更新和消费品以旧换新政策)的背景下,需要识别受益行业和企业。", "content": "通过分析政策支持范围、资金规模以及相关行业的历史数据,可以精准筛选出直接受益的企业标的。例如,在‘两新’政策下,梳理北交所中与设备更新和消费品以旧换新相关的公司,并结合其市值、市盈率及营收增长潜力进行排序,形成投资组合建议。需特别关注政策延续性和资金分配节奏对市场预期的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:30:22", "modified_time": "2025-08-11 21:30:22", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "22e608b8d81b4e0493ecfae86ded3250", "experience_type": "text", "when_to_use": "在短期战术性交易或中期投资组合调整过程中,当面对特定板块(如消费服务产业)出现整体下跌但个别标的逆势上涨的情况时,需快速定位具有超额收益潜力的个股。", "content": "通过对北交所消费服务产业企业的周度涨跌幅分布、估值变化及业务基本面进行综合分析,优先选择那些估值合理且近期表现优于行业平均水平的公司(如佳合科技、沪江材料等)。同时,结合宏观经济环境和板块轮动趋势判断是否适合追加配置或止盈离场。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:30:22", "modified_time": "2025-08-11 21:30:22", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "12101854b203446c8f5779b5fa3fb3a4", "experience_type": "text", "when_to_use": "在财务规划和长期战略投资决策中,当需要基于公司财报数据预测未来盈利能力并制定资产配置方案时,可使用业绩增长指标作为核心参考。", "content": "利用半年报中的营业收入、归母净利润及其同比增长率,结合行业复苏趋势(如太湖雪案例中的消费市场回暖),评估目标公司的成长性。此外,还需考虑非经常性损益对利润的影响,确保剔除一次性因素后的持续经营能力得到充分反映。对于高增长标的,可在回调窗口逐步建仓。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:30:22", "modified_time": "2025-08-11 21:30:22", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "4ac25740bc4845be90693076c06e2022", "experience_type": "text", "when_to_use": "在风险评估和客户咨询服务中,当需要向客户解释特定市场环境下的波动原因及潜在风险时,应结合宏观变量、行业动态和微观结构进行全面剖析。", "content": "例如,针对北交所泛消费产业市盈率下降的现象,从估值水平、市场需求变化及竞争格局角度解读背后逻辑。同时提示客户注意宏观经济环境变动风险(如政策退出或经济放缓)以及统计误差带来的不确定性,帮助其建立合理的收益预期并优化持仓结构。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:30:22", "modified_time": "2025-08-11 21:30:22", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0fa2c101d03946758bf8ed2384070e71", "experience_type": "text", "when_to_use": "在评估宏观经济环境对投资组合的影响时,特别是在制造业景气度下降、PMI低于临界点的市场环境中。", "content": "通过分析制造业PMI及其细分指数(如生产指数、新订单指数和原材料库存指数),结合规模以上工业企业利润数据,识别经济周期中的关键转折点。例如,当制造业PMI降至49.3%且新订单指数下降时,表明市场需求疲软,此时应优先关注防御性资产(如高股息股票或黄金)以及政策支持领域(如装备制造业)。此外,大型企业的韧性较强,可作为短期配置的重点。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:31:20", "modified_time": "2025-08-11 21:31:20", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "86aa810471fe47a6bda821ec407a69dc", "experience_type": "text", "when_to_use": "在科技创新驱动增长的牛市中,特别是在人工智能、算力集群和人形机器人等新兴技术快速发展的行业轮动阶段。", "content": "利用世界人工智能大会等行业盛会展示的技术突破信息,追踪高性能算力集群、芯片架构创新(如华为超节点)及人形机器人商业化进展,评估相关产业链的投资机会。建议将资金分配至具备明确落地场景(如物流、娱乐)和技术壁垒的核心企业,并密切跟踪以Token处理量为基准的需求导向模式变化,适时调整投资策略。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:31:20", "modified_time": "2025-08-11 21:31:20", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9871366d7b4249548f40c7c004a093dd", "experience_type": "text", "when_to_use": "在地缘政治紧张局势加剧或全球经济不确定性增加的背景下,进行避险资产配置。", "content": "根据报告中提到的地缘政治风险和经济波动性,黄金作为长期避险资产的价值显著提升。通过历史估值水平和当前市场情绪分析,确定黄金的中长期买入时机。同时,结合货币政策宽松程度与美元走势,动态平衡黄金与其他资产的比例,确保投资组合具有足够的抗风险能力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:31:20", "modified_time": "2025-08-11 21:31:20", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6d5251d06845480d82623170b31d7f60", "experience_type": "text", "when_to_use": "在消费复苏预期增强但基础仍需巩固的经济转型期,尤其是在提振消费政策密集出台后。", "content": "关注居民消费信心恢复情况及服务消费新增长点,选择家电、汽车等受益于政策刺激的行业进行布局。同时,结合社零数据和消费者行为趋势,筛选出具备品牌优势和渠道覆盖广度的龙头企业,这些公司更有可能从消费升级中获益。此外,对于创新型消费品公司,可通过其营收增速验证市场接受度,从而优化选股逻辑。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:31:20", "modified_time": "2025-08-11 21:31:20", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "852711febeb74b508dc0402eafe1b67b", "experience_type": "text", "when_to_use": "在进行市场回顾和短期战术操作时,特别是在需要快速识别市场情绪和行业轮动趋势的情况下。", "content": "通过分析主要指数的涨跌幅、行业板块的表现以及概念板块的热点变化,可以有效捕捉市场的短期情绪和资金流向。例如,在牛市中,涨幅领先的行业(如国防军工、机械设备)往往是资金追逐的重点,而下跌行业(如商贸零售、石油石化)则可能受到宏观经济或政策因素的压制。这一方法可以帮助投资者快速调整战术配置,抓住短期机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:32:29", "modified_time": "2025-08-11 21:32:29", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6eca18458bc84f2a90596ce7828b9525", "experience_type": "text", "when_to_use": "在评估资产配置策略时,特别是在横盘市场或低波动期,需要寻找潜在的结构性机会。", "content": "利用申万一级行业的涨跌数据和概念板块的表现,可以识别出具有超额收益潜力的细分领域。例如,当整体市场表现平淡时,连板、军民融合等概念板块可能成为资金的避险选择。这种分析框架强调从微观层面挖掘投资机会,同时结合成交量的变化(如今日缩量998亿元),判断市场参与者的信心水平和资金活跃度。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:32:29", "modified_time": "2025-08-11 21:32:29", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d923cb064a0547448506f74a3fe360c6", "experience_type": "text", "when_to_use": "在风险评估和投资组合管理中,特别是在高波动期或危机条件下,需要动态调整风险敞口。", "content": "通过监测市场成交量、个股涨跌分布以及行业板块的分化情况,可以及时发现潜在的风险点。例如,当市场成交额显著萎缩且下跌个股数量增加时,可能预示着市场情绪的恶化。此时,应优先考虑降低高Beta资产的配置比例,并向防御性板块倾斜。这种方法强调对市场流动性和情绪的敏感性,有助于在动荡环境中保护投资组合。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:32:29", "modified_time": "2025-08-11 21:32:29", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a52d7e358e8740ebacbf1383e11c4d07", "experience_type": "text", "when_to_use": "在市场波动加剧、主要指数表现不佳且多数行业下跌的环境中,评估短期市场情绪和资金流向。", "content": "通过分析市场强弱指标(如上涨/下跌家数比例)、主力资金净流入数据以及行业板块表现,识别市场恐慌情绪和资金避险行为。例如,在下跌行情中,观察到非银金融、煤炭、房地产等传统防御性板块领跌,表明市场信心不足;而计算机、通信等科技板块相对抗跌,可能反映资金向高成长性板块转移的趋势。此类信息可用于调整短期战术配置,降低高贝塔资产敞口。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:33:55", "modified_time": "2025-08-11 21:33:55", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3d13ceccdb974434a11c328b88f8c6c4", "experience_type": "text", "when_to_use": "在经济数据疲软或制造业PMI低于荣枯线的情况下,评估宏观经济对股市的影响并制定应对策略。", "content": "结合国家统计局发布的制造业PMI数据(如7月PMI为49.3%,较上月下降0.4个百分点),分析其对市场预期的扰动效应。当PMI持续低于50%时,通常预示着经济增长放缓,企业盈利前景承压,投资者应警惕周期性行业的进一步回调风险。同时,可关注政策面潜在的支持信号,如中美贸易关税展期谈判进展,以捕捉市场企稳的早期迹象。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:33:55", "modified_time": "2025-08-11 21:33:55", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c6dca5894f224a11b97390c461dc6d5e", "experience_type": "text", "when_to_use": "在全球供应链安全和技术竞争加剧背景下,评估特定行业或公司因外部监管变化带来的投资机会与风险。", "content": "利用网络安全事件(如H20算力芯片漏洞后门问题)作为切入点,分析相关行业(如半导体、人工智能)的监管风险与技术壁垒。例如,国家网信办约谈英伟达事件凸显了关键技术自主可控的重要性,这可能推动国内算力芯片厂商加速研发替代产品。对于投资者而言,这类事件既是风险警示,也是挖掘国产替代主题投资机会的重要线索。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:33:55", "modified_time": "2025-08-11 21:33:55", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7b713522880f46dcaf3c69198d053089", "experience_type": "text", "when_to_use": "在成交量维持高位但市场整体走弱的情况下,判断市场是否处于阶段性顶部或底部区域。", "content": "通过观察两市成交额(如1.8万亿元以上)与指数走势之间的背离现象,辅助判断市场情绪拐点。如果成交量保持活跃但指数持续下行,则可能表明多空博弈激烈,市场尚未达成一致方向;反之,若成交量萎缩伴随指数企稳,则可能是底部形成的信号。在此过程中,需密切关注涨停/跌停家数、涨跌停比等微观结构指标,以验证市场情绪的真实状态。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:33:55", "modified_time": "2025-08-11 21:33:55", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "17fdc7cb81ef4cd888ab35f2aab8813c", "experience_type": "text", "when_to_use": "在分析出口导向型企业的投资机会时,特别是在评估其海外市场收入占比和增长潜力的场景中。", "content": "通过梳理企业境外收入占比及同比增速,结合行业分类(如消费、工程机械、电子设备等),识别高外销依赖且具备强劲增长的企业。例如,北交所中境外收入占比超过80%的公司(如恒太照明、鸿智科技)以及境外业务收入yoy超过20%的公司(如雷神科技、威贸电子)可作为重点标的。此外,需关注企业所在行业的全球市场需求趋势,如新能源汽车、电子元件等领域的出口增长数据,为投资决策提供支撑。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:35:10", "modified_time": "2025-08-11 21:35:10", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0e6a1a0eafa546efbf31aeeda37421aa", "experience_type": "text", "when_to_use": "在市场波动较大或整体下行期间,评估细分行业估值变化及其对个股表现的影响。", "content": "通过对北交所各产业(如电子设备、机械设备、信息技术等)市盈率TTM中值的变化趋势进行分析,识别估值压缩或扩张的行业。例如,本周电子设备产业PE TTM中值从62.5X降至60.1X,同时市值整体减少,但个别公司(如迅安科技、星辰科技)仍实现显著涨幅。这表明即使在整体估值承压的情况下,优质标的可能因基本面改善或特殊事件驱动而逆势上涨,应优先关注30~50X估值区间内的优质企业。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:35:10", "modified_time": "2025-08-11 21:35:10", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "30114278ced148828e74c78a656d877d", "experience_type": "text", "when_to_use": "在制定跨周期投资策略时,特别是需要结合宏观经济环境与行业周期性特征的场景。", "content": "根据报告中的宏观数据分析(如2025H1中国出口额同比增长5.94%,贸易顺差扩大),结合具体行业表现(如电子元件、工程机械、汽车产业的出口增长),可以判断当前经济处于复苏或扩张阶段。此时应优先布局受益于出口增长的行业(如电子设备、新能源汽车相关企业)。同时,考虑到不同市场的动态(如发达市场与新兴市场的差异),需灵活调整资产配置比例,并关注货币汇率波动对跨境业务企业的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:35:10", "modified_time": "2025-08-11 21:35:10", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "304a1b1ca1af4ef399ac679a3b894c1d", "experience_type": "text", "when_to_use": "在筛选具有长期战略价值的标的时,尤其是针对公告披露的重大投资或合作项目。", "content": "通过解读公司公告,挖掘潜在的战略投资机会。例如,大地电气拟投资5000万元设立全资孙公司以提升乘用车线束产能,天宏锂电与其他公司共同出资设立子公司推进储能独立电站业务。这些举措反映了公司在增强核心竞争力和拓展新业务领域的决心,可能带来长期回报。投资者应重点关注此类公告中的资金用途、合作方背景及市场前景,结合行业发展趋势评估其潜在价值。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:35:10", "modified_time": "2025-08-11 21:35:10", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "844fa10d942b44d992fcc557e375a7d6", "experience_type": "text", "when_to_use": "在弱基钦周期下,评估PPI边际改善的可能性以优化资产配置。", "content": "通过分析M1同比变化和CRB指数与PPI的背离关系,识别价格修复的领先信号。当M1同比持续回升且CRB指数上行但PPI仍低位运行时,可预期PPI存在边际改善空间,尤其是在流动性宽松环境下。结合低基数效应和技术性反弹潜力,优先布局顺周期品种如化工、建材和有色金属等板块,捕捉估值修复机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:35:53", "modified_time": "2025-08-11 21:35:53", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "226e98f3b37b4bd49c2b05080345e0ca", "experience_type": "text", "when_to_use": "在全球科技共舞背景下寻找成长型投资机会。", "content": "利用TMT板块的“粉丝效应”作为资金共识的风向标,观察其成交额占比和机构持仓变化。在增量市格局下,关注具备基本面支撑的强势主线(如半导体、AI相关领域),并警惕低位补涨对主线方向的资金挤出效应。结合技术迭代和需求结构变化,聚焦高景气环节(如GPU、HBM)及政策支持的核心受益标的。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:35:53", "modified_time": "2025-08-11 21:35:53", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "2e41033ee53441179be17c5537ab581f", "experience_type": "text", "when_to_use": "在市场调整阶段重新布局,为下一波行情做准备。", "content": "基于双轮驱动逻辑,一方面围绕“反内卷”政策扩散路径,布局交易PPI修复的扩散行情,例如白酒、地产等顺周期品类;另一方面紧跟全球科技创新趋势,重点配置科技成长(AI+、机器人、信创)和军工(导弹、无人机、卫星)赛道。同时,将稳定型红利资产(如黄金、高股息股)作为底仓,平衡组合风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:35:53", "modified_time": "2025-08-11 21:35:53", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ffa0fbb4c8014bd4aeb680d2baf56189", "experience_type": "text", "when_to_use": "在进行全球市场指数估值分析时,尤其是在多资产类别和跨区域的投资组合管理中,需要评估不同市场的估值分位数和相对吸引力。", "content": "通过对比PE、PB、PS和PCF等估值指标的历史分位数,可以识别出哪些市场或行业处于高估或低估状态。例如,当标普500的PE高于75%历史分位数,而新兴市场的PE低于中位数时,可能表明新兴市场更具估值优势。此外,在熊市或高波动性环境下,优先关注PB和PCF分位数,因其通常较PE和PS更能反映资产的真实价值。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:37:08", "modified_time": "2025-08-11 21:37:08", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1f40a9594ac142cc9a3a2c5071846834", "experience_type": "text", "when_to_use": "在评估A股宽基指数的风格轮动策略时,尤其是在成长与价值风格之间的切换决策中,需要明确各风格的估值收缩或扩张趋势。", "content": "通过观察大盘成长与小盘价值的PE和PB变化幅度,结合其滚动分位数水平,可以判断风格轮动的潜在机会。例如,当大盘成长的PE分位数显著低于小盘成长且估值收缩幅度较大时,可能预示着成长风格的短期调整风险;相反,若小盘价值的PB分位数处于低位且估值温和扩张,则可能提供较好的布局时机。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:37:08", "modified_time": "2025-08-11 21:37:08", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "20ab3c2cc9954b3690dbdde6584c4b83", "experience_type": "text", "when_to_use": "在一级行业的估值性价比分析中,尤其是在经济周期转换或政策驱动下的行业配置决策时,需综合考虑长期和短期估值分位数。", "content": "通过对比必选消费(如食品饮料和农林牧渔)与TMT(如电子、通信、传媒)的3年/5年估值分位数均值,可以快速识别具有修复空间的行业。例如,当必选消费的估值分位数均值显著低于TMT行业时,可能表明前者在经济不确定性较高的环境中更具防御性和配置价值。同时,需结合行业基本面数据(如PEG)进一步验证估值合理性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:37:08", "modified_time": "2025-08-11 21:37:08", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a5589ef7f4af431f9467a42df6d4a9d8", "experience_type": "text", "when_to_use": "在新兴产业和热门概念的投资分析中,特别是在技术驱动型板块(如光通信、新能源、生物科技)的短期交易策略制定中,需结合估值收缩幅度与市场情绪指标。", "content": "对于新兴产业,需重点关注PE收缩幅度较大的细分领域(如动力电池或锂电池),并结合其近期涨跌幅判断是否存在超跌反弹机会。例如,当光模块(CPO)指数的PE分位数较低但近期涨幅显著时,可能表明该领域正受到市场资金青睐,可在短期内作为战术性配置目标。此外,应警惕估值过高且无基本面支撑的概念炒作风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:37:08", "modified_time": "2025-08-11 21:37:08", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9110c0db68c44f1cab35a1967ada9c3a", "experience_type": "text", "when_to_use": "在中期牛市趋势中,市场接近前期高点但出现短期调整时,用于判断是否为技术性回调而非趋势反转。", "content": "当市场接近前期高点且成交量放大、杠杆资金快速涌入时,需警惕短期资金行为导致的获利回吐。若无重大政策或基本面变化,此类调整通常是为了更稳步突破前高,而非趋势反转。可结合宏观政策方向(如政治局会议基调)和流动性指标(如M1-M2剪刀差)验证市场是否具备进一步上行的基础。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:38:08", "modified_time": "2025-08-11 21:38:08", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "32e767e48bac42e780806a83e56d9834", "experience_type": "text", "when_to_use": "在政策预期管理中评估宏观政策对资本市场的影响,特别是在政治局会议等重要政策节点后。", "content": "政治局会议等高层政策信号通常会对资本市场产生显著影响。需重点关注会议对宏观政策的措辞调整,例如“持续发力、适时加力”表明政策既保持连续性又预留空间。此外,删除负面表述(如“外部冲击影响加大”)可能暗示风险偏好改善。投资者应结合政策方向与市场情绪指标(如融资余额、换手率)综合判断市场反应。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:38:08", "modified_time": "2025-08-11 21:38:08", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0bb73be3dcbe4a6daa4e797c1cf1d795", "experience_type": "text", "when_to_use": "在全球贸易政策不确定性上升时,评估关税政策对市场风险偏好的影响。", "content": "中美经贸会谈及关税政策动态是影响全球市场风险偏好的重要因素。若关税缓和展期或谈判留有余地,则短期内有助于稳定市场情绪;但若谈判破裂或新关税生效,则可能导致风险资产承压。可通过观察全球主要股指表现及跨境资金流动(如北向资金)验证市场对关税政策的敏感度。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:38:08", "modified_time": "2025-08-11 21:38:08", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f8a8372bcdcd4427a6b17a5b34cffa36", "experience_type": "text", "when_to_use": "在居民资产配置行为发生变化时,分析其对资本市场流动性的潜在贡献。", "content": "居民“存款搬家”行为是资本市场流动性的关键驱动因素之一。通过观察新开户数、A股总市值与居民储蓄存款比值等指标,可判断居民对权益资产的配置意愿。若该比值刚脱离底部区间,则表明未来仍有较大配置潜力,支撑市场中期上行趋势。同时需结合市场风格切换(如从红利板块转向成长板块)验证资金流向。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:38:08", "modified_time": "2025-08-11 21:38:08", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a9ca57ea5ae94e7988319f307574b53a", "experience_type": "text", "when_to_use": "在行业轮动加速或市场风格切换时,用于识别投资主线并优化资产配置。", "content": "市场风格切换往往由风险偏好变化驱动。例如,从银行+微盘股的哑铃策略转向顺周期、核心资产和科技成长,通常伴随剩余流动性抬升及宽信用传导。可通过观察热门指数走势(如钢铁、沪深300、光模块指数)及相对收益变化判断风格切换。建议关注人工智能、军工、资源品等受益于政策催化和基本面改善的主线调整后的投机机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:38:08", "modified_time": "2025-08-11 21:38:08", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8f12d3fcbf59438cb45e304bb0110668", "experience_type": "text", "when_to_use": "在评估市场整体估值水平时,尤其是在指数全面下跌的背景下,需要判断当前市场是否处于高估或低估区间。", "content": "通过计算和比较不同时间跨度(如自2019年或2021年起)的市盈率百分位,可以有效评估市场的相对估值水平。例如,若某一指数的市盈率百分位超过70%,可能表明市场已进入高估区间,需警惕回调风险;而低于40%则可能意味着估值较低,存在投资机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:39:15", "modified_time": "2025-08-11 21:39:15", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "aee16c0127974f3789da686c351da76a", "experience_type": "text", "when_to_use": "在分析行业轮动趋势时,特别是在市场波动较大且部分行业表现分化的情况下。", "content": "通过统计申万一级行业的涨跌幅排名,识别出表现最强和最弱的行业板块,并结合宏观经济周期、政策导向和市场情绪进行解读。例如,在经济复苏阶段,医药生物、通信等防御性或成长性行业可能表现较好,而煤炭、房地产等周期性行业可能承压。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:39:15", "modified_time": "2025-08-11 21:39:15", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "4c87e625dc924819990924b154ac2560", "experience_type": "text", "when_to_use": "在监测市场情绪和资金流向时,尤其是当市场出现全面下跌或成交活跃度变化时。", "content": "利用全市场交易数据(如成交金额、涨跌家数)和两融数据(融资余额变化、融券余额变化),可以评估市场情绪的强弱。例如,融资余额大幅增加可能表明投资者情绪乐观,但若伴随指数下跌,则需警惕杠杆资金的风险积累。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:39:15", "modified_time": "2025-08-11 21:39:15", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ce190abb76374a6399b025877bbbe61a", "experience_type": "text", "when_to_use": "在制定短期战术性投资策略时,尤其是在市场波动加剧且历史高低点数据显著分化的背景下。", "content": "通过分析创历史新高新低的股票数量及其分布(如30日、60日、120日新高新低数据),可以判断市场的短期趋势强度和潜在反转信号。例如,若创历史新低的股票数量显著增加,可能预示市场整体下行压力加大,需谨慎操作。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:39:15", "modified_time": "2025-08-11 21:39:15", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "cdffca4237964cb2a28d16843d9ab5ae", "experience_type": "text", "when_to_use": "在面对政策风险和市场波动风险时,尤其是在市场出现系统性下跌或政策不确定性较高的情况下。", "content": "结合宏观政策环境和市场表现,明确提示投资者关注政策风险和市场波动风险,并建议采取防御性策略。例如,在政策不确定性较高时,优先配置低估值、高分红的防御性资产,同时控制仓位以应对潜在的市场回调。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:39:15", "modified_time": "2025-08-11 21:39:15", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "56d978c44da44b9da0092242fbeb68b8", "experience_type": "text", "when_to_use": "在评估绿色金融产品(如绿色债券、碳信用等)的投资价值时,特别是在碳中和政策驱动的市场环境下。", "content": "通过分析绿证核发与交易数据,结合可再生能源发电项目的类型和地区分布,评估其市场供需动态及价格趋势。优先关注清洁能源消费占比高且符合国家现代化产业体系导向的园区或企业,作为潜在投资标的。同时,利用交易价格环比变化(如2025年6月绿证平均价格上涨24.77%)判断市场热度和投资时机。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:40:17", "modified_time": "2025-08-11 21:40:17", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "2ef0553a6c2b46ecad3d7b9e68131854", "experience_type": "text", "when_to_use": "在制定ESG相关投资策略时,尤其是在监管强化和技术创新并存的国际市场环境中。", "content": "识别关键政策动向(如美国佛罗里达州对SBTi和CDP的反垄断调查、欧盟推出的VSME标准),评估其对金融机构和企业的潜在影响。结合技术创新(如AlphaEarth Foundations模型的应用)提升环境数据分析能力,优化投资组合中的ESG评分权重,并规避因政策不确定性带来的短期扰动风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:40:17", "modified_time": "2025-08-11 21:40:17", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d226a87090254e468747ce61fef49fbb", "experience_type": "text", "when_to_use": "在为客户提供长期战略规划建议时,特别是涉及农业可持续发展和自然资源管理的领域。", "content": "引入“植物-土壤反馈”理论,帮助客户理解土壤健康管理机制对农业生产的长期收益。结合遥感技术监测甲烷排放等环境指标,设计基于生态效益的投资框架。例如,在青藏高原等敏感区域,建议控制放牧强度以维持植被覆盖率,从而降低生态退化风险并提高土地资产价值。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:40:17", "modified_time": "2025-08-11 21:40:17", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "84e66360117e432182e13570fff89b8e", "experience_type": "text", "when_to_use": "在新兴市场的低碳经济投资中,特别是在国际合作项目或跨境资本流动场景下。", "content": "跟踪多边基金注资(如中国支持巴西热带森林基金TFFF)以及区域性碳配额分配框架(如日本GX-ETS)的实施进展,寻找政策红利下的投资机会。同时,密切关注货币波动和本地市场动态,确保资金配置的安全性和回报率平衡。此外,通过参与国际准则制定(如GRESB本土化调研),增强企业在ESG领域的竞争力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:40:17", "modified_time": "2025-08-11 21:40:17", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f1c83e73922c4ad097bc1775594c3258", "experience_type": "text", "when_to_use": "在进行市场回顾和短期战术操作时,特别是在需要快速评估市场情绪和板块轮动的情况下。", "content": "通过观察主要宽基指数的涨跌情况、行业表现以及概念板块的动态,可以有效识别市场的短期趋势和资金流向。例如,在A股市场中,当综合、银行、钢铁等传统防御性板块领涨时,可能暗示市场风险偏好降低,投资者倾向于避险资产。此方法适用于日内交易或短期投资决策,尤其是在高波动期或熊市环境中。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:41:27", "modified_time": "2025-08-11 21:41:27", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f073bedd4ef04aac9a789a28ae225a77", "experience_type": "text", "when_to_use": "在制定中期组合调整策略时,特别是在分析不同经济周期下的行业表现差异时。", "content": "基于申万一级行业的涨跌幅数据,可以判断当前经济周期所处阶段及板块轮动逻辑。例如,当医药生物、计算机等行业涨幅靠后,而综合、银行等板块领涨时,可能表明市场处于经济复苏初期或滞胀阶段。此时应优先配置防御性或价值型资产,并逐步减少对成长型行业的敞口。该经验适用于发达市场与新兴市场中的中期投资组合优化。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:41:27", "modified_time": "2025-08-11 21:41:27", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b80dc06f9f90408c860b8326e2b200e7", "experience_type": "text", "when_to_use": "在为客户提供咨询服务并解释市场环境变化对其投资组合的影响时,特别是在牛市后期或横盘整理阶段。", "content": "利用成交量和指数涨跌关系来解读市场参与者的信心水平。例如,若沪深两市成交额显著放大但指数涨幅有限,则可能预示市场分歧加剧,需警惕潜在回调风险。同时,结合涨幅居前的概念板块(如首板、打板)可进一步验证市场热点是否具有持续性。这一框架特别适合向初级员工传授如何向客户清晰传达复杂市场信息。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:41:27", "modified_time": "2025-08-11 21:41:27", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "82ece487ea114dab8ea96bba20fac831", "experience_type": "text", "when_to_use": "在设计长期战略规划时,特别是在跨资产类别配置过程中评估宏观经济条件和政策导向。", "content": "通过整合宽基指数、行业涨跌幅和概念板块表现,可以提炼出关于经济增长驱动力的关键洞察。例如,如果科技相关概念(如5G、工业4.0)连续多日领涨,且伴随较高成交量,这可能反映了技术创新驱动的结构性机会。此类信号对于长期投资者尤为重要,有助于提前布局受益于未来经济转型的资产类别,如股票中的科技股或另类投资中的绿色能源项目。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:41:27", "modified_time": "2025-08-11 21:41:27", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f22e8a3b13f0417c9212b4c277c65f71", "experience_type": "text", "when_to_use": "在宏观经济政策调整或重大政治局会议后,评估资本市场走势及行业配置时使用。", "content": "在政策导向明确的市场环境中,通过分析宏观政策的连续性与灵活性,结合财政与货币政策的落地预期,判断资本市场修复趋势。重点关注政策对细分行业的支持方向,如金融、机械设备、TMT等领域,并结合市场估值水平进行超配建议。此外,需关注政策实施节奏及其对市场流动性和投资者信心的影响,适时调整资产配置策略。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:42:36", "modified_time": "2025-08-11 21:42:36", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9ca17837b63d498bbf527885f878da76", "experience_type": "text", "when_to_use": "在经济增速目标实现的关键节点,结合国内外经济环境变化进行投资决策时使用。", "content": "在评估经济增速目标的可实现性时,需综合分析内外部挑战,包括出口韧性、消费边际效应减弱、地产筑底等关键因素。同时,密切关注海外货币政策(如美联储议息会议)对国内市场的溢出效应。通过多层次数据验证(如PMI、信贷社融数据、CPI与PPI),构建经济运行全景图,并据此制定短期震荡整固与中长期上行空间的投资策略。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:42:36", "modified_time": "2025-08-11 21:42:36", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "56e20fcbc60445adaa62d4e543e4cf1c", "experience_type": "text", "when_to_use": "在全球经济增速预期调整或地缘政治风险上升时,优化资产配置和风险管理策略时使用。", "content": "当IMF上调全球经济增速预期但地缘政治风险(如关税政策变动)仍存时,需动态评估外部冲击对国内市场的传导路径。结合资本市场吸引力提升政策(如多层次市场建设、外资参与便利度优化),优先配置具备防御性和稳定分红特征的资产(如银行股)。同时,警惕重要股东减持行为对市场情绪的影响,灵活调整仓位以应对潜在波动。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:42:36", "modified_time": "2025-08-11 21:42:36", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "200212e5977f48c681060c7706120c47", "experience_type": "text", "when_to_use": "在技术迭代和国产替代驱动的新兴行业中寻找投资机会时使用。", "content": "针对半导体、通信、电子等技术密集型行业,应聚焦国产替代进程较快的细分领域(如刻蚀设备、薄膜沉积),并结合AI驱动的新增需求预测未来增长潜力。通过跟踪龙头企业业绩表现和技术突破,识别产业链上下游高景气环节(如服务器ODM、PCB/CCL)。此外,关注政策红利(如特高压电网建设)对相关行业的催化作用,提前布局高确定性标的。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:42:36", "modified_time": "2025-08-11 21:42:36", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "02871a9a044b427fb035ea75f2dadddc", "experience_type": "text", "when_to_use": "在评估特定行业(如有机硅或化工新材料)的投资机会时,特别是在政策驱动的供给侧改革背景下。", "content": "通过分析政策导向(如工信部发布的节能监察通知)对行业的潜在影响,识别出落后产能出清可能带来的行业景气上行机会。重点关注产业链中受益于上游供给收紧的细分领域,并结合财务数据(如毛利率、ROE等)筛选标的公司。例如,针对多晶硅行业专项检查,可以推断出有机硅行业的供需关系改善,从而推荐相关标的如硅烷科技和华密新材。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:43:44", "modified_time": "2025-08-11 21:43:44", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3fd6b13deff14110be8caaf17503345b", "experience_type": "text", "when_to_use": "在市场环境波动较大且需快速调整投资组合时,尤其是在横盘或熊市阶段。", "content": "通过对二级行业表现的细致拆解(如金属新材料、纺织制造等),识别短期内具有相对抗跌性或逆势上涨潜力的个股。例如,在本周化工新材行业整体下跌1.80%的情况下,仍能找到如戈碧迦(+12.44%)、惠同新材(+11.69%)等表现突出的标的。这种基于细分行业和个股波动性的策略可以帮助优化短期战术操作。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:43:44", "modified_time": "2025-08-11 21:43:44", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "cce282047b154d088d2d9026598d3224", "experience_type": "text", "when_to_use": "在制定长期战略规划时,特别是涉及高成长性行业(如新能源、新材料)的企业投融资决策。", "content": "关注募投项目的进展及其对公司综合竞争力的影响。例如,华密新材高端有机硅项目产线建设完成并进入试生产阶段,这表明公司在未来可能具备更强的市场份额和技术壁垒。同时,结合研发费用占比和核心技术优势,评估企业是否能够持续保持市场竞争地位,从而为长期投资提供依据。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:43:44", "modified_time": "2025-08-11 21:43:44", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "00d2da04a327451692d9cbd52e553c63", "experience_type": "text", "when_to_use": "在进行资产配置或跨行业比较时,尤其是在宏观经济环境不确定或行业轮动明显的时期。", "content": "利用化工品价格走势(如布伦特原油、MDI、TDI等)作为领先指标,判断原材料成本变化对下游行业盈利能力的影响。例如,近期天然橡胶和丁苯橡胶价格下跌,可能利好汽车轮胎制造商;而涤纶长丝价格上涨,则可能增加服装行业的成本压力。这种基于大宗商品价格趋势的分析方法有助于提前布局受影响行业中的优质标的。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:43:44", "modified_time": "2025-08-11 21:43:44", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5fddb9241c6e430eb79448ff471c35ab", "experience_type": "text", "when_to_use": "在评估具有高股息率的银行股投资价值时,特别是在宏观经济环境稳定但利率政策存在不确定性的情况下。", "content": "通过分析银行的净息差趋势、负债成本变化以及资产质量(如不良贷款率和拨备覆盖率),结合其股息率与市场估值水平(如市净率),可以有效识别具备防御性和收益性的优质标的。例如,在成都银行案例中,尽管净息差下滑,但其优异的资产质量和高股息率为投资者提供了安全边际,适合在震荡市或低利率环境中配置。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:44:53", "modified_time": "2025-08-11 21:44:53", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "12757434774c448e9257131758ed749a", "experience_type": "text", "when_to_use": "当需要判断创新药企业的增长潜力和估值合理性时,尤其是在行业政策支持和技术快速迭代的背景下。", "content": "重点关注公司研发投入占营收比例、新药管线进展(包括进入临床阶段的产品数量及其适应症覆盖范围)以及核心产品的商业化能力(如是否纳入医保目录)。此外,还需关注国内外市场竞争格局及同类药物的研发动态。以恒瑞医药为例,其持续高强度的研发投入和多项创新产品获批上市,表明长期增长逻辑稳固,即使短期估值较高也值得战略性布局。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:44:53", "modified_time": "2025-08-11 21:44:53", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ee52cd8770de402f860aa8e9f5b00566", "experience_type": "text", "when_to_use": "对于科技类企业(如半导体、PCB等)进行业绩预测和估值修复机会挖掘时,特别是在人工智能、5G通信等新兴技术驱动下需求激增的周期内。", "content": "从技术卡位优势出发,分析企业在关键技术领域(如高速互连PCB、GPU加速模块)的先发优势和客户绑定深度;同时跟踪下游应用领域的扩张速度(如AI服务器渗透率提升)。沪电股份凭借前瞻布局AI算力相关产品并积极扩产,成功抓住了市场需求爆发窗口,展现了较强的盈利弹性,这提示我们应优先选择具备明确产能释放计划且与头部客户深度合作的标的。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:44:53", "modified_time": "2025-08-11 21:44:53", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "958b93a1edb74269b3b4b3c2514584ff", "experience_type": "text", "when_to_use": "在制定跨市场股票组合策略时,尤其是面对不同板块轮动特征明显的牛市后期或结构性行情。", "content": "基于历史数据回溯各板块表现规律,并结合当前经济周期位置、政策导向及资金流向,筛选出兼具基本面支撑和主题催化的个股。例如,东莞证券2025年8月推荐组合中涵盖了金融(成都银行)、消费(依依股份)、科技(兆易创新)等多个领域,体现了分散风险的同时捕捉细分赛道龙头的思路。这种多维度选股方法能够增强组合抗波动能力,同时保留向上弹性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:44:53", "modified_time": "2025-08-11 21:44:53", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0e99b4c78763423694161ea421740f1f", "experience_type": "text", "when_to_use": "在分析宏观经济数据对市场的影响时,特别是非农就业数据等关键经济指标发布后需要评估其对货币政策和资产价格的潜在影响。", "content": "当关键经济数据(如非农就业人数)显著偏离市场预期时,应迅速评估其对央行货币政策路径的潜在影响。例如,美国7月非农就业数据大幅低于预期,结合前值下修,表明劳动力市场降温,这增加了美联储降息的可能性。此类信息可用于调整短期利率敏感型资产(如债券、成长股)的投资策略,并为外汇市场的美元走势提供前瞻性指引。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:45:53", "modified_time": "2025-08-11 21:45:53", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0958a5a5364d47a9b2d8e89a97aaed05", "experience_type": "text", "when_to_use": "在评估财政政策或监管变化对固定收益市场的影响时,例如国债利息收入征税政策的变化。", "content": "当政府宣布对国债利息收入恢复征税时,需快速评估该政策对债券市场供需动态及收益率曲线的影响。对于新发行债券,投资者可能要求更高的收益率以补偿税收成本,从而推高市场利率;而对于存量免税债券,则可能因稀缺性而出现溢价。这一洞察可指导投资组合中固定收益资产的结构调整,尤其是在政策实施前后的时间窗口内。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:45:53", "modified_time": "2025-08-11 21:45:53", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "dc67b7f69ad74a378650218007699a9a", "experience_type": "text", "when_to_use": "在大宗商品市场面临供给侧冲击或需求侧疲软的情况下,例如OPEC+增产导致油价下跌时,需要预测价格趋势并制定交易策略。", "content": "当供应端行动(如OPEC+大幅增产)与全球需求疲软叠加时,需关注库存水平、期货升贴水结构以及技术面支撑位。例如,在国际油价跌破重要心理关口(如布伦特原油70美元/桶)后,可能会触发更多止损卖盘,进一步加剧下行压力。此时,可通过做空相关能源类股票或ETF,同时留意超卖反弹机会来捕捉短期交易收益。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:45:53", "modified_time": "2025-08-11 21:45:53", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "01a6291fa4d14e00afe87263b3df42d9", "experience_type": "text", "when_to_use": "在跨市场联动分析中,特别是在不同资产类别之间寻找避险或轮动机会时,例如股市、债市和商品市场的资金流向分析。", "content": "当日内A股三大指数收红但成交量萎缩时,表明市场情绪仍偏谨慎,资金可能从防御性板块(如石油石化)向进攻性板块(如国防军工)轮动。此外,主力资金净流入排名靠前的行业往往具有短期超额收益潜力。因此,通过实时监控资金流向和板块轮动节奏,可以优化战术资产配置,提升组合收益。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:45:53", "modified_time": "2025-08-11 21:45:53", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b1dbabcc229f4d13b2fe6ab85c348f9e", "experience_type": "text", "when_to_use": "在评估央行货币政策决策及其对市场预期影响时,特别是在关键经济数据发布后(如GDP、通胀率、就业数据)。", "content": "分析央行声明时需关注措辞的细微变化,例如经济增长描述的调整或对不确定性的强调。这些变化通常反映了政策制定者对未来经济前景的态度转变。此外,结合市场定价工具(如CME FedWatch)可以有效评估市场对政策路径的预期调整,从而为投资决策提供前瞻性指导。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:46:51", "modified_time": "2025-08-11 21:46:51", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "dc5beb8c374a49428d39ac0c4c9da171", "experience_type": "text", "when_to_use": "在跨资产类别配置中评估宏观经济环境的影响时,特别是在不同经济周期阶段(如增长放缓或通胀上行初期)。", "content": "利用“目标导向+数据依赖”的货币政策逻辑框架,结合当前经济指标(如失业率、通胀压力、金融市场条件),可以预测未来政策宽松或收紧的可能性。例如,当劳动力市场稳健但通胀高于目标时,降息概率较低,此时应优先考虑防御性资产配置策略,如增加固定收益类资产权重。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:46:51", "modified_time": "2025-08-11 21:46:51", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "fa587d46dd3b4320b9d9da51e0b0abca", "experience_type": "text", "when_to_use": "在评估新兴市场货币和资产的外部风险时,特别是在发达市场央行鹰派表态或美元走强的情况下。", "content": "美联储鹰派立场往往导致美元走强并对新兴市场形成压力。因此,在分析新兴市场资产表现时,需密切关注美联储政策信号对全球资本流动的影响。例如,当美联储明确表示维持高利率时,应警惕新兴市场货币贬值和资金外流风险,并适当降低相关敞口。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:46:51", "modified_time": "2025-08-11 21:46:51", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "38a60a3551694b6a9efeaa9b1e76f7f3", "experience_type": "text", "when_to_use": "在评估全球经济趋势对资产配置的影响时,尤其是在多国经济数据(如PMI、CPI、零售销售等)呈现分化的情况下。", "content": "通过整合全球主要经济体的宏观经济指标(如制造业与服务业PMI、核心CPI、就业数据等),结合政策动态(如美联储降息预期、欧洲央行降息行动),识别经济增长驱动力和潜在风险。特别关注中美贸易关系、关税政策变化以及区域经济刺激措施对市场预期的稳定作用。此外,在分析中引入主动补库存周期和资本品进口数据,可帮助判断制造业复苏的可持续性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:47:49", "modified_time": "2025-08-11 21:47:49", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0028aa674bf040f8aff6a8ef859c095d", "experience_type": "text", "when_to_use": "在制定大类资产策略时,尤其是针对股票、债券、大宗商品及外汇市场的中期调整和主升浪机会。", "content": "利用技术分析结合基本面驱动因素,例如文华大宗商品指数的二浪回调模式,配合美联储货币政策转向的时间节点(如9月降息预期),预测资产价格的关键拐点。同时,关注资金流向的变化,如居民资金从债市向股市转移的趋势,以及通胀上行对长久期国债收益率的冲击,从而优化资产配置建议。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:47:49", "modified_time": "2025-08-11 21:47:49", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "2da5170c2a594c80b273373d53a08d0c", "experience_type": "text", "when_to_use": "在为高净值客户或机构投资者提供跨区域资产配置建议时,特别是涉及新兴市场(如中国)的投资机会。", "content": "基于主权财富基金和家族办公室的调研数据,评估全球资本对中国市场的兴趣升温趋势,重点关注技术创新领域的领导地位(如AI、数据中心建设)。将恒生科技ETF作为离岸中国资产的代表工具,并结合人民币汇率的贸易和资本项下双顺差预期,设计具有吸引力的长期投资方案。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:47:49", "modified_time": "2025-08-11 21:47:49", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "da6de9aca3944d70913f79e19a31e573", "experience_type": "text", "when_to_use": "在评估水电相关资产(如水电站或电力公司股票)的投资价值时,特别是在中国南方地区或其他依赖水力发电的市场环境中。", "content": "通过跟踪降水量、水库水位、入库和出库流量等核心指标,结合历史数据与季节性趋势,可以预测水电出力情况及其对电力价格的影响。此外,代理购电价格的变化可作为短期收益波动的重要参考信号。建议使用多区域降水数据交叉验证,并结合天气模型进行情景分析以提高预测准确性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:48:48", "modified_time": "2025-08-11 21:48:48", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "683bfd88296d4494826c21f80b33c9ba", "experience_type": "text", "when_to_use": "在制定基于自然资源的能源行业投资策略时,尤其是在高波动性和受天气影响显著的市场条件下(例如厄尔尼诺或拉尼娜现象期间)。", "content": "将气象数据与实际运营数据(如水电站装机容量、发电量预测偏差)整合,建立动态风险评估框架。对于长期战略规划,应关注气候变化对水资源分布的潜在影响;而对于短期战术操作,则需密切监测周度甚至日度的降水和流量变化,以捕捉市场时机。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:48:48", "modified_time": "2025-08-11 21:48:48", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0ee13305909a4a27b9d3151b4594fe0e", "experience_type": "text", "when_to_use": "在为客户提供针对特定地区或行业的经济预测服务时,尤其是涉及新兴市场中的基础设施投资或绿色能源转型领域。", "content": "利用地理范围内的本地化数据(如各省降水量及主要水电站运行状态),结合宏观经济周期和政策导向,构建自下而上的分析方法。同时,考虑不同监管框架下的补贴机制和碳交易市场规则,有助于更全面地理解项目收益驱动因素并识别隐藏风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:48:48", "modified_time": "2025-08-11 21:48:48", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "10197994e8884f35ab1db8640faa1550", "experience_type": "text", "when_to_use": "在评估区域经济表现及其对投资组合潜在影响时,尤其是在对比不同地区经济增长趋势的场景下。", "content": "通过分析深圳市与广东省的GDP增速差异,结合产业结构数据(如第二、第三产业贡献),可以识别出区域经济的相对强弱。这种对比有助于判断哪些地区的经济更具增长潜力,并将资源优先配置到高增长区域或行业。此外,高新技术产品出口的增长趋势表明产业升级和技术创新是关键驱动力,这为投资于相关领域提供了支持。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:50:04", "modified_time": "2025-08-11 21:50:04", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ace6dc2cff444ac8936894453632907a", "experience_type": "text", "when_to_use": "在制定针对特定行业的投资策略时,特别是在工业生产和技术改造投资快速增长的情况下。", "content": "通过跟踪规模以上工业增加值及其细分行业(如通用设备制造业、电气机械和器材制造业)的增长情况,可以捕捉到行业内的结构性机会。例如,深圳工业技术改造投资同比增长47.1%,表明企业正在积极进行生产设备升级和效率提升。这类信号提示投资者应关注与工业自动化、智能制造相关的板块,同时警惕传统制造业可能面临的长期压力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:50:04", "modified_time": "2025-08-11 21:50:04", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "580a29d546b049b3b3d25c20216f0362", "experience_type": "text", "when_to_use": "在设计消费导向型投资组合时,尤其是在政府推出刺激政策(如以旧换新补贴)的背景下。", "content": "深圳市社会消费品零售总额数据显示,家用电器、文化办公用品等品类因以旧换新政策而实现显著增长(分别增长55.7%和32.9%)。这表明政策驱动的需求变化能够直接带动某些消费类股票的表现。因此,在类似政策出台时,可重点布局受益于政策红利的消费品公司,并密切关注互联网零售渠道的增长(深圳互联网商品零售额增长19.4%),以抓住线上消费的趋势。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:50:04", "modified_time": "2025-08-11 21:50:04", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e0254d8887ed403d89dc9963b9d56502", "experience_type": "text", "when_to_use": "在评估市场流动性和信贷环境对资产价格的影响时,尤其是在货币政策调整或宏观不确定性较高的时期。", "content": "深圳市金融机构存贷款余额增速企稳回升(存款余额同比增长5.7%,贷款余额同比增长3.5%),反映出市场流动性状况改善。这一指标对于预测房地产、固定收益以及其他依赖信贷扩张的资产类别具有重要意义。此外,深圳存贷款余额占广东省比例的稳定性表明其金融体系的韧性较强,适合在宏观经济波动中寻找避险资产或稳健型投资标的。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:50:04", "modified_time": "2025-08-11 21:50:04", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a69812e6048442b592f30dff795d89b2", "experience_type": "text", "when_to_use": "在进行通胀预期管理及防御性资产配置时,尤其是在CPI同比增速较低但存在分化的情况下。", "content": "深圳市居民消费价格(CPI)同比仅上涨0.1%,但交通通信价格下降2.4%,医疗保健价格上涨1.2%,其他用品及服务价格上涨3.7%。这种分化表明不同消费领域的价格压力各异。在低通胀环境下,建议增加对必需消费品(如食品烟酒、医疗保健)的投资敞口,同时减少受通缩风险影响较大的非必需品(如交通通信)的暴露。此外,还需考虑广东全省CPI同比下降0.4%的背景,避免过度乐观估计整体通胀水平。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:50:04", "modified_time": "2025-08-11 21:50:04", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "01995c8c625c4fdeaefdf5d68aec9cd8", "experience_type": "text", "when_to_use": "在经济周期下行且制造业和非制造业PMI均回落的市场环境中,用于评估行业需求疲软程度并预测未来政策对市场的潜在影响。", "content": "通过分析制造业和非制造业的需求侧指标(如新订单指数、新出口订单指数和在手订单指数),结合价格指数与库存变化,可以判断当前市场处于被动去库阶段。如果上游购进价格显著回升而下游销售价格仍低迷,则表明企业盈利预期改善空间有限,需等待政策落地以推动需求复苏。此外,建筑业和服务业的细分数据可用于进一步识别特定行业的短期压力点和长期增长潜力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:51:24", "modified_time": "2025-08-11 21:51:24", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "aab9222b52e44efab2dc1a8a0e90b193", "experience_type": "text", "when_to_use": "在进行跨资产类别投资组合调整时,尤其是在熊市或高波动期,需要根据宏观经济指标的变化制定战术性资产配置策略。", "content": "利用综合PMI及其分项指标(如生产指数、供应商配送时间指数和从业人员指数)来衡量整体经济景气度,并结合不同资产类别的敏感性进行动态调整。例如,在制造业供给减少但服务业扩张的情况下,可考虑增加防御性板块(如消费必需品和服务行业相关股票)的权重,同时降低对周期性较强资产(如工业和材料板块)的敞口。此外,关注投入品价格与销售价格差值可以帮助优化固定收益产品和大宗商品的投资比例。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:51:24", "modified_time": "2025-08-11 21:51:24", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "52817df5445e4cc5a7c1ff815ecc9bed", "experience_type": "text", "when_to_use": "在新兴市场中,面对货币贬值风险及外部需求疲软,用于评估出口导向型企业的经营压力及潜在机会。", "content": "通过观察新出口订单指数与汇率变动之间的关系,结合原材料成本和出厂价格差值,可以评估出口企业的盈利能力。若新出口订单持续下滑且成本压力上升,则表明短期内出口型企业面临较大挑战;然而,随着政策效应显现(如产能扩张弥补出口缺口),可能在中期迎来反弹窗口。此时,应优先选择具有技术升级能力和内需转型潜力的企业作为标的,同时规避过度依赖单一国际市场的小型企业。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:51:24", "modified_time": "2025-08-11 21:51:24", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c577eb2d7e714d339730977655d44c3e", "experience_type": "text", "when_to_use": "在长期战略规划中,特别是在经济结构调整背景下,用于识别产业升级趋势及政策驱动的增长领域。", "content": "通过跟踪制造业供给侧改革的效果(如“反内卷”政策对企业落后产能的出清作用),结合非制造业中的服务业扩张数据,可以发现结构性增长机会。例如,当建筑业受季节性因素影响增速放缓,但服务业暑期节点消费表现良好时,表明消费驱动型经济正在逐步形成。投资者可将资金配置于受益于城市更新、消费升级和数字化转型的相关产业,以捕捉长期价值增长。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:51:24", "modified_time": "2025-08-11 21:51:24", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "382ac199e24241fab694899ecd72eb3d", "experience_type": "text", "when_to_use": "在分析制造业景气度和价格趋势时,特别是在政策导向较强的行业(如高技术制造业、基础原材料行业)中。", "content": "通过监测PMI及其分项指数(如生产指数、新订单指数、价格指数等),结合政策信号(如反内卷政策、关税谈判结果)来评估行业景气度和价格预期。例如,当价格指数(主要原材料购进价格和出厂价格指数)回升且政策支持明确时,可以判断相关行业的盈利能力和投资信心有望改善。此外,在淡季或外需波动较大的情况下,需特别关注库存指数和新出口订单的变化,以预测供需平衡点的转移。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:52:48", "modified_time": "2025-08-11 21:52:48", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b8c49fe253be45d6bcc42571f4d76f36", "experience_type": "text", "when_to_use": "在评估不同规模企业对经济周期和政策变化的敏感性时,特别是在中小企业融资难问题突出的背景下。", "content": "通过对大型、中型和小型企业PMI的对比分析,识别各规模企业的经营压力和恢复能力。例如,大型企业在经济下行期往往表现出更强的韧性,而小型企业更容易受到外需波动和成本上升的影响。针对小型企业,可以通过政策工具(如结构性货币政策、国家中小企业发展基金二期)提供定向支持,并关注其融资环境改善的实际效果。这种差异化分析有助于制定更精准的风险管理和投资策略。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:52:48", "modified_time": "2025-08-11 21:52:48", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "dc0e5dc2d6b14804bdcfb4051d98588a", "experience_type": "text", "when_to_use": "在宏观经济数据发布后,快速解读其对资本市场的影响时,特别是涉及PMI、PPI等关键指标。", "content": "基于历史数据和市场表现建立基准比较框架,评估当前数据偏离季节性均值的程度及其潜在影响。例如,制造业PMI连续多月低于荣枯线可能预示经济增长动能减弱,但若生产经营活动预期指数保持高位,则表明市场对未来复苏仍有信心。此外,需结合其他同步指标(如BCI企业销售指数、利润前瞻指数)验证结论的可靠性,并考虑政策加码的可能性,以调整资产配置策略。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:52:48", "modified_time": "2025-08-11 21:52:48", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "fc812ae135214ff28a1d300c2b8da201", "experience_type": "text", "when_to_use": "在宏观经济政策转向或重大改革(如反内卷政策)初期,评估其对大类资产配置的影响。", "content": "通过分析经济周期(如基钦周期、朱格拉周期)与政策的叠加效应,判断资产价格的阶段性驱动因素。例如,反内卷政策推动去产能,可能导致大宗商品价格上涨,并成为基钦周期上行期的最后一波上涨催化剂;同时需结合美联储货币政策(如降息预期)进一步确认资产价格的运行时间和力度。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:54:04", "modified_time": "2025-08-11 21:54:04", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "103960f650404f01b00cb4fe44a6037c", "experience_type": "text", "when_to_use": "在市场环境从通缩向通胀过渡时,制定长期利率和债券投资策略。", "content": "关注反内卷政策对低价无序竞争的治理效果,预测PPI和CPI的上行趋势,从而判断长久期国债收益率的下行空间。同时,注意财政政策(如恢复征收债券利息增值税)对资金流向的引导作用,提前布局权益类资产以应对债市潜在的赎回压力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:54:04", "modified_time": "2025-08-11 21:54:04", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6058ecfb4c214b8eb5bf39e9fd0f045d", "experience_type": "text", "when_to_use": "在全球资本流动加速背景下,优化跨境资产配置和外汇风险管理。", "content": "利用中美利差收窄、美联储降息预期以及全球专业投资机构‘去美国化’的趋势,捕捉中国资产的战略性机会。特别是当人民币升值预期增强且贸易、资本双顺差显现时,可加大对中国权益市场的配置,同时减少美元资产敞口以规避潜在风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:54:04", "modified_time": "2025-08-11 21:54:04", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "732a496f18f941de8c63f6a0be65ffe1", "experience_type": "text", "when_to_use": "在行业政策调整或供给侧改革深化阶段,评估相关上市公司业绩及股价表现。", "content": "识别受益于淘汰落后产能的细分领域头部公司,重点关注其利润率提升、分红增加以及回购规模扩大带来的估值修复机会。此外,结合沪深300指数等宽基指数的表现,判断市场整体资金流入节奏,并适时切换至成长性强的中小市值股票以获取超额收益。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:54:04", "modified_time": "2025-08-11 21:54:04", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3896d451674942239b99f84a649eb04c", "experience_type": "text", "when_to_use": "在房地产市场深度调整期,需要判断房价何时见底并预测市场止跌回稳的信号时", "content": "通过多维度指标验证市场底部信号。首先关注交易量的变化,特别是新建商品房和二手房成交量是否连续3-6个月出现环比和同比增长;其次观察价格指标,如房价环比跌幅是否持续收窄或企稳;同时监测库存动态,包括待售面积减少和去化周期缩短至18个月以下的健康区间;最后评估市场情绪转变,例如媒体报道基调、购房者信心及中介活跃度等软性指标。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:55:05", "modified_time": "2025-08-11 21:55:05", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3154d827d7f540aeb5c8e194a055fc7a", "experience_type": "text", "when_to_use": "当需要制定系统性政策建议以应对房地产行业拖累宏观经济的风险时", "content": "采用超常规、系统性的政策组合拳,包含设立中央层面的“房地产稳定基金”用于保交楼和支持房企流动性;加大对地方政府财政支持,优化土地供给调控;推动优质龙头房企并购重组陷入困境的企业资产;降低核心城市限制性政策门槛与交易成本;建立居民房贷弹性处理机制防范社会风险;以及完善融资协调机制避免监管一刀切。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:55:05", "modified_time": "2025-08-11 21:55:05", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "fdaa91c6ac5445848e25c8dc025c61a1", "experience_type": "text", "when_to_use": "在分析房地产对经济全局影响时,尤其是消费、投资和地方财政等领域受到显著冲击的情况下", "content": "综合考虑房地产直接贡献及其上下游产业链溢出效应,量化房地产业增加值占GDP比重下降对经济增长的拖累程度,并结合销售面积、销售额、投资、房企到位资金等数据,全面评估其负向压力。同时深入剖析地方政府因土地出让收入减少而陷入的财力困境,以及如何通过外部力量打破这一负向循环。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:55:05", "modified_time": "2025-08-11 21:55:05", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "26428380a4c84c518bb82ad29e30f97c", "experience_type": "text", "when_to_use": "在研究房价下跌引发的金融风险和社会稳定问题时", "content": "识别四大推动力导致房价持续下行(房企降价自救、非正常抛售、市场信心不足、产品结构升级),并重点评估其连锁反应,包括居民资产缩水抑制消费意愿、购房需求萎缩恶化房企现金流、银行信贷质量承压可能上升的坏账率,以及就业收入不稳叠加房价下行带来的社会稳定隐患。需提前预判潜在危机点并采取针对性措施缓解风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:55:05", "modified_time": "2025-08-11 21:55:05", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b13c230edc464dab956945292b9a258e", "experience_type": "text", "when_to_use": "在评估制造业经济活动变化时,特别是在极端天气或政策调整影响下分析PMI数据的波动。", "content": "通过分解PMI分项指标(如生产指数和新订单指数)来识别拖累整体表现的具体驱动因素,并结合外部变量(如极端天气、季节性因素或政策变化)进行交叉验证。此外,关注价格端指标的变化及其对利润格局的潜在影响,可以更全面地理解行业动态。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:55:59", "modified_time": "2025-08-11 21:55:59", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b0caf670f5a249b4b6a1a7d69ed891f5", "experience_type": "text", "when_to_use": "在分析“反内卷”政策或其他供给侧改革措施对不同行业价格端的影响时,尤其是在基础原材料与下游行业的传导机制中。", "content": "通过对比上下游行业的价格行为(如购进价格与出厂价格的分化),结合政策预期和市场情绪,预测价格变化的阶梯式传导路径。需特别注意政策落地前的交易预期阶段可能引发的价格波动。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:55:59", "modified_time": "2025-08-11 21:55:59", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "869df78c1e774b66b397e25343252e35", "experience_type": "text", "when_to_use": "在非制造业领域(如建筑业和服务业)的价格背离现象分析中,特别是在成本压力和需求差异显著的情况下。", "content": "区分不同行业的投入品结构(如建筑业的钢筋水泥与服务业的人力技术),并结合政策影响和季节性因素,解释价格端背离的原因。这种分析方法有助于揭示行业间的价格传导逻辑及潜在风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:55:59", "modified_time": "2025-08-11 21:55:59", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "39c541de4bbc472e997b086a38071616", "experience_type": "text", "when_to_use": "在评估短期市场景气度回落是否为暂时性现象时,特别是在季节性或外部冲击导致的波动中。", "content": "利用历史数据和行业特性判断景气度回落的驱动因素(如极端天气或政策调整),并通过领先指标(如基建投资计划或消费复苏趋势)预测未来反弹的可能性。同时,考虑政策支持的延续性和实施效果。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:55:59", "modified_time": "2025-08-11 21:55:59", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a25b3a6e5bf94ab29409b9d1eebd4298", "experience_type": "text", "when_to_use": "在评估工业生产和建筑开工率对宏观经济的影响时,尤其是在经济周期下行或政策宽松阶段。", "content": "通过分析建筑开工率、工业生产链(如化工链、汽车钢胎)的高频数据,识别供需变化趋势。例如,当石油沥青装置开工率和水泥发运率处于历史低位时,可以推测基建和房建需求疲软,进而影响相关产业链的投资决策。此外,结合资金到位率等指标,可进一步验证需求恢复的可能性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:56:55", "modified_time": "2025-08-11 21:56:55", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "2cab4534302f42feacf6f18d7198faa1", "experience_type": "text", "when_to_use": "在预测出口表现时,特别是在全球贸易政策变动或关税调整的关键节点。", "content": "利用多指标模型(如装载集装箱船数量、出口同比数据)结合政策时间窗口进行预测。例如,若美国推迟对部分地区的关税执行日期,则可能引发抢出口效应,导致短期内出口韧性增强。这种分析需结合历史数据和当前市场动态,以提高预测准确性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:56:55", "modified_time": "2025-08-11 21:56:55", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "eb44b3be75024107833a2e652fe94d50", "experience_type": "text", "when_to_use": "在分析国内工业品价格走势时,尤其是在反内卷政策预期或市场情绪波动较大的情况下。", "content": "通过观察南华综合指数及细分品种(如黑色金属、煤炭、化工链产品)的价格变化,判断市场交易逻辑。例如,在反内卷政策预期下,多数工业品价格可能震荡偏强运行,但建材类商品(如水泥、沥青)可能因需求疲软而回落。建议关注政策落地时间和市场情绪变化对价格的持续性影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:56:55", "modified_time": "2025-08-11 21:56:55", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "30b3b6601d6142fb9a73aba547f628d7", "experience_type": "text", "when_to_use": "在评估房地产市场表现及其对经济的潜在拖累时,尤其是在政策放松后的市场调整阶段。", "content": "通过跟踪新建房和二手房成交面积、价格指数等高频数据,判断市场需求的真实复苏情况。例如,尽管政策放松可能带来短期需求释放,但如果成交面积迅速回落至历史低位,则表明市场信心不足。此时需关注后续增量政策的可能性及其对市场的提振作用。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:56:55", "modified_time": "2025-08-11 21:56:55", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "80544af6a6284ec082e183340abc6127", "experience_type": "text", "when_to_use": "在评估制造业景气度及其对宏观经济的影响时,尤其是在经济处于下行压力或复苏初期阶段。", "content": "通过分析PMI数据的供需两侧分项指标(如新订单、生产指数、库存和价格指数),可以识别行业修复的瓶颈。例如,当新订单和在手订单指数均低于荣枯线时,表明需求端疲软,需关注政策刺激对需求的拉动效果。同时,原材料和产成品库存指数低于临界点,可能预示企业补库意愿不足,需警惕供应链调整风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:57:52", "modified_time": "2025-08-11 21:57:52", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "71f8772fcfcf495b8ebdb2e29a17d1e3", "experience_type": "text", "when_to_use": "在跨资产类别投资组合调整时,特别是在经济周期转折点或市场波动加剧的情况下。", "content": "利用PMI数据中的价格分项(如原材料购进价格和出厂价格指数)结合贸易端数据(如新出口订单和进口指数),可以判断通胀压力和外部需求的变化趋势。例如,当原材料购进价格指数高于荣枯线而出厂价格指数低于荣枯线时,表明企业利润承压,可能需要调整固定收益类资产配置比例以规避风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:57:52", "modified_time": "2025-08-11 21:57:52", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "07db8a3c30af48f9aa2df98785a121b5", "experience_type": "text", "when_to_use": "在分析低通胀环境对实际利率和融资成本的影响时,尤其是在央行采取宽松货币政策但经济需求疲软的情况下。", "content": "在低通胀环境下,名义利率的下调可能无法有效转化为实际利率的下降。此时应重点关注生产资料价格的传导效应及其对工业企业盈利能力的影响,并结合CPI与PPI的相关性分析,评估实体经济融资需求的变化。同时,需监测政府债券融资对社融增速的支撑作用,以判断实体部门融资需求的真实水平。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:58:42", "modified_time": "2025-08-11 21:58:42", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "03d91dbd873444bc884bc186a10f94c7", "experience_type": "text", "when_to_use": "当需要评估大宗商品价格波动对国内工业品价格及下游需求的传导机制时,特别是在国际市场需求疲软或地缘政治风险加剧的情况下。", "content": "大宗商品价格的输入性压力会显著影响国内原材料购进成本,进而通过生产资料价格传导至生活资料价格。建议结合PMI出厂价格指数与主要原材料购进价格指数的相关性分析,识别价格传导的滞后性和强度。此外,需关注装备制造业和建材行业的需求变化,尤其是房地产投资对建筑业相关产业的拖累效应。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:58:42", "modified_time": "2025-08-11 21:58:42", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "796678d4827044e0bc8cdc4a7457b308", "experience_type": "text", "when_to_use": "在研究行业竞争格局对工业品价格形成机制的影响时,特别是在政策层面强调反内卷式竞争的背景下。", "content": "内卷式竞争可能导致供应商之间的非理性低价竞争,进一步压低工业品出厂价格并削弱企业盈利能力。为应对这一问题,可参考政策文件中关于行业自律和规范竞争的表述,结合具体行业的供需动态,评估其对企业盈利及居民收入预期的长期影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:58:42", "modified_time": "2025-08-11 21:58:42", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ec06908f927c4e508a6a1efac04da377", "experience_type": "text", "when_to_use": "在评估宏观经济环境对投资决策的影响时,尤其是在中美贸易摩擦或类似外部冲击背景下制定资产配置策略。", "content": "通过分析出口、工业增加值和PPI等关键经济指标的变化趋势,识别外部关税政策对不同行业(如钢铁、纺织)的直接影响,并结合货币政策工具(如降准、降息)的实施节奏,判断市场流动性和企业融资成本的变化。同时,关注“抢出口”效应带来的短期机会以及长期结构性调整压力,优化投资组合以平衡风险与收益。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:59:48", "modified_time": "2025-08-11 21:59:48", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7867951492824a82a245b81e066a3de2", "experience_type": "text", "when_to_use": "在设计针对科技型企业的融资方案时,特别是在债券市场“科技板”推出后支持处于不同生命周期阶段的企业。", "content": "利用全生命周期金融服务框架,为科技型企业提供灵活的融资解决方案,包括研发周期分期还贷安排和含权结构债券条款设计。优先选择符合国家战略导向的“硬科技”领域企业进行投资,并借助科创债的风险分担机制降低投资不确定性。此外,密切关注资本市场支持工具的使用情况,确保资金流向高潜力项目。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:59:48", "modified_time": "2025-08-11 21:59:48", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "624864b726d04afa869ce3f61d64363f", "experience_type": "text", "when_to_use": "在房地产市场低迷时期评估固定资产投资的增长潜力及潜在拖累因素,尤其是在房地产去库存压力较大的情况下。", "content": "通过跟踪房地产开发投资、新开工面积及销售数据,综合分析地方政府专项债的使用效率及其对实物工作量的拉动效果。特别注意房地产“白名单”制度下金融贷款支持的实际落地情况,以及保障房建设和老旧小区改造项目的推进进度。若发现合格有效项目缺失导致投资增速受限,则需及时调整投资策略,转向其他更具增长潜力的领域,例如制造业或新基建。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:59:48", "modified_time": "2025-08-11 21:59:48", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1a7c9457fc5a40fc9d74d762d04e6b1e", "experience_type": "text", "when_to_use": "在制定消费刺激政策背景下的零售行业投资策略时,特别是面对居民收入预期偏弱和内需疲软的情况。", "content": "基于社会消费品零售总额增速及主要商品零售额数据,评估耐用消费品补贴政策(如“以旧换新”)的边际效益递减速度。重点关注政策驱动型消费(如家电、汽车)的增长可持续性,同时警惕价格战引发的行业盈利下滑风险。建议采用多维度筛选方法,优选受益于消费升级趋势且具备较强品牌竞争力的龙头企业作为投资标的。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 21:59:48", "modified_time": "2025-08-11 21:59:48", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f8a1661aa38c4d98b2660b75f5901a9a", "experience_type": "text", "when_to_use": "在宏观策略制定和大类资产配置时,尤其是在地缘政治局势复杂、贸易谈判动态影响市场预期的背景下。", "content": "通过跟踪地缘局势(如伊以冲突、俄乌局势)和经贸谈判(如中美关税协议)的进展,结合全球风险偏好变化,识别资产价格波动的关键驱动因素。例如,当市场风险偏好因地缘局势缓解而回暖时,可优先配置风险资产,并根据政策落地情况调整配置权重。同时,关注美元指数与大宗商品的相关性变化,适时调整商品敞口。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:01:08", "modified_time": "2025-08-11 22:01:08", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d55c344b25a64fea99e3f5c1cbb092b8", "experience_type": "text", "when_to_use": "在分析大宗商品市场结构变化时,特别是在政策干预(如反内卷政策)对供需格局产生深远影响的情况下。", "content": "利用政策预期与实际执行的时间差,评估商品价格从预期到现实的传导路径。例如,在反内卷政策推动下,重点关注工业硅、多晶硅等行业的落后产能出清节奏,以及成本向下游终端的传导效率。同时,结合库存周期和行业基本面数据,判断品种间的分化机会,采取多空套利策略(如低位多玻璃空纯碱)。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:01:08", "modified_time": "2025-08-11 22:01:08", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "77b355d7079e478aa1809e87b606afa6", "experience_type": "text", "when_to_use": "在评估国内经济政策对外需回落的对冲效果时,特别是在内外需动态变化显著的阶段。", "content": "结合宏观经济指标(如出口金额同比、固定资产投资增速)和政策基调(如政治局会议提出的“适时加力”),动态评估内需政策的托底效应。例如,当外需压力显现时,关注财政政策发力方向(如基建投资)和货币政策宽松力度,判断其对相关板块(如周期股、大宗商品)的支撑作用,从而优化资产配置。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:01:08", "modified_time": "2025-08-11 22:01:08", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "523e271dc0cf47938b4898b06a00c688", "experience_type": "text", "when_to_use": "在金融市场流动性分析和国债收益率曲线策略制定时,尤其是在货币和财政政策协调配合的关键时期。", "content": "通过观察银行间市场流动性指标(如R007、质押式回购成交量)和央行操作(如逆回购、MLF投放),评估资金面松紧对债市的影响。例如,在地方债缴款和税期叠加的背景下,推荐采用陡峭化策略,捕捉长端利率波动中枢的变化。同时,结合金融条件指数(如中国金融条件宽松程度)判断股市流动性的活跃度,适时调整权益资产的风险敞口。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:01:08", "modified_time": "2025-08-11 22:01:08", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1b099b12820c47da8f4fff60682b2460", "experience_type": "text", "when_to_use": "在宏观经济政策分析的场景下,特别是解读中央政治局会议或类似高层经济决策信号时,用于评估政策方向及其对市场的影响。", "content": "在分析宏观政策时,应重点关注政策灵活性和预见性的表述。例如,在本次案例中,政策强调‘增强灵活性预见性’,这表明未来政策可能根据外部冲击提前调整,如中美关税谈判结果或美联储降息的不确定性。因此,分析师需提前识别潜在风险并评估政策储备工具的可能实施路径,为投资组合调整提供依据。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:02:19", "modified_time": "2025-08-11 22:02:19", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e9a2235e5aac46e8bf4c82cb295b02c2", "experience_type": "text", "when_to_use": "在财政政策与货币政策协调分析的场景下,特别是在判断下半年政府债券发行、资金使用效率及结构性货币宽松工具的应用时。", "content": "财政政策的重点在于‘提速’与‘提效’,即加快政府债券发行的同时提高资金使用效率,避免低效投资。而货币政策则更倾向于通过结构性工具(如再贷款、再贴现)实现定向宽松,而非全面降息。这种分层策略要求分析师关注具体项目的落地情况以及流动性传导效果,从而评估其对经济增长的实际贡献。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:02:19", "modified_time": "2025-08-11 22:02:19", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "48b1d397c25a4b95b79a0cddf8565c78", "experience_type": "text", "when_to_use": "在行业产能治理和市场竞争秩序优化的背景下,尤其是在分析特定行业的价格走势和利润空间时。", "content": "针对重点行业的产能治理并非旨在推高商品价格,而是通过规范无序竞争行为(如低价倾销),引导形成合理的利润区间。这一政策目标需要结合内需恢复节奏进行综合判断。如果需求端仍然温和,则不会引发通胀快速上行,全年物价水平有望保持可控。因此,分析师应在供给端优化与需求端变化之间寻找平衡点,以预测行业盈利能力和市场稳定性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:02:19", "modified_time": "2025-08-11 22:02:19", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "2780bb774f734926808fb6a03b4c72f4", "experience_type": "text", "when_to_use": "在外贸企业支持政策的分析场景下,特别是在外部需求走弱、地缘摩擦频发的情况下,评估稳外贸措施的有效性。", "content": "面对出口不确定性和外部需求压力,政策强调‘帮助受冲击较大的外贸企业’并推动‘内外贸一体化’。这意味着分析师需关注两类关键指标:一是融资支持力度是否足以缓解企业现金流压力;二是开放平台建设(如自贸试验区)能否提升企业的抗风险能力。这些因素将直接影响外贸企业的韧性和长期竞争力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:02:19", "modified_time": "2025-08-11 22:02:19", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d9c37253803b4090bd1c3e943de948bb", "experience_type": "text", "when_to_use": "在分析宏观经济数据(如非农就业、失业率、薪资增速等)对货币政策的影响时,特别是在预测央行利率决策的场景下。", "content": "通过分析非农就业数据的总量、行业结构和薪资增速,结合失业率和劳动参与率的变化,可以评估劳动力市场的强弱及其对经济动能的影响。若新增就业显著低于预期且失业率上升,则可能预示经济步入衰退通道,进而提升央行降息的概率。此外,需关注薪资增速的韧性,因其可能反映潜在的通胀压力,影响政策调整的节奏。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:03:34", "modified_time": "2025-08-11 22:03:34", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "98a811fe48e44154ba288d8e5542c0f3", "experience_type": "text", "when_to_use": "在评估市场对经济数据反应的短期波动风险时,特别是在高波动期或危机条件下制定交易策略的场景下。", "content": "当关键经济数据(如非农就业报告)发布后,市场通常会迅速重新定价资产,尤其是利率敏感型资产(如债券、外汇)。通过观察市场对数据的即时反应(如利率期货隐含概率变化),可以捕捉短期交易机会。同时,需警惕数据修正带来的二次波动风险,并结合其他经济指标(如通胀数据)验证信号的可靠性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:03:34", "modified_time": "2025-08-11 22:03:34", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8899bf0cd7fb422fb47726995c30c691", "experience_type": "text", "when_to_use": "在进行跨资产类别投资组合调整时,特别是在经济周期转折点或板块轮动明显的市场环境中。", "content": "利用非农就业数据中的行业结构信息(如服务业、制造业的表现)识别经济周期所处阶段。例如,若服务业就业增长强劲而制造业就业疲软,可能表明经济处于晚周期阶段,适合增加防御性资产(如公用事业股票、高质量债券)配置,同时减少周期性资产(如工业、材料类股票)的敞口。此外,薪资增速的分化可用于判断行业成本压力,优化行业配置。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:03:34", "modified_time": "2025-08-11 22:03:34", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f38c2533553f4bbda9ca56d49f34928d", "experience_type": "text", "when_to_use": "在为客户提供长期战略规划建议时,特别是在低利率环境下评估固定收益资产和另类投资的相对吸引力。", "content": "当非农就业数据持续疲软且薪资增速保持韧性时,可能预示未来通胀压力有限但经济增长放缓。这种环境下,固定收益资产(尤其是长端国债)可能受益于利率下行预期,而另类投资(如房地产、基础设施)则可通过稳定的现金流提供抗通胀保护。建议客户根据自身风险偏好,在传统资产与另类资产之间实现动态平衡。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:03:34", "modified_time": "2025-08-11 22:03:34", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b74061f9647048229d06cb160e7ee246", "experience_type": "text", "when_to_use": "在新兴市场与发达市场之间的资金配置决策中,特别是在全球经济不确定性上升或美元流动性收紧的背景下。", "content": "非农就业数据的疲软可能引发美联储宽松预期,从而缓解美元流动性压力,利好新兴市场资产。然而,需结合新兴市场的本地经济数据(如通胀、外汇储备)评估其抵御外部冲击的能力。对于发达市场,重点关注薪资增速对消费支出的支撑作用,以判断内需驱动型经济体的韧性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:03:34", "modified_time": "2025-08-11 22:03:34", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b9ef20524f15495e8fa791ec605f52e9", "experience_type": "text", "when_to_use": "在评估中央银行政策决策及其对市场影响时,特别是在政策分歧或外部政治压力较大的情况下", "content": "通过分析美联储会议声明、投票记录及关键人物的公开表态,识别政策制定者的内部共识与分歧。重点关注政策声明措辞的变化(如删除或新增表述)以及反对票背后的逻辑,结合宏观背景(如关税谈判进展、劳动力市场数据等)判断政策方向。例如,在本次FOMC会议中,删除“不确定性已经减弱”的表述并强调经济前景的高不确定性,表明美联储倾向于审慎立场。此外,通过观察政策决策者对预防性降息的态度,可以进一步推断未来利率路径的可能性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:04:41", "modified_time": "2025-08-11 22:04:41", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "bbbdc2ac8c634aeb94bedd381a81eec7", "experience_type": "text", "when_to_use": "在预测货币政策调整时间点及其对市场预期的影响时,特别是在通胀和就业数据尚未完全明朗的情况下", "content": "利用前瞻性指引和关键经济指标(如通胀、就业数据)的时间窗口,结合市场隐含概率(如利率期货市场数据),评估政策调整的可能时机。例如,鲍威尔明确表示尚未对9月会议做出决定,并淡化了市场对9月降息的高预期,这表明美联储需要更多时间观察经济数据。因此,在复杂环境下,建议投资者关注未来两个月的关键数据发布(如就业报告和通胀数据),以重新校准预期。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:04:41", "modified_time": "2025-08-11 22:04:41", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e4ed41d13f484e30b3404a05db7ad05b", "experience_type": "text", "when_to_use": "在分析政治干预对央行独立性及政策路径的影响时,尤其是在选举周期或政府债务压力较大的背景下", "content": "通过梳理法律框架、政治成本及市场反应,评估外部施压对央行政策决策的实际影响。例如,尽管特朗普对美联储施加压力要求降息,但历史经验和当前分析表明,解雇美联储主席既不可行也不明智,因其可能引发市场动荡。同时,美联储内部领导层的凝聚力(如鲍威尔对多数票委的影响力)能够有效抵消外部干扰,确保政策路径的一致性。这一经验可用于其他类似场景,如新兴市场国家央行面临政府干预的情况。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:04:41", "modified_time": "2025-08-11 22:04:41", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a5092086856b4d24b96eaf3058f3e0f6", "experience_type": "text", "when_to_use": "在评估中央银行政策决策及其市场影响时,尤其是在货币政策与政治压力交织的复杂环境中。", "content": "在分析美联储政策时,需特别关注其政策声明中的措辞变化(如删除“不确定性进一步降低”),并结合宏观经济数据(如GDP、PDFP等)判断内生经济动能的变化。此外,应识别政策制定者的核心关注点(如鲍威尔对通胀上行风险的担忧)以及潜在的政治博弈对政策方向的影响。通过历史数据对比(如FOMC反对票的频率),可以更好地理解当前政策环境的特殊性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:05:54", "modified_time": "2025-08-11 22:05:54", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1a442c1fdcc4434fbfd00f21c82f523b", "experience_type": "text", "when_to_use": "在预测美国经济短期波动及其对金融市场的影响时,特别是在高波动性或政策驱动型市场中。", "content": "分析美国经济数据时,需区分总量波动和内生动能变化。例如,GDP环比折年率可能因一次性因素(如关税政策引发的抢进口)而大幅波动,但PDFP(国内私人部门最终购买)更能反映经济的真实健康状况。同时,需结合分项数据(如设备投资与住宅投资的分化)评估不同部门对经济增长的贡献,并警惕高利率对特定行业(如房地产)的长期压制效应。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:05:54", "modified_time": "2025-08-11 22:05:54", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1565e3bacd0c45abbd087ffe771cfaae", "experience_type": "text", "when_to_use": "在评估通胀风险及其对货币政策的潜在影响时,特别是在外部冲击(如关税或地缘政治事件)可能推升价格水平的情况下。", "content": "通胀分析需综合考虑供给侧和需求侧因素,尤其是不可控的外部变量(如特朗普关税政策和中东局势)。当通胀预期上升时,央行可能更倾向于维持紧缩立场,即使就业市场数据看似稳健。因此,需动态跟踪相关利益方的博弈(如税收分摊机制)以及通胀滞后效应,避免仅依赖单一指标(如失业率)进行判断。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:05:54", "modified_time": "2025-08-11 22:05:54", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ae606ead09b249748efb5c832adbe574", "experience_type": "text", "when_to_use": "在制定跨资产类别的投资策略时,特别是在货币政策转向的关键节点(如降息周期的初期)。", "content": "在货币政策转向期,需结合经济数据(如非农就业、通胀报告)和政治动态(如债务上限谈判、新联储主席提名)评估市场预期的合理性。例如,尽管就业和通胀数据可能支持降息,但政治压力(如特朗普对联储的干预)可能导致政策路径偏离市场预期。此时,投资者应灵活调整资产配置,重点关注利率敏感型资产(如债券和房地产)以及避险资产(如黄金)的表现。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:05:54", "modified_time": "2025-08-11 22:05:54", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "77e3f89588e9478e9c18f1b68e76caf0", "experience_type": "text", "when_to_use": "在分析制造业和非制造业PMI数据以评估经济复苏阶段时,尤其是在需求侧疲软且价格传导机制不畅的环境下。", "content": "通过分解PMI的供需两端指标(如生产指数、新订单指数、新出口订单指数),结合价格指数(出厂价格与购进价格)的变化,可以有效识别经济复苏的结构性问题。特别关注原材料价格上涨快于出厂价格的现象,这表明中游企业利润承压,需进一步观察需求端是否能配合价格回升实现良性传导。此外,库存和采购指标的回落反映了企业在需求不确定性下的防御性策略,可作为判断市场信心的重要信号。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:07:10", "modified_time": "2025-08-11 22:07:10", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b26d36d7638946029c167063c5b01bb4", "experience_type": "text", "when_to_use": "在评估政策导向对市场价格预期的影响时,尤其是在‘反内卷’政策或其他行业调控措施出台后。", "content": "政策导向(如‘反内卷’)可能短期内提振上游大宗商品价格,但需警惕其对下游行业的传导效果。通过观察价格指数的剪刀差(购进价格与出厂价格的差异)以及行业层面的价格变化(如黑色金属、消费品行业),可以判断政策的实际影响范围和深度。若剪刀差扩大且下游行业未能有效提价,则表明政策效果仍局限于上游,需求侧的配合仍是关键。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:07:10", "modified_time": "2025-08-11 22:07:10", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d64ede4fae8a412a8f343f865d78dc20", "experience_type": "text", "when_to_use": "在预测出口趋势及其对经济增长的影响时,特别是在抢出口效应透支后外需可能走弱的情况下。", "content": "抢出口效应可能导致短期贸易顺差创新高,但需结合高频数据(如港口货物吞吐量)验证其可持续性。同时,结合全球经济复苏放缓、美欧制造业扩张动能减弱等外部环境因素,可以更准确地预判出口压力。此外,政治局会议提出的‘宏观政策适时加力’为后续财政和货币政策协同发力提供了指引,需密切关注政策落地对内需的支撑作用。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:07:10", "modified_time": "2025-08-11 22:07:10", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1a2ed3361e6745aa962e174ac1804efb", "experience_type": "text", "when_to_use": "在评估极端天气和自然灾害对生产和物流效率的影响时,尤其是在夏季高温、台风暴雨频发的季节。", "content": "极端天气对制造业生产和物流效率的影响可通过生产指数和库存指标的变化进行量化分析。例如,生产指数虽季节性回落但仍处于扩张区间,表明韧性犹存;而库存和采购指标的下滑则反映出企业对未来需求恢复的信心不足。结合具体行业(如建筑业受暴雨影响较大,土木工程相对坚挺)的表现,可以更精准地评估极端天气对不同板块的差异化影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:07:10", "modified_time": "2025-08-11 22:07:10", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9d152f42b2dc47e4bfa58adaccac2ea6", "experience_type": "text", "when_to_use": "在评估区域经济表现及政策影响时,尤其是在省级或国家级经济数据发布后,需要判断不同区域的经济增长趋势及其对全国经济目标的影响。", "content": "通过对比各省份GDP增速与全年目标增速,识别出完成目标压力较大的区域,并结合固定资产投资、消费和出口等关键指标,分析其经济增长驱动力的强弱。例如,东部沿海省份可能因出口承压而增长放缓,而中西部地区则可能受益于绿色新能源产品出口和内陆开放政策红利实现高速增长。建议在制定投资策略时优先关注中西部地区的新兴市场机会,同时警惕东部地区因外需疲软导致的潜在风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:08:08", "modified_time": "2025-08-11 22:08:08", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "35cc526a8d2547ae89de87470230ebb6", "experience_type": "text", "when_to_use": "当需要制定跨区域资产配置策略时,特别是在面对不同地理范围(如发达市场与新兴市场)以及多样化资产类别(如股票、固定收益、房地产)的情况下。", "content": "根据区域内各省经济分化的特点,选择具有结构性优势的资产进行配置。例如,在经济大省内部存在分化的背景下,江苏省因其对地产和出口依赖度较低且先进制造业发展较快,可被视为更具韧性的投资标的;而广东省受房地产调整和出口承压影响较大,则需谨慎对待相关行业股票或债券。此外,对于固定资产投资增速较高的西部省份(如西藏、新疆),可以考虑布局基础设施建设和新能源领域的项目融资或股权投资。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:08:08", "modified_time": "2025-08-11 22:08:08", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b2eb32cd637f4e2dac5b12fe01186344", "experience_type": "text", "when_to_use": "在宏观经济周期波动显著时期(如高波动期或经济复苏初期),需要预测未来半年至一年内的市场动态并优化交易策略。", "content": "利用经济大省挑大梁作用增强的趋势,结合下半年地方政府经济工作会议透露的重点方向(如提振消费、扩大内需、推动新质生产力发展等),提前布局受益于政策支持的行业。例如,针对四川提出的消费品以旧换新资金撬动作用,可重点关注耐用消费品(如汽车、家电)相关企业的短期战术操作机会;而对于上海强调的海洋经济发展,则适合开展长期战略规划,押注海工装备、船舶制造等细分领域龙头公司。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:08:08", "modified_time": "2025-08-11 22:08:08", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "41749e79e0974521852aef38f5e11963", "experience_type": "text", "when_to_use": "在宏观经济政策分析和预测场景中,特别是在评估国内外经济环境对市场影响时使用。", "content": "通过解读高层政策会议(如中央政治局会议)的要点,结合宏观经济数据(如GDP增速、就业率、物价水平等),识别短期和中期政策方向及其潜在市场影响。例如,当会议强调‘宏观政策要持续发力、适时加力’时,表明未来可能出台增量政策工具(如降息、财政赤字扩大等),投资者应关注流动性宽松预期和资产价格变化,并据此调整投资组合。此外,外部经贸环境的稳定性(如中美关税谈判结果)也需要纳入考量,以判断外贸企业面临的下行压力及政策支持的必要性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:09:39", "modified_time": "2025-08-11 22:09:39", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "65b1ba21e3e14441b2ee45671c9cf5e2", "experience_type": "text", "when_to_use": "在行业结构调整和反内卷政策分析场景中,特别是在评估产能治理和市场竞争秩序优化对企业盈利能力的影响时使用。", "content": "针对政府提出的‘反内卷’政策,需深入分析其对重点行业的具体实施路径和效果。例如,遏制企业低价竞争和治理过剩产能将直接改善工业品价格同比降幅,缓解实际利率偏高问题。同时,政策推动促消费措施(如育儿补贴、消费券发放等)将进一步刺激内需,进而带动生产端需求升级。投资者可通过跟踪政策执行力度和相关行业数据(如PPI、企业利润增速等),提前布局受益于政策导向的板块,如消费品制造和服务行业。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:09:39", "modified_time": "2025-08-11 22:09:39", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "619aff8aebcc4d3781eb1c3e3b1d6376", "experience_type": "text", "when_to_use": "在房地产市场分析和投资策略制定场景中,特别是在评估稳楼市政策对市场预期和资产价格的影响时使用。", "content": "当高层会议未直接提及房地产但强调‘四稳’时,表明稳楼市仍是政策重点之一。投资者应关注具体政策措施的落地情况,如城中村改造、专项债资金收购存量商品房转为保障房、降低居民房贷利率等。这些措施不仅有助于止跌回稳,还可能带来局部市场的量价反弹。因此,在资产配置中,可适当增加与房地产相关的固定收益产品或REITs的投资比例,同时密切监测房价和销量数据的变化,以验证政策效果并动态调整策略。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:09:39", "modified_time": "2025-08-11 22:09:39", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b23baca5243540e99e9111578fdd462c", "experience_type": "text", "when_to_use": "在制定宏观经济政策建议时,特别是在经济面临内外部冲击、需要增强市场信心的场景下。", "content": "通过分析政治局会议的政策要点,可以提炼出政策工具箱的动态调整策略。例如,在经济运行面临风险挑战时,适时推出增量储备政策(如降准降息、结构性货币政策工具),并通过超常规逆周期调节来稳定基本面。同时,强调政策的连续性和灵活性,确保宏观调控的前瞻性、针对性和有效性。此经验适用于不同经济周期和市场环境,尤其在高波动期或危机条件下尤为重要。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:10:46", "modified_time": "2025-08-11 22:10:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3eddf391ef3e4debbea285187557268e", "experience_type": "text", "when_to_use": "在评估投资机会时,特别是在涉及科技创新和产业升级相关的新兴支柱产业领域。", "content": "根据政策导向,重点关注科技创新和产业创新深度融合发展领域,例如人工智能+行动、关键核心技术攻关等方向。这些领域通常受益于政策支持(如债券市场的“科技板”)和市场需求增长,具备较高的长期投资价值。此外,结合地方政府专项债券和超长期特别国债的资金流向,可以进一步筛选具有较高潜力的投资标的。此经验适用于中长期战略规划,尤其是在经济转型和技术驱动型市场中。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:10:46", "modified_time": "2025-08-11 22:10:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "086a980698714ec38930dc822bbe6176", "experience_type": "text", "when_to_use": "在进行房地产和金融风险评估时,特别是在地方政府债务风险和房地产市场稳定性分析场景中。", "content": "通过梳理政策对地方政府债务和房地产市场的治理措施(如严禁新增隐性债务、优化存量商品房收购政策),可以识别潜在的风险点和政策干预方向。例如,地方政府融资平台出清和城中村改造政策可能对区域房地产市场产生深远影响。因此,在评估相关资产类别时,需结合政策导向和地方执行力度,综合判断风险敞口。此经验适用于短期战术操作和中期组合调整,尤其是在市场不确定性较高的情况下。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:10:46", "modified_time": "2025-08-11 22:10:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "358575917d744ca29344da7ff6a1633a", "experience_type": "text", "when_to_use": "在设计消费提振策略时,特别是在服务消费和中低收入群体消费需求扩张的场景下。", "content": "政策明确提到扩大商品消费的同时培育服务消费新的增长点,并通过清理限制性措施和设立专项再贷款(如养老再贷款)来支持消费领域发展。结合提高中低收入群体收入的政策导向,可以优先布局与民生改善密切相关的消费行业(如教育、医疗、养老服务)。此外,关注地方政府专项债券资金投向也有助于捕捉区域性消费热点。此经验适用于日内交易至短期战术操作,尤其是在消费复苏预期较强的市场环境中。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:10:46", "modified_time": "2025-08-11 22:10:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0d04b00a916644409d14b85669fabd55", "experience_type": "text", "when_to_use": "在宏观经济数据发布后,评估其对资本市场(股票、债券、外汇)的短期影响时。", "content": "结合PMI、GDP、通胀率等关键经济指标的变化趋势,分析市场预期与实际数据的偏离程度,并综合考虑央行货币政策信号(如利率决议及前瞻性指引)来推断资产价格的潜在波动方向。例如,当制造业PMI低于预期且央行维持宽松立场时,可预判债券收益率可能下行,而股市或因经济增长担忧承压。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:11:49", "modified_time": "2025-08-11 22:11:49", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a15d73d8f658474cb77cde1c5ed86ab6", "experience_type": "text", "when_to_use": "在全球贸易政策变化(如关税谈判或协议达成)引发市场情绪波动时,制定跨资产类别的配置建议。", "content": "通过跟踪国际贸易动态(如中美关税谈判进展、欧盟与美国的税率协议),评估其对相关行业的直接和间接影响。例如,在关税局势缓和背景下,关注受益于出口复苏的行业(如制造业、能源)以及受汇率波动影响较大的货币对(如欧元兑美元)。同时,需注意避险资产(如黄金)的需求可能下降。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:11:49", "modified_time": "2025-08-11 22:11:49", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7264e781602a4ab88b805575e29f2a85", "experience_type": "text", "when_to_use": "在季节性因素导致供需关系显著变化时,预测大宗商品市场的价格走势。", "content": "利用高频数据(如高炉开工率、库存水平、现货价格)监测特定商品的基本面状况,结合历史季节性规律推断未来供需平衡点。例如,夏季高温和暴雨可能导致建筑施工活动减少,从而压制钢铁需求并增加库存压力,进而拖累螺纹钢等工业品的价格表现。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:11:49", "modified_time": "2025-08-11 22:11:49", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "eb8404c336b4447aa4cfdafadc571316", "experience_type": "text", "when_to_use": "在中央银行公开市场操作频繁期间,解读流动性环境及其对短期利率和债券市场的影响。", "content": "密切跟踪央行逆回购规模、净投放金额以及货币市场利率(如Shibor、DR007)的变化,判断当前资金面松紧状态。若央行持续净投放且短期利率回落,则表明流动性充裕,这通常会支撑债券价格上涨;反之,若净回笼力度加大且利率上行,则需警惕债市回调风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:11:49", "modified_time": "2025-08-11 22:11:49", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "dda4839174f6433ca51758c80297acfd", "experience_type": "text", "when_to_use": "在政治局会议或其他高层政策会议结束后,根据政策导向调整中长期投资策略。", "content": "深入剖析政策声明中的措辞变化,识别新增重点方向(如财政刺激、产业扶持政策)。例如,如果会议强调‘更加积极的财政政策’和‘适度宽松的货币政策’,则可以预期基建投资加速、消费潜能释放,从而利好装备制造、新能源等相关板块,同时也为债券市场提供支持。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:11:49", "modified_time": "2025-08-11 22:11:49", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "68fbdd16d678474f910e428b94265775", "experience_type": "text", "when_to_use": "在评估短期经济波动对制造业和非制造业景气度的影响时,特别是在淡季或受极端天气影响的市场环境中。", "content": "通过分析PMI数据及其分项指数的变化,识别季节性因素和短期外部扰动(如高温、雨水等)对生产和需求端的具体影响。关注生产指数和新订单指数的分化表现,判断供需失衡的程度,并结合企业规模数据(大型、中型、小型企业PMI)评估不同企业的抗压能力。此外,价格指数的变化可作为行业竞争秩序优化及大宗商品价格趋势的先行指标。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:12:46", "modified_time": "2025-08-11 22:12:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "2edc6246a850464aa91461684f7b1c9a", "experience_type": "text", "when_to_use": "在制定基于宏观经济数据的投资策略时,特别是需要平衡短期波动与长期趋势的场景,如资产配置或行业选择。", "content": "结合PMI数据的整体趋势与分项指数的边际变化,构建多维度分析框架。例如,当制造业PMI连续低于荣枯线但新动能行业(如装备制造业、高技术制造业)持续扩张时,应优先考虑布局高技术领域标的。同时,关注价格指数的回升趋势,判断原材料成本压力是否传导至下游行业,从而调整投资组合以规避潜在风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:12:46", "modified_time": "2025-08-11 22:12:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1e30e220fbec43d0a6cf37499c55a26b", "experience_type": "text", "when_to_use": "在评估宏观经济趋势对资产配置的影响时,尤其是在关税政策、货币政策和经济数据波动较大的情况下。", "content": "通过结合高频数据(如RedBook零售指数、首申失业金人数)与宏观经济指标(如GDP、通胀率及贸易逆差),可以更准确地判断经济周期所处阶段及其对市场情绪的潜在影响。例如,在美国进口放缓、净出口项从拖累转为拉动的情况下,应特别关注政府支出和私人投资的变化以预测未来经济增长动能。此外,针对不同资产类别(如股票、债券、大宗商品),需根据经济周期调整配置比例,例如在降息预期升温时增加债券久期敞口,同时降低高估值科技股的风险暴露。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:14:08", "modified_time": "2025-08-11 22:14:08", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7b9c8750071c46229e6c229931fa6f74", "experience_type": "text", "when_to_use": "在跨区域市场分析中,特别是在发达市场与新兴市场之间进行资产切换或多元化布局时。", "content": "根据不同市场的监管框架、货币动态及本地经济状况制定差异化策略。例如,当美元走强且美国经济数据疲软时,可通过配置防御性行业或短期固收工具来规避风险;而对于新兴市场,则需密切关注外汇储备变化、资本外流压力及政策支持力度。此外,日元贬值压力加大可能提前触发加息,这要求投资者在持有日本资产时更加注重汇率风险管理,并灵活调整仓位以应对潜在的流动性冲击。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:14:08", "modified_time": "2025-08-11 22:14:08", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9e78dd7056f74b4381e7a68ec4cfbb1b", "experience_type": "text", "when_to_use": "在设计基于时间跨度的投资组合优化方案时,尤其是涉及日内交易至长期战略规划的多层级决策。", "content": "根据时间跨度选择合适的分析方法和工具。对于短期战术操作(如日内交易),建议利用高频数据和技术指标快速捕捉市场情绪变化;对于中期组合调整(如季度再平衡),则需要综合考虑企业财报表现、行业轮动逻辑以及宏观经济意外指数;对于长期战略规划(如年度资产配置),重点在于识别结构性趋势(如AI技术发展、去全球化进程)并构建具有抗周期能力的核心持仓。同时,无论何种时间跨度,都应设置明确的风险控制机制,例如止损线或最大回撤限制。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:14:08", "modified_time": "2025-08-11 22:14:08", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e0aa2bd5fc5e439698fe79dea6a1e2e0", "experience_type": "text", "when_to_use": "在复杂程度较高的高级策略开发中,例如涉及衍生品、另类投资或结构化产品的创新性解决方案。", "content": "针对资深从业者,可运用杠杆ETF、黄金期货每日杠杆产品等工具实现特定收益目标,但必须充分理解其内在风险特征。例如,黄金价格短期内受避险情绪驱动可能出现大幅波动,因此在参与此类品种时需设定严格的止盈和止损条件。此外,当面对多重宏观变量(如关税谈判进展、非农数据超预期走弱)时,可通过情景分析法模拟各类假设下的资产表现,从而提升决策质量。最后,始终优先提升组合信用质量,避免因经济下行导致的信用利差迅速扩大侵蚀收益。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:14:08", "modified_time": "2025-08-11 22:14:08", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "da87531d9e014e9a959c23aca689b6d4", "experience_type": "text", "when_to_use": "在评估国际贸易协议对宏观经济影响时,特别是涉及关税调整、市场开放和投资流动的场景。", "content": "分析贸易协议对经济的长期推动作用时,需区分直接经济收益(如商品和服务出口增加)与间接结构性变化(如制造业回流)。同时,应关注协议可能带来的副作用,例如通胀压力上升和货币政策调整空间受限。建议结合具体国家的产业结构、贸易依存度及政策响应能力进行综合评估。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:15:10", "modified_time": "2025-08-11 22:15:10", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0f5891b836e240b3ac7ce1416259475e", "experience_type": "text", "when_to_use": "在预测主要经济体GDP增长趋势时,特别是在高波动性或政策驱动型市场环境中。", "content": "在评估季度GDP数据时,需分解各分项贡献(如消费、投资、净出口等),并识别短期因素(如关税抢出口效应)与长期趋势的叠加影响。此外,需结合劳动力市场、通胀预期及政策导向,判断未来经济增长潜力。对于美国等发达经济体,尤其需关注贸易政策和财政刺激措施的协同效应。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:15:10", "modified_time": "2025-08-11 22:15:10", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1e04812341d04df8b9d44761d8be1389", "experience_type": "text", "when_to_use": "在制定货币政策展望时,尤其是在央行面临多重目标(如通胀控制、就业稳定和金融市场平稳)的复杂环境下。", "content": "在评估央行未来利率路径时,需综合考虑经济基本面(如GDP增速、失业率)、外部冲击(如贸易政策不确定性)以及政治压力的影响。特别值得注意的是,美联储等主要央行的独立性可能受到行政干预,因此需密切关注政策声明中的措辞变化及其对市场预期的引导作用。建议通过利率期货市场数据验证官方表态的一致性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:15:10", "modified_time": "2025-08-11 22:15:10", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d950ce88be69417fa894ccb253d29e25", "experience_type": "text", "when_to_use": "在分析新兴市场经济体的出口与制造业表现时,特别是在全球贸易环境剧烈变化的背景下。", "content": "评估新兴市场的出口表现时,需结合其主要贸易伙伴的经济状况及双边贸易政策的变化。同时,制造业PMI数据可作为衡量内需与外需平衡的重要指标。对于高度依赖出口的经济体(如韩国、越南),需特别关注关税政策对其关键行业(如半导体、汽车)的冲击,并评估其国内政策(如货币贬值或财政刺激)的应对效果。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:15:10", "modified_time": "2025-08-11 22:15:10", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d35cce004c244d9fa981e116bcd7ea2d", "experience_type": "text", "when_to_use": "在评估全球贸易政策变化(如关税调整)对宏观经济的影响时,尤其是在高波动性和不确定性较高的市场环境中。", "content": "通过分析特朗普2.0关税政策的实施过程及其对国际贸易、经济增长和金融市场的影响,可以得出以下经验:1) 关税武器化虽然短期内可能刺激国内经济活动,但长期会削弱全球经济动能并加剧通胀压力;2) 贸易协议的达成能够缓解市场不确定性,但其效果取决于税率调整幅度和执行力度;3) 在政策不确定性高的时期,避险资产(如黄金和国债)通常表现优于风险资产(如股票和工业商品)。因此,在类似场景中,应优先配置防御性资产,并密切关注政策落地后的实际经济数据变化以验证市场预期。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:16:22", "modified_time": "2025-08-11 22:16:22", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1fa07f70f8e44b0a815223e8dcf3161a", "experience_type": "text", "when_to_use": "在制定中期资产配置策略时,特别是在经济增长动能减弱且货币政策宽松受限的情况下。", "content": "基于2025年上半年中国和美国的经济数据及资产表现,可总结以下资产配置经验:1) 利率债因经济增长疲软和地缘政治风险而具备吸引力,建议超配;2) 成长型股票由于外部地缘风险和内部科技突破需求呈现较大波动性,建议低配,但可在政策支持明确时择机增持;3) 工业商品受需求前置效应结束和全球产业链重构影响整体偏弱,但短期可能因政策预期(如反内卷政策)出现阶段性反弹。因此,资产配置需结合宏观环境动态调整,注重防御性与灵活性的平衡。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:16:22", "modified_time": "2025-08-11 22:16:22", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b56f9dad3f644a8fac860abbd72451a7", "experience_type": "text", "when_to_use": "在预测主要经济体央行政策路径及货币汇率走势时,尤其是在政策独立性受到政治压力挑战的情况下。", "content": "从美联储应对特朗普政府施压降息的经验中可提取以下洞察:1) 央行在面临政治压力时,可能会通过维持鹰派立场来捍卫政策独立性,这可能导致市场预期与实际政策路径偏离;2) 政策利率决策不仅依赖于当前经济数据,还需考虑政策传导滞后效应及潜在风险(如关税对通胀的延迟影响);3) 汇率走势除受利差驱动外,还受到贸易协议进展、财政扩张力度以及全球去美元化趋势等多重因素影响。因此,在分析汇率和利率前景时,需综合考量多维度因素,而非单一依赖传统模型。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:16:22", "modified_time": "2025-08-11 22:16:22", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "91cd8979142940a983e96b9483b0a9c7", "experience_type": "text", "when_to_use": "在评估宏观经济环境对货币政策未来路径的影响时,尤其是在滞涨风险显现的背景下。", "content": "通过分析PMI细分指标(如新订单、就业、物价指数)与GDP增速的关联性,结合通胀和就业市场的动态变化,预测央行可能的政策调整。例如,当服务业PMI接近扩张临界点且制造业PMI持续收缩时,需特别关注通胀压力和就业市场疲软的双重影响,以判断降息或维持利率的可能性。同时,参考央行官员公开讲话中的表态更新(如Jackson Hole会议),可更精准地捕捉政策转向信号。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:17:16", "modified_time": "2025-08-11 22:17:16", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3cb11524ee104b729c5565047a15dafe", "experience_type": "text", "when_to_use": "在分析不同行业板块对经济周期敏感度及其潜在投资机会时,特别是在关税政策和库存周期波动显著的情况下。", "content": "利用PMI分行业数据识别扩张和收缩行业,并结合进口指数、库存水平及客户库存趋势,评估企业为规避外部冲击(如关税)而采取的行为模式(如提前囤货)。例如,当制造业进口指数连续收缩且库存下降时,表明相关行业的短期需求可能承压,尤其是出口导向型行业。此时应优先配置受关税影响较小且具备韧性的行业,如消费品和服务类板块。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:17:16", "modified_time": "2025-08-11 22:17:16", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ca000fefc7424e7096b96c05aa9fd0a9", "experience_type": "text", "when_to_use": "在制定多资产类别投资组合策略时,需要综合考虑经济增长放缓、通胀反弹以及央行政策预期。", "content": "基于PMI指向的经济滞涨风险,调整资产配置比例。例如,在服务业PMI接近停滞且物价指数上升的环境下,建议降低对顺周期资产(如工业股)的敞口,增加防御性资产(如公用事业、医疗保健)和抗通胀资产(如黄金、大宗商品)的比例。此外,根据美联储降息预期的时间节点,适时增加固定收益产品的久期敞口,以捕捉收益率曲线变化带来的收益。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:17:16", "modified_time": "2025-08-11 22:17:16", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "14e6a36c7881491fa92baf0108da063b", "experience_type": "text", "when_to_use": "在进行跨境投资决策时,面对发达市场与新兴市场之间因货币政策分化导致的汇率和资本流动风险。", "content": "通过对比美国PMI与其他主要经济体(如中国、欧元区)的PMI表现,结合美元指数走势,评估全球资金流向的变化。例如,当美国制造业PMI萎缩但服务业仍具韧性,而其他地区PMI普遍疲软时,美元可能维持强势,不利于新兴市场资产表现。此时应减少对高风险新兴市场资产的直接投资,转而聚焦于具有稳定现金流的发达市场资产或货币对冲工具。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:17:16", "modified_time": "2025-08-11 22:17:16", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6265f99a510a4c678e7c9af191dd8820", "experience_type": "text", "when_to_use": "在评估宏观经济数据对市场预期和政策决策的影响时,特别是在非农就业数据发布后的市场反应分析中。", "content": "通过对比非农就业数据的初值与修订值,结合失业率、劳动参与率和薪资增速等多维度指标,构建全面的就业市场健康度评估框架。特别关注数据修订幅度及其对市场信任度的潜在影响,并结合其他经济变量(如库存周期、关税政策)进行交叉验证,以判断数据波动是否为短期扰动或长期趋势变化的信号。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:18:16", "modified_time": "2025-08-11 22:18:16", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9a8e8da6002d4396a03169ef56f79f28", "experience_type": "text", "when_to_use": "在分析美联储货币政策转向的可能性及其市场影响时,特别是在就业与通胀数据出现背离的情况下。", "content": "识别“低就业”与“高通胀”并存的两难局面,评估其对美联储政策路径的潜在约束。通过观察薪资增速与核心通胀的关系,结合就业市场的结构性变化(如移民政策、企业雇佣意愿下降等因素),推导出未来降息或加息的可能性及时间点。同时,密切关注市场对关键经济数据的即时反应(如美元指数、美债收益率、黄金价格的变化),以捕捉市场情绪的微妙转变。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:18:16", "modified_time": "2025-08-11 22:18:16", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f9c7148ea7174338930a561a60acce45", "experience_type": "text", "when_to_use": "在跨部门就业数据拆解中,用于分析不同行业板块的经济周期敏感性及投资机会。", "content": "将新增就业数据按生产部门和服务部门拆分,重点观察服务业细分领域(如零售、教育保健、休闲住宿)的表现,结合季节性因素(如暑假效应)和库存周期变动,识别潜在的板块轮动机会。例如,零售部门就业与薪资增速的同步提升可能预示补库存周期的启动,进而利好相关行业的短期表现。同时,警惕生产部门(如制造业、矿业)的持续疲软对整体经济的拖累作用。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:18:16", "modified_time": "2025-08-11 22:18:16", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "353638470f02432d822429b23383c743", "experience_type": "text", "when_to_use": "在评估政府财政政策对就业市场的影响时,特别是政府部门就业数据的变化趋势。", "content": "通过跟踪联邦、州和地方政府的就业动态,分析政府裁员或扩招对整体就业市场的传导效应。结合财政预算、公共项目投资等背景信息,判断政府政策调整对特定地区或行业就业的直接影响。例如,联邦政府持续裁员可能反映紧缩性财政政策的延续,而地方政府就业数据的波动则可能受到地方基建投资或教育支出变化的驱动。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:18:16", "modified_time": "2025-08-11 22:18:16", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7b2d27a7686341249edc5acc820f3334", "experience_type": "text", "when_to_use": "在评估美国劳动力市场趋势和经济健康状况时,特别是在非农就业数据发布后进行宏观经济分析。", "content": "通过综合新增非农就业人数、劳动参与率、失业率及薪资增长等多维指标,判断劳动力市场的实际降温程度。尤其需要关注数据的前值修正情况(如大幅下修可能暗示潜在问题)以及结构性变化(如私人部门与政府部门就业差异)。此外,结合ISM制造业PMI就业指数和JOLTS职位空缺数据,可以更全面地理解供需动态对就业市场的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:19:12", "modified_time": "2025-08-11 22:19:12", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f5e57744af324dc280716f112af378be", "experience_type": "text", "when_to_use": "在预测美联储货币政策调整(如降息或加息)可能性时,特别是在关键经济数据发布后(例如非农就业报告、CPI数据)。", "content": "尽管就业市场走软可能增加美联储降息压力,但通胀水平仍是核心制约因素。建议密切关注美联储主席在Jackson Hole会议或其他公开场合的表态,并结合即将发布的通胀数据(如CPI)进行交叉验证。同时,应注意区分短期波动与长期趋势,避免因单一数据点而过度解读政策方向。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:19:12", "modified_time": "2025-08-11 22:19:12", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5b0fc014870a450faeed39b298c4c739", "experience_type": "text", "when_to_use": "在为客户提供资产配置建议或制定交易策略时,特别是面对不同时间跨度(日内、短期、中期、长期)的投资需求。", "content": "基于劳动力市场数据的边际变化(如新增就业下降斜率陡峭、薪资增速回升有限),可推断经济增长放缓的风险提升,从而优先考虑防御性资产(如固定收益产品)而非高风险资产(如成长型股票)。对于短期战术操作,应特别关注市场情绪指标(如密歇根大学消费者信心指数);而对于中长期战略规划,则需纳入对通胀预期和央行政策路径的深度分析。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:19:12", "modified_time": "2025-08-11 22:19:12", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ccef652679474fccbc64fceb7ff67b57", "experience_type": "text", "when_to_use": "在评估工业生产端的开工率、库存和产能利用率对经济周期的影响时,特别是在判断基建领域实物工作量加速形成的信号时。", "content": "通过高频数据监控关键行业的开工率(如钢铁、水泥、玻璃等)以及库存变化,可以有效识别经济活动的强弱。例如,当沥青库存降幅较大且开工率回升时,可能表明基建领域正在加速形成实物工作量,这对预测短期经济复苏或政策落地效果具有重要参考价值。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:20:03", "modified_time": "2025-08-11 22:20:03", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b714193ce59c41b0a3e78453ec9004b1", "experience_type": "text", "when_to_use": "在分析房地产市场疲软对整体经济需求端的拖累程度时,尤其是在地产销售面积、土地成交面积和二手房挂牌指标均呈现负增长的情况下。", "content": "结合30城商品房销售面积、100城土地成交面积及二手房挂牌量价指数的变化趋势,可以量化房地产市场的疲软程度及其对上下游产业链的传导影响。例如,当地产相关指标呈现同环比双降时,需警惕其对消费和投资需求的进一步压制,并考虑对冲政策出台的可能性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:20:03", "modified_time": "2025-08-11 22:20:03", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "28aed86209084d6eadb48536f681fd20", "experience_type": "text", "when_to_use": "在监测消费品价格波动对CPI影响时,特别是在食品类商品(如猪肉、蔬菜、水果)价格结构分化明显的阶段。", "content": "通过跟踪农产品批发价格指数和细分品类的价格变化(如猪肉、蔬菜、水果),可以有效捕捉CPI的潜在波动方向。例如,当蔬菜价格上涨而猪肉价格下跌时,需综合权衡各分项权重以判断整体通胀压力,并据此调整资产配置策略或风险敞口。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:20:03", "modified_time": "2025-08-11 22:20:03", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8e927ab13cf24f5ba8b03118d8c4c88c", "experience_type": "text", "when_to_use": "在评估国际贸易环境变化对企业出口竞争力的影响时,特别是在集装箱运价指数(如SCFI、CCFI)出现显著分化的背景下。", "content": "通过分析港口吞吐量与集装箱运价指数之间的关系,可以判断全球贸易流动性的变化趋势。例如,当SCFI下降而CCFI上升时,可能反映区域性贸易格局的调整,需要关注具体航线的需求变化以及汇率因素对出口企业盈利能力的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:20:03", "modified_time": "2025-08-11 22:20:03", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a21c49a613c6420192a5963813521ad9", "experience_type": "text", "when_to_use": "在宏观经济政策调整或重大事件(如政治局会议、中美经贸会谈)影响市场预期时,进行大类资产配置分析。", "content": "通过结合高频经济数据(如PMI指数)、政策导向(如财政与货币政策预期)及国际局势动态(如关税政策、美联储利率决议),评估不同资产类别(股票、债券、大宗商品等)的短期和中期表现。特别关注政策落实的时间窗口(如9月-10月)对人民币资产价格的影响,并据此调整资产配置优先级(如超配股票、低配债券)。此外,在面对不确定性时,建议以中国经济基本面为支撑,维持对人民币资产的整体看好态度。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:21:18", "modified_time": "2025-08-11 22:21:18", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b989e193d2d149f3acdef8c820025fe2", "experience_type": "text", "when_to_use": "在评估特定行业或周期品(如钢铁、煤炭、建材等)的投资机会时,尤其是在“反内卷”政策预期下市场价格出现波动的情况下。", "content": "利用上游周期品高频数据(如开工率、库存变化、价格走势)结合行业政策(如产能控制、落后产能退出计划)判断供需格局的变化趋势。当周期品价格因政策预期上涨后出现回落时,需警惕市场情绪反转带来的下行风险。同时,关注细分行业(如铜冶炼、氧化铝)的治理措施是否会导致价格进一步波动,从而优化投资策略。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:21:18", "modified_time": "2025-08-11 22:21:18", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "457f086ff39c4861a70d19c99e9222e1", "experience_type": "text", "when_to_use": "在债券市场收益率受税收政策或宏观流动性环境变化影响时,制定债券投资策略。", "content": "密切关注税收政策对债市的影响,例如恢复征收国债、地方政府债券利息收入增值税可能引发相关利率债收益率上行。结合央行公开市场操作规模、资金拆借利率水平(如R007、GC007)以及期限利差与信用利差的变化,综合判断债市短期波动方向。若拆借资金利率保持低位且政策面未显著收紧,则预计债市仍具备一定吸引力;但需警惕“股债跷跷板效应”对债市造成的阶段性压力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:21:18", "modified_time": "2025-08-11 22:21:18", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9be4d597ff3d4c21a014066c422c1611", "experience_type": "text", "when_to_use": "在全球经济不确定性和地缘政治风险上升背景下,对外汇市场的汇率波动进行预测并指导跨境投资决策。", "content": "通过跟踪美元指数、主要货币兑人民币汇率及外汇储备数据,结合全球经济展望(如IMF报告)和区域贸易协议进展(如美欧关税协议),分析人民币汇率宽幅波动的驱动因素。在人民币基本面优势支撑下,尽管短期内可能面临贬值压力,但长期来看其国际化进程和国内经济复苏潜力有助于稳定币值。建议投资者根据自身风险偏好灵活调整外汇敞口,同时注意规避高波动性货币的风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:21:18", "modified_time": "2025-08-11 22:21:18", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "fed35d2c61e64b28b48e7934dc4f491b", "experience_type": "text", "when_to_use": "在评估政策变化对市场的影响时,尤其是在教育、育儿福利和房地产领域,需要结合宏观经济周期以及区域供需动态进行分析。", "content": "政策驱动的市场变化(如免费学前教育的推进)会对下游消费行为产生深远影响。例如,免除学前一年保育教育费可能提高家庭可支配收入,从而间接推动其他消费领域的增长(如娱乐、旅游)。同时,需关注政策实施的时间节点与经济周期的契合度,例如在经济增长放缓期,此类政策可能具有更强的刺激效果。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:22:14", "modified_time": "2025-08-11 22:22:14", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "92536553060941a29f4dfda6da6a337a", "experience_type": "text", "when_to_use": "在分析行业信用利差及其走势时,用于判断特定行业的风险溢价变化,并识别潜在的投资机会或风险预警信号。", "content": "通过跟踪行业信用利差的历史数据和近期趋势,可以有效评估行业基本面的变化。例如,房地产行业的信用利差持续收窄可能表明市场对该行业的信心逐步恢复,而轻工制造行业的高信用利差则可能反映其较高的违约风险。建议结合宏观经济环境和行业政策综合判断,特别是在经济复苏初期或危机后阶段。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:22:14", "modified_time": "2025-08-11 22:22:14", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "90b92fe382b64d38872ce21bc0fb30f2", "experience_type": "text", "when_to_use": "在大宗商品价格波动较大时,用于预测中游化工行业的开工率变化及其对下游需求的影响。", "content": "化工行业(如PTA、PX)的开工率下降通常反映了下游需求疲软或库存压力增加。例如,PTA开工率下行可能预示纺织服装行业的订单减少,进而影响相关企业的盈利能力。在分析时,应结合上游原材料价格(如原油、煤炭)和下游终端消费数据(如房地产、汽车销售)进行交叉验证,以提高预测精度。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:22:14", "modified_time": "2025-08-11 22:22:14", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b64842e6c8e24af48f9b148c6faf115e", "experience_type": "text", "when_to_use": "在评估区域经济活动强度时,利用高频数据(如高峰拥堵指数、航班执行情况)来捕捉短期经济活力的变化。", "content": "高峰拥堵指数和航班执行数据能够快速反映区域经济活动的活跃程度。例如,一线城市的拥堵指数季节性回落可能与暑期假期有关,但也可能暗示商务活动减少。结合电影票房、商品房成交等数据,可以更全面地评估消费和服务行业的短期表现,特别是在经济复苏或衰退初期。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:22:14", "modified_time": "2025-08-11 22:22:14", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "76f7095f2f1c46eda784802b5f7d9b46", "experience_type": "text", "when_to_use": "在评估政策变化对市场和行业的影响时,特别是在政策进入空窗期或即将推出重大改革的背景下。", "content": "通过分析政治局会议、政府工作报告等高层政策文件中的措辞变化,可以识别政策方向(如“反内卷”去产能)及其潜在影响。结合历史数据(如供给侧改革的实施细节)和行业细则(如钢铁、有色等行业去产能计划),预测政策对生产端、价格水平及市场分化的影响。需关注政策的时间维度和力度,避免高估短期影响,同时为长期趋势调整策略。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:23:11", "modified_time": "2025-08-11 22:23:11", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e5a5ca2911ec4cfcb053f117a5902a8e", "experience_type": "text", "when_to_use": "在解读宏观经济指标(如PMI、GDP、CPI等)以制定投资或交易策略时,特别是在经济周期转折点或市场波动较大的时期。", "content": "通过分解PMI分项指数(如生产指数、新订单指数、价格指数)并结合季节性因素(如高温、洪涝灾害)及大宗商品价格波动,能够准确判断当前经济运行状态及未来趋势。例如,原材料购进价格指数回升可能预示制造业价格水平改善,但需结合需求端放缓的信号(如新订单下降)综合评估市场前景。此外,在低通胀环境下(如CPI接近零增长),需特别关注货币政策的潜在调整空间及其对资产价格的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:23:11", "modified_time": "2025-08-11 22:23:11", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1c09aaa216be4a7182af683681d08187", "experience_type": "text", "when_to_use": "在分析特定行业或资产类别的投资机会时,特别是在政策驱动型行业中(如新能源汽车、房地产)或面临结构性调整的领域。", "content": "利用政策导向(如“依法依规治理企业无序竞争”)和行业动态(如新能源汽车产业的非理性竞争现象)来识别行业内部分化趋势。例如,针对地方政府债务风险管控和重点行业去产能政策,可优先配置受益于政策支持的龙头企业,同时规避受政策压制的高风险标的。此外,结合社融数据结构(如政府债券发行放量)和信贷流向(如制造业中长期贷款增长),可进一步验证资金流动对行业的实际支撑力度。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:23:11", "modified_time": "2025-08-11 22:23:11", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "4ab89af8fbf14c76ad006046411a289b", "experience_type": "text", "when_to_use": "在制定跨资产类别和时间跨度的投资组合策略时,特别是在不同经济周期阶段或市场环境切换的情况下(如从牛市转向熊市)。", "content": "通过结合宏观经济数据(如GDP增速、固定资产投资、出口表现)与金融数据(如M1/M2剪刀差、社融增速),评估市场的流动性状况和风险偏好。例如,在M2增速上行但M1增速较低的情况下,表明资金更多停留在银行体系而非流入实体经济,可能利好固定收益类产品而非权益类资产。此外,根据出口韧性和内需疲软的表现,可适当增加防御性资产配置比例(如消费必需品、医药),并在市场预期转向时灵活调整战术操作。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:23:11", "modified_time": "2025-08-11 22:23:11", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "741021ab6fe54c829f3788e593e76c8b", "experience_type": "text", "when_to_use": "在评估美联储可能的货币政策调整时,尤其是在经济数据发布后(如非农就业数据、PCE物价指数等)预测降息或加息的可能性。", "content": "通过分析关键经济指标(如非农就业人数、平均时薪增长、PCE通胀率)与美联储政策目标之间的关系,结合央行官员的公开表态,判断货币政策调整的时间点和力度。例如,当非农就业数据显著下修且通胀压力缓解时,可推测美联储可能提前降息以应对经济放缓风险。同时,需关注长期通胀预期是否稳定在目标水平,并结合流动性指标(如流通中货币与GDP比率)评估货币政策传导的效果。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:24:13", "modified_time": "2025-08-11 22:24:13", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5d9d8dc249a94f548004aa338ad88389", "experience_type": "text", "when_to_use": "在研究关税政策对通胀的潜在影响时,特别是在国际贸易摩擦加剧或关税政策变动的背景下。", "content": "通过分析终端商品价格变化(如PCE物价指数)与关税政策的关联性,评估关税对通胀的传导效应。需要区分短期冲击与长期趋势,例如名义消费增速回升但实际消费增长乏力的情况,可能表明关税对通胀的影响尚未完全显现。此外,应结合消费者信心指数和零售数据,判断需求侧对价格上涨的承受能力,并监测供应链调整对价格传导的滞后效应。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:24:13", "modified_time": "2025-08-11 22:24:13", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0632e6eb91f04c8b832a84496f85b8e5", "experience_type": "text", "when_to_use": "在进行宏观经济周期分析时,特别是针对主要经济体的季度GDP增长分解及其对内需的影响。", "content": "通过对GDP分项数据(如个人消费、私人固定资产投资、政府支出)的增长趋势进行分解,识别限制性政策(如货币政策收紧或财政支出削减)对经济活动的影响。例如,当私人消费和投资增速放缓,而政府支出因财政压力减少时,表明经济可能面临内需疲软的风险。此时,需进一步分析货币流通性指标(如M2/GDP比率)和利率环境,以评估经济复苏的潜力及政策空间。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:24:13", "modified_time": "2025-08-11 22:24:13", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "db9829d17ecc4c95afddb3d3b873435f", "experience_type": "text", "when_to_use": "在设计固定收益投资策略时,特别是在美债收益率曲线形态变化或市场对未来利率路径预期发生分歧的情况下。", "content": "利用就业数据、通胀预期和央行政策信号综合判断利率路径,并据此调整久期策略。例如,当非农数据下修且通胀预期回落时,可以预期长端收益率下行,从而增加长久期债券配置。同时,需关注房地产市场对利率敏感性的反馈(如住宅投资增速下降),以及外部因素(如欧债替代性)对美债需求的影响,以优化投资组合的风险收益比。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:24:13", "modified_time": "2025-08-11 22:24:13", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "65b65db4cbe6497ab1ccfcb22f8578a3", "experience_type": "text", "when_to_use": "在宏观经济政策分析的背景下,特别是在评估宽松货币政策和财政政策对市场的影响时使用。", "content": "在经济运行稳中有进但存在隐忧的情况下,宽松货币与财政政策延续的关键是保留进一步加码的灵活性。通过加快政府债券发行节奏并提高资金使用效率,可以有效缓解市场对政策边际收缩的担忧。同时,货币政策的核心应从简单降息转向促进社会综合融资成本下行,以打通‘宽货币’到‘宽信用’的传导堵点。这需要综合利用结构性工具支持科技创新、消费提振等领域,并根据经济数据动态调整政策力度。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:25:07", "modified_time": "2025-08-11 22:25:07", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3e599e11b176420584b89dd05ea8553b", "experience_type": "text", "when_to_use": "在行业去产能或反内卷政策分析中,特别是涉及传统行业和新兴行业的差异化影响时使用。", "content": "本轮‘反内卷’政策的重点在于构建良好的商业环境和推动市场化改革,而非单纯依赖行政命令式的去产能手段。与2016年的供给侧改革相比,当前政策更注重制度建设和市场力量的结合,通过渐进式方式化解过度竞争问题。因此,在分析相关政策对具体行业(如光伏等新兴产业)的影响时,需关注政策执行路径是否聚焦于规范竞争秩序、约束地方招商行为以及减少行政扭曲,而非直接干预市场价格机制。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:25:07", "modified_time": "2025-08-11 22:25:07", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "23c87fdb25ba4932b11dbf902761d718", "experience_type": "text", "when_to_use": "在房地产行业转型期的投资分析及风险评估场景中使用。", "content": "随着房地产行业从大规模增量扩张阶段转向存量提质增效为主的高质量发展阶段,投资分析需更多关注城市更新、城中村改造等新模式下的机会。尽管短期内缺乏明确的增量刺激政策,但长期来看,稳步推进的新模式可能为相关领域带来持续性增长潜力。此外,需警惕行业整体仍处于筑底过程中带来的短期波动风险,建议优先选择具备稳健财务状况和优质资产布局的企业作为标的。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:25:07", "modified_time": "2025-08-11 22:25:07", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9a389332d7734bae8de7d7640af7936c", "experience_type": "text", "when_to_use": "在资本市场改革相关的投资策略设计或客户咨询服务中使用。", "content": "巩固资本市场回稳向好势头的同时,增强国内资本市场的吸引力和包容性将成为未来政策重点。这意味着上市公司质量提升和国际化进程加速将是两大核心方向。对于投资者而言,可重点关注受益于A股国际化趋势的蓝筹股,以及具备高成长潜力且符合国家产业导向的创新型公司。同时,考虑到居民财产性收入增长对消费的拉动作用,股市温和上涨有望成为支撑消费需求的重要动力来源。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:25:07", "modified_time": "2025-08-11 22:25:07", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3f272beabbaa4718af33b2b84149e54c", "experience_type": "text", "when_to_use": "在政策解读和宏观经济分析中,特别是在评估中央政府的经济工作会议或类似政策声明时。", "content": "利用自然语言处理(NLP)模型进行政策文本的量化分析,提取关键词频次并结合历史数据进行同比和环比分析,以识别政策导向的变化。通过AI模型生成政策强度得分,辅助判断财政和货币政策的边际变化,并与市场指标(如国债收益率)关联验证分析结果的有效性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:25:53", "modified_time": "2025-08-11 22:25:53", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "dd972963b7784546b9f107174438548f", "experience_type": "text", "when_to_use": "在制定跨周期投资策略时,特别是在经济从总量托底向结构优化转型的阶段。", "content": "关注政策重心从总量刺激转向结构性支持的信号,例如消费、创新、民生等领域的关键词频次变化。结合政策语义分析结果,优先配置受益于政策支持的行业,如服务消费、科技创新和城市更新相关领域,同时降低对传统总量驱动型资产(如房地产)的敞口。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:25:53", "modified_time": "2025-08-11 22:25:53", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c3154fcdd92b43dab7d16a86d7983c8e", "experience_type": "text", "when_to_use": "在评估市场风险和政策不确定性时,尤其是在外部环境波动较大的情况下。", "content": "通过AI模型量化政策表述的收敛性和稳定性,结合市场关键指标(如利率、汇率)的变化趋势,评估政策对市场的潜在影响。在政策语义趋于常态化且市场波动性较高的环境中,建议采取防御性配置策略,增加高质量固定收益产品和低贝塔资产的权重。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:25:53", "modified_time": "2025-08-11 22:25:53", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "4aff2587dafb4c5b90aa092ee2fc3b3c", "experience_type": "text", "when_to_use": "在新兴市场与发达市场的资产配置决策中,特别是在监管框架和政策风格差异显著的情况下。", "content": "根据不同市场的政策表述特点调整投资组合,例如在政策表述较为积极的新兴市场中,适当增加权益类资产配置;而在政策趋于稳健的发达市场中,注重长期结构性机会,如科技创新和绿色能源领域。同时,考虑货币因素对跨境投资回报的影响,动态调整外汇对冲策略。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:25:53", "modified_time": "2025-08-11 22:25:53", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "caf0dc5259f544149e645c6b0d09897a", "experience_type": "text", "when_to_use": "在评估航运市场运价波动对期货合约价格的影响时,特别是在涉及跨季度或年度的运价预测场景中。", "content": "通过分析现货市场的运价趋势(如SCFI和SCFIS指数)以及期货市场的持仓量和成交量数据,结合船公司动态(如加班船安排、运力调整)和宏观经济因素(如欧美经济表现、地缘政治风险),可以有效预测未来运价的下行或上行压力。例如,当发现主要航运联盟(如PA联盟、OA联盟)连续下调报价且新增加班船时,可判断市场供过于求的风险正在加剧,从而推测期货合约价格可能承压下行。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:27:01", "modified_time": "2025-08-11 22:27:01", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "972360d3b1384728a5e2d6c6863c17d7", "experience_type": "text", "when_to_use": "在制定套利策略时,尤其是针对跨月份合约(如10月与12月合约)的多空配对交易场景。", "content": "通过对不同月份合约的基本面差异进行深入分析,识别季节性规律(如四季度节假日需求高峰、淡季效应)和特殊事件影响(如苏伊士运河复航可能性)。例如,在淡季合约(如10月)中以空配为主,而在旺季合约(如12月)中关注潜在的供应端调控措施(如船公司缩减运力)。这种基于供需平衡及时间价值的套利逻辑,能够帮助投资者捕捉跨期价差收益机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:27:01", "modified_time": "2025-08-11 22:27:01", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "fad9bed9bb994749ac3e442c9b90eba8", "experience_type": "text", "when_to_use": "在监测供应链瓶颈和运力供给变化对航运市场的影响时,特别是在突发性事件(如红海危机、巴拿马运河拥堵)导致航线改道或运力受限的情况下。", "content": "利用高频数据(如船舶速度、港口拥堵比例、关键航道通过量)实时跟踪全球供应链状态,并结合新交付运力、拆解运力和订单运力的变化趋势,评估整体运力供需格局。例如,若发现大型船舶(17000+TEU)的速度下降且主要港口拥堵比例上升,则表明短期内运力紧张状况可能加剧,从而支撑运价;反之,若新交付运力大幅增加且闲置运力不足,则需警惕运价下行风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:27:01", "modified_time": "2025-08-11 22:27:01", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "48508776104041abae130e1bb7b9828a", "experience_type": "text", "when_to_use": "在分析区域贸易能力及其对航运需求的影响时,特别是需要理解特定航线(如亚洲-欧洲、亚洲-北美)的长期增长潜力或短期波动。", "content": "结合区域经济指标(如欧盟工业生产指数、消费者信心指数、中国出口金额)与贸易流量数据(如Asia-Europe TEU、Asia-North America TEU),评估目标航线的需求弹性。例如,当观察到欧盟进口中国金额持续下滑且消费者信心低迷时,可预期亚洲-欧洲航线的货运需求将减弱,从而影响相关运价及期货合约表现。此外,还需关注替代航线(如好望角绕行)对传统主干航线的竞争压力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:27:01", "modified_time": "2025-08-11 22:27:01", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "65bc3df298154d89aafe0ef4ef7a8775", "experience_type": "text", "when_to_use": "在评估不同经济指标对市场景气度的影响时,特别是在分析服务业PMI数据的背离现象时使用。", "content": "通过对比中采服务业PMI与标普全球服务业PMI的样本构成和行业覆盖差异,可以识别出不同指标对特定行业(如零售、房地产、旅游业)的敏感性。中采PMI更适合追踪整体消费景气度,尤其是零售和房地产行业;而标普PMI则更能反映国际旅游需求对服务业的渗透深度。因此,在分析服务业走势时,需结合具体行业的动态,选择合适的指标进行解读。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:28:02", "modified_time": "2025-08-11 22:28:02", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "77e0ffe42dcc490ca8682bc71743c60d", "experience_type": "text", "when_to_use": "在大宗商品市场波动剧烈、政策干预显著的场景下,例如反内卷交易退潮或政策引导价格降温时。", "content": "通过高频数据和政策动态密切跟踪大宗商品期货的价格趋势,识别短期投机性交易行为对市场的冲击。结合政策导向(如政府干预或税率调整),提前预测市场情绪反转的时间点,并及时调整头寸以规避风险。同时,关注跨资产类别的联动效应,例如工业金属与能源商品之间的相关性变化。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:29:03", "modified_time": "2025-08-11 22:29:03", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6f1d7317ce62464980ce7060e42796e3", "experience_type": "text", "when_to_use": "在经济景气度回落、PMI等领先指标走弱且需要预测未来经济数据走势的场景下。", "content": "基于PMI、CPI、PPI等高频经济数据,结合历史同比和环比变化规律,构建分项拆解模型,量化不同因素对整体经济数据的影响。例如,利用出口高频数据评估关税上升对贸易流动的潜在影响,或通过消费端政策力度退坡判断社零增速的变化。此外,在政府债券发行支撑社融增速的情况下,需特别关注财政政策对信贷扩张的实际贡献。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:29:03", "modified_time": "2025-08-11 22:29:03", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8a65a1cf86484643829bf513fd192bd2", "experience_type": "text", "when_to_use": "在全球供应链调整、关税政策发生重大变化的背景下,分析国际贸易格局及企业利润压力。", "content": "系统梳理主要经济体间的关税税率变动趋势,结合产业链分布特点,评估关税上调对企业成本结构和利润率的直接与间接影响。对于出口依赖型行业,建议采用情景分析法模拟不同关税水平下的盈利敏感性;同时,监测库存周期变化,预判贸易商从抢出口转向去库存的行为模式,从而优化进出口策略。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:29:03", "modified_time": "2025-08-11 22:29:03", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "69aac1496e6a4e278901324f02d2c0eb", "experience_type": "text", "when_to_use": "在政府债务发行节奏加快、净融资规模显著增长的环境中,评估其对金融市场流动性及利率水平的影响。", "content": "通过追踪政府债月度发行进度和净融资规模,分析其对社融增速的支撑作用及对市场流动性的挤出效应。重点关注专项债和特别国债的发行节奏,因其可能对基础设施投资形成显著拉动。同时,结合货币市场利率走势,观察央行是否采取相应对冲措施缓解资金面压力,为债券投资决策提供依据。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:29:03", "modified_time": "2025-08-11 22:29:03", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1095c7d6d2124d21b1221ef0f071ac82", "experience_type": "text", "when_to_use": "在地缘政治风险加剧、全球市场不确定性增加的环境下,进行风险管理和资产配置。", "content": "将地缘政治事件纳入宏观风险框架,定期更新潜在挑战清单(如超长期项目成本超支、环境争议等)。根据各类资产的风险收益特征,动态调整投资组合权重,例如在高波动期减少对单一商品的敞口,增加黄金等避险资产的比例。同时,运用衍生品工具对冲汇率和利率风险,确保投资组合的稳健性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:29:03", "modified_time": "2025-08-11 22:29:03", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7bea83e3f07a475ea3dbf023f1fc21ce", "experience_type": "text", "when_to_use": "在评估政府政策对经济的中长期影响时,特别是针对生育补贴、家庭福利等社会性财政支出。", "content": "通过分析OECD数据和历史回归模型,量化家庭福利支出占GDP比重与生育率之间的正相关关系,并结合人口统计数据预测政策的杠杆效应。例如,国家生育补贴短期内可能拉动GDP约0.9倍,而中长期杠杆倍数可增至1.4倍,需综合考虑直接消费提振和间接需求释放(如住房、教育)的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:29:52", "modified_time": "2025-08-11 22:29:52", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "787143534b554e4bba20615346395c57", "experience_type": "text", "when_to_use": "在制造业景气度分析中,特别是在传统生产淡季叠加外部冲击(如高温暴雨天气或全球经济放缓)的情况下。", "content": "利用PMI分项数据(生产、新订单、出口订单等)评估供需动态变化,同时结合高频指标(如高炉开工率、汽车半钢胎开工率)验证行业表现。例如,当PMI生产指数下滑但原材料购进价格回升时,可能反映‘反内卷’政策对大宗商品价格的支撑作用,需进一步关注PPI环比改善趋势。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:29:52", "modified_time": "2025-08-11 22:29:52", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3913570ba30c43d1b6398bc765f7346a", "experience_type": "text", "when_to_use": "在非制造业领域分析基建投资和服务业表现时,尤其是在专项债发行提速但实物工作量滞后的情况下。", "content": "通过跟踪实物工作量指标(如石油沥青开工率、水泥磨机转运率)和资金端进展(如专项债发行进度),判断基建投资的实际落地情况。同时,结合季节性因素(如暑期假日效应)分析服务业细分行业的景气度差异,识别高景气区间(如铁路运输、航空运输)和弱势板块(如房地产、居民服务)。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:29:52", "modified_time": "2025-08-11 22:29:52", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3ff332bf2b024a579790cf1753333dec", "experience_type": "text", "when_to_use": "在评估长期利率的波动区间和市场情绪变化时,特别是在货币政策预期调整或宏观经济政策影响较大的情况下。", "content": "通过构建基于货币市场利率(如DR001和DR007的250日均线)的经验性“利率走廊”,可以有效预测关键期限利率(如10年期国债收益率)的上下限波动范围。此外,结合市场情绪指标(如IRS Repo报价、国债期货基差等),可以识别市场从“逢调买入”向“逢低止盈”或对冲策略转变的信号,从而优化投资决策。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:30:45", "modified_time": "2025-08-11 22:30:45", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "28b2fccc35ca4d49be519acb5468d240", "experience_type": "text", "when_to_use": "在分析宏观经济政策(如“反内卷”政策)对债券市场的影响时,尤其是在政策预期升温或降温的转折点。", "content": "政策预期的变化往往通过“股债跷跷板”效应和商品价格波动传导至债券市场。应关注关键期限利率与资金利率(如DR007和DR001)的联动关系,并结合经济基本面信号(如PPI、产出缺口)判断利率走势。当政策预期降温后,市场情绪冲击通常会短暂缓解,此时可预期利率市场的修复性下行。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:30:45", "modified_time": "2025-08-11 22:30:45", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "797ab8f3f1ab4a5fa7447dce53c81cb7", "experience_type": "text", "when_to_use": "在评估市场对宏观经济政策(如供给侧改革2.0)的长期反应时,特别是在经济增长与通胀预期存在分歧的情况下。", "content": "单纯的“涨价”并不足以推动利率持续上行,需结合产出缺口闭合的可能性来判断经济是否进入“再通胀”阶段。若宽松政策效应迟滞或人民币资产回报率低于预期,则需警惕利率上行压力的累积。同时,应密切关注跨月资金面的充裕程度,以判断短期利率修复的可能性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:30:45", "modified_time": "2025-08-11 22:30:45", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a8579ba80a3846f8a1165fb4735de98a", "experience_type": "text", "when_to_use": "在分析宏观经济数据(如PMI)以评估经济周期和市场趋势时,特别是在判断经济下行压力或复苏信号的场景中。", "content": "通过分解PMI分项指标(如生产指数、新订单指数、库存指数等),结合高频数据(如房地产销售、出口数据)进行交叉验证,可以更全面地评估经济活动的强弱。例如,当生产与需求两端同步走弱且库存下降时,表明经济面临较大下行压力;而价格指数回升可能暗示短期通胀压力或反内卷政策的效果显现。此方法适用于在不同经济周期阶段识别潜在风险和机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:31:30", "modified_time": "2025-08-11 22:31:30", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "807418f219bc49a9aa764274251d77f5", "experience_type": "text", "when_to_use": "在制定中期投资策略或调整资产配置时,尤其是在面对复杂市场环境(如熊市或高波动期)的情况下。", "content": "在经济下行压力加大的背景下,建议采取“托而不举”的政策预期框架,避免过度依赖强刺激政策的假设。同时,关注特定行业的结构性机会,例如铁路船舶航空航天设备、计算机通信电子设备等行业在制造业中的活跃表现,以及暑期假日效应带动的服务业细分领域。这种行业轮动分析方法有助于在整体低迷的市场环境中寻找相对强势的投资标的。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:31:30", "modified_time": "2025-08-11 22:31:30", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9b67049b41c04eb1b861623611dfd9f4", "experience_type": "text", "when_to_use": "在评估非制造业PMI数据对服务业和建筑业的影响时,特别是在需要区分短期扰动与长期趋势的场景中。", "content": "非制造业PMI的回落可能受到短期因素(如高温、洪涝灾害)的影响,但需结合业务活动预期指数来判断长期景气度。例如,尽管建筑业指数因天气原因下滑,但其业务活动预期仍处于扩张区间,表明市场对未来需求持乐观态度。此经验强调了在解读PMI数据时,应剥离短期噪声并关注市场预期指标,以更好地预测未来走势。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:31:30", "modified_time": "2025-08-11 22:31:30", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "edd72336f8f043398e2c2b79a8bebbca", "experience_type": "text", "when_to_use": "在制定政策应对策略或预判政策方向时,特别是在经济隐忧显现但政策转向可能性较低的场景中。", "content": "当经济面临下行压力但政策基调偏向连续性时,应重点关注既有政策的落实效果及潜在增量政策的出台时机。例如,在前期金融政策刺激效果减弱的情况下,需警惕“抢出口”透支效应和关税负面影响的滞后作用,并持续跟踪经贸谈判进展。此经验提示投资者在政策观察期内保持灵活性,同时为可能的增量政策做好准备。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:31:30", "modified_time": "2025-08-11 22:31:30", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "50e9dd98989c4293be6dfccfc6394099", "experience_type": "text", "when_to_use": "在宏观经济政策分析和市场展望中,尤其是在中共中央政治局会议等重要政策节点后进行战略规划时。", "content": "在分析宏观经济政策时,应重点关注政策基调的变化及措辞的微妙调整。例如,本次报告指出宏观政策取向从“加紧实施”转向“持续发力、适时加力”,这表明政策节奏趋于温和,可能预示着政策效果的逐步释放而非激进干预。这种分析方法可以帮助判断未来政策空间及市场预期管理的方向。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:32:24", "modified_time": "2025-08-11 22:32:24", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c684af4952214b2db8cc5de495341281", "experience_type": "text", "when_to_use": "在评估消费驱动型经济复苏潜力时,特别是在商品消费政策边际递减的情况下。", "content": "当商品消费政策(如以旧换新)的效果逐渐减弱时,服务消费成为拉动内需的重要方向。分析应关注居民预算约束改善的可能性,以及服务消费领域的结构性机会,例如教育、医疗和文化娱乐行业。此外,未提及房地产政策可能意味着存量优化阶段,需关注好房子供给、收储机制和城中村改造等潜在政策工具。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:32:24", "modified_time": "2025-08-11 22:32:24", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "205940d7292349499f8f863135f6f0d1", "experience_type": "text", "when_to_use": "在资本市场策略制定中,特别是涉及资产价格稳定性和长期资本引入的场景下。", "content": "重视资产价格对居民财产性收入的影响是当前政策的重要导向。通过增强资本市场的吸引力和包容性,可以推断政策将支持长期资本入市(如养老金、保险资金)以及海外资本配置A股资产。同时,注册制改革和科创板政策优化进一步体现了对创新型企业的支持,这对投资标的筛选和行业配置具有指导意义。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:32:24", "modified_time": "2025-08-11 22:32:24", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f508349caee049a285770e570944d5ae", "experience_type": "text", "when_to_use": "在行业竞争格局分析中,尤其是面对“反内卷”政策对企业无序竞争治理的影响时。", "content": "针对“反内卷”政策的柔和表述,表明监管层倾向于避免一刀切或过度干预市场竞争秩序。因此,在分析特定行业(如光伏、汽车)的竞争格局时,应关注政策如何通过结构性工具治理产能过剩问题,并结合行业产品价格回升趋势判断企业盈利修复的可能性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:32:24", "modified_time": "2025-08-11 22:32:24", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5ac45ecd98d94045afcd76b8d60bcb44", "experience_type": "text", "when_to_use": "在跨周期经济目标设定与中长期发展规划研究中,特别是在解读国家五年规划建议时。", "content": "明确“十五五”规划发展总思路时,应聚焦于经济质的有效提升和量的合理增长之间的平衡。通过对“统筹国内国际两个大局”和“推动共同富裕”的理解,可以预测未来政策将更注重科技创新、绿色发展和社会公平,这些领域将成为长期投资布局的重点。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:32:24", "modified_time": "2025-08-11 22:32:24", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0caba4a936344c00acda62c8617474fe", "experience_type": "text", "when_to_use": "在评估宏观经济政策对资本市场的影响时,尤其是在货币政策和财政政策的交汇点上,需要结合短期市场波动与长期经济趋势进行分析。", "content": "通过观察美联储和日本央行近期利率决议以及其对债券收益率、股市和外汇市场的连锁反应,可以得出以下经验:首先,在通胀压力持续上升但就业市场稳健的情况下,中央银行更倾向于维持鹰派立场,推迟降息预期;其次,货币宽松或紧缩政策的实施节奏往往受到外部因素(如关税谈判、能源价格)的干扰,因此投资者应关注这些变量对政策窗口的潜在影响。此外,市场对政策信号的解读可能存在过度反应,需以3-6个月的时间跨度来验证政策的实际效果。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:33:19", "modified_time": "2025-08-11 22:33:19", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "961a0d0998aa4056a3185c40aaf2bf72", "experience_type": "text", "when_to_use": "在分析企业利润下降的原因及未来改善空间时,特别是在工业制造和原材料行业,需要结合产业链上下游动态和反内卷政策的实施效果。", "content": "根据规模以上工业企业利润数据的分析,发现采矿业利润大幅下滑拖累了整体表现,而制造业高端化、智能化升级则成为支撑点。这表明,当某一行业陷入低价无序竞争导致利润率承压时,政府推出的反内卷政策和产业升级措施能够逐步缓解困境。同时,投资者应重点关注细分领域中的高增长板块(如智能制造、废弃资源综合利用),并结合基数效应预测未来利润反弹的可能性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:33:19", "modified_time": "2025-08-11 22:33:19", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "022016420623499a865acf373df4d446", "experience_type": "text", "when_to_use": "在制定消费品和服务行业的投资策略时,特别是在消费贷款贴息政策出台后,需要考虑居民信贷成本降低对消费行为的刺激作用,以及服务业融资环境的变化。", "content": "从国常会部署的个人消费贷款贴息政策来看,降低居民信贷成本有助于提升耐用品消费意愿,而服务业经营主体贷款贴息政策则直接减轻了中小企业融资负担。这一系列措施预计将在短期内提振零售、餐饮、健康等相关领域的市场需求。因此,投资者可优先布局受益于消费复苏的行业,并密切关注政策落地后的实际执行力度及其传导效率。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:33:19", "modified_time": "2025-08-11 22:33:19", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d4acbb40c5fa4f138cd0faef1d1a8982", "experience_type": "text", "when_to_use": "在评估美联储可能的货币政策调整(如降息或加息)时,尤其是在劳动市场数据存在显著波动或数据质量问题的情况下。", "content": "当劳动市场数据出现异常下修或波动时,应结合多维度指标进行综合判断,包括失业率、薪资增速、劳动参与率及移民趋势等。同时,需特别关注数据质量(如季节性调整和问卷回收率)对决策的影响,并考虑其他经济变量(如通胀、关税政策)对美联储决策的干扰。此外,若数据不确定性较高,美联储更可能延长观察期而非立即采取行动。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:34:10", "modified_time": "2025-08-11 22:34:10", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d1e3ec377a5a428a95576e30be79bc06", "experience_type": "text", "when_to_use": "在分析宏观经济数据对资产价格(如股票、债券、外汇和黄金)的短期影响时,特别是在关键经济数据发布后市场反应剧烈的情况下。", "content": "市场对经济数据的反应通常具有前置性和放大效应,例如非农就业数据大幅弱于预期时,市场可能快速定价未来降息预期,导致美元指数下跌、美债收益率下降以及黄金价格上涨。因此,在分析资产价格波动时,需明确区分市场情绪驱动的短期波动与基本面支撑的长期趋势,并结合高频数据验证市场预期的合理性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:34:10", "modified_time": "2025-08-11 22:34:10", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "2a5fc969942a4c20868e13ca486f7e5b", "experience_type": "text", "when_to_use": "在评估劳动市场对消费支出的潜在影响时,特别是在薪资增速、失业率和劳动参与率等指标出现分化的情况下。", "content": "劳动市场对消费的贡献不仅取决于失业率和薪资增速,还需考虑劳动参与率的变化、移民供给趋势以及名义总薪酬收入的稳定性。即使失业率上升,若薪资增速稳定且移民供给减少抑制了失业率快速上行,则消费支出可能不会显著下滑。这一框架可帮助预测消费相关行业的表现,并指导投资组合调整。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:34:10", "modified_time": "2025-08-11 22:34:10", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8cc64ba0136b4e81b4404933b8821390", "experience_type": "text", "when_to_use": "在识别劳动市场数据中的潜在误差或异常时,特别是在季度就业和薪资普查(QCEW)模型与非农就业数据存在显著差异的情况下。", "content": "当非农就业数据与QCEW数据出现较大偏差时,需警惕非农就业数据可能被高估或低估的风险。历史经验表明,这种偏差往往会在后续数据修订中得到修正,可能导致月均新增就业数据显著下调。因此,在基于劳动市场数据制定投资策略时,应预留一定的安全边际以应对潜在的数据修订风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:34:10", "modified_time": "2025-08-11 22:34:10", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c16155088159487287789d316a4bf0d6", "experience_type": "text", "when_to_use": "在宏观政策或重大经济事件后,市场情绪发生显著变化时,用于评估资产价格的短期波动及潜在回调空间。", "content": "当市场对政策预期过度反应导致资产价格大幅偏离基本面时,需结合政策实际内容与市场预期的差距进行分析。例如,在双焦价格因政策预期连续上涨后,随着宏观靴子落地,市场情绪转弱,价格回调至合理区间。这种情况下,应重点关注基本面是否仍然健康,并结合供需关系判断价格支撑位。同时,需警惕后续政策可能带来的二次利好或利空影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:34:57", "modified_time": "2025-08-11 22:34:57", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f0cf253f38fc4968b1cbe9310802d383", "experience_type": "text", "when_to_use": "在制定长期投资战略时,特别是在五年规划周期内预测经济增长和政策导向对资产配置的影响。", "content": "通过分析中国五年规划的指标结构和时间节奏,可以推导出隐含的经济增长目标(如‘十五五’期间年均4.5%的GDP增长要求)及其对各产业的具体影响。这有助于投资者提前布局政策支持的重点领域,例如科技、能源、农业和金融等方向。同时,结合区域协调发展战略(如京津冀、长三角、粤港澳大湾区),可进一步细化投资标的的选择,优先关注政策驱动型的高成长行业和地区。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:35:51", "modified_time": "2025-08-11 22:35:51", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ba457401833c4286a2683405272e45cf", "experience_type": "text", "when_to_use": "在评估特定行业的未来增长潜力时,特别是在科技、新能源和高端制造等新兴领域。", "content": "通过对发改委及各部委发布的课题进行系统性梳理,识别出政策重点扶持的细分行业(如人工智能应用场景、海上风电建设、半导体国产化)。这些课题反映了国家对于未来产业发展的方向性指引,能够帮助投资者聚焦于具有明确政策支持和市场需求的领域。此外,需特别注意新质生产力相关的提法变化(如海洋经济、生物制造),以捕捉潜在的颠覆性技术或商业模式带来的投资机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:35:51", "modified_time": "2025-08-11 22:35:51", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c11ada9b98924274b6da8dc24f6dcf9d", "experience_type": "text", "when_to_use": "在优化资本市场投资组合时,尤其是在判断市场情绪和资金流向的关键转折点。", "content": "从金融领域的课题变化中可以看出,政策重心已从防范系统性金融风险转向增强资本市场的投融资功能(如并购重组支持力度增加、科创板块改革)。这种转变表明监管层希望吸引更多长线资金入市,从而形成‘慢牛’格局。因此,在此类政策信号释放后,应重点关注券商、科创指数相关标的,以及受益于融资功能强化的新兴产业公司,利用市场信心恢复期实现超额收益。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:35:51", "modified_time": "2025-08-11 22:35:51", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "fb2f5c43ed5e47d490815ff692e2eff7", "experience_type": "text", "when_to_use": "在设计跨周期的资产配置方案时,特别是在全球经济波动加剧或地缘政治不确定性上升的背景下。", "content": "通过研究国际碳排放规则变化、全球能源格局演变等外部因素对中国经济发展的影响,可以更好地理解宏观环境中的风险与机遇。例如,针对碳达峰目标设立的约束性指标可能催生绿色转型相关的投资主题(如光伏、风电、储能)。同时,考虑到不同区域的发展不平衡问题,可因地制宜地选择抗周期性强且具备比较优势的特色产业(如中西部地区的清洁能源产业链延伸项目),以分散单一市场风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:35:51", "modified_time": "2025-08-11 22:35:51", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "905d06e755ff40e7b0387d834840c406", "experience_type": "text", "when_to_use": "在评估国际贸易政策(如关税)对宏观经济和微观经济的综合影响时,特别是在涉及多国、多行业复杂政策框架的情况下。", "content": "通过结合政策视角和海关数据的定量分析方法,可以有效拆解复杂的关税政策框架。首先从国家维度和行业维度梳理政策意图(例如分档税率和关键行业目标),然后利用海关数据计算平均有效关税的变化趋势及其对不同国家和行业的实际影响。此外,应关注企业应对策略的差异性(如涨价、供应链调整等),以理解政策传导至实体经济的具体路径。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:36:51", "modified_time": "2025-08-11 22:36:51", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6a004bf610d84c1cb5d34677495c4344", "experience_type": "text", "when_to_use": "在研究关税政策对消费者价格传导的影响时,特别是当需要预测终端消费品价格变化趋势时。", "content": "采用“自下而上”的草根调研方法,结合零售终端的价格数据追踪,能够更准确地捕捉关税对消费者日常支出的影响。例如,通过监测主要零售商SKU级别的价格变动,识别出不同品类(如鞋类、食品、家居用品等)的价格敏感性和传导速度。同时需考虑库存周期、促销活动等短期因素对价格传导的延迟效应,并结合长期政策预期评估持续影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:36:51", "modified_time": "2025-08-11 22:36:51", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b0976024bc29406dbbad289f372609e2", "experience_type": "text", "when_to_use": "在资产配置和投资组合调整中,特别是在面对由贸易政策引发的再通胀风险时。", "content": "通过对关税政策的梯队化特征及其对资源品价格的潜在推动作用进行前瞻性分析,可以为资产配置提供指导。例如,在关税导致成本上升的背景下,优先关注资源品相关资产(如大宗商品、能源)可能成为抗通胀的有效策略。同时,结合国内减税政策对需求侧的刺激效应,动态调整投资组合以平衡通胀与经济增长之间的关系。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:36:51", "modified_time": "2025-08-11 22:36:51", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8cc4a75fdef64e568f4bebea305fc2bb", "experience_type": "text", "when_to_use": "在评估国际贸易政策(如关税变化)对市场和经济的影响时,特别是在涉及多国贸易关系的复杂场景中。", "content": "通过分析关税政策调整的直接影响(如税率范围、生效时间)及其潜在连锁反应(如供应链重组、价格波动),结合受影响国家的经济结构和行业分布,识别关键风险点与机会。同时,需关注政策执行中的灵活性(如豁免可能性)以及谈判动态对市场预期的反复拉锯效应。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:38:01", "modified_time": "2025-08-11 22:38:01", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8c08e390198c43c1aef720dfb9be985b", "experience_type": "text", "when_to_use": "在美联储或主要央行货币政策决策前后,进行利率路径预测及资产价格影响分析时。", "content": "整合宏观经济数据(如GDP增长、就业指标、通胀趋势)与央行政策声明,重点评估政策制定者的语言措辞(如鹰派/鸽派倾向)及其对市场预期的引导作用。同时,结合资产价格的即时反应(如美债收益率、黄金价格)验证分析假设,并动态调整预测模型以应对新的经济信号。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:38:01", "modified_time": "2025-08-11 22:38:01", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "84bfc49081ab466a9acebc9ada3fb82f", "experience_type": "text", "when_to_use": "在分析经济周期转折点(如从扩张到放缓)及其对金融市场和投资组合的影响时。", "content": "利用高频数据(如PMI、就业数据)和低频数据(如季度GDP、年度通胀率)交叉验证经济运行状态,识别领先指标(如制造业订单、消费者信心)与滞后指标(如失业率)的变化趋势。结合政治与政策背景(如财政刺激力度、监管环境)判断经济压力来源,并据此调整投资策略的时间跨度与资产配置。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:38:01", "modified_time": "2025-08-11 22:38:01", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "60099bc7738c456e8a1ab35cb2efb389", "experience_type": "text", "when_to_use": "在评估国内经济政策连续性及其对市场稳定性和企业运营的影响时,尤其是在宏观政策转向预期较低但存在隐忧的场景中。", "content": "通过解读高层政策会议(如政治局会议)的核心表述,分析政策重心(如稳增长、促消费、防风险)的优先级变化。结合高频经济活动数据(如地产销售、出口增速)验证政策效果的可持续性,并提前布局应对可能的增量政策出台或外部冲击。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:38:01", "modified_time": "2025-08-11 22:38:01", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7da0200b894e4106a972a02bef2a0989", "experience_type": "text", "when_to_use": "在宏观经济预测中,特别是在评估季度GDP增长趋势时,针对复杂外部环境和政策逆周期调节效果的分析。", "content": "结合高频数据(如PMI、工业增加值、固定资产投资等)与政策导向(如专项债发行、消费刺激政策),通过季节性调整和环比测算推导同比增速。同时关注内外需变化、价格指数波动以及结构性分化(如大型企业与中小型企业表现差异),以增强预测的准确性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:38:58", "modified_time": "2025-08-11 22:38:58", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5709d050c7704018938edbc7c4c8c368", "experience_type": "text", "when_to_use": "在评估消费市场的短期表现时,特别是零售销售和社会消费品零售总额预测。", "content": "利用高频指标(如汽车销售、地产后周期消费、出行相关服务消费)结合服务业PMI,判断消费韧性及潜在支撑点。同时考虑政策引导(如‘以旧换新’政策)对特定领域消费的拉动作用,并通过历史季节性规律校准环比和同比增速。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:38:58", "modified_time": "2025-08-11 22:38:58", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "054e2500d5944621bb47ba05176d383c", "experience_type": "text", "when_to_use": "在分析贸易数据时,尤其是出口和进口增速预测,面对全球地缘政治风险和关税政策影响。", "content": "监测港口吞吐量、集装箱运输量及分地区出口动态(如对美、东盟国家出口)。结合全球制造业PMI走势和关键商品价格(如大宗商品),评估外需韧性。对于进口,则重点关注内需恢复情况、进口价格指数及汇率变动的影响,确保预测覆盖多维度变量。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:38:58", "modified_time": "2025-08-11 22:38:58", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7524bb013c4a4c96ad2cd4bde7f6085b", "experience_type": "text", "when_to_use": "在通胀预测中,特别是CPI和PPI同比变化分析,面对供给端政策干预和需求侧疲软的情况。", "content": "通过高频食品价格(如猪肉、蔬菜)、工业品价格(如南华工业品指数)以及能源价格波动,结合季节性因素和基数效应,推算CPI和PPI环比及同比读数。特别注意区分价格反弹是由供给端政策驱动还是需求扩张所致,以判断可持续性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:38:58", "modified_time": "2025-08-11 22:38:58", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "162dc190da2840fdb14e1900462e1ebf", "experience_type": "text", "when_to_use": "在信贷和社融规模预测中,尤其是在传统信贷小月或流动性宽松背景下。", "content": "基于票据利率、政府债净融资、企业债融资及非标融资的历史季节性规律,结合当前实体经济融资需求不足的现状,拆解新增信贷各分项(如企业短贷、中长贷、居民贷款)并进行同比环比对比。同时关注财政支出节奏对M2增速的影响,以全面评估社融存量同比变化。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:38:58", "modified_time": "2025-08-11 22:38:58", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f715b54260ba40ce8e0f64cfc6c57d4c", "experience_type": "text", "when_to_use": "在分析央行政策决策及其对市场的影响时,尤其是在央行内部存在分歧且外部政治压力较大的情况下。", "content": "在评估美联储政策声明时,应重点关注声明措辞的变化(如对经济增速、不确定性的描述调整)以及投票委员的立场分化。这些细节揭示了政策制定者的内部分歧和潜在政策转向的可能性。同时,需结合经济数据(如就业、通胀)来判断政策路径,而非单纯依赖市场预期。例如,本次会议中删除“不确定性有所减退”并强调经济增速放缓,表明美联储对未来经济前景更加谨慎。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:40:04", "modified_time": "2025-08-11 22:40:04", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e496f7812ff44cf6a4e0bd7a1c1a5ff5", "experience_type": "text", "when_to_use": "在评估货币政策对大类资产价格的短期和中期影响时,特别是在市场对央行政策信号反应不明确的情况下。", "content": "当美联储释放较为‘鹰派’信号时,通常会导致美元指数走强、贵金属价格下跌,而股市和债市则可能因经济数据和市场情绪的不同而表现出分化。例如,本次会议后,美元指数显著回升,黄金和白银价格大幅下跌,但美股跌幅有限。这表明市场对政策信号的解读需要结合具体资产类别和当时的市场环境进行分析,不能一概而论。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:40:04", "modified_time": "2025-08-11 22:40:04", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "cec20521d0804398a28297d52c450ed7", "experience_type": "text", "when_to_use": "在预测未来货币政策路径时,特别是在经济数据与政策目标之间存在矛盾的情况下。", "content": "当劳动力市场表现强劲但通胀数据开始回升时,央行可能会推迟降息以避免通胀进一步上升。例如,本次报告中提到美国6月非农就业数据强于预期,但核心CPI同比升幅也出现反弹,这使得美联储对降息保持谨慎态度。因此,在预测降息时点时,需综合考虑劳动力市场和通胀数据的动态变化,并关注关键经济指标的边际变化。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:40:04", "modified_time": "2025-08-11 22:40:04", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1bdeaaab1d0f490a845f22dc9b03f404", "experience_type": "text", "when_to_use": "在为客户提供资产配置建议时,特别是在全球经济和贸易局势复杂多变的背景下。", "content": "在当前全球贸易局势缓和、美国经济韧性较强的情况下,美股和大宗商品可能受益于积极的财政政策和经济复苏预期;而贵金属则可能因避险情绪降温而陷入调整。此外,美元指数虽短期反弹,但长期可能处于下行周期。因此,在为客户提供建议时,应根据客户的风险偏好和投资期限,灵活调整资产配置比例,并密切关注政策和市场动态的变化。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:40:04", "modified_time": "2025-08-11 22:40:04", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6ea285fa377243709fb94930f960de7a", "experience_type": "text", "when_to_use": "在宏观经济政策分析和预测场景中,特别是在评估未来五年规划对市场的影响时", "content": "通过分析中央政治局会议的政策基调、宏观调控方向及具体措施(如财政与货币政策),结合历史数据验证政策连续性和灵活性的实际效果。重点关注政策对资本市场、房地产市场、消费领域等关键板块的传导路径,并跟踪高频经济指标以动态调整预期。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:40:57", "modified_time": "2025-08-11 22:40:57", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "aba2ab7abd9c49bfab27d292f1d1c92a", "experience_type": "text", "when_to_use": "在制定跨周期投资策略或资产配置方案时,尤其是在面对复杂国际经贸环境变化的情况下", "content": "识别内外部风险因素(例如关税政策、地缘政治冲突)对产业链韧性的影响,同时利用国内大循环与国际双循环的框架优化投资组合。优先考虑具有科技创新属性的行业以及受政策支持的新兴支柱产业,同时规避因低价竞争导致盈利能力下降的传统制造业。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:40:57", "modified_time": "2025-08-11 22:40:57", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "abb75bb8f0ac42779026c1c69fbbca92", "experience_type": "text", "when_to_use": "在进行消费领域的市场研究和消费者行为预测时,特别是需要判断内需潜力释放节奏的场景", "content": "综合居民收入增长趋势、就业信心指数、储蓄率等微观数据,评估消费复苏的可能性与时间节点。关注政府出台的提振消费专项行动及其落地效果,尤其是服务消费新增长点(如文化娱乐、健康养老等领域)。此外,密切关注科技金融工具对中小企业融资能力的支持作用,间接促进消费需求扩张。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:40:57", "modified_time": "2025-08-11 22:40:57", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "16c6cd529c914d08b72ca7f29e207bec", "experience_type": "text", "when_to_use": "在资本市场监管改革背景下设计交易策略或提供客户咨询服务时", "content": "基于近期资本市场回稳向好的势头,结合监管层关于增强市场吸引力和包容性的表态,建议投资者关注长期资金入市带来的结构性机会(如社保基金增持标的)。同时注意上市公司并购重组政策优化后的潜在受益者,以及多层次资本市场建设中的创新产品(如科技板债券)。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:40:57", "modified_time": "2025-08-11 22:40:57", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c0603342f5f94dabaee1aaa741d54122", "experience_type": "text", "when_to_use": "在分析宏观经济政策对资本市场的影响时,尤其是在经济周期转换或重大政策调整期间(如政治局会议后)", "content": "通过解读高层政策信号(如财政和货币政策的协同发力方向),结合具体行业和市场的落地措施(如超长期特别国债支持的重点项目),评估政策传导效应。重点关注政策对流动性、融资成本及市场预期的短期与中长期影响,并将其融入资产配置策略中。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:41:53", "modified_time": "2025-08-11 22:41:53", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "bfb0e9108f174d57859569b1cf60da17", "experience_type": "text", "when_to_use": "在制定投资组合调整策略时,特别是在内需驱动型经济复苏背景下(如服务消费和有效投资成为政策重点时)", "content": "识别政策导向中的结构性机会(如养老、文旅等服务消费领域),并结合区域经济发展差异(如经济大省挑大梁作用)进行资产布局。同时,关注民间投资活力释放的信号,优先选择具有明确政策支持且估值合理的标的,避免低效重复建设相关领域。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:41:53", "modified_time": "2025-08-11 22:41:53", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "cf585657643a4dc7b55a1e3f5043663d", "experience_type": "text", "when_to_use": "在风险评估与化解过程中,特别是涉及地方政府债务、房地产市场及资本市场稳定等领域", "content": "建立多层次的风险监测框架,区分存量风险化解和增量风险防控。例如,在地方政府债务风险方面,跟踪隐性债务出清进展;在房地产领域,关注城市更新与危旧房改造模式的可持续性;在资本市场,注重上市公司质量提升与投资者信心恢复的政策效果评估。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:41:53", "modified_time": "2025-08-11 22:41:53", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "128707f10ec4471783bc4f0179872709", "experience_type": "text", "when_to_use": "在设计跨周期财务规划或战略投资方案时,特别是在经济转型期或国际环境不确定性较高的阶段", "content": "以科技创新为核心驱动力,聚焦新兴支柱产业培育(如新能源、高端制造等),并结合内外贸一体化趋势优化资源配置。同时,将粮食安全、能源保障等底线思维纳入长期规划,确保战略韧性,平衡短期收益与长期价值创造。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:41:53", "modified_time": "2025-08-11 22:41:53", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "11310637d4f041f38227df218780df10", "experience_type": "text", "when_to_use": "在评估发达市场(如美国)的流动性状况时,特别是在美联储缩表或货币政策调整期间,判断金融体系是否存在系统性风险。", "content": "通过分析银行系统的超额准备金水平、回购市场的流动性供给结构以及资产负债表构成,可以有效评估流动性的健康程度。重点关注头部银行与中小型银行的流动性分布差异,以及持有至到期资产(HTM)对资产负债表的占用情况。健康的流动性分布和充足的超额准备金通常表明短期内不存在系统性风险,但需警惕长久期资产占比上升可能带来的潜在脆弱性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:42:33", "modified_time": "2025-08-11 22:42:33", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6541b710ff4a41789d0677af1ad039a4", "experience_type": "text", "when_to_use": "在研究货币政策传导效率对实体经济的影响时,尤其是在降息周期中,长端利率未能显著下行的情况下,评估信用创造能力。", "content": "当货币政策传导效率较低时,即使流动性充裕,也可能出现信用需求不足的现象。这种情况下,应关注实体经济贷款利率与长端美债利率的联动性,以及工商业贷款、消费贷款等非债券类资产的增长趋势。若实体融资成本居高不下且贷款需求疲软,则可能预示着经济‘脱实向虚’的趋势加剧,进一步推升资产价格泡沫化水平。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:42:33", "modified_time": "2025-08-11 22:42:33", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a62b2934e5af4ec8942fb3bbca78906b", "experience_type": "text", "when_to_use": "在预测资产价格波动性和流动性风险时,特别是面对长期低利率环境或潜在政策变化(如关税冲击、技术突破等)带来的不确定性。", "content": "在流动性充裕但信用需求不足的宏观组合下,资产价格对利率的敏感性会显著增强,同时积聚更大的流动性风险。此时需要密切跟踪未实现损失规模及其对银行出售资产换取流动性能力的限制,以及持有至到期资产久期的变化。此外,外部因素如特朗普政策不确定性或全球经济共振扩表的可能性也需纳入考量,以全面评估市场动态。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:42:33", "modified_time": "2025-08-11 22:42:33", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "af668c0806ab4256a3de60facea64866", "experience_type": "text", "when_to_use": "在分析宏观经济数据(如PMI)对市场的影响时,特别是在需求放缓或经济周期转折点的背景下。", "content": "通过对比供需指数(如新订单与产成品库存的差值)来评估有效需求的变化,并结合不同规模企业的景气度分化情况,可以更准确地判断经济活动的潜在趋势。例如,当新订单指数回落至收缩区间且小型企业PMI显著下降时,表明市场需求疲软可能对经济增长构成压力。这提示投资者应关注防御性资产或降低风险敞口。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:43:08", "modified_time": "2025-08-11 22:43:08", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "41c782f9d9ae48db84bfa36f4e576941", "experience_type": "text", "when_to_use": "在评估特定行业或板块的投资机会时,尤其是在制造业相关的股票或固定收益产品中。", "content": "利用PMI细分数据(如生产指数、新出口订单和价格指数)来识别行业内的供需动态和盈利压力。例如,当出厂价格指数低于原材料购进价格指数时,表明企业利润率可能受到挤压,需谨慎对待相关行业的短期投资机会,同时考虑成本转嫁能力强的龙头企业作为优选标的。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:43:08", "modified_time": "2025-08-11 22:43:08", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c35c22ec68ee4a638fcd75f261c54b80", "experience_type": "text", "when_to_use": "在制定跨资产类别的战术配置策略时,特别是在经济不确定性较高或市场波动加剧的情况下。", "content": "结合非制造业PMI与制造业PMI的表现,观察服务业和建筑业的景气度变化,以判断经济结构调整的方向。例如,当非制造业PMI接近荣枯线而建筑业PMI大幅回落时,可适当增加债券等避险资产的比重,同时减少对周期性较强的股票资产的配置,以应对潜在的增长放缓风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:43:08", "modified_time": "2025-08-11 22:43:08", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "430e15b85281433d92f7cd5e0fbdd9d9", "experience_type": "text", "when_to_use": "在宏观经济政策分析中,尤其是在解读中央政治局会议等高层决策信号时,用于预测未来政策走向和市场影响。", "content": "通过分析高层会议的措辞变化(如不再单独强调外部冲击、提出巩固经济回升势头等),结合历史政策周期和经济数据,可以判断政策连续性和灵活性的方向。例如,明确财政政策(如加快政府债券发行)和货币政策(如可能降准降息)的重点领域,从而为资产配置和投资策略提供依据。此外,关注政策对内需释放的支持方向(如消费和基建投资),以识别潜在受益板块。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:44:02", "modified_time": "2025-08-11 22:44:02", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f61e5445fcf846049ac00a07315df147", "experience_type": "text", "when_to_use": "在评估资本市场吸引力和包容性提升的背景下,用于指导股票和债券市场的投资机会挖掘。", "content": "当政策层面明确提出增强资本市场吸引力时,通常伴随一系列改革措施(如优化融资环境、支持科技创新企业上市等)。此时应重点关注政策扶持领域(如科技创新、小微企业、绿色经济)相关的上市公司或债券发行主体,同时跟踪市场情绪指标(如成交量、波动率)以判断资本市场的回稳向好趋势。此外,结合估值水平和行业景气度筛选标的,可提高投资胜率。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:44:02", "modified_time": "2025-08-11 22:44:02", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0cd57c0a46c444e7898f66e39ef9d882", "experience_type": "text", "when_to_use": "在地缘政治风险和国际金融形势不确定性较高的环境下,用于制定防御性资产配置策略。", "content": "面对地缘政治事件恶化或国际金融形势改变的风险提示,建议增加防御性资产(如黄金、高评级债券)的配置比例,并减少对外部依赖度高的行业(如外贸相关企业)的敞口。同时,利用结构性货币政策工具(如定向降准)支持的领域作为战术性布局方向,以平衡组合收益与风险。此外,动态调整外汇敞口以应对货币波动风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:44:02", "modified_time": "2025-08-11 22:44:02", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "27f2d3bfb111443fa813771fccb0226f", "experience_type": "text", "when_to_use": "在经济周期转折点附近,用于判断是否需要从短期战术操作转向长期战略规划。", "content": "通过观察宏观政策是否从‘稳增长’逐步过渡到‘促改革’,以及内需潜力释放的具体措施(如城市更新、地方债务管理),可以判断经济运行是否进入新阶段。若政策更注重长期发展目标(如科技创新、产业升级),则适合将资金逐步转向具有长期竞争力的新兴支柱产业;若政策仍聚焦短期稳增长,则维持较高流动性并灵活调整仓位更为适宜。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:44:02", "modified_time": "2025-08-11 22:44:02", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "377b47c3c2bd4ea781d432221d800f19", "experience_type": "text", "when_to_use": "在评估全球经济数据的波动性对市场情绪和资产价格的影响时,特别是在宏观数据集中发布期间(如GDP、就业数据、通胀指标等)。", "content": "通过结合关键经济指标(如非农就业、GDP环比增速、核心PCE通胀率)与市场交易模式(如衰退交易、通胀交易)的分析框架,可以有效识别宏观经济趋势逆转的早期信号。例如,当非农就业数据显著低于预期且前值大幅下修时,可能预示着劳动力市场的结构性降温,进而引发市场重新评估经济增长前景并转向衰退交易模式。此方法强调将硬数据(如就业、消费支出)与软数据(如消费者信心指数)相结合,以全面验证经济放缓的真实性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:45:08", "modified_time": "2025-08-11 22:45:08", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1fdf25abf6e641bbbf866d6fc874341c", "experience_type": "text", "when_to_use": "在分析关税政策变化对全球贸易流动、通胀预期及货币政策路径的潜在影响时,尤其是在多国关税调整或贸易谈判的关键节点。", "content": "利用关税税率的实际征收水平与行业分布数据(如耶鲁大学研究的有效关税税率),结合受影响商品的价格传导机制,可以评估关税冲击对通胀和经济活动的具体影响。例如,通过对美国进口商品关税税率的变化及其覆盖范围的分解,可以预测短期内特定商品价格上涨的可能性,并进一步推导出其对美联储降息路径的潜在压力。此外,在跨区域分析中,需特别关注关税协议中的例外条款(如欧盟部分产品免征关税),这些细节可能显著影响不同市场的相对竞争力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:45:08", "modified_time": "2025-08-11 22:45:08", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b00cd13fc2b943a38b4642513708a2f5", "experience_type": "text", "when_to_use": "在制定中期投资策略时,需要综合考虑货币政策分歧、地缘政治风险以及市场流动性环境的变化。", "content": "通过跟踪主要央行的政策声明和投票记录(如美联储FOMC会议中的异议票情况),可以捕捉到货币政策决策过程中的内部分歧及其对未来利率路径的潜在影响。例如,当美联储理事提前离职或出现明显反对意见时,应警惕政策不确定性上升的风险,并相应调整投资组合的久期敞口。同时,结合财政部发债计划(如美国季度借款规模的大幅上调)与外汇储备动态,可更好地理解市场流动性状况的变化对资产价格的支撑或压制作用。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:45:08", "modified_time": "2025-08-11 22:45:08", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0aa6cc8ca5664d05868a9c851c8be1d1", "experience_type": "text", "when_to_use": "在评估能源市场价格波动对宏观经济和行业的影响时,特别是在国际原油价格大幅上行的背景下。", "content": "通过分析上游能源价格(如WTI原油、Brent原油)的短期波动及其对中下游产业(如化工、建材等)的成本传导机制,结合政策导向(如AI技术应用与节能减排政策),制定跨行业的投资策略。例如,当原油价格上涨时,关注PX、PTA等化工品开工率的变化,以及其对聚酯产业链的潜在影响,提前布局相关标的或对冲风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:45:52", "modified_time": "2025-08-11 22:45:52", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5fd2402c59ad4edfadb09277a652185a", "experience_type": "text", "when_to_use": "在消费贷款政策调整或服务业贴息政策出台时,评估对居民消费行为及服务业经营主体融资成本的潜在影响。", "content": "利用高频数据(如电影票房、航班执行情况、城市拥堵指数等)跟踪消费复苏节奏,结合政策实施的时间窗口,判断个人消费贷款和服务业贷款贴息政策的实际效果。例如,在暑期国内航班班次增加的情况下,结合高峰拥堵指数和票房数据,推测服务业复苏强度,并据此调整消费相关股票或债券的投资组合。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:45:52", "modified_time": "2025-08-11 22:45:52", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1e1e7e7dbc5f4fae897281dbe02eea94", "experience_type": "text", "when_to_use": "在房地产市场季节性回落期间,评估一、二、三线城市商品房成交数据的变化趋势及其对地产链相关行业的影响。", "content": "通过分析30大中城市商品房成交套数和面积的分线城市数据,结合建材综合指数、水泥价格指数等高频指标,判断房地产市场的短期需求变化及其对上下游行业(如钢铁、玻璃、混凝土等)的传导效应。例如,当一线城市的商品房销售季节性回落时,关注螺纹钢和铁矿石价格的联动性,适时调整相关大宗商品的交易策略。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:45:52", "modified_time": "2025-08-11 22:45:52", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "4a0b6340587a414e929472bd06117e0f", "experience_type": "text", "when_to_use": "在监测农产品和工业原材料价格波动时,尤其是在通胀预期或供应链扰动的情况下。", "content": "通过跟踪农业、有色金属、黑色金属等重点行业的现货价格指标(如玉米、铜、螺纹钢等),结合同比变化和过去5天趋势,识别潜在的价格拐点或趋势延续信号。例如,当天然橡胶和棕榈油价格出现显著下跌时,结合全球经济周期和地缘政治因素,评估其对下游制造业的成本缓解作用,并优化相关资产配置。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:45:52", "modified_time": "2025-08-11 22:45:52", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "725353542977405aad3de741732a7ec0", "experience_type": "text", "when_to_use": "在评估全球贸易政策变化(如关税战)对宏观经济的影响时,尤其是在预测通胀、就业和货币政策反应的场景中。", "content": "分析全球贸易政策变化对经济的影响时,应从三个维度展开:一是进口商品价格传导对通胀的滞后效应;二是贸易壁垒对就业市场的冲击及其在数据中的体现;三是央行在通胀与经济增长间的权衡。例如,美国关税战导致进口商品价格上涨,并逐步体现在核心CPI中,同时制造业PMI新订单和就业分项指数持续萎缩,反映出需求疲软。美联储因此陷入两难,需在控制通胀和支持经济间找到平衡。这种分析框架适用于评估任何重大贸易政策变动的宏观影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:46:55", "modified_time": "2025-08-11 22:46:55", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "2735a48b1e404658ab396d87fdb773fb", "experience_type": "text", "when_to_use": "在制定国内财政和货币政策应对全球经济不确定性(如外部关税冲击)的策略时,特别是在政策工具选择和实施节奏的决策场景中。", "content": "当外部需求因关税冲击而放缓时,内部需求的提振成为关键。应优先通过财政政策拉动需求,例如加速政府债券发行和优化支出结构,同时配合适度宽松的货币政策以降低融资成本。然而,需注意内外部因素的平衡,例如汇率波动风险和通胀预期。例如,报告中提到5月LPR非对称调降,存款利率超量下调,既刺激消费和投资,又为未来政策调整预留空间。这一经验可应用于类似外部冲击下的政策设计。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:46:55", "modified_time": "2025-08-11 22:46:55", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "31d01519aaca403ebfdb1395ec273de0", "experience_type": "text", "when_to_use": "在分析企业信贷需求偏弱的原因及应对措施时,特别是在低利率环境下实体部门融资需求不足的场景中。", "content": "在低利率环境下,若实体部门信贷需求仍偏弱,需重点分析外部需求放缓和内部信心不足的双重影响。例如,报告指出二季度信贷需求放缓主要受关税战冲击,企业对未来需求前景和居民就业信心均下降。此时,政策应聚焦于提振内需,特别是通过财政政策拉动消费和投资。此外,结构性货币政策工具(如支持科技创新和小微企业)也可有效定向刺激需求。这一框架适用于评估类似环境下的信贷市场动态。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:46:55", "modified_time": "2025-08-11 22:46:55", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8f1ae8a8c19348beb08adaddb57d27ba", "experience_type": "text", "when_to_use": "在评估国际央行政策调整的可能性及其对金融市场的影响时,特别是在通胀目标达成但经济前景不确定的场景中。", "content": "当通胀接近目标但经济前景不确定时,央行的政策调整通常会更加谨慎。例如,欧洲央行在通胀回归2%目标后选择暂缓降息,等待经贸形势明朗化;日本央行则在通胀高位回落的情况下保持利率不变,观望关税冲击对出口需求的影响。在此类场景中,应重点关注央行对通胀、就业和外部不确定性的权衡,以及其政策声明中对未来路径的暗示。这一经验可用于预测央行政策方向及其对汇率、债券收益率等市场变量的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:46:55", "modified_time": "2025-08-11 22:46:55", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "baa658be5e6747a4a2cf04a4516c7ee7", "experience_type": "text", "when_to_use": "在制定长期投资策略时,特别是在评估宏观经济政策对资产配置的影响时,例如五年规划的发布。", "content": "通过分析五年规划的结构和演变特征(如经济增速目标弹性化、产业政策焦点转移、重大工程项目布局),可以识别未来政策导向的关键领域。例如,从‘十五’到‘十四五’规划,经济增长目标逐步从硬性约束转向区间目标,同时创新、民生和绿色低碳成为重点方向。这提示投资者应优先关注与新质生产力、绿色转型相关的行业,如人工智能、新能源和环保技术领域,并调整资产配置以适应政策驱动的市场变化。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:47:46", "modified_time": "2025-08-11 22:47:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "020c8d35f1764ed9b8623fe0575bcda9", "experience_type": "text", "when_to_use": "在进行跨周期的行业轮动分析时,特别是需要理解产业结构调整对不同行业增长潜力的影响。", "content": "通过对历次五年规划中产业结构政策的分析,发现制造业与服务业的动态调整呈现出清晰的优化路径。例如,‘十一五’至‘十二五’期间服务业占比加速提升,而‘十三五’至‘十四五’则强调制造业稳定与服务型制造的发展。这表明,生产性服务业(如信息技术、租赁商服)和消费升级驱动的生活性服务业(如健康、教育)将成为未来增长的重要支撑点。投资者可据此判断行业轮动趋势,提前布局高增长潜力的细分领域。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:47:46", "modified_time": "2025-08-11 22:47:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3d96e4bc072348758ce4002893c115f1", "experience_type": "text", "when_to_use": "在评估区域经济发展机会或基础设施投资潜力时,尤其是在分析国家重大工程项目的地理分布和重点领域。", "content": "五年规划中的重大工程项目通常集中于民生保障、生态保护和基础设施建设,且近年来更倾向于形成固定资产的‘硬’性项目。例如,‘十四五’规划中涉及西部省份(如四川、西藏、新疆)的重大项目显著增加,表明这些地区可能成为未来基建投资的重点区域。此外,生态环保和资源循环利用相关项目因新一轮设备更新需求可能成为下阶段的热点。投资者可结合区域政策倾斜和项目实施进度,选择具有较高回报潜力的标的。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:47:46", "modified_time": "2025-08-11 22:47:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "974834d10ec54edaa4f751f73423c70f", "experience_type": "text", "when_to_use": "在分析宏观经济数据(如GDP、CPI、PPI)以预测未来经济走势和政策方向时,特别是在面临通缩压力或供需失衡的市场环境中。", "content": "结合名义与实际经济增长指标(如GDP平减指数)以及价格水平变动(如CPI-PPI差值),识别经济运行中的结构性问题(如通缩风险、产能过剩)。同时,通过监测财政与货币政策的边际变化(如政府融资增速、利率调整)评估政策对经济修复的支持力度。重点关注‘反内卷’等供给侧治理措施对企业利润和行业竞争格局的影响,从而判断价格修复的潜力与经济复苏节奏。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:49:00", "modified_time": "2025-08-11 22:49:00", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c5781c1342504dc3a2f0b04dbb330079", "experience_type": "text", "when_to_use": "在评估特定行业的投资机会或风险时,特别是在产能过剩或价格战严重的行业中(如光伏、新能源汽车、建材等)。", "content": "通过分析行业供需动态(如产能利用率、新增产能计划)、盈利状况(如头部企业利润率)及政策干预路径(如超产治理、能耗标杆约束),筛选出可能受益于政策支持或行业整合的标的。同时,结合民企占比与行业集中度(如CR5),判断市场化出清速度与潜在整合空间,优化行业配置策略。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:49:00", "modified_time": "2025-08-11 22:49:00", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "63704eac362f441a99e4236ef6cbdcfc", "experience_type": "text", "when_to_use": "在外需波动较大且人民币汇率存在贬值压力的情况下,进行外汇风险管理或跨境资产配置决策时。", "content": "利用中美基本面差异(如经济增长预期差)、利差变化(如短端利率走势)以及地缘政治风险释放情况,预判人民币汇率的短期波动区间。关注央行稳汇率政策信号(如中间价引导),并结合美元指数趋势与全球贸易环境(如关税谈判进展),制定灵活的汇率对冲方案或择机布局海外资产。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:49:00", "modified_time": "2025-08-11 22:49:00", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "2bc59cc3684d46a58f9ba811b12005df", "experience_type": "text", "when_to_use": "在商品市场中捕捉政策驱动型交易机会时,特别是在国内推出供给端调控政策(如‘反内卷’)后。", "content": "区分商品品种的价格驱动因素(内需定价 vs 外需定价),优先选择受政策直接利好影响的品种(如黑色系焦煤、焦炭)。对于前期跌幅较大但需求端未明显改善的品种(如碳酸锂、工业硅),警惕反弹后的二次探底风险。此外,密切跟踪原油价格及其下游化工品的成本传导效应,避免因全球需求疲软导致的重心回落风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:49:00", "modified_time": "2025-08-11 22:49:00", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d896fc868d934120b220fc27acccaeeb", "experience_type": "text", "when_to_use": "在评估市场热度和交易活跃度时,特别是在高波动性或趋势性较强的市场环境中。", "content": "通过分析市场交易热度、波动率及流动性指标(如换手率、成交额占比等),可以识别出当前市场的主导板块及其潜在轮动方向。例如,当医药、通信、电子等板块的交易热度处于历史分位数80%以上且波动率较低时,表明这些板块可能正在经历资金流入并形成持续趋势。此外,结合两融活跃度和龙虎榜数据能够进一步验证个人投资者的情绪驱动行为。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:49:43", "modified_time": "2025-08-11 22:49:43", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7b0233f90fff4e36aadac146b0709938", "experience_type": "text", "when_to_use": "在制定行业配置策略时,尤其是需要判断盈利预期变化对不同板块的影响时。", "content": "利用分析师对于个股净利润预测的调整频率和幅度,可以有效捕捉机构投资者对未来业绩增长的偏好。例如,若电力及公用事业、有色金属、医药等行业今明两年的净利润预测均被上调,则说明这些板块可能受益于宏观经济改善或政策支持;同时需关注风格指数(如大盘成长与小盘价值)之间的分化,以优化投资组合的风险收益特征。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:49:43", "modified_time": "2025-08-11 22:49:43", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3e328a85d2344365b5ebdd5c05be9af8", "experience_type": "text", "when_to_use": "在跟踪资金流向并进行短期战术操作时,特别是针对ETF、北上资金和两融资金的行为分析。", "content": "将ETF净申购/赎回情况与北上资金买卖总额占比相结合,可揭示机构和个人投资者之间的共识或分歧。例如,当ETF与北上资金的买入共识度上升但卖出共识度下降时,表明部分行业可能存在持续的资金流入机会;而两融和龙虎榜的买入共识度接近历史高位时,则提示个人投资者情绪已接近过热阶段,需警惕回调风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:49:43", "modified_time": "2025-08-11 22:49:43", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "287bfba0c61b487ab384bfe2e9a862b5", "experience_type": "text", "when_to_use": "在宏观经济政策分析的背景下,特别是在中央政治局会议或其他重大政策发布后,评估政策对资本市场、房地产市场及财政货币政策的影响。", "content": "通过解读政策文件和经济数据(如GDP增长率、财政存款余额、产能利用率等),结合政策基调(如“优化存量、提质增效”)预测未来政策实施的方向和力度。例如,本次会议强调‘反内卷’政策和城市更新计划,表明政策重点从大规模刺激转向存量优化和结构性改革,这对房地产、基建及相关行业投资具有直接影响。应关注政策对中长期经济增长潜力的培育作用,以及如何通过科技创新和消费升级推动经济转型。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:50:46", "modified_time": "2025-08-11 22:50:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "fc5c9cc455614a8493f6e62c14d36d2d", "experience_type": "text", "when_to_use": "在评估资产配置策略时,尤其是在经济周期转折点或市场波动显著变化的情况下,确定不同资产类别的潜在表现。", "content": "基于宏观环境(如当前GDP增长稳健但外需不确定、物价低位运行)和政策导向(如适度宽松的货币政策和积极财政政策),调整资产组合以适应市场动态。例如,在低利率环境下,固定收益产品吸引力下降,而股票市场可能因政策支持科技创新和资本市场改革而更具吸引力。此外,服务消费领域的升级潜力为相关行业(如医疗、教育、文化娱乐)提供了投资机会,投资者可考虑增加这些领域的权重。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:50:46", "modified_time": "2025-08-11 22:50:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "45433055ddd3446e834c2f177120c4c4", "experience_type": "text", "when_to_use": "在进行风险评估时,特别是面对外部冲击或内部结构调整带来的不确定性,识别关键风险领域并制定应对方案。", "content": "通过对杠杆率、地方政府债务风险、企业无序竞争等问题的深入分析,识别系统性风险来源。例如,本次会议提到‘严禁新增隐性债务’和‘依法依规治理企业无序竞争’,表明政策层面对防范金融风险的高度关注。同时,建议利用结构性货币政策工具(如专项再贷款)支持重点领域,降低尾部风险。对于金融机构而言,应强化压力测试和情景分析,确保在极端情况下仍能维持流动性稳定。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:50:46", "modified_time": "2025-08-11 22:50:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a544c9f2018f419a8e4af3ed1735607d", "experience_type": "text", "when_to_use": "在设计客户咨询服务方案时,尤其是针对高净值个人或机构投资者,提供定制化的财富管理建议。", "content": "结合宏观经济趋势与客户需求,为客户量身打造投资策略。例如,根据本次会议释放的政策信号,可以向偏好稳健收益的客户推荐受益于城市更新计划的房地产信托基金(REITs)或基础设施建设相关的债券;而对于追求高成长性的客户,则可建议布局科技创新型企业或新兴支柱产业相关的股权投资。同时,通过定期跟踪政策动向和市场表现,及时调整投资建议,增强客户信任度。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:50:46", "modified_time": "2025-08-11 22:50:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "35966071002142ac9dae4c16331a30a2", "experience_type": "text", "when_to_use": "在评估国际贸易政策对市场的影响时,特别是针对关税调整和其经济连锁反应的分析场景。", "content": "通过分析美国对多国实施的“对等关税”政策及其生效时间表,可以推导出短期内全球贸易流动的变化趋势及对相关行业(如能源、汽车、农产品)的冲击。此外,结合宏观数据(如GDP增长率、非农就业数据)和市场情绪(如美元指数波动),可更全面地预测政策对资本市场、外汇市场以及大宗商品价格的潜在影响。建议关注关键时间节点(如行政令生效日)和受影响国家的应对措施,以捕捉交易机会或规避风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:51:54", "modified_time": "2025-08-11 22:51:54", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "68d24ff43f7443729ce0360fe87ef7e6", "experience_type": "text", "when_to_use": "在宏观经济数据发布后需要快速调整投资组合或交易策略的场景,尤其是涉及美联储货币政策预期变化的情况。", "content": "根据7月非农就业数据的大幅下修及核心PCE物价指数的表现,可以看到劳动力市场疲软可能显著提升美联储降息的概率。利用CME利率期货工具实时跟踪市场对未来利率决议的定价,并结合高频指标(如SHIBOR、DR007)判断流动性环境,能够为短期债券配置和货币市场操作提供决策支持。例如,在美元指数因降息预期升温而承压时,可考虑增加非美资产敞口或降低美元计价资产比例。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:51:54", "modified_time": "2025-08-11 22:51:54", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6e90c6f55f534d89a7bf17650e4a63bc", "experience_type": "text", "when_to_use": "在新兴市场与发达市场的跨境投资决策中,特别是在面对关税壁垒升级导致的资本外流压力时。", "content": "从本次报告中可以看出,新兴市场国家(如印度、越南)受美国关税政策影响较大,可能导致其出口竞争力下降并引发资本外逃。在这种情况下,应优先选择基本面稳健且政策缓冲空间较大的新兴经济体进行布局,同时警惕高负债率或外汇储备不足的国家可能出现的主权债务危机。对于发达市场,则需关注其内部结构性矛盾(如欧盟成员国间的税率差异)是否加剧了区域内的经济分化,从而优化投资标的筛选。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:51:54", "modified_time": "2025-08-11 22:51:54", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "58e0c89e86934559a2e7185606b85f88", "experience_type": "text", "when_to_use": "在制定长期战略规划或资产配置方案时,特别是在综合考量经济增长周期、通胀预期和政策导向的情况下。", "content": "中共中央政治局会议强调扩大内需、稳住外贸外资基本盘,表明中国正采取积极措施应对复杂外部环境。在此背景下,投资者可将目光投向受益于国内需求复苏的行业(如消费、医疗)以及具有技术优势的战略新兴产业。同时,考虑到中美经贸关系缓和的可能性,适当配置与中国供应链高度相关的海外企业股票或ETF产品也是不错的选择。值得注意的是,由于巴西等资源型国家面临高额关税,其原材料出口受限可能间接利好其他替代供应国,这为多元化投资提供了新思路。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:51:54", "modified_time": "2025-08-11 22:51:54", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6dbaa23ebf5740ebb6acc60bdb4b9bbe", "experience_type": "text", "when_to_use": "在评估制造业和非制造业的景气度,特别是在经济周期中需求疲软或政策干预影响市场预期时使用。", "content": "通过分析PMI指数及其分项数据(如新订单、生产、库存等),结合极端天气、政策变化等因素,识别供需失衡的核心驱动因素。重点关注小型企业景气度对就业和内需的影响,并利用'反内卷'政策作为供给侧调控的切入点,判断价格修复对企业利润预期的潜在改善作用。同时,关注非制造业中建筑业和服务业内部分行业的分化表现,以捕捉长期信心指标。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:52:50", "modified_time": "2025-08-11 22:52:50", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5f690da9ac534bdf83b8fd1e388f69ce", "experience_type": "text", "when_to_use": "在预测资本市场走势时,尤其是在内外部经济环境存在多重变量(如美联储降息预期、地缘政治事件等)的情况下使用。", "content": "基于DDM模型,综合考虑风险偏好修复、通胀修复可持续性以及重大事件(如纪念日庆典)的潜在影响,形成对资本市场的前瞻性判断。特别注意全球贸易摩擦和地缘政治冲突的风险提示,将其纳入情景分析框架,为投资决策提供更全面的支持。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:52:50", "modified_time": "2025-08-11 22:52:50", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c8761bcb94eb416e8e9f823f8cc61b79", "experience_type": "text", "when_to_use": "在制定短期战术操作或中期组合调整策略时,尤其是面对不同资产类别(如股票、固定收益、大宗商品)的轮动机会时使用。", "content": "通过监测PPI同比增速边际改善与量价再平衡的关系,结合产成品库存变动趋势,判断企业是否从去库阶段转向补库阶段。这一信号可作为资产配置的关键触发点,例如在量价再平衡初期增加对顺周期资产的配置,而在价格回升持续性存疑时逐步转向防御性资产。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:52:50", "modified_time": "2025-08-11 22:52:50", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "48ff304f892c445887c177e7f30324ff", "experience_type": "text", "when_to_use": "在进行客户咨询服务时,特别是针对外贸转内需可能带来的冲击及中小企业经营压力增大的背景下使用。", "content": "通过居民边际消费倾向和BCI企业经营状况指数的变化,量化内需修复空间的限制,并评估政策干预对外贸企业和内需企业的双重影响。向客户提供清晰的风险提示和应对建议,例如优化现金流管理、关注政策导向行业的机会等,以帮助其在不确定性较高的环境中保持竞争力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:52:50", "modified_time": "2025-08-11 22:52:50", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "32456cbce3fe4e86ab18a8a088a912ec", "experience_type": "text", "when_to_use": "在评估全球贸易政策变化对经济和市场影响时,特别是在关税调整引发的宏观经济波动中。", "content": "通过分析美国以关税为杠杆实现多维战略目标的案例,可以观察到关税不仅是贸易保护工具,更是一种系统性战略布局。应重点关注关税调整对产业链布局、通胀预期、企业成本传导机制的影响,并结合宏观数据(如就业、通胀)评估其对货币政策的潜在压力。例如,当非农数据大幅下修且通胀压力显现时,需警惕美联储降息预期的快速升温,并据此调整资产配置策略。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:53:45", "modified_time": "2025-08-11 22:53:45", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "83d5227c4a1345e49c1d58ff373e303a", "experience_type": "text", "when_to_use": "在制定跨市场的资产配置策略时,尤其是在美元、黄金和权益类资产之间的动态平衡中。", "content": "当美国经济基本面出现衰退迹象(如非农数据疲软),美元指数可能面临重估,而避险情绪会推高黄金价格。同时,A股市场可能因国内政策调整(如税收新政、反内卷治理)而呈现结构性机会。建议根据经济周期和政策导向,灵活调整大类资产配置:短期增持黄金等避险资产,中期关注A股红利性宽基指数及政策支持板块(如新能源、消费),长期则需跟踪全球产业链重构带来的投资机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:53:45", "modified_time": "2025-08-11 22:53:45", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "fb17e244ede542bfbc778ec6ce2295e7", "experience_type": "text", "when_to_use": "在应对复杂国际环境下的企业经营决策时,特别是涉及进出口业务或供应链管理的企业。", "content": "面对关税政策的频繁调整,企业应采取“多点布局、分散风险”的供应链策略。例如,针对美国对特定国家实施的差别化关税政策,企业可通过强化原产地规则审查、优化生产布局(如向低关税地区转移产能)来降低关税冲击。此外,还需密切关注政策窗口期(如谈判展期)和行业扶持政策,适时调整定价策略和采购计划,以缓解成本上升压力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:53:45", "modified_time": "2025-08-11 22:53:45", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5adf6a08e7ec4084a0f705e694f62a23", "experience_type": "text", "when_to_use": "在进行货币政策预期管理和利率敏感型资产的投资决策时,特别是在美联储政策转向的关键节点。", "content": "从本次非农数据发布后市场反应来看,就业数据的边际变化对美联储政策预期具有显著影响。建议构建基于高频数据(如初请失业金人数、JOLTs职位空缺)的监测体系,提前捕捉劳动力市场信号。同时,结合通胀数据(如核心PCE)和白宫政治压力因素,综合判断美联储降息时间和力度。对于利率敏感型资产(如债券、房地产),应在降息预期升温时逐步加仓,而在不确定性较高时保持谨慎。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:53:45", "modified_time": "2025-08-11 22:53:45", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c347ecfeb99442aaae2d85f7b7875bdb", "experience_type": "text", "when_to_use": "在评估政府政策对宏观经济及市场的影响时,特别是涉及财政支出和补贴类政策的分析场景。", "content": "通过分析政策信号意义、资金来源及分配方式,结合其对居民部门收入与消费的直接与间接影响(如乘数效应),可以更准确地预测政策对经济循环的推动作用。此外,考虑政策区域差异性(如中西部与东部地区)及其对不同收入群体的激励效应,有助于细化政策效果评估。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:54:31", "modified_time": "2025-08-11 22:54:31", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b2c5609a5a7842c5a10d5305a3ec4c52", "experience_type": "text", "when_to_use": "在解决大规模公共投资或补贴计划的资金来源问题时,特别是在需要平衡财政预算和优化资源配置的场景。", "content": "采用“国资-财政-社保”联动改革框架,通过加大国有资产上缴财政力度,专项用于社会保障体系建设,是一种可持续的资金解决方案。同时,顺应人口流动趋势和需求结构升级,将资金优先投向人口流入区域和发展型消费领域,可提高资金使用效率。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:54:31", "modified_time": "2025-08-11 22:54:31", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "808a00a8fbbe400fbe742968be7516b8", "experience_type": "text", "when_to_use": "在制定综合性的长期战略规划时,尤其是在涉及人口结构变化、消费升级和区域发展等多维度因素的场景。", "content": "从四个层次推进“投资于人”策略:1)顺应人口流动规律,加强基础设施建设;2)适应需求结构升级,向发展型消费领域转型;3)根据人口老龄化和少子化趋势调整资源分配;4)促进人口增长和生育率提升。这种系统性方法能够为长期经济和社会发展目标提供清晰路径。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:54:31", "modified_time": "2025-08-11 22:54:31", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e876d3c76b5447d58b866d25df0e9c9e", "experience_type": "text", "when_to_use": "在评估政策实施的潜在风险及应对措施时,特别是在政策可能引发企业行为变化或市场反应的场景。", "content": "针对政策可能带来的负面影响(如职场歧视问题),建议采取正向激励与负向监督相结合的方式。例如,对企业落实育儿假期政策的行为进行监察监督,同时给予表现良好的企业适当补贴,以缓解政策执行阻力并增强企业参与积极性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:54:31", "modified_time": "2025-08-11 22:54:31", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "35768f44d85c441eb547ed52e1e8acd2", "experience_type": "text", "when_to_use": "在分析美联储FOMC会议决策及其对市场潜在影响时,特别是在利率维持不变的情况下评估未来政策路径的不确定性。", "content": "通过跟踪FOMC声明中的措辞变化(如经济增长表述从“稳健”转为“放缓”)以及票委投票行为,识别货币政策方向的潜在转变。特别关注理事会内部的分歧(如鲍曼和沃勒的反对票),这可能预示着未来政策立场的调整。同时,结合经济数据(如核心PCE、失业率)判断降息或加息的可能性,并将其与市场预期进行对比,以评估市场反应的潜在偏差。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:55:30", "modified_time": "2025-08-11 22:55:30", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d3322b17cae148e1a9a141742ca0e303", "experience_type": "text", "when_to_use": "在评估关税政策对通胀和经济增长的影响时,尤其是在短期内观察到商品和服务价格波动的情况下。", "content": "利用GDP分项数据(如净进口的变化)和通胀指标(如PCE、CPI)分析关税对经济的直接和间接影响。例如,进口减少可能短期支撑GDP增长,但可能导致商品通胀上升。此外,关注供应链调整(如库存消耗和回补)对中期经济活动的影响,帮助预测未来几个季度的通胀趋势和经济增速。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:55:30", "modified_time": "2025-08-11 22:55:30", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "2dd0192dadb94f888bff166bd03434c2", "experience_type": "text", "when_to_use": "在制定基于经济数据的投资策略时,特别是在关键宏观经济数据发布前后(如非农就业、核心PCE)。", "content": "强调数据驱动的决策方法,优先关注能够直接影响美联储政策的关键指标(如核心PCE和失业率)。结合历史数据和当前经济背景,评估数据偏离预期的可能性及其对市场的潜在冲击。同时,考虑数据间的相互关系(如劳动力市场供需两端的变化对非农数据指导意义的削弱),以优化投资组合的风险敞口。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:55:30", "modified_time": "2025-08-11 22:55:30", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "759eec60adb948068802b858f9b33191", "experience_type": "text", "when_to_use": "在跨资产类别配置中评估经济周期和政策环境对不同资产表现的影响时,尤其是在经济增速放缓且通胀不确定的环境中。", "content": "根据经济周期阶段和政策预期调整资产配置策略。例如,在经济增长放缓但通胀压力上升的环境下,倾向于降低对利率敏感资产(如长期债券)的配置,增加对防御性资产(如黄金或抗通胀债券)的敞口。同时,关注政策不确定性对市场波动性的影响,适时调整风险预算以应对潜在的市场动荡。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:55:30", "modified_time": "2025-08-11 22:55:30", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "74d09f0586c04314b24b61bcf09bed9f", "experience_type": "text", "when_to_use": "在评估美国货币政策路径及其对市场的影响时,特别是在美联储会议后和关键经济数据发布后的短期市场分析中。", "content": "通过结合CME FedWatch工具的利率概率预期与高频就业数据(如初请失业金人数、非农就业数据)的变化,动态调整对美联储政策转向的预测。例如,当非农就业数据显著低于预期且前期数据被大幅下修时,应重新评估降息的可能性,并据此调整资产配置策略,优先考虑受益于降息周期的资产类别(如黄金和新兴市场股票)。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:56:32", "modified_time": "2025-08-11 22:56:32", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a36b5864da964d0ca266ac8a05057685", "experience_type": "text", "when_to_use": "在分析劳动力市场趋势以判断经济基本面健康状况时,特别是在高波动性或经济衰退担忧加剧的背景下。", "content": "综合分析劳动参与率、失业率、平均每周工时和时薪环比变化等多维度数据,识别劳动力市场的潜在疲软信号。例如,劳动参与率下降叠加失业率上升可能表明劳动力市场需求走弱,而平均工时和时薪的增长则可能反映企业为应对劳动力短缺采取的短期措施。这种分析方法有助于提前预警经济下行风险,并为投资组合调整提供依据。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:56:32", "modified_time": "2025-08-11 22:56:32", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "449bb3fa035445e0a40273e2ee2c82d7", "experience_type": "text", "when_to_use": "在跨资产类别配置中,特别是当美元指数、美债收益率和大宗商品价格出现显著联动时。", "content": "观察美元指数与美债收益率的走势关系,结合黄金、原油等大宗商品的表现,捕捉市场情绪变化。例如,当美元指数因美联储鹰派表态反弹但随后因经济数据疲软回落时,可预期黄金现货价格将获得支撑,同时原油价格可能因供需基本面改善而反弹。这种跨资产类别的联动分析能够帮助优化战术资产配置策略,尤其是在市场不确定性较高的时期。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:56:32", "modified_time": "2025-08-11 22:56:32", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f5926738dc654132af9a4378a6356983", "experience_type": "text", "when_to_use": "在制定长期战略资产配置计划时,特别是在全球经济周期转折点或地缘政治风险加剧的情况下。", "content": "利用经济政策不确定性指数(EPU)与主要经济体的失业率、CPI等宏观指标,评估全球市场的系统性风险水平。例如,当EPU维持低位但失业率上升且CPI小幅回升时,表明经济复苏可能面临阻力,此时应增加防御性资产(如黄金和固定收益产品)的配置比例,同时减少对高贝塔资产(如科技股)的敞口。这种方法能够在不同经济周期中保持投资组合的稳健性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:56:32", "modified_time": "2025-08-11 22:56:32", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5eb26a2fc52146d78e72141604fee400", "experience_type": "text", "when_to_use": "在评估国际贸易政策(如关税调整)对全球市场和特定国家经济的潜在影响时,尤其是涉及主要经济体之间的贸易摩擦或谈判。", "content": "通过分析关税税率的变化及其分类分档逻辑,识别其对不同经济体的差异化影响。例如,美国“对等关税2.0”对顺差经济体设定最低税率,而对逆差经济体提高税率,这种策略可帮助预测未来贸易流向和供应链调整方向。此外,关注小额包裹免税政策取消和转运商品惩罚性关税的影响,有助于评估跨境贸易成本上升对企业和消费者的具体冲击。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:57:26", "modified_time": "2025-08-11 22:57:26", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "fbe7abbf1ff446d0a75c15730d78d5ad", "experience_type": "text", "when_to_use": "在研究宏观经济变量(如通胀、财政收入)与贸易政策之间的关系时,特别是在高关税环境下预测价格传导效应及政府收入增长潜力。", "content": "利用历史数据和当前政策变化,建立关税收入与进口规模的相关性模型。例如,本案例中通过观察美国实际平均关税税率从2.2%升至8.7%,结合进口规模波动,推断出关税收入显著增加的趋势。同时,需注意‘抢进口’现象对短期物价的缓冲作用,但长期来看新增关税成本将逐步向消费端传导,从而影响整体通胀水平。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:57:26", "modified_time": "2025-08-11 22:57:26", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "4d449ee657eb4029aaedf2061c103409", "experience_type": "text", "when_to_use": "在为跨国企业制定应对复杂国际贸易环境的战略规划时,特别是当面临供应链重组压力或需要规避高额关税风险时。", "content": "通过分析‘转运税’政策对企业合规成本的影响,建议企业投资建设精细化的成分追溯系统,并重新评估海外生产基地布局。例如,传统转口贸易港可能因政策限制失去避税功能,但地理位置和成本优势仍使其具备转型为区域性生产中心的机会。因此,企业应优先考虑在低关税地区设立实质性生产能力,以降低运营风险并提升竞争力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:57:26", "modified_time": "2025-08-11 22:57:26", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3a71f3a20f194805b79bbac39afe14e8", "experience_type": "text", "when_to_use": "在评估地缘政治风险对全球资产价格的短期影响时,尤其是在涉及主要经济体(如美国、中国、俄罗斯)之间的贸易政策和关税威胁的情况下。", "content": "通过分析地缘政治事件(例如美国对俄罗斯的二级关税威胁)对市场情绪、能源价格及供应链中断的潜在影响,可以预测相关资产类别的波动性变化。优先关注关键时间节点(如8月8日的最后通牒期限),并结合历史数据评估类似事件的影响路径。同时,综合考虑多边博弈(如中印合作反制)的可能性以调整风险敞口。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:58:36", "modified_time": "2025-08-11 22:58:36", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3199a25e5b1543ffbe73f2ec3c8caa2c", "experience_type": "text", "when_to_use": "在设计针对新兴市场的投资策略时,特别是在高波动性和政策不确定性较高的环境下(例如拉美或东欧国家面临美国关税升级的情况)。", "content": "利用分层关税框架(如10%-41%的四档税率)识别不同国家的风险等级,并将这些信息与宏观经济指标(如外汇储备、贸易逆差)相结合,判断哪些市场可能因外部压力而出现系统性风险。此外,密切关注当地货币贬值趋势及其对美元计价债务偿还能力的影响,从而优化资产配置。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:58:36", "modified_time": "2025-08-11 22:58:36", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ad65d243656641d7957471e89357d6d4", "experience_type": "text", "when_to_use": "在评估国际贸易政策(如关税)对宏观经济和特定行业的影响时,特别是在全球供应链重组或地缘政治风险加剧的背景下。", "content": "分析关税政策时,需结合宏观数据(如GDP、CPI、PMI等)与行业微观数据(如库存、供需关系、价格波动),并关注政策实施的时间节点和市场预期的变化。关税可能导致输入型通胀压力上升,同时对制造业和贸易依赖型经济体产生显著负面影响。此外,在资产类别层面(如铜等大宗商品),需特别注意囤积行为和现货市场的供需失衡如何影响价格趋势。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:59:33", "modified_time": "2025-08-11 22:59:33", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "61a25393e2bb4f98a6103a52293c033c", "experience_type": "text", "when_to_use": "在制定跨周期投资策略时,特别是在经济增速放缓或面临外部冲击(如关税、地缘冲突)的情况下。", "content": "通过分析货币政策(如降息、降准)与财政政策的协同作用,评估其对经济增长的支撑效果。例如,在面对外部关税压力时,国内宽松货币政策可能成为稳定经济的重要工具。但需警惕汇率波动对外资流动的影响,并结合人民币汇率的中长期波动区间(如7.35作为下限)来判断政策空间。同时,关注社融和信贷数据的增长趋势,以衡量政策传导的有效性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:59:33", "modified_time": "2025-08-11 22:59:33", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7844180c1f254e8eabb094ca5cbae82b", "experience_type": "text", "when_to_use": "在进行大宗商品(如铜)的价格预测和交易策略设计时,特别是在供需基本面受到政策干预或市场情绪剧烈波动的情况下。", "content": "大宗商品价格分析应结合技术面与基本面:从基本面上看,需关注关税政策对现货库存、跨境流动和实际需求的影响;从技术面上看,需识别价格的震荡区间和方向性选择信号。例如,当铜价处于区间震荡且上方压力较强时,需警惕市场情绪转向导致的大幅波动。此外,洋山铜溢价和沪伦比等指标可作为内需强弱的重要参考,帮助判断价格走势。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:59:33", "modified_time": "2025-08-11 22:59:33", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8e0fc00ae1bb44bcb6188b0fb3b28f84", "experience_type": "text", "when_to_use": "在进行多资产配置和风险管理时,尤其是在高波动期或危机条件下。", "content": "在高波动环境中,需动态调整资产配置权重,优先考虑防御性资产(如固定收益产品)和避险资产(如黄金)。同时,关注美元指数与大宗商品价格的负相关性,以及人民币汇率对国内资产价格的溢出效应。对于股票和商品等风险资产,需结合技术分析和基本面分析,设置明确的止损和止盈点位,以应对潜在的市场转向风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 22:59:33", "modified_time": "2025-08-11 22:59:33", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "840c7f3d1b654b76b3cc10c5f1835a0f", "experience_type": "text", "when_to_use": "在评估宏观经济环境对资产价格和投资策略的影响时,特别是在需求疲软和政策调整的背景下。", "content": "通过分析高频经济数据(如PMI、BDI、CPI等)与市场情绪的关系,识别供需动态变化中的潜在机会或风险。例如,当制造业PMI下滑且新订单指数低于50%时,表明需求端压力加大,应关注防御性资产配置;同时,结合政策信号(如专项债发行提速),捕捉财政刺激可能带来的基建相关资产的机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:00:27", "modified_time": "2025-08-11 23:00:27", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1c34cafcd7454613963b37dd6ff2ad47", "experience_type": "text", "when_to_use": "在制定跨资产类别投资决策时,尤其是在地缘政治紧张局势升级和贸易摩擦加剧的情况下。", "content": "利用原油、金属等大宗商品的价格波动作为领先指标,判断全球供应链扰动对通胀预期及企业成本的影响。例如,当原油价格上涨叠加关税提升时,需警惕输入型通胀压力,并优先考虑抗通胀资产(如能源股或通胀挂钩债券)。此外,通过对精炼铜等特定商品的豁免政策解读,可以预测短期供需失衡造成的价格下行风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:00:27", "modified_time": "2025-08-11 23:00:27", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "496f2df34faa4f7a815f05138e0c6461", "experience_type": "text", "when_to_use": "在进行固定收益市场分析并优化债券组合配置时,特别是在税收政策变动和流动性管理方面。", "content": "密切关注国债收益率曲线形态及其驱动因素(如货币政策预期、财政发行政策)。例如,在恢复征收新发债券利息收入增值税后,短期内可能会出现比价效应导致资金流向信用债或其他免税产品,但中长期来看,经济基本面仍是决定长债收益率的核心变量。因此,建议根据降息降准预期灵活调整久期策略,同时注意规避低评级信用债的流动性风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:00:27", "modified_time": "2025-08-11 23:00:27", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "fbf244bb068245e6b083f37a6cc23b18", "experience_type": "text", "when_to_use": "在构建基于宏观周期视角的多资产投资框架时,特别是在不同经济周期阶段下把握板块轮动规律。", "content": "结合GDP分项数据(消费、投资、净出口)与工业生产高频指标,判断当前经济所处的周期位置及主要驱动力。例如,当消费增长放缓、库存去化未完成且外需承压时,表明经济处于放缓阶段,此时可适当降低顺周期资产权重,增加逆周期资产(如公用事业、必需消费品)的配置比例。同时,跟踪花旗经济意外指数等前瞻性指标,及时修正预期差带来的交易偏差。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:00:27", "modified_time": "2025-08-11 23:00:27", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "2bf4f4f7c1cc486aa779e2062f878798", "experience_type": "text", "when_to_use": "在宏观经济数据发布后,进行市场风险偏好和资产配置调整的决策时使用。", "content": "当关键宏观经济数据(如非农就业、GDP增长率或核心PCE)出现显著偏离预期的情况时,应快速评估其对市场情绪、央行政策路径以及资产价格的影响。例如,美国7月非农就业数据大幅低于预期,叠加前值下修,直接引发市场对经济衰退的担忧,并推动美联储降息预期升温。在此情况下,建议优先降低风险资产敞口(如股票),增加避险资产(如贵金属)配置,同时关注美元指数波动对全球资本流动的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:01:33", "modified_time": "2025-08-11 23:01:33", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d9c8e0cd35144b599f1bd334cdbdd1c9", "experience_type": "text", "when_to_use": "在国际贸易谈判与关税政策变化背景下,制定跨境投资及商品市场策略时使用。", "content": "面对中美贸易谈判进展或美国关税政策调整等事件,需结合地缘政治动态、行业影响和供应链重组可能性进行综合分析。例如,美国宣布对特定国家征收高额关税的同时延长部分经济体的豁免期限,这表明短期不确定性虽有所缓解,但长期博弈仍将持续。因此,在涉及相关国家出口导向型产业(如铜材、能源产品)的投资中,应谨慎评估潜在需求冲击;对于大宗商品,则需特别关注受影响品种的价格弹性及替代效应。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:01:33", "modified_time": "2025-08-11 23:01:33", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "03860d7ee0a74e4fb4e84e5899e2bdc9", "experience_type": "text", "when_to_use": "在国内经济增长放缓且政策支持力度加大的环境下,优化股债配置比例时使用。", "content": "当国内PMI等先行指标显示经济活动疲软,而政府出台育儿补贴、减税或其他刺激措施以提振内需时,可以采取‘股优于债’的中期策略。具体而言,若增量政策力度较强且落地预期明确,可逐步提升权益类资产权重,尤其是受益于消费复苏的板块(如消费服务、新能源汽车)。然而,鉴于外部环境可能限制货币政策宽松空间,债券端操作宜保持防御性,避免过度追高久期较长的品种。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:01:33", "modified_time": "2025-08-11 23:01:33", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "31ae34bbfbd54d8b8e892b637da6a980", "experience_type": "text", "when_to_use": "在进行宏观经济预测时,特别是在经济数据发布前的前瞻性分析中,用于指导投资组合调整和风险管理。", "content": "通过整合历史数据趋势、近期政策变化及市场动态,构建分项指标的定量预测框架。例如,在预测CPI和PPI时,结合季节性因素、大宗商品价格波动以及供应链状况,采用环比与同比双维度分析方法,确保预测结果能够反映短期波动和长期趋势。此外,需特别关注外部市场动荡对预测的潜在影响,并设置风险缓冲区间。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:02:37", "modified_time": "2025-08-11 23:02:37", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7af216a119f74f11b70b022dc3fe3591", "experience_type": "text", "when_to_use": "在评估经济增长动能时,用于判断工业生产、消费和投资等核心领域的表现是否符合预期,以支持战略资产配置决策。", "content": "综合运用高频数据(如PMI)和低频数据(如固定资产投资)进行交叉验证,识别各领域增长驱动力的变化。例如,通过分析工业增加值的边际变化,结合出口增速和内需复苏节奏,判断经济整体韧性。同时,需考虑不同经济周期阶段的特点,例如在复苏初期更关注消费和出口数据,在成熟期则侧重投资和信贷数据的表现。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:02:37", "modified_time": "2025-08-11 23:02:37", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "447377f85fb24b529a5298fbb37d6f98", "experience_type": "text", "when_to_use": "在制定信贷和流动性策略时,特别是在货币政策转向或金融市场波动加剧的背景下,用于优化资金管理和融资安排。", "content": "密切跟踪社会融资总量和M2增速的月度变化,结合信贷增量数据,评估金融体系流动性的松紧程度及其对实体经济的支持力度。例如,当信贷增量显著低于预期时,可能预示着企业融资需求疲软或银行风险偏好下降,需进一步观察信贷结构(如短期贷款与中长期贷款比例)。此外,应结合海外市场利率环境和国内政策导向,提前布局应对潜在的流动性压力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:02:37", "modified_time": "2025-08-11 23:02:37", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "139f4ed1f7474741b4b1cd6dd41650ed", "experience_type": "text", "when_to_use": "在跨市场资产配置中,特别是涉及新兴市场与发达市场的对比分析时,用于捕捉汇率、贸易顺差和资本流动的关键信号。", "content": "通过分析贸易顺差和进出口增速,结合外汇储备变动情况,评估货币稳定性和国际收支平衡状态。例如,当贸易顺差收窄且出口增速放缓时,可能暗示外部需求减弱或竞争加剧,需警惕本币贬值压力。同时,应关注不同市场间的监管差异和地缘政治风险,灵活调整资产配置权重,以规避系统性风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:02:37", "modified_time": "2025-08-11 23:02:37", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f4ef86d927b84ed18f5c966231ee2081", "experience_type": "text", "when_to_use": "在预测短期信贷需求和评估季初月新增贷款规模时,特别是在信贷需求偏弱、市场处于横盘或低波动期的环境中。", "content": "利用过往信贷投放规律(如季末冲量、季初回落)结合实时市场信号(如转贴现利率接近零的情况)来判断当月新增贷款规模。此外,需关注关键政策变量(如定期存款利率调整对按揭早偿行为的影响),并将这些因素纳入分项预测(如个贷、对公贷款、票据融资等)。对于经济周期下行或信贷需求疲软的时期,尤其需要细化分析各贷款分项的增减情况。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:03:36", "modified_time": "2025-08-11 23:03:36", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f5a662f81d9c433d9355b9dfc68b5045", "experience_type": "text", "when_to_use": "在分析货币供应量(M1/M2)增速变化及其对市场流动性影响时,尤其是在新统计口径引入后需要进行跨周期比较的场景中。", "content": "通过对比新旧口径数据的历史走势,识别统计口径调整带来的平滑效应,并结合宏观经济活性(如股市回暖、同比低基数)和政策导向(如财政支出力度平稳)来预测M1/M2增速的变化趋势。要特别注意新口径下个人活期存款和非银支付机构备付金的纳入对M1增速稳定性的影响,并将其作为衡量市场流动性和经济活跃度的重要指标。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:03:36", "modified_time": "2025-08-11 23:03:36", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5e7a9163d9804f2eb365a6d48116c1c2", "experience_type": "text", "when_to_use": "在评估社融增速阶段性见顶的可能性及其对未来市场预期的影响时,尤其是在政府债券发行节奏错位或经济复苏初期的背景下。", "content": "基于历史社融分项数据(如人民币信贷、表外融资、政府债券、企业债券等)的年度和月度变化,结合当前政策导向(如地方债务控制、基建投资空间)和市场环境(如债券收益率、PMI回落)来预测社融增量及增速。同时,需考虑政府债券发行节奏对社融增速的季节性扰动,并据此推测未来几个月社融增速的回落幅度和时间节点。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:03:36", "modified_time": "2025-08-11 23:03:36", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "af646aca4bb5446289977d7ded15ecce", "experience_type": "text", "when_to_use": "在制定债券市场投资策略时,特别是在债市利空较少、经济复苏动能偏弱且市场情绪偏向避险的环境中。", "content": "综合分析宏观经济指标(如PMI、物价增长)、政策动态(如反内卷降温)以及资金流向(如理财规模季节性增长)来判断债市趋势。建议采取做多策略,优先配置长久期资产(如城投资本债、永续债)和高收益品种(如点心债、美元债)。同时,需警惕外部风险(如中美贸易摩擦升级)和内部政策调整(如监管新规)对市场的潜在冲击。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:03:36", "modified_time": "2025-08-11 23:03:36", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6bfa47477d0949d196bbb782dfdb099a", "experience_type": "text", "when_to_use": "在评估美国经济的短期增长潜力时,特别是在面对关税政策和高利率环境的影响下,需要分析GDP数据中的结构性因素。", "content": "通过分解GDP数据(如消费、投资、进出口等分项)来识别经济增长的驱动因素和潜在风险。特别关注贸易政策对进口和库存波动的短期影响,以及这些波动如何掩盖内需疲软和投资放缓等长期结构性问题。例如,特朗普关税政策导致企业调整库存和进口策略,形成异常的季度波动,而扣除这些扰动后的真实经济增速可能远低于表面数据。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:04:42", "modified_time": "2025-08-11 23:04:42", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0b2dedde02404a4790c9b091e57895c2", "experience_type": "text", "when_to_use": "在预测未来几个季度的经济走势时,尤其是在货币政策和财政政策乏力的情况下,需要评估需求端的透支效应和债务置换压力。", "content": "结合居民消费能力(如实际收入、储蓄率、消费者信心指数)和企业债务到期情况,判断需求端的可持续性。例如,2020-2022年低利率时期发行的企业债逐步到期,而当前高利率环境下企业的融资成本显著上升,这将抑制资本开支意愿。同时,居民消费因超额储蓄耗尽、薪资增长放缓和债务拖欠率上升而面临下行压力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:04:42", "modified_time": "2025-08-11 23:04:42", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e6b559d71c554b66a7c78e7c11db1136", "experience_type": "text", "when_to_use": "在分析特定行业(如制造业或房地产)的投资前景时,需要考虑政策变化和利率环境对行业周期的影响。", "content": "评估政策更替对行业投资趋势的影响,例如拜登政府的绿色新政和《芯片法案》吸引了大量制造业投资,但特朗普上台后取消相关补贴导致投资不确定性上升。此外,高利率环境持续压制房地产市场的需求和投资意愿,即使小幅降息也难以显著刺激所谓的“利率敏感”行业。因此,政策稳定性和利率水平是判断行业投资前景的关键变量。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:04:42", "modified_time": "2025-08-11 23:04:42", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "33027ab8add34f95bcd1f7796b17e326", "experience_type": "text", "when_to_use": "在进行宏观经济风险提示时,特别是面对地缘政治和贸易政策的不确定性,需要综合评估外部冲击对经济的潜在影响。", "content": "明确列出主要风险因素及其可能后果,例如关税扩散超预期可能导致全球供应链风险上升,进而拖累贸易和经济增长;地缘政治风险升温可能引发避险情绪,放大资产价格波动。这种系统性风险评估应基于历史案例和当前经济环境进行情景化分析,为投资者提供清晰的风险预警。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:04:42", "modified_time": "2025-08-11 23:04:42", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "bee54180a7b44045bf2f83db302136c8", "experience_type": "text", "when_to_use": "在评估宏观经济数据的修正对市场预期和政策决策的影响时,特别是在就业数据大幅下修的情况下。", "content": "宏观经济数据(如非农就业数据)的修正可能显著影响市场情绪、货币政策预期以及资产价格。当数据被系统性高估或低估时,应结合季节性调整因子、历史趋势和延迟问卷反馈等因素进行综合分析。此外,需关注数据修订对美联储政策路径的潜在影响,例如降息预期的变化。通过CME FedWatch等工具跟踪市场对政策利率变动的概率预测,并结合高频经济指标(如通胀、失业金申请人数等)进一步验证政策预期的合理性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:05:47", "modified_time": "2025-08-11 23:05:47", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a97bb0d9e774435480f5ad01125685e0", "experience_type": "text", "when_to_use": "在分析劳动力市场疲软但失业率维持低位的现象时,尤其是在劳动参与率下降和移民政策变化的背景下。", "content": "当劳动力市场出现新增就业放缓但失业率未显著上升时,应深入分析劳动力人口总量的变化,特别是劳动参与率和移民政策的影响。例如,美国劳动人口减少可能掩盖了实际就业市场的脆弱性,因此需要区分结构性因素(如移民驱逐政策)和周期性因素(如经济下行)。建议结合家庭调查(CPS)数据、外国出生劳动人口变化以及广义失业率等多维度指标,全面评估就业市场的健康状况。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:05:47", "modified_time": "2025-08-11 23:05:47", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "4dba5e2412d347128c3b3ee93be34488", "experience_type": "text", "when_to_use": "在评估特定行业或部门就业趋势及其对整体经济的潜在影响时,特别是在商品生产和服务行业的分化表现中。", "content": "分析行业层面的就业数据可以帮助识别经济周期中的领先或滞后信号。例如,商品生产行业的持续走弱可能预示着上游需求放缓,而服务业的修复则可能反映下游消费韧性。建议按行业分解新增就业数据,并结合薪资增速、职位空缺率和裁员人数等指标,判断各行业的用工需求强度及未来趋势。此外,关注政府就业数据的异常波动,因其可能对整体就业数据产生短期扰动。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:05:47", "modified_time": "2025-08-11 23:05:47", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "53a6ba05d4bc4d4a9baf18ff0caa220b", "experience_type": "text", "when_to_use": "在利用就业数据指导投资组合调整和市场时机选择时,特别是在降息预期升温的环境下。", "content": "就业数据不及预期通常会引发避险情绪,导致风险资产下跌、债券收益率下降和美元走弱。此时,投资者可以考虑增加防御性资产配置(如国债或黄金),并根据降息预期调整久期策略。同时,利用CME FedWatch工具实时监控市场对美联储政策利率路径的定价,并结合其他经济指标(如通胀数据)评估政策转向的可能性。在降息周期初期,成长型股票和高收益债券可能受益于宽松的流动性环境。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:05:47", "modified_time": "2025-08-11 23:05:47", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "eef045f62fa9424bbc7932075e70286f", "experience_type": "text", "when_to_use": "在评估宏观经济底部是否已经出现时,特别是在房地产和消费为主要驱动因素的经济体中。", "content": "通过分析房地产销售、新开工面积、施工面积、房价以及社零增速等多维度数据,识别经济触底信号。例如,当销售增速回升、施工面积增速稳定且房价下行速度放缓时,可判断经济最低迷时期已过,但需警惕回升路径的曲折性。此外,消费类政策(如‘以旧换新’)的持续发力是确认消费触底的重要指标。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:06:42", "modified_time": "2025-08-11 23:06:42", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c6229f551ed34a9e9a0cf41b9cee9247", "experience_type": "text", "when_to_use": "在制定反内卷政策效果评估框架时,特别是在商品市场供过于求或产能过剩的情况下。", "content": "反内卷政策的有效性取决于需求端的响应。通过强制规定最低价格或淘汰落后产能等方式调整供给曲线的效果有限,关键在于推动需求曲线右移。居民部门杠杆率的变化是核心观察指标:只有当居民部门从去杠杆转向稳杠杆甚至加杠杆时,政策效果才能显现。因此,政策设计需综合考虑居民部门的长期行为模式,并为政策起效预留足够时间。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:06:42", "modified_time": "2025-08-11 23:06:42", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "678136fdec194083b20e2d0b4fa587aa", "experience_type": "text", "when_to_use": "在预测美国经济韧性及其对全球市场影响时,特别是在关税协议与美联储独立性扰动背景下。", "content": "分析美国经济数据时需区分表象与实质。尽管消费者信心指数和整体经济意外指数可能显示韧性,但私人部门就业和消费能力的疲弱表明经济仍在下行通道。同时,关税协议推进会短期内提升市场风险偏好,但其长期影响需结合具体国家的对等关税税率分布进行评估。此外,美联储独立性问题可能引发阶段性市场波动,但不会改变基本面趋势。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:06:42", "modified_time": "2025-08-11 23:06:42", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f6f93dfb4bb44e5383c974741a772282", "experience_type": "text", "when_to_use": "在大类资产配置决策中,尤其是在股债汇黄金联动分析时。", "content": "股市上涨动力主要来源于风险溢价抬升而非盈利改善,因此需警惕市场抢跑后可能出现的回落风险;债市方面,即使经济底部已现,需求端疲弱仍支持利率下行空间,特别是央行呵护态度明确时;人民币汇率受美元指数影响较大,在美元震荡偏弱环境下呈现震荡偏强走势;黄金则因美元走弱具备上行动力,但短期可能处于区间震荡积蓄力量阶段。综合来看,跨资产相关性分析需结合宏观环境动态调整配置权重。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:06:42", "modified_time": "2025-08-11 23:06:42", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a1ed61674f814623b264cfc22ae43870", "experience_type": "text", "when_to_use": "在宏观经济数据发布后评估市场情绪及未来政策预期时使用,特别是在PMI等先行指标低于预期的情况下。", "content": "当PMI指数低于预期且细分项显示供需矛盾加大时,需重点关注价格分项的异常波动(如原材料购进价格上升),这可能预示中下游企业成本压力加剧,进而影响利润空间。此时应结合政策导向(如政治局会议表述)判断是否存在进一步的政策指引或干预,以缓解滞胀风险。此外,可将此类信号作为短期债券市场利多因素的重要参考,同时警惕股票市场的避险情绪升温。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:07:38", "modified_time": "2025-08-11 23:07:38", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "68b3d8944b484384a6da9f01f2e58587", "experience_type": "text", "when_to_use": "在分析固定收益市场走势时,尤其是在关键经济会议结束后和宏观数据发布后的震荡行情中。", "content": "固收市场对政策预期的变化高度敏感。若重大会议未超预期,则前期压制债市的因素减弱,叠加低于预期的经济数据(如PMI),往往会导致收益率下行。然而,在当前点位接近关键技术支撑位(如10年国债收益率1.7%附近)时,市场突破关键点位仍会犹豫,预计短期内维持宽幅震荡格局。建议投资者根据利多/利空落地情况调整久期策略,并关注后续增量信息的出现。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:07:38", "modified_time": "2025-08-11 23:07:38", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d6b6405ddc3b4df19969b39e66ced5df", "experience_type": "text", "when_to_use": "在海外资产配置或跨境投资决策中,当面临美联储货币政策转向、非农就业数据大幅不及预期以及地缘贸易摩擦升级等多重不确定性因素时。", "content": "美国劳动力市场数据显著恶化(如非农就业人数远低于预期)通常会引发市场对经济增长前景的担忧,从而推动避险资产(如黄金、美债)上涨,同时压制风险资产表现。与此同时,地缘贸易保护措施(如加征关税)可能进一步放大避险情绪。在此背景下,建议增加防御性资产配置比例,例如延长美元计价债券久期,同时审慎对待新兴市场资产敞口,因人民币贬值压力可能加大。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:07:38", "modified_time": "2025-08-11 23:07:38", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0c9bd41b5333473bba06d1046fcc93ae", "experience_type": "text", "when_to_use": "在评估央行货币政策(如美联储降息或加息)的未来路径时,特别是在高不确定性环境下,例如贸易谈判进展或通胀数据波动较大的情况下。", "content": "通过分析央行声明和主席发布会中的措辞微调(如对通胀、就业和不确定性的描述),结合近期经济数据(如CPI、就业报告)和外部政策变化(如关税协议),可以更准确地预测货币政策的潜在转向。例如,美联储对‘关税影响’的判断为一次性而非持续性,以及对就业市场下行风险的关注,均提供了降息可能性增加的线索。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:08:41", "modified_time": "2025-08-11 23:08:41", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "77e5a21ad55447e79da7cacb395a0f54", "experience_type": "text", "when_to_use": "在跨市场环境中评估资产类别表现和投资组合调整,尤其是在不同经济周期阶段(如衰退风险上升或复苏初期)或板块轮动显著时。", "content": "结合宏观经济展望(如降息预期、通胀趋势)与特定市场的动态(如贸易协议达成后关税不确定性的下降),可以通过识别关键驱动因素(如利率敏感型资产或防御性板块)来优化投资策略。例如,在降息预期增强的情况下,固定收益资产和高股息股票可能表现优于其他资产类别。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:08:41", "modified_time": "2025-08-11 23:08:41", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "4695435fccd14658b28c375dfa848386", "experience_type": "text", "when_to_use": "在进行短期战术操作或日内交易时,特别是在市场对宏观事件(如央行会议、经济数据发布)反应剧烈的情况下。", "content": "通过实时跟踪市场对关键事件的即时反应(如美联储声明后的市场波动),结合技术分析和流动性状况,可以捕捉短期套利机会。例如,当美联储未提供明确指引时,市场可能会表现出方向性不明的震荡,此时可利用期权或期货工具对冲风险或进行区间交易。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:08:41", "modified_time": "2025-08-11 23:08:41", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "2b5c3a232eca4a9db623e5aca944e7b6", "experience_type": "text", "when_to_use": "在监管框架复杂或货币因素显著影响投资决策的跨国投资中,例如发达市场与新兴市场之间的资产配置。", "content": "考虑不同市场的监管环境和货币动态(如美元走强对新兴市场资本流动的影响),结合央行政策预期和本地经济数据,可以帮助制定更具适应性的跨境投资策略。例如,美国与中国贸易谈判的进展可能降低新兴市场的汇率风险,从而提升其资产吸引力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:08:41", "modified_time": "2025-08-11 23:08:41", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "53e9d3976dbd4559886590356f80ade9", "experience_type": "text", "when_to_use": "在长期战略规划中,特别是在构建基于经济周期和结构性变化的投资框架时,例如应对特朗普政府政策或全球供应链重塑带来的长期影响。", "content": "通过对长期经济趋势(如关税政策的累积效应、劳动力市场变化)和结构性因素(如技术创新、能源转型)的深入分析,可以设计出能够抵御周期性波动并捕捉长期增长机会的资产配置方案。例如,预计关税影响将在未来几个月逐步显现,因此应提前布局受益于价格稳定的行业。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:08:41", "modified_time": "2025-08-11 23:08:41", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "91ddac75ec344b12bc149c027bc7d7da", "experience_type": "text", "when_to_use": "在评估新兴市场(如东盟国家)的经济增长潜力时,尤其是在面对外部贸易政策变化(例如关税调整、出口限制)的情况下。", "content": "通过分析出口数据的变化及剔除转口贸易因素后的实际表现,可以识别区域内核心产业的竞争力和升级潜力。例如,东盟国家电子和机械产品的出口增长显示出其在全球价值链中的承接能力,即便在外部冲击下仍保持韧性。建议结合区域产业升级政策(如工业4.0计划)评估长期发展潜力,并关注消费市场的扩张趋势作为补充驱动力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:09:45", "modified_time": "2025-08-11 23:09:45", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7220189d8f9e47659213ee47c366c0ef", "experience_type": "text", "when_to_use": "在制定跨区域投资策略时,特别是在考虑中国-东盟自贸区3.0版等多边贸易协定带来的政策红利时。", "content": "利用自贸协定中零关税覆盖率提升、通关便利化措施以及数字经济和绿色经济合作等政策红利,优先布局高潜力行业(如电子产品、新能源设备)。同时,关注区域内中产阶级消费群体的增长趋势,选择与消费升级相关联的领域进行投资,例如医疗健康、通信服务和休闲娱乐行业。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:09:45", "modified_time": "2025-08-11 23:09:45", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ce31d1d0bbe5474da717f3e8e372c3be", "experience_type": "text", "when_to_use": "在设计针对特定国家或地区的宏观经济预测模型时,尤其是需要综合考量短期波动与中长期结构性变化的场景。", "content": "采用分层分析法,将短期驱动因素(如抢出口效应)与中长期支撑点(如内需增长、产业升级)分开建模。短期可重点关注高频数据(如月度出口增速),而中长期则需纳入人口结构、城市化进程和财政刺激计划的影响。此外,动态调整模型权重以反映不同阶段的主要矛盾,例如从外需依赖转向内需驱动的过渡期。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:09:45", "modified_time": "2025-08-11 23:09:45", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "32eef4da3c314e0e9894d7d9ff9521e2", "experience_type": "text", "when_to_use": "在为客户提供资产配置建议时,特别是涉及东南亚市场的多元化投资组合优化。", "content": "根据东盟各国经济发展阶段的不同特点,推荐差异化配置策略:对于越南、马来西亚等制造业升级较快的国家,增加对半导体、电子制造等行业的敞口;对于泰国、印尼等消费潜力较大的市场,则侧重于消费品、服务业相关的标的。同时,密切关注货币政策宽松周期下的利率敏感型资产(如房地产、基础设施建设)的机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:09:45", "modified_time": "2025-08-11 23:09:45", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "870afe4f747e4afa9cd3505da6c321bf", "experience_type": "text", "when_to_use": "在宏观经济政策变动对市场影响的分析中,尤其是在政治局会议或类似高层决策后评估市场走势时。", "content": "通过结合政策内容(如财政支持、反内卷政策表态等)与高频经济数据(如PMI、进出口数据),可以有效判断短期内市场的交易情绪和基本面支撑。例如,当政策利好落地但外部不确定性(如关税谈判、二次制裁风险)仍存时,市场可能进入阶段性调整期,建议关注前期上涨平台或技术支撑位。同时,货币政策预期(如美联储降息概率变化)可作为海外流动性预期的重要补充指标。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:10:52", "modified_time": "2025-08-11 23:10:52", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "51d845e4cf0446bdb3634dd563903ae5", "experience_type": "text", "when_to_use": "在行业轮动策略制定中,特别是在科技成长股与周期性板块之间的配置选择时。", "content": "通过观察行业景气度(如开工率、库存水平)、政策导向(如反内卷治理、产能治理)以及资金流向(如融资买入占比、北向资金流入),可以动态调整行业配置。例如,在政策强调“反内卷”背景下,供给偏紧且有涨价空间的细分化工品种(如磷化工、TDI)可能成为中期布局重点;而科技成长板块(如AI算力、半导体)则受益于政策支持与全球科技创新周期共振,适合短期战术操作。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:10:52", "modified_time": "2025-08-11 23:10:52", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ad1faf90f01241728888634cd72bdee8", "experience_type": "text", "when_to_use": "在跨境投资或资产类别配置中,尤其是涉及发达市场与新兴市场间的资本流动分析时。", "content": "利用美国就业数据、通胀数据及美联储货币政策预期,结合中国出口高频数据与贸易谈判进展,可以评估全球资本流动趋势。例如,当美国非农就业数据大幅下修且通胀压力上升时,市场对美联储降息预期增强,这通常会利好新兴市场资产。然而,若中美关税谈判结果不利或外部制裁风险加剧,则需警惕新兴市场资金外流压力,并适当增加防御性资产(如黄金、美元)配置。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:10:52", "modified_time": "2025-08-11 23:10:52", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8682fb063e234b27b9cd8c3c50378fca", "experience_type": "text", "when_to_use": "在分析宏观经济数据(如PMI)对市场的影响时,特别是在不同经济周期或政策变化的背景下。", "content": "通过分解PMI数据的分项指标(如新订单、生产指数、价格指数等),结合季节性因素和政策导向,评估上游与下游行业的景气度分化。例如,在需求释放完毕且季节性回落明显的时期,需关注上游原材料价格回升对高耗能行业景气度的推动作用,并警惕下游消费品行业的压力。这有助于识别结构性机会和风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:11:53", "modified_time": "2025-08-11 23:11:53", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "fd4441b79d8f49019be8c4a06a1fd655", "experience_type": "text", "when_to_use": "在制定中期投资策略时,特别是针对行业轮动或政策驱动型市场的场景。", "content": "通过分析政策部署(如财政资金下沉、新型政策性金融工具落地)对实物工作量形成的支持作用,判断基建等相关行业的中长期景气度。同时,结合高技术制造业和装备制造业的边际变化,识别政策支持下的优质标的。这种方法特别适用于政策敏感型市场的资产配置决策。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:11:53", "modified_time": "2025-08-11 23:11:53", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "2501f95239634afb87902f97aac97130", "experience_type": "text", "when_to_use": "在评估宏观经济数据(如非农就业、GDP、PMI等)对市场情绪和资产价格的影响时,特别是在经济周期转折点或高波动时期。", "content": "在分析宏观经济指标时,需结合多维度数据进行交叉验证。例如,非农就业数据的意外下修可能引发市场对经济衰退的担忧,但需要进一步拆解细分数据(如供应商交付时间、库存变动等),以判断是需求疲软还是供应链改善所致。此外,应关注市场对数据的即时反应(如美债收益率下行、美元指数波动)以及政策预期的变化(如降息预期升温)。通过结合经济意外指数、景气指标和实际数据偏差,可以更全面地评估经济状况并预测市场走势。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:13:04", "modified_time": "2025-08-11 23:13:04", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0ffd3037fb604ef2adeda0df8dd42fe7", "experience_type": "text", "when_to_use": "在制定投资策略时,需考虑货币政策的潜在变化及其对利率敏感型资产(如债券、成长股)的影响,尤其是在美联储会议后或关键经济数据发布后。", "content": "货币政策分析需聚焦于央行的双重目标(通胀与就业)的实现程度及政策路径分歧。例如,在FOMC会议中,若多数票委倾向于维持限制性利率水平,而少数票委主张降息,则表明内部存在分歧,市场可能会对未来的降息幅度和节奏产生不确定性。此时,投资者应关注联邦基金期货隐含利率路径、SOFR利差等流动性指标,并结合彭博金融条件指数评估市场整体风险偏好。对于投资组合,可适当增加久期敞口或防御性资产配置以对冲潜在的政策风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:13:04", "modified_time": "2025-08-11 23:13:04", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "59f60b6403054917a8d3342fbbc2ed5e", "experience_type": "text", "when_to_use": "在分析国际贸易政策(如关税调整)对市场和经济的影响时,特别是在新兴市场或贸易摩擦加剧的背景下。", "content": "关税政策的分析需从法律框架、谈判动态和经济影响三个层面入手。例如,特朗普政府发布的“对等关税2.0”虽然较1.0版本税率下调,但其背后可能隐藏着更大的谈判压力和短期不确定性。投资者应关注受影响行业的直接冲击(如制造业成本上升)和间接传导效应(如供应链重组)。同时,需警惕法律挑战可能带来的政策反复,以及由此引发的市场波动。建议通过分散化投资降低单一市场的风险敞口,并利用外汇对冲工具管理货币风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:13:04", "modified_time": "2025-08-11 23:13:04", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1fc87072162b4aceb52dab3ef5aea9fa", "experience_type": "text", "when_to_use": "在设计长期战略资产配置方案时,需综合考虑经济增长趋势、通胀预期和政策环境,特别是在经济周期过渡阶段或重大政策变革时期。", "content": "长期资产配置的核心在于识别驱动经济周期的关键变量及其拐点。例如,通过对美国GDP分项数据(如私人国内最终购买PDFP)的深度分析,可以区分外生性因素(如抢进口效应)和内生性增长动力。同时,结合通胀预期(如10年期美债的盈亏平衡通胀率)和期限溢价的变化,可以优化固定收益资产的久期策略。此外,在低增长、高通胀环境下,可适当增加实物资产(如黄金、大宗商品)和另类投资的权重,以增强组合的抗风险能力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:13:04", "modified_time": "2025-08-11 23:13:04", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "12b1d2dea4834ccd97d7ead6c64635f6", "experience_type": "text", "when_to_use": "在宏观经济分析与资产价格预测中,尤其是在需要评估经济增长动能和市场趋势的场景下。", "content": "利用高频扩散指数(如国信高频宏观扩散指数)来监测经济运行状况,并通过分项指标(如房地产、投资、消费领域)的变化,识别各领域的景气度。将这些数据标准化后进行季节性比较,以判断当前经济动能是否稳健。同时,结合均值回归理论,预测关键资产价格(如国债收益率、股票指数)的短期走势。注意利率和股指偏离预测值的情况,可能反映基本面与市场预期之间的偏差。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:14:07", "modified_time": "2025-08-11 23:14:07", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c67937e638444d9fb7bea50166de7bd6", "experience_type": "text", "when_to_use": "在通胀分析(CPI和PPI)中,尤其是需要基于高频价格数据预测月度通胀率的场景下。", "content": "通过高频跟踪食品和非食品价格变化,结合历史均值和当期环比数据,构建拟合模型预测CPI和PPI的月度同比变化。对于食品价格,关注蛋类、蔬菜、肉类等主要分项的价格波动;对于非食品价格,关注黄金、建材、柴油等关键商品的价格趋势。特别注意异常波动的商品类别,它们可能是通胀压力或通缩风险的早期信号。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:14:07", "modified_time": "2025-08-11 23:14:07", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "589dd3a235e7471d8f997c81334c6b7e", "experience_type": "text", "when_to_use": "在行业轮动和资产配置策略中,特别是在不同经济周期阶段选择优先配置资产的场景下。", "content": "根据高频经济指标的表现(如房地产、投资、消费领域的景气度),判断当前经济周期所处阶段。例如,当房地产领域表现优于投资和消费领域时,可考虑增加对房地产相关资产的配置,同时减少对制造业或消费品行业的敞口。此外,结合流通领域生产资料价格的变化,动态调整大宗商品和固定收益资产的权重,以优化组合风险收益比。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:14:07", "modified_time": "2025-08-11 23:14:07", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b0f38214d0b047fab63206742ce66c42", "experience_type": "text", "when_to_use": "在高技术制造业相关的投资分析中,特别是在评估半导体、新能源等行业的景气度和价格趋势时。", "content": "通过高频数据跟踪(如DRAM、晶圆、六氟磷酸锂等关键产品的价格变化)结合扩散指数(如国信周频高技术制造业扩散指数)进行行业景气度判断。重点关注价格变动显著的分项指标,并结合政策动态(如反内卷措施)和前沿动态(如人工智能大会签约项目)验证行业发展趋势,识别投资机会或风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:14:51", "modified_time": "2025-08-11 23:14:51", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "677b2e699a714642a7d9eb6738390d74", "experience_type": "text", "when_to_use": "在中期组合调整中,特别是在高技术制造业相关资产配置时,需要平衡行业轮动与宏观经济周期的关系。", "content": "通过扩散指数A和B的变化趋势,结合宏观经济指标(如M2增速、固定资产投资同比)评估整体经济环境对高技术制造业的支持力度。优先配置景气度上升的子行业(如半导体、新能源),并动态调整持仓比例以应对潜在的经济增速下滑或政策干预风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:14:51", "modified_time": "2025-08-11 23:14:51", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "947c40ef5c6942e9a2060f9ac2f68d3f", "experience_type": "text", "when_to_use": "在分析长期产能过剩对经济的影响时,特别是在技术驱动型行业(如新兴产业、铁路或钢铁)中出现供需失衡的场景。", "content": "当面对长期产能过剩导致的通缩循环时,应采取多维度政策干预来打破负反馈机制。这些措施包括:1)货币政策注入流动性以缓解通缩压力;2)供给侧通过兼并重组提高效率,形成规模经济;3)需求端通过工资增长和劳工权益改善扩大内需;4)开拓新兴市场或通过贸易保护主义缓解国内压力。历史案例表明,完全依赖市场自发调整可能耗时二三十年,而政府干预可以显著缩短这一过程。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:15:58", "modified_time": "2025-08-11 23:15:58", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "4c761aaa9118414792c9290f5026d717", "experience_type": "text", "when_to_use": "在评估不同国家或地区去产能政策的有效性时,尤其是对比行政干预与市场化手段的应用效果。", "content": "去产能政策的效果取决于政策执行的力度和背景环境。行政式干预(如日本70年代的“共同行动”和萧条卡特尔)在短期内能够快速实现目标,但可能面临国际批评和国内反垄断法规的限制;市场化手段(如日本90年代的企业合并重组和僵尸企业出清)虽然更符合自由市场经济原则,但往往进展缓慢且伴随长期经济停滞。因此,在选择政策工具时,应结合外部环境(如全球化程度、监管框架)和内部条件(如产业集中度、金融体系稳定性)进行权衡。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:15:58", "modified_time": "2025-08-11 23:15:58", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1f4e975c218c467fbd2e4d86e14567a5", "experience_type": "text", "when_to_use": "在制定针对新兴产业的产能调控政策时,尤其是涉及技术创新和市场竞争秩序的领域。", "content": "新兴产业在经历产能过剩后,往往会带来市场集中度的提升,甚至形成垄断组织。因此,在治理新兴产业产能过剩时,需同时关注去产能和反垄断两个方面:一方面推动低效企业退出市场,营造公平竞争环境;另一方面通过立法和监管防止市场垄断行为的出现。例如,美国在19世纪后期通过《州际商业法》和《谢尔曼反托拉斯法》,建立了规范竞争秩序的法律框架,这种方法可以在现代新兴行业中借鉴。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:15:58", "modified_time": "2025-08-11 23:15:58", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "48dba0cb9e5945249df7514bf0fc1d3f", "experience_type": "text", "when_to_use": "在市场波动较大、投资者情绪不稳定的情况下,需要对短期市场调整进行解读和预测时。", "content": "通过分析股债跷跷板效应,结合近期重大事件(如中美经贸谈判结果、国内政策导向)评估市场调整是否为正常回调。重点关注无实质性利空的信号,例如政策定力较强、经济增长目标压力较小等。同时,对比其他大类资产(如债券、黄金、房地产)的收益率表现,判断权益市场的相对吸引力,并结合估值水平确认市场是否仍具投资价值。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:17:01", "modified_time": "2025-08-11 23:17:01", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "bdd21bba429a4511874ea9582f2bfca9", "experience_type": "text", "when_to_use": "当需要评估某一资产类别是否可能成为未来主要投资方向或财富锚点时。", "content": "从宏观经济环境出发,系统性比较各类资产的投资收益率(如存款利率、债券收益率、楼市价格趋势),识别当前低收益环境下最具潜力的资产类别。结合资本市场政策支持(如公募基金改革、中长期资金入市政策)、市场生态改善及估值水平,判断该资产类别是否具备持续吸引资金流入的能力。此外,关注财富效应的形成逻辑,如成交量放大与投资者参与度提升,以验证其可持续性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:17:01", "modified_time": "2025-08-11 23:17:01", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "041f68b77036439bbb9047e2fd83a0bc", "experience_type": "text", "when_to_use": "在制定长期投资策略或资产配置方案时,需考虑不同经济周期下的市场机会与风险。", "content": "基于当前经济周期特点(如GDP增长目标达成情况、财政货币政策宽松程度),分析政策延续性和潜在变化对资本市场的影响。利用历史数据回溯法,评估类似宏观背景下各资产类别的表现规律,明确高波动期与低波动期的切换节奏。同时,将地缘政治因素(如中美贸易关系不确定性)纳入考量范围,构建多情景假设下的动态资产配置模型,确保策略灵活性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:17:01", "modified_time": "2025-08-11 23:17:01", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7ad9e4a0593346869688730556b6a46a", "experience_type": "text", "when_to_use": "在分析国际贸易政策调整对宏观经济的影响时,特别是针对关税武器化和贸易争端升级的场景。", "content": "通过观察特朗普2.0新政中关税工具的应用,可以推导出关税政策的实施会从供给端抑制全球经济增长动能,并对通胀产生区域性分化影响(推高美国通胀、抑制海外通胀)。此外,抢出口和抢进口行为会在短期内扭曲贸易数据,但长期需求前置效应消退后,经济将面临更大的下行压力。因此,在评估类似政策时,应结合短期市场反应与中长期经济结构调整进行综合判断。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:18:04", "modified_time": "2025-08-11 23:18:04", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "193ff4f79f4b4a20b577dee56e78d125", "experience_type": "text", "when_to_use": "在预测货币政策路径时,特别是在面对高不确定性环境下的通胀压力评估场景。", "content": "美联储在应对特朗普政府关税武器化带来的通胀不确定性时,采取了按兵不动的策略,通过观察未来几个月的通胀数据来决定降息节奏。这种做法表明,在政策高度不确定的情况下,中央银行倾向于优先评估供给侧冲击对通胀的持久性影响,而非仅依赖短期波动数据。因此,分析师在预测货币政策路径时,应关注核心通胀趋势和供给侧压力的持续性,而非单一数据点。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:18:04", "modified_time": "2025-08-11 23:18:04", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a14984af33ca408d872060c1387d0923", "experience_type": "text", "when_to_use": "在资产配置决策中,尤其是在地缘政治风险加剧和经济增长动能减弱的防御型投资场景。", "content": "报告建议在2025年下半年加大黄金和国债的配置力度,以对冲地缘政治风险、政策不确定性以及经济增长动能转弱的风险。同时,由于工业商品和股市可能呈现抵抗式下跌,成长型科创股被视为潜在增持机会。这一经验表明,在宏观环境复杂且风险偏好下降的情况下,避险资产应作为组合的核心配置,而成长型资产则需等待更明确的信号再行布局。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:18:04", "modified_time": "2025-08-11 23:18:04", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9fafc24217f54d3a93f4d3f7b1c3a006", "experience_type": "text", "when_to_use": "在评估财政刺激措施对经济的短期和中长期影响时,特别是在高债务压力背景下的财政扩张场景。", "content": "中国在2025年上半年实施了大规模财政刺激,虽然短期内有效提振了内需和市场信心,但随着稳增长措施效果边际减弱以及外部需求恶化,经济动能可能再次放缓。这表明,财政扩张的效果需要结合债务杠杆率、政策执行效率及外部环境变化进行动态评估。对于高债务经济体,财政政策应注重可持续性,避免过度透支未来的政策空间。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:18:04", "modified_time": "2025-08-11 23:18:04", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6e2a675e8d544bc0b86635c5c8e12cc3", "experience_type": "text", "when_to_use": "在评估央行货币政策决策(如降息或加息)的市场影响时,特别是在经济数据分歧较大的情况下。", "content": "通过分析FOMC会议声明和投票结构,识别政策制定者内部的意见分歧,并结合关键经济指标(如就业、通胀)的变化趋势,判断未来政策路径。例如,当就业市场数据呈现复杂信号时,可通过非农职位空缺与失业人数比率来评估劳动力市场的供需均衡水平,从而预测政策走向及其对市场的潜在影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:19:01", "modified_time": "2025-08-11 23:19:01", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1254327dc3254c11abb2539f595fa805", "experience_type": "text", "when_to_use": "在分析宏观经济周期对资产价格的影响时,特别是库存周期切换阶段对通胀和就业市场的联动效应。", "content": "利用库存周期理论(主动去库存、被动去库存、主动补库存、被动补库存),结合零售库存数据和关税影响,评估其对通胀压力和企业劳动力需求的潜在传导机制。例如,当经济体从去库存转向补库存时,需关注企业招聘需求的上升以及关税对商品价格的上行压力,从而调整投资组合以应对可能的市场波动。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:19:01", "modified_time": "2025-08-11 23:19:01", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5957cf20269646cba5e8803bbd21207e", "experience_type": "text", "when_to_use": "在评估就业市场健康状况及其对货币政策的影响时,特别是在私人部门与政府部门就业数据分化的情况下。", "content": "通过对比ADP就业数据与官方非农就业数据,识别私人部门与政府部门就业趋势的差异。例如,当政府部门岗位扩招掩盖了私人部门就业疲软时,需进一步分析劳动力供给减少与需求端招聘放缓的共同作用,判断就业市场的真实状态及其对央行政策决策的潜在影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:19:01", "modified_time": "2025-08-11 23:19:01", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "97404fbdb4cf479b82eba6af55b1446b", "experience_type": "text", "when_to_use": "在评估市场整体流动性状况及其对短期投资决策的影响时,特别是在交投活跃度下降但资金净流入的环境中。", "content": "通过分析全市场成交额、换手率、资金供给端(如基金、两融、ETF)和资金需求端(如IPO、再融资)的变化,可以有效判断市场流动性的强弱。例如,当成交额和换手率下降但资金净流入增加时,表明市场可能处于调整期,适合关注防御性板块或低波动资产。此外,结合国债收益率曲线变化(如期限利差缩小)和中美利差动态,可进一步确认宏观流动性环境是否支持风险资产配置。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:19:55", "modified_time": "2025-08-11 23:19:55", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "798060060a3347929107f569b7f727c7", "experience_type": "text", "when_to_use": "在制定行业轮动策略时,特别是在公募基金调仓行为明显且行业资金流向分化的场景下。", "content": "通过跟踪偏股型公募基金的加减仓行为,识别资金流入和流出的行业趋势,可以帮助预测短期内行业的相对表现。例如,医药生物、电子和通信等行业被显著加仓时,通常反映市场对这些领域的增长预期增强;而有色金属、房地产等传统行业被减仓时,则可能预示相关板块承压。结合宏观经济周期和政策导向,可以优化行业配置策略。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:19:55", "modified_time": "2025-08-11 23:19:55", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9fd6732d700c45cfae5d1f4bc2d21d63", "experience_type": "text", "when_to_use": "在分析杠杆资金行为及其对市场情绪的影响时,特别是在两融资金净流入且交易活跃度上升的情况下。", "content": "两融资金的动态是衡量市场风险偏好和投机情绪的重要指标。当两融资金净流入且其占A股成交额比例上升时,表明市场参与者的风险承受能力增强,可能推动短期内高贝塔资产的表现。然而,需警惕过高的两融余额可能导致后续去杠杆压力,尤其是在市场波动加剧时。因此,在利用两融数据指导交易策略时,应同时监控市场的整体波动性和潜在回调风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:19:55", "modified_time": "2025-08-11 23:19:55", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "99b283c93b174734a16668e72c07f2c8", "experience_type": "text", "when_to_use": "在评估产业资本行为对个股及行业估值的潜在影响时,特别是在重要股东增减持和大规模限售股解禁前后。", "content": "产业资本的增减持行为和限售股解禁规模能够揭示公司内部人对公司前景的信心以及市场供需平衡的变化。例如,基础化工、公用事业等行业的增持可能表明这些领域存在低估机会,而计算机、电子、医药生物等行业的减持则可能暗示盈利增长放缓或估值过高。此外,大规模解禁往往会对相关股票形成抛压,建议提前规避受影响较大的标的,并关注解禁后是否存在超跌反弹的机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:19:55", "modified_time": "2025-08-11 23:19:55", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c09a798aad2e43f0b18661e4feff623c", "experience_type": "text", "when_to_use": "在分析宏观经济数据(如GDP报告)对市场的影响时,尤其是在经济周期转折点或政策变化后。", "content": "通过分解GDP分项贡献率(如消费、投资、净出口和库存),识别驱动经济增长的核心因素及其潜在风险。例如,当净出口因‘抢进口’效应反转而成为主要拉动项时,需警惕后续贸易波动对经济的拖累。同时,结合关税政策影响评估消费者通胀预期和企业成本压力,为资产配置和风险管理提供前瞻性指导。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:20:44", "modified_time": "2025-08-11 23:20:44", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "4e0180a1022941fb9957584652cb4bcf", "experience_type": "text", "when_to_use": "在评估企业资本支出趋势及其对经济增长的影响时,特别是在技术革新(如AI浪潮)推动的投资热潮后。", "content": "观察固定资产投资的细分领域表现(如设备投资、知识产权投资和建筑投资),判断不同领域的韧性与脆弱性。例如,尽管AI相关投资可能维持增长,但高利率环境下的住宅和建筑投资往往承压。这种洞察可用于预测企业盈利能力和行业轮动趋势,从而调整股票和债券组合策略。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:20:44", "modified_time": "2025-08-11 23:20:44", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5746e8e917fc4e92b250374a1a87f07f", "experience_type": "text", "when_to_use": "在分析消费行为变化及其对经济动能的影响时,特别是在外部冲击(如关税政策或天气因素)后。", "content": "通过拆解个人消费支出的耐用品、非耐用品和服务分项,评估消费复苏的可持续性。例如,非耐用品消费下降可能反映进口依赖商品的价格敏感性,而服务消费回升则表明居民信心边际改善。这一框架有助于制定基于消费趋势的零售、消费品和服务业投资策略。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:20:44", "modified_time": "2025-08-11 23:20:44", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "4ce9fba9de944ae48f814b963b105e06", "experience_type": "text", "when_to_use": "在评估政府财政政策对经济的支持力度时,特别是在财政紧缩或扩张周期中。", "content": "分析联邦和地方政府支出的结构变化(如国防、非国防及地方基建投资),评估其对经济增长的直接和间接拉动作用。例如,联邦政府缩减非国防支出可能导致短期经济活动放缓,而地方政府增加投资则可能缓解部分压力。此经验可应用于国债、市政债及公共事业股的投资决策。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:20:44", "modified_time": "2025-08-11 23:20:44", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6721e97af0bc4b3e957b84ecba645e18", "experience_type": "text", "when_to_use": "在分析中央银行政策决策及其对市场影响的场景中,特别是在货币政策转向(如降息或加息)的关键节点。", "content": "在评估美联储等央行的政策路径时,应重点关注其“数据依赖”模式,结合就业、通胀和经济增长的核心指标。同时,需特别关注政策声明中的措辞变化以及投票分歧,这些信号可能预示未来政策调整的方向。此外,利用市场定价工具(如CME Fed Watch)可以有效捕捉市场预期的变化,并将其与官方声明进行对比,从而判断市场的潜在反应。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:21:43", "modified_time": "2025-08-11 23:21:43", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f6f332c19303454db487e95b3692b0e8", "experience_type": "text", "when_to_use": "在宏观经济不确定性较高时,评估关税政策对通胀传导路径的影响,尤其是在涉及国际贸易摩擦或政策调整的背景下。", "content": "关税政策对通胀的影响具有滞后性和复杂性,初期可能由上游企业承担成本,但最终可能逐步传导至终端消费者。因此,在分析此类问题时,需要结合行业调查数据、商品和服务价格的动态变化,以及零售端的反馈信息。此外,还需关注劳动力市场的供需平衡状况,因为这将影响整体经济的韧性及政策制定者的决策空间。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:21:43", "modified_time": "2025-08-11 23:21:43", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ae2be141fd3a4902a7f0cac592391136", "experience_type": "text", "when_to_use": "在投资组合调整或资产配置策略制定中,特别是在不同时间跨度(短期战术 vs 长期战略)和多种资产类别之间进行权衡时。", "content": "基于宏观经济数据和央行政策预期,投资者应在不同资产类别间灵活调整配置比例。例如,在降息预期升温时,固定收益类资产可能表现优于股票;而在通胀风险上升时,大宗商品和抗通胀资产可能更具吸引力。同时,应根据市场波动性和经济周期的不同阶段设定不同的风险敞口,以实现收益与风险的平衡。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:21:43", "modified_time": "2025-08-11 23:21:43", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c7bb21709f664e9885f01dc3316ff279", "experience_type": "text", "when_to_use": "在为客户提供咨询建议时,特别是当客户面临复杂的市场环境(如高波动期或政策不确定性较大时)。", "content": "向客户提供建议时,应首先明确客户的收益目标和风险承受能力,然后结合当前宏观环境、央行政策导向以及市场情绪,提供个性化的投资策略。例如,在降息概率下降且市场预期降温的情况下,可建议客户减少对利率敏感型资产的配置,同时增加防御性板块的投资权重。此外,通过定期跟踪关键经济数据和政策动向,及时更新建议,增强客户信任度。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:21:43", "modified_time": "2025-08-11 23:21:43", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9edca9c4c02d4966a258a557aea474f1", "experience_type": "text", "when_to_use": "在分析制造业的景气度和未来趋势时,尤其是在面对宏观经济下行压力或政策调整(如反内卷政策)影响的背景下。", "content": "通过跟踪PMI指数及其分项指标(如生产指数、新订单指数、价格指数等),结合行业层面的数据(例如铁路船舶航空航天设备、计算机通信电子设备等行业表现),可以有效评估制造业的整体运行情况。同时,需关注原材料购进价格和出厂价格的变化,这些数据不仅反映短期市场供需动态,还能揭示中长期的成本与利润压力。建议在需求重回收缩区间时,重点关注库存周期的变化,特别是产成品库存和原材料库存的同比增速,以判断企业是否处于被动补库或去库阶段。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:23:00", "modified_time": "2025-08-11 23:23:00", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "2ce38a6875c94fa691bba0d313502a96", "experience_type": "text", "when_to_use": "在评估国际贸易环境对特定行业出口竞争力的影响时,特别是在关税政策变化或全球经济复苏不平衡的条件下。", "content": "利用进出口总值及主要国别出口值数据,结合具体商品类别的出口额(如机电产品、高新技术产品、汽车及零部件等),识别关键市场的结构性机会。例如,在中美贸易承压的情况下,可关注东盟、非洲等新兴市场的需求增长点,尤其是中间品(如电子元件、机械设备)和新能源相关产品(如电动汽车)。此外,应分析大宗商品出口量与航运指数的关系,以预测物流成本波动对出口业务的潜在影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:23:00", "modified_time": "2025-08-11 23:23:00", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d2779be10e7b466cb6390ff2223f8710", "experience_type": "text", "when_to_use": "在制定投资组合策略时,特别是需要考虑不同资产类别之间的风险分散和收益优化。", "content": "根据规模以上工业企业利润总额、营业收入和细分行业的财务表现(如黑色金属冶炼、化学原料及制品等),优先选择盈利能力改善且市场需求稳定的行业进行配置。同时,参考PPI和CPI数据,理解通货膨胀预期对企业盈利能力和消费端的影响。对于房地产、基建等领域,需结合固定资产投资数据及地方专项债发行进度,评估其短期内的资金流入潜力和长期发展动能。最后,结合货币流动性(如M2-M1剪刀差)和利率政策走向,灵活调整债券和股票的比例,以平衡风险与回报。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:23:00", "modified_time": "2025-08-11 23:23:00", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "557e7e74f89b4241aeaa25b057e16c56", "experience_type": "text", "when_to_use": "在监测汇率波动对跨境资本流动和外汇储备管理的影响时,尤其是在美联储货币政策转向或地缘政治事件频发的时期。", "content": "通过观察人民币兑美元汇率、美元指数以及中美利差走势,综合分析外部因素对国内金融市场的冲击。例如,当人民币面临贬值压力时,应关注央行增持黄金储备的行为,这可能预示着增强主权货币信用的战略意图。同时,结合外汇储备余额变动,判断外汇市场干预力度和央行维护汇率稳定的能力。建议在防范汇率超调风险时,加强对非美元货币篮子的关注,避免单一货币敞口带来的系统性风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:23:00", "modified_time": "2025-08-11 23:23:00", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "eb609a7d1b48481c8e23a9d99e8d48ca", "experience_type": "text", "when_to_use": "在研究房地产市场拐点和相关政策调控效果时,特别是针对新建商品房销售面积、房价指数和土地成交溢价率的表现。", "content": "通过对比一线城市与二三线城市的房价和销售数据,识别区域间市场分化趋势。例如,若一线城市的房价出现上涨而二三线城市持续低迷,则表明市场存在明显的板块轮动现象。同时,跟踪土地成交建筑面积和溢价率,了解开发商拿地意愿和地方政府财政压力。此外,二手房成交面积和价格指数能够更真实地反映居民购房需求的实际变化,为判断市场底部提供额外线索。建议结合信贷数据中的住户贷款增量,进一步验证房地产市场的资金流入状况。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:23:00", "modified_time": "2025-08-11 23:23:00", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c19ab6fa7a2a46f68c1c6413b6387ac5", "experience_type": "text", "when_to_use": "在分析财政政策的短期执行效果及未来方向时,特别是在经济复苏或调整阶段,需结合广义财政收入与支出数据进行评估。", "content": "通过对比月度和累计的广义财政收入与支出增速,可以有效识别财政政策的发力特征。例如,在收入端改善但支出增速放缓的情况下,应关注财政收入结构的变化(如税收与非税收入占比)以及支出的具体流向(如基建类与民生类支出)。此外,低基数效应可能对同比数据产生显著影响,需结合历史数据进行校正分析。最后,结合高层政策会议(如中央政治局会议)的指引,可预测未来财政政策的增量措施,如超长期特别国债发行或专项债额度提升。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:24:01", "modified_time": "2025-08-11 23:24:01", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e982b2fcde5c4b188de14bd22d3400ba", "experience_type": "text", "when_to_use": "在评估政府性基金收入与支出的动态变化时,尤其是在房地产市场调整背景下,需综合考虑土地出让金收入及专项债发行进度的影响。", "content": "政府性基金收入的波动通常与土地市场表现密切相关,而支出则受到新增专项债发行节奏的显著驱动。例如,当土地出让金收入同比下降但降幅收窄时,可能表明市场正在逐步企稳;而支出增速的大幅提升则往往源于专项债发行加速。因此,在分析此类数据时,应结合地方政府专项债发行计划、土地市场交易数据及房地产行业政策,以全面评估财政支出的实际效果及其对经济增长的拉动作用。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:24:01", "modified_time": "2025-08-11 23:24:01", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "cffd1e3f14234c22a3fb6a354198d75b", "experience_type": "text", "when_to_use": "在制定中长期财政规划时,特别是面对经济下行压力或外需放缓的情况,需重点关注财政赤字率、专项债额度及特别国债等工具的潜在调整空间。", "content": "根据高层政策会议的明确指引,财政政策的“适度加力”可能包括上调财政赤字率、增加超长期特别国债发行量或提高新增专项债额度等措施。这些工具的选择和实施力度通常取决于当前经济运行状况及外部环境的变化。例如,在外需放缓的背景下,内需提振将成为政策重点,此时可通过加快专项债发行节奏支持基础设施建设,或通过特别国债为重大项目建设提供资金保障。同时,需注意政策落地的时间窗口,确保其在关键时点发挥平滑经济波动的作用。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:24:01", "modified_time": "2025-08-11 23:24:01", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e1e05989c89d4345a3f6e350acc4f02f", "experience_type": "text", "when_to_use": "在评估一家科技平台公司(如Uber)的财务表现和未来增长潜力时,特别是在涉及多业务线(如出行与配送)的综合分析场景中。", "content": "通过分析跨平台用户留存率、会员计划渗透率及各业务线的增长驱动因素,可以有效评估公司的长期盈利能力。例如,Uber的跨平台用户留存率比单一业务用户高出35%,且贡献了超过3倍的预订量和利润;同时,其会员计划(Uber One)对总预订量的贡献超过40%。这表明,会员计划和跨平台策略是提升客户生命周期价值和盈利能力的核心支柱。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:25:02", "modified_time": "2025-08-11 23:25:02", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1495ef0f350b45a9a7d94e8568098e92", "experience_type": "text", "when_to_use": "在制定投资决策时,需要结合宏观经济环境、行业动态和公司特定数据进行综合判断,尤其是在高波动市场或经济周期转折点。", "content": "通过分解Uber的季度财务数据(如Gross Bookings同比增长17%、调整后EBITDA利润率提升60个基点),并结合宏观经济风险(如需求疲软、地缘政治风险)和竞争格局,能够更清晰地识别短期波动与长期趋势。例如,尽管本季度价格增速放缓主要受保险成本压力缓解影响,但高端市场和低成本市场的双向扩展策略显示了公司在不同经济周期中的适应能力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:25:02", "modified_time": "2025-08-11 23:25:02", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c1cbcfcef65d48abbdee8dd4513206f2", "experience_type": "text", "when_to_use": "在为客户提供关于自动驾驶技术或新兴技术领域的投资建议时,尤其是在涉及战略合作、并购和技术部署的复杂场景中。", "content": "通过评估Uber在自动驾驶领域的合作布局(如与Waymo、WeRide、Baidu等厂商的合作),可以预测其未来技术竞争力和市场份额增长潜力。此外,多个区域的自动驾驶部署计划(美国、中东和亚洲)表明,技术应用的地理范围扩展将显著提升车辆利用率和运营效率,从而增强长期盈利能力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:25:02", "modified_time": "2025-08-11 23:25:02", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "90742012749f46ba909fd6c241d2fceb", "experience_type": "text", "when_to_use": "在房地产行业市场分析中,特别是在评估政策影响和城市更新机会时。", "content": "通过结合中央政策导向(如城市更新、高品质住房建设)与地方因城施策的具体措施,可以有效识别投资机会。例如,报告中提到的北京多子女家庭购房支持政策、上海城中村改造计划等,均为潜在投资热点。此外,关注公积金政策优化、购房补贴等微观政策变化,可进一步细化对区域市场的判断。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:26:09", "modified_time": "2025-08-11 23:26:09", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "439754dcfbcb4d048a439a5173cc6aa8", "experience_type": "text", "when_to_use": "在分析新房和二手房市场表现时,尤其是需要分解不同能级城市(一线、二线、三四线)的市场动态。", "content": "采用分能级数据跟踪方法,从周度、月度及年度维度对比成交面积的环比和同比变化,能够精准捕捉市场趋势。例如,报告中显示一线城市新房成交环比上升40.6%,而三四线城市仅上升23.1%,表明高能级城市可能更具韧性。这种方法特别适用于制定短期战术操作和中期组合调整策略。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:26:09", "modified_time": "2025-08-11 23:26:09", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "18b583a00719408dbfb1a85f785d1156", "experience_type": "text", "when_to_use": "在评估房地产企业融资能力和资金链健康状况时,尤其是在市场波动或政策收紧期间。", "content": "通过监测房企的融资活动(如定向增发、债券发行、银行贷款)以及大股东支持情况,可以判断企业的财务稳定性。例如,大悦城完成24.26亿元定向增发,万科获得大股东低息借款支持,均表明这些企业在资金端具备一定优势。同时,需警惕融资受限或销售回款下降导致的现金流压力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:26:09", "modified_time": "2025-08-11 23:26:09", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3f7f99ef3cf2448eadaf120ffad6e0b1", "experience_type": "text", "when_to_use": "在构建房地产板块投资组合时,特别是针对不同市场环境(牛市/熊市/横盘)下的选股策略。", "content": "优先选择核心城市布局重、拿地能力强且产品力突出的房企,如滨江集团、绿城中国等;同时关注二手房中介(如贝壳)和物业管理企业(如华润万象生活)的协同效应。这种策略在稳楼市政策背景下尤为有效,因为高品质住宅和存量房市场可能成为新的增长点。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:26:09", "modified_time": "2025-08-11 23:26:09", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "261e2a99916a44b3b1d0fa827ea6fdfd", "experience_type": "text", "when_to_use": "在评估工业金属的短期价格波动和库存动态时,特别是在市场供需条件快速变化的情况下,如经济周期转折点或突发事件影响。", "content": "通过分析LME现货结算价及库存数据的变化趋势,结合具体金属品种(如铜、铝、镍等)的价格回调幅度与库存增减情况,可以有效判断短期内工业金属市场的供需平衡状态。例如,当库存显著增加而价格普遍回调时,表明市场可能存在供过于求的压力,需警惕进一步的价格下行风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:26:59", "modified_time": "2025-08-11 23:26:59", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f4543b2034724905983c9aa2cc0cd2be", "experience_type": "text", "when_to_use": "在研究稀有金属(如稀土、钨、钼等)的价格驱动因素及其投资机会时,特别是在政策干预或行业整合背景下。", "content": "稀有金属价格受国内政策(如反内卷政策)和全球供应链动态的影响较大。通过跟踪关键品种(如镨钕氧化物、钨精矿等)的价格涨跌及政策导向,可以识别出具有持续上涨潜力的细分领域。例如,稀土和钨的价格持续上涨通常与供给受限和需求增长相关,这为投资者提供了明确的买入信号。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:26:59", "modified_time": "2025-08-11 23:26:59", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "087b3a00cd0a4f6f88e90b141ee9985b", "experience_type": "text", "when_to_use": "在制定分红型股票的投资策略时,特别是在高股息率行业(如有色金属板块)中筛选稳健标的。", "content": "关注即将分红的公司公告(如股权登记日和除权日),并结合其财务健康状况和行业前景进行综合评估。例如,中国铝业和金钼股份的分红方案显示出公司在盈利能力较强的情况下回馈股东的意愿,这类标的适合寻求稳定现金流的投资者配置。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:26:59", "modified_time": "2025-08-11 23:26:59", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "298d3ee67d4440d482a3cc0e169dd3f4", "experience_type": "text", "when_to_use": "在应对国际关系紧张或突发事件对大宗商品市场的冲击时,特别是涉及全球配套属性强的有色金属品种(如铜、锂等)。", "content": "国际关系的不确定性会显著影响商品价格,尤其是依赖全球供应链的有色金属。通过监测突发事件(如洪水、地缘政治冲突)对生产和运输的影响,并结合历史数据中的类似情境分析,可以帮助预测价格波动范围并调整持仓策略。例如,在洪水频发季节,需特别关注锌和锡等易受影响品种的供应中断风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:26:59", "modified_time": "2025-08-11 23:26:59", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "94a849399e8c433783f0a6dc18b3d4e9", "experience_type": "text", "when_to_use": "在评估医药生物行业的投资机会时,特别是在创新药和复杂制剂领域,需要结合政策导向、市场动态及企业研发能力进行综合分析。", "content": "通过分析国家医保局的集采政策优化(如“反内卷”导向)以及创新药领域的支付端与国际化突破,可以识别具备技术壁垒的企业。这些企业通常受益于质量优先和合理定价的行业生态,同时在全球化BD交易中展现出研发效率和议价能力。建议聚焦于“真创新”、“强壁垒”、“平台化”和“国际化”四维能力突出的企业,以捕捉长期增长潜力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:27:58", "modified_time": "2025-08-11 23:27:58", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "eb12f5772d99446fb36a21c7b2f63c5e", "experience_type": "text", "when_to_use": "当分析特定资产类别(如医药股)的估值水平是否合理时,尤其是在子行业轮动明显的市场环境中。", "content": "通过对医药生物行业及其子行业的PE(TTM)估值进行横向和纵向对比,可识别估值上行或下行的趋势。例如,疫苗和医疗研发外包等子行业在报告期内表现出较高的涨幅和估值溢价,而血液制品和线下药店则相对滞后。此外,结合行业指数相对于大盘的表现(如跑赢沪深300指数),可以判断当前市场对不同子行业的偏好,并据此调整投资组合配置。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:27:58", "modified_time": "2025-08-11 23:27:58", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3cd47eb454f44b01a3158697431f95fd", "experience_type": "text", "when_to_use": "在新兴市场中寻找具有国际化潜力的本土企业时,特别是在创新药和CXO领域。", "content": "通过分析中国创新药企业在2025年上半年的BD交易总额(突破600亿美元)以及恒瑞医药与GSK的合作案例(125亿美元),可以看出头部企业正从“单产品授权”向“平台化管线输出”模式转型。这种转型不仅验证了企业的研发能力和全球化议价能力,还表明国际市场对高质量创新的认可。投资者应关注那些拥有差异化管线、可持续研发-授权循环能力的企业,以抓住国际化带来的增长机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:27:58", "modified_time": "2025-08-11 23:27:58", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "eed6da3a9514438db372e17c6c9e4def", "experience_type": "text", "when_to_use": "在评估市场风险和个股减持行为的影响时,特别是在高波动期或行业调整阶段。", "content": "通过统计报告期内医药生物行业上市公司的股东增减持情况(净减持21.64亿元),可以发现大规模减持可能预示着市场对该行业的短期信心不足。然而,需结合具体公司的基本面和行业整体趋势进一步分析。例如,部分优质企业可能因短期资金需求或股东结构调整而被减持,但其长期价值并未受到影响。因此,在面对减持行为时,应区分系统性风险与个别事件的影响,避免过度反应。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:27:58", "modified_time": "2025-08-11 23:27:58", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "26daabc117b84ece9c4fefc27675993f", "experience_type": "text", "when_to_use": "在评估创新药物(如ADC药物)的市场潜力和投资价值时,特别是在肿瘤治疗领域。", "content": "在分析创新药的投资机会时,应重点关注临床数据中的关键指标(如ORR、PFS、mPFS等),并结合不同适应症的市场需求和竞争格局。例如,针对驱动基因阴性NSCLC或EGFR突变NSCLC的药物,需评估其在一线和后线治疗中的疗效优势及耐受性表现。同时,需留意药物的长期生存证据(如OS数据)是否具有统计学意义,并关注潜在的研发风险(如临床进度延迟或授权合作失败)。此外,跨市场的监管环境差异(如中美双报策略)也会影响药物的商业化前景。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:28:52", "modified_time": "2025-08-11 23:28:52", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c81ad03292a14c00b23ebd82c293829e", "experience_type": "text", "when_to_use": "在生物医药行业的战术资产配置中,尤其是在高波动性和创新驱动的市场环境中。", "content": "在构建生物医药行业的投资组合时,应采用分层策略:优先选择具备明确临床优势(如显著提升PFS或ORR)和低毒性特征的创新药企;其次,考虑具有差异化适应症布局(如DLL3 ADC在SCLC中的应用)的企业以分散风险。对于新兴市场,需特别关注本地化研发能力与政策支持(如医保覆盖和定价机制)。同时,在时间跨度上,短期交易可聚焦于关键临床数据发布节点,而长期战略则需评估企业的持续创新能力与商业化能力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:28:52", "modified_time": "2025-08-11 23:28:52", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "06b32e2d88a446dd95d1ee90dc60d014", "experience_type": "text", "when_to_use": "在制定基于临床试验进展的交易策略时,特别是涉及早期阶段生物技术公司。", "content": "针对处于I期或II期临床试验阶段的生物技术公司,应建立动态跟踪机制,密切关注剂量爬坡试验的安全性数据(如≥3级TRAE发生率)以及初步疗效信号(如ORR和DCR)。如果药物在冷肿瘤或免疫耐药患者中展现出抗肿瘤活性,则可能成为重要的估值催化剂。此外,需量化脑转移患者的疗效数据(如DCR和ORR),因为这通常是投资者关注的重点。交易策略可围绕关键数据披露窗口设计,例如买入期权或对冲头寸以降低不确定性风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:28:52", "modified_time": "2025-08-11 23:28:52", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1e758a7491744dddb61ff5511ca135d9", "experience_type": "text", "when_to_use": "在评估全球原油需求及其对宏观经济的影响时,特别是在预测亚太地区未来能源消费趋势的场景下。", "content": "通过分析全球及主要地区的原油消费量与GDP增速之间的强相关性,可以有效预测原油需求的变化。特别是亚太地区作为当前和未来的原油消费主力,其经济发展的持续性和结构性变化(如新能源替代、碳中和政策)直接决定了长期原油需求的增长或下滑。此外,应关注印度等新兴市场的需求潜力,因其将成为短期至中期全球原油消费增长的重要驱动力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:29:53", "modified_time": "2025-08-11 23:29:53", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "27fdfd61beab43d0bfa7968bfafb115a", "experience_type": "text", "when_to_use": "在制定炼油行业投资策略时,尤其是在评估炼油产品结构转型和产能过剩风险的背景下。", "content": "炼油行业的消费结构正从传统的燃料型产品(如汽油、柴油)向化工型产品(如石脑油、乙丙烯)转变,这一趋势受到环保政策、新能源替代以及技术进步的推动。投资者应优先关注具备完整炼化一体化项目的企业,这些企业能够更快适应“减油增化”的行业趋势,并通过优化资源配置提升附加值。同时,需警惕全球炼厂产能过剩带来的开工率下降风险,尤其是中国和美国的炼油产能动态。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:29:53", "modified_time": "2025-08-11 23:29:53", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "931001d202ce43649cfca83595be6fac", "experience_type": "text", "when_to_use": "在进行原油供需格局预测时,特别是在分析中短期油价基本面承压的情况下。", "content": "利用EIA、IEA和OPEC等权威机构的供需预测数据,结合高频周度数据(如美国原油产量、库存、炼厂开工率),可以精准跟踪边际变化并判断供需失衡的可能性。例如,2025-2026年全球原油供给增量预计超过需求增量,这将导致油价基本面承压。此时,建议重点关注非OECD国家(如中国、印度)的需求增长潜力,以及OPEC+增产计划对市场的冲击,以调整投资组合的风险敞口。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:29:53", "modified_time": "2025-08-11 23:29:53", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a2232947c7c348179c354f83a5d6ef55", "experience_type": "text", "when_to_use": "在为客户提供能源行业投资建议时,特别是在应对地缘政治风险和政策变化对市场影响的场景下。", "content": "能源行业的投资决策需综合考虑地缘政治风险(如俄乌冲突、中东局势)、政策导向(如碳中和目标、落后产能淘汰政策)和技术革新(如页岩油开采成本下降)。建议客户分散投资于具有规模优势和技术壁垒的龙头企业,同时密切关注政策动态和突发事件对原油价格波动的潜在影响。此外,对于高风险偏好的投资者,可适当配置与新能源相关的资产,以对冲传统能源需求下滑的风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:29:53", "modified_time": "2025-08-11 23:29:53", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a040d52135ce48c1b7a56eead9e489dd", "experience_type": "text", "when_to_use": "在评估科技公司财报对市场影响时,特别是在AI和云计算驱动的业务增长背景下。", "content": "分析科技巨头(如Meta、微软、苹果)的财报表现时,需重点关注核心驱动力(如广告收入、云业务、AI技术优化等)及其对未来增长预期的影响。例如,Meta的AI驱动广告转化率提升、微软Azure的增长以及苹果在中国市场的关税应对策略,均提供了明确的行业趋势信号。建议结合营收构成、利润率变化及资本支出计划进行综合判断,并对比行业基准数据验证增长潜力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:31:05", "modified_time": "2025-08-11 23:31:05", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3880d01bbff240f9ba4c94609feded67", "experience_type": "text", "when_to_use": "在新兴封装技术(如CoWoP)对半导体产业链投资机会分析时。", "content": "针对新技术(如CoWoP封装)对高端PCB需求的潜在拉动,需从成本效益、技术门槛和供应链响应能力三方面展开分析。通过量化技术替代的成本节约(如30%-50%的成本降低)与扩产周期(6-12个月),评估其短期和中期市场渗透可能性。同时,关注良率和工艺精度挑战对量产时间表的影响,优先选择具备技术积累和规模化生产能力的龙头企业作为投资标的。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:31:05", "modified_time": "2025-08-11 23:31:05", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ad68d6e5eb094ee4aa0df042f722a865", "experience_type": "text", "when_to_use": "在消费电子行业需求疲软或价格波动期间,评估面板厂商的竞争优势与风险。", "content": "当面板行业面临需求放缓或价格下跌时,应聚焦于龙头企业的市场份额变化、产品结构优化及高端化战略实施效果。例如,京东方在折叠屏领域的领先地位和TCL科技在大尺寸显示领域的盈利增强,表明高端化和差异化是关键应对策略。此外,需动态跟踪供需失衡(如库存调整、产能利用率)对短期盈利能力的影响,并结合宏观经济周期预测复苏节点。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:31:05", "modified_time": "2025-08-11 23:31:05", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "280f4ae8e4894af99a1a43d6093fe901", "experience_type": "text", "when_to_use": "在全球性展会(如WAIC)后,评估AI应用端的投资逻辑和落地潜力。", "content": "利用大型行业展会(如WAIC)发布的前沿成果,识别AI从技术突破向规模化应用过渡的关键变量(如系统集成能力、产业协同深度)。重点关注垂直行业智能体(AI agent)在医疗、金融、制造等领域的具体应用场景,以及具身智能机器人在复杂任务执行中的进展。结合参展企业展示的技术成熟度和商业化路径,筛选出具备明确落地潜力的细分赛道和领先企业。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:31:05", "modified_time": "2025-08-11 23:31:05", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "466773b5d8ca47ad9bc8ff849e97c443", "experience_type": "text", "when_to_use": "在评估跨国品牌(如Adidas)的财务表现时,尤其是在汇率波动较大的市场环境下。", "content": "在分析跨国品牌的财务数据时,需将汇率中性增长率与实际增长率分开评估。例如,Adidas财报显示其2025H1营收同比增长7%,但汇率中性下增长率为10%,这表明汇率波动对财务表现产生了显著影响。此外,分区域分析各市场的增长率、毛利率和经营利润率变化,能更精准地识别高潜力区域和潜在风险区域。这种分层分析方法有助于制定区域化战略,特别是在新兴市场和拉美等高增长但高波动区域。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:32:12", "modified_time": "2025-08-11 23:32:12", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "2fbb083fc3a84776a8b50e030e594691", "experience_type": "text", "when_to_use": "在进行黄金珠宝行业的投资分析时,尤其是在高金价抑制消费的经济周期阶段。", "content": "在高金价环境下,黄金首饰消费受到抑制,但轻克重、设计感强的产品仍具吸引力,这类产品能够通过附加值提升商家盈利能力。与此同时,金条和金币因避险需求激增而成为主要增长点。因此,在分析黄金珠宝公司时,应重点关注其产品结构是否偏向高附加值产品以及是否有效拓展金条和金币业务。此外,工业用金的小幅增长趋势也值得关注,尤其是金盐需求回升带来的机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:32:12", "modified_time": "2025-08-11 23:32:12", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b5c6d0d699c243a7a5ae88f9f526f1c3", "experience_type": "text", "when_to_use": "在关税政策变动对纺织制造行业产生重大影响时,如美国对东南亚及南亚国家实施对等关税政策。", "content": "面对关税政策变动,建议优先关注海外布局完善且纵向一体化程度高的纺织制造企业,例如申洲国际和华利集团。这些企业在越南、印尼等地实现本地化原材料采购,能够有效降低关税冲击。同时,短期内可关注中报业绩确定性高的公司,如百隆东方和开润股份。从中长期来看,关税政策可能进一步推升行业集中度,龙头企业有望通过优化供应链和扩大市场份额获得超额收益。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:32:12", "modified_time": "2025-08-11 23:32:12", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b0aa803716e848cfb8568c6dfe085d6f", "experience_type": "text", "when_to_use": "在奢侈品行业面临宏观环境挑战但仍需维持品牌吸引力的情况下,例如Prada集团的表现分析。", "content": "在严峻的宏观环境下,奢侈品集团可以通过多维度策略保持竞争力:一是持续投资于创意活动和标志性项目以强化品牌形象,例如Prada通过Days of Summer等活动扩大新品触及范围;二是推进数字化发展和零售网络优化,例如Miu Miu通过巡回夏日读本等活动增强社群互动;三是通过战略性收购扩展品牌矩阵,例如Prada收购Versace以丰富其高端定位。这些措施有助于在不利环境中维持稳健增长。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:32:12", "modified_time": "2025-08-11 23:32:12", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3bc910e32f1c4e75b347691b2c045c92", "experience_type": "text", "when_to_use": "在评估核燃料或能源相关公司(如铀生产商)的业绩表现时,特别是在市场对能源价格波动敏感的背景下。", "content": "通过分析公司的一体化产业链布局、合同结构及价格锁定策略,可以有效评估其盈利韧性和未来增长潜力。例如,Cameco通过锁定长单和优质合同结构平滑价格波动,并上调全年价格指引以反映市场改善,表明公司在不确定环境中具备较强的抗风险能力。这类分析尤其适用于资源类企业的投资决策。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:33:08", "modified_time": "2025-08-11 23:33:08", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6985cf5c512b4c05b272cca37a957711", "experience_type": "text", "when_to_use": "当加密货币市场情绪处于中性或负面区间,且ETF资金流动出现显著净流出时。", "content": "通过对现货ETF的资金流入/流出情况进行监测,结合宏观经济数据(如非农就业数据)和监管动态(如SEC批准ETP实物申购与赎回),可以判断市场短期走势。例如,本周因非农数据不及预期导致加密核心资产价格回调,同时ETF净流出6.43亿美元,表明投资者风险偏好下降。这种分析框架可帮助投资者在高波动性市场中调整仓位。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:33:08", "modified_time": "2025-08-11 23:33:08", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "405d7b497c024e02911312fe0c43f24d", "experience_type": "text", "when_to_use": "在评估科技股或AI相关标的的市场表现时,尤其是在宏观经济数据发布后市场情绪转向risk-off的情况下。", "content": "关注主要科技指数(如恒生科技、费城半导体指数)与大盘指数(如标普500、纳斯达克100)的相对表现,同时结合个股涨跌幅TOP5和细分板块轮动情况,可以识别出市场的避险倾向及行业分化。例如,本周Meta和微软业绩超预期但未能持续提振市场,显示投资者更关注宏观不确定性而非单一公司基本面。这一方法适用于跨市场环境下的战术资产配置。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:33:08", "modified_time": "2025-08-11 23:33:08", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "adf1aeac3e4143c195e61b8ba190315a", "experience_type": "text", "when_to_use": "在预测经济周期对特定资产类别(如黄金、VIX指数)的影响时,尤其是当市场对数据失去信任或面临高度不确定性时。", "content": "利用宏观经济指标(如就业数据、利率决议)和市场情绪指标(如恐惧贪婪指数)来评估资产定价的锚定效应。例如,报告中提到“如果对资产定价失去了锚,风险偏好还会提升吗?”明确指出了黄金和VIX作为避险资产的吸引力。此类分析对于构建防御性投资组合具有重要指导意义。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:33:08", "modified_time": "2025-08-11 23:33:08", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "771cc5f9729c4dee9ce03c24ba5aa65d", "experience_type": "text", "when_to_use": "在分析一家公司股价波动时,尤其是涉及多个内外部因素(如产品周期、关税、海运费和汇率)的叠加影响。", "content": "通过复盘春风动力的股价走势,识别出其股价驱动因素是内部产品周期与外部关税、海运费、汇率等多重变量的叠加效应。长期市值增长主要由业务扩张及产品周期推动,短期则受库存周期和外部扰动(如关税)显著影响。建议在类似场景中,优先关注产品周期与外部经济政策变量的交互作用,并量化这些变量对盈利和估值的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:34:01", "modified_time": "2025-08-11 23:34:01", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6a426f3faaac409da6d5add98330fb0c", "experience_type": "text", "when_to_use": "评估新兴市场企业在高端化战略中的成长潜力时,尤其是在对比国际龙头企业的市场份额和收入规模差距时。", "content": "通过对春风动力全地形车业务的高端化分析,发现其通过推出高性价比新品(如U10 Pro)成功突破高端市场,并验证了其技术实力和市场接受度。同时,对标北极星和庞巴迪等国际巨头,明确了未来收入翻倍的增长空间。建议在类似情境中,注重企业高端化产品的竞争力分析,并结合行业龙头数据进行定量对标,以预测潜在增长空间。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:34:01", "modified_time": "2025-08-11 23:34:01", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9505666acb5447e3a9755b325e42dc64", "experience_type": "text", "when_to_use": "研究出口导向型企业如何快速开拓海外市场时,特别是在竞争激烈的国际市场中绑定优质代理商资源。", "content": "春风摩托车出口的成功案例表明,绑定海外头部代理商(如土耳其UMA集团)是打开市场的关键策略。此外,渠道铺设数量和质量的提升能够显著促进销量增长。建议在类似场景中,优先考察目标市场头部代理商的资源分布,并通过本地化策略强化合作关系,逐步实现渠道覆盖和单店效率的双重提升。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:34:01", "modified_time": "2025-08-11 23:34:01", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "866dd7c86cd74d0f8ed45f9b735f9457", "experience_type": "text", "when_to_use": "在预测电动车新品牌快速增长潜力时,特别是当行业面临政策变化或标准升级带来的格局重塑机会。", "content": "极核作为春风动力的电摩子品牌,凭借高端定位和快速扩张的渠道网络,在2024-2025年实现了销量爆发式增长。这得益于其精准的产品矩阵布局(如AE/EZ/MO系列)以及新国标政策带来的后发优势。建议在类似场景中,重点关注品牌的ASP、单车利润与渠道效能指标,并结合政策变化评估其市场渗透潜力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:34:01", "modified_time": "2025-08-11 23:34:01", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "89467acbd600494dba148205ecfa0756", "experience_type": "text", "when_to_use": "在评估一家科技公司(特别是涉及AI基础设施和高速互联解决方案的公司)的季度业绩时,需要判断其产品组合的战略优势及未来增长潜力。", "content": "通过分析核心产品线的表现(如Astera Labs的Scorpio PCD交换机系列和PCIe 6.0解决方案),可以识别公司在行业中的技术领先地位及其与主要生态伙伴(如NVIDIA、AMD)的合作深度。此外,关注CEO和高管对市场机会的量化描述(如2030年50亿美元的市场机遇)有助于验证公司的长期战略定位是否具备可信度。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:35:03", "modified_time": "2025-08-11 23:35:03", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "52f5b98da2064f8c9657f44f0ec76200", "experience_type": "text", "when_to_use": "在为投资者提供短期至中期的交易建议时,需要结合财务指标(如Non-GAAP毛利率、营业利润率)和管理层对未来业绩的指引。", "content": "通过比较GAAP和Non-GAAP财务数据,能够更清晰地理解公司实际运营效率和潜在盈利能力。例如,Astera Labs在2Q25中Non-GAAP毛利率从75.8%提升至76.0%,表明其成本优化能力增强。同时,结合3Q25收入和EPS的指引范围(环比增长6%-9%),可以推断出公司未来的盈利增长空间,并据此制定买入或持有的投资决策。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:35:03", "modified_time": "2025-08-11 23:35:03", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d80aa814f10d4749ac987565ff06fcdb", "experience_type": "text", "when_to_use": "在新兴技术领域进行风险评估时,需考虑市场需求波动、供应链稳定性以及竞争格局的变化。", "content": "Astera Labs的案例显示,尽管当前受益于AI基础设施建设需求激增,但报告中明确列出了三大风险因素:需求疲软、供应链风险和竞争加剧。这提示分析师在类似场景中应重点关注行业周期性特征(如AI算力投资高峰后的可能回落)、关键组件供应商的依赖程度,以及新进入者对市场份额的威胁,从而综合评估潜在下行风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:35:03", "modified_time": "2025-08-11 23:35:03", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1ddb42fdf665484da46b682ebf11d8e0", "experience_type": "text", "when_to_use": "在评估风电行业投资机会时,特别是在原材料价格波动较大的市场环境中。", "content": "通过跟踪和分析关键原材料(如铁矿石、铜、铝等)的价格趋势及其对风电设备制造成本的影响,可以有效预测行业利润率变化。建议结合季度招标数据和风机价格走势,识别潜在的成本压力或盈利空间,从而优化投资决策。此外,关注政策支持(如山西民营企业参与风光项目竞配)和市场化改革(如宁夏新能源上网电价改革)的动态,有助于捕捉结构性机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:35:48", "modified_time": "2025-08-11 23:35:48", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d4635eaa25324b778201138d92f1baaf", "experience_type": "text", "when_to_use": "在进行短期战术操作或中期组合调整时,特别是在电力设备二级行业指数分化明显的市场条件下。", "content": "通过对比电力设备细分行业的指数表现(如风电设备、光伏设备、电池等),识别相对强势板块,并结合个股涨跌幅分析,筛选出具有超额收益潜力的标的。例如,本周风电设备指数逆势上涨1.86%,而其他子行业普遍下跌,表明风电设备可能处于资金流入阶段。这种分析方法适用于横盘或震荡市场,能够帮助投资者抓住板块轮动机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:35:48", "modified_time": "2025-08-11 23:35:48", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "fed83fb14a69454c903721fd997807a4", "experience_type": "text", "when_to_use": "在应对高波动性市场条件下的风险管理时,特别是涉及大宗商品相关资产类别的投资组合。", "content": "监测大宗商品价格(如铁矿石、铜、铝、环氧树脂等)的周度变化,并将其与风电设备企业的毛利率敏感性分析相结合,量化原材料价格波动对盈利能力的潜在影响。此外,通过设置动态止损点和仓位管理策略,减轻因原材料价格剧烈波动带来的下行风险。这种方法适用于日内交易或短期战术操作,能够提升风险调整后的回报率。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:35:48", "modified_time": "2025-08-11 23:35:48", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "35e34bdd2a6b434dbbfe407f5a3ea656", "experience_type": "text", "when_to_use": "在评估新兴技术行业(如机器人、人工智能)的投资机会时,特别是在高增长潜力但尚未完全成熟的市场环境中。", "content": "通过构建定制化的行业指数(如具身智能指数)来跟踪特定领域的市场表现,并结合估值、成交量和换手率等多维数据验证投资热度与风险。重点关注行业事件(如技术突破、政策支持、战略合作)对市场情绪的影响,并将其纳入短期战术操作和中长期战略规划的决策框架中。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:36:39", "modified_time": "2025-08-11 23:36:39", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8b9b81fa6c574e10857b798b879da454", "experience_type": "text", "when_to_use": "在分析复杂产业链中的关键环节(如主机厂商、零部件供应商、应用场景开发商)以识别潜在高弹性投资标的时。", "content": "采用自上而下的行业拆解方法,首先明确产业链各环节的核心驱动因素(如技术壁垒、量产能力、合作确定性),然后结合具体场景需求(如工业物流、toB服务、toC陪伴)筛选具备落地能力和竞争优势的企业。同时,关注技术路线未收敛领域(如灵巧手、大小脑模型)的边际变化以捕捉结构性机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:36:39", "modified_time": "2025-08-11 23:36:39", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f37beb7eb79a4a128bc0e914cdc8ffcf", "experience_type": "text", "when_to_use": "在跨区域投资分析中,尤其是在发达市场与新兴市场之间进行资产配置时,考虑不同市场的监管框架、技术成熟度和资金流向。", "content": "利用行业规模预测(如IDC报告)和地方政策动态(如湖北人形机器人母基金)评估区域市场的增长潜力和政策支持力度。同时,结合全球头部企业(如特斯拉、商汤科技)的技术进展和本地化布局,判断供应链上下游企业的受益程度,优化地理范围内的投资组合配置。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:36:39", "modified_time": "2025-08-11 23:36:39", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "91e5ca9f4cbe4f068c2add61dd8d536c", "experience_type": "text", "when_to_use": "在宏观经济数据发布后,评估其对黄金等避险资产的金融和货币属性影响时使用。", "content": "当关键经济数据(如非农就业数据)显著低于预期并伴随大幅下修时,应重点关注其对货币政策(如降息预期)的潜在影响。结合历史案例(如1970年代美联储独立性丧失导致的滞胀),分析当前货币政策独立性和美元信用的变化对黄金价格的双重驱动作用。这种分析方法特别适用于评估黄金在经济下行周期中的表现。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:37:26", "modified_time": "2025-08-11 23:37:26", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c837da0e6b0a4acb8e3fd7372554fc9a", "experience_type": "text", "when_to_use": "在投资组合调整中,特别是在经济周期转折点或高波动期,选择黄金及相关板块标的时使用。", "content": "在经济数据疲软、货币政策宽松预期增强的背景下,建议优先配置黄金及其相关企业股票(如中国黄金国际、山东黄金等)。同时,需综合考虑行业评级、库存变化及供需基本面,以优化投资组合的风险收益比。此外,提醒投资者关注美联储政策意外转向(如大幅加息)和金价波动的风险,确保策略具备足够的灵活性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:37:26", "modified_time": "2025-08-11 23:37:26", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "546d12c48e12472ca29c20b88fc2146b", "experience_type": "text", "when_to_use": "在评估特定行业(如传媒行业)的基金配置趋势时,特别是在低配或超配比例变化显著的情况下。", "content": "通过分析基金重仓比例、适配比例及低配/超配的变化,识别行业的资金流向和市场偏好。例如,2025年Q2传媒行业的低配比例修复表明资金回流,同时游戏和广告营销板块的超配反映了机构集中关注高增长领域。建议结合子板块的超/低配动态调整投资组合,优先配置头部公司,并密切关注政策和技术驱动因素对估值的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:38:48", "modified_time": "2025-08-11 23:38:48", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "822c028839284833ac45cda3e855dbeb", "experience_type": "text", "when_to_use": "在分析基金抱团现象及其对市场影响时,特别是在市场波动性较高或行业轮动加速的环境中。", "content": "通过统计基金前5、10、20大重仓股的市值占比变化,量化抱团现象的加剧程度。例如,2025年Q2传媒行业前10大重仓股占整体市值比例达到85.34%,显示机构对头部公司的高度集中配置。此类现象通常在牛市后期或市场不确定性增加时更为明显。投资者应警惕抱团瓦解的风险,可通过分散化策略降低单一股票波动带来的冲击。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:38:48", "modified_time": "2025-08-11 23:38:48", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "23827400e355479881a81aae571dd9ca", "experience_type": "text", "when_to_use": "在评估物业投资市场趋势时,特别是在大宗交易额和资本化率波动较大的情况下,用于预测未来半年至一年的市场走向。", "content": "通过分析大宗物业交易额、资本化率变化以及机构投资者的行为模式(如险资和基金占比的变化),可以有效判断市场的活跃度及资产类别的吸引力。例如,当交易额增长但交易宗数下降时,表明大额交易主导市场,需关注核心资产的风险溢价和潜在流动性问题。此外,资本化率的变化与宏观经济指标(如五年期LPR和十年期国债收益率)密切相关,利差扩大通常意味着投资者对风险的厌恶情绪上升。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:39:41", "modified_time": "2025-08-11 23:39:41", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "24c2db83e50249518ee4708f9230e9c5", "experience_type": "text", "when_to_use": "在制定跨资产类别的投资策略时,尤其是在消费和居住领域资产表现突出的市场环境下。", "content": "机构型买家倾向于在经济不确定性较高的时期加大对消费和居住相关资产(如零售物业和租赁住宅)的配置,因其具备较强的防御性和稳定的现金流回报。同时,仓储物流和数据中心等新兴资产类别受政策和技术驱动(如关税战和人工智能发展)的影响较大,需结合区域经济发展前景和行业趋势进行动态调整。对于一线城市核心办公楼,尽管资本价值下跌,但其出租率和新增供应有限的特点仍使其成为长期资本的优选标的。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:39:41", "modified_time": "2025-08-11 23:39:41", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1c4f7e9695bd4ee388cc93d21b82e446", "experience_type": "text", "when_to_use": "在评估政策驱动型市场(如海南自由贸易港封关)对特定行业(如免税业)的潜在影响时,特别是在政策实施前的关键时间窗口。", "content": "通过分析政策变化的核心条款(如零关税商品覆盖比例提升、加工增值免关税等),结合行业需求弹性及目标消费群体的增长潜力,预测政策对行业的长期利好。例如,海南封关政策将显著增强国际企业投资吸引力和旅客流量,进而推动离岛免税市场规模扩张。此类分析需结合历史数据验证假设,并动态调整模型参数以反映最新政策细节。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:40:35", "modified_time": "2025-08-11 23:40:35", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "92de239955204a98a714ed057f20ea00", "experience_type": "text", "when_to_use": "在追踪高景气度行业或细分领域(如澳门博彩业)的表现时,尤其是在宏观经济复苏或特殊事件(如签证优化、非博彩转型)驱动下。", "content": "通过对高频数据(如月度博彩毛收入、入境游客量、人均消费恢复率)的监控,识别行业景气度的持续性与边际改善信号。同时,结合外部变量(如赛事活动、免签政策)评估未来增长空间。例如,澳门博彩业连续多月超预期表现表明需求重拾动力,且非博彩化转型成功吸引高端消费者,为估值修复提供支撑。建议关注领先指标并建立情景分析框架应对不确定性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:40:35", "modified_time": "2025-08-11 23:40:35", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e1d6c9c6801d4ff68b0db78ee503de61", "experience_type": "text", "when_to_use": "在研究受短期刺激因素(如补贴活动)影响较大的消费行业(如现制饮品)时,特别是在促销策略逐渐消退但季节性需求仍强劲的情况下。", "content": "利用Q2业绩数据量化补贴对需求的拉动效应,并结合天气、节假日等季节性因素预测Q3需求趋势。例如,尽管外卖平台的大额补贴逐步减少,但暑期旺季和常态化运营仍能维持较高景气度。建议重点关注直营店同店销售额增速、复购率等核心指标,并通过敏感性分析评估补贴削减后的业绩韧性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:40:35", "modified_time": "2025-08-11 23:40:35", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f9f95e661e874ff88f3bef60198a4e14", "experience_type": "text", "when_to_use": "在评估AI+商业化落地进展时,特别是在教育、人力资源等领域,技术迭代和用户数据积累共同推动产品功能优化的阶段。", "content": "跟踪AI应用的商业化路径(如GMV、付费用户数、销售额),结合底层技术支持(如大模型语义理解能力)和场景适配效果(如招聘周期缩短、人岗匹配效率提升),判断其从主题投资向实际收益兑现的过渡潜力。例如,豆神教育和科锐国际的产品已展现出显著的商业化成果,预计下半年将进一步受益于新技术发布和功能迭代。建议关注商业化关键节点并设定阶段性目标。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:40:35", "modified_time": "2025-08-11 23:40:35", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e04ae6cb2463483aa5bf426e575598d5", "experience_type": "text", "when_to_use": "在评估光伏行业投资机会时,特别是在市场价格波动和政策监管变化的背景下。", "content": "通过分析产业链各环节(如硅料、硅片、电池片、组件)的价格走势及其环比变化,结合行业政策动态(如工信部对落后产能的治理和节能监察),可以识别供需关系的变化和潜在的投资机会。重点关注具有新技术布局(如N型产品、钙钛矿技术)的企业,因为这些企业可能在未来的竞争中占据优势。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:41:42", "modified_time": "2025-08-11 23:41:42", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "11d3d744f3e9408aa1fea6e3cb5c537e", "experience_type": "text", "when_to_use": "在市场环境处于回调或底部区间时,寻找被低估的行业或个股投资标的。", "content": "当行业指数表现低迷(如电力设备指数跑输大盘)且个股出现分化时,应关注涨幅居前的公司,并结合其基本面和技术面进行深入分析。例如,捷佳伟创等公司在市场回调期间表现较强,可能反映了其在行业中的竞争优势或市场对其未来发展的乐观预期。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:41:42", "modified_time": "2025-08-11 23:41:42", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d4b2ad184c7a4dbdbd3c48b41e8f6fc7", "experience_type": "text", "when_to_use": "在制定中期战术性资产配置策略时,特别是在新能源领域政策支持力度加大的情况下。", "content": "通过跟踪行业新增装机数据(如分布式光伏新增并网量)和政策导向(如国家能源局发布的可再生能源运行情况),可以判断行业增长潜力和政策红利。同时,需警惕原材料价格波动、项目开工不及预期和贸易摩擦等风险因素,以优化投资组合的风险收益比。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:41:42", "modified_time": "2025-08-11 23:41:42", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6971005957f84f3a8104adaf11442880", "experience_type": "text", "when_to_use": "在评估全球能源供应链中的关键资源出口国(如煤炭、天然气等)的市场地位及贸易流向变化时,尤其是在地缘政治或政策干预导致贸易重组的情况下。", "content": "分析资源出口国在全球市场的份额变化时,需结合宏观经济背景、政策导向和区域需求动态。例如,澳大利亚煤炭行业在清洁能源政策限制下仍保持出口稳定,但其对华出口因政策调整经历了显著的结构性变化。建议关注主要进口国的需求替代来源(如印尼、俄罗斯等)以及出口国的产能分布和成本结构,以预测价格波动和供给稳定性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:42:41", "modified_time": "2025-08-11 23:42:41", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "785e842488be4add9725f463aa0b0a43", "experience_type": "text", "when_to_use": "在研究大宗商品(如动力煤、炼焦煤)的成本上升与价格下跌对行业盈利能力的影响时,特别是在高资本密集型行业中。", "content": "当分析大宗商品行业的盈利能力时,应重点关注成本驱动因素(如劳动力、能源、税费)和价格趋势之间的关系。例如,澳大利亚动力煤公司在2024年面临成本刚性高位与价格下行的双重挤压,导致部分企业出现现金亏损。建议通过构建吨煤盈利模型,结合历史数据和未来价格预期,评估企业在不同价格水平下的生存能力,并识别潜在的供给收缩风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:42:41", "modified_time": "2025-08-11 23:42:41", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "65d852b05f2e482e8564654964a94645", "experience_type": "text", "when_to_use": "在制定投资策略时,需要综合考虑宏观经济周期、行业景气度、估值水平以及政策环境,特别是在能源类资产的投资决策中。", "content": "在能源产能周期约束持续的背景下,优质煤炭公司因其高业绩、高现金流和高分红特性,具备长期投资价值。建议从三个维度筛选标的:一是经营稳健、业绩稳定的龙头企业;二是前期超跌但弹性较大的公司;三是拥有稀缺资源的冶金煤企业。同时,关注国内外煤炭成本抬升对国内煤价中枢的支撑作用,以及央企资产注入带来的估值修复机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:42:41", "modified_time": "2025-08-11 23:42:41", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "19c3e7396f044faeb2acff4fc7fe7c5c", "experience_type": "text", "when_to_use": "在评估半导体行业投资机会时,特别是在AI需求强劲、非AI需求温和复苏的市场环境下。", "content": "利用台积电等龙头企业上调收入增速预期的数据作为先行指标,结合硅晶圆出货面积的增长趋势,判断行业的高景气延续性。同时关注利基存储价格回暖信号及国产替代进展,优先布局模拟IC和存储模组相关标的,如中芯国际、华虹半导体、兆易创新等。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:43:39", "modified_time": "2025-08-11 23:43:39", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "17ce6658e22d45589edab44adb87bbe4", "experience_type": "text", "when_to_use": "在全球科技大厂资本开支显著增加,并且AI基础设施建设需求确定性高的背景下进行产业链筛选。", "content": "通过追踪微软、Meta、谷歌等海外头部云厂商的资本开支计划(例如FY1Q26资本开支超300亿美元),识别AI算力投入的核心受益者。建议关注工业富联、沪电股份等具备服务器和网络设备制造能力的企业,以及与AI终端渗透逻辑相关的立讯精密、顺络电子等消费电子标的。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:43:39", "modified_time": "2025-08-11 23:43:39", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "30ec19c9a6634070a84e5b6f80ede266", "experience_type": "text", "when_to_use": "在政策驱动和技术自主可控成为关键主题时,尤其是在地缘政治风险加剧或网络安全新规出台后。", "content": "分析国家网信办对英伟达H20芯片安全问题的监管动态,结合海外限制措施(如“追踪定位”功能)对中国市场的潜在影响,挖掘国产算力芯片设计与制造的全面自主可控机会。重点推荐寒武纪、龙芯中科、北方华创等企业,覆盖从设计到制造的全链条。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:43:39", "modified_time": "2025-08-11 23:43:39", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "953670a74fa646d99e389c1544d560a0", "experience_type": "text", "when_to_use": "当面板行业经历库存调整周期并临近销售旺季备货阶段时,尤其是电视面板出货量同比下滑但稼动率有望回升的情况下。", "content": "参考洛图科技关于全球大尺寸液晶电视面板出货量数据(如2Q25同比下滑7%),结合品牌方库存消化情况及下半年销售旺季预期,预测面板厂稼动率将在8-9月触底反弹。推荐京东方A等LCD龙头公司,以及因LCD产业崛起而增强竞争力的兆驰股份、传音控股等出海标的。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:43:39", "modified_time": "2025-08-11 23:43:39", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0d653bdef12c48caa488d30f3b4f17ba", "experience_type": "text", "when_to_use": "在评估农产品(如生猪、肉牛或鸡蛋)市场供需动态时,尤其是需要预测未来价格走势的场景。", "content": "通过分析短期、中期和长期的供需指标(如存栏量、出栏体重、饲料成本、进口数据等),结合历史价格波动及季节性需求变化,判断市场周期性拐点。例如,当能繁母猪存栏量持续低位且仔猪价格下降时,可推测未来供应压力缓解,价格有望上行。同时,关注库存水平与屠宰量的变化,验证需求端的强弱。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:44:37", "modified_time": "2025-08-11 23:44:37", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8067fc4d618c41dd9fc8c359e17eb8ae", "experience_type": "text", "when_to_use": "在研究大宗商品(如大豆、玉米或白糖)的全球供需平衡及其对国内价格影响的场景。", "content": "利用USDA等权威机构发布的供需平衡表,结合国内外期货与现货市场价格趋势,识别关键驱动因素(如产量、进口量、库存消费比)。例如,当国际大豆主产区出现天气异常或政策调整时,需及时评估其对国内进口成本及下游加工利润的影响,并据此预测价格波动方向。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:44:37", "modified_time": "2025-08-11 23:44:37", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7bf5f519926249dd80c40cd7853b7f91", "experience_type": "text", "when_to_use": "在制定跨资产类别的投资策略时,特别是涉及农业相关股票和商品期货联动分析的场景。", "content": "综合考虑行业基本面数据(如生猪养殖利润、白羽肉鸡屠宰开工率)与个股财务表现,筛选具备超额收益潜力的标的。例如,在牧业大周期反转预期下,优先推荐低估值龙头公司,同时关注饲料、动保等相关产业链受益标的。此外,结合宏观经济环境和资本市场情绪,动态调整投资组合配置比例。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:44:37", "modified_time": "2025-08-11 23:44:37", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "cedef7fd3d9a4362bf1709e54e42e657", "experience_type": "text", "when_to_use": "在进行风险管理和情景假设分析时,特别是在高波动期或危机条件下。", "content": "基于历史数据回溯,构建多维度的情景模拟(如极端天气、疫情冲击、政策干预),量化潜在的价格波动区间和时间窗口。例如,针对橡胶市场,通过监测主产区降雨情况、原料产出及轮胎开工率,提前预判价格底部支撑位并设定止损点,确保投资决策的风险可控。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:44:37", "modified_time": "2025-08-11 23:44:37", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f0526db3f19c4aab985b26a98cd7fd0b", "experience_type": "text", "when_to_use": "在新兴行业(如低空经济)的投资分析和市场研究中,需要评估政策支持、技术进步和资本流动的综合影响。", "content": "通过整合政策动态、技术研发进展和融资事件数据,建立多层次分析框架。重点关注政策驱动下的产业链成熟度,结合资本市场的融资轮次分布和金额流向,判断行业的投资窗口期。例如,在低空经济领域,政策密集出台和技术突破显著提升了eVTOL和无人机系统的投资吸引力,但需警惕早期阶段的高风险特性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:45:39", "modified_time": "2025-08-11 23:45:39", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "36895fecb09a4f15a6e7802f44fbb5a4", "experience_type": "text", "when_to_use": "在快速发展的行业中进行风险评估,特别是涉及安全和监管合规的领域(如无人机反制)。", "content": "采用‘三层七技’技术架构对潜在风险进行分层评估:被动防御(欺骗伪装)、主动感知(探测识别)和主动处置(软硬杀伤)。结合历史事故案例和法规变化趋势,量化安全威胁的频率和严重性,并将其映射到投资决策的风险溢价模型中。例如,在无人机反制赛道中,需特别关注‘黑飞’事件频发带来的监管加码和成本上升风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:45:39", "modified_time": "2025-08-11 23:45:39", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ae05b29c508941329654e59252ad4bfb", "experience_type": "text", "when_to_use": "在区域性产业投资布局中,评估地理范围内的产业集群效应和资本活跃度。", "content": "利用融资案例地域分布数据,识别区域内的产业聚集特点和资本偏好。例如,珠三角地区以无人机产业链完整性和技术创新能力吸引大量资本;长三角则聚焦于高端制造与研发,特别是在eVTOL核心部件领域。通过分析区域政策试点和产业基础,制定针对性的投资策略,优先选择政策支持力度大且产业链协同效应强的区域。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:45:39", "modified_time": "2025-08-11 23:45:39", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1974a17df50043c2947b5c19aa85dfaf", "experience_type": "text", "when_to_use": "在评估新兴市场中的投资机会时,特别是涉及摩托车或类似消费品行业。", "content": "通过分析目标市场的地理分布、消费者偏好和竞争格局,识别高增长潜力的细分市场。例如,在拉美市场中,尽管日系品牌占据主导地位,但中国品牌的性价比优势和产品力提升使其成为潜在的增长点。建议重点关注市场份额较小但需求快速增长的地区(如墨西哥和巴西),并结合本地化策略推进市场渗透。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:46:32", "modified_time": "2025-08-11 23:46:32", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6682207203f14376b0fa13b4ef4a9bff", "experience_type": "text", "when_to_use": "在制定国际化战略时,尤其是针对高端产品出口的品牌。", "content": "利用性价比优势进入发达国家市场(如欧洲)的同时,注重建立品牌形象和渠道网络。例如,春风动力通过赛事营销(MotoGP)提升国际知名度,并以450cc等爆款产品切入欧美市场。此外,根据不同市场需求调整产品组合,确保既有满足成熟市场高性能要求的产品,也有适合发展中市场的经济型选项。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:46:32", "modified_time": "2025-08-11 23:46:32", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3a7acba33c3c4baab495c492329754ac", "experience_type": "text", "when_to_use": "在进行行业竞争格局分析时,特别是面对多区域、多品牌的复杂市场环境。", "content": "采用分区域的市场份额与排量段分析方法,明确各主要市场的主导品牌及其策略。例如,在东南亚市场,日系品牌垄断程度较高,但在菲律宾、巴基斯坦和马来西亚等地存在突破机会;而在欧洲市场,国产品牌可以通过价格优势和快速迭代能力抢占份额。同时,关注本土品牌崛起对现有格局的影响,例如印度市场中Hero、TVs等本土企业的强势表现。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:46:32", "modified_time": "2025-08-11 23:46:32", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5eac955ef1654b7ea44612ff8067044d", "experience_type": "text", "when_to_use": "在预测未来市场规模和增长潜力时,特别是在新兴经济体或特定消费品类别中。", "content": "基于历史数据推算CAGR并结合宏观经济趋势,估算目标市场的潜在规模。例如,土耳其摩托车市场五年内实现近10倍增长,CAGR高达58%,显示出巨大的发展潜力。同时,需考虑外部因素(如政策支持、基础设施建设)对需求的推动作用,以及文化习惯(如气候条件、休闲活动偏好)对产品类型选择的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:46:32", "modified_time": "2025-08-11 23:46:32", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f7074c8dbd5e450b9d6d60d06e837f5f", "experience_type": "text", "when_to_use": "在评估化工行业的供给侧改革和政策影响时,特别是在反内卷政策频繁提及的背景下。", "content": "关注供给侧压缩弹性较大的板块(如有机硅、膜材料、氯碱、染料)以及具有相对优势的企业或品种。供给侧改革强化可能带来供给端优化,从而提升行业集中度和龙头企业的竞争力。同时,需结合国内外原料成本变化及地缘摩擦对供应的影响,进行综合分析。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:52:15", "modified_time": "2025-08-11 23:52:15", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3b9a48be88fe4bcc8f1c88b5b9e71c1c", "experience_type": "text", "when_to_use": "当分析科技驱动的新材料需求增长(例如半导体、机器人领域)时,特别是政策支持人工智能和国产替代加速的情况下。", "content": "优先关注具备技术壁垒、资金实力和客户资源积累的龙头企业,尤其是在光刻胶、高端工程塑料、热界面材料等细分领域的公司。政策端发力与下游需求共振将推动这些领域实现国产化突破,并为企业带来长期增长潜力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:52:15", "modified_time": "2025-08-11 23:52:15", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "95e0db115df940c7ba40b3bb7c3b7b85", "experience_type": "text", "when_to_use": "在监测基础化工产品价格波动及其对行业利润的短期影响时,例如纯碱、PTFE、DMF等重点产品的价格走势。", "content": "通过跟踪原材料成本变化、供需动态及库存水平,判断价格趋势是否可持续。对于价格下跌但基本面支撑不足的产品(如PTFE),需警惕低价竞争导致的市场混乱;而对于价格上涨且供给紧张的产品(如环氧丙烷),则可关注其短期内的盈利改善机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:52:15", "modified_time": "2025-08-11 23:52:15", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5380de56f9b84288b30d71c1674eab13", "experience_type": "text", "when_to_use": "在制定基于市场环境的投资策略时,尤其是面对横盘或熊市条件下的防御性布局。", "content": "建议挑选具有刚性需求或受政策保护的子行业,例如食品添加剂中的健康甜味剂、农药中的高效低毒品种。此类行业通常表现出较强的抗周期性,且在法规推动下有望迎来景气复苏。此外,应注重企业定价能力与市场份额平衡,以规避无序竞争风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:52:15", "modified_time": "2025-08-11 23:52:15", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "86dcd14e8b86492786b3d34586d7b818", "experience_type": "text", "when_to_use": "在评估消费市场趋势,特别是服务类消费和悦己消费的未来增长潜力时,尤其是在人口结构变化和经济增速放缓的背景下。", "content": "通过对比日本“第三消费社会”特征与中国当前消费市场的相似性,识别出居民消费从物质型向服务型转变的趋势。结合人口年龄中位数、劳动力人口达峰等数据,预测服务消费占比将逐步提升,并建议关注细分赛道如旅游、体育等领域的投资机会。同时,需警惕宏观经济增速下滑和市场需求变动的风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:53:02", "modified_time": "2025-08-11 23:53:02", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c497cdfd89704a4a8110c00c5f65d617", "experience_type": "text", "when_to_use": "分析灵活用工市场的发展潜力及人力资源服务行业的投资价值时,特别是在产业结构升级和AI技术赋能的背景下。", "content": "利用灵活用工市场规模、渗透率以及政策支持性数据,评估行业增长空间。通过分析AI技术对招聘流程(如简历筛选、岗位匹配)的赋能效果,判断行业龙头企业的竞争优势。此外,考虑到国内灵活用工渗透率与发达国家相比仍有较大差距,预计未来市场集中度将进一步提升,建议优先关注具备技术优势和规模效应的头部企业。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:53:02", "modified_time": "2025-08-11 23:53:02", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d022d5b94460416caec5222139cfbc74", "experience_type": "text", "when_to_use": "制定旅游行业复苏阶段的投资策略,尤其是在疫情后需求逐步恢复但尚未完全达到疫前水平的情况下。", "content": "结合宏观旅游人次和收入增长率数据,评估行业景气度并预测未来修复空间。例如,分析国内旅游收入占GDP比重及人均旅游消费占比,判断其是否接近疫情前水平。同时,关注政策催化下的优质旅游资源公司(如黄山旅游),因其有望受益于基础设施改善(如高铁开通)和景区扩容带来的客流增长。需注意天气恶化和宏观经济波动等潜在风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:53:02", "modified_time": "2025-08-11 23:53:02", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ab3ba1028ef44d1e918f24f5bf769db7", "experience_type": "text", "when_to_use": "在体育赛事及相关领域寻找新型消费增长点时,尤其是在政策导向明确且居民可支配收入持续增长的背景下。", "content": "根据《全民健身计划》目标和体育产业规模数据,评估行业增长潜力。聚焦赛车、高尔夫球等新型体育赛事IP运营公司(如力盛体育),分析其短期赛事收入贡献和中长期多元化拓展机会(如自行车、网球等)。同时,考虑海南国际赛车场等大型项目落地后的利润增厚效应,作为估值提升的重要驱动因素。需警惕市场竞争加剧和赛事推广权费用上升的风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:53:02", "modified_time": "2025-08-11 23:53:02", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b6fd1d8ab63448629502a253040d78c6", "experience_type": "text", "when_to_use": "在评估具有高能耗、高排放特征的传统制造业(如化工行业)的投资机会时,特别是在政策驱动的产能淘汰或升级背景下。", "content": "优先关注行业中具备显著成本优势和环保合规性的企业,例如采用天然碱法生产的纯碱企业。此类企业在政策限制新增产能的情况下,仍能通过技术升级或资源获取扩大市场份额,并在市场供需失衡时保持超额利润空间。此外,筛选老旧产能占比较高且政策明确要求淘汰的子行业,可识别潜在的供给侧改革受益者。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:53:46", "modified_time": "2025-08-11 23:53:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0e856d016b6447dd945b829138b983be", "experience_type": "text", "when_to_use": "在进行区域性和全球性行业比较分析时,特别是在评估中国作为全球主要生产国的角色及其对相关行业的影响时。", "content": "利用全球化视角分析行业供需格局,关注中国在全球产量中的占比以及政策对行业发展的引导作用。例如,在纯碱行业中,中国的产量占全球51%,政策限制新增合成法产能但允许天然碱项目扩张。这种区域性政策差异会导致全球市场竞争格局的变化,从而为具备资源优势和技术优势的中国企业提供国际化拓展的机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:53:46", "modified_time": "2025-08-11 23:53:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "035d9b8f3d3c43108b79ab297db3f6e7", "experience_type": "text", "when_to_use": "在评估风电行业投资机会时,特别是在陆上风电项目的招标和中标数据中提取市场趋势与价格动态。", "content": "通过分析近期风电项目的招标规模、中标价格及开发商分布,可以识别出区域性和技术性驱动的市场机会。例如,含塔筒与不含塔筒的项目中标均价差异反映了设备成本和技术要求对定价的影响;同时,关注交货时间表和单机容量有助于判断供应链能力和技术升级趋势。建议结合政策支持(如乡村振兴工程)和地理分布优化投资组合配置。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:54:48", "modified_time": "2025-08-11 23:54:48", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "69b100465e76452b8ce96e3f4ebc9c7c", "experience_type": "text", "when_to_use": "在制定针对新能源行业的短期战术操作或中期组合调整策略时,需要综合考虑政策风险、产业链波动和市场竞争格局。", "content": "从报告中的风险提示可以看出,政策落地进度、产业链价格波动以及投资预期是影响新能源板块表现的关键因素。因此,在类似场景下,应优先跟踪政策实施节点(如碳中和示范项目),并监测整机商报价变化以预测利润空间。此外,需特别注意区域性开发活动(如河北、内蒙古等重点地区)是否符合国家能源转型方向,从而选择更具确定性的标的进行布局。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:54:48", "modified_time": "2025-08-11 23:54:48", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6d8aea086d0748b3813b96b61d0a69ef", "experience_type": "text", "when_to_use": "在经济周期处于扩张阶段且绿色能源需求上升期间,寻找高增长潜力的细分领域(如海风板块相关企业)进行长期战略规划。", "content": "报告提到‘建议关注海风板块海缆、海工、桩基等领域’,体现了对海上风电未来发展的乐观预期。此经验可推广到其他新兴子行业,即通过研究技术成熟度、政策支持力度和国际市场需求来锁定高景气度赛道。同时,海外拿单能力强的企业往往具备更高的国际化拓展能力,适合纳入全球化视野下的长期资产配置框架。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:54:48", "modified_time": "2025-08-11 23:54:48", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b55edfab267c45e8922ec5c201a16601", "experience_type": "text", "when_to_use": "在评估新兴消费品市场(如儿童彩妆)的投资机会时,需要结合市场规模增长预测、政策监管变化和消费者行为趋势进行分析。", "content": "通过多维度量化模型(如销售额、均价等核心指标)评估市场竞争格局,并结合行业生命周期阶段(萌芽期、启动期、高速发展期)判断市场潜力。重点关注政策监管对行业规范化的影响,例如儿童彩妆领域的“小金盾”标识要求,以及二胎、三胎政策带来的潜在消费基础扩大效应。此外,需分析目标市场的供需动态,识别供给端质量参差不齐的问题及需求端对安全性、趣味性的偏好。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:55:41", "modified_time": "2025-08-11 23:55:41", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1c8a253d119a4a9ab63b13abfa009600", "experience_type": "text", "when_to_use": "在选择特定资产类别(如消费品品牌)进行投资组合调整时,需根据品牌的市场定位、研发能力和营销策略评估其长期竞争力。", "content": "优先选择具备强大研发能力(如专利技术、科研合作)和精准市场定位的品牌,例如红色小象通过“至简成分、安心有效”的理念满足80、90后父母科学育儿需求。同时,关注品牌的全域营销策略(如社交媒体种草、节日礼盒设计)是否能快速触达目标人群并建立品牌忠诚度。此外,需评估品牌的创新能力,如推出符合文化趋势(如融入中国传统文化元素)的产品以提升吸引力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:55:41", "modified_time": "2025-08-11 23:55:41", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "769e25a3c8914fb4b15efcf7b0a69fba", "experience_type": "text", "when_to_use": "在进行跨市场投资决策时,需考虑不同地理范围内的市场动态、监管框架和消费者偏好差异。", "content": "针对发达市场与新兴市场的特点,制定差异化投资策略。例如,在中国市场,儿童彩妆品牌需注重安全性与趣味性并存,同时迎合家长对科学育儿的需求;而在欧美市场,则可能更注重天然有机成分和环保包装。此外,需考虑跨境电商业务对供给渠道的影响,以及本地化运营能力(如澳兰黛通过澳洲有机原料赢得全球用户信赖)。最后,货币因素和国际贸易政策也可能影响跨境投资回报率。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:55:41", "modified_time": "2025-08-11 23:55:41", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7db436b84b6842418aa459dd195392e0", "experience_type": "text", "when_to_use": "在评估生物技术或制药公司投资机会时,特别是在药物开发的早期阶段(如I期临床试验)。", "content": "通过采用预期净现值(eNPV)的风险调整模型,量化整合策略对药物开发效率和成本的影响。研究表明,在早期开发阶段选择具备工艺放大能力和全球供应链支持的单一供应商,可以减少技术转移和合同重新谈判带来的复杂性,从而降低整体风险并提高项目的连续性。建议投资者关注候选药物是否采用了集成外包模式,并评估其对项目时间线和资源分配的优化潜力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:56:35", "modified_time": "2025-08-11 23:56:35", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5134aa897bbd4e1083ca0245461c5b42", "experience_type": "text", "when_to_use": "为新兴生物技术公司提供财务规划和融资咨询服务时,尤其是在资源有限且需要快速推进首次人体试验(FIH)的情况下。", "content": "案例研究表明,与单一供应商合作能够将首次人体试验启动时间提前最多12个月,同时节省超过100万美元的成本。这表明,对于资源受限的新兴企业来说,采用集成解决方案不仅有助于缓解资金压力,还能加速进入下一开发阶段。建议顾问帮助客户识别具有CMC、监管合规和临床前咨询综合能力的服务提供商,以确保高效推进早期开发。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:56:35", "modified_time": "2025-08-11 23:56:35", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b9f4f076fd044ab194fc8cd2836161f3", "experience_type": "text", "when_to_use": "在制定长期战略规划时,评估不同规模药企在全球化多中心临床试验中的运营效率。", "content": "整合供应链和临床试验管理可大幅缩短关键流程时间(如疫苗III期试验中IMP放行时间减少了5周)。这一经验适用于大型跨国制药公司,它们通常面临复杂的全球协调需求。建议在规划过程中优先考虑供应商的全球覆盖范围、主动风险管理能力以及质量协议的一致性,以确保跨区域项目的顺利实施。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:56:35", "modified_time": "2025-08-11 23:56:35", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6a9de0aff42e405ba0e40cdc78cfb887", "experience_type": "text", "when_to_use": "在评估创新药物研发公司的投资潜力时,尤其是在肿瘤免疫(IO2.0)领域具有突破性产品的公司。", "content": "通过分析公司在研产品的分子设计、临床前研究数据以及与竞品的对比优势,可以识别其潜在商业化价值。例如,基石药业CS2009的PD-1/CTLA-4/VEGF三抗设计展现了优于双抗的治疗潜力,并且其均衡的靶点亲和力和低毒性特性使其具备显著市场竞争力。建议关注产品进入关键临床试验的时间节点及后续BD合作落地的可能性,以捕捉早期投资机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:57:30", "modified_time": "2025-08-11 23:57:30", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ec5621977eb64dcca2b772e88d6baa3d", "experience_type": "text", "when_to_use": "在判断生物医药行业是否处于结构性行情分化阶段,特别是创新药板块内部轮动时。", "content": "通过观察市场资金流向,结合前期涨幅较大的标的回调情况与低位新概念标的的资金追捧现象,可以有效识别市场情绪变化。例如,报告中提到的创新出海主线个股回调,而市值小、位置低的新概念标的受到资金青睐,表明市场短期锁定收益后正在寻找新的增长点。在这种情况下,应优先配置具有明确产业催化的标的,如即将发布临床数据或纳入港股通的公司。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:57:30", "modified_time": "2025-08-11 23:57:30", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "75a81d0f83ef4af29c792e25e0919555", "experience_type": "text", "when_to_use": "在制定基于科学会议和产业催化驱动的投资策略时,特别是在医药行业的下半年密集会议期(如WCLC、ESMO、ASH等)。", "content": "利用科学会议作为催化剂事件,提前布局具有高潜力临床数据披露的公司。例如,维立志博LBL-024计划在ASCO会议上公布EP-NEC适应症的积极数据,同时拓展至其他大癌种,展现出广泛的适应症扩展机会。投资者应在数据披露前评估产品的疗效优势、安全性数据及其差异化机制,并结合历史数据对比,预测市场反应,从而优化投资组合。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:57:30", "modified_time": "2025-08-11 23:57:30", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "41044c5ab9ab42ddb4035b0cc0ac3fb7", "experience_type": "text", "when_to_use": "在跨国授权合作(BD交易)频发的背景下评估生物科技公司的长期价值提升空间。", "content": "跨国BD交易不仅为公司带来直接现金流收益,还验证了其研发能力并加速全球化进程。例如,恒瑞医药与GSK达成的超120亿美元合作,既拓宽了HRS-9821的海外市场,也提升了公司创新品牌的国际认可度。在评估此类交易的影响时,需综合考虑首付款金额、里程碑付款结构以及未来销售提成比例,同时关注技术转移完成度和海外临床进展,以量化对公司估值的实际贡献。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:57:30", "modified_time": "2025-08-11 23:57:30", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "caa03fa5452448c88a37b73e35e39253", "experience_type": "text", "when_to_use": "在分析跨境电商行业的市场趋势和未来投资机会时,尤其是在政策变化频繁、地缘政治风险加剧的情况下。", "content": "结合宏观数据与行业动态进行多层次分析,关注关税政策、区域经济协定及贸易摩擦对跨境供应链的影响。优先评估新兴市场的增长潜力,例如东南亚和拉美地区,并利用多维度数据(如GMV增长率、用户渗透率)来判断市场成熟度与竞争格局的变化。同时,密切跟踪平台端的政策调整(如亚马逊的低价商城扩张、TikTok Shop的品牌托管模式),以识别潜在的投资标的或风险点。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:58:38", "modified_time": "2025-08-11 23:58:38", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "43e3a024be194c728030f8229887a809", "experience_type": "text", "when_to_use": "在制定针对特定资产类别(如电商物流基础设施、海外仓建设)的风险管理策略时,特别是在高波动性和不确定性较高的市场环境中。", "content": "通过量化物流成本上升对现金流压力的影响,建立基于情景分析的财务模型,模拟不同关税水平下企业的盈利能力变化。建议采用“离境即退税”等激励政策优化税务结构,同时将库存滞销率、周转效率纳入关键绩效指标(KPI)。此外,构建弹性供应链体系,分散单一市场依赖,例如增加越南、泰国等地的生产布局,以降低地缘政治风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:58:38", "modified_time": "2025-08-11 23:58:38", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8cf8d4bbe3a4444aa535ec4331d292fa", "experience_type": "text", "when_to_use": "在评估社交电商领域中的新型商业模式及其估值逻辑时,特别是涉及AI技术赋能的内容驱动型电商平台。", "content": "运用用户行为数据分析法,聚焦于Z世代与千禧一代消费习惯的转变,衡量AI工具在提升转化率方面的实际效果。对于TikTok等头部社交电商平台,可通过拆解其广告收入增速、社交购物用户增量及内容生态健康度,估算其长期商业价值。同时,关注生成式AI流量激增带来的短期炒作风险,避免过度溢价收购相关初创公司。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:58:38", "modified_time": "2025-08-11 23:58:38", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "af961b5614104593b1c25ede7d464e8f", "experience_type": "text", "when_to_use": "在设计跨境企业的多区域市场扩展战略时,尤其是面对北美市场饱和但其他区域尚处成长期的情况。", "content": "根据各区域电商市场的复合年增长率(CAGR)、消费者偏好差异以及本土化运营难度,划分优先级。例如,在欧洲发达市场加强合规性投入,确保符合GDPR等监管要求;而在拉美、中东等新兴市场,则侧重本地化营销与支付解决方案的适配。此外,参考成功案例(如美客多在巴西的深耕经验),逐步搭建覆盖全链条的服务网络,包括最后一公里配送与售后服务支持。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:58:38", "modified_time": "2025-08-11 23:58:38", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "876eac66fc9f4e70a563ab42bb94c524", "experience_type": "text", "when_to_use": "在分析能源行业(如煤炭)政策变化对市场供需和价格的影响时,特别是在监管框架更新或重大安全规定出台的背景下。", "content": "当新的行业法规发布时,应重点关注其对生产成本、产能管理和企业运营模式的直接影响。例如,在煤炭行业中,新增的冲击地压防治章节可能带来更严格的管理要求,从而限制高风险矿井的生产能力,并推高市场价格。因此,投资者需要评估政策实施的时间表及其对企业盈利能力的潜在影响,同时关注政策驱动下的供给侧收缩与需求端的变化趋势。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:59:27", "modified_time": "2025-08-11 23:59:27", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "92c3075a6a064fbe95ca77a55905e033", "experience_type": "text", "when_to_use": "在评估特定资产类别(如大宗商品)的价格走势时,尤其是在供需基本面出现短期波动的情况下,比如极端天气或季节性需求高峰。", "content": "通过结合供给端(如产地强降水导致的生产中断)和需求端(如高温天气推动火电需求增长)因素进行综合分析,可以预测短期内商品价格的上涨潜力。此外,需注意宏观信号(如基建项目启动)对市场情绪的提振作用,以及相关企业的盈利预期调整。这种分析方法特别适用于动力煤等受季节性和政策影响较大的品种。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:59:27", "modified_time": "2025-08-11 23:59:27", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8eba07b4bd62414eae95853c9bfaedc6", "experience_type": "text", "when_to_use": "在筛选投资标的以构建行业主题投资组合时,特别是在政策利好或行业景气度上升的环境下。", "content": "根据不同公司的特征选择合适的投资主线,例如高现货比例的弹性标的适合捕捉短期价格波动,而业绩稳健的成长型标的原则更适合长期持有。建议优先考虑那些具备明确竞争优势(如低成本生产或优质资源储备)的企业,同时密切关注估值水平与盈利增速的匹配程度,以确保投资组合的风险收益比最优。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:59:27", "modified_time": "2025-08-11 23:59:27", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e14304177f144f618094512be7355505", "experience_type": "text", "when_to_use": "在制定针对不同市场环境(如牛市/熊市切换或经济周期转折点)的风险管理策略时。", "content": "在面对政策不确定性或宏观经济下行压力时,必须系统性地识别潜在风险,包括下游需求不及预期、产品价格大幅下跌以及政策变动带来的非经营性损失。为降低这些风险,建议采用分散化投资策略,并动态跟踪关键指标(如库存水平、产能利用率),以便及时调整头寸。此外,应定期审查投资组合的敏感性分析结果,以应对突发市场事件。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-11 23:59:27", "modified_time": "2025-08-11 23:59:27", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "20001c1bb79d4f91992d164c3c4c9e4c", "experience_type": "text", "when_to_use": "在分析新兴高技术产业(如商业航天、卫星互联网)的投资机会时,特别是在行业处于快速增长和政策支持阶段。", "content": "采用产业链全景视角评估行业投资价值,包括制造端的技术革新、发射端的基础设施建设(如商业航天发射场)、以及下游应用需求(如手机直连卫星技术)。重点关注行业的规模化生产潜力、成本降低路径和技术成熟度,并结合具体事件(如密集发射成功)评估行业发展节奏。同时,建议关注产业链上下游核心企业,尤其是具备自主可控技术和市场份额优势的公司。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:00:04", "modified_time": "2025-08-12 00:00:04", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a6beb9a49f724229896c2649f05a1b0f", "experience_type": "text", "when_to_use": "在评估具有明确长期规划和分阶段目标的大型项目(如GW星座计划)时,尤其是在涉及多阶段资本支出和政策驱动的场景中。", "content": "通过分解项目的阶段性目标与实际进展,量化关键指标(如卫星发射数量、轨道部署情况)来评估项目执行效率和可信度。结合宏观经济周期、政策支持力度及市场需求变化,判断项目的可持续性和潜在风险。此外,应特别关注影响项目进度的关键因素(如技术瓶颈、供应链稳定性),并适时调整投资策略。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:00:04", "modified_time": "2025-08-12 00:00:04", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "dfcd1320bed04ff99856cdc0e7155de3", "experience_type": "text", "when_to_use": "在为客户提供多元化资产配置建议时,特别是针对高科技领域的主题投资组合构建。", "content": "基于行业研究报告和市场动态,筛选出受益于特定趋势的核心标的(如卫星制造、火箭发射服务、地面设备供应商等),并根据不同资产类别的风险收益特征进行权重分配。同时,考虑时间跨度对投资回报的影响,例如短期战术操作聚焦高频次事件驱动型标的,而长期战略规划则侧重于具备护城河效应的企业。最后,设置明确的风险预警机制,以应对潜在的进度延迟或市场波动。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:00:04", "modified_time": "2025-08-12 00:00:04", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "01f131b9b467459c847f3937007b318f", "experience_type": "text", "when_to_use": "在评估绿色转型对高碳排放行业(如制浆造纸)的财务影响时,需要量化政策驱动下的成本收益变化。", "content": "针对受双碳目标或国际脱碳政策约束的传统制造业(如制浆造纸),可以通过生命周期评估(LCA)框架分析其全价值链碳足迹,并结合范围一、二、三的排放数据,构建财务模型。通过测算能源结构调整、技术改造和碳税等政策的成本压力,以及绿色产品溢价和市场扩张带来的潜在收益,可以更精准地预测企业未来现金流和估值变化。此外,考虑碳捕集利用与封存(CCUS)等新兴技术的应用潜力,有助于识别长期投资机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:00:54", "modified_time": "2025-08-12 00:00:54", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a2e7997ef0d94d17ac821b67ab5c7d6a", "experience_type": "text", "when_to_use": "在跨境投资或并购中,涉及不同国家和地区碳政策及绿色壁垒的合规性评估。", "content": "当企业计划进入欧盟或其他发达市场时,需特别关注如欧盟碳边境调节机制(EU CBAM)、零毁林法案(EUDR)等政策对供应链的要求。通过建立供应链溯源系统并整合供应商碳数据,可以帮助企业规避贸易禁令和高额罚款风险。同时,优先选择符合FSC、PEFC等国际认证标准的原材料供应商,不仅能降低合规成本,还能提升企业在国际市场中的低碳竞争力。这一方法论适用于高资源依赖型行业,例如林业、农业和制造业。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:00:54", "modified_time": "2025-08-12 00:00:54", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "16ece5394cbe4a6a94e3db310460b70d", "experience_type": "text", "when_to_use": "为支持客户制定ESG相关的融资或投资策略,特别是在可再生能源和循环经济领域寻找增长点。", "content": "基于全球脱碳趋势和区域政策导向,可通过分析行业龙头企业的可持续发展实践(如书赞桉诺、芬欧汇川),提炼出具有普适性的成功模式。例如,在生物质能替代化石燃料、废弃物资源化利用、智能化生产优化等方面的投资项目,通常具备较高的环境效益和经济回报潜力。建议结合CDP供应链计划或SBTi科学碳目标倡议等工具,筛选出符合低碳转型方向且财务稳健的目标资产,从而为客户设计兼具影响力和收益率的组合配置方案。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:00:54", "modified_time": "2025-08-12 00:00:54", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "87c420ec7cc04b94a2d3ed0c81a9f20c", "experience_type": "text", "when_to_use": "在评估房地产市场政策改革对行业结构的长期影响时,特别是在现房销售制度逐步取代预售制的背景下。", "content": "通过分析现房销售政策的历史演变、试点效果及系统性推广路径,可以识别政策对行业供需关系、企业资金链和市场竞争格局的深远影响。例如,现房销售模式将显著拉长开发周期并增加资本压力,从而推动行业集中度提升,利好具备雄厚资本实力和品牌优势的大型房企,同时加速中小房企出清。这一经验可用于指导投资机构筛选具有长期竞争优势的企业标的。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:01:58", "modified_time": "2025-08-12 00:01:58", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1c2869bbf5f44197841a379c2c98de20", "experience_type": "text", "when_to_use": "在进行区域房地产市场的差异化分析时,特别是针对不同省份或城市现房销售占比及其驱动因素的研究。", "content": "通过对比各省现房销售规模与占比的差异(如海南高达67.9%,而四川仅为14.7%),可发现现房销售比例受当地市场环境、政策导向和经济条件的综合影响。例如,海南因政策先行且旅游地产占比较高,现房销售比例领先全国;而部分内陆省份因库存积压和市场需求疲软被动提高现房销售比例。此类洞察可用于优化区域投资策略,优先布局政策支持明确、需求稳定的市场。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:01:58", "modified_time": "2025-08-12 00:01:58", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5b883e33cc40433cb6689117ec3c4b09", "experience_type": "text", "when_to_use": "在分析全球原油市场供需动态及其对价格的影响时,特别是在预测未来1-2年的库存变化、供给和需求增量时。", "content": "通过整合IEA、EIA和OPEC三大机构的月度报告数据,对比其对年度和季度的供需预测值,并结合历史趋势及近期调整幅度,评估市场预期的一致性和分歧点。特别关注OPEC+减产政策的执行情况(如补偿减产计划)以及非OPEC国家(如美国页岩油产量)的变化,以综合判断供应端的实际压力。同时,需考虑OECD与非OECD区域的需求增长差异,尤其是亚洲非OECD国家对需求的拉动作用。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:02:58", "modified_time": "2025-08-12 00:02:58", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e58851016677453ab72c6f83031c2894", "experience_type": "text", "when_to_use": "当需要评估地缘政治事件或宏观经济因素对原油价格波动的潜在影响时,例如中东冲突、美国对特定国家的制裁、新能源替代风险等。", "content": "建立一个多层次风险因子框架,将地缘政治事件(如巴以冲突、美伊谈判)、宏观经济趋势(如GDP增速放缓)和行业内部变量(如OPEC+政策调整、页岩油融资环境)纳入分析范围。通过量化这些因素的历史冲击效应,结合当前市场的敏感度(如库存水平、剩余产能),预判可能的价格波动区间。此外,密切关注突发事件对贸易流向的影响,比如俄罗斯出口目的地的变化。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:02:58", "modified_time": "2025-08-12 00:02:58", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5df090b2f3f8483ea098f378c9012f07", "experience_type": "text", "when_to_use": "在制定长期能源投资策略时,特别是针对石油相关资产(如上游开采企业、炼化项目)的投资决策。", "content": "利用三大机构对未来5-10年的需求预测数据,识别结构性增长机会,例如化工用油需求恢复、非OECD国家柴油需求上升等细分领域。同时,基于各国能源转型政策的时间表,评估传统石油需求被替代的速度,从而确定投资组合中不同资产类别的权重。优先选择那些具备低成本优势且位于政治稳定地区的资源项目,并充分考虑碳中和目标下企业的ESG表现。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:02:58", "modified_time": "2025-08-12 00:02:58", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "4f9095a73e754d2885bcfa0417026876", "experience_type": "text", "when_to_use": "在评估债券市场情绪及其对银行理财产品收益的影响时,特别是在政策变化或宏观经济条件调整的背景下。", "content": "当面临债券利息收入增值税政策调整等监管变化时,需综合分析新老债券的税收差异及对存量和新增投资组合的影响。关注‘新老划断’原则下老券的相对优势,并结合央行流动性操作、政治局会议信号等多重因素判断债市情绪的边际改善。这种分析方法可以帮助识别短期内收益率回暖的机会,同时为中长期收益承压做好准备。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:03:55", "modified_time": "2025-08-12 00:03:55", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c3f67fd396934b1f82abff34fcaa0d98", "experience_type": "text", "when_to_use": "在权益类理财产品表现突出的市场环境下,需要评估其收益来源及未来潜力时。", "content": "通过数据分析发现权益类理财产品收益率攀升的主要驱动因素(如资本市场回暖、债券利率低位导致的资金轮动),并结合具体管理机构的产品集中度特征进行深入研究。建议优先关注具有较强投研能力和风控体系的机构发行的高收益产品,同时警惕市场波动可能带来的回撤风险。此外,在低利率环境中,含权类理财产品的吸引力将持续提升,可作为中长期配置的重点方向。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:03:55", "modified_time": "2025-08-12 00:03:55", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a27c00fb86804116927e903e6bdb670e", "experience_type": "text", "when_to_use": "在同业创新动态显著增加、理财公司尝试新型投资策略或模式时,例如参与IPO网下打新或推出公益主题理财产品。", "content": "针对理财公司的创新举措,应从收益与风险平衡的角度进行全面评估。对于频繁参与IPO网下打新的行为,需关注其报价策略的有效性、潜在收益贡献以及对公司整体风控能力的要求;而对于公益主题理财产品,则需考察超额收益捐赠机制的设计是否合理,以及其对品牌形象和客户黏性的正面影响。此类分析有助于理解行业转型趋势并预测未来竞争格局。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:03:55", "modified_time": "2025-08-12 00:03:55", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "955a911c890042efa939b1a47e3f4091", "experience_type": "text", "when_to_use": "在监测银行理财产品破净率及信用利差走势以评估负债端稳定性时,尤其是在信用利差持续走扩的情况下。", "content": "破净率与信用利差之间存在正相关关系,但破净率变动通常滞后于信用利差。因此,在观察到信用利差快速走扩时,应及时预警可能引发的赎回压力,并提前制定应对措施。同时,考虑到数据样本完整性与时效性的限制,周度波动更多反映短期市场情绪,需结合更长周期的数据来验证规律性关联,避免过度反应。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:03:55", "modified_time": "2025-08-12 00:03:55", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5c6b96d0ff1b47e18a38e7e1ca47e661", "experience_type": "text", "when_to_use": "在评估区域产业集群的投资潜力时,特别是在传统制造业向智能化转型的背景下。", "content": "通过分析区域产业政策、龙头企业带动效应以及供应链配套成熟度,识别具备长期增长潜力的产业集群。例如,安徽省家电产业通过“双招双引”政策和龙头企业的引入,形成了从原材料到整机制造的完整产业链,这种模式可复用于其他区域产业升级的研究中。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:05:08", "modified_time": "2025-08-12 00:05:08", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c3f122d9be504d5f92f8b59dc803edb8", "experience_type": "text", "when_to_use": "在制定针对特定行业的投资策略时,尤其是在技术驱动型行业中寻找结构性机会。", "content": "结合行业生命周期理论(如第二曲线理论)和技术发展趋势,识别行业从传统增长向高质量发展的转折点。例如,安徽省家电产业通过集成电路、新型显示和人工智能等支撑产业的发展,推动了智能家电和智能家居的升级,这类洞察可用于指导科技赋能传统产业的投资布局。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:05:08", "modified_time": "2025-08-12 00:05:08", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0f3f83b8c7bf4cf69dea83e34ca38a49", "experience_type": "text", "when_to_use": "在分析企业出海战略或跨境投资机会时,特别是面向新兴市场的扩张。", "content": "研究目标市场的经济特征、消费习惯和渠道结构,结合跨境电商平台的兴起,评估企业通过轻资产模式(如电商平台)或重资产模式(如海外并购)进入新市场的可行性。例如,安徽家电企业利用江淮运河和合肥国际陆港等物流基建,强化出海路径,这种模式适用于内陆地区企业的国际化战略规划。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:05:08", "modified_time": "2025-08-12 00:05:08", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e4229685bce148c288d8023aad693833", "experience_type": "text", "when_to_use": "在评估供应链整合对企业竞争力的影响时,特别是在劳动密集型产业中。", "content": "关注产业集群的本地化程度及供应链管理能力,分析其对成本控制和快速响应市场变化的作用。例如,安徽家电产业通过提升本地配套率和关键零部件的自主可控能力,降低了交易成本并增强了产业链韧性,这一经验可应用于其他制造业领域的供应链优化分析。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:05:08", "modified_time": "2025-08-12 00:05:08", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1dce4535f9f44864adde0d4d66c672a2", "experience_type": "text", "when_to_use": "在设计支持新兴产业发展的政策框架时,尤其是地方政府希望推动区域经济转型。", "content": "采用“基金丛林”模式,通过设立主题母基金和子基金,撬动社会资本参与产业链建设。例如,安徽省通过智能家电(居)产业母基金群,成功吸引了大量社会资本投入,加速了产业生态的形成,这种模式可推广至其他战略性新兴产业的政策设计中。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:05:08", "modified_time": "2025-08-12 00:05:08", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6fd298f642fa47f29d1daa5d9c42a579", "experience_type": "text", "when_to_use": "在评估营养健康行业相关企业的投资价值时,特别是在保健食品和功能性食品领域", "content": "通过分析企业获批保健食品的数量、种类及功能声称(如维持血糖健康、控制体内脂肪等),结合其市场占有率与研发能力,可以判断企业在行业中的竞争地位。重点关注具有高壁垒的细分市场(如经认证的保健食品)以及头部企业的产品布局,例如仙乐健康凭借479个已注册/备案产品占据显著优势。此外,评估毛利率水平(如汤臣倍健69.7%的毛利率)及其背后的定价权逻辑,有助于识别具备长期盈利能力的企业。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:06:02", "modified_time": "2025-08-12 00:06:02", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6f21f49eacb744919948588214959067", "experience_type": "text", "when_to_use": "在制定针对新兴消费趋势(如年轻化、电商驱动)的投资策略时", "content": "利用电商渠道的增长数据(如抖音平台营养健康食品销售额2022-2024年同比增速分别为227.5%、87.1%、52.5%),结合消费者行为变化(如对0糖、瘦身、美肽等健康概念的偏好),确定哪些品牌能够有效触达目标人群。同时,关注政策支持(如跨境电商红利)和直播电商的增量机会,优先选择具备强大线上营销能力的企业作为投资标的。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:06:02", "modified_time": "2025-08-12 00:06:02", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "4be770e1ecb746d28b581472d15372ad", "experience_type": "text", "when_to_use": "在宏观经济波动或人口结构变化背景下进行行业规模预测时", "content": "基于居民可支配收入增长(如2023年和2024年的增长率分别为16.1%和15.1%)、医疗保健支出增加(2024年达到2,547元,同比增长16.0%)等宏观指标,结合慢性病患病率及亚健康人口基数的变化趋势,估算营养健康行业的潜在市场规模。同时,参考历史CAGR(2019-2024年为5.81%,预计2025-2029年为5.97%)调整未来增速假设,并考虑政策监管对行业规范化的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:06:02", "modified_time": "2025-08-12 00:06:02", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "615ec50dd6944ae98a5a84250ddf1f3e", "experience_type": "text", "when_to_use": "在评估供应链稳定性对企业运营风险的影响时", "content": "关注上游原材料价格波动(如维生素A/E/B2的价格变化)及其背后原因(如巴斯夫工厂爆炸事件导致供应中断)。对于依赖特定原料的企业,需评估其供应商多元化程度及库存管理策略;同时,考察中游制造环节的产能利用率和技术创新能力。如果企业能够快速响应原材料价格波动并优化成本结构,则其抗风险能力较强。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:06:02", "modified_time": "2025-08-12 00:06:02", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5989ec32ee6b415fb9259a881e97502e", "experience_type": "text", "when_to_use": "在评估生物技术领域相关的房地产投资机会时,特别是在实验室空间、医疗设施或长寿诊所等细分市场中。", "content": "生物技术的快速发展正在重塑房地产需求,尤其是对灵活且技术支持的实验室和医疗设施的需求。投资分析应关注具有高天花板(4.5至5.5米)、强大通风系统(每小时6至20次换气率)、以及能够支持重型设备和危险废物管理的建筑结构。此外,地理位置的选择需靠近学术机构、医院和交通基础设施,以满足生物技术公司的运营需求。对于早期高风险生物技术公司,灵活租赁和运营支持可能是吸引租户的关键。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:06:54", "modified_time": "2025-08-12 00:06:54", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "2bb2cda918b1499c89c03ee02cd0983f", "experience_type": "text", "when_to_use": "在制定长期战略规划时,用于识别全球生物技术产业集群的投资潜力,尤其是在研究实力和商业化能力较强的地区。", "content": "通过比较全球领先生物技术产业集群的研究产出、资金获取、人才密度和商业化能力,可以识别具有长期增长潜力的区域。例如,美国、英国和瑞士等地因其强大的研究机构(如QS排名靠前的大学)和活跃的风险投资环境而成为生物技术创新的热点。投资者应优先考虑这些地区的资产配置,同时关注政策支持(如英国MHRA的新指南)对行业发展的催化作用。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:06:54", "modified_time": "2025-08-12 00:06:54", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6b16b08001634722a95230ec63fc6d55", "experience_type": "text", "when_to_use": "在评估新能源行业政策影响时,尤其是在监管行动或政策变动对特定子行业(如光伏、风电)产生直接成本或收益影响的情况下。", "content": "针对多晶硅节能监察等政策性事件,应优先分析其对行业成本结构和供应链效率的长期影响。通过评估政策对单位生产成本、企业利润率及市场集中度的作用,结合区域市场需求(如出口数据)和替代技术进展,可以预测行业未来的盈利能力和投资机会。此外,需关注政策执行时间表及其对企业资本支出计划的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:07:46", "modified_time": "2025-08-12 00:07:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f0fd1856312146ecad12c55197d92267", "experience_type": "text", "when_to_use": "当需要判断新技术商业化进程及其对现有市场竞争格局的潜在颠覆性影响时,例如固态电池的小规模量产预期。", "content": "对于类似固态电池这种高技术壁垒且具有显著商业化延迟的产品,建议采用分阶段评估方法:第一阶段关注供应链成熟度与成本曲线;第二阶段追踪关键厂商的技术突破公告及专利布局动态;第三阶段根据目标市场规模和竞争态势调整估值模型。同时,要充分考虑宏观经济周期和技术采纳曲线之间的耦合效应,避免过度乐观估计早期渗透率。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:07:46", "modified_time": "2025-08-12 00:07:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d104ca11caa84e39ab86638d54413027", "experience_type": "text", "when_to_use": "在能源价格机制改革背景下,分析电价调整如何改变发电企业的财务表现及投资吸引力时。", "content": "面对煤电、气电容量电价上调等政策变化,应当从两个维度展开分析:一是量化电价提升对火电公司EBITDA及自由现金流的直接影响,并将其纳入DCF模型重新测算估值;二是观察政策是否反映了更广泛的能源转型趋势,从而推导出传统能源资产减值风险或新能源投资加速的可能性。此外,还需注意区域性电力供需平衡状态,以区分不同地区火电企业的受益程度。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:07:46", "modified_time": "2025-08-12 00:07:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ecc8b544ac3f4472a50bbdb41cd3e93c", "experience_type": "text", "when_to_use": "在评估住房租赁市场相关政策对投资机会的影响时,特别是在政策出台初期判断市场供需变化和行业格局调整的场景。", "content": "通过分析《住房租赁条例》的核心内容,识别政策对租赁市场参与主体(如个人房东、机构化租赁企业、经纪机构)的行为规范要求及潜在影响。重点关注政策中关于增加租赁住房供给、租金监测机制、信用监管体系等条款,结合市场环境(如高/低波动期或经济周期阶段),预测机构化率提升、租金价格稳定性和市场透明度改善的趋势,从而发现优质企业的投资机会和风险点。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:08:45", "modified_time": "2025-08-12 00:08:45", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d659cdd0b40d4e7ea6bbfa27058465ef", "experience_type": "text", "when_to_use": "在制定与住房租赁相关的资产配置策略时,尤其是在新兴市场或政策驱动型市场的长期战略规划场景。", "content": "利用政策解读中的多渠道供给鼓励措施与机构化发展趋势,结合区域经济发展水平、人口流动数据及城市化进程,评估不同地区租赁住房市场的增长潜力。同时,关注政策对于‘租购同权’的支持力度,判断租赁住房作为资产类别的收益稳定性及其与其他资产类别(如房地产、固定收益)的相关性,优化组合配置以实现风险分散和收益最大化。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:08:45", "modified_time": "2025-08-12 00:08:45", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a086fc5c4344463babc67b50adfa5b15", "experience_type": "text", "when_to_use": "在评估创新药物的市场潜力和投资价值时,特别是在早期临床试验阶段,需要结合药物机制、适应症市场规模以及竞争格局进行综合分析。", "content": "通过分析GLP-1RA+Amylin类似物等新型疗法的临床数据(如减重效果、耐受性指标)和市场动态(如诺和诺德CagriSema的III期临床结果),可以识别具有突破性潜力的药物。重点在于关注多靶点疗法的协同效应、临床数据与商业化前景的关联,同时考虑潜在风险(如仿制药竞争、研发失败)。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:09:49", "modified_time": "2025-08-12 00:09:49", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e09ff8327f4b4baa8393775ba37f7d7c", "experience_type": "text", "when_to_use": "在制定针对化学制药行业的长期投资策略时,需结合经济周期、政策环境和技术创新趋势进行跨周期布局。", "content": "化学制药行业在不同经济周期中的表现差异显著,例如在经济增长放缓时,创新药领域可能因医保控费压力而承压,但具备高壁垒技术(如GLP-1/GIP RA+Amylin类似物)的企业仍能保持增长。因此,应优先选择处于技术前沿且具备全球竞争力的企业,并关注政策支持方向(如国产替代、创新药审批加速)。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:09:49", "modified_time": "2025-08-12 00:09:49", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "4a8b6b886f9b41f4b79f59adab735a22", "experience_type": "text", "when_to_use": "在对新兴市场的医疗健康行业进行风险评估时,需特别关注宏观经济波动、监管环境变化及本地化生产能力。", "content": "新兴市场中化学制药行业的投资机会往往伴随较高不确定性,例如汇率波动、知识产权保护不足和供应链脆弱性。通过案例分析发现,具备本地化生产和研发能力的企业(如博瑞医药的BGM0504+BGM1812联用方案)更能抵御外部冲击。此外,投资者应密切关注全球经济增长预期和地缘政治风险对行业的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:09:49", "modified_time": "2025-08-12 00:09:49", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "397d908436924ad19f74d47a47a08e8e", "experience_type": "text", "when_to_use": "在设计多元化资产配置策略时,需将生物制药领域的创新疗法作为另类投资的重要组成部分,尤其是在高波动市场环境中。", "content": "生物制药领域的创新疗法(如AMYR/GLP-1R双靶点激动剂)因其高成长性和高风险特性,适合作为另类投资的一部分以分散传统资产类别风险。建议通过分阶段投资(如根据临床进展逐步加仓)降低单一项目失败的风险,同时利用组合管理工具优化风险收益比。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:09:49", "modified_time": "2025-08-12 00:09:49", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1af25514087140849159d3ee2a5385f2", "experience_type": "text", "when_to_use": "在评估新兴技术产业政策驱动下的投资机会时,特别是在政府明确支持的行业(如具身智能、机器人等)中寻找潜在受益企业。", "content": "通过分析政策文件中的具体目标(如产业规模、资金补贴比例和应用场景),结合产业链上下游关系,识别关键受益企业。重点关注政策对技术研发、平台建设和应用示范的支持力度,并将其与企业的核心竞争力和技术壁垒挂钩。同时,考虑政策实施的时间表,将投资周期与政策落地节奏相匹配,以最大化政策红利。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:10:30", "modified_time": "2025-08-12 00:10:30", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6f784158d7e34097ad27328d55277bd3", "experience_type": "text", "when_to_use": "在市场处于技术变革或产业升级阶段,需要评估某行业的长期增长潜力及其对相关资产类别的影响时。", "content": "采用‘模型-数据-应用’闭环分析框架,评估行业发展的核心瓶颈(如模型优化、高质量数据不足)以及政策如何解决这些瓶颈。通过分析政策对关键技术攻关的支持力度(如补贴比例、平台建设规划)和典型场景的应用潜力,判断行业的商业化进程和规模化落地的可能性。此外,结合宏观经济环境和市场需求双轮驱动因素,预测行业进入实质性能力跃升的时间点。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:10:30", "modified_time": "2025-08-12 00:10:30", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0132cb35db1e47fba1dfd69a56bc0e4c", "experience_type": "text", "when_to_use": "在进行跨资产类别投资组合调整时,特别是当某一行业政策利好可能引发板块轮动效应时。", "content": "基于政策引导方向,优先选择具有高政策敏感性和强技术壁垒的企业作为投资标的。同时,结合行业投资评级标准(如未来6-12个月的相对基准表现预期),动态调整投资组合权重。建议关注政策扶持领域的龙头公司及其供应链上下游企业,利用政策驱动的市场情绪波动进行战术性配置,同时保持对宏观经济风险和技术进展不及预期风险的警惕。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:10:30", "modified_time": "2025-08-12 00:10:30", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8139d0ce841941cfb1dadb99bdeec3be", "experience_type": "text", "when_to_use": "在评估新兴技术驱动型行业(如人工智能、区块链)的投资机会时,尤其当市场动态快速变化且政策导向显著影响行业发展时。", "content": "通过结合行业数据和政策分析,识别技术领先者及其市场份额变化趋势。例如,在本案例中,通过对AI智能助手赛道的头部产品(如豆包、DeepSeek等)的下载量、日活跃用户数(DAU)及技术能力的多维度分析,可以清晰判断竞争格局和潜在投资标的。此外,关注政策从“互联网+”到“人工智能+”的演进,理解其对行业的长期影响,并将此作为投资决策的重要参考因素。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:11:26", "modified_time": "2025-08-12 00:11:26", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "83fe99255a9a40e7b78b481a72fa0484", "experience_type": "text", "when_to_use": "在进行跨区域市场的资产配置或投资组合调整时,尤其是在发达市场与新兴市场之间权衡技术发展速度、成本优势和政策支持的影响时。", "content": "利用多维度指标(如技术性能、成本结构、市场规模)对比不同市场的竞争力。例如,中国AI模型公司在多模态领域的全球领先地位以及30%的成本优势,表明新兴市场在特定技术领域可能具备超越发达市场的潜力。同时,结合政策支持力度和市场规模,评估技术商业化落地的可能性和时间表,从而优化投资布局。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:11:26", "modified_time": "2025-08-12 00:11:26", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7c83853734414a679ab8bae7d589b97e", "experience_type": "text", "when_to_use": "在制定短期战术交易策略或中期投资组合调整时,尤其是针对高波动性行业(如科技、传媒)中的龙头公司。", "content": "通过分析行业头部公司的月度增速、市占率变化和技术迭代情况,捕捉短期市场情绪和中期趋势。例如,ChatGPT的6.14%月增速和国内AI应用的快速增长,表明市场需求强劲且竞争格局逐步稳定。结合相对收益和绝对收益的历史数据(如1个月、3个月、12个月的表现),可以更精准地把握买卖时机,同时规避因技术不确定性带来的下行风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:11:26", "modified_time": "2025-08-12 00:11:26", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "71341a9f6ad04e0f9a8faccce3d67b50", "experience_type": "text", "when_to_use": "在为客户提供多元化资产配置建议时,特别是涉及股票、另类投资(如AI相关企业)和结构化产品的组合。", "content": "基于行业深度报告和技术发展趋势,为客户推荐具有明确增长逻辑的标的。例如,本案例中提到的快手-W、腾讯控股等公司,不仅受益于AI技术的快速发展,还具备较强的商业化能力。通过结合客户的风险偏好和投资目标,构建以高成长性标的为核心、辅以稳健型资产的组合,能够在控制风险的同时实现超额收益。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:11:26", "modified_time": "2025-08-12 00:11:26", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a5dc9d81b3ae4b2ba0e82e79246b1761", "experience_type": "text", "when_to_use": "在评估证券行业短期表现时,尤其是在市场整体下跌或震荡的环境中。", "content": "通过分析PMI数据及其分项指数(如生产指数、新订单指数等),结合证券板块个股的表现,识别行业高弹性特征,并判断其短期内可能维持震荡格局。同时,关注估值水平是否处于合理区间以辅助决策。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:12:16", "modified_time": "2025-08-12 00:12:16", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "84bf81b966cf460c9b3fbfbef377dcf6", "experience_type": "text", "when_to_use": "在经济复苏基础尚不稳固、制造业和非制造业PMI均出现回落的情况下进行宏观经济分析。", "content": "综合利用制造业与非制造业PMI数据,解析不同规模企业及细分行业的景气度变化,评估经济上行压力和复苏韧性。特别注意建筑业和服务业内部分化的表现,为投资策略提供宏观依据。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:12:16", "modified_time": "2025-08-12 00:12:16", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "be2759c2d563416d92404b06577908e1", "experience_type": "text", "when_to_use": "当制定针对证券行业的中期投资策略时,特别是在熊市或横盘市场中。", "content": "基于历史估值对比(如2022年以来的估值趋势)以及当前市场波动性,建议采取谨慎态度,避免过度依赖单一行情反弹预期,同时警惕政策风险和市场系统性风险对证券板块的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:12:16", "modified_time": "2025-08-12 00:12:16", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f01966f2562440828a152746dab0cbcd", "experience_type": "text", "when_to_use": "在需要快速筛选证券行业内相对强势或弱势标的时,例如日内交易或短期战术操作场景。", "content": "利用周度涨跌幅排名前后的个股名单,结合图形化展示的数据(如图1至图4),迅速锁定表现突出或落后的公司,为进一步深入研究或仓位调整提供方向。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:12:16", "modified_time": "2025-08-12 00:12:16", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c12c7d46bd474c51b3738bedaf02c4af", "experience_type": "text", "when_to_use": "在跨资产类别配置过程中,特别是涉及股票和固定收益产品之间的轮动决策。", "content": "根据PMI中的分类指数(如供应商配送时间、原材料库存等)推断供应链效率及成本压力,结合非制造业销售价格指数,预测通胀或通缩风险,从而优化股债配比以应对潜在市场条件变化。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:12:16", "modified_time": "2025-08-12 00:12:16", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a80a753aaa934ab0a37993470e1ead63", "experience_type": "text", "when_to_use": "在评估新兴消费趋势驱动的投资机会时,特别是在文化IP衍生品和二次元经济相关领域。", "content": "通过分析IP为核心的文化消费市场(如谷子经济),识别具有高增长潜力的细分赛道。重点关注Z世代消费行为、国产IP崛起、以及线上线下渠道融合的趋势。结合市场规模预测、消费者画像(如女性向、年轻化)和产业链结构(上游IP开发、中下游生产销售),筛选具备差异化竞争壁垒的企业进行投资布局。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:13:22", "modified_time": "2025-08-12 00:13:22", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ff2fa732444043979293e8500ef86c26", "experience_type": "text", "when_to_use": "在制定全球化战略或跨境投资决策时,针对文化产业出海相关的资产配置。", "content": "利用国产IP出海的成功案例(如《原神》、《黑神话:悟空》),评估文化产品的国际化叙事能力与全球市场接受度。关注企业在海外市场的品牌建设、本地化运营策略及多平台分发能力。同时,监测目标市场的政策环境、文化偏好和知识产权保护机制,以降低合规风险并提升投资回报率。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:13:22", "modified_time": "2025-08-12 00:13:22", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b02d3a9fb40940c8a1aafc26a35c1da0", "experience_type": "text", "when_to_use": "在行业竞争格局快速变化的情况下,选择细分龙头公司进行长期价值投资。", "content": "基于市场份额、商业模式创新(如盲盒营销)、自有IP孵化能力等维度,评估行业头部企业的核心竞争力。例如,泡泡玛特凭借强大的IP矩阵和全渠道销售网络,在潮玩领域占据领先地位;布鲁可通过绑定奥特曼IP实现快速增长。需特别关注企业是否能够持续推出爆款产品,并抵御新进入者带来的竞争压力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:13:22", "modified_time": "2025-08-12 00:13:22", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8304595a070041d6b9c18b4a077e8484", "experience_type": "text", "when_to_use": "在宏观经济波动或可选消费承压期间,调整投资组合的风险敞口。", "content": "考虑宏观经济下行对娱乐消费需求的影响,尤其是价格敏感型客群(如Z世代)。建议优先配置抗周期属性强的标的,例如符合“口红效应”的低价高情绪价值商品(如吧唧、卡牌)。同时,动态跟踪居民可支配收入增速、消费信心指数等指标,及时优化持仓以规避系统性风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:13:22", "modified_time": "2025-08-12 00:13:22", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "67e62ceecbeb4213b42ec112a16d0b03", "experience_type": "text", "when_to_use": "在评估科技行业巨头的财报表现及其对未来市场影响时,特别是在高资本支出和AI技术快速迭代的背景下。", "content": "通过分析微软、Meta、亚马逊和谷歌等科技巨头的财报数据,重点关注其资本支出增长趋势(如微软下一季度资本开支预计提升至300亿美元以上)以及AI相关业务收入占比(如Azure云服务全年营收首次突破750亿美元)。这些指标不仅反映了公司在技术研发和基础设施上的投入力度,还能揭示未来行业的竞争格局和技术发展方向。建议结合宏观经济周期与板块轮动规律,判断此类投资是否具有长期战略价值,并据此调整资产配置策略。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:14:19", "modified_time": "2025-08-12 00:14:19", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6004bb34b1ec44909087747b049c62bf", "experience_type": "text", "when_to_use": "在制定基于AI大模型升级的投资组合策略时,尤其是在新兴技术和算力需求快速增长的领域。", "content": "从智谱、阿里和OpenAI等公司发布的最新AI模型进展中提取关键信息,例如GLM-4.5的混合专家架构参数规模、API调用成本优势,以及ChatGPT StudyMode的功能特性。这些细节表明AI模型正向更高效、低成本方向发展,同时应用场景更加丰富。投资者应关注与算力基础设施(如寒武纪、海光信息)和AI应用层(如金山办公、科大讯飞)相关的标的,以捕捉技术落地带来的增长机会。此外,需警惕技术创新不及预期或行业竞争加剧的风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:14:19", "modified_time": "2025-08-12 00:14:19", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "71f84efb2bb24b64a792d939f0806e83", "experience_type": "text", "when_to_use": "在不同市场环境下选择合适的股票投资评级方法论时,特别是针对成长型科技股的短期和中期表现预测。", "content": "根据报告中的相对评级体系(如‘增持’定义为股价表现将强于基准指数5-20%),结合具体个股的基本面分析(如营收增速、净利润增长率)及估值水平,建立动态调整机制。例如,在当前北美科技巨头资本开支持续加码且AI技术快速迭代的背景下,可优先考虑给予算力和AIDC领域的优质标的‘增持’评级。但需要注意的是,市场环境变化(如政策推进不及预期或下游景气度下降)可能对评级结果产生重大影响,因此应及时更新假设条件并重新校准模型。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:14:19", "modified_time": "2025-08-12 00:14:19", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "98cbfe75e180415b9794366042a070de", "experience_type": "text", "when_to_use": "在评估汽车行业投资机会时,尤其是在政策驱动的市场环境下,如以旧换新补贴或新能源汽车行业发展政策支持。", "content": "利用政策导向分析框架(例如消费品以旧换新资金下达、新能源行业整治成效等)结合历史销量数据与趋势预测,识别政策对汽车消费的直接推动作用,并关注具备技术优势和差异化竞争能力的龙头企业。同时,考虑政策执行周期(如6月电动重卡突击上牌导致7月环比下降)对短期市场波动的影响,调整预期并优化投资时机。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:15:18", "modified_time": "2025-08-12 00:15:18", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "4f4ce3f68c994a1ea1adba381f131f67", "experience_type": "text", "when_to_use": "在进行跨资产类别配置决策时,特别是在高景气度行业(如智能汽车、机器人、重卡)中寻找优质标的。", "content": "通过细分领域渗透率(如L2及以上辅助驾驶功能装车率超过50%)、产业链上下游协同效应以及核心零部件供应商的技术积累情况,筛选出具有长期增长潜力的公司。此外,关注区域市场需求变化(如欧美各国销量同比及环比数据),将全球布局能力强的企业作为优先选择对象,并对其估值水平(如PE、PS)与成长性进行动态平衡分析。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:15:18", "modified_time": "2025-08-12 00:15:18", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1e66cf01328a4f778ca6a210048359fe", "experience_type": "text", "when_to_use": "在复杂经济周期下制定风险控制策略,尤其是面对原材料价格波动或终端需求不确定性较高的环境。", "content": "建立多维度风险预警机制,包括监测关键原材料(如钢材、铜、铝)的价格走势,结合宏观经济指标(如布伦特原油期货价格)评估成本压力传导路径;同时跟踪终端需求实际落地情况(如新能源车充电设施覆盖率提升至97.08%),确保收入端稳定性。针对不同板块设定灵活的风险敞口限制,例如在低需求弹性但高政策依赖性的重卡行业中保持适度保守仓位。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:15:18", "modified_time": "2025-08-12 00:15:18", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "78b796fab80a42f38702b19c71c8c05a", "experience_type": "text", "when_to_use": "在评估欧洲化工行业投资机会时,尤其是在能源价格高企和碳中和政策背景下。", "content": "通过分析欧盟化学品行业的市场动态、能源成本结构以及环保法规的长期影响,可以判断该行业的未来盈利能力和投资风险。例如,由于俄乌冲突导致能源价格上涨,欧洲化工企业面临显著的成本压力,同时碳排放交易体系(EU-ETS)和碳关税(CBAM)进一步增加了企业的运营负担。建议投资者优先关注那些能够快速适应能源转型和技术升级的企业,并规避受高能耗和严格监管影响较大的资产。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:16:11", "modified_time": "2025-08-12 00:16:11", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ea43825d96c746c99d9ad3b69e60f9e1", "experience_type": "text", "when_to_use": "在全球化背景下,比较不同地区化工行业的竞争力,特别是发达市场与新兴市场的对比分析。", "content": "通过对全球化学品市场份额变化、资本开支增速和研发支出的数据分析,可以识别出各地区的竞争优势与劣势。例如,中国在过去十年中占据了全球化学品销售额的43%,并且其资本开支和研发支出增速远超欧盟和美国。这表明新兴市场的快速增长正在挤压传统化工强国的市场份额。因此,在进行跨国投资决策时,应优先考虑具备技术优势和政策支持的新兴市场龙头企业,同时审慎对待欧洲等成熟市场中的落后产能。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:16:11", "modified_time": "2025-08-12 00:16:11", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "05e3291c8ca3444fab13d3ada4019ad9", "experience_type": "text", "when_to_use": "在制定针对特定行业或公司的退出策略时,尤其是面对高能源成本和市场需求疲软的情况。", "content": "结合宏观环境(如能源价格波动、碳税政策)和微观因素(如企业财务健康状况、产能利用率),可以设计有效的资产剥离或重组方案。例如,陶氏化学、利安德巴塞尔等化工巨头纷纷关闭欧洲高能耗工厂,以优化资源配置并提升整体盈利能力。这种做法为其他面临类似困境的公司提供了参考:在需求疲软且生产成本高昂的情况下,及时退出非核心业务或低效资产是保护股东价值的关键手段。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:16:11", "modified_time": "2025-08-12 00:16:11", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3793a80c4e624bcaa558404d95ad2402", "experience_type": "text", "when_to_use": "在预测某一行业未来发展趋势时,特别是在政策驱动型行业中(如碳中和目标下的化工行业)。", "content": "利用历史数据(如温室气体排放量与产量的关系)和前瞻性政策解读(如REACH法规修订提案),可以构建合理的行业趋势模型。例如,从1990年到2022年,欧盟化学工业成功实现了产量增长的同时大幅减少了温室气体排放,但自2015年以来,产量与排放量同步下降,反映出更严格的环保政策可能限制未来的扩张潜力。因此,在制定长期战略规划时,需充分考虑政策导向对行业发展的深远影响,并提前布局低碳技术和可持续解决方案。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:16:11", "modified_time": "2025-08-12 00:16:11", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d8d64ce8f28544b0b97cf57a65f0fc8f", "experience_type": "text", "when_to_use": "在评估新兴生物技术公司(如重组胶原蛋白企业)的投资机会时,特别是在快速增长的细分市场中。", "content": "通过分析行业生命周期、市场规模增速和竞争格局,优先关注具备稀缺性和技术壁垒的企业。例如,锦波生物作为国内首个获批三类械重组胶原蛋白产品的公司,其先发优势和技术壁垒使其在医美领域具备显著的竞争优势。投资应聚焦于拥有核心专利、高研发投入比例以及明确监管审批路径的企业,同时结合政策支持度(如国家药监局优先审批)来判断市场准入的确定性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:17:05", "modified_time": "2025-08-12 00:17:05", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "243e73b1346d40e8be0e37cc3db811d2", "experience_type": "text", "when_to_use": "在进行跨资产类别配置时,特别是针对具有高增长潜力但伴随较高不确定性的行业赛道(如功效性护肤品和医用敷料)。", "content": "采用自上而下的宏观分析与自下而上的企业基本面研究相结合的方法。首先,通过宏观经济趋势(如女性消费能力提升、私密健康意识增强)识别长期增长驱动力;其次,筛选具备多品牌矩阵和丰富产品线的龙头企业(如巨子生物),并通过其历史财务数据(如营收CAGR、净利润率)验证其盈利能力。此外,评估企业在不同经济周期中的抗风险能力,确保组合的稳健性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:17:05", "modified_time": "2025-08-12 00:17:05", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c0f1f333057e44caab18cdea44fb7163", "experience_type": "text", "when_to_use": "在制定长期战略规划时,尤其是涉及技术创新驱动型行业的未来市场渗透率预测。", "content": "利用行业权威数据(如弗若斯特沙利文报告)和对标国际领先企业的经验,构建分阶段增长模型。例如,在预测重组胶原蛋白在医美注射剂市场的渗透率时,需考虑消费者教育程度、产品认知度提升速度及市场竞争动态。同时,建立敏感性分析框架,模拟不同假设条件下的市场空间变化,以提高预测的弹性与可靠性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:17:05", "modified_time": "2025-08-12 00:17:05", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3fedc4a14952414f946f8b17a578dd60", "experience_type": "text", "when_to_use": "在评估受政策或监管变化影响的特定商品(如战略矿产)价格波动时,特别是在出口管制、走私打击等政策因素显著影响供需动态的情况下。", "content": "通过分析政策实施对市场供需和价格的影响,构建边际供需平衡表以量化关键变量的变化。例如,考虑出口量、进口量及下游需求(如光伏玻璃产能)的环比变化,预测价格拐点。同时,密切关注政策执行的阶段性成果和官方表态,判断供需修复的时间窗口。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:17:54", "modified_time": "2025-08-12 00:17:54", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "4db6265c996e439e9f3cee8583cd59f0", "experience_type": "text", "when_to_use": "在高内外价差导致非法贸易(如走私)激增的市场环境中,评估合规出口修复的可能性及其对价格的潜在影响。", "content": "利用历史数据验证走私行为与价差之间的关系,并通过政策导向的转变(如从严厉打击到合理许可审批)推断合规出口的恢复节奏。结合行业专家意见和实际出口数据,调整供需模型中的关键假设,提升预测准确性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:17:54", "modified_time": "2025-08-12 00:17:54", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d1bd58e6a24343d0a83945083f6d7121", "experience_type": "text", "when_to_use": "在多因素驱动的价格周期中(如出口、进口、下游需求共同作用),需要捕捉价格拐点并制定投资建议时。", "content": "采用分阶段复盘方法,识别每个阶段的核心驱动因素(如出口下滑、光伏需求修复、走私打击等),并通过边际供需测算表验证拐点的可靠性。将历史拐点与当前数据对比,确保预测逻辑的一致性,并结合行业评级提供明确的投资建议。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:17:54", "modified_time": "2025-08-12 00:17:54", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d548a5e79f5546d89025082a7ad85895", "experience_type": "text", "when_to_use": "在评估新兴技术(如人工智能)对经济和财政的潜在影响时,特别是在市场环境处于结构性转型或高增长阶段。", "content": "通过分析宏观经济指标(如GDP增速、行业增长率)与财政数据(如税收收入、支出结构),结合供给侧和需求侧的动态变化,识别技术驱动型产业对经济增长的核心贡献。例如,信息传输、软件和信息技术服务业的增长显著高于整体经济增速,表明该领域正在成为新质生产力的核心载体。同时,关注政策支持(如补贴、税收优惠)和资金流向(如再贷款额度、产业基金)以判断产业发展潜力及其对财政韧性的支撑作用。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:18:40", "modified_time": "2025-08-12 00:18:40", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "103a4dedaf4e4f6dbe0705763ea95a1a", "experience_type": "text", "when_to_use": "在制定投资策略时,特别是针对科技相关行业(如人工智能、半导体)或需要平衡短期回报与长期潜力的资产配置场景。", "content": "利用行业收入趋势数据(如人工智能上市公司TOP4的营收增长)和政策导向(如设备更新支持、未来产业布局),结合市场终端需求(如消费品以旧换新拉动的销售额增长),评估技术应用的实际落地能力和市场接受度。同时,注意规避周期匹配问题,例如避免因过度追求短期回报而忽略研发周期长但潜力大的企业,从而降低估值泡沫风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:18:40", "modified_time": "2025-08-12 00:18:40", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6d56410838694c33b9e7a24dc6d8b375", "experience_type": "text", "when_to_use": "在进行风险评估时,特别是在涉及供应链稳定性、国际局势复杂性以及技术垄断等外部环境不确定性较高的场景中。", "content": "通过分析供应链关键节点(如高性能芯片供给)的地缘政治和技术依赖性风险,结合国际协作倡议(如世界人工智能合作组织的成立)及本地化生态布局(如算力券、模型券发放),评估技术产业链的脆弱性和抗风险能力。同时,警惕补贴标准界定不清可能引发的寻租行为,并建议采用尽调和分类管理机制来优化资源配置。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:18:40", "modified_time": "2025-08-12 00:18:40", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3bab6d6a1f5744f4ad05b776308ca7a6", "experience_type": "text", "when_to_use": "在评估科技行业(如半导体和AI芯片)的市场动态时,特别是在涉及全球供应链变化与贸易摩擦影响的场景中。", "content": "分析全球供应链转移对特定行业的影响时,应综合考虑区域制造能力、关税政策变化及跨国企业战略布局。例如,报告中提到印度智能手机生产份额的显著增长,表明供应链重组可能带来区域性投资机会。建议结合宏观数据(如出货量趋势)与微观事件(如公司财报和技术突破)进行交叉验证,并关注由此引发的市场重新定价机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:19:50", "modified_time": "2025-08-12 00:19:50", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c3a30f0fadd24b3ca44988cfc0ec1db1", "experience_type": "text", "when_to_use": "当需要识别短期交易机会或制定日内至中期的投资策略时,特别是针对高波动性资产类别(如科技股或与AI相关的映射指数)。", "content": "通过跟踪细分指数(如英伟达映射指数、服务器ODM指数)及其成分股表现,可以快速捕捉资金流向和板块轮动信号。例如,本周英伟达映射指数上涨14.1%,其中个别标的涨幅超过30%,显示了技术映射概念的强吸引力。建议利用技术分析工具(如相对强弱指标RSI)结合基本面驱动因素筛选潜在标的,并设置明确止损点以控制下行风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:19:50", "modified_time": "2025-08-12 00:19:50", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9752fcb5b52f4ecab93370ea2ae4ce35", "experience_type": "text", "when_to_use": "在进行长期战略规划或配置成长型资产时,尤其是在科技巨头加速布局新兴领域(如AI基础设施)的背景下。", "content": "关注大型科技公司(如苹果、微软)在财报中披露的战略重点,这些信息往往预示未来资本支出方向和产业链受益环节。例如,苹果宣布加大AI领域投资,包括扩建数据中心,这将直接利好相关硬件供应商和服务提供商。建议围绕核心受益标的构建投资组合,并定期审视其财务健康度与估值水平,确保符合长期回报预期。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:19:50", "modified_time": "2025-08-12 00:19:50", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1eadd789d2d24114bdee6c5c6a3dc68c", "experience_type": "text", "when_to_use": "在风险管理过程中,需平衡上行与下行风险,尤其是在面临系统性不确定性(如国际贸易摩擦或宏观经济放缓)时。", "content": "建立多层次的风险预警机制,涵盖宏观经济指标、行业数据以及个股敏感性分析。例如,报告提到中美贸易摩擦加剧可能导致下游需求不及预期,而AI应用增速加快则构成上行催化剂。建议根据情景假设调整仓位结构,同时引入对冲工具(如期权或反向ETF),以降低极端市场条件下的损失敞口。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:19:50", "modified_time": "2025-08-12 00:19:50", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "414438e71ec346d882177dee1dbbf77f", "experience_type": "text", "when_to_use": "在评估住房租赁市场相关政策对投资机会的影响时,特别是在政策出台初期或重大监管变化后。", "content": "通过分析《住房租赁条例》的多维度影响(如供给端增加、机构化率提升和租金监测机制),识别政策驱动下的长期投资机会。重点关注政策对市场化供应的鼓励、行业合规门槛提高以及信用监管体系的建立,这些因素将推动优质企业脱颖而出并提升市场透明度。投资者应优先关注具备专业化运营能力的头部企业和租赁住房REITs等金融产品,同时警惕短期内因不合规房源退出导致的区域性租金波动。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:21:23", "modified_time": "2025-08-12 00:21:23", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "af182ffb9d3f4a1e933c91a6b501d4f2", "experience_type": "text", "when_to_use": "在进行房地产相关资产配置或投资策略设计时,尤其是在考虑不同经济周期下租赁市场的表现时。", "content": "结合政策背景与市场动态,构建基于经济周期的租赁市场投资框架。例如,在经济增长放缓或人口流入较大的城市,租赁需求可能更为稳定,而保租房和机构化长租公寓将成为重要的供给来源。此外,稳定的租金收益和透明的租金监测机制为租赁住房REITs提供了可靠的底层资产支持。投资者应在经济下行周期中加大对租赁市场的配置比例,并关注政策扶持区域(如新市民聚集区)的投资潜力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:21:23", "modified_time": "2025-08-12 00:21:23", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b3c070d9722942259a391b43da98e024", "experience_type": "text", "when_to_use": "在评估科技公司(特别是涉及AI和高性能计算领域)的季度业绩时,尤其是当这些公司推出新产品或服务并面临复杂市场环境(如出口管制、库存减值等)时。", "content": "通过分析AMD FY2Q25的业绩表现,可以提炼出一套针对科技企业的多维度分析框架:1)按业务板块拆解收入与利润,识别增长驱动力(如数据中心、客户端与游戏、嵌入式业务);2)关注新产品的导入速度及其对短期和中期收入的影响(如MI355的大规模爬坡预期);3)评估外部因素(如出口管制对MI308的影响)对公司财务表现的潜在冲击,并量化其影响(如8亿美元库存减值)。此方法适用于高技术壁垒行业的公司分析,尤其是在产品周期快速变化的情况下。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:22:24", "modified_time": "2025-08-12 00:22:24", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "bcc5a2ab0f634d8690d998ec7babeabd", "experience_type": "text", "when_to_use": "在制定投资建议时,特别是针对高科技硬件及AI相关领域的成长型股票,且需要平衡短期波动与长期机会。", "content": "通过对AMD的战略布局(如MI400系列和Helios平台的开发进展)进行分析,可总结出一种分层评估方法:1)短期聚焦于现有产品的商业化进展(如MI355的客户兴趣和部署节奏);2)中期关注下一代产品的竞争力(如MI400相对于竞品的技术优势)及其市场潜力;3)长期评估公司在行业中的战略定位(如数百亿美元的机会窗口)。同时,应结合估值倍数和风险因素(如需求疲软、竞争加剧)形成全面的投资观点。这种方法适合用于高科技行业中具有明确技术路径和长期增长逻辑的公司。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:22:24", "modified_time": "2025-08-12 00:22:24", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f05b325b04b14b858e887b8a331e3037", "experience_type": "text", "when_to_use": "在评估科技公司资本支出(CapEx)趋势及其对云服务和AI相关业务的影响时,尤其是在云计算、AI基础设施需求高涨的市场环境中。", "content": "通过分析微软、谷歌、Meta等科技巨头的资本支出数据,发现其与AI算力需求高度相关。例如,微软FY26Q1资本支出预计超过300亿美元,主要投向GPU、服务器和数据中心,以支持Azure云业务的增长;同时Meta上调全年资本支出至660-720亿美元,用于服务器和AI集群建设。这表明,在高增长技术领域,资本开支是驱动未来收入增长的核心因素,特别是在AI商业化加速阶段。建议关注资本开支增速与业务收入增速的相关性,并结合行业供需动态判断投资机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:23:24", "modified_time": "2025-08-12 00:23:24", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f0f65452b64141a8ba0218547a2376f6", "experience_type": "text", "when_to_use": "在分析企业广告业务的盈利能力和广告转化率提升潜力时,尤其是在生成式AI赋能广告优化的场景下。", "content": "Meta的案例显示,生成式AI显著提升了广告转化率,Instagram广告转化率提升约5%,Facebook提升约3%。这种技术赋能不仅推动了广告单价(ARPU)的增长,还增强了用户参与度与时长,从而进一步拉动广告收入。在类似场景中,可以通过量化AI功能对核心业务指标(如转化率、用户留存率)的贡献,评估企业的商业化潜力及盈利能力。此外,应特别关注AI工具的应用比例和渗透率,作为预测未来增长的重要信号。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:23:24", "modified_time": "2025-08-12 00:23:24", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7a79224d284b4f268d4a0078bbe1cf63", "experience_type": "text", "when_to_use": "在评估新兴SaaS公司IPO的投资价值时,特别是在设计协作、生产力工具等垂直应用领域。", "content": "Figma上市首日涨幅超250%,反映出市场对其产品力和商业模式的高度认可。其成功的关键在于:1)清晰的目标市场定位(TAM为330亿美元),覆盖全球设计师及非设计师群体;2)连续两个季度实现盈利,展现出良好的财务健康状况;3)月活跃用户超过1300万,且ARR超过10万美元的付费客户数量持续增长。对于类似SaaS公司的估值分析,可重点关注其用户增长、净美元留存率(NDR)以及盈利能力,结合市场情绪和技术壁垒进行综合判断。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:23:24", "modified_time": "2025-08-12 00:23:24", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "fbc272ab3d644ad2a020a60bcd889cf9", "experience_type": "text", "when_to_use": "在研究AI模型性能对特定行业应用的潜在影响时,尤其是需要解决复杂推理、代码生成或科学计算任务的场景。", "content": "智谱发布的GLM-4.5模型在推理、编码和智能体能力上表现突出,成为国产开源SOTA模型的代表。其混合专家架构(总参数量3550亿)和低成本API调用策略(输入0.8元/百万tokens)使其在真实代码智能体评测中领先国内同行。在选择AI技术供应商或投资标的时,需重点考察模型的技术优势(如推理速度、多任务处理能力)、成本效益比以及应用场景适配性。此外,开源生态系统的活跃度和开发者社区规模也是衡量长期竞争力的重要维度。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:23:24", "modified_time": "2025-08-12 00:23:24", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a75782fc8e084f269d00274f5e096026", "experience_type": "text", "when_to_use": "在评估新兴市场中的高增长行业投资机会时,特别是在技术驱动型消费产品领域(如电动智能行李箱)。", "content": "通过分析政策法规、技术趋势和消费者行为的交叉影响,识别行业的长期增长潜力。重点关注锂电池安全标准、智能化功能的技术成熟度以及区域市场的差异化需求,结合产业链优势和政策支持预测市场容量与竞争格局。确保在投资决策中纳入合规性评估和标准化进程的影响,以降低政策风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:24:15", "modified_time": "2025-08-12 00:24:15", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8265817564624158b8cb8e5222d03565", "experience_type": "text", "when_to_use": "在进行跨国市场扩展战略规划时,特别是针对不同地理范围(如发达市场与新兴市场)的产品定位和营销策略调整。", "content": "根据不同市场的消费者偏好、监管环境和渠道特性制定分层策略。例如,在北美和欧洲市场强调高端化、环保属性和数据隐私合规,而在亚太市场则注重性价比和基础智能功能的可靠性。利用线上渠道的高效覆盖能力推动市场渗透,同时通过线下体验式营销增强品牌忠诚度。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:24:15", "modified_time": "2025-08-12 00:24:15", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "27f6c2c44a694d1393492cf6b9abe106", "experience_type": "text", "when_to_use": "在评估技术创新对行业竞争格局的影响时,特别是在物联网、人工智能等技术快速迭代的领域。", "content": "跟踪技术发展曲线,评估新兴技术(如AI算法、能量回收系统)如何提升产品附加值和用户体验。通过对比头部企业的研发方向和技术储备,判断技术壁垒的可持续性,并预测未来可能的颠覆性创新。同时,关注技术标准化的推进速度及其对行业洗牌的潜在影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:24:15", "modified_time": "2025-08-12 00:24:15", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "fd82448666a945c1aab715454760aa35", "experience_type": "text", "when_to_use": "在执行风险评估和合规性审查时,特别是在涉及复杂监管框架的行业(如航空运输相关产品)。", "content": "建立全面的合规性评估框架,包括国际航空运输协会(IATA)标准、电磁兼容性测试和机械安全认证等关键要素。在产品设计阶段前置合规性考量,采用经过认证的核心组件(如UL认证电池),并持续跟踪政策更新以调整风险管理策略。优先选择具备标准化能力和技术储备的企业作为投资标的。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:24:15", "modified_time": "2025-08-12 00:24:15", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d375d11703894874a0eb2325fa7b1963", "experience_type": "text", "when_to_use": "在评估半导体行业公司(如英飞凌)的周期性表现和库存管理策略时,特别是在市场从下行周期逐步复苏的阶段。", "content": "在分析半导体行业的周期性表现时,需结合收入增长率、库存周转天数及毛利率变化等关键指标。例如,英飞凌通过审慎的库存管理策略,在市场复苏初期维持较高库存水平以确保及时响应需求,同时通过结构性成本优化项目提前显现成效,提升毛利率。这种精细化管理能力可作为其他周期性行业公司在类似环境下的参考。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:25:04", "modified_time": "2025-08-12 00:25:04", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a3f259d713fc43e8bb2193d21810595b", "experience_type": "text", "when_to_use": "在预测AI相关技术对公司业绩的长期拉动作用时,特别是针对提供AI服务器电源解决方案的企业。", "content": "分析AI相关业务的增长潜力时,应关注具体技术应用场景与领先客户的合作深度。例如,英飞凌与NVIDIA合作开发800V高压直流供电架构,显著提升了能效并支持大规模GPU部署需求。这种技术积累和市场领导力表明,AI相关营收预测不仅依赖市场需求增长,还需评估企业在前沿技术领域的竞争优势和技术壁垒。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:25:04", "modified_time": "2025-08-12 00:25:04", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "116adbd114eb467081d062f5c2762c44", "experience_type": "text", "when_to_use": "在制定跨区域投资策略时,特别是涉及发达市场与新兴市场的半导体企业投资组合调整。", "content": "在分析不同地理范围内的市场动态时,需考虑监管框架、货币波动及本地市场需求差异。例如,英飞凌的多元化业务布局覆盖汽车、工业电力和AI服务器等领域,其各业务板块在不同区域的表现存在显著差异。投资者应根据区域经济周期、政策支持和技术应用成熟度,灵活调整投资权重以最大化收益并规避风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:25:04", "modified_time": "2025-08-12 00:25:04", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "2e49476d9da84404a92243cbd6875ca7", "experience_type": "text", "when_to_use": "在评估高科技行业(如半导体、汽车电子)投资机会时,特别是在分析车载SOC芯片市场趋势和竞争格局时。", "content": "通过分析技术演进路径(如从CNN到Transformer+BEV再到端到端大模型)对算力需求的影响,识别出高算力芯片的市场需求增长点,并结合国产替代趋势,预判相关企业的市场份额变化和盈利潜力。同时,关注政策支持、技术迭代速度和下游车企合作动态,作为投资决策的核心变量。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:26:15", "modified_time": "2025-08-12 00:26:15", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5ac19af404284feb95067f7aff558293", "experience_type": "text", "when_to_use": "在制定多元化资产配置策略时,考虑宏观经济周期和行业渗透率对特定领域(如智能座舱、自动驾驶)投资回报的影响。", "content": "利用行业渗透率数据(如新能源汽车突破50%渗透率进入后期大众市场)结合宏观经济复苏预期,判断相关领域的成长性和波动性。例如,在经济复苏初期优先配置高成长性的智能座舱SOC芯片企业,而在经济不确定性较高时,选择具备稳定现金流和成熟产品的龙头企业以降低风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:26:15", "modified_time": "2025-08-12 00:26:15", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0cc634c3f9204c54b3f50c7978f50a90", "experience_type": "text", "when_to_use": "为客户提供关于新兴技术领域(如AI芯片、机器人)的咨询服务时,需提供清晰的技术发展路径和市场机会分析。", "content": "结合具体案例(如地平线、黑芝麻等企业的业务布局),为客户梳理从技术研发到商业化落地的关键节点。例如,强调软硬一体化能力在“智驾平权”趋势下的重要性,并建议关注具备全栈解决方案能力的企业,因其在技术快速迭代中更具适应性和扩展性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:26:15", "modified_time": "2025-08-12 00:26:15", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d03c381df619465f8e19f9dfbb52a84b", "experience_type": "text", "when_to_use": "在评估房地产行业信用风险时,特别是在市场处于深度调整、库存压力高企且需求疲软的环境下。", "content": "通过分析供需两端的核心指标(如土地成交面积、新开工面积、销售数据和库存去化周期),结合房价趋势与政策效应衰减的时间节点,可以更准确地判断行业的短期企稳可能性和长期下行压力。特别关注核心城市核心区域的土地热度和三四线城市的去化压力,这些是市场分化的关键信号。此外,需将政策宽松的短期提振效果与长期结构性挑战区分开来,以避免高估复苏潜力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:27:10", "modified_time": "2025-08-12 00:27:10", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d5349f6df4a24c4783684d6fd42bb7aa", "experience_type": "text", "when_to_use": "在分析房企融资能力及信用风险时,尤其是在行业整体流动性紧张、不同所有制企业融资资源差异显著的情况下。", "content": "优先关注国有房企与民营房企的融资结构差异,尤其是境内信用债发行规模和净融资情况的变化。对于民营房企,需重点评估其是否具备中债增担保资格及其境外再融资环境的改善可能性。同时,通过债券到期分布和内生现金流(如销售回款)的匹配程度,量化偿债压力并识别潜在违约风险。此外,在亏损面扩大和资产减值计提增加的背景下,需警惕存货质量对流动性的进一步拖累。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:27:10", "modified_time": "2025-08-12 00:27:10", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "67cd877d71d84298abe37a4c71eb9533", "experience_type": "text", "when_to_use": "在进行宏观经济与房地产市场的联动分析时,特别是经济增速放缓、人口结构变化和城镇化减速等长期因素对房地产预期形成压制的情况下。", "content": "将房地产市场表现与宏观经济指标(如M2增速、社融规模和LPR变化)相结合,分析货币政策宽松的实际传导效果。同时,考虑长期结构性因素(如出生率下降、老龄化加速和城镇化减速)对需求端的持续影响,并将其作为判断行业周期性调整方向的重要依据。在制定投资或风险策略时,应区分短期政策刺激与长期基本面变化的影响权重,以优化决策的时效性与稳健性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:27:10", "modified_time": "2025-08-12 00:27:10", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "771ce3b69bd54d988ea9e10f4d192d89", "experience_type": "text", "when_to_use": "在评估创新药行业的投资价值时,尤其是在政策驱动和市场情绪高涨的背景下(如医保政策支持、新药首发价格机制等)。", "content": "通过分析行业政策动态(如国家医保局座谈会内容、新药首发价格机制)与市场表现(如恒生医疗保健指数上涨22.8%),结合资金流向数据(如港股南向资金净买入回升至1300亿),可以识别出政策支持与市场情绪共振带来的投资机会。重点关注子板块估值水平(如PEG比率)及其未来增长潜力,优先选择低估值但高增长预期的领域(如医疗器械和CRO)。此外,跟踪重大BD交易(如License-out合作、跨国药企授权协议)可进一步验证行业景气度。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:28:25", "modified_time": "2025-08-12 00:28:25", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "73cf4c26873346e6b16001fb0aaeab2c", "experience_type": "text", "when_to_use": "在制定跨市场资产配置策略时,特别是在对比发达市场与新兴市场的医药行业表现时(如港股与A股医药板块的差异)。", "content": "利用多市场数据(如恒生医疗保健指数与沪深300医药生物指数的表现对比)评估不同市场的相对吸引力。港股医药板块由于国际化程度较高,可能更受全球投资者青睐;而A股则受国内政策影响更大(如医保目录调整、商业健康险创新药品目录)。根据市场环境(牛市/熊市)和时间跨度(短期战术 vs 长期战略),灵活调整配置比例。例如,在政策利好频出的牛市中,增加港股医药板块权重;而在经济不确定性较高的时期,优先选择A股中防御性较强的子行业(如中药和医疗服务)。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:28:25", "modified_time": "2025-08-12 00:28:25", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b224bf24c2d64d94bb666c2912e86e62", "experience_type": "text", "when_to_use": "在进行行业基本面分析时,尤其是涉及复杂产业链的医药行业(如CXO、生物科技、制药等)。", "content": "采用自上而下的分析框架:首先关注宏观政策导向(如医保支持创新药械系列座谈会的主题),其次分析中观行业趋势(如海关出口数据中的医疗器械增速),最后聚焦微观企业动态(如重大BD交易和研发投入进展)。结合定量指标(如PE/EPS增速、PEG比率)与定性信息(如技术突破、国际竞争力),全面评估行业景气度。对于CXO和生物科技等高波动性子行业,需特别关注其研发管线进展及商业化能力,以降低投资风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:28:25", "modified_time": "2025-08-12 00:28:25", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f0b60eb2f5d84de5abf42b6d435fbdbb", "experience_type": "text", "when_to_use": "在分析政策对健康险行业及生物医药产业的影响时,尤其是在政府出台支持性政策后评估市场潜力和业务增长机会。", "content": "通过解读政策细节(如上海市七部门联合发布的健康险新政),识别关键驱动因素(如拓宽保障范围、强化商保与药企合作机制),并结合历史数据(如2025年上半年健康险保费同比增长2.3%)评估其对市场规模、盈利空间和创新药械可及性的潜在影响。建议关注政策落地后的执行效果,并结合行业动态调整投资策略。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:29:30", "modified_time": "2025-08-12 00:29:30", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "15960384959740f5953eb1bfdc8ad9fa", "experience_type": "text", "when_to_use": "在设计或优化商业健康保险产品时,特别是在满足特定人群需求(如老年人、患病人群)或地方特色需求的场景中。", "content": "利用数据分析赋能产品设计,例如通过医疗、医保和商保数据共享机制获取创新药械的疾病适应症范围和临床试验数据,作为定价参考。同时,探索多元化支付模式(如按疗效付费、分期支付)以提升产品的竞争力和覆盖范围。建议结合目标市场的经济水平和监管框架因地制宜地调整产品形式。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:29:30", "modified_time": "2025-08-12 00:29:30", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "cca0af09946c4ab4ba5eaeefa1ae2837", "experience_type": "text", "when_to_use": "在评估保险公司负债端和资产端改善潜力时,尤其是在利率波动或经济复苏预期下制定投资策略。", "content": "结合宏观经济环境(如十年期国债收益率企稳于1.7%附近)和行业财务数据(如健康险赔付率变化),分析保险公司负债成本下降的可能性及其对利差损压力的缓解作用。同时,关注长端利率修复上行对新增固收类投资收益率的正面影响,以及当前估值水平是否反映未来增长潜力(如2025年保险板块估值处于历史低位)。建议投资者在低估值区间逐步布局优质标的。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:29:30", "modified_time": "2025-08-12 00:29:30", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1d72c9d320b24ed482209f9395bef729", "experience_type": "text", "when_to_use": "在评估跨市场投资机会时,特别是在发达市场与新兴市场之间进行资产配置决策。", "content": "对比不同市场的监管框架、货币稳定性和本地市场动态,例如分析上海健康险新政如何吸引符合条件的市场主体投资入股商业健康保险公司。同时,考虑税收优惠政策(如职工工资总额5%税前扣除)对企业参与度的影响。建议在新兴市场寻找政策红利驱动的投资机会,但需警惕汇率风险和政策执行不确定性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:29:30", "modified_time": "2025-08-12 00:29:30", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d702c53b7f3e43d8a3cb0363b443fff7", "experience_type": "text", "when_to_use": "在评估航运港口行业的市场表现时,特别是涉及原油、干散货和集装箱吞吐量的分析场景。", "content": "结合进出口数据、货物吞吐量趋势以及细分区域表现(如河北、山东、江苏等主要港口)进行综合分析。重点关注原油进口来源地的变化(如中东、俄罗斯、马来西亚占比波动)以及铁矿石和煤炭的库存及吞吐量动态,以判断行业复苏或衰退信号。例如,当原油吞吐量同比转正且干散货吞吐量复苏时,可视为行业回暖的早期信号。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:30:20", "modified_time": "2025-08-12 00:30:20", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "363531b77cf0407f97d346335ece4635", "experience_type": "text", "when_to_use": "在制定针对航运相关资产类别的投资策略时,特别是在高波动性和经济周期转换期。", "content": "通过波罗的海干散货运价指数(BDI)、中国出口集装箱运价指数(CCFI)等高频指标,结合历史价格波动与当前市场动态,识别运价弹性释放的关键节点。例如,在油轮船队规模扩张缓慢的情况下,全球油运运价可能呈现高弹性,此时应优先配置相关资产,并警惕宏观经济不及预期带来的下行风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:30:20", "modified_time": "2025-08-12 00:30:20", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5595dd331746424291c79697c00256cb", "experience_type": "text", "when_to_use": "在为航运港口企业客户提供财务规划或战略咨询服务时,尤其是在不同地理范围和时间跨度下的决策支持。", "content": "基于区域港口吞吐量增速(如上海、宁波-舟山、深圳等)及其在全国占比,结合外贸货物吞吐量与内贸需求的差异,设计分阶段的运营优化方案。例如,在外贸货物吞吐量增长乏力但内贸需求强劲的背景下,建议客户加大泛亚内贸集装箱航线的资源投入,同时关注环保监管对供给能力的长期限制。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:30:20", "modified_time": "2025-08-12 00:30:20", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "4659ba2b01fd43828f18b31d99bbc01f", "experience_type": "text", "when_to_use": "在评估汽车行业投资机会时,特别是在涉及新能源车和智能化零部件的细分市场中。", "content": "利用新能源车渗透率、自主品牌崛起趋势以及政策驱动数据(如以旧换新补贴)来判断行业增长潜力。重点关注月度及周度销量数据、库存预警指数以及供应链动态,结合增量零部件(如传感器、域控制器、线控制动等)的增长曲线,识别高潜力的投资标的。例如,推荐关注具备电动化、智能化技术优势的企业及其供应链伙伴,如比亚迪、蔚来、华为智选等。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:31:17", "modified_time": "2025-08-12 00:31:17", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "18d70289445146ac9e9cd0b2a86c3c27", "experience_type": "text", "when_to_use": "在制定长期战略投资组合时,尤其是在新兴技术和高端制造领域(如机器人、自动驾驶、新能源车)。", "content": "通过分析行业技术迭代周期(如激光雷达、自动驾驶域控制器的渗透率变化)和政策导向(如双碳战略、智能网联汽车试点项目),识别具有长期竞争优势的核心企业。同时,结合宏观经济环境(如汇率波动对出口型企业的利润影响)和资本市场估值水平,筛选出具备高成长性和估值修复潜力的标的。例如,在2025年世界机器人大会前夕,提前布局相关参展企业的投资机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:31:17", "modified_time": "2025-08-12 00:31:17", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0ff69ce8164443749ab6ae0ee9aaa5f4", "experience_type": "text", "when_to_use": "在进行跨境投资或全球资产配置时,特别是涉及发达市场与新兴市场的汽车产业链标的。", "content": "综合考虑地缘政治、汇率波动和本地市场需求因素,优先选择具备全球化布局能力的企业。例如,分析欧元兑人民币升值对欧洲出口型企业的影响,或美元兑人民币波动对中国汽配供应商的成本压力。同时,关注目标市场的政策环境(如美国IRA法案对电动车产业链的影响)和消费者偏好变化,优化投资决策。例如,推荐布局小米、比亚迪等具备强品牌力和渠道优势的国际化车企。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:31:17", "modified_time": "2025-08-12 00:31:17", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d6a5e97eeb1a4609becbc2e5ccefbace", "experience_type": "text", "when_to_use": "在评估企业数字化转型对财务运营影响时,特别是在涉及ERP系统升级或双层ERP部署的场景中。", "content": "通过分析企业采用双层ERP模型的驱动因素(如并购、商业模式演进和竞争压力),可以识别出哪些业务单元需要更高的灵活性和本地化控制,同时确保集中式财务数据的一致性。结合人工智能优先战略,能够显著提高财务流程的自动化水平和决策效率。例如,AI驱动的自主代理可处理跨多个ERP系统的数据整合与合规性检查,从而降低运营成本并提升响应速度。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:32:07", "modified_time": "2025-08-12 00:32:07", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0afae659f8ff44e184116269e18726bf", "experience_type": "text", "when_to_use": "在制定长期战略规划时,特别是针对全球企业在不同市场环境中扩展或优化其运营模式的情况。", "content": "利用两层ERP模型的灵活性,企业可以在发达市场和新兴市场之间实现差异化运营策略。例如,在发达市场中,重点可能放在提高效率和合规性,而在新兴市场中,则更注重快速适应本地法规和客户需求。此外,通过引入AI优先的企业核心平台,可以更好地预测市场需求变化,并动态调整供应链和财务资源配置,以应对经济周期波动和板块轮动。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:32:07", "modified_time": "2025-08-12 00:32:07", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c59e2942f2814a42a9147a35ac5036f9", "experience_type": "text", "when_to_use": "在进行投资分析或风险评估时,特别是在评估技术驱动型企业(如ERP供应商或AI解决方案提供商)的市场潜力时。", "content": "结合行业洞察和技术趋势(如IDC和Gartner的预测数据),可以评估企业在AI优先和双层ERP转型中的竞争力。例如,到2027年,预计60%的ERP替换项目将优先考虑业务流程编排能力,而非传统交易功能。这一趋势表明,投资者应关注那些在AI集成和灵活ERP架构方面具有领先优势的企业。同时,需警惕因技术过渡不畅而导致的潜在风险,例如实施成本超支或用户接受度低。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:32:07", "modified_time": "2025-08-12 00:32:07", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b91c33babeb5480b95d1c0cbadc2674e", "experience_type": "text", "when_to_use": "在评估贵金属(如黄金和白银)的中长期投资价值时,特别是在全球经济不确定性增加或地缘政治风险上升的情况下。", "content": "通过分析宏观经济指标(如美国CPI、失业率、PMI等)、货币政策动态(如美联储资产负债表变化、利率预期)以及供需基本面(如央行购金趋势、工业需求增长),可以有效预测贵金属价格走势。例如,当美国非农数据大幅下修且降息概率增加时,黄金期货价格上涨的可能性较高;同时,金银比修复预期可作为白银补涨潜力的重要参考指标。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:33:12", "modified_time": "2025-08-12 00:33:12", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "4f75a8fcce594171b7ad6bb9016f567e", "experience_type": "text", "when_to_use": "在制定针对不同资产类别的战术性配置策略时,尤其是在市场波动加剧或板块轮动明显的环境中。", "content": "结合贵金属与其他细分板块(如铜、铝等有色金属)的相对表现,利用比值指标(如金银比、金油比、金铜比)和库存/ETF持仓数据,识别资金流向与市场情绪变化。例如,当COMEX黄金库存高位回落且ETF持仓量提升时,表明市场对黄金的避险需求正在增强,应适当超配黄金资产以对冲风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:33:12", "modified_time": "2025-08-12 00:33:12", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d379a75d749e4891abc9bd86eed58003", "experience_type": "text", "when_to_use": "在进行企业盈利预测与估值分析时,特别是涉及资源型行业(如稀土、铜、锂等)的龙头公司。", "content": "采用一致预期数据(如Wind盈利预测),结合市盈率、市净率等估值指标,对比历史均值及行业平均水平,筛选出具备估值优势的标的。同时,关注公司所处产业链环节的竞争格局及其对下游需求的敏感性。例如,在锂电材料领域,需重点跟踪新能源汽车单车用银量提升和技术迭代带来的结构性机会,从而调整目标公司的未来盈利预期。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:33:12", "modified_time": "2025-08-12 00:33:12", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "829603a1a7b840e19f30039df63bcb9d", "experience_type": "text", "when_to_use": "在评估新兴市场中智能穿戴设备行业的投资机会时,尤其是在消费电子和健康科技领域。", "content": "分析智能穿戴设备行业时,应重点关注产业链的上游核心技术依赖性(如芯片、传感器国产化率不足30%)及其对成本结构的影响。同时,需结合下游市场需求分层(如健康监测为核心刚需),评估企业是否具备差异化竞争能力或生态协同优势(如华为通过IoT平台整合智能穿戴设备与智能家居)。此外,政策支持(如国家“十四五”规划将可穿戴设备纳入医疗设备应用)和技术创新(如多光谱传感技术突破)是推动行业增长的关键催化剂。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:34:24", "modified_time": "2025-08-12 00:34:24", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "4b29049ee2a843c998a294be3d6f4ecf", "experience_type": "text", "when_to_use": "在制定针对科技硬件制造企业的财务规划和估值模型时,尤其是涉及智能穿戴设备的中游代工企业和品牌商。", "content": "对于中游制造企业(如立讯精密、富士康),成本控制与规模化生产是决定利润空间的核心因素。建议采用BOM成本拆解法(如芯片占12.5%、传感器占15%、屏幕占20%)评估其毛利率压力,并结合自动化产线的投入产出比判断长期盈利能力。对于品牌商(如华为、小米),则需关注其产品矩阵覆盖能力、技术壁垒(如华为毫米波生命体征监测技术)以及生态构建(如苹果WatchOS与iPhone深度联动)对用户留存率和市场份额的提升作用。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:34:24", "modified_time": "2025-08-12 00:34:24", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9d4cd91d4c9649219fe027dd772bf5e8", "experience_type": "text", "when_to_use": "在评估新兴技术(如人形机器人、AI基建)相关投资机会时,尤其是在政策驱动和资本密集型领域。", "content": "通过分析政府政策支持力度(如国常会推进“人工智能+”行动)、产业基金设立情况(如湖北百亿元母基金)以及行业领先企业的动态(如腾讯发布Tairos平台),可以识别产业链上下游的核心受益者。重点关注具备技术壁垒和卡位优势的公司,特别是在核心零部件(如关节模组、减速器、灵巧手等)和软件平台领域的企业。同时,结合PE估值倍数与盈利预测,筛选出高弹性标的。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:35:21", "modified_time": "2025-08-12 00:35:21", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c6e6e908571c47f2b642c8ef4215b221", "experience_type": "text", "when_to_use": "在低空经济或类似新兴产业的早期阶段,需要判断基础设施建设对产业链发展的推动作用时。", "content": "研究地方政府发布的基础设施建设计划(如深圳市低空基础设施方案),结合具体落地项目(如粤港澳大湾区无人机物流航线开通)来评估市场需求增长潜力。优先关注具备先发优势且能快速实现商业化应用的企业,例如整机制造商、核心零部件供应商及运营服务商。此外,应密切跟踪行业标准制定和技术验证进展,以捕捉潜在的投资窗口。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:35:21", "modified_time": "2025-08-12 00:35:21", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a74777cf45254d368b0bd1c8e5993e5b", "experience_type": "text", "when_to_use": "在进行跨资产类别配置决策时,特别是面对不同时间跨度(短期战术操作 vs 长期战略规划)和市场环境变化(牛市/熊市/横盘)的情况。", "content": "采用自上而下的宏观分析方法,结合经济周期、货币政策和行业景气度,确定适合当前市场的资产类别和板块轮动策略。例如,在低波动性和政策支持明显的环境下,可增加对成长性行业的权重(如人形机器人、3D打印)。同时,利用EPS和PE数据构建个股筛选框架,选择估值合理且业绩增长确定性高的标的。对于长期投资者,建议关注技术成熟曲线上的关键节点,提前布局具有颠覆性创新潜力的领域。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:35:21", "modified_time": "2025-08-12 00:35:21", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "92918ffc36c14481bdac51878ea2fccf", "experience_type": "text", "when_to_use": "当需要为客户提供多元化咨询服务时,包括财务规划、交易策略和风险评估等综合需求。", "content": "根据客户的风险偏好和投资目标,定制化地整合多维度信息,例如重点公司的盈利预测、行业评级以及市场表现数据。推荐组合中既包含稳健型标的(如恒立液压、汇川技术),也加入高成长性但波动较大的标的(如绿的谐波、兆威机电)。同时,通过动态调整持仓比例控制整体组合风险,并定期复盘市场走势与预期偏差,及时优化投资建议。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:35:21", "modified_time": "2025-08-12 00:35:21", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "96ad239b660e4520b7e68fd49cc4f637", "experience_type": "text", "when_to_use": "在评估与重大地缘政治事件(如阅兵、国际冲突)相关的行业投资机会时,例如军工、国防或高科技装备领域。", "content": "利用历史复盘方法分析类似事件(如2015年和2019年阅兵)对相关板块的催化作用,识别市场情绪和超额收益的时间窗口。结合当前事件的独特性(如新型作战力量的展示),提前布局具有高曝光度和潜在订单增长的企业。同时,关注政策信号(如“十五五”规划)以判断行业的长期发展确定性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:36:34", "modified_time": "2025-08-12 00:36:34", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e5ecfa35184f4b4c974dea0308a595a6", "experience_type": "text", "when_to_use": "在研究军贸出口对军工企业盈利能力的影响时,特别是在新兴市场需求旺盛或地缘冲突加剧的情况下。", "content": "通过对比国内外军工企业的毛利率差异(如美国军贸五强与中国航空主机厂),评估军贸业务对利润空间的提升潜力。重点关注军贸订单的增长趋势及其对企业成本控制和定价能力的影响。同时,结合实际冲突案例(如印巴冲突中装备的实际表现),验证产品竞争力并预测国际市场认可度。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:36:34", "modified_time": "2025-08-12 00:36:34", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "36f24fd0f6664dacbc2d210b56edcb7f", "experience_type": "text", "when_to_use": "在中期战术操作中,针对特定主题(如无人化、智能化装备)进行板块轮动配置时。", "content": "基于行业重大事件(如兵器集团主题日活动、纪录片《攻坚》)动态捕捉新质战斗力方向的投资热点。通过梳理产业链上下游合同签订情况(如陀螺仪、无人机等细分领域订单),筛选出具备明确业绩兑现预期的标的。同时,考虑时间跨度(如阅兵前后的市场热度),选择合适的入场和退出时机。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:36:34", "modified_time": "2025-08-12 00:36:34", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f86172ed8d7140348a4c83607ff02098", "experience_type": "text", "when_to_use": "在评估资源稀缺性驱动的周期性商品(如钾肥、磷矿石)价格趋势时,特别是在供需紧平衡且受地缘政治或政策影响较大的市场环境中。", "content": "通过分析全球资源分布、主要生产国和消费国的供需动态,结合库存水平、进出口数据及政策变化,预测价格走势。例如,钾肥市场因中国进口依存度高、白俄罗斯和俄罗斯出口受限等因素,导致供应紧张,推动价格上涨。同时,关注新增产能投放周期与需求增长的匹配程度,判断中长期价格中枢是否维持高位。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:37:50", "modified_time": "2025-08-12 00:37:50", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b2ae23f0f907455b9ba0268ca3bfc0ed", "experience_type": "text", "when_to_use": "在研究行业景气度拐点时,尤其是当行业处于下行周期底部且存在明确的政策干预或自律行动(如农药行业的“正风治卷”三年行动)的情况下。", "content": "综合分析行业资本开支增速放缓、渠道库存回归常态、国内外需求复苏等信号,结合政策对内卷式竞争的遏制措施,判断行业是否接近景气拐点。例如,农药行业在经历三年下跌后,部分品种因需求向好、供给受限开始涨价,表明行业正从底部复苏。同时,需关注龙头企业扩产节奏及其市场份额变化。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:37:50", "modified_time": "2025-08-12 00:37:50", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9513dd860afc498fb16697d95430bfe8", "experience_type": "text", "when_to_use": "在制定跨境投资或贸易策略时,特别是涉及新兴市场与发达市场之间价差显著的商品(如磷肥的海内外价差扩大)。", "content": "利用海内外市场价格差异,结合出口政策、法检时间优化及配额分配情况,评估企业盈利能力提升空间。例如,2025年磷肥出口政策强调“国内优先、适当出口”,窗口期集中于5-9月,拥有出口配额的企业将受益于海内外高价差带来的利润增厚。此外,还需考虑汇率波动、运输成本及目标市场需求弹性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:37:50", "modified_time": "2025-08-12 00:37:50", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1a8a90cf18ae442aa4b607225132e824", "experience_type": "text", "when_to_use": "在筛选具有长期成长潜力的标的时,特别是资源型或产业链一体化公司(如磷化工、钾肥领域的龙头企业)。", "content": "优先选择资源储量丰富、产业链覆盖全面且具备成本优势的公司。例如,推荐磷矿储量丰富的磷化工全产业链龙头【云天化】和【兴发集团】,因其能更好地抵御原材料价格波动风险,并在行业景气度回升时实现超额收益。同时,关注公司在建项目投产进度及潜在产能释放对业绩的贡献。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:37:50", "modified_time": "2025-08-12 00:37:50", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b39792a0370b415fa3411102077f4ee0", "experience_type": "text", "when_to_use": "在评估新能源行业的长期增长潜力和政策驱动的投资机会时,尤其是在涉及可再生能源装机容量、消纳责任权重及区域政策差异的场景中。", "content": "通过分析国家政策(如可再生能源电力消纳责任权重)以及省级实施方案(如甘肃、宁夏等地的新能源上网电价市场化改革),可以识别出具有高增长潜力的区域和资产类别。优先关注政策支持力度大、机制电量保障程度高的省份,例如山东和新疆,这些地区可能提供更优的机制电价和更高的投资回报。此外,结合远期目标(如2025-2027年年均新增200GW以上新能源装机)进行长期战略规划,有助于锁定未来收益。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:39:09", "modified_time": "2025-08-12 00:39:09", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "dd504079c8f4492e9ba52b6ec3bd5df2", "experience_type": "text", "when_to_use": "在评估传统能源(如火电)向调节性电源转型过程中盈利能力的变化,特别是在容量电价机制调整或辅助服务市场发展的背景下。", "content": "以甘肃省为例,煤电机组容量电价从每年每千瓦100元上调至330元,基本实现了固定成本的全额补偿。这一变化表明,在新能源占比快速提升的市场中,传统能源企业正逐步从电能量市场转向容量补偿和辅助服务市场获取收入。至2030年,预计约50%的煤电收入将来自容量补偿和辅助服务,这显著降低了煤价和电价波动对盈利能力的影响。因此,在此类市场环境中,应重点关注那些能够有效利用调节能力的企业,并将其视为估值重塑的关键驱动因素。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:39:09", "modified_time": "2025-08-12 00:39:09", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b50111652e1a40bc9a24842a5a77dd5c", "experience_type": "text", "when_to_use": "在制定水电行业投资策略时,特别是针对大型水电工程开工或新运营主体成立所带来的长期成长性提升的场景。", "content": "雅鲁藏布江下游水电工程的开工标志着中国水电开发进入新的阶段,其装机增量占现有常规水电装机的16%-19%,为行业注入显著的成长动力。同时,新成立的雅江集团有望成为国内第二大水电运营商,进一步优化市场竞争格局。基于此,建议优先配置具备稳定现金流、高分红潜力的水电企业,例如长江电力和川投能源,并密切关注澜沧江、雅袭江等流域的后续开发动态,捕捉潜在的装机增长机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:39:09", "modified_time": "2025-08-12 00:39:09", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "662d9fad47d24b78992f2fae36852657", "experience_type": "text", "when_to_use": "在分析房地产行业政策变化对市场的影响时,尤其是在地方性政策出台后评估其对住宅开发和土地市场的潜在影响。", "content": "通过解读地方政府发布的规划管理技术规定(如湖南郴州的‘双限’政策),结合地块出让要求(如上海嘉定商住地的绿色建筑标准和BIM技术强制应用),可以有效预测未来房地产开发项目的成本结构、产品定位及市场需求变化。此类政策通常会对中小户型住宅比例、保障性租赁住房配建比例等提出明确要求,从而直接影响开发商的盈利模式和市场竞争力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:40:02", "modified_time": "2025-08-12 00:40:02", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d6b3f47807fe4bb7858e1dac9c186808", "experience_type": "text", "when_to_use": "在评估房企信用风险时,特别是在涉及关联交易或债务展期的情况下,分析企业与主要股东之间的资金往来及其潜在影响。", "content": "通过分析万科公告中深铁集团提供的借款事项,结合深交所豁免审议的特殊安排,可以识别出企业在面临流动性压力时的应对策略及其背后的支持力度。这种分析需要重点关注借款金额、利率条件、展期安排以及是否涉及股权稀释或控制权变更风险,从而判断企业的短期偿债能力和长期财务健康状况。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:40:02", "modified_time": "2025-08-12 00:40:02", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e316f84185604001ac41da9efeda268b", "experience_type": "text", "when_to_use": "在制定投资组合调整策略时,尤其是在市场波动较大且板块轮动明显的环境下,筛选具有超额收益潜力的个股。", "content": "通过对申万房地产指数及相关个股表现的跟踪(如上实发展、黑牡丹等涨幅较大的标的),结合土拍市场动态(如无锡梁溪区高溢价地块的关注度),可以捕捉到区域性房地产市场的热度变化。同时,应关注板块内龙头企业的估值修复机会以及政策利好带来的边际改善效应,以优化投资组合的风险收益比。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:40:02", "modified_time": "2025-08-12 00:40:02", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a01e6eead6634840804068081e92c55c", "experience_type": "text", "when_to_use": "在设计固定收益产品的交易策略时,特别是在临近债券兑付日或续期选择权行使窗口期,评估发行人的决策逻辑及其对市场价格的影响。", "content": "通过研究北京住总集团关于‘22住总Y1’债券不行使续期选择权的公告,结合票面利率、重定价周期及市场利率环境,可以推断发行人对于当前融资成本的接受程度及其再融资能力。此外,还需考虑类似事件可能引发的二级市场价格波动,提前布局相关交易策略以规避风险或获取套利机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:40:02", "modified_time": "2025-08-12 00:40:02", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f7b0bfcd3d6c4460816abcd3e8b32775", "experience_type": "text", "when_to_use": "在评估新兴行业(如低空经济)的投资机会时,需要结合政策动态、技术进展和市场情绪进行综合分析。", "content": "通过分析政策支持(如深圳市发改委的低空基础设施建设方案)、技术突破(如吨级eVTOL首飞成功)以及市场表现(如低空经济指数估值和资金流向),可以识别出具有高增长潜力的细分领域和个股。重点关注政策驱动下的产业链上下游企业,并结合技术成熟度和市场需求验证投资逻辑。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:41:02", "modified_time": "2025-08-12 00:41:02", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "661872d018aa41cbbced1031af5a4cac", "experience_type": "text", "when_to_use": "在评估通信行业股票表现与市场趋势时,特别是在牛市或科技股领涨的环境中。", "content": "通过对比中信通信板块与沪深300指数的表现,结合行业内个股涨跌幅及估值水平的历史分位数分析,可以有效识别行业轮动机会。建议关注涨幅领先、估值合理的公司,同时警惕短期内缺乏业绩支撑但涨幅过大的标的,以规避回调风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:42:01", "modified_time": "2025-08-12 00:42:01", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1aa71420b1c14f138fb1abe6ac1cb0ca", "experience_type": "text", "when_to_use": "在分析新兴技术(如人工智能、具身智能)对相关行业的影响时,尤其是在高波动期和技术创新密集的市场环境。", "content": "从WAIC大会的技术风向中提取关键洞察,例如具身智能商业化临界点、AI终端爆发等趋势,能够帮助预测产业链上下游的投资机会。应重点关注具备核心技术竞争力的企业,尤其是那些展示出规模化量产能力或垂直场景解决方案的公司。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:42:01", "modified_time": "2025-08-12 00:42:01", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e2e5f638ce684facb38865108e8589a9", "experience_type": "text", "when_to_use": "在制定长期战略规划时,针对不同地理范围内的政策支持和技术发展差异进行综合考量。", "content": "利用类似上海《进一步扩大人工智能应用若干措施》这样的政策信息,结合区域经济发展特点,可判断哪些地区更有利于特定技术领域的发展。对于跨国投资组合管理,需特别注意发达市场与新兴市场的监管框架和货币因素,确保资产配置的地域多样性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:42:01", "modified_time": "2025-08-12 00:42:01", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "70851c72d4f94b88a4270f24b8d489c9", "experience_type": "text", "when_to_use": "在构建多元化资产组合并考虑时间跨度时,特别是当需要平衡短期战术操作与中期组合调整。", "content": "根据通信行业的近期表现和未来展望,建议采用分层策略:短期关注受益于流量增长和算力需求的光通信公司;中期布局具有持续创新能力的优质企业;长期则聚焦网络价值提升的运营商。这种动态调整方法有助于捕捉不同时段的收益潜力,同时控制整体风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:42:01", "modified_time": "2025-08-12 00:42:01", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8b8cdb89f342427b9709790540d0f406", "experience_type": "text", "when_to_use": "在评估化妆品行业投资机会时,特别是在市场增长放缓或波动较大的环境下。", "content": "通过分析国家统计局的零售数据与企业财报表现,识别行业整体趋势和个体企业的差异化表现。例如,在2025年上半年,尽管限额以上单位化妆品零售总额同比增长2.9%,但6月单月同比下降2.3%,表明市场可能存在短期疲软。结合本土头部企业如华熙生物、珀莱雅的研发投入和外资品牌如雅诗兰黛、悦诗风吟的战略调整,可以判断研发创新和渠道布局是关键成功因素。投资应优先关注具备技术壁垒和全球化能力的企业。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:43:05", "modified_time": "2025-08-12 00:43:05", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0716847dd7af4642a0b421a467449a1b", "experience_type": "text", "when_to_use": "在进行并购或资产剥离决策时,尤其是在涉及跨国交易或复杂供应链整合的情况下。", "content": "参考环球新材国际收购默克集团全球表面解决方案业务的案例,该交易金额高达55.84亿元,旨在优化全球供应链并加速国际化布局。成功的并购需要明确战略目标(如技术获取、市场份额扩大)以及清晰的整合计划。此外,需全面评估被收购方的技术优势、市场地位和潜在协同效应,同时警惕地缘政治和监管风险对交易的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:43:05", "modified_time": "2025-08-12 00:43:05", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "31d43733c86747f990f6ee9d5014c351", "experience_type": "text", "when_to_use": "在制定新兴市场的进入策略时,特别是针对快速发展的亚洲市场。", "content": "从泰国皇室御用美妆品牌TSI进军中国市场的案例中可以看出,“CS/KA为主,线上为辅”的全域覆盖策略能够有效平衡品牌知名度建立和销售转化率提升。对于新兴市场,建议优先选择具有高消费潜力的城市和地区,并通过本地化生产及营销活动满足消费者需求。同时,密切关注当地法规变化(如《化妆品无泪配方宣称评价测试方法》),确保合规性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:43:05", "modified_time": "2025-08-12 00:43:05", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "196025ef36494864abf6266b7ead7be7", "experience_type": "text", "when_to_use": "在资本配置和融资方案设计时,尤其是面对技术驱动型初创企业。", "content": "观察仅三生物和天津合生生物的融资案例,分别获得1000万元和数千万元融资以支持其合成生物学技术创新。这表明投资者越来越青睐拥有核心技术壁垒且符合未来消费趋势的企业。在设计融资方案时,应突出技术的独特性、商业化路径的可行性以及团队执行力,并利用多轮融资逐步扩大产能和技术储备。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:43:05", "modified_time": "2025-08-12 00:43:05", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c361b744050a432bb4afa5c4520b42ec", "experience_type": "text", "when_to_use": "在评估政策变化对消费行业投资机会的影响时,特别是在政府出台供给侧反内卷或需求端刺激政策的背景下。", "content": "通过分析政策导向(如反低价无序竞争、育儿补贴等)对行业竞争格局和消费需求的潜在影响,识别出受益于政策调整的龙头企业。例如,反内卷政策有助于引导企业从价格战转向品质和服务竞争,利好头部品牌;育儿补贴政策则可能提升家庭消费能力,带动相关消费品行业的增长。建议结合行业数据(如社零增速、品类表现)与个股财务指标(如EPS、PE)筛选绩优标的。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:44:13", "modified_time": "2025-08-12 00:44:13", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5441715c37824aed84cd79d17ba7e83b", "experience_type": "text", "when_to_use": "在市场短期滞涨或回调期间寻找基本面优质的长期投资标的,尤其是在中报披露前后。", "content": "当板块整体因明星个股预期修正或资金轮动而出现短期回调时,可聚焦具备抗风险韧性和明确增长逻辑的细分领域龙头。例如,在跨境出海、黄金珠宝、美容护理等领域,优先选择估值合理且具备差异化竞争优势的企业(如小商品城、潮宏基、上美股份)。同时需关注行业估值分位数,避免高估值陷阱,并结合宏观经济环境判断流动性宽松对市场的支撑作用。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:44:13", "modified_time": "2025-08-12 00:44:13", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "456ca99d151a459ca3e1bf41aff0c6fe", "experience_type": "text", "when_to_use": "在不同经济周期阶段进行资产配置时,特别是针对商贸零售及消费相关行业。", "content": "根据经济周期特点调整投资策略:在复苏初期,优先布局必选消费品(如粮油食品)和低估值传统零售标的;在扩张期,关注可选消费品(如化妆品、黄金珠宝)以及受益于消费升级的国货品牌;在滞胀或衰退期,则倾向于防御性较强的资产(如超市、便利店)。此外,可通过跟踪社零数据、线上/线下渠道增速等高频指标动态验证消费复苏强度,及时调整组合。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:44:13", "modified_time": "2025-08-12 00:44:13", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7c896dd09b904638a24bc2927e0df763", "experience_type": "text", "when_to_use": "在新兴市场或政策驱动型市场中评估行业成长潜力,尤其是涉及跨境电商、国货替代等主题的投资机会。", "content": "利用政策支持(如出口关税优化、金融扶持消费)和技术进步(如电商渗透率提升)作为主要驱动力,挖掘具有全球竞争力的本土品牌和平台型企业。例如,跨境电商领域的焦点科技和安克创新凭借灵活应对国际贸易环境的能力和产品力壁垒,展现出较强的成长性。同时,关注个护、美妆等赛道的国货崛起趋势,优选能够建立消费者心智的品牌。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:44:13", "modified_time": "2025-08-12 00:44:13", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "07a99a79055c406a8e13b4f8ee3a8803", "experience_type": "text", "when_to_use": "在评估农业或畜牧业相关资产(如生猪养殖)的投资机会时,特别是在市场供需波动明显、政策调控加强的情况下。", "content": "通过分析商品猪出栏均价、仔猪价格、淘汰母猪价格等关键指标的周环比变化,结合能繁母猪存栏量和计划出栏量数据,可以有效预测短期内的市场供需动态。此外,政策预期(如产能去化措施)对行业集中度和长期盈利能力的影响应作为重要考量因素纳入投资决策。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:45:25", "modified_time": "2025-08-12 00:45:25", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e33a252071354851a5c5508343815423", "experience_type": "text", "when_to_use": "在进行农林牧渔行业子板块的风险评估时,特别是涉及动物疫病、消费复苏不及预期等系统性风险的情况下。", "content": "利用申万一级行业指数和子板块涨跌幅数据,结合宏观环境(如经济周期、消费复苏进程)和行业基本面(如疫病风险、环保政策趋严),可以识别高风险领域并优化投资组合配置。建议优先关注具有规模优势和成本控制能力的龙头企业,以降低非系统性风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:45:25", "modified_time": "2025-08-12 00:45:25", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d971856855424236ba66138f0bb9d0c2", "experience_type": "text", "when_to_use": "用于制定动保板块或种植业领域的长期战略规划,尤其是在政策支持(如环保趋严、种子技术升级)驱动行业整合的背景下。", "content": "通过对动保板块(如疫苗龙头、国企兽药企业)和种植业(如种业公司)的政策导向和技术发展趋势进行深入研究,可以识别政策红利下的结构性机会。建议重点关注拥有自主知识产权或技术壁垒的企业,这些企业在行业集中度提升过程中更具竞争优势。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:45:25", "modified_time": "2025-08-12 00:45:25", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f646a110599c484eb676a8535f07ce7d", "experience_type": "text", "when_to_use": "在评估有色金属行业(特别是能源金属、小金属和稀土)的投资机会时,特别是在市场呈现结构性分化且政策风险较高的情况下。", "content": "通过分析细分领域的价格波动与供需动态来识别投资机会。例如,报告中指出能源金属(如钴、锂)和轻稀土(如镨钕氧化物)在近两周表现出显著的价格上涨,而贵金属和中重稀土则表现疲软。建议投资者优先关注供给紧张、需求增长强劲的领域,并结合政策变化(如美国对铜产品加征关税)评估其对不同金属价格的短期和长期影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:46:27", "modified_time": "2025-08-12 00:46:27", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7eca0707735845dd8c5e6e3287cdb5fa", "experience_type": "text", "when_to_use": "在应对突发性政策或地缘政治事件对大宗商品市场的影响时,尤其是涉及关税、出口管制或跨境贸易结算机制变化的情况。", "content": "通过快速评估政策对供应链和市场价格的直接与间接影响,制定相应的投资策略。例如,美国对半成品铜产品加征50%关税导致铜价短期内暴跌,但阴极铜等原材料豁免关税为相关企业提供了套利空间。此外,针对“稀土专用人民币稳定币”的推出,需关注其对稀土跨境贸易结算效率和市场流动性的潜在提升作用。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:46:27", "modified_time": "2025-08-12 00:46:27", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ce8978c4e6a34a87a039c0e5d6033f11", "experience_type": "text", "when_to_use": "在进行资产配置或调整投资组合时,特别是在市场情绪脆弱、多空分歧加剧的情况下(如贵金属市场的高位震荡阶段)。", "content": "综合考虑宏观经济环境、避险需求和技术面因素,平衡高波动性资产(如黄金、白银)与低波动性资产的配置比例。例如,报告指出黄金价格虽因美元指数上升而承压,但央行购金加速和去美元化趋势为其提供长期支撑。因此,在短期回调压力下仍可择机布局黄金类资产以增强组合防御性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:46:27", "modified_time": "2025-08-12 00:46:27", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c68195245b104e2bbbe33045dd5c1439", "experience_type": "text", "when_to_use": "在分析工业金属(如铜、铝)的中长期需求前景时,尤其是在全球经济复苏初期或基础设施投资增加的背景下。", "content": "通过跟踪下游行业的开工率、库存水平及区域经济政策的变化,判断工业金属的供需格局。例如,报告提到铝价因供应增加和淡季需求低迷而承压,但铜作为电气化和可再生能源的重要材料,其中长期需求依然看好。建议重点关注具有成本优势和资源储备的企业,同时警惕短期价格波动带来的交易风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:46:27", "modified_time": "2025-08-12 00:46:27", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d545d66f7b7e4cd8be181209a432d677", "experience_type": "text", "when_to_use": "在突发公共卫生事件或传染病爆发期间,进行医药行业相关投资机会的分析和评估。", "content": "针对突发性传染病(如基孔肯雅热)的诊疗方案发布,结合病毒传播特性、诊断技术需求及市场动态,优先关注检测诊断领域的龙头企业。通过分析病毒检测方法(如核酸检测、血清抗体检测等)的技术成熟度、市场需求增长潜力以及政策支持力度,筛选具备技术优势和市场竞争力的标的。同时,需密切关注疫情传播范围、病例数据变化及政策导向对检测量的潜在影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:47:25", "modified_time": "2025-08-12 00:47:25", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "4dab276bf4274f9fb1b0894a41023f11", "experience_type": "text", "when_to_use": "在评估农业相关股票(如饲料、养殖企业)的投资机会时,特别是在行业处于周期性底部并可能迎来回升的阶段。", "content": "通过监测上游原料价格趋势(如玉米、豆粕)和下游需求改善信号(如生猪价格反弹、养殖利润转正),结合行业供需平衡表,可以识别饲料和养殖行业的边际改善机会。特别关注龙头企业的海外业务扩展潜力,以及其在国内市场的成本优势和市场份额变化。此外,需警惕行业负债率较高的企业在盈利周期初期的财务修复压力,避免过度悲观预期导致低估投资价值。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:48:38", "modified_time": "2025-08-12 00:48:38", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1f382b7b55884776950f184786c42329", "experience_type": "text", "when_to_use": "在分析生猪养殖行业的盈利周期时,尤其是在判断产能回升对盈利能力的影响时。", "content": "采用‘猪价与能繁母猪存栏量的4象限模型’,将猪价运行方向与能繁母猪存栏量变化结合,形成动态分析框架。重点关注象限4(猪价上涨且能繁母猪存栏下降)和象限3(猪价上涨但能繁母猪存栏上升)的逻辑演绎,以评估行业盈利持续性。同时,结合宏观需求和原料成本下行因素,修正市场对产能回升的过度悲观预期,寻找估值修复机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:48:38", "modified_time": "2025-08-12 00:48:38", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1241ea835f7b4be9a7ecf4187785ca2f", "experience_type": "text", "when_to_use": "在预测家禽养殖行业的短期价格波动及利润修复潜力时,特别是白羽肉鸡和鸡蛋等细分领域。", "content": "利用高频数据(如周度价格、苗价变化)捕捉供需错配信号,并结合季节性需求变化(如节假日备货)预测价格拐点。同时,关注饲料成本下降对养殖利润的边际贡献,优先选择具备规模化优势和成本控制能力的企业。对于利润尚未转正但苗价大幅上涨的品种,可视为潜在布局窗口。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:48:38", "modified_time": "2025-08-12 00:48:38", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "565132eb018e48108977f4b2cddf6367", "experience_type": "text", "when_to_use": "在分析大宗农产品(如玉米、大豆、小麦)的供需格局及其对下游行业影响时,特别是在全球或区域供需失衡的情况下。", "content": "基于USDA供需平衡表,重点关注库存消费比的变化趋势,以及主要生产国和出口国的产量预期调整。结合国内进口依存度和政策导向(如储备粮投放),评估原料价格波动对下游饲料加工和养殖行业的传导效应。同时,考虑极端天气和自然灾害对种植面积和单产的影响,提前预判潜在供给冲击。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:48:38", "modified_time": "2025-08-12 00:48:38", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "2de07c2f757344c782e37af23b21a94f", "experience_type": "text", "when_to_use": "在评估电力市场供需动态对中长期电价影响的场景中,特别是在高需求增长和供应受限的情况下。", "content": "通过分析电力市场的容量拍卖价格趋势、区域负载预测变化以及发电资源的退役与新增情况,可以有效识别供需失衡的结构性问题。例如,PJM市场的容量拍卖价格触及上限表明供需紧张,结合AI驱动的负载增长预测和高稳定性发电资源的依赖性评估,可进一步确认电价中枢抬升的长期趋势。此类分析适用于指导投资决策,特别是对电力相关企业(如Talen Energy、Vistra等)的股票选择。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:49:46", "modified_time": "2025-08-12 00:49:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3287cf1b523c4f6fbc49d29c033f2717", "experience_type": "text", "when_to_use": "在需要评估高稳定性发电资源(如核能、天然气、煤电)在电力系统可靠性中的关键作用时,特别是在新能源占比上升但波动性较大的市场中。", "content": "通过对比新能源(如风能、太阳能)与传统高稳定性发电资源的供给能力变化,分析系统可靠性的潜在风险。例如,在PJM市场中,尽管新能源装机有所增加,但天然气发电资源的退役导致净供给减少,凸显了高稳定性资源的重要性。此经验适用于指导资产配置策略,优先考虑具有稳定发电能力的企业或项目。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:49:46", "modified_time": "2025-08-12 00:49:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e305738c476f4f47ab865d65af0f05cc", "experience_type": "text", "when_to_use": "在需要根据市场拍卖结果和政策限制推导未来价格走势的场景中,特别是在存在行政干预(如价格上限)的情况下。", "content": "结合拍卖清算价格、政策干预(如与州政府达成的价格上限协议)以及供需基本面预测,推导出未来价格的潜在区间。例如,PJM拍卖价格触及上限且预计在无上限情况下会更高,这为投资者提供了明确的价格上涨信号。此方法适用于短期战术操作和中期组合调整,特别是在政策敏感型市场中。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:49:46", "modified_time": "2025-08-12 00:49:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1a471aa14b7546a9afc48a728c635061", "experience_type": "text", "when_to_use": "在评估周期性行业的信用风险时,尤其是在行业处于下行周期或面临结构性调整的情况下,例如钢铁、煤炭等行业。", "content": "在分析周期性行业的信用风险时,应重点关注供需关系的变化对盈利能力的影响,同时结合行业政策导向(如去产能、绿色转型)评估长期竞争格局的改善潜力。此外,需特别关注企业在行业低谷期的债务结构和短期流动性压力,优先选择高信用等级、融资渠道畅通的企业进行投资或信贷支持。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:50:46", "modified_time": "2025-08-12 00:50:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "fcf9e77335be4c48a35405c2f59cfe79", "experience_type": "text", "when_to_use": "在制定固定收益投资策略时,尤其是针对高信用等级企业债券的投资决策,需要评估债券到期分布及信用迁移风险。", "content": "对于固定收益投资,可以通过分析债券到期分布、存续债券的信用等级构成以及发行主体性质,判断整体信用风险水平。高信用等级企业(如AAA和AA+)通常具备较强的偿债能力,且融资渠道较为畅通,因此在经济低迷或行业景气度较低时,其债券仍具有较高的安全性。建议优先配置到期分布均衡、集中兑付压力较小的债券组合。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:50:46", "modified_time": "2025-08-12 00:50:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "2cb34141b938491d96465483d847270b", "experience_type": "text", "when_to_use": "在市场环境为熊市或经济周期处于衰退阶段时,进行资产配置和风险管理。", "content": "在熊市或经济衰退期,应优先评估资产类别的防御性特征,例如选择高信用等级债券或现金流稳定的资产。同时,需密切关注宏观经济政策对行业的影响(如《高耗能行业债务融资分类指引》对钢铁行业的约束),结合行业供需动态调整投资组合。此外,在经济低迷期,建议降低对高杠杆企业的敞口,聚焦于具备技术溢价和成本管控优势的龙头企业。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:50:46", "modified_time": "2025-08-12 00:50:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9f02fd0274164b56b882b50a011a6b43", "experience_type": "text", "when_to_use": "在房地产行业周期分析或市场研究中,尤其是在深度调整期向复苏过渡的阶段,用于评估供需动态及政策影响。", "content": "通过分析房地产行业的供给端(如新开工、竣工面积)和需求端(如销售面积、价格波动),结合政策导向(如降息、购房补贴等),可以有效识别市场筑底信号。重点关注一线城市新房供应的结构性变化以及二手房市场的‘以价换量’趋势,这些指标对判断短期市场止跌回稳具有重要参考价值。同时,需结合信用利差和融资环境的变化,评估行业整体的财务健康状况。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:51:39", "modified_time": "2025-08-12 00:51:39", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1ffe9e61e47f4fc5af5f5cd6ec92dbd0", "experience_type": "text", "when_to_use": "在评估房地产企业的信用风险时,特别是在债券市场融资修复有限且偿债高峰期的背景下,用于预测违约风险和债务管理能力。", "content": "通过分析存续债券的期限结构、信用利差变化及违约事件数量,可以量化房企的短期和中期债务压力。对于高杠杆企业,需特别关注其新发债券置换能力及流动性状况。此外,增信措施对降低信用利差的效果有限,因此应优先选择主体评级为AAA的企业进行投资或合作,避免低评级企业的潜在违约风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:51:39", "modified_time": "2025-08-12 00:51:39", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "69fd1f7e457d44f5b6b8e63d0feebe77", "experience_type": "text", "when_to_use": "在制定房地产行业的长期战略规划时,特别是在新模式构建初期,用于指导行业转型和创新能力提升。", "content": "结合宏观政策导向(如‘好房子’建设、城市更新机制)与地方因城施策的具体细则,识别行业发展的差异化路径。重点关注产品升级和品质提升对市场需求的拉动作用,以及存量土地盘活和现房去库存政策对供给优化的影响。建议将资源倾斜至核心城市和改善型住房项目,这些领域更有可能成为未来市场复苏的驱动力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:51:39", "modified_time": "2025-08-12 00:51:39", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "40ab44f662004fa3865d5463e16bc08d", "experience_type": "text", "when_to_use": "在房地产行业的产业链分析中,特别是在评估上下游议价能力和价格波动时,用于优化供应链管理和成本控制策略。", "content": "房地产行业在产业链中的议价能力因环节不同而异。对上游土地供应商议价能力较弱,但在市场下行阶段可能获得一定空间;对建材供应商则具有较强议价权。中游建筑行业产能过剩导致开发商议价能力强,而下游房价则高度依赖供需关系。因此,在市场下行期,可通过优化采购策略降低成本,同时关注下游市场分化的结构性机会,例如一线城市的刚性和改善性需求释放。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:51:39", "modified_time": "2025-08-12 00:51:39", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7bd3f381f8274dd3986cce22f1040984", "experience_type": "text", "when_to_use": "在评估基础化工行业或类似周期性行业的投资机会时,特别是在市场面临政策导向(如‘反内卷’)和供需再平衡的情况下。", "content": "通过分析行业政策动态(如中央政治局会议提出的‘反内卷’政策)及其对子行业的影响,识别具有自律机制改善和供需格局优化的细分领域。例如,制冷剂板块因三年基数期结束和大厂挺价策略,价格中枢有望持续上行,建议重点关注相关标的。此外,结合子行业涨跌幅数据和产品价格走势,筛选出具备短期价格弹性或长期供需改善逻辑的投资标的。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:52:50", "modified_time": "2025-08-12 00:52:50", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "cd89af30a3474499a5dd92c663d29231", "experience_type": "text", "when_to_use": "在大宗商品或化工品价格波动较大的市场环境中,需要快速捕捉价格趋势并评估其对相关企业盈利能力的影响。", "content": "利用化工品价格和价差数据,结合历史价格走势及当前市场动态,识别价格驱动因素(如季节性需求、政策调控或突发事件)。例如,液氯、TDI等化工品的周涨幅显著,而碳酸锂等产品的价格则大幅下跌。通过分析这些价格变化对企业毛利率和盈利预期的影响,可为投资决策提供依据。同时,关注价差扩大或缩小的趋势,以判断上下游产业链的利润分配情况。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:52:50", "modified_time": "2025-08-12 00:52:50", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "60daaf5d39d44fd0abb83f2b6dddebfc", "experience_type": "text", "when_to_use": "在宏观经济下行或需求不达预期的风险较高的情况下,进行行业和个股的风险评估与投资组合调整。", "content": "基于宏观经济指标(如原油价格波动、出口数据下降等)和行业基本面数据,评估潜在风险对行业指数和个股表现的影响。例如,空调出口排产下滑14.7%,反映出外需疲软可能对相关化工品需求造成压力。在此背景下,优先选择具备内需支撑或政策利好(如‘以旧换新’政策)的标的,并适当规避高风险子行业或个股(如跌幅靠后的个股:保利联合、高争民爆等)。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:52:50", "modified_time": "2025-08-12 00:52:50", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "402cc4f48d2343168163c56f091d6452", "experience_type": "text", "when_to_use": "在多资产类别配置中,针对特定行业或主题(如化纤、轮胎、农化等板块)进行战术性或战略性布局时。", "content": "结合行业轮动逻辑和板块特点,制定分层次的投资策略。例如,在化纤板块中关注成本优势明显的企业(如华峰化学、新凤鸣),在轮胎板块中关注海外市场份额提升的公司(如赛轮轮胎、森麒麟),在农化板块中聚焦钾肥、磷肥等受益于粮食安全政策的标的(如亚钾国际、盐湖股份)。同时,根据时间跨度(如短期价格弹性 vs 长期供需改善)调整配置权重。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:52:50", "modified_time": "2025-08-12 00:52:50", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5d53dfd664b744e6a3d46cfbff80be0c", "experience_type": "text", "when_to_use": "在评估新兴材料(如PEEK、硅碳负极材料)市场潜力时,尤其是在技术突破或政策支持驱动的场景下。", "content": "通过分析行业标志性产品名单、技术进展及产业链布局,结合市场规模预测和复合增长率,识别具有高增长潜力的细分领域及关键企业。同时,关注项目投资规模、产能规划和技术壁垒,综合评估其商业化前景与风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:53:58", "modified_time": "2025-08-12 00:53:58", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "888266637b2c442da521b30ba1f3d632", "experience_type": "text", "when_to_use": "在制定与人形机器人相关领域的投资策略时,特别是在技术快速迭代和市场需求快速增长的背景下。", "content": "利用行业展会信息(如世界机器人大会)获取最新技术动态和市场趋势,结合目标材料(如PEEK、功能性保护套管)在机器人轻量化、耐用性等核心需求中的应用价值,锁定具备技术优势和市场份额增长潜力的企业进行重点跟踪。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:53:58", "modified_time": "2025-08-12 00:53:58", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "acb10aed9b5b490c8add55cd0007486c", "experience_type": "text", "when_to_use": "在分析基础化学品价格波动对下游行业的影响时,尤其是在宏观经济环境变化或供应链扰动的情况下。", "content": "通过监测关键基础化学品(如原油、甲醇、聚乙烯等)的价格变化及其月度/年度同比环比数据,结合下游行业(如新能源汽车、纺织)的需求变化,评估成本传导机制及对终端产品利润的潜在影响,并据此调整投资组合。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:53:58", "modified_time": "2025-08-12 00:53:58", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "964ea9e9830741d8bd904e29424bbf31", "experience_type": "text", "when_to_use": "在筛选具备长期竞争优势的上市公司时,特别是在行业竞争加剧或技术创新驱动的市场环境中。", "content": "基于个股的财务指标(如毛利率、净利率)、市盈率分位数以及机构资金流向,优先选择估值处于合理区间且具备明确技术壁垒或市场份额提升逻辑的标的。同时,结合调研频率和分析师覆盖情况,进一步验证其成长性和可持续性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:53:58", "modified_time": "2025-08-12 00:53:58", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "bca392510b5e4479a48fc64765075b2a", "experience_type": "text", "when_to_use": "在评估媒体行业投资机会时,尤其是在传统媒体与新媒体交界处的转型期投资分析场景中。", "content": "在分析传统媒体和新媒体行业的供给结构与需求变化时,需特别关注数字化转型的进程以及头部平台的聚集效应。对于传统媒体,尽管其渠道垄断性减弱,但依托品牌公信力和专业内容把控仍能维持一定的壁垒;而新媒体则表现出显著的头部效应,尤其是短视频、直播等细分领域由少数巨头主导。此外,政策推动(如数字舞台、智能音视频创新应用)和技术赋能(如AI工具)将是推动行业增长的重要驱动力。因此,在投资决策中,优先考虑现金流健康且积极布局AI等新技术的企业,同时规避高杠杆、模式落后的公司。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:55:16", "modified_time": "2025-08-12 00:55:16", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d1d8b60e47304b6ea52d9e3aefb73296", "experience_type": "text", "when_to_use": "在对游戏行业进行市场研究及长期战略规划时,特别是在全球化出海趋势下的资产配置场景中。", "content": "游戏行业的增长潜力主要体现在细分领域的多元化发展(如IP游戏、女性向游戏、小程序游戏)以及政策驱动下的国际化战略。随着国务院将游戏出海纳入服务业开放试点战略,头部厂商可通过构建“IP研发-全球发行-本地化运营”的全产业链能力抢占欧美、日韩成熟市场以及东南亚新兴市场。技术层面,AIGC工具的应用能够显著降低翻译、美术等本地化成本,从而提升竞争力。因此,在制定投资策略时,应重点关注具备强大IP开发能力和全球化运营经验的游戏公司,并结合目标市场的文化偏好选择适合的投资标的。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:55:16", "modified_time": "2025-08-12 00:55:16", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "710aa86447bc47d5a3be082a04d9085b", "experience_type": "text", "when_to_use": "在进行信用债发行主体的风险评估时,特别是在媒体行业中以AAA级别为主的发债主体分析场景中。", "content": "媒体行业的信用债发行呈现明显的集中化特征,AAA级别主体占据主导地位,且债券类别以超短期融资债券和中期票据为主。从存续债来看,短期内存在较高的集中偿付压力,尤其是6个月内到期的债券规模较大。因此,在评估信用风险时,需综合考虑发行主体的现金流状况及其债务结构,避免因短期流动性问题导致违约风险。此外,监管环境的变化(如税务报送规定和反不正当竞争法修订)也会影响企业的经营稳定性,应在分析中纳入考量。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:55:16", "modified_time": "2025-08-12 00:55:16", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "df8bc6ce737c48c7b7b72a9fcd5205e2", "experience_type": "text", "when_to_use": "在客户咨询服务中提供关于媒体行业未来1-2年周期发展的预测建议时,特别是在广告市场需求疲软背景下的财务规划场景中。", "content": "媒体行业正处于信用紧缩末期向出清修复期过渡的阶段,整体复苏仍受制于广告需求疲软和部分企业高负债问题。预计未来1-2年内,行业将呈现分化趋势:现金流健康、积极布局AI等新技术的企业有望率先回暖,而高杠杆、模式落后的公司将面临持续出海或退出市场。因此,在为客户提供咨询服务时,应强调优化资本结构、增强抗周期能力的重要性,同时建议客户关注AI技术深度赋能带来的效率提升机会,以及垂直领域专业化、精品化趋势中的潜在收益点。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:55:16", "modified_time": "2025-08-12 00:55:16", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "34f068307f72468584d43943015c1da0", "experience_type": "text", "when_to_use": "在评估房地产开发项目的投资潜力时,尤其是在土地拍卖或竞标过程中。", "content": "成功分析土地拍卖结果需要综合考虑地块的地理位置、交通便利性、规划用途及溢价率等关键指标。例如,在深圳宝安沙井中心板块的土地拍卖中,绿城以11.47%的溢价率中标,表明该区域具有较高的市场认可度和未来发展潜力。此外,需关注竞拍参与者的数量和竞价轮次,这些数据可以反映市场对该地块的竞争激烈程度。通过对比起始楼面价与成交楼面价,结合周边市场环境(如房价趋势、供需关系),可进一步验证投资价值。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:56:27", "modified_time": "2025-08-12 00:56:27", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e0b3b3368632472cba5b01c975b5b059", "experience_type": "text", "when_to_use": "在企业融资行为分析中,特别是涉及债券发行时,评估其成本结构和市场接受度。", "content": "新城控股完成10亿元中债增担保中期票据的发行,票息仅为2.68%,且认购倍数达到2.28倍,显示了市场对其信用状况的高度认可。此类案例说明,在低利率环境下,优质房企能够以较低成本获得长期资金支持。同时,中债增提供的担保进一步增强了投资者信心,降低了融资风险。在类似场景中,应重点关注企业的信用评级、融资工具的设计(如期限、利率)以及市场认购情况,以判断融资策略的有效性和可持续性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:56:27", "modified_time": "2025-08-12 00:56:27", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d3331a042f6a41aca788c28b1cbcd52d", "experience_type": "text", "when_to_use": "在地方政府主导的土地出让活动中,尤其是由本土国有企业参与的底价成交案例中。", "content": "南通如东河东片区3宗宅地均以底价成交,总金额达21.2亿元,且所有地块均由本土国有企业竞得。这一现象可能反映出地方政府希望通过国有企业稳定土地市场,并推动区域开发计划。在类似情境下,应深入分析地方财政压力、土地供应节奏及国企的角色定位。同时,需警惕潜在的政策干预对市场化定价机制的影响,以及由此带来的投资回报不确定性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:56:27", "modified_time": "2025-08-12 00:56:27", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6c8b4def2a904f6995e681cef7f34680", "experience_type": "text", "when_to_use": "在研究公司资产处置或土地收储补偿事件对公司财务状况的影响时。", "content": "百联集团因土地收储获得超过10亿元的首次补偿款,这不仅改善了公司的现金流状况,还可能为未来盈利提供支撑。在类似事件中,应详细核查补偿协议的具体条款(如付款进度、总额分配)及其对公司资产负债表和利润表的直接影响。此外,还需考虑土地收储后的再开发计划或资金用途,以评估其长期战略意义。这种类型的非经常性损益事件往往会对短期股价产生显著影响,因此也值得关注市场反应。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:56:27", "modified_time": "2025-08-12 00:56:27", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7d56288e70264825aecb5a94996d3736", "experience_type": "text", "when_to_use": "在评估电力行业投资机会时,特别是在火电和新能源领域,结合季节性用电需求、政策改革以及煤价波动的分析场景。", "content": "通过分析国家能源局发布的月度用电量数据及区域电力供需动态(如6月全社会用电量同比增长5.4%),结合天气因素和生产中断事件(如鄂尔多斯暴雨影响煤炭供应),可以预测短期内火电需求的增长趋势。此外,关注地方电力市场改革政策(如辽宁容量市场和现货市场的价格机制)有助于识别电价上涨潜力,并为投资者提供买入信号。此方法特别适用于Q3业绩预期较强的时期。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:57:34", "modified_time": "2025-08-12 00:57:34", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "fc57ad8f2eb34e298e42837e2e3bcdc7", "experience_type": "text", "when_to_use": "在新兴市场中研究储能技术对新能源利用效率的影响时,尤其是在快速发展的地区(如甘肃)进行长期战略规划。", "content": "新型储能项目的装机规模及其充电/放电能力(例如甘肃电网侧储能最大放电电力达391万千瓦,相当于4台百万千瓦火电机组)可作为衡量新能源利用率提升的重要指标。同时,需综合考虑储能设施与风光发电装机比例(如甘肃储能占风光装机的5%)以及年增长率(如YoY+65.6%)。这些数据可用于判断该地区是否具备长期投资价值,特别是在未来20年内政策支持持续的情况下。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:57:34", "modified_time": "2025-08-12 00:57:34", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ceba70d1f55a4eeebed9b9499373dd6c", "experience_type": "text", "when_to_use": "在高波动或危机条件下制定交易策略时,特别是针对火电、煤炭等周期性行业股票的短期战术操作。", "content": "当期货焦煤价格连续涨停后出现回调(如7月25日晚下跌),应警惕行业煤价压力对火电企业成本端的影响。然而,在确认生产恢复预期(如预计本周好转)的前提下,可抓住风格调整窗口期增加火电板块配置。建议采用反内卷逻辑(即逆向思维)布局:在市场情绪低迷时逐步建仓,待旺季来临前完成加码。此策略适合于牛市初期或熊市反弹阶段。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:57:34", "modified_time": "2025-08-12 00:57:34", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "43d678c65da24cfc958b44e1edd500bc", "experience_type": "text", "when_to_use": "在评估生物制药公司或相关创新疗法的投资机会时,特别是在突破性疗法认定(BTD)或其他监管里程碑事件发生后。", "content": "当一家生物技术公司获得FDA突破性疗法认定时,这通常是一个重要的监管和市场信号。投资者应重点关注该疗法的临床试验数据、目标适应症的市场规模、竞争格局以及潜在的商业化路径。此外,需结合公司财务状况评估其推进研发和商业化的能力。例如,Dyne的DYNE-251获得BTD后,预计将在2026年初提交BLA,这为投资者提供了一个明确的时间框架来评估风险与回报。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:58:34", "modified_time": "2025-08-12 00:58:34", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a648ffe2a882498ea86c6714ccdc1153", "experience_type": "text", "when_to_use": "在分析医药板块的整体表现及其子行业轮动策略时,尤其是在市场波动较大或经济周期转向的背景下。", "content": "医药板块的表现受多种因素驱动,包括政策变化、创新进展、市场需求及宏观经济环境。例如,在2025年8月5日,医药板块跑输沪深300指数,但疫苗和医疗研发外包子行业表现突出。这表明在市场整体疲软时,高增长潜力的细分领域(如疫苗和CRO)可能更具防御性。投资者应根据子行业的基本面和市场情绪调整配置比例,并关注领先指标(如临床试验进展、政策支持)以捕捉拐点机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:58:34", "modified_time": "2025-08-12 00:58:34", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "4df1ad18a1804730b19c87035099f5f1", "experience_type": "text", "when_to_use": "在评估医药公司的财务健康状况和增长潜力时,特别是在解读半年报或季报数据时。", "content": "通过分析九洲药业2025年上半年财报,可以发现其收入和净利润均实现双位数增长,显示出公司在成本控制和业务扩展方面的优势。投资者应特别关注核心业务的增长驱动因素(如新产品的贡献)、毛利率变化以及研发投入占比。同时,需警惕潜在风险,如市场竞争加剧或新药研发失败的可能性。这种综合分析方法适用于评估其他医药公司的业绩表现。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:58:34", "modified_time": "2025-08-12 00:58:34", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3eaa841d832d44019c402d2de3eb26e0", "experience_type": "text", "when_to_use": "在制定基于行业评级和个股评级的投资决策时,尤其是在构建多元化投资组合的过程中。", "content": "太平洋证券提供的行业和个股评级体系为投资者提供了清晰的决策框架。例如,对于被评为“中性”的生物医药Ⅱ行业,建议采取观望态度,避免过度配置;而对于被评为“买入”或“增持”的个股,则可考虑增加仓位。在实际操作中,还需结合自身的风险偏好和投资目标,动态调整持仓结构。此外,评级的变化往往反映了分析师对行业前景和公司基本面的最新判断,应及时跟踪并更新投资逻辑。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:58:34", "modified_time": "2025-08-12 00:58:34", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "903d54383454404db39d0cd5805eb14b", "experience_type": "text", "when_to_use": "在分析政府政策对特定行业(如医药生物)的中长期影响时,特别是在政策出台初期评估其潜在市场机会和投资方向。", "content": "通过解读政府投资基金的政策文件(如《工作指引》和《管理办法》),识别政策支持的关键领域(如脑机接口、生物制造等),并结合行业动态(如国资背景并购案例)评估政策对行业的赋能作用。重点关注政策导向与资本流动的协同效应,筛选出符合政策支持方向的龙头企业作为投资标的。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:59:24", "modified_time": "2025-08-12 00:59:24", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1648d6927c204eb68922672b7575c598", "experience_type": "text", "when_to_use": "在评估国资背景投资活动对行业整合和企业价值提升的影响时,特别是在并购交易频发的行业中(如医药生物)。", "content": "分析国资背景并购案例(如上海医药收购上海和黄药业股份)的交易结构、战略意图及协同效应,结合行业趋势(如创新驱动、技术升级)评估并购对企业长期竞争力的影响。同时关注国资背景带来的资源整合能力和政策倾斜优势,判断标的企业的成长潜力和估值提升空间。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:59:24", "modified_time": "2025-08-12 00:59:24", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "af7b515062794ada9c552b47cf6c2625", "experience_type": "text", "when_to_use": "在制定基于政策周期的行业投资策略时,尤其是在新兴产业(如生物医药、人工智能)和传统产业升级领域。", "content": "根据政策周期(如《工作指引》明确的新兴产业布局和传统产业改造方向)划分投资优先级,结合市场环境(如牛市/熊市)调整资产配置策略。例如,在政策支持的早期阶段优先布局种子期和初创期企业,在政策落地后期关注龙头企业和技术成熟度高的项目,以实现风险收益平衡。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:59:24", "modified_time": "2025-08-12 00:59:24", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5f885b9b209e4f66a3a9e820675da4de", "experience_type": "text", "when_to_use": "在进行跨市场(发达市场 vs 新兴市场)行业投资机会对比分析时,特别是在政策驱动型行业中。", "content": "对比不同市场的政策支持力度和执行效率(如中国医药行业的国资并购活跃度 vs 其他新兴市场的政策落地情况),结合本地市场动态(如监管框架、竞争格局)评估投资机会。重点关注政策稳定性高、资本流入活跃的市场,并结合货币因素(如汇率波动)优化投资决策。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 00:59:24", "modified_time": "2025-08-12 00:59:24", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3dd6d25dbb7e436c80c46e231833e544", "experience_type": "text", "when_to_use": "在评估新兴技术(如人工智能)对不同行业就业市场和投资机会的影响时,尤其是在经济周期波动或技术变革加速的时期。", "content": "通过分析学生群体对人工智能的看法与计划大学专业之间的关系,可以推断出哪些行业可能在未来面临更大的技术转型压力或机遇。例如,商科、计算机科学和健康科学领域的学生对AI持更积极态度,这表明这些行业可能更快接受AI技术并产生相关投资机会。而在艺术和建筑领域,学生对AI取代工作的担忧较高,则提示这些行业可能需要更长时间适应技术变革,适合长期布局而非短期投机。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:00:28", "modified_time": "2025-08-12 01:00:28", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1ce1f1a4a57d47be8e7eb752075ace99", "experience_type": "text", "when_to_use": "在设计针对特定客户群体(如不同性别或教育背景)的金融产品或咨询服务时,尤其是在涉及职业规划、教育投资或技能提升相关的财务建议场景中。", "content": "研究表明,男性普遍比女性对AI持更乐观态度,并认为其有助于提高技能和竞争力。因此,在为女性客户提供关于技术相关投资或职业发展的建议时,需特别关注她们的风险偏好和认知差异,提供更具说服力的数据支持和案例研究来缓解潜在的抵触情绪。同时,对于接受过AI培训的学生群体,可推荐更具前瞻性的科技类基金或教育贷款产品。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:00:28", "modified_time": "2025-08-12 01:00:28", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "407e08aa6c90496f95346d593e38dbd9", "experience_type": "text", "when_to_use": "在制定跨市场的投资策略时,尤其是发达市场与新兴市场之间因技术普及率和教育资源分配不均导致的投资回报差异显著的情况下。", "content": "高中阶段是否提供AI培训显著影响了学生对AI的态度及技能提升效果。这一发现表明,在发达市场中,由于技术教育普及度更高,投资者可优先考虑与AI相关的高增长行业(如自动化、数据分析)。而在新兴市场,尽管短期内AI应用可能受限,但随着基础设施完善和技术教育推广,可能存在长期价值洼地,适合配置成长型资产并进行耐心等待。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:00:28", "modified_time": "2025-08-12 01:00:28", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9ea4be65a8cb44ec8f976f3ee3cea865", "experience_type": "text", "when_to_use": "在量化分析社会趋势如何驱动资产类别表现时,特别是当探讨技术创新是否会减少歧视、改变就业结构或改善生活条件等宏观议题时。", "content": "调查结果显示,学生普遍认为AI会减少歧视并对其个人生活带来正面影响,但对其整体社会影响存在分歧。这种矛盾心理反映了市场参与者对AI技术的复杂预期。在构建投资组合时,应结合此类社会情绪数据,综合判断AI相关股票、债券或其他衍生品的表现潜力。例如,专注于公平算法开发的公司可能因‘减少歧视’的需求而受益,成为稳健投资标的。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:00:28", "modified_time": "2025-08-12 01:00:28", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "60ef18f4f19c48eba1a9252371cccd2e", "experience_type": "text", "when_to_use": "在评估房地产市场动态并对未来政策趋势进行预测时,尤其是在经济周期波动或行业拐点期间。", "content": "通过分析新房与二手房成交数据、库存去化周期及土地市场表现,结合近期政策动向(如政治局会议和城市更新相关政策),可以识别增量优化与存量改善的潜在机会。例如,当新房成交同比降幅扩大但库存下降时,可能表明市场正在经历需求疲软但供给端调控有效,此时应关注‘高质量发展城市更新’等政策推动的长期投资主题,并优先选择布局核心城市的优势房企。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:01:37", "modified_time": "2025-08-12 01:01:37", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "fe093ffb15604383bac432bd1b0f4a90", "experience_type": "text", "when_to_use": "在制定针对不同资产类别的投资策略时,特别是需要平衡短期战术操作与中长期战略规划的情况下。", "content": "根据高频交易数据(如百城土地市场表现)和区域分化特征(一、二、三四线城市的成交量价变化),可精准定位高潜力资产类别和地区。例如,在土地市场量跌价涨且溢价率上升的城市,表明开发商对优质地块的竞争加剧,这可能预示着未来房价企稳甚至反弹的信号,适合配置相关地产股或REITs产品。同时,对于库存压力较大的低线城市,则需谨慎规避风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:01:37", "modified_time": "2025-08-12 01:01:37", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a53cecd9f0774497bba85a8ef6b029c5", "experience_type": "text", "when_to_use": "在筛选具有α属性或困境反转潜力的标的公司时,特别是在行业整体低迷但部分企业展现出突破性增长的阶段。", "content": "从销售数据、拿地表现以及财务健康度出发,构建基于‘基本面+估值修复弹性’的选股框架。例如,推荐关注那些重仓高能级城市、产品力突出且负债结构稳健的房企(如滨江集团、华润置地)。此外,还应注意捕捉受益于政策纾困逻辑的小市值‘黑马’企业(如保利置业集团),这些公司往往因业绩改善预期而具备较高的估值修复空间。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:01:37", "modified_time": "2025-08-12 01:01:37", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f6cb4b1092fd4655b4a20d32024b1601", "experience_type": "text", "when_to_use": "在应对货币宽松环境下的融资成本优化问题时,尤其是债券发行窗口期的把握。", "content": "密切跟踪房企国内债券发行量、偿还量及其净融资额的变化,结合央行货币政策导向(如LPR下调、存量房贷利率调整)判断最佳融资时机。例如,当总发行量环比下降但同比大幅增加时,表明当前融资环境相对宽松,但仍存在结构性压力;此时建议重点支持现金流充裕、信用评级较高的头部房企扩大低成本直接融资,以增强抗风险能力并抢占市场份额。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:01:37", "modified_time": "2025-08-12 01:01:37", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "35151286d26444e98be3f2713792e134", "experience_type": "text", "when_to_use": "在评估半导体行业或高科技行业的投资价值时,特别是在技术快速迭代和政策导向明确的市场环境中。", "content": "通过分析行业供需结构、技术创新能力和政策支持方向,识别产业链中具备结构性机会的关键环节。例如,在供给端关注高端设备与材料的国产化替代潜力,需求端则聚焦AI算力、新能源汽车等新兴领域带来的增量需求。同时,结合财税优惠和融资环境,优先选择受益于政策红利和技术突破的企业进行投资布局。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:02:41", "modified_time": "2025-08-12 01:02:41", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0518502e4991490b896fd442a19b07ce", "experience_type": "text", "when_to_use": "在制定针对复杂供应链行业的风险管理策略时,尤其是在地缘政治风险加剧和全球供应链重组的背景下。", "content": "从上游原材料到下游应用的全链条视角出发,综合评估各环节的议价能力、竞争格局及潜在风险点。对于高度依赖进口的核心组件(如光刻机),应警惕国际出口管制升级可能引发的供应中断;而对于成熟制程领域,则需关注因产能过剩导致的价格战压力。此外,建立动态监测机制以跟踪库存周期和价格波动,及时调整头寸以规避系统性风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:02:41", "modified_time": "2025-08-12 01:02:41", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d73692b80cbc4d37a25d7ee5676cce87", "experience_type": "text", "when_to_use": "在预测特定资产类别(如半导体股票或相关债券)的价格走势时,特别是在信用扩张初期阶段或去库存周期末期。", "content": "结合宏观经济数据、行业基本面和技术面指标,判断价格底部区间出现的时间节点。例如,当库存周转天数逐步下降且新增产能释放趋于稳定时,可预期价格反弹即将来临。同时,观察发债规模及其类型变化(如可转债发行增加),以此作为企业融资需求旺盛、行业景气度回升的重要信号,并据此优化交易策略。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:02:41", "modified_time": "2025-08-12 01:02:41", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "81e8c3bedf704c23aa189512f8798779", "experience_type": "text", "when_to_use": "在设计跨周期的投资组合配置方案时,尤其是在不同经济周期下需要平衡短期战术操作与长期战略规划。", "content": "根据行业所处的信用扩张阶段和盈利恢复节奏,灵活调整资产配置权重。例如,在信用扩张初期,可适当增配高成长性的科技股以捕捉估值提升空间;而在盈利底部抬升阶段,则转向具有稳健现金流和较强抗风险能力的龙头企业。同时,利用政策扶持窗口期(如专项再贷款、税收减免等)降低融资成本,增强整体组合的防御性和收益弹性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:02:41", "modified_time": "2025-08-12 01:02:41", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "29638b54f86748a4b51a626fc130c709", "experience_type": "text", "when_to_use": "在评估农业相关资产(如畜牧业、农产品)的投资价值时,特别是在市场供需关系波动较大的情况下。", "content": "利用历史产量和价格数据的波动趋势,结合自然因素(如气候条件、疫病防控)和经济因素(如政策支持、国际贸易动态),构建综合分析框架。通过识别关键驱动因素(如非洲猪瘟对猪肉市场的冲击或政府补贴对牛肉产业的推动),预测未来供需平衡点,并据此评估资产的长期投资潜力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:03:41", "modified_time": "2025-08-12 01:03:41", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "44b68028c8694568984ebccbfe1bcbe4", "experience_type": "text", "when_to_use": "在新兴市场中分析与食品供应链相关的行业(如乳制品、肉类加工)的增长机会时。", "content": "通过分解产业链各环节(如饲料研发、养殖技术优化、终端产品加工),识别能够提升生产效率和降低成本的关键技术创新点。例如,针对牛奶产量增长趋势,关注饲料配方优化和奶牛品种改良的技术突破,同时考虑政策支持和消费者需求变化的影响,为投资决策提供量化依据。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:03:41", "modified_time": "2025-08-12 01:03:41", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "625cf44ef007463fbd9e0b97bdb9e703", "experience_type": "text", "when_to_use": "在制定跨周期投资策略时,特别是在面对经济周期性调整或突发事件(如疫情、自然灾害)对特定行业的影响时。", "content": "采用时间序列分析方法,将行业数据按不同时间段(如短期波动期、中期恢复期、长期增长期)进行分段研究。例如,在分析中国猪肉市场时,发现2019年非洲猪瘟导致的供应短缺后快速恢复的模式,可作为判断类似事件下其他行业反弹能力的参考。此外,结合宏观经济指标(如GDP增长率、通胀水平)进行情景模拟,以增强策略的适应性和抗风险能力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:03:41", "modified_time": "2025-08-12 01:03:41", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e56e1b4c499b4fdbb585a07d9c38de4f", "experience_type": "text", "when_to_use": "在评估政策变化对金融机构盈利能力的短期和长期影响时,特别是在涉及税收或监管调整的情况下。", "content": "通过定量分析方法,结合资产负债表数据和现金流预测,评估政策变化对财务指标的具体影响。例如,计算新增税负对利润的边际影响时,应考虑资产配置的动态调整能力(如转向高股息资产)以及市场对新政策的潜在反应(如债券票息上升)。同时,需区分短期影响与长期趋势,以提供全面的风险对冲建议。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:04:38", "modified_time": "2025-08-12 01:04:38", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "bcd72e7363fe4f5db576b6d50ffdfd5e", "experience_type": "text", "when_to_use": "在进行固定收益类资产配置优化时,尤其是在利率、税收或久期管理发生变化的情况下。", "content": "利用久期分析和现金流匹配模型,量化不同债券类别在资产配置中的比例变化及其对整体投资组合的影响。例如,通过计算每年需要重新配置的债券规模,并结合票息率和税率变化,评估税后收益的变化幅度。此外,考虑极端情景下的长期影响,制定应对策略,如逐步增加权益类资产配置以对冲固定收益资产的潜在收益下降。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:04:38", "modified_time": "2025-08-12 01:04:38", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d0e96a645a7e4ca487b716313b4930bb", "experience_type": "text", "when_to_use": "在为保险行业或其他金融机构提供投资评级和战略建议时,尤其是在市场环境或政策框架发生重大变化的情况下。", "content": "结合定量测算与定性分析,综合评估政策变化对行业整体盈利能力的影响,并通过敏感性分析验证结论的稳健性。例如,在维持‘看好’评级时,需明确说明关键假设(如所得税免税优势持续存在)及其合理性,同时提示可能的风险因素(如保单销售不及预期或长端利率大幅下行)。此外,推荐具体标的时,应突出其在行业中的竞争优势(如资产负债久期匹配较理想)。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:04:38", "modified_time": "2025-08-12 01:04:38", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "48d450a731fd4e959441124962b6759b", "experience_type": "text", "when_to_use": "在设计跨周期的投资策略时,尤其是在经济周期转换或政策环境不确定的情况下。", "content": "采用分阶段分析方法,分别评估短期、中期和长期的财务影响。短期内关注政策直接影响(如增值税恢复征收),中期内考虑资产配置调整的可行性(如转向高股息资产),长期内则需评估结构性变化(如债券收益率曲线的潜在变化)。同时,结合历史数据和情景模拟,提供多维度的风险对冲方案。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:04:38", "modified_time": "2025-08-12 01:04:38", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7365ddabbfaa49398dce530891ed1184", "experience_type": "text", "when_to_use": "在评估一家公司是否进入业绩兑现期,尤其是在订单驱动型行业(如油气设备或工程服务)中,判断其未来收入和利润增长的可持续性。", "content": "通过分析公司在手订单的转化节奏以及分产品收入的增长趋势,结合区域市场(如中东、北美)的需求动态,可以有效预测公司的业绩拐点。例如,杰瑞股份的Q2扣非净利润同比增长37%,表明其海外订单(尤其是中东EPC项目)正在快速转化为收入。此外,需关注毛利率变化及费用控制能力,以验证盈利能力的稳定性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:05:37", "modified_time": "2025-08-12 01:05:37", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0e1b11c510474f7fb24fce55a57348da", "experience_type": "text", "when_to_use": "在跨国业务扩展中,评估企业海外市场的竞争力及潜在增长空间,特别是在高准入门槛的市场(如中东和北美油服市场)。", "content": "通过研究企业在目标市场的历史表现、品牌认可度及技术优势,可以判断其市场份额提升的潜力。例如,杰瑞股份凭借KOC项目的成功交付,显著提升了中东市场的知名度,并在天然气设备及EPC领域占据领先地位。同时,北美市场的电驱压裂设备因其性能优势,有望逐步打开替换市场。这种双市场逻辑有助于识别企业的长期增长驱动力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:05:37", "modified_time": "2025-08-12 01:05:37", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "306494fad3404c9698881fd8aa27864b", "experience_type": "text", "when_to_use": "在分析企业现金流改善的原因及其对未来财务健康的影响时,特别是在资本密集型行业中。", "content": "通过拆解经营性净现金流的构成,重点关注海外客户的回款质量和收入结构的变化。例如,杰瑞股份2025H1经营性净现金流同比增长196%,主要得益于海外客户回款质量优异。此外,随着海外收入占比提升,预计利润率和现金流将持续改善。这一经验适用于评估企业在全球化扩张中的财务稳健性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:05:37", "modified_time": "2025-08-12 01:05:37", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "de2cd555eb9f4a99a656149bdf28b50e", "experience_type": "text", "when_to_use": "在估值与业绩双击的投资机会中,特别是在行业景气度持续上升且公司市占率稳步提升的情况下。", "content": "通过结合行业景气周期(如油气开采景气度)和公司市占率提升的双重逻辑,可以识别估值与业绩双击的机会。例如,杰瑞股份在中东和北美市场的布局逐步进入收获期,叠加2025年为业绩释放拐点,PE估值处于较低水平(14倍),未来有望迎来估值修复。这一框架适用于挖掘被低估的成长型标的。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:05:37", "modified_time": "2025-08-12 01:05:37", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b96860306b26446683a28186a0daca04", "experience_type": "text", "when_to_use": "在评估一家消费类公司(例如食品或宠物用品行业)的长期增长潜力时,特别是在其自主品牌影响力和市场份额扩张阶段。", "content": "通过分析公司的产品组合、区域收入分布及毛利率变化,可以识别出高增长品类(如宠物主粮和零食)对整体盈利能力的贡献。重点关注自主品牌在国内市场的渗透率提升以及境外业务的规模化效应,同时结合产能布局优化(如海外工厂投产)评估其未来收入增长潜力。此外,费用结构的变化(如销售费用和管理费用的增加)应被视为品牌推广和运营效率提升的短期成本,而非长期风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:06:44", "modified_time": "2025-08-12 01:06:44", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0a55dd60a6ec4627a2d126019485ca10", "experience_type": "text", "when_to_use": "在进行股票估值和投资评级决策时,尤其是在牛市或中长期战略规划场景下。", "content": "利用历史财务数据(如营收、净利润增长率和EPS趋势)结合前瞻性预测(如未来3-5年的盈利预测),计算关键估值指标(如P/E比率)。对于具有稳定增长预期的公司,采用相对估值法(如与行业平均P/E对比)来判断潜在上涨空间,并根据评等定义(如“买进”对应15%-35%的潜在上涨空间)作出投资建议。确保考虑季节性因素(如电商销售旺季)对短期业绩的影响,但不过度依赖短期波动。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:06:44", "modified_time": "2025-08-12 01:06:44", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "4184f0c4edc6400e815d33e82d2913c9", "experience_type": "text", "when_to_use": "在跨境投资或涉及多区域业务的公司分析中,特别是在不同监管框架和货币条件下评估风险和收益时。", "content": "分析公司在不同市场的收入占比及其对应的毛利率差异,识别主要驱动因素(如国内市场的高毛利和海外市场的规模化效应)。同时关注关税政策、汇率波动和全球供应链布局对公司盈利能力的影响。对于新兴市场业务,需特别注意原材料价格波动和费用投放超预期的风险;而对于发达市场,则需关注品牌定位和市场竞争格局。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:06:44", "modified_time": "2025-08-12 01:06:44", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "96b53f9e56534d4f916d59d1261bbdc0", "experience_type": "text", "when_to_use": "在制定客户咨询服务方案时,尤其是针对机构投资者或高净值个人客户的资产配置需求。", "content": "综合使用定量分析(如财务报表数据、估值模型)和定性分析(如行业趋势、管理层战略)为客户提供建议。明确指出潜在风险(如原材料价格上涨、费用超预期)并提供相应的对冲策略(如多元化投资或选择防御性板块)。同时,根据客户的风险偏好和时间跨度,推荐适合的投资工具(如股票、固定收益产品或另类投资)。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:06:44", "modified_time": "2025-08-12 01:06:44", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "def699bbc5f041e9b6f292f075422dbb", "experience_type": "text", "when_to_use": "在评估一家技术驱动型公司(如半导体、AI芯片设计企业)的未来盈利能力和估值溢价时,特别是在其处于行业转型或新兴需求加速阶段。", "content": "通过分析公司的核心业务驱动因素(如知识产权授权收入及量产业务收入的增长趋势),结合在手订单转化率和客户项目投入节奏,可以更准确地预测其短期和中期财务表现。此外,需关注公司在行业中的稀缺性(如A股市场的独特定位)及其技术积累、客户资源等竞争优势,这些因素往往对估值溢价产生显著影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:07:46", "modified_time": "2025-08-12 01:07:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b133fa1b31114330bb8a83dd8d0776ec", "experience_type": "text", "when_to_use": "在研究定制化服务行业(如ASIC芯片定制)的市场动态和竞争格局时,尤其是在大厂自研趋势和技术革新推动需求增长的背景下。", "content": "识别并跟踪行业内的关键趋势(如国际巨头和国内头部企业的自研ASIC布局),结合公司在全流程服务能力上的优势(如IP储备、先进封装技术、后端支持能力),评估其订单获取和转化潜力。同时,需关注行业共识对市场需求的放大效应,以及公司如何通过研发资源配置优化提升盈利能力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:07:46", "modified_time": "2025-08-12 01:07:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "495dbe04c9e44ddbbf5f83e705626a6c", "experience_type": "text", "when_to_use": "在制定投资评级和目标价时,特别是在公司经历亏损收窄、盈利能力改善且未来盈利预期明确的情况下。", "content": "通过对公司季度业绩环比变化(如营收、毛利率、净利润率等指标)的细致拆解,结合未来1-3年的盈利预测调整,判断其基本面拐点是否确立。同时,需综合考虑当前估值水平(如P/E、P/B)与行业基准的偏离程度,以及市场对公司稀缺性和长期战略价值的认可度,从而得出合理的投资评级和风险提示。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:07:46", "modified_time": "2025-08-12 01:07:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6581ab5753ad4ac599db108dcf004c39", "experience_type": "text", "when_to_use": "在分析公司资产负债表健康状况及现金流管理能力时,特别是在资本密集型行业(如半导体制造)中。", "content": "重点关注流动资产与流动负债的匹配情况(如货币资金覆盖率、合同负债规模),以及非流动资产的配置效率(如固定资产、无形资产占比)。同时,结合经营活动现金流、投资活动现金流和筹资活动现金流的变化趋势,评估公司在扩张阶段的资金链安全性和融资能力,确保其能够支撑未来的研发投入和业务扩展。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:07:46", "modified_time": "2025-08-12 01:07:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "42e1e63be9254da69e9c68da126c431a", "experience_type": "text", "when_to_use": "在评估创新药物研发管线的潜在投资价值时,尤其是在针对罕见病或高未满足医疗需求领域(如复发胶质母细胞瘤)的生物技术公司中。", "content": "通过分析公司在研产品的临床试验进展、适应症市场规模以及竞争格局,可以有效判断其研发管线的商业化潜力。例如,P134作为全球领先的复发胶质母细胞瘤治疗产品,其临床试验批准通知书表明公司在该领域的技术领先性。结合GBM市场空间(2029年预计达139.68亿元人民币),可估算未来收入贡献,同时需关注研发失败风险和市场竞争动态。此方法适用于生物科技行业的早期投资分析。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:08:52", "modified_time": "2025-08-12 01:08:52", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "aff85e1779de4e268111cc07b288b0d6", "experience_type": "text", "when_to_use": "在长周期资产配置中,面对研发投入较高的医药企业,需评估其财务健康状况及盈利能力趋势。", "content": "通过分析公司的研发费用率(2025E为12.5%)、现金流状况(2025E净现金流1623百万元人民币)以及资产负债率(2025E为0.3),可以判断企业在高强度研发下的财务稳定性。此外,结合归母净利润增长率(2025E为12.9%)和EBITDA变化趋势,可进一步验证企业的长期盈利潜力。此经验适用于长期战略规划中的企业基本面分析。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:08:52", "modified_time": "2025-08-12 01:08:52", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5fdeb653919d4baba008d35dd06a0b3e", "experience_type": "text", "when_to_use": "在股票估值过程中,尤其是对处于研发密集型行业的公司进行PE/PB/EV-EBITDA等相对估值法的应用。", "content": "当目标公司(如天士力)的研发管线逐步进入临床后期阶段时,应综合考虑估值指标的动态变化。例如,2025E的PE为22.9倍,低于行业平均水平,反映了市场对其短期盈利波动的担忧;但EV/EBITDA从2024年的12.0倍升至2025E的12.7倍,暗示了市场对其研发成果商业化的预期提升。此方法适用于成长型股票的投资分析与定价策略制定。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:08:52", "modified_time": "2025-08-12 01:08:52", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c80f78685aa141cbbbd1d49300750154", "experience_type": "text", "when_to_use": "在评估特定板块(如中药Ⅱ)的投资机会时,尤其是在政策支持、消费升级和技术创新驱动下,行业整体景气度提升的情况下。", "content": "通过对板块评级(强于大市)及个股表现的交叉验证,可以识别出具有超额收益潜力的标的。例如,天士力股价在过去一年绝对涨幅为17.5%,跑赢上证综指5.9个百分点,显示了较强的防御性和进攻性。同时,结合华润三九医药股份有限公司等主要股东持股比例(28%),可评估机构投资者对公司前景的信心水平。此经验适合用于中期组合调整中的板块轮动策略。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:08:52", "modified_time": "2025-08-12 01:08:52", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3f5ee9956133477da41980a45364833a", "experience_type": "text", "when_to_use": "在评估高科技行业(如AI服务器、数据中心基础设施)相关企业的投资价值时,尤其是涉及复杂技术升级和产品迭代的场景。", "content": "通过分析企业是否具备前瞻性的技术研发布局和技术卡位优势,可以有效预测其未来市场份额的增长潜力。例如,在AI算力需求快速增长的背景下,重点关注企业在高阶HDI、高速多层板等高端PCB产品上的技术储备和产能扩张计划,能够帮助识别潜在的高增长标的。此外,结合下游客户合作紧密度以及新一代产品的共同开发情况,可进一步验证企业的市场竞争力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:09:59", "modified_time": "2025-08-12 01:09:59", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ccd2e4464fda4496945974688a08f0c4", "experience_type": "text", "when_to_use": "在进行跨周期财务预测时,特别是在需要估算企业因行业趋势变化而带来的收入增长潜力的情况下。", "content": "利用历史数据与行业趋势相结合的方法,构建基于分阶段技改及扩产项目的收入与利润预测模型。例如,针对沪电股份的案例,通过对其青淞厂区技改项目、昆山扩产项目等关键投资计划的分解,分别计算各阶段新增营收和净利润贡献,并综合考虑税率、折旧等因素的影响,最终形成对2025-2026年的详细盈利预测。这种方法特别适用于具有明确资本支出计划且行业需求稳定的公司。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:09:59", "modified_time": "2025-08-12 01:09:59", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c0e3519aba7444f4b0e9d55c21709cc6", "experience_type": "text", "when_to_use": "在风险提示部分的撰写中,尤其是在涉及供应链依赖性强、原材料价格波动较大的制造业企业时。", "content": "从多个维度系统性地识别潜在风险,包括但不限于下游需求波动、技术创新节奏、行业竞争格局及原材料成本压力。例如,对于PCB制造企业,需关注AI算力领域发展速度可能带来的技术迭代风险,同时密切跟踪覆铜板、铜球等核心原材料的价格走势,以评估其对毛利率的潜在影响。这种全面的风险框架不仅增强了研究报告的可信度,还为投资者提供了更清晰的决策依据。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:09:59", "modified_time": "2025-08-12 01:09:59", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ae52203234e04a2e9ef365168e36e8b9", "experience_type": "text", "when_to_use": "在评估企业国际化战略时,尤其是在新兴市场或发展中地区投资设厂的可行性分析中。", "content": "企业在进行海外扩张时,应优先考虑目标市场的本地需求、供应链协同效应以及成本优化潜力。例如,奥瑞金通过将国内部分生产设备搬迁至海外项目,不仅降低了现金投入总额,还提升了国内生产基地的有效产能利用率。这种策略能够在不显著增加财务负担的情况下,实现产能的全球化布局,同时规避单一市场风险。建议在类似场景中,充分评估设备迁移的经济性、本地市场需求的长期增长潜力以及与现有业务的协同效应。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:10:55", "modified_time": "2025-08-12 01:10:55", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "425ab0447ef04ac89d1743edd644fe62", "experience_type": "text", "when_to_use": "在并购整合后的企业盈利能力评估及未来盈利弹性预测中,特别是在行业集中度提升的背景下。", "content": "并购完成后,企业需要关注市场份额提升带来的定价权增强和成本优化机会。例如,奥瑞金通过并购中粮包装提升了二片罐国内市场占有率,并预计后续行业格局优化将带来盈利改善。在类似场景中,建议结合行业供需动态、原材料价格波动及并购贷款利息等阶段性因素,综合评估短期业绩拖累与长期利润释放的平衡点。此外,应重点关注龙头企业在行业触底反弹阶段的盈利弹性,提前布局以捕捉潜在收益。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:10:55", "modified_time": "2025-08-12 01:10:55", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f2162f3ce5a24cb685a1fe5afeeef76b", "experience_type": "text", "when_to_use": "在制定多元化资产配置策略时,特别是在高波动期或经济复苏初期,评估特定行业的周期性表现与估值吸引力。", "content": "在当前市场环境下,奥瑞金的市盈率(P/E)从17.85倍下降至9.79倍,显示出估值修复空间较大。结合其海外市场扩展计划及行业整合优势,该标的具备中长期投资价值。在类似场景中,建议投资者关注低估值、高成长潜力的标的,特别是那些能够通过国际市场拓展或行业整合实现盈利中枢上移的企业。同时,需警惕原材料价格波动及海外项目推进不及预期的风险,确保投资组合的稳健性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:10:55", "modified_time": "2025-08-12 01:10:55", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "22426f4d2fdb4ff5ac80443c6061f7d5", "experience_type": "text", "when_to_use": "在评估一家快速成长的科技或消费类公司时,特别是在其收入和利润呈现高增长趋势的情况下。", "content": "成功分析的关键在于结合财务数据与业务驱动因素进行深度拆解。例如,在九号公司的案例中,通过分季度、分业务和地区对收入增长进行分解,识别出电动两轮车业务的翻倍增长和内销市场的强劲表现是核心驱动力。此外,毛利率和净利率的变化提供了盈利质量的信号,而费用率的改善则反映了运营效率的提升。这种结构化分析方法适用于高增长企业的估值建模和投资建议制定。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:11:56", "modified_time": "2025-08-12 01:11:56", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "bde5d773323f4292888ee80599e9f9c5", "experience_type": "text", "when_to_use": "在制定长期投资策略时,特别是针对具有多元化产品矩阵和全球化布局的企业。", "content": "从九号公司的分析中可以看出,持续的产品创新和渠道拓展是支撑其长期增长的核心竞争力。通过跟踪公司在不同市场(如国内电商平台和海外KA渠道)的渗透情况,可以判断其全球化战略的执行效果。同时,关注研发支出和新品发布频率,能够评估企业在技术壁垒和品牌溢价方面的潜力。这一框架适用于需要平衡短期业绩波动与长期增长潜力的投资决策场景。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:11:56", "modified_time": "2025-08-12 01:11:56", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d0eab049953344be9f5ff7db6f03319c", "experience_type": "text", "when_to_use": "在选择标的进行价值投资时,尤其是在比较市盈率(PE)、市净率(PB)等估值指标的基础上寻找低估机会。", "content": "九号公司的估值分析显示,随着盈利增速加快,未来三年的动态PE将从19.93倍降至11.72倍,这为投资者提供了较高的安全边际和潜在回报空间。在实际操作中,可以通过横向对比同行业其他公司的估值水平,并结合历史估值区间,判断目标公司是否存在低估。此外,ROE、ROIC等资本效率指标也是筛选优质资产的重要参考。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:11:56", "modified_time": "2025-08-12 01:11:56", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "92cd07ea409541dd9f274373a36db8cd", "experience_type": "text", "when_to_use": "在评估一家制造类企业的短期运营策略时,特别是在淡季销量下降但库存增加的情况下,判断其是否为未来订单做准备。", "content": "通过分析企业月度产销数据的同比与环比变化,结合行业季节性特征和历史趋势,识别企业在淡季主动加库的行为。这种行为通常表明公司对未来市场需求持乐观态度,并提前储备库存以应对后续订单交付需求。同时,应关注库存周转率和存货结构,确保库存增加不会对现金流造成过度压力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:12:44", "modified_time": "2025-08-12 01:12:44", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f3291c5b474f4e34a69fe71e7d74de77", "experience_type": "text", "when_to_use": "在跨国市场拓展背景下,评估一家企业在特定区域市场的竞争力和增长潜力。", "content": "利用市场份额数据(如欧洲市场市占率)和大额订单信息(如巴基斯坦新能源公交订单),结合区域经济政策和行业景气度,评估企业的国际化战略成效及可持续性。需特别注意不同市场的监管环境、货币风险和竞争格局,以判断其长期盈利能力和收入稳定性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:12:44", "modified_time": "2025-08-12 01:12:44", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "566cb954708a451f84fa11266fef7de8", "experience_type": "text", "when_to_use": "在预测一家企业的中长期财务表现时,尤其是在传统制造业领域,需要结合行业周期性和宏观经济因素进行综合分析。", "content": "基于历史财务数据(如营收增长率、毛利率和净利润率)以及行业周期性特点,构建多情景财务模型,预测未来3-5年的盈利能力。同时,考虑国内外需求波动、原材料价格变化和汇率影响,动态调整假设条件。此外,重点关注研发支出占比和资本开支计划,以评估企业的技术创新能力和长期竞争力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:12:44", "modified_time": "2025-08-12 01:12:44", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d6d2215a05bd4a91a804c90012e23587", "experience_type": "text", "when_to_use": "在制定投资评级和目标价时,特别是针对具有明确增长预期的中大型上市公司。", "content": "采用相对估值法(如P/E、P/B)和绝对估值法(如DCF模型),结合行业基准和公司历史估值区间,设定合理的估值倍数。同时,根据盈利预测数据(EPS、ROE等)和市场情绪,推导目标价范围。需注意宏观经济环境、行业政策变化和突发事件可能带来的下行风险,并在报告中充分披露。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:12:44", "modified_time": "2025-08-12 01:12:44", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "14e433f23a9b44ba8293be1779f12f07", "experience_type": "text", "when_to_use": "在评估高科技制造企业(如显示面板设备供应商)的长期增长潜力时,尤其是在行业技术升级(如从6代线到8.6代线)和新产品周期(如折叠屏手机或固态电池)驱动资本开支的背景下。", "content": "通过分析下游行业的资本开支计划、技术迭代趋势以及供应链关系,识别企业在高壁垒细分市场中的竞争优势。例如,联得装备在8.6代AMOLED生产线中中标自动贴合设备,表明其在后段设备领域的技术领先地位,并结合苹果折叠iPhone的P1开发阶段,推测未来订单增长的可能性。此外,关注公司在新兴领域(如固态电池设备)的研发投入和市场布局,评估其多元化增长潜力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:13:57", "modified_time": "2025-08-12 01:13:57", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b8b08096ff0e4e34b819fd82565d30d2", "experience_type": "text", "when_to_use": "在进行投资评级调整和盈利预测修正时,特别是在市场需求波动较大或项目落地时间不确定的情况下(如面板行业景气度波动或车载订单不及预期)。", "content": "根据项目中标及下单的时间节点,结合行业景气度和宏观经济环境,动态调整盈利预测和投资评级。例如,在联得装备案例中,由于8.6代AMOLED生产线的资本开支集中在明后年落地,分析师下调了2025年的盈利预测,但仍维持“买入”评级,基于长期战略规划和行业增长逻辑。这种调整需平衡短期波动与长期增长潜力,确保评级的前瞻性和稳健性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:13:57", "modified_time": "2025-08-12 01:13:57", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "24c19236772b425fb81884aa357103aa", "experience_type": "text", "when_to_use": "在分析企业的财务健康状况和估值合理性时,特别是在资本密集型行业(如设备制造)中,评估其现金流管理能力、资产负债结构和估值溢价水平。", "content": "通过详细拆解资产负债表、现金流量表和利润表,评估企业的财务弹性和运营效率。例如,联得装备的资产负债率从2023年的45.18%下降至2024年的30.41%,显示出较强的去杠杆能力;但2025E的营运资金变动大幅增加,可能预示短期流动性压力。同时,结合市盈率(P/E)、市净率(P/B)和EV/EBITDA等估值指标,判断当前股价是否合理反映其成长性,避免高估或低估风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:13:57", "modified_time": "2025-08-12 01:13:57", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "aaddc552b2014f58a70264984739018e", "experience_type": "text", "when_to_use": "在跨资产类别和地理范围的投资组合构建中,特别是在新兴市场高成长行业(如中国电子制造)与发达市场成熟行业之间的配置权衡时。", "content": "综合考虑不同市场的监管框架、货币风险和本地经济动态,优化资产配置策略。例如,联得装备作为中国显示面板设备制造商,受益于国内政策支持和技术国产化趋势,但在国际竞争中仍面临技术和市场壁垒。投资者需权衡其在国内市场的高成长性与国际市场的潜在风险,结合行业周期和板块轮动规律,灵活调整投资权重。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:13:57", "modified_time": "2025-08-12 01:13:57", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e1d87763240a47d48fbebabbcee55f35", "experience_type": "text", "when_to_use": "在评估节能服务行业的公司投资价值时,尤其是在政策驱动型市场中分析其长期增长潜力和转型能力。", "content": "通过深入分析公司在行业中的竞争优势(如品牌影响力、技术积累、资本获取能力)以及其业务升级路径(如从“投资持有”向“投资持有+高端服务”的转变),可以有效预测其未来的盈利能力和估值提升空间。此外,需特别关注政策变化对行业需求的影响,并结合公司退出低效资产的战略调整评估其财务修复能力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:14:56", "modified_time": "2025-08-12 01:14:56", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d37ff4052ee0411cacb064064b0e93c9", "experience_type": "text", "when_to_use": "在进行跨区域或跨市场的节能服务行业投资决策时,尤其是在发达市场与新兴市场之间权衡风险与回报。", "content": "节能服务行业具有较强的地域性特征,不同地区的市场规模、政策支持力度和技术成熟度差异显著。例如,华东和华南地区的节能服务公司规模较大且集中度较高,而新兴市场可能存在更高的进入壁垒和政策不确定性。因此,在跨市场投资时,应优先考虑那些拥有强大资本实力和良好信用评级的头部企业,同时评估目标市场的政策稳定性及潜在客户粘性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:14:56", "modified_time": "2025-08-12 01:14:56", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7757219660084c1282032a0575055ea2", "experience_type": "text", "when_to_use": "在设计短期战术操作策略时,特别是在面对新能源补贴退坡或电价市场化改革等外部冲击的情境下。", "content": "当行业面临重大外部环境变化(如补贴取消或电价市场化加速)时,应迅速优化投资策略,将资金重点配置于自发自用比例高、客户粘性强的分布式光伏项目,同时提升电力市场交易能力以应对上网电价波动风险。此外,可通过代理用户市场化售电和绿电绿证等增值服务增加收入来源,从而缓解外部压力对盈利能力的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:14:56", "modified_time": "2025-08-12 01:14:56", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "86ac1c90c9aa420ab37d46863bef523d", "experience_type": "text", "when_to_use": "在分析多元化业务结构的公司时,特别是那些拥有创新业务和海外市场的上市公司。", "content": "评估公司在不同业务线和地理区域的表现时,需要关注各细分领域的收入增速、毛利率变化及其对整体盈利能力的影响。例如,创新业务和海外市场的增长潜力可以通过其营收占比、同比增速以及利润率趋势来判断,尤其是当这些业务在总营收中的贡献持续提升时,需结合国际市场需求和竞争环境进一步验证其可持续性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:15:47", "modified_time": "2025-08-12 01:15:47", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6c662318964644dc8561bd227b0d80e2", "experience_type": "text", "when_to_use": "在评估企业财务健康状况时,特别是在高资本支出和技术密集型行业中。", "content": "通过分析企业的现金流、资产负债表和费用率,可以识别其财务稳健性和运营效率。重点关注经营活动产生的现金流量净额的变化,以及研发、销售和管理费用的控制情况。例如,若公司能够在保持较高研发投入的同时优化费用率,则表明其具备长期竞争力和可持续发展能力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:15:47", "modified_time": "2025-08-12 01:15:47", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "caa84c7df6fa49e9ac53532eee360b72", "experience_type": "text", "when_to_use": "在预测企业未来盈利能力和估值时,特别是在行业周期波动或市场不确定性较高的情况下。", "content": "基于历史数据和当前市场动态,构建分阶段的财务预测模型(如三年期预测),并结合关键指标(如毛利率、净利润率、ROE等)进行敏感性分析。同时,应考虑外部风险因素(如海外需求、供应链问题)对预测结果的影响,并设置合理的安全边际以应对潜在的下行风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:15:47", "modified_time": "2025-08-12 01:15:47", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d3a1d86ccf7b436ebe466679807bf16e", "experience_type": "text", "when_to_use": "在制定投资建议时,特别是针对科技驱动型企业的股票评级决策。", "content": "综合运用基本面分析与相对估值法(如PE、PB、EV/EBITDA),并与行业基准指数对比,得出目标价格区间和推荐评级。例如,在技术创新显著且市场份额扩大的情况下,如果公司的估值低于行业平均水平,且未来增长预期明确,则可给予‘推荐’或‘谨慎推荐’评级,同时提示相关风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:15:47", "modified_time": "2025-08-12 01:15:47", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7d2fc425cda2413e80aaebf337be418f", "experience_type": "text", "when_to_use": "在评估一家公司是否值得投资时,特别是在其产品结构优化和收入增长强劲的情况下。", "content": "在分析企业的财务表现时,应重点关注其核心业务的增长趋势和盈利能力的提升。例如,在此案例中,宠物食品公司的主粮产品线毛利率显著改善(同比+0.79pct),同时境内外收入均保持高增长(境内+38.9%,境外+17.6%)。这种优化的产品结构和区域扩张策略表明企业具备较强的市场竞争力和可持续发展能力。投资者需结合收入增速、毛利率变化和市场份额提升等指标,判断企业的长期价值。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:16:54", "modified_time": "2025-08-12 01:16:54", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f67f20c8d6fb4a4db0c686619ba80f83", "experience_type": "text", "when_to_use": "在预测企业未来几年的盈利能力和估值水平时,尤其是在多因素驱动成本和费用上升的情况下。", "content": "通过详细拆解企业的费用结构并结合行业趋势,可以更准确地预测未来的盈利空间。例如,本案例中销售费用和管理费用的大幅增加(分别同比增长35.8%和82.5%)主要源于品牌推广和股权激励计划。这类支出虽然短期内影响利润,但长期来看有助于增强品牌影响力和团队稳定性。因此,分析师需平衡短期成本压力与长期战略收益的关系,并将其纳入估值模型(如P/E或EV/EBITDA)中进行动态调整。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:16:54", "modified_time": "2025-08-12 01:16:54", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "bf77673b20704bd9b5c0449ade264683", "experience_type": "text", "when_to_use": "在制定全球化布局策略的企业研究中,特别是涉及关税风险和供应链效率优化的情况。", "content": "对于跨国运营的企业,全球产能布局是规避贸易壁垒和提高供应链响应速度的关键。例如,该宠物食品公司通过建设墨西哥工厂进一步完善了覆盖北美市场的快速响应体系。这种战略性举措不仅降低了关税冲击,还提升了海外业务的毛利率(同比+4.04pct)。在类似研究中,投资者应关注企业的国际化进展、区域收入占比及毛利率变化,以评估其全球竞争力和抗风险能力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:16:54", "modified_time": "2025-08-12 01:16:54", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "303f9284d0bd41d9839718d6ee97d342", "experience_type": "text", "when_to_use": "在识别成长型行业中潜在龙头企业的过程中,特别是在自主品牌建设取得突破性进展时。", "content": "自主品牌的发展是衡量企业核心竞争力的重要标志之一。本案例中,公司通过“小金盾”品牌打造爆款方法论,预计全年收入可达1亿元,展现了自主品牌的强大潜力。此外,研发费用的持续投入(同比增长55%)也反映了对创新的重视。分析师在筛选优质标的时,应优先选择那些拥有丰富品牌矩阵、明确市场定位以及持续创新能力的企业,这些特质往往能带来超额收益。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:16:54", "modified_time": "2025-08-12 01:16:54", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0abcf0a722c34206ba180a44d6f2e503", "experience_type": "text", "when_to_use": "在评估一家新能源科技公司,尤其是动力电池和储能系统领域的龙头企业时,适用于对其全球市场份额、营收增长以及盈利能力进行深度分析。", "content": "通过结合行业数据(如全球新能源汽车销量、动力电池装机量)与公司财务表现(如营收增长率、毛利率变化),可以精准判断其市场竞争力和未来增长潜力。重点关注境外收入占比及利润率差异,这些往往是企业全球化战略成功与否的关键指标。此外,原材料价格波动对毛利率的影响需纳入考量,以预测未来盈利稳定性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:17:45", "modified_time": "2025-08-12 01:17:45", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c2ac01324d4b48979aa4438fbd30cf84", "experience_type": "text", "when_to_use": "在制定针对高成长性行业的投资策略时,例如新能源汽车或储能领域,需要综合考虑政策支持、技术迭代及供应链动态。", "content": "利用多维度数据验证行业趋势,包括政府激励政策(如汽车以旧换新补贴)、技术创新进展(如新一代电池产品发布)以及上游材料价格走势。同时,应关注企业的研发投入占比及其专利布局情况,这反映了其长期竞争优势和技术壁垒的构建能力。对于短期价格压力较大的细分市场,则需特别注意成本控制措施和规模化效应。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:17:45", "modified_time": "2025-08-12 01:17:45", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7e24305eb4b94f8d998f34a592d14b36", "experience_type": "text", "when_to_use": "当分析一家跨国运营的大型制造企业时,尤其是在新兴市场与发达市场均有显著业务分布的情况下,用于评估其区域风险敞口和资本配置效率。", "content": "通过比较不同地区间的营收增速、毛利率水平及费用结构,识别出最具吸引力的市场板块,并据此调整资源配置优先级。例如,若境外市场毛利率显著高于境内且保持稳健增长,则可加大国际化扩张力度;反之,则需重新审视本地化运营策略。此外,还需关注汇率波动、监管环境等外部因素对跨境业务的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:17:45", "modified_time": "2025-08-12 01:17:45", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ea602830e1834280bdb3b0e416b58981", "experience_type": "text", "when_to_use": "在评估一家商业银行的零售与对公业务战略平衡时,特别是在零售转型和对公业务根基深厚的背景下。", "content": "在分析银行的战略定位时,需关注其零售业务的增长潜力(如AUM、客户数量、贷款占比)与对公业务的稳定性(如存款成本优势、资产质量)。通过对比行业趋势与公司数据,识别其战略执行是否具备长期可持续性。例如,中信银行通过提升零售业务至“第一战略”地位,并优化对公负债结构,实现了盈利能力超越同业的整体水平。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:18:38", "modified_time": "2025-08-12 01:18:38", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e6249ad02e2047abad5fac9d7a4012a6", "experience_type": "text", "when_to_use": "在进行银行股估值时,尤其是面对净息差波动较大且受政策影响显著的市场环境。", "content": "采用绝对估值(如三阶段DDM模型)与相对估值(如PB-ROE框架)相结合的方法,综合考虑折现率、永续增长率及行业整体估值水平。同时,对关键变量(如净息差、信用成本)进行敏感性分析以量化不确定性。例如,中信银行的估值分析中,对其净息差变化进行了±5bps的敏感性测试,确保预测结果更具稳健性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:18:38", "modified_time": "2025-08-12 01:18:38", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c7b2e972d44f427983ea87fbf605d0bb", "experience_type": "text", "when_to_use": "在分析银行业的财务健康状况时,特别是涉及资产质量、拨备覆盖率和不良生成率等指标。", "content": "结合横向比较与纵向趋势分析,重点关注零售与对公贷款的不良率走势及其背后驱动因素。例如,中信银行的零售贷款不良率虽有所上升,但依然优于同业平均水平,且拨备覆盖率逐渐向行业靠拢,表明其风险管理能力较强。此外,应警惕宏观经济波动对信贷资产质量的潜在冲击。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:18:38", "modified_time": "2025-08-12 01:18:38", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f8daace6a96c49feb0ca5bb0a09f34d6", "experience_type": "text", "when_to_use": "在制定投资建议时,尤其是在市场存在系统性低估或高估的情况下。", "content": "通过杜邦分析拆解ROE与ROA的变化来源,判断盈利改善是源于核心业务优化还是短期因素推动。例如,中信银行的盈利能力提升主要得益于负债成本下降(交易结算银行建设)和手续费收入韧性(财富管理与对公业务协同),从而得出其合理估值区间为8.65-10.35元,并维持“优于大市”评级。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:18:38", "modified_time": "2025-08-12 01:18:38", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "bcc25280603c406e80be321a433f0b56", "experience_type": "text", "when_to_use": "在评估具有国产替代潜力的高端技术公司时,特别是在生命科学、医疗设备或精密光学领域。", "content": "通过分析目标市场中的进口依赖度和国产品牌渗透率,识别国产化替代机会。例如,在共聚焦显微镜市场中,进口品牌占据96%以上的市场份额,而国产品牌均价显著低于进口品牌(153.9万 vs 265-431万)。重点关注公司在技术突破、客户拓展及海外市场的表现,将其作为估值的核心驱动因素。同时,结合政策支持和技术成熟度,预测国产化替代的时间表和潜在市场规模。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:19:48", "modified_time": "2025-08-12 01:19:48", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c29230b2d4404b3880fe7fc3303fe57f", "experience_type": "text", "when_to_use": "在新兴技术市场(如激光雷达)的早期渗透阶段,评估其对相关产业链的带动作用。", "content": "利用行业数据(如Yole统计的2023-2029年激光雷达市场CAGR为38%),结合终端应用的价格下探趋势(如20万元以下车型搭载激光雷达的首次出现),判断技术普及的关键拐点。关注核心组件供应商的成本控制能力和产能扩张计划,并评估其与头部企业的合作深度。同时,通过硬件成本占比(如光学模块占10%-15%)量化其对整体业务的贡献,形成多维度的增长预测。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:19:48", "modified_time": "2025-08-12 01:19:48", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ad0869d6d1c547dfae46d2b81bb8d058", "experience_type": "text", "when_to_use": "在进行跨行业可比公司估值时,尤其是在技术密集型行业中。", "content": "选择具有相似技术应用场景或市场定位的公司作为可比对象(如联创电子、奥普特等),并基于未来三年的盈利预测(如2025E-2027E的PE倍数)进行估值对标。重点关注毛利率、研发投入占比及ROE等指标的变化趋势,以验证公司的技术壁垒和盈利能力。此外,结合行业均值(如2025E PE均值为44.97倍)调整目标估值区间,确保估值逻辑的合理性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:19:48", "modified_time": "2025-08-12 01:19:48", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "47094912c1d741a9b696def103926181", "experience_type": "text", "when_to_use": "在制定长期投资策略时,特别是在多元化业务布局的公司中识别新增长曲线。", "content": "通过拆解公司各业务板块的收入构成和增长驱动力(如条码机器视觉的稳定现金流、高端显微镜和激光雷达的放量预期、医疗光学/半导体光学的远期潜力),评估其在不同时间跨度内的贡献。结合宏观经济周期和行业政策(如医疗器械国产化鼓励政策),预测各业务的增长路径,并将远期增长曲线纳入DCF模型或分部估值法中,形成综合投资建议。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:19:48", "modified_time": "2025-08-12 01:19:48", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "51c9330918b242efa25be5dac961de7c", "experience_type": "text", "when_to_use": "在评估具有稀缺资源禀赋的旅游或文化类公司投资价值时,特别是在涉及景区扩容和交通改善的场景中。", "content": "分析公司依托稀缺资源(如佛教名山、自然景观)的核心竞争力,并结合外部交通改善(如高铁开通、公路网升级)和内部扩容项目(如新索道建设、酒店改造)对客流增长的潜在影响。通过量化新增项目的收入和利润贡献,评估其对公司中长期业绩弹性的提升作用。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:21:02", "modified_time": "2025-08-12 01:21:02", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7952618dfffe4090aca6beebdd9df14c", "experience_type": "text", "when_to_use": "在预测文旅行业公司未来收入和利润增长时,特别是需要分解多业务板块(如交通、酒店、旅行社等)的增长驱动因素。", "content": "将公司收入拆分为不同业务板块(如索道缆车、客运、酒店、旅行社),分别预测各板块的收入增长率和毛利率变化趋势。结合客流增速、客单价稳定性、成本刚性等因素,构建分业务的财务预测模型,并综合考虑规模效应和费用率下降对整体盈利能力的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:21:02", "modified_time": "2025-08-12 01:21:02", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "06e4d0d7519a4d41915d2ad3812e295a", "experience_type": "text", "when_to_use": "在进行山岳型景区类公司的估值比较时,尤其是在涉及产能扩张预期的可比公司分析场景中。", "content": "选取具有类似业务模式和扩张预期的山岳型景区上市公司作为可比公司,基于归母净利润和P/E倍数进行估值比较。关注目标公司在建项目的落地时间和爬坡期,结合行业平均估值水平,判断当前估值是否存在低估或高估,并据此调整投资评级。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:21:02", "modified_time": "2025-08-12 01:21:02", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "467d74e071594672a1c91eb27820e0b4", "experience_type": "text", "when_to_use": "在分析年轻化消费趋势对特定行业(如寺庙旅游、文化消费)的影响时,特别是在情绪经济相关的市场研究中。", "content": "结合社交媒体搜索指数、游客年龄分布数据和消费行为调研,识别年轻化消费趋势对特定行业需求端的拉动作用。分析相关衍生服务(如文创产品、素食餐饮)的市场潜力,并评估其对行业整体收入结构和盈利能力的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:21:02", "modified_time": "2025-08-12 01:21:02", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "cbd75570353e44a58586a8f3ab2834d9", "experience_type": "text", "when_to_use": "在评估具有稳定现金流和高分红潜力的公用事业公司(如垃圾焚烧发电企业)时,需要判断其长期投资价值及股息收益的可持续性。", "content": "对于公用事业类企业,可以通过分析其项目运营模式(如政府采购服务 vs. 特许经营权)、产能利用率、吨垃圾收入结构(处理费+上网电价)以及分红承诺来评估其盈利稳定性。重点关注公司是否具备垄断地位、区域经济增速对垃圾处理量的支撑、以及政策支持下的陈腐垃圾掺烧等新增长点。此方法适用于评估稳健型公用事业股票的投资吸引力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:22:03", "modified_time": "2025-08-12 01:22:03", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "203cfe10c94d4e4e8237329e8d888bd8", "experience_type": "text", "when_to_use": "在预测垃圾焚烧发电企业的未来收入增长时,需结合产能利用率提升、陈腐垃圾掺烧计划以及供热业务拓展等因素进行敏感性分析。", "content": "针对垃圾焚烧发电企业,通过建立基于热值、掺烧量与上网电价的弹性模型,可以量化不同场景下收入增幅。例如,当陈腐垃圾热值为原生垃圾的70%时,每年掺烧30%存量垃圾可增厚收入约5%,而掺烧400万吨垃圾则能将产能利用率提升至行业平均水平,对应收入增幅达16%。此类分析框架可用于指导中短期财务预测及投资决策。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:22:03", "modified_time": "2025-08-12 01:22:03", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7c80e099be3047d381cbd60b2c507e73", "experience_type": "text", "when_to_use": "在评估环保行业龙头企业的估值溢价时,需要考虑其相较于同行的竞争优势、分红政策及市场对其自由现金流改善的认可程度。", "content": "通过对标同行业可比公司(如瀚蓝环境、军信股份等),发现永兴股份凭借广州地区垄断地位、高分红承诺及自由现金流优化,在估值上享有一定溢价。具体而言,尽管其PE略低于行业均值,但考虑到其稳定的政府合作模式、较低的应收账款风险及明确的股息率预期(4%-4.9%),该企业更适合追求稳定回报的投资者。这种相对估值法尤其适用于成熟期环保企业的定价分析。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:22:03", "modified_time": "2025-08-12 01:22:03", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "081fb96c3c784091b6a78e87af4cf432", "experience_type": "text", "when_to_use": "在评估一家跨国消费品公司的财务表现时,尤其是在涉及不同区域市场和多种业务线的情况下,例如宠物食品行业。", "content": "通过分区域(国内/海外)和分产品类别(如零食、主粮、用品)的收入及毛利率分析,可以清晰地识别驱动公司增长的核心因素。例如,案例中中宠股份的海外工厂高毛利贡献显著推动整体利润率提升,而国内市场竞争激烈则对毛利率形成压力。建议在类似场景中优先关注区域间的结构性差异,并结合关税、汇率等外部变量评估其对盈利能力的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:23:03", "modified_time": "2025-08-12 01:23:03", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "4f0b460c4231419f9dcaf8b5dff7929f", "experience_type": "text", "when_to_use": "在进行中期业绩复盘并调整全年指引目标时,尤其是当部分业务线表现出超预期增长或面临短期挑战时。", "content": "基于2Q25的实际表现,管理层上调了国内业务收入增速目标(从原指引至35%),同时提高了品牌出海的目标金额(从4亿到4.5亿)。这表明,在制定或修正财务预测时,应动态考虑最新运营数据,并灵活调整关键假设。此外,需特别注意短期内可能影响业务稳定性的因素(如OEM业务受关税影响),并在指引中明确这些风险点。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:23:03", "modified_time": "2025-08-12 01:23:03", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7fa5b47985b74c3196aea50cbbbe1a6d", "experience_type": "text", "when_to_use": "在设计全球化战略部署方案时,特别是针对新兴市场的产能扩展与本地化生产优化。", "content": "中宠股份通过在墨西哥新建工厂进一步增强北美本地化生产能力,旨在降低关税成本并满足美国市场需求。这一决策体现了以成本效率和供应链韧性为核心的战略布局思路。对于其他企业而言,选择新生产基地时应综合考量地理位置、贸易政策、劳动力成本以及目标市场需求等多维度因素,并确保新建项目能够支撑长期国际化发展目标。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:23:03", "modified_time": "2025-08-12 01:23:03", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "06da39191df9405ab86dc3a47728698c", "experience_type": "text", "when_to_use": "在规划多元化的营销活动以支持品牌建设和产品推广时,特别是在竞争激烈的消费品领域。", "content": "中宠股份采用线上线下相结合的方式,包括IP联名(《武林外传》)、全球品牌经销商大会、社交媒体内容共创等手段,有效提升了消费者粘性和复购动能。此类策略强调精准触达目标受众,利用头部KOL/KOC影响力扩大品牌声量,同时通过互动快闪等活动加强线下体验感。建议未来在执行类似营销计划时,注重整合资源并持续跟踪用户反馈以优化效果。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:23:03", "modified_time": "2025-08-12 01:23:03", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c626bb340ef4427b9e36b7e323c03e3b", "experience_type": "text", "when_to_use": "在评估一家新能源汽车企业的长期投资价值时,特别是在双品牌战略和高端市场突破的背景下。", "content": "在分析企业战略转型与产品矩阵扩展时,重点关注其与技术合作伙伴(如华为)的协同效应。具体而言,应评估新车型的技术领先性(如ADS3.0智驾系统)、市场定位(如享界S9针对高端市场)以及价格策略调整对销量的拉动作用。此外,需结合财务数据(如研发费用率、毛利率趋势)判断盈利能力改善的可能性,并通过多阶段盈利预测模型量化未来增长潜力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:24:05", "modified_time": "2025-08-12 01:24:05", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "2a2ed4e01e804b4b96e7e9771a555596", "experience_type": "text", "when_to_use": "在高波动性和不确定性较高的市场环境中进行风险评估,尤其是在新兴行业或技术驱动型领域。", "content": "利用敏感性分析和情景模拟方法,评估企业在不同市场条件下的抗风险能力。例如,在北汽蓝谷案例中,需要考虑产品推出节奏延迟、销量不及预期以及行业竞争加剧等潜在风险。同时,通过资产负债表中的流动性和非流动性资产分布,结合现金流量表的净现金流变化,判断企业的短期偿债能力和长期财务健康状况,从而为投资决策提供更稳健的风险评估框架。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:24:05", "modified_time": "2025-08-12 01:24:05", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0e832783a1c4477f8b6b56dc519983ed", "experience_type": "text", "when_to_use": "在跨区域市场研究中,比较发达市场与新兴市场的消费者行为和竞争格局差异。", "content": "针对高端新能源汽车市场,分析目标市场的消费偏好、政策支持及竞争态势。例如,国内30万元以上轿车市场主要由特斯拉及BBA主导,但新能源渗透率较低,这为新进入者提供了机会。通过细分市场需求调研(如家庭用户对增程版车型的接受度),结合渠道建设进展(如鸿蒙智行渠道扩展),可以识别市场空白点并制定针对性营销策略。此外,还需关注货币汇率波动对跨国业务的影响,以优化定价策略。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:24:05", "modified_time": "2025-08-12 01:24:05", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "691466f36d9b46d8bc71913c35dd91e8", "experience_type": "text", "when_to_use": "在构建多元化资产配置组合时,选择具有长期增长潜力的成长型股票。", "content": "采用自下而上的基本面分析方法,筛选具备明确增长驱动力的企业。例如,北汽蓝谷凭借双品牌协同发展、技术合作优势及产品线丰富化,展现了较强的竞争力。关键指标包括收入增长率(预计2025-2027年分别为122.1%、49.7%、53.7%)、毛利率改善趋势(从负值逐步转正)以及估值水平(当前P/E为负,但未来三年有望显著提升)。同时,结合宏观经济周期和行业景气度,动态调整持仓比例以平衡收益与风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:24:05", "modified_time": "2025-08-12 01:24:05", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "dda55c7a25f4420f858ba70791bdb7e0", "experience_type": "text", "when_to_use": "在评估成长型科技公司(如九号公司)的业绩表现时,特别是在高增长赛道(如两轮车、割草机器人等)的背景下。", "content": "通过分析公司的收入构成及细分业务的增长驱动因素(例如滑板车欧洲需求回暖、割草机器人行业高景气),结合规模效应和毛利率提升趋势,可以更准确地预测未来盈利潜力。此外,关注保有量增加带来的智能化服务利润弹性(如APP续费收入)是判断长期增长空间的重要指标。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:25:10", "modified_time": "2025-08-12 01:25:10", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "65e3f2af72dc498ea1ab562736ba77ab", "experience_type": "text", "when_to_use": "在进行跨周期投资决策时,尤其是在牛市或新兴市场中寻找具备持续增长潜力的标的。", "content": "应综合考虑宏观经济环境与行业生命周期阶段,优先选择处于快速扩张期且产品矩阵丰富的公司。例如,九号公司在高端两轮车市场的扩容、E-Bike新品储备以及渠道优化策略表明其有能力抓住多个增长点,从而实现多曲线发展。同时,需注意估值水平(P/E倍数)是否合理,并结合历史数据和同行比较来验证假设。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:25:10", "modified_time": "2025-08-12 01:25:10", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "060e9659ecd64836b07424da42a25e78", "experience_type": "text", "when_to_use": "在风险评估过程中,特别是面对复杂供应链和全球化运营的企业时,需要识别潜在的风险因素。", "content": "针对依赖海外市场需求的公司(如九号公司),需重点关注汇率波动对财务表现的影响(例如欧元升值导致汇兑收益)。此外,还需警惕渠道拓展不及预期、新品销售未达目标以及行业竞争加剧等风险。建议通过敏感性分析量化这些变量对公司业绩的可能冲击,并制定相应的缓解措施。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:25:10", "modified_time": "2025-08-12 01:25:10", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "dadfdec638a24d6b80908ab7e55f9c7e", "experience_type": "text", "when_to_use": "在设计资产配置策略时,特别是涉及中长期股权投资组合调整的情况。", "content": "基于ROE、净利率等核心财务指标的变化趋势,结合行业景气度与公司战略方向,可有效筛选出具有较高回报潜力的标的。例如,九号公司凭借其领先的成本控制能力和渠道优势,在割草机器人领域保持了较强的盈利能力,这使其成为中长期投资的理想选择。同时,投资者应根据自身风险偏好动态调整权重配置。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:25:10", "modified_time": "2025-08-12 01:25:10", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "72215324cca74aed902fc9f88aceb965", "experience_type": "text", "when_to_use": "在评估一家公司短期盈利能力受新业务投入和减值损失影响时,特别是在高波动市场或经济下行周期中。", "content": "通过分离核心业务与新业务的财务表现,分析单吨盈利、减值损失及现金流变化,识别短期压力来源,并判断未来恢复潜力。重点关注经营性现金流的增长趋势和资本开支的变化,以评估公司在不利条件下的财务韧性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:26:00", "modified_time": "2025-08-12 01:26:00", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d25c08ed6007405a8a998d9eb1c632fa", "experience_type": "text", "when_to_use": "在预测跨国企业因政策扰动(如关税)导致销量下滑后可能的恢复情况,尤其是在涉及北美市场的新兴技术领域。", "content": "结合行业动态和政策明朗化后的订单恢复预期,量化关键驱动因素(如产能利用率提升、产线自动化升级),调整销量预测模型;同时考虑产品组合优化对盈利水平的潜在贡献,以制定中期投资策略。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:26:00", "modified_time": "2025-08-12 01:26:00", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ff96cb59c19f485291e4212b7e219481", "experience_type": "text", "when_to_use": "在评价多元化资产布局(如钠电、锰铁锂等新技术)的长期战略价值时,特别是在需要平衡风险与回报的复杂投资决策场景中。", "content": "采用分阶段产业化进程跟踪法,评估各新业务的技术成熟度、规模效应达成时间点及其卡位优势,综合考量研发支出占比、专利进展及客户验证状态,为估值提供前瞻性支持。此外,关注固态电解质等前沿技术的商业化路径突破。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:26:00", "modified_time": "2025-08-12 01:26:00", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0ef1157c959f436295d1289dcd09a943", "experience_type": "text", "when_to_use": "在进行资产负债表健康度分析时,特别是针对重资产行业的资本结构优化需求及流动性管理。", "content": "深入剖析流动资产与非流动资产比例、债务期限结构以及应收账款周转效率,结合减值准备计提合理性判断企业抗风险能力。同时,利用ROIC和ROE指标监测资本使用效率,确保财务杠杆处于可持续范围内。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:26:00", "modified_time": "2025-08-12 01:26:00", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d57fbf17aef24587975b4dbd205bb256", "experience_type": "text", "when_to_use": "在评估一家公司的投资价值时,特别是涉及多个业务板块和未来增长潜力的行业龙头公司。", "content": "通过分析公司在不同业务板块的表现(如高压直流继电器、传统家电继电器、新能源光储继电器等),结合各板块的增长驱动因素(如新能源汽车需求、政策补贴、海外市场拓展等),可以全面评估其收入增长潜力。同时,关注毛利率、净利率的变化趋势以及成本控制能力,能更准确地预测未来的盈利能力。此外,新产品线的放量潜力应作为长期增长的重要考量因素。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:26:57", "modified_time": "2025-08-12 01:26:57", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "2f53a21b99e54d7684765648c1bd736e", "experience_type": "text", "when_to_use": "在制定中长期投资策略时,特别是在需要结合宏观经济周期和行业发展趋势的情况下。", "content": "利用盈利预测模型(如2025-2027年的EPS预测)和估值指标(如PE、PB、EV/EBITDA)来判断当前股价是否被低估或高估。同时,结合市场代表性指数的表现(如沪深300指数),对目标公司进行相对估值分析,以确定其在未来6到12个月内的潜在表现。对于具有明确行业领先地位且市场份额持续提升的公司,可适当提高评级至‘优于大市’。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:26:57", "modified_time": "2025-08-12 01:26:57", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8a5ee35ae13248d5aa5ca696264cccae", "experience_type": "text", "when_to_use": "在风险评估阶段,特别是在识别可能影响公司业绩的核心风险因素时。", "content": "系统性列出关键风险点,包括下游行业需求增速不及预期、行业竞争加剧、公司降本能力不足等,并结合财务数据(如资产负债率、现金流状况)评估其抗风险能力。此外,关注公司在手订单情况、客户结构稳定性以及新市场的开拓进展,有助于量化这些风险的实际影响程度。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:26:57", "modified_time": "2025-08-12 01:26:57", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "46e83dafc446424381f7b1c2b7ab0d83", "experience_type": "text", "when_to_use": "在跨资产类别配置决策中,特别是在选择股票标的时,需要综合考虑市场环境和经济周期。", "content": "根据市场环境调整分析侧重点,例如在牛市中注重成长性指标(如营收增长率、净利润增长率),而在熊市中则更加关注防御性指标(如ROE、EBIT Margin)。同时,结合公司所处行业的景气度(如新能源汽车行业的高景气)与宏观经济周期(如新兴市场的光储需求旺盛),能够更好地把握投资机会并规避周期性风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:26:57", "modified_time": "2025-08-12 01:26:57", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7bcb72adb37944c38583b8e3eb3eb2ef", "experience_type": "text", "when_to_use": "在评估一家科技公司,特别是涉及AIoT、云计算和智能硬件的企业时,需要分析其产品矩阵的多元化及其市场地位。", "content": "通过将核心产品的市场表现(如家居摄像机的全球出货量)与新兴业务的增长潜力(如智能锁及清洁机器人收入增速)相结合,可以有效判断企业的长期竞争力。同时,关注云平台服务的收入占比和毛利率,能够识别企业从硬件向软件和服务转型的能力。此外,垂直场景大模型的研发进展是衡量技术护城河的重要指标。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:28:09", "modified_time": "2025-08-12 01:28:09", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f76d8140ccf9479ab12baf6a52f62f5c", "experience_type": "text", "when_to_use": "当进行跨境投资或分析具有国际化战略的企业时,需特别关注其海外收入占比、区域布局策略以及应对贸易环境变化的能力。", "content": "分析企业的海外收入增长率和区域分布,可以帮助理解其国际化扩张的成效和风险分散能力。例如,在本案例中,萤石网络通过多元化的海外市场选择和本地化渠道建设,成功实现了海外收入的快速增长(+25.42%)。同时,考虑到外部贸易环境的不确定性,应动态调整盈利预测,并引入情景分析以覆盖潜在的供应链和政策风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:28:09", "modified_time": "2025-08-12 01:28:09", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "56235e9587064109bc14723da28aa4ca", "experience_type": "text", "when_to_use": "在财务健康状况评估中,需要综合考虑资产负债管理、现金流质量和费用控制情况,特别是在高研发投入行业中。", "content": "重点关注应收账款和存货周转率的变化趋势,以评估运营效率;结合经营活动现金流净额和收现比,验证收入质量。此外,对于研发驱动型企业,需平衡研发投入与费用增长之间的关系。例如,萤石网络虽然销售费用率有所提升,但这是由于海外渠道建设和品牌推广所致,属于战略性支出,而非失控的成本膨胀。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:28:09", "modified_time": "2025-08-12 01:28:09", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d8443dd824d448df92047dd08f25cfc2", "experience_type": "text", "when_to_use": "在制定买入/增持评级的投资建议时,需要基于多维度估值方法和明确的风险提示,确保决策逻辑清晰且全面。", "content": "采用PE、PB等传统估值方法,结合行业平均值和历史数据,可以为投资者提供直观的参考框架。在此基础上,还需根据企业的成长性(如未来三年归母净利润复合增速)调整估值中枢。同时,列出主要风险因素(如市场竞争加剧、技术迭代、供应链波动),有助于增强报告的透明度和可信度,从而提高客户咨询服务的质量。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:28:09", "modified_time": "2025-08-12 01:28:09", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "94dcf3e2f1134f6b82ebe84aa5beb64e", "experience_type": "text", "when_to_use": "在评估一家企业是否适合长期战略投资时,特别是在其核心业务面临短期压力但具有明确的转型或增长潜力的情况下。", "content": "分析企业的收入结构变化和渠道转型成效是评估其长期潜力的关键。例如,在东方雨虹的案例中,尽管2025年上半年业绩承压,但零售渠道占比提升、海外业务加速布局以及提价策略的实施表明公司正在优化业务模式并寻找新的增长点。建议投资者关注企业在低谷期的战略执行能力,包括渠道调整、成本控制和新市场开拓,这些因素往往是未来盈利修复的重要驱动。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:29:13", "modified_time": "2025-08-12 01:29:13", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "216e25a2c299451682303de6a75eba36", "experience_type": "text", "when_to_use": "在对周期性行业(如建材)进行风险评估时,尤其是在市场需求疲软和价格竞争激烈的环境下。", "content": "通过分解收入来源(如防水卷材、涂料等)及渠道表现(零售、工程、直销),可以识别出哪些细分领域更具韧性或增长潜力。此外,应重点关注毛利率的变化趋势及期间费用率的管控效果。例如,东方雨虹通过提价和降本增效措施显著改善了Q2毛利率环比表现。这表明即使在不利的市场条件下,有效的成本管理和定价策略也能缓解下行压力,并为后续复苏奠定基础。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:29:13", "modified_time": "2025-08-12 01:29:13", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "2ab8a5518e0341e2bed692eeecdb56c2", "experience_type": "text", "when_to_use": "在跨国投资或全球化扩张相关的企业金融决策中,特别是在新兴市场与发达市场之间权衡资源配置时。", "content": "评估海外市场的布局进展及其潜在贡献需要结合地理范围、时间跨度和复杂程度综合考虑。例如,东方雨虹通过建设生产基地(如休斯敦、沙特、马来西亚)和并购(如香港零售企业、智利建材超市)快速扩展国际业务,这种多区域、多层次的策略能够分散单一市场风险并创造协同效应。对于类似情况,建议优先考察目标市场的本地需求动态、供应链效率以及监管环境适应性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:29:13", "modified_time": "2025-08-12 01:29:13", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1432a040c013480bbaf770ebe1792d63", "experience_type": "text", "when_to_use": "在预测企业未来盈利能力并制定交易策略时,特别是针对经历过深度调整后处于底部反转阶段的标的。", "content": "基于财务预测数据(如归母净利润增长率、毛利率回升预期)判断企业是否已进入盈利修复通道至关重要。以东方雨虹为例,分析师预计2025-2027年归母净利润将实现大幅增长(CAGR约43%),同时市盈率从21.77倍降至11.73倍,显示估值吸引力逐步增强。在此类场景下,可利用PEG指标(市盈率相对盈利增长比率)验证股票是否被低估,并结合技术面信号确认买入时机。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:29:13", "modified_time": "2025-08-12 01:29:13", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "084344401cc24c1aa34b27997234bcd0", "experience_type": "text", "when_to_use": "在评估具有高成长潜力的科技类企业(尤其是工业检测设备制造商)时,尤其是在行业需求旺盛、技术壁垒较高的情况下。", "content": "通过分析企业的订单增长趋势、下游市场需求驱动因素以及高端产品突破能力,可以有效判断其内生增长边界。此外,关注公司是否具备多元化的技术矩阵和关键零部件自研能力,这些因素能够增强企业的长期竞争力并拓宽增长空间。同时,结合财务数据中的收入增长率、毛利率变化以及研发投入比例,验证其成长性与盈利能力的可持续性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:30:02", "modified_time": "2025-08-12 01:30:02", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f5625d68eec54d099378e04a02014a73", "experience_type": "text", "when_to_use": "当一家企业拥有充沛现金流并计划通过并购实现横向扩展或纵向深耕时,例如检测技术平台型公司试图成为全球龙头。", "content": "在评估企业的外延扩张战略时,应重点关注其并购资金储备、目标领域选择逻辑及其整合能力。可以通过分析资产负债表中现金及等价物余额、资本结构稳定性,以及过往并购案例的效果来衡量风险。此外,需考察管理层制定的并购方向是否符合行业发展趋势,并确保标的资产与现有业务存在协同效应,避免盲目扩张导致整合失败或商誉减值风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:30:02", "modified_time": "2025-08-12 01:30:02", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b46e0ddc3bb54660ac589bcecd8899ee", "experience_type": "text", "when_to_use": "在对中小市值高成长股票进行估值时,特别是在市场情绪乐观且投资者偏好创新型企业的情况下。", "content": "采用PE、PB和EV/EBITDA等多种估值方法综合评估公司的合理价值区间,并结合未来盈利预测调整估值倍数。对于处于快速扩张阶段的企业,需要特别关注其营收增速、净利润率改善预期以及市场份额提升潜力。同时,考虑宏观经济环境、行业周期位置以及板块轮动的影响,以确定当前估值水平是否充分反映其增长前景。若估值显著低于同行平均水平,则可能存在投资机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:30:02", "modified_time": "2025-08-12 01:30:02", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "37c386428d4c40ad9ba713f638d18c9a", "experience_type": "text", "when_to_use": "在评估一家物流或跨境贸易公司的投资价值时,尤其是在全球贸易波动和区域性政策变化的背景下。", "content": "通过分析公司主营业务收入与国际航运价格指数(如CCFI)的相关性,识别其业务对宏观经济变量的敏感性。结合成本结构拆解(如对外采购成本占比),判断公司在不同市场环境下的盈利能力弹性。此外,关注高毛利新兴业务(如资源转运、冷链物流)的增长潜力,将其作为估值调整的关键变量。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:30:57", "modified_time": "2025-08-12 01:30:57", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b1f99cc74b2646998ece68bb91a98e87", "experience_type": "text", "when_to_use": "为寻求稳定现金流回报的投资者筛选分红型股票标的时,特别是在低利率环境下。", "content": "优先考察公司历史分红记录(包括分红率、股息率及持续性),并结合其货币资金储备与自由现金流生成能力进行验证。同时,分析分红政策是否与公司长期战略一致(如扩张阶段减少分红或成熟期增加分红)。对于中创物流这类现金充裕且分红慷慨的企业,可将其视为防御性资产配置的一部分。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:30:57", "modified_time": "2025-08-12 01:30:57", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e88ff8a99d8c45f09fc344d0bb4e17b5", "experience_type": "text", "when_to_use": "在制定海外业务拓展策略或评估国际化运营风险时,特别是涉及‘一带一路’倡议相关市场的公司。", "content": "利用公司在印尼等新兴市场积累的成功经验(如资源转运项目),复制到其他具有类似需求但尚未充分开发的地区(如非洲)。同时,密切跟踪当地法规变化(如印尼新法规限制境外过避船进入)对商业模式的影响,并提前布局以规避潜在风险。此外,通过实地考察和本地化团队建设,确保快速响应市场需求。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:30:57", "modified_time": "2025-08-12 01:30:57", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ce0daa8bdfdc474993e90ddb8deb1332", "experience_type": "text", "when_to_use": "在对公司进行相对估值时,尤其是面对多元化业务组合的企业。", "content": "选择多个维度的估值指标(如PE、PB、PS、EV/EBITDA)进行全面比较,避免单一指标导致偏差。根据各业务板块的收入贡献和毛利率水平,分配适当的权重,计算综合估值倍数。例如,针对中创物流,可以参考华贸物流、嘉友国际等行业可比公司,结合其“稳存量+拓增量”协同模式给予溢价。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:30:57", "modified_time": "2025-08-12 01:30:57", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7ff5aee9f0034440b9721da2c58cb53a", "experience_type": "text", "when_to_use": "在评估高端化产品策略对出口业务的财务影响时,特别是在涉及显著ASP(平均售价)提升和销量增长的情况下。", "content": "通过分析春风动力全地形车的出口数据,发现其ASP同比提升16.7%,同时销量同比增长4.7%。这种高端化效果得益于新平台产品的推出(如U10pro),并显著改善了单车利润和整体盈利能力。因此,在类似场景中,应重点关注高端化产品线的推出及其对价格、销量和利润率的联动影响,并将其作为盈利预测的核心驱动因素。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:31:52", "modified_time": "2025-08-12 01:31:52", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ea755e4db76b45989898ca3a8450791d", "experience_type": "text", "when_to_use": "在快速成长的新兴业务领域(如电动摩托车)进行销量预测和市场潜力评估时。", "content": "春风动力旗下极核品牌在2025H1实现了电摩销量同比1642%的增长,总销量突破30万辆,远超市场预期。这一成功归因于新品发布(如AE7、EZ4等)以及精准的市场定位(高性能、实用性和性价比)。在类似场景中,应对新品的技术创新、目标市场的需求弹性以及营销策略进行深度分析,同时结合历史数据和行业趋势建立合理的销量预测模型。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:31:52", "modified_time": "2025-08-12 01:31:52", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f8a69c4dee804bb2b618b4fbcd979d01", "experience_type": "text", "when_to_use": "在评估一家公司是否具备中长期投资价值时,特别是在其业务转型或新产品线显著贡献增量的背景下。", "content": "通过分析公司的财务数据(如营收增长率、毛利率变化和费用控制效率)以及产品矩阵优化策略,判断其是否正在形成可持续的第二增长曲线。例如,在莱绅通灵案例中,黄金镶嵌业务占比提升带动了综合毛利率的改善,同时渠道拓展计划稳健推进,表明公司在市场竞争力和盈利能力方面均有所增强。这种模式适用于评估具有明确业务转型逻辑的公司。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:32:59", "modified_time": "2025-08-12 01:32:59", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "74e2e129a31448e281e3a39f7bf3ffc2", "experience_type": "text", "when_to_use": "在预测标的资产的估值水平是否合理时,尤其是在周期性行业或受宏观经济影响较大的领域(如珠宝、奢侈品等)。", "content": "结合PE、PB、PS等估值倍数与行业平均值进行横向对比,并考虑未来盈利增长预期(EPS预测)对估值的影响。例如,莱绅通灵当前股价对应2025-2027年的动态PE分别为54/30/21倍,相较于其预计的高成长性(归母净利润年化增速超过30%),估值仍处于合理区间。此方法特别适合于在高波动期或经济复苏阶段筛选低估潜力股。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:32:59", "modified_time": "2025-08-12 01:32:59", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "df2c8284fbbe46719a959a9bb9a1effb", "experience_type": "text", "when_to_use": "在制定风险管理和投资决策框架时,需要全面识别可能影响企业业绩的关键外部因素。", "content": "系统性列出潜在风险点,包括宏观经济下行压力、消费复苏不及预期、市场竞争格局恶化、原材料价格波动以及门店扩张进度滞后等。这些因素可通过历史数据分析和前瞻性假设建模加以量化评估。例如,莱绅通灵面临的主要风险是黄金价格波动对其成本端的冲击,因此建议投资者密切关注国际金价趋势及公司库存管理能力。这一经验可用于构建多维度的风险预警机制。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:32:59", "modified_time": "2025-08-12 01:32:59", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7dbddbbc23994d9fb10c80bfdcf4683d", "experience_type": "text", "when_to_use": "在设计渠道扩展或区域渗透战略时,特别是零售连锁型企业希望通过加盟模式快速扩大市场份额的情况下。", "content": "优先关注单店模型的质量而非单纯追求规模扩张速度。例如,莱绅通灵计划打造不少于50家千万级直营门店及15家千万级加盟门店,通过头部门店辐射拉动区域销售提升。此外,强调对加盟商实施‘严选强管’政策以确保品牌形象一致性。这种方法适用于希望实现稳健扩张同时保持较高运营效率的企业。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:32:59", "modified_time": "2025-08-12 01:32:59", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7521df5660b34f63acfc74cccfc0e26e", "experience_type": "text", "when_to_use": "在评估农业或畜牧业企业(如鸡苗、种猪养殖)的盈利能力和市场前景时,特别是在市场价格波动较大且行业存在周期性变化的情况下。", "content": "通过分析企业在不同周期内的销量增长与价格变动对盈利能力的影响,识别出关键驱动因素(如白羽肉鸡苗价格下跌拖累盈利,但种猪销量增长显著改善收入)。建议结合历史数据和行业趋势,调整未来销售预期,并密切跟踪引种量、疫情等外部变量对供需关系的潜在影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:33:56", "modified_time": "2025-08-12 01:33:56", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3a9da672aed74601bcca8b56ac1f0af1", "experience_type": "text", "when_to_use": "在进行跨资产类别投资决策时,尤其是在股票估值偏低且公司业务具有长期成长潜力但短期受制于行业逆风的情况下。", "content": "利用财务比率分析(如毛利率、ROE、P/E)和盈利预测模型,判断公司当前估值是否充分反映其长期增长逻辑。例如,即便短期内因鸡苗价格低迷导致净利润下降,仍可通过种猪销量释放期的增长预期维持‘买入’评级。同时,需动态修正预测参数以适应市场环境变化。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:33:56", "modified_time": "2025-08-12 01:33:56", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "35a740cb475f42b3b8118a964bb46e0b", "experience_type": "text", "when_to_use": "在制定农业板块的投资策略时,特别是在全球供应链中断或高致病性疫情爆发可能影响种源进口的背景下。", "content": "关注国际禽流感、贸易政策及国内引种更新量的数据,提前布局受益于供给端收缩的龙头企业。例如,由于美国和新西兰爆发高致病性禽流感,我国停止从两国进口白羽种源,这为后续国内相关企业提供了更大的市场份额机会。因此,可优先配置具备较强研发育种能力的企业。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:33:56", "modified_time": "2025-08-12 01:33:56", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c202d5bc0d034bd7922f8893d424d3dc", "experience_type": "text", "when_to_use": "在风险评估过程中,针对依赖特定原材料或种源供应的农业企业,特别是当面临疫情失控、产品价格持续低迷或竞争加剧的风险时。", "content": "建立多维度风险提示框架,包括但不限于疫情扩散的可能性、主要产品价格波动区间以及替代品的竞争压力。此外,应强调现金流管理的重要性,确保企业在低谷期有足够的流动性支持运营。例如,在本案例中,尽管公司面临鸡价低迷的压力,但充足的现金储备(约16亿元)为其渡过难关提供了保障。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:33:56", "modified_time": "2025-08-12 01:33:56", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ec7519c67f7641a696b79c2f0a5f327f", "experience_type": "text", "when_to_use": "在评估一家汽车制造企业未来增长潜力时,尤其是在新能源车领域快速转型的背景下", "content": "通过分析企业的自主品牌销量、新能源车渗透率及新车型发布计划,结合行业趋势和政策支持,可以有效预测其市场份额的增长潜力。例如,长安汽车的深蓝和阿维塔品牌在新能源领域的强劲表现,以及明确的产品规划(如深蓝S09和L06),表明公司正在加速电动化转型并具备长期竞争力。此外,整合资源成立新集团的战略举措进一步增强了产业链协同效应,这应被视为关键投资信号。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:35:12", "modified_time": "2025-08-12 01:35:12", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7f153f8fd1844d708351d865963ecb0b", "experience_type": "text", "when_to_use": "当需要判断一家上市公司是否适合中长期战略投资,并需综合财务指标与估值水平进行决策时", "content": "结合盈利预测、PE/PB倍数及现金流数据,系统性地评估公司的成长性与估值合理性。以长安汽车为例,其2025-2027年的收入增长率分别为18.7%、10.5%和11.5%,净利润率逐步提升至5.47%,同时当前股价对应2025年PE仅为14倍,低于行业平均水平。这种估值偏低但基本面稳健的情况,通常意味着较高的安全边际和潜在回报,是推荐‘买入’或‘持有’的重要依据。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:35:12", "modified_time": "2025-08-12 01:35:12", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "de41fc6074a040c3b40e604a1f642023", "experience_type": "text", "when_to_use": "在市场环境波动较大且存在宏观不确定性的情况下,对某一特定行业或个股的风险敞口进行管理时", "content": "识别并量化主要风险因素,包括行业需求下滑、竞争加剧、出口受阻等,并通过敏感性分析测试这些变量对公司业绩的影响。例如,在报告中提到的长安汽车面临的主要风险点包括自主品牌销量不及预期和价格战压力。对此,建议投资者关注月度销量数据变化及管理层应对策略,同时设置止损位或动态调整仓位,以降低单一事件冲击带来的损失。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:35:12", "modified_time": "2025-08-12 01:35:12", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "bf471e73df084e8288068688224b3af6", "experience_type": "text", "when_to_use": "在研究新兴市场中的全球化布局机会,特别是跨国业务扩展计划时", "content": "注重企业国际化战略的具体执行路径及其可能面临的本地化挑战。比如,长安汽车计划到2025年实现全球年销50万台目标,其中海外销量占比达20%。这一扩张策略不仅依赖于核心技术优势(如3纳米座舱芯片和激光雷达技术),还需考虑不同市场的监管框架、消费者偏好及供应链建设能力。因此,此类投资需密切跟踪实际落地进展,并警惕汇率波动及地缘政治风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:35:12", "modified_time": "2025-08-12 01:35:12", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c4f2ee65e2ff4f3995d821ff69a0bf4c", "experience_type": "text", "when_to_use": "在评估跨国公司业绩表现时,特别是涉及多个地区市场贡献的分析场景。", "content": "通过分地区收入增长分析,识别不同区域市场的驱动因素和潜在风险。例如,在本案例中,欧洲、美洲、中东等地区的家电产品收入增长率显著高于其他地区,尤其是空调和洗衣机品类的增长突出。这种分析方法可帮助投资者判断企业全球化战略的成功程度,并预测未来增长潜力。建议结合当地经济环境、关税政策及消费者需求变化进一步验证数据的可靠性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:36:40", "modified_time": "2025-08-12 01:36:40", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3aca3aea28f24f4aba2cb023aaa5aeb1", "experience_type": "text", "when_to_use": "针对多品类业务公司的盈利能力评估,尤其是在毛利率波动较大的情况下。", "content": "采用分品类毛利率与收入增速的交叉分析方法,可以有效揭示各业务线的盈利能力和成本压力来源。例如,暖通空调业务虽然收入增长稳健,但毛利率下滑1.56%,而冰洗业务则实现了毛利率提升2.12%。这表明需要关注原材料价格、汇率变动以及市场竞争对不同品类的影响,并据此调整投资组合权重或优化运营策略。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:36:40", "modified_time": "2025-08-12 01:36:40", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "485780f71c924fac9155426de12d6dbc", "experience_type": "text", "when_to_use": "在制定长期投资决策时,特别是在估值偏低且具备稳定增长预期的股票标的筛选过程中。", "content": "利用PE/PB比率结合EPS预测进行估值分析,能够发现低估的投资机会。本案例中,海信家电2025-2027年的PE分别为9.6倍、8.5倍和7.7倍,远低于行业平均水平,同时净利润预计保持10%-13%的复合增长率。这种低估值高成长的特征适合价值型投资者布局,但也需警惕销售数据不及预期或宏观环境恶化的风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:36:40", "modified_time": "2025-08-12 01:36:40", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5205871c287a44788c4ada3cc0eacc4b", "experience_type": "text", "when_to_use": "在高管团队发生重大人事变动时,评估其对企业战略执行和短期经营稳定性的影响。", "content": "通过跟踪高管离职原因及其继任者背景,可以判断管理层调整是否会影响现有战略方向。例如,本案例中总裁及其他关键岗位的更替可能带来短期内的战略不确定性,但从新任命高管的经验来看,公司在技术创新和成本优化方面仍将持续推进。此类事件应作为动态监控的重点,及时更新风险评估框架。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:36:40", "modified_time": "2025-08-12 01:36:40", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1ed42382d74241e0898cc5c48ac6994e", "experience_type": "text", "when_to_use": "在评估高科技公司(如芯片制造商)的增长潜力时,尤其是在高端计算和服务器市场中。", "content": "通过分析公司的合同负债、预付款项和存货水平,可以有效验证市场需求的持续性和供应链健康状况。高合同负债表明未来收入确定性较强,而预付款和存货的同步增长则反映了供给侧的积极改善。此外,需关注毛利率变化趋势,尤其是不同产品线(如CPU与DCU)对整体盈利能力的影响,并结合行业增速判断产品矩阵优化是否合理。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:37:35", "modified_time": "2025-08-12 01:37:35", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0823990d09444d1390804cc6d5d9f278", "experience_type": "text", "when_to_use": "当需要为科技类成长型股票进行估值并制定投资建议时,特别是在快速发展的新兴市场或经济复苏阶段。", "content": "综合运用PE、PB、EV/EBITDA等多维度估值指标,结合历史数据及未来盈利预测,形成全面的价值评估框架。例如,在本案例中,尽管当前市盈率较高(81x),但基于未来三年收入和净利润的强劲增长预期(CAGR分别为36%和40%),维持‘优于大市’评级。同时,应考虑研发费用占比及其对长期竞争力的支撑作用,以及生态建设进展对公司市场份额扩张的关键影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:37:35", "modified_time": "2025-08-12 01:37:35", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ed3d9cb04a49460ba868bde039608e9c", "experience_type": "text", "when_to_use": "在分析企业架构升级和技术迭代对其市场地位提升的作用时,特别是涉及高性能计算、AI加速等领域。", "content": "深入研究企业的技术路线图,包括分支预测算法、吞吐量改进、缓存管理策略等具体参数的提升,以评估其在大模型推理和训练性能方面的优势。同时,观察其与主要合作伙伴(如联想、新华三等)的合作深度和广度,衡量生态系统的成熟度。这些因素不仅直接决定产品的竞争力,还间接推动高端处理器产业化进程,从而增强公司的长期护城河。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:37:35", "modified_time": "2025-08-12 01:37:35", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c691d8c349c44ebbb825d1ca636e8485", "experience_type": "text", "when_to_use": "在评估矿业公司投资价值时,特别是涉及多种矿产资源(如铜、钾、锂)的多元化企业。", "content": "综合分析公司的核心业务板块表现及非主营业务的投资收益贡献。例如,在藏格矿业案例中,尽管钾锂业务因市场价格波动而承压,但巨龙铜矿的投资收益显著提升了整体盈利能力。因此,建议在类似场景下优先关注高增长潜力的非核心资产或股权投资,并结合其产能扩建计划和市场供需动态进行前瞻性预测。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:38:46", "modified_time": "2025-08-12 01:38:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9fff38b949dd476bb743ed9b54ffd124", "experience_type": "text", "when_to_use": "在对周期性行业(如大宗商品)进行盈利预测和估值建模时。", "content": "基于历史数据和当前市场环境,建立多情景假设下的财务模型,包括价格波动、成本变化以及宏观趋势的影响。例如,报告中对藏格矿业2025-2027年的营业收入、归母净利润及毛利率进行了详细预测,并结合铜价中枢上移等外部因素调整了参数。这种做法可广泛应用于其他周期性行业的深度研究中,以增强预测的稳健性和适应性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:38:46", "modified_time": "2025-08-12 01:38:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7f1ace6a34af403aaf50c70095b62913", "experience_type": "text", "when_to_use": "在为客户设计组合配置策略时,尤其是在经济复苏或通胀上升阶段。", "content": "利用产业链上下游关系识别具有协同效应的投资标的,例如藏格矿业既受益于钾肥大合同签订带来的短期价格支撑,又从铜矿扩产中获得长期回报。此类跨板块联动逻辑可以帮助投资者在不同资产类别间找到平衡点,从而优化风险收益比。此外,应密切关注政策导向和国际市场动向,及时调整持仓结构。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:38:46", "modified_time": "2025-08-12 01:38:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5080b3a5110b47c69529da2fa2d789d6", "experience_type": "text", "when_to_use": "在评估创新型生物制药公司股票投资价值时,尤其是在针对乙肝等特定疾病领域有突破性治疗药物的公司。", "content": "在分析生物医药公司的投资潜力时,应重点关注其核心管线的研发进展、临床试验数据以及市场适用性。例如,广生堂的GST-HG141和GST-HG131分别处于III期和II期临床阶段,且具有突破性治疗认定,这表明其创新药具备较高的科学价值和市场前景。此外,需结合目标患者群体规模、现有疗法的局限性及潜在竞争产品进行综合评估。对于财务亏损但研发进展显著的公司,可通过EBITDA、现金流等指标评估其持续经营能力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:39:47", "modified_time": "2025-08-12 01:39:47", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a67f1c897f054f85906c51021b3d5f33", "experience_type": "text", "when_to_use": "在为长期投资者提供买入评级建议时,特别是在涉及高研发投入、早期商业化阶段的生物科技企业。", "content": "针对尚处于亏损状态但具备高成长潜力的公司,应采用分阶段盈利预测模型,结合药物研发成功率、市场渗透率假设及未来收入增长预期进行估值。例如,本案例中对广生堂2025-2027年的收入和净利润进行了详细预测,并基于联合用药实现乙肝临床治愈的可能性给予‘买入’评级。同时,需明确提示药物研发失败、市场竞争加剧等风险,以帮助投资者全面理解潜在回报与风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:39:47", "modified_time": "2025-08-12 01:39:47", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d1285c95d6164344b37f3aa48eda9556", "experience_type": "text", "when_to_use": "在跨市场环境下分析新兴市场生物科技公司的投资机会,尤其是面对不同监管框架和政策影响的情况。", "content": "在评估新兴市场的生物科技公司时,需特别关注当地监管政策对药物审批流程的影响,以及医保覆盖范围对产品商业化路径的作用。例如,广生堂的两款药物均获得中国突破性治疗品种认定,这加速了其临床试验和上市进程。此外,还需考虑货币波动、融资环境及国际竞争对企业国际化战略的潜在影响。通过对比发达市场类似企业的估值水平,可以更准确地判断目标公司的合理定价区间。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:39:47", "modified_time": "2025-08-12 01:39:47", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0c11332e603045f4a922944723914360", "experience_type": "text", "when_to_use": "在评估一家科技驱动型企业的增长潜力时,特别是在涉及智能硬件和物联网领域的企业。", "content": "通过分析企业不同业务线的收入增长率(如智能家居摄像机、智能入户等),结合细分领域的市场动态(如海外市场的快速扩张),可以识别出企业的第二增长曲线。此外,关注高毛利产品的规模放大效应以及产品结构优化对毛利率的影响,能够更准确地预测盈利能力的变化趋势。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:40:36", "modified_time": "2025-08-12 01:40:36", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7c0cb9fbff9f4a5fa9020e3cc6d2fe89", "experience_type": "text", "when_to_use": "在进行投资建议或评级时,需要综合考虑财务指标、行业竞争力及技术壁垒。", "content": "利用蓝海大模型升级和AI技术创新作为核心竞争力的体现,结合公司在全域零售渠道建设中的战略布局,可以判断其长期增长空间。同时,通过市盈率(PE)、净资产收益率(ROE)等估值指标与行业平均水平对比,能有效支撑买入/增持决策,并明确目标价格区间。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:40:36", "modified_time": "2025-08-12 01:40:36", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "09ab0f046e9945cd81295faf34e097b4", "experience_type": "text", "when_to_use": "在面对新兴市场或全球化经营风险较高的企业时,需特别关注区域收入分布和成本控制能力。", "content": "将境内和境外收入增速拆分分析,重点考察海外市场表现是否优于国内市场;同时跟踪销售费用率、研发投入占比等运营效率指标,以评估企业在扩展新市场时的成本管理能力和潜在回报。这种框架适用于判断企业全球化战略的成功概率及其可持续性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:40:36", "modified_time": "2025-08-12 01:40:36", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "886c6e3643cd4f928f8b5b412a6f1674", "experience_type": "text", "when_to_use": "在经济周期波动较大的环境下,制定中长期财务规划及资产配置策略。", "content": "基于公司历史营收增长率、净利润增长率和未来三年盈利预测数据,结合宏观经济环境(如原材料价格波动、监管政策变化)调整预期。例如,在高波动期优先选择具有稳定现金流和较高EBITDA利润率的标的,而在低波动期则可适当增加高成长性但风险稍高的资产配置比例。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:40:36", "modified_time": "2025-08-12 01:40:36", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "16863e5d25e94e6996aae607e22ca835", "experience_type": "text", "when_to_use": "在评估医疗信息化或类似政策驱动型行业的投资机会时,特别是在政策升级或行业标准变化的背景下。", "content": "利用政策分析框架,结合行业标准升级(如电子病历系统从单一管理向智慧化转型)对市场空间、竞争格局和企业核心竞争力的影响,预测企业的收入增长潜力。同时,通过市场份额数据和客户覆盖情况验证企业的行业地位,并结合政策落地节奏调整盈利预测的时间假设。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:41:31", "modified_time": "2025-08-12 01:41:31", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e1c40ca7ac1f4765a1b9e0e850032a39", "experience_type": "text", "when_to_use": "当分析具有高研发投入特征的科技型企业时,特别是其研发成果转化为实际业务价值的能力需要评估的情况下。", "content": "采用研发投入与业务转化效率的双维度分析方法,评估企业在AI等新技术领域的技术积累及其对项目价值量的提升潜力。例如,通过观察AI应用在头部医院的落地情况,量化其对毛利率和收入增速的贡献,从而判断未来盈利能力的可持续性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:41:31", "modified_time": "2025-08-12 01:41:31", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "2cf8423e3c7648a1a61481e681f6a077", "experience_type": "text", "when_to_use": "在面对短期业绩承压但长期增长逻辑清晰的企业时,尤其是在医疗信息化、软件开发等周期性较强的行业中。", "content": "结合历史财务数据与外部环境因素(如招投标节奏滞后、确收周期延长),区分一次性影响与结构性问题,调整短期盈利预测。同时,基于行业复苏预期和企业核心竞争力,合理推导中期增长路径,避免因短期波动低估企业长期价值。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:41:31", "modified_time": "2025-08-12 01:41:31", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ce965bf88d634c40b5917c98758356c6", "experience_type": "text", "when_to_use": "在进行可比公司估值时,特别是针对细分行业龙头企业的估值溢价合理性分析。", "content": "通过对比行业平均估值水平与目标公司的核心竞争优势(如市占率领先、技术壁垒、政策受益程度),结合PE/Growth比率,评估是否应给予更高的估值倍数。此外,考虑战略股东背景(如国寿、阿里系参股)带来的协同效应,进一步支撑估值溢价的合理性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:41:31", "modified_time": "2025-08-12 01:41:31", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "703f8fa2c8364869926ff5f1a6da5c0c", "experience_type": "text", "when_to_use": "在评估一家消费类企业的增长潜力时,特别是在涉及自主品牌扩展和全球化布局的场景中。", "content": "通过分析公司财务数据与市场表现,重点关注自主品牌的收入增长率、毛利率变化以及品牌建设策略(如明星代言、社交媒体曝光等)。结合海外产能扩张计划(如新工厂投产)及区域市场渗透情况,可以全面评估企业在全球市场的竞争力与长期增长潜力。例如,中宠股份通过顽皮品牌在国内的强势表现及海外工厂布局,展现了其应对关税风险和扩大市场份额的能力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:42:35", "modified_time": "2025-08-12 01:42:35", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ccdfc2f656b345b28291f8733ae93db9", "experience_type": "text", "when_to_use": "在进行盈利能力分析和估值建模时,特别是在需要预测未来3-5年的盈利趋势的场景中。", "content": "利用历史财务数据(如收入增长率、毛利率、费用率)构建盈利预测模型,并结合行业动态(如宠物经济的增长趋势)调整假设条件。同时,需关注非经常性损益(如股权激励费用)对短期利润的影响。此外,通过比较市盈率(P/E)、市净率(P/B)等估值指标与行业平均水平,判断股票的投资价值。例如,中宠股份的盈利预测显示其未来三年净利润复合增长率超过20%,且估值水平逐步下降,表明具备较高的投资吸引力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:42:35", "modified_time": "2025-08-12 01:42:35", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "43e5bfdeae6649e39147400bf4ab8439", "experience_type": "text", "when_to_use": "在评估跨国企业的供应链风险管理能力时,特别是在面临贸易摩擦或关税政策变化的情况下。", "content": "分析企业的全球供应链布局及其对潜在风险的应对措施。例如,中宠股份通过在墨西哥、美国、加拿大等地设立工厂,有效规避了关税冲击,并提升了快速响应客户需求的能力。此类策略不仅增强了企业的抗风险能力,还为其开拓新兴市场奠定了基础。因此,在类似场景中,应优先考虑具有多元化产能布局的企业。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:42:35", "modified_time": "2025-08-12 01:42:35", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1f5ac021f93644e994f8c59ce35f22c2", "experience_type": "text", "when_to_use": "在制定股利分配决策或评估股东回报策略时,特别是在现金流充裕但资本支出需求较大的企业中。", "content": "结合企业的自由现金流状况、资本开支计划及分红政策,评估其股东回报能力。例如,中宠股份在实现强劲经营现金流的同时,拟向全体股东每10股派发现金红利2元,体现了公司在扩张过程中兼顾股东利益的平衡策略。这种做法既维持了投资者信心,又为未来发展保留了足够的资金支持,适合其他类似发展阶段的企业参考。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:42:35", "modified_time": "2025-08-12 01:42:35", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1dacc7308701406c863832b36acb9240", "experience_type": "text", "when_to_use": "在评估一家公司未来3-5年的估值时,特别是针对具有多元化业务线和复杂收入结构的企业。", "content": "采用绝对估值(如FCFF模型)与相对估值(如PE、PB比率)相结合的方法。在绝对估值中,需对WACC(加权平均资本成本)、永续增长率及自由现金流进行敏感性分析,以确保估值区间具备稳健性;在相对估值中,选取可比公司并结合行业平均估值水平,同时考虑目标公司的成长性溢价或折价。此外,将宏观经济周期、行业政策变化等外部因素纳入假设条件的调整范围,避免单一假设导致的估值偏差。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:43:41", "modified_time": "2025-08-12 01:43:41", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "21332e002c634c4ba622bed24455f23f", "experience_type": "text", "when_to_use": "当需要预测某细分领域市场空间及企业收入增长潜力时,例如集成电路验证服务、航空航天专用设备制造等新兴高技术领域。", "content": "通过拆解主营业务收入来源,分别构建各业务板块的增长模型。对于成熟业务,关注其市场份额稳定性、价格趋势和成本结构优化;对于新兴业务,重点分析需求端驱动因素(如下游客户资本开支计划)、供给端产能释放节奏以及竞争格局演变。同时,结合历史复合增速和行业渗透率曲线推导未来增长路径,并设置乐观/中性/悲观情景以应对不确定性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:43:41", "modified_time": "2025-08-12 01:43:41", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ae5f52039ea64a868d9e3df6773d3757", "experience_type": "text", "when_to_use": "在判断公司盈利能力改善拐点是否出现时,特别是在经历短期业绩承压后寻求复苏信号的情况下。", "content": "从毛利率、运营效率和费用控制三个维度综合分析。首先,观察毛利率环比变化,尤其是关键产品或服务的价格企稳迹象;其次,跟踪固定资产利用率、库存周转率等运营指标,确认是否存在规模效应提升;最后,评估管理费用率、研发费用率等固定成本占比下降的可能性。若上述指标均呈现积极改善,则表明经营拐点可能已经显现,但仍需警惕应收账款增长过快带来的潜在风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:43:41", "modified_time": "2025-08-12 01:43:41", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "66e90889c7eb45b2b2cbee12a0a9f56c", "experience_type": "text", "when_to_use": "在制定投资建议时,尤其是在面对跨周期资产配置决策或长期战略规划场景下。", "content": "基于不同时间跨度设计差异化策略:短期内,优先选择受益于当前经济周期或政策导向的标的,注重弹性与确定性平衡;中期内,围绕产业链上下游布局具备竞争优势的核心企业,把握行业整合机遇;长期内,聚焦符合国家产业升级方向的龙头企业,强调护城河深度与可持续发展能力。同时,动态调整持仓比例以适应市场环境变化,例如在高波动期增加防御型资产权重,在低估值区间逐步加仓优质成长股。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:43:41", "modified_time": "2025-08-12 01:43:41", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9456b9cf8b3542e6ba1a4f5cf2a82903", "experience_type": "text", "when_to_use": "在分析造纸行业或类似周期性行业的公司时,特别是在浆价和纸价波动较大的市场环境下。", "content": "通过分析上游原材料(如木浆)价格趋势与下游成品(如白卡纸、箱板纸等)价格之间的联动关系,评估行业盈利空间的变化。重点关注海外浆厂减产节奏、库存去化情况以及需求端季节性因素的叠加效应,以判断行业拐点。例如,当浆价触底企稳且需求端进入旺季时,可预期成品纸价格回暖,并结合公司新增产能投放计划评估其盈利弹性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:44:45", "modified_time": "2025-08-12 01:44:45", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b9aaef63566348219570d4016762e880", "experience_type": "text", "when_to_use": "在对拥有林浆纸一体化布局的企业进行估值和投资评级时,尤其是在新增产能密集投产的背景下。", "content": "综合考虑企业的成本管控能力、产业链整合优势以及新增产能的利用率,预测未来收入和利润增长潜力。通过对比历史财务数据和行业平均指标(如ROE、EBIT利润率),结合市盈率(P/E)和市净率(P/B)等估值倍数,判断当前股价是否被低估。例如,在浆纸价格回升阶段,具备林浆纸一体化优势的龙头企业能够更好地抵御原材料价格波动风险,从而提升盈利能力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:44:45", "modified_time": "2025-08-12 01:44:45", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a1fe188d3c3a4c2087813ea28d9aba21", "experience_type": "text", "when_to_use": "在制定长期战略规划或资产配置决策时,特别是在经济周期不同阶段选择合适的资产类别和行业板块。", "content": "根据宏观经济环境和行业周期特性,动态调整投资组合。例如,在经济复苏初期,优先配置受益于需求回暖和价格上行的周期性行业;而在经济放缓或衰退期,则应关注防御性较强的行业。同时,结合区域市场的差异性(如发达市场与新兴市场),灵活调整货币敞口和地域分布,以分散风险并捕捉结构性机会。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:44:45", "modified_time": "2025-08-12 01:44:45", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5788179622264f059bb7b81d751f3af0", "experience_type": "text", "when_to_use": "在评估快速增长的消费品或科技公司(如电动两轮车、智能硬件)时,特别是在高增长市场环境下的投资机会。", "content": "采用分部估值法(SOTP)对多元化业务进行精细化估值,根据不同业务线的增长潜力和盈利能力分配不同的估值倍数。例如,针对九号公司的平衡车及滑板车、电动两轮车、机器人等业务分别使用市盈率(P/E)或市销率(P/S),并结合行业平均估值水平调整目标价。此外,跟踪关键运营指标(如销量增速、ASP、毛利率提升趋势)以验证增长假设,并动态调整盈利预测。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:45:44", "modified_time": "2025-08-12 01:45:44", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "fd602be271254aceb3b13689f3a70c8f", "experience_type": "text", "when_to_use": "当分析一家处于快速扩张阶段的企业,且其盈利能力和市场份额正在显著提升时,尤其是在中期战术操作或长期战略规划中。", "content": "通过规模效应与费用控制模型来预测净利率改善空间,重点关注毛利率变化、期间费用率优化(销售/管理/研发费用占比)以及固定成本摊薄的影响。例如,九号公司通过门店扩张和新品导入实现两轮车市场份额提升,同时控费效果明显,推动净利率创新高。建议在类似案例中关注收入增长与费用率下降之间的协同作用,量化潜在利润弹性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:45:44", "modified_time": "2025-08-12 01:45:44", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d247540a8c27450d842e63986e6ea0a4", "experience_type": "text", "when_to_use": "在面对新兴市场中的高波动性资产类别(如A股成长股)时,特别是在板块轮动频繁或经济复苏周期初期。", "content": "结合宏观经济条件、行业政策支持及公司基本面数据,制定基于时间窗口的买入策略。例如,九号公司受益于中国新能源政策扶持和消费升级趋势,在2025年2季度表现出强劲的收入和利润增长。建议投资者利用技术图表(如52周高低位、200天均线)结合财务预测判断最佳入场时机,同时设定明确的目标价和止损点以管理风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:45:44", "modified_time": "2025-08-12 01:45:44", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3213e97b33a848798da96bc54e1991bd", "experience_type": "text", "when_to_use": "在评估一家公司是否具有长期投资价值时,特别是在电力设备和自动化行业,需要判断其市场地位、技术优势和财务健康状况。", "content": "通过分析公司在核心业务领域的市场份额、研发投入和技术专利储备,结合其历史财务表现(如连续多年的盈利增长)和未来增长潜力(如海外市场的拓展),可以有效评估其长期竞争力。此外,关注公司在行业政策支持下的战略调整(如电网智能化和配网改造需求)能够进一步验证其成长性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:46:50", "modified_time": "2025-08-12 01:46:50", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "4d67a7838f474ce58a82b174cf7b3e9a", "experience_type": "text", "when_to_use": "当需要预测特定行业的未来市场需求并评估相关企业受益程度时,例如智能电网建设驱动的配电自动化设备需求增长。", "content": "利用行业政策指引(如国家电网和南方电网的投资规划)、分布式能源发展趋势以及存量设备更新周期(如智能电表的8年更换周期),可以量化市场需求规模。同时,结合企业在过往招标中的中标率和市场份额变化,可推断其在未来需求高峰中的收益弹性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:46:50", "modified_time": "2025-08-12 01:46:50", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "2b0dba8bfde84c5e989cea9e75991c90", "experience_type": "text", "when_to_use": "在进行估值分析时,特别是针对科技密集型行业的公司,需对比行业内可比公司的估值水平以确定目标公司的合理估值区间。", "content": "通过选取同行业领先企业作为可比公司,基于其PE、PB等估值指标的历史均值及未来预期增长率,构建估值基准。在此基础上,考虑目标公司在技术迭代速度、产品创新能力以及市场份额上的相对优势或劣势,调整估值倍数,从而得出更贴近实际的估值结论。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:46:50", "modified_time": "2025-08-12 01:46:50", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "602ec3242d8144afa0b732df7ccc2f4d", "experience_type": "text", "when_to_use": "在风险评估中,尤其是在涉及政策依赖度较高的行业(如电网设备),需要识别可能影响公司业绩的关键外部风险因素。", "content": "系统梳理政策变动、原材料价格波动、出口环境变化等宏观变量对企业的潜在冲击,并结合公司应对策略(如本地化生产、供应链多元化)进行压力测试。同时,关注应收账款周转率、存货管理效率等营运指标的变化,可以提前预警流动性风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:46:50", "modified_time": "2025-08-12 01:46:50", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c099b69c894444568fa704c488aa2981", "experience_type": "text", "when_to_use": "在评估一家快速成长的消费品公司,尤其是涉及自有品牌扩张和海外布局时,例如宠物食品行业。", "content": "通过分析公司的产品结构优化(如高毛利主粮占比提升)以及区域收入分布(如境内与境外市场的增长差异),可以识别出公司在核心业务上的战略重点。同时,关注毛利率变化趋势及其驱动因素(如高毛利产品占比提升)有助于评估盈利能力的可持续性。此外,结合公司在新兴市场的产能布局(如墨西哥工厂建设)和代工业务潜力,可以判断其长期增长前景。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:47:46", "modified_time": "2025-08-12 01:47:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "2a236b8c4f3e4d9ca328e4ee26579eba", "experience_type": "text", "when_to_use": "在进行中长期投资决策时,特别是在需要预测未来3-5年的财务表现和估值水平的场景中。", "content": "利用分阶段的盈利预测模型(如营业总收入、归母净利润及EPS的增长率),结合PE倍数的历史和预期变化,可以更准确地评估目标公司的估值吸引力。同时,应重点关注收入增长率、毛利率和费用率的变化趋势,并将其与行业平均水平或竞争对手进行对比,以验证预测的合理性。此外,通过敏感性分析(如汇率波动、原材料价格变动)来评估潜在风险对预测的影响,可提高决策的稳健性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:47:46", "modified_time": "2025-08-12 01:47:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "994cc7e15e3b41e982c871159cd969f0", "experience_type": "text", "when_to_use": "在品牌矩阵建设和市场营销策略评估中,尤其是在差异化品牌定位和精准营销活动的效果分析场景下。", "content": "通过追踪品牌的市场表现(如代言人合作、IP联名活动、社群营销等),结合营收增长数据和消费者认知度的变化,可以量化品牌升级的实际效果。同时,分析销售费用率和管理费用率的上升是否带来了相应的市场份额或客户忠诚度提升,有助于判断营销投入的ROI。此外,将品牌势能与财务指标(如毛利率、净利率)相结合,可以更全面地评估品牌战略对公司整体业绩的贡献。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:47:46", "modified_time": "2025-08-12 01:47:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8fb192942ead45378b803e0682dfdc61", "experience_type": "text", "when_to_use": "在研究跨境业务拓展和全球供应链布局时,尤其是在涉及多地区运营和不同监管环境下的企业金融分析场景中。", "content": "通过对公司在不同地区的收入占比、利润率差异以及新增产能释放的分析,可以评估其全球化战略的执行效果。同时,需特别关注贸易摩擦、汇率波动和原材料价格变化等外部因素对跨境业务的影响,并结合财务报表中的货币资金、应收账款和存货周转率等指标,验证其现金流管理和运营效率。此外,分析公司在不同市场的本地化策略(如与当地头部渠道的合作)可以帮助识别潜在的增长机会和风险点。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:47:46", "modified_time": "2025-08-12 01:47:46", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8faf2003767844189339da6cc6b52be1", "experience_type": "text", "when_to_use": "在评估大型能源或资源类公司(如煤炭、石油等)的并购或资产注入项目时,尤其是在涉及同业竞争问题解决的场景中。", "content": "在分析此类并购交易时,需重点关注标的资产的产能规模、资源储备量以及一体化运营能力提升的潜力。同时,结合市场供需动态和政策环境(如煤炭行业的“查超产”核查),评估供给端出清对价格支撑的影响,并将其纳入盈利预测模型。此外,应关注收购后对公司分红能力和股息率的影响,以判断其对长期投资者的吸引力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:48:30", "modified_time": "2025-08-12 01:48:30", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9fb09933425e42fca96f5de1ff35e6fc", "experience_type": "text", "when_to_use": "在为周期性行业(如煤炭、钢铁等)的龙头企业进行投资评级时,特别是在市场价格接近底部、供需再平衡初期的市场环境中。", "content": "在周期性行业中,当市场价格接近底部时,建议战略性看多具有龙头地位的公司。通过分析行业库存水平、供需变化趋势及政策干预(如减产核查)对供给端的潜在影响,可以更准确地预测价格走势。同时,利用非永续资产估值方法,结合久期敏感性分析,评估龙头公司在需求波动中的抗风险能力,从而形成更具确定性的投资建议。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:48:30", "modified_time": "2025-08-12 01:48:30", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "47f6bc97e2d64cf9955c1a52382f6aa1", "experience_type": "text", "when_to_use": "在为高股息股票制定投资策略时,特别是在低利率环境下寻求稳定现金流收益的投资者场景中。", "content": "对于高股息股票的投资分析,应重点关注公司的盈利能力稳定性、分红历史记录以及未来分红能力的可持续性。通过财务报表分析(如留存收益、自由现金流等指标),结合行业基本面(如煤价走势、供需格局),验证分红承诺的可靠性。此外,在低利率环境下,需特别关注股息率与债券收益率的比较,以评估股票的相对吸引力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:48:30", "modified_time": "2025-08-12 01:48:30", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "78212ad0ca184ed5b457a23e0c463e77", "experience_type": "text", "when_to_use": "在评估一家多元化工业企业的投资价值时,尤其是在制冷零部件和新能源热管理领域具有显著市场份额的企业。", "content": "通过分析公司在多个业务板块(如制冷配件、汽车热管理、商用制冷设备等)的收入增长趋势、毛利率变化以及市场占有率动态,可以有效判断其长期发展潜力。特别关注企业在高增长细分市场(如新能源车热管理系统)的技术壁垒和客户认证周期,这些因素直接影响其市占率爬坡速度和盈利质量。同时,结合行业政策(如节能降碳行动方案)与宏观经济环境(如新能源车渗透率提升),可进一步验证增长逻辑的可持续性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:49:25", "modified_time": "2025-08-12 01:49:25", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "4307aae1c38b4194a67a96e843259210", "experience_type": "text", "when_to_use": "在进行跨市场估值对比时,尤其是针对A股上市公司与其国内外可比公司的估值合理性分析。", "content": "采用PE、PB、EV/EBITDA等多种估值指标,结合公司历史估值区间及行业均值,评估当前估值水平是否被低估或高估。同时,借助杜邦分析法拆解ROE,识别驱动企业盈利能力的核心因素(如资产周转率、权益乘数)。对于具备明确成长性的企业(如新能源车热管理业务),可通过绝对估值模型(如FCFF法)分阶段预测现金流,并设定合理的永续增长率和折现率参数,以得出更精确的目标价区间。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:49:25", "modified_time": "2025-08-12 01:49:25", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8413c8cfebd645b99d2a7181314df379", "experience_type": "text", "when_to_use": "在分析新兴技术应用对特定行业的影响时,例如储能系统中液冷技术的普及对热管理市场规模的推动作用。", "content": "通过对新技术路径(如风冷、液冷、相变材料)的性能对比和技术成熟度分析,结合下游应用场景(如动力电池、储能电池)的需求差异,预判技术主流方向及其商业化进程。利用市场规模测算方法(如单GWh热管理成本×新增装机量×渗透率),量化新技术带来的增量市场空间。此外,关注龙头企业在技术研发和客户导入上的进展,优先选择已实现批量供货且具备成本优势的企业作为投资标的。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:49:25", "modified_time": "2025-08-12 01:49:25", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "84ba39757e434170ae03626538c2ffb4", "experience_type": "text", "when_to_use": "在评估一家多元化业务布局的制造企业是否具备长期增长潜力时,尤其是在电动工具配件、新能源及高端智能制造领域。", "content": "分析企业的核心竞争力时,应重点关注其技术壁垒、客户绑定深度和规模化生产能力。例如,案例中的公司在钻夹头领域拥有全球领先的市场份额,并通过技术迭代(如无绳化、锂电化)维持竞争优势;同时,其全球化布局(越南、墨西哥子公司)分散了地缘政治风险并提升了供应链韧性。这种多维度竞争力是判断企业能否持续受益行业复苏的关键。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:50:34", "modified_time": "2025-08-12 01:50:34", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "70ab90e57b2f41e09eff68893f8759b4", "experience_type": "text", "when_to_use": "在预测细分行业的复苏周期及其对相关公司财务表现的影响时,特别是针对受经济周期影响较大的制造业或消费品行业。", "content": "利用历史数据结合行业趋势进行需求端分析,识别出行业低谷后的补库存周期与下游需求回暖信号。例如,报告中提到2024年全球电动工具市场经历了两年下滑后大幅回升,这表明行业已进入复苏阶段。在此基础上,进一步量化收入增速和毛利率变化,可以更准确地预测未来几年的盈利弹性,为投资决策提供依据。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:50:34", "modified_time": "2025-08-12 01:50:34", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e2da0593e5d34c90bec0f299590ad75e", "experience_type": "text", "when_to_use": "在估值过程中选择合适的相对估值方法(如PE倍数)比较同行业公司的投资价值时,尤其是面对快速增长但竞争激烈的新兴市场。", "content": "采用可比公司法时,需综合考虑目标公司的市占率、盈利能力稳定性以及成长性差异。例如,本案例中山东威达的PE倍数显著低于行业平均水平(16.8x vs 55.3x),反映了其作为行业领先者被低估的可能性。此外,还需关注非经常性损益、资本结构等可能扭曲估值的因素,以确保横向对比的一致性和公平性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:50:34", "modified_time": "2025-08-12 01:50:34", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "643330d68dad4f99b9801e35794af247", "experience_type": "text", "when_to_use": "在评估企业新业务拓展战略的有效性时,特别是从单一产品线向多领域扩展的企业转型案例。", "content": "对于跨领域扩张的公司,需验证新业务是否具有协同效应和技术迁移能力。例如,山东威达将锂电池包业务从电动工具延伸至智能家电、便捷交通工具等领域,展现了强大的研发能力和市场适应性。同时,通过跟踪各业务板块的收入占比与毛利率变化,可以动态评估新业务对公司整体业绩的贡献度及可持续性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:50:34", "modified_time": "2025-08-12 01:50:34", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "bcfd531a824a468e9bf6fa0c84d64527", "experience_type": "text", "when_to_use": "在评估并购交易对目标公司长期增长潜力的影响时,特别是在涉及高效节能材料或技术的行业。", "content": "通过分析目标公司的产品线、下游客户粘性及行业应用扩展能力(如VIP真空绝热板在家电和新能源汽车领域的成熟应用),可以快速判断其市场竞争力。结合业绩承诺指标(如营收和净利润累积目标)验证并购标的的成长性和协同效应,同时考虑政策驱动(如新能效标准)带来的需求增量,形成对标的未来增长动力的全面评估。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:51:25", "modified_time": "2025-08-12 01:51:25", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "dab973c284f24e56a8e12335aca39d7b", "experience_type": "text", "when_to_use": "在制定投资建议时,需要综合考虑宏观经济波动、行业周期和公司财务表现的多维度影响。", "content": "利用历史财务数据与前瞻性预测相结合的方法(如PE、PB、ROE等估值指标的变化趋势),结合公司所处行业的政策环境和技术变革(如新版能效标准对真空绝热板需求的拉动),可以在不同市场环境下提供稳健的投资评级。此外,需关注资产负债表中的资本结构和现金流状况,以评估公司在经济下行周期中的抗风险能力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:51:25", "modified_time": "2025-08-12 01:51:25", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e569b9fe11054b6592dbfa3bb82009b9", "experience_type": "text", "when_to_use": "在评估一家专注于高端制造业(如钻机、螺杆机)的企业时,特别是在其IPO阶段或考虑长期投资价值时。", "content": "通过分析企业的核心竞争力,尤其是技术壁垒和自主生产能力的掌握程度,可以更准确地判断其市场地位和未来增长潜力。例如,志高机械因其同时掌握地下钻机和螺杆机核心部件的自产能力,在行业中具备显著竞争优势。此外,关注企业是否符合行业绿色环保升级趋势(如高端节能产品),以及其在国家重点工程项目中的应用案例,能够进一步验证其产业化前景。最后,结合募投项目的方向和产能扩展计划,可评估企业的战略执行力和进口替代潜力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:52:22", "modified_time": "2025-08-12 01:52:22", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "afad2caad06144718afe9fbe0ba4d952", "experience_type": "text", "when_to_use": "在研究一家积极拓展海外市场的制造型企业时,尤其是在新兴市场或‘一带一路’沿线国家布局的情况下。", "content": "分析企业的海外市场收入增长趋势、毛利率变化以及出口产品的档次提升情况,可以帮助判断其国际化战略的成功可能性。例如,志高机械通过开发一体式钻机等高端产品,逐步向更复杂机型过渡,并在俄罗斯、沙特等市场实现稳步增长。这表明企业在国际市场的品牌认可度和技术实力正在增强。此外,需关注主要外销区域的市场环境和贸易政策变化风险,以全面评估其海外业务稳定性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:52:22", "modified_time": "2025-08-12 01:52:22", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8c015676f0e842b4b27a7ecc98e177ad", "experience_type": "text", "when_to_use": "在进行同行业上市公司对比分析时,尤其是针对估值差异较大的公司(如北交所与沪深A股企业)。", "content": "在对比过程中,应注重剔除异常值并采用多维度指标(如营收规模、毛利率、ROE等)进行综合评估。例如,志高机械虽然营收规模和毛利率低于可比公司平均水平,但其发行市盈率较低且ROE较高,显示出一定的性价比优势。同时,需要明确不同市场的估值基准差异(如北交所流动性较弱可能影响估值水平),以避免误判。最终建议结合管理层预测数据,动态调整对目标公司的评级和投资决策。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:52:22", "modified_time": "2025-08-12 01:52:22", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "47b2a9d0f1e94d29b6191e4436826fb5", "experience_type": "text", "when_to_use": "在评估一家公司盈利能力及其未来增长潜力时,尤其是在分析其财务表现的连续性与市场竞争力的背景下。", "content": "通过分季度和半年度的财务数据分析(如营收、净利润、毛利率和净利率),结合费用控制情况(例如销售、管理、研发费用率的变化)来判断公司的盈利能力和成本优化策略。同时,关注公司在创新产品布局、市占率提升以及全球扩展方面的行动,进一步验证其长期战略的可行性。这一方法特别适用于高成长性行业龙头企业。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:53:12", "modified_time": "2025-08-12 01:53:12", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7f53c227047b4529a82b8f0494800a25", "experience_type": "text", "when_to_use": "在制定投资建议或评级时,需要综合考虑宏观经济环境、行业趋势及公司基本面,并量化未来3-5年的盈利预测。", "content": "基于历史财务数据(如收入增长率、利润率变化)和关键假设(如市占率、单价、单位净利等),构建分业务线的收入与成本模型以进行逐年的盈利预测。同时,通过敏感性分析调整参数范围,确保估值合理。最后根据PE、PB、ROE等指标对比行业平均水平,给出明确的投资评级(如买入/持有/回避)。此框架适用于中长期战术操作及战略规划场景。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:53:12", "modified_time": "2025-08-12 01:53:12", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "99f5c98deb3144528c97ae6d8bc7213f", "experience_type": "text", "when_to_use": "当研究一家企业的全球化战略布局及其对财务健康的影响时,特别是在新兴市场扩张或资本募集活动后。", "content": "重点关注企业在不同地理区域的产能建设进度、合资项目推进情况以及募集资金用途,评估这些举措如何增强其市场份额和产品竞争力。此外,监测资产负债表中的货币资金、短期借款、应付账款等科目,衡量公司流动性风险与偿债能力。该经验适合跨国经营企业或处于快速国际化阶段的公司分析。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:53:12", "modified_time": "2025-08-12 01:53:12", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "eabcd3a2742446a2ac9a7af1317d97dc", "experience_type": "text", "when_to_use": "在评估一家公司是否具备长期投资价值时,尤其是在汽车零部件行业或相关制造业领域。", "content": "通过分析公司的客户结构优化趋势(如前五大客户营收占比逐年下降)和新客户拓展能力,可以判断其市场竞争力和抗风险能力。同时,结合公司在新兴领域的布局(如高压连接器业务),评估其第二成长曲线的潜力。此外,关注公司是否通过智能化转型提升生产效率(如人均创收、自动化率等指标),以验证其降本增效的能力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:54:35", "modified_time": "2025-08-12 01:54:35", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5f42de202d874893b9fb7c7dc2af0b5f", "experience_type": "text", "when_to_use": "在预测一家公司的未来盈利能力及估值合理性时,尤其是在新能源车渗透率加速的背景下。", "content": "基于公司历史财务数据(如毛利率、净利率、ROE等)和行业趋势(如新能源车线束单车价值量提升),拆分主营业务收入并预测未来增长。重点关注高毛利产品(如高压线束)的放量潜力及其对整体盈利的拉动作用。同时,对比可比公司的PE、PB等估值指标,结合公司市场份额和技术壁垒,判断当前估值是否存在优势。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:54:35", "modified_time": "2025-08-12 01:54:35", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "abecd8565da24bccaf63fcd8c6763be3", "experience_type": "text", "when_to_use": "在评估一家公司是否能够成功实现国产替代时,尤其是在外资主导的高端制造领域。", "content": "分析公司是否突破了行业高壁垒(如供应商资质认证、技术积累、资金投入),并通过研发创新(如全系高压连接器研发能力)和全球化布局(如罗马尼亚工厂落地)增强竞争力。此外,观察公司是否深度绑定优质客户(如赛力斯、理想等),并通过产能扩张和技术升级巩固市场地位,从而判断其国产替代的可持续性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:54:35", "modified_time": "2025-08-12 01:54:35", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ed635b06d4a748ef83e23b350c51af7b", "experience_type": "text", "when_to_use": "在制定投资建议时,需要综合考虑宏观经济环境、行业周期及公司基本面。", "content": "结合行业驱动因素(如电动化、智能化、轻量化趋势)和政策支持(如节能减排目标),评估公司所处行业的增长空间。同时,分析公司财务健康状况(如资产负债率、现金流)和经营效率(如存货周转天数、应收账款周转天数),确保其具备稳健的增长基础。最后,根据盈利预测和估值水平,给出明确的投资评级(如“推荐”或“回避”)。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:54:35", "modified_time": "2025-08-12 01:54:35", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c0372e19c00e4f63812e5f2a2598be68", "experience_type": "text", "when_to_use": "在评估一家建筑材料公司,特别是在行业需求下行或面临原材料价格波动时,需要判断其盈利能力改善潜力及市场竞争力。", "content": "在分析建筑材料公司的盈利能力和市场表现时,应重点关注产品毛利率的变化趋势和定价策略的调整。例如,当行业低价竞争状况有所缓解且公司宣布产品涨价时,可预期毛利率将逐季改善。此外,需关注行业内其他企业的协同行动,如多家企业同步上调产品价格,可能预示整体行业的盈利能力有望提升。同时,结合零售业务占比提升、全球化布局深化等渠道结构优化指标,可以进一步验证公司的长期增长韧性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:55:50", "modified_time": "2025-08-12 01:55:50", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "2a13c3edd85541faa9848d3f5336719d", "experience_type": "text", "when_to_use": "在对建筑建材类股票进行投资评级调整时,特别是面对短期收入和利润承压但具备较强现金流管理能力的企业。", "content": "对于短期内收入和利润下滑但现金流明显改善的公司,应综合考虑其财务健康状况和股东回报政策。例如,若公司在行业需求承压的情况下仍实施大额分红,并通过优化应收账款管理和资本支出控制来增强现金流管控能力,则表明管理层对公司长期发展的信心。这种情况下,可维持‘买入’评级,但需下调未来盈利预测以反映当前市场需求压力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:55:50", "modified_time": "2025-08-12 01:55:50", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "03dddc092d74478baaf7ef84d2b855d6", "experience_type": "text", "when_to_use": "在评估一家公司是否存在潜在减值风险及信用风险时,尤其是在地产下行周期或宏观经济不确定性较高的环境中。", "content": "在地产相关行业(如建筑材料)中,需特别关注信用减值损失的变化以及应收账款的增长情况。如果信用减值损失持续增加且应收账款规模扩大,可能表明公司面临较大的回款压力和坏账风险。此外,还需结合资产负债率、流动比率等偿债能力指标,评估公司在高风险环境下的财务稳定性。若这些指标显示潜在风险较高,则应在估值模型中引入更高的风险溢价。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:55:50", "modified_time": "2025-08-12 01:55:50", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b2dceaf577894c549a8e44b12bb8667b", "experience_type": "text", "when_to_use": "在制定全球化的投资策略时,尤其是针对正在拓展海外市场的国内企业。", "content": "对于积极扩展国际业务的公司,应关注其境外收入增长趋势以及并购活动的战略意义。例如,若公司计划收购海外建材零售渠道企业以深化全球化布局,则需评估目标市场的本地动态、监管框架及货币因素的影响。同时,结合公司现有资源分配与融资能力,判断其是否能够有效整合新业务并实现协同效应。此类全球化举措通常有助于分散单一市场风险,但需警惕跨境运营带来的额外复杂性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:55:50", "modified_time": "2025-08-12 01:55:50", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f65457eb282e41f0b67c2f2df8cff652", "experience_type": "text", "when_to_use": "在评估消费电子行业相关企业的投资潜力时,尤其是在AI终端硬件和折叠屏设备领域。", "content": "通过分析企业在消费电子领域的工艺矩阵(如模切、冲压、CNC加工等)及产品布局(如VC均热板、电池钢壳等),结合其客户结构(如苹果、华为等)和技术迭代能力,判断其未来增长空间。同时关注新业务(如人形机器人、AI眼镜)的布局深度及其与现有核心业务的协同效应,以预测长期盈利能力和估值提升潜力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:56:53", "modified_time": "2025-08-12 01:56:53", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "010ad20462fb497b89c81fb206c0456b", "experience_type": "text", "when_to_use": "在评估全球化制造企业面对地缘政治风险时的抗风险能力,尤其是涉及美国关税政策或供应链转移的情境。", "content": "通过考察企业的全球产能布局(如印度、越南、土耳其等地工厂)和客户订单分布(如境外收入占比),评估其分散地缘风险的能力。同时关注企业是否具备快速响应客户需求的本地化运营能力,以及其核心客户是否有明确的供应链转移计划,综合判断关税或政策变动对企业业绩的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:56:53", "modified_time": "2025-08-12 01:56:53", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9720254fda0c4f1da249241727061df0", "experience_type": "text", "when_to_use": "在分析高科技制造企业研发驱动型增长潜力时,特别是涉及新兴技术(如AI、人形机器人、服务器散热)的场景。", "content": "重点关注企业的研发投入占比、专利覆盖范围及高学历研发人员的增长趋势,结合其新产品开发周期和技术壁垒构建情况,评估其在新兴领域的竞争力。此外,跟踪企业与头部客户(如AMD、特斯拉等)的合作深度及技术协同效应,判断其未来市场份额和技术溢价能力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:56:53", "modified_time": "2025-08-12 01:56:53", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5a73d17175c74b0cb59c6f7981d84771", "experience_type": "text", "when_to_use": "在评估多元化扩张企业的财务健康状况时,尤其是涉及新业务布局的企业。", "content": "通过分析企业分业务板块的收入占比变化、毛利率趋势及费用率控制情况,识别其核心业务的稳定性与新业务的成长性。特别关注新业务对整体盈利能力的影响(如初期低毛利但高增长的业务),结合现金流表现和资本开支规划,评估其财务可持续性和战略执行能力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:56:53", "modified_time": "2025-08-12 01:56:53", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "76c44d73217a40ed8157db5fbd746f77", "experience_type": "text", "when_to_use": "在评估一家公司对新兴技术领域(如AI、芯片设计等)的战略投资时,需要判断其长期增长潜力和协同效应。", "content": "通过分析目标公司的核心技术能力、市场定位以及与母公司现有业务的协同性,可以有效评估投资的战略价值。例如,在禾盛新材投资熠知电子的案例中,分析师不仅关注了熠知电子的技术实力(如高端处理器设计能力),还深入探讨了其与子公司海曦技术在AI产业链中的协同作用,从而得出投资有助于打通上下游、提升整体竞争力的结论。这种分析方法适用于类似垂直整合或跨领域扩展的场景。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:57:53", "modified_time": "2025-08-12 01:57:53", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "719e2715205f49398b15edf75433e7d6", "experience_type": "text", "when_to_use": "在进行企业估值及投资建议时,需要结合财务预测、行业趋势和宏观经济环境。", "content": "综合利用盈利预测模型(如PE、PB比率)、现金流分析以及行业增长前景来制定投资评级。例如,本案例中通过对禾盛新材未来三年收入、利润增长率的详细预测,并结合国产AI大模型的发展趋势,得出了'推荐'的投资评级。此方法特别适合于成长型公司或处于快速变化行业的企业估值,但需注意宏观经济波动可能带来的风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:57:53", "modified_time": "2025-08-12 01:57:53", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a6edf3580d144a8996afed1718cbf646", "experience_type": "text", "when_to_use": "在研究高技术壁垒行业的公司时,需要验证其技术商业化落地的能力及其客户基础。", "content": "针对高端计算芯片等高科技领域,应重点关注公司在技术研发、产品适配和市场推广方面的进展。例如,熠知电子已实现多代处理器芯片的设计与销售,并与知名GPU企业完成产品适配,这表明其技术具备较高的商业化可行性。此外,深厚的客户基础进一步增强了其市场竞争力。这一经验可应用于其他技术密集型行业(如半导体、生物医药)的研究,以降低技术落地不及预期的风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:57:53", "modified_time": "2025-08-12 01:57:53", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a12394194ee6464284f8ddaf6e601ed2", "experience_type": "text", "when_to_use": "在分析资产配置或投资组合调整时,需要考虑不同时间跨度下的收益与风险平衡。", "content": "根据短期、中期和长期的时间框架分别制定策略。例如,对于禾盛新材,短期内可通过观察其股价相对于基准指数的表现(如沪深300)来决定战术操作;中期内则依赖于其主营业务的增长潜力和AI相关订单的加速落地;长期内则需关注其在AI基础设施领域的战略布局是否能够持续创造价值。这种方法尤其适用于多元化资产类别的动态管理,确保在不同周期内优化风险调整后的回报。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:57:53", "modified_time": "2025-08-12 01:57:53", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9b4bceb89b1d4b72aabd5e7743fc172c", "experience_type": "text", "when_to_use": "在评估一家多元化业务的公司未来增长潜力时,尤其是在光伏、环保设备和固碳技术等新兴领域具有复杂收入结构的企业。", "content": "通过分析公司的核心业务板块及其收入占比变化(如制程污染防控设备、末端污染治理设备和光伏产品),可以有效识别其业务转型的风险与机遇。重点关注毛利率修复趋势、订单释放节奏以及下游客户行业分布的多样性,以判断其长期盈利能力的可持续性。此外,结合公司在技术研发和一体化布局上的优势,评估其成本控制能力和市场竞争力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:58:55", "modified_time": "2025-08-12 01:58:55", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "20e4911ce22d44f2a2d885486bd9e3eb", "experience_type": "text", "when_to_use": "在预测高负债率企业未来的财务健康状况时,特别是在快速扩张阶段(如新产能建设或新技术投资)导致资产负债率显著上升的情况下。", "content": "结合历史财务数据(如资产负债率、经营活动现金流、投资活动现金流和筹资活动现金流)分析企业的资金使用效率和偿债压力。关注经营性现金流的改善趋势,同时评估新增投资是否能够带来预期收益(如高效电池片项目的技术领先性和市场需求)。此外,应警惕短期债务规模过快增长可能带来的流动性风险,并结合行业周期性特点制定合理的融资策略。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:58:55", "modified_time": "2025-08-12 01:58:55", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "328627f8267944ab89035da32ecb3839", "experience_type": "text", "when_to_use": "在为科技驱动型制造业企业进行估值分析时,尤其是那些拥有自主知识产权并处于技术升级关键节点的公司(如TOPCon电池技术路线的应用)。", "content": "采用分部估值法对不同业务线进行独立估值(如制程污染防控设备、光伏产品和其他新兴业务),并通过同业比较确定合理市盈率倍数区间。对于技术壁垒较高的业务(如LCR低温液态催化脱硝技术),需特别关注其研发成果的商业化进展及市场份额的变化。同时,考虑公司在新兴领域的战略布局(如固碳技术和海外业务拓展)对其估值溢价的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:58:55", "modified_time": "2025-08-12 01:58:55", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3455d4fe89514521afc60af6642fbe8c", "experience_type": "text", "when_to_use": "在制定针对强周期性行业的投资建议时,例如受光伏产业链价格波动影响较大的设备制造商或电池片生产商。", "content": "基于行业供需格局和价格趋势,结合公司当前库存水平、应收账款周转率以及市场价格波动带来的潜在减值风险,提出动态调整的投资策略。在行业出清阶段,优先选择具备先进产能和技术优势的企业;而在需求复苏期,则需关注产能爬坡速度和单位制造成本下降幅度。此外,综合考虑政策支持(如碳市场扩容)和国际市场开拓能力,以判断企业能否实现业绩拐点。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:58:55", "modified_time": "2025-08-12 01:58:55", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "cdabc545c91a4af983a26dd7418a5272", "experience_type": "text", "when_to_use": "在评估具有稳定现金流的公用事业公司(如水务、电力等)时,特别是在资本开支收缩期和应收账款改善潜力较大的情况下。", "content": "通过分析公司的自由现金流改善趋势(例如经营活动现金流净额与投资活动现金流净额的变化),结合行业应收账款/市值比例,评估公司在存量运营阶段的现金流弹性。重点关注污水处理费回款加速的可能性及其对分红率提升的潜在影响。此方法适用于成熟行业的企业估值和投资评级调整场景。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:59:48", "modified_time": "2025-08-12 01:59:48", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "91d29764a2044ab78c35ca60a76a621b", "experience_type": "text", "when_to_use": "在预测涉及资产减值影响消退的企业未来盈利增长时,尤其是因收购项目计提商誉减值导致过往业绩受到显著负向影响的情况。", "content": "识别并量化资产减值影响的消退对净利润的正向贡献,例如通过分析商誉账面价值的变化及未来不再产生减值的时间点,估算其对利润表的具体影响。该经验适用于评估危废处置、环保等竞争激烈行业的公司盈利能力恢复情况。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:59:48", "modified_time": "2025-08-12 01:59:48", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "cf74a810adc24fdf99b942dbdd472545", "experience_type": "text", "when_to_use": "在进行跨市场可比公司估值时,尤其是在A股和港股上市公司之间存在估值差异的情况下。", "content": "通过选取行业内可比公司,并基于一致预测数据计算平均估值倍数(如PE、PB等),同时考虑两地市场的会计披露准则、监管环境和流动性差异,调整目标公司的估值水平。此方法特别适合用于发现低估值标的的投资机会,例如港股平台的高股息率标的。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:59:48", "modified_time": "2025-08-12 01:59:48", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "52c17857c01f4dd0b4c4fb22b76f38a9", "experience_type": "text", "when_to_use": "在制定长期分红策略或评估分红可持续性时,特别是针对传统行业中的国有企业。", "content": "结合公司自由现金流改善趋势、资本开支计划以及历史分红率,评估未来分红率提升的可能性。例如,当企业在建项目较少且自由现金流持续改善时,可通过假设分红率提升至行业平均水平,测算股息率的变化及其对投资吸引力的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 01:59:48", "modified_time": "2025-08-12 01:59:48", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6c1adea97de240a8b014bad2300e6a5d", "experience_type": "text", "when_to_use": "在评估一家科技公司,特别是涉及智能物联、AI技术驱动的企业时,需要分析其产品结构优化及利润率改善情况。", "content": "通过分层次管理产品线(成熟产品提高效益、培育产品改善效益、孵化产品聚焦),并结合精细化管理和组织变革,可以有效提升毛利率及净利率。案例中,海康威视通过对国内主业产品线的分层管理与利润考核优化,使毛利率同比提升2.19个百分点,同时扣非归母净利率实现自1Q24以来新高。该经验适用于企业处于行业转型期或竞争激烈的市场环境,尤其是希望从规模扩张转向高质量发展的企业。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:00:50", "modified_time": "2025-08-12 02:00:50", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5e35222a19564f3f929ece61555b816c", "experience_type": "text", "when_to_use": "在对跨国企业的海外业务增长潜力进行评估时,需考虑区域市场需求、供应链管理能力及非核心产品扩展策略。", "content": "海外收入占比和增速是衡量企业国际化能力的重要指标。海康威视在东南亚、中东非、拉美等区域需求强劲,并通过持续优化供应链管理与非视频产品的扩展,推动海外业务同比增长6.9%。此外,创新业务布局(如机器人、汽车电子等)受益于新能源、3C制造等行业需求,进一步增强了长期增长潜力。对于涉足新兴市场的公司,应重点关注区域性需求趋势与本地化运营能力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:00:50", "modified_time": "2025-08-12 02:00:50", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b05834439936472381cf23829827559a", "experience_type": "text", "when_to_use": "当分析一家企业在经济周期波动中的抗风险能力和经营质量时,可关注应收账款变化、库存周转率以及费用控制。", "content": "海康威视通过降低经销商库存、优化低毛利产品占比等措施,使得期末应收款项较年初下降33.76亿元,同时研发费用和其他运营费用得到有效控制。这种以利润为中心的管理模式有助于提升公司在宏观经济不确定时期的财务稳健性。此类方法特别适合于面对短期经济压力或行业下行周期的企业,帮助其保持现金流健康并增强投资者信心。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:00:50", "modified_time": "2025-08-12 02:00:50", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "440d27df944c47dfbadeffe6e2a3df91", "experience_type": "text", "when_to_use": "在投资具有AI技术背景的公司时,需评估其技术商业化进程及产品覆盖范围,特别是在云、边、端领域的全面布局。", "content": "海康威视通过多年积累将AI技术融入大部分产品线,并推出数百款大模型产品,广泛应用于工业制造、电力、城市治理等多个领域,实现了全场景覆盖。基于千行万业销售渠道和先锋用户推广,AI相关产品有望持续渗透。因此,在选择AI技术驱动型标的时,应优先考察其技术落地能力、应用场景丰富度以及客户基础是否扎实。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:00:50", "modified_time": "2025-08-12 02:00:50", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a6875a155eb44ece97e23873bb48afed", "experience_type": "text", "when_to_use": "在评估一家农业或饲料行业龙头企业的增长潜力时,特别是在国际化扩张和产业链整合的背景下。", "content": "通过分析企业的核心业务(如饲料)市场份额的增长趋势、海外市场的扩展速度(如CAGR目标)、以及产业链闭环布局(如种苗、动保、养殖等协同效应),可以有效识别其长期增长驱动力。此外,关注管理层的战略执行力(如采购、研发、销售、生产四位一体的高效组织体系)及其对成本控制和市场反应速度的优化能力,能够进一步验证企业的可持续竞争优势。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:01:47", "modified_time": "2025-08-12 02:01:47", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9219799dcacc42f2b24598c32b5acae7", "experience_type": "text", "when_to_use": "在预测企业未来盈利能力和估值时,特别是在涉及多业务板块和多种收入来源的情况下。", "content": "采用分业务拆解法进行盈利预测,明确各业务板块的收入增长率、毛利率及毛利贡献。例如,针对饲料、农产品销售、原料贸易等不同业务线分别建模,并结合历史数据和行业趋势设定合理假设条件。同时,引入情景分析(乐观、中性、悲观)以应对不确定性,确保预测结果更具鲁棒性。最后,将盈利预测与估值指标(如P/E、P/B、EV/EBITDA)结合,全面评估投资价值。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:01:47", "modified_time": "2025-08-12 02:01:47", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f7ef6769fa954ec09d1925036ab8948e", "experience_type": "text", "when_to_use": "在风险评估过程中,特别是面对农牧行业特有的自然环境和动物疫病等外部冲击时。", "content": "系统化识别潜在风险因素,包括不可控自然灾害(如洪水对水产养殖的影响)、动物疫情(如非洲猪瘟对生猪养殖的冲击)、以及价格波动风险(如生猪价格大幅波动对养殖利润的影响)。为降低这些风险带来的负面影响,建议重点关注企业的风险管理措施,如期货套期保值操作、多元化区域布局、以及研发团队快速调整配方的能力。同时,建立敏感性分析模型,量化关键变量变化对企业盈利能力的潜在影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:01:47", "modified_time": "2025-08-12 02:01:47", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "760271565b524e29ad362d4fca5954c6", "experience_type": "text", "when_to_use": "在评价企业管理层质量及其对公司长期发展的影响时,尤其是在资本密集型和竞争激烈的行业中。", "content": "深入研究管理层背景、战略规划及过往业绩表现,例如核心领导者的专业背景(如技术出身的创始人)及其对企业文化的塑造作用。通过财务指标(如ROE、资产周转率、资产负债率)衡量管理效率,并对比同行表现突出其优势。此外,考察股权激励计划的设计是否合理,能否有效激发员工积极性,从而增强企业凝聚力和执行力,为长期稳健发展奠定基础。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:01:47", "modified_time": "2025-08-12 02:01:47", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6da7dcee2d25482eaa71ae4394371f4b", "experience_type": "text", "when_to_use": "在评估一家科技或电子元件制造企业的增长潜力时,特别是在涉及多产品线和新兴市场领域(如汽车电子、AI服务器、数据中心等)的情况下。", "content": "通过分析公司各业务板块的营收增速及其对整体收入的贡献比例,识别出高增长驱动因素。例如,顺络电子的信号处理与电源管理业务表现超预期,而汽车电子和数据中心领域的布局则为其长期增长提供了支撑。这种分产品线的增长拆解方法有助于理解企业核心竞争力与未来战略方向。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:02:37", "modified_time": "2025-08-12 02:02:37", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "4983a516ec20464ab9f77224fca80008", "experience_type": "text", "when_to_use": "当需要判断一家公司在特定经济周期中的盈利能力稳定性时,尤其是在需求波动较大的行业(如消费电子、半导体等)中。", "content": "结合毛利率变化趋势与费用率控制情况评估公司的运营效率。例如,顺络电子的毛利率在连续几个季度内保持稳定甚至小幅提升,同时研发费用占比合理增加以支持新产品开发。这表明该公司不仅具备成本控制能力,还能够通过技术创新维持竞争优势。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:02:37", "modified_time": "2025-08-12 02:02:37", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "39065912b10245dfa0f75b54d1a5408f", "experience_type": "text", "when_to_use": "在为投资者提供关于股票评级或投资建议时,特别是在估值倍数较低但盈利增长预期较高的情况下。", "content": "利用PE、PB、EV/EBITDA等多重估值指标,并结合净利润增长率与ROE预测,综合评价标的的投资吸引力。例如,顺络电子当前PE仅为21倍,而未来三年净利润复合年均增长率预计达到20%以上,显示出较强的估值修复潜力。这种方法确保了从多个角度验证投资逻辑的合理性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:02:37", "modified_time": "2025-08-12 02:02:37", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5090789c6f3646ffb082a1beb946cbef", "experience_type": "text", "when_to_use": "在制定跨资产类别的长期投资组合策略时,特别是针对具有明确技术革新驱动因素的行业(如新能源车、AI硬件升级等)。", "content": "关注行业政策导向、客户结构优化以及技术壁垒建设等因素,构建基于主题投资的配置框架。例如,顺络电子成功进入全球头部汽车供应链并实现全场景覆盖,反映了其在电动化与智能化浪潮中的先发优势。此类分析强调捕捉结构性机会而非短期波动。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:02:37", "modified_time": "2025-08-12 02:02:37", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "de3bfb7469cc46948267a4705462e229", "experience_type": "text", "when_to_use": "在评估一家科技公司,特别是涉及图像传感器(CIS)等高技术壁垒产品的企业时,需结合其下游市场需求和行业渗透率进行分析。", "content": "针对豪威集团的案例,成功应用了对下游市场渗透率的深度分析方法,通过量化汽车智能驾驶、智能手机旗舰机型以及运动相机等细分市场的增长潜力,推导出公司的营收增长预期。这种分析特别适用于技术驱动型企业,尤其是那些依赖新兴应用场景扩展市场份额的公司。关键在于结合历史数据、行业增长率(如Frost&Sullivan的CAGR预测)以及公司在目标市场的竞争地位,构建清晰的增长逻辑。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:03:28", "modified_time": "2025-08-12 02:03:28", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0eb1e7d41279466ab540bb4c8ef436b6", "experience_type": "text", "when_to_use": "在制定买入/增持评级建议时,需综合考虑企业的盈利预测、估值水平及市场环境。", "content": "通过对豪威集团2025-2027年的盈利预测(EPS分别为3.70元、4.79元),结合当前股价计算得出的PE倍数(32倍和24倍),判断其估值处于合理区间且具备吸引力。这一经验表明,在牛市或横盘市场中,投资者更关注企业未来的盈利增长潜力,而较低的PE倍数可以作为安全边际的重要指标。同时,需警惕消费电子景气度下行和技术迭代风险,确保推荐逻辑的稳健性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:03:28", "modified_time": "2025-08-12 02:03:28", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1860c4cdcd93492fbeb9124d26eea179", "experience_type": "text", "when_to_use": "在时间跨度为中期(6-12个月)的投资策略中,需重点关注财报数据和季度环比变化趋势。", "content": "本案例中,基于Q2单季度营收创历史新高(同比增长14.77%),并结合归母净利润和扣非后归母净利润的同比增速(分别为37.21%和36.48%),验证了公司经营效率提升和盈利能力释放的趋势。这种分析方法适用于需要快速捕捉企业基本面改善信号的场景,尤其是在经济复苏周期或行业拐点期。通过对比季度环比数据,可有效剔除季节性波动的影响,从而提高决策的准确性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:03:28", "modified_time": "2025-08-12 02:03:28", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "bfefdfd17f854b3abd1fbf6429a0d5f6", "experience_type": "text", "when_to_use": "在评估一家制造业公司的盈利能力增长潜力时,特别是在公司处于高资本支出行业(如能源设备、工业制造)且面临全球供应链和地缘政治风险的背景下。", "content": "通过分析公司收入增长率、净利润率变化趋势以及产品结构优化对利润率的贡献,识别公司在不同市场环境下的盈利韧性。同时,结合股权激励计划的实施情况,进一步验证管理层对未来业绩增长的信心,从而判断其长期投资价值。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:04:36", "modified_time": "2025-08-12 02:04:36", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "400f00198dca4772b3c856ff23b1dc0a", "experience_type": "text", "when_to_use": "在制定中长期投资策略时,特别是针对全球化运营的龙头企业,需要评估其在不同地理区域的增长机会和潜在风险。", "content": "从地缘政治、能源自主需求和产业格局升级的角度出发,分析目标公司在新兴市场和发达市场的布局优势,尤其是其低风险敞口(如中美贸易冲突影响可控)和多元化订单来源(如沙特阿美、ADNOC等大客户)。此外,关注公司在新兴领域的业务扩展(如核电、水处理),以捕捉未来的成长性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:04:36", "modified_time": "2025-08-12 02:04:36", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b7966b75953c406aa19a939a34e052b9", "experience_type": "text", "when_to_use": "在进行财务预测和估值建模时,特别是在面对具有稳定现金流和较高资本开支的企业时,需要综合考虑其资产负债表健康状况和资本效率。", "content": "通过分析流动资产与流动负债的比例、货币资金储备、经营性应收款项和存货的变化,评估企业的短期偿债能力和运营效率。同时,结合ROIC(投入资本回报率)和ROE(净资产收益率)的趋势,衡量企业资本利用效率,并将其作为未来盈利预测的重要参考指标。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:04:36", "modified_time": "2025-08-12 02:04:36", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "11748481b4a14de9af6fc8d88d9acaf7", "experience_type": "text", "when_to_use": "在为客户提供买入/增持评级建议时,尤其是在市场波动较大或经济周期不确定性较高的情况下。", "content": "基于P/E(市盈率)、P/B(市净率)等估值指标的历史对比和行业横向比较,结合未来3-5年的盈利增长预期,明确当前股价是否被低估。同时,考虑股权激励计划的目标设定及其达成可能性,进一步强化推荐逻辑的可信度。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:04:36", "modified_time": "2025-08-12 02:04:36", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "06532fe48504477f87ebc2d91c0783fa", "experience_type": "text", "when_to_use": "在评估一家塑料包装行业龙头公司时,特别是在环保政策趋严和市场集中度较低的情况下,分析其市场份额提升潜力及新增长点。", "content": "通过深入分析公司在产业链中的纵向一体化布局(如自建薄膜新材料产能)以及环保监管趋势下头部企业的竞争优势,可以识别出公司抢占中小企业市场份额的潜力。此外,关注公司在新消费领域(如宠物食品与潮玩)的前瞻性布局,能够帮助判断其高成长空间。同时,结合功能膜等新材料业务的扩展情况,预测未来业绩增长点。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:05:49", "modified_time": "2025-08-12 02:05:49", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "20e4817d5dc143a09d78961f36eecb75", "experience_type": "text", "when_to_use": "在对塑料软包行业的公司进行估值时,特别是当原材料价格波动较大且下游需求恢复存在不确定性的情况下,制定合理的盈利预测模型。", "content": "基于历史数据和行业趋势,将主营业务拆分为多个细分板块(如彩印包装、塑料薄膜、油墨等),分别预测销量、单价及毛利率变化。对于原材料价格敏感性高的业务,需结合原油价格走势及公司成本转嫁能力设定假设;对于新兴业务,则应重点关注产能释放节奏和市场需求匹配度。最终通过分部加总法得出整体营收和利润预测,并参考可比公司PE均值进行估值。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:05:49", "modified_time": "2025-08-12 02:05:49", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a0269c2548fe4eb380330893f718d7b8", "experience_type": "text", "when_to_use": "在跨国企业供应链中寻找投资机会时,尤其是针对那些正在向海外扩张并具备显著价格或产品优势的公司。", "content": "分析公司海外市场的拓展策略,包括进入跨国客户全球供应链的方式以及区域办事处和海外仓的设立情况。评估海外业务相较于国内业务的毛利率溢价来源(如发达地区的价格优势或欠发达地区的技术壁垒)。此外,还需考虑未来海外产能布局计划及其对整体盈利能力的拉动作用,从而判断海外业务对公司长期发展的贡献。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:05:49", "modified_time": "2025-08-12 02:05:49", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9d0ce012cb774055a7f724bfdcec3af6", "experience_type": "text", "when_to_use": "在研究一家具有稳定分红记录的公司时,尤其是在资本开支可控且现金流充裕的情况下,评估其股东回报政策的可持续性。", "content": "从历史分红比例、股息率及自由现金流角度出发,验证公司是否具备坚实的分红基础。同时,审查当前及未来的资本开支计划(如新建产能项目进度)以确保分红不会因大规模投资而中断。此外,关注管理层推行股权激励的情况,以确认其利益绑定机制是否有助于实现长期稳定的股东回报。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:05:49", "modified_time": "2025-08-12 02:05:49", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "260108bfb1c74b9191b6f25589deced7", "experience_type": "text", "when_to_use": "在评估具有资源垄断性和政策驱动型行业的公司投资价值时,例如稀土、锂矿等战略性资源行业。", "content": "结合供给侧的政策配额变化和需求侧的新兴产业增长潜力(如新能源汽车、机器人等),通过分析全球供给格局、国内政策调控力度以及终端市场需求增速,预测行业周期拐点和企业盈利空间。特别关注龙头企业的资源整合预期和产能扩张计划,以判断其长期成长性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:06:48", "modified_time": "2025-08-12 02:06:48", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "02a103f8e72e4160b4038dd551c90213", "experience_type": "text", "when_to_use": "在分析政策干预对出口导向型行业的影响时,例如受到出口管制的中重稀土及其下游制品。", "content": "密切跟踪政策实施后的出口许可证审批进展和实际出口数据变化,评估政策对短期出口量的冲击和长期国内外价差收敛的可能性。结合行业库存水平和海外市场需求弹性,判断政策执行对企业营收和利润的具体影响路径。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:06:48", "modified_time": "2025-08-12 02:06:48", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1f94ff7cd8d84daaa00d426a06f750b4", "experience_type": "text", "when_to_use": "在为客户提供资产配置建议时,特别是在涉及新兴技术领域相关标的(如高性能稀土永磁材料供应商)。", "content": "利用产业链分析框架,从上游原材料到下游终端应用,识别各环节的核心驱动力和潜在风险点。重点关注高增长应用场景(如新能源汽车、工业机器人)对整体需求的拉动作用,以及技术迭代可能带来的结构性机会或威胁。根据客户的风险偏好和投资期限,推荐具备较高业绩弹性和估值安全边际的标的。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:06:48", "modified_time": "2025-08-12 02:06:48", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "255bb380debe4dd7896b0c32a1e246c8", "experience_type": "text", "when_to_use": "在评估一家汽车制造企业的投资价值时,尤其是在新能源车市场快速扩张的背景下,需要结合销量数据、产品规划和产业链协同效应进行分析。", "content": "通过分析企业月度销量数据(如批发销量、自主品牌销量、新能源车销量)及其同比环比变化,识别季节性波动和市场趋势。同时,关注企业新产品推出节奏和全球化战略规划,特别是未来五年内计划推出的50余款新能源车型。此外,评估新央企重组落地对产业链协同效率的提升作用,例如全产业链布局和技术垂直整合带来的长期竞争力增强。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:07:40", "modified_time": "2025-08-12 02:07:40", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6be85661db2341fc87bf0156f2784b4d", "experience_type": "text", "when_to_use": "在为具有复杂业务结构的企业提供估值建议时,需综合考虑财务数据、盈利预测和估值倍数,以制定合理的评级和目标价。", "content": "利用历史财务数据(如主营收入、归母净利润、毛利率等)和未来三年的盈利预测,计算关键估值指标(如PE、PB、EV/EBITDA)。在本案例中,基于2025-2027年的盈利预测和当前股价,得出15X/12X/9X的PE倍数,并结合行业平均估值水平和公司增长潜力,维持“买入”评级。此方法适用于具有明确增长路径和较强市场竞争力的企业。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:07:40", "modified_time": "2025-08-12 02:07:40", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c16e2cffa35d49d781a2659e9b25c378", "experience_type": "text", "when_to_use": "在分析宏观经济政策和行业补贴对特定行业的影响时,特别是在传统淡季或经济复苏阶段,需评估政策实施对市场需求的短期和长期拉动作用。", "content": "结合行业政策动态(如第三批国补资金下发)和市场热度恢复预期,评估其对汽车销量的潜在推动作用。例如,尽管7月销量受淡季影响环比下滑,但随着政策支持和市场需求回暖,预计销量将逐步回升。这种分析方法特别适用于周期性较强的行业,如汽车、房地产等。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:07:40", "modified_time": "2025-08-12 02:07:40", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ac8b76f1ecad4aaebae09a756fa89bb1", "experience_type": "text", "when_to_use": "在评估企业风险时,尤其是涉及全球地缘政治、行业政策变动和新产品推出速度的风险因素,需进行全面的风险提示并量化潜在影响。", "content": "通过识别关键风险因素(如资源统筹效果不及预期、全球地缘政治风险、行业政策变动等),并对每项风险进行定性和定量分析,判断其对企业盈利能力、市场份额和估值的潜在影响。例如,在本案例中,明确指出新车型推出和交付速度可能不及预期的风险,为投资者提供全面的风险视角。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:07:40", "modified_time": "2025-08-12 02:07:40", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "fe838416e41341afbbd4f4c69f20038a", "experience_type": "text", "when_to_use": "在评估公司未来增长潜力和投资价值时,特别是在能源设备制造行业或资本密集型行业的企业分析中。", "content": "结合财务数据与订单动态进行前瞻性分析,尤其是关注新签订单、存量订单及合同负债的增长趋势。这些指标是判断公司未来收入确认和利润释放的重要先行指标。此外,应结合行业景气度(如天然气上游资本开支预测)来验证需求的可持续性,并评估公司在海外市场的竞争力是否能够支撑其长期发展。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:08:42", "modified_time": "2025-08-12 02:08:42", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e42ca6bcecdf4384bf473dec7499dd94", "experience_type": "text", "when_to_use": "当需要对跨国经营的企业进行风险提示和机会识别时,尤其是在涉及新兴市场或资源依赖型行业的情况下。", "content": "通过拆解地理范围内的业务分布,例如中东、非洲等地区,分析公司在不同区域的项目执行能力、客户认可度以及品牌影响力。同时,需特别注意原材料价格波动、汇率风险和地缘政治因素可能带来的不确定性,这些都可能显著影响利润率和现金流稳定性。建议将此类外部变量纳入敏感性分析框架以量化潜在冲击。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:08:42", "modified_time": "2025-08-12 02:08:42", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "4edb5c084ab84efe92ebcef16ded752e", "experience_type": "text", "when_to_use": "在制定基于估值的投资决策时,特别是针对具有稳定盈利能力和明确增长路径的成熟型企业。", "content": "采用多阶段盈利预测模型(如3-5年的收入、净利润增长率假设),并结合P/E、P/B等相对估值方法进行交叉验证。重点关注ROE、净利率等核心财务比率的变化趋势,确保估值倍数与公司的基本面相符。此外,在牛市环境中可适当提高目标价弹性,而在熊市中则需更严格地筛选安全边际较高的标的。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:08:42", "modified_time": "2025-08-12 02:08:42", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "aec09c318a1a4274adc5dd6bf8fda73b", "experience_type": "text", "when_to_use": "在设计全球化的市场拓展策略时,尤其是对于希望突破本土市场限制并寻求海外扩张的企业。", "content": "利用标杆项目案例(如KOC JPF-5 EPC项目)作为进入新市场的敲门砖,逐步建立信任后扩大合作规模(从“1到10”)。同时,注重与当地大型国有企业或政府机构的合作,这不仅有助于提升品牌形象,还能为后续订单获取奠定基础。最后,根据不同市场的监管要求调整合规策略,确保顺利落地。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:08:42", "modified_time": "2025-08-12 02:08:42", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "94c91a6b2f244391a4a1b27219749493", "experience_type": "text", "when_to_use": "在评估一家技术驱动型公司(如AI或大数据公司)的长期增长潜力时,特别是在其产品与行业智能化需求高度契合的情况下。", "content": "分析公司的技术底座、数据资产和客户积淀,结合其在ToG(政府)和ToF/B(企业和金融)领域的双轮驱动策略。特别关注其是否具备跨行业通用性和复制性,以及如何通过重大项目驱动形成稳定的商业模式。例如,拓尔思依托自研大模型Agent技术和开源情报系统,在政务、公安、金融三大场景中完成产品化落地,显示出其技术能力的可扩展性和市场粘性。这种模式适用于判断公司在新兴技术领域的竞争力和未来收入增长曲线。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:09:48", "modified_time": "2025-08-12 02:09:48", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5a316549a1e54d729516019ada81412a", "experience_type": "text", "when_to_use": "在进行股票估值分析时,特别是面对高PE倍数、负净利润但具有明确增长路径的科技类公司。", "content": "采用多维度估值方法,综合考虑市盈率(P/E)、市净率(P/B)、EV/EBITDA等指标,并结合盈利预测的增长趋势。对于拓尔思这样的公司,尽管当前PE高达650倍且净利润为负,但其营收增长预期(11%-12%年复合增长率)和未来三年利润转正的趋势表明,市场对其未来盈利能力抱有较高期待。因此,投资者应重点关注其业务转型后的利润率提升潜力和市场份额扩张速度,而非短期财务表现。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:09:48", "modified_time": "2025-08-12 02:09:48", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f9782d1c72304bdfbf1500745b6279df", "experience_type": "text", "when_to_use": "在评估企业资本结构稳健性及其对现金流管理的影响时,特别是在高研发投入和技术密集型行业中。", "content": "分析企业的资产负债表,尤其是货币资金、应收账款周转率及长期借款的变化情况,同时观察经营性现金流与资本支出的关系。以拓尔思为例,其2024年的定增注册获批显著增强了货币资金储备(从331百万元增至1082百万元),并大幅减少了长期借款(从5.82百万元降至2.80百万元)。这种资本结构调整不仅降低了财务风险,还为其AI技术研发和项目交付提供了充足的资金保障。此经验适用于评估企业在快速扩张阶段的财务健康状况。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:09:48", "modified_time": "2025-08-12 02:09:48", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "37f77515f4ff4598a359bd98dbbad1d9", "experience_type": "text", "when_to_use": "在制定投资决策时,需要权衡政策环境、行业趋势和市场竞争格局对特定领域(如国产数据要素、AI Agent应用)的影响。", "content": "结合宏观政策导向(如国产数据要素政策支持)和行业竞争动态,评估目标公司在细分市场的独特定位和护城河优势。例如,拓尔思凭借“数据治理+智能决策”能力,在安全政务、智慧公安、金融风控等领域构建了类似于Palantir的竞争壁垒。此外,考虑到AI Agent商业化落地进度可能存在的不确定性,建议设定分阶段的投资目标,并持续跟踪订单获取和回款周期等关键指标。这种方法适用于复杂环境下的战略投资布局。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:09:48", "modified_time": "2025-08-12 02:09:48", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "65d04b5694d24cd0a9af4b547e63ce3e", "experience_type": "text", "when_to_use": "在评估政策驱动型行业(如人工智能、绿色能源等)相关企业的投资机会时,尤其是在政策出台后短期内需快速形成投资观点的场景。", "content": "成功的关键在于结合宏观政策导向与企业具体业务布局进行交叉分析。例如,在本案例中,通过分析国务院常务会议审议通过的《关于深入实施“人工智能+”行动的意见》,识别出AI基础设施建设(如数据中心电力设备)的需求增长潜力,并进一步将其映射到金盘科技的核心业务优势上。这种分析方法强调政策解读与企业能力匹配,同时关注产业链上下游的传导效应。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:11:03", "modified_time": "2025-08-12 02:11:03", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "940f0c59e0a948b29f55a22f8fda5bea", "experience_type": "text", "when_to_use": "在对全球化布局的企业进行盈利预测调整时,尤其是当外部环境(如贸易政策、关税变化)对企业出口业务产生显著影响的场景。", "content": "在面对美国关税政策对公司出口业务的不利影响时,通过下调2025-2026年的盈利预测并新增2027年预测,体现了灵活应对市场风险的能力。关键经验包括:1)及时量化外部风险对财务模型的影响;2)考虑公司全球生产基地布局的动态调整(如墨西哥、波兰、马来西亚等地的扩张)以部分抵消负面影响;3)保持预测透明度,明确假设条件和敏感性分析。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:11:03", "modified_time": "2025-08-12 02:11:03", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "82cd8f5148214108b28f5f8d2d991e53", "experience_type": "text", "when_to_use": "在评估企业数字化转型对其长期竞争力及业绩增长潜力的影响时,特别是针对制造业或传统行业的数字化升级案例。", "content": "通过对金盘科技数字化转型路径的深度剖析,提炼出其从内部工厂智能化升级到为客户提供数字化工厂整体解决方案的双轮驱动模式。这种分析框架强调:1)识别数字化转型的具体落地成果(如生产效率提升、成本降低);2)评估数字化业务收入的增长趋势及其对整体毛利率的贡献;3)关注企业在数字化领域的技术积累和市场拓展能力。该框架适用于类似场景中的企业价值挖掘。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:11:03", "modified_time": "2025-08-12 02:11:03", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "84a16621215943abbc30d602e9f87999", "experience_type": "text", "when_to_use": "在进行多周期视角下的估值分析时,特别是在需要平衡短期波动与长期战略价值的场景(如股票评级维持‘优于大市’但需调整盈利预期的情况)。", "content": "本案例中,尽管因外部风险下调了短期盈利预测,但基于长期战略规划(如海外基地建设和新市场开拓)仍维持‘优于大市’评级。核心经验包括:1)区分短期扰动因素与长期结构性增长驱动;2)利用PE、PB、EV/EBITDA等多维度估值指标验证结论的稳健性;3)结合ROIC、ROE等财务指标评估企业资本配置效率,确保估值逻辑的一致性。这种方法有助于在复杂市场环境中形成独立且有支撑的投资建议。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:11:03", "modified_time": "2025-08-12 02:11:03", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9399cdf9b4574e0384799446a55d504a", "experience_type": "text", "when_to_use": "在评估一家科技或电子元器件制造企业的成长性时,特别是在其产品组合涉及多个新兴领域(如汽车电子、AI应用、数据中心等)的场景下。", "content": "当分析企业财务表现和战略方向时,应重点关注其收入来源的多元化及其在不同领域的增长潜力。例如,顺络电子通过扩展汽车电子、AI服务器和氢燃料电池等新业务板块,成功实现了收入的持续增长。建议结合季度财报中的分产品收入增长率、毛利率变化及研发投入比例,来判断企业是否具备长期竞争力。此外,关注企业在高景气度行业的布局(如新能源车、机器人、AI端侧应用),并评估这些领域未来的市场规模与技术壁垒。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:12:06", "modified_time": "2025-08-12 02:12:06", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6e3514d282604ce399f80981779970bb", "experience_type": "text", "when_to_use": "在进行股票投资评级和目标价格预测时,特别是针对具有稳定增长预期的中大型企业。", "content": "采用基于历史财务数据和未来盈利预测的估值模型(如P/E、P/B、EV/EBITDA)进行综合分析,并结合行业周期、市场环境和技术趋势调整预测参数。例如,顺络电子的买入评级建立在其未来三年归母净利润CAGR超过20%的基础上,同时考虑了市盈率逐步下降的趋势。建议在制定投资建议时,明确区分短期波动和长期价值创造的能力,避免因市场情绪过度影响决策。此外,需定期更新盈利预测以反映最新市场动态。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:12:06", "modified_time": "2025-08-12 02:12:06", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e73ee5186e014ce48c996963d4f409ef", "experience_type": "text", "when_to_use": "在评估企业现金流健康状况及其资本支出效率时,尤其是在需要判断企业扩张计划可行性的情况下。", "content": "分析企业经营活动现金流与资本支出之间的平衡关系,确保其能够支持未来的业务扩张和技术研发需求。例如,顺络电子尽管在2025年资本开支有所增加,但其经营性现金流同比大幅改善,且资产负债率保持在合理范围内(约48%)。这表明公司有能力通过内部资金满足大部分投资需求,同时维持较低的融资压力。建议特别关注应收账款周转率、存货管理效率以及长期借款占比,作为衡量企业财务稳健性的关键指标。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:12:06", "modified_time": "2025-08-12 02:12:06", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d2f3d4a7bd9d41818d282089d052dcbe", "experience_type": "text", "when_to_use": "在评估家电制造企业(如热水器、厨房电器)的市场竞争力和增长潜力时,特别是在存量市场与增量创新并存的环境下。", "content": "通过分析企业的核心零部件自制率以及其对成本控制的影响,结合产品均价提升空间和渠道多元化策略,可以有效评估企业在行业中的长期竞争力。重点关注公司是否通过高势能IP合作、研发创新体系建设及用户需求洞察来优化产品结构,从而提升销售均价和市场份额。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:13:11", "modified_time": "2025-08-12 02:13:11", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "18b06847e17a4a619ab18b2f53a64593", "experience_type": "text", "when_to_use": "在全球化运营背景下,针对企业海外扩张战略进行风险与机会评估时,尤其是涉及新兴市场和成熟市场的布局。", "content": "采用'产品出海-制造出海-品牌出海-资本出海'的发展步骤框架,评估企业国际化进程的稳健性。特别关注自建生产基地的供应链分散策略、海外订单交付能力及自有品牌推广力度,同时考虑汇率波动、地缘政治和贸易摩擦等外部因素对盈利能力的潜在影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:13:11", "modified_time": "2025-08-12 02:13:11", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a67f8f7509b9457e9dcbc762cba116ad", "experience_type": "text", "when_to_use": "在财务健康状况分析中,需要判断企业是否具备稳定现金流支撑高比例分红政策,尤其是在经济周期波动或行业低迷时期。", "content": "综合考察企业的货币资金占比、偿债能力指标(如流动比率、速动比率)以及经营活动现金流韧性,优先级设定为'现金流>盈利>规模'。此外,通过对比存货周转天数和应收应付账款周转速率的变化趋势,验证内部管理效率改进的实际效果,并将其作为未来盈利能力改善的重要信号。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:13:11", "modified_time": "2025-08-12 02:13:11", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "4d58370db88a4ac19813b02e06ef3523", "experience_type": "text", "when_to_use": "在评估能源类公司(特别是电力企业)的盈利能力和投资价值时,尤其是涉及煤电、风电和光伏等多元化能源结构的企业。", "content": "通过分析能源企业的分电源利润贡献(如燃煤、风电、光伏),结合燃料成本(如煤价)变化和装机增长数据,可以有效预测其短期和中期盈利能力。例如,煤价下降对煤电利润有显著正向影响,而新能源装机的增长则为长期利润提供支撑。此外,应关注自由现金流的转正情况以及ROE的变化趋势,这些指标能够反映企业的财务健康状况和资本效率。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:14:14", "modified_time": "2025-08-12 02:14:14", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "27df0d05574d49ce959626dace1968c0", "experience_type": "text", "when_to_use": "在进行投资评级调整或推荐买入/增持某股票时,尤其是在市场环境处于低波动期或经济复苏阶段。", "content": "基于历史财务数据与前瞻性预测(如营收增长率、归母净利润增长率、ROE等核心指标),结合当前股价对应的估值倍数(如P/E、P/B)及股息率,判断是否存在估值修复或成长空间。例如,当一家公司的PE低于行业平均水平且未来三年盈利预期稳定增长时,可考虑上调投资评级至“买入”。同时,需注意潜在风险因素(如政策调整、原材料价格波动)对评级的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:14:14", "modified_time": "2025-08-12 02:14:14", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3ec88543bd4b425184bb3e277c6bb26b", "experience_type": "text", "when_to_use": "在研究新能源行业的政策影响及其对企业经营表现的作用时,特别是在国家出台新政策后需要评估其落地效果。", "content": "通过跟踪政策细则(如136号文全面入市要求)的实施进展,结合应收账款回款情况和新增装机增速,可以评估政策对企业现金流和盈利能力的实际影响。例如,若新能源项目的回款能力保持稳健,则表明政策落地较为顺利;反之,则需警惕政策执行中的不确定性可能带来的负面影响。此外,还需关注各地政策差异对公司跨区域运营的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:14:14", "modified_time": "2025-08-12 02:14:14", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5c9564b22db7498ab3b6b6892f5512ca", "experience_type": "text", "when_to_use": "在制定资产配置策略时,特别是在不同经济周期中选择合适的资产类别(如股票、固定收益产品或另类投资)。", "content": "根据宏观经济条件(如通胀水平、利率趋势)和市场动态(如板块轮动、资金流向),优先选择具备抗周期特性的资产。例如,在高通胀环境下,具有稳定现金流和高股息率的公用事业股票(如电力企业)可能更具吸引力。同时,应结合个股的资产负债率和财务费用变化,筛选出财务杠杆较低且偿债压力较小的目标资产,以降低组合风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:14:14", "modified_time": "2025-08-12 02:14:14", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0030585ebd5c416080be2c757eb07541", "experience_type": "text", "when_to_use": "在评估一家消费类公司(如食品或日用品)的盈利能力改善时,特别是在原材料成本波动较大的情况下。", "content": "当分析企业的盈利能力修复时,应重点关注其核心产品的毛利率变化以及成本结构优化措施。例如,在本案例中,原材料采购成本下降直接推动了包装油和粕类产品的毛利率提升。此外,企业通过降本增效和费用管控进一步放大了利润增长效应。这种分析方法特别适用于高竞争性行业中的企业,因为这些企业通常依赖规模经济和成本控制来维持竞争力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:15:22", "modified_time": "2025-08-12 02:15:22", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "02d5133615fd4895ab2a3bc808d3e4bb", "experience_type": "text", "when_to_use": "在研究快速扩张的消费品公司是否能够有效利用渠道策略驱动收入增长时,尤其是面对区域市场渗透需求的情况。", "content": "对于正在扩展市场份额的企业,渠道建设是关键的成功因素之一。在本案例中,经销商数量的增长、线上直销收入的提升以及新品推出的多产品线布局共同推动了包装油业务量价齐升。建议未来在类似场景中,将渠道拓展的速度与质量作为核心指标,并结合区域消费升级趋势进行产能布局规划,以确保供应链支持销售增长。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:15:22", "modified_time": "2025-08-12 02:15:22", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b27ad6c03bac42b9a0e7c048e337d7be", "experience_type": "text", "when_to_use": "在制定长期投资决策时,需要综合考虑资产估值水平、盈利预测及风险提示信息。", "content": "基于财务模型对未来的EPS、PE倍数和ROE等指标进行预测,可以为股票提供明确的估值参考。例如,本报告预计目标公司在2025-2027年的动态PE分别为16/14/11倍,且评级为“买入”。同时,必须注意潜在的风险因素(如原材料价格反弹或消费端需求疲软),并将其纳入情景假设中。这种方法尤其适合于周期性较强或受宏观环境影响较大的行业。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:15:22", "modified_time": "2025-08-12 02:15:22", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "55ac3a2246b64b459d1fadd075cc930b", "experience_type": "text", "when_to_use": "在新兴市场或特定区域实施产能扩张计划时,需结合当地消费升级趋势和物流网络覆盖能力。", "content": "为了抓住西北市场的消费升级机遇,目标公司计划投资建设食用油加工项目。这表明,在选择新增产能地点时,不仅要考虑当前市场需求,还要前瞻性地评估区域经济发展潜力和基础设施条件。此外,稳定运营的现有生产基地为全国扩张提供了保障,因此建议在其他类似场景中也采用“稳健+进取”的双轨策略,即巩固成熟市场的同时开拓新领域。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:15:22", "modified_time": "2025-08-12 02:15:22", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1db2b7ec06a64c6eaece10baa6fbf9cb", "experience_type": "text", "when_to_use": "在评估一家公司未来增长潜力时,特别是在新兴市场或政策驱动型行业中(如电动两轮车、智能设备等)。", "content": "通过分析政策红利(例如新国标推行及以旧换新政策)、市场需求变化以及公司在行业中的竞争地位,可以有效预测收入和利润的增长趋势。特别关注产品销量的同比增速、毛利率优化路径,以及高附加值业务的扩展情况(如九号公司的割草机器人和全地形车)。此外,规模效应带来的成本下降和盈利能力提升是重要的验证点。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:16:25", "modified_time": "2025-08-12 02:16:25", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e8879f141100458281d92373b1724daf", "experience_type": "text", "when_to_use": "在进行财务预测和估值建模时,特别是在中长期战略规划场景下(如3-5年的盈利预测)。", "content": "基于历史数据和当前市场动态,结合行业增长率、公司市场份额扩张计划以及新产品线的贡献,构建分阶段的收入和利润预测模型。重点关注毛利率、费用率的变化趋势及其背后的驱动因素(如研发支出对产品竞争力的影响)。同时,通过敏感性分析调整关键假设(如政策延续性、海外市场的开拓速度),以确保预测的稳健性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:16:25", "modified_time": "2025-08-12 02:16:25", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "697304ed5b5f472292a3c3eb2227493b", "experience_type": "text", "when_to_use": "在判断是否维持或上调一家公司的投资评级时,尤其是在业绩超预期的情况下。", "content": "综合考量短期业绩弹性与长期增长潜力,结合PE、PB等估值指标的历史水平与行业均值进行横向和纵向对比。如果公司核心业务表现出强劲增长(如九号公司电动两轮车销量翻倍),且新业务具备明确的盈利路径,则可适当上调盈利预测和目标价。此外,需警惕潜在风险(如国际贸易摩擦、新品推广不及预期)对评级的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:16:25", "modified_time": "2025-08-12 02:16:25", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7dab1fc91a7942dbaee66c5758191469", "experience_type": "text", "when_to_use": "在跨区域市场分析中,特别是在发达市场与新兴市场之间分配资源或制定差异化策略时。", "content": "根据不同市场的经济周期、监管环境和消费者偏好,设计针对性的产品组合和营销策略。例如,九号公司在国内受益于政策推动,在欧洲则依靠品牌影响力和技术优势开拓高端市场。同时,需关注汇率波动、关税政策等外部因素对海外收入的影响,并通过本地化运营降低风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:16:25", "modified_time": "2025-08-12 02:16:25", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8b857ab871a248d09dde33f6ee7db685", "experience_type": "text", "when_to_use": "在评估一家科技公司,特别是专注于ASIC芯片设计和定制化解决方案的公司时,尤其是在AI算力需求增长和技术升级驱动的市场环境中。", "content": "成功的关键在于深入分析公司的核心业务能力(如IP授权、芯片设计与量产能力)及其下游客户需求。重点关注公司在手订单的增长趋势和客户结构,尤其是与行业龙头的合作关系。此外,结合全球芯片定制化趋势和政策支持因素,评估其长期成长潜力。例如,芯原股份通过强化SoC及ASIC定制能力,叠加AI与Chiplet技术的协同效应,展现了显著的竞争优势。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:17:30", "modified_time": "2025-08-12 02:17:30", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b09ec8aefa2e4d91b1570d7eb35a06aa", "experience_type": "text", "when_to_use": "在对高研发投入、尚未实现盈利的成长型科技公司进行估值时,特别是在需要预测未来盈利能力并判断投资价值的场景中。", "content": "对于此类公司,传统的PE估值可能失效,应更多关注PS(市销率)和EBITDA等指标,并结合营收增长率、毛利率改善趋势以及研发费用占比的变化来判断其盈利拐点。例如,在芯原股份的案例中,尽管短期内净利润仍为负,但其营收增速、在手订单规模及研发效率的提升为其未来的盈利释放奠定了基础,PS估值方法能够更好地反映其潜在价值。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:17:30", "modified_time": "2025-08-12 02:17:30", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9f7074d395d545a083751c18e6f19772", "experience_type": "text", "when_to_use": "在制定针对特定行业或板块的投资策略时,尤其是在市场环境从低谷向复苏转变的过程中,或是面临技术变革驱动的新机遇时。", "content": "通过拆解细分业务板块的表现(如知识产权授权使用费收入、量产业务收入等),识别增长驱动力,并结合宏观经济周期、行业动态和竞争格局进行综合分析。同时,利用财务预测模型量化关键指标(如营收增长率、净利润率)的变化路径,以明确投资节奏。例如,芯原股份在2025年第二季度业绩预告中展现出的环比大幅增长,表明其正进入加速发展阶段,适合采取积极的投资策略。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:17:30", "modified_time": "2025-08-12 02:17:30", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1dacb7c409d54774aa37e536a2a07e5f", "experience_type": "text", "when_to_use": "在风险评估过程中,特别是涉及科技行业的供应链依赖、市场竞争加剧及汇率波动等多重不确定性因素时。", "content": "除了关注财务数据外,还需全面审视外部风险因素的影响,包括下游客户需求波动、竞争对手的技术突破以及国际市场的货币风险。例如,芯原股份的风险提示中提到的“下游客户需求变动”和“汇率波动”是其主要风险点,这些因素需在投资决策中予以充分考量,并通过分散投资或对冲工具降低潜在损失。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:17:30", "modified_time": "2025-08-12 02:17:30", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "bc3556e593b44eafaee959b0e8a821c0", "experience_type": "text", "when_to_use": "在评估一家技术驱动型公司(如半导体或IP授权企业)的成长潜力时,尤其是在AI和物联网等新兴领域快速发展的背景下。", "content": "通过分析公司的核心业务构成(如IP授权、芯片量产业务占比)以及其在手订单的增长趋势,可以有效判断其未来收入增长的可持续性。此外,结合研发投入占比的变化趋势,能够进一步评估其盈利能力的改善空间。例如,芯原股份的在手订单连续七个季度保持高位,并且研发资源逐步向客户项目倾斜,这表明其规模效应正在显现,未来业绩弹性较大。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:18:26", "modified_time": "2025-08-12 02:18:26", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6b8c43ae54c14effa058d3514c46f14e", "experience_type": "text", "when_to_use": "在对高成长性但尚未盈利的科技公司进行估值时,特别是在市场处于牛市或高波动期,投资者更关注长期增长潜力而非短期盈利。", "content": "采用市销率(PS)而非市盈率(PE)作为核心估值指标,能够更好地反映公司未来的增长预期。例如,芯原股份在2027年的PS为11倍,低于行业平均水平,而其营收预计在未来三年将保持23%-32%的复合增长率。这种估值方法特别适用于处于快速发展阶段的企业,尤其是在新兴市场中。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:18:26", "modified_time": "2025-08-12 02:18:26", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8824cf9d57c9467080714f4f32f47307", "experience_type": "text", "when_to_use": "在制定中长期投资策略时,特别是在经济周期处于复苏或扩张阶段,需要识别具有结构性增长机会的行业和公司。", "content": "通过分析宏观经济趋势(如AI算力需求的增长)与公司战略布局的契合度,可以发现潜在的投资机会。例如,芯原股份提前布局Chiplet技术和生成式AI应用,使其在ASIC领域的竞争优势逐步显现。同时,结合公司在新兴市场的客户拓展情况,可以进一步确认其长期增长潜力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:18:26", "modified_time": "2025-08-12 02:18:26", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "837a64b7c05d4efa9e381a7a135a0c5d", "experience_type": "text", "when_to_use": "在风险评估过程中,尤其是面对可能受到下游需求波动影响的技术公司时,需要综合考虑市场需求、竞争格局和技术壁垒。", "content": "除了关注财务数据外,还应深入分析公司的订单结构和客户集中度。例如,芯原股份的在手订单金额创新高,但需警惕AI领域下游需求不及预期的风险。此外,公司主要依赖少数大客户(如互联网厂商),因此需密切关注这些客户的战略调整对公司业务的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:18:26", "modified_time": "2025-08-12 02:18:26", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "dd6ebba50b8a4d6f8e924110537e3cdb", "experience_type": "text", "when_to_use": "在评估一家消费品公司,特别是饮料行业公司的增长潜力和盈利能力时,尤其是在市场处于牛市或高增长阶段。", "content": "通过分析核心产品的收入增长率(如能量饮料的21.97%增长)以及新兴产品类别(如电解质饮料占比提升至13.91%)对总收入结构的影响,结合毛利率趋势(如整体毛利率45.15%、核心产品毛利率50.61%),可以有效识别公司的盈利驱动因素。此外,关注区域市场的增长分布(如华北市场增长73.03%、线上渠道增长53.8%)能够揭示潜在的增长机会与市场渗透策略。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:19:31", "modified_time": "2025-08-12 02:19:31", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e097cb9b53e147fc95822319df57487b", "experience_type": "text", "when_to_use": "在为中长期投资者制定股票投资评级时,特别是在估值较高的成长型市场环境下,需要平衡当前估值与未来盈利增长之间的关系。", "content": "基于历史财务数据(如营收、净利润复合增长率分别为29%-40%)和预测性指标(如EPS从8.35元到13.26元的逐年上升),结合动态市盈率变化(从35.37倍降至22.25倍),可以推导出合理的“增持”评级逻辑。同时,需考虑市场竞争加剧等风险提示来调整投资建议,确保推荐意见具有前瞻性且符合风险偏好。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:19:31", "modified_time": "2025-08-12 02:19:31", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1b5a825b8fc44834a8eda932d3926f6b", "experience_type": "text", "when_to_use": "在分析企业运营效率及偿债能力时,尤其是在经济周期波动较大或信贷收紧的背景下。", "content": "通过资产负债表中的流动比率(如从1.09下降至0.92)、速动比率(如从0.92下降至0.68)以及净负债比率(如保持在178%-194%区间),可以全面评估企业的短期流动性压力和长期资本结构稳健性。同时,观察经营活动现金流是否持续覆盖资本支出(如经营活动现金流稳定在5,900-9,440百万元之间),有助于判断其资金链韧性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:19:31", "modified_time": "2025-08-12 02:19:31", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e4f7f851abd64dcb90e9778abef16da8", "experience_type": "text", "when_to_use": "在评估一家科技驱动型消费企业的中长期投资价值时,特别是在利润率修复和多业务线扩展的背景下。", "content": "通过分析公司不同业务线(如摄像头、智能锁、机器人和云服务)的增长驱动力和盈利能力变化,可以识别出利润率改善的核心因素(例如成本结构优化、高端产品渗透率提升)。同时,结合财务数据(如毛利率、净利率逐季变化)与市场动态(如行业增速、竞争格局),建立分业务线的盈利预测模型,并对未来的收入和利润增长进行情景假设。此外,需关注运营调整(如运营商渠道优化)对公司整体财务表现的潜在影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:20:23", "modified_time": "2025-08-12 02:20:23", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e41568935df74f34b6b9bfe735b7e58e", "experience_type": "text", "when_to_use": "在宏观经济波动或行业周期性调整期间,需要判断企业是否具备抗风险能力并能够实现逆势增长。", "content": "通过分析公司在不利条件下的财务韧性(如资产负债表健康度、现金流状况)以及核心业务的持续增长潜力(如智能锁市场的高增速、海外市场的扩张),可以判断其是否具备穿越周期的能力。特别是当行业面临库存清理或需求疲软时,应重点关注管理层的战略调整措施(如非视觉类产品的去库存计划)及其对未来业绩的影响。建议结合PE、PB、EV/EBITDA等估值指标,评估当前股价是否已充分反映短期压力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:20:23", "modified_time": "2025-08-12 02:20:23", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d78d557991804a6c8e33498f0692764c", "experience_type": "text", "when_to_use": "在制定针对成长型企业的投资策略时,尤其是在收入增长放缓但利润弹性较大的情况下。", "content": "采用‘收入+利润双轮驱动’的分析框架,将收入端的稳健性和利润端的修复潜力分开评估。对于收入端,关注新产品的市场渗透率(如AI升级后的智能锁)、新兴市场的拓展进展以及现有客户的粘性;对于利润端,则重点分析费用控制(如销售费用率、研发费用率的变化)和规模效应释放的可能性。最终结合历史估值区间(如P/E、P/B的历史均值)与未来盈利预期,判断是否存在估值修复空间。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:20:23", "modified_time": "2025-08-12 02:20:23", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "840ad36bb49248a8a0f562d2ef3b3866", "experience_type": "text", "when_to_use": "在评估一家多元化业务结构的公司(如试验设备、环试服务和集成电路板块)的成长潜力时,特别是在其各业务板块收入增速分化且毛利率波动的背景下。", "content": "针对多元化业务公司的投资分析,应分拆各业务板块的表现,重点关注高增长板块(如集成电路验证与分析服务)的收入增速和盈利能力趋势。同时,结合费用率的变化,判断公司在成本控制和技术升级方面的成效。此外,需关注公司在新兴领域的技术储备和市场布局,以评估其中长期成长空间。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:21:17", "modified_time": "2025-08-12 02:21:17", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f6fef9f8c32748d99a7b7a10b5e0e07b", "experience_type": "text", "when_to_use": "在进行股票评级(买入/持有/卖出)决策时,特别是当公司处于业绩拐点或行业景气度回升阶段时。", "content": "在股票评级中,应结合季度财务数据(如Q2归母净利润增速显著改善)与行业动态,识别业绩拐点信号。通过对比历史估值水平(如PE、PB)和未来盈利预测,评估当前股价是否具备吸引力。同时,考虑潜在风险因素(如市场竞争加剧、新行业开拓不及预期)对评级的影响,确保建议具有充分的风险缓冲。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:21:17", "modified_time": "2025-08-12 02:21:17", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c037b18c45bb477b8136fa051474dcd8", "experience_type": "text", "when_to_use": "在为一家公司制定盈利预测和估值模型时,特别是在其收入增速稳健但毛利率承压的情况下。", "content": "构建盈利预测模型时,应基于历史增长率和行业趋势设定合理的营收增速假设,并结合毛利率变化趋势调整盈利预测。对于毛利率下降的情况,需深入分析原因(如原材料成本上升或竞争加剧),并评估公司是否有能力通过规模效应或技术升级恢复利润率。此外,采用多种估值方法(如PE、EV/EBITDA)交叉验证,确保估值结论的稳健性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:21:17", "modified_time": "2025-08-12 02:21:17", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8e9926a71f864e108dd6668f50be8b74", "experience_type": "text", "when_to_use": "在分析一家公司资产负债健康状况时,特别是当其负债率较高但流动性充足的背景下。", "content": "评估公司偿债能力时,应综合分析资产负债率、流动比率和现金流量表中的关键指标(如经营活动现金流净额)。对于负债率较高的公司,需重点考察其短期借款和应付账款的到期压力,以及货币资金和应收账款的流动性支持。若公司能够保持稳定的经营现金流和较低的资本开支需求,则其债务风险相对可控。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:21:17", "modified_time": "2025-08-12 02:21:17", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "dd2de9d16e7042f6876c30abe8aaf206", "experience_type": "text", "when_to_use": "在评估一家跨国制造企业的全球扩展策略时,尤其是在分析其海外市场的销量增长、政策影响和供应链布局。", "content": "通过结合出口销量数据、关税政策变化以及公司在各区域的工厂建设规划,可以有效预测企业在不同市场中的发展潜力和盈利能力。例如,比亚迪在巴西提高关税后短期销量回落,但长期来看本地化生产将提升竞争力。建议关注企业如何通过本地化生产和滚装船运力优化应对国际贸易壁垒,同时评估目标市场的实际需求增长。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:22:19", "modified_time": "2025-08-12 02:22:19", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9ffb5eecfb0748188bc0961ac135f35a", "experience_type": "text", "when_to_use": "在对新能源汽车企业进行估值及投资评级时,特别是在技术驱动型产品升级与高端化战略背景下。", "content": "以比亚迪为例,通过分析其高阶智驾技术(如兆瓦闪充)和新车型发布计划,结合历史销量趋势与市场份额扩张速度,可推导出未来营收和利润增长预期。同时需考虑品牌定位(如方程豹、仰望系列)是否能够精准满足细分市场需求,并转化为可持续的盈利点。对于类似案例,建议采用PE/PB比率结合EV/EBITDA方法进行横向比较,以确认当前估值是否合理。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:22:19", "modified_time": "2025-08-12 02:22:19", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0e136323e46c4944bec74fe8c90d6c51", "experience_type": "text", "when_to_use": "在经济周期波动或行业淡旺季明显的情况下,需要调整短期战术操作或中期组合配置。", "content": "从比亚迪7月销量环比下滑中可以看出,即使整体趋势向好,季节性因素仍可能导致阶段性疲软。因此,在制定交易策略时,应区分短期波动与长期基本面变化,避免因单一月份数据而误判公司价值。此外,可以通过观察存货周转天数、应收账款周转率等营运效率指标,判断企业是否存在库存积压或资金链压力,从而决定是否调整持仓比例。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:22:19", "modified_time": "2025-08-12 02:22:19", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a1fd704ec9d04deebafc9eac5647b0df", "experience_type": "text", "when_to_use": "当客户咨询关于新兴市场投资机会时,尤其是涉及货币风险、监管环境差异以及基础设施建设潜力的领域。", "content": "比亚迪在土耳其、巴西、匈牙利等地布局工厂表明,选择具有稳定政策支持且物流条件逐步改善的国家是关键成功要素。投资者应优先考察当地市场规模、政府补贴力度以及外汇稳定性,同时警惕潜在的地缘政治风险。此外,自建供应链(如滚装船队)可以帮助企业减少外部依赖,增强抗风险能力,这一点值得纳入客户咨询服务的重点内容。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:22:19", "modified_time": "2025-08-12 02:22:19", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8a75f8461e494fab95c961ac1af65c7d", "experience_type": "text", "when_to_use": "在评估矿业公司或资源类企业的投资价值时,特别是在铜、锌等金属价格波动较大的市场环境中。", "content": "结合供需基本面分析与宏观经济周期(如美联储货币政策)对大宗商品价格的影响,重点关注长期供需缺口和行业结构性变化。通过量化关键变量(如产量、价格、成本)预测未来收入和利润,并利用敏感性分析评估金属价格波动对企业财务表现的潜在影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:23:21", "modified_time": "2025-08-12 02:23:21", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "596a2713f20648b39d987bdc0e026be4", "experience_type": "text", "when_to_use": "在进行成长型资产(如扩产项目)估值时,特别是针对具有明确产能扩张计划的企业。", "content": "采用分阶段建模方法,将当前运营数据与未来扩产计划分开处理,确保每个阶段的假设清晰且可验证。同时,对比行业内类似项目的实际进展,调整时间表和资本支出预期以提高预测准确性。最后,通过相对估值法(如PE倍数)和DCF模型交叉验证企业价值,降低单一方法带来的偏差风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:23:21", "modified_time": "2025-08-12 02:23:21", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "cb0ddafc7531423895ab549fc0d79c08", "experience_type": "text", "when_to_use": "在制定买入/持有/卖出评级决策时,尤其是在面临多种不确定因素(如市场价格下跌、项目延迟等)的情况下。", "content": "综合运用定量与定性分析框架,从财务指标(如ROE、EBITDA利润率)、市场地位及竞争格局多维度评价企业。同时,设计情景分析(乐观、中性、悲观)覆盖主要风险点,并根据历史数据和行业经验设定合理概率分布,得出加权平均目标价作为投资建议依据。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:23:21", "modified_time": "2025-08-12 02:23:21", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "eea8f9b949cd4f318ad5406965cfa2f1", "experience_type": "text", "when_to_use": "在为客户提供多元化资产配置建议时,尤其是涉及周期性较强的行业板块(如矿业、能源)。", "content": "基于经济周期理论,动态调整不同资产类别权重,例如在经济复苏初期增加对矿业股的配置比例,而在高通胀环境下减少固定收益产品的敞口。此外,利用相关性分析优化组合风险收益特征,选择低相关性但具备高增长潜力的标的分散风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:23:21", "modified_time": "2025-08-12 02:23:21", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "2b7d76a3eb2a4468b4f99fb374d76106", "experience_type": "text", "when_to_use": "在分析工业自动化或高端制造领域的公司时,特别是在评估其产品组合的市场渗透潜力和未来增长空间。", "content": "通过细分产品线(如PLC、伺服系统、变频器等)的市场份额、技术壁垒及下游行业需求趋势,结合政策驱动与新兴应用场景扩展,来预测收入增长和利润率变化。例如,小型PLC在传统行业的稳固地位与中大型PLC在高附加值领域的突破共同构成了企业的双轮驱动增长模式。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:24:22", "modified_time": "2025-08-12 02:24:22", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a4a7149e1bd64ce3b536ee7f9aba8839", "experience_type": "text", "when_to_use": "在评估企业是否能够成功拓展新业务领域(如人形机器人或新能源相关产品)时,特别是在技术积累、供应链协同和产业集群优势显著的情况下。", "content": "利用公司在核心零部件(如无框力矩电机、空心杯电机、编码器等)的技术复用能力,结合区域产业集群支持(如无锡的人形机器人产业政策),并通过与行业龙头(如华为云)合作加速场景落地,可以有效降低研发风险并提升商业化速度。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:24:22", "modified_time": "2025-08-12 02:24:22", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "4b634dfac1dd45c5b117cb5e92f11572", "experience_type": "text", "when_to_use": "在制定投资建议和估值模型时,特别是在涉及多业务板块的多元化工业企业。", "content": "采用分部估值法对不同业务线进行独立建模,并根据各业务的增长潜力、竞争格局和技术壁垒调整毛利率假设;同时参考可比公司平均PE倍数设定目标估值区间,确保估值逻辑清晰且具有跨周期适应性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:24:22", "modified_time": "2025-08-12 02:24:22", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "de79295ee8274ca58dd48de065b90b65", "experience_type": "text", "when_to_use": "在判断宏观经济波动对企业经营的影响时,特别是对于高度依赖制造业景气度的工控企业。", "content": "通过跟踪OEM市场需求、库存周期以及政府设备更新政策等宏观指标,结合公司直销战略深化和新兴行业客户拓展情况,评估企业抵御周期性风险的能力及其长期成长韧性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:24:22", "modified_time": "2025-08-12 02:24:22", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0b0dde9b33264edaa2d4138b5bf6ba13", "experience_type": "text", "when_to_use": "在评估一家高科技公司,特别是涉及芯片、处理器或计算硬件领域的企业时,需结合其财务表现与行业生态扩张能力进行综合分析。", "content": "通过分析企业的营收增长率、研发投入占比以及市场版图扩展情况(如客户导入速度、合作生态深化程度),可以有效评估其竞争力和成长潜力。例如,海光信息的CPU和DCU业务进展顺利,且研发费用占收入比重下降,表明公司在保持创新能力的同时实现了规模效应,这是投资价值的重要信号。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:25:28", "modified_time": "2025-08-12 02:25:28", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "631ba04609744ddfad4ad00316e1544a", "experience_type": "text", "when_to_use": "当考虑企业并购或战略重组对投资标的的影响时,需要评估整合后产业链协同效应及其对市场竞争格局的潜在改变。", "content": "在分析海光信息拟换股吸收合并中科曙光的案例中,明确指出了从上游芯片到下游算力服务的一体化能力形成的重要性。这类整合不仅强化了双方优势,还加速了国产替代进程,为投资者提供了长期增长逻辑支撑。类似场景下,应重点关注并购后资源整合的实际可行性及政策支持。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:25:28", "modified_time": "2025-08-12 02:25:28", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "f44a8766951a4a4c901304bbc905703c", "experience_type": "text", "when_to_use": "在制定基于盈利预测的投资建议时,需结合历史数据、未来增长预期以及估值水平进行多维度验证。", "content": "通过对海光信息2025-2027年的盈利预测,发现其每股收益增长稳健,同时PE倍数虽高但处于合理区间(113倍降至58.85倍)。这种分析方法强调动态估值视角,即短期内可能因高增长而显得昂贵,但长期看具备吸引力。适用于高成长性科技股的投资决策。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:25:28", "modified_time": "2025-08-12 02:25:28", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "eafe273d25674960a07feba488d301ad", "experience_type": "text", "when_to_use": "在牛市或高波动环境中,面对具有显著技术壁垒和政策导向的行业龙头,可采用‘买入并持有’策略以捕捉超额收益。", "content": "海光信息作为国产高端芯片领域的领先企业,在市场需求攀升和技术自主可控趋势下表现出强劲的基本面。尽管存在重大资产重组推进不及预期等风险,但整体向上动能充足。此经验表明,在利好因素主导的市场环境下,选择优质标的并容忍一定不确定性是获取超额回报的关键。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:25:28", "modified_time": "2025-08-12 02:25:28", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "296885c63a8047e982af2182904b9127", "experience_type": "text", "when_to_use": "在评估一家快速成长的消费科技公司(如电动两轮车、智能家居设备等)时,特别是在其产品矩阵多样化且市场渗透率逐步提升的情境下。", "content": "通过分析核心产品的销量、均价和市场份额变化,结合政策推动(如以旧换新补贴)和技术创新(如智能化操作系统)的影响,可以有效预测公司的增长潜力。同时,关注毛利率和费用率的变化趋势,有助于评估盈利能力的可持续性。建议在高增长行业中优先考虑那些具备规模效应和技术壁垒的龙头企业。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:26:25", "modified_time": "2025-08-12 02:26:25", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a2a9c05f37914d7894c96553cd385011", "experience_type": "text", "when_to_use": "当需要对一家公司在不同经济周期中的表现进行长期战略规划时,尤其是在新兴市场中涉及多个资产类别或业务线的情况下。", "content": "利用历史财务数据和前瞻性预测模型(如营收增长率、净利润率、ROE等),结合宏观经济因素(如汇率波动、关税政策、监管环境)进行敏感性分析,可以帮助确定企业的抗风险能力和长期投资价值。此外,应特别关注现金流管理(如经营活动现金流与资本支出的匹配)以及资产负债结构的稳健性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:26:25", "modified_time": "2025-08-12 02:26:25", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "961900987db04a0594d1e07e61372a99", "experience_type": "text", "when_to_use": "在为一只股票提供买入/增持评级时,特别是在牛市或结构性行业机会(如新能源、智能交通)明显的市场环境中。", "content": "基于市盈率(P/E)、市净率(P/B)等估值指标,结合未来3-5年的盈利预测(EPS复合增长率)和行业基准指数的相对表现,构建清晰的投资逻辑。同时,强调公司独特的竞争优势(如高端化品牌形象、技术领先性)及其在行业中的龙头地位,能够增强推荐的说服力。确保报告内容覆盖全面,包括但不限于财务健康度、运营效率和潜在风险提示。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:26:25", "modified_time": "2025-08-12 02:26:25", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "3f3170318d1b47409e5b773ad89a5f07", "experience_type": "text", "when_to_use": "在评估一家大型汽车制造商(或类似多元化企业)的财务表现和市场前景时,尤其是在涉及国企改革、新能源转型以及国际化扩张的背景下。", "content": "分析企业的财务健康状况和增长潜力时,应重点关注其核心业务板块的表现(如自主品牌、新能源车、出口等),并通过同比和环比数据验证其增长趋势。同时,结合行业动态(如政策支持、技术合作)和管理变革(如管理层更替、资源整合)来判断未来盈利能力的提升空间。例如,在上汽集团案例中,自主品牌的销量增长、与华为的合作以及国企改革的推进为未来的估值提供了有力支撑。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:27:30", "modified_time": "2025-08-12 02:27:30", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ef622e7fa6d74f789ada8d53ed955139", "experience_type": "text", "when_to_use": "在进行投资建议时,特别是在需要结合定量财务预测和定性战略分析的情况下,例如对处于转型期的传统制造企业进行评级。", "content": "在构建投资建议时,需综合使用财务指标(如PE、PB、ROE)和盈利预测模型(如收入增长率、净利润率),并结合外部环境因素(如政策导向、市场竞争、技术创新)。此外,风险提示部分应明确列出可能影响企业业绩的关键变量(如合资品牌下行风险、出口关税影响)。例如,上汽集团的“推荐”评级基于其低估值(PE 16倍)、高增长预期(2025-2027年收入CAGR约7%)及明确的战略转型路径。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:27:30", "modified_time": "2025-08-12 02:27:30", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "63b62518b693451fb6e819ba865a6c6c", "experience_type": "text", "when_to_use": "在分析企业如何应对复杂市场环境(如欧盟反补贴政策、全球供应链挑战)时,尤其是涉及跨国经营的企业。", "content": "对于面临国际监管压力的企业,应评估其市场适应能力和抗风险策略。例如,上汽集团通过优化产品结构(如增加新能源车占比)和加强区域市场布局(如欧洲市场的终端交付量增长)成功缓解了欧盟反补贴政策的不利影响。这种经验表明,企业在国际化过程中需注重本地化运营和灵活调整战略以应对政策变化。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:27:30", "modified_time": "2025-08-12 02:27:30", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "4bb5695a39ee4f0bb71cc437cd974657", "experience_type": "text", "when_to_use": "在评估企业与科技公司战略合作的潜在价值时,特别是涉及智能驾驶、新能源技术等领域。", "content": "当企业与技术领先公司(如华为)达成深度合作时,应关注合作模式(如“智选车模式”)及其对产品竞争力的提升作用。分析重点包括核心技术赋能(如ADS 4.0系统)、市场渠道协同效应以及生态系统的扩展能力。例如,上汽与华为的合作不仅有助于加速智能驾驶技术的普及,还可能通过华为的品牌和技术优势提振销量。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:27:30", "modified_time": "2025-08-12 02:27:30", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "25ca6a51b05b441bb4f60d5e8cd85a10", "experience_type": "text", "when_to_use": "在评估一家公司是否具有持续增长潜力,尤其是在政策驱动型行业(如消费、旅游或育儿相关产业)的情况下。", "content": "通过分析公司的财务表现与宏观经济政策的协同效应,例如育儿补贴、离境退税等政策对公司业务的具体影响。重点关注收入增长率、渠道优化策略以及产品生态体系的适应性。此外,结合估值指标(如P/E、ROE)和盈利预测,判断其长期投资价值。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:28:24", "modified_time": "2025-08-12 02:28:24", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ac8d53eb531e49f391f81a81d6dfe8e3", "experience_type": "text", "when_to_use": "在进行跨渠道销售策略的效果评估时,特别是在线上线下全渠道布局的企业中。", "content": "将线上渠道(如抖音、微信生态)的增长数据与线下渠道的表现进行对比分析,识别各渠道的贡献率及协同效应。同时,关注精细化运营策略(如品牌自播与达人代播)对投入产出效率的影响,并结合流量转化模型评估私域流量的价值挖掘能力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:28:24", "modified_time": "2025-08-12 02:28:24", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "80189c1531a7436588de27c1514bd3dd", "experience_type": "text", "when_to_use": "在分析企业库存管理与现金流健康状况时,尤其是存货周转较慢或季节性波动较大的行业(如纺织品、奢侈品等)。", "content": "通过资产负债表中的存货变化趋势,结合现金流量表中的经营活动现金流净额,评估企业的库存管理效率及其对流动性的影响。特别注意存货减少是否伴随着营收增长,以及短期借款和应付账款的变化是否反映资金压力缓解或增加。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:28:24", "modified_time": "2025-08-12 02:28:24", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "296a295a43be4758807bfb5b35a76e4a", "experience_type": "text", "when_to_use": "在制定基于市场周期的投资决策时,尤其是在经济复苏期或政策刺激阶段。", "content": "结合宏观经济环境(如文旅消费复苏、育儿补贴政策落地)与公司历史业绩波动,预测未来1-3年的收入和利润增长空间。利用敏感性分析调整关键假设(如毛利率、费用率),并通过相对估值法(如P/E、EV/EBITDA)验证当前股价是否被低估或高估。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:28:24", "modified_time": "2025-08-12 02:28:24", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c7f88d0bfcb6419aadabcf03ac52bf84", "experience_type": "text", "when_to_use": "在评估具有品牌优势的消费品公司时,尤其是在分析其市场份额、品牌渗透率和产品创新潜力的情况下。", "content": "通过多层级品牌矩阵与功能细分的产品策略(如抗敏、美白、正畸等),可以有效覆盖多样化消费需求并提升品牌渗透率。此外,研发投入及协同创新模式(如产学研融合)能够巩固技术领先地位,推动产品迭代升级,从而增强市场竞争力。建议结合具体财务指标(如毛利率、研发费用率)评估品牌的可持续增长能力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:29:35", "modified_time": "2025-08-12 02:29:35", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8590e1af3e6543f7829bbb907a600a52", "experience_type": "text", "when_to_use": "在分析公司渠道战略有效性及其对营收贡献时,特别是在传统分销与新兴电商渠道并存的情况下。", "content": "构建‘全渠全域’营销体系(包括经销、直供和电商模式)可通过数字化管理实现线上线下协同发展,优化消费者购物习惯迁移路径(从‘到店’到‘到店+到家’)。重点关注电商渠道的快速增长(如CAGR达23.3%),以及其对整体盈利能力的拉动作用,同时需警惕新渠道拓展中的潜在风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:29:35", "modified_time": "2025-08-12 02:29:35", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c9de7f0411914ba8840073b59145b5aa", "experience_type": "text", "when_to_use": "在进行相对估值分析时,尤其是针对成熟市场中的消费类个股,并需要考虑行业可比公司估值水平的情况。", "content": "通过选取同行业可比公司(如同为个护领域的百亚股份、润本股份、拉芳家化),基于未来盈利预测计算PE倍数,结合目标公司的品牌壁垒、产品结构优化和渠道渗透趋势,合理调整估值溢价或折价。同时,需关注宏观经济周期、市场竞争加剧等因素对估值的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:29:35", "modified_time": "2025-08-12 02:29:35", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "b246eaec06e8473e82d0f95b229786a4", "experience_type": "text", "when_to_use": "在预测企业中长期收入增长和盈利能力时,特别是在多元化产品线布局的情况下。", "content": "采用分产品线拆分法预测各业务板块的收入增速(如成人基础护理、儿童护理、电动护理等),结合毛利率变化趋势(如高毛利新品占比提升)评估综合盈利能力。此外,应根据行业驱动因素(如健康消费升级、口腔护理意识增强)调整关键假设,确保预测的合理性与稳健性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:29:35", "modified_time": "2025-08-12 02:29:35", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e348948a2df84d918e9b3dc7a5f4fb84", "experience_type": "text", "when_to_use": "在评估国际贸易政策(如关税调整)对特定行业或公司的影响时,尤其是在金属加工、原材料供应链相关领域。", "content": "通过分析关税政策的具体条款(如哪些产品被征税、税率水平),结合公司在目标市场的产能布局和供应链能力,可以预测政策对公司盈利能力的潜在影响。例如,当关税政策排除原材料而针对半成品时,本土加工企业可能因供给约束和价格溢价而受益。此外,需关注公司在目标市场的现有产能利用率和未来扩产计划,这将直接影响利润增厚幅度。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:31:00", "modified_time": "2025-08-12 02:31:00", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "85b80146feee451bbf278833bce791d7", "experience_type": "text", "when_to_use": "在进行跨国投资分析时,尤其是涉及发达市场与新兴市场之间的原材料和制成品贸易流动。", "content": "利用供需动态和区域市场结构差异,可以识别套利机会和潜在风险。例如,北美市场因关税政策可能导致精炼铜库存增加,从而引发短期价格波动。这种情况下,需结合宏观经济指标(如库存变化、区域需求趋势)以及政策落地的时间节点,评估市场情绪和预期偏差对资产价格的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:31:00", "modified_time": "2025-08-12 02:31:00", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a988eec85c5d46ffb12c23f6540f19e2", "experience_type": "text", "when_to_use": "在调整股票评级或投资建议时,特别是在周期性行业中,基于政策变化、产能扩张和财务预测的综合分析。", "content": "通过量化政策利好对公司财务指标(如净利润、ROE)的直接贡献,并结合可比公司的估值水平,可以更精准地调整目标公司的投资评级。例如,在本案例中,分析师上调了海亮股份的评级至“买入”,并基于北美业务的增长潜力合理上调了盈利预测。同时,需注意与可比公司进行横向对比,确保估值逻辑的一致性和合理性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:31:00", "modified_time": "2025-08-12 02:31:00", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c24d752ecf864f50b58252098fbee04d", "experience_type": "text", "when_to_use": "在制定长期战略规划时,特别是涉及跨区域产能布局和供应链优化的企业金融决策。", "content": "通过评估政策变化对企业本土化生产能力和供应链服务能力的影响,可以帮助企业识别战略机遇。例如,公司在北美拥有铜加工产能,随着关税政策的实施,其本土化优势将进一步凸显。在这种情况下,企业应优先考虑提升产能规模和技术能力,以最大化政策红利,同时防范原材料价格波动和地缘政治风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:31:00", "modified_time": "2025-08-12 02:31:00", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "4d151f9d996b419d93f1214c2ed34bfc", "experience_type": "text", "when_to_use": "在评估一家公司是否具有投资价值时,特别是在其核心业务表现出结构性增长潜力的情况下,例如新能源汽车相关领域。", "content": "通过拆解公司的主营业务收入和毛利率变化,识别高增长细分市场(如新能源汽车空调压缩机)对整体业绩的贡献。重点关注这些细分市场的销量增速、市场份额及毛利率趋势,并结合行业数据验证公司竞争力。此外,应考虑高增长业务的盈利能力波动风险,评估其对公司整体估值的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:31:54", "modified_time": "2025-08-12 02:31:54", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "73fb9b4a93184b1a8e01f237da453aa6", "experience_type": "text", "when_to_use": "在制定中期财务预测时,尤其是在行业需求稳定但存在原材料价格波动或竞争加剧等外部不确定性的背景下。", "content": "基于历史财务数据与行业趋势,构建分业务线的收入和利润预测模型。对于每项业务,分析其过去三年的同比增速、毛利率变化以及费用率优化空间。同时,引入敏感性分析以应对潜在的原材料价格波动或汇率风险,确保预测结果具备一定的抗风险能力。最后,通过对比行业平均估值水平,判断目标公司的估值吸引力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:31:54", "modified_time": "2025-08-12 02:31:54", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "fff53c96577b41a5ba062917b0ff0fe7", "experience_type": "text", "when_to_use": "在进行股票评级和投资建议时,特别是在公司当前估值较低且未来业绩确定性较强的情况下。", "content": "综合运用PE、PB、EV/EBITDA等多种估值指标,结合公司未来三年的盈利增长预期,计算合理的估值区间。若公司当前估值显著低于行业平均水平,且基本面改善逻辑清晰(如成本控制效果显著、新兴业务快速增长),则可给予“买入”评级。同时,需明确提示可能影响投资回报的风险因素,例如行业需求波动或原材料价格上涨。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:31:54", "modified_time": "2025-08-12 02:31:54", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "84c1b7c6f8a94f1cafba0b9a678d157e", "experience_type": "text", "when_to_use": "在分析企业现金流健康状况时,特别是当公司经营活动现金流与净利润出现较大背离的情况下。", "content": "深入分析现金流量表中的主要科目变动原因,例如营运资金变动、折旧摊销、财务费用等项目对现金流的影响。如果经营活动现金流长期低于净利润,需进一步检查应收账款周转率、存货管理效率等运营指标,评估是否存在流动性压力。此外,关注筹资活动现金流的变化,判断公司是否依赖外部融资维持运营,从而全面评价企业的财务稳健性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:31:54", "modified_time": "2025-08-12 02:31:54", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6948f37cfc954107a2d07b5b9884c57b", "experience_type": "text", "when_to_use": "在评估一家公司是否具备长期投资价值时,特别是在其传统业务稳健且新业务具有高成长潜力的情况下。", "content": "通过分析公司的主营业务收入、毛利率和费用结构,结合新兴业务的市场空间和技术壁垒,判断公司在未来3-5年的盈利增长潜力。对于上海洗霸,尽管其水处理业务保持稳定,但硅碳负极和固态电池材料领域的突破性进展表明其第二增长曲线正在形成,这为估值提供了重要支撑。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:32:52", "modified_time": "2025-08-12 02:32:52", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "de9a0e147bb740579f4bcbce8c53fa97", "experience_type": "text", "when_to_use": "在面对新技术驱动型资产收购或战略合作决策时,特别是涉及知识产权和关键团队整合的情况。", "content": "关注交易的核心资产(如专利、专有技术和设备)以及核心团队的能力和绑定程度,综合考虑技术成熟度、扩产能力及市场竞争环境,以确保投资能够快速转化为实际收益。上海洗霸成功竞拍有研新材硫化锂资产并绑定核心团队的案例展示了如何通过精准的战略布局迅速跃升为行业龙头。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:32:52", "modified_time": "2025-08-12 02:32:52", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9f7b53562c134f13b13c9389d1dc4ce3", "experience_type": "text", "when_to_use": "在评估一家跨国制造企业的增长潜力时,尤其是在其进入新市场或获得大规模订单的情况下", "content": "通过分析公司全球化布局的深度和广度(如生产基地、供应链网络和仓储物流体系),结合其新增订单的规模、执行时间和对收入的贡献预期,可以有效评估其未来的收入增长潜力。同时,关注自有品牌发展对毛利率的提升作用,以及公司在应对贸易摩擦、汇率波动和原材料价格风险方面的策略,有助于全面了解企业抗风险能力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:33:45", "modified_time": "2025-08-12 02:33:45", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "954023188bd643acb69ef15863139203", "experience_type": "text", "when_to_use": "在进行投资评级和目标价预测时,特别是在涉及多阶段财务建模和估值比率分析的场景中", "content": "基于历史财务数据(如营收增长率、净利润率、ROE等)和未来预期(如订单执行节奏、产能释放计划),构建详细的分阶段财务预测模型,并结合P/E、P/B、EV/EBITDA等估值指标进行横向和纵向比较。对于快速增长型企业,重点关注其短期盈利能力改善和长期市场份额扩张的潜力,以得出合理的投资评级和目标价。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:33:45", "modified_time": "2025-08-12 02:33:45", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a42ec1ad43ae4d748ba7a23ff4683bfa", "experience_type": "text", "when_to_use": "在评估企业国际化战略的有效性及其对竞争力的影响时,尤其是在新兴市场与发达市场之间进行资源分配的情境下", "content": "通过分析企业在不同市场的产能布局、供应链管理效率及本地化运营能力,判断其全球一体化分布式制造体系的优势。例如,东南亚、墨西哥等地新增产能的落地情况,以及这些地区成本结构优化对企业综合利润率的影响。此外,还需考虑地缘政治风险和监管环境对国际化战略实施的潜在挑战。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:33:45", "modified_time": "2025-08-12 02:33:45", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0ad9d25bba9e4807b1d080875a3b81ef", "experience_type": "text", "when_to_use": "在研究行业需求变化和终端客户行为对企业发展的影响时,特别是在工具制造或其他周期性行业中", "content": "从β端(行业整体趋势)和α端(公司独特竞争优势)两个维度出发,分析市场需求回暖、去库存结束等宏观因素如何推动企业订单恢复;同时,结合公司在新品类扩张、自有品牌建设及渠道拓展方面的进展,评估其超越行业平均水平的增长潜力。这一方法特别适用于维修维护类工具市场等具有稳定需求特征的行业。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:33:45", "modified_time": "2025-08-12 02:33:45", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0b55d3658ab24e4199c88ad6cd774e5d", "experience_type": "text", "when_to_use": "在评估一家专注于特定细分市场(如光伏支架零部件)的制造企业时,尤其是当其业务与政策驱动型行业(如可再生能源)密切相关时。", "content": "对于政策依赖性较强的行业,需综合分析国内外相关政策对市场需求的影响。例如,本报告中通过解读《净零工业法案》、《REPowerEU》等政策,明确指出这些政策如何推动光伏支架需求增长,并建议投资者关注政策延续性和变化风险。同时,结合公司产品技术优势(如高厚度锌铝镁钢管)和研发能力评估其长期竞争力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:34:40", "modified_time": "2025-08-12 02:34:40", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "dd4281d1eba0472fb26dde4f11289c65", "experience_type": "text", "when_to_use": "在进行中小企业或新兴市场的估值对比时,特别是面对营收规模较小但利润率较高的公司。", "content": "采用市盈率(PE)作为核心估值指标,并结合毛利率和净利率进行横向比较。例如,本报告中将酉立智能与意华股份、中信博等可比公司进行对比,发现尽管其营收规模较小,但净利率显著高于同行(12.33% vs 平均4.73%)。因此,在类似场景下,应优先关注净利润端的差异,而非单纯依赖收入规模来判断投资价值。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:34:40", "modified_time": "2025-08-12 02:34:40", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "adaeb67c2ef548f79c6329dde40f4b40", "experience_type": "text", "when_to_use": "在分析客户集中度较高且出口导向型企业时,尤其是在国际贸易环境存在不确定性的情况下。", "content": "识别并量化客户集中度风险及海外市场依赖度。例如,本报告指出酉立智能前五大客户销售额占比超过94%,其中最大客户NEXTracker占比高达61.67%-74.75%。此外,报告还提示了欧盟碳边界调整机制(CBAM)可能带来的额外成本压力。因此,在此类场景下,需特别关注供应链稳定性、主要客户的合作关系以及地缘政治因素对业绩的潜在影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:34:40", "modified_time": "2025-08-12 02:34:40", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "17b7e9f2e70f477cbc61fa6a7069986c", "experience_type": "text", "when_to_use": "在研究以技术研发为核心驱动力的企业时,尤其是涉及新产品开发和工艺改进的制造业公司。", "content": "重点分析研发投入的增长趋势及其对公司未来竞争力的影响。例如,本报告强调酉立智能2024年研发投入同比增长108%,并与Nextracker深化合作推进多个研发项目。这种模式表明,持续加大研发投入不仅有助于保持技术领先,还能增强与关键客户的粘性。因此,在类似场景下,需要重点关注研发投入占收入比重、专利获取情况以及研发成果的实际转化能力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:34:40", "modified_time": "2025-08-12 02:34:40", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "46f113fbab0242f8a0d6c9cc701e84aa", "experience_type": "text", "when_to_use": "在评估一家CDMO(合同开发与制造组织)企业的增长潜力时,特别是在涉及药物研发外包服务的市场环境中。", "content": "分析企业收入结构和业务细分表现是关键。例如,在九洲药业的案例中,通过拆解其CDMO业务和特色原料药业务的增长率及毛利率,可以清晰地识别出核心驱动力。建议重点关注CDMO漏斗型项目管线的扩展情况,包括临床前、临床各阶段以及商业化项目的数量变化,这直接反映了未来收入的可持续性。此外,新兴技术平台(如多肽、偶联药物等)的建设进展及其海外订单增长也是重要的前瞻性指标。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:35:44", "modified_time": "2025-08-12 02:35:44", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "7d45582c27ee4ec88d7ea54a4005c55c", "experience_type": "text", "when_to_use": "在对医药行业企业进行估值分析时,尤其是在预测未来几年财务表现和市场竞争力的情境下。", "content": "采用基于历史数据和行业趋势的盈利预测模型,并结合PE、PB、EV/EBITDA等多重估值指标进行交叉验证。例如,九洲药业的分析中,通过2025-2027年的营业收入、净利润增长率预测,结合当前股价的估值水平(PE为19倍),得出“推荐”评级。在此过程中,需特别注意研发投入、产能扩张计划以及新客户获取能力对企业长期盈利能力的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:35:44", "modified_time": "2025-08-12 02:35:44", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "2d5cc046afc74afe9fbcd6d529853815", "experience_type": "text", "when_to_use": "在制定投资建议时,尤其是在需要平衡短期波动与长期成长韧性的市场环境中。", "content": "关注企业在不同经济周期中的表现,尤其是其现金流改善和资本开支效率。例如,九洲药业在2025年上半年经营活动现金流量净额同比增长164.5%,表明其运营健康度显著提升。同时,资本开支主要用于先进产能建设和技术平台搭建,展现了战略层面的长期布局。因此,在面对季度间业绩波动时,应更注重企业的长期发展逻辑而非短期扰动。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:35:44", "modified_time": "2025-08-12 02:35:44", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "5e76c0e308a84300b4e30e761c7ea735", "experience_type": "text", "when_to_use": "在风险评估环节,尤其是在涉及医药研发外包行业的政策、技术和市场风险时。", "content": "系统性梳理潜在风险因素,包括研发失败风险、行业政策变动、安全生产问题以及汇率波动等。例如,九洲药业的风险提示涵盖了这些方面,体现了一个全面的风险管理框架。在实际操作中,可以通过分散投资组合、选择具有多元化客户基础和技术储备的企业来降低单一风险敞口。此外,定期跟踪监管政策变化和技术创新方向也是必要的。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:35:44", "modified_time": "2025-08-12 02:35:44", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "16d255f1ce384029ae3751c98a27dbfb", "experience_type": "text", "when_to_use": "在评估一家公司通过员工持股计划(ESOP)提升内部激励机制和长期价值创造潜力时,特别是在管理层与核心骨干深度绑定的场景中。", "content": "员工持股计划的成功实施可以显著改善公司治理水平并增强员工凝聚力。对于锦泓集团案例,通过不超过13名核心人员参与的小规模计划,资金规模上限为241万元,占总股本仅0.07%,显示了谨慎而聚焦的设计。此类计划的分析需重点关注其对股东利益共享、员工积极性以及长期战略执行的影响,同时结合市场波动性和行业竞争环境评估其潜在风险与收益。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:36:52", "modified_time": "2025-08-12 02:36:52", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d189bcd0fe8147b2bc1c74aaccd5ad66", "experience_type": "text", "when_to_use": "在研究企业如何利用IP资产开发实现差异化竞争优势,并将其转化为可持续商业价值的场景中,尤其是在消费品或文化创意行业中。", "content": "锦泓集团通过小熊家族IP矩阵和云锦非遗技艺的现代化应用,展示了文化符号向高溢价商品转化的能力。这种模式强调以大数据驱动精准定位目标消费群体,同时借助授权合作网络最大化IP资产价值。关键在于识别契合生活方式的品类,并通过数字化技术(如数码提花)突破传统工艺限制,形成难以复制的竞争壁垒。未来类似项目应注重市场需求匹配度及供应链整合能力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:36:52", "modified_time": "2025-08-12 02:36:52", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6965d4861db64ad48041bb1908a9d636", "experience_type": "text", "when_to_use": "在进行盈利预测和估值建模时,特别是面对具有稳定增长预期但存在周期性波动的纺织服饰类企业。", "content": "基于天风证券对锦泓集团2025-2027年的财务预测,维持“增持”评级表明分析师对其长期增长逻辑的认可。该方法论包括多维度指标验证(如市盈率从9.54降至6.82,ROE逐步提升至11.6%),以及综合考虑行业趋势、成本结构优化和现金流管理。建议在其他同类分析中,采用分阶段增长率假设,结合营运资金变动和资本支出规划,确保模型稳健性。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:36:52", "modified_time": "2025-08-12 02:36:52", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c29aecb518284ca9818f6f28a3bc0158", "experience_type": "text", "when_to_use": "在评估一家公司通过并购或投资进入新兴技术领域(如量子计算)的战略潜力时,特别是在高增长但高不确定性的市场环境中。", "content": "在分析公司战略转型的可行性时,应重点关注目标领域的技术壁垒、市场需求和竞争格局。例如,禾信仪器通过收购量羲技术布局量子计算领域,展现了其对上游设备市场的精准切入。分析需结合标的公司的收入增长趋势(如1H25收入接近2024全年水平)、研发投入占比(1H25为7.85%)以及毛利率提升(62.1%),以验证其商业化能力和技术领先性。此外,外部巨头(如微软、英伟达)的行业动态可作为佐证,表明该领域处于拐点期,具备长期增长潜力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:37:57", "modified_time": "2025-08-12 02:37:57", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "88f48f5fe6604c8dbe87d5781a516617", "experience_type": "text", "when_to_use": "在预测一家亏损企业未来业绩改善的可能性时,尤其是在传统主业面临挑战但新业务展现出强劲增长动能的情况下。", "content": "对于亏损企业,应关注其核心财务指标的变化趋势,特别是亏损幅度的收窄(如归母净利润亏损从1H24的2,253万元缩窄至1H25的1,765万元)。同时,结合新业务的盈利能力(如量羲技术1H25实现净利润2,815万元)和传统主业的成本优化措施(如销售费用和管理费用的同比下降),可以更准确地评估其扭亏为盈的路径。此外,需考虑行业政策支持和技术突破的可能性,这些因素可能加速企业的盈利改善。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:37:57", "modified_time": "2025-08-12 02:37:57", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "1280605cc51643628a5db5c945ea0e55", "experience_type": "text", "when_to_use": "在为投资者提供中长期投资建议时,特别是在涉及跨周期布局的企业估值分析中,需综合考虑PS、PB及EV/EBITDA等估值指标。", "content": "在估值分析中,对于尚未盈利但具备成长潜力的企业,应优先采用PS和EV/EBITDA等非净利润相关指标进行评估。例如,禾信仪器的PS估值从2025年的37x逐步降至2027年的32x,反映了市场对其未来收入增长的预期。同时,结合EV/EBITDA的变化(从2025年的236.44x降至2027年的159.50x),可以更好地捕捉企业从亏损到盈利的过渡阶段价值。此外,分析师需明确指出估值假设的风险因素(如技术研发不及预期或市场竞争加剧),以帮助投资者权衡潜在收益与风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:37:57", "modified_time": "2025-08-12 02:37:57", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9c980e22d85341f9985ef960b619905d", "experience_type": "text", "when_to_use": "在评估摩托车行业或类似消费品行业的国内外市场潜力时,尤其是涉及中高端产品品类的渗透率和增长空间分析。", "content": "通过对比国内外市场数据(如排量段、人均保有量、渗透率等),结合成熟市场的历史发展路径,推导目标市场的潜在增长空间。例如,报告中通过对欧美日与中国市场的对比,明确中国中大排摩托车存在4-5倍的增长潜力,并量化了海外市场的容量,为投资决策提供清晰依据。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:38:52", "modified_time": "2025-08-12 02:38:52", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "e53aa0a81dc242cdb0fb6f0d4c596bc7", "experience_type": "text", "when_to_use": "在分析自主品牌企业在国际市场的竞争力和出口战略时,特别是新兴市场与发达市场的差异化策略制定。", "content": "利用市场份额、品牌定位、产品矩阵、渠道布局等多维度数据,评估自主品牌在不同区域的竞争优势。例如,无极品牌在欧洲市场的成功案例表明,通过精准的产品定位(高性价比+差异化)、深耕核心市场(西班牙、意大利)并逐步扩展至其他区域(拉美、东南亚),可以实现全球化协同发展。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:38:52", "modified_time": "2025-08-12 02:38:52", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "fb752bc94560451098fe0ca76a9d2e5b", "experience_type": "text", "when_to_use": "在进行企业盈利预测和估值分析时,尤其是在面对具有多重业务线的多元化公司。", "content": "将企业的核心业务拆分为独立模块(如摩托车发动机、通用机械等),分别预测其收入增长率和毛利率变化趋势,同时考虑非财务因素(如政策风险、市场竞争加剧)。结合可比公司估值方法(PE、PB等)与自身业务特点,得出合理的目标估值区间。例如,本报告通过对隆鑫通用分业务的详细拆解,得出了未来三年的盈利预测及‘推荐’评级。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:38:52", "modified_time": "2025-08-12 02:38:52", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8980c9674f1e46828bdd91a075c92786", "experience_type": "text", "when_to_use": "在研究消费级产品的市场驱动因素时,特别是受文化、政策和经济周期影响较大的行业。", "content": "综合分析供需两端的变化,包括消费者偏好转变(如从代步工具到休闲娱乐属性)、政策环境(如禁摩令放松)、经济条件(如货币贬值导致的消费降级)以及新媒体营销的传播效应。这些因素共同作用决定了行业的发展方向,如报告中指出的摩旅文化的兴起推动了中大排摩托车的需求增长。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:38:52", "modified_time": "2025-08-12 02:38:52", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "15cdee7d8367438299d6df2e0f7ae606", "experience_type": "text", "when_to_use": "在评估企业资源整合后的协同效应时,特别是在并购重组或股权结构调整后的新战略规划阶段。", "content": "关注企业内部资源优化带来的效率提升,以及外部整合后形成的新竞争优势。例如,宗申新智造入主隆鑫通用后,双方在研发、生产制造、渠道等方面的协同效应显著增强了整体竞争力,同时分红策略更加积极,提升了股东回报率,这成为长期价值投资的重要考量点。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:38:52", "modified_time": "2025-08-12 02:38:52", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "65be6cf4219f488489c858235aad8eff", "experience_type": "text", "when_to_use": "在评估一家公司是否值得投资,尤其是在其布局新兴技术领域(如自动驾驶、机器人)时。", "content": "结合公司的主营业务表现与新业务布局潜力进行综合分析。首先,通过历史财务数据验证公司在核心业务上的稳定性和增长性;其次,评估新业务的市场前景、技术壁垒和竞争格局;最后,利用PE、PB等估值指标横向对比行业可比公司,判断是否存在低估机会。同时,特别关注公司在研发、并购中的战略布局是否符合行业趋势,并对潜在风险进行分层管理。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:39:56", "modified_time": "2025-08-12 02:39:56", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "79f1d4af36a446228dfdc1e0f4965fb1", "experience_type": "text", "when_to_use": "在制定长期投资策略时,需要考虑宏观经济周期、政策导向及技术创新对行业的影响。", "content": "基于国家政策支持方向(如交通强国战略、无人物流发展)识别高增长潜力的细分行业。通过量化市场规模预测(例如轨道交通装备市场年均复合增长率10.4%)、技术成熟度曲线(如传感器成本下降74%)以及区域渗透率变化(如无人物流车2030年渗透率18.3%),选择处于上升周期且具备先发优势的企业。此外,动态监控政策落地进展和资本流向,调整配置权重。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:39:56", "modified_time": "2025-08-12 02:39:56", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6d17aed89d40452198b7a2b7d1e2e5ed", "experience_type": "text", "when_to_use": "在进行并购或股权投资决策时,尤其是涉及跨领域扩张的标的公司。", "content": "采用多维度尽职调查方法,包括但不限于标的公司的核心技术能力、创始团队背景、产品商业化路径验证情况。以铁大科技投资狗熊机器人为例,重点关注标的的技术全栈自主研发能力、实际应用场景覆盖度(如景区、园区),并结合其当前财务状况(如亏损状态)和未来盈利预期设定合理的估值区间。同时,建立清晰的退出机制和风险控制预案,确保投资安全边际。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:39:56", "modified_time": "2025-08-12 02:39:56", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "adb7d06184f74d0cba81262ebdcf9112", "experience_type": "text", "when_to_use": "在评估大型企业资产重组或并购交易的潜在影响时,特别是在涉及煤炭、能源等资源密集型行业时。", "content": "在分析此类资产重组事件时,需重点关注标的资产对现有业务的协同效应及一体化运营能力的增强。例如,在中国神华案例中,重组不仅扩大了煤炭资源量和产能,还显著提升了公司在“煤电化运销”产业链中的竞争力。同时,应结合财务指标(如ROE、现金流)和分红政策,评估交易对公司长期价值的影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:41:11", "modified_time": "2025-08-12 02:41:11", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "a2238250088341769cc9cf1a53e692ac", "experience_type": "text", "when_to_use": "在预测公司未来盈利能力及估值水平时,尤其是在周期性行业(如能源、原材料)中进行盈利预测和估值建模时。", "content": "基于历史财务数据和行业趋势,构建分阶段盈利预测模型,并结合关键假设(如价格、成本、税率等)进行敏感性分析。例如,在中国神华案例中,分析师通过详细拆解收入、成本和利润驱动因素,预测了2025-2027年的EPS和PE倍数,同时考虑了重组后资产注入对财务表现的潜在提升。此外,高分红政策作为稳定回报来源,进一步增强了投资吸引力。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:41:11", "modified_time": "2025-08-12 02:41:11", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "6139080441294c9b941664baf0fc4ac1", "experience_type": "text", "when_to_use": "在制定投资建议时,特别是在面对市场波动较大或经济周期变化明显的环境中,需要平衡短期战术与长期战略视角。", "content": "综合运用基本面分析和技术面分析,结合宏观经济环境和行业动态,为不同时间跨度的投资决策提供支持。例如,在中国神华案例中,尽管短期内煤炭价格可能承压,但重组后的资源整合能力和稳定的高分红政策使其成为防御性配置的优选标的。这种分析框架强调对风险收益比的全面权衡,并根据市场条件调整推荐评级(如“推荐”或“谨慎推荐”)。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:41:11", "modified_time": "2025-08-12 02:41:11", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d17b6eb96d3c4146a85c80a47de35f46", "experience_type": "text", "when_to_use": "在处理涉及复杂资本运作(如发行股份购买资产+配套融资)的交易时,特别是在新兴市场或监管要求较高的环境中。", "content": "在设计或评估此类交易方案时,需深入理解相关法律法规、会计准则以及税务影响,同时关注资金来源和使用效率。例如,在中国神华案例中,公司利用充沛的账面现金支付部分对价,既降低了融资成本,又维持了股东回报承诺。此外,分析师还需评估交易执行过程中的潜在风险(如审批延迟、市场反应不佳),并提出相应的缓解措施。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:41:11", "modified_time": "2025-08-12 02:41:11", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "0b3e983460884af29500f7a3d9dfaecc", "experience_type": "text", "when_to_use": "在评估一家汽车制造企业的未来增长潜力时,特别是在涉及新能源车和出口市场扩展的战略分析中。", "content": "通过分析比亚迪的销量数据、产品组合变化及海外市场布局,可以得出以下经验:(1)关注细分市场的表现,例如纯电车型与插混车型的市场份额变化;(2)重视高端化战略对整体盈利能力的影响,如腾势、仰望等高端品牌销量的增长;(3)密切跟踪海外工厂投产进度及其对出口销量的拉动作用。这些因素共同决定了企业未来的盈利能力和估值溢价。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:42:11", "modified_time": "2025-08-12 02:42:11", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9756940bc8384c2a89e6450339aec563", "experience_type": "text", "when_to_use": "在进行盈利预测和目标价设定时,特别是针对具有复杂业务结构的大型制造业公司。", "content": "从比亚迪案例中提取的经验是:(1)采用分部估值法或情景分析法处理多业务线公司的财务预测,确保各业务单元的增长假设合理且可验证;(2)结合行业周期性特点(如原材料价格波动)调整毛利率预期;(3)动态更新关键运营指标(如单车带电量、电池外供比例)以反映技术进步和市场需求变化;(4)将PE倍数与历史均值及同行比较,综合考虑市场情绪和基本面支撑点来设定目标价。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:42:11", "modified_time": "2025-08-12 02:42:11", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c15bf1c10f2c430da7c58ae02cc22bb2", "experience_type": "text", "when_to_use": "在制定投资评级和风险提示时,尤其是在面对供应链依赖度高、政策敏感性强的行业。", "content": "比亚迪的研究报告展示了如何有效平衡乐观预期与潜在风险:(1)明确列出核心驱动因素(如出口增长、高端化推进)作为正面催化剂;(2)同时识别并量化可能的风险来源,例如原材料价格超预期上涨、终端需求疲软或竞争加剧;(3)根据宏观经济环境和行业趋势调整评级依据,保持灵活性;(4)强调不同时间跨度下的策略差异,短期战术操作需更注重高频数据跟踪,而长期规划则侧重于结构性优势的挖掘。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:42:11", "modified_time": "2025-08-12 02:42:11", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ff201cb6dd1c4e968eef1cc8b5a1aae1", "experience_type": "text", "when_to_use": "在评估企业国际化扩张战略(如海外生产线投资)时,特别是在新兴市场或发展中地区扩展产能的场景下。", "content": "分析企业在国际市场扩展中的潜在收益与风险时,需综合考虑目标市场的经济环境、行业竞争格局和政策支持。例如,本案例中通过泰国和哈萨克斯坦的二片罐生产线项目,结合当地市场需求、客户结构优化及供应链协同效应,预测出海将提升毛利率并扩大市场份额。建议从市场规模、客户潜力、成本结构三方面入手,量化产能利用率对盈利的影响,并关注汇率波动和原材料价格的风险管理。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:43:11", "modified_time": "2025-08-12 02:43:11", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8b0ada4312434733a3224c7cce305328", "experience_type": "text", "when_to_use": "在分析企业并购后整合效果及未来盈利弹性时,特别是在高度集中化的行业中评估规模扩张对议价能力的影响。", "content": "通过研究金属包装行业的市场格局变化,发现二片罐市场份额集中化趋势显著提升了龙头企业议价能力。此类分析应聚焦于下游需求动态、主要客户布局以及潜在客户挖掘机会,同时结合财务模型预测并购后的协同效应和降本增效空间。例如,本案例中公司成功并购中粮包装后,预计二片罐业务将成为主要利润增长点,因此推荐投资者关注细分业务盈利能力改善的关键驱动因素。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:43:11", "modified_time": "2025-08-12 02:43:11", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "8e05c46e5e744d89b15f911b0bdbdf21", "experience_type": "text", "when_to_use": "在制定长期投资策略时,尤其是针对具有周期性特征行业的估值与回报预测。", "content": "对于金属包装等周期性较强的行业,投资决策需基于详细的财务预测和估值比率分析。例如,本案例中通过对2025-2027年的营收、净利润、毛利率及ROE进行建模,得出P/E倍数逐步下降且EV/EBITDA处于历史低位的结论,从而维持“买入”评级。建议使用多维度估值方法(如P/E、P/B、EV/EBITDA),并结合宏观经济周期和行业供需平衡状态调整预期收益率。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:43:11", "modified_time": "2025-08-12 02:43:11", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9309aab684844fcc8871ca0908cf4033", "experience_type": "text", "when_to_use": "在评估跨国投资项目的风险敞口时,特别是涉及不同地理区域、货币和监管框架的复杂场景。", "content": "跨国投资项目需特别关注地缘政治风险、外汇波动和本地市场动态。例如,本案例中提到的泰国和哈萨克斯坦项目分别面临不同的法律环境、文化差异和运营挑战。建议建立全面的风险管理体系,包括对冲工具的应用、本地合作伙伴的选择以及应急预案设计,以降低不确定性带来的负面影响。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:43:11", "modified_time": "2025-08-12 02:43:11", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "ae4a44eee9064ed9a8f2f00252eee515", "experience_type": "text", "when_to_use": "在评估一家医疗设备公司应对国内集采政策和国际地缘政治风险时,特别是在涉及高毛利产品组合优化与海外产能布局的场景中。", "content": "通过分析公司在不同业务线的表现(如泌尿外科、导尿产品等)以及其高毛利产品的收入增长趋势,可以识别出其盈利能力提升的关键驱动因素。同时,关注公司如何通过海外本土化销售策略和加速海外工厂建设来应对关税及地缘政治风险,可作为评估其中长期增长潜力的重要指标。此外,结合财务数据中的毛利率、净利率和ROE变化,验证公司在成本控制和效率提升方面的成效。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:44:10", "modified_time": "2025-08-12 02:44:10", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "293775f0d61744398ce0160023892865", "experience_type": "text", "when_to_use": "在进行中期投资组合调整或长期战略规划时,特别是针对处于成熟行业但具备稳健增长潜力的企业。", "content": "利用盈利预测模型,结合历史财务数据(如收入增长率、净利润率、现金流等),对未来3-5年的关键财务指标进行预测。重点关注核心业务的增长驱动力(如新产品放量、市场份额提升)以及潜在风险因素(如市场竞争加剧、研发进度延迟)。在此基础上,通过市盈率(P/E)、市净率(P/B)等估值指标评估当前股价是否被低估,并根据经济周期和市场动态选择合适的买入或持有策略。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:44:10", "modified_time": "2025-08-12 02:44:10", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "9c80efbd976746b0bba4125369b73be2", "experience_type": "text", "when_to_use": "在新兴市场与发达市场之间进行资产配置决策时,尤其是在考虑货币波动、监管差异和本地市场需求变化的情况下。", "content": "分析目标公司在不同地理区域的收入分布及其增长趋势,特别关注新兴市场的本地化策略实施效果(如项目合作模式、大客户绑定)。同时,评估公司在应对海外地缘政治风险时采取的具体措施(如加速印尼和墨西哥工厂建设),以判断其供应链弹性和订单交付稳定性。此外,结合宏观经济环境(如汇率波动、贸易政策变化)对各区域业务的影响,优化全球化布局的投资回报。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:44:10", "modified_time": "2025-08-12 02:44:10", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "67dbd0553d044c46a7d12ff7fc16abbd", "experience_type": "text", "when_to_use": "在评估一家跨国消费品公司的增长潜力时,尤其是在涉及多个区域市场和复杂供应链布局的情况下。", "content": "分析跨国企业的区域收入分布与增长驱动因素时,需重点关注其全球供应链的优化策略(如本地化产能布局)以及不同市场的结构性优势。例如,中宠股份通过在北美、墨西哥等地建立工厂,显著提升了海外业务的韧性和竞争力;同时,国内市场的自主品牌成长也得益于品类聚焦与精准投放策略。建议结合地理范围、关税政策及本土化运营能力进行综合评估,并将这些因素纳入长期盈利预测模型。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:45:22", "modified_time": "2025-08-12 02:45:22", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "c1663f616c4c487fb606a54c2c5875cb", "experience_type": "text", "when_to_use": "当需要制定股票投资评级并提供买入/持有/卖出建议时,特别是在高增长行业中的龙头企业。", "content": "针对类似中宠股份这种处于快速增长阶段的企业,应采用多维度财务建模方法,包括历史业绩验证、未来三年盈利预测(P/E、ROE等关键指标变化趋势),以及行业竞争格局的动态监测。此外,在维持‘买入’评级的过程中,需明确设定触发重新评估的风险因素(如汇率波动、费用过度投放)。通过对比公司当前估值水平与未来增长预期,可以更准确地判断其股价上涨空间。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:45:22", "modified_time": "2025-08-12 02:45:22", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "d62a611604244550a6b718e37ec785a0", "experience_type": "text", "when_to_use": "在研究消费品牌如何实现产品组合升级以推动利润率提升时,特别适用于从零食向主粮转型的宠物食品行业案例。", "content": "观察到中宠股份通过主粮品类加速成长(同比+85.8%),带动整体毛利率显著改善(同比+3.0pct)。这表明企业若能成功培育大单品并高效渗透用户群体,则可在细分领域形成强品牌势能。因此,在分析其他类似企业时,可优先关注其新品研发方向、推广力度及目标消费者反馈机制,并辅以毛利率拆解工具,量化各品类对整体利润的贡献度。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:45:22", "modified_time": "2025-08-12 02:45:22", "extra_info": null}} -{"workspace_id": "finance_step_test", "experience_id": "903105a9eda6475d9ba2f32743bc7551", "experience_type": "text", "when_to_use": "在为新兴市场或发展中国家的消费品企业提供战略咨询服务时,尤其是面临激烈行业竞争和潜在监管风险的情况。", "content": "基于中宠股份的经验,建议客户采取多元化风险管理策略:一方面强化全球化产业链布局以规避单一市场依赖和关税冲击;另一方面加大研发投入和自主品牌建设,提高核心竞争力。同时,需定期跟踪行业竞争态势和政策环境变化,及时调整资本开支计划和营销预算分配,确保资源投放效率最大化。对于外部不可控因素(如汇率波动),可通过衍生品对冲手段降低敞口风险。", "score": null, "metadata": {"author": "qwen-max-2025-01-25", "created_time": "2025-08-12 02:45:22", "modified_time": "2025-08-12 02:45:22", "extra_info": null}} diff --git a/docs/library/use_library.md b/docs/library/use_library.md deleted file mode 100644 index f2610173..00000000 --- a/docs/library/use_library.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -jupytext: - formats: md:myst - text_representation: - extension: .md - format_name: myst - format_version: 0.13 - jupytext_version: 1.11.5 -kernelspec: - display_name: Python 3 - language: python - name: python3 ---- - -# Use Library - -ReMe provides pre-built memory libraries that agents can immediately use with verified best practices: - -### Available Libraries - -- **`appworld.jsonl`**: Memory library for Appworld agent interactions, covering complex task planning and execution - patterns -- **`bfcl_v3.jsonl`**: Working memory library for BFCL tool calls - -### Quick Usage - -Load pre-built memories: - -```{code-cell} -response = requests.post("http://localhost:8002/vector_store", json={ - "workspace_id": "appworld", - "action": "load", - "path": "./docs/library/" -}) - -# Query relevant memories -response = requests.post("http://localhost:8002/retrieve_task_memory", json={ - "workspace_id": "appworld", - "query": "How to navigate to settings and update user profile?", - "top_k": 1 -}) -``` diff --git a/docs/make_mp4.md b/docs/make_mp4.md deleted file mode 100644 index c5b5d869..00000000 --- a/docs/make_mp4.md +++ /dev/null @@ -1,19 +0,0 @@ -```shell -ffmpeg -i /Users/yuli/Desktop/remecli_en.mov \ - -vf "scale=-2:1080,setpts=0.333*PTS" \ - -c:v libx264 \ - -crf 28 \ - -preset fast \ - -c:a aac \ - -b:a 96k \ - /Users/yuli/Desktop/remecli_en_1080p_3x.mp4 - -ffmpeg -i /Users/yuli/Desktop/remecli_zh.mov \ - -vf "scale=-2:1080,setpts=0.333*PTS" \ - -c:v libx264 \ - -crf 28 \ - -preset fast \ - -c:a aac \ - -b:a 96k \ - /Users/yuli/Desktop/remecli_zh_1080p_3x.mp4 -``` \ No newline at end of file diff --git a/docs/mcp_quick_start.md b/docs/mcp_quick_start.md deleted file mode 100644 index 16591fd4..00000000 --- a/docs/mcp_quick_start.md +++ /dev/null @@ -1,424 +0,0 @@ ---- -jupytext: - formats: md:myst - text_representation: - extension: .md - format_name: myst - format_version: 0.13 - jupytext_version: 1.11.5 -kernelspec: - display_name: Python 3 - language: python - name: python3 ---- - -# MCP Quick Start Guide - -This guide will help you get started with ReMe using the Model Context Protocol (MCP) interface for seamless -integration with MCP-compatible clients. - -## 🚀 What You'll Learn - -- How to set up and configure ReMe MCP server -- How to connect to the server using Python MCP clients -- How to use task memory operations through MCP -- How to build memory-enhanced agents with MCP integration - -## 📋 Prerequisites - -- Python 3.12+ -- LLM API access (OpenAI or compatible) -- Embedding model API access -- MCP-compatible client (Claude Desktop, or custom MCP client) - -## 🛠️ Installation - -### Option 1: Install from PyPI (Recommended) - -```bash -pip install reme-ai -``` - -### Option 2: Install from Source - -```bash -git clone https://github.com/agentscope-ai/ReMe.git -cd ReMe -pip install . -``` - -## ⚙️ Environment Setup - -Create a `.env` file in your project directory: - -```{code-cell} -FLOW_EMBEDDING_API_KEY=sk-xxxx - - -FLOW_EMBEDDING_BASE_URL=https://xxxx/v1 - -FLOW_LLM_API_KEY=sk-xxxx -FLOW_LLM_BASE_URL=https://xxxx/v1 -``` - -## 🚀 Building an MCP Server with ReMe - -ReMe provides a flexible framework for building MCP servers that can communicate using either STDIO or SSE (Server-Sent -Events) transport protocols. - -### Starting the MCP Server - -#### Option 1: STDIO Transport (Recommended for MCP clients) - -```bash -reme \ - backend=mcp \ - mcp.transport=stdio \ - llm.default.model_name=qwen3-30b-a3b-thinking-2507 \ - embedding_model.default.model_name=text-embedding-v4 \ - vector_store.default.backend=local -``` - -#### Option 2: SSE Transport (Server-Sent Events) - -```bash -reme \ - backend=mcp \ - mcp.transport=sse \ - http_service.port=8001 \ - llm.default.model_name=qwen3-30b-a3b-thinking-2507 \ - embedding_model.default.model_name=text-embedding-v4 \ - vector_store.default.backend=local -``` - -The SSE server will start on `http://localhost:8002/sse` - -### Configuring MCP Server for Claude Desktop - -To integrate with Claude Desktop, add the following configuration to your `claude_desktop_config.json`: - -```json -{ - "mcpServers": { - "reme": { - "command": "reme", - "args": [ - "backend=mcp", - "mcp.transport=stdio", - "llm.default.model_name=qwen3-30b-a3b-thinking-2507", - "embedding_model.default.model_name=text-embedding-v4", - "vector_store.default.backend=local_file" - ] - } - } -} -``` - -This configuration: - -1. Registers a new MCP server named "reme" -2. Specifies the command to launch the server (`reme`) -3. Configures the server to use STDIO transport -4. Sets the LLM and embedding models to use -5. Configures the vector store backend - -### Advanced Server Configuration Options - -For more advanced use cases, you can configure the server with additional parameters: - -```bash -# Full configuration example -reme \ - backend=mcp \ - mcp.transport=stdio \ - http_service.host=0.0.0.0 \ - http_service.port=8002 \ - llm.default.model_name=qwen3-30b-a3b-thinking-2507 \ - embedding_model.default.model_name=text-embedding-v4 \ - vector_store.default.backend=elasticsearch \ -``` - -## 🔌 Using Python Client to Call MCP Services - -The ReMe framework provides a Python client for interacting with MCP services. This section focuses specifically on -using the `summary_task_memory` and `retrieve_task_memory` tools. - -### Setting Up the Python MCP Client - -First, install the required packages: - -```bash -pip install fastmcp dotenv -``` - -Then, create a basic client connection: - -```{code-cell} -import asyncio -from fastmcp import Client -from dotenv import load_dotenv - -# Load environment variables -load_dotenv() - -# MCP server URL (for SSE transport) -MCP_URL = "http://0.0.0.0:8002/sse/" -WORKSPACE_ID = "my_workspace" - - -async def main(): - async with Client(MCP_URL) as client: - # Your MCP operations will go here - pass - - -if __name__ == "__main__": - asyncio.run(main()) -``` - -### Using the Task Memory Summarizer - -The `summary_task_memory` tool transforms conversation trajectories into valuable task memories: - -```{code-cell} -async def run_summary(client, messages): - """ - Generate a summary of conversation messages and create task memories - - Args: - client: MCP client instance - messages: List of message objects from a conversation - - Returns: - None - """ - try: - result = await client.call_tool( - "summary_task_memory", - arguments={ - "workspace_id": "my_workspace", - "trajectories": [ - {"messages": messages, "score": 1.0} - ] - } - ) - - # Parse the response - import json - response_data = json.loads(result.content) - - # Extract memory list from response - memory_list = response_data.get("metadata", {}).get("memory_list", []) - print(f"Created memories: {memory_list}") - - # Optionally save memories to file - with open("task_memory.jsonl", "w") as f: - f.write(json.dumps(memory_list, indent=2, ensure_ascii=False)) - - except Exception as e: - print(f"Error running summary: {e}") -``` - -### Using the Task Memory Retriever - -The `retrieve_task_memory` tool allows you to retrieve relevant memories based on a query: - -```{code-cell} -async def run_retrieve(client, query): - """ - Retrieve relevant task memories based on a query - - Args: - client: MCP client instance - query: The query to retrieve relevant memories - - Returns: - String containing the retrieved memory answer - """ - try: - result = await client.call_tool( - "retrieve_task_memory", - arguments={ - "workspace_id": "my_workspace", - "query": query, - } - ) - - # Parse the response - import json - response_data = json.loads(result.content) - - # Extract and return the answer - answer = response_data.get("answer", "") - print(f"Retrieved memory: {answer}") - return answer - - except Exception as e: - print(f"Error retrieving memory: {e}") - return "" -``` - -### Complete Memory-Augmented Agent Example - -Here's a complete example showing how to build a memory-augmented agent using the MCP client: - -```{code-cell} -import json -import asyncio -from fastmcp import Client -from dotenv import load_dotenv - -# Load environment variables -load_dotenv() - -# API configuration -MCP_URL = "http://0.0.0.0:8002/sse/" -WORKSPACE_ID = "test_workspace" - - -async def run_agent(client, query): - """Run the agent with a specific query""" - result = await client.call_tool( - "react", - arguments={"query": query} - ) - - response_data = json.loads(result.content) - answer = response_data.get("answer", "") - messages = response_data.get("messages", []) - - return messages - - -async def run_summary(client, messages): - """Generate task memories from conversation""" - result = await client.call_tool( - "summary_task_memory", - arguments={ - "workspace_id": WORKSPACE_ID, - "trajectories": [ - {"messages": messages, "score": 1.0} - ] - } - ) - - response_data = json.loads(result.content) - memory_list = response_data.get("metadata", {}).get("memory_list", []) - - return memory_list - - -async def run_retrieve(client, query): - """Retrieve relevant task memories""" - result = await client.call_tool( - "retrieve_task_memory", - arguments={ - "workspace_id": WORKSPACE_ID, - "query": query, - } - ) - - response_data = json.loads(result.content) - answer = response_data.get("answer", "") - - return answer - - -async def memory_augmented_workflow(): - """Complete memory-augmented agent workflow""" - query1 = "Analyze Xiaomi Corporation" - query2 = "Analyze the company Tesla." - - async with Client(MCP_URL) as client: - # Step 1: Build initial memories with query2 - print(f"Building memories with: '{query2}'") - messages = await run_agent(client, query=query2) - - # Step 2: Summarize conversation to create memories - print("Creating memories from conversation") - memory_list = await run_summary(client, messages) - print(f"Created {len(memory_list)} memories") - - # Step 3: Retrieve relevant memories for query1 - print(f"Retrieving memories for: '{query1}'") - retrieved_memory = await run_retrieve(client, query1) - - # Step 4: Run agent with memory-augmented query - print("Running memory-augmented agent") - augmented_query = f"{retrieved_memory}\n\nUser Question:\n{query1}" - final_messages = await run_agent(client, query=augmented_query) - - # Extract the agent's final answer - final_answer = "" - for msg in final_messages: - if msg.get("role") == "assistant" and msg.get("content"): - final_answer = msg.get("content") - break - - print(f"Memory-augmented response: {final_answer}") - - -# Run the workflow -if __name__ == "__main__": - asyncio.run(memory_augmented_workflow()) -``` - -### Managing Vector Store with MCP - -You can also manage your vector store through MCP: - -```{code-cell} -async def manage_vector_store(client): - # Delete a workspace - await client.call_tool( - "vector_store", - arguments={ - "workspace_id": WORKSPACE_ID, - "action": "delete", - } - ) - - # Dump memories to disk - await client.call_tool( - "vector_store", - arguments={ - "workspace_id": WORKSPACE_ID, - "action": "dump", - "path": "./backups/", - } - ) - - # Load memories from disk - await client.call_tool( - "vector_store", - arguments={ - "workspace_id": WORKSPACE_ID, - "action": "load", - "path": "./backups/", - } - ) -``` - -## 🐛 Common Issues and Troubleshooting - -### MCP Server Won't Start -- Check if the required ports are available (for SSE transport) -- Verify your API keys in `.env` file -- Ensure Python version is 3.12+ -- Check MCP transport configuration - -### MCP Client Connection Issues -- For STDIO: Ensure the command path is correct in your MCP client config -- For SSE: Verify the server URL and port accessibility -- Check firewall settings for SSE connections - -### No Memories Retrieved - -- Make sure you've run the summarizer tool first to create memories -- Check if workspace_id matches between operations -- Verify vector store backend is properly configured - -### API Connection Errors -- Confirm LLM_BASE_URL and API keys are correct -- Test API access independently -- Check network connectivity diff --git a/docs/personal_memory/personal_memory.md b/docs/personal_memory/personal_memory.md deleted file mode 100644 index 2322bcb2..00000000 --- a/docs/personal_memory/personal_memory.md +++ /dev/null @@ -1,137 +0,0 @@ ---- -jupytext: - formats: md:myst - text_representation: - extension: .md - format_name: myst - format_version: 0.13 - jupytext_version: 1.11.5 -kernelspec: - display_name: Python 3 - language: python - name: python3 ---- - - -# Personal Memory - -## Configuration Logic - -ReMe's personal memory system consists of two main components: retrieval and summarization. The configuration for these components is defined in the default.yaml file. - -### Retrieval Configuration (`retrieve_personal_memory`) - -```yaml -retrieve_personal_memory: - flow_content: set_query_op >> (extract_time_op | (retrieve_memory_op >> semantic_rank_op)) >> fuse_rerank_op -``` - -This flow performs the following operations: -1. `set_query_op`: Prepares the query for memory retrieval -2. Parallel paths: - - `extract_time_op`: Extracts time-related information from the query - - `retrieve_memory_op >> semantic_rank_op`: Retrieves memories and ranks them semantically -3. `fuse_rerank_op`: Combines and reranks the results for final output - -### Summarization Configuration (`summary_personal_memory`) - -```yaml -summary_personal_memory: - flow_content: info_filter_op >> (get_observation_op | get_observation_with_time_op | load_today_memory_op) >> contra_repeat_op >> update_vector_store_op -``` - -This flow performs the following operations: -1. `info_filter_op`: Filters incoming information to extract relevant personal details -2. Parallel paths for observation extraction: - - `get_observation_op`: Extracts general observations - - `get_observation_with_time_op`: Extracts observations with time context - - `load_today_memory_op`: Loads memories from the current day -3. `contra_repeat_op`: Removes contradictions and repetitions -4. `update_vector_store_op`: Stores the processed memories in the vector database - -## Basic Usage - -The following example demonstrates how to use personal memory in MemoryScope: - -**1. Setup** - -```{code-cell} -import asyncio -import json -import aiohttp - -# API base URL (default is http://0.0.0.0:8002) -base_url = "http://0.0.0.0:8002" -workspace_id = "personal_memory_demo" -``` - -**2. Clear Existing Memories** - -```{code-cell} -async with aiohttp.ClientSession() as session: - # Delete existing workspace memories - async with session.post( - f"{base_url}/vector_store", - json={ - "action": "delete", - "workspace_id": workspace_id, - }, - headers={"Content-Type": "application/json"} - ) as response: - result = await response.json() -``` - -**3. Create Conversation with Personal Information** - -```{code-cell} -# Example conversation with personal details -messages = [ - {"role": "user", "content": "My name is John Smith, I'm 28 years old"}, - {"role": "assistant", "content": "Nice to meet you, John!"}, - {"role": "user", "content": "I'm a software engineer working with Python"}, - {"role": "assistant", "content": "I see, you're a Python engineer."}, - # Additional conversation messages... -] -``` - -**4. Summarize Personal Memories** - -```{code-cell} -async with session.post( - f"{base_url}/summary_personal_memory", - json={ - "trajectories": [ - {"messages": messages, "score": 1.0} - ], - "workspace_id": workspace_id, - }, - headers={"Content-Type": "application/json"} -) as response: - result = await response.json() -``` - -**5. Retrieve Personal Memories** - -```{code-cell} -# Example queries to retrieve personal information -queries = [ - "What's my name and age?", - "What do I do for work?", - "What are my hobbies?" -] - -for query in queries: - async with session.post( - f"{base_url}/retrieve_personal_memory", - json={ - "query": query, - "workspace_id": workspace_id, - }, - headers={"Content-Type": "application/json"} - ) as response: - result = await response.json() - print(f"Query: {query}") - print(f"Answer: {result.get('answer', '')}") -``` - -For a complete working example, refer to `/cookbook/simple_demo/use_personal_memory_demo.py` in the ReMe repository. \ No newline at end of file diff --git a/docs/personal_memory/personal_retrieve_ops.md b/docs/personal_memory/personal_retrieve_ops.md deleted file mode 100644 index dc2c7b5e..00000000 --- a/docs/personal_memory/personal_retrieve_ops.md +++ /dev/null @@ -1,132 +0,0 @@ -# Personal Memory Retrieve Ops - -## SetQueryOp - -### Functionality -`SetQueryOp` prepares the query for memory retrieval by setting the query and its associated timestamp into the context. It's the first operation in the personal memory retrieval flow. - -### Parameters -- `op.set_query_op.params.timestamp`: (Optional) Integer timestamp to use instead of the current time. If not provided, the current timestamp will be used. - -### Implementation Details -The operation: -1. Takes the query from the context (which is guaranteed to exist as a flow input requirement) -2. Sets a timestamp (either current time or from parameters) -3. Stores the query and timestamp as a tuple in the context for downstream operations - -## ExtractTimeOp - -### Functionality -`ExtractTimeOp` identifies and extracts time-related information from the query. It uses an LLM to analyze the query text and determine any temporal references or constraints. - -### Parameters -- `op.extract_time_op.params.language`: Language for time extraction (defaults to "en") - -### Implementation Details -The operation: -1. Checks if the query contains datetime keywords -2. If time-related words are found, it prepares a prompt for the LLM with: - - System instructions - - Few-shot examples - - The user's query and current time -3. Parses the LLM response to extract time information (year, month, day, etc.) -4. Stores the extracted time dictionary in the context for downstream operations - -## RetrieveMemoryOp - -### Functionality -`RetrieveMemoryOp` retrieves memories from the vector store based on the query. It extends the `RecallVectorStoreOp` class to provide memory retrieval functionality. - -### Parameters -- `op.retrieve_memory_op.params.recall_key`: Key in the context to use as the query (default: "query") -- `op.retrieve_memory_op.params.top_k`: Maximum number of memories to retrieve (default: 3) -- `op.retrieve_memory_op.params.threshold_score`: (Optional) Minimum similarity score for memories (filters out memories below this threshold) - -### Implementation Details -The operation: -1. Retrieves the query from the context -2. Searches the vector store for relevant memories based on the query -3. Removes duplicate memories -4. Filters memories by threshold score if specified -5. Stores the retrieved memories in the context for downstream operations - -## SemanticRankOp - -### Functionality -`SemanticRankOp` ranks memories based on their semantic relevance to the query using an LLM. This improves the quality of retrieved memories by considering deeper semantic relationships beyond vector similarity. - -### Parameters -- `op.semantic_rank_op.params.enable_ranker`: Whether to enable semantic ranking (default: true) -- `op.semantic_rank_op.params.output_memory_max_count`: Maximum number of memories to output (default: 10) - -### Implementation Details -The operation: -1. Retrieves the memory list from the context -2. If ranking is enabled and there are more memories than the output limit: - - Removes duplicates based on content - - Formats memories for LLM ranking - - Asks the LLM to rank memories by relevance on a scale of 0.0 to 1.0 - - Parses the ranking results and applies scores to memories -3. Sorts memories by score -4. Stores the ranked memories in the context for downstream operations - -## FuseRerankOp - -### Functionality -`FuseRerankOp` performs the final reranking of memories by combining multiple factors: semantic scores, memory types, and temporal relevance. It also formats the final output. - -### Parameters -- `op.fuse_rerank_op.params.fuse_score_threshold`: Minimum score threshold for memories (default: 0.1) -- `op.fuse_rerank_op.params.fuse_ratio_dict`: Dictionary of memory type to score multiplier ratios (default: {"conversation": 0.5, "observation": 1, "obs_customized": 1.2, "insight": 2.0}) -- `op.fuse_rerank_op.params.fuse_time_ratio`: Score multiplier for time-relevant memories (default: 2.0) -- `op.fuse_rerank_op.params.output_memory_max_count`: Maximum number of memories to output (default: 5) - -### Implementation Details -The operation: -1. Retrieves extracted time information and memory list from the context -2. For each memory: - - Checks if the memory score is above the threshold - - Applies a type-based adjustment factor based on the memory type - - Determines time relevance by matching memory time metadata with extracted time - - Calculates the final score by multiplying the original score by type and time factors -3. Sorts memories by the reranked scores -4. Selects the top-K memories based on the output limit -5. Formats memories for output with timestamps if available -6. Stores both the formatted output and the memory list in the context - -## PrintMemoryOp - -### Functionality -`PrintMemoryOp` formats the retrieved memories for display to the user. It provides a clean, structured representation of the memory content. - -### Parameters -No specific parameters for this operation. - -### Implementation Details -The operation: -1. Retrieves the memory list from the context -2. Formats each memory with: - - Memory index - - When to use information - - Content - - Additional metadata (if available) -3. Joins the formatted memories into a single string -4. Stores the formatted string in the context as the response answer - -## ReadMessageOp - -### Functionality -`ReadMessageOp` fetches unmemorized chat messages from the context. This is useful for retrieving recent conversations that haven't been processed into memories yet. - -### Parameters -- `op.read_message_op.params.contextual_msg_max_count`: Maximum number of contextual messages to retrieve (default: 10) - -### Implementation Details -The operation: -1. Retrieves chat messages from the context -2. Filters for messages that: - - Are not marked as memorized - - Contain the target name -3. Flattens the messages into a single list -4. Sorts messages by creation time if available -5. Stores the filtered messages back in the context diff --git a/docs/personal_memory/personal_summary_ops.md b/docs/personal_memory/personal_summary_ops.md deleted file mode 100644 index 3b62f458..00000000 --- a/docs/personal_memory/personal_summary_ops.md +++ /dev/null @@ -1,145 +0,0 @@ -# Personal Memory Summary Ops - -## InfoFilterOp - -### Purpose -Filters messages based on information content scores, retaining only those that include significant information about the user. - -### Parameters -- `op.info_filter_op.params.preserved_scores`: Comma-separated string of scores to preserve (default: "2,3") -- `op.info_filter_op.params.info_filter_msg_max_size`: Maximum size of messages to process (default: 200) - -### Description -This operation analyzes messages to determine which ones contain valuable personal information. It uses an LLM to score each message on a scale of 0-3: -- 0: No user information -- 1: Hypothetical or fictional content -- 2: General or time-sensitive information -- 3: Clear, important information or explicitly requested records - -Only messages with scores specified in `preserved_scores` are retained. Messages are also filtered to exclude those already memorized and to only include messages from the user. - -## GetObservationOp - -### Purpose -Extracts general observations about the user from messages that don't contain time-related information. - -### Parameters -No specific parameters for this operation. - -### Description -This operation processes messages that don't contain time-related keywords. It uses an LLM to extract meaningful observations about the user from these messages. Each observation includes: -- Content: The actual observation text -- Keywords: Tags that indicate when this observation might be relevant -- Source message: The original message that led to this observation - -The operation creates `PersonalMemory` objects with observation type "personal_info" for each extracted observation. - -## GetObservationWithTimeOp - -### Purpose -Extracts observations with time context from messages that contain time-related information. - -### Parameters -No specific parameters for this operation. - -### Description -This operation is the counterpart to `GetObservationOp` but focuses specifically on messages containing time-related keywords. It extracts observations while preserving the time context, which is important for memories related to schedules, appointments, or time-specific preferences. - -The operation creates `PersonalMemory` objects with observation type "personal_info_with_time" for each extracted observation, including the time information in the metadata. - -## LoadTodayMemoryOp - -### Purpose -Loads memories created today from the vector store to prevent duplication and enable updating of recent memories. - -### Parameters -- `op.load_today_memory_op.params.top_k`: Maximum number of memories to retrieve (default: 50) - -### Description -This operation retrieves memories created on the current day using vector store search with date filtering. It converts vector nodes to memory objects and makes them available for deduplication in subsequent operations. This helps ensure that new observations don't create redundant memories for information already captured earlier in the day. - -## ContraRepeatOp - -### Purpose -Identifies and removes contradictory or repetitive information from the collected memories. - -### Parameters -- `op.contra_repeat_op.params.contra_repeat_max_count`: Maximum number of memories to process (default: 50) -- `op.contra_repeat_op.params.enable_contra_repeat`: Whether to enable contradiction/repetition checking (default: true) - -### Description -This operation analyzes the combined memories from previous operations (observation_memories, observation_memories_with_time, today_memories) to identify contradictions or redundancies. It uses an LLM to evaluate each memory and mark it as: -- "Contradiction": Contradicts other memories -- "Contained": Redundant as the information is already contained in other memories -- "None": Unique and should be kept - -Memories marked as contradictory or contained are filtered out, and their IDs are tracked for deletion from the vector store. - -## LongContraRepeatOp - -### Purpose -Performs more sophisticated contradiction and redundancy analysis for longer-term memory management. - -### Parameters -- `op.long_contra_repeat_op.params.long_contra_repeat_max_count`: Maximum number of memories to process (default: 50) -- `op.long_contra_repeat_op.params.enable_long_contra_repeat`: Whether to enable this operation (default: true) - -### Description -This operation extends the basic contradiction analysis of `ContraRepeatOp` with the ability to resolve conflicts by modifying contradictory memories rather than simply removing them. It's particularly useful for managing long-term personal memories where information might evolve over time. - -For contradictory memories, it can either: -- Modify the content to resolve the contradiction -- Remove the memory if it's completely invalidated -- Keep the most accurate/recent information - -## UpdateInsightOp - -### Purpose -Updates existing insight values based on new observations. - -### Parameters -- `op.update_insight_op.params.update_insight_threshold`: Minimum relevance score threshold (default: 0.3) -- `op.update_insight_op.params.update_insight_max_count`: Maximum number of insights to update (default: 5) - -### Description -This operation integrates new observations into existing insights about the user. It: -1. Scores insight memories based on relevance to new observations -2. Selects the top insights that meet the relevance threshold -3. Updates each selected insight using an LLM to incorporate the new information -4. Creates updated insight memories with the original ID but new content - -This helps maintain accurate and up-to-date insights as new information about the user becomes available. - -## GetReflectionSubjectOp - -### Purpose -Generates reflection subjects (topics) from personal memories for insight extraction. - -### Parameters -- `op.get_reflection_subject_op.params.reflect_obs_cnt_threshold`: Minimum number of memories required for reflection (default: 10) -- `op.get_reflection_subject_op.params.reflect_num_questions`: Maximum number of new subjects to generate (default: 3) - -### Description -This operation analyzes a collection of personal memories to identify potential topics for reflection and insight generation. It: -1. Checks if there are sufficient memories for meaningful reflection -2. Extracts existing insight subjects to avoid duplication -3. Uses an LLM to generate new reflection subjects based on memory content -4. Creates insight memory objects for these new subjects - -The generated subjects serve as focal points for organizing and synthesizing personal information about the user. - -## UpdateVectorStoreOp - -### Purpose -Stores the processed memories in the vector database and removes deleted memories. - -### Parameters -No specific parameters for this operation. - -### Description -This operation is the final step in the personal memory summarization flow. It: -1. Deletes memories that were marked for removal (contradictory or redundant) -2. Inserts new or updated memories into the vector store -3. Records the number of deleted and inserted memories - -This ensures that the vector store remains up-to-date with the latest processed memories. diff --git a/docs/quick_start.md b/docs/quick_start.md deleted file mode 100644 index 44e06fd7..00000000 --- a/docs/quick_start.md +++ /dev/null @@ -1,484 +0,0 @@ ---- -jupytext: - formats: md:myst - text_representation: - extension: .md - format_name: myst - format_version: 0.13 - jupytext_version: 1.11.5 -kernelspec: - display_name: Python 3 - language: python - name: python3 ---- - -# Quick Start - -### HTTP Service Startup - -```bash -reme \ - backend=http \ - http.port=8002 \ - llm.default.model_name=qwen3-30b-a3b-thinking-2507 \ - embedding_model.default.model_name=text-embedding-v4 \ - vector_store.default.backend=local -``` - -### MCP Server Support - -```bash -reme \ - backend=mcp \ - mcp.transport=stdio \ - llm.default.model_name=qwen3-30b-a3b-thinking-2507 \ - embedding_model.default.model_name=text-embedding-v4 \ - vector_store.default.backend=local -``` - -### Core API Usage - -#### Task Memory Management - -`````{tab-set} - -````{tab-item} python(http) -```{code-block} -import requests - -# Experience Summarizer: Learn from execution trajectories -response = requests.post("http://localhost:8002/summary_task_memory", json={ - "workspace_id": "task_workspace", - "trajectories": [ - {"messages": [{"role": "user", "content": "Help me create a project plan"}], "score": 1.0} - ] -}) - -# Retriever: Get relevant memories -response = requests.post("http://localhost:8002/retrieve_task_memory", json={ - "workspace_id": "task_workspace", - "query": "How to efficiently manage project progress?", - "top_k": 1 -}) -``` -```` - -````{tab-item} python(import) -```{code-block} -import asyncio -from reme_ai import ReMeApp - -async def main(): - async with ReMeApp( - "llm.default.model_name=qwen3-30b-a3b-thinking-2507", - "embedding_model.default.model_name=text-embedding-v4", - "vector_store.default.backend=memory" - ) as app: - # Experience Summarizer: Learn from execution trajectories - result = await app.async_execute( - name="summary_task_memory", - workspace_id="task_workspace", - trajectories=[ - { - "messages": [ - {"role": "user", "content": "Help me create a project plan"} - ], - "score": 1.0 - } - ] - ) - print(result) - - # Retriever: Get relevant memories - result = await app.async_execute( - name="retrieve_task_memory", - workspace_id="task_workspace", - query="How to efficiently manage project progress?", - top_k=1 - ) - print(result) - -if __name__ == "__main__": - asyncio.run(main()) -``` -```` - -````{tab-item} curl -```bash -# Experience Summarizer: Learn from execution trajectories -curl -X POST http://localhost:8002/summary_task_memory \ - -H "Content-Type: application/json" \ - -d '{ - "workspace_id": "task_workspace", - "trajectories": [ - {"messages": [{"role": "user", "content": "Help me create a project plan"}], "score": 1.0} - ] - }' - -# Retriever: Get relevant memories -curl -X POST http://localhost:8002/retrieve_task_memory \ - -H "Content-Type: application/json" \ - -d '{ - "workspace_id": "task_workspace", - "query": "How to efficiently manage project progress?", - "top_k": 1 - }' -``` -```` - -````{tab-item} Node.js -```{code-block} javascript -// Experience Summarizer: Learn from execution trajectories -fetch("http://localhost:8002/summary_task_memory", { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify({ - workspace_id: "task_workspace", - trajectories: [ - {messages: [{role: "user", content: "Help me create a project plan"}], score: 1.0} - ] - }) -}) -.then(response => response.json()) -.then(data => console.log(data)); - -// Retriever: Get relevant memories -fetch("http://localhost:8002/retrieve_task_memory", { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify({ - workspace_id: "task_workspace", - query: "How to efficiently manage project progress?", - top_k: 1 - }) -}) -.then(response => response.json()) -.then(data => console.log(data)); -``` -```` -````` - -#### Personal Memory Management - -`````{tab-set} - -````{tab-item} python(http) -```{code-block} -import requests - -# Memory Integration: Learn from user interactions -response = requests.post("http://localhost:8002/summary_personal_memory", json={ - "workspace_id": "task_workspace", - "trajectories": [ - {"messages": - [ - {"role": "user", "content": "I like to drink coffee while working in the morning"}, - {"role": "assistant", - "content": "I understand, you prefer to start your workday with coffee to stay energized"} - ] - } - ] -}) - -# Memory Retrieval: Get personal memory fragments -response = requests.post("http://localhost:8002/retrieve_personal_memory", json={ - "workspace_id": "task_workspace", - "query": "What are the user's work habits?", - "top_k": 5 -}) -``` -```` - -````{tab-item} python(import) -```{code-block} -import asyncio -from reme_ai import ReMeApp - -async def main(): - async with ReMeApp( - "llm.default.model_name=qwen3-30b-a3b-thinking-2507", - "embedding_model.default.model_name=text-embedding-v4", - "vector_store.default.backend=memory" - ) as app: - # Memory Integration: Learn from user interactions - result = await app.async_execute( - name="summary_personal_memory", - workspace_id="task_workspace", - trajectories=[ - { - "messages": [ - {"role": "user", "content": "I like to drink coffee while working in the morning"}, - {"role": "assistant", - "content": "I understand, you prefer to start your workday with coffee to stay energized"} - ] - } - ] - ) - print(result) - - # Memory Retrieval: Get personal memory fragments - result = await app.async_execute( - name="retrieve_personal_memory", - workspace_id="task_workspace", - query="What are the user's work habits?", - top_k=5 - ) - print(result) - -if __name__ == "__main__": - asyncio.run(main()) -``` -```` - -````{tab-item} curl -```bash -# Memory Integration: Learn from user interactions -curl -X POST http://localhost:8002/summary_personal_memory \ - -H "Content-Type: application/json" \ - -d '{ - "workspace_id": "task_workspace", - "trajectories": [ - {"messages": [ - {"role": "user", "content": "I like to drink coffee while working in the morning"}, - {"role": "assistant", "content": "I understand, you prefer to start your workday with coffee to stay energized"} - ]} - ] - }' - -# Memory Retrieval: Get personal memory fragments -curl -X POST http://localhost:8002/retrieve_personal_memory \ - -H "Content-Type: application/json" \ - -d '{ - "workspace_id": "task_workspace", - "query": "What are the user's work habits?", - "top_k": 5 - }' -``` -```` - -````{tab-item} Node.js -```{code-block} javascript -// Memory Integration: Learn from user interactions -fetch("http://localhost:8002/summary_personal_memory", { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify({ - workspace_id: "task_workspace", - trajectories: [ - {messages: [ - {role: "user", content: "I like to drink coffee while working in the morning"}, - {role: "assistant", content: "I understand, you prefer to start your workday with coffee to stay energized"} - ]} - ] - }) -}) -.then(response => response.json()) -.then(data => console.log(data)); - -// Memory Retrieval: Get personal memory fragments -fetch("http://localhost:8002/retrieve_personal_memory", { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify({ - workspace_id: "task_workspace", - query: "What are the user's work habits?", - top_k: 5 - }) -}) -.then(response => response.json()) -.then(data => console.log(data)); -``` -```` -````` - - -#### Tool Memory Management - -`````{tab-set} - -````{tab-item} python(http) -```{code-block} -import requests - -# Record tool execution results -response = requests.post("http://localhost:8002/add_tool_call_result", json={ - "workspace_id": "tool_workspace", - "tool_call_results": [ - { - "create_time": "2025-10-21 10:30:00", - "tool_name": "web_search", - "input": {"query": "Python asyncio tutorial", "max_results": 10}, - "output": "Found 10 relevant results...", - "token_cost": 150, - "success": True, - "time_cost": 2.3 - } - ] -}) - -# Generate usage guidelines from history -response = requests.post("http://localhost:8002/summary_tool_memory", json={ - "workspace_id": "tool_workspace", - "tool_names": "web_search" -}) - -# Retrieve tool guidelines before use -response = requests.post("http://localhost:8002/retrieve_tool_memory", json={ - "workspace_id": "tool_workspace", - "tool_names": "web_search" -}) -``` -```` - -````{tab-item} python(import) -```{code-block} -import asyncio -from reme_ai import ReMeApp - -async def main(): - async with ReMeApp( - "llm.default.model_name=qwen3-30b-a3b-thinking-2507", - "embedding_model.default.model_name=text-embedding-v4", - "vector_store.default.backend=memory" - ) as app: - # Record tool execution results - result = await app.async_execute( - name="add_tool_call_result", - workspace_id="tool_workspace", - tool_call_results=[ - { - "create_time": "2025-10-21 10:30:00", - "tool_name": "web_search", - "input": {"query": "Python asyncio tutorial", "max_results": 10}, - "output": "Found 10 relevant results...", - "token_cost": 150, - "success": True, - "time_cost": 2.3 - } - ] - ) - print(result) - - # Generate usage guidelines from history - result = await app.async_execute( - name="summary_tool_memory", - workspace_id="tool_workspace", - tool_names="web_search" - ) - print(result) - - # Retrieve tool guidelines before use - result = await app.async_execute( - name="retrieve_tool_memory", - workspace_id="tool_workspace", - tool_names="web_search" - ) - print(result) - -if __name__ == "__main__": - asyncio.run(main()) -``` -```` - -````{tab-item} curl -```bash -# Record tool execution results -curl -X POST http://localhost:8002/add_tool_call_result \ - -H "Content-Type: application/json" \ - -d '{ - "workspace_id": "tool_workspace", - "tool_call_results": [ - { - "create_time": "2025-10-21 10:30:00", - "tool_name": "web_search", - "input": {"query": "Python asyncio tutorial", "max_results": 10}, - "output": "Found 10 relevant results...", - "token_cost": 150, - "success": true, - "time_cost": 2.3 - } - ] - }' - -# Generate usage guidelines from history -curl -X POST http://localhost:8002/summary_tool_memory \ - -H "Content-Type: application/json" \ - -d '{ - "workspace_id": "tool_workspace", - "tool_names": "web_search" - }' - -# Retrieve tool guidelines before use -curl -X POST http://localhost:8002/retrieve_tool_memory \ - -H "Content-Type: application/json" \ - -d '{ - "workspace_id": "tool_workspace", - "tool_names": "web_search" - }' -``` -```` - -````{tab-item} Node.js -```{code-block} javascript -// Record tool execution results -fetch("http://localhost:8002/add_tool_call_result", { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify({ - workspace_id: "tool_workspace", - tool_call_results: [ - { - create_time: "2025-10-21 10:30:00", - tool_name: "web_search", - input: {query: "Python asyncio tutorial", max_results: 10}, - output: "Found 10 relevant results...", - token_cost: 150, - success: true, - time_cost: 2.3 - } - ] - }) -}) -.then(response => response.json()) -.then(data => console.log(data)); - -// Generate usage guidelines from history -fetch("http://localhost:8002/summary_tool_memory", { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify({ - workspace_id: "tool_workspace", - tool_names: "web_search" - }) -}) -.then(response => response.json()) -.then(data => console.log(data)); - -// Retrieve tool guidelines before use -fetch("http://localhost:8002/retrieve_tool_memory", { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify({ - workspace_id: "tool_workspace", - tool_names: "web_search" - }) -}) -.then(response => response.json()) -.then(data => console.log(data)); -``` -```` -````` \ No newline at end of file diff --git a/docs/sop_memory/making_sop_memories.md b/docs/sop_memory/making_sop_memories.md deleted file mode 100644 index 5ffd7227..00000000 --- a/docs/sop_memory/making_sop_memories.md +++ /dev/null @@ -1,136 +0,0 @@ ---- -jupytext: - formats: md:myst - text_representation: - extension: .md - format_name: myst - format_version: 0.13 - jupytext_version: 1.11.5 -kernelspec: - display_name: Python 3 - language: python - name: python3 ---- - -# SOP Memory: Combining Atomic Operations into Complex Workflows - -## 1. Background - -In LLM application development, we often need to combine multiple basic operations (atomic operations) into more complex -workflows. These workflows can handle complex tasks such as data retrieval, code generation, multi-turn dialogues, and -more. By combining these atomic operations into Standard Operating Procedures (SOPs), we can: - -- Improve code reusability -- Simplify implementation of complex tasks -- Standardize common workflows -- Reduce development and maintenance costs - -This document introduces how to combine atomic operations (Ops) to form new composite operation tools using the FlowLLM -framework. - -## 2. Technical Solution - -### 2.1 Atomic Operation Definition - -Each operation (Op) needs to define the following core attributes: - -```{code-cell} -class BaseAsyncToolOp: - description: str # Description of the operation - input_schema: Dict[str, ParamAttr] # Input parameter schema definition - output_schema: Dict[str, ParamAttr] # Output parameter schema definition -``` - -Where `ParamAttr` defines parameter type, whether it's required, and other attributes: - -```{code-cell} -class ParamAttr: - type: Type # Parameter type, such as str, int, Dict, etc. - required: bool = True # Whether it must be provided - default: Any = None # Default value - description: str = "" # Parameter description -``` - -### 2.2 SOP Composition Process - -#### Step 1: Create Atomic Operation Instances - -First, instantiate the required atomic operations: - -```{code-cell} -from flowllm.op.gallery.mock_op import MockOp -from flowllm.op.search.tavily_search_op import TavilySearchOp -from flowllm.op.agent.react_v2_op import ReactV2Op - -# Create atomic operation instances -search_op = TavilySearchOp() -react_op = ReactV2Op() -summary_op = MockOp( - description="Summarize search results", - input_schema={"search_results": ParamAttr(type=str, description="Search results to summarize")}, - output_schema={"summary": ParamAttr(type=str, description="Summarized content")} -) -``` - -#### Step 2: Define Data Flow Between Operations - -Set up input-output relationships between operations, defining how data flows between them: - -```{code-cell} -# Set input parameter sources -react_op.set_input("context", - "search_summary") # react_op's context parameter is retrieved from search_summary in memory - -# Set output parameter destinations -search_op.set_output("results", "search_results") # search_op's results output to search_results in memory -summary_op.set_output("summary", "search_summary") # summary_op's summary output to search_summary in memory -``` - -#### Step 3: Build Operation Flow Graph - -Use operators to build the operation flow graph, defining execution order and parallel relationships: - -```{code-cell} -# Build operation flow graph -flow = search_op >> summary_op >> react_op - -# Or more complex flows -# Parallel operations use the | operator, sequential operations use the >> operator -complex_flow = (search_op >> summary_op) | (another_search_op >> another_summary_op) >> react_op -``` - -Operator explanation: - -- `>>`: Sequential execution, execute the next operation after the previous one completes -- `|`: Parallel execution, execute multiple operations simultaneously - -#### Step 4: Create Composite Operation Class - -Encapsulate the built operation flow into a new composite operation class: - -```{code-cell} - -class SearchAndReactOp(BaseToolOp): - description = "Search for information and generate a response based on search results" - input_schema = ... - output_schema = ... - - def build_flow(self): - search_op = TavilySearchOp() - summary_op = MockOp() - react_op = ReactV2Op() - - # Set data flow - search_op.set_output("results", "search_results") - summary_op.set_input("search_results", "search_results") - summary_op.set_output("summary", "search_summary") - react_op.set_input("context", "search_summary") - react_op.set_output("response", "response") - - # Build operation flow graph - return search_op >> summary_op >> react_op - - async def execute(self, inputs: Dict[str, Any]) -> Dict[str, Any]: - # Execute operation flow - return await self.flow.execute(inputs) -``` \ No newline at end of file diff --git a/docs/task_memory/task_memory.md b/docs/task_memory/task_memory.md deleted file mode 100644 index 1c96946a..00000000 --- a/docs/task_memory/task_memory.md +++ /dev/null @@ -1,216 +0,0 @@ ---- -jupytext: - formats: md:myst - text_representation: - extension: .md - format_name: myst - format_version: 0.13 - jupytext_version: 1.11.5 -kernelspec: - display_name: Python 3 - language: python - name: python3 ---- - -# Task Memory - -Task Memory is a key component of ReMe that allows AI agents to learn from memories and improve their performance on similar tasks in the future. This document explains how task memory works and how to use it in your applications. - -## What is Task Memory? - -Task Memory represents knowledge extracted from previous task executions, including: -- Successful approaches to solving problems -- Common pitfalls and failures to avoid -- Comparative insights between different approaches - -Each task memory contains: -- `when_to_use`: Conditions that indicate when this memory is relevant -- `content`: The actual knowledge or memory to be applied -- Metadata about the memory's source and utility - -## Configuration Logic - -Task Memory in ReMe is configured through two main flows: - -### 1. Summary Task Memory - -The `summary_task_memory` flow processes conversation trajectories to extract meaningful memories: - -```yaml -summary_task_memory: - flow_content: trajectory_preprocess_op >> (success_extraction_op|failure_extraction_op|comparative_extraction_op) >> memory_validation_op >> update_vector_store_op - description: "Summarizes conversation trajectories or messages into structured memory representations for long-term storage" -``` - -This flow: -1. Preprocesses trajectories (`trajectory_preprocess_op`) -2. Extracts memories based on success/failure/comparative analysis -3. Validates memories (`memory_validation_op`) -4. Updates the vector store (`update_vector_store_op`) - -A simplified version (`summary_task_memory_simple`) is also available for less complex use cases. - -### 2. Retrieve Task Memory - -The `retrieve_task_memory` flow fetches relevant memories based on a query: - -```yaml -retrieve_task_memory: - flow_content: build_query_op >> recall_vector_store_op >> rerank_memory_op >> rewrite_memory_op - description: "Retrieves the most relevant top-k memory from historical data based on the current query to enhance task-solving capabilities" -``` - -This flow: -1. Builds a query from the input (`build_query_op`) -2. Recalls relevant memories from the vector store (`recall_vector_store_op`) -3. Reranks memories by relevance (`rerank_memory_op`) -4. Rewrites memories for better context integration (`rewrite_memory_op`) - -A simplified version (`retrieve_task_memory_simple`) is also available. - -## Basic Usage - -Here's how to use Task Memory in your application: - -### Step 1: Set Up Your Environment - -```{code-cell} -import requests - -# API configuration -BASE_URL = "http://0.0.0.0:8002/" -WORKSPACE_ID = "your_workspace_id" -``` - -### Step 2: Run an Agent and Generate Memories - -```{code-cell} -# Run the agent with a query -response = requests.post( - url=f"{BASE_URL}react", - json={"query": "Your query here"} -) -messages = response.json().get("messages", []) - -# Summarize the conversation to create task memories -response = requests.post( - url=f"{BASE_URL}summary_task_memory", - json={ - "workspace_id": WORKSPACE_ID, - "trajectories": [ - {"messages": messages, "score": 1.0} - ] - } -) -``` - -### Step 3: Retrieve Relevant Memories for a New Task - -```{code-cell} -# Retrieve memories relevant to a new query -response = requests.post( - url=f"{BASE_URL}retrieve_task_memory", - json={ - "workspace_id": WORKSPACE_ID, - "query": "Your new query here" - } -) -retrieved_memory = response.json().get("answer", "") -``` - -### Step 4: Use Retrieved Memories to Enhance Agent Performance - -```{code-cell} -# Augment a new query with retrieved memories -augmented_query = f"{retrieved_memory}\n\nUser Question:\n{your_query}" - -# Run agent with the augmented query -response = requests.post( - url=f"{BASE_URL}react", - json={"query": augmented_query} -) -``` - -## Complete Example - -Here's a complete example workflow that demonstrates how to use task memory: - -```{code-cell} -def run_agent_with_memory(query_first, query_second): - # Run agent with second query to build initial memories - messages = run_agent(query=query_second) - - # Summarize conversation to create memories - requests.post( - url=f"{BASE_URL}summary_task_memory", - json={ - "workspace_id": WORKSPACE_ID, - "trajectories": [ - {"messages": messages, "score": 1.0} - ] - } - ) - - # Retrieve relevant memories for the first query - response = requests.post( - url=f"{BASE_URL}retrieve_task_memory", - json={ - "workspace_id": WORKSPACE_ID, - "query": query_first - } - ) - retrieved_memory = response.json().get("answer", "") - - # Run agent with first query augmented with retrieved memories - augmented_query = f"{retrieved_memory}\n\nUser Question:\n{query_first}" - return run_agent(query=augmented_query) -``` - -## Managing Task Memories - -### Delete a Workspace - -```{code-cell} -response = requests.post( - url=f"{BASE_URL}vector_store", - json={ - "workspace_id": WORKSPACE_ID, - "action": "delete" - } -) -``` - -### Dump Memories to Disk - -```{code-cell} -response = requests.post( - url=f"{BASE_URL}vector_store", - json={ - "workspace_id": WORKSPACE_ID, - "action": "dump", - "path": "./" - } -) -``` - -### Load Memories from Disk - -```{code-cell} -response = requests.post( - url=f"{BASE_URL}vector_store", - json={ - "workspace_id": WORKSPACE_ID, - "action": "load", - "path": "./" - } -) -``` - -## Advanced Features - -ReMe also provides additional task memory operations: - -- `record_task_memory`: Update frequency and utility attributes of retrieved memories -- `delete_task_memory`: Delete memories based on utility/frequency thresholds - -For more detailed examples, see the `use_task_memory_demo.py` file in the cookbook directory of the ReMe project. \ No newline at end of file diff --git a/docs/task_memory/task_retrieve_ops.md b/docs/task_memory/task_retrieve_ops.md deleted file mode 100644 index 33246681..00000000 --- a/docs/task_memory/task_retrieve_ops.md +++ /dev/null @@ -1,73 +0,0 @@ -# Task Memory Retrieval Ops - -## BuildQueryOp - -### Purpose - -Constructs a query for memory retrieval either from a direct query input or by analyzing conversation messages. - -### Functionality - -- If a direct `query` is provided in the context, it uses that query -- If `messages` are provided in the context, it can: - - Use an LLM to generate a query based on the conversation context - - Or create a simple query from recent messages without using an LLM - -### Parameters - -- `op.build_query_op.params.enable_llm_build` (boolean, default: `true`): - - When `true`, uses an LLM to generate a query from conversation messages - - When `false`, creates a simple query by concatenating recent messages - -## RerankMemoryOp - -### Purpose - -Reranks and filters recalled memories to ensure the most relevant memories are prioritized. - -### Functionality - -- Reranks memories using LLM-based analysis (optional) -- Filters memories based on quality scores (optional) -- Returns the top-k most relevant memories - -### Parameters - -- `op.rerank_memory_op.params.enable_llm_rerank` (boolean, default: `true`): - - When `true`, uses an LLM to rerank memories based on their relevance to the query -- `op.rerank_memory_op.params.enable_score_filter` (boolean, default: `false`): - - When `true`, filters memories based on their quality scores -- `op.rerank_memory_op.params.min_score_threshold` (float, default: `0.3`): - - Minimum score threshold for filtering memories when `enable_score_filter` is `true` -- `op.rerank_memory_op.params.top_k` (integer, default: `5`): - - Number of top memories to retain after reranking - -## RewriteMemoryOp - -### Purpose - -Rewrites and formats the retrieved memories to make them more relevant and actionable for the current context. - -### Functionality - -- Formats retrieved memories into a structured format -- Can use an LLM to rewrite memories to better fit the current context (optional) -- Generates a cohesive context message from multiple memories - -### Parameters - -- `op.rewrite_memory_op.params.enable_llm_rewrite` (boolean, default: `true`): - - When `true`, uses an LLM to rewrite the memories to make them more relevant and actionable - - When `false`, simply formats the memories without LLM-based rewriting - -## MergeMemoryOp - -### Purpose - -An alternative to RewriteMemoryOp that merges multiple memories into a single response without using an LLM. - -### Functionality - -- Collects the content from all memories in the memory list -- Formats them into a single response with a standard structure -- Adds a prompt to consider the helpful parts when answering the question \ No newline at end of file diff --git a/docs/task_memory/task_summary_ops.md b/docs/task_memory/task_summary_ops.md deleted file mode 100644 index 93d49dbd..00000000 --- a/docs/task_memory/task_summary_ops.md +++ /dev/null @@ -1,163 +0,0 @@ -# Task Memory Summary Ops - -## TrajectoryPreprocessOp - -### Purpose - -Preprocesses trajectories by validating and classifying them based on their score. - -### Functionality - -- Validates and classifies trajectories as success or failure based on a threshold -- Modifies tool calls in messages to ensure consistent format -- Sets context for downstream operators with classified trajectories - -### Parameters - -- `op.trajectory_preprocess_op.params.success_threshold` (float, default: `1.0`): - - The threshold score that determines if a trajectory is considered successful - - Trajectories with scores greater than or equal to this value are classified as successful - -## TrajectorySegmentationOp - -### Purpose - -Segments trajectories into meaningful step sequences to enable more granular memory extraction. - -### Functionality - -- Uses LLM to identify logical break points in trajectories -- Adds segmentation information to trajectory metadata -- Enables more focused memory extraction from specific parts of conversations - -### Parameters - -- `op.trajectory_segmentation_op.params.segment_target` (string, default: `"all"`): - - Determines which trajectories to segment - - Options: `"all"`, `"success"`, `"failure"` - -## SuccessExtractionOp - -### Purpose - -Extracts task memories from successful trajectories. - -### Functionality - -- Processes successful trajectories to identify valuable memories -- Can work with both entire trajectories and segmented step sequences -- Uses LLM to extract structured task memories with when-to-use conditions - -### Parameters - -No specific parameters beyond the LLM configuration. - -## FailureExtractionOp - -### Purpose - -Extracts task memories from failed trajectories to capture lessons learned from unsuccessful attempts. - -### Functionality - -- Processes failed trajectories to identify pitfalls and mistakes -- Can work with both entire trajectories and segmented step sequences -- Uses LLM to extract structured task memories with when-to-use conditions - -### Parameters - -No specific parameters beyond the LLM configuration. - -## ComparativeExtractionOp - -### Purpose - -Extracts comparative task memories by comparing different scoring trajectories. - -### Functionality - -- Performs "soft comparison" between highest and lowest scoring trajectories -- Can perform "hard comparison" between success and failure trajectories using similarity search -- Identifies key differences that contributed to success or failure - -### Parameters - -- `op.comparative_extraction_op.params.enable_soft_comparison` (boolean, default: `true`): - - When `true`, enables comparison between highest and lowest scoring trajectories -- `op.comparative_extraction_op.params.enable_similarity_comparison` (boolean, default: `false`): - - When `true`, enables similarity-based comparison between success and failure trajectories -- `op.comparative_extraction_op.params.similarity_threshold` (float, default: `0.3`): - - The threshold for considering two trajectories similar -- `op.comparative_extraction_op.params.max_similarity_sequences` (integer, default: `5`): - - Maximum number of sequences to compare to avoid computational overload -- `op.comparative_extraction_op.params.max_similarity_pairs` (integer, default: `3`): - - Maximum number of similar pairs to process - -## MemoryValidationOp - -### Purpose - -Validates the quality of extracted task memories to ensure they are useful and relevant. - -### Functionality - -- Uses LLM to validate each extracted memory -- Scores memories based on quality and relevance -- Filters out low-quality memories based on validation threshold - -### Parameters - -- `op.memory_validation_op.params.validation_threshold` (float, default: `0.5`): - - The minimum score for a memory to be considered valid - -## MemoryDeduplicationOp - -### Purpose - -Removes duplicate task memories to avoid redundancy in the vector store. - -### Functionality - -- Compares new memories with existing memories in the vector store -- Uses embedding similarity to identify duplicates -- Ensures only unique memories are stored - -### Parameters - -- `op.memory_deduplication_op.params.similarity_threshold` (float, default: `0.5`): - - The threshold for considering two memories similar -- `op.memory_deduplication_op.params.max_existing_task_memories` (integer, default: `1000`): - - Maximum number of existing memories to check against - -## SimpleSummaryOp - -### Purpose - -A simplified version of memory extraction that processes entire trajectories in one step. - -### Functionality - -- Classifies trajectories as success or failure based on score threshold -- Extracts memories directly from complete trajectories -- Useful for simpler use cases where detailed segmentation is not required - -### Parameters - -- `op.simple_summary_op.params.success_score_threshold` (float, default: `0.9`): - - The threshold score that determines if a trajectory is considered successful - -## SimpleComparativeSummaryOp - -### Purpose - -A simplified version of comparative memory extraction. - -### Functionality - -- Groups trajectories by task ID -- Compares the highest and lowest scoring trajectories for each task -- Extracts comparative insights without complex segmentation - -### Parameters - -No specific parameters beyond the LLM configuration. \ No newline at end of file diff --git a/docs/tool_memory/tool_bench.md b/docs/tool_memory/tool_bench.md deleted file mode 100644 index 7f0fec94..00000000 --- a/docs/tool_memory/tool_bench.md +++ /dev/null @@ -1,270 +0,0 @@ ---- -jupytext: - formats: md:myst - text_representation: - extension: .md - format_name: myst - format_version: 0.13 - jupytext_version: 1.11.5 -kernelspec: - display_name: Python 3 - language: python - name: python3 ---- - -# Tool Memory Benchmark - -## Overview - -This benchmark evaluates Tool Memory effectiveness by comparing agent performance with and without tool memory across multiple epochs. The experiment uses mock search tools with varying performance characteristics for different query complexities. - -## Experimental Setup - -### Mock Search Tools - -Three LLM-based mock search tools with different performance profiles: - -| Tool | Simple Queries | Medium Queries | Complex Queries | -|-----------------|------------------------------|---------------------------|--------------------------| -| **SearchToolA** | ⭐⭐⭐ Fast, high success (90%) | ❌ Poor (20% success) | ⚠️ Weak (50% success) | -| **SearchToolB** | ⚠️ Over-engineered (30%) | ⭐⭐⭐ Optimal (90% success) | ⚠️ Limited (50% success) | -| **SearchToolC** | ⚠️ Overkill (30%) | ⚠️ Excessive (40%) | ⭐⭐⭐ Best (90% success) | - -**Performance Characteristics:** -- `success_rate`: Probability of successful execution (vs "Service busy" error) -- `relevance_ratio`: Probability of returning relevant results (vs random content) -- `extra_time`: Simulated latency (currently 0 in implementation) - -Each tool uses LLM to classify query complexity and generate appropriate responses. - -### Query Dataset - -**Source:** `cookbook/tool_memory/query.json` - -- **Train Set**: 20 queries per complexity × 3 levels = 60 queries -- **Test Set**: 20 queries per complexity × 3 levels = 60 queries -- **Complexity Levels**: simple, moderate, complex - -## Benchmark Workflow - -### Single Epoch Process - -Each epoch consists of 5 steps: - -#### Step 1: Train without Memory -```{code-cell} -# Execute all train queries on TRAIN_WORKSPACE -# Agent selects tools without historical guidance -run_use_mock_search(TRAIN_WORKSPACE, train_queries, prompt_template) - -# Add results to memory and get scored results -train_scored_results = add_tool_call_results(TRAIN_WORKSPACE, train_results) -``` - -#### Step 2: Test without Memory -```{code-cell} -# Execute all test queries on TEST_WORKSPACE (fresh workspace) -# Baseline performance without tool memory -run_use_mock_search(TEST_WORKSPACE, test_queries, prompt_template) - -# Add results to memory (will be cleared in Step 4) -test_scored_results = add_tool_call_results(TEST_WORKSPACE, test_results) -``` - -#### Step 3: Summarize Tool Memory -```{code-cell} -# Summarize tool performance from TRAIN_WORKSPACE -summarize_tool_memory(TRAIN_WORKSPACE, "SearchToolA,SearchToolB,SearchToolC") - -# Retrieve formatted tool memory content -memories = retrieve_tool_memory(TRAIN_WORKSPACE, tool_names) -``` - -The summarization produces memory content including: -- Best/worst use cases per tool -- Statistical metrics (avg score, success rate, token cost, time cost) -- Usage recommendations - -#### Step 4: Test with Memory -```{code-cell} -# Clear TEST_WORKSPACE to start fresh -delete_workspace(TEST_WORKSPACE) - -# Inject tool memory into prompt -prompt_with_memory = f"Tool Information\n{memories}\nMust select one tool to answer\nQuery\n{query}" - -# Execute test queries with memory guidance -run_use_mock_search(TEST_WORKSPACE, test_queries, prompt_with_memory) - -# Add results and get scored results -test_scored_results_with_memory = add_tool_call_results(TEST_WORKSPACE, test_results) -``` - -#### Step 5: Compare Results -```{code-cell} -# Generate comparison table -print_comparison_table([train_no_memory_stats, test_no_memory_stats, test_with_memory_stats]) - -# Calculate improvements (baseline: test without memory) -improvements = calculate_improvements(test_no_memory_stats, test_with_memory_stats) -print_improvements(improvements) -``` - -### Multi-Epoch Execution - -```bash -# Run benchmark with 3 epochs -python cookbook/tool_memory/run_reme_tool_bench.py - -# Test mode (5 queries per complexity level) -main(test_mode=True, run_epoch=3) - -# Full mode (20 queries per complexity level) -main(test_mode=False, run_epoch=3) -``` - -## Key Components - -### 1. Tool Selection: UseMockSearchOp - -```{code-cell} -# Agent uses LLM to select appropriate tool -tool_call = await self.select_tool(query, [SearchToolA(), SearchToolB(), SearchToolC()]) - -# Execute selected tool and record results -result = ToolCallResult( - create_time=timestamp, - tool_name=tool_call.name, - input={"query": query}, - output=content, - token_cost=token_cost, - success=success, - time_cost=time_cost -) -``` - -### 2. Tool Call Result Evaluation - -Results are automatically evaluated and scored: -- `score`: 0.0 (failure/irrelevant) or 1.0 (complete success) -- `success`: Tool execution status -- `summary`: Brief description -- `evaluation`: Detailed assessment - -### 3. Tool Memory Schema - -```{code-cell} -ToolMemory( - workspace_id="workspace_id", - memory_type="tool", - when_to_use="Brief usage scenario description", - content="Detailed performance analysis and recommendations", - score=0.85, - tool_call_results=[list of ToolCallResult], - metadata={"tool_name": "SearchToolA"} -) -``` - -## Evaluation Metrics - -### Per-Scenario Metrics -- **Avg Score**: Average quality score (0.0-1.0) -- **Total Calls**: Number of tool invocations -- **Success Rate**: Percentage of successful executions - -### Improvement Calculation -```{code-cell} -improvement_percentage = ((with_memory_score - without_memory_score) / without_memory_score) * 100 -``` - -## Expected Results - -### Hypothesis -Tool Memory should enable the agent to: -1. **Select optimal tools** based on query complexity -2. **Improve average score** by 10-30% on test set -3. **Increase consistency** across multiple epochs - -### Sample Output - -``` -================================================================================================== -BENCHMARK RESULTS COMPARISON -================================================================================================== -Note: Avg Score = average quality score -+---------------------------+--------------+-----------+ -| Scenario | Total Calls | Avg Score | -+===========================+==============+===========+ -| Epoch1 - Train (No Memory)| 60 | 0.650 | -+---------------------------+--------------+-----------+ -| Epoch1 - Test (No Memory) | 60 | 0.633 | -+---------------------------+--------------+-----------+ -| Epoch1 - Test (With Memory)| 60 | 0.817 | -+---------------------------+--------------+-----------+ - -================================================================================================== -IMPROVEMENTS WITH TOOL MEMORY (Baseline: Test without memory) -================================================================================================== -Average Score : +29.07% ↑ -================================================================================================== -``` - -## Running the Benchmark - -### Prerequisites -```bash -pip install requests python-dotenv loguru tabulate -``` - -### Start API Server -```bash -# Start ReMe API server -python reme_ai/app.py --port 8002 -``` - -### Execute Benchmark -```bash -# Full benchmark (3 epochs, 60+60 queries per epoch) -python cookbook/tool_memory/run_reme_tool_bench.py - -# Quick test (3 epochs, 15+15 queries per epoch) -# Modify main() call: main(test_mode=True, run_epoch=3) -``` - -### Output Files -- `tool_memory_benchmark_results.json`: Complete benchmark results -- Console output: Real-time progress and comparison tables - -## API Endpoints Used - -1. **`/use_mock_search`**: Execute tool selection and search - - Input: `workspace_id`, `query` - - Output: `ToolCallResult` JSON - -2. **`/add_tool_call_result`**: Add results to memory and get evaluation scores - - Input: `workspace_id`, `tool_call_results` (list) - - Output: `memory_list` with scored results - -3. **`/summary_tool_memory`**: Summarize tool performance - - Input: `workspace_id`, `tool_names` (comma-separated) - - Output: Updated `ToolMemory` with content - -4. **`/retrieve_tool_memory`**: Retrieve formatted tool memory - - Input: `workspace_id`, `tool_names` - - Output: Markdown-formatted memory content - -5. **`/vector_store`**: Delete workspace - - Input: `workspace_id`, `action: "delete"` - -## Concurrency Control - -- **Max workers**: 4 parallel queries -- **Rate limiting**: 1 second delay between submissions -- **Timeout**: 120 seconds per API call - -## References - -- Tool Memory Schema: `reme_ai/schema/memory.py` -- Mock Tools Implementation: `reme_ai/agent/tools/mock_search_tools.py` -- LLM-based Search Op: `reme_ai/agent/tools/llm_mock_search_op.py` -- Tool Selection Op: `reme_ai/agent/tools/use_mock_search_op.py` diff --git a/docs/tool_memory/tool_memory.md b/docs/tool_memory/tool_memory.md deleted file mode 100644 index 26a0c047..00000000 --- a/docs/tool_memory/tool_memory.md +++ /dev/null @@ -1,835 +0,0 @@ ---- -jupytext: - formats: md:myst - text_representation: - extension: .md - format_name: myst - format_version: 0.13 - jupytext_version: 1.11.5 -kernelspec: - display_name: Python 3 - language: python - name: python3 ---- - -# Tool Memory - -## 1. Background: Why Tool Memory? - -### The MCP Tool Selection Challenge - -In modern AI agent systems, LLMs face a rapidly expanding ecosystem of MCP (Model Context Protocol) tools. With hundreds or thousands of available tools, a critical problem emerges: - -**The Core Problem: Tool Description is Not Enough** - -When an LLM faces numerous MCP tools, it relies heavily on tool descriptions to decide which tool to use and how to use it. However: - -- **Ambiguous Descriptions**: Many tools have similar descriptions but different performance characteristics -- **Hidden Complexity**: Static descriptions can't capture runtime behaviors, edge cases, or failure patterns -- **Parameter Confusion**: Tools may accept similar parameters with different optimal values -- **No Quality Signal**: Descriptions don't tell you which tools are reliable, fast, or cost-effective - -**Example: Web Search Tools** - -Imagine an LLM choosing between three search tools: -``` -Tool A: "Search the web for information" -Tool B: "Perform web searches with customizable parameters" -Tool C: "Query search engines and return results" -``` - -The descriptions are nearly identical, but in reality: -- Tool A: 95% success rate, avg 2.3s, best for technical queries -- Tool B: 70% success rate, avg 5.8s, often times out with >20 results -- Tool C: 85% success rate, avg 3.1s, good for general queries - -**Without historical data, the LLM can't make informed decisions.** - -### The Solution: Tool Memory as Context Enhancement - -Tool Memory solves this by providing **learned context from historical usage**, transforming static tool descriptions into dynamic, data-driven guidance: - -**1. Rule-Based Statistics** (Objective Metrics) -- **Success Rate**: "This tool succeeds 92% of the time" -- **Performance**: "Average execution time: 2.3s, token cost: 150" -- **Usage Patterns**: "Most successful calls use max_results=10-20" - -**2. LLM-as-Judge Evaluation** (Qualitative Insights) -- **Quality Assessment**: LLM evaluates each call's effectiveness -- **Pattern Recognition**: Identifies why some calls succeed and others fail -- **Actionable Recommendations**: Synthesizes guidelines from patterns - -**3. Enhanced Context for LLM Decision-Making** - -Instead of just a tool description, the LLM now receives: - -``` -Tool: web_search - -Static Description: -"Search the web for information" - -+ Tool Memory Context: -"Based on 150 historical calls: -- Success rate: 92% (138 successful, 12 failed) -- Avg time: 2.3s, Avg tokens: 150 -- Best for: Technical documentation, tutorials (95% success) -- Optimal params: max_results=5-20, language='en' -- Common failures: Generic queries timeout, max_results>50 unreliable -- Recommendation: Use specific multi-word queries with filter_type='technical_docs'" -``` - -This enriched context enables the LLM to: -- **Choose the right tool** based on task requirements and reliability -- **Use optimal parameters** learned from successful historical calls -- **Avoid known pitfalls** that caused previous failures -- **Estimate costs** (time and tokens) before execution - -### The Impact: From Static Descriptions to Dynamic Intelligence - -**Traditional Approach (Static Descriptions Only):** -``` -LLM: "I have 50 search tools, all with similar descriptions" -→ Random choice or first match -→ Trial-and-error parameter selection -→ 75% success rate, repeated failures -``` - -**Tool Memory Approach (Description + Historical Context):** -``` -LLM: "I have 50 search tools, but Tool A has 95% success for technical queries" -→ Informed choice based on data -→ Use proven parameter configurations -→ 92% success rate, optimized performance -``` - -**Real-World Impact:** - -``` -Before Tool Memory: -- Success rate: 75% -- Average time cost: 5.2s -- Token cost: 200+ per call -- Repeated parameter errors -- Random tool selection - -After Tool Memory: -- Success rate: 92% (+17%) -- Average time cost: 2.8s (-46%) -- Token cost: 150 per call (-25%) -- Consistent best practices -- Data-driven tool selection -``` - -### Why This Matters for MCP Ecosystem - -As the MCP ecosystem grows, Tool Memory becomes essential: - -1. **Scalability**: LLMs can navigate thousands of tools with confidence -2. **Quality Control**: Tools with poor performance get flagged automatically -3. **Continuous Improvement**: Every call improves the knowledge base -4. **Transfer Learning**: Insights from one agent benefit all agents in the workspace - -**Tool Memory transforms tool descriptions from static documentation into living, learned manuals that improve with every use.** - -## 2. What is Tool Memory? - -Tool Memory is a structured knowledge base that captures insights from tool usage history. Each Tool Memory represents accumulated wisdom about a specific tool. - -### Data Structure - -#### ToolMemory - -`ToolMemory` is the core data structure that stores comprehensive information about a tool's usage patterns: - -```{code-cell} -class ToolMemory(BaseMemory): - memory_type: str = "tool" # Type identifier - workspace_id: str # Workspace identifier - memory_id: str # Unique memory ID - when_to_use: str # Tool name (serves as unique identifier) - content: str # Synthesized usage guidelines - score: float # Overall quality score - time_created: str # Creation timestamp - time_modified: str # Last modification timestamp - author: str # Creator (typically LLM model name) - tool_call_results: List[ToolCallResult] # Historical invocation records - metadata: dict # Additional metadata -``` - -**Key Fields:** -- **`when_to_use`**: The tool name, used as the unique identifier for retrieval -- **`content`**: Human-readable usage guidelines synthesized from historical data -- **`tool_call_results`**: Complete history of tool invocations with evaluations -- **`score`**: Overall quality metric for the tool's performance - -#### ToolCallResult - -Each tool invocation is captured as a `ToolCallResult`: - -```{code-cell} -class ToolCallResult(BaseModel): - create_time: str # Invocation timestamp - tool_name: str # Name of the tool - input: dict | str # Input parameters - output: str # Tool output - token_cost: int # Token consumption - success: bool # Whether invocation succeeded - time_cost: float # Time consumed (seconds) - summary: str # Brief summary of the result - evaluation: str # Detailed evaluation (generated by LLM) - score: float # Evaluation score (0.0 for failure, 1.0 for success) - metadata: dict # Additional metadata -``` - -**Key Fields:** -- **`input`/`output`**: The complete I/O data for analysis -- **`summary`**: LLM-generated brief summary of what happened -- **`evaluation`**: LLM-generated detailed analysis of the call quality -- **`score`**: Binary evaluation (0.0 = failure, 1.0 = success) -- **Performance metrics**: `time_cost`, `token_cost`, `success` for statistical analysis - -### Tool Memory Lifecycle - -```{mermaid} -graph LR - A[Tool Call] --> B[Evaluate] - B --> C[Store Memory] - C --> D[(Vector Store)] - D --> E[Agent Retrieves] - E --> A - C -.Periodic.-> F[Summarize] - F --> C -``` - -## 3. How Tool Memory Works: The Complete Flow - -Tool Memory operates through three complementary operations that work together to create a learning loop: - -```{mermaid} -graph LR - A[Agent] -->|1 retrieve_tool_memory| B[(Vector Store)] - B -->|Guidelines| A - A -->|2 Execute Tool| C[Tool] - C -->|Result| A - A -->|3 add_tool_call_result| D[LLM Evaluate] - D -->|Store| B - B -->|Periodic| E[summary_tool_memory] - E -->|4 Update Guidelines| B -``` - -### Operation Flow - -**1. retrieve_tool_memory** (Before Execution) -- Agent queries: "How should I use `web_search` tool?" -- Retrieves stored guidelines and historical patterns -- Returns: Usage recommendations, parameter suggestions, common pitfalls - -**2. Tool Execution** -- Agent executes tool with informed parameters -- Collects: input, output, time_cost, token_cost, success status - -**3. add_tool_call_result** (After Execution) -- Submits execution data for evaluation -- LLM analyzes: Was it successful? What could be improved? -- Generates: summary, evaluation, score (0.0 or 1.0) -- Appends to tool's historical record in Vector Store - -**4. summary_tool_memory** (Periodic) -- Analyzes recent N tool calls (e.g., last 20-30) -- Calculates statistics: success rate, avg costs, avg score -- LLM synthesizes: Actionable usage guidelines -- Updates the `content` field with comprehensive guidance - -### Example Flow from Demo - -Based on `use_tool_memory_demo.py`, here's a typical workflow: - -```{code-cell} -# Step 1: Add tool call results (accumulate history) -add_tool_call_results([ - {"tool_name": "web_search", "input": {...}, "output": "...", "success": True}, - {"tool_name": "web_search", "input": {...}, "output": "...", "success": False}, - # ... more results -]) - -# Step 2: Generate usage guidelines (periodic) -summarize_tool_memory("web_search") - -# Step 3: Retrieve guidelines before next use -memory = retrieve_tool_memory("web_search") -# Returns: -# "For web_search tool: -# - Use max_results=5-20 for optimal performance -# - Avoid generic queries, be specific -# - Language parameter 'en' has 95% success rate -# Statistics: 83% success, avg 2.3s, avg 150 tokens" - -# Step 4: Agent uses guidelines for better execution -execute_with_recommended_parameters() -``` - -## 4. Operation Details: How to Use Each Component - -### 4.1 `add_tool_call_result` - -**Purpose**: Evaluate and store tool call results into Tool Memory. - -**Flow**: -```yaml -add_tool_call_result: - flow_content: parse_tool_call_result_op >> update_vector_store_op - description: "Evaluates and adds tool call results to the tool memory database" -``` - -**Process**: -1. Receives raw tool call results -2. Uses LLM to evaluate each call (generates summary, evaluation, score) -3. Groups results by tool name -4. Creates or updates ToolMemory objects -5. Stores in Vector Store - -**Configuration** (`default.yaml`): -```yaml -op: - parse_tool_call_result_op: - backend: parse_tool_call_result_op - llm: default - params: - max_history_tool_call_cnt: 100 # Max calls to retain per tool - evaluation_sleep_interval: 1.0 # Delay between evaluations (seconds) -``` - -#### Usage with curl - -```bash -curl -X POST http://0.0.0.0:8002/add_tool_call_result \ - -H "Content-Type: application/json" \ - -d '{ - "workspace_id": "my_workspace", - "tool_call_results": [ - { - "create_time": "2025-10-21 10:30:00", - "tool_name": "web_search", - "input": { - "query": "Python asyncio tutorial", - "max_results": 10, - "language": "en" - }, - "output": "Found 10 relevant results including official docs and tutorials", - "token_cost": 150, - "success": true, - "time_cost": 2.3 - }, - { - "create_time": "2025-10-21 10:32:00", - "tool_name": "web_search", - "input": { - "query": "test", - "max_results": 100, - "language": "unknown" - }, - "output": "Error: Invalid language parameter", - "token_cost": 50, - "success": false, - "time_cost": 0.5 - } - ] - }' -``` - -**Response**: -```json -{ - "success": true, - "answer": "Successfully evaluated and stored 2 tool call results", - "metadata": { - "memory_list": [ - { - "when_to_use": "web_search", - "memory_id": "abc123...", - "tool_call_results": [ - { - "tool_name": "web_search", - "summary": "Successfully retrieved relevant Python asyncio documentation", - "evaluation": "Good parameter choices with appropriate max_results and language settings", - "score": 1.0, - ... - }, - { - "tool_name": "web_search", - "summary": "Failed due to invalid language parameter", - "evaluation": "Query too generic and language parameter not supported", - "score": 0.0, - ... - } - ] - } - ] - } -} -``` - -#### Usage with Python - -```{code-cell} -import requests -from datetime import datetime - -def add_tool_call_results(tool_call_results: list) -> dict: - """Add tool call results to Tool Memory""" - response = requests.post( - url=f"{BASE_URL}add_tool_call_result", - json={ - "workspace_id": WORKSPACE_ID, - "tool_call_results": tool_call_results - } - ) - return response.json() - -# Example: Record a tool invocation -result = add_tool_call_results([{ - "create_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), - "tool_name": "web_search", - "input": {"query": "Python asyncio", "max_results": 10}, - "output": "Found 10 relevant results...", - "token_cost": 150, - "success": True, - "time_cost": 2.3 -}]) -``` - -**Complete examples**: See `cookbook/simple_demo/use_tool_memory_demo.py` for full working code. - ---- - -### 4.2 `retrieve_tool_memory` - -**Purpose**: Retrieve usage guidelines and historical data for specific tools. - -**Flow**: -```yaml -retrieve_tool_memory: - flow_content: retrieve_tool_memory_op - description: "Retrieves tool memories from the vector database based on tool names" -``` - -**Process**: -1. Takes comma-separated tool names as input -2. Searches Vector Store for exact matches (by `when_to_use` field) -3. Returns complete ToolMemory objects with: - - Usage guidelines (`content`) - - Historical call records (`tool_call_results`) - - Statistics and metadata - -#### Usage with curl - -```bash -# Retrieve single tool -curl -X POST http://0.0.0.0:8002/retrieve_tool_memory \ - -H "Content-Type: application/json" \ - -d '{ - "workspace_id": "my_workspace", - "tool_names": "web_search" - }' - -# Retrieve multiple tools (comma-separated) -curl -X POST http://0.0.0.0:8002/retrieve_tool_memory \ - -H "Content-Type: application/json" \ - -d '{ - "workspace_id": "my_workspace", - "tool_names": "web_search,database_query,file_processor" - }' -``` - -**Response**: -```json -{ - "success": true, - "answer": "Successfully retrieved 1 tool memories", - "metadata": { - "memory_list": [ - { - "memory_type": "tool", - "workspace_id": "my_workspace", - "memory_id": "abc123...", - "when_to_use": "web_search", - "content": "## Usage Guidelines\n\n**Best Practices:**\n- Use max_results between 5-20 for optimal performance\n- Always specify language parameter (en has 95% success rate)\n- Avoid generic single-word queries\n\n**Common Pitfalls:**\n- max_results > 50 often causes timeouts\n- Unknown language values default to 'en' with warning\n\n## Statistics\n- **Success Rate**: 83.33%\n- **Average Score**: 0.833\n- **Average Time Cost**: 2.345s\n- **Average Token Cost**: 156.7", - "score": 0.85, - "time_created": "2025-10-20 10:00:00", - "time_modified": "2025-10-21 10:35:00", - "author": "gpt-4", - "tool_call_results": [ - { - "create_time": "2025-10-21 10:30:00", - "tool_name": "web_search", - "input": {"query": "Python asyncio", "max_results": 10}, - "output": "Found 10 results...", - "summary": "Successfully retrieved relevant documentation", - "evaluation": "Good parameter choices...", - "score": 1.0, - "token_cost": 150, - "success": true, - "time_cost": 2.3 - } - // ... more historical calls - ] - } - ] - } -} -``` - -#### Usage with Python - -```{code-cell} -import requests - -def retrieve_tool_memory(tool_names: str) -> dict: - """Retrieve tool memories by tool names""" - response = requests.post( - url=f"{BASE_URL}retrieve_tool_memory", - json={ - "workspace_id": WORKSPACE_ID, - "tool_names": tool_names - } - ) - return response.json() - -# Example: Retrieve and use guidelines -result = retrieve_tool_memory("web_search") -if result['success']: - memory = result['metadata']['memory_list'][0] - print(f"Tool: {memory['when_to_use']}") - print(f"Guidelines:\n{memory['content']}") -``` - -**Complete examples**: See `cookbook/simple_demo/use_tool_memory_demo.py` for full working code. - ---- - -### 4.3 `summary_tool_memory` - -**Purpose**: Analyze historical tool calls and generate comprehensive usage guidelines. - -**Flow**: -```yaml -summary_tool_memory: - flow_content: summary_tool_memory_op >> update_vector_store_op - description: "Analyzes tool call history and generates comprehensive usage patterns" -``` - -**Process**: -1. Retrieves existing ToolMemory by tool name -2. Analyzes recent N tool calls (default: 30) -3. Calculates statistics: - - Success rate - - Average score - - Average time cost - - Average token cost -4. Uses LLM to synthesize actionable guidelines from call summaries -5. Appends statistics to guidelines -6. Updates ToolMemory content in Vector Store - -**Configuration** (`default.yaml`): -```yaml -op: - summary_tool_memory_op: - backend: summary_tool_memory_op - llm: default - params: - recent_call_count: 30 # Number of recent calls to analyze - summary_sleep_interval: 1.0 # Delay between summaries (seconds) -``` - -#### Usage with curl - -```bash -# Summarize single tool -curl -X POST http://0.0.0.0:8002/summary_tool_memory \ - -H "Content-Type: application/json" \ - -d '{ - "workspace_id": "my_workspace", - "tool_names": "web_search" - }' - -# Summarize multiple tools (comma-separated) -curl -X POST http://0.0.0.0:8002/summary_tool_memory \ - -H "Content-Type: application/json" \ - -d '{ - "workspace_id": "my_workspace", - "tool_names": "web_search,database_query,file_processor" - }' -``` - -**Response**: -```json -{ - "success": true, - "answer": "Successfully summarized 1 tool memories", - "metadata": { - "memory_list": [ - { - "memory_type": "tool", - "when_to_use": "web_search", - "content": "## Usage Guidelines\n\n**Optimal Parameters:**\n- Set max_results between 5-20 for best balance of coverage and speed\n- Always specify language='en' for technical queries (95% success rate)\n- Use filter_type='technical_docs' for development-related searches\n\n**Success Patterns:**\n- Specific, multi-word queries perform significantly better than generic terms\n- Queries with clear intent (e.g., 'Python asyncio tutorial') return high-quality results\n- Technical terms and version numbers improve result relevance\n\n**Common Failures:**\n- Generic single-word queries (e.g., 'test') return poor results\n- max_results > 50 increases timeout risk (5 failures observed)\n- Invalid language codes cause fallback to default with warnings\n\n**Performance Insights:**\n- Typical response time: 1.5-3.5s for successful queries\n- Timeout threshold: 10s (consider simplifying complex queries)\n- Token cost scales with result count: ~150 tokens for 10 results\n\n**Recommendations:**\n1. Always validate language parameter before calling\n2. Start with max_results=10, adjust based on needs\n3. For time-sensitive operations, set timeout < 5s\n4. Monitor token costs for high-frequency usage\n\n## Statistics\n- **Success Rate**: 83.33%\n- **Average Score**: 0.833\n- **Average Time Cost**: 2.345s\n- **Average Token Cost**: 156.7", - "memory_id": "abc123...", - "time_modified": "2025-10-21 10:40:00", - ... - } - ] - } -} -``` - -#### Usage with Python - -```{code-cell} -import requests - -def summarize_tool_memory(tool_names: str) -> dict: - """Generate comprehensive usage guidelines for tools""" - response = requests.post( - url=f"{BASE_URL}summary_tool_memory", - json={ - "workspace_id": WORKSPACE_ID, - "tool_names": tool_names - } - ) - return response.json() - -# Example: Generate guidelines -result = summarize_tool_memory("web_search") -if result['success']: - memory = result['metadata']['memory_list'][0] - print(f"Tool: {memory['when_to_use']}") - print(f"Guidelines:\n{memory['content']}") -``` - -**Complete examples**: See `cookbook/simple_demo/use_tool_memory_demo.py` for full working code. - ---- - -## 5. Best Practices - -### When to Record Tool Calls -- **Always**: Record every tool invocation, including failures -- **Include**: Complete input parameters, output, and performance metrics -- **Timing**: Record immediately after tool execution completes - -### When to Generate Summaries -- **Initial**: After accumulating 20-30 tool calls for meaningful patterns -- **Periodic**: Re-summarize every 50-100 new calls or weekly -- **Trigger-based**: When success rate drops or patterns change significantly - -### When to Retrieve Guidelines -- **Before first use**: Always retrieve before using an unfamiliar tool -- **Before critical operations**: Check latest guidelines for important tasks -- **After updates**: Re-retrieve when tool memory has been updated - -### Performance Tuning - -**For High-Volume Tools** (>100 calls/day): -```yaml -op: - parse_tool_call_result_op: - params: - max_history_tool_call_cnt: 200 # Keep more history - evaluation_sleep_interval: 0.5 # Faster evaluation - - summary_tool_memory_op: - params: - recent_call_count: 50 # Analyze more calls -``` - -**For Low-Volume Tools** (<20 calls/day): -```yaml -op: - parse_tool_call_result_op: - params: - max_history_tool_call_cnt: 50 # Less history needed - evaluation_sleep_interval: 1.0 # Standard rate - - summary_tool_memory_op: - params: - recent_call_count: 20 # Analyze fewer calls -``` - -### Quality Maintenance - -1. **Monitor Metrics**: -```{code-cell} - memory = retrieve_tool_memory("web_search")['metadata']['memory_list'][0] - stats = ToolMemory(**memory).statistic(recent_frequency=30) - - print(f"Success Rate: {stats['success_rate']:.2%}") - print(f"Avg Score: {stats['avg_score']:.2f}") - - if stats['success_rate'] < 0.7: - print("⚠️ Low success rate - investigate tool issues") - ``` - -2. **Clean Old Memories**: - - Delete tool memories for deprecated tools - - Reset memories when tool behavior changes significantly - -3. **Validate Guidelines**: - - Periodically review generated guidelines for accuracy - - Test recommended parameters in production scenarios - -## 6. Memory Management - -### Delete Workspace -```bash -curl -X POST http://0.0.0.0:8002/vector_store \ - -H "Content-Type: application/json" \ - -d '{ - "workspace_id": "my_workspace", - "action": "delete" - }' -``` - -```{code-cell} -def delete_workspace(workspace_id: str): - response = requests.post( - url=f"{BASE_URL}vector_store", - json={"workspace_id": workspace_id, "action": "delete"} - ) - return response.json() -``` - -### Dump Memories to Disk -```bash -curl -X POST http://0.0.0.0:8002/vector_store \ - -H "Content-Type: application/json" \ - -d '{ - "workspace_id": "my_workspace", - "action": "dump", - "path": "./memory_backup/" - }' -``` - -```{code-cell} -def dump_memory(workspace_id: str, path: str = "./"): - response = requests.post( - url=f"{BASE_URL}vector_store", - json={"workspace_id": workspace_id, "action": "dump", "path": path} - ) - return response.json() -``` - -### Load Memories from Disk -```bash -curl -X POST http://0.0.0.0:8002/vector_store \ - -H "Content-Type: application/json" \ - -d '{ - "workspace_id": "my_workspace", - "action": "load", - "path": "./memory_backup/" - }' -``` - -```{code-cell} -def load_memory(workspace_id: str, path: str = "./"): - response = requests.post( - url=f"{BASE_URL}vector_store", - json={"workspace_id": workspace_id, "action": "load", "path": path} - ) - return response.json() -``` - -## 7. Complete Working Example - -For a complete, runnable example demonstrating the full Tool Memory lifecycle, see: - -**`cookbook/simple_demo/use_tool_memory_demo.py`** - -This demo includes: -- **Workspace management**: Clean, delete, dump, and load operations -- **Tool call recording**: Adding 30+ mock tool invocations with various scenarios -- **Summarization**: Generating usage guidelines from historical data -- **Retrieval**: Fetching and displaying tool memories -- **Statistics**: Analyzing success rates, costs, and performance - -Run the demo: -```bash -cd cookbook/simple_demo -python use_tool_memory_demo.py -``` - -**Key Workflow Steps:** -1. **Clean workspace**: Remove existing data -2. **Add tool calls**: Record 30+ invocations (success/failure scenarios) -3. **Generate guidelines**: LLM analyzes patterns and creates recommendations -4. **Retrieve memory**: Get usage guidelines for agent consumption -5. **Persistence**: Test dump/load operations - -## 8. Advanced Use Cases - -### Use Case 1: Adaptive Parameter Tuning - -Retrieve tool memory statistics and adapt parameters based on historical performance: -- If `avg_time_cost > 5s`: Increase timeout -- If `success_rate < 80%`: Enable retry logic -- If `avg_token_cost` high: Reduce result limits - -### Use Case 2: Multi-Tool Workflow Optimization - -Retrieve memories for multiple tools at once and optimize workflow order based on: -- Success rates: Execute reliable tools first -- Time costs: Parallelize slow operations -- Token costs: Budget-aware tool selection - -### Use Case 3: Automated Quality Monitoring - -Periodically check tool memory statistics and alert on: -- Success rate degradation -- Increasing time/token costs -- Unusual failure patterns - -**Implementation examples**: See `cookbook/simple_demo/use_tool_memory_demo.py` and the ToolBench evaluation scripts. - -## 9. Benchmark Results - -### Tool Memory Performance Evaluation - -We evaluated Tool Memory effectiveness using a controlled benchmark with three mock search tools, each optimized for different query complexity levels (simple, moderate, complex). The benchmark compares agent performance with and without tool memory guidance across multiple epochs. - -**Experimental Settings:** -- **Model**: Qwen3-30B-Instruct with default parameters -- **Task**: Single-turn tool selection and invocation -- **Dataset**: 60 training queries + 60 test queries per epoch -- **Tools**: 3 mock search tools with varying performance profiles -- **Metrics**: Average quality score (0.0-1.0) based on LLM evaluation -- **Baseline**: Test set performance without tool memory -- **Replication**: Results averaged across 3 independent experimental runs - -**Results (averaged across 3 epochs):** - -| Scenario | Avg Score | Improvement | -|----------|-----------|-------------| -| Train (No Memory) | 0.650 | - | -| Test (No Memory) | 0.672 | Baseline | -| **Test (With Memory)** | **0.772** | **+14.88%** | - -**Key Findings:** -- **Consistent improvement**: Tool Memory boosted test performance by ~15% on average -- **Knowledge transfer**: Training data successfully informed test-time tool selection -- **Stability**: Improvement remained consistent across all 3 epochs (9.90% → 17.39% → 17.13%) - -The benchmark demonstrates that Tool Memory enables agents to make data-driven tool selection decisions, significantly improving task success rates compared to relying solely on static tool descriptions. - -**Benchmark Resources:** -- **Design Documentation**: [`docs/tool_memory/tool_bench.md`](tool_bench.md) - Complete benchmark methodology and workflow -- **Implementation**: [`cookbook/tool_memory/run_reme_tool_bench.py`](../../cookbook/tool_memory/run_reme_tool_bench.py) - Full benchmark script -- **Query Dataset**: [`cookbook/tool_memory/query.json`](../../cookbook/tool_memory/query.json) - 60 train + 60 test queries across 3 complexity levels - ---- - -## 10. References - -- **Implementation**: See `reme_ai/summary/tool/` and `reme_ai/retrieve/tool/` -- **Demo**: `cookbook/simple_demo/use_tool_memory_demo.py` -- **Benchmark**: `cookbook/tool_memory/run_reme_tool_bench.py` -- **Schema**: `reme_ai/schema/memory.py` -- **Utilities**: `reme_ai/utils/tool_memory_utils.py` diff --git a/docs/tool_memory/tool_retrieve_ops.md b/docs/tool_memory/tool_retrieve_ops.md deleted file mode 100644 index e3a6021a..00000000 --- a/docs/tool_memory/tool_retrieve_ops.md +++ /dev/null @@ -1,19 +0,0 @@ -# Tool Memory Retrieval Ops - -## RetrieveToolMemoryOp - -### Purpose - -Retrieves tool memories from the vector database based on tool names, providing usage patterns, best practices, and historical call data. - -### Functionality - -- Accepts comma-separated tool names as input -- Searches the vector store for exact tool name matches -- Validates that retrieved memories are of type "tool" -- Returns complete tool memories including usage guidelines and call history - -### Parameters - -This operation has no configurable parameters. It uses the default vector store configuration. - diff --git a/docs/tool_memory/tool_summary_ops.md b/docs/tool_memory/tool_summary_ops.md deleted file mode 100644 index 0b904f96..00000000 --- a/docs/tool_memory/tool_summary_ops.md +++ /dev/null @@ -1,93 +0,0 @@ ---- -jupytext: - formats: md:myst - text_representation: - extension: .md - format_name: myst - format_version: 0.13 - jupytext_version: 1.11.5 -kernelspec: - display_name: Python 3 - language: python - name: python3 ---- - -# Tool Memory Summary Ops - -## ParseToolCallResultOp - -### Purpose - -Evaluates individual tool invocations and adds them to the tool memory database with comprehensive assessments. - -### Functionality - -- Receives tool call results with input parameters, output, and metadata -- Uses LLM to evaluate each tool call based on success and parameter alignment -- Generates summary, evaluation, and score (0.0 or 1.0) for each call -- Appends evaluated results to existing tool memory or creates new memory -- Maintains a sliding window of recent tool calls (configurable limit) - -### Parameters - -- `op.parse_tool_call_result_op.params.max_history_tool_call_cnt` (integer, default: `100`): - - Maximum number of historical tool call results to retain per tool - - When exceeded, oldest results are removed (FIFO) - -- `op.parse_tool_call_result_op.params.evaluation_sleep_interval` (float, default: `1.0`): - - Delay in seconds between concurrent evaluations - - Prevents rate limiting when evaluating multiple calls - -## SummaryToolMemoryOp - -### Purpose - -Analyzes accumulated tool call history and generates comprehensive usage patterns, best practices, and recommendations. - -### Functionality - -- Retrieves existing tool memories from the vector store -- **Intelligently skips tools** where all recent calls have already been summarized (using `is_summarized` flag) -- Analyzes the most recent N tool calls (configurable) -- Calculates statistical metrics (success rate, average scores, costs) -- Uses LLM to synthesize actionable usage guidelines -- Updates tool memory content with generated insights -- **Marks processed calls** as summarized to avoid redundant processing in future runs - -### Smart Skip Logic - -To optimize costs and performance, `SummaryToolMemoryOp` tracks which tool call results have been included in a summary: - -- **Skip Condition**: If all recent N calls are already summarized (`is_summarized=True`), the tool is skipped entirely -- **Trigger Condition**: If at least 1 recent call is new (`is_summarized=False`), re-summarization is triggered -- **Automatic Marking**: After successful summarization, all processed calls are marked with `is_summarized=True` - -**Example Behavior**: -``` -Run 1: 30 new calls → Summarize all 30, mark as summarized -Run 2: Same 30 calls → Skip (all already summarized) ✓ Cost savings -Run 3: 30 old + 1 new → Re-summarize all 31, mark new call as summarized -``` - -This ensures summaries stay fresh while avoiding unnecessary LLM calls. - -### Parameters - -- `op.summary_tool_memory_op.params.recent_call_count` (integer, default: `30`): - - Number of most recent tool calls to analyze - - Also determines the window for checking summarization status - - Focuses on recent usage patterns - -- `op.summary_tool_memory_op.params.summary_sleep_interval` (float, default: `1.0`): - - Delay in seconds between concurrent summarizations - - Prevents rate limiting when summarizing multiple tools - -### Return Value - -The operation returns a response message indicating: -- Number of tools summarized (had new unsummarized calls) -- Number of tools skipped (all recent calls already summarized) - -Example: `"Successfully processed 5 tool memories: 2 summarized, 3 skipped (already up-to-date)"` - - diff --git a/docs/vector_store_api_guide.md b/docs/vector_store_api_guide.md deleted file mode 100644 index 53ced358..00000000 --- a/docs/vector_store_api_guide.md +++ /dev/null @@ -1,494 +0,0 @@ ---- -jupytext: - formats: md:myst - text_representation: - extension: .md - format_name: myst - format_version: 0.13 - jupytext_version: 1.11.5 -kernelspec: - display_name: Python 3 - language: python - name: python3 ---- - -### Vector Store User Guide - -Vector Store is a component designed for storing, managing, and retrieving vector embeddings. It supports features such as workspace management, similarity search, and metadata filtering. - -## Core Concepts - -**Workspace**: Each workspace is an independent vector storage unit used to organize and manage related vector nodes. - -**VectorNode**: A data unit containing text content, vector embedding, and metadata. It serves as the fundamental unit for storage and retrieval. - -**Embedding Model**: Used to convert text into vector embeddings. It supports automatic generation of both node vectors and query vectors. - -## Available Implementations - -FlowLLM provides multiple Vector Store implementations tailored to different use cases: - -- **LocalVectorStore** ([source code](https://github.com/flowllm-ai/flowllm/blob/main/flowllm/core/vector_store/local_vector_store.py)): A file-based local implementation that persists data in JSONL format. Suitable for single-machine deployments and small-scale datasets. -- **MemoryVectorStore** ([source code](https://github.com/flowllm-ai/flowllm/blob/main/flowllm/core/vector_store/memory_vector_store.py)): An in-memory implementation offering fast access speeds. Ideal for temporary data or testing scenarios. -- **QdrantVectorStore** ([source code](https://github.com/flowllm-ai/flowllm/blob/main/flowllm/core/vector_store/qdrant_vector_store.py)): Built on the Qdrant vector database, supporting high-performance vector search. Recommended for large-scale production environments. -- **ChromaVectorStore** ([source code](https://github.com/flowllm-ai/flowllm/blob/main/flowllm/core/vector_store/chroma_vector_store.py)): Based on ChromaDB, providing persistent storage and metadata filtering capabilities. -- **EsVectorStore** ([source code](https://github.com/flowllm-ai/flowllm/blob/main/flowllm/core/vector_store/es_vector_store.py)): Built on Elasticsearch, enabling powerful combined full-text and vector search functionalities. -- **ObVecVectorStore** ([source code](https://github.com/agentscope-ai/ReMe/blob/main/reme/core/vector_store/obvec_vector_store.py)): Uses [pyobvector](https://pypi.org/project/pyobvector/) against **OceanBase** or **seekdb** (MySQL-compatible wire protocol). Suitable when you already run OceanBase/seekdb or need a SQL-native vector table with HNSW-style ANN search and JSON metadata filters. -- **HologresVectorStore** ([source code](https://github.com/agentscope-ai/ReMe/blob/main/reme/core/vector_store/hologres_store.py)): Uses [asyncpg](https://pypi.org/project/asyncpg/) against **Hologres** (PostgreSQL-compatible). Leverages native `float4[]` vector storage with built-in HGraph index for approximate nearest neighbor search. Suitable when you already run Hologres or need high-performance vector search with JSONB metadata filtering in a PostgreSQL-compatible environment. -- **ZvecVectorStore** ([source code](https://github.com/agentscope-ai/ReMe/blob/main/reme/core/vector_store/zvec_vector_store.py)): Built on zvec, a high-performance local vector database with strong-schema support and HNSW indexing. Suitable for single-machine deployments requiring fast vector search. - -All Vector Store implementations inherit from **BaseVectorStore** ([source code](https://github.com/agentscope-ai/ReMe/blob/main/reme/core/vector_store/base_vector_store.py)) in ReMe, ensuring a consistent interface specification. - -## Core Features - -### Workspace Management - -- **Create Workspace**: Create a new workspace for storing vector nodes. -- **Delete Workspace**: Remove a workspace along with all its data. -- **Check Workspace Existence**: Verify whether a specified workspace exists. -- **List Workspaces**: Retrieve a list of all existing workspaces. -- **Copy Workspace**: Duplicate data from one workspace to another. - -### Node Operations - -- **Insert Nodes**: Insert vector nodes into a workspace, supporting single or batch insertion with automatic vector embedding generation. -- **Delete Nodes**: Remove specific nodes by their IDs. -- **Iterate Nodes**: Traverse all nodes within a workspace. - -### Vector Search - -- **Similarity Search**: Perform vector similarity searches based on text queries, returning the top-K most similar results. -- **Metadata Filtering**: Apply filtering conditions based on metadata, including exact matches and range queries. -- **Similarity Scores**: Search results include similarity scores to evaluate match quality. - -### Data Import/Export - -- **Export Workspace**: Export workspace data to a file or specified path. -- **Import Workspace**: Import data into a workspace from a file or a list of nodes. -- **Callback Functions**: Support callback functions during import/export for data transformation. - -## Synchronous and Asynchronous Interfaces - -All Vector Store implementations provide both synchronous and asynchronous interfaces: - -- **Synchronous Interface**: Direct method calls suitable for synchronous code environments. -- **Asynchronous Interface**: Prefixed with `async_`, designed for asynchronous environments and offering better concurrency performance. - -The asynchronous interface is particularly useful in the following scenarios: -- Using asynchronous embedding models for vector generation. -- Performing batch operations in high-concurrency environments. -- Integrating with other asynchronous components. - -## Configuration Options - -### General Configuration - -- **embedding_model**: Instance of the embedding model used to generate vector embeddings. -- **batch_size**: Batch size for bulk operations (default: 1024). - -### LocalVectorStore Configuration - -- **store_dir**: Storage directory path (default: `./local_vector_store`). - -### MemoryVectorStore Configuration - -- **store_dir**: Persistence directory (default: `./memory_vector_store`). - -### QdrantVectorStore Configuration - -- **url**: Qdrant service URL (optional; used for Qdrant Cloud or custom deployments). -- **host**: Qdrant server host (default: `localhost`). -- **port**: Qdrant server port (default: `6333`). -- **api_key**: API key for Qdrant Cloud authentication. -- **distance**: Distance metric—supports COSINE, EUCLIDEAN, DOT (default: COSINE). - -### ChromaVectorStore Configuration - -- **store_dir**: ChromaDB data storage directory (default: `./chroma_vector_store`). - -### EsVectorStore Configuration - -- **hosts**: Elasticsearch host address(es), either a string or a list (default: `http://localhost:9200`). -- **basic_auth**: Basic authentication credentials (username and password). - -### ObVecVectorStore Configuration - -- **uri**: Server address as `host:port` (default: `127.0.0.1:2881`). -- **user**: MySQL-compatible user. seekdb single-tenant images often use `root`; OceanBase multi-tenant setups typically use `root@` (e.g. `root@test`). -- **password**: Database password (seekdb Docker images commonly set this via `ROOT_PASSWORD`). -- **database**: Logical database name (default: `test`). -- **index_metric**: Distance metric for the vector index: `cosine` or `ip` (inner product); default `cosine`. -- **index_ef_search**: HNSW `ef_search` parameter passed to pyobvector (default: `100`). -- **collection_name**: Table name for the collection (from `VectorStoreConfig`, default `reme`). Use lowercase names if your deployment restricts identifiers. - -**Local seekdb via Docker** - -```text -docker run -d --name reme_seekdb -p 2881:2881 -e ROOT_PASSWORD= quay.io/oceanbase/seekdb:latest -``` - -**Integration tests** (requires a running server, embedding API credentials in `.env`, and matching DB password): - -```shell -OBVEC_PASSWORD= python tests/test_vector_store.py --obvec -``` -### ZvecVectorStore Configuration - -- **db_path**: Local storage path for persistent mode (required). -- **dimension**: Dimensionality of the embedding vectors (default: `1024`). -- **distance**: Distance metric — supports `cosine`, `l2`, `ip` (default: `cosine`). - -### HologresVectorStore Configuration - -- **host**: Hologres host address (default: `localhost`). -- **port**: Hologres port (default: `80`). -- **database**: Database name (default: `postgres`). -- **user**: Database user (default: `postgres`). -- **password**: Database password. -- **schema**: PostgreSQL schema name (default: `public`). -- **min_size**: Minimum connections in pool (default: `1`). -- **max_size**: Maximum connections in pool (default: `10`). -- **dsn**: Full DSN connection string. When provided, overrides `host`, `port`, `database`, `user`, and `password`. -- **distance_method**: Distance method for the HGraph index: `Cosine`, `InnerProduct`, or `Euclidean` (default: `Cosine`). -- **collection_name**: Table name for the collection (from `VectorStoreConfig`, default `reme`). - -## Configuration File Examples - -Configure Vector Store in `flowllm/config/default.yaml` under the `vector_store` section. The basic structure is as follows: - -```yaml -vector_store: - default: - backend: # Required: vector store backend type - embedding_model: default # Required: name of embedding model config - params: # Optional: backend-specific parameters - # Backend-specific parameters -``` - -```shell -vector_store.default.backend= -vector_store.default.params.= -``` - -### Configuration Field Descriptions - -- **`backend`** (required): Vector store backend type. Options: `local`, `memory`, `chroma`, `qdrant`, `elasticsearch`, `obvec`, `zvec`, `hologres`. -- **`embedding_model`** (required): Name of the embedding model configuration, referencing the `embedding_model` section. -- **`params`** (optional): Dictionary of backend-specific parameters passed to the vector store constructor. - -### Configuration Examples by Type - -#### 1. LocalVectorStore Configuration - -Simplest local file-based storage, ideal for development and testing. - -**Implementation**: [`flowllm/core/vector_store/local_vector_store.py`](https://github.com/flowllm-ai/flowllm/blob/main/flowllm/core/vector_store/local_vector_store.py) - -```yaml -vector_store: - default: - backend: local - embedding_model: default - params: - store_dir: "./local_vector_store" # Storage directory (optional; default: "./local_vector_store") -``` - -```shell -vector_store.default.backend=local -vector_store.default.params.store_dir=./local_vector_store -``` - -#### 2. MemoryVectorStore Configuration - -In-memory storage with fast access, suitable for temporary data or testing. - -**Implementation**: [`flowllm/core/vector_store/memory_vector_store.py`](https://github.com/flowllm-ai/flowllm/blob/main/flowllm/core/vector_store/memory_vector_store.py) - -```yaml -vector_store: - default: - backend: memory - embedding_model: default - params: - store_dir: "./memory_vector_store" # Persistence directory (optional; default: "./memory_vector_store") -``` - -```shell -vector_store.default.backend=memory -vector_store.default.params.store_dir=./memory_vector_store -``` - -#### 3. ChromaVectorStore Configuration - -Persistent storage based on ChromaDB with metadata filtering support. - -**Implementation**: [`flowllm/core/vector_store/chroma_vector_store.py`](https://github.com/flowllm-ai/flowllm/blob/main/flowllm/core/vector_store/chroma_vector_store.py) - -```yaml -vector_store: - default: - backend: chroma - embedding_model: default - params: - store_dir: "./chroma_vector_store" # ChromaDB data directory (optional; default: "./chroma_vector_store") -``` - -```shell -vector_store.default.backend=chroma -vector_store.default.params.store_dir=./chroma_vector_store -``` - -#### 4. QdrantVectorStore Configuration - -**Implementation**: [`flowllm/core/vector_store/qdrant_vector_store.py`](https://github.com/flowllm-ai/flowllm/blob/main/flowllm/core/vector_store/qdrant_vector_store.py) - -**Local Qdrant Instance**: - -```yaml -vector_store: - default: - backend: qdrant - embedding_model: default - params: - host: "localhost" # Qdrant server host (optional; default: localhost) - port: 6333 # Qdrant server port (optional; default: 6333) - distance: "COSINE" # Distance metric (optional; default: COSINE; options: COSINE, EUCLIDEAN, DOT) -``` - -```shell -vector_store.default.backend=qdrant -vector_store.default.params.host=localhost -vector_store.default.params.port=6333 -vector_store.default.params.distance=COSINE -``` - -**Qdrant Cloud Configuration**: - -```yaml -vector_store: - default: - backend: qdrant - embedding_model: default - params: - url: "https://your-cluster.qdrant.io:6333" # Qdrant Cloud URL - api_key: "your-api-key-here" # API key - distance: "COSINE" -``` - -```shell -vector_store.default.backend=qdrant -vector_store.default.params.url=https://your-cluster.qdrant.io:6333 -vector_store.default.params.api_key=your-api-key-here -vector_store.default.params.distance=COSINE -``` - -#### 5. EsVectorStore Configuration - -**Implementation**: [`flowllm/core/vector_store/es_vector_store.py`](https://github.com/flowllm-ai/flowllm/blob/main/flowllm/core/vector_store/es_vector_store.py) - -**Basic Configuration (Local Elasticsearch)**: - -```yaml -vector_store: - default: - backend: elasticsearch - embedding_model: default - params: - hosts: "http://localhost:9200" # Elasticsearch host(s) (optional; default: http://localhost:9200) -``` - -```shell -vector_store.default.backend=elasticsearch -vector_store.default.params.hosts=http://localhost:9200 -``` - -**Configuration with Authentication**: - -```yaml -vector_store: - default: - backend: elasticsearch - embedding_model: default - params: - hosts: "http://elasticsearch.example.com:9200" - basic_auth: ["username", "password"] # Basic auth credentials -``` - -```shell -vector_store.default.backend=elasticsearch -vector_store.default.params.hosts=http://elasticsearch.example.com:9200 -vector_store.default.params.basic_auth='["username", "password"]' -``` - -**Multi-Host Configuration**: - -```yaml -vector_store: - default: - backend: elasticsearch - embedding_model: default - params: - hosts: - - "http://es-node1:9200" - - "http://es-node2:9200" - - "http://es-node3:9200" -``` - -```shell -vector_store.default.backend=elasticsearch -vector_store.default.params.hosts='["http://es-node1:9200", "http://es-node2:9200", "http://es-node3:9200"]' -``` - -#### 6. ObVecVectorStore Configuration (OceanBase / seekdb) - -**Implementation**: [`reme/core/vector_store/obvec_vector_store.py`](https://github.com/agentscope-ai/ReMe/blob/main/reme/core/vector_store/obvec_vector_store.py) - -**Example (seekdb on localhost)**: - -```yaml -vector_stores: - default: - backend: obvec - embedding_model: default - collection_name: reme - uri: "127.0.0.1:2881" - user: "root" - password: "your-root-password" - database: "test" - index_metric: "cosine" - index_ef_search: 100 -``` - -```shell -vector_stores.default.backend=obvec -vector_stores.default.uri=127.0.0.1:2881 -vector_stores.default.user=root -vector_stores.default.password=your-root-password -``` - -ReMe service YAML uses the key `vector_stores` (plural); CLI overrides use the same nested paths. - -#### 7. HologresVectorStore Configuration - -**Implementation**: [`reme/core/vector_store/hologres_store.py`](https://github.com/agentscope-ai/ReMe/blob/main/reme/core/vector_store/hologres_store.py) - -**Example (Hologres instance)**: - -```yaml -vector_stores: - default: - backend: hologres - embedding_model: default - collection_name: reme - host: "your-hologres-host" - port: 80 - database: "postgres" - user: "postgres" - password: "your-password" - schema: "public" - distance_method: "Cosine" -``` - -```shell -vector_stores.default.backend=hologres -vector_stores.default.host=your-hologres-host -vector_stores.default.port=80 -vector_stores.default.user=postgres -vector_stores.default.password=your-password -vector_stores.default.database=postgres -``` - -#### 8. ZvecVectorStore Configuration - -Persistent local storage based on zvec with HNSW indexing and strong-schema support. - -**Implementation**: [`reme/core/vector_store/zvec_vector_store.py`](https://github.com/agentscope-ai/ReMe/blob/main/reme/core/vector_store/zvec_vector_store.py) - -```yaml -vector_store: - default: - backend: zvec - embedding_model: default - params: - db_path: "./zvec_vector_store" # Local storage path (required) - dimension: 1024 # Vector dimension (optional; default: 1024) - distance: "cosine" # Distance metric (optional; default: cosine; options: cosine, l2, ip) -``` - -```shell -vector_store.default.backend=zvec -vector_store.default.params.db_path=./zvec_vector_store -vector_store.default.params.dimension=1024 -vector_store.default.params.distance=cosine -``` - -### Complete Configuration Example - -Below is a complete `default.yaml` example including both embedding model and vector store configurations: - -```yaml -# Embedding model configuration -embedding_model: - default: - backend: openai_compatible - model_name: text-embedding-v4 - params: - dimensions: 1024 - -# Vector store configuration -vector_store: - default: - backend: elasticsearch - embedding_model: default - params: - hosts: "http://localhost:9200" -``` - -```shell -# Embedding model configuration -embedding_model.default.backend=openai_compatible -embedding_model.default.model_name=text-embedding-v4 -embedding_model.default.params.dimensions=1024 - -# Vector store configuration -vector_store.default.backend=elasticsearch -vector_store.default.params.hosts=http://localhost:9200 -``` - -### Environment Variable Support - -Certain Vector Stores support environment variables as a supplement to YAML configuration: - -- **Elasticsearch**: `FLOW_ES_HOSTS` – Elasticsearch host address. -- **Qdrant**: - - `FLOW_QDRANT_HOST` – Qdrant host (default: `localhost`) - - `FLOW_QDRANT_PORT` – Qdrant port (default: `6333`) - - `FLOW_QDRANT_API_KEY` – Qdrant API key - -When parameters are not explicitly specified in the YAML configuration, the system falls back to environment variables. - -## Metadata Filtering - -Two types of metadata filtering are supported: - -- **Exact Match**: Specify field values for exact matching. -- **Range Queries**: Use operators `gte`, `lte`, `gt`, `lt` for numeric range queries. -- **Nested Fields**: Access nested metadata fields using dot notation. - -## Usage Recommendations - -- **Development & Testing**: Use MemoryVectorStore or LocalVectorStore—no additional services required. -- **Small-Scale Applications**: Use LocalVectorStore or ChromaVectorStore for simplicity and ease of use. -- **Production Environments**: Use QdrantVectorStore, EsVectorStore, ObVecVectorStore (OceanBase/seekdb), or HologresVectorStore for high performance and scalability, depending on your existing infrastructure. -- **High-Performance Local Search**: Use ZvecVectorStore for single-machine deployments requiring fast HNSW-based vector search with local persistence. -- **Hybrid Search**: Use EsVectorStore to combine vector search with full-text search capabilities. -- **OceanBase / seekdb**: Use ObVecVectorStore when you standardize on pyobvector and SQL-accessible vector tables. -- **Hologres**: Use HologresVectorStore when you run Hologres and need native HGraph-indexed vector search with PostgreSQL-compatible SQL and JSONB metadata filtering. - -## Important Notes - -- Ensure the embedding model’s output dimension matches the Vector Store configuration. -- For large-scale data, use professional vector databases (e.g., Qdrant, Elasticsearch). -- Asynchronous interfaces deliver better performance in asynchronous environments. -- Regularly back up critical data, especially when using in-memory storage. -- Choose an appropriate batch size based on your data scale to optimize performance. diff --git a/docs/work_memory/message_offload.md b/docs/work_memory/message_offload.md deleted file mode 100644 index 9ba33e66..00000000 --- a/docs/work_memory/message_offload.md +++ /dev/null @@ -1,199 +0,0 @@ ---- -jupytext: - formats: md:myst - text_representation: - extension: .md - format_name: myst - format_version: 0.13 - jupytext_version: 1.11.5 -kernelspec: - display_name: Python 3 - language: python - name: python3 ---- - -# Message Offload - -## 1. Background: Why Message Offload? - -### The Agent Context Challenge - -In modern AI agent systems, LLMs interact with tools through iterative loops, accumulating conversation history and tool results. With each iteration, a critical problem emerges: - -**The Core Problem: Context Window Explosion** - -When an agent executes complex tasks, it relies on maintaining conversation history to track progress and make informed decisions. However: - -- **Rapid Context Growth**: Each tool call appends input parameters and output results to message history -- **Token Consumption**: A single tool call can consume hundreds or thousands of tokens, especially for data-heavy operations -- **Context Window Limits**: Most LLMs have finite context windows (e.g., 128K, 200K tokens) -- **Context Rot**: As context grows beyond optimal thresholds, model performance degrades significantly - -**Example: Web Research Agent** - -

    - -

    - -Imagine an agent performing research across multiple sources: -``` -Iteration 1: web_search("AI context management") → 3,500 tokens -Iteration 2: read_webpage(url_1) → 8,200 tokens -Iteration 3: web_search("context compression techniques") → 4,100 tokens -Iteration 4: read_webpage(url_2) → 7,800 tokens -... -Iteration 15: summarize_findings() → Total context: 95,000 tokens -``` - -As context accumulates: -- **At 50K tokens**: Agent performs normally, accurate responses -- **At 100K tokens**: Responses become repetitive, slower inference -- **At 150K tokens**: Significant quality degradation, "context rot" sets in -- **At 200K tokens**: Context window exhausted, cannot continue - -**Without context management, agents hit walls after just 15-20 complex tool calls.** - -### The Solution: Message Offload as Context Engineering - -Message Offload solves this by **intelligently moving non-essential information out of active context**, allowing agents to operate indefinitely while maintaining optimal performance: - -**1. Message Compaction** (Reversible Strategy) -- **Selective Storage**: Large tool results stored in external files -- **Reference Retention**: Only file paths kept in message history -- **On-Demand Retrieval**: Full content can be retrieved when needed - -**2. Message Compression** (LLM-Based Strategy) -- **Intelligent Summarization**: LLM generates concise summaries of older message groups -- **Priority Preservation**: Recent messages and system prompts remain intact -- **Information Density**: Maintains key information while reducing token count - -**3. Hybrid Auto Mode** (Adaptive Strategy) -- **Compaction First**: Applies compaction to tool messages -- **Compression When Needed**: Triggers compression if compaction ratio exceeds threshold -- **Dynamic Adjustment**: Adapts strategy based on context characteristics - -### Enhanced work memory management - -Instead of letting context grow uncontrollably, the agent now benefits from: - -``` -Traditional Approach (No Context Management): -50 messages → 95,000 tokens → Context rot begins -- Response quality: Degraded -- Inference speed: Slow -- Can continue: No (approaching limit) -- Information lost: No, but unusable - -+ Message Offload Approach: -50 messages → 15,000 tokens (after offload) → Optimal performance maintained -- Response quality: High -- Inference speed: Fast -- Can continue: Yes (85% headroom remaining) -- Information lost: No (stored externally, retrievable) - -Offload Details: -- 20 tool messages compacted → Stored in /context_store/ -- 15 older messages compressed → Summarized in system message -- 5 recent messages preserved → Full content intact -- External storage: 80,000 tokens offloaded -- Active context: 15,000 tokens (84% reduction) -``` - -This managed context enables the agent to: -- **Operate Indefinitely**: No hard limit on conversation length -- **Maintain Performance**: Stay within optimal token range (10-30K tokens) -- **Preserve Information**: All data accessible through file system or summaries -- **Optimize Costs**: Reduce token consumption by 70-90% in long conversations - -### The Impact: From Context Explosion to Controlled Growth - -**Traditional Approach (No Work Memory Management):** -``` -Agent: "I've executed 20 tool calls, context is now 100K tokens" -→ Performance degradation begins -→ Slower responses, repetitive outputs -→ Cannot continue beyond 30 calls -→ Task abandoned due to context limits -``` - -**Message Offload Approach (Intelligent Management):** -``` -Agent: "I've executed 100 tool calls, active context maintained at 18K tokens" -→ Optimal performance throughout -→ Fast, accurate responses -→ Can continue indefinitely -→ All historical data accessible when needed -``` - -**Real-World Impact:** - -``` -Before Message Offload (20 tool calls): -- Active context: 95,000 tokens -- Performance: Degraded (context rot) -- Can continue: No (near limit) -- Response quality: 6/10 -- Inference time: 8-12 seconds -- Max task complexity: Low (15-20 calls) - -After Message Offload (100 tool calls): -- Active context: 18,000 tokens (-81%) -- Performance: Optimal -- Can continue: Yes (90% headroom) -- Response quality: 9/10 -- Inference time: 2-4 seconds (-70%) -- Max task complexity: High (100+ calls) -``` -## 2. Implementation in ReMe - -ReMe has fully implemented the above-mentioned message offload and reload mechanisms, inspired by [Context Engineering for AI Agents with LangChain and Manus](https://www.youtube.com/watch?v=6_BcCthVvb8). The implementation provides two core operation primitives: - - -### (1) Message Offload Operations - -Operations for intelligently reducing context size through compaction and compression strategies. - -📖 **Detailed Usage Guide**: [Message Offload Ops](message_offload_ops.md) - -Key features: -- Three working summary modes: compact, compress, and auto -- Intelligent token threshold management -- Integration with file storage system -- Complete working examples in test files - -### (2) Message Reload Operations - -Operations for retrieving and accessing offloaded content when needed. - -📖 **Detailed Usage Guide**: [Message Reload Ops](message_reload_ops.md) - -Key features: -- Text search within offloaded files (GrepOp) -- Efficient file reading with pagination (ReadFileOp) -- Support for both absolute and relative paths -- Complete working examples in test files - -Both operation primitives are production-ready and can be integrated into your agent workflows. Refer to the linked documentation for API specifications, parameter details, and practical usage examples. - -## 3. Integrating Working Memory with Agents - -ReMe provides a complete tutorial on integrating working memory mechanisms with agent workflows. This integration enables agents to handle long-running tasks efficiently while maintaining optimal context window usage. - -### Resources - -📖 **Tutorial Guide**: [Working Memory Quick Start](../cookbook/working/quick_start.md) -- Step-by-step guide on integrating working memory with agents -- Configuration examples and best practices -- Real-world usage scenarios - -💻 **Implementation Reference**: [react_agent_with_working_memory.py](../../cookbook/working_memory/react_agent_with_working_memory.py) -- Complete implementation of a ReAct agent with working memory -- Shows how to configure message offload and reload operations -- Production-ready code template - -🚀 **Demo Application**: [work_memory_demo.py](../../cookbook/working_memory/work_memory_demo.py) -- Runnable demonstration of working memory in action -- Practical examples with different scenarios -- Easy to adapt for your own use cases - -These resources provide everything you need to add intelligent working memory management to your agent applications. \ No newline at end of file diff --git a/docs/work_memory/message_offload_ops.md b/docs/work_memory/message_offload_ops.md deleted file mode 100644 index c05e22f7..00000000 --- a/docs/work_memory/message_offload_ops.md +++ /dev/null @@ -1,108 +0,0 @@ ---- -jupytext: - formats: md:myst - text_representation: - extension: .md - format_name: myst - format_version: 0.13 - jupytext_version: 1.11.5 -kernelspec: - display_name: Python 3 - language: python - name: python3 ---- - -# Message Offload Ops - -## MessageOffloadOp - -### Purpose - -As AI agents evolved from simple chatbots to sophisticated autonomous systems, the focus shifted from "prompt engineering" to "context engineering". Agentic systems work by binding LLMs with tools and running them in a loop where the agent decides which tools to call and feeds results back into the message history. This creates a **context explosion** problem: - -- **Rapid Growth**: A seemingly simple task can trigger 50+ tool calls, with production agents often running hundreds of conversation turns -- **Large Outputs**: Each tool call can return substantial text, consuming massive amounts of tokens -- **Memory Pressure**: The context window quickly fills up as messages and tool results accumulate chronologically - -When context grows too large, model performance degrades significantly—a phenomenon known as **"context rot"**: - -- **Repetitive Responses**: The model starts generating redundant or circular answers -- **Slower Reasoning**: Inference becomes noticeably slower as context length increases -- **Quality Degradation**: Overall response quality and coherence decline -- **Lost Focus**: The model struggles to identify relevant information in the bloated context - -**MessageOffloadOp** addresses this fundamental challenge by managing context window limits through intelligent offloading strategies. It implements compaction and compression techniques to reduce token usage while preserving important information, enabling agents to handle arbitrarily long conversations and complex tasks while maintaining optimal performance throughout. - -### Functionality - -- Supports three working summary modes: `compact`, `compress`, and `auto` -- **Compact mode**: Stores full content of large tool messages in external files, keeping only previews in context -- **Compress mode**: Uses LLM to generate concise summaries of older message groups -- **Auto mode** (recommended): Applies compaction first, then compression if compaction ratio exceeds `compact_ratio_threshold` -- Automatically writes offloaded content to files via `BatchWriteFileOp` -- Preserves recent messages and system messages to maintain conversation coherence -- Configurable token thresholds for both compaction and compression operations - -### Parameters - -- `messages` (array, **required**): - - List of conversation messages to process for working memory summarization - - Messages are analyzed for token count and processed according to management mode - -- `working_summary_mode` (string, optional, default: `"auto"`): - - Working summary strategy to use - - `"compact"`: Only applies compaction to large tool messages - - `"compress"`: Only applies LLM-based compression - - `"auto"`: Applies compaction first then compression if compaction ratio exceeds threshold - - Allowed values: `["compact", "compress", "auto"]` - -- `compact_ratio_threshold` (number, optional, default: `0.75`): - - Only used in `"auto"` mode - - Threshold for compaction ratio (tokens after compaction divided by original tokens) - - When the ratio is greater than this value, an additional LLM-based compression pass is triggered - - Example: If ratio is 0.76 (76%) and threshold is 0.75, compression will be applied - -- `max_total_tokens` (integer, optional, default: `20000`): - - Maximum token count threshold for triggering compression/compaction - - For compaction mode: this is the total token count threshold - - For compression mode: excludes `keep_recent_count` messages and system messages - - Operation is skipped if token count is below this threshold - -- `max_tool_message_tokens` (integer, optional, default: `2000`): - - Maximum token count per individual tool message before compaction is applied - - Tool messages exceeding this threshold will have full content stored in external files - - Only a preview is kept in context with a reference to the stored file - -- `group_token_threshold` (integer, optional): - - Maximum token count per compression group when using LLM-based compression - - If `None` or `0`, all messages are compressed in a single group - - Messages exceeding this threshold individually will form their own group - - Only used in `"compress"` or `"auto"` mode - -- `keep_recent_count` (integer, optional, default: `1` for compaction, `2` for compression): - - Number of recent messages to preserve without compression or compaction - - These messages remain unchanged to maintain conversation context - - Does not include system messages (which are always preserved) - -- `store_dir` (string, optional): - - Directory path for storing summarized message content - - Full tool message content and compressed message groups are saved as files in this directory - - Required for compaction and compression operations - -- `chat_id` (string, optional): - - Unique identifier for the chat session - - Used for file naming when storing compressed message groups - - If not provided, a UUID will be generated automatically - -### Usage Pattern -For complete working examples of how to use MessageOffloadOp in practice, please refer to: -[test_message_offload_op.py](../../test/test_message_offload_op.py) - -This test file demonstrates: -- **Compact mode**: How to configure and use compaction-only strategy -- **Compress mode**: How to apply LLM-based compression strategy -- **Auto mode**: How to combine compaction and compression intelligently -- Proper parameter settings for different scenarios -- Integration with `BatchWriteFileOp` for file writing -- Real-world message sequences with various token sizes - diff --git a/docs/work_memory/message_reload_ops.md b/docs/work_memory/message_reload_ops.md deleted file mode 100644 index c03f478d..00000000 --- a/docs/work_memory/message_reload_ops.md +++ /dev/null @@ -1,124 +0,0 @@ ---- -jupytext: - formats: md:myst - text_representation: - extension: .md - format_name: myst - format_version: 0.13 - jupytext_version: 1.11.5 -kernelspec: - display_name: Python 3 - language: python - name: python3 ---- - -# Message Reload Ops - -## GrepOp - -### Purpose - -Provides a text search capability for locating specific content within offloaded files by pattern matching. This operation enables case-insensitive search within a single file, making it easy to find specific lines in tool messages or compressed groups. - -### Functionality - -- Searches for literal text patterns (case-insensitive) within a single file -- Limits result count to avoid overwhelming output (default: 50 matches) -- Returns matching lines with file path, line number, and content -- Ideal for locating specific content within known offloaded files - -### Parameters - -- `file_path` (string, **required**): - - The path to the file to search in - - Can be an absolute or relative path - - Must be a valid file path (not a directory) - - Examples: - - `/workspace/context_store/tool_call_123.txt` - - `./context_store/compressed_group_0.json` - -- `pattern` (string, **required**): - - The text pattern to search for in the file - - Search is case-insensitive - - Searched as a literal string (special regex characters are escaped) - - Examples: `"stored in"`, `"error message"`, `"function_name"` - -- `limit` (number, optional, default: `50`): - - Maximum number of matching lines to return - - Stops searching after reaching the limit - - Useful for large files to avoid token overflow - - Example: `100` returns at most 100 matching lines - -### Return Value - -The operation returns search results with matching lines: -- Each match is formatted as: `file_path:line_number:line_content` -- Returns up to `limit` matches -- If no matches found, returns a message indicating no matches -- Each match shows the complete line containing the pattern - -Example: Searching for `"error"` in `/workspace/context_store/tool_call_123.txt` with limit 50 returns matching lines like: -``` -/workspace/context_store/tool_call_123.txt:45:Error: Connection timeout -/workspace/context_store/tool_call_123.txt:78:Warning: Retrying after error -``` - -## ReadFileOp - -### Purpose - -Reads and returns the content of offloaded files, enabling on-demand access to compacted tool messages and compressed conversation history. Supports efficient pagination for handling large files. - -### Functionality - -- Reads file content from specified path (absolute or relative) -- Supports pagination with offset and limit for reading specific line ranges -- Uses efficient `sed` command for line-based reading -- Works with text files -- Essential for retrieving full content of compacted tool messages -- Enables access to original message groups before compression - -### Parameters - -- `file_path` (string, **required**): - - The path to the file to read - - Can be absolute or relative path - - Path will be expanded and resolved automatically - - Examples: - - `/workspace/context_store/tool_call_123.txt` - - `./context_store/compressed_group_0.json` - - `~/context_store/message.txt` - -- `offset` (number, **required** but has default): - - The 0-based line number to start reading from - - If not provided or 0, starts from the beginning of the file - - Used in combination with `limit` for pagination - - Example: `0` starts from the first line, `100` starts from line 100 - -- `limit` (number, **required** but has default): - - Maximum number of lines to read from the offset - - If not provided, defaults to 1,000,000 (reads to end of file) - - Used with `offset` to implement pagination - - Example: `100` reads up to 100 lines from the offset - -### Return Value - -The operation returns the file content as a string: -- Content of the specified line range (from `offset` to `offset + limit`) -- Lines are returned without trailing newlines -- Empty string if the specified range is beyond the file's content -- Error message if file not found or cannot be read - -Example: Reading `/workspace/context_store/tool_call_123.txt` with `offset=0` and `limit=100` returns the first 100 lines of the file. - -## Usage Pattern: Combining Grep and ReadFile - -For a complete working example of how to use these operations in practice, please refer to: -[test_agentic_retrieve_op.py](../../test/test_agentic_retrieve_op.py) - -This test file demonstrates: -- How to configure the system prompt to guide AI in using Grep and ReadFile operations -- Real-world usage scenarios with message offload and reload -- Proper parameter settings for `AgenticRetrieveOp` with working memory -- Best practices for combining these operations in a retrieval workflow - diff --git a/docs4/auto_dream_logic_and_step_refactor.md b/docs4/auto_dream_logic_and_step_refactor.md deleted file mode 100644 index 46aa4942..00000000 --- a/docs4/auto_dream_logic_and_step_refactor.md +++ /dev/null @@ -1,943 +0,0 @@ -# auto_dream 逻辑解读与 Step 拆分方案 - -## 1. 配置入口 - -`/Users/yuli/workspace/ReMe/reme4/config/default.yaml` 里和 auto dream 相关的是四个 job: - -| job | 用途 | 当前 steps | -|---|---|---| -| `dream` | 对单个文件做完整 dream,并顺手写一次 daily topics | `dream_step` -> `daily_topics_step` | -| `dream_extract` | auto_dream 内部使用的单文件 dream,只抽取和整合 digest,不写 daily topics | `dream_step` | -| `auto_dream` | 扫描某一天的 daily index 和 session notes,只处理新增/修改文件,最后聚合写当天兴趣主题 | `auto_dream_step` | -| `daily_topics` | 从 dream 产生的 topic candidates 中选最终兴趣主题,写 `daily//interests.md` | `daily_topics_step` | - -关键点: - -- `dream` 和 `auto_dream` 不是同一条链路。 -- `dream` 是单文件命令,执行 `dream_step` 后立刻执行 `daily_topics_step`。 -- `auto_dream` 默认 `dispatch_job: dream_extract`,所以它对每个文件只跑 `dream_step`,把所有文件产生的 `topic_candidates` 收集起来,最后只调用一次 `daily_topics`。 -- `auto_dream` 默认写 3 个 topic,回看 7 天去重,输出 session id 是 `interests`。 - -配置片段的实际语义: - -```yaml -auto_dream: - steps: - - backend: auto_dream_step - dispatch_job: dream_extract - emit_topics: true - topic_dispatch_job: daily_topics - topic_count: 3 - topic_diversity_days: 7 - topic_session_id: interests -``` - -也就是说,`auto_dream` 本身是一个调度器和增量扫描器,真正的 LLM dream 逻辑在 `DreamStep`,topic 写入在 `DailyTopicsStep`。 - -## 2. auto_dream_step 执行链路 - -实现位置: - -- `reme4/steps/evolve/auto_dream.py` -- `reme4/steps/evolve/dream.py` -- `reme4/steps/evolve/daily_topics.py` -- `reme4/steps/file_io/_daily_index.py` - -### 2.1 读取输入和默认日期 - -`AutoDreamStep.execute()` 从 runtime context 读取: - -| 参数 | 语义 | -|---|---| -| `date` | 要扫描的日期,空字符串时用配置 timezone 下的今天 | -| `hint` | 透传给每个单文件 dream 的提示 | - -日期默认逻辑: - -```text -date_input 非空 -> 使用 date_input -date_input 为空 -> now(app_config.timezone).strftime("%Y-%m-%d") -``` - -`daily_dir` 不来自用户参数,而是来自 app config,默认是 `daily`。 - -### 2.2 先刷新 day-index - -正式扫描前,auto_dream 会先调用: - -```python -await refresh_day_index(self.file_store, today, daily_dir) -``` - -它会重建: - -```text -daily/.md -``` - -这个 day-index 文件包含 `daily//` 下每个 session note 的链接和 frontmatter 摘要。这样 auto_dream 后续处理的第一个文件就是当天总览。 - -隐含结果: - -- 如果 session notes 有新增/删除/frontmatter 变化,day-index 的内容可能变化。 -- day-index 被放在扫描列表第一位,所以当天总览先于具体 session note 被 dream。 - -### 2.3 扫描当天文件范围 - -扫描范围由 `_scan_today_files(vault, today, daily_dir)` 决定: - -```text -1. daily/.md -2. daily//**/*.md -``` - -处理顺序: - -```text -daily/.md first -daily//**/*.md sorted by path -``` - -但 auto_dream 会排除: - -```text -daily//interests.md -``` - -也就是 `topic_session_id` 对应的 daily topics 文件。原因是 `interests.md` 是 auto_dream 自己产出的兴趣主题,不能再作为 dream 输入,否则容易自我循环。 - -### 2.4 用 file_catalog 做增量判断 - -auto_dream 构造两张表: - -| 名称 | 来源 | 内容 | -|---|---|---| -| `existing` | 当前磁盘 | `{vault_relative_path: st_mtime}` | -| `indexed` | `file_catalog.get_nodes()` | `{vault_relative_path: st_mtime}` | - -`indexed` 只保留当天范围: - -```text -daily/.md -daily//* -``` - -并且同样排除: - -```text -daily//interests.md -``` - -然后做 diff: - -| 条件 | 分类 | 行为 | -|---|---|---| -| `rel in existing`,但 catalog 没有 | added | 需要 dream | -| `rel in existing`,但 mtime 不同 | modified | 需要 dream | -| `rel in existing`,且 mtime 相同 | unchanged | 跳过 | -| catalog 有,但磁盘没有 | deleted | 从 catalog 删除 | - -注意这里的 `file_catalog` 更像是 auto_dream 的“已处理 mtime 水位线”,不是语义索引本身。默认配置没有给 `auto_dream_step` 显式传 `file_catalog`,所以按 `BaseStep.Ref` 规则解析到 `file_catalog.default`。 - -### 2.5 先删除 catalog 中的缺失文件 - -如果某些当天文件已经不存在: - -```python -await self.file_catalog.delete(to_delete) -``` - -这一步不需要 LLM,也不会阻塞后续 dream。删除失败只记录日志,当前实现不会把它计入 `result.files_failed`。 - -### 2.6 对新增/修改文件逐个 dispatch dream_extract - -对每个 `to_dream` 文件,auto_dream 调: - -```python -resp = await self.run_job("dream_extract", path=rel_path, hint=hint) -``` - -`dream_extract` 只有一个 step: - -```yaml -steps: - - backend: dream_step -``` - -`AutoDreamStep._dispatch_dream()` 会把 `resp.metadata` 重新校验成 `DreamResult`。如果 job 抛异常、metadata 不是 `DreamResult`、或 response `success=False`,都会转成带 `error` 的 `DreamResult`。 - -### 2.7 单文件 DreamStep 内部逻辑 - -`DreamStep.dream_one(path, hint)` 是真正的 per-file create_or_update。 - -它的主流程: - -```text -1. path 为空 -> skipped -2. 没有 LLM -> error -3. _pack_material() 读取 vault-relative 文件内容 -4. Phase 1: _extract() -5. 如果 Phase 1 没有 units -> skipped,但保留 topic_candidates -6. Phase 2: 对每个 unit 调 _integrate_unit() -7. 返回 DreamResult -``` - -#### Phase 1: extract - -工具: - -```python -_EXTRACT_TOOLS = ("read",) -``` - -输出 schema 是 `ExtractedUnits`: - -```text -units: list[MemoryUnit] -topic_candidates: list[TopicCandidate] -``` - -每个 memory unit 包含: - -| 字段 | 语义 | -|---|---| -| `name` | agent 内部短名 | -| `bucket` | `procedure` / `personal` / `wiki` 三选一 | -| `summary` | 这个抽象是什么,证据在哪 | - -每个 topic candidate 包含: - -| 字段 | 语义 | -|---|---| -| `title` | 兴趣主题标题 | -| `reason` | 为什么用户可能关心 | -| `evidence` | 证据指针 | -| `keywords` | 去重关键词 | - -如果 LLM 输出了未知 bucket,当前代码会警告并改成 `wiki`。 - -#### Phase 2: integrate - -每个 unit 单独发起一次 ReAct: - -```text -system prompt = integrate_system_prompt_ -``` - -工具: - -```python -_INTEGRATE_TOOLS = ( - "node_search", - "read", - "frontmatter_read", - "write", - "edit", - "frontmatter_update", -) -``` - -输出 schema 是 `IntegrateOutcome`: - -| 字段 | 语义 | -|---|---| -| `action` | `CREATE` / `CORROBORATE` / `REFINE` / `CORRECT` | -| `target_path` | 实际写入或更新的 digest path | -| `note` | 简短说明 | - -`DreamStep` 根据 action 统计: - -```text -CREATE -> nodes_created -其他 action -> nodes_updated -``` - -当前实现里,某个 unit 的 integrate 失败不会让整个 DreamResult 变成 error,只会在 summary 里记录 `FAILED`。这意味着文件级别仍会被 auto_dream 当作成功并写入 catalog mtime。 - -### 2.8 汇总 per-file 结果并更新 catalog - -auto_dream 对每个文件的 `DreamResult` 做三件事: - -| 情况 | 行为 | -|---|---| -| `dr.error` 非空 | `files_failed += 1`,不更新这个文件的 catalog mtime,下次会重试 | -| `dr.skipped` 为 true | `files_skipped += 1`,仍然 upsert mtime,避免每次重复跑 Phase 1 | -| 正常 dream | `files_dreamed += 1`,upsert mtime | - -同时收集: - -```python -topic_candidates.extend(dr.topic_candidates or []) -``` - -最后批量: - -```python -await self.file_catalog.upsert(upsert_nodes) -``` - -### 2.9 聚合写 daily topics - -如果: - -```text -emit_topics == true -topic_candidates 非空 -``` - -auto_dream 会调用: - -```python -await self.run_job( - "daily_topics", - date=today, - candidates=topic_candidates, - topic_count=3, - diversity_days=7, - session_id="interests", -) -``` - -`DailyTopicsStep` 做: - -```text -1. 清洗 candidates -2. 读取过去 diversity_days 天的 interests.md -3. 有 LLM 时用 select prompt 选最终 topics -4. 没有 LLM 时 fallback: 简单标题去重 -5. 写 daily//interests.md -6. refresh_day_index() -``` - -写出的文件形态: - -```text -daily//interests.md -``` - -frontmatter 包含: - -```yaml -name: interests -description: " interest topic(s) inferred for ." -date: -topic_count: 3 -diversity_days: 7 -``` - -body 是 `# Interested Topics` 加编号列表。 - -auto_dream 收到 daily_topics 成功响应后,还会把这些文件的最新 mtime 写入 catalog: - -```text -daily//interests.md -daily/.md -``` - -这里有一个隐含行为:day-index 在 per-file dream 之后又因为 `interests.md` 被写入而刷新,auto_dream 会把刷新后的 `daily/.md` mtime 标记为已处理。也就是说,仅由 interests 写入引发的 day-index 变化不会在下一轮再次触发 dream。 - -### 2.10 持久化与响应 - -如果: - -```text -persist == true -并且有 upsert 或 delete -``` - -则: - -```python -await self.file_catalog.dump() -``` - -最终 response: - -```text -success = files_failed == 0 and not topics_error -answer = AutoDreamResult.summary -metadata = AutoDreamResult.model_dump() -``` - -summary 格式大致是: - -```text -[AutoDreamStep] date=2026-06-18 scanned=... unchanged=... dreamed=... skipped=... failed=... deleted=... - - daily/2026-06-18.md: OK (+1 created, ~2 updated) - - daily/2026-06-18/session.md: SKIP - - topics: OK (3 written to daily/2026-06-18/interests.md) -``` - -## 3. 当前逻辑的边界和风险 - -### 3.1 AutoDreamStep 职责过重 - -`AutoDreamStep` 同时负责: - -- 日期解析 -- day-index 刷新 -- 文件扫描 -- catalog diff -- 删除 catalog -- per-file job dispatch -- DreamResult 校验 -- topic candidates 汇总 -- daily_topics job dispatch -- topic 输出后的 catalog upsert -- catalog dump -- summary 渲染 - -这些职责可以拆成明确 step,提高可测试性和可替换性。 - -### 3.2 file_catalog 的语义不够显式 - -这里的 catalog 不是“今天有哪些文件”的普通目录索引,而是“哪些文件已经被 auto_dream 处理到某个 mtime”。建议在拆分后把它显式命名为 dream catalog / processed catalog,至少在 step 名和文档中说清楚。 - -### 3.3 integrate unit 失败不会触发文件重试 - -`DreamStep` 当前捕获单个 unit integrate 异常,写进 summary 后继续,但不设置 `DreamResult.error`。auto_dream 因此会把这个文件 mtime upsert,下次不会自动重试失败 unit。 - -这可能是有意的“尽量前进”,但如果要做严格一致性,应改成: - -```text -任一 unit integrate 失败 -> DreamResult.error 非空 -> auto_dream 不更新 mtime -``` - -### 3.4 topic 写入导致的 day-index 变化被标记为已处理 - -auto_dream 写 `interests.md` 后刷新 day-index,并把 day-index 最新 mtime upsert 到 catalog。这样可以避免自生成内容触发循环,但也意味着 `daily/.md` 中新增的 `interests.md` 链接不会被 dream。 - -这通常是合理的,因为 `interests.md` 本身被排除在 dream 输入之外。 - -### 3.5 删除 catalog 失败不影响 success - -删除 catalog entry 失败只打日志,不会让 response failure。拆分后可以明确这个策略: - -- catalog delete 是 best-effort,不影响 dream 主流程 -- 或者 catalog delete 失败应导致整个 job failure - -## 4. 拆分目标 - -重新拆分时,不按“每个小动作一个 step”拆,而按执行边界拆: - -```text -非 LLM 准备/扫描/diff - -> LLM: per-file dream - -> LLM: daily topics - -> 非 LLM response 汇总 -``` - -核心原则: - -- 使用 LLM 的阶段单独成 step,便于限流、重试、观测和替换模型。 -- 不使用 LLM 的准备、扫描、diff 可以合并,避免 step 过碎。 -- catalog 只是 auto_dream 的内部进度水位线,不提升为独立阶段。 -- prompt 重新写,但可以复用旧 prompt 的核心内容和约束。 -- 不做旧接口/旧格式兼容;按新 4-step pipeline 重新定义最干净的输入输出。 - -## 5. 新方案:拆成 4 个 Step - -新方案不再是“逐文件 extract + 逐文件 integrate”。核心变化是: - -```text -本轮 changed files - -> 1 个 agent 一次性阅读所有 changed paths - -> 输出全局去重/合并后的 unit list - -> Python for 循环逐 unit integrate -``` - -这样一个抽象可能来自多个文件,Phase 1 就能合并为同一个 unit,避免同一天多个 session note 反复提出同一概念。 - -目标代码位置: - -```text -reme4/steps/evolve/dream/ - __init__.py - models.py - plan.py - extract.py - integrate.py - topics.py - finish.py - prompts.yaml 或 dream.yaml -``` - -重构完成后删除旧文件,不保留兼容 alias: - -```text -reme4/steps/evolve/dream.py -reme4/steps/evolve/auto_dream.py -reme4/steps/evolve/daily_topics.py -``` - -### 5.0 Step 输入输出总表 - -| Step | 是否 LLM | 核心能力 | 输入 | 输出 / 写入 context | 副作用 | -|---|---:|---|---|---|---| -| `dream_extract_step` | 是 | 根据 dream catalog 找出本轮新增/修改/删除文件,把所有 changed paths 交给一个 agent,一次性输出跨文件合并后的 `unit_list` 和 `topic_list` | `context.date`; `context.hint`; `app_config.daily_dir`; `app_config.timezone`; `file_store.vault_path`; `file_catalog.dream`; step 参数 `topic_session_id=interests` | `dream.date`; `dream.hint`; `dream.daily_dir`; `dream.vault`; `dream.existing`; `dream.indexed`; `dream.changed_paths`; `dream.deleted_paths`; `dream.units`; `dream.topics`; `dream.extract_summary`; `dream.result.files_scanned/files_changed/files_deleted`; `dream.errors` | 刷新 `daily/.md`; 删除 catalog 中缺失文件 entry; 读取所有 changed files; 本 step 不写 digest | -| `dream_integrate_step` | 是 | `for unit in units` 逐个执行原 Phase 2 integrate 逻辑,保持 node_search/read/write/edit/frontmatter_update 工具和 bucket prompt 不变 | `dream.units`; `dream.hint`; `dream.vault`; `app_config.digest_dir`; agent tools: `node_search/read/frontmatter_read/write/edit/frontmatter_update` | `dream.integrate_results`; `dream.nodes_created`; `dream.nodes_updated`; `dream.result.units_integrated/units_failed`; `dream.errors` | 写/更新 `digest//*.md`; 不更新 dream catalog | -| `dream_topics_step` | 是 | 根据 `topic_list` 更新 `daily//interests.yaml`; 读取当天已有 topics 和最近 N 天 topics 做去重 | `dream.date`; `dream.daily_dir`; `dream.topics`; `file_store.vault_path`; step 参数 `topic_count`; `topic_diversity_days`; `topic_session_id=interests` | `dream.topics_path=daily//interests.yaml`; `dream.topics_written`; `dream.topics_merged`; `dream.topics_skipped_duplicates`; `dream.errors` | 新建或更新 `daily//interests.yaml`; 刷新 `daily/.md` | -| `dream_finish_step` | 否 | 统一收口:按 path checkpoint 成功处理的文件,持久化 catalog,渲染 summary 和 response metadata | `dream.changed_paths`; `dream.deleted_paths`; `dream.failed_paths`; `dream.integrate_results`; `dream.topics_path`; `dream.errors`; `dream.result`; `file_catalog.dream`; step 参数 `persist=true` | `context.response.success`; `context.response.answer`; `context.response.metadata` | upsert successful paths 的 mtime 到 `file_catalog.dream`; upsert `interests.yaml` 和 day-index mtime; `file_catalog.dump()` | - -### Step 1: `dream_extract_step` - -这是新的全局 Phase 1。它合并了当前 `auto_dream_step` 的扫描/diff 和当前 `DreamStep._extract()` 的抽取能力。 - -职责: - -- 解析 `date` / `hint`。 -- 刷新 day-index: `daily/.md`。 -- 扫描输入文件并统一交给 extract agent: - - `daily/.md` - - `daily//.md` - - `daily//.md` - - 以及 `daily//**/*.md` 下其它当天 note -- 排除自生成文件: - - `daily//interests.yaml` -- 读取 `file_catalog.dream`,按 mtime diff 出: - - `changed_paths` - - `unchanged_paths` - - `deleted_paths` -- 删除 catalog 中 `deleted_paths`。 -- 打包所有 `changed_paths` 的文件内容。 -- 调用一次 extract agent,让它看见所有 changed paths。 -- 输出跨文件合并后的 `unit_list` 和 `topic_list`。 - -新的 unit schema: - -```python -class DreamUnit(BaseModel): - name: str - bucket: Literal["procedure", "personal", "wiki"] - summary: str - paths: list[str] -``` - -`paths` 是这个 unit 的证据来源列表。多个文件讲的是同一抽象时,Phase 1 必须合并成一个 unit: - -```json -{ - "name": "jwt-session-expiry-policy", - "bucket": "procedure", - "summary": "How the project decides session expiry from compliance and product constraints.", - "paths": [ - "daily/2026-06-18/auth.md", - "daily/2026-06-18/api-review.md" - ] -} -``` - -topic schema 可以沿用当前 `TopicCandidate`,但建议把来源改成 `paths`: - -```python -class DreamTopicCandidate(BaseModel): - title: str - reason: str - evidence: str - keywords: list[str] = [] - paths: list[str] = [] -``` - -输出到 context: - -```python -{ - "dream": { - "date": "YYYY-MM-DD", - "changed_paths": [ - {"path": "daily/YYYY-MM-DD/a.md", "mtime": 1710000000.0} - ], - "deleted_paths": [], - "units": [ - { - "name": "jwt-session-expiry-policy", - "bucket": "procedure", - "summary": "...", - "paths": ["daily/YYYY-MM-DD/a.md", "daily/YYYY-MM-DD/b.md"] - } - ], - "topics": [ - { - "title": "...", - "reason": "...", - "evidence": "...", - "keywords": ["..."], - "paths": ["daily/YYYY-MM-DD/a.md"] - } - ] - } -} -``` - -LLM 调用数量: - -```text -1 个 agent 任务 -``` - -注意: - -- 这个 step 不再为每个文件分别调用 `dream_extract`。 -- 如果 `changed_paths` 为空,它不调用 LLM,直接输出空 `units/topics`。 -- 只有 `dream_finish_step` 才把 changed file mtime 标为已处理。这样 integrate/topics 失败时不会误跳过。 - -### Step 2: `dream_integrate_step` - -这是新的全局 Phase 2。它对 Step 1 输出的 `units` 做 Python for 循环,每个 unit 的 integrate 逻辑保持当前 `DreamStep._integrate_unit()` 不变。 - -职责: - -- 遍历 `dream.units`。 -- 每个 unit 根据 `unit.bucket` 选择: - - `integrate_system_prompt_procedure` - - `integrate_system_prompt_personal` - - `integrate_system_prompt_wiki` -- material 不再是单文件 blob,而是这个 unit 对应 `paths` 的证据包。 -- 调用当前相同工具: - - `node_search` - - `read` - - `frontmatter_read` - - `write` - - `edit` - - `frontmatter_update` -- 输出 `IntegrateOutcome`。 - -`integrate_user_message` 需要从单 `material_blob` 改成多路径 evidence blob: - -```text -unit_name: ... -unit_bucket: ... -unit_summary: ... -source_paths: - - daily/... - - daily/... - -# Evidence materials -### daily/.../a.md -... - -### daily/.../b.md -... -``` - -输出: - -```python -{ - "dream": { - "integrate_results": [ - { - "unit_name": "jwt-session-expiry-policy", - "bucket": "procedure", - "action": "CREATE", - "target_path": "digest/procedure/jwt-session-expiry-policy.md", - "source_paths": ["daily/YYYY-MM-DD/a.md", "daily/YYYY-MM-DD/b.md"], - "note": "..." - } - ], - "nodes_created": ["digest/procedure/jwt-session-expiry-policy.md"], - "nodes_updated": [] - } -} -``` - -LLM 调用数量: - -```text -N 个 agent 任务 -N = len(dream.units) -``` - -失败策略建议: - -- 任一 unit integrate 失败,记录到 `dream.errors`。 -- 因为每个 unit 都有明确的 `paths`,失败 unit 对应的 paths 进入 `dream.failed_paths`。 -- `dream_finish_step` 不 checkpoint `failed_paths`。 -- 不在任何失败 unit `paths` 里的 changed paths 可以 checkpoint。 -- 如果同一个 path 同时出现在成功 unit 和失败 unit 中,以失败为准,该 path 不 checkpoint。 - -### Step 3: `dream_topics_step` - -这个 step 取代当前 `daily_topics_step`。目标文件固定为: - -```text -daily//interests.yaml -``` - -职责: - -- 读取 `dream.topics`。 -- 如果 `daily//interests.yaml` 已存在,读取旧 topics。 -- 读取最近 `topic_diversity_days` 天的 `daily//interests.yaml` 作为历史去重上下文。 -- 合并当天旧 topics + 新 topics。 -- 去重: - - 标题 normalize 后相同视为重复。 - - keywords 高重叠视为可能重复。 - - evidence/paths 完全相同视为重复。 - - 与最近 N 天历史 topics 重复时跳过。 -- 可选使用 LLM 对候选 topic 做最终选择和改写。 -- 写回 YAML。 -- 刷新 day-index。 - -建议 YAML 格式: - -```yaml -date: "2026-06-18" -updated_at: "2026-06-18T22:00:00+08:00" -topic_count: 3 -diversity_days: 7 -topics: - - title: "JWT session expiry policy" - reason: "The user repeatedly worked through compliance-driven auth expiry tradeoffs." - evidence: "Mentioned in auth review and API notes." - keywords: ["auth", "jwt", "session", "compliance"] - paths: - - "daily/2026-06-18/auth.md" - - "daily/2026-06-18/api-review.md" -``` - -输入: - -```text -dream.date -dream.daily_dir -dream.topics -topic_count -topic_diversity_days -topic_session_id -``` - -输出: - -```python -{ - "dream": { - "topics_path": "daily/YYYY-MM-DD/interests.yaml", - "topics_written": 3, - "topics_merged": 5, - "topics_skipped_duplicates": 2 - } -} -``` - -LLM 调用数量: - -```text -0 或 1 个 agent 任务 -``` - -建议: - -- 如果只是 append/去重,不必 LLM。 -- 如果需要从很多 candidates 中挑 `topic_count` 个,才调用 LLM。 -- 不读取也不写 `interests.md`;全新格式只认 `interests.yaml`。 - -### Step 4: `dream_finish_step` - -这是非 LLM 收尾 step。 - -职责: - -- 根据前面步骤结果决定 success。 -- 计算 `failed_paths`: - - 每个失败 unit 的 `unit.paths` 都进入 failed set。 - - 如果某个 path 同时属于成功 unit 和失败 unit,以失败为准。 -- 计算 `checkpoint_paths`: - - `changed_paths - failed_paths` - - extract 成功但没有任何 unit/topics 的 changed paths 也可以 checkpoint,避免重复空跑。 -- 把 `checkpoint_paths` 的当前 mtime upsert 到 `file_catalog.dream`。 -- 把 `daily//interests.yaml` 的 mtime upsert 到 `file_catalog.dream`。 -- 把刷新后的 `daily/.md` 的 mtime upsert 到 `file_catalog.dream`。 -- `deleted_paths` 的 catalog 删除在 extract step 已完成,finish 只负责 dump。 -- `file_catalog.dump()`。 -- 渲染 summary。 -- 写 `context.response.metadata`。 - -输出 metadata 建议: - -```python -{ - "date": "YYYY-MM-DD", - "files_scanned": 10, - "files_changed": 3, - "files_deleted": 1, - "paths_checkpointed": ["daily/2026-06-18/a.md"], - "paths_failed": ["daily/2026-06-18/b.md"], - "units_extracted": 4, - "units_integrated": 4, - "units_failed": 0, - "topics_written": 3, - "nodes_created": [...], - "nodes_updated": [...], - "errors": [] -} -``` - -## 6. 拆分后的 YAML 形态 - -建议把 `auto_dream` 改成新的 dream pipeline: - -```yaml -auto_dream: - backend: base - description: "Auto-dream: scan daily changes, extract cross-file units, integrate digest nodes, update daily interests." - parameters: - type: object - properties: - date: - type: string - description: "YYYY-MM-DD to scan; defaults to today in the dreamer's timezone" - default: "" - hint: - type: string - description: "caller guidance passed through to the dreamer LLM" - default: "" - steps: - - backend: dream_extract_step - file_catalog: dream - topic_session_id: interests - - backend: dream_integrate_step - - backend: dream_topics_step - topic_count: 3 - topic_diversity_days: 7 - topic_session_id: interests - - backend: dream_finish_step - file_catalog: dream - persist: true -``` - -旧 job 删除,不做兼容 wrapper: - -```yaml -dream: - # 删除 - -dream_extract: - # 删除 - -daily_topics: - # 删除 -``` - -## 7. 数据结构建议 - -建议所有跨 step 状态都放在 `context["dream"]`。 - -核心模型: - -```python -class DreamUnit(BaseModel): - name: str - bucket: Literal["procedure", "personal", "wiki"] - summary: str - paths: list[str] = Field(default_factory=list) - - -class DreamTopic(BaseModel): - title: str - reason: str - evidence: str = "" - keywords: list[str] = Field(default_factory=list) - paths: list[str] = Field(default_factory=list) - - -class DreamState(BaseModel): - date: str = "" - hint: str = "" - daily_dir: str = "daily" - vault: str = "" - changed_paths: list[dict] = Field(default_factory=list) - unchanged_paths: list[str] = Field(default_factory=list) - deleted_paths: list[str] = Field(default_factory=list) - failed_paths: list[str] = Field(default_factory=list) - checkpoint_paths: list[str] = Field(default_factory=list) - units: list[DreamUnit] = Field(default_factory=list) - topics: list[DreamTopic] = Field(default_factory=list) - integrate_results: list[dict] = Field(default_factory=list) - nodes_created: list[str] = Field(default_factory=list) - nodes_updated: list[str] = Field(default_factory=list) - topics_path: str = "" - topics_written: int = 0 - errors: list[str] = Field(default_factory=list) - result: dict = Field(default_factory=dict) -``` - -## 8. 实现任务 - -这是一次 breaking rewrite,不存在旧接口/旧格式迁移任务。剩余工作就是按新设计实现 4 个 step。 - -必须实现: - -1. 在 `reme4/steps/evolve/dream/` 下新增 `models.py`、helper 和 4 个 step 文件。 -2. 重写 prompts: - - `extract_system_prompt` - - `extract_user_message` - - `integrate_system_prompt_procedure` - - `integrate_system_prompt_personal` - - `integrate_system_prompt_wiki` - - `integrate_user_message` - - 可参考旧 prompt 的内容,但不保持旧 prompt 接口。 -3. 实现 `dream_extract_step`: - - 扫描 `daily/.md` 与 `daily//**/*.md`。 - - 排除 `daily//interests.yaml`。 - - 根据 `file_catalog.dream` 计算 changed/unchanged/deleted。 - - 一个 agent 统一读取所有 changed paths,输出全局 units/topics。 - - 清洗 units: unknown bucket fallback 到 `wiki`; paths 去重; paths 必须来自 changed paths。 -4. 实现 `dream_integrate_step`: - - 按 `unit.paths` 打包 evidence。 - - for 循环逐 unit integrate。 - - 保留工具集合和 action 语义。 - - unit 失败时记录 `failed_paths += unit.paths`。 -5. 实现 `dream_topics_step`: - - 只读写 `daily//interests.yaml`。 - - 读取当天已有 YAML topics。 - - 读取最近 `topic_diversity_days` 天的 `interests.yaml` 做历史去重。 - - 写回去重后的 YAML。 - - 刷新 day-index。 -6. 实现 `dream_finish_step`: - - `checkpoint_paths = changed_paths - failed_paths`。 - - checkpoint 成功 paths 的 mtime。 - - checkpoint `interests.yaml` 和 `daily/.md`。 - - dump `file_catalog.dream`。 - - 输出全新 response metadata。 -7. 更新 `default.yaml`: - - `auto_dream` 改为 4-step pipeline。 - - 删除 `dream`、`dream_extract`、`daily_topics` job。 - - 保留 `file_catalog.dream`。 -8. 删除旧代码: - - `reme4/steps/evolve/auto_dream.py` - - `reme4/steps/evolve/dream.py` - - `reme4/steps/evolve/daily_topics.py` - - 更新 `reme4/steps/evolve/__init__.py`。 - -现在没有保留的迁移项: - -- 不兼容 `interests.md`。 -- 不保留单文件 `dream path=...`。 -- 不保留 `dream_extract` job。 -- 不保留 `daily_topics` job。 -- 不要求 response metadata 兼容 `AutoDreamResult`。 -- 不要求 prompt 入参兼容旧 `dream.yaml`。 - -## 9. 推荐测试用例 - -最低测试集: - -| 场景 | 期望 | -|---|---| -| 当天没有任何文件 | scanned=0,success=true,no topics | -| 只有 day-index 新增 | `dream_extract_step` 调用一次全局 extract,finish checkpoint day-index | -| session note 新增 | extract evidence 中 day-index first,session notes sorted | -| session note mtime 未变 | unchanged+1,不进入 changed evidence | -| session note 删除 | catalog delete | -| `interests.yaml` 存在 | 不进入 scan/diff/changed evidence | -| 多个文件产出同一抽象 | extract 输出 1 个 unit,`paths` 包含多个 source path | -| extract 输出空 units/topics | finish 仍 checkpoint changed files,避免重复空跑 | -| 某个 unit integrate 失败 | 该 unit 的 `paths` 不 checkpoint,response failure | -| 同一 path 同时属于成功和失败 unit | 失败优先,该 path 不 checkpoint | -| 其它 path 的 units 都成功 | 这些 path 可以 checkpoint | -| 有 topic candidates | 写/更新 `daily//interests.yaml`,记录 topics_path/topics_written | -| 已存在 `interests.yaml` | 合并新旧 topics,不重复 | -| 最近 N 天已有相同 topic | 当前日 topics 去重跳过 | -| extract 输出 unknown bucket | 清洗后 bucket=`wiki` | -| prompt 输出 path 不在 changed paths | 该 unit 被丢弃或修正,不能 checkpoint 不明来源 | diff --git a/docs4/old/auto_cognition_design.md b/docs4/old/auto_cognition_design.md deleted file mode 100644 index 185631a7..00000000 --- a/docs4/old/auto_cognition_design.md +++ /dev/null @@ -1,330 +0,0 @@ -# auto-cognition 设计(顶层:心智循环) - -> 本文档:reme4 中**长期记忆系统**的顶层认知模型 —— 把 agent 的记忆生命周期类比人类睡眠/觉醒回路,推导出**三阶段分工**与**15 维能力清单**。 -> -> **三阶段实现各有专属文档**: -> - Stage 1 写入(REM 重放抽象) → `auto_dream_design.md` -> - Stage 2 巩固(NREM 深度整合) → `auto_consolidate_design.md` -> - Stage 3 检索(觉醒态提取) → `auto_recall_design.md` -> -> 配套阅读: -> - `auto_memory_design.md`:入流端(daily 写入),与 cognition 平行 —— cognition 负责"已落地后的认知循环",memory 负责"经历落地" -> - `structure.md` §4(retrieve 三种问法) -> -> **核心立场**: -> - 长期记忆不是"存 + 取"两个动作,是**写入 → 巩固 → 提取**的循环 —— 三段时间尺度不同(同步 / 周期 / 同步),设计形态不同 -> - vault 是**事实层**,只承载经过 LLM 写入认证的关系;`meta/` 是**派生层**,承载概率推断的统计信号 -> - 任一阶段独立演化,任一信号缺失系统降级而不崩 - ---- - -## 0. 心智循环:reme 的认知模型 - -agent 的长期记忆系统在概念上对应人脑的**海马—皮层回路 + 睡眠—觉醒周期**: - -``` - ┌─────────────────────────────────┐ - │ 外部经验(daily / resource) │ - └─────────────┬───────────────────┘ - │ (auto-memory 写 daily) - ▼ - ┌─────────────────────────────────────────────────┐ - │ │ - │ ┌────────────────┐ 抽象 / 关系编织 │ - │ │ Stage 1 │ ◄─ 类比 REM 睡眠 │ - │ │ auto-dream │ "重放 + 写进 schema" │ - │ └───────┬────────┘ │ - │ │ 写 vault(digest body + wikilink) │ - │ ▼ │ - │ ┌────────────────┐ │ - │ │ vault(事实) │ │ - │ └───────┬────────┘ │ - │ │ 只读 │ - │ ▼ │ - │ ┌────────────────┐ 长期组织 / 派生指标 │ - │ │ Stage 2 │ ◄─ 类比 NREM 慢波睡眠 │ - │ │ auto-consol- │ "巩固 + 修剪 + 集群" │ - │ │ idate │ │ - │ └───────┬────────┘ │ - │ │ 写 meta/ + audit/(派生层) │ - │ ▼ │ - │ ┌────────────────┐ │ - │ │ meta(派生) │ │ - │ └───────┬────────┘ │ - │ │ 只读 │ - │ ▼ │ - │ ┌────────────────┐ query → 答案合成 │ - │ │ Stage 3 │ ◄─ 类比觉醒态 cue retrieval│ - │ │ auto-recall │ "融合 + pattern complete"│ - │ └───────┬────────┘ │ - │ │ │ - └───────────┼─────────────────────────────────────┘ - │ 召回结果给 agent - ▼ - ┌─────────────────────────────────┐ - │ agent query │ - └─────────────────────────────────┘ -``` - -**心智循环回答四个根本问题**: - -| 问题 | 谁回答 | -|---|---| -| 我经历过什么? | auto-memory(daily 入流) | -| 我从中学到什么? | Stage 1 — auto-dream | -| 这些知识如何长期组织? | Stage 2 — auto-consolidate | -| 我需要时如何调用? | Stage 3 — auto-recall | - -memory 负责"经历落地",cognition 三阶段负责"已落地经历的认知循环"。 - ---- - -## 1. 三阶段全景 - -| 阶段 | 神经科学类比 | 时间尺度 | 改 vault | 实现归属 | -|---|---|---|---|---| -| **Stage 1 dream** | REM 重放抽象 | 同步(随入流即跑) | 是(写 digest body) | `auto_dream_design.md` | -| **Stage 2 consolidate** | NREM 深度巩固 | 周期 / idle(daily / weekly)| **否**(写 `meta/` + `audit/`)| `auto_consolidate_design.md` | -| **Stage 3 recall** | 觉醒态 cue retrieval | 同步(query 触发) | 否(只读;唯一对外写是 `meta/access_log.json`)| `auto_recall_design.md` | - -**关键的不对称**: -- 写入与检索是**同步**的(用户 / agent 等待),巩固是**离线**的(idle / 周期) -- 改 vault 的资格被严格限制在 **dream + consolidate 中的 split** —— 其它阶段全只读 -- 三阶段时间尺度差三个数量级,这是设计形态(同步 vs 异步 vs idle)的根本来源 - ---- - -## 2. 系统级能力(贯穿三阶段) - -不属任何单阶段,但任一阶段不能违反: - -| 能力 | 含义 | -|---|---| -| **事实层 vs 派生层分离** | vault 只承载经 LLM 写入认证的关系(显式 wikilink);`meta/` 承载概率推断的派生指标(community / recency / archived);两者绝不混同 | -| **不变量守恒** | F-invariants(0 文件移动 / 改正文限定 subject / wikilink 是 body 一部分)+ E-invariants(边守恒 E-1/E-2/E-3)横跨三阶段;详 `auto_dream_design.md` §4.3-§4.4 | -| **阶段独立演化** | 任一阶段算法升级不破坏其它阶段(community 算法换 → dream 不变;打分公式调 → consolidate 不变) | -| **缺失即降级** | 任一派生信号缺失,系统降级而不崩;冷启动可用 | -| **全程可审计** | 每阶段产 audit / report / log,人 / agent 可检视追溯 | - ---- - -## 3. Stage 1 — auto-dream:经验 → 抽象 - -**类比**:REM 睡眠的记忆重放与抽象提炼。脑在做梦时把白天事件拆解、重组,提取出可泛化的模式,登记进皮层 schema。 - -**根本目的**:把"原始经历"转化为"长期值得调取的教训",同时把它编织进已有知识图谱。 - -### 3.1 五个能力维度 - -逻辑递进 —— 输入 → 抽象 → 整合 → 编织 → 写入: - -| # | 能力 | 它在问什么 | 失效后果 | -|---|---|---|---| -| 1 | **抽象判断**(gate) | 这段材料里有"值得长期记住"的东西吗? | 噪声进 vault / 只蒸馏不抽象 | -| 2 | **经验重放**(召回) | 这个抽象在已有记忆里**已经存在**吗?以什么形式? | 重复节点 / 错过整合机会 | -| 3 | **整合决策** | 创建新节点,还是丰富已有节点?若已有 —— 是再次印证 / 精化范围 / 修正错误? | 已有信息丢失 / 错误没纠正 | -| 4 | **关系编织** | 这个抽象与谁有关系?谁是它的来源? | wikilink 缺失,后续 retrieve 漏召 | -| 5 | **写入安全** | 写入会不会破坏 vault 既有事实?并发冲突如何处理? | 边丢失 / race condition | - -### 3.2 关键定性 - -- dream 是 vault 的**唯一写者**(在 cognition 三阶段里;memory 写 daily 不算) -- **写入瞬间是关系建立的唯一可信时机** —— 错过的关系不靠后台扫回(那不是 consolidate 的工作) -- 一次写入,所有未来检索受益(持久化优于实时计算) - -详细机制见 `auto_dream_design.md`。 - ---- - -## 4. Stage 2 — auto-consolidate:抽象 → 网络 - -**类比**:NREM 慢波睡眠的系统巩固 + 突触代谢稳态。脑在深睡时把分散事件融入 schema、修剪弱连接、把长期不用的记忆淡出意识可达范围。 - -**根本目的**:跨时间累积地把 vault 从"一堆节点"组织成"有结构、有权重、有时效的网络",但**只产派生信号,不污染事实层**。 - -### 4.1 五个能力维度 - -按作用尺度从微观到宏观: - -| # | 能力 | 作用尺度 | 类比 | 输出形态 | -|---|---|---|---|---| -| 1 | **结构维护** | 节点级 | 海马表征过密 → 分化新单元 | 改 vault(split,唯一例外)| -| 2 | **跨节点关系发现** | 节点对级 | 多次睡眠中识别"同一件事" → schema | `audit/` 报告 | -| 3 | **主题集群形成** | 子图级 | 皮层网络的功能性分区 | `meta/communities.json` | -| 4 | **时效性管理** | 节点级 / 时间维度 | 突触代谢稳态 + 遗忘 | `meta/access_log.json` + `meta/archived.json` | -| 5 | **健康监控** | 系统级 | 神经环路诊断 | 告警 / 严重告警 | - -### 4.2 关键定性 - -- consolidate 是**纯只读 + 派生写**(读 vault,写 `meta/` + `audit/`) -- **唯一例外是 split** —— 改 vault 的维护任务,但触发严格(D3 inline 写后)且只改自身负责的 parent + children -- **关系判断有错率 → 报告优先,人/agent 介入,不主动合并**(夸大置信度的代价是污染事实层) -- 离线 / 周期 / idle —— 与前台不抢资源;失败不影响主流程,下次重跑 - -详细机制见 `auto_consolidate_design.md`。 - ---- - -## 5. Stage 3 — auto-recall:网络 → 答案 - -**类比**:觉醒态的 cue-driven retrieval + pattern completion。脑接到 query,激活相关皮层模式,补全成完整答案;同时召回过程本身强化被用到的记忆痕迹。 - -**根本目的**:接到当前 query 时,从 vault + 派生信号合成最相关的过去经验 —— 既要**覆盖率**(不漏)也要**信噪比**(不冗余)。 - -### 5.1 五个能力维度 - -按召回流程从输入到输出: - -| # | 能力 | 它在解决什么 | -|---|---|---| -| 1 | **多路召回** | 不同问法走不同算子(state / semantic / topological 三分立);agent 自选,不强加聚合 verb | -| 2 | **多信号融合** | 单一文本相似度不够 —— 还要节点权威性 / 主题集群 / 时效性;乘法融合 | -| 3 | **信噪比管理** | 节点级去重 + 节点级 surface(frontmatter 一同呈现)+ multi-hop 可控展开 + 冷藏过滤 | -| 4 | **召回反馈** | 被命中的节点 → 写访问日志 → 影响下次 recency / archived 判定 | -| 5 | **鲁棒降级** | 派生信号缺失 → 退到基础召回;version 不兼容 → warning + 跳过该因子 | - -### 5.2 关键定性 - -- recall 是**只读** —— 唯一对外写入是 `meta/access_log.json`(经 ring buffer + consolidate 聚合) -- recall **不引入新 L4 模块**(`structure.md` ✗-15)—— 三种问法分别由 L3 原子工具(`list_step` / `search_step` / `traverse_step`)直接覆盖 -- 默认路径 **0 LLM 调用**(信号都是离线维护好的);LLM rerank / query rewrite 是 SDK 上层选项 - -详细机制见 `auto_recall_design.md`。 - ---- - -## 6. 能力地图(横切视角) - -15 维按"作用对象"重排,可以看到三阶段如何分工: - -| 作用对象 | dream(写入) | consolidate(巩固)| recall(检索)| -|---|---|---|---| -| **节点(单个)** | 1 抽象判断 / 3 整合决策 / 5 写入安全 | 1 结构维护(split) | 3 信噪比(节点级合并/surface) | -| **节点对 / 关系** | 4 关系编织(wikilink) | 2 跨节点关系发现(dups 报告) | (消费已有边,不产新关系) | -| **子图 / 集群** | 2 经验重放(召回邻居) | 3 主题集群形成(community)| 2 多信号融合(community boost) | -| **时间维度** | (写入瞬间) | 4 时效性管理(decay / archived)| 4 召回反馈(access log)| -| **系统健康** | 5 守恒校验 | 5 健康监控(D1 / D10) | 5 鲁棒降级 | -| **入口形态** | 异步 fan-out per sub-unit | 周期 batch / idle | 同步 query response | - -**几个观察**: -- "节点对 / 关系"列在 recall 是空 —— recall 不产新关系,只用已有边(避免 query-time 高成本推断) -- "时间维度"行 dream 缺位 —— 写入瞬间无"时间维度"概念(那是 consolidate 后续才能提取的统计) -- 每行至少有一个阶段负责 —— 没有能力被全阶段忽略 - ---- - -## 7. 跨阶段不变量 - -所有阶段共同遵守的硬约束。任何阶段越界 = 设计错误。 - -### 7.1 F-invariants(继承 `auto_dream_design.md` §4.3) - -| # | 约束 | 跨阶段含义 | -|---|---|---| -| F-1 | 0 文件移动 | 没有任何阶段可以 move 文件;rename 走 `wikilink_handler.retarget_links` 显式路径 | -| F-2 | 改正文限定 subject | dream 改 subject body / consolidate split 改 parent + children body;**recall 绝不改任何 body** | -| F-3 | maintainer 只做 split | consolidate 内的结构维护只做 split;无 merge / dissolve / re-edge | -| F-10 | inbound 不动 | split 后外部 wikilink 仍指 parent,不强制重定向 | -| F-11 | wikilink 是 body 一部分 | 没有"独立的边";所有关系变化是 body 编辑副作用 | - -### 7.2 E-invariants(边守恒) - -- E-1:dream update 出边 ⊇ 原出边 -- E-2:split 后 `(parent_new ∪ ∪children_outbound) ⊇ parent_old` -- E-3:inbound wikilink split 时不动 - -**recall 不写 body** → E-* 与之无关;但 recall 看到的 wikilink 图永远是 dream / split 守恒后的状态。 - -### 7.3 派生信号边界 - -- **consolidate / recall 不写 vault** —— 关系判断、活跃度统计、社区划分都是概率推断,不污染事实层 -- **`meta/*.json` 不被 retrieve 召回** —— 只作权重信号,不进入"召回结果"集合 -- **audit/ 不被自动消费** —— 报告永远等待人 / agent 介入,不闭环回写 - ---- - -## 8. 跨阶段数据流(契约总览) - -``` -┌──────────────┐ wikilink ┌──────────────┐ -│ auto-dream │─落 body──►│ vault/ │ -│ (Stage 1) │ │ (事实层) │ -└──────────────┘ └──────┬──────┘ - │ 只读 - ▼ - ┌──────────────────┐ - │ auto-consolidate │ - │ (Stage 2) │ - └─┬────────┬───────┘ - │ │ - meta/ 元数据───┘ └─── audit/ 报告 - (派生层) (人工介入) - │ - │ 只读 - ▼ - ┌──────────────┐ - │ auto-recall │ ◄─ user query - │ (Stage 3) │ - └──────┬───────┘ - │ 命中钩子(异步) - ▼ - meta/access_log.json - (recall 唯一对外写入,经 consolidate 聚合) -``` - -| 产物 | 路径 | 写入者 | 读取者 | 缺失行为 | -|---|---|---|---|---| -| **vault wikilink** | `digest/**.md` body | dream / split | recall(图遍历) | — | -| **dups 报告** | `audit//auto_link_dups.md` | consolidate | 人 / agent | — | -| **communities** | `meta/communities.json` | consolidate | recall | 不做同社区 boost | -| **access log** | `meta/access_log.json` | recall(写命中) + consolidate(聚合) | recall(读 recency)| recency_factor = 1.0 | -| **archived list** | `meta/archived.json` | consolidate | recall(默认过滤)| 不过滤 | -| **centrality** | `file_graph` 反向索引(实时,不存)| 自动 | recall(O(1) 查) | — | - -**契约稳定性**:`meta/*.json` 都带 `version` + `computed_at`;recall 启动时校验 version,不兼容则降级。 - -**冷启动**:`meta/` 为空 → recall 仍能跑(base + centrality + 图)→ 排序略弱不崩。 - ---- - -## 9. 系统级断言(把"要什么"提炼到 5 条) - -1. **抽象与事实分层** —— vault 是经 LLM 写过的事实;`meta/` 是统计 / 算法的派生;两者绝不混同 - -2. **关系建立的时机集中在写入瞬间** —— dream 写入是关系唯一可信来源;consolidate 不补 vault 关系,recall 不预存关系矩阵 - -3. **维护是离线的派生劳动,不是补救** —— consolidate 不修 dream 的疏漏(那叫返工),它做的是 dream 不擅长的事(全局视角 / 统计视角 / 时间视角) - -4. **检索是融合,不是检索** —— recall 的价值不在"找文本相似",而在"把文本 / 图 / 时效 / 权威多个独立信号合成一个答案" - -5. **整个心智循环可降级** —— 任一阶段失效或失准,整个系统降级而不崩;冷启动有意义;dogfooding 可演进 - ---- - -## 10. 与 auto-memory 的边界 - -auto-memory 写入的 daily event 节点也是图的一部分(承载 daily → digest 的 `derived_from::` 边)。但 daily 节点**不参与 cognition 三阶段的全部改造**: - -| cognition 阶段 | 是否触及 daily | -|---|---| -| **dream** | 只读(作为入流之一) | -| **consolidate** | 不参与 dups / community / decay(daily 是时间索引,本质不去重 / 不冷藏) | -| **recall** | 三层并行召回时 daily 也参与命中(`structure.md` R-2 默认 `digest > daily > resource`) | - -**关键约束**:cognition 三阶段任何子阶段都**不改写 daily**(无写回路径);daily 由 auto-memory 写完即只读。 - ---- - -## 11. 演进 / 待补 - -**当前实现状态**: -- ✅ Stage 1 dream 已实现并跑通(`reme4/steps/evolve/dream.py` + `dream.yaml`) -- ⏳ Stage 2 consolidate split 部分将实现;dups / community / decay / archived 待实现 -- ⏳ Stage 3 recall 增强未实现(当前 search.py 已有 vector + keyword + RRF + 一跳 expand) - -**顶层级演进议题**(不属任何单阶段): -- ⏳ **能力成熟度路标** —— 把 15 个能力维度按 M0(必须)/ M1(期望)/ M2(演进)分级 -- ⏳ **跨阶段集成测试** —— vault 从空到充实的端到端 dogfooding,验证三阶段配合是否符合"心智循环"预期 -- ⏳ **可观测性聚合** —— 三阶段各自的 audit / log 现在分散;是否需要统一的 cognition 健康面板 - -各阶段实现进度详见各自文档的"下一步"章节。 diff --git a/docs4/old/auto_consolidate_design.md b/docs4/old/auto_consolidate_design.md deleted file mode 100644 index 8061c75d..00000000 --- a/docs4/old/auto_consolidate_design.md +++ /dev/null @@ -1,741 +0,0 @@ -# auto-consolidate 设计(Stage 2 巩固:主动解决 vault 长期演化的实际问题) - -> 本文档:reme4 中 **auto-cognition 三阶段** 的 **Stage 2 — 巩固阶段** 实现。覆盖 vault 长期演化中累积的实际问题(冗余 / 过载 / 稀疏 / 腐败 / 抽象缺位),通过周期 batch + 写后 inline 的方式**主动改 vault**,让记忆系统保持健康。 -> -> 配套阅读: -> - `auto_cognition_design.md`:三阶段顶层心智循环 -> - `auto_dream_design.md`:Stage 1 写入 / 节点 + 边模型 / F-invariants 原始定义 / 边守恒 -> - `auto_recall_design.md`:Stage 3 检索 —— 消费本文档产出的信号 -> - `auto_memory_design.md`:auto-memory 写 daily,daily 节点不参与本文档的巩固改造 -> - `structure.md` §3.6(maintain 动作语义) -> -> **核心立场**: -> - consolidate **不是产报告等人介入**,是**主动解决问题** —— 类比 NREM 慢波睡眠的 systems consolidation:跨多事件抽 schema、修剪弱连接、稳态突触强度。这些都是真实发生的改造 -> - vault **会被 consolidate 改**,但每个动作有严格的**置信度门槛 + 守恒规则 + 审计 trail + 渐进 rollout** -> - 灰色地带(置信度不够)才产报告等人介入;高置信度自己解决 -> - **community detection 是巩固的中枢** —— P0 基础设施,P1-P3 三个动作(abstract / merge / reinforce)都依赖它 - ---- - -## 0. 问题陈述与五大动作全景 - -dream 写入是单点视角,有三类视野局限:**写入瞬间没有跨节点视角 / 跨时间视角 / 全局拓扑视角**。这些局限会让 vault 长期演化中累积五类实际问题: - -| # | 问题 | 类比 | 表现 | 解决 | -|---|---|---|---|---| -| 1 | **冗余** | 同事件留下重复记忆痕迹 | dream 漏判去重 / 术语演化 / 跨桶建成两份 | merge | -| 2 | **过载** | 单一突触表征过密 | 节点 body 累积过长 / 单节点杂糅多主题 | split | -| 3 | **稀疏** | 应有连接未建立 | dream 写入瞬间漏召回的相关节点 / 反复共现但无 wikilink | reinforce | -| 4 | **腐败** | 长期不激活的痕迹 | 旧节点过时 / 半年没人读 / 内容已被矛盾 | archive | -| 5 | **抽象缺位** | 跨多 instance 缺 schema | vault 只有原子节点,没有"主题层"视角承接全局问 | abstract | - -### 0.1 四大动作 + 优先级 - -| 优先级 | 动作 | 解决问题 | 触发节奏 | 改 vault | 风险 | 收益 | -|---|---|---|---|---|---|---| -| **P0** | **community detection** | (基础设施) | weekly batch | 否 | 0(只产 meta) | 基础(下游动作的依据)| -| **P1** | **abstract** | 抽象缺位 | weekly batch(基于 P0) | 是(新建 summary) | 低(additive) | **最高**(GraphRAG 核心) | -| **P2** | **merge** | 冗余 | weekly batch(基于 P0) | 是(合并 + retarget) | 高(lossy) | 中(消除可见冗余) | -| **(独立)** | **split** | 过载 | inline 写后(D3) | 是(拆 parent + children) | 低 | 中 | -| **(独立)** | **archive** | 腐败 | daily batch | 软(meta 标记) | 0 | 中 | -| ~~P3 reinforce~~ | **已并入 dream synapse** | 稀疏 wikilink | 由 dream Phase 2 step 4 织突触承担 | (不在 consolidate 范围内) | — | — | - -**关键论断**: -- **P1 比 P2 优先** —— abstract additive 失败可逆且回报最大;merge lossy 失败要回滚 inbound,价值是消除冗余(必要但不增能力)。 -- **reinforce 已取消**(2026-06-02)—— 详 §4 标作废说明;wikilink 稀疏的解决方案是 dream Phase 2 在写入瞬间多召回 + 织突触(详 `auto_dream_design.md` §4.2.2),不再由 consolidate 周期补救。 - -### 0.2 实施路径 - -``` -M0: P0 community detection (基础设施) - + split (已实现) - + archive (软标记,完全可逆) - -M1.1: P1 abstract (additive,最低风险开始改 vault) -M1.2: P2 merge (lossy,高门槛 + 多数票) - -M2+: 多层 abstract (L2 super-community) / delete - -reinforce: 不再排期 —— 已由 dream Phase 2 synapse 织突触承担 -``` - -### 0.3 显式排除 - -- ❌ 重做"抽象判断" —— gate 决策只在 dream(consolidate 不重新判定"该不该记") -- ❌ 重做"语义内容" —— UPDATE 三种 flavor(CORROBORATE / REFINE / CORRECT)只在 dream;consolidate 做结构层,不做语义层 -- ❌ 改 daily / resource —— consolidate 只动 digest 节点(I-2 / I-3 仍守) - ---- - -# Part A — community 工作群(本文档核心) - -P0-P3 四件套围绕 community detection 协同工作:**community 提供"哪些节点同主题"的判据,abstract / merge / reinforce 各自利用这个判据做不同的解决动作**。 - -## 1. community detection(P0,基础设施) - -**目的**:在 vault wikilink 图上做 community detection,产出"节点 → community_id"映射。这是 P1-P3 三个动作的**唯一前置**。 - -### 1.1 算法选择:Leiden - -| 选项 | 评估 | -|---|---| -| Louvain | 经典,但有 resolution limit + disconnected community 风险 | -| **Leiden** ✅ | Louvain 改进版(2019),稳定性显著好;GraphRAG 采用;Python `igraph.community_leiden` 现成 | -| label propagation | 实现最简,但结果不稳定(随机种子敏感) | - -**首版决策:Leiden**,直接对齐 GraphRAG 路线,后续接它的多层抽象更顺。 - -### 1.2 图的形态 - -| 维度 | 决策 | -|---|---| -| **节点范围** | **只 digest 节点**;daily / resource 不参与 | -| **边权重** | **首版 unweighted undirected**(所有 wikilink 等权)—— 加权方案(predicate 类型加权)留 M2+ 视效果 | -| **跨桶 community** | **必须允许** —— bucket 是物理归档,community 是语义聚合,二者本就正交。"错桶节点"会被自然纳入 community,可作 audit 信号但不强制 move(F-1 守住)| -| **resolution** | **1.0 起步**(Leiden 默认 / GraphRAG 默认)—— dogfooding 后视 community 平均规模(理想 5-15 节点)调 | -| **更新模式** | **全量重算**;vault 千节点级 Leiden < 1 秒,M0/M1 不引入增量复杂度 | - -### 1.3 多层级:M1 只 L1 - -| 层数 | 适用 | reme 决策 | -|---|---|---| -| 单层 L1(原子 → community)| vault < 500 节点足够 | **M1 起步** | -| 双层 L1 + L2(community → super-community) | vault > 500 节点 / 跨主题大类涌现 | M2+ 视规模 | -| GraphRAG 4 层 | 大规模文档库 | M3+ 不优先 | - -理由:GraphRAG 论文证明 L1 拿走 60-80% 效果。先把 L1 跑稳,L2 看实际是否需要。 - -### 1.4 输出 - -**`meta/communities.json`**: -```json -{ - "version": 1, - "computed_at": "2026-06-08T03:00:00Z", - "algorithm": "leiden", - "resolution": 1.0, - "communities": { - "digest/auth/jwt-rotation.md": "c_07", - "digest/auth/oauth-flow.md": "c_07", - "digest/api/rate-limit.md": "c_12" - }, - "stats": { - "n_communities": 14, - "median_size": 7, - "max_size": 23 - } -} -``` - -**`meta/community_changes.json`**(供 abstract 稳定度判据): -```json -{ - "computed_at": "...", - "previous": "...", - "stability_per_community": { - "c_07": 0.92, // 1 - (Jaccard 距离与上周该 community 节点集) - "c_12": 0.45 // 不稳定,abstract 跳过 - } -} -``` - -### 1.5 community_id 不需要稳定 - -下游(abstract / merge / reinforce)只关心"两节点是否同 community";id 本身可重排。每周重算后 id 不需要保持与上周对齐。stability 信号通过节点集 Jaccard 距离计算,不依赖 id。 - -### 1.6 用途总览 - -| 下游 | 用法 | -|---|---| -| **abstract**(§2)| 判据"该 community 节点数 ≥ N + 稳定度满足 + 无 hub" → 创建 summary | -| **merge**(§3)| 候选 pair 必须在同 community(降错率;不同 community 的相似 description 多是同名异义)| -| **reinforce**(§4)| 候选 wikilink 必须在同 community(避免假关联)| -| **recall**(`auto_recall_design.md` §3) | 同 community 节点 boost | - ---- - -## 2. abstract(P1,抽象提升) - -**类比**:NREM systems consolidation —— 跨多次睡眠把分散事件抽出共同 schema,从 episodic 升到 semantic。 - -**目的**:vault 演化到一定规模后,某些 community 形成稳定主题群,需要一个 hub 节点统领,让 retrieve 能召回到"主题概览"而非散点。 - -### 2.1 等价处理立场(关键) - -**summary 节点完全等同普通节点**: - -| 维度 | 决策 | -|---|---| -| **路径** | LLM 选桶,正常 slug 命名(如 `digest/auth/authentication-mechanisms.md`);**无 `__community__` / `__hub__` 等结构性标识** | -| **frontmatter** | 仅 `name + description`(reme 核心保留);**无 `kind: community_summary`、无 `auto_generated`** | -| **summary 性质** | 完全体现在 **body 形态** —— 主题概述 + 列出 source 节点 wikilink + 跨节点 pattern;但这是内容自然形态,不是结构性宣告 | -| **后续维护** | **无** —— 跟其它节点等价,被 dream / split / merge / archive 自然演化(参见 §2.6) | - -这跟 dream 的核心立场对齐:"节点角色由 body 内容决定,不由 frontmatter 类型标记"。abstract 是"用一种新方式创造节点",不是"创造一种新节点类型"。 - -### 2.2 触发判据(组合门槛) - -``` -weekly batch: - for community in communities.json: - if community_has_hub(community): # §2.5 结构化判据 - continue - if len(community) < MIN_NODES (5): # 节点数门槛 - continue - if stability(community) < 0.7: # 稳定度门槛 - continue - if active_node_count(community, 30d) < 3: # 活跃度门槛 - continue - if name_diversity(community) < 0.5: # 多样性门槛 - continue - → enqueue abstract job -``` - -| 门槛 | 默认 | 含义 | 防的是 | -|---|---|---|---| -| **节点数** | ≥ 5 | community 大小 | 给 2-3 节点造 hub 不划算 | -| **稳定度** | ≥ 0.7 | 与上周边界 Jaccard 距离 | 给短命 community 造 hub 浪费 | -| **活跃度** | ≥ 3 节点近 30 天 hit | community 仍在用 | 给死社区造 hub(下次没人看)| -| **多样性** | name 差异度 ≥ 0.5 | frontmatter `name` 互不相同 | 给"一组重复节点"造 summary —— 那是 merge 的事 | - -### 2.3 创建动作 + grounding 守恒 - -``` -LLM 看 community 内所有节点 (frontmatter + body) - ↓ -产 planned summary body (三段): - 1. 主题概述 (1-2 段,跨多节点共同主题) - 2. 关键支柱 (列表,3-5 节点 + 一句话 + wikilink) - 3. 不在概览的细节 (明说哪些细节留原节点) - ↓ -长度限制: summary body < 1500 token - (防 abstract 创建后立刻被 split 触发,§5) - ↓ -LLM 决定 path: digest//.md - ↓ -CAS 写入 (§9) + 双重守恒校验: - - 机械: 出边集合 ⊇ "关键支柱"声称引用的节点 (防套话) - - 机械: 出边集合 ⊇ source_nodes 的至少 60% (allow LLM 漏列少数) - ↓ -audit 记录: audit//consolidate_actions.md -``` - -**grounding 守恒**:summary body 中**声称引用某节点必须真写 wikilink**。LLM 不能仅口头提及"我们在 X 中看到..."而不带 `[[X.md]]`。这是机械可校验的,LLM 跑不掉。 - -### 2.4 长度限制为什么重要 - -summary body < 1500 token 是**与 split 互锁的机制**: - -- 不限长 → LLM 会写"完整覆盖" → 最终 body 累积接近 split 阈值(2000 token)→ 下次 D3 触发拆 → 拆出来的 children 又被 community 视为同主题 → 下次 abstract 又造一个 hub → 循环 -- 限长 1500 → summary 留出 split 阈值的 25% buffer,稳定不触发拆 - -### 2.5 "community 已有 hub"的结构化判据 - -不靠 frontmatter / 路径标识,靠**结构**: - -``` -def community_has_hub(community): - for node in community: - out_targets = outbound(node) ∩ community - if len(out_targets) / len(community) >= 0.6: - return True # 该节点出边覆盖 community 60% 以上 → 它已是 hub - return False -``` - -**好处**: -- split parent overview 自然被识别为 hub(split parent 出边覆盖大部分 children)→ abstract **复用** split 的工作,不重复创建 -- 已有 abstract 创建过的节点,只要它出边没退化,下次 batch 自然识别为 hub,不重复创建 -- 节点被 dream update 后形态变化,出边变了 → 自动重新评估 - -**M1 实施关键验证点**:跑实测验证这个涌现 —— split parent 是否真被识别为 hub。如有 corner case,调阈值 0.6 → 0.5 / 0.7。 - -### 2.6 后续维护:无 —— 完全靠 5 大动作演化 - -abstract 创建即放归 vault,**consolidate 不再"管"它**。后续命运: - -| 演化路径 | 结果 | -|---|---| -| 新材料触及该主题 | dream update 自然修正 body(走 CORROBORATE / REFINE / CORRECT)| -| 老 summary 长期不被引用 | archive 自动归档(§6)| -| community 边界变了 → 下次 batch 创建新 summary | 新老 summary 描述同主题 → merge 自动合并(§3)| -| summary body 累积过长 | split 自动拆(§5)| - -这是真正的"vault 自我代谢"。**没有特殊维护通道**。 - ---- - -## 3. merge(P2,同概念合并) - -**类比**:NREM 跨多次睡眠识别"同一件事" → 合一个记忆痕迹。 - -**目的**:消除 vault 内的冗余 —— 同概念多节点。 - -### 3.1 候选挖掘(community 内三层过滤) - -``` -weekly batch (依赖 community detection): - for community in communities: - pairs = all_pairs(community) - for (A, B) in pairs: - if description_sim(A, B) < 0.6: # 第一层: frontmatter 相似 - continue - if body_topic_overlap(A, B) < 0.5: # 第二层: body 主题词重合 - continue - if cooldown_active(A) or cooldown_active(B): # 第三层: cooldown 检查 - continue - candidates.append((A, B)) -``` - -**关键约束**:候选必须在**同 community**(降错率)。 - -### 3.2 多数票决策 - -merge 是高风险动作(lossy + 改 inbound),用多数票降错: - -``` -for (A, B) in candidates: - votes = parallel_run(N=3, prompt="A 和 B 是否同一概念? 返回 {is_same, confidence}") - agree = sum(v.is_same and v.confidence >= 0.8 for v in votes) - if agree >= 2: - → enqueue merge job - elif agree == 1: - → 写 audit//dups_uncertain.md (灰色地带,人介入) - else: - → 丢弃 -``` - -### 3.3 merge 动作:body 重写归 consolidate(方案 B) - -**关键决策**:merge 后的 body 由 **consolidate 自跑合并 prompt**,不走 dream update 路径。 - -| 方案 | 评估 | 决策 | -|---|---|---| -| A. 走 dream update 路径(把 loser body 作"新材料")| 优雅但跨阶段;dream 不应知道 caller 是 consolidate 还是新材料 | ❌ | -| **B. consolidate 自跑合并 prompt** | 简单自包含;通过严格 prompt 约束化解"做语义工作"张力 | ✅ | -| C. 不重写 body(留 redirect stub) | 完全不做语义,但 vault 留无用节点 | ❌ | - -**B 方案的边界守住**(避免 consolidate 真在做语义判断): - -| 边界 | 含义 | -|---|---| -| **prompt 严格约束** | "只合并不精化" —— 不重写措辞、不加新内容、不做精化决策 | -| **机械守恒** | 出边 ⊇ A.outbound ∪ B.outbound + provenance 全保留(LLM 跑不掉) | -| **信息守恒抽样** | LLM 自检 "merged.body ⊇ A.body ∪ B.body 全部信息";audit 抽样人审 | -| **失败拒写** | 守恒校验失败 → LLM 重试一次 → 二次失败拒写 + audit | - -### 3.4 完整动作流 - -``` -A, B → 选择 winner (path): - - inbound 数大者赢 (保护既有 inbound,降 retarget 量) - - 平局取路径短者 - ↓ -LLM 跑 merge prompt → planned merged_body (B 方案) - ↓ -机械 retarget 准备: - - 扫所有 inbound(loser): [[loser.md]] → [[winner.md]] - - alias 保留;predicate 保留 - - 这是机械算子,非 LLM - ↓ -事务式 CAS 写入: - 1. winner body 改写 - 2. 所有 inbound 节点 body 改写 (retarget) - 3. 删除 loser 文件 - 任一步失败 → 全部回滚 - ↓ -audit 记录 + cooldown 设置 (winner 进 cooldown 2 weeks) -``` - -### 3.5 灰色地带:报告 - -- 多数票通过(agree ≥ 2)→ 自动 merge -- 仅 1 票通过 → 写报告 `audit//dups_uncertain.md`,人 / agent 介入 -- 0 票 → 丢弃 - -报告格式: -```markdown -# dups uncertain 2026-06-08 - -## pair 1 (1/3 votes) -- A: digest/auth/jwt-rotation.md ("JWT 密钥轮换") -- B: digest/security/key-rotation.md ("密钥轮换原则") -- vote 1 (yes, 0.85): "同一概念,A 偏 JWT 场景" -- vote 2 (no, 0.72): "B 是通用原则,A 是具体应用" -- vote 3 (no, 0.68): "粒度不同,不应合并" - -建议:走 dream update 通道把 A 内容作为 B 的实例并入。 -``` - ---- - -## 4. ~~reinforce~~(**已作废,2026-06-02**) - -> ⚠️ **本节作废,reinforce 已并入 dream Phase 2 synapse 织突触**(详 `auto_dream_design.md` §4.2.2)。理由: -> - reinforce 的本质 = "找语义相关但 wikilink 缺失的节点对,补 wikilink" -> - 但 dream Phase 2 在写入新节点瞬间已经在做同样的事(多召回 + 内化判 related + 织 `[[Y.md]]`) -> - 让 consolidate 周期事后补 wikilink = dream RECALL 不充分的兜底,与其兜底不如把 dream 召回做强 -> - F-2 自然守住:dream 只动新节点 body(自己的 subject),不需要 consolidate 改 leaf body 这种 F-2 破例 -> -> **新立场**:wikilink 的稀疏由 dream Phase 2 在写入瞬间一次性解决,vault 不维护"事后周期补 wikilink"的通道(`auto_cognition_design.md` §9.2 立场:关系建立在写入瞬间)。详 `hierarchical_summary.md` §13.2 Q4。 -> -> 以下保留原 reinforce 设计内容作为历史快照,**不实施**。 - -**(以下内容已作废,仅作历史快照)** - -**类比**:NREM 突触强化 LTP —— 反复共激活的连接被强化。 - -**目的**:vault 演化中,某些节点对应该有 wikilink 但 dream 写入时漏召。reinforce 周期检测并 additive 补。 - -### 4.1 候选挖掘(三层过滤) - -``` -weekly batch (依赖 community detection): - for community in communities: - for (A, B) in all_pairs(community): - if has_wikilink(A, B): - continue - # 第一层: 字符串 mention 锚点 - if not has_mention(A.body, B.frontmatter.name): - continue - # 第二层: embedding 相似度验证 - if embedding_sim(A.context_around_mention, B.body) < 0.7: - continue - # 第三层: 同 community (已经是,但显式说明) - candidates.append((A, mention_pos, B)) -``` - -**三层过滤的角色**: - -| 层 | 防的是 | -|---|---| -| 字符串 mention | 大幅降候选数(从 O(N²) 降到 O(实际共现)) | -| embedding 相似度 | 防同名异义("Apple" 公司 vs 水果)| -| 同 community | 防表面术语共现但语义无关 | - -### 4.2 决策(单票即可,门槛较高) - -reinforce 是 additive 低风险动作,不需要多数票: - -``` -for (A, mention_pos, B) in candidates: - vote = LLM("A.body 在该位置提到 B 的概念。是否合理加 [[B.md]] 链接?") - if vote.confidence >= 0.85: - additive_wikilink(A, mention_pos, target=B.path) - → CAS 写入 (E-1 自动满足:additive 只增不删) - → audit 记录 - else: - 丢弃 -``` - -### 4.3 边界 - -| 维度 | 决策 | -|---|---| -| **只 additive 加 wikilink** | 不改 body 文字,不升级 typed predicate(predicate 升级是语义判断,留 dream)| -| **alias 保留原文** | `[[B.md\|<原文 mention>]]`;原文一字不改 | -| **写入位置** | mention 第一次出现处加;后续保持原文(防 wikilink 满文) | -| **不动 anchor** | 与 dream 一致 | -| **守恒** | E-1 天然满足(纯增) | -| **rollback** | 误链发生时,人 / agent 直接编辑 body 删除 wikilink 即可;reinforce 不维护"我加过哪些"audit log(每次动作进 `audit//consolidate_actions.md`)| - -### 4.4 reinforce 与 dream 的边界 - -dream 写入时 LLM 应已尽力召回相关节点 + 加 wikilink。reinforce 是**周期性兜底** —— 写入瞬间漏的、术语后才一致的、被 split 拆出来后才相关的,在 reinforce batch 里被检出。 - -这不违反"consolidate 不修 dream 漏的"立场 —— **dream 漏的 wikilink 在巩固阶段补,是合法工作**(它的依据是 dream 单点视角永远做不到的"周期统计 + 全局视角");**dream 漏的语义抽象在巩固阶段不补**(那是 dream 的语义判断,consolidate 不重做)。 - ---- - -# Part B — 独立工作 - -P0-P3 围绕 community,这两个动作独立运行。 - -## 5. split(过载分化:inline 写后) - -**类比**:海马表征过密 → 分化新单元。 - -**目的**:节点 body 累积过长 / 主题离散后,拆成 parent overview + N children,保持单节点"一个原子语义单元"的粒度。 - -### 5.1 触发模型(写后立即,inline) - -split 是 5 大动作中**唯一 inline** 的 —— 跟 dream 写入流强耦合,不走 weekly batch: - -``` -dream / split 写 body 成功 (CAS 通过) - └─ if len(body) > T_token (default 2000): - └─ LLM 判离散度 - └─ if is_overloaded: - └─ enqueue split job (FIFO, CAS-protected) - └─ return (不阻塞 dream) -``` - -理由:节点过载是**写入瞬间的本地信号**(token + 离散度),延后无价值;反应即时。 - -### 5.2 split 动作 - -``` -LLM 看 parent body: - - 拆成 1 个 parent overview body + N 个 children body - - 每个 child 自带 [[parent]] 反向链接 - - inbound 不动 (F-10) - ↓ -机械 outbound 守恒校验 (E-2): - (parent_new ∪ ∪children_outbound) ⊇ parent_old - 失败 → LLM 重试 → 二次失败拒写 + audit - ↓ -事务式 CAS 写入: parent body 改写 + N 个新 children 文件创建 - ↓ -audit + cooldown 设置 (parent + children 进 cooldown,与 merge 互锁) -``` - -### 5.3 split 与 abstract 的协同(关键) - -| | 起源 | 方向 | 触发 | -|---|---|---|---| -| split overview | 单节点过载分化 | 自上而下(一拆多)| inline 写后 D3 | -| abstract summary | 多节点抽象凝聚 | 自下而上(多归一)| weekly batch + 稳定度阈值 | - -**协同**:split 产出的 overview 节点会被 §2.5 的"已有 hub"判据识别,abstract 不重复创建。两者互补,不冲突。 - ---- - -## 6. archive(时效衰减:让长期不激活的节点淡出) - -**类比**:突触代谢稳态 —— 长期不用的连接被减弱,但不删除。 - -**目的**:让 retrieve 默认排除"已不活跃"的节点,提升信噪比;不删 vault 文件,保持可逆。 - -### 6.1 recency_score:连续衰减信号 - -``` -recency_score(node) = - exp(-(now - last_update) / τ_update) # 时间衰减 - × (1 + log(1 + last_hit_count_30d)) # 活跃度增强 - × (1 + log(1 + inbound_count) / SCALE) # 中心性 cushion(避免 hub 被冷藏) -``` - -| 参数 | 默认 | 含义 | -|---|---|---| -| τ_update | 60 days | 时间衰减常数 | -| SCALE | 10 | 中心性 cushion 缩放 | - -输出:`meta/recency.json`,每节点 0.0~1.0 连续值。 - -### 6.2 archived 派生快照 - -archived 是 recency_score 的二元化派生: - -``` -archived = {node | recency_score(node) < 0.15} -``` - -输出:`meta/archived.json`,recall 默认过滤这个列表。 - -### 6.3 解冻 - -任何动作触及节点 → 自动从 archived 移除: -- retrieve 命中(写 access_log) -- dream update 触及 -- merge / reinforce 触及 - -下次 batch 时 recency_score 重算自然超过阈值。 - -### 6.4 daily 节奏 - -archive 是唯一不需要 community detection 的动作 → 节奏可以更快(daily batch),让冷启动后第二天就能影响 recall。 - -``` -daily batch: - 1. 读 access_log (retrieve / dream / consolidate 钩子记录的命中事件) - 2. 重算 recency_score for all digest nodes - 3. 输出 meta/recency.json - 4. 阈值过滤 → meta/archived.json -``` - ---- - -# Part C — 共享基础设施 - -## 7. F-invariants 松绑与守恒规则 - -旧 F-invariants(`auto_dream_design.md` §4.3)在"vault 只读"立场下定义,新立场要松绑。但松绑不是"自由改",是用**动作级守恒规则**换"一刀切禁令"。 - -### 7.1 F-invariants 修订 - -| # | 旧约束 | 新立场 | -|---|---|---| -| **F-1** | 0 文件移动 | **改为**:"非 consolidate 动作不移动文件";merge 删除 loser 文件是**合法移动**(逻辑上等价 retarget) | -| **F-2** | 改正文限定 subject | **改为**:"dream / split / reinforce 改 subject body;merge 在受控算子内可改 inbound 节点 body";其它阶段(recall)绝不改 | -| **F-3** | maintainer 只做 split | **作废** —— consolidate 5 大动作合法 | -| **F-10** | inbound 不动 | **改为**:"split 时 inbound 不动";merge 必须 retarget inbound(机械算子) | -| **F-11** | wikilink 是 body 一部分 | **保留** —— 没有"独立的边"基础设施 | - -### 7.2 动作级守恒规则矩阵 - -| 动作 | 置信度门槛 | 守恒规则 | -|---|---|---| -| **abstract** | community 节点 ≥ 5 + 稳定度 ≥ 0.7 + 活跃度 ≥ 3 + 多样性 ≥ 0.5 + 无 hub | 出边 ⊇ "关键支柱"列表 + 出边 ⊇ source 节点 60%(机械)| -| **merge** | LLM 多数票 ≥ 2/3 + similarity ≥ 0.6 + body overlap ≥ 0.5 | 信息守恒(merged.body ⊇ A ∪ B)+ 出边 ⊇ A.out ∪ B.out + inbound 全 retarget(机械)| -| **reinforce** | LLM 单票 ≥ 0.85 + 同 community + mention 锚点存在 + embedding ≥ 0.7 | E-1 天然(additive)| -| **archive** | recency_score < 0.15 | 软标记,无破坏性 | -| **split** | token > T + LLM 判离散 | E-2(parent ∪ children ⊇ parent_old)+ inbound 不动 | - ---- - -## 8. cooldown 与防循环 - -5 大动作之间的潜在循环: - -``` -A merge B → AB body 长 → split AB 回 A' + B' → 又 merge → ... -``` - -防御: - -| 互锁对 | 窗口 | 实现 | -|---|---|---| -| **split → merge** | 2 weeks | 刚 split 出的兄弟节点不参与 merge 候选 | -| **merge → split** | 2 weeks | 刚 merge 的节点不参与 split 评估(D3 检测时跳过)| -| **merge → merge**(同对反复) | 12 weeks | 同一 path 12 周内被 merge 又被识别为新 merge 候选 → audit 警报,人介入 | -| **abstract → merge**(同主题反复 abstract) | 4 weeks | 刚 abstract 出的 hub 节点 4 周内不参与 merge 候选 | - -cooldown 状态外置 `meta/cooldowns.json`,不污染 vault。 - ---- - -## 9. CAS 写入协议(共享基础设施) - -CAS 是 dream(`auto_dream_design.md` §4.2)、split / merge / reinforce / abstract(本文档)**多方共用**的 vault 写入协议。归本文档因 consolidate 是写入主战场。 - -archive 不写 vault → 不走 CAS;它写 `meta/`,各任务的 atomic write(write-temp + rename)即可。 - -### 9.1 协议 - -``` -1. 读 + 记戳: read body → version_stamp = sha256(body) | mtime -2. 决策: LLM / 算法 → 产 planned new_body -3. CAS 写入: 重读 body 比 version_stamp - - 未变: 跑动作级守恒校验 → 通过 → atomic write (write-temp + rename) → done - - 已变: 丢弃 planned new_body, 带最新 body 重走 step 1 -4. 守恒校验失败: LLM 重试一次, 二次失败拒写 + audit -5. 重做次数上限: 3 次 → 跳过候选 + audit log -``` - -### 9.2 事务式 merge / split 写入 - -merge 涉及多文件写入(winner body + N 个 inbound retarget + loser 删除);split 涉及多文件创建(parent body + N children)。需要事务语义: - -- 准备阶段:全部 planned new_body 写到 temp 区(带 version_stamp) -- 提交阶段:逐个 CAS 检查 + atomic write(write-temp + rename) -- 任一 CAS 失败 → 全部回滚(temp 区清理,已 rename 的恢复) - -实现细节:可借 fs-level 事务库(如 `pyrsistent` 模式)或自实现 journal。M0 起步用最简的"先全部检查 → 再全部写入"两阶段,接受窗口期(检查到写入间)的极小并发风险。 - -### 9.3 create 路径 race - -merge / abstract 都可能并发 create 同一 path → atomic create(`O_CREAT | O_EXCL`)只让一个赢;输者 EEXIST → 重走 step 1(此时大概率改判 update 或丢弃)。 - -### 9.4 不解决 - -- 跨进程并发(多 reme 实例同 vault)→ 不在 M0,需 fs lock(M1+) -- 高冲突 workload(同候选反复触发)→ 重做上限触发后 audit - ---- - -## 10. D 健康检查(D1 / D10) - -不属"巩固"主语义,但跟 consolidate 同节奏(周期 batch 顺手跑),归本文档: - -| # | 信号 | 节奏 | 修复策略 | -|---|---|---|---| -| **D1** | 断链(wikilink → 不存在 path) | 写时 inline + weekly batch 巡检(双重保险)| 就地删 wikilink 或保留 alias 文本 → audit | -| **D10** | provenance 断裂(digest 反指的 daily/resource 不可达)| 同上 | I-不变量违反 → 严重告警 + 人介入 | - -D1 / D10 不算 5 大动作之一(它们不解决"vault 演化问题",只检测异常)。但它们的修复(就地删 wikilink)需要走 CAS,所以协议共享。 - ---- - -# Part D — 契约与实施 - -## 11. 维护 → 检索契约 - -5 大动作产物给 retrieve 消费(详细 retrieve 逻辑见 `auto_recall_design.md`): - -| 产物 | 路径 | 写入者 | 读取者 | 缺失行为 | -|---|---|---|---|---| -| **vault 节点变化** | `digest/**.md` | merge / split / reinforce / abstract | recall(图遍历 / 命中) | — | -| **communities** | `meta/communities.json` | community detection | recall + abstract / merge / reinforce | 不做同社区 boost / 三个动作跳过 | -| **community changes** | `meta/community_changes.json` | community detection | abstract 决策 | abstract 跳过(无稳定度判据)| -| **recency** | `meta/recency.json` | archive daily batch | recall | recency_factor = 1.0 | -| **archived** | `meta/archived.json` | archive daily batch | recall(默认过滤)| 不过滤 | -| **cooldowns** | `meta/cooldowns.json` | split / merge | consolidate 内部 | 无防御循环 | -| **access_log** | `meta/access_log.json` | recall(写命中) + archive(聚合) | archive(读 recency) | recency 不衰减 | -| **dups uncertain** | `audit//dups_uncertain.md` | merge | 人 / agent | — | -| **consolidate actions** | `audit//consolidate_actions.md` | 全部 5 动作 | 审计 | — | -| **D1 / D10 健康** | `audit//health_*.md` | inline check + weekly | 人 / agent | — | - -**契约稳定性**:`meta/*.json` 都带 `version` + `computed_at`;recall 启动时校验 version,不兼容则降级。 - ---- - -## 12. 与 dream 模型的引用关系 - -本文档松绑了部分 F-invariants(§7),但仍在 dream 定义的底层模型上工作: - -| 引用 | 来源 | -|---|---| -| wikilink 基础语法 | `auto_dream_design.md` §3 | -| 节点 / 边模型 | `auto_dream_design.md` §4 / §2 / §3 | -| F-invariants 原始定义 | `auto_dream_design.md` §4.3(本文档 §7 修订)| -| 边守恒 E-1 / E-2 / E-3 | `auto_dream_design.md` §4.4 | -| 路径即 ID / rename | `auto_dream_design.md` §2 | -| anchor 不引入 | `auto_dream_design.md` §3 | -| provenance 载体形态 | `auto_dream_design.md` §4.2 | -| dream 写入路径 | `auto_dream_design.md` §4.2 | - ---- - -## 13. 下一步(M0 → M1.1 → M1.2 → M1.3 → M2) - -实现进入 `reme4/steps/consolidate/` 时,本文档与 `auto_dream_design.md` / `auto_cognition_design.md`(顶层)/ `auto_recall_design.md` 共同作为契约依据。 - -### M0:基础设施 + 完全可逆动作 - -- ✅ split inline 触发 + LLM 离散度判 + E-2 守恒(基础部分) -- ⏳ **community detection weekly batch**(Leiden via `igraph`)+ `meta/communities.json` + `meta/community_changes.json` -- ⏳ **archive daily batch** + recency_score + access_log 收集 -- ⏳ CAS 写入框架 + version_stamp + EEXIST race + 重做上限 + audit -- ⏳ D1 / D10 写时 inline 检测 + weekly 巡检 - -### M1.1:abstract(P1,additive 最低风险) - -- ⏳ abstract 候选挖掘(community 大小 + 稳定度 + 活跃度 + 多样性 + 无 hub 五重判据) -- ⏳ abstract LLM prompt(三段输出 + 长度限制 1500 token) -- ⏳ grounding 守恒校验(出边 ⊇ 关键支柱 + 出边 ⊇ source 60%) -- ⏳ "已有 hub" 结构化判据(outbound 覆盖度 ≥ 60%) -- ⏳ **关键验证点**:实测 split parent 是否被识别为 hub - -### M1.2:merge(P2,lossy 高门槛) - -- ⏳ 候选挖掘(community 内 description 相似 + body 重合 + cooldown 检查) -- ⏳ 多数票框架(N=3 LLM,2/3 通过) -- ⏳ merge prompt(B 方案:"只合并不精化") -- ⏳ inbound retarget 机械算子(扫所有 `[[loser.md]]` → `[[winner.md]]`,alias / predicate 保留) -- ⏳ 事务式多文件 CAS 写入 -- ⏳ 灰色地带报告(`audit//dups_uncertain.md`) -- ⏳ cooldown 框架(`meta/cooldowns.json` + 各动作互锁) - -### M1.3:reinforce(P3,价值最低,可缓做) - -- ⏳ 候选挖掘(三层过滤:mention + embedding + 同 community) -- ⏳ 单票决策(门槛 0.85) -- ⏳ additive wikilink 写入(alias 保留原文) - -### M2+:演进 - -- ⏳ 多层级 community(L2 super-community)+ L2 abstract -- ⏳ delete(永久删除 vault 文件)—— 视 dogfooding 效果决定是否开启 -- ⏳ predicate upgrade(typed link reinforce —— 当前 reinforce 只 additive 加无谓词) -- ⏳ PageRank 替代 simple inbound count(若 retrieve 质量瓶颈在中心性) -- ⏳ 跨进程并发(fs lock 支持多 reme 实例同 vault) -- ⏳ Leiden 边权重(按 predicate 类型加权) diff --git a/docs4/old/auto_dream_design.md b/docs4/old/auto_dream_design.md deleted file mode 100644 index 83b8b8d7..00000000 --- a/docs4/old/auto_dream_design.md +++ /dev/null @@ -1,352 +0,0 @@ -# auto-dream 设计(桶 / 节点 / 边 / 演化) - -> 本文档:digest 沉淀层的**桶**(物理布局)/ **节点**(原子单元)/ **边**(wikilink)/ **演化**(dream create_or_update;split 归 maintain)。 -> -> 配套阅读: -> - `structure.md` §1.2(数据视角)/ §2(三层存储)/ §3.5(digest 动作) -> - `auto_memory_design.md`:daily 实时事件 = dream 的入流之一 -> - `auto_consolidate_design.md`:M split / D 检测 / CAS 写入协议(dream 模型的运行时实现) -> - `auto_cognition_design.md`:auto-cognition 三阶段顶层思想 —— dream 是其 Stage 1(写入阶段)的实现 -> -> **核心**:digest = **浅桶(shallow bucket)+ flat .md** + **一张图(节点 + 边)**;dream 定义模型与主流程(create_or_update),maintain 负责 split / 写入运行时。 -> -> **关键收敛**:digest 不分"逻辑层"。所有 .md 文件都是同一种节点,内容决定它扮演什么角色(主题概览 / 概念定义 / 方法描述 / 实体记录 ...)。"主题"从图中涌现,不是结构性宣告。 - ---- - -## 0. 问题陈述 - -digest 是 agent 长期记忆的"组织化沉淀"层,与三层架构的另两层职责互补: - -| 层 | 组织主轴 | 形态 | -|---|---|---| -| resource/ | 时间(`/`) | 外部原始资料,不可变 | -| daily/ | 时间 + 任务(`//`) | agent 任务过程,半可变 | -| **digest/** | **语义** | **跨任务知识,可重组** | - -dream 设计回答四个问题:**桶**怎么布局 / **节点**长什么样 / **边**怎么连 / **演化**谁负责怎么做。 - ---- - -## 1. 桶(物理布局) - -| 维度 | 决策 | -|---|---| -| **物理几何** | `digest//.md`;**浅桶一层**(顶多两层),桶内 flat | -| **bucket 角色** | **仅承担物理归档 + OS-level 浏览锚点**;不承担语义本体角色 —— 主题由图中节点表达 | -| **bucket 集合** | **代码内 hard-coded**(`reme4/steps/evolve/dream.py` 的 `BUCKETS` 常量),不通过配置外置,不由 dreamer / maintainer 动态生成 —— 三桶设定是 dream 模型本身的一部分(Phase 2 prompt 按 bucket 专化),不是可调参数 | -| **集合视图** | 桶名内嵌在 prompt 中(extract 阶段三桶判别启发 + 三份独立 integrate prompt);不再生成独立 `_buckets.md` 视图 | -| **初始化** | opinionated **三桶**,按"答什么问 + 谁在问"划分:`procedure`(答"怎么做 X" —— 步骤 / 方法 / runbook)/ `personal`(答"X 是谁 / 喜欢什么 / 不要做什么" —— 用户 / 团队 specific 身份 + 偏好)/ `wiki`(答"X 是什么 / 发生了什么 / 决策依据是什么" —— 通用知识 / 定义 / 原则 / 观察 / 决策先例;**也是默认兜底**) | -| **bucket 主页** | 不强制存在;split 累积出层级时 parent 节点天然成为浏览主页(中心性涌现,非架构必需) | -| **新节点归属** | bucket 由 **Phase 1** 在 unit 级别分配(写进 `MemoryUnit.bucket`),Phase 2 据此分发到对应 bucket 的专用 prompt;LLM 不能造新桶 | -| **未归类节点** | Phase 1 找不到更明确归属时强制归入 `wiki` —— 它就是默认兜底,不是失败状态 | -| **跨桶 move** | F-1 已禁止;若必须做(人工介入修错桶),走一次 `wikilink_handler.retarget_links(old, new)` | - -**`wiki` 兜底桶**: - -| 维度 | 内容 | -|---|---| -| **语义** | "通用知识 / 默认归属" —— `wiki` 在三桶中 scope 最广(定义 / 原则 / 观察 / 决策先例),Phase 1 没有更明确归属(不属于 `procedure` 的可执行流程,也不属于 `personal` 的用户 specific 偏好)时归入此桶;**是合法常态,不是故障状态** | -| **路径** | `digest/wiki/.md`,与其它 bucket 完全等同;节点演化与其它桶一致 | -| **错桶后续** | 不主动跨桶 move;若严重,人工 mv + `retarget_links(old, new)` | - -**为什么 `wiki` 兜底,而不是另设 `unknown`**:三桶设计中 `procedure` / `personal` 都有明确语义边界,剩下的"X 是什么 / 决策依据 / 一般原则"自然落在通用知识那一边 —— 这恰好就是 `wiki` 的本职。再设独立 `unknown` 会出现两类语义重叠的兜底(`wiki` 的"通用知识" vs `unknown` 的"分类未定"),反倒让 LLM 在 Phase 1 多一道无意义的犹豫。`wiki` 节点本身就是合法常态,不需要后续清理。 - -**为什么是浅桶而不是深树**: -- 物理浏览有"主题轮廓"(打开 `digest/wiki/` 能看到这一族节点),不像纯 flat 那样毫无锚点 -- 节点不被深路径绑死("属 wiki/auth 还是 wiki/session"这种归属焦虑被消解 —— 一个节点可以同时被多个主题通过 wikilink 引用) -- F-1(0 文件移动)+ 平铺后,深树的核心收益(子树重组)消失,只剩深路径维护负担 -- **固定三桶的关键意义**:LLM 在 dream 桶决定时只做"分类"(三选一),不做"造类" —— 决策面坍缩,跨任务跨时间稳定;不会出现 "knowledge" / "wiki" / "concepts" 三个语义重叠的桶共存。三桶覆盖 personal-knowledge 的核心切片(做什么 / 谁喜欢什么 / 知识本身),进一步细分由桶内 wikilink 图自然涌现 - -**已排除**:动态扩桶 / 拒绝写入(候选丢失)/ 强行选最近似专属桶(本体污染) / 把 bucket 数推回 6+(决策面失控)。 - ---- - -## 2. 节点 - -| 维度 | 决策 | -|---|---| -| **粒度** | atomic;一个 .md 文件 = 一个原子单元(概念 / 方法 / 实体 / 案例 / 原则 / 主题概览)| -| **节点角色** | **由 body 内容决定,不由 frontmatter 类型标记**;同一节点扮演"主题概览"还是"具体方法",看它的 body 写了什么 | -| **身份(ID)** | **vault-relative 路径(含 `.md`)即节点身份** —— `digest/auth/jwt-rotation.md` | -| **`name` frontmatter** | 文件名 basename(不含扩展名),与文件名同步 —— 检索 hint / 人读标签,**不当 ID 用** | -| **frontmatter 保留字段** | 只有 `name` + `description`(reme 核心保留)| -| **可选 `kind` 字段** | 例:concept / procedure / preference / observation / ...;**消费层 schema 提示**,reme 核心透明,不读它做结构决策。与 bucket 是不同概念 —— bucket 决定物理归档(三桶)+ Phase 2 prompt 走哪份;`kind` 是更细粒度的 frontmatter 标签,留给消费层自由使用 | -| **文件名冲突** | 同 bucket 内文件名冲突 → 文件系统层断言(写入即拒);不需要独立检测信号 | -| **rename** | 一次 `wikilink_handler.retarget_links(old_path, new_path)`(机制现成);无 alias 表,无透明展开 | - -**为什么 atomic + 路径即 ID**: -- **节点粒度 = retrieve 精度上限** —— semantic 检索召回 "一个原子单元" 远比召回 "一个 5000 字的主题文档" 信噪比高 -- **wikilink 在 atomic 粒度才真有意义** —— `[[digest/auth/jwt-rotation.md]]` 指向"一个具体方法"比指向"auth 主题文档"精确一个数量级 -- F-1 + 平铺 + 下层 immutable 后,slug abstraction 的核心价值(移动鲁棒性)蒸发;路径作 ID 与 `wikilink_handler.py` 默认形态完全对齐(*Recommended form: full path relative to the vault with extension*) -- provenance wikilink 反指 daily/resource 本来就用路径,统一后整个 vault 一种 wikilink 形态 - -**"主题概览节点"靠内容识别,不靠前缀 / kind**:`hub__` / `topic__` 前缀**不存在**;文件名自然命名(`auth-fundamentals.md` / `jwt-rotation.md`)。主题概览身份是图位置(中心性 / split parent)+ body 形态共同涌现。 - ---- - -## 3. 边 - -参考实现:`reme4/utils/wikilink_handler.py` + `reme4/schema/file_link.py`。 - -| 形态 | 写法 | 说明 | -|---|---|---| -| **基础** | `[[.md]]` | literal,不隐含 `.md`,不自动短链补全 | -| **alias** | `[[path.md\|display-text]]` | rewrite 时 alias 保持 | -| **image** | `![[image.png]]` | 资源引用,不是知识边 | -| **可选谓词** | `predicate:: [[path.md]]`(行级)/ `[predicate:: [[path.md]]]`(内联) | Dataview 风格;谓词在 `[[]]` 外,`[[]]` 内只保留纯目标 | -| **谓词标识符** | `[A-Za-z][A-Za-z0-9_]*`(`is_a` / `extends` / `causes` / `references` ...) | 词表**开放**,任意标识符 | -| **未类型化合法** | 绝大多数 wikilink 不加 predicate;`predicate=None` 是默认 / 常态 | | -| **边唯一性键** | `(target_path, predicate)` 二元组 | 同源同标不同 predicate = 不同边 | -| **不引入 anchor** | digest 设计层不使用 `[[path.md#section]]` | `FileLink.target_anchor` schema 保留(供其它消费层),digest 层永远写 `None` | - -**reme 核心对 predicate 的"透明"边界**(关键): -- 横向 link/ retrieve 中心性 —— 都**聚合所有 predicate** 算,不分桶 -- 只有 edge 唯一性 / 反向索引会用到 predicate(否则 `[[A]]` 和 `is_a:: [[A]]` 会被当作同一条边互相覆盖) -- 消费层若要按 predicate 做更精细的推理(如"taxonomic 路径只走 `is_a` 边"),自己读 `FileLink.predicate` 即可 - -**与 `kind` 一致的立场**(与 [[reme4_schema_layering]] 对齐):reme 核心**只有节点 + 边两种结构类型**;`kind` / `predicate` 都是内容标签,绝不参与"hub / topic / leaf"这类结构角色判断。 - -**为什么不引入 anchor**:LLM 想"指向具体子主题"时,**正确做法是让那个子主题升级为独立节点**(必要时通过 split),不在过载 parent 内部用 anchor 凑合。anchor 在 digest 层无语义;prompt 必须明确告知 LLM 写 wikilink 时不带 `#section`。 - ---- - -## 4. 演化 - -### 4.1 演化只做两件事 - -| op | 谁 | 何时 | 改什么 | -|---|---|---|---| -| **dream**(create_or_update) | dreamer(本文档 §4.2) | 入流(新材料进入) | 创建新节点 / update 已有节点 body(语义守恒重写;UPDATE 内分 **CORROBORATE / REFINE / CORRECT** 三种 flavor,详 §4.2.3) | -| **M split** | maintainer(`auto_consolidate_design.md` §1) | 节点过载(token / 主题离散度超阈值) | 把 parent body 拆成 parent overview + N children;parent 文件原地 | - -> **关键观察**:"主题概览节点"不是一种 kind,也不是 maintainer 主动涌现的产物 —— 它是 split 的副产品(parent 节点天然成为该 cluster 的 overview,中心性自然高)。 - -显式排除: -- ❌ merge / dissolve / re-edge / unify —— 跨节点重组不做(同概念二次进入靠 dream update;错桶节点不主动 move) -- ❌ 完美归簇 —— F-5 留白,不确定就不动 -- ❌ 实时一致 —— 异步 / eventual - -### 4.2 dream(create_or_update)流程 - -**dream = dreamer 入流唯一改 body 的操作,且只改 subject node。** - -#### 4.2.0 digest 是抽象记忆层 - -Digest 是 agent 长期记忆的**抽象层** —— 类比前额叶对认知的聚合。原始细节(数字、流程文本、谁说了什么)留在材料(daily / resource),digest 只承载细节淡忘后仍想调取的那一层:原则、模式、可作为先例的决策、认知要点。这一立场决定了 dream 流程的形态:**Phase 1 识别抽象,Phase 2 把抽象登记到 digest 节点**。 - -#### 4.2.1 两阶段流程 - -``` -material 进入(daily / resource 选定 scope) - │ - ▼ -Phase 1 — extract (轻量) - LLM 读材料 → 识别其中教导的"抽象"(原则 / 模式 / 先例) - → 为每个 unit **分配 bucket**(procedure / personal / wiki) - → 发出 ExtractedUnits 结构化输出 = K 个 sub-unit - (每个: {name, bucket, summary}) - 说明:多个支撑事实说明同一抽象 → 合并为同一 sub-unit - (倾向少而精);Phase 1 是 gate —— - 无新抽象时发空列表,Phase 2 跳过整轮; - bucket 由 Phase 1 一次性决定,Phase 2 不再回选 - │ - ▼ (Python 外循环,K 次) -Phase 2 — integrate (per sub-unit,**按 bucket 分发到独立 prompt**) - │ system prompt = integrate_system_prompt_ - │ procedure / personal / wiki 三份独立 prompt,**不共用一套** - │ sub-unit ↔ digest 节点 1:1;Phase 2 必写,无 SKIP 出口 - │ - ├─ RECALL: search(关键词 + 向量 + RRF) + traverse(对 top hit - │ 做图扩展,**跨 bucket**) → 候选路径集 - │ - ├─ HIT: frontmatter_read 廉价 triage → read 完整 body - │ 确认候选是否承载同一抽象 → hit 集合 - │ - ├─ 决策: - │ ├─ hit 空 → CREATE 在 digest//.md - │ └─ hit 非空 → UPDATE 路径 (CORROBORATE / REFINE / CORRECT; - │ 目标可在任意桶 —— 召回是跨桶的) - │ - ▼ -写入(canonical write 创建 / canonical edit 改正文) - │ - ▼ -agent 上报 IntegrateOutcome {action, target_path} -``` - -**两阶段 trade-off**:Phase 2 把完整材料发 LLM K 次(一次一 sub-unit),不做 summary loss;代价是 K 倍 prompt token。换来的是 Phase 1 只做"识别抽象 + 分类 bucket"两件事(粒度集中在一个 prompt),Phase 2 每次会话上下文干净、bucket-specific prompt 让推理聚焦于"这一桶要怎么写 / 怎么改"。 - -**Phase 2 的 bucket 专化**:三桶各有独立 system prompt,因为各桶的 body 形态、决策偏置不同 —— `procedure` 节点是 runbook 风(触发 / 步骤 / 前置 / 失败模式),`personal` 节点是规则风(rule + Why + How to apply),`wiki` 节点是百科风(定义 + 性质 + 关系)。共用一份通用 prompt 会让"应该写成什么样"的指导被稀释,bucket 信号靠一段 if-this-then-that 散文承载,效果劣于让每桶自带专属 prompt。 - -#### 4.2.2 召回 → 内化分类 → 决策 → 织突触(ReAct agent 一体完成) - -Phase 2 是单个 ReAct agent 在一个 loop 内完成 4 件事 —— **不拆 stage,不引入外部机械步骤**,只通过 prompt 引导 agent 把 dedup 与 synapse 这两类判断都做透。当前默认 `search(limit=5)` 不够,prompt 已显式引导更深召回。 - -**4 步流程**(整段由 ReAct agent 自主组织调用): - -| # | 步 | 关键动作 | -|---|---|---| -| 1 | **召回 —— 多角度宽召** | 显式 `limit=20-30` × 两轮 search(一次 hybrid,一次 `vector_weight=1.0` 纯语义)+ `traverse depth=2` 拓扑补充 | -| 2 | **内化分类** | `frontmatter_read` triage + 必要时 `read` body;对每个候选**内化打 label**(只在思考中分类,不输出):`same_abstraction` / `related` / `unrelated` | -| 3 | **决策** | 0 个 `same_abstraction` → CREATE;1 个 → UPDATE(选 flavor) | -| 4 | **织突触** | CREATE 或 UPDATE 都把所有 `related` 候选织入 body 作 `[[Y.md]]`;CREATE 一次性织全;UPDATE additive 加 wikilink | - -**两类内化判断的本质**: - -| 判断 | 服务 | 输出形态 | -|---|---|---| -| **同抽象?**(dedup)| 决定 CREATE / UPDATE | 0/1 个 target(决策面排他) | -| **相关?**(synapse)| 决定织哪些 wikilink | N 个 related 候选(决策面累加) | - -两者是同一个 ReAct agent 在看完 candidates 后的**两层独立判断**,共享同一批召回结果,**不需要分两轮 LLM 调用**。 - -**召回**(对应 prompt step 1):dream 用专属的 `node_search`(`reme4/steps/index/node_search.py`),**不**用通用 `search`,**也不用 `traverse`** —— 详 §4.2.2.1(traverse 是 retrieve-time 子图挖掘工具,跟 dream 写入场景错位)。 - -| 调用 | 找什么 | -|---|---| -| `node_search(query=<...>, limit=20-30)` | digest 内节点级 hybrid 召回(vector + BM25 RRF),返回 path + frontmatter | - -**召回结果服务两类判断**:dedup(`same_abstraction` label,是否同抽象 → CREATE / UPDATE)和 synapse(`related` label,是否相关 → 织 wikilink)是 LLM 在**同一批 candidates** 上的两类内化 label。原"两轮 search(hybrid + vector_only)"是设计冗余 —— 同一批候选 LLM 自己能判 same/related/unrelated,模式切换无意义。**调用次数由 agent 自决**:一次通常够;若 unit 跨多个概念维度,agent 可发起多次不同 query 的召回,prompt 不强约束。 - -**HIT = `node_search` 返回 + read**:`node_search` 已内嵌返回每个 hit 的 frontmatter(`name + description`),agent 直接据此 triage,**不需要额外调 `frontmatter_read` 批量取 metadata**;仅对需要看 body 的少数候选用 `read`。**不可仅凭 frontmatter 决定 UPDATE**,body 才是判定依据。 - -##### 4.2.2.1 node_search vs 通用 search 的差别 + 为什么 dream 不用 traverse - -**node_search vs 通用 search**:dream 的召回需求跟外部 agent 的 RAG 检索**结构性不同**,因此用专属 step 而非复用 `search`: - -| 维度 | 通用 `search`(外部 agent)| `node_search`(dream Phase 2) | -|---|---|---| -| 用户 | 用户/外部 agent 的自然语言 query | dream 内部生成的 unit.summary | -| 结果粒度 | **chunk 级**(可能同一 node 多个 chunk)| **node 级**(同 path 聚合 max score)| -| 返回信息 | 完整 chunk text + scores | **path + name + description**(frontmatter 内嵌,无 body)| -| 范围 | 全 vault(daily / resource / digest) | **digest-only**(dream 永远只在 digest 找候选)| -| expand_links | 默认 `True`(给 agent 更多上下文)| **永远 `False`**(synapse 找的就是未 link 的)| -| 默认 limit | 5 | **20**(dream 需要宽召覆盖 synapse)| - -复用通用 `search` 会让 dream 拿到的候选**既粒度不对**(chunk 级,同 node 多次出现)**又信息冗余**(chunk text 不必要)**又被噪声污染**(daily / resource hits 永远不是 dream 的 UPDATE 候选)**又召回偏窄**(expand_links 把已 link 的拖回来,挤掉真正未 link 的 synapse 候选)。所以 dream 需要自己的 `node_search`。 - -**为什么 dream toolkit 不包含 traverse(或 dream_traverse)** —— traverse 是 **retrieve-time 子图挖掘工具**,跟 dream 写入场景**结构性错位**: - -| 维度 | traverse 的本性(retrieve / RAG)| dream 的真实需求(写入)| -|---|---|---| -| 方向 | 从已知中心向外扩散 | 从外部新材料找 vault 内相关候选 | -| 输入 | 已知种子节点 | 新材料的 unit.summary | -| 输出语义 | "X 的子图"(给读者上下文) | "X 应该 link 到哪些 Y" | -| 图遍历的角色 | 主操作 | 召回兜底(可有可无) | - -dream 写新节点要回答"vault 中谁跟我相关",这是**召回**问题(给 query 找相关),不是**遍历**问题(给中心找邻居)。**召回工具 = node_search;遍历工具 = traverse(留给 retrieve / 外部 agent 用)。dream 不需要遍历**。 - -(早期曾实现 `dream_traverse` 准备作为 dream toolkit 一员,后撤销 —— 实测拓扑遍历 vs vector 召回重叠率 ~95%,真正独特贡献 < 2%,且引入 LLM 调用 / 上下文 / 复杂度成本。详 git log。) - -**node_search 参数极简**(`query / limit` 两个):**mode 不需要**(同一批候选服务双判断);**exclude_paths 不需要**(self 由 LLM 自己识别,frontmatter 内嵌让 agent 一眼看出"这就是我");**min_score 不需要**(RRF 分数范围 0~0.025,跟 cosine 0~1 量纲完全不同,召回深度由 `limit` 控制就够)。**调用次数 agent 自决**:prompt 不约束"必须一次",unit 跨多个概念维度时 agent 可多次召回。 - -**node_search 召回算法:weighted node-level RRF**(vector + BM25 hybrid): - -- vector + BM25 各自独立召回 → 各自得到 chunk list(按各自 score 排序) -- 同 path 多 chunk 合并:取该 path 在两个 list 中的 max chunk score 位置作为 node rank -- RRF 融合:`score(path) = vector_weight × 1/(60 + rank_v) + (1-vector_weight) × 1/(60 + rank_k)` -- `vector_weight=0.7`(默认),vector 主导,BM25 作为兜底(覆盖专有名词 / 缩写等 embedding 可能 struggle 的字面 case) -- 输出 score 是 RRF 分(0~0.025 量级,不是 cosine);LLM 不依赖具体分数,内化判 same/related/unrelated - -**reinforce 并入立场**(对照 `auto_consolidate_design.md` §4 标作废):reinforce 不再是独立的 consolidate 动作 —— 它就是 step 4 的"织突触"。新节点写入瞬间一次性建立关系,vault 不维护"事后周期 batch 补 wikilink"的通道。F-2 自然守住 —— dream 只动新节点 body,不动其它节点。 - -**关键约束**(诚实承认): -- **写入即定型** —— 今天没织的 wikilink 以后没机会再织;vault 单调演化 -- **一次性 commit,无事后兜底** —— prompt 明示"宁可多织"(false positive 一眼能否决;false negative 永远沉默) -- **召回深度取决于 prompt 引导 + agent 配合** —— 不引入外部机械召回 step;prompt 已明示 `limit=20-30 × 两轮`,但仍是 ReAct agent 的开放执行 -- **dedup 与 synapse 在一次 LLM 调用内完成** —— 不拆独立 stage,共享召回结果,内化分类是免费的 - -#### 4.2.3 UPDATE 三种 flavor - -| flavor | 何时 | body 怎么动 | -|---|---|---| -| **CORROBORATE**(最常见)| 已有节点已覆盖此抽象,材料是又一个实例 | body 实质不变 —— 追加 `derived_from::` 溯源,可选强化措辞("似乎"→"确实") | -| **REFINE**(常见)| 已有节点覆盖了核心,但材料揭示新的范围 / 边界 / 维度 | 改相关片段使更精确,加新维度,加 `derived_from::`。正文在**精度**上长,不在**细节**上膨胀 | -| **CORRECT**(少见)| 材料与已有抽象矛盾 / 表明它被夸大 | 收紧到新旧证据都支持的窄形式,或内联标注 `> note: contradicted by [[...]]` 不仲裁。仍加溯源 | - -三种都受 §4.4 E-1 强守恒约束(出边集合不能缩)。 - -#### 4.2.4 关键边界 - -- **Phase 1 是 gate + 分类器** —— "不值得记忆"在 Phase 1 过滤(空列表);此外 Phase 1 还为每个进入 Phase 2 的 unit 分配 bucket(procedure / personal / wiki),决定 Phase 2 走哪份专用 prompt;Phase 2 必然写,sub-unit 与 digest 节点 1:1 -- **Phase 2 prompt 按 bucket 分发** —— `integrate_system_prompt_procedure` / `_personal` / `_wiki` 三份独立 system prompt,各自承载该桶的 body 形态指南与决策偏置,**不共用一份通用 prompt** -- **CREATE 写入桶 = Phase 1 分配的桶**;**UPDATE 目标可在任意桶**(召回跨桶,UPDATE 命中谁就写谁) -- **dream update 必须语义守恒** —— LLM 重写 body 时只能"融入"新内容,不能删除已有信息(只增不删 / 不改原意;冲突标注 `> 注:不同来源记载...`,不擅自仲裁);**当前实现下 E-1 强守恒是 prompt-only 自律**(canonical edit 不做机械 outbound diff;早期 `digest_edit` 子类的机械校验已在切到 canonical 工具时移除,详 §4.4) -- **Phase 2 用 canonical write / edit** —— 不再有 `digest_write_step` / `digest_edit_step` 子类;桶归位与边守恒都是 prompt-level 纪律 -- **dream 不改其它节点正文**(F-2) —— 只动 subject -- **dreamer 不做事件级伞节点** —— 材料本身(daily / resource 文件)就是 fan-out 点,每个 sub-unit 的 `derived_from::` 让材料天然聚合到所有派生节点 -- **0 出边节点合法**(没识别到合适邻居),后续 dream 进入时其它节点可以反向链回来 —— 不强求 LLM 一次性给全 -- **dream 漏判去重**(同概念建成新节点)→ 不主动兜底,接受重复;若 vault 累积明显重复,由 auto-consolidate 的 dups 检测周期 batch 产报告(`auto_consolidate_design.md` §3) -- **召回不做 bucket 粗筛** —— LLM 拥有完整跨桶视野,可识别"概念跨桶同抽象"(例如同一原则在 wiki 已有节点而 Phase 1 把新材料归入 personal,此时 UPDATE wiki 节点而非新建 personal 节点) -- **reinforce 已并入 dream synapse recall** —— 不存在独立的 reinforce 动作或周期 batch;突触构建(原 `auto_consolidate_design.md` §4 reinforce 的职责)在 dream Phase 2 synapse recall 阶段完成,新节点写入瞬间织全(详 §4.2.2) -- **vault 不维护事后补 wikilink 通道** —— 上一条的直接推论;cognition §9.2 立场("关系建立在写入瞬间")在此自然守住 - -**provenance 写出**: -- 行文中自然带:"... 该模式最早出现在 [[daily/2026/05/15.md]] 的实践中" -- **强制 typed predicate `derived_from::`** —— body 必须织入至少一条 `derived_from:: [[daily/...]]` 或 `[[resource/...]]`,纯散文形式不会被未来的 update / 守恒比对识别为边,下次 update 时会消失 -- LLM 直接做语义守恒重写(只增不删) —— 不走"首版 append 起步"的过渡路径 - -### 4.3 F-invariants(演化的硬约束) - -| # | 约束 | 含义 | -|---|---|---| -| **F-1** | **0 文件移动** | dream / split 都不移动现有文件;split 创建的是**新文件**,parent 原地 | -| **F-2** | **改正文限定 subject** | dream update 改 subject body;M split 改 parent body + 创建 children body;**没有任何操作改"其它节点正文"** | -| **F-3** | **maintainer 只做 split** | 没有 summarize / merge / re-edge / link / unify / dissolve | -| **F-4** | **一次一个候选** | M split 一次拆一个;dream 一次处理一个原子单元(N 候选 = N 次 dream) | -| **F-5** | **不确定时不动** | dream 拿不准 create 还是 update → 倾向 create;split 拿不准 cluster → 不拆 | -| **F-7** | **多归属合法** | 一个节点可被多个引用,也可指向多个;**没有"单父"约束** | -| **F-10** | **inbound 目标节点不动** | 所有 inbound 是裸链 `[[.md]]`(digest 不引入 anchor);split 时全部保持,parent 路径未变即天然有效 | -| **F-11** | **wikilink 是 body 的一部分** | 不存在"独立的边";reme 核心机械算子只感知字符层,语义责任在 LLM(prompt 自律);split 写入路径仍带机械 outbound 校验,dream update 当前是 prompt-only(详 §4.4) | - -### 4.4 边守恒(E-1 / E-2 / E-3) - -**前提**:wikilink 是 body 的一部分(F-11)。"边"不是独立抽象 —— body 一变,边就跟着变。reme 核心**没有"修边"算子**;边的所有变化都是 body 文本编辑的副作用。语义层守恒由两条腿承担:**prompt 自律**(LLM 在 update 时被反复要求 only-add, not-delete)+ **必要时的机械校验**(下文区分了哪些保留、哪些已移除)。 - -| # | 类别 | 规则 | 谁负责 | -|---|---|---|---| -| **E-1** | dream update 节点出边(subject 自身) | **强守恒**:新 body 出边 ⊇ 原 body 出边(`(target, predicate)` 二元组,predicate 一并守住) | **当前实现:LLM(prompt)自律** —— canonical `edit` 不做机械 outbound diff,prompt 反复强调"never drop wikilinks the old span contained" | -| **E-2** | split parent 出边(parent 拆解) | `(parent_new ∪ ∪children_outbound) ⊇ parent_old` | LLM(split prompt)+ 机械(由 maintainer 在 split 写入路径上实施,见 `auto_consolidate_design.md`) | -| **E-3** | inbound wikilink `[[.md]]` | split 时**不动** —— 仍指 parent;后续 dream 进入若 LLM 觉得 child 粒度更合适,直接加新边到 child(F-10) | 不动 | - -**E-1 实现取舍**:早期版本有专用 `digest_edit_step` 子类,在写入前对 body 做 outbound diff 比较,违反守恒时返回 `REJECT_CONSERVATION` 让 LLM 重试。在切到 canonical `edit` 工具(放弃 digest 子类)后,这道机械校验被移除 —— 守恒退化为 prompt-only 自律。trade-off: -- **失**:LLM 偶尔会在 REFINE / CORRECT 时无意丢弃 `derived_from::` 链;系统不再自动拒写 -- **得**:Phase 2 工具与系统其它写入路径完全一致(write / edit 是 canonical job),没有 dream-private 写入语义;prompt 复杂度下降,工具表面更小 -- **后续**:若 prompt-only 守恒在生产中被证伪(掉链率高),可在 canonical `edit` 上挂一个可选的 conservation 校验 hook(不再走子类化路径),由 dreamer 在调用前后各 read 一次做 diff;但当前不做 - -**强守恒(集合包含)而非等价**:`new ⊇ old` = 允许加新边(新关联),不允许减边(老内容不能丢);`new == old` 会拒绝任何新出边 → update 失去意义。 - -**predicate 守住** —— `[[A]]` ↔ `is_a:: [[A]]` 视为不同 key,升降级走显式 audit 路径,不走默认。重排 / 改 alias / 加新边都不被拦下(集合相同或只增)。 - -**provenance 不单列** —— 节点反指上游 daily/resource 的 wikilink 是 body 正文的一部分,跟其它 wikilink 走同一套 E-1 / E-2;reme 核心没有 provenance 专用算子。 - -**inbound anchor 这一类不存在** —— digest 不引入 anchor,所有 inbound 都是裸链,走 E-3 即可,无需机械 retarget 子流程。 - ---- - -## 5. 与其它层 - -| 上下游 | 关系 | -|---|---| -| ← **auto-memory**(daily) | dream 读 daily 作为入流;daily 写完即对 dream 可见 | -| ← **resource** | dream 读 resource 作为入流(只读,不写) | - -**关键边界**:dream 不写 daily / resource(I-2 / I-3);只写 digest 节点 body(自身 subject)。dream 不感知下游 —— split / 链接增强 / 索引刷新 / rename 等由 `auto_consolidate_design.md` / `auto_cognition_design.md` / `update_store_index_loop` 各自负责。 - ---- - -## 6. 下一步 - -本文档覆盖 dream 模型(桶 / 节点 / 边 / 演化)。组织端实现清单(M split / D 检测 / CAS 框架)见 `auto_consolidate_design.md` §10。 - -- ✅ **dream step 实现** —— Phase 1 extract(识别抽象 + 分配 bucket)+ Phase 2 integrate(per sub-unit,**bucket-specific prompt 分发**;`reme4/steps/evolve/dream.py` + `dream.yaml`,与 `auto_memory` 同级同形) -- ✅ **三桶 hard-coded** —— `procedure / personal / wiki`,`BUCKETS` 常量在 `dream.py` 顶部,Phase 1 通过 `MemoryUnit.bucket: Literal[...]` 由 Pydantic 强制约束 -- ✅ **provenance prompt 规范** —— `derived_from:: [[daily/...]]` / `[[resource/...]]` 强制(三桶 prompt 各自重申) -- ❌ ~~**边守恒校验工具**~~ —— 早期 `digest_edit` 子类的 outbound diff 校验已随子类一并移除(切到 canonical `edit`);E-1 现由 prompt 自律,详 §4.4 -- ❌ ~~**bucket 集合配置外置**~~ —— 撤销:三桶是 dream 模型本身的一部分,不做配置参数(`vault.yaml` 不再承载 `digest.buckets`,`_buckets.md` 视图也不再生成) -- 🆕 **Phase 2 召回拆 dedup / synapse**(2026-06-02 沉淀,详 §4.2.2)—— 当前 prompt 共用一次 `search(limit=5)`,既不够 dedup 精度也不够 synapse 覆盖;落地:`dream.yaml` 6 处(en + zh × 3 buckets)Recall 段改写,加 synapse 模式说明 + 写入即定型纪律 -- 🆕 **`file_store.default.embedding_model` 启用**(blocker)—— `default.yaml` 当前 `""`,synapse recall 用 vector_weight=1.0 模式必须开启;否则 `search` 退化为纯 BM25,dedup 也劣化 -- 🆕 **reinforce 并入立场写入**(详 §4.2.2)—— 与 `auto_consolidate_design.md` §4 标作废同步;`hierarchical_summary.md` §13.2 Q4 标解决 - -实现进入 `reme4/steps/evolve/` 时,本文档与 `auto_memory_design.md` / `auto_consolidate_design.md` / `auto_cognition_design.md` 共同作为契约依据。 diff --git a/docs4/old/auto_memory_design.md b/docs4/old/auto_memory_design.md deleted file mode 100644 index 76881eb3..00000000 --- a/docs4/old/auto_memory_design.md +++ /dev/null @@ -1,197 +0,0 @@ -# auto-memory 设计(实时事件拆分 / 写入 daily) - -> 本文档记录 reme4 中 **auto-memory** 的设计讨论 —— 把 agent 连续的对话 / 任务流切成离散的 daily 事件原子,inline 落到 `daily/` 层。 -> -> 配套阅读: -> - `structure.md` §2.1-2.2(daily 层定位)/ §3.4(sync 动作语义)/ §7.1(synchronizer 模块) -> - `auto_dream_design.md`:auto-memory 产物如何被 dream 消化(dream 读 daily 作为入流之一) -> - `auto_consolidate_design.md`:digest 的组织端 / CAS 写入协议;auto-memory 不直接复用,但事件级"拆"与节点级 split 在概念上同构(都把过载粒度切小) -> - `auto_cognition_design.md`:auto-cognition 三阶段顶层思想(写入 / 巩固 / 检索);daily 节点是 cognition 图视图的一部分(承载 `derived_from::` 反指),但不参与 Stage 2 巩固改造 -> -> **服务全景**:reme 服务两条主线 —— **auto-memory**(本文档,入流端 / daily 写入)与 **auto-cognition**(顶层思想:写入 = auto-dream,巩固 = auto-consolidate,检索 = auto-recall)。auto-memory 把 agent 实时事件流切成 daily 事件原子;它的产物是 dream(cognition Stage 1)消化的两路输入之一(另一路是 resource)。 -> -> **核心立场**:auto-memory 是 `structure.md` §3.4 `sync` 动作的实现侧 —— 强调 **inline 实时**与**事件边界检测**。是不是改名 sync → auto-memory 留给上层文档对齐,本文档聚焦机制。 - ---- - -## 0. 问题陈述 - -agent 的对话与任务过程是连续事件流(用户回合、工具调用、上下文切换、中断恢复),但记忆系统需要离散的、可独立检索的事件单元。auto-memory 解决这个切分问题。 - -| 输入 | 输出 | -|---|---| -| agent 当前事件流(对话回合 / 工具调用 / 任务切换信号);可选 `notify` 候选作为 cue | `daily///.md` 事件原子;`daily/.md` 主索引 | - -**设计目标**: -1. **事件边界尽量与 agent 语义意图一致** —— 同一个意图(同一个任务 / 同一段思路)→ 同一个事件;意图切换 → 新事件 -2. **inline 实时写入** —— 不滞后,不批处理;agent 一边工作,记忆一边落地 -3. **保持 daily 写权契约** —— I-2 单作者(同 folder 不并发改);folder 名 = summary note 名(I-3 可移动单元) - -**显式排除**(不属于 auto-memory 职责): -- ❌ 蒸馏 / 沉淀:那是 auto-dream(`auto_dream_design.md`)的事 -- ❌ 实体识别 / wikilink 自动补全:cognition 三阶段不在写入后做"事后补 wikilink"(详 `auto_cognition_design.md` §1.1);所有 wikilink 由 dream 在写入瞬间产出 -- ❌ 改写 resource / digest:auto-memory 只写 daily(I-1 / I-3) - ---- - -## 1. 已对齐决策 - -### 1.1 物理布局:与 `structure.md` §2.2 对齐 - -| 项 | 决策 | -|---|---| -| **主轴** | 时间 + 任务:`daily///` | -| **event-slug** | LLM 抽取的事件短名(snake_case / dash-case;不强制 schema),同 `` 下唯一 | -| **folder 内** | 一个事件可有 N 个 note(`progress.md` / `decision.md` / `references.md` 等),由消费层 schema 决定;最少含一个 summary note,与 folder 同名 | -| **主索引** | `daily/.md`:当天事件列表(机械写入,wikilink 指向各 event folder)| -| **跨日索引** | 不强制;dream 消费时按 `` 范围拉取即可 | - -**为什么不是单文件 event**(report §5.1 一种简化方向): -- 单文件 event = `daily//.md` 比 folder 模型简单,但失去"一个事件可包含多个视角 note"的灵活度 -- 现行 `structure.md` 已定 folder 单位模型;auto-memory 沿用,不破坏既有 I-2 / I-3 -- 若后续 dogfooding 验证单事件普遍只有一份 note,可演进为 folder 内只放一份 summary,机械上等价于单文件方案 —— 演进路径平滑,不需要现在选 - -### 1.2 事件边界:语义意图切换驱动 - -事件边界由 LLM 在 inline 写入时判:**当前回合的意图是否仍属上一个 event**。 - -| 维度 | 决策 | -|---|---| -| **决策时机** | 每个 agent 回合写入前 inline 判 | -| **决策依据** | 上一个 active event 的 summary + 当前回合内容;LLM 输出 `{continue: bool, new_event_slug?: str, summary_patch?: str}` | -| **continue=true** | append 当前回合到 active event(append-only 或 LLM 重写 summary,详 §1.3) | -| **continue=false** | 关闭 active event(写最终 summary)+ 开新 event folder(slug 由 LLM 给)| -| **同时 active 多事件** | 不允许(I-2 单作者)—— 一时刻只一个 active event;真要并行任务,agent 自己 sync 切换 | - -**已排除**: -- 时间窗口切分(N 分钟无活动则切)—— 对话节奏因任务而异,时间窗口噪声大 -- 关键词切分(出现"切换 / 现在做 X"等触发词)—— 假阳性高,且不所有切换都明显说出 -- 后置 batch 切分 —— inline 写入要求 event 必须当下可决定归属,不能等 - -### 1.3 事件内写入模型 - -active event 内,每个回合的内容写到 event folder 下,有两种模式可选(消费层 schema 决定): - -| 模式 | 形态 | 适用 | -|---|---|---| -| **append-only** | 一份 `.md`,新回合 append 到末尾(章节 / 时间戳 / 等)| 实现最简;事件短(< 几十回合)时可读性 OK | -| **多 note 重写** | summary note(folder 同名)+ 各视角 note(`progress.md` / `decision.md`);LLM 把新内容融到对应 note,summary note 重写为当下概览 | 事件长 / 多视角时可读性高;LLM 成本高 | - -**默认 opinionated default**:append-only(最简启动)。消费层可改 prompt + schema 走多 note。 - -**与 E-1 守恒的关系**:daily 不强制 E-1 守恒(它是工作记录,允许 LLM 删旧加新);只在 multi-note 重写模式下,可选启用类似守恒(保留所有 wikilink),具体由消费层决定。 - -### 1.4 主索引 `daily/.md` - -当天事件 list 视图,机械维护(无需 LLM): - -| 触发 | 操作 | -|---|---| -| 新建 event folder | 主索引 append 一行 `[[daily///.md|]]` | -| 事件关闭(被切下一个 event) | 主索引该行 append 最终 summary 摘要(可选,LLM 写最终 summary 时附带写入) | -| 索引文件不存在 | 写入第一个 event 时创建 | - -主索引**仅承担当天浏览锚点**:文件系统 `ls daily//` 也能看见,但有主索引人/agent 可直接 `read daily/2026/05/28.md` 拿到 list 视图 + summary 一览。 - -不维护跨日索引(`daily/2026/05.md` 或 `daily.md`):dream 消费时按时间范围拉取即可;`list daily//` 已经覆盖浏览需求。 - -### 1.5 与 notify 的协作 - -`notify` 是 reme → agent 的虚边推送(`structure.md` §3.3),把"有新 resource 值得看"传递给 agent。auto-memory 在以下两点与 notify 协作: - -| 维度 | 协作方式 | -|---|---| -| **新事件 cue** | agent 收到 notify 后,如果决定响应(开始处理这个候选),通常会触发**新 event** —— auto-memory 把 notify payload 作为 hint(候选 resource 路径)写入新 event 的 summary,顺手用 wikilink 引上 | -| **acknowledge 派生** | event note 里出现指向 `[[resource/...]]` 的 wikilink → L1 watcher 将该 resource 推送状态置 `acknowledged`(`structure.md` §3.3 / §6.2);auto-memory 自身不调任何 ack API | - -**关键约束**:auto-memory **不强制** agent 用 wikilink 引 notify 候选 —— agent 可能略过、也可能不通过 wikilink 而是直接读 resource。ack 是 daily → resource wikilink 的副产品,不是 auto-memory 显式负责的事。 - ---- - -## 2. 待对齐边界点 - -### 2.1 LLM 决策频率与成本 - -inline 边界检测的最朴素形态是每回合调一次 LLM。在长对话 + 高频回合下成本可观。可选优化: -- **continue 假设默认**:大多数回合是 continue(同一意图内),LLM 可能只在"看似切换"启发(token 跨度大 / 工具种类突变 / 用户显式说"接下来")时跑;否则默认 continue 不调 LLM -- **批回合**:每 N 回合批一次,延迟切分(代价:active event 边界滞后,首版可接受) - -首版默认每回合调一次(最简,正确率高),M1+ 视成本优化。 - -### 2.2 中断恢复 / 跨进程 active event - -agent 进程重启 / Service 重启后,如何识别"还有 active event"? - -候选方案: -- **L2 自治状态**:L1 watcher 派生 `daily///` 中最新 mtime 的 event 为 active(默认 N 分钟内有写入) -- **状态文件**:`.daily-active` 维护 active event slug,Service 启动时读 -- **每次重建**:agent 进程重启视为新 event,旧的关闭(切到 §1.2 continue=false 路径)—— 最简但会增加事件数 - -倾向 §1.2 自然路径(进程重启 = LLM 下次判 continue=false 概率高)+ 不维护状态文件,详细 worker recovery 留给 Service 实现。 - -### 2.3 多 agent 同 vault 的 active event 隔离 - -I-2 daily 单作者契约在多 agent 场景下需细化。候选: -- per-agent date subfolder:`daily////` -- 单 agent 模式 + agent ID 进 event-slug:`/_/` - -第二种破坏 slug 短名习惯;第一种引入额外层级。倾向后者作为消费层契约,reme 核心不固化。 - -### 2.4 事件粒度的 prompt 引导 - -边界检测的 prompt 决定切分粒度。粗 = event 大 / dream 看每个 event 时容易 overflow;细 = event 数爆炸 / 主索引拥挤。 - -**opinionated default prompt 倾向**: -- 一个意图 = 一个事件(用户提了 X 问题 / agent 开了 Y 任务 → 直到这个意图收尾) -- 跨意图的"附带工作"(查资料 / 算个数)归入当前意图,不开新 event -- 真新意图("好,现在我们做下一件事")才切 - -详细 prompt 落 `reme4/steps/jobs/protocol.md` 或 synchronizer 的 prompt 模板。 - -### 2.5 与 resource ingest 的时序 - -如果 ingest 与 auto-memory 同时活跃(External push 推 resource 进来 + agent 在 sync),且 agent 想响应这个新 resource: -- ingest 写完 resource → L1 watcher 派生 L2 → notifier 决策推送(`structure.md` §5.3)→ Service MCP 推给 agent -- agent 在当前回合或下一回合响应 → auto-memory 判 continue=false 开新 event,wikilink 引上 resource - -整条链 sub-second 到 seconds(notify 节奏);auto-memory 不直接知道 ingest,只在 agent 决定响应时被动接收 notify payload。 - -### 2.6 跨日任务延续 - -event 物理路径含日期(`daily///`),同一意图跨日的任务无法用同一 event folder 承载。候选模型: - -| 模式 | 形态 | 适用 | -|---|---|---| -| **每日新 event,wikilink 反指前日** | new day 起新 folder;summary note frontmatter 加 `inherits: [[daily///.md]]`;新 event body 不复制旧内容,仅引用 | event-slug 短,日切口干净;查 backlinks 拼出整条任务链 | -| **同 event 重复写不同日** | 不允许(I-2 single author + event folder date 在路径上,跨日写违反路径不可变) | × | -| **任务 ID 跨 daily 抽象** | 引入 `task-id` 维度,daily event 只是某 task 的某一日切片;额外维护 task index | 复杂度高,M0 不引入 | - -**倾向**:第一种(`inherits` frontmatter wikilink)—— 与 §1.4 主索引一致(机械维护),实现侧 LLM 在 §1.2 boundary 判定时若发现意图与最近 N 天某个 active 任务一致,直接写入 inherits 即可。详细 boundary prompt 落 §2.4。 - -INHERIT 行为细节(扫描窗口、predecessor 是否关闭、Plan/Objective 是否拷贝)归消费层 schema 决定;reme 核心只承认 `inherits:` frontmatter wikilink 作为跨日链路载体。 - ---- - -## 3. 与其它层的协作 - -| 上下游 | 关系 | -|---|---| -| ← **notify** | 接收 notify payload 作为新 event cue;不强制响应,不强制 wikilink 引 | -| ← **resource** | 只读(通过 wikilink 引);不写 | -| → **daily** | **唯一写者**(I-2);写 event folder + 主索引 | -| → **auto-dream** | dream 读 daily 作为入流(`auto_dream_design.md` §4.2 dream scope);auto-memory 写完即对 dream 可见(走 L2 索引,有 eventual 窗口) | -| → **auto-cognition (三阶段)** | daily 节点是 cognition 图视图的一部分;dream(Stage 1)读 daily 作为入流;consolidate(Stage 2)只对 digest 节点跑 dups / community / decay,**不改 daily**;recall(Stage 3)三层并行召回时 daily 也参与命中 | - -**关键边界**:auto-memory 是 daily 写入端的**唯一**入口;cognition 三阶段没有任何子阶段会**事后改写 daily**(无写回路径)。daily 一旦由 auto-memory 写完,就只被读不被改(I-2 / I-3 仍守);后续 dream / consolidate / recall 都是只读消费。 - ---- - -## 4. 下一步 - -1. **synchronizer step 实现**:event 边界检测 prompt + active event 状态管理 + inline 写入(append-only 默认) -2. **主索引维护**:`daily/.md` 机械维护(新 event 时 append、关闭时附 summary)—— 走 crud/daily 基础工具 -3. **notify ack 派生验证**:L1 watcher 派生 acknowledged 状态(`structure.md` §6.2),与 auto-memory 的 wikilink 写入端到端跑通 -4. **多 agent 隔离 schema**(M1+):若实际有并发 agent,确定 daily 子目录 / slug 命名约定 -5. **粗 / 细粒度 prompt 调参**:dogfooding 后看实际 event 数 / dream 消化效率,调 boundary prompt - -实现进入 `reme4/steps/jobs/` 与 `reme4/file_graph/` 时,本文档与 `auto_dream_design.md` / `auto_cognition_design.md` 共同作为契约依据。 diff --git a/docs4/old/auto_recall_design.md b/docs4/old/auto_recall_design.md deleted file mode 100644 index bf638b20..00000000 --- a/docs4/old/auto_recall_design.md +++ /dev/null @@ -1,323 +0,0 @@ -# auto-recall 设计(Stage 3 检索:信号融合 + 召回增强) - -> 本文档:reme4 中 **auto-cognition 三阶段** 的 **Stage 3 — 检索阶段** 实现。覆盖 query 到来时如何把 vault 一等公民信号(wikilink 图 / frontmatter)与维护阶段产出信号(centrality / community / recency / archived)融合,生成最终召回。 -> -> 配套阅读: -> - `auto_cognition_design.md`:三阶段顶层思想(本文档是 Stage 3) -> - `auto_dream_design.md`:Stage 1 写入 / 节点 + 边模型 -> - `auto_consolidate_design.md`:Stage 2 维护 —— **本文档消费它产出的所有 `meta/*.json`** -> - `structure.md` §4(retrieve 三种问法)/ §7.4(为什么没有 retriever 模块) -> - `reme4/steps/index/search.py` / `traverse.py`:现有原子实现 -> -> **核心立场**: -> - retrieve **不引入新 L4 模块**(`structure.md` ✗-15)—— 三种问法各自由 L3 原子工具(`list_step` / `search_step` / `traverse_step`)直接覆盖 -> - 本文档增强**集中在 `search_step` 内部**:把维护信号融入打分 / 排序 / 过滤;`traverse_step` 仅做小幅参数扩展 -> - retrieve **只读 vault,不写 body / 不写 frontmatter**;唯一写入是 `meta/access_log.json`(命中计数,供下次 recency 计算) - ---- - -## 0. 问题陈述 - -`structure.md` §4 已规定 retrieve 三种问法(state / semantic / topological)正交分立(R-1)。本文档**只增强 semantic 问法**;state 问法已被 `list_step` 覆盖,topological 问法已被 `traverse_step` 覆盖。 - -semantic 问法当前在 `reme4/steps/index/search.py` 实现: - -| 已就绪 | 缺口 | -|---|---| -| ✅ vector + keyword 并行召回 | ❌ 节点中心性加权(高权威节点不被 boost) | -| ✅ RRF fusion(vector_weight=0.7) | ❌ 同社区 boost(`meta/communities.json` 未消费) | -| ✅ 一跳 expand_links(向前向后,max=10) | ❌ 时效衰减 / 冷藏过滤(`meta/access_log.json`、`meta/archived.json` 未消费) | -| ✅ min_score 过滤 + limit 截断 | ❌ 同 file 多 chunk 冗余(top-K 可全来自同节点) | -| ✅ chunk-level 命中(start_line / end_line) | ❌ 节点级 surface(frontmatter `name + description` 未与 chunk 命中合并展示) | -| ✅ 二跳 traverse 作为独立工具 | ❌ search 内 multi-hop expand(只一跳,跨术语关系到不了) | -| | ❌ query rewrite / multi-query(单一表达式漏召) | - -**本文档的工作 = 设计这些缺口怎么填**,在 `search_step` / `traverse_step` 现有形态上增量。 - ---- - -## 1. 三种问法分立(继承 R-1) - -``` -┌─────────────┐ state 问 ──────► list_step + frontmatter filter -│ agent │ semantic 问 ──► search_step (本文档主要增强) -└─────────────┘ topological 问 ► traverse_step (小幅参数扩展) -``` - -| 问法 | 原子工具 | 本文档涉及 | 备注 | -|---|---|---|---| -| **state** | `list_step` / `daily_list_step` / `frontmatter_read_step` | 不涉及 | frontmatter 过滤无需维护信号 | -| **semantic** | `search_step` | **主战场**(§3-§7) | RRF fusion + 信号加权 + multi-hop + query rewrite | -| **topological** | `traverse_step` | 小幅(§8) | 起点选择可借助维护信号 | - -**关键约束**(继承 `structure.md` ✗-8):**绝不合并三种问法成单一 read verb**。本文档增强 search_step,但不把 list / traverse 揉进 search;agent 按需各自调用。 - ---- - -## 2. 维护信号契约消费总览 - -`auto_consolidate_design.md` §11 列出维护产出。retrieve 端按以下方式读: - -| 信号 | 来源 | 加载时机 | 缺失行为(降级) | -|---|---|---|---| -| **centrality** | `file_graph` 反向索引(实时) | search_step init 时引用 file_store | 总在线(file_graph 是核心组件) | -| **community** | `meta/communities.json` | search_step 启动 lazy load(LRU 缓存,文件 mtime 失效) | 缺失 → 不做同社区 boost | -| **recency** | `meta/access_log.json` | 同上 | 缺失 → recency_factor = 1.0 | -| **archived** | `meta/archived.json` | 同上 | 缺失 → 不过滤,所有节点参与 | -| **wikilink 图** | vault 自身(file_graph) | 实时 | 总在线 | -| **frontmatter** | vault 自身(`name` / `description`) | chunk 已带 metadata | 总在线 | - -**version 校验**:`meta/*.json` 加载时检查 `version` 字段,与本文档约定的 schema 版本不匹配 → 走"该信号缺失"降级,日志告警(不崩)。 - -**新鲜度**:每个信号文件的 `computed_at` 暴露给调用者(metadata 中带 `signals_freshness`),调用方知道当前权重基于多久前的快照。超过阈值(默认 14 days)→ logger.warning + 仍使用(避免维护偶尔失效就拒绝服务)。 - ---- - -## 3. semantic 问法增强:打分公式 - -**目标**:把维护信号融入 fused chunk 的最终 score,让排序兼顾"文本相关 + 节点权威 + 同社区 + 时效"。 - -### 3.1 当前打分(基线) - -``` -score = RRF_fused(vector_rank, keyword_rank, vector_weight=0.7) -``` - -仅文本相似度。 - -### 3.2 新打分公式 - -``` -final_score = base_score - × centrality_factor(path) - × community_factor(path, query_seed_paths) - × recency_factor(path) -``` - -| 因子 | 公式 | 默认参数 | 来源 | -|---|---|---|---| -| **base_score** | RRF 融合分(现状) | vector_weight=0.7 | search.py | -| **centrality_factor** | `1 + α · log(1 + inbound_count)` | α = 0.15 | file_graph 实时 | -| **community_factor** | 同 community 命中节点 → ×β,否则 1.0 | β = 1.20 | `meta/communities.json` | -| **recency_factor** | `exp(-Δt / τ)`,Δt = 距 last_hit_or_update | τ = 60 days | `meta/access_log.json` | - -**为什么乘法而非加法**: -- 各因子量级不同(base_score ≤ 0.02,centrality 与 query 无关),加法需大量 normalization;乘法天然处理量级差 -- 任一因子接近 0(极冷藏 / 极孤立)→ 整体压低,符合"弱信号一票否决"直觉 -- 默认 α/β/τ 让 factor 落在 [0.5, 2.0] 区间,不会让 base_score 完全失声 - -**已排除**:LLM rerank。它是 query-time 多调一次 LLM,成本高,M0 不引入;留 M1+ 视 dogfooding 决定。 - -### 3.3 query_seed_paths 的角色 - -community_factor 需要"query 主关注的节点是哪些"才能判断同/异社区。做法: -1. RRF 融合后取 top-N(N=3)的 fused chunk 的 path 作 seed -2. 后续每个候选 chunk 的 path → 查它和任一 seed 是否同社区 → boost -3. 不需要 query 自身被映射到 community(query 是字符串,不在图里) - -**边界**:N=3 是经验起点;N 太大会让"同社区"几乎等于"全召回"失去区分度。dogfooding 后调。 - ---- - -## 4. semantic 增强:节点级合并(unique_paths) - -**问题(gap 5)**:fused 列表里 top-5 可能是同 file 的 5 个 chunk,信噪比退化。 - -**当前**:`expand_links` 已用 `unique_paths = list(dict.fromkeys(c.path for c in fused))`,但 fused 本身没去重,limit=5 仍可全是同节点。 - -**新方案**(节点级 dedupe + 节点级 surface): - -``` -fused (chunk-level) → group by path → 每组保留 top_chunks_per_path 个 - → 每组追加节点 frontmatter (name + description) 作"节点级 surface" - → 再按节点 best_score 排序 → limit -``` - -| 参数 | 默认 | 含义 | -|---|---|---| -| `top_chunks_per_path` | 2 | 同节点最多保留多少 chunk | -| `surface_node` | true | 是否在每组前追加 frontmatter `name + description` | - -**为什么**: -- 节点是 retrieve 的语义单位(`auto_dream_design.md` §2 路径即 ID),chunk 只是"展示窗口" -- frontmatter 是节点级摘要(name + description)—— 已是 dream 写入时认证过的信号,不召它浪费 -- 同节点多 chunk 时,frontmatter + top-2 chunk 比 5 个 chunk 信息密度高 - -### 4.1 答案展示形态 - -``` -========== digest/auth/jwt-rotation.md ========== -[node] JWT Key Rotation - Process for rotating JWT signing keys without downtime. -[score=0.0241 centrality=2.1 community=1.2 recency=0.91] - ----------- chunk @5-23 ---------- - - ----------- chunk @45-60 ---------- - - -[expansion] 1 inbound, 2 outbound (...) -``` - -**对照旧形态**:每个 chunk 独立成块,无节点级 surface,scores 散在 chunk 头。新形态以**节点为视觉单位**,人 / agent 看到的第一眼是"哪个节点中了",而非"哪段文字中了"。 - ---- - -## 5. semantic 增强:multi-hop expand - -**问题(gap 4)**:当前 expand_links 只展一跳,跨术语关系("分布式锁" → 一跳到"租约机制",再一跳才到"心跳协议")到不了。 - -**新方案**:expand_links 支持 `depth` 参数;默认仍 1(保守),agent / 配置可调到 2。 - -| 参数 | 默认 | 限制 | -|---|---|---| -| `expand_depth` | 1 | 最大 3(避免组合爆炸) | -| `max_links_per_direction` | 10(现状)| 每跳每方向上限,深度不展开时限到当跳总数 | -| `expand_path_budget` | 30 | 总扩展节点数硬上限,优先深度优先(深度浅但条数少) | - -**为什么默认仍 1**: -- 二跳延迟不可忽略(N × 10 × 10 = 100 候选 IO) -- agent 需要"再深一层"时显式调 `traverse_step(depth=2)` —— 三种问法分立(R-1) -- 默认深拉会让"语义召回"变成"图召回",违背 R-1 - -**何时调 2**:dogfooding 发现 vault 节点平均出度低 / 跨术语关系频繁 → 调到 2(改 search_step 配置,不改协议)。 - ---- - -## 6. semantic 增强:query rewrite / multi-query - -**问题(gap 6)**:用户 query "JWT 怎么轮换" 可能错过 body 写"密钥定期更换"的节点(术语不同)。 - -**方案矩阵**: - -| 方案 | 成本 | 效果 | -|---|---|---| -| **(a) 不做** | 0 | 漏召部分跨术语 | -| **(b) embedding 多 query**(用同 LLM 生成 N 个表述) | LLM 调用 1 次(query → N 表述)+ N 次 vector_search | 中等 | -| **(c) BM25 同义词扩展**(用静态词表 / 嵌入式词表) | 0(若有词表) | 弱(中文场景词表缺) | -| **(d) HyDE**(LLM 生成假设答案 → 嵌入这个答案而非 query) | LLM 1 次 | 高,文献证实 | - -**首版决策**:**(a) 不做**。理由: -- vault 本身规模 M0 不大,推断增加召回但增 LLM cost 不划算 -- 维护阶段的 community 聚类已部分弥补"跨术语关系"(同社区 boost) -- 真要做,优先 (d) HyDE,延 M1+ 再启,实施只需加一层 query 预处理 - -**契约预留**:search_step kwargs 加 `query_rewrite: str | None`(默认 None;非 None 则用此重写代替原 query 做 vector_search,keyword_search 仍用原 query)。SDK 层可调用 LLM 生成重写后传入,reme 核心不强加 LLM 依赖。 - ---- - -## 7. semantic 增强:archived 过滤 - -**问题**:长期未访问的旧节点应该默认排除。 - -**方案**:search_step kwargs 加 `include_archived: bool`,默认 false。 - -``` -fused → drop where path in archived_set → 后续打分 / unique_paths -``` - -**何时绕过**: -- agent 显式 `include_archived=true`(找历史 / debug) -- query 命中节点本身在 archived → boost 推回(冷节点突然被命中,说明不是真冷) - - **首版不做**,过滤即过滤;如有需要,M1+ 加"intent override"机制 - -**冷启动**(`meta/archived.json` 缺失)→ 不过滤,等同 `include_archived=true`。 - ---- - -## 8. topological 问法的小增强 - -`traverse_step` 当前完整:BFS / 多 seed / direction / depth / per-edge 输出。本文档不重构,仅: - -### 8.1 起点选择借助维护信号(可选 hint) - -agent 调用 traverse 时往往不知道"哪个节点是该主题的中心";维护阶段产出的 centrality 可作 hint: - -| 用例 | 做法 | -|---|---| -| traverse 给定 seed | 不变,直接 BFS | -| traverse 给定主题字符串(SDK 上层语法糖) | 先 search_step 找 top-1 → 用其作 seed → traverse depth=2 | - -**位置**:这个组合在 SDK 上层做,不进 traverse_step;reme 核心保留 traverse 原子形态。 - -### 8.2 traverse 输出消费 archived - -traverse_step 当前不知道 archived 信号。改造:加 `exclude_archived: bool` kwarg 默认 false(traverse 默认不过滤,因为它是图问法,过滤会破坏图视角)。SDK / agent 可显式开启。 - ---- - -## 9. retrieve 写访问日志(唯一对外写入) - -**问题**:`meta/access_log.json` 的 `last_read` / `last_hit_count_30d` 谁写? - -**约定**:retrieve 命中节点 → 异步 append 到访问日志缓冲区;由 maintain daily batch 聚合写入 `meta/access_log.json`。 - -| 路径 | 实现 | -|---|---| -| **同步写**(每 query) | retrieve 把命中 path 写入内存 ring buffer(进程级)| -| **异步落盘** | 进程退出 / 维护 daily batch / 周期 flush(默认 10 min)| -| **聚合** | maintain 在 daily access_log 重算时:读 ring buffer + 上一份 access_log → 合并写新版 | - -**幂等**:同 query 多次重读同节点不应放大 last_hit_count;ring buffer 按 (path, day) 去重,每天每节点最多记一次"被读"。 - -**降级**:ring buffer 写失败 / flush 失败 → 不影响 retrieve 返回,只是日志少一条;recency 信号略迟。 - ---- - -## 10. 不变量 / 边界 - -| # | 约束 | 含义 | -|---|---|---| -| **R-1**(继承)| 三种问法分立 | 不合并 list / search / traverse 成单一 verb | -| **R-2**(继承)| 默认 `digest > daily > resource`,可覆盖 | search_step 通过 `search_filter` 支持限层 | -| **R-3**(继承)| 拓扑问与层无关 | traverse 跨三层(I-4) | -| **R-4**(继承)| Provenance 默认 lazy | retrieve 不自动 traverse(R-4);expand_links 是性能优化非语义展开 | -| **Re-1**(本文档)| retrieve 不引入 L4 模块 | 增强限定在原子 step 内部 | -| **Re-2**(本文档)| retrieve 只读 vault | 不改 body / frontmatter / 文件位置 | -| **Re-3**(本文档)| retrieve 唯一对外写入是 `meta/access_log.json` | 通过 ring buffer + maintain 聚合,不直接写 | -| **Re-4**(本文档)| 任一维护信号缺失 → 降级不崩 | `meta/*.json` 缺 → 跳过对应因子,系统始终可用 | -| **Re-5**(本文档)| version 不兼容 → 降级 + warning | 不阻断 retrieve | - ---- - -## 11. 与其它文档的引用关系 - -| 引用 | 来源 | -|---|---| -| 三种问法 / R-1..R-5 | `structure.md` §4 | -| 没有 retriever 模块 | `structure.md` §7.4 | -| 节点 / 边 / wikilink 模型 | `auto_dream_design.md` §2 / §3 | -| 维护信号契约 | `auto_consolidate_design.md` §11 | -| centrality / community / recency / archived 输出 | `auto_consolidate_design.md` §3-§5 | -| 路径即 ID | `auto_dream_design.md` §2 | - ---- - -## 12. 下一步 - -实现进入 `reme4/steps/index/` 时,本文档与 `auto_cognition_design.md`(顶层)/ `auto_dream_design.md` / `auto_consolidate_design.md` 共同作为契约依据。 - -**search_step 增强(§3-§7)**: -- ⏳ **打分公式**:加 centrality_factor / community_factor / recency_factor;config 化 α / β / τ(§3) -- ⏳ **节点级合并 + surface**:group-by-path + frontmatter surface + top_chunks_per_path(§4) -- ⏳ **multi-hop expand**:`expand_links` 支持 depth 参数,加 `expand_path_budget` 硬上限(§5) -- ⏳ **query_rewrite kwarg**:契约预留,reme 核心不强加 LLM(§6) -- ⏳ **archived 过滤**:`include_archived` kwarg,默认 false(§7) - -**traverse_step 增强(§8)**: -- ⏳ **`exclude_archived` kwarg**(默认 false) - -**信号加载基础设施(§2)**: -- ⏳ **`meta/*.json` lazy loader + LRU 缓存 + mtime 失效** -- ⏳ **version 校验 + 降级路径 + warning logger** -- ⏳ **signals_freshness metadata 暴露** - -**access log 写入路径(§9)**: -- ⏳ **进程级 ring buffer**(命中 path 异步 append) -- ⏳ **周期 flush + (path, day) 幂等** -- ⏳ **maintain daily 聚合接口**(读 ring → 合并旧 access_log → 写新版) - -**性能与回归**: -- ⏳ **基准测试**:打分公式启用前后的 召回 P@5 / MRR(用合成 vault + ground-truth query) -- ⏳ **延迟监控**:维护信号读取 + multi-hop expand 的 p50 / p95 diff --git a/docs4/old/background_backup.md b/docs4/old/background_backup.md deleted file mode 100644 index 4810d7c3..00000000 --- a/docs4/old/background_backup.md +++ /dev/null @@ -1,166 +0,0 @@ -ReMe新版本V4 - -@jinli -新版reme是一个自管理的个人知识库。 -- **记忆分层:** → 记忆按"原始 → 加工"两层组织:`resource/`(原始素材)、`daily/`(日记事件)是只增不删的流水帐;`digest/` 是加工层,下分 `personal/`(个性化)、`knowledge/`(主题知识)、`procedural/`(Agent 任务经验)、`proactive/`(主动洞察)四个固定子目录,写入策略和检索权重各有差异。 -- **记忆的载体还是 Markdown:** → 所有记忆都是 Obsidian 兼容的 .md 文件——YAML front matter、四种 wikilink(`[[X]]` / `[[X#anchor]]` / `[[X|alias]]` / `![[X]]`)、Dataview 风格 `predicate:: [[X]]` 语义关系全部沿用社区约定。用户可读、可备份、可迁移,对抗黑盒。 -- **自我管理进化** → 不需要用户手工整理,Agent 在后台自动对于原始素材进行整理和融合,按照记忆的类型(个性化、程序化、知识类)进行分类整理并更新现有逻辑,同时自动Build link让笔记自己长出结构。这一点把 ReMe 同时与"手动建图的 Obsidian"和"扁平存储的Mem0"拉开。 -- **渐进式检索** → 自我管理进化的产出物不是一堆扁平笔记,而是一张可被**渐进式检索**消费的图:向量 + 关键词 + 图谱三路 RRF 融合,返回时通过 1-hop 邻居 meta 让 Agent"先看目录、再决定要不要展开正文",不像传统 RAG 那样一次性把 top-K 切片塞进上下文。 -- **被集成而非内置(分发形态)** → ReMe 不做独立 Agent 产品,而是作为**能力**被任意 Harness 调用:SDK 深度集成(qwenpaw / AgentScope)、MCP Tool + skill.md、CLI + skill.md 三条路径并行,记忆跟着用户走,不绑定任何上层框架。 - -1. 目标: 构建个人知识库,集成qwenpaw等harness框架中,实现知识/记忆的自进化和自管理,结合graph高效搜索。 -2. 新的特性: - - 支持多种记忆类型,包括个性化记忆、程序化记忆、知识类记忆 - - [❌ 待补充] 当前 reme4 中只有统一的 `FileNode/FileChunk` 抽象(`reme4/schema/file_node.py`、`reme4/schema/file_chunk.py`),尚未在代码层区分"个性化/程序化/知识类"三类记忆,需要在 schema 与 store 中扩展类型字段或子类。 - - 支持memory-self-evolving - - [❌ 待补充] 没有发现自进化相关的 step/job 实现,目前只有基础的 search/reindex 等 common steps(`reme4/steps/common/`)。需要新增 auto-memory/auto-dream 等 step。 - - 支持markdown之间的链接,构建graph,更好的渐进式展开 - - [✅ 已实现 → `reme4/components/file_chunker/markdown_file_chunker.py`(wikilink 解析 + Dataview 谓词)、`reme4/components/file_graph/`(local/nx/neo4j 三种 graph 后端)] - - [✅ 已实现 → `reme4/steps/common/search.py:109` `_expand_links`、`reme4/config/default.yaml:86` `expand_links` 参数(搜索结果可附 outlinks/inlinks 邻居元数据)] -3. 工程实现: - 1. components - - 支持backend切换 - - [✅ 已实现 → `reme4/components/component_registry.py`(`R.register(name)` 装饰器 + `R.get(ctype, backend)` 查找);`reme4/application.py:51` 通过 `config.components` 中的 `backend` 字段动态构造] - - 生命周期管理 start/close - - [✅ 已实现 → `reme4/components/base_component.py:151` `start()` / `:162` `close()` / `:172` `restart()`,含 `is_started` 幂等保护与 `asyncio.Lock`] - - components之间相互调用,支持前序依赖还是啥 - - [✅ 已实现 → `reme4/components/base_component.py:78` `BaseComponent.bind()` 声明依赖(含 `optional`、`default_factory`),`:98` `_resolve_bindings()` 自动注入;`reme4/application.py:80` `_topological_order()` Kahn 算法做拓扑排序、检测循环依赖] - 2. job/step,借鉴自github action - - step是最小的执行单元,可以自由使用components,不需要管理生命周期 - - [✅ 已实现 → `reme4/steps/base_step.py`、`reme4/steps/common/`(demo/health_check/help/reindex/search/version/stream_demo 等内置 step)] - - job是steps的集合,可以自由组合,支持step复用 - - [✅ 已实现 → `reme4/components/job/base_job.py`(顺序执行 step)、`reme4/components/job/stream_job.py`(流式 job);`reme4/config/default.yaml:5` 通过 yaml 声明 job→steps 组合] - - 对外job可以封装cli命令,mcp_tool,http服务接口等 - - [✅ 已实现(HTTP / MCP / CLI client) → `reme4/components/service/http_service.py:35` `_add_job` 把 job 注册成 POST 端点;`reme4/components/service/mcp_service.py`;`reme4/components/client/http_client.py`、`reme4/components/client/mcp_client.py`;`reme4/reme.py:27` `main()` 通过 CLI 子命令 `start` / `find_reme` / `` 调用 client] - 3. application: - - components的生命周期管理,通过前序依赖构建拓扑图启动应用 - - [✅ 已实现 → `reme4/application.py:115` `_start()` 按拓扑顺序启动所有 component;`:133` `_close()` 反序关闭] - - 集成run_job - - [✅ 已实现 → `reme4/application.py:148` `run_job()` / `:154` `run_stream_job()`] - - 集成Service能力对外提供能力 - - [✅ 已实现 → `reme4/application.py:170` `run_app()` 调用 `service.run_app(app=self)`;`reme4/components/service/base_service.py`] - 4. 对外接口: - - skill.md + cli方案,通用方案,支持集成到各种harness框架中 - - [⚠️ 部分实现] CLI 调用通道已具备(`reme4/reme.py:17` `call_server()` 通过 `http_client` / `mcp_client` 调任意已注册 job),但 [❌ 待补充] 仓库内未发现 `skill.md` 文件,需要为 Claude Code / 其它 harness 编写 skill 描述文件。 - - 可以选择agent来启动reme服务(后台) - - [❌ 待补充] 未见"由 agent 自动拉起后台 reme 服务"的脚本/约定,需要补充进程托管或 launchctl/systemd 集成方案。 - - skill.md + mcp-tool方案,通用方案 - - [⚠️ 部分实现] MCP 服务通道存在(`reme4/components/service/mcp_service.py`、`reme4/components/client/mcp_client.py`),但 [❌ 待补充] 同样缺 `skill.md` 模板。 - - 需要手动启动mcp服务 - - [✅ 已实现 → `reme service` 模式可通过 `reme4/config/default.yaml:1` `service.backend: mcp` 切换,`reme4/reme.py` `start` 子命令拉起] - - sdk集成(qwenpaw集成) - - [❌ 待补充] reme4 内未见 qwenpaw / agentscope 相关适配代码(仅 `reme/`、`reme_ai/` 旧版有部分逻辑,但已废弃,按记忆 [[feedback_deprecated_directories]] 不应改动)。需要新建 `reme4/integrations/qwenpaw/` 之类的模块。 - - str + 封装AgentscopeTools - - [❌ 待补充] 没有 `AgentscopeTools` 包装层。 - - 集成auto-memory、auto-dream、auto-memory-search的能力 - - [❌ 待补充] 三个能力均未实现。 -4. 记忆存储方案: - - resource:原始对话日志,上传的文件,原始的html文件等 - - [❌ 待补充] `reme4/application.py:20` 仅创建 `metadata_dir` / `daily_dir` / `knowledge_dir`,未见 `resource_dir` 概念;需要在 `ApplicationConfig` 中加入并落地相应目录与抓取/上传逻辑。 - - daily: - - daily/YYYYMMDD.md:主Agent调用write/edit工具修改,兼容上一版,同时承担了当天其他md的索引 - - [⚠️ 部分实现] `reme4/application.py:23` 已建 `daily_dir`,但目录内 markdown 的"主索引"约定与 write/edit 兼容协议无显式实现,主要靠主 agent 自身行为。需要文档化 + 校验。 - - daily/YYYYMMDD/{event}.md auto-memory 针对上下文对话,拆分成不同的事件存储,同时在YYYYMMDD.md构建好索引可以链接过来 - - [❌ 待补充] auto-memory 拆事件的 step / job 不存在。 - - knowledge: - - knowledge/{topic:-personal/agent/financial/work...}/{xxx}.md 在空闲时间整理记忆,按照主题和事件进行分类存储 - - [⚠️ 部分实现] `knowledge_dir` 已建(`reme4/application.py:24`),但"按主题/事件整理"的后台任务、topic 枚举均缺失。 - - proactive: - - proactive/YYYYMMDD.md 待定。如果存在给用户主动推送的能力,这里可以记录每一天agent给用户推荐的分析和心路历程。 - - [❌ 待补充] 主动推送/proactive 目录与逻辑均未实现。 -5. Markdown 格式 & Build Graph - 1. obsidian格式的Markdown文件格式 - - front matter格式 - - [✅ 已实现 → `reme4/components/file_chunker/markdown_file_chunker.py:313` `frontmatter.loads(...)`;`reme4/schema/file_front_matter.py`] - - file link格式 4种格式 - - [⚠️ 部分实现] `markdown_file_chunker.py:88` `_WIKILINK_RE` 已支持 `[[target]]` / `[[target#anchor]]` / `[[target|alias]]` / `![[target]]`(嵌入),并支持 Dataview `predicate:: [[X]]` 与 inline `[predicate:: [[X]]]`。但 [❌ 待补充] 标准 Markdown `[text](url.md)` 链接尚未被解析为 graph 边。 - 2. 更好的文件chunking机制 - - 旧版 类似rag 带overlap的chunking机制 - - [📌 历史] V3 旧逻辑,对照说明用,无需在 reme4 中实现。 - - 解析 Markdown Ast - - [✅ 已实现 → `markdown_file_chunker.py:308` 使用 `mistletoe` 的 `Document`/`MarkdownRenderer`;`:335` `_build_tree` 把扁平 children 折叠成 section 嵌套树(`MdNode`)] - - 每一个chunk都带全部标题 - - [✅ 已实现 → `markdown_file_chunker.py:381` `_chunk_node`(`before` 累积已经过的标题、`after` 拼剩余 desc_toc);`:712` `_make_chunk` 用 `_toc_join(before, content, after)` 把全文目录骨架前后包裹] - 3. 通过link构建graph索引,同时构建反向link索引 - - [✅ 已实现 → `reme4/components/file_graph/base_file_graph.py`、`reme4/components/file_graph/local_file_graph.py`(含 `get_outlinks`、`get_inlinks` 双向索引);nx/neo4j 后端同 API;`reme4/steps/common/search.py:114-129` 使用双向 link] - 4. link的生成有两种,一种是主agent在生成link;另一种是通过后台任务,自动构建文档之间的link - - 介绍如何auto-link - - [⚠️ 部分实现] 主 agent 显式写 `[[link]]` 已经会被 parser 抓为边(`markdown_file_chunker.py:152` `_extract_links`)。但 [❌ 待补充] "后台任务自动补 link" 的实现(实体抽取 / 候选文档相似度匹配 / link 写回 markdown)尚不存在,需要单独的 step/job。 -6. 如何做memory自进化 -Auto-memory -auto-dream - - [❌ 待补充] reme4 没有 auto-memory / auto-dream 任何代码。需要: - - 新增 step(如 `reme4/steps/auto_memory.py`、`reme4/steps/auto_dream.py`),基于现有 `BaseStep` + LLM component; - - 设计触发机制(job 调度、空闲检测); - - 与上面的 daily/knowledge 目录约定打通。 -7. 更好的检索: - - 渐进式展开的检索 - - [⚠️ 部分实现] `reme4/steps/common/search.py:14` `SearchStep` 已做 vector + keyword 的 RRF 融合,并支持 `expand_links` 一跳展开(outlinks/inlinks + 邻居 meta)。但 [❌ 待补充] "多跳渐进展开"、"按需要由 agent 主动展开下一层"的交互式 API 尚未实现。 -8. 结合外部的Agent工具: -ReMe更加专注于知识加工,而不是知识获取 -- 结合qwenpaw - - sdk集成(qwenpaw集成) - - [❌ 待补充] 见 §3.4。 - - str + 封装AgentscopeTools - - [❌ 待补充] 同上。 - - 集成auto-memory、auto-dream、auto-memory-search的能力 - - [❌ 待补充] 同上。 -- 结合其他的Agent框架 - - skill.md + cli方案,通用方案,支持集成到各种harness框架中 - - 可以选择agent来启动reme服务(后台) - - [❌ 待补充] 同 §3.4。 - - skill.md + mcp-tool方案,通用方案 - - 需要手动启动mcp服务 - - [⚠️ 部分实现] MCP 服务可启动,但 skill.md 缺失。 - -## 更好的性能,更稳定和兼容 -V4更加高效的底层记忆索引 -- V3版本基于sqlite/chroma等本地数据库 - - 在qwenpaw等低版本linux & win系统存在兼容性问题,会存在core dump等问题 - - 不支持关键词检索,这里需要Keyword倒排索引,对中文的支持较差 - - [📌 历史] 描述 V3 痛点,不需要代码。 -- V4版本我们重写了file parser,file store,file graph,file watcher,手写了支持增量更新倒排索引 - - file parser → [✅ `reme4/components/file_chunker/`(base/default/chunked/linked 四种)] - - file store → [✅ `reme4/components/file_store/local_file_store.py`] - - file graph → [✅ `reme4/components/file_graph/`(local/nx/neo4j)] - - file watcher → [✅ `reme4/components/file_watcher/lite_file_watcher.py` 基于 watchfiles awatch;`base_file_watcher.py` 抽象接口] - - 增量倒排索引 → [✅ `reme4/components/keyword_index/bm25_index.py`(增量 BM25);`reme4/components/tokenizer/`(regex / jieba 两种 tokenizer,jieba 含 stopwords 子目录)] -- 未来可以使用rust/c++重写,高性能本地知识引擎 - - [📌 规划] - -## 知识库应用场景(重点) - -### 金融 -产业链 - - [❌ 待补充] 没有领域 schema / 产业链知识图谱样例,需要写 demo 数据集 + topic 配置。 - -### 自己的工作&生活 -xxxx - - [❌ 待补充] 文档本身就是占位,需要补充具体场景描述与对应的 daily/knowledge 目录样例。 - ---- - -## 标注小结 - -### ✅ 已经在 `reme4/` 中实现的能力 -1. **组件框架**:backend 注册(`component_registry.py`)、生命周期(`base_component.py`)、依赖声明 + 拓扑启动(`application.py:80`)。 -2. **Job/Step 体系**:`components/job/base_job.py`、`components/job/stream_job.py`、`steps/base_step.py` 与 `steps/common/*`。 -3. **服务/客户端**:HTTP(`service/http_service.py` + `client/http_client.py`)、MCP(`service/mcp_service.py` + `client/mcp_client.py`),CLI 入口 `reme.py:main`。 -4. **Markdown 解析**:`file_chunker/markdown_file_chunker.py`,含 frontmatter、wikilink + Dataview 谓词、AST 树、带全标题骨架的 chunking。 -5. **Graph**:`file_graph/{local,nx,neo4j}_file_graph.py`,双向链接索引。 -6. **存储 / 索引**:`file_store/local_file_store.py` + `keyword_index/bm25_index.py`(增量 BM25)+ `tokenizer/{regex,jieba}_tokenizer.py`。 -7. **文件监听**:`file_watcher/lite_file_watcher.py`(watchfiles 轮询)。 -8. **混合检索 + 一跳展开**:`steps/common/search.py`(vector + keyword RRF 融合,可附 outlinks/inlinks)。 -9. **Embedding / LLM 适配壳**:`components/embedding/openai_embedding_model.py`、`components/as_llm/`、`components/as_llm_formatter/`、`components/as_token_counter/`。 - -### ❌ 需要额外补充的能力 -1. **记忆类型分层**:个性化 / 程序化 / 知识类的 schema 与路由。 -2. **memory-self-evolving**:auto-memory(拆事件→ daily/YYYYMMDD/{event}.md)、auto-dream(空闲整理→ knowledge/{topic}/)、对应触发器与调度。 -3. **存储目录约定**:`resource/`、`proactive/` 目录、daily 主索引协议、knowledge topic 枚举均未落地。 -4. **auto-link 后台任务**:自动从正文挖出实体并写回 wikilink。 -5. **多跳渐进展开检索 API**:当前只能一跳。 -6. **标准 Markdown `[text](url.md)` 链接**:尚未纳入 graph 边解析。 -7. **skill.md 模板**:CLI 与 MCP 两种集成方式都缺 skill 描述文件。 -8. **Agent 拉起后台 reme 服务**:缺脚本/约定。 -9. **qwenpaw / AgentScope SDK 集成**:包括 `AgentscopeTools` 包装层与 auto-memory/dream/search 暴露。 -10. **应用场景样例**:金融产业链、个人工作&生活的 demo 数据 + topic 配置。 diff --git a/docs4/old/reme4_index.md b/docs4/old/reme4_index.md deleted file mode 100644 index 8917232a..00000000 --- a/docs4/old/reme4_index.md +++ /dev/null @@ -1,211 +0,0 @@ -# reme4 代码模块索引 - -> 本文档梳理 `reme4/` 下各能力模块、核心类和代码路径,便于快速定位与扩展。 -> 所有路径相对仓库根目录 `/Users/yuli/workspace/ReMe/`。 - -## 1. 顶层入口与运行流程 - -| 文件 | 作用 | -| --- | --- | -| `reme4/reme.py` | CLI 入口(`main()`):`start` 启动应用;`find_reme` 探活;其他动作转发到 client。 | -| `reme4/application.py` | `Application` 基类:解析 config → 注册 service / components / jobs → 拓扑排序启动 → `run_job` / `run_stream_job` / `run_app`。 | -| `reme4/constants.py` | 服务发现常量:`REME_SERVICE_INFO`、默认 host/port (`127.0.0.1:2333`)。 | -| `reme4/__init__.py` | 包入口。 | - -启动流程:`reme.main()` → `parse_args` → `resolve_app_config` → `precheck_start` → `ReMe(...).run_app()` → `service.run_app(app)` → `app.start()`(按拓扑序启动 components 与 jobs)。 - -## 2. 配置与枚举 - -| 文件 | 作用 | -| --- | --- | -| `reme4/config/default.yaml` | 默认配置:service / jobs / components 全套样例。 | -| `reme4/config/config_parser.py` | `parse_args`、`resolve_app_config`、env 变量展开、点号配置覆盖、YAML/JSON 加载。 | -| `reme4/enumeration/component_enum.py` | `ComponentEnum`:所有组件类型枚举(service/client/job/step/file_*/embedding/keyword_index/tokenizer/as_*)。 | -| `reme4/enumeration/chunk_enum.py` | `ChunkEnum`:流式分块类型 (THINK/CONTENT/TOOL_*/USAGE/ERROR/DONE)。 | - -## 3. Schema(Pydantic 数据模型) - -代码:`reme4/schema/` - -| 类 | 文件 | 说明 | -| --- | --- | --- | -| `ApplicationConfig` / `ComponentConfig` / `JobConfig` | `application_config.py` | 顶层配置模型;包含 service/jobs/components/vault_dir 等字段。 | -| `EmbNode` | `emb_node.py` | 文本+embedding 节点基类,`np.ndarray` 序列化为列表存储。 | -| `FileChunk` | `file_chunk.py` | 文件切片(继承 `EmbNode`):`path/start_line/end_line/scores`,含 `set_hash_id()`。 | -| `FileNode` | `file_node.py` | 文件级图节点:`path/st_mtime/links/chunk_ids/front_matter`。 | -| `FileLink` | `file_link.py` | 文件间 wikilink 边:`source_path → target_path`,可选 `target_anchor` / `predicate`。 | -| `FileFrontMatter` | `file_front_matter.py` | YAML 头:`name/description`,`extra="allow"` 保留未知键。 | -| `Request` / `Response` | `request.py` / `response.py` | 服务端请求/响应封装。 | -| `StreamChunk` | `stream_chunk.py` | 流式分块:`chunk_type/chunk/done/metadata`。 | - -## 4. Components(核心能力组件) - -> 所有组件继承 `BaseComponent`(`reme4/components/base_component.py`),提供: -> - `start/close/restart` 生命周期; -> - `bind(name, base_cls, default_factory, optional)` 声明依赖(启动时通过拓扑排序解析); -> - `vault_path` / `working_metadata_path` 工作目录; -> - `dump/load` 持久化钩子。 -> -> 组件通过 `ComponentRegistry`(`R`,`reme4/components/component_registry.py`)按 `(ComponentEnum, name)` 注册和查找;上下文容器为 `ApplicationContext`(`application_context.py`),运行期上下文为 `RuntimeContext`(`runtime_context.py`)。 - -### 4.1 Tokenizer — `reme4/components/tokenizer/` - -| 类 | 文件 | 说明 | -| --- | --- | --- | -| `BaseTokenizer` | `base_tokenizer.py` | 抽象基类,启动时加载 `stopwords` 文件。 | -| `RegexTokenizer` (`@R "regex"`) | `regex_tokenizer.py` | 正则切词;中文按字符切分,非中文按词切分。 | -| `JiebaTokenizer` (`@R "jieba"`) | `jieba_tokenizer.py` | 基于 jieba 的中文分词。 | - -### 4.2 Keyword Index — `reme4/components/keyword_index/` - -| 类 | 文件 | 说明 | -| --- | --- | --- | -| `BaseKeywordIndex` | `base_keyword_index.py` | 抽象基类:`add_docs/delete_docs/retrieve/clear/optimize_index`,依赖 tokenizer。 | -| `BM25Index` (`@R "bm25"`) | `bm25_index.py` | 自实现 Okapi BM25 倒排索引:`vocab` / `inverted_index` / `doc_meta`,pickle 持久化,支持增量更新与 `optimize_index` 紧凑化。 | - -### 4.3 Embedding — `reme4/components/embedding/` - -| 类 | 文件 | 说明 | -| --- | --- | --- | -| `BaseEmbeddingModel` | `base_embedding_model.py` | LRU 缓存 + npz 磁盘持久化、批量、重试、健康检查(`is_healthy`);提供 `get_embedding/get_embeddings/get_node_embeddings`。 | -| `OpenAIEmbeddingModel` (`@R "openai"`) | `openai_embedding_model.py` | OpenAI 兼容协议(dashscope/qwen 等),`AsyncOpenAI` 客户端。 | - -### 4.4 File Graph — `reme4/components/file_graph/` - -存储 `FileNode` 节点与 `FileLink` 边,支持「虚节点」(被指但尚未导入的目标占位)。 - -| 类 | 文件 | 说明 | -| --- | --- | --- | -| `BaseFileGraph` | `base_file_graph.py` | 抽象接口:`upsert_nodes/delete_nodes/get_nodes/rebuild_links/clear/get_outlinks/get_inlinks`。 | -| `LocalFileGraph` (`@R "local"`) | `local_file_graph.py` | 纯 dict 实现 + JSONL 持久化;维护 `_nodes`/`_inverse`/`_pending`。 | -| `NxFileGraph` (`@R "nx"`) | `nx_file_graph.py` | networkx `MultiDiGraph` + pickle 持久化,虚节点用「无 node 属性」标识。 | -| `Neo4jFileGraph` (`@R "neo4j"`) | `neo4j_file_graph.py` | Neo4j 后端(bolt 驱动),`(:File)-[:LINKS]->(:File)`,支持升降级虚节点、`rebuild_links` 修复重建。 | - -### 4.5 File Chunker — `reme4/components/file_chunker/` - -| 类 | 文件 | 说明 | -| --- | --- | --- | -| `BaseFileChunker` | `base_file_chunker.py` | 抽象接口:`parse(path) -> (FileNode, list[FileChunk])`,提供 `_get_relative_path`。 | -| `DefaultFileChunker` (`@R "default"`) | `default_file_chunker.py` | 字节级带 overlap 切片 + YAML front matter + wikilink 抽取(含 Dataview `predicate::`)。 | -| `MarkdownFileChunker` (`@R "markdown"`) | `markdown_file_chunker.py` | Markdown 专用:mistletoe AST → MdNode 树 → 章节递归分块;每个 chunk 携带完整 heading skeleton(TOC);wikilink 解析支持隐式 `.md`、folder-note、短路径歧义扇出,需注入 `file_graph` 解析目标。 | - -### 4.6 File Store — `reme4/components/file_store/` - -聚合 `embedding_model` + `keyword_index` + `file_graph`,统一 chunk 写入与混合检索。 - -| 类 | 文件 | 说明 | -| --- | --- | --- | -| `BaseFileStore` | `base_file_store.py` | 抽象基类:`upsert_file/delete_by_path/clear/vector_search/keyword_search/rebuild_links/get_nodes/get_outlinks/get_inlinks`;启动时探活 embedding,失败则降级为纯关键字检索。 | -| `LocalFileStore` (`@R "local"`) | `local_file_store.py` | 内存 chunk 字典 + JSONL 持久化;upsert 时复用旧 chunk 的 embedding(按 chunk.id 命中);`vector_search` 用 `batch_cosine_similarity`,`keyword_search` 委托给 keyword_index。 | - -### 4.7 File Watcher — `reme4/components/file_watcher/` - -| 类 | 文件 | 说明 | -| --- | --- | --- | -| `BaseFileWatcher` | `base_file_watcher.py` | 抽象接口:`watch_loop/update_store/on_added/on_modified/on_deleted`;启动后台任务先做一次全量同步再进入监听循环。 | -| `LiteFileWatcher` (`@R "lite"`) | `lite_file_watcher.py` | 基于 `watchfiles.awatch` 的轮询监听;变更分类后调用 file_chunker 解析、写 file_store;`update_store` 通过 mtime 对比做增量。 | - -### 4.8 Job — `reme4/components/job/` - -| 类 | 文件 | 说明 | -| --- | --- | --- | -| `BaseJob` (`@R "base"`) | `base_job.py` | 顺序执行 `steps`:每个 step 共享 `RuntimeContext`,最终返回 `Response`;启动时把 step config 实例化为 `BaseStep`。 | -| `StreamJob` (`@R "stream"`) | `stream_job.py` | 流式执行:异常包装为 ERROR chunk,结束时 emit DONE 终止流。 | - -### 4.9 Service — `reme4/components/service/` - -把 jobs 暴露给外部协议。 - -| 类 | 文件 | 说明 | -| --- | --- | --- | -| `BaseService` | `base_service.py` | 抽象接口:`build_service/add_job/start_service`,`run_app` 串起来。 | -| `HttpService` (`@R "http"`) | `http_service.py` | FastAPI + uvicorn;普通 job → POST JSON 端点,stream job → SSE 流;CORS 全开。 | -| `MCPService` (`@R "mcp"`) | `mcp_service.py` | FastMCP;把 job 注册为 MCP `FunctionTool`(StreamJob 跳过);transport 支持 sse/stdio/streamable-http。 | - -### 4.10 Client — `reme4/components/client/` - -| 类 | 文件 | 说明 | -| --- | --- | --- | -| `BaseClient` | `base_client.py` | 抽象接口:`__call__` 分发 `list`/`_execute`,`list_actions` 列出 server 能力。 | -| `HttpClient` (`@R "http"`) | `http_client.py` | httpx 异步流式:根据 `Content-Type` 自适应 JSON/SSE;`/openapi.json` 列出 actions;CLI 友好格式化。 | -| `MCPClient` (`@R "mcp"`) | `mcp_client.py` | fastmcp Client 包装;transport=`sse/stdio/streamable-http`;`list_tools` 列出工具。 | - -### 4.11 AgentScope 适配(as_*) — `reme4/components/as_*/` - -把 AgentScope 的 LLM / Formatter / TokenCounter 包成 ReMe 组件,供 step 通过 `step.as_llm` / `step.as_llm_formatter` / `step.as_token_counter` 访问。 - -| 类 | 文件 | 说明 | -| --- | --- | --- | -| `BaseAsLLM` / `OpenAIAsLLM` (`openai`) / `AnthropicAsLLM` (`anthropic`) | `as_llm/__init__.py` | 包装 `agentscope.model.OpenAIChatModel / AnthropicChatModel`,启动时实例化 `self.model`。 | -| `BaseAsLLMFormatter` / `AsOpenAIChatFormatter` (`openai`) / `AsAnthropicChatFormatter` (`anthropic`) | `as_llm_formatter/__init__.py` | 包装 AgentScope formatter;OpenAI 版用 `ReMeOpenAIChatFormatter` 扩展 | -| `ReMeOpenAIChatFormatter` | `as_llm_formatter/reme_openai_chat_formatter.py` | OpenAI formatter 扩展:tool_result 中的 image 提升为 user 消息;thinking 块合并为 `reasoning_content`;新增 video block 支持。 | -| `BaseAsTokenCounter` / `EstimatedAsTokenCounter` (`estimated`) | `as_token_counter/__init__.py` | 字符级估算 token 计数器(`encoded_byte_len / divisor`)。 | -| `EstimatedTokenCounter` | `as_token_counter/estimate_token_counter.py` | 实现类。 | - -### 4.12 Prompt Handler — `reme4/components/prompt_handler.py` - -`PromptHandler`:YAML/JSON 加载或类同名文件加载;多语言后缀(`key_zh/key_en`);`prompt_format` 支持 `[flag]` 行级条件、`{var}` 参数校验。 - -## 5. Steps(最小执行单元) - -代码:`reme4/steps/` - -| 类 | 注册名 | 文件 | 作用 | -| --- | --- | --- | --- | -| `BaseStep` | — | `base_step.py` | 抽象基类:`execute()` + `RuntimeContext` 注入 + `input/output_mapping` + 通过 `_resolve` 自动取组件(`as_llm/as_llm_formatter/as_token_counter/file_chunker/file_store/embedding/file_watcher`);`add_as_tool(toolkit, job_name)` 把 job 包成 AgentScope tool。 | -| `DemoEchoStep1/2` | `demo_echo_step1` / `demo_echo_step2` | `common/demo.py` | 烟雾测试:query 处理 + 应答。 | -| `HealthCheckStep` | `health_check_step` | `common/health_check.py` | 各组件健康/规模快照(embedding/file_graph/file_store/file_watcher/keyword_index)+ 内存深度估算。 | -| `HelpStep` | `help_step` | `common/help.py` | 一行式列出全部 job 元信息(含参数 schema)。 | -| `ReindexStep` | `reindex_step` | `common/reindex.py` | 全量重建:停 watcher → clear store → `update_store` → 重启 watcher。 | -| `SearchStep` | `search_step` | `common/search.py` | 混合检索:vector_search + keyword_search 并发 → RRF 融合 → 阈值过滤 → 截断 → 可选 outlinks/inlinks 邻居展开(含元数据)。 | -| `StreamDemoStep1/2` | `stream_demo_step1` / `stream_demo_step2` | `common/stream_demo.py` | 流式烟雾测试:逐字符 emit CONTENT。 | -| `VersionStep` | `version_step` | `common/version.py` | 输出 `reme4.__version__`。 | - -## 6. Utils — `reme4/utils/` - -| 文件 | 主要导出 | -| --- | --- | -| `common_utils.py` | `hash_text`(SHA-256)、`execute_stream_task`(SSE 流转发)、`mock_reme_server`(子进程启动测试服务器)、`call_action` / `call_and_check`(HTTP 调用与断言)。 | -| `service_utils.py` | `find_reme` / `locate_reme` / `precheck_start` / `cli_find_reme`:服务发现,`lsof` + `pgrep` 扫描运行实例,端口冲突预检。 | -| `env_utils.py` | `load_env`:加载 `.env`。 | -| `logger_utils.py` | `get_logger`:loguru 日志(控制台 + 文件)。 | -| `logo_utils.py` | `print_logo`:启动 ASCII logo。 | -| `similarity_utils.py` | `cosine_similarity` / `batch_cosine_similarity`:numpy 向量相似度。 | - -## 7. 内置 Jobs(`reme4/config/default.yaml`) - -| Job | Backend | 步骤 | 说明 | -| --- | --- | --- | --- | -| `demo` | `base` | `demo_echo_step1` → `demo_echo_step2` | 端到端 demo。 | -| `version` | `base` | `version_step` | 返回包版本。 | -| `health_check` | `base` | `health_check_step` | 组件健康快照。 | -| `help` | `base` | `help_step` | 列出全部 job。 | -| `reindex` | `base` | `reindex_step` | 全量重建索引。 | -| `search` | `base` | `search_step` | 混合检索(vector+keyword RRF,可展开邻居)。 | -| `stream_demo` | `stream` | `stream_demo_step1` → `stream_demo_step2` | 流式 demo。 | - -## 8. 默认依赖关系(来自 `default.yaml`) - -``` -tokenizer (regex) ──┐ -embedding_model (openai) ──┤── file_store (local) ── file_watcher (lite) -file_graph (local) ──┤ (持有 embedding/keyword_index/file_graph) -file_chunker (default) ──┘ │ -keyword_index (bm25) ── tokenizer ──────────────┘ │ - file_chunker ──┘ -``` - -启动时由 `Application._topological_order()`(Kahn 算法)按依赖拓扑序启动;关闭时反向。 - -## 9. 扩展点速查 - -| 需求 | 入口 | -| --- | --- | -| 新增检索后端 | 实现 `BaseFileStore` 子类,`@R.register("xxx")` | -| 新增图后端 | 实现 `BaseFileGraph` 子类(参考 `Neo4jFileGraph` 处理虚节点) | -| 新增分词器 | 实现 `BaseTokenizer.tokenize` | -| 新增解析器 | 实现 `BaseFileChunker.parse`(返回 `(FileNode, list[FileChunk])`) | -| 新增 Job | 在 `default.yaml`(或自定义 yaml)`jobs:` 段声明 + 写步骤实现 | -| 新增 Step | 继承 `BaseStep`,实现 `execute()` 并 `@R.register("xxx_step")` | -| 暴露新协议 | 实现 `BaseService`(参考 `HttpService` / `MCPService`) | -| 接入新 LLM | 实现 `BaseAsLLM` 子类(`agentscope.model` 适配) | diff --git a/docs4/old/reme4_report.md b/docs4/old/reme4_report.md deleted file mode 100644 index b3e3a4bc..00000000 --- a/docs4/old/reme4_report.md +++ /dev/null @@ -1,971 +0,0 @@ -# ReMe:把本地 Markdown 自进化成知识图谱的个人记忆引擎 - -> 面向 Leader / 决策者的能力报告 -> 关键词:个人记忆 · 记忆自进化 · 多模检索 · Agent 接入 · 本地优先 - ---- - -## 一、引言:为什么要做新版本 - -### 1.1 ReMe 的一句话定位 - -> **ReMe 是一个把本地 Markdown 自进化成知识图谱的个人记忆引擎。** - -- **记忆分层(形态的物化)** → 记忆按"原始 → 加工"两层组织:`resource/`(原始素材)、`daily/`(日记事件)是只增不删的流水帐;`digest/` 是加工层,下分 `personal/`(个性化)、`knowledge/`(主题知识)、`procedural/`(Agent 任务经验)、`proactive/`(主动洞察)四个固定子目录,写入策略和检索权重各有差异。 -- **本地 Markdown(载体)** → 所有记忆都是 Obsidian 兼容的 .md 文件——YAML front matter、四种 wikilink(`[[X]]` / `[[X#anchor]]` / `[[X|alias]]` / `![[X]]`)、Dataview 风格 `predicate:: [[X]]` 语义关系全部沿用社区约定。用户可读、可备份、可迁移,对抗黑盒。 -- **自进化(机制)** → 不需要用户手工整理,Agent 在后台让笔记自己长出结构。这一点把 ReMe 同时与"手动建图的 Obsidian"和"扁平存储的 Mem0"拉开。【event/trace】 -- **知识图谱(结果)** → 自进化的产出物不是一堆扁平笔记,而是一张可被**多模 + 渐进式检索**消费的图:向量 + 关键词(中文 BM25)+ 图谱三路 RRF 融合,返回时通过 1-hop 邻居 meta 让 Agent"先看目录、再决定要不要展开正文",不像传统 RAG 那样一次性把 top-K 切片塞进上下文。 -- **被集成而非内置(分发形态)** → ReMe 不做独立 Agent 产品,而是作为**能力**被任意 Harness 调用:SDK 深度集成(qwenpaw / AgentScope)、MCP Tool(Claude Code / Cursor / Cherry Studio)、CLI + skill.md 三条路径并行,记忆跟着用户走,不绑定任何上层框架。 - -支撑这一切的是**自研轻量索引内核**——纯 Python(后期可以使用rust重写索引内核) + 文件持久化,无 sqlite / chroma -等原生扩展依赖,老旧 Linux/Win 也能稳跑,这是 ReMe 能"被部署到大量异构用户机器"的工程前提。 - ---- - -## 二、产品全景图 - -### 2.1 一张图看 ReMe - -``` -┌─────────────────────────────────────────────────────────┐ -│ 外部 Agent / Harness │ -│ qwenpaw · Claude Code · Cursor · 其它 │ -└──────────┬──────────────┬───────────────┬───────────────┘ - │ SDK │ MCP Tool │ CLI / skill.md -┌──────────▼──────────────▼───────────────▼───────────────┐ -│ ReMe Service Layer │ -│ HTTP / MCP / CLI · 服务发现 · 进程托管 │ -├─────────────────────────────────────────────────────────┤ -│ ReMe Job/Step 编排 │ -│ search · auto_memory · auto_dream · auto_link … │ -├─────────────────────────────────────────────────────────┤ -│ Markdown 知识内核(本地文件即数据库) │ -│ FileChunker · FileStore · FileGraph · FileWatcher │ -│ BM25 倒排 · 向量索引 · Wiki Link 图谱 │ -├─────────────────────────────────────────────────────────┤ -│ 文件目录约定 │ -│ resource/ · daily/ · digest/{personal,knowledge, │ -│ procedural,proactive}/ │ -└─────────────────────────────────────────────────────────┘ -``` - -四层结构从上到下: - -- **接入层**:让任何 Agent 框架都能用。 -- **服务层**:HTTP / MCP / CLI 三种协议同时暴露,按 Harness 需求选用。 -- **编排层**:把能力拆成 Job/Step,可组合、可流式。 -- **内核层**:Markdown 解析、存储、图谱、监听一体化。 -- **目录层**:用户最直观看到的文件夹结构,本身就是 ReMe 的"产品形态"。 - -### 2.2 三个最直观的故事场景 - -**场景一:金融分析师的产业链知识库** -盘后,分析师和 Agent 对话讨论今天看到的几条新能源新闻。第二天打开知识库,发现昨天的对话已经被自动拆分成「钴价波动」「下游电池厂动向」「上游矿企并购」三条事件笔记,分别归档到 -`digest/knowledge/financial/产业链/` 下相应主题;笔记之间通过 `[[钴]]` `[[宁德时代]]` 这样的 wikilink 互相串联。下周再问"钴的下游应用",ReMe -沿着图谱渐进展开,从一个节点跳到相关的全部上下文。 - -**场景二:个人工作 & 生活第二大脑** -日常对话、会议讨论、学习笔记都被主 Agent 实时写入 daily 笔记。夜晚 Agent 空闲时,ReMe 在后台把零散的 daily 内容按" -客户/项目/学习/生活"主题重新整理到 knowledge 库,并自动补全笔记之间的链接。三个月后,用户拥有一份完全属于自己的、可视化的" -第二大脑",可以用 Obsidian 直接打开浏览。 - -**场景三:Agent 框架开箱接入** -开发者在 qwenpaw 或 Claude Code 中安装 ReMe,不需要改 Agent 一行代码 —— Agent 立刻拥有"长期记忆 + 个人知识检索 + -自动整理"三项能力。SDK 集成是无感的:每次对话自动落入 daily,每次检索自动走多模融合,每天空闲自动整理归档。 - ---- - -## 三、记忆模型:ReMe 把什么存下来 - -### 3.1 两层记忆结构:原始素材 + 加工记忆 - -ReMe 不把对话一股脑塞进数据库,而是按"原始 → 加工"分两层组织: - -| 层次 | 目录 | 存什么 | 典型场景 | -|----------|-------------|----------------------------------|-------------------------------| -| **原始素材** | `resource/` | 上传文件、抓取网页、PDF 研报、邮件附件 | 溯源 / 审计 / 二次加工 | -| **日记流水** | `daily/` | 每天的事件性记忆,主 Agent 实时写入 | "我今天和谁聊了什么"、"今天工作内容" | -| **加工记忆** | `digest/` | 经 Auto-Dream 整理后的长期记忆,下分四类(见 3.2) | "光伏产业链"、"webpack 排查路径"、"早间洞察" | - -`resource/` 和 `daily/` 是只增不删的"流水帐"——前者保留原始事实、后者保留事件级现场;`digest/` 才是被反复消费的精华层,也是 Auto-Dream / Auto-Link 持续打磨的主要产物。 - -### 3.2 digest 下的四种记忆 - -`digest/` 固定划分四个子目录,正交覆盖"用户 / 知识 / Agent / 主动"四个维度: - -| 子目录 | 内容性质 | 写入触发 | 检索权重 | 典型例子 | -|------------------------|---------------------|----------------------|-------------|---------------------------------------| -| **digest/personal/** | 个性化(用户偏好、习惯、人物档案) | 用户纠正 / 偏好表达 | 全场景常驻 | "用户不爱写注释"、"用户喜欢 pnpm" | -| **digest/knowledge/** | 知识类(客观知识、领域参考) | 主题对话 / Auto-Dream 归档 | 主题相关性匹配 | "光伏产业链"、"React Server Components" | -| **digest/procedural/** | 程序化(Agent 任务经验) | 任务完成后归纳 | 任务相似度高时唤起 | "webpack 卡死的排查路径" | -| **digest/proactive/** | 主动推送(Agent 输出的分析) | 定时 / 触发式生成 | 时效衰减 | 早间洞察、周复盘、热点跟踪 | - -四类的"形状"刻意不同: - -- `digest/knowledge/` 由用户自定义二级分类(如 `work/`、`financial/`、`life/`),下面层级随意展开。 -- `digest/personal/`、`digest/proactive/` 保持扁平,便于全量加载或时序浏览。 -- `digest/procedural/` 软链到 Harness Agent 的 skill 目录(P0),让 Agent 沉淀的"经验"直接成为可复用的 skill。 - -### 3.3 目录约定(用户可读、可备份、可迁移) - -skills 建议使用index 看 whole picture~ - -``` -~/reme_workspace/ -├── resource/ # 原始素材(按日期归档) -│ └── 20260518/ -│ ├── 1430_xueqiu_comment.html # 雪球评论抓取 -│ └── 1620_research_report.pdf # 研报原件 -├── daily/ -│ ├── 20260518.md # 当天主索引(兼容 write/edit) -│ └── 20260518/ -│ ├── meeting-with-alice.md -│ ├── debug-login.md -│ └── reading-paper.md -└── digest/ # 固定四个子目录:personal / knowledge / procedural / proactive - ├── personal/ # 个性化记忆:偏好、习惯、个人事件 - .change_log.md difference - _moc.md - │ └── 用户偏好.md - ├── knowledge/ # 知识类记忆:用户自定义二级目录(work / financial / ...) - │ ├── work/ - │ ├── financial/ - │ │ ├── 光伏产业链.md - │ │ └── 钴.md - │ └── ... - ├── procedural/ # 程序化记忆:软链到 harness agent 的 skill 目录(P0) - │ └── xxxx.md # Agent 完成任务沉淀的经验 - └── proactive/ # 主动推送:各家协议不同 - └── 20260518.md # Agent 主动产出的建议 -``` - -> `digest/` 下固定为 **personal / knowledge / procedural / proactive** 四个子目录;其中 `knowledge/` 内部由用户自行扩展二级分类(如 `work/`、`financial/`),其余三类保持扁平结构。 - -**所有记忆都是普通 Markdown 文件**,用户随时可以: - -- 用 Obsidian / Typora / VSCode 打开浏览编辑 -- 用 Git / iCloud / 网盘做版本控制和跨设备同步 -- 迁移到任何机器,复制目录即可 -- **没有黑盒数据库,没有产品锁定** - -这一点对 Leader 视角尤其重要:用户对自己数据的掌控感,是所有"个人记忆"产品的信任基础。 - -## 四、Markdown 内核:把文件当数据库 - -### 4.1 Obsidian 兼容的 Markdown 格式 - -ReMe 没有发明新格式,而是完全复用 Obsidian 生态的约定: - -- **YAML front matter**:标题、标签、描述、自定义字段。 - -```markdown ---- -title: 光伏产业链研究 -description: 从硅料到组件的全链条梳理 -tags: [新能源, 光伏, 产业链] -parent: 新能源 -author: 张三 -updated。: 2026-05-19 ---- - -# 正文从这里开始 - -`title` / `description` / `tags` 是约定字段(参见 `reme4/schema/file_front_matter.py`),其余键值对作为 extras -全部保留,可被检索和图索引消费。 -``` - -- **4 种 wikilink 写法**: - - `[[X]]`:标准链接 - - `[[X#anchor]]`:链接到文件中的章节 - - `[[X|alias]]`:自定义显示文本 - - `![[X]]`:嵌入引用 -- **Dataview 风格语义关系**:`predicate:: [[X]]`,例如 `parent:: [[新能源]]`、`founder:: [[张三]]`,把 link 升级为带类型的" - 边"。 -- 标准 `[text](xxx.md)` 链接也会被识别为图边。 - -**意义**:用户的知识库可以直接用 Obsidian 打开做可视化浏览,可以用 Obsidian 插件做扩展。ReMe 不是替代 Obsidian,而是**给 -Obsidian 加上一个会自己写笔记的 Agent** - -### 4.2 比 RAG 更聪明的切片 - -传统 RAG 用固定 token 长度 + overlap 切片,经常切坏文档结构。ReMe 用 Markdown AST 切片: - -- 解析为章节嵌套树(按 H1/H2/H3 分层)。 -- 按章节边界递归切分,保留语义完整性。 -- **每个 chunk 自带完整的标题骨架(TOC)**:检索回来的片段一眼就能看出"这段在哪个章节、什么主题下"。 - -``` -某 chunk 实际内容长这样: -───────────────────── -# 光伏产业链 -## 上游:硅料 -### 多晶硅工艺 -[chunk 正文] -## 中游:硅片 -## 下游:组件 -───────────────────── -``````` - -Agent 拿到这个 chunk,立刻知道层级位置,不会断章取义。 - -### 4.3 Graph 索引:双向链接 - -定位句里"自进化成**知识图谱**"的物理形态,就落在这一节——每个文件参与两套索引: - -- **正向(outlinks)**:A → B(A 引用了 B) -- **反向(inlinks)**:B ← {A, C, D}(谁引用了 B) - -**反向链接**是知识库可用性的关键 —— 让你站在任意一个概念上,看到"还有哪些地方提到过我"。 - -ReMe 提供三种 graph backend,按规模和需求切换: - -- **本地 dict + JSONL**:轻量、零依赖、适合个人规模。 -- **NetworkX + pickle**:方便做图算法分析。 -- **Neo4j**:企业规模、Cypher 查询、可视化丰富。 - -切换只需配置一行。 - - -## 五、记忆的自进化(核心差异化) - -> 这是 ReMe 最重要的能力,也是和市面所有「记忆即数据库」产品的根本分野。 -> -> **ReMe 的记忆不是被动存的,是主动长成知识图谱的。** - -定位句中"自进化成知识图谱"的具体路径,由下面三件套共同承担:**auto-memory** 在前线把对话拆成事件,**auto-dream** -在空闲时把事件归档成主题,**auto-link** 把这一切用 wikilink 串成图。三者协作,daily 流水最终被织成一张越用越密的个人知识图谱。 - -### 5.1 Auto-Memory:实时拆事件 - -主对话进行时,ReMe 在后台把上下文按"事件"自动拆分: - -- 用户和 Agent 的连续对话,被识别为若干个独立事件(一次会议、一次 debug、一次学习)。 -- 每个事件成为一个独立的 `daily/YYYYMMDD/{event}.md` 笔记。 -- 同时在 `daily/YYYYMMDD.md` 维护主索引,所有事件可被反向追溯。 - -**用户体验** -:不需要手动整理。打开当天主索引,事件已经分章节列好,每条都能跳转到独立笔记。这就像有一个秘书在你说话的同时帮你做" -会议纪要的分章节"。 - -### 5.2 Auto-Dream:空闲整理 - -借鉴人在睡眠中"记忆巩固"的机制: - -- Agent 检测到空闲(夜晚、用户离开、长时间无交互)时触发。 -- 把若干天的 daily 笔记按主题、实体重新组织到 `digest/knowledge/{domain}/` 下;同时把对话里反复出现的偏好沉淀到 `digest/personal/`,把 Agent 完成任务的经验固化到 `digest/procedural/`。 -- 抽取共性、合并重复、生成总结。 - -**用户体验**:第二天打开 `digest/`,会发现昨天散落在不同对话里的内容已经按"客户/项目/学习"自动归档到 `digest/knowledge/`,关键概念被抽成独立的主题笔记。 - -这是 ReMe 区别于"对话历史搜索"的关键 —— **它会自己整理**。 - -### 5.3 Auto-Link:自动建图 - -后台任务自动从正文里识别实体、候选链接,把隐式关系写回 wikilink: - -- 在「光伏产业链」笔记里提到「隆基」,ReMe 自动补 `[[隆基]]` 链接到对应主题笔记。 -- 在 daily 事件里提到「Alice」,自动链到 `[[Alice]]` 个人档案。 -- 生成的 link 是可见的、可编辑的(写在 Markdown 文件里),用户随时可以修正。 - -**用户体验**:知识库随时间自然"越长越密"。浏览时可以从任意一处跳转到相关全部上下文,类似于在自己的脑子里"联想"。 - -### 5.4 三者协同:从对话到知识图谱的自然演化 - -``` -[实时] [离线] [持续] -原始对话 ─Auto-Memory─► daily 事件 ─Auto-Dream─► digest/{personal,knowledge,procedural} - │ - Auto-Link - │ - ▼ - 知识图谱 -``` - -整个过程**不需要用户操心**。用户只需要正常和 Agent -对话,三个月后回头看,就有了一张按主题组织、互相关联、可视化浏览的个人知识图谱——这就是一句话定位里"自进化成知识图谱"的物理产物。 - - -## 六、检索体验:多模检索 + 渐进式展开 - -### 6.1 三路融合的混合检索 - -ReMe 同时跑三种检索通路,结果通过 RRF(Reciprocal Rank Fusion)排序融合: - -- **向量检索** —— 捕捉语义相似度("钴" ≈ "锂电正极原料") -- **关键词检索(BM25)** —— 精确匹配,对中文友好("宁德时代" 一定要命中) -- **图谱检索** —— 通过 wikilink 邻居展开(找到"钴" → 自动带上"刚果(金)"、"嘉能可") - -单一通路都有盲区: - -- 纯向量 → 名词术语容易错配。 -- 纯关键词 → 同义改写抓不到。 -- 纯图谱 → 起点选错就全盘错。 - -三路融合让检索像"三个人各自查一遍再开会确认",结果鲁棒得多。 - -### 6.2 渐进式展开 - -传统 RAG 是一次性把 top-K 切片塞进上下文,token 利用率低,而且经常带进不相关的噪音。ReMe 的检索( -`reme4/steps/common/search.py`)是**分跳**的,且每一跳的"信息密度"刻意不同: - -- **第一跳:直接命中的切片**——返回 chunk 全文 + 章节骨架。 -- **第二跳:1-hop 邻居**——只返回邻居的 path + meta(name/description)+ 边的语义(predicate/anchor),**不展开正文**。 -- **第 N 跳:Agent 主动追问**——基于二跳的"目录",挑出真正相关的邻居,再发起新一次 search 拿正文。 - -**一个具体例子:分析师查询"钴的下游应用"** - -第一跳直接命中 `digest/knowledge/financial/产业链/钴.md` 的某一段切片,answer 里这一段长这样: - -``` -========== digest/knowledge/financial/产业链/钴.md:42-78 [score=0.0234 vector=0.0123 keyword=0.0111] ========== -# 钴 -## 应用 -钴是锂电正极材料的关键原料,主要用于动力电池、消费电子和储能…… - - → outlinks (3): - → digest/knowledge/financial/矿产/刚果(金).md name="刚果(金) - 钴矿主产区" - via predicate=producer, anchor=#钴矿带 - → digest/knowledge/financial/公司/嘉能可.md name="嘉能可 Glencore" - via plain - → digest/knowledge/financial/产品/三元正极.md name="三元正极材料" - via predicate=downstream - ← inlinks (2): - ← digest/knowledge/financial/产业链/锂电产业链.md name="锂电产业链总览" - via predicate=upstream - ← daily/20260318/宁德调研纪要.md name="宁德时代调研纪要" - via plain -``` - -注意第二跳的信息只有"路径 + 名称 + 边的 predicate/anchor",**没有邻居正文**。这是关键设计: - -- 一次检索就让 Agent 看到"这个主题周围长什么样"——上游是刚果(金)、嘉能可,下游是三元正极,被锂电产业链当作 upstream 引用,最近还在 - 3 月 18 日的宁德调研里被提到。 -- Agent 可以基于这份"目录"判断哪个邻居才是用户真正想要的,再调一次 search 拉对应文件的正文(比如挑 `三元正极.md` 的细节)。 - -**为什么不一次把邻居正文也带回来** - -如果第二跳直接返回正文,三跳网络很容易把上下文撑爆。当前实现里 `max_links_per_direction` 默认 10,单跳最多吐出 10 个 -outlink + 10 个 inlink 的 meta,每条只占一行,**整张二跳目录的成本不到一个 chunk 的 token**。 - -**工程层面的关键参数** - -- `candidate_multiplier=3.0`:候选池预拉 `limit*3` 条(最多 200),给 RRF 融合留余量。 -- `min_score`:过低分切片直接丢弃,避免噪音。 -- `expand_links=True`:开关二跳展开;关闭则退化为传统 RAG。 -- `max_links_per_direction=10`:单方向(出/入)最多展示几个邻居,防爆。 - -**用户体验**:检索像"翻知识网络"——先看一眼周边目录,再决定要不要深入某一条线,而不是"拉一坨切片塞进上下文"。 -**工程价值**:上下文窗口永远只装最相关的部分,token 成本可控;Agent 也能更精确地解释"我为什么知道这个"——因为它能引用 -predicate=upstream、anchor=#应用 这种带语义的边。 - -### 6.3 关键词索引的工程价值 - -很多人忽视:**做中文知识库,关键词检索比向量更重要**。 - -ReMe 自研增量 BM25 倒排索引,配合 jieba 中文分词: - -- 增量更新:新增/删除文件无需重建全索引。 -- 跨平台:纯 Python + 文件落盘,没有 sqlite/chroma 这类原生扩展。 -- 这一点直接解决了老版本在 qwenpaw 等老旧 Linux/Win 系统上的 core dump 兼容问题。 - ---- - -## 七、工程架构:可扩展、可替换、可演进 - -### 7.1 Component 框架 - -ReMe 把所有能力封装为 Component: - -``` -embedding · file_store · file_graph · file_chunker · file_watcher -tokenizer · keyword_index · LLM 适配 · service · client -``` - -每个 Component 都可以: - -- **Backend 热切换**:`local` ↔ `nx` ↔ `neo4j` 一行配置改完。 -- **生命周期托管**:start / close / restart 全自动,幂等保护。 -- **依赖声明**:组件间相互调用,按依赖图拓扑排序自动启动。 -- **持久化钩子**:dump/load 标准接口。 - -这意味着 ReMe 有非常强的**可演进性** —— 当某个 backend 不够用了(比如个人 Neo4j 改用云上 Neo4j),换的成本极低。 - -### 7.2 Job / Step 编排(借鉴 GitHub Actions) - -- **Step**:最小执行单元,做一件具体的事(如检索、解析、调 LLM)。 -- **Job**:steps 的有序组合,可复用、可流式。 -- **对外**:每个 Job 同时暴露为 HTTP API / MCP Tool / CLI 命令,无需重复开发。 - -新增一个能力的标准动作是: - -1. 写一个 Step(继承 BaseStep,实现 execute)。 -2. 在配置里把它组合进 Job。 -3. 自动获得 HTTP / MCP / CLI 三种调用方式。 - -### 7.3 配置即应用 - -一份 `default.yaml` 描述完整应用:service / components / jobs。 - -```yaml -service: - backend: http -components: - file_store: - backend: local - file_graph: - backend: local -jobs: - search: - steps: - - search_step -``` - -替换 backend、增删 Job、调整依赖,全部通过配置完成,部署上线无需改代码。 - ---- - -## 八、生态接入:ReMe 如何被使用 - -### 8.1 三种集成路径 - -| 路径 | 适用对象 | 体验 | -|-------------------------|-----------------------------------------------------|--------------------------------------------------------------------| -| **SDK 集成** | qwenpaw / AgentScope 等深度合作框架 | 直接调用 `AgentscopeTools`,无感拥有 auto-memory / auto-dream / auto-search | -| **MCP Tool + skill.md** | 任何支持 MCP 的客户端(Claude Code / Cursor / Cherry Studio) | 配 skill.md,开箱即用 | -| **CLI + skill.md** | 通用方案,兜底所有 Harness | 一条命令调用,shell 友好 | - -三条路径的设计哲学是:**不强迫任何 Agent 框架做 ReMe-specific 的改造**。 - -- 对深度合作方,给最丝滑的 SDK。 -- 对支持 MCP 的产品,靠 MCP 标准协议。 -- 对什么都不支持的环境,CLI + skill.md 兜底。 - -### 8.2 服务托管 - -- **按需拉起**:Agent 检测到 ReMe 服务未运行时,可以自动后台拉起,用户无感知。 -- **服务发现**:`find_reme` 一键探活,避免端口冲突;多个 ReMe 实例共存时也能精准定位。 - -### 8.3 ReMe 的边界 - -> **ReMe 专注于知识加工,不做知识获取。** - -- **数据采集** —— 网页抓取、邮件接入、Slack 同步、文件上传 —— 由上游 Agent 完成。 -- **ReMe 负责** —— 把这些资料消化、整理、链接、检索、自进化。 - -这个边界划得清楚的好处: - -- ReMe 不和上游的数据接入工具竞争。 -- ReMe 不需要为每种数据源写适配,专注做记忆引擎本职。 -- 让 ReMe 在"被集成"路线上更纯粹、更通用。 - ---- - -## 九、应用场景 - -### 9.1 金融场景:产业链知识库 - -**主角**:王分析师,新能源行业研究员,每天要处理 10+ 篇研报、数十条产业新闻、若干场公司调研。 -**痛点**:信息散落在飞书文档、PDF 研报、微信群消息、调研纪要里,"上次调研宁德时代时聊到的钴价话题"再也找不回来。 - -#### 一周内 ReMe 自动织出的产业链图谱 - -> **关键边界**:Auto-Dream 只对**已存在的 daily 事实**做聚合,不会凭空梦出"产业链总览"这种结构性概念。总览级笔记的诞生依赖**用户主动 query**,下面会分两个阶段展示。 - -##### 阶段一:Auto-Memory + Auto-Dream(事实层聚合) - -**Day 1(周一)盘后**:王分析师把今天看到的 3 篇研报扔给 Agent,又口述了对刚果(金)矿权变更的看法。 - -``` -对话原文(片段): -> 今天嘉能可发了三季报,钴产量同比下滑 18%…… -> 刚果(金)那边的政策变化,对洛阳钼业 KFM 矿的影响要重点跟…… -> 下游三元正极厂商已经开始转向高镍低钴方案…… -``` - -ReMe 当晚 Auto-Memory 拆事件: - -``` -daily/20260518/ -├── 嘉能可三季报点评.md ← Auto-Memory 拆出的事件 1 -├── 刚果金矿权政策跟踪.md ← 事件 2 -└── 三元正极高镍化趋势.md ← 事件 3 -``` - -**Day 2-3**:王分析师又陆续聊了宁德调研、亿纬电话会、嘉能可后续公告,daily 里「钴」「嘉能可」「三元正极」「宁德时代」反复出现。 - -**Day 3(周三)夜间 Auto-Dream**:把多天 daily 里**反复出现的实体**聚合成实体笔记——只做归并,不做总览。 - -``` -digest/knowledge/financial/公司/ -├── 嘉能可.md ← 新建:聚合 day1/day2 提到嘉能可的 4 个事件 -├── 洛阳钼业.md ← 新建 -└── 宁德时代.md ← 已有,本次新增「高镍化决策」一节 -digest/knowledge/financial/原料/ -└── 钴.md ← 新建:聚合 3 天里所有提到「钴」的内容 -digest/knowledge/financial/产品/ -└── 三元正极.md ← 新建:技术路线变化 -``` - -注意:**Auto-Dream 没有生成「锂电产业链.md」**——产业链是结构性概括,不在 daily 事实里,凭空生成就是幻觉。 - -##### 阶段二:用户 query 触发检索 + 合成(结构层) - -**Day 5(周五)**:王分析师准备组会要讲新能源板块,主动问 Agent: - -> **"分析锂电相关上下游"** - -这一句 query 触发了**检索 → 合成 → 落盘**的完整闭环: - -###### Step 1:渐进式检索返回多节点 + 关系骨架 - -ReMe 走多模融合(向量 + BM25 + 图谱),命中 3 天来 Auto-Dream 已经聚合好的实体节点,并展开 1-hop 邻居 meta: - -``` -========== 第一跳:直接命中(5 个节点)========== - -digest/knowledge/financial/原料/钴.md:42-78 [score=0.0234] -# 钴 / ## 应用 -钴是锂电正极材料的关键原料,主要用于动力电池…… - → outlinks (4): - → digest/knowledge/financial/产品/三元正极.md via predicate=downstream - → digest/knowledge/financial/公司/嘉能可.md via predicate=producer - → digest/knowledge/financial/公司/洛阳钼业.md via predicate=producer - → daily/20260518/三元正极高镍化趋势.md via plain - ← inlinks (2): - ← daily/20260318/宁德调研纪要.md via plain - ← daily/20260512/亿纬电话会.md via plain - -digest/knowledge/financial/产品/三元正极.md:15-44 [score=0.0211] -# 三元正极 / ## 高镍低钴路线 -2025 年起主流厂商加速 8 系/9 系产品…… - → outlinks (2): - → digest/knowledge/financial/公司/宁德时代.md via predicate=used_by - → digest/knowledge/financial/原料/钴.md via predicate=upstream - -digest/knowledge/financial/公司/宁德时代.md:88-120 [score=0.0193] -# 宁德时代 / ## 高镍化决策 -本季度切换到 9 系三元为主…… - -digest/knowledge/financial/公司/嘉能可.md:5-30 [score=0.0167] -digest/knowledge/financial/公司/洛阳钼业.md:1-22 [score=0.0152] - -========== 第二跳:Agent 主动展开邻居 meta(不取正文)========== -共 9 个邻居节点,按预测相关度排序: - - digest/knowledge/financial/公司/亿纬锂能.md ← 三元正极 used_by 反链 - - daily/20260512/亿纬电话会.md ← 宁德时代 inlinks - - daily/20260318/宁德调研纪要.md ← 钴 inlinks - ... -``` - -Agent 不需要把这些邻居正文都拉回来——光看"路径 + name + predicate"就足够拼出上下游骨架。 - -###### Step 2:Agent 基于检索结果合成总览,写回知识库 - -``` -digest/knowledge/financial/产业链/ -└── 锂电产业链.md ← 由 Day 5 query 触发合成 - 内容来源:上一步检索命中的 5 个节点 + 关系 - 不引入任何 daily 之外的"想象" -``` - -`锂电产业链.md` 正文: - -```markdown ---- -name: 锂电产业链总览 -source: query-synthesized ← 标记来源是 query 合成 -trigger_query: "分析锂电相关上下游" -generated_at: 2026-05-22 -generated_from: - - [[钴]] - - [[嘉能可]] - - [[洛阳钼业]] - - [[三元正极]] - - [[宁德时代]] ---- - -## 上游 · 资源 -- 钴矿:[[嘉能可]] / [[洛阳钼业]](刚果金为主产区,详见 [[钴]]) - -## 中游 · 材料 -- 正极:[[三元正极]](高镍化趋势,详见同名笔记) - -## 下游 · 电池厂 -- [[宁德时代]]([[daily/20260318/宁德调研纪要]] 中已确认 9 系切换) -- [[亿纬锂能]]([[daily/20260512/亿纬电话会]] 中提到产能规划) - -> 本笔记由 query 触发合成;下次再问"锂电上下游"会直接命中此文件, -> 后续 Auto-Link 会在新 daily 事件出现相关实体时增量补连接。 -``` - -###### Step 3:Agent 同步给出组会答复 - -Agent 拿这份合成结果,给王分析师的回复直接带**上下游骨架 + 公司归属 + 历史调研引用**: - -> "锂电产业链分三段:上游钴矿(嘉能可、洛阳钼业,刚果金集中)、中游三元正极(高镍化加速)、下游电池厂(宁德/亿纬)。这周您提到的事件分别落在:嘉能可三季报 → 上游产能;高镍化趋势 → 中游路线切换;宁德 9 系切换 → 下游产品验证。详细引用见 [[digest/knowledge/financial/产业链/锂电产业链]]。" - -**关键差异**:传统 RAG 会一股脑塞 5 个文件正文进上下文;ReMe 是"先看 5 个节点的目录骨架 → 拼出总览 → 落盘成可被反复消费的笔记"。下次再问"锂电下游有谁",直接命中这份总览,不用再走一遍合成。 - -##### Day 7:图谱已经长出层次 - -``` - ┌─────────────┐ - ┌────────►│ 锂电产业链 │◄────────┐ - │ └──────┬──────┘ ← Day 5 query 合成 - │ upstream │ │ upstream - │ │ contains │ - ┌───────┴──────┐ ▼ ┌──────┴──────┐ - │ 钴 │ ┌─────────┐ │ 锂 │ - │ (刚果金产区) │◄──┤ 原料 ├────►│ (盐湖产区) │ - └───────┬──────┘ └────┬────┘ └─────────────┘ - │ producer │ downstream - ▼ ▼ - ┌──────────────┐ ┌──────────────┐ - │ 嘉能可 │ │ 三元正极 │◄── 高镍化趋势 - │ 洛阳钼业 │ └──────┬───────┘ - └──────────────┘ │ used_by - ▼ - ┌──────────────┐ - │ 宁德时代 │ ← daily/0318 调研纪要 - │ 亿纬锂能 │ ← daily/0512 电话会 - └──────────────┘ - 【实体层 · Auto-Dream 聚合产生】 │ - │ - 【结构层 · query 合成产生】 -``` - -每条边都对应文件里的一句 `predicate:: [[X]]`,每个节点点开就是 Markdown 笔记,每段笔记都能反向追溯到原始 daily 事件——**没有任何节点是凭空"梦"出来的**。 - -#### proactive:主动洞察推送 - -每天早上 9:00,ReMe 在 `digest/proactive/20260519.md` 里写: - -```markdown ---- -name: 早间洞察 · 2026-05-19 ---- - -## 与您近期关注主题相关的事件 - -- **嘉能可宣布刚果(金) Mutanda 矿复产** ← 关联 [[钴]] / [[嘉能可]] - 上周您在 [[daily/20260518/嘉能可三季报点评]] 中标注「关注复产节奏」。 - → 复产对钴价的边际影响估计 -5% 到 -8%,可能影响 [[三元正极]] 成本。 - -- **宁德时代发布麒麟电池新版本** ← 关联 [[宁德时代]] / [[三元正极]] - 上次调研([[daily/20260318/宁德调研纪要]])中提到的高镍方案已落地。 -``` - -**这就是金融场景下 ReMe 的核心价值**:分析师只负责"看 + 说",知识图谱自己长出来;当行业事件发生时,ReMe 主动把"新事件 ↔ 旧上下文"的连线送到分析师面前。 - ---- - -### 9.2 个人工作 & 生活第二大脑 - -**主角**:李工,前端工程师 + 业余跑者 + 有娃奶爸。每天和 Agent 聊工作 bug、读论文、讨论小孩教育、规划周末徒步路线。 -**目标**:让所有这些零散的对话沉淀成一份"自己的"知识库,三个月后能用 Obsidian 直接打开浏览。 - -#### 时间线:从空目录到第二大脑 - -``` -Day 1 Day 7 Day 30 Day 90 - │ │ │ │ - ▼ ▼ ▼ ▼ -[空目录] [daily 流水开始堆积] [knowledge 主题浮现] [图谱密集成网] - │ - ──────────────────────── Auto-Memory ─────────────────────────────► │ - ──────────── Auto-Dream(每晚) ──────────────────► │ - ────── Auto-Link(持续) ─────────────► │ - ▼ - Obsidian Graph - 打开是密集网状 -``` - -#### Day 7:daily 流水 - -``` -daily/ -├── 20260513.md -├── 20260513/ -│ ├── 调试登录页面 CSS 问题.md ← 工作 -│ ├── 读《深度工作》第三章.md ← 学习 -│ └── 周末徒步路线讨论.md ← 生活 -├── 20260514.md -├── 20260514/ -│ ├── 团队周会决定切换到 pnpm.md ← 工作 -│ ├── 给宝宝挑选英语启蒙绘本.md ← 育儿 -│ └── 5km 配速训练记录.md ← 跑步 -└── …… -``` - -打开 `daily/20260513.md`(主索引): - -```markdown ---- -name: 2026-05-13 ---- - -## 今日事件 - -- 09:30 [[daily/20260513/调试登录页面 CSS 问题]] · #工作 #前端 -- 14:20 [[daily/20260513/读《深度工作》第三章]] · #阅读 -- 21:10 [[daily/20260513/周末徒步路线讨论]] · #生活 #徒步 -``` - -#### Day 30:Auto-Dream 已经把主题归档好了 - -``` -digest/knowledge/ -├── life/ ← 用户自定义二级分类:生活 -│ ├── 跑步训练日志.md ← 把 1 个月的「配速训练」事件聚合 -│ ├── 阅读笔记/ -│ │ ├── 深度工作.md ← 全书要点(从多次 daily 阅读片段汇总) -│ │ └── 给孩子的诗.md -│ └── 徒步路线/ -│ ├── 莫干山线.md -│ └── 千岛湖环湖线.md -├── work/ ← 用户自定义二级分类:工作 -│ ├── 前端调试技巧.md ← 「调试登录页面 CSS」「修复 z-index」等事件聚合 -│ ├── 包管理工具切换决策.md ← 「pnpm vs npm」讨论沉淀 -│ └── 团队会议纪要/ -└── parenting/ ← 用户自定义二级分类:育儿 - ├── 英语启蒙书单.md - └── 与孩子沟通技巧.md -``` - -李工没有手动建过任何一个 `digest/knowledge/` 下的文件——它们都是 Agent 在他睡觉时从 daily 里"梦出来"的。同时 Agent 在 `digest/personal/` 沉淀着对李工的画像("偏前端"、"早睡"、"周末徒步"),但这一层用户不会主动浏览。 - -#### Day 90:Obsidian Graph View 打开是这样 - -``` - [深度工作] - ▲ - 引用 │ 应用到 - │ - [跑步训练日志] ◄── 借鉴方法 ── [前端调试技巧] ──► [包管理工具切换决策] - │ ▲ ▲ - │ 关联 │ │ 提到 - ▼ │ │ - [徒步路线] [周会纪要] [团队成员] - │ │ - │ │ mentions - ▼ ▼ - [莫干山线] ───── 同行 ────► [Alice] ◄── 育儿讨论 ── [给孩子的诗] - │ - ▼ - [英语启蒙书单] -``` - -**这张图是李工的"第二大脑"**——工作、跑步、阅读、育儿、社交关系全部交织在一起,能从「Alice」一路联想到「莫干山徒步」,再跳到「孩子的英语书单」,因为某次徒步同行时聊到过这个话题。 - -#### 一次具体的"联想式回忆" - -某天李工问:"**上次和 Alice 一起聊过的那本书叫什么?**" - -``` -========== 第一跳:daily 命中 ========== -daily/20260420/与 Alice 周末聚餐.md -> ……Alice 推荐了一本讲注意力的书,标题里有「深度」两个字…… - - ← inlinks: - ← digest/knowledge/life/阅读笔记/深度工作.md via plain - → outlinks: - → digest/personal/Alice.md via mention - -========== 第二跳:Agent 顺藤摸瓜 ========== -digest/knowledge/life/阅读笔记/深度工作.md -> 卡尔·纽波特,2016 年出版…… -``` - -Agent 回:"**《深度工作》,卡尔·纽波特著。** 您在 4/20 周末聚餐时 Alice 推荐的,您后来在 5/13 读了第三章并做了笔记。" - -模糊回忆 → 精确召回 → 上下文重建——这是普通"对话历史搜索"做不到的,因为它只会按时间顺序往回翻,而 ReMe 沿着图谱"联想"。 - ---- - -### 9.3 Agent 长期陪伴:跨会话的程序化记忆 - -**主角**:张研发,长期使用 Claude Code 做日常开发。希望 Agent "越用越懂我"——记得我的代码风格偏好,记得过去踩过的坑,记得未完成的任务。 - -#### 跨会话的记忆生命周期 - -``` -[第 1 次会话] [第 N 次会话,N 周后] - │ │ - │ 用户在编辑器报错 │ 用户遇到类似报错 - ▼ ▼ -┌─────────────┐ ┌─────────────┐ -│ Agent 排查 │ │ Agent 检索 │ -│ 试 A 方案 ❌│ ── ReMe ──► │ ReMe 召回 │ -│ 试 B 方案 ✅│ │ 上次的 B 方案│ -└──────┬──────┘ └──────┬──────┘ - │ 写入 │ 直接套用 - ▼ ▼ -digest/ 跳过踩坑,1 步解决 -├── procedural/ -│ └── webpack 编译卡死.md ← Agent 任务经验 -└── personal/ - └── 代码风格.md ← 用户偏好画像 -``` - -#### 程序化记忆的真实例子 - -**第 1 次会话(2026-03-10)**:webpack 编译突然卡死。 - -``` -对话过程(摘要): -- 用户:"npm run build 卡在 92% 不动了" -- Agent 试方案 A:清缓存 → 没用 ❌ -- Agent 试方案 B:升级 terser-webpack-plugin → 没用 ❌ -- Agent 试方案 C:发现是 fork-ts-checker 的 OOM,加 --max-old-space-size=8192 → ✅ 成功 -``` - -ReMe 的 Auto-Dream 当晚把这次会话沉淀到: - -```markdown -# digest/procedural/webpack 编译卡死.md ---- -name: webpack 编译卡死的排查路径 -type: programmatic ---- - -## 症状 -build 卡在 92%(chunk asset optimization 阶段)。 - -## 排查顺序(按命中率) -1. ✅ **检查 Node 内存**:`NODE_OPTIONS=--max-old-space-size=8192` - → fork-ts-checker 在大型 TS 项目里很容易 OOM -2. ❌ 清 .cache 缓存(多数情况下无效) -3. ❌ 升级 terser-webpack-plugin(仅特定版本相关) - -## 关联 -- 用户偏好:[[digest/personal/代码风格#TypeScript]] 启用了 strict 模式, - 类型检查负担大,更易触发 OOM -- 历史事件:[[daily/20260310/webpack 卡死排查]] -``` - -**第 2 次会话(2026-04-22,6 周后)**:用户在另一个项目又遇到类似问题。 - -``` -用户:"vite build 也卡在打包阶段,是同一类问题吗?" - -Agent 内部检索 ReMe: -========== 命中:digest/procedural/webpack 编译卡死.md ========== -关键词匹配:编译卡死、build 阶段 -向量相似:vite build ≈ webpack build - -Agent 回复: -"根据您 3/10 在另一个项目遇到的同类问题,建议优先检查 Node 内存。 -vite 的 esbuild 阶段也吃内存,先试 NODE_OPTIONS=--max-old-space-size=8192。 -(上次清缓存和升级 plugin 都没用,可以跳过)" -``` - -**节省的不是时间,是踩坑路径**——这就是程序化记忆的价值。 - -#### 用户偏好的"自我画像" - -`digest/personal/` 下随时间长出的画像: - -```markdown -# digest/personal/代码风格.md ---- -type: personalization ---- - -## 命名 -- 倾向:函数 camelCase、类型 PascalCase、常量 SCREAMING_SNAKE -- 来源:[[daily/20260215]] 多次纠正 Agent 的命名建议 - -## 注释 -- 倾向:**不写无意义注释**,只在 WHY 不显然时写 -- 来源:[[daily/20260301]] 用户原话:"don't comment what the code already says" - -## 错误处理 -- 倾向:边界处校验、内部代码相信调用方 -- 来源:[[daily/20260408]] 用户拒绝在内部函数加 try/catch 时的解释 - -## 测试组织 -- 倾向:tests4/unittest 按基类组织(来自项目 CLAUDE.md) -``` - -**意义**:这不是 Agent 在 system prompt 里写死的"用户喜欢简洁",而是**从用户实际行为里被动观察到的、可追溯到具体对话的偏好画像**。每条偏好都有 `[[daily/...]]` 反向链接,用户可以审视、可以修正。 - -#### 三类记忆在 Agent 陪伴里的分工 - -回到 [3.2](#32-digest-下的四种记忆) 中 `digest/` 的四个子目录,本场景主要由其中三类共同支撑(proactive 已在 9.1 主动推送场景演示): - -| digest 子目录 | 写入触发 | 检索权重 | 实际表现 | -|----------------------------|----------------|----------|---------------------------------------| -| **digest/personal/** | 用户纠正 / 偏好表达 | 全场景常驻 | "我懂你不爱写注释" | -| **digest/procedural/** | 任务完成后归纳成功/失败路径 | 任务相似度高时高 | "上次这类 bug 你这样解决过" | -| **digest/knowledge/** | 学习对话、文档阅读 | 主题相关时高 | "你之前学过的 React Server Components" | - -三类共同织成一个"懂用户 + 会做事 + 有知识"的长期陪伴 Agent——**差异化体验来自 ReMe 维护的个人记忆,而不是模型本身**。换言之,同一个 Claude / Qwen 模型,套上不同用户的 ReMe,会变成完全不同的 Agent。 - ---- - -## 十、性能与稳定性 - -### 10.1 自研轻量内核 - -新版本重写了记忆引擎的核心模块: - -- **file chunker** —— Markdown AST + 章节切片 + wikilink 抽取 -- **file store** —— 内存 chunk 字典 + JSONL 持久化 -- **file graph** —— 双向链接索引,多 backend -- **file watcher** —— 基于 watchfiles 的轻量监听 -- **keyword index** —— 自研增量 BM25 倒排,原生支持中文 - -整体**纯 Python + 文件持久化**,无 sqlite/chroma 等三方原生依赖。 - -### 10.2 跨平台稳定性 - -老版本在 qwenpaw 等低版本 Linux/Win 环境会出现 sqlite 段错误、chroma core dump,这些问题在新版本完全规避: - -- 没有 native 扩展依赖。 -- 老旧 glibc / 老旧 Python 版本也能跑。 -- 安装简单,不需要 cmake、build-essential。 - -这对一个**要被部署到大量异构用户机器**的产品至关重要。 - -### 10.3 未来:Rust / C++ 高性能内核 - -- 当前 Python 版本已能覆盖个人规模知识库(万级文件)。 -- 规划用 Rust / C++ 重写关键路径(BM25 索引、文件解析、向量计算),支撑: - - 更大规模(十万级文件) - - 更低延迟(亚秒级冷启动) - - 更小内存 -- 上层 API 不变,对用户和 Agent 接入方完全透明。 - ---- - -## 十一、Roadmap - -| 阶段 | 关键里程碑 | -|-----------|--------------------------------------------------------------------------------------------------------| -| **Now** | 组件框架、Job/Step、Markdown 内核、混合检索(向量+BM25+图谱)、HTTP / MCP / CLI 三协议服务 | -| **Next** | auto-memory / auto-dream / auto-link 全套自进化能力;记忆类型分层;resource / proactive 目录;skill.md 模板;qwenpaw SDK 集成 | -| **Later** | 多跳渐进检索 API、领域 demo(金融产业链)、个人场景模板包、Rust 高性能内核、可视化管理面板 | - -每个阶段都有清晰的对外可演示成果: - -- Now → 可以现场演示 ReMe 检索 + Agent 集成。 -- Next → 可以演示"今天聊的内容明天自动整理好"。 -- Later → 可以演示十万级知识库下的亚秒检索 + 主动推送闭环。 - ---- - -## 十二、结语:ReMe 想成为什么 - -> ReMe 不止是「记忆库」。 -> -> 它的目标是:**让每个用户拥有一张由本地 Markdown 自进化而成、可携带、可被任意 Agent 调用的个人知识图谱。** -> -> 当 Agent 时代真正到来时,差异化的不是模型,而是「这个 Agent 是不是了解我」。 -> -> ReMe 想做的,就是这份「了解」的载体——一张属于用户自己、Agent 可读可写、会自己生长的图谱。 - -**三个判断**: - -1. 个人记忆是 Agent 时代必然出现的基础设施 —— 不是 ReMe 不做就没人做,而是早做的人有先发优势。 -2. **本地 Markdown + 自进化 + 知识图谱**(叠加被集成路线)—— 这套组合在当下市场是空缺的。 -3. ReMe 的工程内核已经就位,剩下是**自进化能力 + 生态集成 + 场景模板**的三件套加固,路径明确。 diff --git a/docs4/old/reme_design.md b/docs4/old/reme_design.md deleted file mode 100644 index 39811721..00000000 --- a/docs4/old/reme_design.md +++ /dev/null @@ -1,192 +0,0 @@ -# 快速测试 - -```bash -# 终端 A:启动服务 -reme4 start - -# 终端 B:调用 version 验证服务可用 -reme4 version -# 预期输出:✅ ReMe v{__version__} -``` - -# 基础Job - -@jinli - -入口:`reme4/reme.py::main()` → `parse_args(*sys.argv[1:])` 解析首个位置参数为 `action`,后续 `key=value` 解析为 kwargs(支持 -`service.port=8080` 的 dot notation;自动剥离 `--` / `-` 前缀;值会做 bool / int / float / JSON 转换)。 - -调用模式: - -- `start`:本地启动 `ReMe(Application)` 服务(不经过 client) -- `find_reme`:本地探测正在运行的 reme,不调用服务 -- `list`:在 client 端拦截,不转发到服务端,直接返回 action 目录 -- 其他 action:通过 `call_server(action, **kwargs)` → `R.get(ComponentEnum.CLIENT, backend)` 实例化客户端并流式打印(任意未列出的 - step register name 都按本规则透传) - -通用可选参数 `backend:str=http`(取值 `http` / `mcp`,对应 `reme4/components/client/{http_client,mcp_client}.py` 中 -`@R.register` 注册名);服务端默认 host/port 见 `reme4/constants.py`,可由 `start` 端通过 `service.host=` / `service.port=` -覆盖。 - -说明:📥 输入参数 | 📤 输出 | ⭐ 必填 | 🎚️ 默认值 | 🛠️ 内部行为 | 📊 metadata - -| 分类 | 指令 (register name) | 入口 | 参数 & 行为 | -|------------|--------------------------------------------------|-------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| 🚀 本地 | 🟢 `start` | `reme.py:30` → `ReMe(**kwargs).run_app()` | 📥 可选 `config=`(默认加载 `reme4/config/default.yaml`,`.yaml/.yml/.json` 都支持,含 `${ENV:-default}` 占位符)| 可选 `service.host=` / `service.port=` 等任意 dot-notation 覆盖 | 🛠️ 流程:`load_env()` → `resolve_app_config(**kwargs)` deep merge → `precheck_start(svc)`(`utils/service_utils.py:72`:目标 host:port 已有 reme → 打印 `reme already running ...` 直接返回;端口被其他进程占用 → stderr 提示 `port {port} occupied. Start on another port: reme4 start service.port=` 并 `sys.exit(1)`)→ 启动服务 | -| 🚀 本地 | 🧭 `find_reme` | `reme.py:36` → `utils/service_utils.py:89` | 📥 无 | 📤 发现服务则 stdout 打印 `HOST={host} PORT={port} PID={pid or 'unknown'}`;未发现则 stderr 提示 `reme not started. Try: reme start` 并 `sys.exit(1)` | 🛠️ 流程:先探 `REME_DEFAULT_HOST:REME_DEFAULT_PORT`(`health_check` 命中算 `reme`),再 `pgrep -af "reme.* start"` 扫描其他端口 | -| 🛰️ 客户端 | 📜 `list` | `components/client/base_client.py:36` | 📥 无 | 📤 服务端可用 action 目录(JSON,`indent=2 ensure_ascii=False`)| 🛠️ 在 `BaseClient.__call__` 中拦截,不进入 `_execute`,直接调用 `list_actions()`(HTTP/MCP backend 各自实现) | -| 🌐 通用 step | 🆘 `help` (`help_step`) | `call_server("help")` | 📥 无 | 📤 `answer` 一行一个 job:`🛠️ \`{name}\` — {description} 📥 {params}`,参数渲染为 `name:type*`(必填) / `name:type={default}` / `name:type` | 📊 `metadata.job_count` | 🛠️ 自动跳过名为 `help` 的 job | -| 🌐 通用 step | 🩺 `health_check` (`health_check_step`) | `call_server("health_check")` | 📥 无 | 📤 `answer = "✅/❌ ReMe v{version} - healthy/unhealthy"` | 📊 `metadata.health = {version, healthy, components}` | 🧩 覆盖组件:`embedding_model`(🟢 is_started/is_healthy/model_name/dimensions/cache_size/memory) · `file_graph`(🕸️ n_nodes/n_edges/n_virtual\|n_pending/memory) · `file_store`(📦 n_chunks/n_chunks_with_embedding/memory) · `file_watcher`(👀 background_running/watch_paths) · `keyword_index`(🔤 n_docs/vocab_size/memory) | 🛠️ deep sizeof(含 numpy.nbytes),未启动 / 后台未跑 / embedding 不健康 → ❌ | -| 🌐 通用 step | 🏷️ `version` (`version_step`) | `call_server("version")` | 📥 无 | 📤 `answer = reme4.__version__` | 📊 `metadata.version` | -| 🌐 通用 step | 🔄 `reindex` (`reindex_step`) | `call_server("reindex")` | 📥 无 | 📤 `answer = "🔄 Reindexed {added} file(s)"` | 📊 `metadata.counts = {added, ...}` | 🛠️ 流程:`file_watcher.close()` → `file_store.clear()` → `file_watcher.update_store()` → `file_watcher.start()`(finally 保证重启) | -| 🔎 search | 🔍 `search` (`search_step`) | `call_server("search", query=…, …)` | 📥 `query:str` ⭐ | 🎚️ `limit:int=5`(>0) | 🎚️ `min_score:float=0.0` | ⚖️ `vector_weight:float=0.7` ∈[0,1](keyword 权 = 1-vw)| 🔀 `candidate_multiplier:float=3.0`(candidates = min(200, limit×mult))| 🔗 `expand_links:bool=True` | 🔢 `max_links_per_direction:int=10` | 🎚️ `search_filter:dict={}` | 📤 `answer` 每命中一行 `path:start-end [score=… vector=… keyword=…] text` + 缩进的 `→ outlinks (n)` / `← inlinks (n)` + `via predicate=… anchor=#…` | 📊 `metadata.results` / `metadata.link_expansion` / `metadata.counts={vector,keyword,returned,hybrid}` | 🛠️ 并行 `vector_search` + `keyword_search` → RRF 融合(K=60,按 chunk.id 合并)→ `min_score` 过滤 → `limit` 截断 → 邻居 meta 注入 | -| 🧪 demo | 🪄 `demo_echo` (`demo_echo_step1` + `step2`) | `call_server("demo_echo", query=…, min_score=…)` | 📥 `query:str=""` | 🎚️ `min_score:float=0.5` | 🛠️ step1:`processed_query = query.strip().lower()`,`adjusted_min_score = min_score * 0.9`,写回 context | 📤 step2:`answer = "echo: {processed_query} (min_score={adjusted_min_score})"` | 📊 `metadata = {step, query, min_score, processed_query, adjusted_min_score}` | -| 🌊 demo | 🌊 `stream_demo` (`stream_demo_step1` + `step2`) | `call_server("stream_demo", query=…, repeat=…, interval=…)` | 📥 `query:str=""` | 🎚️ `repeat:int=10` | 🎚️ `interval:float=0.1`(秒/字符)| 🛠️ step1:`stream_text = query * repeat` 写回 context | 📤 step2:按字符 `add_stream_string(ch, ChunkEnum.CONTENT)` 流式输出,`asyncio.sleep(interval)` 节流 | -| 📂 crud | 📖 `read` (`read_step`) | `call_server("read", path=…, …)` | 📥 `path:str` ⭐(**完整相对路径**,相对于 vault;绝对路径会被拒绝;非 `.md` 后缀拒绝)| 🎚️ `start_line:int=null`(1-based, 含端点)| 🎚️ `end_line:int=null`(1-based, 含端点)| 🎚️ `max_bytes:int=51200`(截断阈值)| 📤 `answer = 选中的行内容`,超过 `max_bytes` 时附加 `--- TRUNCATED ---` 续读指引(`start_line=…`)| 📊 `metadata.path` / `metadata.total_lines`(出错路径才会附带)| 🛠️ 流程:`BaseStep.resolve_path(raw, require_md=True)` → `aiofiles.os.stat` → `read_file_safe`(utf-8-sig BOM 容忍、UnicodeDecodeError fallback `errors=ignore`)→ `split("\n")` 切片 `[s-1:e]` → `truncate_text_output` 按字节截断保行 | - -使用示例: - -```bash -# 启动(默认 default.yaml) -reme4 start - -# 指定 config 与服务端口 -reme4 start config=paw.yaml service.port=8181 - -# 查找在跑的 reme -reme4 find_reme -# HOST=127.0.0.1 PORT=8000 PID=12345 - -# 列出所有可用 action(client 端处理,不转服务端) -reme4 list - -# 转发到服务端的 step:所有 key=value 透传为 step kwargs -reme4 help -reme4 health_check -reme4 version -reme4 reindex -reme4 search query="latency 问题" limit=10 min_score=0.2 vector_weight=0.6 - -# 读取 vault 下的 markdown(完整相对路径;无后缀自动补 .md;可按行切片或限制字节) -reme4 read path=Templates/Recipe.md -reme4 read path=Notes start_line=1 end_line=20 -reme4 read path=Big.md max_bytes=4096 - -# 通过 MCP backend 调用 -reme4 search query="..." backend=mcp -``` - -@sen -| file | upload/download/move/delete/stat/list | 文件操作CRUD | -| property | read/update/delete | frontmatter CRUD | | -| graph | traverse/retarget | path="My Note" directtion=forward/backward depth=1 predicat=xxx | - -@wangce -| crud | write | path="New Note" name="xxx" description="xxx" metadata={}, content="# Hello" (4 字段都必填,frontmatter 只写 name/description) | -| crud | read | path="Templates/Recipe.md" | -| crud | edit | path="Templates/Recipe.md" old="xxx" new="xxx" | -| crud | append | path="My Note" content="New line" | - -| crud | delete | path="My Note -| daily_crud | daily_xxx | 与 crud 参数保持一致 | - -- daily_resolve name=xxxx (符合一定规范 win下要求) -- daily_list date=xxxx 返回path -- daily_index - -frontmatter read path -frontmatter update path metadata={} -frontmatter delete path keys=[] - -delete path -download path=xxx(内部相对路径)download_path=(外部绝对路径,可选) -upload path=xxx(外部绝对路径)description="xxx" metadata=xxx 返回内部相对路径 加metadata -stat path -list path -mv path=xxx new_path=xxx - -traverse path=xxx direction=xxx depth=xxx - -# 日记类型 - -| 类型 | 路径 | 说明 | -|-----------|-----------------------------------------------|-----------------------------| -| daily | {daily}/xxxx-mm-dd.md + xxxx-mm-dd/{event}.md | 按日期归档的原始信息记录 | -| topic | topic/{topic:-personal(agent)}/{xxxx}.md | 按主题聚类的二次加工内容 | -| proactive | todo | 基于 daily / topic 思考后主动推送的消息 | - -# 生成Job - -| 任务 | 输入 | 输出 | 触发时机 | 说明 | -|-------------------------|---------------|-----------------------------------------------|-----------------------------|------------------------------------------------------| -| 日记summary @sen @wangce | msg | {daily}/xxxx-mm-dd.md + xxxx-mm-dd/{event}.md | freq (every_n_turn、compact) | 把 msg 的信息写入 daily 目录 | -| 主题dream + 生成链接 @sen | daily/xxx | knowledge/xxx | /dream | 把 daily 目录的内容按主题聚类合并到 topic 目录, 主动在文档中建立 [[link]] 关联 | -| 主动proactive @wangce | daily / topic | proactive_query | pre_query | 思考 daily / topic 信息,主动决定推送给用户的消息 | - -2. file_chunker - a. 抽象基类 parse: @jinli - ⅰ. 输入是path:相对路径 - ⅱ. 输出是FileMetadata & list[FileChunks] & list[FileEdge] - b. default parser 兼容老方案 @jinli - ⅰ. 带overlap的chunking策略 ,不输出FileEdge - c. markdown parser @sen - ⅰ. 根据markdown ast做chunk,不需要overlap - ⅱ. 增加一个索引的chunk chunk_type @锦鲤 file_chunk_type content/index - ⅲ. 增加link的正则解析:predicate:: [[path#anchor]] -3. file_store @sen - a. 抽象存储: - ⅰ. filenode = file + path + st_mtime + metadata + list[FileEdge] - ⅱ. graph=dict[str, filenode] 内存+json - ⅲ. list[FileChunk] 存db - b. 抽象基类 - ⅰ. graph:fellow dict的操作 update/get/set - ⅱ. chunks dict[str, list[chunk]] - 1. delete_chunks_by_path - 2. update_chunks_by_path - 3. list_chunks_by_path - 4. vector_search/keyword_search - ⅲ. 手写一个bm25检索 - ⅳ. 【核心】检索机制 vector bm25 graph 如何进行融合 -4. file_watcher @jinli - a. 抽象基类 - ⅰ. on_start: - 1. file_store 的start 在前,加载graph,file_watcher在后,递归扫描目录 - a. 通过ms_time对比graph,on_change 进行改动 - ⅱ. on_change: - 1. 更新/增加: - a. delete_chunks_by_path 更新数据库 - b. upate_chunks_by_path 更新数据库 - c. 更新graph - 2. 删除 - a. delete_chunks_by_path 更新数据库 - -MemorySchema - -1. markdown文件结构 @sen - a. formatter: - ⅰ. name - ⅱ. desc -2. memory文件结构目录 - a. MEMORY.md - b. msg/files -> daily/YYYYMMDD/YYYYMMDD.md + xxxx.md - ⅰ. YYYYMMDD.md - 1. xxx -> xxxx.md - 2. xxx -> xxxd.md - ⅱ. - c. daily -> topic/topic_l1/topic_l1.md + xxx.md + topic_l2 - d. proactive - -steps: - -1. 治理(算法+LLM): - a. 节点关联P0:现有的链接做补充,挖掘新的LLM的link - ⅰ. /Users/yuli/workspace/ReMe/reme2/component/edge_extractor/llm_edge_extractor.py - ⅱ. 移动到steps - b. 节点整合/节点拆分/节点归档 - c. 健康度检查 -2. retrieve 调用store的检索 -3. 原子steps:reme edit -4. 组合steps:总结: - a. - freq (every_n_turn、compact) -> daily_summarizer - b. topic (/dream ) -> topic_summarizer(daily_xx -> topic_xx) - c. proactive -> proactive_summarizer(personal_xxx -> proactive_query - pre_query diff --git a/docs4/old/structure.md b/docs4/old/structure.md deleted file mode 100644 index 8cdb0443..00000000 --- a/docs4/old/structure.md +++ /dev/null @@ -1,782 +0,0 @@ -# reme4 系统架构 — 设计文档 - -## 文档定位 - -本文档定义 reme4 的**架构设计**:概念边界、数据流契约、职责划分。 - -- 不涉及代码路径 / 实现进度 / API 具体形态 -- **执行栈与架构角色**(分层、模块切分、职责划分)在第 6-7 节;源码映射与落地状态见 `docs4/reme4_report.md` 与源码 -- 不规定怎么做,只规定**是什么、谁负责、输入输出** - -> 阅读顺序:**第 1 节**给出完整的架构总览(数据视角 + 运行时视角 + 核心机制 + 不变量 + 导航);**第 2-5 节**逐层展开三层存储 / 6 类 L4 动作语义 / 反向回流 / 触发节奏;**第 6 节**描述底层执行栈(L0→L5);**第 7 节**把 6 类 Action 落到 L4 实现模块;**第 8 节**讲跨切面 schema 契约;**第 9 节**列出明确不属于本架构的反例。 - ---- - -## 1. 架构总览 - -本章给出 reme4 完整的设计骨架,后续 §2-§9 逐项展开细节。 - -### 1.1 解决什么问题 - -reme4 是 agent 的**长期记忆系统**。它把 agent 的工作过程沉淀为可检索、可演化的知识结构。 - -设计要解耦两件事: - -| 关注点 | 由谁负责 | -|---|---| -| **agent 写什么 / 读什么** | agent 的工作流自决 | -| **vault 自身如何健康演化** | reme 自治,agent 不感知 | - -实现方式:三层存储拓扑为"两路并行写入(原始资料 / 任务过程) → 双源合流到沉淀知识层",reme 提供这三层的容器、动作语义、反向检索与自治维护。 - -### 1.2 数据视角:并行起点 + 双源合流 + 反向回流 - -数据有**两个并行起点** —— **External source**(webhook/upload/pull)与 **Agent**(外部主体,自身任务驱动)。两条独立通道各自落地到**并行的材料层**:External 经 `ingest` 沉到 `resource/`,Agent 经 `sync` 写到 `daily/`。两层材料**合流**到 `digest/`,由 reme 通过 `digest` 动作完成"消化"。`digest/` 自身由 `maintain` 做 in-place 重组。Agent 通过 `retrieve` 从 resource + daily + digest **三层并行**回流。`notify` 是 reme 跨过 vault 直接提醒 Agent 的**虚边**(控制信号,不写任何文件)。每段路径都对应一个 L4 动作语义(完整动作详见 §5.2 / §7): - -| 路径 | L4 动作 | 说明 | -|---|---|---| -| External source → resource | **ingest** | 外部信源落到 vault | -| External source ╌╌► Agent | **notify** | reme 推送通知(虚边,只走 L2 推送队列,不写文件) | -| Agent → daily | **sync** | Agent 写 daily(响应 notify 或自身任务驱动) | -| resource + daily → digest | **digest** | reme 内部 LLM 抽取沉淀(双源合流) | -| digest → digest | **maintain** | reme 内部 LLM 折叠重组(in-place, fold-only) | -| resource + daily + digest → Agent | **retrieve** | 三层并行回流(state / semantic / topological 三种正交问法) | - -``` - notify(虚边,控制信号) -External source ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌► AGENT -(webhook/upload/pull) (外部主体/自身任务) - │ │ ▲ - │ ingest │ │ retrieve - │ ┌────── sync ────────────────────-┘ │ (state / - ▼ ▼ │ semantic / - ┌──────────┐ ┌──────────┐ │ topological) - │resource/ │ │ daily/ │ │ - │ 原始资料 │ │任务工作区 │───────── retrieve ─────────────┤ - │ 不可变 │ │ 半可变 │ │ - └───┬──┬───┘ └────┬─────┘ │ - │ │ │ │ - │ │ digest digest │ │ - │ └────────┐ ┌────┘ │ - │ ▼ ▼ │ - │ ┌────────────────────┐ │ - │ │ digest/ │ ◄──╮ │ - │ │ 沉淀知识 │ │ maintain │ - │ │ 可重组(语义索引) │ ───╯ (in-place, fold-only) │ - │ └──────────┬─────────┘ │ - │ │ retrieve │ - │ └─────────────────────────────────────-─┤ - │ │ - │ retrieve │ - └──────────────────────────────────────────────────────────┘ -``` - -**模型要点**: - -- **两个起点平行,不存在主从** —— External 与 Agent 各自独立驱动;Agent 既可响应 `notify` 也可由自身任务直接 `sync`。 -- **两层材料平行,不存在传递** —— resource 与 daily 是**两条独立的写入通道**,不互相穿越:Agent 不写 resource,ingester 不写 daily。 -- **digest 是双源合流的产物** —— `digest` 动作的输入是 resource + daily 的组合(不是仅 daily);相应地,digest 节点的 provenance 可同时指向 resource 与 daily。 -- **digest 自循环** —— `maintain` 在 digest 内部做密度折叠,不与上游材料层交互。 -- **notify 是虚边** —— reme 用它提醒 Agent "有新 resource 值得看",但不落任何文件;Agent 的响应通过 `sync` 落 daily(并可选地用 wikilink 引 resource)。 - -retrieve 三种问法正交: - -| 问法 | 工具 | 主要看哪层 | -|---|---|---| -| **state**(谁在 / 是什么状态) | `list` / `frontmatter` | 各层平等 | -| **semantic**(我想到一个意思) | `search` | digest > daily > resource(默认权重) | -| **topological**(从一个点向外摸) | `traverse` | 沿 wikilink 跨层平等 | - -### 1.3 运行时视角:六层执行栈 + 双进程 - -reme4 的功能不是堆在一层,而是从文件系统底层往上栈式堆叠。顶层 Service 与 Runtime 是同一套 vault 上的两个进程角色,共享 L0-L4 全栈(详见 §5.3 / §6)。 - -``` - ┌─────────────────────┐ ┌─────────────────────┐ - │ L5 Service │ │ L5 Runtime │ - │ (HTTP / MCP) │ │ (scheduler 自治) │ - └──────────┬───────────┘ └──────────┬──────────┘ - │ │ - └─────────────┬────────────────┘ - ▼ - ┌──────────────────────────────────────────────────┐ - │ L4 6 类 Action(动作语义) │ - │ ingest notify sync retrieve digest maintain│ - └──────────────────────┬───────────────────────────┘ - ▼ - ┌──────────────────────────────────────────────────┐ - │ L3 原子工具 │ - │ ┌─────────────────────┐ ┌──────────────────┐ │ - │ │ 基础工具 │ │ 高级工具 │ │ - │ │ create/append/edit/ │ │ search │ │ - │ │ read/write/move/ │ │ traverse │ │ - │ │ delete/list/stat │ │ frontmatter │ │ - │ └──────────┬──────────┘ └────────┬─────────┘ │ - └─────────────│──────────────────────│─────────────┘ - │ 直读 / 直写 │ 走索引读 - │ (eventual,有滞后) │ - │ ▼ - │ ┌────────────────────────────┐ - │ │ L2 文件状态 │ - │ │ · file_store(chunk+vec) │ - │ │ · file_graph(node+link) │ - │ │ · 自治状态(scheduler 用): │ - │ │ - resource: 入流批次/ │ - │ │ 未消化(orphan) │ - │ │ - daily: 任务索引 │ - │ │ (进行中/stale/完成) │ - │ │ - digest: 密度水位/ │ - │ │ 断链(broken wikilink) │ - │ │ · 推送队列(notify): │ - │ │ pending/notified/ │ - │ │ acknowledged │ - │ └─────────────▲──────────────┘ - │ │ 派生 / 更新 - │ ┌─────────────┴──────────────┐ - │ │ L1 file_watcher │ - │ │ fs event → state delta │ - │ │ (唯一 fs→state 桥) │ - │ └─────────────▲──────────────┘ - │ │ 监听 - ▼ │ - ┌──────────────────────────────────────────────────┐ - │ L0 vault 文件系统 │ - │ resource/ daily/ digest/ │ - └──────────────────────────────────────────────────┘ -``` - -Service 与 Runtime 是同一份 vault 上的两个进程角色: - -| 进程 | 触发源 | 时延敏感 | 典型动作 | -|---|---|---|---| -| **Service** | 外部 push / 外部 pull / agent 同步请求 / **MCP 推送通道** | 是 | ingest / sync / retrieve / **notify-out(MCP)** | -| **Runtime** | scheduler 周期 + L2 自治状态阈值 | 否(eventual) | **notify 决策** / digest / maintain | - -### 1.4 核心机制总览 - -| 机制 | 一句话 | 详见 | -|---|---|---| -| 三层存储 | resource(冷) / daily(温) / digest(冷,组织化) | §2 | -| 6 类 L4 动作 | ingest / notify / sync / retrieve / digest / maintain | §1.2 / §3 | -| notify+sync 链 | reme 主动从 L2 资源自治状态选候选,经 MCP 推给 agent;agent sync 落 daily | §3.3-3.4 / §7.1 | -| 反向 retrieval | state / semantic / topological 三种正交问法 | §4 | -| 触发四源 | 外部 push / 外部 pull / agent on-demand / reme 后台 | §5.1-§5.2 | -| Service + Runtime | 双进程角色,共享 L0-L4,职责按时延分 | §5.3 | -| 执行栈(L0-L5) | filesystem → file_watcher → 文件状态 → 原子工具 → Action → Service/Runtime | §6 | -| 原子工具:基础 vs 高级 | 基础直 fs;高级走 L2 索引(eventual) | §6.4 / §5.5 | -| Action 模块映射 | 6 类 Action 由 5 个模块实现(retrieve 直走原子工具) | §7 | -| Schema 跨切面 | name+description 是核心强约束,其余 opinionated default 可重载 | §8 | - -### 1.5 核心不变量速览 - -写入拓扑(架构脊梁,来自 §2.3):两路并行写入(External→resource、Agent→daily)→ 双源合流到 digest;resource 与 daily 之间互不写入;任何一层都不能反向改写它的上游。 - -| 不变量 | 内容 | 来源 | -|---|---|---| -| **I-1** | agent 不直接写 digest(digest 写权只属 dreamer / maintainer) | §2.4 | -| **I-2** | daily folder 单作者(同 folder 不并发改) | §2.4 | -| **I-3** | resource 内容不可变,只允许 metadata appendable | §2.4 | -| **I-4** | 三层共用同一套 wikilink 索引,跨层引用全靠 wikilink | §2.4 | -| **R-1** | retrieve 三种问法分立,不合并为单一 read verb | §4.3 | -| **M-1** | Maintainer 只做一件事:密度折叠(把碎片叶子折叠到新的中间节点下) | §7.3 | -| **F-1** | L1 `file_watcher` 是 L0→L2 的唯一派生桥 | §6.5 | -| **F-2** | L3 基础工具直接读写 L0;高级工具只走 L2 | §6.5 | -| **F-5** | L5 Service / Runtime 共享 L0-L4,不直接通信 | §6.5 | -| **F-6** | L0↔L2 存在 eventual 窗口,agent 上下文承担近期信息 | §5.5 / §6.5 | - -### 1.6 文档导航 - -| 想了解… | 看 | -|---|---| -| 三层各自的定位、不变量 | §2 | -| 6 类 L4 动作语义(notify / sync / digest / maintain 的输入产出不变量) | §3 | -| Retrieval 的三种问法与跨层语义 | §4 | -| 谁来触发、什么节奏、为什么分两个进程 | §5 | -| 系统从文件系统到 Service 的分层(底层基础) | §6 | -| L4 五个模块的对称结构与 Maintainer 折叠设计 | §7 | -| Schema 协议与重载机制 | §8 | -| 哪些设计不属于本架构(反例与边界) | §9 | -| 术语回查 | 附录 | - ---- - -## 2. 三层存储 - -### 2.1 一句话定位 - -| 层 | 一句话 | -|---|---| -| **resource/** | 外部原始资料的**不可变快照**。reme 是容器,不是作者。 | -| **daily/** | agent 的**任务工作区**。folder 是单位,以"日 + 任务"为索引。 | -| **digest/** | 跨任务沉淀的**有组织知识**。以语义(概念/实体/方法)为索引,与时间无关。 | - -### 2.2 五维度对照 - -| 维度 | resource/ | daily/ | digest/ | -|---|---|---|---| -| **组织主轴** | 时间(`/`) | 时间 + 任务(`//`) | 语义(`//...`,任意嵌套) | -| **写权归属** | 入流通道唯一(webhook / upload / pull) | agent(写入任务过程) | dreamer / maintainer(无 agent 直写) | -| **可变性** | 不可变,只追加新文件 | folder 内可反复更新 | 单节点可演化,可被合并/拆分/移动 | -| **不变量** | 写入即冻结,原文永不变 | folder 名 = summary note 名(可移动单元);同 slug 同日只一份 | slug 全局唯一;每 folder 有 canonical entry;wikilink 全路径 | -| **谁在用** | agent(查原文)、dreamer(双源输入之一) | agent(自己的工作记录)、dreamer(双源输入之一) | agent(召回主目标)、maintainer(自维护对象) | - -### 2.3 写入纪律:并行写入 + 双源合流 - -``` - External source Agent - │ │ - │ ingest │ sync - ▼ ▼ - ┌──────────┐ ┌──────────┐ - │resource/ │ │ daily/ │ - │ 不可变 │ │ 半可变 │ - │(ingester)│ │ (agent) │ - └─────┬────┘ └─────┬────┘ - │ │ - │ digest digest │ - └──────────────┐ ┌─────────────┘ - ▼ ▼ - ┌──────────────┐ ◄──╮ - │ digest/ │ │ maintain - │ 可重组 │ ────╯ (in-place, - │ (dreamer + │ fold-only) - │ maintainer) │ - └──────────────┘ -``` - -写权按这个**两层并行 → 单层合流**的拓扑分配:resource 写权专属 ingester(外部入流通道),daily 写权专属 agent(sync 落入,可响应 notify 或自身任务驱动),digest 写权专属 dreamer + maintainer。**resource 与 daily 之间互不写入**(agent 不动 resource,ingester 不动 daily);任何一层都不能反向改写它的上游。这是整个架构的脊梁。 - -### 2.4 不变量(永远成立) - -| # | 不变量 | 否则后果 | -|---|---|---| -| **I-1** | agent 不直接写 digest | digest 的"有组织"性失守,沉淀质量退化 | -| **I-2** | daily folder 单作者(同 folder 不并发改) | 任务边界模糊,sync/digest 竞态 | -| **I-3** | resource content immutable,只允许 metadata appendable | 原文可能消失/被覆写,citation 不可信 | -| **I-4** | 三层共用同一套 wikilink 索引,跨层引用全靠 wikilink | 引入第二套引用机制 → 索引重建复杂 / 跨层关系不可达 | - ---- - -## 3. L4 动作语义详解 - -§1.2 给出了 6 个 L4 动作在数据视角下的整体形态。本节按动作逐个展开输入 / 产出 / 不变量 / 反例。`ingest`(外部→resource,机械)和 `retrieve`(三层并行回流,只读)分别在 §5/§7.4 与 §4 详述,本节聚焦四个**写动作**:`notify` / `sync` / `digest` / `maintain`。 - -### 3.1 统一原则 - -四个写动作都遵守: - -| 原则 | 内容 | -|---|---| -| **Monotonic content** | 上游内容不可变,下游只能新建节点或加链接,不能改写上游 | -| **Provenance 必须可达** | 任何下游节点必须能通过 wikilink 反查到上游来源 | -| **Wikilink 是新结构的唯一载体** | 跨层关系靠 wikilink,不靠内容拷贝 | - -它们都不是"数据搬家",而是"在下游新生成有引用关系的节点"。 - -### 3.2 四个写动作的本质对照 - -| 动作 | 上游 → 下游 | 性质 | 上游变化 | 下游变化 | -|---|---|---|---|---| -| **notify** | resource → Agent | **Attention**(推送注意力) | 不变 | 不写 vault;仅入 L2 推送队列 | -| **sync** | Agent → daily | **Reference**(引用落地) | 不变 | daily 中新增工作记录 + 对 resource 的 wikilink | -| **digest** | resource + daily → digest | **Crystallize**(双源合流结晶) | 不变 | digest 新增节点,wikilink 反指上游来源(daily 与/或 resource) | -| **maintain** | digest → digest | **Reorganize**(重组) | 结构变,内容守恒 | fold-only:引入子中间节点搬叶子,改变拓扑 | - -> `notify` 与 `sync` 共同实现"resource 中的候选被 Agent 看见并织入 daily"这条**Reference 链**;它们是两个独立的 L4 动作,主体不同(notify 由 Reme 自治触发,sync 由 Agent 触发)。 - -### 3.3 notify:reme → Agent 推送候选 - -| 维度 | 内容 | -|---|---| -| 主体 | Reme Runtime(`notifier` 模块) | -| 输入 | L2 资源自治状态:orphan(无 inbound wikilink)/ 入流批次 / 未消化老于 N | -| 产出 | L2 推送队列条目;通过 Service MCP **server-initiated notification** 推到 Agent;**不写任何 vault 文件** | -| 不变量 | resource 原文 0 修改;**完全单向**,不维护任何反向元数据;`notify` 决策在 Runtime,Service 只作 MCP transport | -| Acknowledge 机制 | L1 watcher 检测到 daily→resource 新 wikilink → L2 推送状态 `notified` → `acknowledged`,避免重复推送 | -| 反例 | (a) Service 自决推什么 notify(✗-17);(b) notify 写入 vault(✗-16);(c) Agent 主动调 notify(✗-18) | - -### 3.4 sync:Agent → daily 落地 - -| 维度 | 内容 | -|---|---| -| 主体 | Agent(`synchronizer` 模块在 Service 内编排) | -| 输入 | Agent 当前事件流(响应 `notify` 的候选,**或**自身任务直接驱动) | -| 产出 | daily folder 内的工作叙事;可选地用全路径 wikilink 引 resource(agent 自决,reme 不强制) | -| 不变量 | resource 原文 0 修改;daily 单作者(I-2);folder 名 = summary note 名(可移动单元) | -| Provenance | daily → resource 可达(通过 daily body 中的 wikilink) | -| 反例 | "agent 把 resource 内容拷进 daily" —— 不允许,daily 只持有引用 + 自己的工作记录 | - -### 3.5 digest:resource + daily → digest 双源合流结晶 - -| 维度 | 内容 | -|---|---| -| 主体 | Reme Runtime(`dreamer` 模块,LLM-driven) | -| 输入 | 一组待蒸馏的 daily folder + 相关 resource(双源合流;通常以 daily 任务为线索,顺着 wikilink / 同主题搜索拉入相关 resource 原文) | -| 产出 | digest 中 0~N 个新节点 或 已有节点的更新;新节点必须用 wikilink 反指至少一个上游来源 | -| 不变量 | resource / daily 正文 0 修改;digest 新节点必须 wikilink 反指上游(provenance);digest 节点遵守第 2.4 节列的不变量 | -| Provenance | digest → daily / resource 双源链条可达(资料源是 resource 时直接反指,任务过程是 daily 时反指 daily 进而可达 resource) | -| 反例 | dreamer 改写 resource;dreamer 改写 daily 正文 | - -### 3.6 maintain:digest → digest 折叠 - -| 维度 | 内容 | -|---|---| -| 主体 | Reme Runtime(`maintainer` 模块,LLM-driven,**fold-only**) | -| 输入 | digest/ 当前整体状态 | -| 产出 | 同一 digest/ 树的**密度折叠**(fold):某中间节点下叶子过多时,引入子中间节点把相关叶子归簇 + 写"高密度摘要" | -| 不变量 | 树**只向下生长**(从不反向);叶子内容 0 修改,只被搬位置;新中间节点 = 一个高密度摘要文件;任何节点移动**原子重写所有入边**(retarget);slug 全局唯一在折叠后仍成立 | -| Provenance | digest → daily 的反指链接在折叠后仍有效(retarget 保证) | -| 反例 | merge / move / promote / demote 等改写既有拓扑的操作;改写既有叶子内容 | - -> 折叠操作的承诺与决策点见 §7.3。 - -### 3.7 链接重定向例外 - -`maintain` 的 retarget 会改写其它节点中指向被移动节点的 wikilink。从字面看,这违反了"上游内容不可变"。 - -实际上这是 wikilink 系统的**机械性副作用**,不算下游写上游: - -| 字面 | 实质 | -|---|---| -| daily 里的 `[[digest/old.md]]` 被改成 `[[digest/new.md]]` | 作者意图("我引用了 X 这个 digest 节点")没变,只是 X 的物理位置变了 | - -只要 retarget 保持 wikilink 的**目标语义不变**,就允许它作为机械维护副作用穿越层界。这是这条规则的唯一例外。 - ---- - -## 4. Retrieval 反向回流 - -Retrieval 是把 §3 几条正向写动作反着读:agent 站在结果端,沿 wikilink 反查源头。 - -### 4.1 三种问法 - -按 agent 意图分,有三类完全不同的读需求,**正交**,各自独立: - -| 问法 | 例子 | 本质 | -|---|---|---| -| **状态问** (State) | "我有哪些 in-progress 的任务?""哪些 resource 还没被引用?" | 在某层做 list + frontmatter 过滤 | -| **语义问** (Semantic) | "关于 auth 重构我知道什么?" | 跨层全文/向量检索 | -| **拓扑问** (Topological) | "auth 概念周围都连了什么?" | 从某节点沿 wikilink 走 | - -### 4.2 三层 × 三问法 矩阵 - -| 问法 | resource/ | daily/ | digest/ | -|---|---|---|---| -| **状态问** | "未处理 resource 清单" | "active / pending-digest 清单" | "孤儿节点 / canonical 缺失 清单"(给 maintain 用) | -| **语义问** | 兜底(原文,信噪比低) | 次优(最新,但未沉淀) | **首选**(沉淀过,信噪比高) | -| **拓扑问** | 通常是叶子(被指向) | daily → resource / digest | digest 内部连接最密 | - -### 4.3 设计原则 - -| # | 原则 | 含义 | -|---|---|---| -| **R-1** | 三种问法分立,不合并为单一 "read" verb | 不同问法的索引、过滤、排序逻辑完全不同 | -| **R-2** | 语义问的默认权重 `digest > daily > resource`,**可被显式覆盖** | 默认体现"沉淀质量",但 agent 可指定单层或调权 | -| **R-3** | 拓扑问与层无关 | traverse 沿 wikilink 走,天然跨三层(I-4) | -| **R-4** | Provenance expansion 默认 lazy,eager 是上层便利封装 | 原子 retrieval 不自动展开;agent 需要时再 traverse | -| **R-5** | Cold start 不是新的 retrieval mode | 只是状态问 + 语义问的组合,reme 不为它单设 verb | - -### 4.4 在主干图里的位置 - -Retrieval 不引入新存储,不引入新层。它是 **agent 与三层存储之间的读视图**,通过三种正交问法暴露,共享同一套 wikilink 索引(I-4)。 - ---- - -## 5. 节奏与触发 - -锁定"谁推动每个动作发生"。这一步定 reme 是纯被动 service 还是带后台 runtime。 - -### 5.1 触发源四分类 - -| 触发源 | 性质 | 例子 | -|---|---|---| -| **External push** | 外部事件主动推 | webhook / 用户 upload | -| **External pull** | reme 主动去外部拉 | scheduled fetcher(RSS / 邮件 / API 轮询) | -| **Agent on-demand** | agent 在请求里显式调用 | "sync 我的对话" / "搜 X" | -| **Reme background** | reme 自己的 watcher / scheduler | file_watcher / cron-like | - -### 5.2 六个动作的触发归属 - -| 动作 | 主触发 | 备用触发 | 备注 | -|---|---|---|---| -| **ingest** | External push / pull | — | 外部→resource,机械 | -| **notify** | **Reme background**(cron + L2 资源自治状态阈值) | — | Runtime 决策,Service MCP 推送 | -| **sync** | Agent on-demand | — | agent→daily;notify 的响应也走这里 | -| **digest** | **Reme background** | Agent 显式(后门) | resource + daily 双源合流到 digest | -| **maintain** | **Reme background**(cron + threshold) | Agent / 人工 显式(后门) | digest 内部折叠 | -| **retrieve** | Agent on-demand | — | 三层只读 | - -**关键定性**:`notify` / `digest` / `maintain` 三个 reme 自治动作的主控制权**在 reme,不在 agent**。Agent 只负责"响应 notify + 写 daily(响应或自身任务驱动)+ 主动读";不需要记得"该看哪些 resource""该蒸了""该整理了"。 - -### 5.3 Service + Runtime 双进程结构 - -把 5.2 的归属直接推出 reme 的基本架构。两进程共享 L0-L4 全栈,只在 L5(进程入口)分叉: - -``` -┌──────────────────────────────────────────────────────────┐ -│ Reme System │ -│ │ -│ ┌────────────────────┐ ┌────────────────────────┐ │ -│ │ L5 Service │ │ L5 Runtime │ │ -│ │ (HTTP / MCP) │ │ (scheduler 自治) │ │ -│ │ 服务 agent 请求: │ │ 服务 vault 健康: │ │ -│ │ · ingest │ │ · notify(决策) │ │ -│ │ · sync │ │ · digest │ │ -│ │ · retrieve │ │ · maintain │ │ -│ │ · notify(MCP 推送)│ │ │ │ -│ └─────────┬──────────┘ └───────────┬────────────┘ │ -│ │ │ │ -│ └──────────────┬───────────────┘ │ -│ ▼ │ -│ ┌──────────────────────────────────────────────────┐ │ -│ │ L4 Action / L3 原子工具 │ │ -│ │ Action 编排 → 基础工具 + 高级工具 │ │ -│ └──────────────────────┬───────────────────────────┘ │ -│ ▼ │ -│ ┌──────────────────────────────────────────────────┐ │ -│ │ L2 文件状态(file_store + file_graph + 自治) │ │ -│ └──────────────────────▲───────────────────────────┘ │ -│ │ 派生 │ -│ ┌──────────────────────┴───────────────────────────┐ │ -│ │ L1 file_watcher(fs → state 的唯一桥) │ │ -│ └──────────────────────▲───────────────────────────┘ │ -│ │ 监听 │ -│ ┌──────────────────────┴───────────────────────────┐ │ -│ │ L0 vault filesystem │ │ -│ │ resource/ daily/ digest/ │ │ -│ └──────────────────────────────────────────────────┘ │ -└──────────────────────────────────────────────────────────┘ -``` - -两进程职责正交、共享 L0-L4 基础设施(详见 §6): - -| 维度 | L5 Service | L5 Runtime | -|---|---|---| -| 触发方式 | 请求-响应 + MCP server-initiated 推送 | 周期 + L2 自治状态阈值 | -| 服务对象 | agent | vault 自身 | -| 暴露给 agent | 是 | 否(agent 不感知) | -| 主要动作 | ingest / sync / retrieve / **notify 推送通道**(MCP) | **notify 决策** / digest / maintain | -| 与对端的耦合 | 通过 L2 推送队列读 notifier 产出 | 通过 L2 推送队列写,**不直接调 Service** | - -### 5.4 节奏(latency tolerance) - -| 动作 | 节奏 | latency 容忍 | -|---|---|---| -| retrieve | request-driven | sub-second | -| ingest | event-driven | seconds | -| sync | agent on-demand | seconds | -| **notify** | reactive(L2 资源状态变化后) | seconds ~ minutes | -| digest | reactive(状态变化后) | minutes ~ hours(eventual consistency) | -| maintain | periodic | days(无紧迫) | - -实时性需求差三个数量级。这是 digest / maintain 必须放后台异步的根本原因 —— 不能阻塞 agent 的 retrieve / sync 请求。 - -### 5.5 排序约束与一致性模型 - -部分动作对**不能并发**,background runtime 内部要保证排序: - -| 约束 | 原因 | -|---|---| -| **sync(同一 daily)→ digest(同一 daily)** | digest 不能看到 sync 半成品 | -| **digest(同一 scope)→ maintain(同一 scope)** | maintain 重组的拓扑不应被 digest 中途插入 | - -ingest / retrieve 跟所有动作都可并发(纯入流 + 纯读)。 - -**一致性模型 = Eventual consistency on digest/maintain**。Agent 不能依赖"我刚写完 daily 就能查到对应 digest"。digest / maintain 都是后台异步,有可见的延迟窗口。 - -**watcher 滞后契约(L0 ↔ L2)**:基础工具直接写 L0 文件系统,L2 文件状态由 L1 file_watcher 派生,二者之间存在 eventual 窗口 —— 写完一份 daily 后,search / traverse 这类走 L2 索引的高级工具不一定立刻能看到。这是设计意图,不是 bug:agent 本身有上下文窗口,近期信息靠 agent 自带的对话上下文承接,不依赖 reme 索引立即可见。需要"写后立刻可读"的场景请用基础工具(read 直接读 fs)。 - ---- - -## 6. 执行栈:六层结构 - -L3 原子工具、L4 Action、L5 进程都不直接操作文件系统。它们坐在 L0-L2 的**底层基础**上 —— 这套基础是 reme 的"动力源",决定了为什么上层能解耦成 Service + Runtime 两进程,且两者既正交又共享状态。 - -### 6.1 概念分层(L0 → L5) - -``` -┌──────────────────────────────────────────────────────────┐ -│ L5 Service ‖ Runtime │ -│ 进程入口:Service 服务 agent;Runtime 自治维护 │ -├──────────────────────────────────────────────────────────┤ -│ L4 Action(6 类动作语义) │ -│ ingest / notify / sync / retrieve / digest / maintain │ -├──────────────────────────────────────────────────────────┤ -│ L3 原子工具 │ -│ 基础工具(直接 fs) + 高级工具(走 L2 索引) │ -├──────────────────────────────────────────────────────────┤ -│ L2 文件状态 │ -│ file_store + file_graph + 自治状态(scheduler 用) │ -├──────────────────────────────────────────────────────────┤ -│ L1 file_watcher │ -│ fs event → state delta(唯一 fs→state 桥) │ -├──────────────────────────────────────────────────────────┤ -│ L0 vault filesystem │ -│ resource/ + daily/ + digest/ │ -└──────────────────────────────────────────────────────────┘ - -数据流(主要关系): - · L3 基础工具 ──写──► L0 - · L3 基础工具 ──读──► L0(无需经 L2) - · L0 变化 ──► L1 监听到 ──派生──► L2 state delta - · L3 高级工具 ──读──► L2(走索引) - · L4 Action ──编排──► L3 工具组合 - · L5 进程 ──触发──► L4 Action -``` - -| 层 | 角色 | 关键约束 | -|---|---|---| -| L0 | vault 文件系统 | 唯一真相源;任何 L2 状态都可由 reindex 从 L0 重建 | -| L1 | `file_watcher` | **唯一**与 fs 事件直接耦合的组件;fs→state 的唯一派生桥 | -| L2 | 文件状态(`file_store` + `file_graph` + 自治状态) | 高级工具的读视图;由 L1 单向更新,L3+ 只读不写 | -| L3 | 原子工具(基础 / 高级) | 基础直读写 L0;高级只走 L2 | -| L4 | Action(6 类语义动作) | N:M 编排 L3 工具;不直接碰 L0 / L2 | -| L5 | Service / Runtime 进程 | 共享 L0-L4 全栈,**不直接通信**,只通过 L0 / L2 状态间接耦合 | - -### 6.2 L1 file_watcher:fs → state 的唯一桥 - -`file_watcher` 是 reme 唯一与 OS filesystem 事件直接耦合的组件。它把 fs 变化翻译为 L2 文件状态的 delta,承担**双重职责**: - -``` -filesystem events (create / modify / move / delete) - │ - ▼ - file_watcher ─┬─► 索引同步:写完文件,L2 file_store/file_graph 自动更新 - │ (L3 基础工具不需要显式调用"入索引") - │ - └─► 自治状态派生:维护 scheduler 用的可推导状态 - · resource: 入流批次 / 未消化(orphan) / - 推送状态(pending/notified/acknowledged) - · daily: 任务索引(进行中 / stale / 完成) - · digest: 密度水位 / 断链(broken wikilink) -``` - -**关键设计**:可派生的状态由 watcher 在外部索引中维护,**不写回 frontmatter**。L3 工具只管写内容文件,状态由 watcher 独立派生。这是 ✗-14 反例(L3 写 `status` 字段)成立的基础。 - -**Acknowledge 派生例**:`notify` 的"推送状态"由 watcher 维护 —— 当 watcher 检测到一条新 wikilink 从 daily 指向某 resource,即把该 resource 的推送状态从 `notified` 改为 `acknowledged`。notifier / Service 都不需要显式 ack。 - -### 6.3 L2 文件状态 - -| 组件 | 职责 | 由谁更新 | -|---|---|---| -| `file_store` | chunk 分块 + 向量持久化,提供 search / read API | L1 watcher 派生 | -| `file_graph` | wikilink 有向图,提供 upsert / traverse(双向)API | L1 watcher 派生 | -| **自治状态** | scheduler 自治决策的输入(入流批次 / 任务索引 / 密度水位 / 断链) | L1 watcher 派生 | -| **推送队列** | `notify` 的待推送 / 已推送 / 已确认条目 | notifier 写 pending;Service 推送后置 notified;L1 watcher 检测到 ack 后置 acknowledged | - -L2 只关心"vault 当前是什么样",**无业务语义** —— 不知道 daily / digest / 动作语义的存在。L3+ 只读 L2,不写(**例外**:notifier 写推送队列,这是 Runtime 与 Service 之间唯一的间接耦合通道,见 F-5)。 - -> **现状提示**:当前实现中 file_store / file_graph 之外的"自治状态"和"推送队列"尚不完整,这是 L1 watcher 与 notifier 待补齐的能力。完整化后 scheduler 才能从"周期扫描"切换为"事件驱动",`notify` 才能从隐式变为显式。 - -### 6.4 L3 原子工具:基础 vs 高级 - -两组工具的切分依据只有一条:**是否必须经过 L2 索引**。 - -| 组别 | 工具 | 数据通路 | 一致性 | -|---|---|---|---| -| **基础工具** | create / append / edit / read / write / move / delete / list / stat | 直接对接 L0 | 写后立即可读(同一工具) | -| **高级工具** | search / traverse / frontmatter | 必须走 L2 索引 | 受 watcher 滞后影响(eventual) | - -**写路径全部走基础工具**(L4 Action 编排基础工具完成写入)。高级工具是**只读**的索引查询入口。 - -**eventual 窗口**:基础工具写 L0 后,L2 索引由 L1 watcher 异步追平。在窗口内,高级工具看到的是滞后的视图。详见 §5.5"watcher 滞后契约"。 - -### 6.5 设计含义 - -| # | 不变量 | 推论 | -|---|---|---| -| **F-1** | L1 `file_watcher` 是 L0 → L2 的**唯一**派生桥 | 状态一致性是 L1 的事;L3 工具不要"自己更新索引" | -| **F-2** | L3 基础工具直接读写 L0;L3 高级工具只走 L2 | 写路径无需"先 reindex";读路径接受 eventual | -| **F-3** | L0 是唯一真相源 | 任何 L2 状态都可由 reindex 从 L0 重建,L2 是缓存而非数据库 | -| **F-4** | L4 Action 与 L3 工具是 N:M 编排关系 | Action 不直接碰 L0 / L2 | -| **F-5** | L5 Service 与 Runtime 共享 L0-L4 全栈,**不直接通信** | 只通过 L0 / L2 状态间接耦合;一边崩了不影响另一边的读 | -| **F-6** | L0 与 L2 之间存在 eventual 窗口 | agent 上下文承担近期信息,不依赖 L2 立即可见(详见 §5.5) | - ---- - -## 7. L4 Action 模块映射 - -第 5 节列了 6 类 Action 及其触发源,本节把这些 Action 落到 **L4 实现模块**(架构角色,不指代源码路径);触发机制(on-demand 路径与 background 路径)见 §5.3。 - -### 7.1 五个 L4 模块 - -| 模块 | 实现动作 | 触发 | LLM-driven | 单一职责 | -|---|---|---|---|---| -| **ingester** | ingest | External push / pull | × | 原样落 resource + 抽 frontmatter + 入索引 | -| **notifier** | notify | Reme background(cron + L2 资源自治状态阈值) | × | 从 L2 资源自治状态选候选 → 写 L2 推送队列;Service MCP 拿走 | -| **synchronizer** | sync | Agent on-demand | ✓ | 把当下事件织入 daily 工作叙事 | -| **dreamer** | digest | Reme background | ✓ | resource + daily 双源合流成 digest 长期条目 | -| **maintainer** | maintain | Reme background | ✓ | digest topic tree 的**密度折叠**(fold-only) | - -`retrieve` 不构成独立 L4 模块,理由见 §7.4。 - -**三个 reme 自治模块**:notifier(机械)、dreamer(LLM)、maintainer(LLM)。三者都由 scheduler 触发,都消费 L2 自治状态,但只有 notifier 是机械的 —— 候选选择不需要 LLM,LLM 决策在 agent 侧的 sync。 - -### 7.2 对称结构 - -``` - 跨表征层翻译 结构性纪律 - (LLM-driven) (机械) - - Inbound: ingester - Attention: notifier - Working: synchronizer - Sink: dreamer - Organization: maintainer (fold-only) -``` - -五类不同方向的"翻译": - -| 模块 | 翻译方向 | -|---|---| -| ingester | 外部异构格式 → vault 统一文件 | -| notifier | L2 资源自治状态 → agent 注意力(`notify` 推送) | -| synchronizer | agent 事件流 → 工作过程叙事(写 hot) | -| dreamer | 工作过程 + 原始资料 → 长期知识(双源合流,写 cold) | -| maintainer | 散乱叶子 → 有层次的 topic tree(组织 cold) | - -ingester 和 notifier 是机械(确定性阈值/流水线);其它三个是 LLM 决策模块,各自跨越一层语义鸿沟。 - -### 7.3 Maintainer:Topic Tree 密度折叠 - -`digest/` 整体视为一颗 **topic tree**:文件夹 = 中间节点,文件 = 叶子。Maintainer 唯一职责:随写入持续,某中间节点下叶子过密时,**折叠**为新的子中间节点 + 高密度摘要。 - -``` -触发前:某中间节点叶子过多 / 太碎 - digest/infra/ - ├── logging.md - ├── tracing.md - ├── metrics.md - ├── alerting.md - ├── dashboards.md - └── slo.md - -折叠后:LLM 判断聚类,引入子中间节点 + 摘要 - digest/infra/ - ├── observability/ ← 新中间节点 - │ ├── _index.md ← 新生成的高密度摘要 - │ ├── logging.md ← 内容不变,只搬位置 - │ ├── tracing.md - │ ├── metrics.md - │ ├── alerting.md - │ ├── dashboards.md - │ └── slo.md - └── ...(未被折叠的叶子原位) -``` - -**设计承诺**(在 `maintain` 通用不变量之上进一步收紧): - -| # | 承诺 | 含义 | -|---|---|---| -| **M-1** | **Fold-only**,无 merge / move / promote / demote / introduce | 树只向下生长,从不反向 | -| **M-2** | 叶子内容 0 修改,只被搬位置 | 与 `maintain` 内容守恒一致 | -| **M-3** | 新中间节点带一个高密度摘要文件,读摘要就能决定要不要深入 | 折叠后可读性不降反升 | -| **M-4** | 每次只处理一个候选节点 | 最小化变更面 | -| **M-5** | 不能聚类时,**不动**(默认保守) | 宁可不折,不要错折 | - -LLM 唯一的决策点: - -1. 这些叶子能不能聚类(if not → 不动) -2. 新中间节点叫什么、摘要怎么写 - -其它都机械:阈值判断(L1 file_watcher 派生 L2 自治状态提供信号)、移动文件(crud)、wikilink 重定向(graph/retarget)。 - -### 7.4 为什么没有 retriever 模块 - -L4 模块的存在条件 = "有跨原子编排 / 需要 LLM 决策"。Retrieve 不满足: - -- 三种问法(state / semantic / topological)各自被 **L3 原子工具**直接覆盖(list+filter / search / traverse) -- 没有跨原子状态、没有 LLM 决策点 -- Agent 直接调用 L3 原子即可 - ---- - -## 8. 跨切面:Schema - -Schema(资料的 frontmatter / wikilink / 章节约定)是横跨三层、各写动作的共同契约。reme4 的核心立场: - -| 立场 | 说明 | -|---|---| -| **reme 核心只保留 `name` / `description` 两个字段** | 其它都是 opinionated convention,服务消费层可以替换 | -| **Schema 是"协议"不是"代码"** | 用 markdown 文字描述,LLM agent 自我约束;不内嵌 schema validator | -| **三层共用同一套 wikilink 协议** | 全路径引用,无 short-link / no-ext 解析 | - -### 8.1 协议文档(opinionated default) - -| 内容 | 谁规定 | -|---|---| -| 目录结构(三层 + folder 单位) | 第 2 节本文档 | -| 动作语义契约(notify / sync / digest / maintain 的输入产出不变量) | 第 3 节本文档 | -| Frontmatter 推荐字段(4 轴等) | `reme4/steps/jobs/protocol.md` (opinionated) | -| 章节约定(Objective/Plan/Progress/...)| sync / digest 各自的 prompt(opinionated) | - -### 8.2 重载入口 - -服务消费层(plugin / 自定义 caller)无需 fork reme,可通过以下方式替换 schema: - -| 入口 | 适用场景 | -|---|---| -| 替换 protocol 文档 | 改 frontmatter / wikilink / 章节约定 | -| 替换 prompt 模板 | 改 sync / digest 的决策流程 | -| 替换 toolkit | 改 ReAct agent 可见的工具集 | - ---- - -## 9. 反例:不属于本架构的设计 - -明确画出**不允许**的设计,免得后续讨论或扩展时滑回去: - -| # | 反例 | 违反的不变量 | -|---|---|---| -| ✗-1 | Agent 通过任意 verb 直接写 digest | I-1(digest 写权只属 dreamer / maintainer) | -| ✗-2 | 多 agent 并发改同一个 daily folder | I-2(daily 单作者) | -| ✗-3 | 任何动作改写 resource 的原文 | I-3(resource immutable) | -| ✗-4 | 跨层引用引入第二套机制(hash-id / external ref / SQL) | I-4(wikilink 是唯一跨层载体) | -| ✗-5 | dreamer 改写 daily 正文 | `digest` 不变量(§3.5) | -| ✗-6 | maintain 改写 daily / resource 的语义内容 | `maintain` 不变量(§3.6) | -| ✗-7 | `notify` 维护 resource 上的 `referenced_by` 反指 | `notify` 完全单向(§3.3) | -| ✗-8 | 把 state / semantic / topological 合并成单一 read verb | R-1 | -| ✗-9 | Retrieve 自动 eager-expand provenance | R-4 | -| ✗-10 | digest / maintain 同步阻塞 agent 请求 | 5.4 节奏分级 | -| ✗-11 | digest / maintain 强一致(agent 写完 daily 立即可查 digest) | 5.5 eventual consistency | -| ✗-12 | maintainer 做 merge / move / promote / demote 等"通用重组" | M-1(fold-only) | -| ✗-13 | maintainer 改写既有叶子的内容(不只是搬位置) | M-2(叶子内容 0 修改) | -| ✗-14 | L4 模块在 frontmatter 里写 `status` / `pending` 等可派生状态字段 | 状态由 L1 file_watcher 派生到 L2 自治状态,L4 不重复 | -| ✗-15 | 为 retrieve 单设 L4 模块或聚合 verb | §7.4(L3 原子已足够) | -| ✗-16 | notify 写入 vault(在 resource 上加 `notified` frontmatter 或新建 daily 占位) | notify 只写 L2 推送队列,**不落任何文件**;ack 由 L1 watcher 检测 wikilink 派生 | -| ✗-17 | Service 自决推什么 notify 候选 | notify 决策在 Runtime(notifier);Service 只是 MCP transport,从 L2 推送队列读取(F-5) | -| ✗-18 | agent 主动调用 `notify` 想"标记这个 resource 我要看" | notify 是 reme→agent 单向,反向是 agent 用 sync 写 wikilink(自然 ack) | - ---- - -## 附录:术语索引 - -| 术语 | 定义 | -|---|---| -| **resource/** | 不可变原始资料层 | -| **daily/** | agent 任务工作区层 | -| **digest/** | 沉淀知识层 | -| **State 问** | 在某层做 list + 过滤的状态查询 | -| **Semantic 问** | 跨层全文/向量检索 | -| **Topological 问** | 沿 wikilink 走的拓扑查询 | -| **Provenance** | 下游节点反查到上游来源的能力 | -| **Retarget** | 节点移动时对所有入向 wikilink 的原子重写 | -| **L5 Service** | 服务 agent 请求的进程(HTTP / MCP);执行栈最上层;也是 notify 的 MCP transport | -| **L5 Runtime** | 自治维护 vault 的进程;scheduler 在其中按 L2 自治状态阈值触发 background Action | -| **L4 Action** | 6 类动作语义:ingest / notify / sync / retrieve / digest / maintain | -| **L4 模块** | 实现 Action 的架构角色;五个:ingester / notifier / synchronizer / dreamer / maintainer(retrieve 不构成独立模块) | -| **ingester** | L4 模块,机械:外部源原样落 resource + 抽 frontmatter + 入索引 | -| **notifier** | L4 模块,机械:从 L2 资源自治状态选 notify 候选 → 写 L2 推送队列;Service MCP 拿走推给 agent | -| **synchronizer** | L4 模块,LLM-driven:agent 事件织入 daily 工作叙事;响应 notify 的也走这里 | -| **dreamer** | L4 模块,LLM-driven:resource + daily 双源合流为 digest 长期条目 | -| **maintainer** | L4 模块,LLM-driven,**fold-only**:digest topic tree 的密度折叠 | -| **scheduler** | L5 Runtime 内部触发器:按 cron + L2 自治状态阈值拉起 background L4 模块(notifier / dreamer / maintainer) | -| **Topic tree** | digest/ 的心智模型:文件夹 = 中间节点,文件 = 叶子 | -| **Fold(密度折叠)** | maintainer 唯一操作:把过密叶子归簇到新子中间节点 + 写高密度摘要 | -| **L3 原子工具** | 基础(create/append/edit/read/write/move/delete/list/stat,直 fs)+ 高级(search/traverse/frontmatter,走 L2)两组 | -| **L2 文件状态** | `file_store` + `file_graph` + 自治状态(resource 入流批次/orphan、daily 任务索引、digest 密度水位/断链)+ 推送队列;由 L1 派生(推送队列由 notifier 写) | -| **L2 推送队列** | `notify` 的 L2 状态条目;notifier 写 pending,Service MCP 推送后置 notified,L1 watcher 检测到 daily→resource wikilink 后置 acknowledged | -| **L1 file_watcher** | fs event → L2 state delta 的唯一派生桥;承担索引同步 + 自治状态派生 + `notify` ack 派生 | -| **L0 vault filesystem** | 物理目录:resource/ + daily/ + digest/;唯一真相源 | -| **Eventual consistency** | digest / maintain 异步处理,有可见延迟窗口;L0↔L2 之间 watcher 滞后窗口同理 | -| **Opinionated default** | reme 提供的参考实现,服务层可替换 | diff --git a/docs4/reme_design.md b/docs4/reme_design.md deleted file mode 100644 index b1fb1c85..00000000 --- a/docs4/reme_design.md +++ /dev/null @@ -1,389 +0,0 @@ -# ReMe 设计文档 - -## 整体定位 - -> 一句话总结:**自进化的个人知识库**——你只管往里扔东西和对话,它自己长成一张知识图谱。 - -## 特性1:记忆分层 - -记忆按"原始 → 浅加工 → 深加工"三层组织: - -### 1.1 目录结构 - -``` -- reme_session/ - - agentscope|claude_code / # 使用内置的agent wrapper,session会保存在这里 - {session_id}.jsonl UUID格式要求 # /Users/yuli/workspace/ReMe/reme4/components/agent_wrapper - - dialog/ - {session_id}.jsonl # auto memory保存 可以监控可以被检索【可选】 -- resource/ - - YYYY-MM-DD/ - - {channel}_{xxxx}.html - - {channel}_{xxxx}.md -- daily/【日记,浅加工】 - - YYYY-MM-DD.md - - YYYY-MM-DD/ - - session_{session_id}.md - - {resource_stem}.md -- digest/ - - personal/ - - procedure/ - - wiki/ -``` - -### 1.2 分层详解 - -| 目录 | 存什么 | 谁写入 | 举例 | -|---------------------|----------------|-------------|-----------------------------------| -| `resource/` | 原始文件(研报、网页、邮件) | upload / 手动 | PDF 研报、对话 JSONL | -| `daily/` | 每天的事件记录 | auto-memory | "调试登录 CSS"、"与 Alice 聚餐" | -| `digest/procedure/` | 方法论、步骤 | auto-dream | "webpack 编译卡死排查路径" | -| `digest/personal/` | 用户画像、偏好 | auto-dream | "用户不爱写注释"、"用户喜欢 pnpm" | -| `digest/wiki/` | 通用知识、决策先例 | auto-dream | "光伏产业链"、"React Server Components" | - -`resource/` 和 `daily/` 是只增不删的流水账;`digest/` 下三个桶是反复消费的精华层,各桶有独立的整合 prompt。 - -## 特性2:Obsidian 兼容的 Markdown 格式 - -所有笔记都是标准 Markdown + Obsidian 语法,可以直接用 Obsidian 打开浏览: - -``` -┌─────────────────────────────────────────────────────────────┐ -│ 一个 .md 文件的完整结构 │ -├─────────────────────────────────────────────────────────────┤ -│ --- │ -│ name: 宁德时代 ← YAML front matter │ -│ description: 全球动力电池龙头 │ -│ tags: [新能源, 电池] │ -│ --- │ -├─────────────────────────────────────────────────────────────┤ -│ 所属行业:: [[新能源]] ← 语义化链接(Dataview) │ -│ 竞争对手:: [[比亚迪]] │ -│ │ -│ # 基本面 ← Markdown 正文 │ -│ 全球动力电池出货量第一,核心技术为 │ -│ [[CTP]] 和 [[钠离子电池]]…… ← 标准 wikilink │ -│ │ -│ 参考 ![[2026Q1调研纪要]] ← 嵌入引用 │ -├─────────────────────────────────────────────────────────────┤ -│ ↓ AST 语义分块 ↓ │ -│ chunk 1: [标题骨架] + 正文片段 │ -│ chunk 2: [标题骨架] + 正文片段 │ -└─────────────────────────────────────────────────────────────┘ -``` - -### 2.1 YAML front matter - -每个笔记头部的元数据: - -```markdown ---- -name: 光伏产业链研究 -description: 从硅料到组件的全链条梳理 -tags: [新能源, 光伏, 产业链] ---- -``` - -`name` / `description` 是约定字段,其余键值对全部保留,不会丢弃任何自定义字段。 - -### 2.2 四种 wikilink 写法 - -| 写法 | 示例 | 语义 | -|------|----------------|----------| -| 标准链接 | `[[光伏产业链]]` | 指向目标文件 | -| 锚点链接 | `[[钴#应用]]` | 指向特定章节 | -| 别名链接 | `[[宁德时代\|宁德]]` | 自定义显示文本 | -| 嵌入引用 | `![[钴]]` | 内联嵌入目标内容 | - -### 2.3 语义化链接(Dataview 风格) - -普通 wikilink 只说"A 提到了 B",语义化链接还能表达"A 和 B 是什么关系": - -```markdown -所属行业:: [[新能源]] ← 行级属性(独占一行) -总部:: [[宁德]] -[竞争对手:: [[比亚迪]]] ← 内联属性(嵌入正文中) -``` - -`WikilinkHandler` 是全系统唯一的 wikilink 解析入口,确保 parser、graph、search 各层规则一致。 - -### 2.4 AST 感知的语义分块 - -传统 RAG 按固定 token 长度切片,经常切坏文档结构。ReMe 基于 Markdown AST 做语义分块: - -- 按 H1/H2/H3 章节嵌套建树,递归分块 -- **每个 chunk 保留完整标题骨架**——检索到片段后一眼看出它在哪个章节下 -- 表格自动重复表头、代码块保留 fence、列表按项打包 - -``` -示例 chunk: -───────────────────── -# 光伏产业链 -## 上游:硅料 -### 多晶硅工艺 -[chunk 正文] ← 实际内容 -## 中游:硅片 ← 骨架(只有标题) -## 下游:组件 -───────────────────── -``` - -## 特性3:自进化 - -> **ReMe 的记忆不是被动存的,是主动长成知识图谱的。** - -``` -用户对话 / 外部素材 - │ - ├───────────────────────────────────┐ - ▼ ▼ -┌────────────┐ ┌────────────┐ -│ auto-memory│ │auto-resource│ -│ 对话→日记 │ │ 素材→解析 │ -└─────┬──────┘ └──────┬─────┘ - │ │ - ▼ ▼ -┌─────────────────────────────────────────────────┐ -│ daily/ │ -│ (事件日记 + resource 加工笔记) │ -└─────────────────────┬───────────────────────────┘ - │ - ▼ 定时触发 - ┌─────────────┐ - │ auto-dream │ - │ 提炼 + 建图谱 │ - └──────┬──────┘ - │ - ▼ -┌─────────────────────────────────────────────────┐ -│ digest/ │ -│ (知识卡片 + wikilink 互联 = 知识图谱) │ -└─────────────────────────────────────────────────┘ -``` - -用户什么都不用做,Agent 在后台让笔记自己长出结构。 - -### 3.1 auto-resource - -监控 `resource/` 目录,新文件进来后自动解析内容、整理为结构化笔记写入 `daily/` 下。 - -### 3.2 auto-memory - -对话进行时,ReMe 在后台把上下文自动写入当天日记。不是简单的对话摘要——而是一个拥有完整读写能力的 LLM -Agent,自己决定记什么、怎么组织、合并还是新增。 - -### 3.3 auto-dream + auto-link:睡眠式记忆整理 - -借鉴人在睡眠中巩固记忆的机制——把日记和素材提炼成知识卡片,并自动织出图谱关系: - -``` - ┌───────────────────────────┐ - │ daily/2026-05-28/xxx.md │ ← 一篇日记或素材 - └─────────────┬─────────────┘ - │ - ╔═════════════════════════════════════╗ - ║ Phase 1 — Extract(一个 Agent) ║ - ║ "这份材料教了什么道理?" ║ - ║ ║ - ║ 输出 N 个抽象单元,各带 bucket 标签 ║ - ║ (空 → 结束,没东西值得记) ║ - ╚══════════╤══════════╤═══════════════╝ - │ │ - ┌─────────────┘ └──────────────┐ - ▼ ▼ - ╔══════════════════════════════╗ ╔══════════════════════════════╗ - ║ Phase 2 — Integrate ║ ║ Phase 2 — Integrate ║ - ║ (每个 unit 独立一个 Agent) ║ ║ (每个 unit 独立一个 Agent) ║ - ║ ║ ║ ║ - ║ 1. search + traverse 召回 ║ ║ 1. search + traverse 召回 ║ - ║ 2. 决策: CREATE / UPDATE ║ ║ 2. 决策: CREATE / UPDATE ║ - ║ 3. 写入 + 自动织链接 ║ ║ 3. 写入 + 自动织链接 ║ - ╚══════════════╤═══════════════╝ ╚══════════════╤═══════════════╝ - │ │ - ▼ ▼ - ┌──────────────────────────────────────────────────────────────┐ - │ digest/ │ - │ procedure/key-rotation.md ←─ derived_from:: [[daily/..]] │ - │ wiki/credential-compliance.md ─ relates_to:: [[...]] │ - │ personal/user-pr-pref.md │ - └──────────────────────────────────────────────────────────────┘ - 知识图谱自动生长 -``` - -**Phase 1 筛选**——多个事实说明同一个道理就合并为一个 unit,分到三个桶:`procedure`(怎么做)/ `personal`(用户偏好)/ `wiki` -(通用知识)。没东西值得记则流程结束。 - -**Phase 2 先搜后写**——先搜已有 digest,再决策:新建(CREATE)、追加佐证(CORROBORATE)、补充精度(REFINE)、修正矛盾(CORRECT)。 - -**auto-link 是写入的副产品**——写 digest 时自动加 `derived_from:: [[素材]]` 溯源 + `relates_to::` 概念互联,图谱随每次 -dream 自动变密。 - -**CronDreamer 定时批跑**——每天扫描当天所有 daily + resource 文件,逐个执行上述管线。 - -## 特性4:混合索引 + 渐进式展开 - -``` -用户提问: "宁德时代的电池技术?" - │ - ├──────────────────────┬──────────────────────────┐ - ▼ ▼ │ - ┌─────────────────┐ ┌──────────────────┐ │ - │ 全文倒排索引 │ │ 向量索引 │ │ - │ (numpy + jieba) │ │ (faiss) │ │ - │ │ │ │ │ - │ "宁德时代" 精确 │ │ "动力电池龙头" │ │ - │ 命中 │ │ 语义近似命中 │ │ - └────────┬────────┘ └────────┬─────────┘ │ - │ text_weight=0.3 │ vector_weight=0.7 │ - └──────────┬──────────┘ │ - ▼ │ - ┌───────────────┐ │ - │ RRF 融合排序 │ │ - │ score = Σ(w/(k+rank)) │ - └───────┬───────┘ │ - ▼ │ - ┌──────────────────────────────────────┐ │ - │ 第一跳:Top-K chunk 全文 + 评分 │ │ - └───────────────────┬──────────────────┘ │ - ▼ │ - ┌──────────────────────────────────────┐ │ - │ 第二跳:邻居目录(只有标题,不展开正文)│ ← wikilink 图谱 │ - └───────────────────┬──────────────────┘ │ - ▼ │ - ┌──────────────────────────────────────┐ │ - │ 第 N 跳:Agent 按需追问,展开正文 │ │ - └──────────────────────────────────────┘ │ -``` - -### 4.1 混合索引构建 - -两套索引并行维护,各擅其长: - -- **全文倒排索引**(基于numpy)——精确匹配专有名词,搜"宁德时代"必须命中。支持增量更新索引,无原生扩展依赖。 -- **向量索引**(基于faiss)——语义相似度,搜"锂电正极原料"能命中"钴"。 - -### 4.2 基于 RRF 的混合检索 - -两条通路并行跑(`asyncio.gather`),用 RRF(Reciprocal Rank Fusion)融合排序: - -``` -融合分 = Σ( weight_i / (k + rank_i) ) k=60, vector_weight=0.7, text_weight=0.3 -``` - -为什么要两路?纯向量容易错配名词("苹果公司"≈"水果"),纯关键词抓不到同义改写——融合互补盲区。 - -### 4.3 渐进式链接展开 - -传统 RAG 一次性把 Top-K 全塞进上下文,token 浪费且噪音多。ReMe 分跳展开,按需深入: - -**第一跳** — 返回命中 chunk 全文 + 分数明细 - -**第二跳** — 展开 wikilink 邻居的"目录"(只有标题,不展开正文): - -``` -========== digest/wiki/宁德时代.md:5-22 [score=0.0247 vector=0.0156 keyword=0.0091] ========== -# 宁德时代 -全球动力电池出货量第一,核心技术为 CTP(Cell to Pack)和钠离子电池…… - - outlinks (2): - → digest/wiki/磷酸铁锂.md name="磷酸铁锂正极路线" description="磷酸铁锂与三元路线对比" via predicate=相关技术 - → digest/wiki/固态电池.md name="固态电池技术路线" description="全固态与半固态进展" via predicate=技术演进 - inlinks (2): - ← daily/2026-03-18/宁德调研.md name="宁德时代调研纪要" description="2026Q1产能与订单跟踪" via plain - ← digest/wiki/新能源产业链.md name="新能源产业链全景" description="从锂矿到整车的全链条" via predicate=下游应用 -``` - -**第 N 跳** — Agent 看过"目录"后,自己决定哪些邻居值得深入,再发起 read 拿正文。 - -二跳目录每条只占一行(最多 10 outlink + 10 inlink),Agent 拥有全局视野却不撑爆上下文。 - -## 特性5:多 Agent 框架集成 - -ReMe 不做独立 Agent 产品,而是作为**能力层**被任意框架调用: - -| 集成路径 | 适用对象 | 方式 | -|---------------------|----------------------|---------------------------------------------| -| SDK 深度集成 | AgentScope / Qwenpaw | middleware 注册 tools + prompt,hook 注册 auto-* | -| MCP Tool + skill.md | Claude Code | MCP 注册 Tool,配 skill.md 开箱即用,hook 注册 auto-* | -| HTTP API + CLI | 通用方案 | skill.md + CLI 调用 | - ---- - -# 二、工程架构 - -``` -┌─────────────────────────────────────────────────────────────────┐ -│ Service 层(HTTP / MCP 双协议) │ -│ FastAPI + FastMCP,同一套 Job 同时暴露为 REST 和 MCP Tool │ -├─────────────────────────────────────────────────────────────────┤ -│ Application 层 │ -│ 配置加载 → 组件初始化 → Job 注册 → start() / close() 生命周期 │ -├─────────────────────────────────────────────────────────────────┤ -│ Job 层(编排) │ -│ 每个 Job = 一组 Step 的有序管线,YAML 声明式配置 │ -├─────────────────────────────────────────────────────────────────┤ -│ Step 层(业务逻辑) │ -│ 原子操作单元,按功能域分组:file_io / index / evolve / common │ -├─────────────────────────────────────────────────────────────────┤ -│ Component 层(可插拔基础设施) │ -│ 统一注册表 R,一行配置切换实现 │ -│ file_store / embedding / keyword_index / llm / file_graph │ -└─────────────────────────────────────────────────────────────────┘ -``` - -## 2.1 服务层 - -每个 Job 同时暴露为两种协议,写一次逻辑、两种方式调用: - -| 协议 | 传输方式 | 适用场景 | -|---------------|-------------------------------|------------------------------| -| HTTP(FastAPI) | JSON POST / SSE | REST 调用、Web 前端 | -| MCP(FastMCP) | stdio / SSE / streamable-http | Claude Code、Cursor 等 MCP 客户端 | - -- **按需拉起**:Agent 检测到服务未运行时自动后台启动,用户无感知 -- **服务发现**:通过 `REME_SERVICE_INFO` 环境变量广播地址,`find_reme` 一键探活 - -## 2.2 组件系统(Component) - -统一注册表 `R`,所有基础设施都是可插拔的——改一行配置就能切换后端: - -| 组件 | 干什么 | 可选后端 | -|-----------------|---------------|-----------------------| -| file_store | 文件存储 + 索引协调 | local | -| file_graph | wikilink 双向图谱 | local / nx / neo4j | -| keyword_index | 全文倒排索引 | bm25(numpy + jieba) | -| embedding_store | 向量存储与检索 | local(faiss) | -| embedding | 文本转向量 | openai 兼容接口 | -| llm | 大模型调用 | anthropic / openai 兼容 | -| tokenizer | 分词 | regex / jieba | - -## 2.3 Job 列表 - -**Job** 是 ReMe 暴露给外部的操作单元——同一个 Job 可以作为 Python 函数直接调用、作为 MCP Tool 被 Agent 使用、也可以作为 CLI -命令执行。 - -| 类别 | Job | 功能 | -|------|---------------------------|----------------------------------| -| 检索 | `search` | 混合检索(向量 + BM25 + RRF)+ 渐进式图展开 | -| 检索 | `traverse` | 从指定路径遍历 wikilink 图谱 | -| 文件读写 | `read` | 读取 markdown 文件内容 | -| 文件读写 | `read_image` | 读取图片文件(base64) | -| 文件读写 | `write` | 新建或覆写 markdown 文件(含 frontmatter) | -| 文件读写 | `edit` | 文件内查找替换 | -| 文件读写 | `delete` | 删除文件,返回残留入边 | -| 文件读写 | `move` | 移动 / 重命名,自动重写 wikilink | -| 文件读写 | `list` | 列出目录下文件 | -| 文件读写 | `stat` | 文件元信息(大小、修改时间) | -| 文件读写 | `frontmatter_read` | 读取 frontmatter | -| 文件读写 | `frontmatter_update` | 合并更新 frontmatter | -| 文件读写 | `frontmatter_delete` | 删除 frontmatter 字段 | -| 日记管理 | `daily_create` | 幂等创建当天日记文件 | -| 日记管理 | `daily_list` | 列出某天的所有日记 | -| 日记管理 | `daily_reindex` | 重建当天索引页 | -| 索引维护 | `reindex` | 清空并全量重建索引 | -| 索引维护 | `update_store_index_loop` | 后台监听文件变更,增量更新 | -| 自进化 | `auto_memory` | 对话记录写入日记(LLM Agent) | -| 自进化 | `dream` | 单文件记忆提炼到 digest(LLM Agent) | -| 自进化 | `auto-dream` | 批量扫描当天文件,逐个 dream | -| 系统 | `health_check` | 组件健康检查 | -| 系统 | `version` | 返回版本号 | -| 系统 | `help` | 列出所有已注册 Job | diff --git a/docs4/todo.md b/docs4/todo.md deleted file mode 100644 index d4c79b97..00000000 --- a/docs4/todo.md +++ /dev/null @@ -1,38 +0,0 @@ -- reme_session/ - - agentscope|claude_code / # 使用内置的agent wrapper,session会保存在这里 - {session_id}.jsonl UUID格式要求 # /Users/yuli/workspace/ReMe/reme4/components/agent_wrapper - - dialog/ - {session_id}.jsonl # auto memory保存 可以监控可以被检索【可选】 -- resource/ - - YYYY-MM-DD/ - - {channel}_{xxxx}.html - - {channel}_{xxxx}.md -- daily/【日记,浅加工】 - - YYYY-MM-DD.md - - YYYY-MM-DD/ - - {session_id}.md - - {和resource同名}.md -- digest/ - - personal/ - - procedure/ - - wiki/ - -函数接口: -- auto_memory - - message 应该会 会保存到 reme_session/dialog/{session_id}.jsonl - - 通过 message 更新 daily/YYYY-MM-DD/{session_id}.md -- auto-resource - - 会保存到 daily/YYYY-MM-DD/{resource_stem}.md -- auto-dream - - 读取所有的md - - 会生成link auto-link - - 会生成topic ? -- proactive - - 会读取topic ? -- search - - -后台任务: -- index_update_loop 索引监控 -- resource_watch_loop 资源监控 -- digest_watch_loop 应该是闲置? diff --git a/reme/config/cli.yaml b/reme/config/cli.yaml deleted file mode 100644 index e7cab227..00000000 --- a/reme/config/cli.yaml +++ /dev/null @@ -1,50 +0,0 @@ -backend: cmd -working_dir: .reme - -metadata: - context_window_tokens: 100000 - reserve_tokens: 30000 - keep_recent_tokens: 10000 - vector_weight: 0.7 - candidate_multiplier: 2 - -as_llms: - default: - backend: openai - model_name: qwen3.5-plus - -as_llm_formatters: - default: - backend: openai - -as_token_counters: - default: - backend: hf - pretrained_model_name_or_path: Qwen/Qwen3-Coder-30B-A3B-Instruct - use_mirror: true - -embedding_models: - default: - backend: openai - model_name: text-embedding-v4 - dimensions: 1024 - enable_cache: true - use_dimensions: false - -file_stores: - default: - backend: chroma - # backend: local - store_name: reme - embedding_model: default - fts_enabled: true - vector_enabled: true - -file_watchers: - default: - backend: full - file_store: default - watch_paths: [ ".reme", ".reme/memory" ] - suffix_filters: [ ".md" ] - recursive: false - diff --git a/reme/config/light.yaml b/reme/config/light.yaml deleted file mode 100644 index 3500f9a5..00000000 --- a/reme/config/light.yaml +++ /dev/null @@ -1,38 +0,0 @@ -as_llms: - default: - backend: openai - model_name: qwen3.5-plus - -thread_pool_max_workers: -1 - -as_llm_formatters: - default: - backend: openai - -as_token_counters: - default: - backend: rule - token_count_estimate_divisor: 3.75 - -embedding_models: - default: - backend: openai - dimensions: 1024 - use_dimensions: false - enable_cache: true - max_batch_size: 10 - max_cache_size: 2000 - max_input_length: 8192 - -file_stores: - default: - backend: chroma - embedding_model: default - store_name: "reme" - -file_watchers: - default: - backend: full - file_store: default - suffix_filters: [ ".md" ] - recursive: false diff --git a/reme/config/service.yaml b/reme/config/service.yaml deleted file mode 100644 index 31334099..00000000 --- a/reme/config/service.yaml +++ /dev/null @@ -1,206 +0,0 @@ -backend: http -working_dir: .reme -thread_pool_max_workers: 64 - -mcp: - transport: sse - host: "0.0.0.0" - port: 8001 - -http: - host: "0.0.0.0" - port: 8002 - timeout_keep_alive: 600 - limit_concurrency: 64 - -flows: - retrieve_task_memory: - flow_content: BuildQuery() >> MemoryRetrieval() >> RerankMemory() >> RewriteMemory() - description: "Retrieves the most relevant top-k memory experiences from historical data based on the current query to enhance task-solving capabilities" - parameters: - type: object - properties: - query: - type: string - description: "The search query string for retrieving relevant memories. Either query or messages must be provided." - messages: - type: array - description: "A list of conversation messages to build the query from. Either query or messages must be provided." - enable_llm_build: - type: boolean - description: "Whether to use LLM to build query from messages (default: true)." - top_k: - type: integer - description: "Number of top results to retrieve (default: 5)." - threshold_score: - type: number - description: "Optional minimum score threshold for filtering retrieved memories." - enable_llm_rerank: - type: boolean - description: "Whether to enable LLM-based reranking (default: false)." - enable_score_filter: - type: boolean - description: "Whether to enable score-based filtering (default: false)." - min_score_threshold: - type: number - description: "Minimum combined score threshold for filtering memories (default: 0.3)." - enable_llm_rewrite: - type: boolean - description: "Whether to use LLM to rewrite context messages (default: false)." - required: [] - - summary_task_memory: - flow_content: TrajectoryPreprocess() >> (SuccessExtraction()|FailureExtraction()|ComparativeExtraction()) >> MemoryValidation() >> MemoryDeduplication() - description: "Summarizes conversation trajectories or messages into structured memory representations for long-term storage" - parameters: - type: object - properties: - trajectories: - type: array - description: "A list of conversation trajectory information, including message content and score." - success_threshold: - type: number - description: "Score threshold for classifying trajectories as successful (default: 1.0)." - enable_soft_comparison: - type: boolean - description: "Whether to enable soft comparison between highest and lowest scoring trajectories (default: true)." - enable_similarity_comparison: - type: boolean - description: "Whether to enable similarity-based comparison between success and failure trajectories (default: false)." - max_similarity_sequences: - type: integer - description: "Maximum number of sequences to compare for similarity (default: 5)." - similarity_threshold: - type: number - description: "Similarity threshold for comparing trajectories (default: 0.5)." - max_similarity_pairs: - type: integer - description: "Maximum number of similar pairs to extract from comparison (default: 3)." - validation_threshold: - type: number - description: "Minimum validation score threshold for accepting task memories (default: 0.5)." - max_existing_task_memories: - type: integer - description: "Maximum number of existing task memories to check for deduplication (default: 1000)." - required: - - trajectories - - add_task_memory: - flow_content: MemoryAddition() - description: "Add task memories to the vector store" - parameters: - type: object - properties: - memory_list: - type: array - description: "A list of task memory to add to the vector store." - required: - - memory_list - - delete_task_memory: - flow_content: MemoryDeletion() - description: "Delete task memories when utility/freq < utility_threshold and freq >= freq_threshold" - parameters: - type: object - properties: - freq_threshold: - type: integer - description: "The retrieved frequency threshold for deleting task memory." - utility_threshold: - type: number - description: "The utility/freq threshold for deleting task memory." - required: - - freq_threshold - - utility_threshold - - record_task_memory: - flow_content: UpdateMemoryMetadata() - description: "Update the freq & utility attributes of retrieved task memories" - parameters: - type: object - properties: - memory_list: - type: array - description: "A list of retrieved task memory corresponding to the current task." - update_utility: - type: boolean - description: "Whether to update the utility attribute of the retrieved task memory." - required: - - memory_list - - update_utility - - load_memory: - flow_content: LoadMemory() - description: "Load memories from disk into the vector store" - parameters: - type: object - properties: - load_file_path: - type: string - description: "The path to the memories file." - clear_existing: - type: boolean - description: "If True, clears existing memories before loading (default: False)." - required: - - load_file_path - - dump_memory: - flow_content: DumpMemory() - description: "Dump the vector store memories to disk" - parameters: - type: object - properties: - dump_file_path: - type: string - description: "The path to the memories file." - required: - - dump_file_path - - test: - flow_content: TestOp() - description: "test" - -# curl -X POST http://localhost:8002/simple_chat \ -# -H "Content-Type: application/json" \ -# -d '{ -# "query": "hello" -# }' - simple_chat: - flow_content: SimpleChat() - description: "test" - - stream_chat: - flow_content: StreamChat() - description: "test" - stream: true - -llms: - default: - backend: openai - model_name: qwen3.5-plus - request_interval: 1 -# temperature: 0.0001 - -embedding_models: - default: - backend: openai - model_name: text-embedding-v4 - dimensions: 1024 - enable_cache: false - -vector_stores: - default: - backend: chroma - # backend: local - collection_name: reme - embedding_model: default - -token_counters: - default: - backend: base - - hf: - backend: hf - model_name: Qwen/Qwen3-Coder-30B-A3B-Instruct - use_mirror: true - diff --git a/reme/config/vector.yaml b/reme/config/vector.yaml deleted file mode 100644 index d8de5ddb..00000000 --- a/reme/config/vector.yaml +++ /dev/null @@ -1,44 +0,0 @@ -backend: cmd -working_dir: .reme - -llms: - default: - backend: openai - model_name: qwen3.5-plus - request_interval: 1 - # temperature: 0.0001 - - qwen3_max_instruct: - backend: openai - model_name: qwen3-max - request_interval: 2 - - qwen-plus-thinking: - backend: openai - model_name: qwen-plus - request_interval: 1 - extra_body: - enable_thinking: True - -embedding_models: - default: - backend: openai - model_name: text-embedding-v4 - dimensions: 1024 - enable_cache: false - -vector_stores: - default: - backend: chroma - # backend: local - collection_name: reme - embedding_model: default - -token_counters: - default: - backend: base - - hf: - backend: hf - model_name: Qwen/Qwen3-Coder-30B-A3B-Instruct - use_mirror: true diff --git a/reme/core/tools/execute_code.yaml b/reme/core/tools/execute_code.yaml deleted file mode 100644 index fdaef055..00000000 --- a/reme/core/tools/execute_code.yaml +++ /dev/null @@ -1,5 +0,0 @@ -tool: | - Execute python code can be used in scenarios such as analysis or calculation, and the final result can be printed using the `print` function. - -tool_zh: | - 执行 Python 代码可用于分析或计算等场景,最终结果可以使用 print 函数输出。 \ No newline at end of file diff --git a/reme/core/tools/execute_shell.yaml b/reme/core/tools/execute_shell.yaml deleted file mode 100644 index 6261bd8b..00000000 --- a/reme/core/tools/execute_shell.yaml +++ /dev/null @@ -1,7 +0,0 @@ -tool: | - A tool capable of executing shell commands can use `pwd` to check the current location, `cd` to navigate to a new directory, `ls` to view the contents of a directory, and execute scripts. - Note that the starting directory is always the same each time the tool is invoked. If you need to perform multiple operations within a specific directory, you must include the full path in each command, for example: `cd aa/bb && bash xxx`. - -tool_zh: | - 一个能够执行 Shell 命令的工具可以使用 pwd 查看当前所在位置,使用 cd 切换到新目录,使用 ls 查看目录内容,并可执行脚本。 - 请注意,每次调用该工具时,起始目录始终相同。如果你需要在某个特定目录中执行多个操作,必须在每条命令中包含完整路径,例如:cd aa/bb && bash xxx。 \ No newline at end of file diff --git a/reme/core/tools/search/dashscope_search.yaml b/reme/core/tools/search/dashscope_search.yaml deleted file mode 100644 index 5a3dade5..00000000 --- a/reme/core/tools/search/dashscope_search.yaml +++ /dev/null @@ -1,20 +0,0 @@ -tool: | - Use search keywords to retrieve relevant information from the internet. - If you have multiple keywords, please call this tool separately for each one. - -tool_zh: | - 使用搜索关键词从互联网检索相关信息。如果您有多个关键词,请分别为每个关键词单独调用此工具。 - -role_prompt: | - # user's question - {query} - - # task - Return all the original search results directly without processing. - -role_prompt_zh: | - # 用户问题 - {query} - - # task - 直接返回所有的原始搜索结果,不要处理 \ No newline at end of file diff --git a/reme/core/tools/search/mock_search.yaml b/reme/core/tools/search/mock_search.yaml deleted file mode 100644 index c952ff20..00000000 --- a/reme/core/tools/search/mock_search.yaml +++ /dev/null @@ -1,81 +0,0 @@ -tool: | - Use search keywords to retrieve relevant information from the internet. - If you have multiple keywords, please call this tool separately for each one. - -tool_zh: | - 使用搜索关键词从互联网检索相关信息。如果您有多个关键词,请分别为每个关键词单独调用此工具。 - - -mock_search_prompt: | - # Task - Generate {num_results} realistic search results for the query: "{query}". - - # Fields per item - Each result must be a JSON object with fields: - - snippet: 2-3 sentence summary - - title: page title - - url: realistic URL (e.g., https://example.com/article/title) - - hostname: domain (e.g., example.com) - - hostlogo: logo URL (e.g., https://example.com/logo.png) or empty string - - # Requirements - - Ensure relevance to the query - - Use diverse, realistic sources - - Ensure well-formed URLs - - If no relevant results, return an empty array - - # Output Format - First, think briefly about good sources and angles: - ``` think - your brief reasoning here - ``` - - Then output ONLY the JSON array wrapped in a json code block, nothing else: - ``` json - [ - {{ - "snippet": "核心内容", - "title": "...", - "url": "...", - "hostname": "...", - "hostlogo": "..." - }} - ] - ``` - -mock_search_prompt_zh: | - # 任务 - 为查询“{query}”生成 {num_results} 条逼真的搜索结果。 - - # 每条结果的字段 - 每条结果必须是一个包含以下字段的 JSON 对象: - - snippet:2–3 句话的摘要 - - title:网页标题 - - url:逼真的 URL(例如:https://example.com/article/title) - - hostname:域名(例如:example.com) - - hostlogo:网站 logo 的 URL(例如:https://example.com/logo.png),若无则为空字符串 - - # 要求 - - 确保结果与查询相关 - - 使用多样且真实的来源 - - 确保 URL 格式正确 - - 若无相关结果,则返回空数组 - - # 输出格式 - 首先,简要思考合适的来源和角度: - ``` think - 你的简要推理写在这里 - ``` - - 然后仅输出一个 JSON 数组,并用 json 代码块包裹,不要包含其他任何内容: - ``` json - [ - { - "snippet": "核心内容", - "title": "...", - "url": "...", - "hostname": "...", - "hostlogo": "..." - } - ] - ``` \ No newline at end of file diff --git a/reme/core/tools/search/tavily_search.yaml b/reme/core/tools/search/tavily_search.yaml deleted file mode 100644 index 2499cedb..00000000 --- a/reme/core/tools/search/tavily_search.yaml +++ /dev/null @@ -1,6 +0,0 @@ -tool: | - Use search keywords to retrieve relevant information from the internet. - If you have multiple keywords, please call this tool separately for each one. - -tool_zh: | - 使用搜索关键词从互联网检索相关信息。如果您有多个关键词,请分别为每个关键词单独调用此工具。 \ No newline at end of file diff --git a/reme/core/tools/think_tool.yaml b/reme/core/tools/think_tool.yaml deleted file mode 100644 index 75903557..00000000 --- a/reme/core/tools/think_tool.yaml +++ /dev/null @@ -1,32 +0,0 @@ -tool: | - Before calling any external tool or when rethinking and planning is needed, you must invoke this tool for brief reflection. - The output must cover: - 1. Whether the current context is enough to answer the user directly, plus reasoning. - 2. If not, what information or validation is missing. - 3. A strategy to close the gap: which tool to call next, why, and key parameters or query terms. - Keep the reasoning tightly scoped to the current turn, avoid unrelated background, - and do not execute tools from here—only produce clear, actionable thoughts. - -reflection: | - 1) Can I answer now? Why? - 2) What is missing? - 3) Which tool + params next? - -reflection_output: | - Reflection has been recorded. - -tool_zh: | - 每次准备调用任何外部工具之前或者需要重新思考规划,都必须先调用本工具进行简短思考。 - 输出需覆盖以下要点: - 1. 评估当前上下文是否足以直接回答用户问题,并解释理由。 - 2. 若不能回答,明确缺失的信息或验证步骤。 - 3. 针对缺口设计下一步策略:列出计划使用的工具、调用目的、关键参数或查询关键词。 - 思考要紧扣当前轮对话内容,避免复述无关背景,不要直接执行工具,只输出清晰推理。 - -reflection_zh: | - 1) 能直接回答吗?为什么? - 2) 缺什么信息? - 3) 下一步用哪个工具+参数? - -reflection_output_zh: | - 已经记录反思 \ No newline at end of file diff --git a/reme/extension/procedural_memory/retrieve/build_query.yaml b/reme/extension/procedural_memory/retrieve/build_query.yaml deleted file mode 100644 index 7017cec7..00000000 --- a/reme/extension/procedural_memory/retrieve/build_query.yaml +++ /dev/null @@ -1,6 +0,0 @@ -query_build: | - # Execution Process - {execution_process} - - Read through the entire execution process to understand which part is currently being executed. - Generate a `query` that reflects the current state, which will later be used to search for similar problems in the database and help resolve the issue at hand. diff --git a/reme/extension/procedural_memory/retrieve/rerank_memory.yaml b/reme/extension/procedural_memory/retrieve/rerank_memory.yaml deleted file mode 100644 index e5e53337..00000000 --- a/reme/extension/procedural_memory/retrieve/rerank_memory.yaml +++ /dev/null @@ -1,25 +0,0 @@ -memory_rerank_prompt: | - You are an expert AI analyst tasked with reranking retrieved experiences based on their relevance to a specific query. - - Your task is to analyze the candidates and rank them by relevance, considering: - ● DIRECT RELEVANCE: How directly applicable the experience is to the current query - ● SITUATION SIMILARITY: How similar the experience context is to the current situation - ● ACTIONABILITY: How actionable and specific the experience is - ● QUALITY: The overall quality and clarity of the experience - - # Current Query - {query} - - # Candidate Experiences (Total: {num_candidates}) - {candidates} - - OUTPUT FORMAT: - Provide a ranked list of candidate indices (0-based) from most relevant to least relevant: - ```json - {{ - "ranked_indices": [2, 0, 4, 1, 3], - "reasoning": "Brief explanation of ranking rationale" - }} - ``` - - Note: Include ALL candidate indices in the ranking, even if some are less relevant. \ No newline at end of file diff --git a/reme/extension/procedural_memory/retrieve/rewrite_memory.yaml b/reme/extension/procedural_memory/retrieve/rewrite_memory.yaml deleted file mode 100644 index 93e899b1..00000000 --- a/reme/extension/procedural_memory/retrieve/rewrite_memory.yaml +++ /dev/null @@ -1,34 +0,0 @@ -memory_rewrite_prompt: | - You are an expert AI assistant tasked with rewriting and reorganizing context content to make it more relevant and actionable for the current task. - - Your task is to take the original context (containing multiple experiences) and rewrite it as a cohesive, task-specific guidance that directly addresses the current situation. - - REWRITING GUIDELINES: - ● RELEVANCE FOCUS: Emphasize the most relevant aspects of each experience. Prioritize the most relevant experiences. Use clear, direct language. - ● ACTIONABLE INSIGHTS: Extract specific, actionable guidance. Make the context immediately actionable - ● COHERENT NARRATIVE: Create a flowing narrative rather than disconnected tips - ● SITUATIONAL AWARENESS: Adapt the guidance to the current situation - - # Current Task/Query - {current_query} - - # Current Trajectory - {current_context} - - # Original Context Content (Multiple Experiences) - {original_context} - - OUTPUT FORMAT: - Provide the rewritten context: - ```json - {{ - "rewritten_context": "A cohesive, task-specific context message that reorganizes and adapts the original experiences for the current task. This should be written as a unified guidance rather than separate experience items.", - }} - ``` - - Guidelines: - - Rewrite as a unified, flowing guidance - - Adapt terminology and examples to match the current task domain - - Consolidate overlapping insights into coherent recommendations - - Prioritize experiences most relevant to the current situation - - Make the guidance feel custom-written for this specific task diff --git a/reme/extension/procedural_memory/summary/comparative_extraction.yaml b/reme/extension/procedural_memory/summary/comparative_extraction.yaml deleted file mode 100644 index 626cc925..00000000 --- a/reme/extension/procedural_memory/summary/comparative_extraction.yaml +++ /dev/null @@ -1,79 +0,0 @@ -soft_comparative_step_task_memory_prompt: | - You are an expert AI analyst comparing higher-scoring and lower-scoring step sequences to extract performance insights. - - Your task is to identify the key differences between higher and lower performing approaches at the step level. - Focus on what made the higher-scoring approach more effective, even when both approaches may have had partial success. - - SOFT COMPARATIVE ANALYSIS FRAMEWORK: - ● PERFORMANCE FACTORS: Identify what specifically contributed to the higher score - ● APPROACH DIFFERENCES: Compare methodologies and execution strategies - ● EFFICIENCY ANALYSIS: Analyze why one approach was more efficient or effective - ● OPTIMIZATION INSIGHTS: Extract lessons for improving performance - - EXTRACTION PRINCIPLES: - ● Focus on INCREMENTAL IMPROVEMENTS and performance optimization - ● Extract QUALITY INDICATORS that differentiate better vs good approaches - ● Identify REFINEMENT STRATEGIES that lead to higher scores - ● Frame insights as PERFORMANCE ENHANCEMENT guidelines - - # Higher-Scoring Step Sequence (Score: {higher_score}) - {higher_steps} - - # Lower-Scoring Step Sequence (Score: {lower_score}) - {lower_steps} - - - OUTPUT FORMAT: - Generate 1-2 performance improvement insights as JSON objects: - ```json - [ - {{ - "when_to_use": "Specific scenarios where this performance insight applies", - "experience": "Detailed analysis of what made the higher-scoring approach more effective", - "tags": ["performance_optimization", "score_improvement", "relevant_keywords"], - "confidence": 0.7, - "step_type": "reasoning|action|observation|decision", - "tools_used": ["list", "of", "tools"] - }} - ] - ``` - -hard_comparative_step_task_memory_prompt: | - You are an expert AI analyst comparing successful and failed step sequences to extract differential insights. - - Your task is to identify the key differences between success and failure patterns at the step level. - Focus on critical decision points, technique variations, and approach differences. - - COMPARATIVE ANALYSIS FRAMEWORK: - ● DECISION CONTRAST: Compare critical decisions made in success vs failure cases - ● TECHNIQUE VARIATIONS: Identify different approaches and their outcomes - ● TIMING DIFFERENCES: Analyze when certain actions were taken and their impact - ● SUCCESS FACTORS: Extract what specifically made the difference - - EXTRACTION PRINCIPLES: - ● Frame comparisons as PRINCIPLES as well as case-specific SOLUTIONS - ● Identify PATTERNS that differentiate effective vs ineffective approaches - ● Extract RULES that can guide future similar situations - ● Focus on UNDERLYING MECHANISMS rather than surface-level differences - - # Successful Step Sequence - {success_steps} - - # Failed Step Sequence - {failure_steps} - - # Similarity Score: {similarity_score} - - OUTPUT FORMAT: - Generate 1-2 comparative insights as JSON objects: - ```json - [ - {{ - "when_to_use": "Specific scenarios where this comparative insight applies", - "experience": "Detailed comparison highlighting why success approach works better", - "tags": ["comparative_analysis", "success_factors", "relevant_keywords"], - "confidence": 0.8, - "step_type": "reasoning|action|observation|decision" - }} - ] - ``` \ No newline at end of file diff --git a/reme/extension/procedural_memory/summary/failure_extraction.yaml b/reme/extension/procedural_memory/summary/failure_extraction.yaml deleted file mode 100644 index be660ccf..00000000 --- a/reme/extension/procedural_memory/summary/failure_extraction.yaml +++ /dev/null @@ -1,42 +0,0 @@ -failure_step_task_memory_prompt: | - You are an expert AI analyst reviewing failed step sequences from an AI agent execution. - - Your task is to extract learning task memories from failures to prevent similar mistakes in future executions. - Focus on identifying error patterns, missed opportunities, and alternative approaches. - - ANALYSIS FRAMEWORK: - ● FAILURE POINT IDENTIFICATION: Pinpoint where and why the steps went wrong - ● ERROR PATTERN ANALYSIS: Identify recurring mistakes or problematic approaches - ● ALTERNATIVE APPROACHES: Suggest what could have been done differently - ● PREVENTION STRATEGIES: Extract actionable insights to avoid similar failures - - EXTRACTION PRINCIPLES: - ● Extract GENERAL PRINCIPLES as well as SPECIFIC INSTRUCTIONS - ● Focus on PATTERNS and RULES as well as particular instances - - # Original Query - {query} - - # Step Sequence Analysis - {step_sequence} - - # Context Information - {context} - - # Outcome - This step sequence was part of a {outcome} trajectory. - - OUTPUT FORMAT: - Generate 1-3 step-level failure prevention insights as JSON objects: - ```json - [ - {{ - "when_to_use": "Specific situations where this lesson should be remembered", - "experience": "Universal principle or rule extracted from the failure pattern ", - "tags": ["error_prevention", "failure_analysis", "relevant_keywords"], - "confidence": 0.7, - "step_type": "reasoning|action|observation|decision", - "tools_used": ["list", "of", "tools"] - }} - ] - ``` \ No newline at end of file diff --git a/reme/extension/procedural_memory/summary/memory_validation.yaml b/reme/extension/procedural_memory/summary/memory_validation.yaml deleted file mode 100644 index 44287e28..00000000 --- a/reme/extension/procedural_memory/summary/memory_validation.yaml +++ /dev/null @@ -1,29 +0,0 @@ -task_memory_validation_prompt: | - You are an expert AI analyst tasked with validating the quality and usefulness of extracted step-level task memories. - - Your task is to access whether the extracted task memory is actionable, accurate, and valuable for future agent executions. - - VALIDATION CRITERIA: - ● ACTIONABILITY: Is the task memory specific enough to guide future actions? - ● ACCURACY: Does the task memory correctly reflect the patterns observed? - ● RELEVANCE: Is the task memory applicable to similar future scenarios? - ● CLARITY: Is the task memory clearly articulated and understandable? - ● UNIQUENESS: Does the task memory provide novel insights or common knowledge? - - # Task Memory to Validate - Condition: {condition} - Task Memory Content: {task_memory_content} - - OUTPUT FORMAT: - Provide validation assessment: - ```json - {{ - "is_valid": true/false, - "score": 0.8, - "feedback": "Detailed explanation of validation decision", - "recommendations": "Suggestions for improvement if applicable" - }} - ``` - - Score should be between 0.0 (poor quality) and 1.0 (excellent quality). - Mark as invalid if score is below 0.3 or if there are fundamental issues with the task memory. diff --git a/reme/extension/procedural_memory/summary/success_extraction.yaml b/reme/extension/procedural_memory/summary/success_extraction.yaml deleted file mode 100644 index 3ceb7ce6..00000000 --- a/reme/extension/procedural_memory/summary/success_extraction.yaml +++ /dev/null @@ -1,42 +0,0 @@ -success_step_task_memory_prompt: | - You are an expert AI analyst reviewing successful step sequences from an AI agent execution. - - Your task is to extract reusable, actionable step-level task memories that can guide future agent executions. - Focus on identifying specific patterns, techniques, and decision points that contributed to success. - - ANALYSIS FRAMEWORK: - ● STEP PATTERN ANALYSIS: Identify the specific sequence of actions that led to success - ● DECISION POINTS: Highlight critical decisions made during these steps - ● TECHNIQUE EFFECTIVENESS: Analyze why specific approaches worked well - ● REUSABILITY: Extract patterns that can be applied to similar scenarios - - EXTRACTION PRINCIPLES: - ● Focus on TRANSFERABLE TECHNIQUES and decision frameworks - ● Frame insights as actionable guidelines and best practices - - # Original Query - {query} - - # Step Sequence Analysis - {step_sequence} - - # Context Information - {context} - - # Outcome - This step sequence was part of a {outcome} trajectory. - - OUTPUT FORMAT: - Generate 1-3 step-level success insights as JSON objects: - ```json - [ - {{ - "when_to_use": "Specific conditions when this step pattern should be applied", - "experience": "Detailed description of the successful step pattern and why it works", - "tags": ["relevant", "keywords", "for", "categorization"], - "confidence": 0.8, - "step_type": "reasoning|action|observation|decision", - "tools_used": ["list", "of", "tools"] - }} - ] - ``` \ No newline at end of file diff --git a/reme/extension/procedural_memory/summary/trajectory_segmentation.yaml b/reme/extension/procedural_memory/summary/trajectory_segmentation.yaml deleted file mode 100644 index 8a22f3fe..00000000 --- a/reme/extension/procedural_memory/summary/trajectory_segmentation.yaml +++ /dev/null @@ -1,31 +0,0 @@ -step_segmentation_prompt: | - You are an expert AI analyst tasked with segmenting a trajectory into meaningful step sequences. - - Your task is to identify natural breakpoints in the execution where one logical unit of work ends and another begins. - Consider factors like: task completion, context switches, tool changes, reasoning phases, and logical groupings. - - SEGMENTATION CRITERIA: - ● LOGICAL COMPLETION: Steps that complete a specific sub-task or reasoning phase - ● CONTEXT SWITCHES: Points where the agent shifts focus or approach - ● TOOL BOUNDARIES: Natural breaks around tool usage patterns - ● REASONING PHASES: Distinct phases of analysis, planning, or execution - - # Original Query - {query} - - # Full Trajectory (Total steps: {total_steps}) - {trajectory_content} - - OUTPUT FORMAT: - Provide segmentation points as a JSON array of step indices where splits should occur: - ```json - {{ - "segment_points": [3, 7, 12, 18], - "reasoning": "Brief explanation of segmentation logic" - }} - ``` - - Note: Segment points indicate the END of each segment. For example, [3, 7] means: - - Segment 1: steps 0-3 - - Segment 2: steps 4-7 - - Segment 3: steps 8-end \ No newline at end of file diff --git a/reme/extension/translate_ts.yaml b/reme/extension/translate_ts.yaml deleted file mode 100644 index 6f99e4d4..00000000 --- a/reme/extension/translate_ts.yaml +++ /dev/null @@ -1,16 +0,0 @@ -translate_prompt: | - {ts_code} - - 请将上方提供的 TypeScript(TS)代码转换为功能等价的 Python 代码,并满足以下要求: - - 1. 在代码最开始,通过注释简要说明你将如何进行代码转换,包括对 TS 特性的处理策略、Python 替代方案的选择依据等。 - 2. 接着使用注释形式提供一个整体大纲总结,简明扼要地说明该程序的核心逻辑、主要模块或关键步骤。 - 3. 为所有关键代码行添加丰富的中文注释,解释其作用、设计意图或与原 TS 代码的对应关系。 - 4. 保持代码结构清晰、符合 Python 编程规范(如 PEP 8),并尽可能使用 Python 的惯用写法(idiomatic Python)。 - 5. 若 TS 代码中使用了特定类型、接口或高级特性(如泛型、装饰器、Promise 等),请在 Python 中采用合理的方式模拟或替代(例如使用类型提示、async/await、dataclass 等)。 - - 输出格式 - ```python - - ``` - 只输出代码,不要进行额外的总结 \ No newline at end of file diff --git a/reme/memory/file_based/components/cli.yaml b/reme/memory/file_based/components/cli.yaml deleted file mode 100644 index 29dbfb25..00000000 --- a/reme/memory/file_based/components/cli.yaml +++ /dev/null @@ -1,95 +0,0 @@ -system_prompt: | - You are a personal assistant named Remy. - - ## Working Directory - {workspace_dir} - - ## Current Time - {current_time} - - ## Tools - - `read` Read file contents - - `write` Write file contents - - `edit` Edit file contents - - `memory_search` Search your memories via vector store - - **Don't give up easily** — if a tool doesn't return what you expect, try a different angle or approach. - - ## Memory System - You are spun up fresh at the start of every session. These files are how you maintain continuity: - - **Long-term memory:** `MEMORY.md` — when you pick up a lesson or catch yourself making a mistake, feel free to **read, edit, and update** MEMORY.md - - **Daily notes:** `memory/YYYY-MM-DD.md` — jot things down often. When the user says "remember this," or whenever you feel something is worth noting or adding as a todo, feel free to **read, edit, and update** `memory/YYYY-MM-DD.md` - - **Read before you write** — always use `read` to check existing content before updating with `edit` or `write` - - ### Memory Retrieval - 1. Start with `memory_search` — if nothing comes up, try rephrasing from a different angle - 2. To review a specific daily note (`memory/YYYY-MM-DD.md`), use `read` - - ## Response Style 😊 - - Keep it short and natural — talk like a friend, not a manual - - Use emoji sparingly for warmth — no more than 1–2 per reply - - For quick confirmations (yes/no, got it), an emoji is fine (👍, ✅, 🤔) - - When explaining or performing actions, lead with substance over flair - - ## 🛡️ Safety - - Never run destructive commands without asking first - - Prefer `trash` over `rm` — recoverable beats permanent - - When in doubt, ask - - ## Continuous Improvement - This is just a starting point. When you spot useful patterns or lessons during your conversations, note them in `MEMORY.md`. Do not modify system-level config files. - - [has_previous_summary]## Previous Conversation Summary - [has_previous_summary] - [has_previous_summary]{previous_summary} - [has_previous_summary] - [has_previous_summary] - [has_previous_summary]The above is a summary of our earlier conversation. Use it as context to maintain continuity. - -system_prompt_zh: | - 你是一个名叫 Remy 的个人助手。 - - ## 工作目录 - {workspace_dir} - - ## 当前时间 - {current_time} - - ## 工具集合 - - `read` 读取文件内容 - - `write` 写入文件内容 - - `edit` 编辑文件内容 - - `memory_search` 通过向量库检索你的记忆 - - **不要轻易放弃**:如果工具执行结果不符合预期,可以从不同的维度进行不同的尝试。 - - ## 记忆系统 - 每次新会话开始时,你都会被重新唤醒。以下文件是你保持连续性的关键: - - **长期记忆:** `MEMORY.md`:当你学到经验,或者当你犯了错误,可以**自由地阅读、编辑和更新** MEMORY.md - - **每日笔记:** `memory/YYYY-MM-DD.md`:要勤记笔记,当用户说"记住这个",或者你觉得要记笔记/todo,可以**自由地阅读、编辑和更新** `memory/YYYY-MM-DD.md` - - **写入前先读取** — 务必先用 `read` 读取已有内容,再用 `edit` 或 `write` 更新文件 - - ### 记忆检索策略 - 1. 优先使用`memory_search`检索记忆,没有搜索结果可以从不同角度多次尝试 - 2. 如果你需要阅读每日笔记 `memory/YYYY-MM-DD.md`,可以使用`read` - - ## 回应风格 😊 - - 保持简洁自然,像朋友对话一样 - - 适当使用 emoji 增加亲和力,但不要过度 — 每条回复最多 1-2 个 - - 简单确认类场景(是/否、收到)可以用 emoji 快速回应(👍, ✅, 🤔) - - 涉及操作或解释时,优先给出有实质内容的文字回复 - - ## 🛡️ 安全规则 - - 不要在没有询问的情况下运行破坏性命令 - - 优先使用 `trash` 而不是 `rm`(可恢复比永久删除更好) - - 有疑问时,先询问 - - ## 持续改进 - 这只是一个起点。当你在与用户的交互中发现有用的经验或模式,可以记录到 `MEMORY.md` 中。但不要修改系统级配置文件。 - - [has_previous_summary]## 之前的对话摘要 - [has_previous_summary] - [has_previous_summary]{previous_summary} - [has_previous_summary] - [has_previous_summary] - [has_previous_summary]以上是我们之前对话的摘要。使用它作为上下文以保持连续性。 diff --git a/reme/memory/file_based/components/compactor.yaml b/reme/memory/file_based/components/compactor.yaml deleted file mode 100644 index 6fef5383..00000000 --- a/reme/memory/file_based/components/compactor.yaml +++ /dev/null @@ -1,167 +0,0 @@ -system_prompt: | - You are a context compaction assistant. Your role is to create structured summaries of conversations - that can be used to restore context in future sessions. Focus on preserving critical information while reducing token count. - -system_prompt_zh: | - 你是一个上下文压缩助手。你的角色是创建对话的结构化摘要, - 这些摘要可以在未来会话中用于恢复上下文。专注于保留关键信息,同时减少token数量。 - -initial_user_message: | - # Task - Create a structured summary from the conversation above. - - # Rules: - - Keep each section concise - - Preserve exact file paths, function names, and error messages - - # Output Format: - - ## Goal - [What is the user trying to accomplish? Can be multiple items if the session covers different tasks.] - - ## Constraints & Preferences - - [Any constraints, preferences, or requirements mentioned by user] - - [Or "(none)" if none were mentioned] - - ## Progress - ### Done - - [x] [Completed tasks/changes] - - ### In Progress - - [ ] [Current work] - - ### Blocked - - [Issues preventing progress, if any] - - ## Key Decisions - - **[Decision]**: [Brief rationale] - - ## Next Steps - 1. [Ordered list of what should happen next] - - ## Critical Context - - [Any data, examples, or references needed to continue] - - [Or "(none)" if not applicable] - - Output the structured summary following the format above. - -initial_user_message_zh: | - # 任务 - 根据上面的对话创建一个结构化摘要。 - - # 规则: - - 保持每个部分简洁 - - 保留确切的文件路径、函数名称和错误消息 - - # 输出示例: - - ## 目标 - [用户试图完成什么?如果会话涵盖不同任务,可以有多个项目。] - - ## 约束和偏好 - - [任何用户提到的约束、偏好或要求] - - [或者如果没有提到则为"(none)"] - - ## 进展 - ### 已完成 - - [x] [已完成的任务/更改] - - ### 进行中 - - [ ] [当前工作] - - ### 阻塞 - - [如果有任何阻碍进展的问题] - - ## 关键决策 - - **[决策]**: [简短理由] - - ## 下一步 - 1. [接下来应该发生的事情的有序列表] - - ## 关键上下文 - - [任何继续工作所需的数据、示例或参考资料] - - [或者如果不适用则为"(none)"] - - 请按照上面示例的格式,输出结构化摘要。 - -update_user_message: | - # Task - Update the structured summary with new conversation messages. - - # Rules: - - PRESERVE all existing information from the previous summary - - ADD new progress, decisions, and context from the new messages - - UPDATE the Progress section: move items from "In Progress" to "Done" when completed - - UPDATE "Next Steps" based on what was accomplished - - PRESERVE exact file paths, function names, and error messages - - If something is no longer relevant, you may remove it - - # Output Format: - - ## Goal - [Preserve existing goals, add new ones if the task expanded] - - ## Constraints & Preferences - - [Preserve existing, add new ones discovered] - - ## Progress - ### Done - - [x] [Include previously done items AND newly completed items] - - ### In Progress - - [ ] [Current work - update based on progress] - - ### Blocked - - [Current blockers - remove if resolved] - - ## Key Decisions - - **[Decision]**: [Brief rationale] (preserve all previous, add new) - - ## Next Steps - 1. [Update based on current state] - - ## Critical Context - - [Preserve important context, add new if needed] - - Output the structured summary following the format above. - -update_user_message_zh: | - # 任务 - 使用新的对话内容来更新结构化摘要。 - - # 规则: - - 保留来自先前摘要的所有现有信息 - - 从新消息中添加新的进展、决策和上下文 - - 更新进度部分:当完成时将项目从"进行中"移到"已完成" - - 根据已完成的内容更新"下一步" - - 保留确切的文件路径、函数名称和错误消息 - - 如果某些内容不再相关,您可以删除它 - - # 输出示例: - - ## 目标 - [保留现有目标,如果任务扩展则添加新目标] - - ## 约束和偏好 - - [保留现有内容,添加发现的新内容] - - ## 进展 - ### 已完成 - - [x] [包含以前完成的项目和新完成的项目] - - ### 进行中 - - [ ] [当前工作 - 根据进展更新] - - ### 阻塞 - - [当前阻塞问题 - 如果解决则删除] - - ## 关键决策 - - **[决策]**: [简短理由](保留所有之前的内容,添加新的) - - ## 下一步 - 1. [根据当前状态更新] - - ## 关键上下文 - - [保留重要上下文,如需要则添加新的] - - 请按照上面示例的格式,输出结构化摘要。 diff --git a/reme/memory/file_based/components/summarizer.yaml b/reme/memory/file_based/components/summarizer.yaml deleted file mode 100644 index 14599f71..00000000 --- a/reme/memory/file_based/components/summarizer.yaml +++ /dev/null @@ -1,62 +0,0 @@ -user_message: | - Memory Pre-compression Flush Cycle. - - The current session is about to enter the automatic compression phase. Please capture persistent memory AND session reflections, then write them to disk. - - Current date: {date} - Working directory: {working_dir} - - # Task - Immediately store persistent memory and reflections to: {memory_dir}/YYYY-MM-DD.md - - # Workflow - 1. Extract and synthesize content from the current session: - - Persistent Memory: Facts, user profile updates, project states, and important events. - - Experience Reflection: Reusable thinking logic derived from user feedback, successful problem-solving strategies, mistakes made/pitfalls to avoid, and actionable insights for future interactions. - 2. `read` {memory_dir}/YYYY-MM-DD.md (if the file doesn’t exist, an error message will be returned) - - If the file doesn’t exist, use `write` tool directly. - - If the file exists, intelligently merge new information with existing content, prefer using `edit` to update specific sections. - - Use `write` to overwrite the entire file only if substantial restructuring is required. - - # Principles - - Intelligently merge new information with existing content: - - Categorize clearly (e.g., separate "Factual Memory" from "Reflections & Logic"). - - Avoid duplicating already recorded information. - - Enrich existing entries with new details where relevant. - - Maintain chronological order wherever applicable. - - Always preserve timestamps and any date/time-related context. - - Add only genuinely new or meaningfully enriching information. - - Reflections MUST focus on forming reusable cognitive frameworks based on user feedback, aiming to improve future task execution. - - Keep entries concise yet complete. - - If there’s nothing to store or reflect on, respond with [SILENT]. - -user_message_zh: | - 预压缩内存刷新轮次。 - - 当前会话即将进入自动压缩阶段;请将持久化记忆与经验反思捕获并写入磁盘。 - - 当前日期:{date} - 工作目录:{working_dir} - - # 任务 - 立即存储持久化记忆与反思(使用路径 {memory_dir}/YYYY-MM-DD.md)。 - - # 工作流程 - 1. 从当前会话中提取并综合两类内容: - - 持久化记忆:客观事实、用户信息更新、项目状态及重要事件。 - - 经验反思:基于用户反馈形成的可复用思考逻辑、成功的问题解决策略、犯下的错误/应避免的陷阱,以及对未来交互有帮助的行动指南。 - 2. `read` {memory_dir}/YYYY-MM-DD.md(如文件不存在,会返回错误提示) - - 若文件不存在,直接使用 `write` 工具写入。 - - 若文件已存在,智能合并新信息与现有内容,尽可能使用 `edit` 更新特定部分,仅在需要大幅重构时使用 `write` 覆盖整个文件。 - - # 原则 - - 智能合并新信息与现有内容: - - 将内容进行清晰的分类(例如明确区分“事实记忆”与“反思与逻辑”)。 - - 避免重复已记录的信息。 - - 在相关时丰富现有条目的新细节。 - - 在适用时保持时间顺序。 - - 始终保留时间戳、日期和时间相关上下文。 - - 仅添加真正新的或有丰富价值的信息。 - - 反思内容必须侧重于根据用户反馈构建可复用的思维逻辑,以改善未来的任务执行。 - - 保持条目简洁但完整。 - - 若无任何新内容可存储或反思,请回复 [SILENT]。 \ No newline at end of file diff --git a/reme/memory/vector_based/personal/personal_retriever.yaml b/reme/memory/vector_based/personal/personal_retriever.yaml deleted file mode 100644 index c52ae16f..00000000 --- a/reme/memory/vector_based/personal/personal_retriever.yaml +++ /dev/null @@ -1,77 +0,0 @@ -user_message_s1: | - You are a Profile Retrieval Agent specialized in finding profile information about {memory_target}. - - ## User Question - {context} - - ## Task - Use the available profile tool to search for profile content that is relevant to the user question. - - ## Instructions - - If `retrieve_profile` is available, use it to search with focused profile queries derived from the question - - If `read_all_profiles` is available, use it to inspect the full profile list and identify relevant rows - - Focus on profile attributes such as identity, location, work, education, preferences, relationships, and other long-term facts - - Only retrieve information that is directly relevant to the user question - - If no relevant profile information exists, say so clearly - - Output a concise summary of the relevant profile information you found. - -user_message_s2: | - You are a Memory Retrieval Agent specialized in retrieving {memory_type} memories about {memory_target}. - - ## Profile Search Results - {profiles} - - ## User Question - {context} - - ## Multi-Phase Retrieval Strategy - Follow these phases sequentially to gather comprehensive information: - - ### Phase 1: Semantic Search (No Time Filter) - **Tool**: `retrieve_memory` (without time constraints) - **Objective**: Cast a wide net to find potentially relevant memories - **Approach**: - - Use the profile search results above as supporting context when forming retrieval queries - - Execute 3-5 diverse search queries using different formulations: - * Original question verbatim - * Rephrased variations (different wording, synonyms) - * Entity-focused queries (extract and search specific names, places, events) - * Keyword-based searches (core concepts and profile facts) - * Related context queries (broader themes) - - ### Phase 2(Optional): Temporal Search - **Tool**: `retrieve_memory` (with time filter) - **When to use**: Only if the user's question includes a time-related reference; otherwise, go straight to Phase 3. - **Time Filter Format**: - - Single date: `20200101` - - Date range: `20200101,20200102` (inclusive: 20200101 ≤ time ≤ 20200102) - - Before date: `0,20200102` (up to and including 20200102) - - After date: `20200101,99999999` (from 20200101 onwards) - **Approach**: - - Identify temporal constraints from the user question - - Refine Phase 1 queries with 3-5 diverse appropriate time filters - - ### Phase 3: Deep Dive into History - **Tool**: `read_history` - **When to use**: After exhausting retrieval attempts OR when specific conversation context is needed - **Important Constraints**: - - Each history is very long and resource-intensive to read - - **Maximum limit: Read no more than 3 histories total** - - Only use this phase when absolutely necessary for answering the question - **Approach**: - - Extract `history_id` from retrieved memory references - - Prioritize the most relevant or recent histories - - Can read multiple histories at once by passing multiple history_ids - - Be selective: choose only the top 1-3 most promising histories - - Use this to understand the full conversation surrounding a memory - - ## Response Guidelines - - Base your answer EXCLUSIVELY on the profile search results, retrieved memories, and history data - - Never infer, assume, or hallucinate information - - Always cite sources with timestamps: `[timestamp] Memory content` - - Present conflicting information transparently with respective timestamps - - If you find sufficient information to answer the user's question, you may output directly without exhausting all search phases - - Exhaust all search strategies before concluding information doesn't exist - - Output a summary of all retrieved memories and relevant history data. diff --git a/reme/memory/vector_based/personal/personal_summarizer.yaml b/reme/memory/vector_based/personal/personal_summarizer.yaml deleted file mode 100644 index 83befa96..00000000 --- a/reme/memory/vector_based/personal/personal_summarizer.yaml +++ /dev/null @@ -1,55 +0,0 @@ -user_message_s1: | - You are a Memory Agent responsible for managing {memory_type} memories about {memory_target}. - - ## Latest Conversation - Format: round [] : - {context} - - ## Task - ### Step 1: Create Memory Draft - Use `add_draft_and_retrieve_similar_memory` to create a memory draft list based on the latest conversation. - - For each memory draft, fill in the required parameters: - * `message_time`: timestamp from the conversation (e.g., '2020-01-01 00:00:00') - * `memory_content`: concise memory content extracted from the conversation - - Use actual names from the conversation (e.g., "Bob likes apples") instead of generic references (e.g., "user likes apples") - - Extract all important information comprehensively—do not miss critical details, but avoid any fabrications or unfounded assumptions - - The tool will retrieve similar historical memories via vector search to help you in Step 2 - - ### Step 2: Add New Memories - Review each memory draft from Step 1 and compare it with the retrieved historical memories, then use `add_memory` to add new memories: - - **Parameters for each memory:** - - `message_time`: timestamp from the conversation (e.g., '2020-01-01 00:00:00') - - `memory_content`: memory content - **When to skip:** - - **Skip** drafts if their content is already fully covered by historical memories (avoid redundancy) - -user_message_s2: | - You are a User Profile Agent responsible for managing user profiles about {memory_target}. - - ## Latest Conversation - Format: round [] : - {context} - - ## Current User Profiles - {profiles} - - ## Task - Analyze the Latest Conversation and use `update_profiles` to manage user profiles (both updates and additions in one call): - - **For profiles_to_update** (updating existing user profiles): - - For each profile to update, fill in the required parameters: - * `profile_id`: ID of the profile to update (from Current User Profiles) - * `message_time`: timestamp from the conversation (e.g., '2020-01-01 00:00:00') - * `profile_key`: key (e.g., 'name', 'age', 'occupation') - * `profile_value`: value (e.g., 'John Smith') - - **For profiles_to_add** (adding new user profiles): - - For each new profile, fill in the required parameters: - * `message_time`: timestamp from the conversation (e.g., '2020-01-01 00:00:00') - * `profile_key`: key (e.g., 'name', 'age', 'occupation') - * `profile_value`: value (e.g., 'John Smith') - - **General Guidelines:** - - Avoid any fabrications or unfounded assumptions - - You can update and add user profiles in a single tool call diff --git a/reme/memory/vector_based/procedural/procedural_retriever.yaml b/reme/memory/vector_based/procedural/procedural_retriever.yaml deleted file mode 100644 index 165c811c..00000000 --- a/reme/memory/vector_based/procedural/procedural_retriever.yaml +++ /dev/null @@ -1,43 +0,0 @@ -user_message: | - You are a Memory Retrieval Agent specialized in retrieving {memory_type} memories about {memory_target}. - - ## User Task/Context - {context} - - ## Retrieval Strategy - Follow these phases to gather comprehensive procedural knowledge: - - ### Phase 1: Semantic Search - **Tool**: `retrieve_memory` - **Objective**: Find relevant procedural knowledge (workflows, best practices, lessons learned) - **Approach**: - - Execute 3-5 diverse search queries using different formulations: - * Task-oriented queries (e.g., "how to accomplish X", "steps for Y") - * Experience-based queries (e.g., "successful approach for X", "what worked for Y") - * Problem-focused queries (e.g., "common issues with X", "solutions for Y") - * Pattern-based queries (e.g., "best practices for X", "recommended workflow for Y") - * Context-specific queries (extract specific tools, techniques, or domains mentioned) - - ### Phase 2: Deep Dive into History - **Tool**: `read_history` - **When to use**: After exhausting retrieval attempts OR when specific execution context is needed - **Important Constraints**: - - Each history is very long and resource-intensive to read - - **Maximum limit: Read no more than 3 histories total** - - Only use this phase when absolutely necessary for understanding the full execution context - **Approach**: - - Extract `history_id` from retrieved memory references - - Prioritize the most relevant histories - - Can read multiple histories at once by passing multiple history_ids - - Be selective: choose only the top 1-3 most promising histories - - Use this to understand the complete task execution flow surrounding a memory - - ## Response Guidelines - - Base your answer EXCLUSIVELY on retrieved procedural memories and history data - - Focus on actionable "how-to" knowledge: workflows, steps, best practices - - Never infer, assume, or hallucinate procedures not found in memories - - Highlight both success patterns and failure lessons when available - - If you find sufficient information to answer the user's question, you may output directly without exhausting all search phases - - Exhaust all search strategies before concluding information doesn't exist - - Output a summary of all retrieved procedural memories and relevant history data. diff --git a/reme/memory/vector_based/procedural/procedural_summarizer.yaml b/reme/memory/vector_based/procedural/procedural_summarizer.yaml deleted file mode 100644 index 1b4990bf..00000000 --- a/reme/memory/vector_based/procedural/procedural_summarizer.yaml +++ /dev/null @@ -1,35 +0,0 @@ -user_message: | - You are a Memory Agent responsible for managing {memory_type} memories about {memory_target}. - - ## Task Execution History - {context} - - ## Task - ### Step 1: Create Memory Draft - Use `add_draft_and_retrieve_similar_memory` to create a memory draft list based on the task execution history. - - For each memory draft, fill in the required parameters: - * `memory_content`: concise procedural knowledge extracted from the execution - - Focus on extracting actionable "how-to" knowledge: - * Successful approaches: "When doing X, approach Y works well because..." - * Failure patterns: "Avoid doing X when Y because it leads to..." - * Best practices: "Always check X before doing Y to ensure..." - * Workflow patterns: "The optimal sequence for X is: step1 → step2 → step3" - * Problem-solution pairs: "When encountering X issue, the solution is Y" - - Extract all important procedural insights comprehensively—do not miss critical patterns - - The tool will retrieve similar historical memories via vector search to help you in Step 2 - - ### Step 2: Add New Memories - Review each memory draft from Step 1 and compare it with the retrieved historical memories, then use `add_memory` to add new memories: - - **Parameters for each memory:** - - `memory_content`: procedural knowledge content - - **When to add:** - - Add memories that capture unique procedural insights not already covered - - Add memories that provide more specific/detailed guidance than existing ones - - Add memories that document new success patterns or failure lessons - - **When to skip:** - - **Skip** drafts if their content is already fully covered by historical memories (avoid redundancy) - - **Skip** drafts that are too generic or not actionable - - **Skip** drafts that describe facts rather than procedures (e.g., "X happened" vs "When X happens, do Y") diff --git a/reme/memory/vector_based/reme_retriever.yaml b/reme/memory/vector_based/reme_retriever.yaml deleted file mode 100644 index 9b5ea8af..00000000 --- a/reme/memory/vector_based/reme_retriever.yaml +++ /dev/null @@ -1,27 +0,0 @@ -system_prompt: | - You are a Memory Orchestrator responsible for routing memory retrieval tasks to specialized agents based on the context. - - # Context - {context} - - ## Available Memory Agents - Each line below is a JSON object representing a specialized Memory Agent: - - `agent`: Description of what this agent specializes in - - `memory_target`: The unique identifier for this agent (THIS IS WHAT YOU MUST USE) - - {meta_memory_info} - - ## Your Task - Analyze the context and delegate retrieval tasks to appropriate specialized agents: - 1. Examine the context content and identify which memory_target(s) from the "Available Memory Agents" list above should be queried for relevant information - 2. For each relevant memory_target, delegate the retrieval task to its corresponding specialized agent - - **CRITICAL**: The memory_target must be EXACTLY one of the `memory_target` field values from the JSON objects listed in "Available Memory Agents" above - - **DO NOT** extract or create new memory_target names from the context content - - **DO NOT** use topic names, entity names, descriptions, or any other identifiers from the context as memory_targets - - **DO NOT** use the agent description text as memory_target - - **ONLY** use the exact string values from the `memory_target` fields in the JSON objects above - - Each memory_target should be assigned **only once** - do not duplicate assignments - 3. Use the `delegate_task` tool **once** with all relevant memory_target(s) to enable parallel processing by specialized agents - -user_message: | - Please analyze the context and delegate retrieval tasks to the appropriate specialized agents. \ No newline at end of file diff --git a/reme/memory/vector_based/reme_summarizer.yaml b/reme/memory/vector_based/reme_summarizer.yaml deleted file mode 100644 index 7d235060..00000000 --- a/reme/memory/vector_based/reme_summarizer.yaml +++ /dev/null @@ -1,29 +0,0 @@ -system_prompt: | - You are a Memory Orchestrator responsible for routing memory summarization tasks to specialized agents based on the context. - - # Context - {context} - - ## Available Memory Agents - Each line below is a JSON object representing a specialized Memory Agent: - - `agent`: Description of what this agent specializes in - - `memory_target`: The unique identifier for this agent (THIS IS WHAT YOU MUST USE) - - {meta_memory_info} - - ## Your Task - Analyze the context and delegate summarization tasks to appropriate specialized agents: - 1. Examine the context content and identify which memory_target(s) from the "Available Memory Agents" list above should receive this information - 2. For each relevant memory_target, delegate the summarization task to its corresponding specialized agent - - **CRITICAL**: The memory_target must be EXACTLY one of the `memory_target` field values from the JSON objects listed in "Available Memory Agents" above - - **DO NOT** extract or create new memory_target names from the context content - - **DO NOT** use topic names, preference categories, descriptions, or any other identifiers from the context as memory_targets - - **DO NOT** use the agent description text as memory_target - - **ONLY** use the exact string values from the `memory_target` fields in the JSON objects above - - Each memory_target should be assigned **only once** - do not duplicate assignments - 3. Use the `delegate_task` tool **once** with all relevant memory_target(s) to enable parallel processing by specialized agents - - Note: If the context contains no memorable information (e.g., simple greetings), return ``. - -user_message: | - Please analyze the context and delegate summarization tasks to the appropriate specialized agents. diff --git a/reme/memory/vector_based/tool_call/tool_retriever.yaml b/reme/memory/vector_based/tool_call/tool_retriever.yaml deleted file mode 100644 index 9d748b70..00000000 --- a/reme/memory/vector_based/tool_call/tool_retriever.yaml +++ /dev/null @@ -1,44 +0,0 @@ -user_message: | - You are a Memory Retrieval Agent specialized in retrieving {memory_type} memories about {memory_target}. - - ## User Task/Context - {context} - - ## Retrieval Strategy - Follow these phases to gather comprehensive tool usage knowledge: - - ### Phase 1: Semantic Search - **Tool**: `retrieve_memory` - **Objective**: Find relevant tool usage experiences (successful patterns, failure lessons, parameter insights) - **Approach**: - - Execute 3-5 diverse search queries using different formulations: - * Tool-specific queries (e.g., "how to use tool X", "parameters for tool Y") - * Scenario-based queries (e.g., "which tool for task X", "tool selection for Y") - * Problem-focused queries (e.g., "tool X failed because", "error handling for tool Y") - * Parameter-focused queries (e.g., "optimal parameters for X", "configuration for Y") - * Success pattern queries (e.g., "successful use of tool X", "best results with Y") - - ### Phase 2: Deep Dive into History - **Tool**: `read_history` - **When to use**: After exhausting retrieval attempts OR when specific tool invocation context is needed - **Important Constraints**: - - Each history is very long and resource-intensive to read - - **Maximum limit: Read no more than 3 histories total** - - Only use this phase when absolutely necessary for understanding the full tool usage context - **Approach**: - - Extract `history_id` from retrieved memory references - - Prioritize the most relevant histories - - Can read multiple histories at once by passing multiple history_ids - - Be selective: choose only the top 1-3 most promising histories - - Use this to understand the complete tool invocation flow surrounding a memory - - ## Response Guidelines - - Base your answer EXCLUSIVELY on retrieved tool memories and history data - - Focus on actionable tool usage knowledge: when to use, how to configure, what to avoid - - Never infer, assume, or hallucinate tool behaviors not found in memories - - Highlight both successful patterns and failure lessons when available - - Include specific parameter recommendations when available - - If you find sufficient information to answer the user's question, you may output directly without exhausting all search phases - - Exhaust all search strategies before concluding information doesn't exist - - Output a summary of all retrieved tool memories and relevant history data. diff --git a/reme/memory/vector_based/tool_call/tool_summarizer.yaml b/reme/memory/vector_based/tool_call/tool_summarizer.yaml deleted file mode 100644 index fa365c2d..00000000 --- a/reme/memory/vector_based/tool_call/tool_summarizer.yaml +++ /dev/null @@ -1,36 +0,0 @@ -user_message: | - You are a Memory Agent responsible for managing {memory_type} memories about {memory_target}. - - ## Task Execution History - {context} - - ## Task - ### Step 1: Create Memory Draft - Use `add_draft_and_retrieve_similar_memory` to create a memory draft list based on the task execution history. - - For each memory draft, fill in the required parameters: - * `memory_content`: concise tool usage knowledge extracted from the execution - - Focus on extracting actionable tool usage insights: - * Successful patterns: "Tool X works well for task Y with parameters Z" - * Failure lessons: "Tool X fails when Y because Z, use alternative A instead" - * Parameter insights: "For best results with tool X, set parameter Y to Z" - * Selection guidance: "When facing scenario X, prefer tool Y over Z because..." - * Error handling: "If tool X returns error Y, the solution is Z" - - Extract all important tool usage insights comprehensively—do not miss critical patterns - - The tool will retrieve similar historical memories via vector search to help you in Step 2 - - ### Step 2: Add New Memories - Review each memory draft from Step 1 and compare it with the retrieved historical memories, then use `add_memory` to add new memories: - - **Parameters for each memory:** - - `memory_content`: tool usage knowledge content - - **When to add:** - - Add memories that capture unique tool usage insights not already covered - - Add memories that provide more specific parameter recommendations - - Add memories that document new success patterns or failure lessons - - Add memories that clarify tool selection criteria - - **When to skip:** - - **Skip** drafts if their content is already fully covered by historical memories (avoid redundancy) - - **Skip** drafts that are too generic or not actionable - - **Skip** drafts that describe tool invocations without insights (e.g., "Tool X was called" vs "Tool X succeeded because Y") diff --git a/reme4/pyproject.toml b/reme4/pyproject.toml deleted file mode 100644 index cbc803b3..00000000 --- a/reme4/pyproject.toml +++ /dev/null @@ -1,87 +0,0 @@ -[project] -name = "reme4" -dynamic = ["version"] -description = "Remember Me, Refine Me." -authors = [ - { name = "EconML team of Alibaba Tongyi Lab", email = "jinli.yl@alibaba-inc.com" }, -] -license = "Apache-2.0" -requires-python = ">=3.11" -keywords = ["llm", "memory", "agent", "agentscope", "ai", "mcp", "reme"] - -classifiers = [ - "Development Status :: 4 - Beta", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.11", - "Operating System :: OS Independent", - "Intended Audience :: Developers", - "Intended Audience :: Science/Research", - "Topic :: Scientific/Engineering :: Artificial Intelligence", -] - -dependencies = [ - "aiofiles>=24.1.0", - "croniter>=2.0", - "fastapi>=0.135.1", - "fastmcp>=3.1.0", - "httpx>=0.28.1", - "loguru>=0.7.3", - "mistletoe>=1.5.1", - "numpy>=2.2.6", - "openai>=2.26.0", - "pydantic>=2.12.5", - "python-frontmatter>=1.1.0", - "pyyaml>=6.0.3", - "rich>=14.3.3", - "uvicorn>=0.41.0", - "watchfiles>=1.1.1", - "zstandard>=0.23.0", -] - -[project.optional-dependencies] -core = [ - "agentscope>=2.0.2", - "faiss-cpu>=1.13.2", - "jieba>=0.42.1", - "rjieba>=0.2.1", - "neo4j>=6.2.0", - "networkx>=3.4.2", -] -dev = [ - "pre-commit", - "pytest>=8.0", - "pytest-asyncio>=0.23", -] -full = [ - "reme4[core]", - "reme4[dev]", -] - -[project.urls] -Homepage = "https://github.com/agentscope-ai/ReMe" -Documentation = "https://reme.agentscope.io/" -Repository = "https://github.com/agentscope-ai/ReMe" - -[project.scripts] -reme = "reme4.reme:main" - -[tool.setuptools] -packages = { find = { where = [".."], include = ["reme4*"] } } -include-package-data = true - -[tool.setuptools.package-data] -"*" = ["py.typed", "**/*.yaml", "**/*.json"] -"reme4.components.tokenizer" = ["stopwords"] - -[tool.setuptools.dynamic] -version = { attr = "reme4.__version__" } - -[build-system] -requires = ["setuptools>=45", "wheel"] -build-backend = "setuptools.build_meta" - -[tool.pytest.ini_options] -asyncio_default_fixture_loop_scope = "function" -testpaths = ["../tests4"] -python_files = ["test_*.py"] -python_functions = ["test_*"] diff --git a/reme_ai/agent/react/agentic_retrieve_prompt.yaml b/reme_ai/agent/react/agentic_retrieve_prompt.yaml deleted file mode 100644 index 84e65a6c..00000000 --- a/reme_ai/agent/react/agentic_retrieve_prompt.yaml +++ /dev/null @@ -1,5 +0,0 @@ -system_prompt: | - You are a helpful assistant. The current time is {time}. - -system_prompt_zh: | - 你是一个有用的助手。当前时间是 {time}。 diff --git a/reme_ai/agent/tools/llm_mock_search_prompt.yaml b/reme_ai/agent/tools/llm_mock_search_prompt.yaml deleted file mode 100644 index 47183407..00000000 --- a/reme_ai/agent/tools/llm_mock_search_prompt.yaml +++ /dev/null @@ -1,76 +0,0 @@ -classification_prompt: | - You are a query complexity classifier. Analyze the following search query and classify it into one of three categories: - - 1. **simple** - Simple factual queries that: - - Ask for a single, direct fact - - Have a clear, unambiguous answer - - Require minimal context or explanation - - Examples: "What is the capital of France?", "Who invented the telephone?", "When did World War 2 end?" - - 2. **medium** - Medium complexity queries that: - - Require some explanation or context - - May involve multiple related facts - - Need balanced depth without being exhaustive - - Examples: "How does photosynthesis work?", "What are the main causes of climate change?", "Explain blockchain technology" - - 3. **complex** - Complex research queries that: - - Require comprehensive, multi-dimensional analysis - - Involve multiple subtopics or perspectives - - Need in-depth exploration and connections - - Examples: "Analyze the impact of AI on the global economy", "Compare different renewable energy solutions", "What are the geopolitical implications of space exploration?" - - Query to classify: {query} - - Respond with ONLY one word: simple, medium, or complex. - -classification_prompt_zh: | - 你是一个查询复杂度分类器。分析以下搜索查询并将其分类为以下三类之一: - - 1. **simple** - 简单事实查询: - - 询问单一、直接的事实 - - 有明确、无歧义的答案 - - 需要最少的上下文或解释 - - 示例:"法国的首都是什么?"、"谁发明了电话?"、"第二次世界大战何时结束?" - - 2. **medium** - 中等复杂度查询: - - 需要一些解释或上下文 - - 可能涉及多个相关事实 - - 需要平衡的深度但不需要详尽无遗 - - 示例:"光合作用如何工作?"、"气候变化的主要原因是什么?"、"解释区块链技术" - - 3. **complex** - 复杂研究查询: - - 需要全面、多维度的分析 - - 涉及多个子主题或观点 - - 需要深入探索和联系 - - 示例:"分析人工智能对全球经济的影响"、"比较不同的可再生能源解决方案"、"太空探索的地缘政治影响是什么?" - - 要分类的查询:{query} - - 只用一个词回答:simple、medium 或 complex。 - -generation_prompt: | - You are a search engine generating mock search results. Generate a {content_length} response for the following query. - - Query: {query} - Complexity Level: {complexity} - - Instructions based on content length: - - **short**: Provide a concise answer in 1-3 sentences. Be direct and factual. - - **medium**: Provide a balanced answer in 2-4 paragraphs. Include key details and some context. - - **long**: Provide a comprehensive answer in 4-6 paragraphs. Include multiple perspectives, detailed explanations, and relevant context. - - Generate the search result content now: - -generation_prompt_zh: | - 你是一个搜索引擎,正在生成模拟搜索结果。为以下查询生成一个 {content_length} 的响应。 - - 查询:{query} - 复杂度级别:{complexity} - - 根据内容长度的指示: - - **short**(短):提供 1-3 句话的简洁答案。要直接和事实性。 - - **medium**(中):提供 2-4 段的平衡答案。包括关键细节和一些上下文。 - - **long**(长):提供 4-6 段的全面答案。包括多个角度、详细解释和相关上下文。 - - 现在生成搜索结果内容: - diff --git a/reme_ai/config/default.yaml b/reme_ai/config/default.yaml deleted file mode 100644 index 71affd52..00000000 --- a/reme_ai/config/default.yaml +++ /dev/null @@ -1,373 +0,0 @@ -backend: http -thread_pool_max_workers: 64 - -mcp: - transport: sse - host: "0.0.0.0" - port: 8002 - -http: - host: "0.0.0.0" - port: 8002 - timeout_keep_alive: 600 - limit_concurrency: 64 - -flow: - retrieve_task_memory: - flow_content: BuildQueryOp() >> RecallVectorStoreOp() >> RerankMemoryOp(enable_llm_rerank=False, enable_score_filter=False, top_k=5) >> RewriteMemoryOp(enable_llm_rewrite=False) - description: "Retrieves the most relevant top-k memory experiences from historical data based on the current query to enhance task-solving capabilities" - input_schema: - query: - type: string - description: "user query" - required: true - - summary_task_memory: - flow_content: TrajectoryPreprocessOp(success_threshold=1.0) >> (SuccessExtractionOp()|FailureExtractionOp()|ComparativeExtractionOp(enable_soft_comparison=True)) >> MemoryValidationOp(validation_threshold=0.5) >> MemoryDeduplicationOp() >> UpdateVectorStoreOp() - description: "Summarizes conversation trajectories or messages into structured memory representations for long-term storage" - input_schema: - trajectories: - type: array - description: "A list of conversation trajectory information, including message content and score. This field does not need to be filled in, the system will complete it automatically." - required: false - - retrieve_task_memory_simple: - flow_content: BuildQueryOp() >> RecallVectorStoreOp() >> MergeMemoryOp() - description: "Retrieves the most relevant top-k memory experiences from historical data based on the current query to enhance task-solving capabilities" - input_schema: - query: - type: string - description: "user query" - required: true - - summary_task_memory_simple: - flow_content: SimpleSummaryOp() >> UpdateVectorStoreOp() - description: "Summarizes conversation trajectories or messages into structured memory representations for long-term storage" - input_schema: - trajectories: - type: array - description: "A list of conversation trajectory information, including message content and score. This field does not need to be filled in, the system will complete it automatically." - required: false - - retrieve_personal_memory: - flow_content: SetQueryOp() >> (ExtractTimeOp() | (RetrieveMemoryOp() >> SemanticRankOp())) >> FuseRerankOp() - description: "Retrieves the most relevant personal memories from historical data based on the query to enhance response quality" - input_schema: - query: - type: string - description: "user query" - required: true - - summary_personal_memory: - flow_content: InfoFilterOp() >> (GetObservationOp() | GetObservationWithTimeOp() | LoadTodayMemoryOp()) >> ContraRepeatOp() >> UpdateVectorStoreOp() - description: "Consolidates user observations and memories by filtering information and removing redundancies for efficient storage" - input_schema: - trajectories: - type: array - description: "A list of conversation trajectory information, including message content and score. This field does not need to be filled in, the system will complete it automatically." - required: false - - retrieve_tool_memory: - flow_content: RetrieveToolMemoryOp() - description: "Retrieves tool memories from the vector database based on tool names to provide tool usage patterns and best practices" - input_schema: - tool_names: - type: string - description: "Comma-separated tool names (e.g., 'tool_name1,tool_name2')" - required: true - - add_tool_call_result: - flow_content: ParseToolCallResultOp(max_history_tool_call_cnt=100, evaluation_sleep_interval=1.0) >> UpdateVectorStoreOp() - description: "Evaluates and adds tool call results to the tool memory database, creating new memory or updating existing memory for the specified tool" - input_schema: - tool_call_results: - type: array - description: "List of tool call result objects, each containing: tool_name, input, output, success, time_cost, token_cost, create_time" - required: true - - summary_tool_memory: - flow_content: SummaryToolMemoryOp(recent_call_count=20, summary_sleep_interval=1.0) >> UpdateVectorStoreOp() - description: "Analyzes tool call history and generates comprehensive usage patterns, best practices, and recommendations for the specified tools" - input_schema: - tool_names: - type: string - description: "Comma-separated tool names to summarize (e.g., 'tool_name1,tool_name2')" - required: true - - use_mock_search: - flow_content: UseMockSearchOp() - description: "Simulates intelligent search tool selection and execution based on query complexity, with automatic tool memory recording" - input_schema: - query: - type: string - description: "User search query to process" - required: true - - vector_store: - flow_content: VectorStoreActionOp() - description: "Directly operates on the vector store with various management actions" - input_schema: - action: - type: string - description: "vector store operations" - required: true - enum: [ copy, delete, delete_ids, dump, load, list] - - record_task_memory: - flow_content: UpdateMemoryFreqOp() >> UpdateMemoryUtilityOp() >> UpdateVectorStoreOp() - description: "Update the freq & utility attributes of retrieved task memories" - input_schema: - workspace_id: - type: string - description: "workspace id" - required: true - memory_dicts: - type: array - description: "A list of retrieved task memory corresponding to the current task." - required: true - update_utility: - type: boolean - description: "Whether to update the utility attribute of the retrieved task memory." - required: true - - delete_task_memory: - flow_content: DeleteMemoryOp() >> UpdateVectorStoreOp() - description: "Delete task memories when utility/freq < utility_threshold and freq >= freq_threshold" - input_schema: - workspace_id: - type: string - description: "workspace id" - required: true - freq_threshold: - type: integer - description: "The retrieved frequency threshold for deleting task memory." - required: true - utility_threshold: - type: number - description: "The utility/freq threshold for deleting task memory." - required: true - - react: - flow_content: SimpleReactOp() - description: "React to the current task with an agent" - input_schema: - query: - type: string - description: "user query" - required: true - - agentic_retrieve: - flow_content: AgenticRetrieveOp() - - summary_working_memory: - flow_content: MessageOffloadOp() >> BatchWriteFileOp() - description: "Summarizes working memory by compacting tool messages and compressing conversation history. First compacts large tool messages by storing full content in external files, then applies LLM-based compression if compaction ratio exceeds threshold. This helps reduce token usage while preserving important information." - input_schema: - messages: - type: array - description: "List of conversation messages to process for working memory summarization" - required: true - working_summary_mode: - type: string - description: "Working summary strategy: 'compact' only compacts large tool messages, 'compress' only applies LLM-based compression, 'auto' first compacts then optionally compresses when reduction is insufficient. Defaults to 'auto'." - required: false - enum: ["compact", "compress", "auto"] - compact_ratio_threshold: - type: number - description: "Only used in 'auto' mode. Threshold for compaction ratio (tokens after compaction divided by original tokens). When the ratio is greater than this value, an additional LLM-based compression pass is triggered. Defaults to 0.75." - required: false - max_total_tokens: - type: integer - description: "Maximum token count threshold for triggering compression/compaction. For compaction, this is the total token count threshold. For compression, this excludes keep_recent_count messages and system messages. Defaults to 20000." - required: false - max_tool_message_tokens: - type: integer - description: "Maximum token count per tool message before compaction is applied. Tool messages exceeding this threshold will have their full content stored in external files with only a preview kept in context. Defaults to 2000." - required: false - group_token_threshold: - type: integer - description: "Maximum token count per compression group when using LLM-based compression. If None or 0, all messages are compressed in a single group. Messages exceeding this threshold individually will form their own group. Only used in 'compress' or 'auto' mode." - required: false - keep_recent_count: - type: integer - description: "Number of recent messages to preserve without compression or compaction. These messages remain unchanged to maintain conversation context. Defaults to 1 for compaction and 2 for compression." - required: false - store_dir: - type: string - description: "Directory path for storing summarized message content. Full tool message content and compressed message groups are saved as files in this directory. Required for compaction and compression operations." - required: false - chat_id: - type: string - description: "Unique identifier for the chat session, used for file naming when storing compressed message groups. If not provided, a UUID will be generated automatically." - required: false - - grep_working_memory: - flow_content: GrepOp() - - read_working_memory: - flow_content: ReadFileOp() - - summary_working_memory_for_as: - flow_content: MessageOffloadOp() - description: "Working memory summary operation for AgentScope integration. Summarizes working memory by compacting tool messages and compressing conversation history without batch file writing. Same functionality as summary_working_memory but without the BatchWriteFileOp step." - input_schema: - messages: - type: array - description: "List of conversation messages to process for working memory summarization" - required: true - working_summary_mode: - type: string - description: "Working summary strategy: 'compact' only compacts large tool messages, 'compress' only applies LLM-based compression, 'auto' first compacts then optionally compresses when reduction is insufficient. Defaults to 'auto'." - required: false - enum: ["compact", "compress", "auto"] - compact_ratio_threshold: - type: number - description: "Only used in 'auto' mode. Threshold for compaction ratio (tokens after compaction divided by original tokens). When the ratio is greater than this value, an additional LLM-based compression pass is triggered. Defaults to 0.75." - required: false - max_total_tokens: - type: integer - description: "Maximum token count threshold for triggering compression/compaction. For compaction, this is the total token count threshold. For compression, this excludes keep_recent_count messages and system messages. Defaults to 20000." - required: false - max_tool_message_tokens: - type: integer - description: "Maximum token count per tool message before compaction is applied. Tool messages exceeding this threshold will have their full content stored in external files with only a preview kept in context. Defaults to 2000." - required: false - group_token_threshold: - type: integer - description: "Maximum token count per compression group when using LLM-based compression. If None or 0, all messages are compressed in a single group. Messages exceeding this threshold individually will form their own group. Only used in 'compress' or 'auto' mode." - required: false - keep_recent_count: - type: integer - description: "Number of recent messages to preserve without compression or compaction. These messages remain unchanged to maintain conversation context. Defaults to 1 for compaction and 2 for compression." - required: false - store_dir: - type: string - description: "Directory path for storing summarized message content. Full tool message content and compressed message groups are saved as files in this directory. Required for compaction and compression operations." - required: false - chat_id: - type: string - description: "Unique identifier for the chat session, used for file naming when storing compressed message groups. If not provided, a UUID will be generated automatically." - required: false - - -llm: - default: - backend: openai_compatible - model_name: qwen3-30b-a3b-instruct-2507 - params: - temperature: 0.6 - token_count: # Optional - backend: base - - qwen3_coder_plus: - backend: openai_compatible - model_name: qwen3-coder-plus - token_count: # Optional - model_name: Qwen/Qwen3-Coder-480B-A35B-Instruct - backend: hf - params: - use_mirror: true - - qwen3_coder_480b_instruct: - backend: openai_compatible - model_name: qwen3-coder-480b-a35b-instruct - token_count: # Optional - model_name: Qwen/Qwen3-Coder-480B-A35B-Instruct - backend: hf - params: - use_mirror: true - - qwen3_coder_30b_instruct: - backend: openai_compatible - model_name: qwen3-coder-30b-a3b-instruct - token_count: # Optional - model_name: Qwen/Qwen3-Coder-30B-A3B-Instruct - backend: hf - params: - use_mirror: true - - qwen3_30b_instruct: - backend: openai_compatible - model_name: qwen3-30b-a3b-instruct-2507 - token_count: # Optional - model_name: Qwen/Qwen3-30B-A3B-Instruct-2507 - backend: hf - params: - use_mirror: true - - qwen3_30b_thinking: - backend: openai_compatible - model_name: qwen3-30b-a3b-thinking-2507 - token_count: # Optional - model_name: Qwen/Qwen3-30B-A3B-Thinking-2507 - backend: hf - params: - use_mirror: true - - qwen3_235b_instruct: - backend: openai_compatible - model_name: qwen3-235b-a22b-instruct-2507 - token_count: # Optional - model_name: Qwen/Qwen3-235B-A22B-Instruct-2507 - backend: hf - params: - use_mirror: true - - qwen3_235b_thinking: - backend: openai_compatible - model_name: qwen3-235b-a22b-thinking-2507 - token_count: # Optional - model_name: Qwen/Qwen3-235B-A22B-Thinking-2507 - backend: hf - params: - use_mirror: true - - qwen3_80b_instruct: - backend: openai_compatible - model_name: qwen3-next-80b-a3b-instruct - token_count: # Optional - model_name: Qwen/Qwen3-Next-80B-A3B-Instruct - backend: hf - params: - use_mirror: true - - qwen3_80b_thinking: - backend: openai_compatible - model_name: qwen3-next-80b-a3b-thinking - token_count: # Optional - model_name: Qwen/Qwen3-Next-80B-A3B-Thinking - backend: hf - params: - use_mirror: true - - qwen3_max_instruct: - backend: openai_compatible - model_name: qwen3-max - token_count: # Optional - model_name: Qwen/Qwen3-Next-80B-A3B-Instruct # NOTE: We use another model as a substitute. - backend: hf - params: - use_mirror: true - - qwen25_max_instruct: - backend: openai_compatible - model_name: qwen-max-2025-01-25 - token_count: # Optional - model_name: Qwen/Qwen2.5-72B-Instruct # NOTE: We use another model as a substitute. - backend: hf - params: - use_mirror: true - -embedding_model: - default: - backend: openai_compatible - model_name: text-embedding-v4 - params: - dimensions: 1024 - -vector_store: - default: - backend: memory - embedding_model: default -# params: -# hosts: "http://localhost:9200" diff --git a/reme_ai/retrieve/personal/extract_time_prompt.yaml b/reme_ai/retrieve/personal/extract_time_prompt.yaml deleted file mode 100644 index dfaa7945..00000000 --- a/reme_ai/retrieve/personal/extract_time_prompt.yaml +++ /dev/null @@ -1,135 +0,0 @@ -time_string_format_zh: | - {year}年{month}{day}日,{year}年第{week}周,{weekday},{hour}时。 - - -time_string_format: | - {month} {day}, {year}, {week}th week of {year}, {weekday}, at {hour}. - - -extract_time_system_zh: | - 任务:从语句与语句发生的时间,推断并提取语句内容中指向的时间段。 - 回答尽可能完整的时间段。 - 回答的格式严格遵照示例中的已有格式规范。 - 若语句不涉及时间则回答无。 - - -extract_time_system: | - Task: From the sentences and the time when they occurred, infer and extract the time periods indicated in the content of the sentences. - Answer with the most complete time periods possible. - The format of the answers must strictly adhere to the specifications in the examples provided. - If the sentence does not involve time, respond with "none." - - -extract_time_few_shot_zh: | - 示例1: - 句子:我记得你前年四月份去了阿联酋,阿联酋有哪些好玩的地方?迪拜和阿布扎比你更喜欢哪个?沙漠的景色壮观吗? - 时间:1992年8月20日,1992年第34周,周一,18时。 - 回答: - - 年:1990 - 月:4月 - - 示例2: - 句子:后天下午三点的会议记得参加。我在日历上仔细标注了这个重要的日子,提醒自己不要错过。会议将在公司会议室举行,这是一个讨论未来发展方向的重要机会。 - 时间:2024年6月19日,2024年第25周,周二,13时。 - 回答: - - 年:2024 - 月:6月 - 日:21 - 时:15 - - 示例3: - 句子:下个月第一个周六去杭州玩。 - 时间:2005年7月15日,2005年第28周,周六,0时。 - 回答: - - 年:2005 - 月:8月 - 周:31 - 星期几:周六 - - 示例4: - 句子:上周末我们去的那个小镇真是太美了。 - 时间:1999年12月2日,1999年第48周,周二,8时。 - 回答: - - 年:1999 - 周:47 - 星期几:周六,周日 - - 示例5: - 句子:再过半小时就要宣讲了,记得准备材料。 - 时间:2020年6月22日,2020年第25周,周一,9时。 - 回答: - - 年:2020 - 月:6月 - 日:22 - 时:10 - - 示例6: - 句子:10000米长跑比赛的开始时间是3分47秒前。 - 时间:1987年2月17日,1987年第7周,周三,19时。 - 回答: - - 年:1987 - 月:2 - 日:17 - 时:19 - - 示例7: - 句子:上个月的这个时候我们还在筹备音乐会。每天都是忙碌而充实的日子,我们为音乐会的顺利举办而努力奋斗着。彩排、布景、节目安排,每一个细节都需要精心安排和准备。 - 时间:1995年11月24日,1995年第48周,周二,17时。 - 回答: - - 年:1995 - 月:10 - 日:24 - - 示例8: - 句子:我的朋友非常喜欢运动,他认为运动有助于增强身体素质。 - 时间:2015年1月23日,2015年第4周,周四,7时。 - 回答: - 无 - - -extract_time_few_shot: | - Example 1: - Sentence: I remember you went to the UAE in April the year before last. Which places in the UAE are fun? Which do you prefer, Dubai or Abu Dhabi? Are the desert views spectacular? - Time: August 20, 1992, 34th week of 1992, Monday, at 18. - Answer: - - Year: 1990 - Month: 4 - - Example 2: - Sentence: Remember to attend the meeting at 3 PM the day after tomorrow. I carefully marked this important day on my calendar to remind myself not to miss it. The meeting will be held in the company conference room, and it's an important opportunity to discuss future development directions. - Time: June 19, 2024, 25th week of 2024, Tuesday, at 13. - Answer: - - Year: 2024 - Month: 6 - Day: 21 - Hour: 15 - - Example 3: - Sentence: Next month on the first Saturday, let's go to Hangzhou. - Time: July 15, 2005, 28th week of 2005, Saturday, at 0. - Answer: - - Year: 2005 - Month: 8 - Week: 31 - Day of Week: 6 - - Example 4: - Sentence: The small town we visited last weekend was truly beautiful. - Time: December 2, 1999, 48th week of 1999, Tuesday, at 8. - Answer: - - Year: 1999 - Week: 47 - Day of Week: 6, 7 - - Example 5: - Sentence: The presentation will start in half an hour, remember to prepare the materials. - Time: June 22, 2020, 25th week of 2020, Monday, at 9. - Answer: - - Year: 2020 - Month: 6 - Day: 22 - Hour: 10 - - Example 6: - Sentence: The start time for the 10,000-meter race was 3 minutes and 47 seconds ago. - Time: February 17, 1987, 7th week of 1987, Wednesday, at 19. - Answer: - - Year: 1987 - Month: 2 - Day: 17 - Hour: 19 - - Example 7: - Sentence: At this time last month, we were still preparing for the concert. Every day was busy and fulfilling, and we worked hard for the successful holding of the concert. Rehearsals, set design, and program arrangements - every detail needed careful planning and preparation. - Time: November 24, 1995, 48th week of 1995, Tuesday, at 17. - Answer: - - Year: 1995 - Month: 10 - Day: 24 - - Example 8: - Sentence: My friend loves sports very much and believes that exercise helps improve physical fitness. - Time: January 23, 2015, 4th week of 2015, Thursday, at 7. - Answer: - None - - -extract_time_user_query_zh: | - 句子:{query} - 时间:{query_time_str} - 回答: - - -extract_time_user_query: | - Sentence: {query} - Time: {query_time_str} - Answer: - - - diff --git a/reme_ai/retrieve/personal/print_memory_prompt.yaml b/reme_ai/retrieve/personal/print_memory_prompt.yaml deleted file mode 100644 index a295dda8..00000000 --- a/reme_ai/retrieve/personal/print_memory_prompt.yaml +++ /dev/null @@ -1,22 +0,0 @@ -print_template_zh: | - ========== {user_name}关于{target_name}的长期记忆 ========== - ----- 观察记忆 ----- - {observation_memory} - - ----- 洞察记忆 ----- - {insight_memory} - - ----- 过期记忆 ----- - {expired_memory} - - -print_template: | - ========== The {user_name}'s long-term memory about {target_name} ========== - ----- observation memory ----- - {observation_memory} - - ----- insight memory ----- - {insight_memory} - - ----- expired memory ----- - {expired_memory} \ No newline at end of file diff --git a/reme_ai/retrieve/task/build_query_prompt.yaml b/reme_ai/retrieve/task/build_query_prompt.yaml deleted file mode 100644 index 7017cec7..00000000 --- a/reme_ai/retrieve/task/build_query_prompt.yaml +++ /dev/null @@ -1,6 +0,0 @@ -query_build: | - # Execution Process - {execution_process} - - Read through the entire execution process to understand which part is currently being executed. - Generate a `query` that reflects the current state, which will later be used to search for similar problems in the database and help resolve the issue at hand. diff --git a/reme_ai/retrieve/task/rerank_memory_prompt.yaml b/reme_ai/retrieve/task/rerank_memory_prompt.yaml deleted file mode 100644 index e5e53337..00000000 --- a/reme_ai/retrieve/task/rerank_memory_prompt.yaml +++ /dev/null @@ -1,25 +0,0 @@ -memory_rerank_prompt: | - You are an expert AI analyst tasked with reranking retrieved experiences based on their relevance to a specific query. - - Your task is to analyze the candidates and rank them by relevance, considering: - ● DIRECT RELEVANCE: How directly applicable the experience is to the current query - ● SITUATION SIMILARITY: How similar the experience context is to the current situation - ● ACTIONABILITY: How actionable and specific the experience is - ● QUALITY: The overall quality and clarity of the experience - - # Current Query - {query} - - # Candidate Experiences (Total: {num_candidates}) - {candidates} - - OUTPUT FORMAT: - Provide a ranked list of candidate indices (0-based) from most relevant to least relevant: - ```json - {{ - "ranked_indices": [2, 0, 4, 1, 3], - "reasoning": "Brief explanation of ranking rationale" - }} - ``` - - Note: Include ALL candidate indices in the ranking, even if some are less relevant. \ No newline at end of file diff --git a/reme_ai/retrieve/task/rewrite_memory_prompt.yaml b/reme_ai/retrieve/task/rewrite_memory_prompt.yaml deleted file mode 100644 index 93e899b1..00000000 --- a/reme_ai/retrieve/task/rewrite_memory_prompt.yaml +++ /dev/null @@ -1,34 +0,0 @@ -memory_rewrite_prompt: | - You are an expert AI assistant tasked with rewriting and reorganizing context content to make it more relevant and actionable for the current task. - - Your task is to take the original context (containing multiple experiences) and rewrite it as a cohesive, task-specific guidance that directly addresses the current situation. - - REWRITING GUIDELINES: - ● RELEVANCE FOCUS: Emphasize the most relevant aspects of each experience. Prioritize the most relevant experiences. Use clear, direct language. - ● ACTIONABLE INSIGHTS: Extract specific, actionable guidance. Make the context immediately actionable - ● COHERENT NARRATIVE: Create a flowing narrative rather than disconnected tips - ● SITUATIONAL AWARENESS: Adapt the guidance to the current situation - - # Current Task/Query - {current_query} - - # Current Trajectory - {current_context} - - # Original Context Content (Multiple Experiences) - {original_context} - - OUTPUT FORMAT: - Provide the rewritten context: - ```json - {{ - "rewritten_context": "A cohesive, task-specific context message that reorganizes and adapts the original experiences for the current task. This should be written as a unified guidance rather than separate experience items.", - }} - ``` - - Guidelines: - - Rewrite as a unified, flowing guidance - - Adapt terminology and examples to match the current task domain - - Consolidate overlapping insights into coherent recommendations - - Prioritize experiences most relevant to the current situation - - Make the guidance feel custom-written for this specific task diff --git a/reme_ai/retrieve/working/grep_prompt.yaml b/reme_ai/retrieve/working/grep_prompt.yaml deleted file mode 100644 index 11773cd7..00000000 --- a/reme_ai/retrieve/working/grep_prompt.yaml +++ /dev/null @@ -1,20 +0,0 @@ -tool_desc: | - 一个支持完整正则语法(如 "log.*Error"、"function\\s+\\w+")的高效搜索工具,可用 glob 过滤文件并限制返回结果,适合跨文件快速定位代码或文本内容。 -tool_desc_zh: | - A powerful search tool for finding patterns in files using regular expressions. Supports full regex syntax (e.g., "log.*Error", "function\\s+\\w+"), glob pattern filtering, and result limiting. Ideal for searching code or text content across multiple files. - -file_path: | - 要执行搜索的文件路径。 -file_path_zh: | - The file path to perform the search on. - -pattern: | - 需要在文件内容中匹配的正则表达式模式。 -pattern_zh: | - The regular expression pattern to search for in file contents. - -limit: | - 可选:设置最多返回的匹配行数;未指定时会返回所有匹配。 -limit_zh: | - Optional: Maximum number of matching lines to return. Shows all matches if not specified. - diff --git a/reme_ai/retrieve/working/read_file_prompt.yaml b/reme_ai/retrieve/working/read_file_prompt.yaml deleted file mode 100644 index 360fb55a..00000000 --- a/reme_ai/retrieve/working/read_file_prompt.yaml +++ /dev/null @@ -1,19 +0,0 @@ -tool_desc: | - 读取指定文件内容的工具;对文本文件可通过 offset 与 limit 获取特定行区间,便于分页浏览大文件。 -tool_desc_zh: | - Reads and returns the content of a specified file. For text files, it can read specific line ranges using the 'offset' and 'limit' parameters. Use offset and limit to paginate through large files. - -file_path: | - 待读取文件的路径。 -file_path_zh: | - The path to the file to read. - -offset: | - 文本文件起始读取的 0 基行号;需与 limit 同时使用,适合分页查看大文件。 -offset_zh: | - For text files, the 0-based line number to start reading from. Requires 'limit' to be set. Use for paginating through large files. - -limit: | - 文本文件最多读取的行数;与 offset 配合实现分页,若仅设 offset 则会读到文件末尾。 -limit_zh: | - For text files, maximum number of lines to read. Use with 'offset' to paginate through large files. If omitted when offset is provided, reads from offset to the end of the file. diff --git a/reme_ai/retrieve/working/write_file_prompt.yaml b/reme_ai/retrieve/working/write_file_prompt.yaml deleted file mode 100644 index 02740d04..00000000 --- a/reme_ai/retrieve/working/write_file_prompt.yaml +++ /dev/null @@ -1,9 +0,0 @@ -tool_desc: | - Writes content to a specified file in the local filesystem. If the file doesn't exist, it will be created. If parent directories don't exist, they will be created automatically. If the file already exists, it will be overwritten with the new content. - -file_path: | - The absolute path to the file to write to (e.g., '/home/user/project/file.txt'). Relative paths are not supported. You must provide an absolute path. - -content: | - The content to write to the file. - diff --git a/reme_ai/service/service_description.md b/reme_ai/service/service_description.md deleted file mode 100644 index 9cf23aed..00000000 --- a/reme_ai/service/service_description.md +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - -
    MemoryTypeImportDescNote
    ReMe.PersonalMemoryServicefrom reme_ai.service.personal_memory_service import PersonalMemoryServiceReMe's personalized memory service (formerly MemoryScope) empowers you to generate, retrieve, and share customized memories. Leveraging advanced LLM, embedding, and vector store technologies, it builds a comprehensive memory system with intelligent, context- and time-aware memory management—seamlessly enabling you to configure and deploy powerful AI agents.https://github.com/agentscope-ai/ReMe Need to configure environment variables: FLOW_EMBEDDING_API_KEY, FLOW_EMBEDDING_BASE_URL, FLOW_LLM_API_KEY and FLOW_LLM_BASE_URL
    ReMe.TaskMemoryServicefrom reme_ai.service.task_memory_service import TaskMemoryServiceReMe's task-oriented memory service helps you efficiently manage and schedule task-related memories, enhancing both the accuracy and efficiency of task execution. Powered by LLM capabilities, it supports flexible creation, retrieval, update, and deletion of memories across diverse task scenarios—enabling you to effortlessly build and scale robust agent-based task systems.the same as ReMe.PersonalMemoryService
    diff --git a/reme_ai/summary/personal/contra_repeat_prompt.yaml b/reme_ai/summary/personal/contra_repeat_prompt.yaml deleted file mode 100644 index 4e21259d..00000000 --- a/reme_ai/summary/personal/contra_repeat_prompt.yaml +++ /dev/null @@ -1,127 +0,0 @@ -contra_repeat_system_zh: | - 任务:对下面的{num_obs}句句子,逐一判断是否与“前面序号”的任意句子存在信息的矛盾,或者句子的主要信息被“前面序号”的任意句子中的信息包含。 - 注意:对每句句子,只判断与“前面序号”的句子的关系,不要判断与“后面序号”的句子的关系。 - 其中矛盾的形式可以有很多种,可以是逻辑上的矛盾,可以是属性上的变化导致的矛盾,比如不能同时在两个地方工作,同一个时刻不能在两个地点,同一个时刻不能干两件事情等等。 - 对每个句子都做一个判断,最后一共输出{num_obs}条判断。 - 请一步步思考,并按如下格式输出: - 思考:思考的依据和过程,30字以内。 - 判断:<句子序号> <矛盾,被包含,无>,一定加<> - - -contra_repeat_system: | - Task: For the following {num_obs} sentences, determine whether each sentence contradicts any of the previous numbered sentences or if the main information in the sentence is contained within the information from any of the previous numbered sentences. - Note: Only determine the relationship with the "previous numbered" sentences, do not judge the "later numbered" sentences. - The forms of contradiction can be varied. It can be a logical contradiction, or a contradiction due to changes in attributes, for example, not being able to work in two places at once, not being able to be in two places at the same time, not being able to do two things at the same time, etc. - Make a judgment for each sentence and output a total of {num_obs} judgments. - Think step by step and output in the following format: - Thought: Basis and process of thinking, within 30 words. - Judgment: , must be enclosed in <>. - - -contra_repeat_few_shot_zh: | - 示例1 - 句子: - 1 {user_name}经常失眠,对安眠药的效果感兴趣,暗示可能考虑使用。 - 2 {user_name}经常失眠,寻求缓解方法。 - 3 陈伟业是{user_name}的领导 - 4 陈伟业是{user_name}的领导 - 5 陈伟业是{user_name}的领导,是银行分行行长 - 6 {user_name}喜欢吃西瓜 - 7 {user_name}喜欢吃苹果 - - 思考:第1句不会存在与前面序号句子的矛盾或者完全重复。 - 判断:<1> <无> - 思考:第2句中所有信息都被前面序号中第1句的信息完全包含。 - 判断:<2> <被包含> - 思考:第3句信息没有在前面序号句子中出现 - 判断:<3> <无> - 思考:第4句与前面序号中第3句的信息完全重复,即被完全包含。 - 判断:<4> <被包含> - 思考:第5句中陈伟业是{user_name}的领导的信息被前面序号中第3句的信息包含,但新增了陈伟业是银行分行行长的信息,故不是被完全包含。 - 判断:<5> <无> - 思考:第6句中表达了{user_name}的水果偏好,喜欢吃西瓜,信息没有在前面序号句子中出现。 - 判断:<6> <无> - 思考:第7句也表达了{user_name}的水果偏好,喜欢吃桃子,和前面序号中的第6句不冲突,喜好可以同时存在。 - 判断:<7> <无> - - 示例2 - 句子: - 1 {user_name}的孩子成绩不太好。 - 2 {user_name}的孩子在学校经常逃课。 - 3 {user_name}的父亲生日在2024年6月2日,{user_name}打算准备礼物。 - 4 {user_name}的父亲生日在2024年5月1日。 - 5 {user_name}很喜欢和同班同学打篮球。 - 6 {user_name}喜欢打篮球。 - - 思考:第1句不会存在与前面序号句子的矛盾或者完全重复。 - 判断:<1> <无> - 思考:第2句与前面序号句子既不矛盾也不重复。 - 判断:<2> <无> - 思考:第3句与前面序号句子既不矛盾也不重复。 - 判断:<3> <无> - 思考:第4句关于{user_name}父亲生日的日期信息与前面序号句子第3句矛盾了。 - 判断:<4> <矛盾> - 思考:第5句与前面序号句子既不矛盾也不重复。 - 判断:<5> <无> - 思考:第6句中所有信息都被前面序号中第5句的信息完全包含。 - 判断:<2> <被包含> - - -contra_repeat_few_shot: | - Example 1 - Sentences: - 1 {user_name} suffers from insomnia frequently and is interested in the effects of sleeping pills, suggesting a possible consideration of their use. - 2 {user_name} suffers from insomnia frequently and seeks remedies. - 3 Charles is {user_name}'s supervisor. - 4 Charles is {user_name}'s supervisor. - 5 Charles is {user_name}'s supervisor and the branch manager of a bank. - 6 {user_name} loves playing basketball with classmates. - 7 {user_name} likes playing basketball. - - Thought: The first sentence does not have any contradictions or complete repetitions with the previously numbered sentences. - Judgment: <1> - Thought: All information in the second sentence is completely contained within the information of the first sentence. - Judgment: <2> - Thought: The information in the third sentence does not appear in the previously numbered sentences. - Judgment: <3> - Thought: The fourth sentence is completely repetitive of the information in the third sentence, i.e., it is completely contained. - Judgment: <4> - Thought: The information that Charles is {user_name}'s supervisor in the fifth sentence is contained within the information of the third sentence, but the new information that Charles is the branch manager of a bank is not, so it is not contained. - Judgment: <5> - Thought: Sentence 6 expresses {user_name}'s fruit preference, liking to eat watermelon, which is information not present in any preceding sentences. - Judgment: <6> - Thought: Sentence 7 also expresses {user_name}'s fruit preference, liking to eat apples; it does not conflict with sentence 6, and both preferences can coexist. - Judgment: <7> - - Example 2 - Sentences: - 1 {user_name}'s child does not perform well academically. - 2 {user_name}'s child often skips school. - 3 {user_name}'s father's birthday is on June 2, 2024, and {user_name} plans to prepare a gift. - 4 {user_name}'s father's birthday is on May 1, 2024. - 5 {user_name} loves playing basketball with classmates. - 6 {user_name} likes playing basketball. - - Thought: The first sentence does not have any contradictions or complete repetitions with the previously numbered sentences. - Judgment: <1> - Thought: The second sentence neither contradicts nor repeats any of the previously numbered sentences. - Judgment: <2> - Thought: The third sentence neither contradicts nor repeats any of the previously numbered sentences. - Judgment: <3> - Thought: The date of {user_name}'s father's birthday in the fourth sentence contradicts the information in the third sentence. - Judgment: <4> - Thought: The fifth sentence neither contradicts nor repeats any of the previously numbered sentences. - Judgment: <5> - Thought: All information in the sixth sentence is completely contained within the information of the fifth sentence. - Judgment: <6> - - - -contra_repeat_user_query_zh: | - 句子: - {user_query} - - -contra_repeat_user_query: | - Sentences: - {user_query} diff --git a/reme_ai/summary/personal/get_observation_prompt.yaml b/reme_ai/summary/personal/get_observation_prompt.yaml deleted file mode 100644 index 365fc424..00000000 --- a/reme_ai/summary/personal/get_observation_prompt.yaml +++ /dev/null @@ -1,163 +0,0 @@ -get_observation_system_zh: | - 任务:从下面的{num_obs}句{user_name}句子中依次提取出关于{user_name}的重要信息,与相应的关键词。如果没有重要信息则回答“无”,最多提取{num_obs}条信息。 - {user_name}的重要信息可以包含用户基本信息,用户画像信息,用户兴趣偏好信息,用户性格,用户价值观,用户人际关系,用户重大事件转折点等等重要信息。 - 如果句子中只包含{user_name}假设的信息或者{user_name}虚构的内容比如{user_name}创作的小说或剧本,回答“无”。 - 对每个句子都做一次信息提取,最后一共输出{num_obs}条信息。 - 请一步步思考,并一定要按如下格式依次输出,最后的结果一定要加<>: - 思考:思考的依据和过程,50字以内。 - 信息:<句子序号> <> <明确的重要信息或“无”> <关键词> - - -get_observation_system: | - Task: Sequentially extract important information about {user_name} from the following {num_obs} sentences along with corresponding keywords. If there is no important information, answer "None". Extract up to {num_obs} pieces of information. - Important information about {user_name} can include basic information, user profile information, user interests and preferences, user personality, user values, user relationships, major turning points in the user's life, and other important information. - If the sentence only contains hypothetical information about {user_name} or fictional content created by {user_name} such as novels or scripts, respond "None". - Perform information extraction for each sentence, and output {num_obs} pieces of information in total. - Please think step-by-step, and be sure to output in the following format, ending with '<>': - Thought: Basis and process of thinking, within 50 words. - Information: <> - - -get_observation_few_shot_zh: | - 示例1: - {user_name}句子: - 1 {user_name}:我现在处境很糟,没有工作,负债几万,怎么办 - 2 {user_name}:有人说兴趣是最好的老师,也建议兴趣和职业联系起来,但我发现喜欢打篮球的人很多,但靠打篮球成职业的稀少,赚钱的更少,此外,怎么分辨兴趣和喜欢 - 3 {user_name}:我现在心情很糟糕 - 4 {user_name}:我是一个刚毕业的学生,对社会,行业不了解,给我介绍一下社会系统和行业格局 - 5 {user_name}:我花5000元买了100股海天味业。 - 6 {user_name}:我花50000元买了100股阿里巴巴。 - 思考:从第1句可以得知{user_name}现在没有工作,负债几万,这是关于{user_name}工作与经济状况的重要信息。 - 信息:<1> <> <{user_name}当前无工作且负债几万> <无工作, 负债几万> - 思考:第2句是{user_name}对他人观点的讨论和疑问,没有明确提及{user_name}个人信息。 - 信息:<2> <> <无> <> - 思考:从第3句可以得知{user_name}当前心情不好。 - 信息:<3> <> <{user_name}当前心情不好> <心情> - 思考:从第4句可以得知{user_name}是一个刚毕业的学生,这是关于{user_name}身份背景状况的重要信息。其余信息重要性不足。 - 信息:<4> <> <{user_name}是一名刚毕业的学生。> <刚毕业, 学生> - 思考:从第5句可以得知{user_name}购买了海天味业股票,购买数量为100股,购买金额为5000元,这是关于{user_name}的投资决策的重要信息。 - 信息:<5> <> <{user_name}购买了海天味业股票,购买数量为100股,购买金额为5000元。> <海天味业, 股票> - 思考:第6句含有的信息与第1句相似,可以得知{user_name}购买了阿里巴巴股票。 - 信息:<6> <> <{user_name}购买了阿里巴巴股票,购买数量为100股,购买金额为50000元。> <阿里巴巴, 股票> - - 示例2: - {user_name}句子: - 1 {user_name}:帮我写一段给同事张三女儿三岁生日的祝福语。 - 2 {user_name}:能给我整理一张如何使用大模型的技巧列表吗,要求内容尽量精简。 - 3 {user_name}:两个坏消息,我打羽毛球把拍子打断线了。。。然后我去我朋友家撸猫,结果我猫毛过敏,今天疯狂打喷嚏。。。 - 4 {user_name}:公元1400年至1550年中国历史大事表。 - 5 {user_name}:谢啦。我中午在公司附近吃,帮我推荐一家阿里巴巴徐汇滨江园区附近的餐厅吧。 - 思考:从第1句可以得知张三是{user_name}的同事,这是关于{user_name}的人际关系的重要信息。其余信息重要性不足。 - 信息:<1> <> <张三是{user_name}的同事。> <张三, 同事> - 思考:第2句是{user_name}提出的要求,没有明确提及{user_name}个人信息。 - 信息:<2> <> <无> <> - 思考:从第3句可以得知{user_name}前天打羽毛球时把球拍打断了线,但这不是重要的信息。还可以得知{user_name}对猫毛过敏,这是关于{user_name}的健康的重要信息。 - 信息:<3> <> <{user_name}对猫毛过敏。> <猫毛, 过敏> - 思考:从第4句是{user_name}提出的要求,没有明确提及{user_name}个人信息。 - 信息:<4> <> <无> <> - 思考:从第5句可以得知{user_name}在阿里巴巴徐汇滨江园区工作,这是关于{user_name}的工作地点的重要信息。 - 信息:<5> <> <{user_name}在阿里巴巴徐汇滨江园区工作。> <阿里巴巴, 徐汇滨江园区, 工作> - - 示例3: - {user_name}句子: - 1 {user_name}:我想买辆新能源汽车,有什么推荐吗? - 2 {user_name}:我在上海,想买辆新能源汽车,有什么推荐吗? - 3 {user_name}:案外人异议审查期间,人民法院不得对执行标的进行处分,不就是中止执行的意思吗? - 4 {user_name}:请写两句藏头诗分别以“胜”和“利”开头。 - 5 {user_name}:我花5000元买了100股海天味业。 - 6 {user_name}:李增杰:这个是星座蛙设,但是我是处女座的,我妈感觉因为我的不正常,我妈不让我看了\n雌猴摸了摸李增杰的头,这样啊\n雌猴打开了哔哩哔哩看了看\n雌猴:要不换个设吧,我听你未来的你说,有一个叫难忘的朱古力232这个人,他弄的设是Windows设\n这是剧本1,剧本2未完待续 - 思考:从第1句可以得知{user_name}寻求购买新能源汽车的建议或推荐,这是这是关于{user_name}的大宗消费的重要的信息。 - 信息:<1> <> <{user_name}寻求购买新能源汽车的建议或推荐。> <购买, 新能源汽车> - 思考:从第2句可以得知{user_name}当前所在城市为上海,这是关于{user_name}的生活地区的重要信息。 - 信息:<2> <> <{user_name}所在的城市是上海。> <上海> - 思考:第3句是{user_name}对某个观点的讨论和疑问,没有明确提及{user_name}个人信息。 - 信息:<3> <> <无> <> - 思考:第4句是{user_name}提出的要求,没有明确提及{user_name}个人信息。 - 信息:<4> <> <无> <> - 思考:从第5句可以得知{user_name}购买了海天味业股票,购买数量为100股,购买金额为5000元,这是关于{user_name}的投资决策的重要信息。 - 信息:<5> <> <{user_name}购买了海天味业股票,购买数量为100股,购买金额为5000元。> <海天味业, 股票> - 思考:第6句是{user_name}创作的剧本内容,无法提取{user_name}个人信息。 - 信息:<6> <> <无> <> - - 示例4: - {user_name}句子: - 1 {user_name}:李子好酸啊,我不太喜欢吃。 - 2 {user_name}:桃子上的毛太多了,我不爱吃他。 - 思考:从第1句可以得知{user_name}不太喜欢吃李子。 - 信息:<1> <> <{user_name}不喜欢吃李子。> <李子> - 思考:从第2句可以得知{user_name}不喜欢吃桃子,和上一句相似都是对某一种水果不喜欢,但是表达了不同的信息。 - 信息:<2> <> <{user_name}不喜欢吃桃子。> <西瓜> - - -get_observation_few_shot: | - Example 1: - {user_name} sentences: - 1 {user_name}: I'm in a terrible situation right now, I don't have a job, and I'm in debt by tens of thousands. What should I do? - 2 {user_name}: Someone said that passion is the best teacher and suggested linking passion with a career, but I found that many people like playing basketball, but few make it a profession and even fewer make money from it. Also, how do you distinguish passion from liking? - 3 {user_name}: I'm in a terrible situation right now, I don't have a job, and I'm in debt by tens of thousands. What should I do? - 4 {user_name}: I'm a recent graduate who doesn't understand society or the industry. Can you introduce me to the social system and industry structure? - 5 {user_name}: I spent $5000 to buy 100 shares of General Motors. - 6 {user_name}: I spent $50000 to buy 100 shares of Alibaba. - - Thought: From the first sentence, it can be inferred that {user_name} currently has no job and is in debt by tens of thousands. This is important information about {user_name}'s employment and financial status. - Information: <1> <> <{user_name} currently has no job and is in debt by tens of thousands> - Thought: The second sentence is a discussion and query about others' opinions by {user_name}, with no clear mention of {user_name}'s personal information. - Information: <2> <> <> - Thought: The information in the third sentence is a repeat of the first sentence. - Information: <3> <> <> - Thought: From the fourth sentence, it can be inferred that {user_name} is a recent graduate, which is important information about {user_name}'s background. The remaining information is of insufficient importance. - Information: <4> <> <{user_name} is a recent graduate> - Thought: It can be inferred that {user_name} bought 100 shares of General Motors stock for $5000. This is important information about {user_name}'s investment decision. - Information: <5> <> <{user_name} bought 100 shares of General Motors stock for $5000> - Thought: The information of the sentence is similar to, but not a repetition of the sentence before. It can be deduced that {user_name} purchased Alibaba stock. - Information: <6> <> <{user_name} purchased 100 shares of Alibaba stock for 50,000 RMB.> - - Example 2: - {user_name} sentences: - 1 {user_name}: Please help me write a birthday greeting for my colleague Jason's daughter who is turning three. - 2 {user_name}: Can you compile a list of tips on how to use large models for me, and try to keep the content concise? - 3 {user_name}: Two pieces of bad news: I broke my badminton racket while playing... Then I went to my friend's house to pet the cat and ended up having an allergic reaction to the cat fur, sneezing like crazy today... - 4 {user_name}: Chronology of major events in Chinese history from 1400 to 1550 AD. - 5 {user_name}: Thanks. I'm having lunch near the company at noon; can you recommend a restaurant near Alibaba Xuhui Riverside Campus for me? - Thought: From the first sentence, it can be inferred that Zhang San is {user_name}'s colleague, which is important information about {user_name}'s interpersonal relationships. The remaining information is of insufficient importance. - Information: <1> <> - Thought: The second sentence is a request made by {user_name}, with no clear mention of {user_name}'s personal information. - Information: <2> <> <> - Thought: From the third sentence, it can be inferred that {user_name} broke their badminton racket the other day, but this is not important information. It can also be inferred that {user_name} is allergic to cat fur, which is important information about {user_name}'s health. - Information: <3> <> <{user_name} is allergic to cat fur> - Thought: The fourth sentence is a request made by {user_name}, with no clear mention of {user_name}'s personal information. - Information: <4> <> <> - Thought: From the fifth sentence, it can be inferred that {user_name} works at Alibaba Xuhui Riverside Campus, which is important information about {user_name}'s workplace. - Information: <5> <> <{user_name} works at Alibaba Xuhui Riverside Campus> - - Example 3: - {user_name} sentences: - 1 {user_name}: I want to buy a new energy vehicle. Any recommendations? - 2 {user_name}: I'm in San Jose and want to buy a new energy vehicle. Any recommendations? - 3 {user_name}: During the objection review period by a third party, the court must not dispose of the execution object. Doesn't this mean suspension of execution? - 4 {user_name}: Please write two acrostic poems, starting with "Victory" and "Success". - 5 {user_name}: I spent $5000 to buy 100 shares of General Motors. - 6 {user_name}: Zack: This is a constellation frog setting, but I am a Virgo. My mom feels I'm abnormal and doesn't let me watch it. \n The female monkey patted Zack's head, "Is that so?" \n The female monkey opened Bilibili and took a look. \n Female monkey: "Why don't you switch the setting? I heard from your future self that there is someone called 'Unforgettable Chocolate 232' who created a Windows setting." \n This is script 1; script 2 is to be continued. - Thought: From the first sentence, it can be inferred that {user_name} is seeking advice or recommendations for purchasing a new energy vehicle. This is important information about {user_name}'s major consumption. - Information: <1> <> <{user_name} is seeking advice or recommendations for purchasing a new energy vehicle> - Thought: From the second sentence, it can be inferred that {user_name} is currently in San Jose, which is important information about {user_name}'s living location. The remaining information is a repeat of the first sentence. - Information: <2> <> <{user_name} is currently in San Jose> - Thought: The third sentence is a discussion and query about a specific legal opinion by {user_name}, with no clear mention of {user_name}'s personal information. - Information: <3> <> <> - Thought: The fourth sentence is a request made by {user_name}, with no clear mention of {user_name}'s personal information. - Information: <4> <> <> - Thought: From the fifth sentence, it can be inferred that {user_name} bought 100 shares of General Motors stock for $5000. This is important information about {user_name}'s investment decision. - Information: <5> <> <{user_name} bought 100 shares of General Motors stock for $5000> - Thought: The sixth sentence is content from a script written by {user_name}, with no extractable personal information about {user_name}. - Information: <6> <> <> - - -get_observation_user_query_zh: | - {user_name}句子: - {user_query} - - -get_observation_user_query: | - {user_name} sentences: - {user_query} - diff --git a/reme_ai/summary/personal/get_observation_with_time_prompt.yaml b/reme_ai/summary/personal/get_observation_with_time_prompt.yaml deleted file mode 100644 index 156ed478..00000000 --- a/reme_ai/summary/personal/get_observation_with_time_prompt.yaml +++ /dev/null @@ -1,158 +0,0 @@ -time_string_format_zh: | - {year}年{month}{day}日{weekday}{hour}点 - - -time_string_format: | - {month} {day}, {year}, {weekday}, at {hour} - - -get_observation_with_time_system_zh: | - 任务:从下面的{num_obs}句{user_name}句子中依次提取出关于{user_name}的重要信息,相应的关键词与时间信息。如果没有重要信息则回答“无”,最多提取{num_obs}条信息。 - 每一句{user_name}句子的格式是:<序号> <对话时间> {user_name}:<句子> - {user_name}的重要信息可以包含用户基本信息,用户画像信息,用户兴趣偏好信息,用户性格,用户价值观,用户人际关系,用户重大事件转折点等等重要信息。 - 如果句子中只包含{user_name}假设的信息或者{user_name}虚构的内容比如{user_name}创作的小说或剧本,回答“无”。 - 如果{user_name}信息涉及时间,则结合对话时间推断{user_name}信息的时间信息,没有则不输出。 - 对每个句子都做一次信息提取,最后一共输出{num_obs}条信息。 - 请一步步思考,并一定要按如下格式依次输出,最后的结果一定要加<>: - 思考:思考的依据和过程,50字以内。 - 信息:<句子序号> <时间信息或不输出> <明确的重要信息或“无”> <关键词> - - -get_observation_with_time_system: | - Task: Extract important information about {user_name} from the following {num_obs} sentences of {user_name}, including relevant keywords and time information. If there is no important information, answer "none", with a maximum of {num_obs} pieces of information extracted. - Each sentence from {user_name} is formatted as follows: {user_name}: . - Important information about {user_name} can include basic information, user profile information, interest preferences, personality, values, human relationships, significant life events, etc. - If a sentence only contains hypothetical information or fictional content created by {user_name} (e.g., novels or scripts), answer "none". - If {user_name}'s information involves time, infer the time information based on the conversation time; if not, do not output. - Analyze each sentence once to extract information and output a total of {num_obs} pieces of information. - Please think step-by-step and be sure to output in the following format, with the final results enclosed in <>: - Thought: Basis and process of thought, within 50 words. - Information: