# 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/ └─ / ├─ recent_history.json └─ tool_trace.json ```