mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6mobile wallpaper 7
771 字
2 分钟
基于LangGraph的Agent开发
2026-06-30

封面 https://www.pixiv.net/artworks/133723106

记录一下可能是自己毕设的东西

Vibe-Coding产物 可喷()

一个渗透测试用的Agent

基于LangGraph+streamlit Plan-and-Execute

Day1#

先了解了一下LangGraph

框架#

自己先做了一个简单的架构

START → chatbot → END

然后改了改变成:

用户输入 → Planner 拆任务 → ReAct 执行 → Search/Fetch 辅助 → Synthesizer 汇总 → 返回用户

Plan-and-Execute + ReAct

Planner(拆 2–5 个小任务)

  • ReAct Executor(每个小任务最多 5 轮:analyze / search / fetch / final / refuse)

  • 条件循环直到小任务做完

  • Synthesizer(汇总最终回复)

两个 SubAgent#

SearchSubAgent(公开搜索)#

  • 默认用 Bing 搜索页
  • requests + trust_env=False,避免系统坏代理
  • 配置:SEARCH_TIMEOUTSEARCH_PROXY

WebFetchSubAgent(公开网页抓取)#

  • 只允许 http/https,拒绝 localhost、内网 IP、非公开解析
  • 抽取 HTML 正文 + 页面链接列表(Links discovered on page
  • 配置:FETCH_TIMEOUTFETCH_MAX_CHARSFETCH_PROXY

Day2#

增加了三个小工具#

增加了curl,ssh,netcat功能

curl#

curl运行正常

模型切换#

现在可以在deepseek-v4-prodeepseek-v4-flash之间切换

日志+普通对话快速回复#

一句”你好”在之前都会经过漫长的Planner + ReAct + Synthesizer,耗时26.3s才会回复一次。

现在加了一个 fast path:对明显普通对话/自我介绍类请求,跳过Planner + ReAct + Synthesizer,只做一次 LLM 调用。同样请求降到约 3.0s。(不过我感觉这没什么用就是了)

对话耗时和执行摘要展示#

新增显示每轮对话耗时和现实执行流程展示

对话保存#

增加了历史任务切换

Day3#

RAG#

已在现有框架上接入一个 Agentic RAG MVP。

主要做了这些:

  • 新增 RAGSubAgent:读取 knowledge/ 下的 .md/.txt 本地知识库,按段落切块并做关键词检索。
  • ReAct 新增 rag action:现在 action 支持 analyze | rag | search | fetch | curl | netcat | ssh | final | refuse
  • Planner/ReAct/Synthesizer prompt 已更新:方法论、检查清单、报告模板、历史案例、项目资料会优先走本地 RAG,不足时再 search/fetch
  • 执行过程已接入 trace_events:WebUI 的“查看执行过程”会显示 RAGSubAgent 命中的本地文档。
  • 新增默认知识库:
    • knowledge/README.md
    • knowledge/checklists/web-pentest-baseline.md
  • 新增配置项:
    • RAG_KNOWLEDGE_DIR=knowledge
    • RAG_TOP_K=5
    • RAG_CHUNK_CHARS=1200
    • RAG_MAX_RESULTS_CHARS=5000
  • README 已更新 Agentic RAG 流程和使用说明。

验证结果:

  • app.py 语法检查通过:syntax ok
  • 直接调用 RAGSubAgent().run("Web 渗透测试检查清单") 能命中 knowledge/checklists/web-pentest-baseline.md

说明:这一版是无额外依赖的本地检索 MVP,不是向量库版。优点是稳定、轻量、马上可用;后续可以升级为 Chroma/FAISS + embedding + rerank

数据库中有的md命中良好 但是和WebSearch结合度一般

Day4#

Kali#

把 Kali 装进 Docker,用 MCP kali_exec ,Agent 通过 KaliSubAgent 发命令、拿结果

且删除了curl ssh netcat 三个SubAgent 换成KaliSubAgent

不走 Kali 的(仍在宿主机):

  • rag — 本地知识库
  • search — 公开搜索
  • fetch — 抓取公开网页

且已经能够做一些CTF题目了

感觉挺有意义的一刻

Day5#

UI重构#

重新做了一份UI 将streamlit改成类似PentAGI的UI

现在在右侧可以看到kali terminal运行的命令、Tasks、Agents

上下文完善#

第一轮回话告诉他任务 第二轮对话让它继续他会忘记任务

session_context 注入每轮 prompt

日后#

附件题#

多轮迭代#

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

基于LangGraph的Agent开发
http://blog.azkanna.cn/posts/agent/kanna/
作者
AzazelKanna
发布于
2026-06-30
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录