# Chapter 9 - 上下文工程示例代码 本目录包含第九章"上下文工程"的所有示例代码和演示文件。 ## 📁 目录结构 ``` chapter9/ ├── 01_context_builder_basic.py # ContextBuilder 基础用法 ├── 02_context_builder_with_agent.py # ContextBuilder 与 Agent 集成 ├── 03_note_tool_operations.py # NoteTool 基本操作 ├── 04_note_tool_integration.py # NoteTool 高级集成 ├── 05_terminal_tool_examples.py # TerminalTool 使用示例 ├── 06_three_day_workflow.py # 完整三天工作流演示 ├── codebase_maintainer.py # 代码库维护助手(核心组件) ├── codebase/ # 示例代码库 │ ├── data_processor.py │ ├── api_client.py │ ├── utils.py │ └── models.py ├── data/ # 示例数据 │ └── sales_2024.csv ├── logs/ # 示例日志 │ └── app.log └── project/ # 示例项目 ├── README.md └── main.py ``` ## 🚀 快速开始 ### 1. 配置嵌入模型 所有使用记忆功能的示例都需要配置嵌入模型。最简单的方式: ```python import os # 使用 TF-IDF(无需额外依赖或下载) os.environ['EMBED_MODEL_TYPE'] = 'tfidf' os.environ['EMBED_MODEL_NAME'] = '' # 必须清空 ``` ### 2. 运行示例 ```bash # 进入 chapter9 目录 cd code/chapter9 # 运行 TerminalTool 示例(无需 LLM) python 05_terminal_tool_examples.py # 运行 NoteTool 基本操作(无需 LLM) python 03_note_tool_operations.py # 运行完整工作流演示(需要配置 LLM) python 06_three_day_workflow.py ``` ## 📖 示例说明 ### 基础示例 #### 01_context_builder_basic.py - ContextBuilder 的基本用法 - 上下文包(ContextPacket)的创建和管理 - Token 限制和上下文优先级 #### 02_context_builder_with_agent.py - ContextBuilder 与 SimpleAgent 集成 - 自动上下文管理 - 对话历史的处理 #### 03_note_tool_operations.py - NoteTool 的 CRUD 操作 - 笔记搜索和标签管理 - 笔记导出功能 #### 04_note_tool_integration.py - NoteTool 与 ContextBuilder 集成 - 长期项目追踪 - 基于历史笔记的建议 #### 05_terminal_tool_examples.py - TerminalTool 的典型使用场景 - 探索式导航 - 数据文件分析 - 日志分析 - 代码库分析 - 安全特性演示 ### 高级示例 #### 06_three_day_workflow.py **完整的长程智能体工作流演示**,包括: - 第一天:探索代码库 - 第二天:分析代码质量 - 第三天:规划重构任务 - 一周后:检查进度 - 跨会话连贯性演示 - 三大工具协同演示 使用我们创建的示例代码库(`./codebase`),包含: - `data_processor.py` - 数据处理模块(含多个 TODO) - `api_client.py` - API 客户端(需要改进错误处理) - `utils.py` - 工具函数(需要优化) - `models.py` - 数据模型(需要补充验证) #### codebase_maintainer.py **核心组件:代码库维护助手**,集成了: - ContextBuilder - 上下文管理 - NoteTool - 结构化笔记 - TerminalTool - 即时文件访问 - MemoryTool - 对话记忆(仅使用 working 记忆) ## ⚙️ 配置说明 ### 嵌入模型配置 有三种选择: #### 方案一:TF-IDF(推荐用于测试) ```python import os os.environ['EMBED_MODEL_TYPE'] = 'tfidf' os.environ['EMBED_MODEL_NAME'] = '' # 重要! ``` **优点**: - ✅ 无需额外依赖 - ✅ 无需 API key - ✅ 无需下载模型 **缺点**: - ⚠️ 语义理解能力较弱 #### 方案二:本地 Transformer(推荐用于离线使用) ```python import os os.environ['EMBED_MODEL_TYPE'] = 'local' os.environ['EMBED_MODEL_NAME'] = 'sentence-transformers/all-MiniLM-L6-v2' os.environ['HF_TOKEN'] = 'your_huggingface_token' ``` **需要**: 1. 安装依赖:`pip install sentence-transformers` 2. Hugging Face Token(从 https://huggingface.co/settings/tokens 获取) 3. 首次运行会下载模型(约 90MB) **配置 HF Token 的方式**: ```bash # 方式一:使用 huggingface-cli(推荐,一次配置永久使用) pip install huggingface-hub huggingface-cli login # 方式二:在代码中设置 os.environ['HF_TOKEN'] = 'hf_your_token_here' # 方式三:命令行设置 export HF_TOKEN="hf_your_token_here" ``` #### 方案三:通义千问 DashScope(推荐用于生产环境) ```python import os os.environ['EMBED_MODEL_TYPE'] = 'dashscope' os.environ['EMBED_MODEL_NAME'] = 'text-embedding-v3' os.environ['EMBED_API_KEY'] = 'your_dashscope_api_key' ``` **需要**: 1. 注册:https://dashscope.aliyun.com/ 2. 获取 API key 3. 安装依赖:`pip install dashscope` ### LLM 配置 如果使用需要 LLM 的示例,需要配置: ```python from hello_agents import HelloAgentsLLM # 使用默认配置(需要设置 OPENAI_API_KEY) llm = HelloAgentsLLM() # 或者明确指定 llm = HelloAgentsLLM( api_key="your_api_key", base_url="https://api.openai.com/v1", model="gpt-4" ) ``` 建议直接在'.env'文件中设置。 ### 记忆功能配置 `codebase_maintainer.py` 已配置为只使用 `working` 记忆,避免需要 Qdrant 向量数据库: ```python self.memory_tool = MemoryTool( user_id=project_name, memory_types=["working"] # 只使用工作记忆 ) ``` 如果需要更强大的记忆功能(episodic, semantic),需要安装并启动 Qdrant: ```bash # 使用 Docker 启动 Qdrant docker run -p 6333:6333 qdrant/qdrant ``` ## 🔍 示例文件说明 ### 演示数据文件 #### data/sales_2024.csv 包含 40+ 条销售数据,字段包括: - date(日期) - product(产品) - category(类别:Electronics, Furniture) - quantity(数量) - price(价格) - customer_id(客户ID) - region(地区:North, South, East, West) #### logs/app.log 模拟一天的应用日志,包含: - 多种日志级别(INFO, WARNING, ERROR) - 多种错误类型(DatabaseConnectionError, ValidationError 等) - 时间戳从 2024-01-19 14:00 到 23:30 #### codebase/ 包含 4 个 Python 模块,共 10+ 个 TODO 注释,适合演示: - 代码分析 - TODO 查找 - 函数定义搜索 - 代码统计 ## 🐛 常见问题 ### Q1: RuntimeError: 所有嵌入模型都不可用 **原因**:嵌入模型配置不正确。 **解决**:确保设置了 `EMBED_MODEL_NAME` 为空字符串: ```python os.environ['EMBED_MODEL_TYPE'] = 'tfidf' os.environ['EMBED_MODEL_NAME'] = '' # 必须有这行! ``` ### Q2: Qdrant 连接失败 **原因**:默认配置尝试连接 Qdrant 向量数据库。 **解决方案一**(推荐):使用只需 working 记忆的配置(已在 codebase_maintainer.py 中配置) **解决方案二**:安装并启动 Qdrant: ```bash docker run -p 6333:6333 qdrant/qdrant ``` ### Q3: 下载 Hugging Face 模型失败 **原因**:网络问题或缺少 Token。 **解决方案**: 1. 配置 HF Token(见上文"方案二") 2. 或使用镜像:`export HF_ENDPOINT=https://hf-mirror.com` 3. 或改用 TF-IDF:`os.environ['EMBED_MODEL_TYPE'] = 'tfidf'` ### Q4: TerminalTool 提示"不允许的命令" **原因**:TerminalTool 有白名单限制,只允许安全的命令。 **解决**:使用允许的命令列表中的命令,如: - 文件操作:ls, cat, head, tail, grep, find - 文本处理:awk, sed, cut, sort, uniq, wc - 其他:pwd, cd, tree, stat ## 📝 运行顺序建议 1. **先运行无需 LLM 的示例**: - `03_note_tool_operations.py` - 了解 NoteTool - `05_terminal_tool_examples.py` - 了解 TerminalTool 2. **配置嵌入模型后运行**: - `01_context_builder_basic.py` - 理解上下文管理 3. **配置 LLM 后运行**: - `02_context_builder_with_agent.py` - Agent 集成 - `04_note_tool_integration.py` - 高级集成 - `06_three_day_workflow.py` - 完整工作流 ## 🎯 学习路径 1. **基础概念** → `01_context_builder_basic.py` 2. **工具使用** → `03_note_tool_operations.py`, `05_terminal_tool_examples.py` 3. **Agent 集成** → `02_context_builder_with_agent.py` 4. **高级应用** → `04_note_tool_integration.py` 5. **实战案例** → `06_three_day_workflow.py` ## 💡 提示 - 所有示例都在代码开头包含了嵌入模型配置 - TF-IDF 方案适合快速测试和演示 - 生产环境建议使用 DashScope 或本地 Transformer - codebase_maintainer.py 是完整的实战案例,值得深入学习 ## 📚 相关文档 - 详细文档:`docs/chapter9/第九章 上下文工程.md` - API 文档:查看各工具类的 docstring - 项目主页:README.md ## 🤝 贡献 如有问题或建议,欢迎提 Issue 或 PR!