Back to Hello Agents

Chapter 9 - 上下文工程示例代码

code/chapter9/README.md

1.0.28.6 KB
Original Source

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!