大模型应用
需要搭建可自演化、7×24 运行…
在纯 Python 环境中搭建带 26 个内置工具、三层记忆、MCP/插件、运行时创建工具、自修复和 cron 调度的 7/24 生产 AI Agent,并可接入企业微信。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
需要搭建可自演化、7×24 运行、带三层特定
解决思路
- 克隆仓库:git clone https://github.com/wangziqi06/724-office.git
- 进入目录:cd 724-office
- 安装 3 个运行时依赖:pip install croniter lancedb websocket-client
- 可选安装企业微信 silk 音频解码依赖:pip install pilk
- 创建目录:mkdir -p workspace/memory workspace/files
- 复制配置:cp config.example.json config.json
- 在 config.json 的 models.default 中设置 api_base、api_key、model、max_tokens。
- 在 config.json 的 models.embedding 中设置 api_base、api_key、model。
- 在 config.json 的 messaging 中设置 platform=wxwork,并配置 corp_id、corp_secret、agent_id、token、encoding_aes_key。
- 在 config.json 的 memory 中设置 session_max_messages=40、compression_overlap=5、dedup_threshold=0.92、retrieval_top_k=5、lancedb_path=workspace/memory。
- 在 config.json 的 asr 中设置 api_base、api_key、model=whisper-1。
- 在 config.json 的 scheduler 中设置 jobs_file=workspace/jobs.json、timezone=Asia/Shanghai。
- 在 config.json 的 server 中设置 host=0.0.0.0、port=8080。
- 在 config.json 中设置 workspace=workspace、mcp_servers={}。
- 用环境变量设置密钥,不要硬编码:export OPENAI_API_KEY、WXWORK_CORP_ID、WXWORK_CORP_SECRET 等。
- 启动 HTTP 服务器:python3 xiaowang.py,默认监听 :8080。
- 将消息平台 webhook 指向 http://YOUR_SERVER_IP:8080/。
- 文件结构入口 xiaowang.py:HTTP 服务器、防抖、语音识别、媒体下载。
- llm.py:工具使用循环、会话管理、记忆注入。
- tools.py:26 个内置工具、@tool 装饰器、插件加载器。
- memory.py:三层记忆 pipeline。
- scheduler.py:cron 与一次性调度、jobs.json 持久化。
- mcp_client.py:JSON-RPC MCP 客户端,支持 stdio 和 HTTP。
- router.py:多租户 Docker 路由。
- config.py:配置加载和环境变量插值。
- workspace/memory:LanceDB 向量存储。
- workspace/files:Agent 文件存储。
- workspace/SOUL.md:Agent 人格。
- workspace/AGENT.md:操作流程。
- workspace/USER.md:用户偏好/上下文。
- 添加内置工具时,在 tools.py 用 @tool 装饰器注册,提供 name、description、parameters JSON Schema。
- 编写实现函数,函数参数与 parameters schema 对应;工具会在下一次工具使用循环迭代自动提供给 LLM。
- 运行时创建工具:让 agent 在对话中调用 create_tool,传入 name、description、parameters、code。
- create_tool 会把工具保存到 workspace/custom_tools/<name>.py 并立即热加载。
- 连接 stdio MCP 服务器:在 config.json 的 mcp_servers 中设置 transport=stdio、command、args,例如 npx -y @modelcontextprotocol/server-filesystem /data。
- 连接 HTTP MCP 服务器:在 config.json 的 mcp_servers 中设置 transport=http、url。
- MCP 工具命名空间为 servername__toolname,双下划线。
- 不重启重载 MCP:让 agent 调用 reload_mcp() 或说 reload MCP servers。
- 调度任务可用 Agent 的 schedule 工具,或直接调用 scheduler API。
- 创建 Scheduler:Scheduler(jobs_file=workspace/jobs.json, timezone=Asia/Shanghai)。
- 添加一次性任务:sched.add_job(job_id=..., trigger=ISO 8601 时间, action={type:message, content:...}, user_id=...)。
- 添加循环 cron 任务:trigger=0 9 * * MON,action={type:llm_task, prompt:...},user_id=...。
- 调用 sched.start() 启动调度。
- 任务持久化在 workspace/jobs.json,重启后保留。
- 三层记忆:创建 MemoryManager(config 的 memory)。
- 第 1 层会话历史:mem.append_session(user_id, session_id, role, content),自动管理最近 40 条消息。
- 第 2 层长期压缩:会话溢出时 mem.compress_and_store(user_id, messages=evicted_messages),LLM 提取结构化事实,余弦相似度 0.92 去重。
- 第 3 层向量检索:mem.retrieve(user_id, query, top_k=5),返回 content 和 score。
- 在 llm.py 中每次调用前自动注入检索记忆:relevant = memory.retrieve(...),memory_block 拼接后加到 system_prompt 的 Relevant Memory 段。
- 在 workspace/SOUL.md 写人格和价值观,如语言、简洁但完整、主动建议下一步。
- 在 workspace/AGENT.md 写操作流程,如错误时查 workspace/logs/、运行 self_check()、严重时通知所有者,以及每日例行。
- 在 workspace/USER.md 写用户上下文,如姓名、时区、偏好、主要语言。
- 工具循环:run(user_id, session_id, user_message, media=None) 获取 session 消息并追加 user message。
- 最多循环 20 次工具迭代。
- 调用 llm_call(model=config 的 models.default, messages=inject_memory(...), tools=tools.get_schema())。
- 如果 finish_reason=stop,返回最终文本回复给用户。
- 如果 finish_reason=tool_calls,对每个 call 执行 tools.execute(call.name, call.arguments),追加 role=tool、tool_call_id=call.id、content=str(result),继续循环。
- 自修复:通过 scheduler 每日运行 self_check(),或聊天触发 run self-check 让 agent 调用 self_check()。
- 聊天触发 diagnose(session_id=...) 诊断最后会话。
- self_check 扫描错误日志异常模式、会话健康(响应时间、工具失败)、记忆存储完整性、调度任务状态。
- 发现问题时通过配置的消息平台发送通知。
- 多租户 Docker 路由:router.py 自动为每个用户创建容器。
- POST / 带 user_id 请求头路由到用户容器;容器不存在则用 docker run 724-office:latest 并带用户环境变量。
- 每 30s 健康检查,重启不健康容器。
- 单独部署 router:python3 router.py,监听 :80,路由到每用户 :8080+N。
- 用 Docker labels 发现容器:724office.user_id=<user_id>、724office.port=<assigned_port>。
- 从调度任务主动发消息:action 的 type=message,content,attachments。
- 语义搜索记忆:tools.execute(search_memory, {query:..., top_k:3})。
- 在 agent 进程执行任意 Python:tools.execute(exec, {code:...}),谨慎使用。
- 列出调度任务:list_schedules()。
- 取消调度任务:remove_schedule({job_id: weekly_report})。
- 故障排除 ImportError: lancedb:pip install lancedb。
- 记忆检索为空:确保 workspace/memory/ 存在;先发几条消息初始化 LanceDB。
- MCP 工具未找到:检查 config.json 的 mcp_servers;调用 reload_mcp。
- 调度不触发:在 config 设置 scheduler.timezone 为本地时区。
- 工具循环达到 20 次:在 AGENT.md 加护栏,检查循环工具调用。
- 企业微信 webhook 403:验证 WXWORK_TOKEN 和 WXWORK_AES_KEY 环境变量。
- Jetson 高 RAM:降低 retrieval_top_k,使用本地 embedding 模型。
- create_tool 不持久化:确认 workspace/custom_tools/ 目录存在且可写。
- 边缘部署 Jetson Orin Nano:ARM64 兼容,核心 agent 不需要 GPU。
- 安装 sentence-transformers 以使用本地 embedding 模型。
- 在 config.json 设置 models.embedding 的 type=local、model=BAAI/bge-small-en-v1.5。
- 控制 RAM 小于 2GB:session_max_messages 降到 20、retrieval_top_k 降到 3、避免加载大型 MCP servers。
适用边界 · 注意事项
- 不想使用 OpenAI 兼容 API、LanceDB、Docker、MCP 或企业微信等外部依赖时,不适用。
- 只是简单 LLM 问答,不需要长期记忆、运行时工具、MCP、定时调度、自修复或多租户时,不适用。
- 资源极度受限且不能降低 session_max_messages、retrieval_top_k 或改用本地 embedding 时,不适用。