mirror of
https://github.com/agentscope-ai/ReMe.git
synced 2026-09-06 08:16:00 +00:00
738 lines
42 KiB
Text
738 lines
42 KiB
Text
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "markdown",
|
||
"source": [
|
||
"# Example usages of **chat** and **service** interfaces\n",
|
||
"This notebook shows simple usages of MemoryScope's **chat** and **service** interfaces, along with its main features.\n",
|
||
"\n",
|
||
"To run this notebook, follow the **Installation** guidelines in Readme, and start the Docker image.\n"
|
||
],
|
||
"metadata": {
|
||
"collapsed": false
|
||
}
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"source": [
|
||
"## Initiate a MemoryScope instance\n",
|
||
"First, we need to specify a configuration and initiate a MemoryScope instance."
|
||
],
|
||
"metadata": {
|
||
"collapsed": false
|
||
}
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 1,
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"2024-08-02 18:28:24 INFO MainThread logger:64] logger=memoryscope_20240802_182824 is inited.\n",
|
||
"2024-08-02 18:28:24 INFO MainThread config_manager:39] init by arguments mode: {'language': 'cn', 'thread_pool_max_workers': 5, 'logger_name': 'memoryscope', 'logger_name_time_suffix': '%Y%m%d_%H%M%S', 'logger_to_screen': True, 'memory_chat_class': 'api_memory_chat', 'chat_stream': None, 'human_name': '用户', 'assistant_name': 'AI', 'consolidate_memory_interval_time': 1, 'reflect_and_reconsolidate_interval_time': 15, 'worker_params': {'get_reflection_subject': {'reflect_num_questions': 3}}, 'generation_backend': 'dashscope_generation', 'generation_model': 'qwen2-72b-instruct', 'generation_params': {}, 'embedding_backend': 'dashscope_embedding', 'embedding_model': 'text-embedding-v2', 'embedding_params': {}, 'rank_backend': 'dashscope_rank', 'rank_model': 'gte-rerank', 'rank_params': {}, 'es_index_name': 'memory_index', 'es_url': 'http://localhost:9200', 'retrieve_mode': 'dense', 'enable_ranker': False, 'enable_today_contra_repeat': True, 'enable_long_contra_repeat': False, 'output_memory_max_count': 20}\n",
|
||
"2024-08-02 18:28:24 INFO MainThread config_manager:50] \n",
|
||
"global:\n",
|
||
" enable_long_contra_repeat: false\n",
|
||
" enable_ranker: false\n",
|
||
" enable_today_contra_repeat: true\n",
|
||
" language: cn\n",
|
||
" logger_name: memoryscope\n",
|
||
" logger_name_time_suffix: '%Y%m%d_%H%M%S'\n",
|
||
" logger_to_screen: true\n",
|
||
" output_memory_max_count: 20\n",
|
||
" thread_pool_max_workers: 5\n",
|
||
"memory_chat:\n",
|
||
" cli_memory_chat:\n",
|
||
" class: core.chat.api_memory_chat\n",
|
||
" generation_model: generation_model\n",
|
||
" memory_service: memoryscope_service\n",
|
||
" stream: false\n",
|
||
"memory_service:\n",
|
||
" memoryscope_service:\n",
|
||
" assistant_name: AI\n",
|
||
" class: core.service.memory_scope_service\n",
|
||
" human_name: 用户\n",
|
||
" memory_operations:\n",
|
||
" add_memory:\n",
|
||
" class: core.operation.frontend_operation\n",
|
||
" description: add a single observation\n",
|
||
" workflow: add_memory\n",
|
||
" consolidate_memory:\n",
|
||
" class: core.operation.consolidate_memory_op\n",
|
||
" description: summary user's observation memory, run backend.\n",
|
||
" interval_time: 1\n",
|
||
" workflow: info_filter,[get_observation|get_observation_with_time|load_today_memory],contra_repeat,store_memory\n",
|
||
" delete_all:\n",
|
||
" class: core.operation.frontend_operation\n",
|
||
" description: delete all long-term memory\n",
|
||
" workflow: set_query,retrieve_all_memory,delete_all\n",
|
||
" delete_memory:\n",
|
||
" class: core.operation.frontend_operation\n",
|
||
" description: delete a single long-term memory\n",
|
||
" workflow: set_query,retrieve_all_memory,delete_memory\n",
|
||
" list_memory:\n",
|
||
" class: core.operation.frontend_operation\n",
|
||
" description: read all long-term memory of the user, use `refresh_time=5` to\n",
|
||
" refresh screen.\n",
|
||
" workflow: set_query,retrieve_top_memory,print_memory\n",
|
||
" read_message:\n",
|
||
" class: core.operation.frontend_operation\n",
|
||
" description: read short memory\n",
|
||
" workflow: read_message\n",
|
||
" reflect_and_reconsolidate:\n",
|
||
" class: core.operation.backend_operation\n",
|
||
" description: summary user's insight memory, run backend.\n",
|
||
" interval_time: 15\n",
|
||
" workflow: load_obs_and_insight,get_reflection_subject,update_insight,long_contra_repeat,store_memory\n",
|
||
" retrieve_memory:\n",
|
||
" class: core.operation.frontend_operation\n",
|
||
" description: retrieve long-term memory\n",
|
||
" workflow: set_query,[extract_time|retrieve_obs_ins,semantic_rank],fuse_rerank\n",
|
||
"memory_store:\n",
|
||
" class: core.storage.llama_index_es_memory_store\n",
|
||
" embedding_model: embedding_model\n",
|
||
" es_url: http://localhost:9200\n",
|
||
" index_name: memory_index\n",
|
||
" retrieve_mode: dense\n",
|
||
"model:\n",
|
||
" embedding_model:\n",
|
||
" class: core.models.llama_index_embedding_model\n",
|
||
" model_name: text-embedding-v2\n",
|
||
" module_name: dashscope_embedding\n",
|
||
" generation_model:\n",
|
||
" class: core.models.llama_index_generation_model\n",
|
||
" max_tokens: 2000\n",
|
||
" model_name: qwen2-72b-instruct\n",
|
||
" module_name: dashscope_generation\n",
|
||
" rank_model:\n",
|
||
" class: core.models.llama_index_rank_model\n",
|
||
" model_name: gte-rerank\n",
|
||
" module_name: dashscope_rank\n",
|
||
" top_n: 500\n",
|
||
"monitor:\n",
|
||
" class: core.storage.dummy_monitor\n",
|
||
"worker:\n",
|
||
" add_memory:\n",
|
||
" class: core.worker.backend.update_memory_worker\n",
|
||
" method: from_query\n",
|
||
" contra_repeat:\n",
|
||
" class: core.worker.backend.contra_repeat_worker\n",
|
||
" generation_model: generation_model\n",
|
||
" delete_all:\n",
|
||
" class: core.worker.backend.update_memory_worker\n",
|
||
" method: delete_all\n",
|
||
" delete_memory:\n",
|
||
" class: core.worker.backend.update_memory_worker\n",
|
||
" method: delete_memory\n",
|
||
" dummy:\n",
|
||
" class: core.worker.dummy_worker\n",
|
||
" embedding_model: embedding_model\n",
|
||
" generation_model: generation_model\n",
|
||
" rank_model: rank_model\n",
|
||
" extract_time:\n",
|
||
" class: core.worker.frontend.extract_time_worker\n",
|
||
" generation_model: generation_model\n",
|
||
" fuse_rerank:\n",
|
||
" class: core.worker.frontend.fuse_rerank_worker\n",
|
||
" fuse_ratio_dict:\n",
|
||
" conversation: 0.5\n",
|
||
" insight: 2.0\n",
|
||
" obs_customized: 1.2\n",
|
||
" observation: 1\n",
|
||
" fuse_score_threshold: 0.01\n",
|
||
" fuse_time_ratio: 2.0\n",
|
||
" get_observation:\n",
|
||
" class: core.worker.backend.get_observation_worker\n",
|
||
" generation_model: generation_model\n",
|
||
" get_observation_with_time:\n",
|
||
" class: core.worker.backend.get_observation_with_time_worker\n",
|
||
" generation_model: generation_model\n",
|
||
" get_reflection_subject:\n",
|
||
" class: core.worker.backend.get_reflection_subject_worker\n",
|
||
" generation_model: generation_model\n",
|
||
" reflect_num_questions: 3\n",
|
||
" reflect_obs_cnt_threshold: 5\n",
|
||
" info_filter:\n",
|
||
" class: core.worker.backend.info_filter_worker\n",
|
||
" generation_model: generation_model\n",
|
||
" load_obs_and_insight:\n",
|
||
" class: core.worker.backend.load_memory_worker\n",
|
||
" retrieve_insight_top_k: 100\n",
|
||
" retrieve_not_reflected_top_k: 100\n",
|
||
" retrieve_not_updated_top_k: 100\n",
|
||
" load_today_memory:\n",
|
||
" class: core.worker.backend.load_memory_worker\n",
|
||
" retrieve_today_top_k: 100\n",
|
||
" long_contra_repeat:\n",
|
||
" class: core.worker.backend.long_contra_repeat_worker\n",
|
||
" generation_model: generation_model\n",
|
||
" long_contra_repeat_threshold: 0.5\n",
|
||
" print_memory:\n",
|
||
" class: core.worker.frontend.print_memory_worker\n",
|
||
" read_message:\n",
|
||
" class: core.worker.frontend.read_message_worker\n",
|
||
" retrieve_all_memory:\n",
|
||
" class: core.worker.frontend.retrieve_memory_worker\n",
|
||
" retrieve_expired_top_k: 1000\n",
|
||
" retrieve_ins_top_k: 1000\n",
|
||
" retrieve_obs_top_k: 1000\n",
|
||
" retrieve_obs_ins:\n",
|
||
" class: core.worker.frontend.retrieve_memory_worker\n",
|
||
" retrieve_ins_top_k: 100\n",
|
||
" retrieve_obs_top_k: 100\n",
|
||
" retrieve_top_memory:\n",
|
||
" class: core.worker.frontend.retrieve_memory_worker\n",
|
||
" retrieve_expired_top_k: 100\n",
|
||
" retrieve_ins_top_k: 100\n",
|
||
" retrieve_obs_top_k: 100\n",
|
||
" semantic_rank:\n",
|
||
" class: core.worker.frontend.semantic_rank_worker\n",
|
||
" rank_model: rank_model\n",
|
||
" set_query:\n",
|
||
" class: core.worker.frontend.set_query_worker\n",
|
||
" store_memory:\n",
|
||
" class: core.worker.backend.update_memory_worker\n",
|
||
" memory_key: all\n",
|
||
" method: from_memory_key\n",
|
||
" update_insight:\n",
|
||
" class: core.worker.backend.update_insight_worker\n",
|
||
" embedding_model: embedding_model\n",
|
||
" generation_model: generation_model\n",
|
||
" rank_model: rank_model\n",
|
||
" update_insight_threshold: 0.01\n",
|
||
"\n",
|
||
"2024-08-02 18:28:24 WARNING MainThread memoryscope:32] If a semantic ranking model is not available, MemoryScope will use cosine similarity scoring as a substitute. However, the ranking effectiveness will be somewhat compromised.\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"import sys\n",
|
||
"sys.path.append(\".\")\n",
|
||
"from memoryscope import MemoryScope, Arguments\n",
|
||
"arguments = Arguments(\n",
|
||
" language=\"cn\",\n",
|
||
" human_name=\"用户\",\n",
|
||
" assistant_name=\"AI\",\n",
|
||
" logger_to_screen=True,\n",
|
||
" memory_chat_class=\"api_memory_chat\",\n",
|
||
" generation_backend=\"dashscope_generation\",\n",
|
||
" generation_model=\"qwen2-72b-instruct\",\n",
|
||
" embedding_backend=\"dashscope_embedding\",\n",
|
||
" embedding_model=\"text-embedding-v2\",\n",
|
||
" rank_backend=\"dashscope_rank\",\n",
|
||
" rank_model=\"gte-rerank\",\n",
|
||
" enable_ranker=False,\n",
|
||
" worker_params={\"get_reflection_subject\": {\"reflect_num_questions\": 3}}\n",
|
||
")\n",
|
||
"\n",
|
||
"ms = MemoryScope(arguments=arguments)\n"
|
||
],
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"ExecuteTime": {
|
||
"end_time": "2024-08-02T10:28:26.547739Z",
|
||
"start_time": "2024-08-02T10:28:24.509118Z"
|
||
}
|
||
}
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"source": [
|
||
"## Chat without memory\n",
|
||
"ms comes with a default **chat** interface, so it's very easy to start chatting, just as what you'll do with any LLM chatbot."
|
||
],
|
||
"metadata": {
|
||
"collapsed": false
|
||
}
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 2,
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:95] ----- workflow.read_message.print.begin -----\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:101] stage0: read_message\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:112] ----- workflow.read_message.print.end -----\n",
|
||
"2024-08-02 18:28:26 INFO MainThread memory_scope_service:83] service=MemoryScopeService init operation=read_message\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:95] ----- workflow.retrieve_memory.print.begin -----\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:101] stage0: set_query\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:106] stage1: extract_time | retrieve_obs_ins\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:106] stage2: - | semantic_rank\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:101] stage3: fuse_rerank\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:112] ----- workflow.retrieve_memory.print.end -----\n",
|
||
"2024-08-02 18:28:26 INFO MainThread memory_scope_service:83] service=MemoryScopeService init operation=retrieve_memory\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:95] ----- workflow.list_memory.print.begin -----\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:101] stage0: set_query\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:101] stage1: retrieve_top_memory\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:101] stage2: print_memory\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:112] ----- workflow.list_memory.print.end -----\n",
|
||
"2024-08-02 18:28:26 INFO MainThread memory_scope_service:83] service=MemoryScopeService init operation=list_memory\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:95] ----- workflow.delete_memory.print.begin -----\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:101] stage0: set_query\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:101] stage1: retrieve_all_memory\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:101] stage2: delete_memory\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:112] ----- workflow.delete_memory.print.end -----\n",
|
||
"2024-08-02 18:28:26 INFO MainThread memory_scope_service:83] service=MemoryScopeService init operation=delete_memory\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:95] ----- workflow.delete_all.print.begin -----\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:101] stage0: set_query\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:101] stage1: retrieve_all_memory\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:101] stage2: delete_all\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:112] ----- workflow.delete_all.print.end -----\n",
|
||
"2024-08-02 18:28:26 INFO MainThread memory_scope_service:83] service=MemoryScopeService init operation=delete_all\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:95] ----- workflow.add_memory.print.begin -----\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:101] stage0: add_memory\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:112] ----- workflow.add_memory.print.end -----\n",
|
||
"2024-08-02 18:28:26 INFO MainThread memory_scope_service:83] service=MemoryScopeService init operation=add_memory\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:95] ----- workflow.consolidate_memory.print.begin -----\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:101] stage0: info_filter\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:106] stage1: get_observation | get_observation_with_time | load_today_memory\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:101] stage2: contra_repeat\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:101] stage3: store_memory\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:112] ----- workflow.consolidate_memory.print.end -----\n",
|
||
"2024-08-02 18:28:26 INFO MainThread memory_scope_service:83] service=MemoryScopeService init operation=consolidate_memory\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:95] ----- workflow.reflect_and_reconsolidate.print.begin -----\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:101] stage0: load_obs_and_insight\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:101] stage1: get_reflection_subject\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:101] stage2: update_insight\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:101] stage3: long_contra_repeat\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:101] stage4: store_memory\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:112] ----- workflow.reflect_and_reconsolidate.print.end -----\n",
|
||
"2024-08-02 18:28:26 INFO MainThread memory_scope_service:83] service=MemoryScopeService init operation=reflect_and_reconsolidate\n",
|
||
"2024-08-02 18:28:26 INFO MainThread timer:75] ----- workflow.delete_all.begin -----\n",
|
||
"2024-08-02 18:28:26 INFO MainThread timer:75] ----- worker.set_query.begin -----\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_worker:145] ----- worker.set_query.end ----- cost=0.3171ms\n",
|
||
"2024-08-02 18:28:26 INFO MainThread timer:75] ----- worker.retrieve_all_memory.begin -----\n",
|
||
"2024-08-02 18:28:26 INFO MainThread retrieve_memory_worker:123] retrieve memory with query=.\n",
|
||
"2024-08-02 18:28:26 INFO ThreadPoolExecutor-0_2 timer:127] retrieve_expired_memory cost=382.0448ms query=\n",
|
||
"2024-08-02 18:28:26 INFO ThreadPoolExecutor-0_0 timer:127] retrieve_from_observation cost=383.0619ms query=\n",
|
||
"2024-08-02 18:28:26 INFO ThreadPoolExecutor-0_1 timer:127] retrieve_from_insight cost=383.0431ms query=\n",
|
||
"2024-08-02 18:28:26 INFO MainThread retrieve_memory_worker:132] memory_node_list.size=0\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_worker:145] ----- worker.retrieve_all_memory.end ----- cost=386.7860ms\n",
|
||
"2024-08-02 18:28:26 INFO MainThread timer:75] ----- worker.delete_all.begin -----\n",
|
||
"2024-08-02 18:28:26 INFO MainThread update_memory_worker:62] delete_all.size=0\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_worker:145] ----- worker.delete_all.end ----- cost=1.1411ms\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_workflow:167] ----- workflow.delete_all.end ----- cost=389.7450ms\n",
|
||
"2024-08-02 18:28:26 INFO MainThread timer:75] ----- workflow.retrieve_memory.begin -----\n",
|
||
"2024-08-02 18:28:26 INFO MainThread timer:75] ----- worker.set_query.begin -----\n",
|
||
"2024-08-02 18:28:26 INFO MainThread base_worker:145] ----- worker.set_query.end ----- cost=0.4051ms\n",
|
||
"2024-08-02 18:28:26 INFO ThreadPoolExecutor-0_2 timer:75] ----- worker.extract_time.begin -----\n",
|
||
"2024-08-02 18:28:26 INFO ThreadPoolExecutor-0_0 timer:75] ----- worker.retrieve_obs_ins.begin -----\n",
|
||
"2024-08-02 18:28:26 INFO ThreadPoolExecutor-0_2 extract_time_worker:37] contain_datetime=False\n",
|
||
"2024-08-02 18:28:26 INFO ThreadPoolExecutor-0_0 retrieve_memory_worker:123] retrieve memory with query=我的爱好是弹琴。.\n",
|
||
"2024-08-02 18:28:26 INFO ThreadPoolExecutor-0_2 base_worker:145] ----- worker.extract_time.end ----- cost=1.2507ms\n",
|
||
"2024-08-02 18:28:26 INFO ThreadPoolExecutor-0_4 timer:127] retrieve_expired_memory cost=0.0010ms query=我的爱好是弹琴。\n",
|
||
"2024-08-02 18:28:27 INFO ThreadPoolExecutor-0_1 timer:127] retrieve_from_insight cost=263.5777ms query=我的爱好是弹琴。\n",
|
||
"2024-08-02 18:28:27 INFO ThreadPoolExecutor-0_3 timer:127] retrieve_from_observation cost=317.2297ms query=我的爱好是弹琴。\n",
|
||
"2024-08-02 18:28:27 INFO ThreadPoolExecutor-0_0 retrieve_memory_worker:132] memory_node_list.size=0\n",
|
||
"2024-08-02 18:28:27 INFO ThreadPoolExecutor-0_0 base_worker:145] ----- worker.retrieve_obs_ins.end ----- cost=320.3712ms\n",
|
||
"2024-08-02 18:28:27 INFO ThreadPoolExecutor-0_0 timer:75] ----- worker.semantic_rank.begin -----\n",
|
||
"2024-08-02 18:28:27 WARNING ThreadPoolExecutor-0_0 semantic_rank_worker:38] Retrieve memory nodes is empty!\n",
|
||
"2024-08-02 18:28:27 INFO ThreadPoolExecutor-0_0 base_worker:145] ----- worker.semantic_rank.end ----- cost=0.8211ms\n",
|
||
"2024-08-02 18:28:27 INFO MainThread timer:75] ----- worker.fuse_rerank.begin -----\n",
|
||
"2024-08-02 18:28:27 WARNING MainThread fuse_rerank_worker:69] Ranked memory nodes list is empty.\n",
|
||
"2024-08-02 18:28:27 INFO MainThread base_worker:145] ----- worker.fuse_rerank.end ----- cost=1.2810ms\n",
|
||
"2024-08-02 18:28:27 INFO MainThread base_workflow:167] ----- workflow.retrieve_memory.end ----- cost=325.6671ms\n",
|
||
"2024-08-02 18:28:27 INFO MainThread timer:75] ----- workflow.read_message.begin -----\n",
|
||
"2024-08-02 18:28:27 INFO MainThread timer:75] ----- worker.read_message.begin -----\n",
|
||
"2024-08-02 18:28:27 INFO MainThread base_worker:145] ----- worker.read_message.end ----- cost=0.2921ms\n",
|
||
"2024-08-02 18:28:27 INFO MainThread base_workflow:167] ----- workflow.read_message.end ----- cost=1.1899ms\n",
|
||
"2024-08-02 18:28:27 INFO MainThread api_memory_chat:186] chat_messages=[Message(role='system', role_name='', content='你是一个名为MemoryScope的智能助理,请用中文简洁地回答问题。当前时间是2024-08-02 18:28:27 周五。', time_created=1722594507, memorized=False, meta_data={}), Message(role='user', role_name='用户', content='我的爱好是弹琴。', time_created=1722594506, memorized=False, meta_data={})]\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"回答1:\n",
|
||
"那真是一个优雅的爱好!弹琴不仅能够陶冶情操,还能提升音乐素养和手指灵活性。你最喜欢弹奏哪种类型的曲子呢?\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"memory_chat = ms.default_memory_chat\n",
|
||
"memory_chat.run_service_operation(\"delete_all\")\n",
|
||
"response = memory_chat.chat_with_memory(query=\"我的爱好是弹琴。\")\n",
|
||
"print(\"回答1:\\n\" + response.message.content)"
|
||
],
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"ExecuteTime": {
|
||
"end_time": "2024-08-02T10:28:29.660299Z",
|
||
"start_time": "2024-08-02T10:28:26.549127Z"
|
||
}
|
||
}
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"source": [
|
||
"You can choose to chat with or without multi-round conversation contexts. However, since *Memory Consolidation* has not been called, there's no memory pieces in the system yet."
|
||
],
|
||
"metadata": {
|
||
"collapsed": false
|
||
}
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 3,
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"2024-08-02 18:28:29 INFO MainThread timer:75] ----- workflow.retrieve_memory.begin -----\n",
|
||
"2024-08-02 18:28:29 INFO MainThread timer:75] ----- worker.set_query.begin -----\n",
|
||
"2024-08-02 18:28:29 INFO MainThread base_worker:145] ----- worker.set_query.end ----- cost=0.6740ms\n",
|
||
"2024-08-02 18:28:30 INFO MainThread timer:75] ----- worker.fuse_rerank.begin -----\n",
|
||
"2024-08-02 18:28:30 WARNING MainThread fuse_rerank_worker:69] Ranked memory nodes list is empty.\n",
|
||
"2024-08-02 18:28:30 INFO MainThread base_worker:145] ----- worker.fuse_rerank.end ----- cost=0.8800ms\n",
|
||
"2024-08-02 18:28:30 INFO MainThread base_workflow:167] ----- workflow.retrieve_memory.end ----- cost=384.5589ms\n",
|
||
"2024-08-02 18:28:30 INFO MainThread timer:75] ----- workflow.read_message.begin -----\n",
|
||
"2024-08-02 18:28:30 INFO MainThread timer:75] ----- worker.read_message.begin -----\n",
|
||
"2024-08-02 18:28:30 INFO MainThread base_worker:145] ----- worker.read_message.end ----- cost=0.2897ms\n",
|
||
"2024-08-02 18:28:30 INFO MainThread base_workflow:167] ----- workflow.read_message.end ----- cost=1.0922ms\n",
|
||
"2024-08-02 18:28:30 INFO MainThread api_memory_chat:186] chat_messages=[Message(role='system', role_name='', content='你是一个名为MemoryScope的智能助理,请用中文简洁地回答问题。当前时间是2024-08-02 18:28:30 周五。', time_created=1722594510, memorized=False, meta_data={}), Message(role='user', role_name='用户', content='我的爱好是弹琴。', time_created=1722594506, memorized=False, meta_data={}), Message(role='assistant', role_name='AI', content='那真是一个优雅的爱好!弹琴不仅能够陶冶情操,还能提升音乐素养和手指灵活性。你最喜欢弹奏哪种类型的曲子呢?', time_created=1722594509, memorized=False, meta_data={}), Message(role='user', role_name='用户', content='你知道我有什么乐器爱好吗?', time_created=1722594509, memorized=False, meta_data={})]\n",
|
||
"2024-08-02 18:28:32 INFO MainThread timer:75] ----- workflow.retrieve_memory.begin -----\n",
|
||
"2024-08-02 18:28:32 INFO MainThread timer:75] ----- worker.set_query.begin -----\n",
|
||
"2024-08-02 18:28:32 INFO MainThread base_worker:145] ----- worker.set_query.end ----- cost=0.7801ms\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"回答2:\n",
|
||
"您提到过的爱好是弹琴,所以我了解到您对弹奏乐器,特别是钢琴有兴趣。是否还有其他乐器爱好呢?\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"2024-08-02 18:28:32 INFO MainThread timer:75] ----- worker.fuse_rerank.begin -----\n",
|
||
"2024-08-02 18:28:32 WARNING MainThread fuse_rerank_worker:69] Ranked memory nodes list is empty.\n",
|
||
"2024-08-02 18:28:32 INFO MainThread base_worker:145] ----- worker.fuse_rerank.end ----- cost=0.8247ms\n",
|
||
"2024-08-02 18:28:32 INFO MainThread base_workflow:167] ----- workflow.retrieve_memory.end ----- cost=303.6480ms\n",
|
||
"2024-08-02 18:28:32 INFO MainThread api_memory_chat:186] chat_messages=[Message(role='system', role_name='', content='你是一个名为MemoryScope的智能助理,请用中文简洁地回答问题。当前时间是2024-08-02 18:28:32 周五。', time_created=1722594512, memorized=False, meta_data={}), Message(role='user', role_name='用户', content='你知道我有什么乐器爱好吗?', time_created=1722594512, memorized=False, meta_data={})]\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"回答3:\n",
|
||
"作为MemoryScope,我无法直接获取或记忆您的个人信息,包括您的乐器爱好,除非您之前已告知我。如果您愿意分享,我可以帮助您记录或提供与乐器爱好相关的信息。\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"response = memory_chat.chat_with_memory(query=\"你知道我有什么乐器爱好吗?\")\n",
|
||
"print(\"回答2:\\n\" + response.message.content)\n",
|
||
"response = memory_chat.chat_with_memory(query=\"你知道我有什么乐器爱好吗?\",\n",
|
||
" history_message_strategy=None)\n",
|
||
"print(\"回答3:\\n\" + response.message.content)"
|
||
],
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"ExecuteTime": {
|
||
"end_time": "2024-08-02T10:28:35.807252Z",
|
||
"start_time": "2024-08-02T10:28:29.659682Z"
|
||
}
|
||
}
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"source": [
|
||
"## Memory Consolidation\n",
|
||
"Now, we do a bit more chatting and try out **Memory Consolidation**."
|
||
],
|
||
"metadata": {
|
||
"collapsed": false
|
||
}
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"2024-08-02 18:28:35 INFO MainThread timer:75] ----- workflow.retrieve_memory.begin -----\n",
|
||
"2024-08-02 18:28:35 INFO MainThread timer:75] ----- worker.set_query.begin -----\n",
|
||
"2024-08-02 18:28:35 INFO MainThread base_worker:145] ----- worker.set_query.end ----- cost=0.4082ms\n",
|
||
"2024-08-02 18:28:36 INFO MainThread timer:75] ----- worker.fuse_rerank.begin -----\n",
|
||
"2024-08-02 18:28:36 WARNING MainThread fuse_rerank_worker:69] Ranked memory nodes list is empty.\n",
|
||
"2024-08-02 18:28:36 INFO MainThread base_worker:145] ----- worker.fuse_rerank.end ----- cost=1.5481ms\n",
|
||
"2024-08-02 18:28:36 INFO MainThread base_workflow:167] ----- workflow.retrieve_memory.end ----- cost=384.7449ms\n",
|
||
"2024-08-02 18:28:36 INFO MainThread timer:75] ----- workflow.read_message.begin -----\n",
|
||
"2024-08-02 18:28:36 INFO MainThread timer:75] ----- worker.read_message.begin -----\n",
|
||
"2024-08-02 18:28:36 INFO MainThread base_worker:145] ----- worker.read_message.end ----- cost=0.9732ms\n",
|
||
"2024-08-02 18:28:36 INFO MainThread base_workflow:167] ----- workflow.read_message.end ----- cost=1.9441ms\n",
|
||
"2024-08-02 18:28:36 INFO MainThread api_memory_chat:186] chat_messages=[Message(role='system', role_name='', content='你是一个名为MemoryScope的智能助理,请用中文简洁地回答问题。当前时间是2024-08-02 18:28:36 周五。', time_created=1722594516, memorized=False, meta_data={}), Message(role='user', role_name='用户', content='我的爱好是弹琴。', time_created=1722594506, memorized=False, meta_data={}), Message(role='assistant', role_name='AI', content='那真是一个优雅的爱好!弹琴不仅能够陶冶情操,还能提升音乐素养和手指灵活性。你最喜欢弹奏哪种类型的曲子呢?', time_created=1722594509, memorized=False, meta_data={}), Message(role='user', role_name='用户', content='你知道我有什么乐器爱好吗?', time_created=1722594509, memorized=False, meta_data={}), Message(role='assistant', role_name='AI', content='您提到过的爱好是弹琴,所以我了解到您对弹奏乐器,特别是钢琴有兴趣。是否还有其他乐器爱好呢?', time_created=1722594512, memorized=False, meta_data={}), Message(role='user', role_name='用户', content='你知道我有什么乐器爱好吗?', time_created=1722594512, memorized=False, meta_data={}), Message(role='assistant', role_name='AI', content='作为MemoryScope,我无法直接获取或记忆您的个人信息,包括您的乐器爱好,除非您之前已告知我。如果您愿意分享,我可以帮助您记录或提供与乐器爱好相关的信息。', time_created=1722594515, memorized=False, meta_data={}), Message(role='user', role_name='用户', content='我在阿里巴巴干活', time_created=1722594515, memorized=False, meta_data={})]\n",
|
||
"2024-08-02 18:28:40 INFO MainThread timer:75] ----- workflow.retrieve_memory.begin -----\n",
|
||
"2024-08-02 18:28:40 INFO MainThread timer:75] ----- worker.set_query.begin -----\n",
|
||
"2024-08-02 18:28:40 INFO MainThread base_worker:145] ----- worker.set_query.end ----- cost=0.6080ms\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"回答4:\n",
|
||
"太好了,阿里巴巴是一家知名的国际企业,涉及电子商务、零售、互联网和技术等多个领域。在阿里巴巴工作,您可能参与到了推动数字经济发展和创新的前沿工作中。希望您在那边的工作经历丰富且充满成就感!如果有任何职业发展或相关问题,欢迎随时探讨。\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"2024-08-02 18:28:42 INFO MainThread timer:75] ----- worker.fuse_rerank.begin -----\n",
|
||
"2024-08-02 18:28:42 WARNING MainThread fuse_rerank_worker:69] Ranked memory nodes list is empty.\n",
|
||
"2024-08-02 18:28:42 INFO MainThread base_worker:145] ----- worker.fuse_rerank.end ----- cost=1.0219ms\n",
|
||
"2024-08-02 18:28:42 INFO MainThread base_workflow:167] ----- workflow.retrieve_memory.end ----- cost=1879.3590ms\n",
|
||
"2024-08-02 18:28:42 INFO MainThread timer:75] ----- workflow.read_message.begin -----\n",
|
||
"2024-08-02 18:28:42 INFO MainThread timer:75] ----- worker.read_message.begin -----\n",
|
||
"2024-08-02 18:28:42 INFO MainThread base_worker:145] ----- worker.read_message.end ----- cost=0.2019ms\n",
|
||
"2024-08-02 18:28:42 INFO MainThread base_workflow:167] ----- workflow.read_message.end ----- cost=0.8912ms\n",
|
||
"2024-08-02 18:28:42 INFO MainThread api_memory_chat:186] chat_messages=[Message(role='system', role_name='', content='你是一个名为MemoryScope的智能助理,请用中文简洁地回答问题。当前时间是2024-08-02 18:28:42 周五。', time_created=1722594522, memorized=False, meta_data={}), Message(role='user', role_name='用户', content='我的爱好是弹琴。', time_created=1722594506, memorized=False, meta_data={}), Message(role='assistant', role_name='AI', content='那真是一个优雅的爱好!弹琴不仅能够陶冶情操,还能提升音乐素养和手指灵活性。你最喜欢弹奏哪种类型的曲子呢?', time_created=1722594509, memorized=False, meta_data={}), Message(role='user', role_name='用户', content='你知道我有什么乐器爱好吗?', time_created=1722594509, memorized=False, meta_data={}), Message(role='assistant', role_name='AI', content='您提到过的爱好是弹琴,所以我了解到您对弹奏乐器,特别是钢琴有兴趣。是否还有其他乐器爱好呢?', time_created=1722594512, memorized=False, meta_data={}), Message(role='user', role_name='用户', content='你知道我有什么乐器爱好吗?', time_created=1722594512, memorized=False, meta_data={}), Message(role='assistant', role_name='AI', content='作为MemoryScope,我无法直接获取或记忆您的个人信息,包括您的乐器爱好,除非您之前已告知我。如果您愿意分享,我可以帮助您记录或提供与乐器爱好相关的信息。', time_created=1722594515, memorized=False, meta_data={}), Message(role='user', role_name='用户', content='我在阿里巴巴干活', time_created=1722594515, memorized=False, meta_data={}), Message(role='assistant', role_name='AI', content='太好了,阿里巴巴是一家知名的国际企业,涉及电子商务、零售、互联网和技术等多个领域。在阿里巴巴工作,您可能参与到了推动数字经济发展和创新的前沿工作中。希望您在那边的工作经历丰富且充满成就感!如果有任何职业发展或相关问题,欢迎随时探讨。', time_created=1722594520, memorized=False, meta_data={}), Message(role='user', role_name='用户', content='今天下午吃什么水果好?', time_created=1722594520, memorized=False, meta_data={})]\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"response = memory_chat.chat_with_memory(query=\"我在阿里巴巴干活\")\n",
|
||
"print(\"回答4:\\n\" + response.message.content)\n",
|
||
"response = memory_chat.chat_with_memory(query=\"今天下午吃什么水果好?\")\n",
|
||
"print(\"回答5:\\n\" + response.message.content)\n",
|
||
"response = memory_chat.chat_with_memory(query=\"我喜欢吃西瓜。\")\n",
|
||
"print(\"回答6:\\n\" + response.message.content)\n",
|
||
"response = memory_chat.chat_with_memory(query=\"帮我写一句给朋友的生日祝福语,简短一点。\")\n",
|
||
"print(\"回答7:\\n\" + response.message.content)"
|
||
],
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"is_executing": true,
|
||
"ExecuteTime": {
|
||
"start_time": "2024-08-02T10:28:35.808409Z"
|
||
}
|
||
}
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"outputs": [],
|
||
"source": [
|
||
"memory_service = ms.default_memory_service\n",
|
||
"memory_service.init_service()\n",
|
||
"result = memory_service.consolidate_memory()\n",
|
||
"print(f\"consolidate_memory result={result}\")"
|
||
],
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"is_executing": true
|
||
}
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"source": [
|
||
"**Memory Consolidation** extracted 3 *observations* out of the 7 chat messages from the user, with the uninformative ones being filtered out.\n",
|
||
"\n",
|
||
"We try more cases to test its time awareness and the ability to filter out fictitious contents from the user."
|
||
],
|
||
"metadata": {
|
||
"collapsed": false
|
||
}
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"outputs": [],
|
||
"source": [
|
||
"response = memory_chat.chat_with_memory(query=\"假如我去京东工作,前景怎么样?\")\n",
|
||
"print(\"回答8:\\n\" + response.message.content)\n",
|
||
"response = memory_chat.chat_with_memory(query=\"记一下,下周我准备去北京出差\")\n",
|
||
"print(\"回答9:\\n\" + response.message.content)\n",
|
||
"response = memory_chat.chat_with_memory(query=\"我同学李亚平现在在亚马逊工作,他下个月回上海,我要和他吃个饭\")\n",
|
||
"print(\"回答10:\\n\" + response.message.content)\n",
|
||
"response = memory_chat.chat_with_memory(query=\"小亮是我最好的朋友,他决定去山西上大学。以这个为开头写一个80字的微剧本。\")\n",
|
||
"print(\"回答11:\\n\" + response.message.content)\n",
|
||
"response = memory_chat.chat_with_memory(query=\"SMCI是什么公司,做什么的?\")\n",
|
||
"print(\"回答12:\\n\" + response.message.content)"
|
||
],
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"is_executing": true
|
||
}
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"outputs": [],
|
||
"source": [
|
||
"result = memory_service.consolidate_memory()\n",
|
||
"print(f\"consolidate_memory result={result}\")"
|
||
],
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"is_executing": true
|
||
}
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"source": [
|
||
"We can see **Memory Consolidation** successfully filtered out fictitious contents, and shows good time sensitivity.\n",
|
||
"\n",
|
||
"We try more cases to test its resolution of conflicting contents."
|
||
],
|
||
"metadata": {
|
||
"collapsed": false
|
||
}
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"outputs": [],
|
||
"source": [
|
||
"response = memory_chat.chat_with_memory(query=\"今天下午吃什么水果好?\")\n",
|
||
"print(\"回答13:\\n\" + response.message.content)\n",
|
||
"response = memory_chat.chat_with_memory(query=\"西瓜确实不错,但是我也喜欢吃芒果。我今天想吃芒果。\")\n",
|
||
"print(\"回答14:\\n\" + response.message.content)\n",
|
||
"response = memory_chat.chat_with_memory(query=\"我最近跳槽去了美团。\")\n",
|
||
"print(\"回答15:\\n\" + response.message.content)\n",
|
||
"response = memory_chat.chat_with_memory(query=\"我还喜欢吃桃子和苹果。\")\n",
|
||
"print(\"回答16:\\n\" + response.message.content)\n",
|
||
"response = memory_chat.chat_with_memory(query=\"我不喜欢吃椰子。\")\n",
|
||
"print(\"回答17:\\n\" + response.message.content)\n",
|
||
"response = memory_chat.chat_with_memory(query=\"我准备下个月去海南冲浪。\")\n",
|
||
"print(\"回答18:\\n\" + response.message.content)\n",
|
||
"response = memory_chat.chat_with_memory(query=\"明天是我生日。\")\n",
|
||
"print(\"回答19:\\n\" + response.message.content)"
|
||
],
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"is_executing": true
|
||
}
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"outputs": [],
|
||
"source": [
|
||
"result = memory_service.consolidate_memory()\n",
|
||
"print(f\"consolidate_memory result={result}\")"
|
||
],
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"is_executing": true
|
||
}
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"source": [
|
||
"## Reflection and Re-Consolidation\n",
|
||
"Now, we have accumulated enough new *observations* in the system, so we can call **Reflection and Re-Consolidation**, let's see what will it get."
|
||
],
|
||
"metadata": {
|
||
"collapsed": false
|
||
}
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"outputs": [],
|
||
"source": [
|
||
"result = memory_service.reflect_and_reconsolidate()\n",
|
||
"print(f\"consolidate_memory result={result}\")"
|
||
],
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"is_executing": true
|
||
}
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"source": [
|
||
"## Low response-time (RT) for the user\n",
|
||
"Here we test the RT of MemoryScope system for the user. Specifically, we test the difference of RT when responding with and without retrieving memory pieces from the system."
|
||
],
|
||
"metadata": {
|
||
"collapsed": false
|
||
}
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"outputs": [],
|
||
"source": [
|
||
"import time\n",
|
||
"\n",
|
||
"start_time = time.time()\n",
|
||
"response = memory_chat.chat_with_memory(query=\"你知道我的乐器爱好是什么吗?\",\n",
|
||
" history_message_strategy=None)\n",
|
||
"end_time = time.time()\n",
|
||
"total_time = end_time - start_time\n",
|
||
"print(\"使用记忆检索\\n回答20:\\n\" + response.message.content + f\"\\n 耗时:{total_time}秒\\n\")\n",
|
||
"\n",
|
||
"start_time = time.time()\n",
|
||
"response = memory_chat.chat_with_memory(query=\"你知道我接下去的一个月内有什么计划吗?\",\n",
|
||
" history_message_strategy=None)\n",
|
||
"end_time = time.time()\n",
|
||
"total_time = end_time - start_time\n",
|
||
"print(\"使用记忆检索\\n回答21:\\n\" + response.message.content + f\"\\n 耗时:{total_time}秒\\n\")\n",
|
||
"\n",
|
||
"memory_chat.run_service_operation(\"delete_all\")\n",
|
||
"start_time = time.time()\n",
|
||
"response = memory_chat.chat_with_memory(query=\"你知道我的乐器爱好是什么吗?\",\n",
|
||
" history_message_strategy=None)\n",
|
||
"end_time = time.time()\n",
|
||
"total_time = end_time - start_time\n",
|
||
"print(\"不使用记忆检索\\n回答20:\\n\" + response.message.content + f\"\\n 耗时:{total_time}秒\\n\")\n",
|
||
"\n",
|
||
"start_time = time.time()\n",
|
||
"response = memory_chat.chat_with_memory(query=\"你知道我接下去的一个月内有什么计划吗?\\n\",\n",
|
||
" history_message_strategy=None)\n",
|
||
"end_time = time.time()\n",
|
||
"total_time = end_time - start_time\n",
|
||
"print(\"不使用记忆检索\\n回答21:\\n\" + response.message.content + f\"\\n 耗时:{total_time}秒\")"
|
||
],
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"is_executing": true
|
||
}
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"source": [
|
||
"We can see responding with retrieving memory pieces from MemoryScope does not increase RT."
|
||
],
|
||
"metadata": {
|
||
"collapsed": false
|
||
}
|
||
}
|
||
],
|
||
"metadata": {
|
||
"kernelspec": {
|
||
"display_name": "Python 3",
|
||
"language": "python",
|
||
"name": "python3"
|
||
},
|
||
"language_info": {
|
||
"codemirror_mode": {
|
||
"name": "ipython",
|
||
"version": 2
|
||
},
|
||
"file_extension": ".py",
|
||
"mimetype": "text/x-python",
|
||
"name": "python",
|
||
"nbconvert_exporter": "python",
|
||
"pygments_lexer": "ipython2",
|
||
"version": "2.7.6"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 0
|
||
}
|