技术选型详解

选型核心原则

在2核2G阿里云服务器上构建AI多Agent系统,每MB内存都是稀缺资源。技术选型的核心原则是:能用标准库就不引入框架,能用CLI就不引入SDK

后端:Python + LangGraph

为什么用LangGraph而不是纯Agno?

维度 LangGraph Agno (Phidata)
条件路由 ✅ 原生支持 ❌ 需要手动实现
状态管理 ✅ 内置checkpoint ⚠️ 需要外部存储
流式输出 ✅ astream原生支持 ✅ 支持
社区生态 ✅ LangChain生态 ⚠️ 较新

LangGraph的StateGraph + conditional_edges完美契合"按需调度"的需求。

为什么用DeepSeek而不是OpenAI?

  1. 国内延迟:DeepSeek API在国内访问延迟<100ms,OpenAI需要代理
  2. 性价比:DeepSeek-V3的价格是GPT-4o的1/10
  3. 中文能力:DeepSeek在中文理解和生成上表现优秀
  4. OpenAI兼容:DeepSeek提供OpenAI兼容API,无需额外适配

LLM配置

llm = ChatOpenAI(
    model="deepseek-chat",
    base_url="https://api.deepseek.com",
    api_key=os.getenv("DEEPSEEK_API_KEY"),
)

工具层:flyai-cli

为什么用CLI而不是SDK?

飞猪MCP服务通过flyai-cli暴露,直接用subprocess调用:

result = subprocess.run("npx flyai search-hotel --dest-name 杭州", ...)

优势:

  • 零依赖:不需要安装飞猪SDK
  • JSON输出:CLI输出标准JSON,易于解析
  • 独立更新:CLI更新不影响后端代码

网关:Go标准库

为什么不用Gin/Echo/Fiber?

Go标准库的net/http已经足够:

  • 路由:http.NewServeMux() + HandleFunc
  • SSE:http.Flusher接口
  • 静态文件:embed.FS编译时嵌入
  • 模板:html/template标准库

引入框架只会增加二进制体积,没有任何功能收益。

embed.FS的妙用

//go:embed templates/*
var templateFS embed.FS

//go:embed static/*
var staticFS embed.FS

//go:embed blog/posts/*.md
var blogFS embed.FS

所有文件编译进Go二进制,部署时只需要一个可执行文件。

博客渲染:goldmark

Go的goldmark库在首次请求时将Markdown渲染为HTML,结果缓存在内存中(TTL 1小时):

var buf bytes.Buffer
mdRenderer.Convert([]byte(markdown), &buf)
cache[key] = buf.String()

内存预算

组件 内存
OS + 系统服务 ~300MB
Go网关 ~20MB
Python后端 ~300MB
总计 ~620MB

2GB服务器绰绰有余,还能承受流量高峰。

导航

← 上一篇:Agent协作原理与调度策略 → 下一篇:部署心得与性能优化