From ba8fa0b609342142f41015e0ae1e26dd68a75d6f Mon Sep 17 00:00:00 2001 From: zachary62 Date: Sat, 1 Mar 2025 00:51:21 -0500 Subject: [PATCH] update guide --- assets/success.png | Bin 0 -> 44969 bytes docs/guide.md | 116 ++++++++++++++++----------------------------- docs/node.md | 8 ++-- 3 files changed, 45 insertions(+), 79 deletions(-) create mode 100644 assets/success.png diff --git a/assets/success.png b/assets/success.png new file mode 100644 index 0000000000000000000000000000000000000000..f70992262170f0e115be23007b218a73e0d5ccc6 GIT binary patch literal 44969 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 CynV_5 literal 0 HcmV?d00001 diff --git a/docs/guide.md b/docs/guide.md index 21907bd..f650f0a 100644 --- a/docs/guide.md +++ b/docs/guide.md @@ -7,50 +7,52 @@ nav_order: 1 # LLM System Design Guidance - ## System Design Steps -1. **Project Requirements**: Understand what the project is for and what are required. +1. **Project Requirements**: Clearify the requirements for your project. -2. **Utility Functions**: LLM Systems are like the brain +2. **Utility Functions**: Although the system acts as the main decision-maker, it depends on utility functions for routine tasks and real-world interactions: + - `call_llm` (of course) + - Routine tasks (e.g., chunking text, formatting strings) + - External inputs (e.g., searching the web, reading emails) + - Output generation (e.g., producing reports, sending emails) +> **If a human can’t solve it, an LLM can’t automate it!** Before building an LLM system, thoroughly understand the problem by manually solving example inputs to develop intuition. +{: .best-practice } - - Determine the utility functions on which this project depends (e.g., for LLM calls, web searches, file handling). - - Implement these functions and write basic tests to confirm they work correctly. - -> After this step, don't jump straight into building an LLM system. -> -> First, make sure you clearly understand the problem by manually solving it using some example inputs. -> -> It's always easier to first build a solid intuition about the problem and its solution, then focus on automating the process. -{: .warning } - -3. **Flow Design** - - Build a high-level design of the flow of nodes (for example, using a Mermaid diagram) to automate the solution. - - For each node in your flow, specify: - - **prep**: How data is accessed or retrieved. - - **exec**: The specific utility function to use (ideally one function per node). - - **post**: How data is updated or persisted. +3. **Flow Design (Compute)**: Create a high-level design for the application’s flow. - Identify potential design patterns, such as Batch, Agent, or RAG. + - For each node, specify: + - **Purpose**: The high-level compute logic + - `exec`: The specific utility function to call (ideally, one function per node) -4. **Data Structure** - - Decide how you will store and update state (in memory for smaller applications or in a database for larger, persistent needs). - - If it isn’t straightforward, define data schemas or models detailing how information is stored, accessed, and updated. - - As you finalize your data structure, you may need to refine your flow design. +4. **Data Schema (Data)**: Plan how data will be stored and updated. + - For simple apps, use an in-memory dictionary. + - For more complex apps or when persistence is required, use a database. + - For each node, specify: + - `prep`: How the node reads data + - `post`: How the node writes data -5. **Implementation** - - For each node, implement the **prep**, **exec**, and **post** functions based on the flow design. - - Start coding with a simple, direct approach (avoid over-engineering at first). +5. **Implementation**: Implement nodes and flows based on the design. + - Start with a simple, direct approach (avoid over-engineering and full-scale type checking or testing). Let it fail fast to identify weaknesses. - Add logging throughout the code to facilitate debugging. -6. **Optimization** - - **Prompt Engineering**: Use clear, specific instructions with illustrative examples to reduce ambiguity. - - **Task Decomposition**: Break large or complex tasks into manageable, logical steps. +6. **Optimization**: + - **Use Intuition**: For a quick initial evaluation, human intuition is often a good start. + - **Redesign Flow (Back to Step 3)**: Consider breaking down tasks further, introducing agentic decisions, or better managing input contexts. + - If your flow design is already solid, move on to micro-optimizations: + - **Prompt Engineering**: Use clear, specific instructions with examples to reduce ambiguity. + - **In-Context Learning**: Provide robust examples for tasks that are difficult to specify with instructions alone. + +> **You’ll likely iterate repeatedly!** Expect to repeat Steps 3–6 hundreds of times. +> +>
+{: .best-practice } 7. **Reliability** - - **Structured Output**: Ensure outputs conform to the required format. Consider increasing `max_retries` if needed. - - **Test Cases**: Develop clear, reproducible tests for each part of the flow. - - **Self-Evaluation**: Introduce an additional node (powered by LLMs) to review outputs when results are uncertain. + - **Node Retries**: Add checks in the node `exec` to ensure outputs meet requirements, and consider increasing `max_retries` and `wait` times. + - **Logging and Visualization**: Maintain logs of all attempts and visualize node results for easier debugging. + - **Self-Evaluation**: Add a separate node (powered by an LLM) to review outputs when results are uncertain. ## Example LLM Project File Structure @@ -67,47 +69,9 @@ my_project/ └── design.md ``` -### `docs/` - -Holds all project documentation. Include a `design.md` file covering: -- Project requirements -- Utility functions -- High-level flow (with a Mermaid diagram) -- Shared memory data structure -- Node designs: - - Purpose and design (e.g., batch or async) - - Data read (prep) and write (post) - - Data processing (exec) - -### `utils/` - -Houses functions for external API calls (e.g., LLMs, web searches, etc.). It’s recommended to dedicate one Python file per API call, with names like `call_llm.py` or `search_web.py`. Each file should include: - -- The function to call the API -- A main function to run that API call for testing - -For instance, here’s a simplified `call_llm.py` example: - -```python -from openai import OpenAI - -def call_llm(prompt): - client = OpenAI(api_key="YOUR_API_KEY_HERE") - response = client.chat.completions.create( - model="gpt-4o", - messages=[{"role": "user", "content": prompt}] - ) - return response.choices[0].message.content - -if __name__ == "__main__": - prompt = "Hello, how are you?" - print(call_llm(prompt)) -``` - -### `main.py` - -Serves as the project’s entry point. - -### `flow.py` - -Implements the application’s flow, starting with node followed by the flow structure. \ No newline at end of file +- **`docs/design.md`**: Contains project documentation and the details of each step above. +- **`utils/`**: Contains all utility functions. + - It’s recommended to dedicate one Python file to each API call, for example `call_llm.py` or `search_web.py`. + - Each file should also include a `main()` function to try that API call +- **`flow.py`**: Implements the application’s flow, starting with node definitions followed by the overall structure. +- **`main.py`**: Serves as the project’s entry point. \ No newline at end of file diff --git a/docs/node.md b/docs/node.md index 83fd0bf..834e4e4 100644 --- a/docs/node.md +++ b/docs/node.md @@ -9,6 +9,11 @@ nav_order: 1 A **Node** is the smallest building block. Each Node has 3 steps `prep->exec->post`: +
+ +
+ + 1. `prep(shared)` - **Read and preprocess data** from `shared` store. - Examples: *query DB, read files, or serialize data into a string*. @@ -26,9 +31,6 @@ A **Node** is the smallest building block. Each Node has 3 steps `prep->exec->po - Examples: *update DB, change states, log results*. - **Decide the next action** by returning a *string* (`action = "default"` if *None*). -
- -
> **Why 3 steps?** To enforce the principle of *separation of concerns*. The data storage and data processing are operated separately.