弃用langgrpah更换deepagent

This commit is contained in:
zcr
2026-03-11 21:45:46 +08:00
parent c862121b48
commit 7042d428fa
44 changed files with 2847 additions and 619 deletions

View File

@@ -0,0 +1,23 @@
from langchain_qwq import ChatQwen
from src.core.config import settings
llm = ChatQwen(
model="qwen3.5-flash",
max_tokens=3_000,
timeout=None,
max_retries=2,
enable_thinking=False,
api_key=settings.QWEN_API_KEY
)
title_llm = ChatQwen(
model="qwen-plus",
max_tokens=3_000,
timeout=None,
max_retries=2,
streaming=False,
temperature=0.1,
top_p=0.8,
api_key=settings.QWEN_API_KEY
)

View File

@@ -0,0 +1,51 @@
from pathlib import Path
from deepagents import create_deep_agent
from deepagents.backends import FilesystemBackend
from langchain.agents.middleware import SummarizationMiddleware
from langgraph.checkpoint.mongodb import MongoDBSaver
from langgraph.checkpoint.serde.jsonplus import JsonPlusSerializer
from pymongo import MongoClient
from src.core.config import MONGO_URI
from src.server.deep_agent.agents.painter import painter_subagent
from src.server.deep_agent.agents.researcher import research_subagent
from src.server.deep_agent.agents.user_profile import user_profile_subagent
from src.server.deep_agent.init_prompt import build_system_prompt
from src.server.deep_agent.tools.report_generator_tool import llm
TOOL_DIR = Path(__file__).resolve().parent
PROJECT_ROOT = TOOL_DIR.parent
client = MongoClient(MONGO_URI)
checkpointer = MongoDBSaver(
client=client["furniture_agent_db"],
db_name="fida_agent_db",
collection_name="fida_agent_collection",
serde=JsonPlusSerializer(pickle_fallback=True), # ← 關鍵這一行
)
subagents = [
painter_subagent,
research_subagent,
user_profile_subagent
]
def build_main_agent(use_report):
main_agent = create_deep_agent(
model=llm,
system_prompt=build_system_prompt(use_report=use_report),
subagents=subagents,
checkpointer=checkpointer,
backend=FilesystemBackend(
root_dir=str(PROJECT_ROOT / "agent_workspace"),
virtual_mode=False, # 重要:關掉虛擬模式 → 真的寫硬碟
),
middleware=[
SummarizationMiddleware(
model=llm,
trigger=("tokens", 3000),
keep=("messages", 100),
),
],
)
return main_agent

View File

@@ -0,0 +1,22 @@
from langchain.agents.middleware import wrap_tool_call
from src.server.deep_agent.agents.init_llm import llm
from src.server.deep_agent.init_prompt import build_painter_prompt
from src.server.deep_agent.tools.generate_furniture_sketch import generate_furniture
@wrap_tool_call
async def log_tool_calls(request, handler):
"""Intercept and log every tool call - demonstrates cross-cutting concern."""
print(request)
return handler(request)
painter_subagent = {
"name": "painter_subagent",
"description": "理解用户意图使用prompt,调用generate_furniture工具生成家具sketch草图.",
"system_prompt": build_painter_prompt(),
"tools": [generate_furniture],
"model": llm,
# "middleware": [log_tool_calls],
}

View File

@@ -0,0 +1,21 @@
from src.server.deep_agent.agents.init_llm import llm
from src.server.deep_agent.init_prompt import build_researcher_prompt
from src.server.deep_agent.tools.crawl_tool import crawl4ai_batch
from src.server.deep_agent.tools.report_generator_tool import report_generator
from src.server.deep_agent.tools.research_tool import topic_research
from src.server.deep_agent.tools.structured_retrieval_tool import structured_retrieval
from src.server.deep_agent.tools.user_persona_tool import query_report_profile
research_subagent = {
"name": "research-agent",
"description": "通过网络搜索对家具设计开展深度研究并整合结论",
"system_prompt": build_researcher_prompt(),
"tools": [
query_report_profile,
topic_research,
crawl4ai_batch,
structured_retrieval,
report_generator
],
"model": llm
}

View File

@@ -0,0 +1,15 @@
from src.server.deep_agent.agents.init_llm import llm
from src.server.deep_agent.init_prompt import build_user_persona_prompt
from src.server.deep_agent.tools.user_persona_tool import query_report_profile, update_report_profile, check_profile_complete
user_profile_subagent = {
"name": "user_profile_subagent",
"description": "收集用户报告画像并存储到MongoDB",
"system_prompt": build_user_persona_prompt(),
"model": llm,
"tools": [
query_report_profile,
update_report_profile,
check_profile_complete,
],
}