.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "build_tutorial/rag.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code. .. rst-class:: sphx-glr-example-title .. _sphx_glr_build_tutorial_rag.py: .. _rag: 检索增强生成(RAG) ================================================================== Agentscope 内置了对检索增强生成(RAG)的支持。AgentScope 中与 RAG 相关的两个关键模块是:Knowledge 和 KnowledgeBank。 创建和使用知识(Knowledge)实例 ---------------------------------------------- 虽然 Knowledge 是一个基类,但 AgentScope 中目前有一个具体的内置知识类。(在线搜索会知识类会很快更新。) - LlamaIndexKnowledge:旨在与最流行的 RAG 库之一 `LlamaIndex `_ 协同工作,用作本地知识,并通过配置支持 LlamaIndex 的大部分功能。 创建一个 LlamaIndexKnowledge 实例 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 快速创建一个 LlamaIndexKnowledge 实例的方法是使用 build_knowledge_instance 函数。 该函数需要传入三个参数: knowledge_id:该知识实例的唯一标识符 data_dirs_and_types:一个字典,其键为数据所在目录的字符串,值为数据文件的扩展名 emb_model_config_name:AgentScope 中embedding模型配置的名称(需要在 AgentScope 中预先初始化) 一个简单的例子如下。 .. GENERATED FROM PYTHON SOURCE LINES 32-61 .. code-block:: Python import os import agentscope from agentscope.rag.llama_index_knowledge import LlamaIndexKnowledge agentscope.init( model_configs=[ { "model_type": "dashscope_text_embedding", "config_name": "qwen_emb_config", "model_name": "text-embedding-v2", "api_key": os.getenv("DASHSCOPE_API_KEY"), }, ], ) local_knowledge = LlamaIndexKnowledge.build_knowledge_instance( knowledge_id="agentscope_qa", data_dirs_and_types={"./": [".md"]}, emb_model_config_name="qwen_emb_config", ) nodes = local_knowledge.retrieve( "what is agentscope?", similarity_top_k=1, ) print(f"\nThe retrieved content:\n{nodes[0].content}") .. rst-class:: sphx-glr-script-out .. code-block:: none [nltk_data] Downloading package punkt_tab to [nltk_data] /opt/hostedtoolcache/Python/3.9.21/x64/lib/python3.9/s [nltk_data] ite-packages/llama_index/core/_static/nltk_cache... [nltk_data] Unzipping tokenizers/punkt_tab.zip. Parsing nodes: 0%| | 0/17 [00:00`_ 来对数据进行预处理。 .. GENERATED FROM PYTHON SOURCE LINES 66-119 .. code-block:: Python flex_knowledge_config = { "knowledge_id": "agentscope_qa_flex", "knowledge_type": "llamaindex_knowledge", "emb_model_config_name": "qwen_emb_config", "chunk_size": 1024, "chunk_overlap": 40, "data_processing": [ { "load_data": { "loader": { "create_object": True, "module": "llama_index.core", "class": "SimpleDirectoryReader", "init_args": { "input_dir": "./", "required_exts": [ ".md", ], }, }, }, "store_and_index": { "transformations": [ { "create_object": True, "module": "llama_index.core.node_parser", "class": "SentenceSplitter", "init_args": { "chunk_size": 1024, }, }, ], }, }, ], } local_knowledge_flex = LlamaIndexKnowledge.build_knowledge_instance( knowledge_id="agentscope_qa_flex", knowledge_config=flex_knowledge_config, ) nodes = local_knowledge.retrieve( "what is agentscope?", similarity_top_k=1, ) print(f"\nThe retrieved content:\n{nodes[0].content}") .. rst-class:: sphx-glr-script-out .. code-block:: none Parsing nodes: 0%| | 0/17 [00:00 str: """Get current timestamp.""" return datetime.datetime.now().strftime(format_) app = Flask(__name__) @app.route("/embedding/", methods=["POST"]) def get_embedding() -> dict: """Receive post request and return response""" json = request.get_json() inputs = json.pop("inputs") global model if isinstance(inputs, str): inputs = [inputs] embeddings = model.encode(inputs) return { "data": { "completion_tokens": 0, "messages": {}, "prompt_tokens": 0, "response": { "data": [ { "embedding": emb.astype(float).tolist(), } for emb in embeddings ], "created": "", "id": create_timestamp(), "model": "flask_model", "object": "text_completion", "usage": { "completion_tokens": 0, "prompt_tokens": 0, "total_tokens": 0, }, }, "total_tokens": 0, "username": "", }, } if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("--model_name_or_path", type=str, required=True) parser.add_argument("--device", type=str, default="auto") parser.add_argument("--port", type=int, default=8000) args = parser.parse_args() global model print("setting up for embedding model....") model = SentenceTransformer( args.model_name_or_path ) app.run(port=args.port) * 第三部:启动服务器。 .. code-block:: bash python setup_ms_service.py --model_name_or_path {$PATH_TO_gte_Qwen2_7B_instruct} 测试服务是否成功启动。 .. code-block:: python from agentscope.models.post_model import PostAPIEmbeddingWrapper model = PostAPIEmbeddingWrapper( config_name="test_config", api_url="http://127.0.0.1:8000/embedding/", json_args={ "max_length": 4096, "temperature": 0.5 } ) print(model("testing")) .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 37.369 seconds) .. _sphx_glr_download_build_tutorial_rag.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: rag.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: rag.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: rag.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_