1. 介绍
官方文档:https://docs.langchain.com/oss/python/deepagents/overview
中文文档:https://langchain-doc.cn/v1/python/deepagents/overview.html
DeepAgents 是一个独立库,用于构建能够处理复杂多步骤任务的代理。深度代理基于 LangGraph,灵感来自 Claude Code、Deep Research 和 Manus 等应用程序,具备规划功能、用于上下文管理的文件系统以及生成子代理的能力。

何时使用Deepagents
当你想构建能够:
- 处理需要规划和分解的复杂多步骤任务
- 通过文件系统工具管理大量上下文
- 将工作委托给专门的子代理以实现上下文隔离
- 跨对话和线程持续保存记忆
如果想构建更简单的代理,可以考虑使用 LangChain 的 create_agent 或构建自定义的 LangGraph 工作流程。
2. 安装
| python | >=3.11 |
pip install deepagents
# 其他依赖: LangChain 模型对象 富文本控制台
pip install langchain_openai rich
3. 第一个例程
agent.py
import argparse
import asyncio
from langchain_openai import ChatOpenAI
from deepagents import create_deep_agent
from langchain_core.messages import SystemMessage, HumanMessage
from deepagents.backends import FilesystemBackend
from console import *
model_config = {
"model": "YOU_MODEL",
"base_url": "YOU_BASE_URL",
"api_key": "YOU_API_KEY",
"temperature": 0.1,
"extra_body": {}# {"reasoning_effort": "medium"}
}
async def main(prompt: str):
agent = create_deep_agent(
model=ChatOpenAI(**model_config),
memory=["./AGENTS.md"],
skills=["./skills"],
# tools=[],
backend=FilesystemBackend(root_dir=r"/home/ywh/workspace/deepagent", virtual_mode=True), # 设置virtual_mode,root_dir才会有效,否则root_dir是根目录
)
display = AgentDisplay()
console.print()
# Agent执行循环 - 使用 astream 获取流式状态
with Live(display.spinner, console=console, refresh_per_second=10, transient=True) as live:
async for chunk in agent.astream(
{"messages": [("user", prompt)]},
config={"configurable": {"thread_id": "deepagent-demo"}},
stream_mode="values",
):
if "messages" in chunk:
messages = chunk["messages"]
if len(messages) > display.printed_count:
# Temporarily stop spinner to print
live.stop()
for msg in messages[display.printed_count:]:
display.print_message(msg)
display.printed_count = len(messages)
# Resume spinner
live.start()
live.update(display.spinner)
console.print()
console.print("[bold green]✓ Done![/]")
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="agent script.")
parser.add_argument('-p', '--prompt', type=str, required=True, help='user prompt')
args = parser.parse_args()
asyncio.run(main(prompt=args.prompt))
console.py
from rich.console import Console
from rich.live import Live
from rich.markdown import Markdown
from rich.panel import Panel
from rich.spinner import Spinner
from rich.text import Text
from langchain_core.messages import AIMessage, HumanMessage, ToolMessage
console = Console()
class AgentDisplay:
"""Manages the display of agent progress."""
def __init__(self):
self.printed_count = 0
self.current_status = ""
self.spinner = Spinner("dots", text="Thinking...")
def update_status(self, status: str):
self.current_status = status
self.spinner = Spinner("dots", text=status)
def print_message(self, msg):
"""Print a message with nice formatting."""
if isinstance(msg, HumanMessage):
console.print(Panel(str(msg.content), title="You", border_style="blue"))
elif isinstance(msg, AIMessage):
content = msg.content
if isinstance(content, list):
text_parts = [p.get("text", "") for p in content if isinstance(p, dict) and p.get("type") == "text"]
content = "\n".join(text_parts)
if content and content.strip():
console.print(Panel(Markdown(content), title="Agent", border_style="green"))
if msg.tool_calls:
for tc in msg.tool_calls:
name = tc.get("name", "unknown")
args = tc.get("args", {})
console.print(f" [bold cyan]>> {name}...[/]")
elif isinstance(msg, ToolMessage):
console.print(f" [bold cyan]✓ {msg.content}[/]")
这样就完成一个类claude code的可定制化agent。

Comments NOTHING