aws-samples/sample-text2sql-deep-agent-evalulation

GitHub: aws-samples/sample-text2sql-deep-agent-evalulation

基于 Amazon Bedrock 和 LangChain 构建的 Text-to-SQL 深度智能体示例项目,重点展示了使用 LangSmith 进行 AI 智能体系统性评估的五种模式。

Stars: 1 | Forks: 0

# 使用 LangSmith 和 AWS 评估 Deep Agents 这是一个使用 LangChain DeepAgents 和 Amazon Bedrock 构建的 Text-to-SQL 深度智能体(Deep Agent),并使用 LangSmith 提供了全面的评估模式。 本代码库附属于博客文章《使用 LangSmith 和 AWS 评估 Deep Agents》,并展示了用于测试智能体 AI 系统的五种评估模式。 ## 前置条件 在开始之前,请确保您具备以下条件: - 已安装 **Python 3.9 或更高版本** - 已启用 Amazon Bedrock 访问权限(Claude Sonnet 模型)的 **AWS 账户** - 已使用有效凭证配置好的 **AWS CLI**(`aws configure`) - **LangSmith 账户** — 请在 [smith.langchain.com](https://smith.langchain.com) 注册并生成 API 密钥 - 用于克隆代码库的 **Git** ## 设置 ### 1. 克隆并安装依赖 ``` git clone cd langsmith-deep-agents-eval python -m venv .venv source .venv/bin/activate pip install -e . ``` ### 2. 配置环境变量 复制示例环境文件并填写您的值: ``` cp .env.example .env ``` 使用您的 LangSmith API 密钥编辑 `.env`: ``` AWS_REGION=us-east-1 LANGCHAIN_TRACING_V2=true LANGSMITH_ENDPOINT=https://api.smith.langchain.com LANGCHAIN_API_KEY= LANGCHAIN_PROJECT=text2sql-deepagent-bedrock ``` ### 安全的密钥管理 `.env` 文件仅用于**本地开发**,并已通过 `.gitignore` 排除在版本控制之外。对于生产环境部署: - **AWS Secrets Manager**:将 API 密钥作为 secret 存储,并使用 `boto3` 以编程方式检索它们。 - **AWS Systems Manager Parameter Store**:将密钥作为 SecureString 参数存储。 - **切勿**将 API 密钥、凭证或 `.env` 文件提交到版本控制系统中。 ### 3. 验证您的设置 运行单个测试以确认所有配置均已就绪: ``` pytest tests/evals/test_text_to_sql_evals.py::test_simple_query_calls_correct_tool -v ``` 您应该会看到测试通过,并在输出中看到一个追踪 URL。访问您的 [LangSmith 仪表板](https://smith.langchain.com) 以确认追踪已被记录。 ## 运行评估 运行所有五种评估模式: ``` pytest tests/evals/ -v ``` 展示的五种模式如下: 1. **LLM-as-judge** — LLM 根据评分标准对复杂的分析性答案进行评分 2. **单步评估** — 验证智能体的首个决策是否正确 3. **完整轨迹评估** — 检查工具使用顺序及最终答案 4. **多轮评估** — 测试依赖于先前上下文的后续问题 5. **环境/状态检查** — 验证 SQL 安全性和智能体行为 ## 成本注意事项 本项目使用计费服务: - **Amazon Bedrock** 根据输入/输出 token 按每次 API 调用收费。每次测试都会调用智能体(多次 LLM 调用),外加一次 LLM 评估器调用。 - **LangSmith** 根据您的套餐对追踪存储和评估运行收取费用。 运行完整的评估套件将会产生这两项服务的费用。请在 [AWS 账单控制台](https://console.aws.amazon.com/billing/) 和 [LangSmith 使用页面](https://smith.langchain.com) 中监控您的使用情况。 ## 清理资源 为避免在使用完毕后产生持续费用: 1. **Amazon Bedrock**:当您的代码停止运行时,API 调用即会停止。不会创建任何持久性资源。请在您的 [AWS 账单控制台](https://console.aws.amazon.com/billing/) 中进行监控,以确认没有意外费用。 2. **LangSmith 项目**:在 LangSmith UI 中归档或删除 `text2sql-deepagent-bedrock` 项目(依次进入 Tracing Projects → 选择项目 → Settings → Delete)。 3. **在线评估器**:如果您配置了在线评估器,请在 LangSmith UI 中禁用或删除它们,以停止自动评估运行。 4. **环境变量**:如果不再需要,请移除或轮换您的 LangSmith API 密钥。 ## 安全:Text-to-SQL 智能体的纵深防御 Text-to-SQL 智能体可以执行任意 SQL,因此仅靠提示级别的指令是不够的。本项目应用了以下几种确定性控制措施: - **只读数据库连接** — SQLite 数据库以只读模式(`?mode=ro`)打开,因此无论智能体生成什么内容,`INSERT`、`UPDATE`、`DELETE` 和 `DROP` 语句都会在数据库驱动程序级别失败。 - **隔离的智能体工作区** — 智能体的 `FilesystemBackend` 将数据写入 `.agent_workspace/` 而不是项目根目录,从而限制了智能体在遭受提示词注入攻击时的影响范围。 - **评估中的 SQL 安全断言** — 评估套件会检查执行的查询中是否出现 DML 语句(参见 `test_complex_query_uses_planning_and_safe_sql`)。 - **在线安全评估器** — `sql-safety-check` 在线评估器(参见 `online_evaluators_setup.py`)会检查每一条生产环境追踪记录中是否存在危险的 SQL 关键字。 当您将此模式应用于需要写访问权限的生产环境数据库(例如 PostgreSQL、MySQL)时,请考虑使用只读数据库副本或仅具有 `SELECT` 权限的数据库用户。 ## 项目结构 ``` ├── agent.py # CLI entrypoint for the text-to-SQL agent ├── chinook.db # SQLite Chinook sample database ├── skills/ # Deep agent skills (query writing, schema exploration) ├── tests/evals/ │ ├── conftest.py # Pytest fixtures (agent, model, database) │ └── test_text_to_sql_evals.py # Five evaluation patterns ├── .env.example # Environment variable template └── pyproject.toml # Project dependencies ``` ## 安全 有关更多信息,请参见 [CONTRIBUTING](CONTRIBUTING.md#security-issue-notifications)。 ## 许可证 本库采用 MIT-0 许可证授权。请参阅 LICENSE 文件。
标签:AI评估测试, Amazon Bedrock, DLL 劫持, LangChain, Text-to-SQL, 人工智能, 大语言模型, 用户模式Hook绕过, 轻量级, 逆向工具