gongwenxin 1901cf611e 集成
2025-07-24 17:22:36 +08:00

39 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 活动上下文
## 当前工作焦点
我们正处于 **架构验证和问题修复的关键阶段**。在初步搭建了包含多个服务器(`APICaller`, `SchemaValidator`, `DMSProvider`, `TestManager`)的完整 MCP 架构后,我们遇到了一个**持续性的、与文件路径解析相关的核心障碍**。
当前所有工作的核心焦点是 **彻底解决在子进程中运行的 MCP 服务器无法正确定位其依赖文件(如 `domain.json`)的问题**,并最终让整个测试流程成功运转起来。
### 优先任务
1. **根源分析**: 彻底理解 `subprocess.Popen` 的工作目录CWD继承机制以及它是如何与 `DMSProviderServer.py``os.path` 相关函数交互并导致错误的。
2. **实施健壮的解决方案**:
- **重构 `run_tests.py`**: 修改启动脚本,在创建服务器子进程时,为其**明确设置 `cwd` 参数**,确保每个服务器都在其脚本所在的目录中运行。
- **简化服务器路径**: 在 `DMSProviderServer.py` 中,将文件路径调整为基于其已被正确设置的 `cwd` 的、更简单的相对路径。
3. **最终验证**: 运行完整的端到端测试,确认 AI Agent 能够成功从 `DMSProviderServer` 获取 API 列表,并启动其测试循环。
## 最近变更
* **多服务器架构实现**: 我们已经成功创建并集成了四个独立的 MCP 服务器,每个服务器都提供一组特定的工具。
* **Agent 逻辑进化**: Agent 的主循环 (`agent_main_loop.py`) 已经从硬编码逻辑演变为一个完全由 LLM 驱动的、动态的测试流程。
* **启动器脚本**: 创建了 `run_tests.py`,用于统一启动所有服务器和 Agent 进程。
* **反复的路径修复尝试**: 多次尝试修改 `DMSProviderServer.py` 中的相对路径,但均未成功,这促使我们对问题进行更深入的分析。
## 活动决策和考虑
### 当前决策
1. **接受失败并深入分析**: 我们认识到,简单的路径调整是无效的。我们决定暂停“打地鼠”式的修复,转而投入时间去理解问题的根本原因——进程的执行上下文。
2. **采用 `cwd` 解决方案**: 我们确定,通过在 `subprocess.Popen` 中为每个服务器子进程显式设置 `cwd`,是解决此类问题的最健壮、最可靠的方法。这将使我们的系统对执行环境的变化更具弹性。
### 开放问题
1. **异步错误处理**: 当前的 `agent_main_loop.py``TaskGroup` 中遇到了未处理的异常。一旦路径问题解决,下一个需要关注的技术点将是如何在 `anyio``asyncio` 的环境中优雅地捕获和处理并发任务中的错误。
2. **LLM 的稳定性**: 尽管 Agent 的逻辑是 LLM 驱动的但我们还未充分测试在真实、长链条的工具调用下LLM 生成的参数和决策的稳定性。这可能是下一个潜在的问题点。
## 下一步计划
### 短期目标 (本次会话)
- [x] **重构 `run_tests.py`** 以正确设置服务器的 `cwd`。 (已完成)
- [x] **调整 `DMSProviderServer.py`** 中的文件路径以匹配新的 `cwd`。(已完成)
- [ ] **执行最终测试**: 在您重启对话后,我们将立即运行 `run_tests.py`,并期望看到 `DMSProviderServer` 成功加载 API 列表Agent 开始执行测试。
- [ ] **修复 `TaskGroup` 异常**: 解决在 `agent_main_loop.py` 中出现的 `AttributeError: 'NoneType' object has no attribute 'get'`,这个错误很可能是由空的 API 列表间接触发的。