领域特定问答代理:使用MCP的RAG替代方案
该项目展示了一种比传统RAG系统更简单、更实用的替代方案 -演示了现代搜索API与大型上下文窗口的结合如何消除许多文档问答用例中检索增强生成的复杂性。
该项目建立在 之前的问答代理实施,增强它 模型上下文协议(MCP) 用于更好的工具隔离、可扩展性和可维护性的架构。这些工具现在在单独的MCP服务器进程中运行,提供了更清晰的关注点分离,并实现了分布式部署。
📚 详细分析为什么搜索优先方法在2025年击败RAG (成本比较、性能优势、选型策略),请参阅 原始项目文件.
🆕 MCP的新功能
此增强版本引入 模型上下文协议(MCP) 架构:
- 🔗 工具隔离:搜索和抓取工具在单独的MCP服务器进程中运行
- 📡 HTTP传输:FastAPI应用程序和MCP服务器之间基于HTTP的可靠通信
- 🏗️ 可扩展体系结构:MCP服务器可以在不同的机器上运行以进行分布式部署
- 🛠️ 更好的发展:FastMCP检查器允许交互式工具测试
- 📋 标准化:遵循模型上下文协议规范以实现互操作性
- 🐳 生产就绪:通过多服务编排增强Docker设置
🌟 MCP的终极愿景:代理作为分布式生态系统中的工具
该项目展示了 约束示例 MCP的革命性潜力。虽然我们单独展示搜索和抓取工具,但MCP的真正力量在于创造 分层、自我发现的工具生态系统 其中代理本身成为其他代理的工具。
🔄 动态工具发现和分层系统
graph TD
A[Client Application] --> B[Primary MCP Server]
B --> C[Level 1: Basic Tools]
C --> D[search_documentation]
C --> E[scrape_website]
C --> F[file_operations]
B --> G[Level 2: Agent Tools]
G --> H[data_analysis_agent]
G --> I[code_review_agent]
G --> J[research_agent]
H --> K[MCP Server: Analytics]
K --> L[pandas_processor]
K --> M[visualization_engine]
K --> N[statistical_analyzer]
I --> O[MCP Server: DevOps]
O --> P[github_integration]
O --> Q[ci_cd_tools]
O --> R[security_scanner]
J --> S[MCP Server: Research]
S --> T[academic_search]
S --> U[patent_analyzer]
S --> V[trend_predictor]
subgraph "Tool Registry & Discovery"
W[MCP Registry Service]
X[Tool Capability Metadata]
Y[Dynamic Tool Routing]
end
B W
H W
I W
J W
🚀 超越这个项目:完整的MCP生态系统
此项目显示什么:具有搜索和抓取功能的静态工具配置
MCP能够大规模实现什么:
🔍 动态工具发现
- 工具注册:MCP服务器自动注册其功能
- 能力元数据:工具宣传其功能、参数和用例
- 智能路由:代理自动发现并连接到相关工具
- 负载平衡:同一工具类型的多个实例用于冗余
🏗️ 分层工具架构
- 代理作为工具:完整的AI代理作为单一工具暴露给其他代理
- 嵌套工作流:协调其他工具以完成复杂任务的工具
- 专业化层:特定领域的工具集群(DevOps、分析、研究)
- 跨域集成:来自不同领域的工具无缝协作
🌐 分布式MCP网络
- 多组织:跨组织边界共享的工具
- 联邦发现:现有MCP工具和代理的全球登记册
- 边缘计算:具有全局工具联盟的本地MCP服务器
- 弹性架构:跨分布式节点的自动故障转移和冗余
💡 现实场景:企业MCP生态系统
想象一下问: *“分析我们第三季度的销售数据,确定趋势,创建可视化,检查安全合规性,并生成执行报告”*
在我们当前的项目中:你会得到关于销售分析技术的搜索结果
在完整的MCP生态系统中:
- 发现阶段:主代理通过MCP注册表发现专用工具
- 数据分析代理:自动连接到分析MCP服务器
- 担保代理人:根据合规性MCP工具验证数据处理
- 可视化代理:使用可视化MCP服务生成图表
- 报告代理:使用文档生成MCP工具组合输出
- 执行代理人:使用MCP执行摘要功能审查和格式化最终报告
每个“代理”实际上都是一个MCP工具 它可以被其他代理使用,从而创建无限的可组合性。
🎯 本项目在愿景中的作用
🔹 基础建筑物:演示核心MCP客户端-服务器模式 🔹 工具隔离:显示如何将工具逻辑与应用程序逻辑分离\ 🔹 HTTP传输:为分布式系统建立可靠的通信模式 🔹 开发工作流程:提供测试和调试MCP工具的模式 🔹 生产部署:用于多服务MCP架构的Docker编排
将此视为“MCP 101” -在构建行星级的自组织工具生态系统之前,你需要的基本模式。
🚀 主要特点
- 🎯 智能工具选择:根据查询需求自动在快速搜索和全面抓取之间进行选择
- 🔍 域限制搜索:仅搜索经批准的组织文件网站
- 🧠 Web抓取回退:搜索结果不足时进行全面的页面抓取
- ⚡ MCP架构:工具在单独的MCP服务器进程中运行,以实现更好的隔离和可扩展性
- 🔗 HTTP传输:FastAPI应用程序和MCP服务器之间基于HTTP的可靠通信
- 📝 智能摘要:可选的人工智能结果摘要可将令牌使用率降低60-80%
- 💰 具有成本竞争力:每次查询0.005-0.075美元,通常比传统的RAG系统便宜
- ⚡ 性能优化:快速搜索90%的查询,仅在需要时进行深度抓取
- 🛡️ 数据安全:没有向病媒数据库或培训系统发送敏感数据
- 📊 透明来源:每个答案都包括来自官方文件的明确来源
- 🔧 易于配置:简单的CSV文件控制哪些知识源是可访问的
- 💬 对话记忆:维护会话中多个问题的上下文
- 🎮 生产就绪:FastAPI后端具有适当的错误处理和日志记录功能
🚀 快速开始
设置您的知识来源
要配置您的代理可以搜索哪些网站,请编辑 sites_data.csv 文件。此CSV定义了您的代理的知识边界和领域:
domain,site,description
AI Agent Frameworks,github.com/openai/swarm,OpenAI Swarm documentation for lightweight multi-agent orchestration
AI Operations,docs.agentops.ai,AgentOps documentation for testing debugging and deploying AI agents and LLM apps
AI Data Frameworks,docs.llamaindex.ai,LlamaIndex documentation for building LLM-powered agents over your dataCSV结构:
- 领域主题领域或主题(例如,“AI代理”、“Web开发”、“机器学习”)
- 站点:要搜索的实际网站域(例如,“docs.langchain.com”、“docs.python.org”)
- 描述:明确解释网站包含的内容以及何时使用
专业提示: 描述至关重要——它是代理用来决定特定网站是否有助于回答用户问题的工具。具体说明每个网站涵盖的主题和信息类型。
获取API密钥
获取Tavilly API密钥:
- 首选 tavily.com 注册一个免费帐户
- 导航到您的仪表板或API部分
- 在仪表板中查找您的API密钥
- Tavily提供了一个慷慨的免费等级,每月有数千次搜索
获取Google API密钥:
- 访问 ai.google.dev (谷歌人工智能工作室)
- 使用您的Google帐户登录
- 单击“获取API密钥”或导航到API密钥部分
- 如果需要,创建新项目
- 生成API密钥
- 谷歌的Gemini API包含大量免费层
获得两个密钥后,将它们添加到您的 .env 文件:
TAVILY_API_KEY=your_tavily_key_here
GOOGLE_API_KEY=your_google_key_here安全说明: 确保这些密钥的安全,永远不要将其提交到公共存储库。这两项服务都提供了适合开发和小规模生产使用的优秀免费套餐。
🐳 快速启动选项: 在本地开发(选项1-2)或Docker(选项3)之间进行选择。 Docker推荐用于生产环境 因为它自动处理服务编排。
选项1:使用Make(建议用于开发)
# Clone the repository
git clone https://github.com/javiramos1/qagent-mcp.git
cd qagent-mcp
# Setup environment and install dependencies
make install
# Copy and configure environment variables
cp .env.example .env
# Edit .env with your API keys
# Start MCP server (Terminal 1)
make mcp-server
# Start FastAPI application (Terminal 2)
make run选项2:手动设置(用于学习)
# Clone and setup
git clone https://github.com/javiramos1/qagent-mcp.git
cd qagent-mcp
# Create virtual environment
python3 -m venv qagent_venv
source qagent_venv/bin/activate
# Install dependencies
pip install -r requirements.txt
# Configure environment
cp .env.example .env
# Edit .env with your API keys
# Start MCP server (Terminal 1)
qagent_venv/bin/fastmcp run mcp_server.py --transport streamable-http --port 8001
# Start FastAPI app (Terminal 2)
python main.py选项3:Docker Compose(生产就绪)
Docker设置会自动在具有适当网络的单独容器中运行MCP服务器和FastAPI客户端:
# Clone and setup
git clone https://github.com/javiramos1/qagent-mcp.git
cd qagent-mcp
# Configure environment
cp .env.example .env
# Edit .env with your API keys
# Build and start both services
make docker-build
make docker-run
# Check service health
make docker-logs
# Access the API at http://localhost:8000
# MCP server runs internally on port 8001Docker架构:
- MCP服务器:在端口8001上运行(内部网络)
- FastAPI客户端:在端口8000上运行(暴露)
- 自动健康检查:两个服务相互监控
- 服务依赖关系:FastAPI等待MCP服务器健康
# Useful Docker commands
make docker-logs-mcp # View MCP server logs
make docker-logs-api # View FastAPI client logs
make docker-restart # Restart services
make docker-rebuild # Rebuild and restart
make docker-stop # Stop all services🔧 配置
所需的环境变量
系统对FastAPI客户端和MCP服务器使用单独的配置:
# ====================================
# CLIENT CONFIGURATION (main.py)
# ====================================
GOOGLE_API_KEY=your_google_api_key_here # Get from Google Cloud Console
# MCP Server Connection (Optional)
MCP_SERVER_URL=http://127.0.0.1:8001/mcp # MCP server endpoint
# ====================================
# MCP SERVER CONFIGURATION (mcp_server.py)
# ====================================
TAVILY_API_KEY=your_tavily_api_key_here # Get from Tavily.com
# MCP Server Network (Optional)
MCP_HOST=127.0.0.1 # MCP server host
MCP_PORT=8001 # MCP server port可选环境变量
# Client LLM Configuration
LLM_TEMPERATURE=0.1 # Response creativity (0.0-1.0)
LLM_MAX_TOKENS=3000 # Maximum response length
LLM_TIMEOUT=60 # LLM response timeout in seconds
REQUEST_TIMEOUT=30 # Request timeout in seconds
# MCP Server Tool Configuration
MAX_RESULTS=10 # Maximum search results per query
SEARCH_DEPTH=basic # Search depth: basic or advanced
MAX_CONTENT_SIZE=10000 # Maximum content size per result
MAX_SCRAPE_LENGTH=20000 # Maximum content length for web scraping (characters)
ENABLE_SEARCH_SUMMARIZATION=false # Enable AI summarization of search results (reduces tokens 60-80%)🏗️ 基于MCP的系统架构
这个版本的主要创新是 模型上下文协议(MCP) 将工具与主应用程序分离的架构:
graph TD
A[User Query] --> B[FastAPI Application]
B --> C[QA Agent]
C --> D[MCP Client]
D --> E[HTTP Transport
127.0.0.1:8001/mcp]
E --> F[MCP Server]
F --> G[search_documentation]
F --> H[scrape_website]
G --> I[Tavily API Search]
H --> J[Chromium Scraping]
I --> K{Search Results
Sufficient?}
K -->|Yes| L[Generate Response]
K -->|No| H
J --> M[Extract Page Content]
M --> N[Combine Search + Scraped Data]
N --> L
L --> O[Response with Sources]
P[sites_data.csv] --> G
Q[Domain Restrictions] --> I
Q --> JMCP架构优势
- 工具隔离:搜索和抓取工具在单独的MCP服务器进程中运行
- 可扩展性:MCP服务器可以在不同的机器上运行以进行分布式部署
- HTTP传输:可靠的基于HTTP的通信,而不是STDIO管道
- 发展:FastMCP检查器允许交互式工具测试
- 标准化:遵循模型上下文协议规范以实现互操作性
核心组件
- FastAPI应用程序:具有会话管理和健康监控功能的RESTful API
- QA代理:使用LangChain MCP适配器与MCP客户端集成的LangChain代理
- MCP客户端:用于工具通信的基于HTTP的模型上下文协议客户端
- MCP服务器:FastMCP服务器托管搜索和抓取工具
- 搜索工具:Tavilly API集成,实现快速、领域受限的搜索
- 刮削工具:基于铬的网页抓取,用于全面的内容提取
- 网站限制:CSV配置的域确保搜索保持在组织边界内
MCP与以前的架构
上一版本:直接嵌入主应用程序的工具 MCP版本:工具通过HTTP通信在单独的服务器进程中运行
这种分离能够:
- 更好的资源管理:工具可以独立缩放
- 提高了可靠性:工具故障不会导致主应用程序崩溃
- 增强的安全性:工具在隔离环境中运行
- 更容易调试:FastMCP工具测试检验员
📡 api参考
代理人提供 基于MCP的智能双层信息检索 通过一个简单的REST API:
会话管理:API使用安全的HTTP Cookie为每个用户维护单独的会话内存。当您发出第一个请求时,会自动生成一个唯一的会话ID(UUID)并将其存储在安全cookie中。每个会话ID都会创建自己的具有独立内存的代理实例,因此您的会话历史记录不会与其他用户混合,即使他们同时使用API也是如此。
MCP集成:在幕后,每个代理都通过HTTP传输连接到MCP服务器,以访问搜索和抓取工具。MCP服务器独立运行,允许更好的资源管理和可扩展性。
可用端点
POST /chat-向客服发送问题(根据需要自动使用MCP工具进行搜索+抓取)POST /reset-重置对话记忆GET /health-使用系统状态和活动MCP连接进行详细的健康检查
聊天端点示例
curl -X POST http://localhost:8000/chat \
-H "Content-Type: application/json" \
-d '{"message": "How do I create a LangChain agent with custom tools?"}'示例响应:
{
"status": "success",
"response": "Based on the LangChain documentation found via MCP search tools, here's how to create a custom agent...",
"session_id": "abc123-def456-ghi789"
}健康检查响应
curl http://localhost:8000/health示例响应:
{
"message": "Domain Q&A Agent API is running",
"status": "healthy",
"version": "1.0.0",
"active_sessions": 3,
"mcp_server_url": "http://127.0.0.1:8001/mcp"
}🛠️ MCP工具开发
可用的MCP工具
MCP服务器为QA代理提供了两个主要工具:
1. search_documentation
- 目的:使用Tavily API进行快速、受域限制的搜索
- 参数:
- query (string):搜索查询 - sites (数组):要搜索的已批准网站域名列表 - max_results (int,可选):返回的最大结果 - depth (字符串,可选):搜索深度(“基本”或“高级”)
- 退货:带有URL和内容片段的格式化搜索结果
2. scrape_website
- 目的:全面的网页内容提取
- 参数:
- url (string):要抓取的URL - tags_to_extract (数组,可选):要关注的HTML标签(默认为文本内容)
- 退货:已清理和格式化的页面内容
测试MCP工具
您可以使用FastMCP的内置检查器独立测试MCP工具:
# Start MCP server with inspector
make mcp-dev
# Or manually:
qagent_venv/bin/fastmcp dev mcp_server.py这将打开一个交互式界面,您可以在其中:
- 使用不同参数测试单个工具
- 检查工具模式和文档
- 调试工具在不运行完整应用程序的情况下响应
MCP服务器命令
# Start MCP server with HTTP transport (production)
make mcp-server
# Start with development inspector
make mcp-dev
# Test MCP server connectivity
make mcp-test
# Start with HTTP transport on custom port
MCP_PORT=9000 make mcp-server⚡ MCP增强搜索摘要
此版本包括与原始项目相同的智能搜索结果摘要,现在为 MCP集成:
# Enable summarization in your .env file
ENABLE_SEARCH_SUMMARIZATION=trueMCP集成优势
- 进程隔离:在MCP服务器进程中运行摘要
- 资源管理:更好地隔离摘要工作负载的资源
- 独立缩放:独立于主应用程序进行规模汇总
- 增强调试:使用FastMCP检查器测试摘要行为
📊 详细的性能优势和技术细节,请参阅 原始项目文件.
🔒 MCP增强的站点限制
基于域限制 原始项目,此MCP版本通过以下方式增强了安全性 工具隔离:
基于MCP的域限制
# In mcp_server.py - search_documentation tool
@mcp.tool
async def search_documentation(
query: str,
sites: List[str],
max_results: Optional[int] = None,
depth: Optional[str] = None
) -> str:
# The MCP tool enforces domain restrictions
search_params = {
"query": query,
"include_domains": sites, # Only search approved domains
"max_results": max_results or 10,
"search_depth": depth or "basic"
}
result = await tavily_client.search(**search_params)增强的安全优势
- 工具隔离:在MCP服务器级别执行所有搜索限制
- 过程分离:安全策略与主应用程序隔离
- 可扩展的安全性:MCP服务器可以在不同的安全上下文中运行
- 审计跟踪:MCP协议提供清晰的工具使用记录
🏢 企业部署MCP
MCP架构为企业部署提供了额外的好处:
增强的部署选项
- 分布式体系结构:MCP服务器可以在单独的机器上运行,以提高资源利用率
- 微服务兼容性:自然适合微服务架构
- 容器编排:通过单独的服务容器更好地集成Docker/Kubernetes
- 负载平衡:可以平衡多个MCP服务器实例的负载
企业集成优势
- 服务网格集成:MCP服务器可以参与企业服务网格
- 集中工具管理:单个MCP服务器可以为多个客户端应用程序提供服务
- 资源隔离:工具执行与业务逻辑隔离
- 独立缩放:独立于API层扩展搜索/抓取工具
📋 有关详细的组织用例 (内部文档、客户支持、合规性),请参阅 原始项目文件.
🎯 MCP教育目标
该项目演示了如何通过以下方式增强人工智能应用程序 模型上下文协议:
- ✅ 实施MCP架构 -将工具与主应用程序逻辑分开
- ✅ 构建MCP服务器 -使用自定义工具创建FastMCP服务器
- ✅ 使用MCP客户端 -集成langchain mcp适配器用于工具通信
- ✅ 部署MCP服务 -多服务MCP架构的Docker编排
- ✅ 调试MCP工具 -使用FastMCP检查器进行开发和测试
- ✅ MCP系统规模 -具有HTTP传输的分布式部署模式
🎓 为了实现更广泛的教育目标 (AI护栏、搜索优先架构、生产AI部署),请参阅 原始项目文件.
🛠️ 发展
可用的生成命令
make help # Show all available commands
make install # Setup virtual environment and dependencies
make run # Run the FastAPI application locally
make mcp-server # Run the MCP server with HTTP transport
make mcp-dev # Run the MCP server with FastMCP inspector
make test # Run tests
make clean # Clean up temporary files
make docker-build # Build Docker image for MCP architecture
make docker-run # Start both MCP server and FastAPI client with docker-compose
make docker-stop # Stop docker-compose services
make docker-logs # Show logs from all services
make docker-logs-mcp # Show logs from MCP server only
make docker-logs-api # Show logs from FastAPI client only
make docker-restart # Restart docker-compose services
make docker-rebuild # Rebuild and restart docker-compose services
make format # Format code with black
make lint # Run linting checks开发工作流程
对于初始设置后的持续开发(请参阅上面的快速入门部分):
本地开发工作流程
# Make your changes to the code
# Then test locally:
# Format and lint your changes
make format && make lint
# Test MCP server functionality
make mcp-test # Test MCP server
# Run the system (2 terminals)
make mcp-server # Terminal 1: Start MCP server
make run # Terminal 2: Start FastAPI appDocker开发工作流程
# Make your changes to the code
# Then test with Docker:
# Format and lint your changes
make format && make lint
# Test with Docker environment
make docker-rebuild # Build updated image and restart
make docker-logs # Monitor logs
# Debug specific services if needed
make docker-logs-mcp # Debug MCP server
make docker-logs-api # Debug FastAPI client💡 Docker的好处:生产对等、易于清理、服务隔离以及MCP服务器和客户端之间的自动化网络。
项目结构
qagent-mcp/
├── main.py # FastAPI application entry point
├── qa_agent.py # Core Q&A agent with MCP client integration
├── mcp_server.py # FastMCP server with search and scraping tools
├── sites_data.csv # Domain configuration
├── requirements.txt # Python dependencies
├── Dockerfile # Docker configuration for both services
├── docker-compose.yml # Multi-service Docker Compose setup
├── Makefile # Development commands with MCP support
├── .env.example # Environment variables template
├── .gitignore # Git ignore rules
└── README.md # This documentation🔧 故障排除
常见问题
1. API密钥错误
- 确保
.env存在具有有效API密钥的文件 - 检查API密钥权限和配额
- 验证两者
GOOGLE_API_KEY和TAVILY_API_KEY已设置
2. 地方发展问题
- 导入错误:激活虚拟环境:
source qagent_venv/bin/activate - 依赖项:安装依赖项:
make install - MCP服务器连接:确保MCP服务器正在运行:
make mcp-server - 端口冲突:检查端口8000和8001是否可用
3. Docker问题
- 构建失败:试试
make docker-rebuild从头开始构建 - 服务健康:检查服务状态:
make docker-logs - 端口冲突:确保端口8000和8001未被其他应用程序使用
- 环境变量:验证
.env文件配置正确 - 服务依赖关系:在FastAPI启动之前,MCP服务器必须处于健康状态
4. MCP连接问题
# Check MCP server health
make docker-logs-mcp
# Check FastAPI client connection
make docker-logs-api
# Test connectivity manually
curl http://localhost:8001/mcp # Should return MCP server info
curl http://localhost:8000/health # Should show MCP connection status5. 搜索不起作用
- 验证中的域配置
sites_data.csv - 检查Tavilly API密钥和配额
- 确保MCP服务器可以访问外部API(Docker网络)
Docker故障排除命令
# Check service status
docker-compose ps
# View all logs
make docker-logs
# View specific service logs
make docker-logs-mcp # MCP server logs
make docker-logs-api # FastAPI client logs
# Restart problematic service
docker-compose restart mcp-server
docker-compose restart qa-agent
# Check service health
docker-compose exec mcp-server python -c "import mcp_server; print('MCP server OK')"
docker-compose exec qa-agent python -c "import requests; print(requests.get('http://mcp-server:8001/mcp').status_code)"
# Clean rebuild
make docker-stop
make docker-rebuild获取帮助
- 检查 FastAPI文档
- 审查 LangChain文档
- 检查日志以了解错误详细信息
🏆 结论
该项目展示了如何 模型上下文协议(MCP) 通过提供以下功能来增强搜索优先的人工智能系统:
MCP架构优势
- 🔧 工具隔离:搜索和抓取工具在单独的、可管理的流程中运行
- 📈 可扩展性:工具与应用程序逻辑的独立扩展
- 🛡️ 增强的安全性:搜索限制的进程级隔离
- 🧪 更好的发展:用于交互式工具测试的FastMCP检查器
- 🏗️ 生产就绪:具有健康检查的多服务Docker编排
何时使用MCP架构
✅ 在以下情况下选择MCP:
- 构建需要工具隔离的生产AI系统
- 需要独立扩展搜索/抓取工具
- 想要更好的开发和调试经验
- 在微服务或容器环境中部署
- 要求企业级工具管理
🔄 在以下情况下使用原始版本:
- 构建简单的原型或演示
- 单容器部署就足够了
- 开发速度优先于架构
📚 对于完整的搜索优先与RAG分析、成本比较和性能研究,请参阅 原始项目.
非常适合:希望实施具有企业级工具隔离和管理的强大、可扩展的搜索优先人工智能系统的组织。
📄 许可证
此项目根据Apache许可证2.0获得许可-请参阅 许可证 文件以获取详细信息。
🤝 贡献
欢迎投稿!此项目遵循Apache 2.0许可条款:
- ✅ 叉子和实验 使用代码库
- ✅ 提交拉取请求 改进
- ✅ 在商业项目中使用 (注明出处)
- ✅ 创作衍生作品 同时保持许可证合规性
- ✅ 教育用途 鼓励学习搜索优先的人工智能开发
请确保任何贡献都能保持教育重点,并包括适当的文件。
🙏 致谢
- LangChain -使用大型语言模型构建应用程序的框架
- 谷歌双子座 -高级语言模型功能,价格实惠
- 塔维利 -具有域限制功能的Web搜索API
- 快速API -用于构建API的现代快速web框架
______________________________________________________________________
备注:这是一个教育项目,展示了搜索优先的人工智能助理开发作为传统RAG系统的更简单替代方案。在遵守Apache 2.0许可条款的同时,可以根据您的组织需求进行调整和扩展。
