目录

ai_agent_study

一个用 Go 从零实现的 AI Agent 学习项目:多轮对话、工具调用、流式打字机输出、上下文窗口管理与会话持久化。除存储层(gorm/sqlite)外全部标准库手写——目标是把 Agent 的每个零件拆开看明白。

架构

bootstrap/    C+V 层:/指令路由(controller)与终端渲染(view)、装配根
runtime/      M 层:Engine 多轮工具循环、Turn/TurnStream、会话归档与恢复
contextpolicy/  上下文窗口管理:token 估算(Usage 自校准)+ 滑窗截断 + 摘要压缩 + 摘要锚点
provider/     LLM 接入:openai / anthropic 双格式(对话/工具/流式迭代器)
tools/        工具执行体:read_file/write_file/list_dir/edit_file/grep/glob + run_command(结果自动截断:单条 10K token 上限,防上下文爆炸)
models/       M 层:领域模型(Session/Turn/Workspace)与 gorm/sqlite 持久化

依赖单向:bootstrap → runtime → contextpolicy/provider/tools → models。

快速开始

cp .env.example .env   # 或直接创建 .env,填入以下配置
go run .

.env 配置项:

变量 说明
LLM_PROVIDER openai 或 anthropic
LLM_BASE API 地址(兼容网关可自定义)
LLM_API_KEY 密钥
LLM_MODEL 模型名(留空走实例默认)
LLM_TURN_TIMEOUT 单轮对话超时(默认 10m,如 90s、5m)
LOG_LEVEL 日志级别(debug/info/warn/error,默认 info;日志只写 logs/)

交互

已恢复会话 #2:帮我写八皇后...,共 3 轮
可用指令:/exit 退出 | /new 新会话 | /list 列表 | /use N 切换 | /delete N 删除 | /help 帮助
> 帮我看看当前目录          ← 流式打字机输出;需要时模型会调用工具
> /list                     ← 会话列表(* 标当前)
  • 对话历史跨 Turn 自动携带;超过预算(默认摘要压缩 800K token 触发,按 1M 窗口模型配置)自动摘要压缩并落锚点,重启恢复不重烧 LLM
  • 每轮自动落库 sqlite(data/agent.db),软删除;日志全部落 logs/(控制台保持纯净交互)

测试

go test ./... -count=2 -race

文档

  • docs/01 入门.md —— Agent 基础
  • docs/02 上下文管理.md —— 会话持久化与上下文窗口管理(滑窗/摘要/锚点/校准)的实现详解
  • docs/superpowers/specs/ —— 各模块设计规格
关于

从头开始构造一个AI CR的agent,完成可以进入生产

703.0 KB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号