现代智能体平台通常采用分层架构设计,我们实现的方案包含以下核心层次:
这种架构的优势在于:
选用OpenAI GPT-4 Turbo模型,主要考虑因素:
实际使用中需要注意:
python复制# 模型配置示例
llm = ChatOpenAI(
model_name="gpt-4-turbo",
temperature=0.3, # 平衡创造性和稳定性
max_tokens=4000,
model_kwargs={
"response_format": { "type": "json_object" } # 强制JSON输出
}
)
选用Qdrant作为向量数据库,关键优势:
典型配置参数:
python复制vector_store = QdrantClient(
host="localhost",
port=6333,
collection_name="knowledge_base",
vectors_config=VectorParams(
size=1536, # OpenAI embedding维度
distance=Distance.COSINE # 相似度计算方式
)
)
使用LangChain作为基础框架,主要因为:
提示:LangChain版本选择很重要,建议锁定0.1.x版本以避免breaking changes
基础智能体类(BaseAgent)采用抽象类设计,关键特性包括:
python复制def add_tool(self, tool: BaseTool):
"""运行时添加工具"""
self.tools.append(tool)
if self.agent_executor:
self.initialize() # 重新初始化智能体
python复制try:
result = await self.agent_executor.ainvoke({"input": input_text})
except Exception as e:
logger.error(f"Execution failed: {e}")
return {
"success": False,
"error": str(e),
"output": ""
}
协调器(Orchestrator)采用工作流引擎模式:
python复制def _calculate_quality_score(self, results: Dict[str, Any]) -> float:
"""基于各阶段成功率计算综合质量分"""
score = 0.0
if results.get("research", {}).get("success"): score += 0.3
if results.get("writing", {}).get("success"): score += 0.4
if results.get("review", {}).get("success"): score += 0.3
return round(score, 2)
mermaid复制graph TD
A[用户请求] --> B(研究阶段)
B --> C{研究成功?}
C -->|是| D(写作阶段)
C -->|否| E[返回错误]
D --> F{写作成功?}
F -->|是| G(评审阶段)
F -->|否| E
G --> H[结果聚合]
python复制async def add_documents(self, documents: List[Dict[str, Any]]):
points = []
for doc in documents:
embedding = await self.embeddings.aembed_query(doc["content"])
point = PointStruct(
id=str(uuid.uuid4()),
vector=embedding,
payload={
"content": doc["content"],
"metadata": doc.get("metadata", {})
}
)
points.append(point)
self.client.upsert(collection_name=self.collection_name, points=points)
结合语义搜索和关键词过滤:
python复制async def search(self, query: str, filters: Dict = None):
# 生成查询向量
query_embedding = await self.embeddings.aembed_query(query)
# 构建搜索条件
search_params = {
"query_vector": query_embedding,
"limit": 5,
"score_threshold": 0.7
}
# 添加过滤条件
if filters:
search_params["query_filter"] = FieldCondition(
key="metadata",
match=MatchValue(value=filters)
)
return self.client.search(
collection_name=self.collection_name,
**search_params
)
python复制# 同时执行多个独立任务
async def parallel_execute(tasks: List[Coroutine]):
return await asyncio.gather(*tasks, return_exceptions=True)
| 并发数 | 平均响应时间 | 错误率 | QPS |
|---|---|---|---|
| 10 | 1.2s | 0% | 8.3 |
| 50 | 2.8s | 1.2% | 17.8 |
| 100 | 4.5s | 3.5% | 22.2 |
python复制async def optimize_prompt(self, original_prompt: str, examples: List[str]):
analysis = await self.llm.ainvoke(
f"Analyze this prompt and suggest improvements:\n{original_prompt}"
)
return self._apply_optimizations(original_prompt, analysis.content)
Docker Compose配置要点:
yaml复制services:
api:
build: ./src
ports:
- "8000:8000"
env_file: .env
depends_on:
- postgres
- redis
- qdrant
qdrant:
image: qdrant/qdrant
ports:
- "6333:6333"
volumes:
- qdrant_data:/qdrant/storage
关键监控项:
GitHub Actions工作流示例:
yaml复制name: CI
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: pip install -r requirements.txt
- run: pytest tests/
deploy:
needs: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: docker-compose up -d --build
| 测试场景 | 验证点 | 预期结果 |
|---|---|---|
| 单智能体执行 | 工具调用正确性 | 准确使用指定工具 |
| 多智能体协作 | 任务传递完整性 | 各阶段结果正确传递 |
| 知识库查询 | 混合搜索效果 | 返回相关度最高的文档 |
| 异常处理 | 无效输入处理 | 返回明确错误信息 |
测试环境:
测试结果:
市场调研报告生成:
技术文档问答:
问题1:智能体陷入循环思考
python复制AgentExecutor(
max_iterations=15,
early_stopping_method="generate",
handle_parsing_errors=True
)
问题2:工具选择错误
问题1:文档相关性低
问题2:向量搜索性能下降
问题1:容器内存溢出
问题2:API响应变慢
在实际部署过程中,我们发现在高并发场景下需要特别注意数据库连接池的配置。通过调整SQLAlchemy的pool_size和max_overflow参数,系统稳定性得到了显著提升。另一个实用技巧是在Docker Compose中为Qdrant配置单独的volume,这样即使容器重启,向量数据也不会丢失。