From 52e9c77c1302c6bf77ee5a07838b30d3735835b5 Mon Sep 17 00:00:00 2001 From: Li Yin Date: Sun, 30 Jun 2024 21:08:54 -0700 Subject: [PATCH] fix the wrongly ignored images --- .gitignore | 6 ++--- docs/source/_static/images/database.png | Bin 0 -> 35527 bytes docs/source/_static/images/dataclass.png | Bin 0 -> 21499 bytes docs/source/developer_notes/prompt.rst | 27 +++++++++++++---------- 4 files changed, 18 insertions(+), 15 deletions(-) create mode 100644 docs/source/_static/images/database.png create mode 100644 docs/source/_static/images/dataclass.png diff --git a/.gitignore b/.gitignore index 51185db2..c4ccbaf9 100644 --- a/.gitignore +++ b/.gitignore @@ -38,6 +38,6 @@ traces/ *.log storage/ *.pkl -*.png -*.dot -*.svg +/*.png +/*.dot +/*.svg diff --git a/docs/source/_static/images/database.png b/docs/source/_static/images/database.png new file mode 100644 index 0000000000000000000000000000000000000000..b7903a894247fbaf96c5c8864bdd75300dce9ab4 GIT binary patch literal 35527 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

luW2ET_QH(Nm1X=vf^6Whd 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 literal 0 HcmV?d00001 diff --git a/docs/source/_static/images/dataclass.png b/docs/source/_static/images/dataclass.png new file mode 100644 index 0000000000000000000000000000000000000000..33f4c4836d6b9ef64593691d82d7b2818480e31b GIT binary patch literal 21499 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 literal 0 HcmV?d00001 diff --git a/docs/source/developer_notes/prompt.rst b/docs/source/developer_notes/prompt.rst index c9a1e888..dfc9532f 100644 --- a/docs/source/developer_notes/prompt.rst +++ b/docs/source/developer_notes/prompt.rst @@ -19,11 +19,12 @@ Design ---------------- `LightRAG` seeks to maximize developers' control over the prompt. -Thus, in most cases we help developers gather together different sections and form them into one prompt. +Thus, in most cases, we help developers gather different sections and form them into one prompt. This prompt will then be send to the LLM as a single message. The default role of the message we use is `system`. Though it is not a special token, we use ```` to represent the system message in the prompt, which works quite well. + .. code-block:: python simple_prompt = r""" You are a helpful assistant. User: What can you help me with?""" @@ -53,7 +54,8 @@ Data Flow in LLM applications Look at the most complicated case: We will have user query, retrieved context, task description, definition of tools, few-shot examples, past conversation history, step history from the agent, and the output format specification. All these different parts need to be formatted into a single prompt. -We have to do all this with flexiblity and also easy for developers to read. +We have to do all this with flexibility and also make it easy for developers to read. + Why Jinja2? @@ -85,10 +87,11 @@ To format the prompt, you can use any of Python's native string formatting. We opted for `Jinja2` [1]_ as the templating engine for the prompt. -Besides of the placeholders using ``{{}}`` for key-word arguments, Jinja2 also allow users to write code similar to Python syntax. -This includes conditionals, loops, filters, and even comments that is lacked from Python's native string formatting. +Besides the placeholders using ``{{}}`` for keyword arguments, Jinja2 also allow users to write code similar to Python syntax. +This includes conditionals, loops, filters, and even comments, which are lacking in Python's native string formatting. Here is one example of using `Jinja2` to format the prompt: + .. code-block:: python def jinja2_template_example(**kwargs): @@ -144,8 +147,7 @@ Prompt class We created our :class:`Prompt Component` to render the prompt with the string ``template`` and ``prompt_kwargs``. -It is a rather simple component, but it is rather handy. - +It is a simple component, but it is quite handy. Let's use the same template as above: .. code-block:: python @@ -163,7 +165,7 @@ Let's use the same template as above: print(prompt(input_str=input_str)) # takes the rest arguments in keyword arguments The ``Prompt`` class allow us to preset some of the prompt arguments at initialization, and then we can call the prompt with the rest of the arguments. -Also, by subclassing ``Component``, we get to easily visualize this component with ``print``. +Also, by subclassing ``Component``, we can easily visualize this component with ``print``. Here is the output: .. code-block:: @@ -181,12 +183,13 @@ Here is the output: User: {{ input_str }}, prompt_kwargs: {'task_desc_str': 'You are a helpful assitant', 'tools': ['google', 'wikipedia', 'wikidata']}, prompt_variables: ['input_str', 'tools', 'task_desc_str'] ) -As all components, you can use ``to_dict`` and ``from_dict`` to serialize and deserialize the component. +As with all components, you can use ``to_dict`` and ``from_dict`` to serialize and deserialize the component. Default Prompt Template ------------------------- -In default, ``Prompt`` class uses the :const:`DEFAULT_LIGHTRAG_SYSTEM_PROMPT` as its string template if no template is provided. -This default template will allow you conditionally passing seven important variables designed from the data flow diagram above. + +In default, the ``Prompt`` class uses the :const:`DEFAULT_LIGHTRAG_SYSTEM_PROMPT` as its string template if no template is provided. +This default template allows you to conditionally passing seven important variables designed from the data flow diagram above. These varaibles are: .. code-block:: python @@ -210,7 +213,7 @@ Now, let's see the minimum case where we only have the user query: output = prompt(input_str=input_str) print(output) -The output will be bare minimum with only the user query and a prefix for assistant to respond: +The output will be the bare minimum with only the user query and a prefix for assistant to respond: .. code-block:: @@ -221,7 +224,7 @@ The output will be bare minimum with only the user query and a prefix for assist .. note:: - We barely need to use the raw ``Prompt`` class directly as it is orchestrated by the ``Generator`` component. + In reality, we barely need to use the raw ``Prompt`` class directly as it is orchestrated by the ``Generator`` component together with the ``ModelClient`` that we will introduce next.