
使用Scala Play框架構建REST API
階段 | 輸入 | 關鍵動作 | 輸出 |
---|---|---|---|
提取 | Task Queue 頭部任務 | task = q.popleft() |
當前任務字符串 |
執行 | 任務 + 向量檢索上下文 | LLM 調用 | 結果文本 |
存儲 | 結果文本 | 向量化 + 寫入 Chroma | ID + Embedding |
創建 | 結果 + 目標 | Prompt → 新任務列表 | List[str] |
優先級 | 任務列表 | Prompt → 排序后隊列 | deque |
llama3.1:8b
,單次推理 0.3 s。 pip install chromadb[lite]
)內存占用 $lt; 100 MB。 task:
id: 42
description: "搜索 2025 年最火的前端框架"
priority: 5
depends_on: [41]
max_retry: 3
你是一個任務優先級機器人。請給以下任務按緊急重要程度排序,僅返回編號列表。
目標:${objective}
任務列表:...
沖突類型 | 示例 | 解決方案 |
---|---|---|
重復任務 | 兩個“搜索 React 最新版本” | 向量相似度 $gt; 0.92 自動合并 |
循環依賴 | A → B → A | 檢測環后強制打斷,發送告警 |
資源競爭 | 同時調用 Google Search API | 令牌桶限流 10 req/min |
# 1. 創建虛擬環境
python -m venv venv && source venv/bin/activate
# 2. 安裝依賴
pip install babyagi-lite==2025.8.1 chromadb==0.5.0 ollama==0.3.2
# 3. 啟動本地 LLM
ollama pull llama3.1:8b
ollama serve
env.yaml
llm:
provider: ollama
model: llama3.1:8b
vector_store:
provider: chroma
persist_dir: ./chroma_db
objective: "在 30 分鐘內完成一篇 2025 前端趨勢技術博客"
max_iterations: 15
from babyagi_lite import BabyCore
core = BabyCore.from_yaml("env.yaml")
core.run()
控制臺輸出示例:
?? 開始任務循環
[1/15] 任務:搜索 2025 前端框架熱度榜 → ? 完成
[2/15] 任務:分析 React 19 新特性 → ? 完成
...
?? 所有任務完成,用時 27 min 36 s
需求 | 自動生成任務 |
---|---|
選題 | 搜索 Hacker News 熱度 |
調研 | 官方文檔 + GitHub Issue |
寫作 | 三段式結構:背景、亮點、展望 |
發布 | 推送到個人博客 API |
# auto_blog.py
import requests, ollama, chromadb, yaml
from collections import deque
cfg = yaml.safe_load(open("env.yaml"))
chroma = chromadb.PersistentClient(cfg["vector_store"]["persist_dir"])
collection = chroma.get_or_create_collection("blog")
def search_web(q):
url = f"https://api.duckduckgo.com/?q={q}&format=json"
return requests.get(url).json()["Abstract"]
def embed(text):
return ollama.embeddings(model="llama3.1:8b", prompt=text)["embedding"]
def add_task(t):
q.append({"id": len(q), "desc": t, "status": "todo"})
def execute(task):
context = "\n".join(collection.query(
query_embeddings=[embed(task["desc"])],
n_results=3)["documents"][0])
prompt = f"目標:{cfg['objective']}\n上下文:{context}\n任務:{task['desc']}"
return ollama.generate(model="llama3.1:8b", prompt=prompt)["response"]
def create_tasks(result):
prompt = f"基于結果:{result}\n生成3個后續任務,每行一個"
new = ollama.generate(model="llama3.1:8b", prompt=prompt)["response"].split("\n")
for t in new:
add_task(t.strip())
def prioritize():
global q
q = deque(sorted(q, key=lambda x: x["id"], reverse=True))
q = deque([{"id": 0, "desc": "搜索 2025 前端趨勢關鍵詞", "status": "todo"}])
while q and (task := q.popleft()):
print(f"?? 執行:{task['desc']}")
res = execute(task)
collection.add(documents=[res], ids=[str(task["id"])], embeddings=[embed(res)])
create_tasks(res)
prioritize()
?? 執行:搜索 2025 前端趨勢關鍵詞
?? 執行:總結 React 19 Server Components 優缺點
...
?? 生成博客草稿 2025_frontend_trends.md
最終 Markdown:
# 2025 前端框架趨勢
## 背景
React 19 發布 Server Components...
## 亮點
- 零打包體積
- 流式渲染
## 展望
預計 2026 年將...
指標 | 默認值 | 優化后 | 方法 |
---|---|---|---|
單輪延遲 | 2.3 s | 0.8 s | 本地量化模型 + 緩存命中 |
內存占用 | 1.8 GB | 0.9 GB | Chroma Lite + 量化 embedding |
API 成本 | $0.12/1K tasks | $0.00 | 100% 本地 LLM |
并發度 | 1 | 4 | 多進程 Task Runner |
本文從 BabyAGI 的極簡理念出發,完整拆解了輕量級 Agent 的“任務提取—執行—記憶—再生成”四步循環,手把手演示了如何用本地 LLM(Ollama)+ 輕量向量庫(Chroma Lite)在 100 行代碼內搭建一個 CPU 即可跑的多任務 AI 機器人;配合 YAML 配置、優先級算法與沖突策略,可在 30 分鐘內零成本完成“搜索→調研→寫作→發布”的自動化技術博客流程,并給出性能調優一站式答案,真正做到“開箱即用、可復現、易擴展”。