1.2 方案选型¶
学习目标¶
- 根据需求分析结果,进行方案选型
- 制定和评估工程实施方案
- 制定最终版实施方案
- 进行教学简化和细化
一、 方案选型及工程实施¶
1 方案选型¶
有两种备选方案:传统人机对话和基于大模型的Agent,仔细分析一下这两个方案的优缺点,尤其关注是否有重大缺陷。

传统人机对话对复杂情况的扩展能力较弱,无力应对这样复杂的情况,这是致命缺陷,会导致项目后续扩展能力严重不足。当项目扩展到一定规模以上,可能要考虑推倒重做;意图识别和槽位抽取不准确是重大缺陷,可能导致用户体验较差。

2 工程实施¶
实际实施工程的时候,按照技术水平从低到高,可能会提出以下几种实施策略版本,注意分析各个版本的思路以及主要问题:


3 大型项目开发的主要问题¶
分析上述几个实施策略版本的时候,基本思路是什么?
下面提供开发大型软件的时候,做项目架构必须考虑的主要问题,虽然比较偏工程方向,但是做比较大型综合的大模型项目的时候,这些问题也是需要大家深入思考的。

4 最终定案¶
最终方式是一个涉及15个独立智能体及其对应MCP服务的庞大体系,由一个整体的调度Agent负责全局统筹。并且各个独立智能体之间有复杂的联系。

二、教学简化¶
上面讲的是工程上实施的方案,教学中做了一定的简化,保留了主要技术框架,简化了重复性不较强的业务模块,教学方案中保留了两个完整的独立Agent(天气和票务),一个不完整的独立Agent(景点推荐)。
1 最简化逻辑图¶
项目的最简化逻辑图如下:统筹Agent中提供意图识别,判定具体使用哪个独立Agent,将15个独立Agent简化成两个。

2 逻辑图¶
统筹Agent提供更丰富的细节,包括意图识别和槽位提取。
提供一个非完全体的独立Agent:景点推荐。
所有工业项目必须提供兜底选项。这里使用了(out-of-scope)

3 代码级细化¶
将逻辑图映射为系统各模块之间的调用关系,明确各部分的功能。

三、项目使用示例¶
1 示例一¶
用户查询: 北京2025-08-11的天气怎么样 适合出行吗 系统响应:系统生成 SQL 如 "SELECT * FROM weather_data WHERE city = '北京' AND fx_date = '2025-08-11'",调用工具进行查询,并将查询结果进行总结回复。

2 示例二¶
用户查询: 近半个月上海到北京的火车票有吗 系统响应:根据用户的提问进行意图识别,针对核心槽位信息确实的进行追问,并生成sql进行查询,基于查询结构进行总结回复。

3 示例三¶
用户查询:天气 系统响应:根据用户天气意图,默认返回四大热门城市的天气情况。

四、项目技术框架及项目依赖¶
1 技术框架¶
- python-a2a:实现 MCP 和 A2A 协议,用于工具调用和 Agent 通信,支持数据库查询和任务处理。
- LangChain:集成 ChatOpenAI,用于 SQL 生成和意图识别,实现自然语言到结构化查询的转换。
- Streamlit:构建交互式前端,显示聊天历史和 Agent 信息。
- MySQL Connector:处理数据库连接和查询,确保数据格式化。
- Uvicorn:部署 FastAPI 服务器,支持 MCP 和 A2A 端点
2 项目依赖¶
以下是项目涉及的主要依赖及版本(基于代码环境推断,实际以 pip freeze 为准):
| 依赖名称 | 作用 |
|---|---|
| mysql-connector-python | 数据库连接和执行 SQL 查询 |
| langchain-openai | LLM 初始化和提示模板处理 |
| python-a2a | A2A/MCP 服务器和客户端实现 |
| streamlit | 前端界面构建 |
| requests | 天气 API 请求 |
| schedule | 定时数据更新 |
| uvicorn | 服务器运行 |
| pytz | 时区管理 |
| colorlog | 彩色日志输出 |
| json, datetime 等 | 数据库列化和时间处理 |
3 项目环境构建¶
为防止代码运行时因模块版本不同带来报错或异常,需要创建新的虚拟环境并安装相应的包。
# 创建虚拟环境,python版本:
conda create -n smartVoyage python==3.12.11
conda activate smartVoyage
#安装项目依赖
pip install -r requirements.txt
requirements.txt中的内容如下。
aiohappyeyeballs==2.6.1
aiohttp==3.12.15
aiosignal==1.4.0
altair==5.5.0
annotated-types==0.7.0
anthropic==0.60.0
anyio==4.9.0
attrs==25.3.0
beautifulsoup4==4.13.4
blinker==1.9.0
boto3==1.39.16
botocore==1.39.16
bs4==0.0.2
cachetools==6.1.0
certifi==2025.7.14
cffi==1.17.1
charset-normalizer==3.4.2
click==8.2.1
colorama==0.4.6
colorlog==6.9.0
cryptography==45.0.5
dashscope==1.24.0
dataclasses-json==0.6.7
distro==1.9.0
fastapi==0.116.1
filelock==3.18.0
Flask==3.1.1
frozenlist==1.7.0
fsspec==2025.7.0
gitdb==4.0.12
GitPython==3.1.45
greenlet==3.2.3
h11==0.16.0
hf-xet==1.1.5
httpcore==1.0.9
httpx==0.28.1
httpx-sse==0.4.1
huggingface-hub==0.34.3
idna==3.10
itsdangerous==2.2.0
Jinja2==3.1.6
jiter==0.10.0
jmespath==1.0.1
jsonpatch==1.33
jsonpointer==3.0.0
jsonschema==4.25.0
jsonschema-specifications==2025.4.1
langchain==0.3.26
langchain-community==0.3.27
langchain-core==0.3.72
langchain-deepseek==0.1.4
langchain-openai==0.3.28
langchain-text-splitters==0.3.9
langsmith==0.3.45
lxml==6.0.0
MarkupSafe==3.0.2
marshmallow==3.26.1
mcp==1.18.0
mcp-server==0.1.4
mpmath==1.3.0
multidict==6.6.3
mypy_extensions==1.1.0
mysql-connector-python==9.4.0
mysqlclient==2.2.7
narwhals==2.0.1
networkx==3.5
numpy==2.3.2
openai==1.97.1
orjson==3.11.1
packaging==25.0
pandas==2.3.1
pillow==11.3.0
propcache==0.3.2
protobuf==6.31.1
pyarrow==21.0.0
pycparser==2.22
pydantic==2.11.7
pydantic-settings==2.10.1
pydantic_core==2.33.2
pydeck==0.9.1
PyMySQL==1.1.1
python-a2a==0.5.4
python-dateutil==2.9.0.post0
python-dotenv==1.1.1
python-multipart==0.0.20
pytz==2025.2
pywin32==311
PyYAML==6.0.2
referencing==0.36.2
regex==2025.7.31
requests==2.32.4
requests-toolbelt==1.0.0
rpds-py==0.26.0
s3transfer==0.13.1
safetensors==0.5.3
setuptools==78.1.1
six==1.17.0
smmap==5.0.2
sniffio==1.3.1
soupsieve==2.7
SQLAlchemy==2.0.42
sse-starlette==3.0.2
starlette==0.47.2
streamlit==1.47.1
sympy==1.14.0
tenacity==9.1.2
tiktoken==0.9.0
tokenizers==0.21.4
toml==0.10.2
torch==2.7.1
tornado==6.5.1
tqdm==4.67.1
transformers==4.54.1
typing-inspect==0.9.0
typing-inspection==0.4.1
typing_extensions==4.14.1
tzdata==2025.2
urllib3==2.5.0
uvicorn==0.35.0
watchdog==6.0.0
websocket-client==1.8.0
Werkzeug==3.1.3
wheel==0.45.1
yarl==1.20.1
zstandard==0.23.0
schedule==1.2.2
langchain-mcp-adapters==0.1.11
本节小结¶
本部分主要介绍了项目背景及痛点、项目目标及优势、项目使用示例以及项目相关技术框架和项目依赖。