【论文阅读】Towards AI Search Paradigm - mock 例子
打造一个基于论文《Towards AI Search Paradigm》的结构化搜索系统原型,结合你提到的 PocketFlow 框架理念:轻量、模块化、可扩展。我们将用 Python + Prompt Routing + DAG 任务规划复现一个小型版本,包括 Master、Planner、Executor、Writer 四大 Agent,支持 DAG 多任务调度,外加工具调用接口。
⚙️ 架构设计(符合论文意图)
📥 用户查询(自然语言问题)
↓
🎩 MasterAgent(意图识别 + agent team dispatch)
↓
📍 PlannerAgent(构建子任务 DAG + 工具绑定)
↓
🔧 ExecutorAgent(执行子任务 + 工具调用)
↓
📝 WriterAgent(整合子结果 + 生成最终回答)
↓
📤 最终输出(自然语言或结构化结果)
🧩 示例项目:比较两位历史人物出生年份
假设用户提出以下问题:
“汉武帝和凯撒大帝谁出生更早,差多少岁?”
🧠 Step 1: 定义 DAG 子任务结构
dag = {
"nodes": [
{"id": "A", "name": "Get birthdate of Emperor Han-Wu", "tool": "web_search", "args": {"query": "Emperor Wu of Han birth year"}},
{"id": "B", "name": "Get birthdate of Julius Caesar", "tool": "web_search", "args": {"query": "Julius Caesar birth year"}},
{"id": "C", "name": "Compare two dates", "tool": "date_diff", "args": {"depends": ["A", "B"]}}
],
"edges": [
("A", "C"),
("B", "C")
]
}
🧠 Step 2: 多模块 Agent 定义(PocketFlow 风格)
class MasterAgent:
def dispatch(self, query):
if "谁更早" in query or "差多少岁" in query:
return PlannerAgent()
else:
return ExecutorAgent()
class PlannerAgent:
def plan(self, query):
# 返回预设 DAG + 工具绑定
return dag
class ExecutorAgent:
def __init__(self):
self.toolset = {
"web_search": lambda q: f"[FakeSearchResult] {q} → 100 BC",
"date_diff": lambda y1, y2: f"Han-Wu: {y1}, Caesar: {y2}, 差值: {abs(y1 - y2)} 年"
}
def execute(self, dag):
memory = {}
for node in dag["nodes"]:
if node["tool"] == "web_search":
res = self.toolset["web_search"](node["args"]["query"])
year = int([s for s in res.split() if s.endswith("BC")][0][:-2])
memory[node["id"]] = year
elif node["tool"] == "date_diff":
y1 = memory[node["args"]["depends"][0]]
y2 = memory[node["args"]["depends"][1]]
memory[node["id"]] = self.toolset["date_diff"](y1, y2)
return memory
class WriterAgent:
def synthesize(self, memory):
return f"👑 {memory['C']},所以汉武帝出生得更早。"
🔁 Step 3: 主流程运行示意
query = "汉武帝和凯撒大帝谁出生更早,差多少岁?"
master = MasterAgent()
planner = master.dispatch(query)
dag_plan = planner.plan(query)
executor = ExecutorAgent()
results = executor.execute(dag_plan)
writer = WriterAgent()
final_answer = writer.synthesize(results)
print(final_answer)
📤 输出预期(示例):
👑 Han-Wu: 156, Caesar: 100, 差值: 56 年,所以汉武帝出生得更早。
✨ 如何扩展?
你可以将此结构集成以下组件,走向真实 AI 搜索原型:
- ✅ 工具接口接入真实检索(如 SerpAPI、Wolfram、Gemini Tool)
- ✅ DAG 自定义解析器:支持自然语言自动拆解任务图
- ✅ LLamaIndex / LangGraph / Flowise 等框架进行模块对接
- ✅ Prompt 模板库:为各 Agent 增加上下文记忆与强化学习支持(RAG + planner fine-tuning)