mirror of
https://github.com/The-Pocket/PocketFlow-Tutorial-Codebase-Knowledge.git
synced 2026-08-29 08:34:31 +08:00
Initial commit
This commit is contained in:
+1664
File diff suppressed because it is too large
Load Diff
+1664
File diff suppressed because it is too large
Load Diff
+92
@@ -0,0 +1,92 @@
|
|||||||
|
# Dependencies
|
||||||
|
node_modules/
|
||||||
|
vendor/
|
||||||
|
.pnp/
|
||||||
|
.pnp.js
|
||||||
|
|
||||||
|
# Build outputs
|
||||||
|
dist/
|
||||||
|
build/
|
||||||
|
out/
|
||||||
|
*.pyc
|
||||||
|
__pycache__/
|
||||||
|
|
||||||
|
# Environment files
|
||||||
|
.env
|
||||||
|
.env.local
|
||||||
|
.env.*.local
|
||||||
|
.env.development
|
||||||
|
.env.test
|
||||||
|
.env.production
|
||||||
|
|
||||||
|
# IDE - VSCode
|
||||||
|
.vscode/*
|
||||||
|
!.vscode/settings.json
|
||||||
|
!.vscode/tasks.json
|
||||||
|
!.vscode/launch.json
|
||||||
|
!.vscode/extensions.json
|
||||||
|
|
||||||
|
# IDE - JetBrains
|
||||||
|
.idea/
|
||||||
|
*.iml
|
||||||
|
*.iws
|
||||||
|
*.ipr
|
||||||
|
|
||||||
|
# IDE - Eclipse
|
||||||
|
.project
|
||||||
|
.classpath
|
||||||
|
.settings/
|
||||||
|
|
||||||
|
# Logs
|
||||||
|
logs/
|
||||||
|
*.log
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
|
||||||
|
# Operating System
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
|
||||||
|
# Testing
|
||||||
|
coverage/
|
||||||
|
.nyc_output/
|
||||||
|
|
||||||
|
# Temporary files
|
||||||
|
*.tmp
|
||||||
|
*.temp
|
||||||
|
.cache/
|
||||||
|
|
||||||
|
# Compiled files
|
||||||
|
*.com
|
||||||
|
*.class
|
||||||
|
*.dll
|
||||||
|
*.exe
|
||||||
|
*.o
|
||||||
|
*.so
|
||||||
|
|
||||||
|
# Package files
|
||||||
|
*.7z
|
||||||
|
*.dmg
|
||||||
|
*.gz
|
||||||
|
*.iso
|
||||||
|
*.jar
|
||||||
|
*.rar
|
||||||
|
*.tar
|
||||||
|
*.zip
|
||||||
|
|
||||||
|
# Database
|
||||||
|
*.sqlite
|
||||||
|
*.sqlite3
|
||||||
|
*.db
|
||||||
|
|
||||||
|
# Optional npm cache directory
|
||||||
|
.npm
|
||||||
|
|
||||||
|
# Optional eslint cache
|
||||||
|
.eslintcache
|
||||||
|
|
||||||
|
# Optional REPL history
|
||||||
|
.node_repl_history
|
||||||
+1664
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,20 @@
|
|||||||
|
<h1 align="center">Agentic Coding - Project Template</h1>
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<a href="https://github.com/The-Pocket/PocketFlow" target="_blank">
|
||||||
|
<img
|
||||||
|
src="./assets/banner.png" width="600"
|
||||||
|
/>
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
This is a project template for Agentic Coding with [Pocket Flow](https://github.com/The-Pocket/PocketFlow), a 100-line LLM framework, and Cursor.
|
||||||
|
|
||||||
|
- We have included the [.cursorrules](.cursorrules) file to let Cursor AI help you build LLM projects.
|
||||||
|
|
||||||
|
- Want to learn how to build LLM projects with Agentic Coding?
|
||||||
|
|
||||||
|
- Check out the [Agentic Coding Guidance](https://the-pocket.github.io/PocketFlow/guide.html)
|
||||||
|
|
||||||
|
- Check out the [YouTube Tutorial](https://www.youtube.com/@ZacharyLLM?sub_confirmation=1)
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 3.9 MiB |
@@ -0,0 +1,79 @@
|
|||||||
|
# Design Doc: Your Project Name
|
||||||
|
|
||||||
|
> Please DON'T remove notes for AI
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
> Notes for AI: Keep it simple and clear.
|
||||||
|
> If the requirements are abstract, write concrete user stories
|
||||||
|
|
||||||
|
|
||||||
|
## Flow Design
|
||||||
|
|
||||||
|
> Notes for AI:
|
||||||
|
> 1. Consider the design patterns of agent, map-reduce, rag, and workflow. Apply them if they fit.
|
||||||
|
> 2. Present a concise, high-level description of the workflow.
|
||||||
|
|
||||||
|
### Applicable Design Pattern:
|
||||||
|
|
||||||
|
1. Map the file summary into chunks, then reduce these chunks into a final summary.
|
||||||
|
2. Agentic file finder
|
||||||
|
- *Context*: The entire summary of the file
|
||||||
|
- *Action*: Find the file
|
||||||
|
|
||||||
|
### Flow high-level Design:
|
||||||
|
|
||||||
|
1. **First Node**: This node is for ...
|
||||||
|
2. **Second Node**: This node is for ...
|
||||||
|
3. **Third Node**: This node is for ...
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart TD
|
||||||
|
firstNode[First Node] --> secondNode[Second Node]
|
||||||
|
secondNode --> thirdNode[Third Node]
|
||||||
|
```
|
||||||
|
## Utility Functions
|
||||||
|
|
||||||
|
> Notes for AI:
|
||||||
|
> 1. Understand the utility function definition thoroughly by reviewing the doc.
|
||||||
|
> 2. Include only the necessary utility functions, based on nodes in the flow.
|
||||||
|
|
||||||
|
1. **Call LLM** (`utils/call_llm.py`)
|
||||||
|
- *Input*: prompt (str)
|
||||||
|
- *Output*: response (str)
|
||||||
|
- Generally used by most nodes for LLM tasks
|
||||||
|
|
||||||
|
2. **Embedding** (`utils/get_embedding.py`)
|
||||||
|
- *Input*: str
|
||||||
|
- *Output*: a vector of 3072 floats
|
||||||
|
- Used by the second node to embed text
|
||||||
|
|
||||||
|
## Node Design
|
||||||
|
|
||||||
|
### Shared Memory
|
||||||
|
|
||||||
|
> Notes for AI: Try to minimize data redundancy
|
||||||
|
|
||||||
|
The shared memory structure is organized as follows:
|
||||||
|
|
||||||
|
```python
|
||||||
|
shared = {
|
||||||
|
"key": "value"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Node Steps
|
||||||
|
|
||||||
|
> Notes for AI: Carefully decide whether to use Batch/Async Node/Flow.
|
||||||
|
|
||||||
|
1. First Node
|
||||||
|
- *Purpose*: Provide a short explanation of the node’s function
|
||||||
|
- *Type*: Decide between Regular, Batch, or Async
|
||||||
|
- *Steps*:
|
||||||
|
- *prep*: Read "key" from the shared store
|
||||||
|
- *exec*: Call the utility function
|
||||||
|
- *post*: Write "key" to the shared store
|
||||||
|
|
||||||
|
2. Second Node
|
||||||
|
...
|
||||||
|
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
from pocketflow import Flow
|
||||||
|
from nodes import GetQuestionNode, AnswerNode
|
||||||
|
|
||||||
|
def create_qa_flow():
|
||||||
|
"""Create and return a question-answering flow."""
|
||||||
|
# Create nodes
|
||||||
|
get_question_node = GetQuestionNode()
|
||||||
|
answer_node = AnswerNode()
|
||||||
|
|
||||||
|
# Connect nodes in sequence
|
||||||
|
get_question_node >> answer_node
|
||||||
|
|
||||||
|
# Create flow starting with input node
|
||||||
|
return Flow(start=get_question_node)
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
from flow import qa_flow
|
||||||
|
|
||||||
|
# Example main function
|
||||||
|
# Please replace this with your own main function
|
||||||
|
def main():
|
||||||
|
shared = {
|
||||||
|
"question": "In one sentence, what's the end of universe?",
|
||||||
|
"answer": None
|
||||||
|
}
|
||||||
|
|
||||||
|
qa_flow.run(shared)
|
||||||
|
print("Question:", shared["question"])
|
||||||
|
print("Answer:", shared["answer"])
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
from pocketflow import Node
|
||||||
|
from utils.call_llm import call_llm
|
||||||
|
|
||||||
|
class GetQuestionNode(Node):
|
||||||
|
def exec(self, _):
|
||||||
|
# Get question directly from user input
|
||||||
|
user_question = input("Enter your question: ")
|
||||||
|
return user_question
|
||||||
|
|
||||||
|
def post(self, shared, prep_res, exec_res):
|
||||||
|
# Store the user's question
|
||||||
|
shared["question"] = exec_res
|
||||||
|
return "default" # Go to the next node
|
||||||
|
|
||||||
|
class AnswerNode(Node):
|
||||||
|
def prep(self, shared):
|
||||||
|
# Read question from shared
|
||||||
|
return shared["question"]
|
||||||
|
|
||||||
|
def exec(self, question):
|
||||||
|
# Call LLM to get the answer
|
||||||
|
return call_llm(question)
|
||||||
|
|
||||||
|
def post(self, shared, prep_res, exec_res):
|
||||||
|
# Store the answer in shared
|
||||||
|
shared["answer"] = exec_res
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
pocketflow>=0.0.1
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
from openai import OpenAI
|
||||||
|
|
||||||
|
# Learn more about calling the LLM: https://the-pocket.github.io/PocketFlow/utility_function/llm.html
|
||||||
|
def call_llm(prompt):
|
||||||
|
client = OpenAI(api_key="YOUR_API_KEY_HERE")
|
||||||
|
r = client.chat.completions.create(
|
||||||
|
model="gpt-4o",
|
||||||
|
messages=[{"role": "user", "content": prompt}]
|
||||||
|
)
|
||||||
|
return r.choices[0].message.content
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
prompt = "What is the meaning of life?"
|
||||||
|
print(call_llm(prompt))
|
||||||
Reference in New Issue
Block a user