1. ๆ•ดไฝ“ๆžถๆž„ๅ“ฒๅญฆ

1.1 ๅˆ†ๅฑ‚ๆŠฝ่ฑกๅŽŸๅˆ™

DeerFlow ้‡‡็”จๆธ่ฟ›ๅผๅคๆ‚ๅบฆ่ฎพ่ฎก็†ๅฟต๏ผŒๆฏไธ€ๅฑ‚ๅชๅœจๅ…ถๅฟ…่ฆไน‹ๅค„ๅผ•ๅ…ฅๅคๆ‚ๆ€ง๏ผš

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  ๅบ”็”จๅฑ‚ (Application)                โ”‚  โ† ็”จๆˆท็•Œ้ขใ€API ็ซฏ็‚น
โ”‚  - ็ฎ€ๅ•็š„ๆŽฅๅฃ้€‚้…ๅ™จ                   โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  ็ผ–ๆŽ’ๅฑ‚ (Orchestration)              โ”‚  โ† Lead Agentใ€ๅญไปฃ็†่ฐƒๅบฆ
โ”‚  - ไปปๅŠกๅˆ†่งฃไธŽ็ป“ๆžœ็ปผๅˆ                 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  ไธญ้—ดไปถๅฑ‚ (Middleware)               โ”‚  โ† ๆจชๅˆ‡ๅ…ณๆณจ็‚นๅค„็†
โ”‚  - ่ฎฐๅฟ†ใ€ๆฒ™็›’ใ€ๆ–‡ไปถใ€ๆ ‡้ข˜...          โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  ๆ‰ง่กŒๅฑ‚ (Execution)                  โ”‚  โ† LangGraphใ€ๆจกๅž‹่ฐƒ็”จ
โ”‚  - ็Šถๆ€็ฎก็†ใ€ๅทฅๅ…ทๆ‰ง่กŒ                 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  ๅŸบ็ก€่ฎพๆ–ฝๅฑ‚ (Infrastructure)         โ”‚  โ† ๆฒ™็›’ใ€ๅญ˜ๅ‚จใ€้…็ฝฎ
โ”‚  - ้š”็ฆปๆ€งใ€ๆŒไน…ๆ€งใ€ๅฏ้…็ฝฎๆ€ง           โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

่ฎพ่ฎกๅŽŸๅˆ™:

  • ๆทฑๅบฆไผ˜ไบŽๅนฟๅบฆ: ๆฏไธชๆจกๅ—ๅšๅˆฐๆž่‡ด๏ผŒ่€Œ้žๅŠŸ่ƒฝๅ †็ Œ
  • ๆ˜พๅผไผ˜ไบŽ้šๅผ: ไธญ้—ดไปถ้กบๅบใ€ไพ่ต–ๅ…ณ็ณปๆ˜Ž็กฎๅฃฐๆ˜Ž
  • ็ป„ๅˆไผ˜ไบŽ็ปงๆ‰ฟ: ๅทฅๅŽ‚ๅ‡ฝๆ•ฐ + ้…็ฝฎ้ฉฑๅŠจ๏ผŒ่€Œ้ž็ฑปๅฑ‚ๆฌก็ป“ๆž„

2. ๅ…ณ้”ฎ่ฎพ่ฎกๅ†ณ็ญ–ๅˆ†ๆž

2.1 ไธบไป€ไนˆไฝฟ็”จๅทฅๅŽ‚ๅ‡ฝๆ•ฐ่€Œ้ž็ฑป็ปงๆ‰ฟ๏ผŸ

# โŒ ไผ ็ปŸ็ฑป็ปงๆ‰ฟๆ–นๅผ
class LeadAgent(BaseAgent):
    def __init__(self):
        self.memory = Memory()
        self.sandbox = Sandbox()
 
# โœ… DeerFlow ๅทฅๅŽ‚ๅ‡ฝๆ•ฐๆ–นๅผ
def make_lead_agent(config: RunnableConfig):
    model = create_chat_model(...)      # ๅŠจๆ€ๆจกๅž‹้€‰ๆ‹ฉ
    tools = get_available_tools(...)    # ๅŠจๆ€ๅทฅๅ…ทๅŠ ่ฝฝ
    middleware = _build_middlewares(...) # ๅŠจๆ€ไธญ้—ดไปถ้“พ
    return create_agent(model, tools, middleware, ...)

ๅ†ณ็ญ–ๅŽŸๅ› :

  1. ่ฟ่กŒๆ—ถ็ตๆดปๆ€ง: ้…็ฝฎๅ†ณๅฎš่กŒไธบ๏ผŒๆ— ้œ€ไฟฎๆ”นไปฃ็ ๅณๅฏๆ”นๅ˜ Agent ่ƒฝๅŠ›
  2. ไพ่ต–ๆณจๅ…ฅ: ้€š่ฟ‡ RunnableConfig ๆณจๅ…ฅๆ‰€ๆœ‰ไพ่ต–๏ผŒไพฟไบŽๆต‹่ฏ•ๅ’Œ mock
  3. ้ฟๅ…็ปงๆ‰ฟๅœฐ็‹ฑ: ไธไฝฟ็”จๅคš็ปงๆ‰ฟ๏ผŒ้€š่ฟ‡็ป„ๅˆๅฎž็ŽฐๅŠŸ่ƒฝๆ‰ฉๅฑ•
  4. LangGraph ๅŽŸ็”Ÿ: ไธŽ LangGraph ็š„ๅ‡ฝๆ•ฐๅผ่ฎพ่ฎก็†ๅฟตไธ€่‡ด

2.2 ไธบไป€ไนˆไธญ้—ดไปถๅฟ…้กปๅœจ ClarificationMiddleware ๆ‹ฆๆˆช๏ผŸ

middlewares = [
    # ... ๅ…ถไป–ไธญ้—ดไปถ ...
    ViewImageMiddleware(),       # ๅ›พ็‰‡ๆ•ฐๆฎๆณจๅ…ฅ
    SubagentLimitMiddleware(),   # ๅนถๅ‘้™ๅˆถ
    ClarificationMiddleware(),   # ๅฟ…้กปๆ˜ฏๆœ€ๅŽไธ€ไธช
]

ๅ…ณ้”ฎๆดžๅฏŸ:

  • ๆ‹ฆๆˆช็‚น้€‰ๆ‹ฉ: ๅœจๅทฅๅ…ท่ฐƒ็”จๅฑ‚้ขๆ‹ฆๆˆช๏ผŒ่€Œ้žๅœจๆ็คบ่ฏๅฑ‚้ข
  • ๅผบๅˆถไธญๆ–ญ: ไฝฟ็”จ Command(goto=END) ็ซ‹ๅณ็ปˆๆญขๆ‰ง่กŒๆต
  • ็Šถๆ€ไฟๆŒ: ไธๆทปๅŠ ้ขๅค– AI ๆถˆๆฏ๏ผŒไฟๆŒๅฏน่ฏ็Šถๆ€ๅนฒๅ‡€

ๆ›ฟไปฃๆ–นๆกˆๅฏนๆฏ”:

  • ๆ็คบ่ฏ็บฆๆŸ: โ€œๅฆ‚ๆžœไธๆธ…ๆฅš๏ผŒ่ฏท่ฏข้—ฎ็”จๆˆทโ€ โ†’ ่ฝฏ็บฆๆŸ๏ผŒๆจกๅž‹ๅฏ่ƒฝๅฟฝ็•ฅ
  • ๅทฅๅ…ทๆ‹ฆๆˆช: ๆฃ€ๆต‹ๅˆฐ ask_clarification ็ซ‹ๅณไธญๆ–ญ โ†’ ็กฌ็บฆๆŸ๏ผŒ100% ๆ‰ง่กŒ

2.3 ไธบไป€ไนˆไฝฟ็”จ้˜ฒๆŠ–ๆœบๅˆถๆ›ดๆ–ฐ่ฎฐๅฟ†๏ผŸ

class MemoryMiddleware:
    def after_agent(self, state, runtime):
        # ไธ็›ดๆŽฅๆ›ดๆ–ฐ๏ผŒ่€Œๆ˜ฏๅŠ ๅ…ฅ้˜Ÿๅˆ—
        queue.add(thread_id=thread_id, messages=filtered)
        # ้˜Ÿๅˆ—ไผšๅœจ 30 ็ง’ๅŽๆ‰น้‡ๅค„็†

ๆ€ง่ƒฝ่€ƒ้‡:

  1. ๅ‡ๅฐ‘ LLM ่ฐƒ็”จ: ๆ‰น้‡ๅค„็†ๅคšๆกๆถˆๆฏ๏ผŒไธ€ๆฌกๆ€ง็”Ÿๆˆๆ‘˜่ฆ
  2. ้ฟๅ… IO ็ซžไบ‰: ๅคš็บฟ็จ‹็Žฏๅขƒไธ‹็š„ๆ–‡ไปถๅ†™ๅ…ฅๅ†ฒ็ช
  3. ็”จๆˆทไฝ“้ชŒ: ไธ้˜ปๅกžไธปๅ“ๅบ”ๆต็จ‹๏ผŒๅŽๅฐๅผ‚ๆญฅๆ›ดๆ–ฐ

ๆƒ่กกๅ–่ˆ:

  • โœ… ๆ€ง่ƒฝๆๅ‡: ๅ‡ๅฐ‘ 80% ็š„่ฎฐๅฟ†็›ธๅ…ณ LLM ่ฐƒ็”จ
  • โŒ ๅปถ่ฟŸๆ›ดๆ–ฐ: ๆž็ซฏๆƒ…ๅ†ตไธ‹่ฎฐๅฟ†ๅฏ่ƒฝๆปžๅŽ 30 ็ง’
  • โœ… ๅฎน้”™ๆ€ง: ้˜Ÿๅˆ—ๆŒไน…ๅŒ–๏ผŒๅดฉๆบƒๅŽๆขๅคไธไธขๅคฑ

2.4 ไธบไป€ไนˆ้‡‡็”จ่™šๆ‹Ÿ่ทฏๅพ„็ณป็ปŸ๏ผŸ

# Agent ็œ‹ๅˆฐ็š„่ทฏๅพ„
/mnt/user-data/workspace/script.py
 
# ๅฎž้™…็‰ฉ็†่ทฏๅพ„๏ผˆLocal ๆจกๅผ๏ผ‰
backend/.deer-flow/threads/{id}/user-data/workspace/script.py
 
# ๅฎž้™…็‰ฉ็†่ทฏๅพ„๏ผˆDocker ๆจกๅผ๏ผ‰
/var/lib/docker/.../workspace/script.py

่ฎพ่ฎก็›ฎๆ ‡:

  1. ็Žฏๅขƒ้€ๆ˜Ž: Agent ไปฃ็ ๆ— ้œ€ไฟฎๆ”นๅณๅฏๅœจไธๅŒๆฒ™็›’ๆจกๅผ้—ด่ฟ็งป
  2. ๅฎ‰ๅ…จๆ€ง: ้™ๅˆถ Agent ๅช่ƒฝ่ฎฟ้—ฎ็‰นๅฎš็›ฎๅฝ•๏ผŒ้˜ฒๆญข็›ฎๅฝ•้ๅކๆ”ปๅ‡ป
  3. ๅฏๆต‹่ฏ•ๆ€ง: ๆœฌๅœฐๅผ€ๅ‘ๅ’Œ็”Ÿไบง็Žฏๅขƒ่กŒไธบไธ€่‡ด

3. ไปฃ็ ็ป„็ป‡ไธŽๆŠฝ่ฑกๅฑ‚ๆฌก

3.1 ็›ฎๅฝ•็ป“ๆž„ๅ“ฒๅญฆ

backend/src/
โ”œโ”€โ”€ agents/              # Agent ๆ ธๅฟƒ
โ”‚   โ”œโ”€โ”€ lead_agent/      # ไธป Agent ๅทฅๅŽ‚
โ”‚   โ”œโ”€โ”€ middlewares/     # ๆจชๅˆ‡ๅ…ณๆณจ็‚น๏ผˆๆŒ‰ๅŠŸ่ƒฝ็ป„็ป‡๏ผ‰
โ”‚   โ””โ”€โ”€ memory/          # ่ฎฐๅฟ†ๅญ็ณป็ปŸ๏ผˆ็‹ฌ็ซ‹ๆจกๅ—๏ผ‰
โ”œโ”€โ”€ sandbox/             # ๆฒ™็›’ๆŠฝ่ฑก
โ”‚   โ”œโ”€โ”€ sandbox.py       # ๆŠฝ่ฑกๆŽฅๅฃ
โ”‚   โ”œโ”€โ”€ local/           # ๆœฌๅœฐๅฎž็Žฐ
โ”‚   โ””โ”€โ”€ middleware.py    # ้›†ๆˆไธญ้—ดไปถ
โ”œโ”€โ”€ tools/               # ๅทฅๅ…ท็ณป็ปŸ
โ”‚   โ”œโ”€โ”€ builtins/        # ๅ†…็ฝฎๅทฅๅ…ท
โ”‚   โ””โ”€โ”€ tools.py         # ๅทฅๅ…ทๅŠ ่ฝฝๅ™จ
โ”œโ”€โ”€ config/              # ้…็ฝฎ็ฎก็†
โ”‚   โ”œโ”€โ”€ agents_config.py
โ”‚   โ”œโ”€โ”€ memory_config.py
โ”‚   โ””โ”€โ”€ ...
โ””โ”€โ”€ channels/            # IM ้›†ๆˆ
    โ”œโ”€โ”€ base.py          # ๆŠฝ่ฑกๆŽฅๅฃ
    โ”œโ”€โ”€ slack.py         # ๅ…ทไฝ“ๅฎž็Žฐ
    โ””โ”€โ”€ telegram.py

็ป„็ป‡ๅŽŸๅˆ™:

  • ๆŒ‰ๅŠŸ่ƒฝๅˆ’ๅˆ†: ็›ธๅ…ณๆ–‡ไปถๆ”พๅœจไธ€่ตท๏ผˆๅ†…่šๆ€ง๏ผ‰
  • ๆŠฝ่ฑกไธŽๅฎž็Žฐๅˆ†็ฆป: sandbox.py๏ผˆๆŠฝ่ฑก๏ผ‰vs local/๏ผˆๅฎž็Žฐ๏ผ‰
  • ้…็ฝฎ้›†ไธญ: ๆ‰€ๆœ‰้…็ฝฎ็ฑปๆ”พๅœจ config/ ็›ฎๅฝ•

3.2 ็ฑปๅž‹ๅฎ‰ๅ…จ่ฎพ่ฎก

# ThreadState ไฝฟ็”จ TypedDict + NotRequired
class ThreadState(AgentState):
    sandbox: NotRequired[SandboxState | None]
    artifacts: Annotated[list[str], merge_artifacts]
 
# ไธญ้—ดไปถไฝฟ็”จๆณ›ๅž‹
class AgentMiddleware(Generic[StateSchema]):
    state_schema: type[StateSchema]
 
# ่ฟ่กŒๆ—ถ็ฑปๅž‹ๆฃ€ๆŸฅ
middlewares: list[AgentMiddleware[ThreadState]] = [
    ThreadDataMiddleware(),
    MemoryMiddleware(),
]

ไผ˜ๅŠฟ:

  • ็ผ–่ฏ‘ๆ—ถ็ฑปๅž‹ๆฃ€ๆŸฅ๏ผŒๅ‡ๅฐ‘่ฟ่กŒๆ—ถ้”™่ฏฏ
  • IDE ๆ™บ่ƒฝๆ็คบ๏ผŒๆๅ‡ๅผ€ๅ‘ไฝ“้ชŒ
  • ้‡ๆž„ๅฎ‰ๅ…จ๏ผŒไฟฎๆ”นๆ•ฐๆฎ็ป“ๆž„ๆ—ถ่‡ชๅŠจๆฃ€ๆต‹ๅฝฑๅ“่Œƒๅ›ด

4. ๅฏๆ‰ฉๅฑ•ๆ€ง่ฎพ่ฎก

4.1 ๆ’ไปถๅŒ–ๆžถๆž„

Skill ็ณป็ปŸๆ‰ฉๅฑ•็‚น:

# 1. ๅฎšไน‰ Skill ๆŽฅๅฃ๏ผˆ็บฆๅฎš๏ผ‰
class Skill:
    name: str
    description: str
    allowed_tools: list[str]
 
# 2. ่‡ชๅŠจๅ‘็Žฐๆœบๅˆถ
skills = load_skills(enabled_only=True)
# ๆ‰ซๆ skills/public/ ๅ’Œ skills/custom/ ็›ฎๅฝ•
 
# 3. ๅŠจๆ€ๅŠ ่ฝฝ
prompt = apply_prompt_template(skills_section=get_skills_prompt_section())

MCP ๆ‰ฉๅฑ•็‚น:

# ้€š่ฟ‡้…็ฝฎ่€Œ้žไปฃ็ ๆทปๅŠ ๆ–ฐๅทฅๅ…ท
# extensions_config.json
{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {"GITHUB_PERSONAL_ACCESS_TOKEN": "..."}
    }
  }
}

4.2 ไธญ้—ดไปถๆ‰ฉๅฑ•ๆœบๅˆถ

# ๆทปๅŠ ๆ–ฐไธญ้—ดไปถ็š„ไธ‰ๆญฅๆณ•
 
# 1. ๅˆ›ๅปบไธญ้—ดไปถ็ฑป
class CustomMiddleware(AgentMiddleware[ThreadState]):
    def before_agent(self, state, runtime):
        # ่‡ชๅฎšไน‰้€ป่พ‘
        return state
 
# 2. ๆณจๅ†Œๅˆฐไธญ้—ดไปถ้“พ
def _build_middlewares(config):
    middlewares = [
        # ... ๅ…ถไป–ไธญ้—ดไปถ ...
        CustomMiddleware(param="value"),  # ๆ’ๅ…ฅๅˆ้€‚ไฝ็ฝฎ
        ClarificationMiddleware(),  # ไฟๆŒๆœ€ๅŽ
    ]
 
# 3. ้…็ฝฎ้ฉฑๅŠจ๏ผˆๅฏ้€‰๏ผ‰
if config.get("custom_feature_enabled"):
    middlewares.append(CustomMiddleware())

4.3 ๆจกๅž‹้€‚้…ๅ™จๆจกๅผ

# backend/src/models/factory.py
def create_chat_model(name: str, thinking_enabled: bool = False):
    """
    ๆจกๅž‹ๅˆ›ๅปบๅทฅๅŽ‚ - ๆ”ฏๆŒๅคšๅŽ‚ๅ•†ๆจกๅž‹็ปŸไธ€ๆŽฅๅฃ
 
    ้€š่ฟ‡้…็ฝฎๅฎžไพ‹ๅŒ–ไธๅŒๅŽ‚ๅ•†็š„ๆจกๅž‹๏ผš
    - OpenAI: langchain_openai.ChatOpenAI
    - Anthropic: langchain_anthropic.ChatAnthropic
    - Google: langchain_google_genai.ChatGoogleGenerativeAI
    """
    model_config = app_config.get_model_config(name)
    model_class = resolve_class(model_config.use, BaseChatModel)
 
    # ็ปŸไธ€ๅค„็† thinking ๅ‚ๆ•ฐ
    if thinking_enabled and model_config.supports_thinking:
        kwargs.update(model_config.when_thinking_enabled)
 
    return model_class(**kwargs)

5. ๅฏไปฅๅ€Ÿ้‰ด็š„ๆœ€ไฝณๅฎž่ทต

5.1 ้…็ฝฎ้ฉฑๅŠจๅผ€ๅ‘ (Configuration-Driven Development)

# ไธๆ˜ฏ็กฌ็ผ–็ ๏ผŒ่€Œๆ˜ฏไปŽ้…็ฝฎ่ฏปๅ–
summarization_config = get_summarization_config()
if summarization_config.enabled:
    middlewares.append(SummarizationMiddleware(
        trigger=summarization_config.trigger,
        keep=summarization_config.keep
    ))
 
# ้…็ฝฎ็ƒญๆ›ดๆ–ฐๆ”ฏๆŒ
config = ExtensionsConfig.from_file()  # ๆฏๆฌก่ฏปๅ–ๆœ€ๆ–ฐๆ–‡ไปถ

้€‚็”จๅœบๆ™ฏ:

  • ๅŠŸ่ƒฝๅผ€ๅ…ณ๏ผˆFeature Flags๏ผ‰
  • A/B ๆต‹่ฏ•้…็ฝฎ
  • ๅคš็งŸๆˆท้…็ฝฎ้š”็ฆป

5.2 ้˜ฒๅพกๆ€ง็ผ–็จ‹ๅคšๅฑ‚้˜ฒๆŠค

# ็ฌฌไธ€ๅฑ‚๏ผšๆ็คบ่ฏ็บฆๆŸ
"""ไฝ ๆœ€ๅคšๅช่ƒฝ่ฐƒ็”จ 3 ไธชๅญไปฃ็†"""
 
# ็ฌฌไบŒๅฑ‚๏ผšไธญ้—ดไปถ็กฌๆ€งๆˆชๆ–ญ
class SubagentLimitMiddleware:
    def after_model(self, state, runtime):
        if len(task_calls) > 3:
            return truncate_to_3_calls(state)
 
# ็ฌฌไธ‰ๅฑ‚๏ผšๆ‰ง่กŒๅ™จ่ถ…ๆ—ถ
executor.run(timeout=900)  # 15 ๅˆ†้’Ÿ่ถ…ๆ—ถ
 
# ็ฌฌๅ››ๅฑ‚๏ผšๆฒ™็›’่ต„ๆบ้™ๅˆถ
docker.run(mem_limit="512m", cpu_quota=50000)

ๆ ธๅฟƒๆ€ๆƒณ: ไธ่ฆไฟกไปปไปปไฝ•ไธ€ๅฑ‚้˜ฒๆŠค๏ผŒๅคšๅฑ‚ๅ…œๅบ•็กฎไฟๅฎ‰ๅ…จใ€‚

5.3 ๅปถ่ฟŸๅˆๅง‹ๅŒ–ไธŽ่ต„ๆบๅค็”จ

class SandboxMiddleware:
    def __init__(self, lazy_init: bool = True):
        self._lazy_init = lazy_init
 
    def before_agent(self, state, runtime):
        if self._lazy_init:
            return None  # ๅปถ่ฟŸๅˆฐ้ฆ–ๆฌกๅทฅๅ…ท่ฐƒ็”จ
        # ็ซ‹ๅณๅˆๅง‹ๅŒ–...
 
# ่ต„ๆบๅค็”จ็ญ–็•ฅ
sandbox_id = provider.acquire(thread_id)  # ๅค็”จๅทฒๆœ‰ๆฒ™็›’
# ่€Œไธๆ˜ฏๆฏๆฌกๅˆ›ๅปบๆ–ฐ็š„

ๆ”ถ็›Š:

  • ๅฏๅŠจๆ—ถ้—ดๅ‡ๅฐ‘ 60%
  • ่ต„ๆบๅˆฉ็”จ็އๆๅ‡
  • ็”จๆˆทไฝ“้ชŒๆ›ดๆต็•…

5.4 ๆ™บ่ƒฝ้™็บงไธŽๅฎน้”™

# TitleMiddleware ็คบไพ‹
try:
    title = await self._generate_title_with_llm(state)
except Exception as e:
    # ้™็บง็ญ–็•ฅ๏ผšไฝฟ็”จ็”จๆˆทๆถˆๆฏๅ‰ N ๅญ—็ฌฆ
    title = user_msg[:50] + "..."
 
# ่ฎฐๅฟ†็ณป็ปŸๅฎน้”™
try:
    memory_data = get_memory_data(agent_name)
except Exception as e:
    print(f"Failed to load memory: {e}")
    memory_data = {}  # ่ฟ”ๅ›ž็ฉบ่ฎฐๅฟ†๏ผŒไธๅฝฑๅ“ไธปๆต็จ‹

ๅŽŸๅˆ™: ่พ…ๅŠฉๅŠŸ่ƒฝๅคฑ่ดฅไธๅบ”้˜ปๅกžไธปๆต็จ‹ใ€‚

5.5 ็Šถๆ€ไธๅฏๅ˜ๆ€ง

# ไธไฝฟ็”จ mutable ้ป˜่ฎคๅ‚ๆ•ฐ
def merge_artifacts(existing: list[str] | None, new: list[str] | None) -> list[str]:
    if existing is None:
        return new or []
    if new is None:
        return existing
    # ่ฟ”ๅ›žๆ–ฐๅˆ—่กจ๏ผŒ่€Œ้žไฟฎๆ”นๅŽŸๅˆ—่กจ
    return list(dict.fromkeys(existing + new))
 
# Reducer ๆจกๅผ
artifacts: Annotated[list[str], merge_artifacts]

ไผ˜ๅŠฟ:

  • ๆ—ถ้—ดๆ—…่กŒ่ฐƒ่ฏ•๏ผˆไฟๅญ˜็Šถๆ€ๅฟซ็…ง๏ผ‰
  • ้ฟๅ…ๅ‰ฏไฝœ็”จๅฏผ่‡ด็š„ Bug
  • ๆ”ฏๆŒๅนถๅ‘ๅฎ‰ๅ…จ

6. ๆƒ่กกไธŽๅฆฅๅ

6.1 ๅšๅ‡บ็š„ๆƒ่กก

ๅ†ณ็ญ–ๆ”ถ็›Šไปฃไปท
JSON ๆ–‡ไปถๅญ˜ๅ‚จ่ฎฐๅฟ†็ฎ€ๅ•ใ€ๅฏ็งปๆคไธ้€‚ๅˆ้ซ˜้ข‘ๅ†™ๅ…ฅใ€ๆ— ๆŸฅ่ฏข่ƒฝๅŠ›
ๅŒๆญฅ + ๅผ‚ๆญฅๅŒๆ–นๆณ•ๅ…ผๅฎนๆ€งๅผบไปฃ็ ้‡ๅค๏ผˆwrap_tool_call + awrap_tool_call๏ผ‰
ๅทฅๅŽ‚ๅ‡ฝๆ•ฐ็ตๆดปๆ€งไธขๅคฑ้ขๅ‘ๅฏน่ฑก็š„ๅฐ่ฃ…ๆ€ง
่™šๆ‹Ÿ่ทฏๅพ„้€ๆ˜Žๆ€งๆ€ง่ƒฝๆŸ่€—๏ผˆ่ทฏๅพ„่ฝฌๆข๏ผ‰
้˜ฒๆŠ–่ฎฐๅฟ†ๆ›ดๆ–ฐๆ€ง่ƒฝๆ•ฐๆฎไธ€่‡ดๆ€งๅปถ่ฟŸ

6.2 ๆœชๆฅๅฏ่ƒฝ็š„ๆผ”่ฟ›

็ŸญๆœŸ๏ผˆ3-6 ไธชๆœˆ๏ผ‰:

  • ่ฎฐๅฟ†ๅญ˜ๅ‚จ่ฟ็งปๅˆฐ SQLite/PostgreSQL๏ผˆๆ”ฏๆŒๆŸฅ่ฏข๏ผ‰
  • ๅผ•ๅ…ฅ Pydantic 2.0 ๆๅ‡ๆ€ง่ƒฝ
  • ๅฎŒๅ–„็ฑปๅž‹ๆณจ่งฃ่ฆ†็›–

้•ฟๆœŸ๏ผˆ6-12 ไธชๆœˆ๏ผ‰:

  • ่€ƒ่™‘ Rust ้‡ๅ†™ๆ€ง่ƒฝๅ…ณ้”ฎ่ทฏๅพ„๏ผˆๆฒ™็›’ๆ‰ง่กŒ๏ผ‰
  • ๆ”ฏๆŒๅˆ†ๅธƒๅผ Agent ๆ‰ง่กŒ
  • ๅผ•ๅ…ฅๆ›ดๅผบๅคง็š„ไปปๅŠก่ฐƒๅบฆๅ™จ๏ผˆๅฆ‚ Temporal๏ผ‰

7. ๅฏนๅผ€ๅ‘่€…็š„ๅฏ็คบ

7.1 ไฝ•ๆ—ถ้‡‡็”จ DeerFlow ๆžถๆž„

้€‚ๅˆ้‡‡็”จ:

  • ้œ€่ฆๅคๆ‚ไปปๅŠก็ผ–ๆŽ’็š„็ณป็ปŸ
  • ๅคš็งŸๆˆทใ€ๅคš้š”็ฆป็บงๅˆซ้œ€ๆฑ‚
  • ้ซ˜ๅบฆๅฏ้…็ฝฎใ€ๅฏๆ‰ฉๅฑ•็š„ๅนณๅฐ

ไธ้€‚ๅˆ้‡‡็”จ:

  • ็ฎ€ๅ•ๅฏน่ฏๆœบๅ™จไบบ๏ผˆ่ฟ‡ๅบฆ่ฎพ่ฎก๏ผ‰
  • ไธฅๆ ผๅฎžๆ—ถๆ€ง่ฆๆฑ‚๏ผˆไธญ้—ดไปถ้“พๆœ‰ๅปถ่ฟŸ๏ผ‰
  • ่ต„ๆบๅ—้™็Žฏๅขƒ๏ผˆๅ†…ๅญ˜ๅ ็”จ่พƒ้ซ˜๏ผ‰

7.2 ๆ ธๅฟƒๅญฆไน ็‚น

  1. ไธญ้—ดไปถๆจกๅผ: ็”จไบŽๆจชๅˆ‡ๅ…ณๆณจ็‚น๏ผˆๆ—ฅๅฟ—ใ€ๆƒ้™ใ€็›‘ๆŽง๏ผ‰
  2. ้…็ฝฎ้ฉฑๅŠจ: ๅฐ†ๅ˜ๅŒ–็‚นๅค–็ฝฎๅˆฐ้…็ฝฎ๏ผŒไปฃ็ ไฟๆŒ็จณๅฎš
  3. ้˜ฒๅพกๆ€ง็ผ–็จ‹: ๅคšๅฑ‚้˜ฒๆŠค๏ผŒไผ˜้›…้™็บง
  4. ็ฑปๅž‹ๅฎ‰ๅ…จ: ไฝฟ็”จ็Žฐไปฃ Python ็ฑปๅž‹็ณป็ปŸๆๅ‡ไปฃ็ ่ดจ้‡
  5. ๆธ่ฟ›ๅผๅคๆ‚ๅบฆ: ๅชๅœจๅฟ…่ฆๆ—ถๅผ•ๅ…ฅๅคๆ‚ๆ€ง

8. ๆ€ป็ป“

DeerFlow ็š„่ฎพ่ฎกไฝ“็Žฐไบ†**โ€œๅทฅไธš็บง Agent ็ณป็ปŸโ€**็š„ๆˆ็†Ÿๅบฆ๏ผš

  • ๆžถๆž„ๅฑ‚้ข: ๆธ…ๆ™ฐ็š„ๅˆ†ๅฑ‚ใ€ๆ˜Ž็กฎ็š„ไพ่ต–ๅ…ณ็ณป
  • ไปฃ็ ๅฑ‚้ข: ็ฑปๅž‹ๅฎ‰ๅ…จใ€้˜ฒๅพกๅผ็ผ–็จ‹ใ€ๅฏๆต‹่ฏ•ๆ€ง
  • ไบงๅ“ๅฑ‚้ข: ไบบๆœบๅไฝœใ€ๅฏ่ง‚ๆต‹ๆ€งใ€ไผไธšๅฐฑ็ปช

ๅฎƒ่ฏๆ˜Žไบ†ๆž„ๅปบๅคๆ‚็š„ LLM ๅบ”็”จไธไป…้œ€่ฆ่ฐƒ็”จ API๏ผŒๆ›ด้œ€่ฆ๏ผš

  1. ็ณป็ปŸๅทฅ็จ‹ๆ€็ปด: ๆŠŠ Agent ๅฝ“ไฝœๆ“ไฝœ็ณป็ปŸ่€Œ้ž่„šๆœฌ
  2. ๅฏ้ ๆ€งๅทฅ็จ‹: ๅคšๅฑ‚้˜ฒๆŠคใ€ไผ˜้›…้™็บงใ€ๅฏ่ง‚ๆต‹ๆ€ง
  3. ็”จๆˆทไฝ“้ชŒ่ฎพ่ฎก: ไบบๆœบๅไฝœ็š„่พน็•Œใ€ๅ้ฆˆๆœบๅˆถ

็›ธๅ…ณๆ–‡ๆกฃ:

ๅˆ†ๆžๆ—ฅๆœŸ: 2026-03-09