说实话,每次有人问我"开发 AI Agent 应该用什么技术栈?",我都觉得挺难回答的。因为不同的场景,最佳的技术选择可能完全不同。今天就来聊聊我在不同项目中的技术选型经历,希望能给大家一些参考。
从个人项目说起
去年我开始研究 AI Agent 的时候,第一个练手项目是给自己做一个代码助手。需求很简单:能读懂我的项目代码,帮我重构和写测试。那时候,我的技术选型是这样的:
-
模型选择:OpenAI GPT-3.5
- 便宜,每千 token 才 0.002 美元
- 响应速度快,延迟在 100-300ms
- 能力够用,代码理解很不错
-
框架选择:LangChain
- Python 生态最完整
- 文档详细,示例丰富
- 社区活跃,遇到问题容易找到答案
-
向量数据库:Chroma
- 轻量级,启动即用
- 本地存储,不需要额外部署
- 性能够用,毕竟就我一个人用
代码结构也很简单:
python
from langchain.chat_models import ChatOpenAI
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.agents import initialize_agent, Tool
# 初始化 LLM
llm = ChatOpenAI(
model_name="gpt-3.5-turbo",
temperature=0.7,
max_tokens=2000
)
# 初始化向量数据库
embeddings = OpenAIEmbeddings()
vectorstore = Chroma(
embedding_function=embeddings,
persist_directory="./data"
)
# 定义工具函数
tools = [
Tool(
name="Search Code",
func=vectorstore.similarity_search,
description="搜索代码库中的相关代码"
),
# ... 其他工具
]
# 初始化 Agent
agent = initialize_agent(
tools,
llm,
agent="chat-conversational-react-description",
verbose=True
)
这套组合用了一个多月,体验还不错。但随着需求增加,很快就遇到了瓶颈:
- 代码库变大后,Chroma 的性能明显下降
- 经常需要等待 OpenAI API 的响应
- 想加新功能时,LangChain 的封装反而成了限制
迈向团队协作
后来团队里的其他开发者也对这个工具感兴趣,我就着手改造成了团队版本。这次的技术选型有了不少变化:
-
模型升级:GPT-4
- 理解代码的能力更强
- 上下文窗口更大,能处理更复杂的任务
- 虽然贵一些,但团队分摊后还能接受
-
框架切换:LangChain + FastAPI
- 需要提供 Web API 给团队使用
- 保留了 LangChain 的 Agent 能力
- 用 FastAPI 处理并发和认证
-
数据库升级:Milvus
- 性能更好,能处理更大的代码库
- 支持分布式部署
- 查询速度快,毫秒级响应
系统架构也更完整了:
python
from fastapi import FastAPI, Depends
from langchain.chat_models import ChatOpenAI
from pymilvus import connections, Collection
app = FastAPI()
# 初始化 Milvus
connections.connect(
alias="default",
host="localhost",
port="19530"
)
code_collection = Collection("code_vectors")
# 初始化 LLM
llm = ChatOpenAI(
model_name="gpt-4",
temperature=0.7,
max_tokens=4000
)
@app.post("/analyze")
async def analyze_code(
request: CodeAnalysisRequest,
user: User = Depends(get_current_user)
):
# 1. 向量搜索相关代码
results = code_collection.search(
request.query_vector,
limit=5,
param={"metric_type": "L2"}
)
# 2. 调用 GPT-4 分析
response = await llm.agenerate(
messages=[
SystemMessage(content=system_prompt),
HumanMessage(content=format_query(
request.query,
results
))
]
)
return {"analysis": response.generations[0].text}
这个版本用了大概三个月,团队反馈普遍不错。但随着使用人数增加,又冒出了新问题:
- API 调用成本开始飙升
- 响应时间不稳定
- 数据安全有隐患
企业级改造
最后一个转折是公司决定把这个工具推广到全公司使用。这下要考虑的东西就更多了:
-
模型混合:
- 主力:Azure OpenAI(企业级 SLA)
- 备份:本地部署的 CodeLlama
- 简单任务用 GPT-3.5,复杂任务用 GPT-4
-
框架重构:
- 抛弃了 LangChain,改用自研框架
- 更细粒度的权限控制
- 更灵活的扩展机制
-
基础设施升级:
- 向量数据库:Milvus 集群
- 缓存:Redis 集群
- 监控:Prometheus + Grafana
部署架构也更复杂了:
plaintext
┌─────────────┐
│ Nginx │
└─────────────┘
│
┌─────────┴─────────┐
│ │
┌───────┴───────┐ ┌──────┴───────┐
│ API Server │ │ API Server │
└───────┬───────┘ └──────┬───────┘
│ │
┌───────┴───────┐ ┌──────┴───────┐
│ Agent Core │ │ Agent Core │
└───────┬───────┘ └──────┬───────┘
│ │
┌───────────┼───────────┬──────┴───────┐
│ │ │ │
┌───┴───┐ ┌─────┴────┐ ┌────┴────┐ ┌─────┴─────┐
│ Azure │ │ CodeLlama │ │ Milvus │ │ Redis │
└───────┘ └──────────┘ └─────────┘ └───────────┘
关键的代码模块:
python
class AgentCore:
def __init__(self):
# 初始化模型池
self.model_pool = ModelPool([
AzureGPT4Model(),
AzureGPT35Model(),
CodeLlamaModel()
])
# 初始化向量存储
self.vector_store = MilvusCluster(
hosts=config.MILVUS_HOSTS,
collection="enterprise_code"
)
# 初始化缓存
self.cache = RedisCluster(
hosts=config.REDIS_HOSTS,
prefix="agent:"
)
async def process_request(
self,
request: AgentRequest,
context: RequestContext
) -> AgentResponse:
# 1. 权限检查
await self.check_permissions(request, context)
# 2. 选择合适的模型
model = self.model_pool.select_model(request)
# 3. 检查缓存
cache_key = self.generate_cache_key(request)
if cached := await self.cache.get(cache_key):
return cached
# 4. 处理请求
try:
response = await self._process(
request,
model,
context
)
# 5. 更新缓存
await self.cache.set(
cache_key,
response,
ttl=config.CACHE_TTL
)
return response
except Exception as e:
# 6. 故障转移
if isinstance(e, ModelError):
model = self.model_pool.fallback_model()
return await self._process(
request,
model,
context
)
raise
这个企业版本现在已经运行了几个月,每天处理几千个请求,基本稳定。主要的优势:
-
成本可控
- 模型按需选择
- 缓存减少重复请求
- 资源使用监控
-
性能稳定
- 负载均衡
- 故障转移
- 分布式扩展
-
安全合规
- 细粒度权限控制
- 数据访问审计
- 敏感信息过滤
经验总结
回顾这三个阶段的技术选型,我有这么几点体会:
-
循序渐进很重要
- 从简单方案开始
- 根据实际需求升级
- 保持架构的灵活性
-
没有最好只有最合适
- 个人项目追求简单实用
- 团队协作需要稳定性
- 企业级要考虑全面性
-
成本和效果要平衡
- 模型选择要看性价比
- 基础设施要用得起
- 运维成本也要算进去
写在最后
选择技术栈就像选择装修材料,要根据预算和需求来定。对于想要入门 AI Agent 开发的同学,我的建议是:先用最简单的技术栈做出一个能用的版本,在实践中慢慢优化和升级。
在下一篇文章中,我会详细讲解如何从零开始搭建一个 AI Agent。如果你也在选择技术栈,欢迎在评论区分享你的考虑。