meeting_memory/README.md

221 lines
7.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Meeting Knowledge Interactive Agent
这是一个以“大模型交互式 Agent”为主体的会议知识库项目。用户在 CLI 里自然语言对话Agent 自己决定什么时候调用工具;`导入会议转录` 和 `查询周会台账` 只是 Agent 可用的工具,不是项目主体入口。
工程结构按 `D:\github_project\my_code\my_agent` 的 Agent 骨架组织,方便后续扩展 provider、tools、skills、memory 和任务调度。
## 目录结构
```text
meeting_knowledge/
├─ agent.py # 顶层 Agent 装配入口
├─ main_cli.py # 交互式 CLI 主入口
├─ main.py # 兼容入口,转到 main_cli.py
├─ prompts.py # system prompt 组装
├─ dispatch.py # 任务调度扩展点
├─ core_agent/
│ ├─ config.py # .env / 环境变量配置
│ ├─ compression.py # 长上下文压缩
│ └─ session.py # 多轮会话与工具调用循环
├─ providers/
│ ├─ base.py # Provider 抽象
│ ├─ openai_compatible.py # OpenAI-compatible 模型适配
│ ├─ rule_based.py # 离线规则 Provider仅用于 --offline 演示
│ └─ prompt_loader.py
├─ tools/
│ ├─ registry.py # 工具注册中心
│ ├─ default_tools.py # 默认工具集合(通用工具 + 会议工具)
│ ├─ general_tools.py # 读写文件、目录浏览、shell、Python 等基础工具
│ ├─ meeting_tools.py # 会议导入/查询工具
│ └─ tool_trace.py # 工具调用轨迹本地存储
├─ meeting_memory/ # 会议台账业务层
│ ├─ meeting_digest_agent.py # 会议整理子 Agent负责把原文整理成结构化结果
│ ├─ ledger.py # Markdown/JSON 台账存储
│ └─ service.py # 会议知识库业务服务
├─ prompt/zh/base.yaml # 中文基础提示词
├─ .env.example # 大模型配置模板
├─ .env # 本地大模型配置,需填写真实值
├─ webui/ # Web 页面静态资源
├─ webui_server.py # FastAPI Web 服务入口
└─ requirements.txt
```
## 安装依赖
```powershell
pip install -r requirements.txt
```
## 配置大模型
本项目适配 OpenAI-compatible API也就是兼容 `/v1/chat/completions` 的接口,并要求模型支持 tools/function calling。
复制或直接编辑 `.env`
```text
OPENAI_API_KEY=你的key
OPENAI_BASE_URL=https://你的服务地址/v1
MODEL_NAME=你的模型名
OPENAI_TIMEOUT=120
OPENAI_TEMPERATURE=0.2
CORE_AGENT_MAX_ITERATIONS=12
```
也兼容这些别名:
```text
API_KEY -> OPENAI_API_KEY
BASE_URL -> OPENAI_BASE_URL
CORE_AGENT_MODEL / MODEL -> MODEL_NAME
```
## 运行交互式 Agent
默认运行会读取 `.env` 并调用你的 OpenAI-compatible 模型:
```powershell
python .\main_cli.py
```
进入后可以直接说:
```text
导入 D:\github_project\my_code\meeting_agent\examples\huiyi.txt 知识库 合川分公司
```
然后继续问:
```text
专线护航还有哪些待办?知识库 合川分公司
```
## 运行 Web UI
当前 Web 前端源码已经内置在本项目的 `frontend_nanobot/` 中,构建后的静态文件统一输出到 `webui/dist/`,由 `webui_server.py` 直接托管,不再依赖外部 `nanobot` 目录。
### 1. 安装前端依赖
```powershell
cd .\frontend_nanobot
npm install
```
### 2. 构建前端
```powershell
npm run build
```
构建产物会输出到:
```text
.\webui\dist
```
### 3. 启动 Web 网关
```powershell
cd ..
python .\webui_server.py
```
默认地址:
```text
http://127.0.0.1:8010
```
如果只想离线演示整条链路,不调用大模型:
```powershell
python .\webui_server.py --offline
```
## 离线演示模式
只有想验证工具链、不调用大模型时,才使用:
```powershell
python .\main_cli.py --offline
```
单条离线导入测试:
```powershell
python .\main_cli.py --offline --once "导入 D:\github_project\my_code\meeting_agent\examples\huiyi.txt 知识库 合川分公司"
```
## 知识库选择约定
当前只是演示 demo不做团队隔离。`data/` 下每个子文件夹视作一个独立知识库,例如:
```text
data/
├─ 合川分公司/
└─ 另一个知识库/
```
未来 Web 界面可以列出这些文件夹,让用户选择一个知识库后,把文件夹名作为 `knowledge_base_id` 传给工具进行针对性提问。`team_id` 只是旧兼容参数,后续推荐使用 `knowledge_base_id`
在当前这版 Web 里,系统会把每个知识库自动映射成一个可进入的会话入口;选中对应会话后提问,就会优先基于该知识库回答。
## Agent 工具
- `current_time`:获取当前时间。
- `list_directory`:浏览工作区目录。
- `search_files`:按文件名搜索工作区文件。
- `read_file`:读取工作区内文本文件。
- `write_file`:写入工作区内文本文件。
- `execute_shell`:执行 shell 命令做环境检查或调试。
- `run_python`:执行简短 Python 代码做快速处理。
- `tool_trace_query`:按需查询本地保存的工具调用轨迹。
- `import_meeting_transcript`:导入会议原文,交给会议整理子 Agent 做项目化整理,并更新指定知识库的 Markdown 台账。
- `query_knowledge`:查询指定知识库周会台账。
- `list_knowledge_bases`:列出 `data/` 下已有知识库。
LLM Agent 会在对话中自动选择这些工具。会议整理本身由 `prompt/zh/meeting_digest.yaml` 驱动的子 Agent 完成,主 Agent 只负责调工具和查询台账。
## 多轮会话机制
当前多轮会话参考了 `D:\github_project\my_code\my_agent` 的实现思路:
- 每个会话保留最近 `20` 轮用户/助手对话并本地落盘。
- 超出窗口后,会通过 `core_agent/compression.py` 做滚动摘要压缩,而不是无限堆上下文。
- 工具调用的参数、思考、结果会单独保存到本地 `tool_trace.json`
- 默认不会把大量工具过程长期塞回主上下文;需要时由 Agent 调用 `tool_trace_query` 再查。
CLI 默认使用会话 `cli_default`。Web 侧每个聊天或知识库会映射到独立的本地会话目录。
## 输出数据
默认写入:
```text
data/
└─ 合川分公司/ # 一个知识库示例
├─ state.json
├─ team_ledger.md
└─ meetings/
```
`team_ledger.md` 是面向人和 Agent 共同读取的主文档;`state.json` 和 `meetings/*.json` 是可复用的结构化中间结果。
当前整理逻辑是:
- 每个知识库只维护一份 `team_ledger.md` 主台账。
- 每次导入只处理一份会议原文。
- 会议原文会先交给会议整理子 Agent按“项目”抽取重要信息再更新同一份 Markdown。
- 如果本次会议提到历史项目,就更新已有项目状态;如果出现新项目,就新增项目条目。
多轮会话和工具轨迹默认写入:
```text
agent_memory/
└─ sessions/
└─ <session_id>/
├─ recent_history.json
└─ tool_trace.json
```