【论文阅读】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)
posted @ 2025-07-02 23:05  ffl  阅读(77)  评论(0)    收藏  举报