智能会议新纪元:JiuwenClaw AI会议管理系统全方位实战

目录

[🌟 前沿背景与技术趋势](#🌟 前沿背景与技术趋势)

[1.1 企业协作的数字化转型](#1.1 企业协作的数字化转型)

[1.2 人工智能在会议管理中的应用](#1.2 人工智能在会议管理中的应用)

[1.2.1 技术演进历程](#1.2.1 技术演进历程)

[1.2.2 核心技术栈](#1.2.2 核心技术栈)

[1.3 JiuwenClaw的技术定位](#1.3 JiuwenClaw的技术定位)

[1.3.1 技术架构优势](#1.3.1 技术架构优势)

[1.3.2 与传统方案的对比](#1.3.2 与传统方案的对比)

[😰 行业痛点深度分析](#😰 行业痛点深度分析)

[2.1 会议纪要整理的五大痛点](#2.1 会议纪要整理的五大痛点)

痛点一:信息遗漏与不准确

痛点二:任务分配模糊

痛点三:进度追踪困难

痛点四:历史信息检索难

痛点五:知识无法沉淀

[2.2 传统解决方案的局限性](#2.2 传统解决方案的局限性)

[2.2.1 人工记录方案](#2.2.1 人工记录方案)

[2.2.2 录音转录方案](#2.2.2 录音转录方案)

[2.2.3 专业会议软件](#2.2.3 专业会议软件)

[💎 系统优势与核心价值](#💎 系统优势与核心价值)

[3.1 JiuwenClaw智能会议纪要系统的核心优势](#3.1 JiuwenClaw智能会议纪要系统的核心优势)

优势一:LLM驱动的智能解析

优势二:向量检索支持的语义搜索

优势三:记忆系统支持的任务追踪

优势四:多渠道无缝集成

[3.2 核心价值量化(预期效果)](#3.2 核心价值量化(预期效果))

[3.2.1 效率提升(预期)](#3.2.1 效率提升(预期))

[3.2.2 准确率提升(预期)](#3.2.2 准确率提升(预期))

[🏗️ 技术架构详解](#🏗️ 技术架构详解)

[4.1 整体架构设计](#4.1 整体架构设计)

[4.2 核心模块详解](#4.2 核心模块详解)

[4.2.1 LLM处理引擎](#4.2.1 LLM处理引擎)

[4.2.2 记忆系统引擎](#4.2.2 记忆系统引擎)

[4.2.3 技能系统集成](#4.2.3 技能系统集成)

[💻 实战开发指南](#💻 实战开发指南)

[5.1 环境准备](#5.1 环境准备)

[5.1.1 系统要求](#5.1.1 系统要求)

[5.1.2 安装步骤](#5.1.2 安装步骤)

[5.2 技能开发](#5.2 技能开发)

[5.2.1 创建会议纪要技能](#5.2.1 创建会议纪要技能)

[5.2.2 创建任务追踪技能](#5.2.2 创建任务追踪技能)

[5.3 核心脚本开发](#5.3 核心脚本开发)

[🚀 真实操作演示](#🚀 真实操作演示)

[6.1 运行会议解析器](#6.1 运行会议解析器)

[6.2 查看生成的文件](#6.2 查看生成的文件)

[6.3 启动JiuwenClaw服务](#6.3 启动JiuwenClaw服务)

[6.4 导入技能](#6.4 导入技能)

[6.5 测试会议处理](#6.5 测试会议处理)

[📈 性能优化实践](#📈 性能优化实践)

[7.1 使用记忆系统的向量检索](#7.1 使用记忆系统的向量检索)

[7.2 批量处理会议](#7.2 批量处理会议)

[🏢 企业级应用场景](#🏢 企业级应用场景)

[8.1 场景一:周例会管理](#8.1 场景一:周例会管理)

[8.2 场景二:任务进度查询](#8.2 场景二:任务进度查询)

[🔧 故障排查与最佳实践](#🔧 故障排查与最佳实践)

[9.1 常见问题](#9.1 常见问题)

问题1:工具名称错误

问题2:文件路径错误

[9.2 最佳实践](#9.2 最佳实践)

[📚 总结](#📚 总结)

[10.1 核心价值回顾](#10.1 核心价值回顾)

[10.2 技术亮点](#10.2 技术亮点)

[10.3 未来展望](#10.3 未来展望)

[🚀 参考资源](#🚀 参考资源)


🌟 前沿背景与技术趋势

1.1 企业协作的数字化转型

在数字化转型的浪潮中,企业协作方式正在经历深刻变革。根据IDC 2025年报告显示:

  • 会议频率激增:企业平均每周召开15-20次会议,较2020年增长300%

  • 知识流失严重:超过60%的会议内容在48小时内被遗忘

  • 效率低下:传统会议纪要整理平均耗时45分钟,且准确率仅70%

  • 协作成本高:企业每年在会议管理上的支出占总运营成本的8-12%

1.2 人工智能在会议管理中的应用

1.2.1 技术演进历程
复制代码
2015-2018:语音识别阶段
├── 关键词提取
├── 语音转文字
└── 基础转录

2019-2021:智能分析阶段
├── 语义理解
├── 情感分析
└── 自动摘要

2022-2024:深度智能阶段
├── 大语言模型
├── 向量检索
└── 预测分析

2025+:自主协作阶段
├── 自主决策
├── 智能调度
└── 主动提醒
1.2.2 核心技术栈

大语言模型( LLM

  • GPT/Claude等模型:语义理解和上下文分析

  • 命名实体识别:提取人名、时间、地点

  • 关系抽取:识别任务分配关系

向量检索

  • ChromaDB:高效的向量数据库

  • 语义搜索:基于意图的智能搜索

  • 相似度匹配:快速定位相关内容

记忆系统

  • 长期记忆:跨会话知识沉淀

  • 自动索引:实时更新记忆内容

  • 智能压缩:总结关键信息

1.3 JiuwenClaw的技术定位

JiuwenClaw作为新一代智能Agent平台,在会议管理领域具有独特优势:

1.3.1 技术架构优势
复制代码
# JiuwenClaw的核心能力矩阵
capabilities = {
    "记忆系统": {
        "长期记忆": "跨会话知识沉淀",
        "向量检索": "基于ChromaDB的语义搜索",
        "全文检索": "基于SQLite的BM25检索",
        "自动索引": "实时更新记忆内容"
    },
    "技能系统": {
        "动态扩展": "按需加载会议处理技能",
        "权限控制": "精细化工具访问管理",
        "自主演进": "根据反馈优化技能"
    },
    "多渠道接入": {
        "Web前端": "实时交互界面",
        "小艺频道": "华为生态集成",
        "飞书频道": "企业办公场景"
    },
    "心跳系统": {
        "定时任务": "自动提醒和检查",
        "条件触发": "智能任务调度",
        "状态监控": "实时健康检查"
    }
}
1.3.2 与传统方案的对比

|----------|----------|--------|------------|
| 维度 | 传统会议管理 | AI转录工具 | JiuwenClaw |
| 纪要生成 | 手动整理 | 自动转录 | LLM智能结构化 |
| 任务提取 | 人工识别 | 关键词匹配 | LLM语义理解 |
| 进度追踪 | Excel/邮件 | 无 | 记忆系统追踪 |
| 知识沉淀 | 文件夹存储 | 云存储 | 向量检索+记忆 |
| 团队协作 | 邮件/IM | 单向输出 | 双向交互 |
| 成本 | 高人力成本 | 订阅费用 | 开源自托管 |


😰 行业痛点深度分析

2.1 会议纪要整理的五大痛点

痛点一:信息遗漏与不准确

问题描述

  • 会议讨论速度快,记录跟不上

  • 专业术语、数字、人名容易记错

  • 重要决议被遗漏或误解

真实案例

复制代码
某科技公司产品评审会议:
- 会议时长:2小时
- 讨论议题:15个
- 手动记录要点:23个
- 实际遗漏要点:8个(35%)
- 记录错误:5处
- 导致后果:开发方向偏差,返工成本50万元

数据支撑

  • 平均每次会议遗漏关键信息30%

  • 人名、时间、数字错误率高达40%

  • 专业术语记录准确率仅60%

痛点二:任务分配模糊

问题描述

  • "这个任务谁来负责?" → "大家看着办"

  • "什么时候完成?" → "尽快吧"

  • "优先级如何?" → "都重要"

典型场景

复制代码
传统会议记录:
---
讨论了新功能开发,大家觉得应该做。
技术方案定了,开始实施吧。
有问题再沟通。
---

问题:
❌ 谁负责?不清楚
❌ 什么时候完成?没说
❌ 具体做什么?模糊
❌ 如何验收?没标准

影响分析

  • 任务完成率低:仅45%的任务按时完成

  • 责任推诿:30%的任务无人认领

  • 重复沟通:平均每个任务需要3次确认

痛点三:进度追踪困难

问题描述

  • 任务分散在邮件、微信、钉钉等多个渠道

  • 无法实时了解任务进展

  • 延期任务发现不及时

数据统计

复制代码
企业任务管理现状调查(样本:500家企业)
┌─────────────────────────────────────┐
│ 任务追踪方式分布                      │
├─────────────────────────────────────┤
│ Excel表格        35%                 │
│ 邮件往来         28%                 │
│ IM工具           22%                 │
│ 项目管理软件     10%                 │
│ 无追踪           5%                  │
└─────────────────────────────────────┘

任务延期发现时间:
- 提前3天发现:15%
- 提前1天发现:25%
- 当天发现:40%
- 已延期才发现:20%
痛点四:历史 信息检索

问题描述

  • "上次关于XX的讨论结论是什么?"

  • "这个决策是什么时候做的?"

  • "谁当时提出了不同意见?"

检索痛点矩阵

|--------|-------|---------|-----|
| 检索需求 | 传统方式 | 耗时 | 成功率 |
| 查找特定会议 | 翻文件夹 | 10-30分钟 | 70% |
| 查找某个决议 | 读纪要文件 | 20-60分钟 | 50% |
| 查找某人发言 | 逐条查找 | 30-90分钟 | 30% |
| 查找相关议题 | 多文件搜索 | 1-2小时 | 20% |

痛点五:知识无法沉淀

问题描述

  • 会议纪要存放在个人电脑

  • 人员离职导致知识流失

  • 相同问题重复讨论

知识流失成本

复制代码
企业知识管理现状:
- 平均每年流失知识资产:35%
- 重复讨论相同问题:每月8次
- 新员工学习周期:3-6个月
- 因知识流失导致的项目延期:25%

2.2 传统解决方案的局限性

2.2.1 人工记录方案

优势

  • 成本低(仅人力成本)

  • 灵活性高

劣势

  • 效率低下:平均45分钟/次会议

  • 准确率低:70%

  • 无法实时:需要会后整理

  • 依赖个人能力:质量参差不齐

2.2.2 录音转录方案

优势

  • 信息完整

  • 可回溯

劣势

  • 缺乏结构化:原始转录文本难以阅读

  • 无任务提取:需要人工二次整理

  • 检索困难:全文搜索效率低

  • 隐私问题:敏感信息泄露风险

2.2.3 专业会议软件

优势

  • 功能完善

  • 用户体验好

劣势

  • 成本高昂:$50-200/用户/月

  • 数据孤岛:无法与企业系统集成

  • 定制困难:无法满足特定需求

  • 依赖网络:离线场景受限


💎 系统优势与核心价值

3.1 JiuwenClaw智能会议纪要系统的核心优势

优势一: LLM 驱动的智能解析

技术实现

python 复制代码
# 实际可用的会议解析器
from openjiuwen.core.foundation.llm import Model

class MeetingParser:
    """基于LLM的会议解析器"""
    
    def __init__(self, llm: Model):
        self.llm = llm
    
    async def parse_meeting(self, content: str) -> dict:
        """使用LLM解析会议内容"""
        
        prompt = f"""
请分析以下会议内容,提取关键信息:

会议内容:
{content}

请按以下格式输出:
1. 会议基本信息(主题、时间、主持人、参会人员)
2. 议题列表(每个议题的讨论要点和决议)
3. 待办任务(任务描述、负责人、截止时间、优先级)

以JSON格式返回结果。
"""
        
        response = await self.llm.ainvoke(prompt)
        
        # 解析LLM返回的结构化数据
        meeting_data = self.parse_llm_response(response)
        
        return meeting_data
    
    def parse_llm_response(self, response: str) -> dict:
        """解析LLM响应"""
        import json
        
        # 提取JSON部分
        try:
            # 尝试直接解析
            return json.loads(response)
        except:
            # 如果包含markdown代码块,提取JSON
            import re
            json_match = re.search(r'```json\s*(.*?)\s*```', response, re.DOTALL)
            if json_match:
                return json.loads(json_match.group(1))
            
            # 返回原始响应
            return {"raw_response": response}

效果示例

python 复制代码
# 输入
meeting_content = """
会议主题:产品迭代规划会议
日期:2026-03-10
时间:14:00 至 15:30
主持人:张三
参会人员:张三(产品经理)、李四(开发负责人)、王五(测试负责人)

一、新功能开发进度
讨论了用户反馈系统的开发进度,决定加快前端开发。
用户反馈系统前端开发由李四负责,截止日期2026-03-15。
"""

# 输出
{
    "meeting_info": {
        "title": "产品迭代规划会议",
        "date": "2026-03-10",
        "time": "14:00-15:30",
        "host": "张三",
        "participants": [
            {"name": "张三", "role": "产品经理"},
            {"name": "李四", "role": "开发负责人"},
            {"name": "王五", "role": "测试负责人"}
        ]
    },
    "topics": [
        {
            "title": "新功能开发进度",
            "discussion": ["讨论了用户反馈系统的开发进度"],
            "decision": ["决定加快前端开发"]
        }
    ],
    "tasks": [
        {
            "description": "用户反馈系统前端开发",
            "assignee": "李四",
            "deadline": "2026-03-15",
            "priority": "中"
        }
    ]
}
优势二:向量检索支持的语义搜索

技术实现

python 复制代码
# 使用JiuwenClaw的记忆系统进行语义检索
from jiuwenclaw.agentserver.tools import memory_search, memory_get

async def search_meeting_history(query: str):
    """搜索历史会议记录"""
    
    # 使用向量检索搜索相关内容
    results = await memory_search(
        query=query,
        maxResults=10,
        minScore=0.7
    )
    
    # 获取完整的会议纪要
    meetings = []
    for result in results['results']:
        if 'meeting-minutes' in result['path']:
            # 读取完整文件
            full_content = await memory_get(
                path=result['path'],
                from_line=result['startLine'],
                lines=50
            )
            meetings.append({
                'path': result['path'],
                'snippet': result['text'],
                'full_content': full_content.get('text', ''),
                'score': result.get('score', 0)
            })
    
    return meetings

# 使用示例
async def main():
    # 搜索关于"性能优化"的历史会议
    results = await search_meeting_history("性能优化方案")
    
    for meeting in results:
        print(f"会议:{meeting['path']}")
        print(f"相关度:{meeting['score']}")
        print(f"摘要:{meeting['snippet'][:100]}...")
        print()
优势三:记忆系统支持的任务追踪

技术实现

python 复制代码
from jiuwenclaw.agentserver.tools import (
    memory_search, 
    memory_get, 
    write_memory, 
    edit_memory,
    read_memory
)
from datetime import datetime, timedelta

class TaskTracker:
    """任务追踪器"""
    
    async def create_task_file(self, date: str, tasks: list):
        """创建任务追踪文件"""
        
        content = self._generate_task_content(tasks)
        
        result = await write_memory(
            path=f"tasks/{date}-tasks.md",
            content=content
        )
        
        return result
    
    async def update_task_status(self, task_id: str, new_status: str):
        """更新任务状态"""
        
        # 搜索任务所在文件
        search_result = await memory_search(
            query=task_id,
            maxResults=1
        )
        
        if not search_result['results']:
            return {"success": False, "error": "Task not found"}
        
        task_file = search_result['results'][0]['path']
        
        # 读取文件内容
        file_content = await read_memory(path=task_file)
        
        # 更新状态
        old_text = f"状态:待办"  # 或其他状态
        new_text = f"状态:{new_status}"
        
        result = await edit_memory(
            path=task_file,
            oldText=old_text,
            newText=new_text
        )
        
        return result
    
    async def get_upcoming_tasks(self, days: int = 3):
        """获取即将到期的任务"""
        
        today = datetime.now()
        upcoming_date = today + timedelta(days=days)
        
        # 搜索即将到期的任务
        query = f"截止日期 {today.strftime('%Y-%m-%d')} OR {upcoming_date.strftime('%Y-%m-%d')}"
        
        results = await memory_search(
            query=query,
            maxResults=20
        )
        
        return results['results']
    
    def _generate_task_content(self, tasks: list) -> str:
        """生成任务文件内容"""
        
        lines = [
            f"# 任务追踪 - {datetime.now().strftime('%Y-%m-%d')}",
            "",
            "## 📊 任务概览",
            f"- 总任务数:{len(tasks)}",
            f"- 待办:{len([t for t in tasks if t['status'] == '待办'])}",
            "",
            "## 📋 任务列表",
            ""
        ]
        
        for task in tasks:
            lines.extend([
                f"### {task['id']}",
                f"- 描述:{task['description']}",
                f"- 负责人:{task['assignee']}",
                f"- 截止日期:{task['deadline']}",
                f"- 优先级:{task['priority']}",
                f"- 状态:{task['status']}",
                ""
            ])
        
        return '\n'.join(lines)
优势四:多渠道无缝集成

技术实现

python 复制代码
# JiuwenClaw支持的多渠道集成
class MultiChannelNotifier:
    """多渠道通知器"""
    
    def __init__(self):
        self.channels = {
            "web": WebChannel(),
            "xiaoyi": XiaoyiChannel(),
            "feishu": FeishuChannel()
        }
    
    async def broadcast_meeting_minutes(
        self, 
        meeting_title: str,
        minutes: str,
        participants: list
    ):
        """多渠道广播会议纪要"""
        
        results = {}
        
        for channel_name, channel in self.channels.items():
            if channel.is_enabled():
                try:
                    result = await channel.send(
                        title=f"会议纪要:{meeting_title}",
                        content=minutes,
                        recipients=participants
                    )
                    results[channel_name] = {"success": True, "result": result}
                except Exception as e:
                    results[channel_name] = {"success": False, "error": str(e)}
        
        return results

3.2 核心价值量化(预期效果)

注意: 以下数据为预期效果,实际效果可能因使用场景和配置而异

3.2.1 效率提升(预期)
python 复制代码
效率对比分析:

传统方式:
├── 会议记录:45分钟
├── 整理纪要:30分钟
├── 分发确认:15分钟
├── 任务录入:20分钟
└── 总计:110分钟

JiuwenClaw:
├── 会议记录:实时(LLM处理)
├── 整理纪要:自动(< 1分钟)
├── 分发确认:自动
├── 任务录入:自动
└── 总计:< 5分钟

预期效率提升:20倍以上
3.2.2 准确率提升(预期)
python 复制代码
准确率对比:

任务提取准确率:
├── 传统方式:70%
├── 关键词匹配:80%
└── JiuwenClaw(LLM):预期90%+

信息完整性:
├── 传统方式:65%
├── 录音转录:90%
└── JiuwenClaw:预期95%+

责任人识别:
├── 传统方式:75%
├── 关键词匹配:85%
└── JiuwenClaw(LLM):预期95%+

🏗️ 技术架构详解

4.1 整体架构设计

python 复制代码
┌─────────────────────────────────────────────────────────────────┐
│                    JiuwenClaw 会议纪要系统架构                      │
├─────────────────────────────────────────────────────────────────┤
│                                                                   │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐              │
│  │  输入层     │  │  处理层     │  │  输出层     │              │
│  │  Web/小艺   │  │  LLM引擎   │  │  文件存储   │              │
│  │  飞书/IM    │  │  (openjiuw) │  │  多渠道推送 │              │
│  └─────────────┘  └─────────────┘  └─────────────┘              │
│        │                │                │                        │
│        ▼                ▼                ▼                        │
│  ┌─────────────────────────────────────────────────────┐        │
│  │              核心引擎层                              │        │
│  ├─────────────────────────────────────────────────────┤        │
│  │  ┌──────────┐  ┌──────────┐  ┌──────────┐          │        │
│  │  │ LLM引擎  │  │ 记忆系统 │  │ 技能系统 │          │        │
│  │  │(openjiuw)│  │(ChromaDB)│  │ (动态)   │          │        │
│  │  └──────────┘  └──────────┘  └──────────┘          │        │
│  │  ┌──────────┐  ┌──────────┐  ┌──────────┐          │        │
│  │  │ 心跳系统 │  │ 工具系统 │  │ 进化系统 │          │        │
│  │  └──────────┘  └──────────┘  └──────────┘          │        │
│  └─────────────────────────────────────────────────────┘        │
│        │                │                │                        │
│        ▼                ▼                ▼                        │
│  ┌─────────────────────────────────────────────────────┐        │
│  │              数据存储层                              │        │
│  ├─────────────────────────────────────────────────────┤        │
│  │  ┌──────────┐  ┌──────────┐  ┌──────────┐          │        │
│  │  │ 向量数据库│  │ 关系数据库│  │ 文件存储 │          │        │
│  │  │(ChromaDB)│  │ (SQLite) │  │ (本地)   │          │        │
│  │  └──────────┘  └──────────┘  └──────────┘          │        │
│  └─────────────────────────────────────────────────────┘        │
│                                                                   │
└─────────────────────────────────────────────────────────────────┘

4.2 核心模块详解

4.2.1 LLM 处理引擎
python 复制代码
from openjiuwen.core.foundation.llm import Model, UserMessage

class MeetingProcessor:
    """会议处理器"""
    
    def __init__(self, llm: Model):
        self.llm = llm
    
    async def process_meeting(self, content: str):
        """处理会议内容"""
        
        # 1. 提取基本信息
        basic_info = await self._extract_basic_info(content)
        
        # 2. 分割议题
        topics = await self._extract_topics(content)
        
        # 3. 提取任务
        tasks = await self._extract_tasks(content)
        
        # 4. 生成纪要
        minutes = self._generate_minutes(basic_info, topics, tasks)
        
        return {
            "basic_info": basic_info,
            "topics": topics,
            "tasks": tasks,
            "minutes": minutes
        }
    
    async def _extract_basic_info(self, content: str):
        """提取会议基本信息"""
        
        prompt = f"""
从以下会议内容中提取基本信息:
- 会议主题
- 日期和时间
- 主持人
- 参会人员(姓名和角色)

会议内容:
{content}

以JSON格式返回。
"""
        
        response = await self.llm.ainvoke([UserMessage(content=prompt)])
        return self._parse_json_response(response.content)
    
    async def _extract_topics(self, content: str):
        """提取议题"""
        
        prompt = f"""
从以下会议内容中提取所有议题:
- 议题标题
- 讨论要点
- 决议内容

会议内容:
{content}

以JSON格式返回议题列表。
"""
        
        response = await self.llm.ainvoke([UserMessage(content=prompt)])
        return self._parse_json_response(response.content)
    
    async def _extract_tasks(self, content: str):
        """提取任务"""
        
        prompt = f"""
从以下会议内容中提取所有待办任务:
- 任务描述
- 负责人
- 截止时间
- 优先级(根据关键词判断:紧急/重要=高,普通=中,可选=低)

会议内容:
{content}

以JSON格式返回任务列表。
"""
        
        response = await self.llm.ainvoke([UserMessage(content=prompt)])
        return self._parse_json_response(response.content)
    
    def _parse_json_response(self, response: str):
        """解析JSON响应"""
        import json
        import re
        
        # 尝试直接解析
        try:
            return json.loads(response)
        except:
            pass
        
        # 提取JSON代码块
        json_match = re.search(r'```(?:json)?\s*(.*?)\s*```', response, re.DOTALL)
        if json_match:
            try:
                return json.loads(json_match.group(1))
            except:
                pass
        
        return {"raw": response}
4.2.2 记忆系统引擎
python 复制代码
from jiuwenclaw.agentserver.memory import MemoryIndexManager, MemorySettings
from jiuwenclaw.agentserver.tools import memory_search, memory_get, write_memory

class MeetingMemoryManager:
    """会议记忆管理器"""
    
    def __init__(self, workspace_dir: str):
        self.workspace_dir = workspace_dir
    
    async def save_meeting(self, meeting_data: dict):
        """保存会议到记忆系统"""
        
        date = meeting_data['basic_info'].get('date', 'unknown')
        title = meeting_data['basic_info'].get('title', '未命名会议')
        
        # 保存会议纪要
        minutes_path = f"meeting-minutes/{date}-{title}.md"
        await write_memory(
            path=minutes_path,
            content=meeting_data['minutes']
        )
        
        # 保存任务追踪
        if meeting_data['tasks']:
            tasks_path = f"tasks/{date}-tasks.md"
            tasks_content = self._format_tasks(meeting_data['tasks'])
            await write_memory(
                path=tasks_path,
                content=tasks_content
            )
        
        # 更新当日记忆
        daily_path = f"{date}.md"
        await write_memory(
            path=daily_path,
            content=f"\n## 会议:{title}\n\n{meeting_data['minutes']}\n",
            append=True
        )
        
        return {
            "minutes_path": minutes_path,
            "tasks_path": tasks_path if meeting_data['tasks'] else None
        }
    
    async def search_meetings(self, query: str, top_k: int = 10):
        """搜索历史会议"""
        
        results = await memory_search(
            query=query,
            maxResults=top_k
        )
        
        meetings = []
        for result in results['results']:
            if 'meeting-minutes' in result['path']:
                meetings.append({
                    'path': result['path'],
                    'snippet': result['text'],
                    'citation': result.get('citation', ''),
                    'score': result.get('score', 0)
                })
        
        return meetings
    
    async def get_meeting(self, path: str):
        """获取完整会议内容"""
        
        result = await memory_get(path=path)
        return result.get('text', '')
    
    def _format_tasks(self, tasks: list):
        """格式化任务列表"""
        
        lines = [
            f"# 任务追踪 - {datetime.now().strftime('%Y-%m-%d')}",
            "",
            "## 📊 任务概览",
            f"- 总任务数:{len(tasks)}",
            "",
            "## 📋 任务列表",
            ""
        ]
        
        for idx, task in enumerate(tasks, 1):
            task_id = f"T{idx:03d}"
            lines.extend([
                f"### {task_id}",
                f"- 描述:{task.get('description', '')}",
                f"- 负责人:{task.get('assignee', '')}",
                f"- 截止日期:{task.get('deadline', '')}",
                f"- 优先级:{task.get('priority', '中')}",
                f"- 状态:待办",
                ""
            ])
        
        return '\n'.join(lines)
4.2.3 技能系统集成
python 复制代码
# 技能文件示例:workspace/agent/skills/meeting-minutes/SKILL.md

"""
---
name: meeting-minutes
version: 1.0.0
allowed_tools: [read_memory, write_memory, edit_memory, memory_search, memory_get]
---

# 会议纪要生成技能

## 角色定义
你是一个专业的会议纪要助手,负责整理会议内容、提取关键信息、分配任务并创建追踪清单。

## 可用工具

### memory_search
在长期记忆系统中搜索历史会议记录。

### memory_get
读取指定的记忆文件内容。

### write_memory
创建新的记忆文件或覆盖现有文件。

### edit_memory
精确编辑记忆文件内容。

### read_memory
读取记忆文件的指定行。

## 执行流程

1. 解析会议内容,提取基本信息
2. 使用 write_memory 保存会议纪要
3. 使用 write_memory 创建任务追踪文件
4. 使用 memory_search 查询相关历史会议
"""

# 在Agent中使用技能
from jiuwenclaw.agentserver.skill_manager import SkillManager

async def use_meeting_skill(meeting_content: str):
    """使用会议纪要技能"""
    
    skill_manager = SkillManager()
    
    # 获取技能
    skill = await skill_manager.handle_skills_get({
        "name": "meeting-minutes"
    })
    
    # Agent会根据技能定义自动调用相应的工具
    # 处理会议内容并生成纪要
    
    return skill

💻 实战开发指南

5.1 环境准备

5.1.1 系统要求
python 复制代码
硬件要求:
├── CPU:4核心以上
├── 内存:8GB以上
├── 硬盘:20GB以上可用空间
└── 网络:稳定的互联网连接

软件要求:
├── Python:3.11-3.13
├── Node.js:18.0+(前端构建)
├── Git:最新版本
└── 操作系统:Windows/Linux/macOS
5.1.2 安装步骤

步骤一:克隆项目

bash 复制代码
# 克隆JiuwenClaw仓库
git clone https://gitcode.com/openjiuwen/jiuwenclaw.git

# 进入项目目录
cd jiuwenclaw

图示:使用Git克隆JiuwenClaw项目到本地

步骤二:创建 虚拟环境

bash 复制代码
# 查看python版本号
python --version
bash 复制代码
# 使用uv创建虚拟环境
uv venv --python=3.12.5
bash 复制代码
# 激活虚拟环境
# Windows:
.venv\Scripts\activate

步骤三:安装依赖

bash 复制代码
# 同步依赖
uv sync
bash 复制代码
# 安装前端依赖
cd jiuwenclaw/web
npm install

5.2 技能开发

5.2.1 创建会议纪要技能

创建文件 workspace/agent/skills/meeting-minutes/SKILL.md

python 复制代码
---
name: meeting-minutes
version: 1.0.0
author: JiuwenClaw Team
description: 智能生成会议纪要,提取任务并创建追踪清单
tags: [meeting, collaboration, task-tracking]
allowed_tools: [read_memory, write_memory, edit_memory, memory_search, memory_get]
---

会议纪要生成技能

角色定义
你是一个专业的会议纪要助手,负责整理会议内容、提取关键信息、分配任务并创建追踪清单。

核心能力

1. 会议信息识别
自动识别会议类型(周会/评审会/讨论会/决策会)
提取参会人员及其角色
记录会议时间和时长
2. 内容结构化处理
按议题自动组织会议内容
提取每个议题的讨论要点
标记决议和待定事项
3. 任务提取与分配
智能识别所有待办事项
提取责任人和协助人
确定截止时间和优先级
创建任务追踪清单
可用工具说明

memory_search
在长期记忆系统中搜索历史会议记录和相关文档。

memory_get
读取指定的记忆文件内容。

write_memory
创建新的记忆文件或覆盖现有文件。

edit_memory
精确编辑记忆文件内容。

read_memory
读取记忆文件的指定行。

执行流程

当收到会议内容时,按以下步骤处理:

1. 解析阶段
使用LLM理解会议内容
提取会议基本信息(主题、时间、参会人员)
识别议题和讨论要点
提取任务和责任人
2. 存储阶段
使用 write_memory 保存会议纪要到 memory/meeting-minutes/{YYYY-MM-DD}-{主题}.md
使用 write_memory 创建任务追踪文件到 memory/tasks/{YYYY-MM-DD}-tasks.md
使用 write_memory 更新当日记忆文件 memory/YYYY-MM-DD.md
3. 检索阶段
使用 memory_search 查询相关历史会议
使用 memory_get 读取相关文档
关联历史决策和任务
注意事项

1. 工具使用:
使用 write_memory 而非 writeFile
使用 edit_memory 而非 editFile
使用 read_memory 而非 readFile
2. 任务管理:
确保所有任务都有明确的负责人和截止时间
高优先级任务需要特别标注
任务ID按顺序编号(T001, T002...)
5.2.2 创建任务追踪技能

创建文件 workspace/agent/skills/task-tracker/SKILL.md

python 复制代码
---
name: task-tracker
version: 1.0.0
author: JiuwenClaw Team
description: 追踪会议任务进度,定期提醒未完成事项
tags: [task, tracking, reminder]
allowed_tools: [read_memory, write_memory, edit_memory, memory_search]
---

任务追踪技能

功能说明
追踪从会议中提取的任务,监控进度,定期提醒责任人。

任务状态管理

状态定义
- 待办:任务已分配,尚未开始
- 进行中:任务正在执行
- 已完成:任务已完成
- 已延期:超过截止日期未完成
- 已取消:任务被取消

可用工具说明

memory_search
搜索任务相关的历史记录和会议纪要。

read_memory
读取任务追踪文件和会议纪要。

write_memory
创建新的任务追踪文件。

edit_memory
更新任务状态和进度。

执行规则

1. 任务创建:
每次会议后自动创建任务追踪文件
使用 write_memory 保存到 memory/tasks/{YYYY-MM-DD}-tasks.md
2. 状态检查:
每日检查任务状态
使用 read_memory 读取任务文件
使用 edit_memory 更新状态
3. 提醒机制:
对即将到期或已延期的任务发送提醒
使用 memory_search 查询任务背景

5.3 核心脚本开发

创建文件 scripts/meeting_parser.py

python 复制代码
#!/usr/bin/env python3
"""
会议内容解析器
功能:解析会议记录,提取关键信息,生成结构化纪要
"""

import re
import json
from datetime import datetime
from pathlib import Path
from typing import Dict, List, Tuple
from dataclasses import dataclass


@dataclass
class Task:
    """任务数据结构"""
    task_id: str
    description: str
    assignee: str
    deadline: str
    priority: str
    status: str = "待办"


@dataclass
class MeetingInfo:
    """会议信息"""
    title: str
    date: str
    start_time: str
    end_time: str
    duration: int
    meeting_type: str
    host: str
    recorder: str
    participants: List[Dict[str, str]]


class MeetingParser:
    """会议解析器"""
    
    def __init__(self, workspace_dir: str = "workspace"):
        self.workspace_dir = Path(workspace_dir)
        self.minutes_dir = self.workspace_dir / "meeting-minutes"
        self.tasks_dir = self.workspace_dir / "tasks"
        
        self.minutes_dir.mkdir(parents=True, exist_ok=True)
        self.tasks_dir.mkdir(parents=True, exist_ok=True)
        
        self.task_counter = 0
    
    def parse_meeting_content(self, content: str) -> Tuple[MeetingInfo, List[Dict], List[Task]]:
        """解析会议内容"""
        lines = content.strip().split('\n')
        
        meeting_info = self._extract_meeting_info(lines)
        topics = self._extract_topics(lines)
        tasks = self._extract_tasks(lines)
        
        return meeting_info, topics, tasks
    
    def _extract_meeting_info(self, lines: List[str]) -> MeetingInfo:
        """提取会议基本信息"""
        content = '\n'.join(lines)
        
        title = self._extract_field(content, r'会议主题[::]\s*(.+)')
        date = self._extract_field(content, r'日期[::]\s*(\d{4}[-/]\d{2}[-/]\d{2})')
        start_time = self._extract_field(content, r'时间[::]\s*(\d{1,2}:\d{2})')
        end_time = self._extract_field(content, r'至[::]?\s*(\d{1,2}:\d{2})')
        
        duration = self._calculate_duration(start_time, end_time) if start_time and end_time else 0
        meeting_type = self._detect_meeting_type(content)
        host = self._extract_field(content, r'主持人[::]\s*(.+)')
        recorder = self._extract_field(content, r'记录人[::]\s*(.+)')
        participants = self._extract_participants(content)
        
        return MeetingInfo(
            title=title or "未命名会议",
            date=date or datetime.now().strftime("%Y-%m-%d"),
            start_time=start_time or "00:00",
            end_time=end_time or "00:00",
            duration=duration,
            meeting_type=meeting_type,
            host=host or "未知",
            recorder=recorder or "未知",
            participants=participants
        )
    
    def _extract_topics(self, lines: List[str]) -> List[Dict]:
        """提取议题"""
        topics = []
        current_topic = None
        
        for line in lines:
            line = line.strip()
            
            if re.match(r'^[一二三四五六七八九十]+[、..]', line):
                if current_topic:
                    topics.append(current_topic)
                
                topic_title = re.sub(r'^[一二三四五六七八九十]+[、..]\s*', '', line)
                current_topic = {
                    'title': topic_title,
                    'discussion': [],
                    'decisions': []
                }
            
            elif current_topic:
                if line.startswith('决议') or line.startswith('决定'):
                    current_topic['decisions'].append(line)
                elif line.startswith('-') or line.startswith('•'):
                    current_topic['discussion'].append(line[1:].strip())
        
        if current_topic:
            topics.append(current_topic)
        
        return topics
    
    def _extract_tasks(self, lines: List[str]) -> List[Task]:
        """提取任务"""
        tasks = []
        content = '\n'.join(lines)
        
        task_patterns = [
            r'([^\n]+)由([^\s]+)负责[,,]截止日期[是为]?(\d{4}[-/]\d{2}[-/]\d{2})',
            r'([^\n]+)[,,]负责人[::]([^\s]+)[,,]截止[::]?(\d{4}[-/]\d{2}[-/]\d{2})',
        ]
        
        for pattern in task_patterns:
            matches = re.findall(pattern, content)
            for match in matches:
                self.task_counter += 1
                task = Task(
                    task_id=f"T{self.task_counter:03d}",
                    description=match[0].strip(),
                    assignee=match[1].strip(),
                    deadline=match[2].replace('/', '-'),
                    priority=self._determine_priority(match[0])
                )
                tasks.append(task)
        
        return tasks
    
    def generate_minutes(self, meeting_info: MeetingInfo, topics: List[Dict], tasks: List[Task]) -> str:
        """生成会议纪要"""
        timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        
        lines = [
            f"# 会议纪要 - {meeting_info.title}",
            "",
            "## 📌 基本信息",
            f"- **会议时间**:{meeting_info.date} {meeting_info.start_time} - {meeting_info.end_time}",
            f"- **会议时长**:{meeting_info.duration}分钟",
            f"- **会议类型**:{meeting_info.meeting_type}",
            f"- **主持人**:{meeting_info.host}",
            "",
            "## 👥 参会人员"
        ]
        
        for p in meeting_info.participants:
            lines.append(f"- {p['name']}({p['role']})")
        
        lines.extend(["", "## 📋 会议议题"])
        
        for idx, topic in enumerate(topics, 1):
            lines.extend([
                "",
                f"### 议题{idx}:{topic['title']}",
                "**讨论内容**:"
            ])
            
            for point in topic['discussion']:
                lines.append(f"- {point}")
            
            if topic['decisions']:
                lines.extend(["", "**决议**:"])
                for decision in topic['decisions']:
                    lines.append(f"- {decision}")
        
        if tasks:
            lines.extend(["", "## 📊 任务汇总", ""])
            lines.append("| 任务ID | 任务描述 | 负责人 | 截止日期 | 优先级 | 状态 |")
            lines.append("|--------|----------|--------|----------|--------|------|")
            
            for task in tasks:
                lines.append(
                    f"| {task.task_id} | {task.description} | {task.assignee} | "
                    f"{task.deadline} | {task.priority} | {task.status} |"
                )
        
        lines.extend([
            "",
            "---",
            f"*本纪要由 JiuwenClaw 自动生成*",
            f"*生成时间:{timestamp}*"
        ])
        
        return '\n'.join(lines)
    
    def save_minutes(self, meeting_info: MeetingInfo, content: str) -> Path:
        """保存会议纪要"""
        filename = f"{meeting_info.date}-{meeting_info.title}.md"
        filename = re.sub(r'[<>:"/\\|?*]', '_', filename)
        filepath = self.minutes_dir / filename
        
        with open(filepath, 'w', encoding='utf-8') as f:
            f.write(content)
        
        return filepath
    
    def create_task_tracker(self, tasks: List[Task], meeting_date: str) -> Path:
        """创建任务追踪文件"""
        lines = [
            f"# 任务追踪 - {meeting_date}",
            "",
            "## 📊 任务概览",
            f"- 总任务数:{len(tasks)}",
            f"- 待办:{len([t for t in tasks if t.status == '待办'])}",
            "",
            "## 📋 任务列表",
            ""
        ]
        
        for task in tasks:
            lines.extend([
                f"### {task.task_id}",
                f"- 描述:{task.description}",
                f"- 负责人:{task.assignee}",
                f"- 截止日期:{task.deadline}",
                f"- 优先级:{task.priority}",
                f"- 状态:{task.status}",
                ""
            ])
        
        filepath = self.tasks_dir / f"{meeting_date}-tasks.md"
        with open(filepath, 'w', encoding='utf-8') as f:
            f.write('\n'.join(lines))
        
        return filepath
    
    def _extract_field(self, content: str, pattern: str) -> str:
        """提取字段"""
        match = re.search(pattern, content)
        return match.group(1).strip() if match else ""
    
    def _detect_meeting_type(self, content: str) -> str:
        """检测会议类型"""
        if '周会' in content or '例会' in content:
            return "周会"
        elif '评审' in content:
            return "评审会"
        elif '讨论' in content:
            return "讨论会"
        else:
            return "普通会议"
    
    def _extract_participants(self, content: str) -> List[Dict[str, str]]:
        """提取参会人员"""
        participants = []
        match = re.search(r'参会人员[::]\s*(.+?)(?=\n|$)', content)
        
        if match:
            people_str = match.group(1)
            people_list = re.split(r'[、,,]', people_str)
            
            for person in people_list:
                person = person.strip()
                if person:
                    role_match = re.search(r'([^\((]+)[\((]([^\))]+)[\))]', person)
                    if role_match:
                        participants.append({
                            'name': role_match.group(1).strip(),
                            'role': role_match.group(2).strip()
                        })
        
        return participants
    
    def _calculate_duration(self, start: str, end: str) -> int:
        """计算会议时长(分钟)"""
        try:
            start_h, start_m = map(int, start.split(':'))
            end_h, end_m = map(int, end.split(':'))
            return max(0, (end_h * 60 + end_m) - (start_h * 60 + start_m))
        except:
            return 0
    
    def _determine_priority(self, description: str) -> str:
        """判断任务优先级"""
        if any(kw in description for kw in ['紧急', '重要', '立即']):
            return "高"
        elif any(kw in description for kw in ['可选', '后续']):
            return "低"
        return "中"


def main():
    """测试会议解析器"""
    sample_meeting = """
会议主题:产品迭代规划会议
日期:2026-03-10
时间:14:00 至 15:30
主持人:张三
参会人员:张三(产品经理)、李四(开发负责人)、王五(测试负责人)

一、新功能开发进度
讨论了用户反馈系统的开发进度。
决定:加快前端开发进度。
用户反馈系统前端开发由李四负责,截止日期2026-03-15。

二、性能优化方案
数据库优化由王五负责,截止日期2026-03-20。
"""
    
    parser = MeetingParser()
    meeting_info, topics, tasks = parser.parse_meeting_content(sample_meeting)
    
    print(f"会议:{meeting_info.title}")
    print(f"时间:{meeting_info.date} {meeting_info.start_time}-{meeting_info.end_time}")
    print(f"任务数:{len(tasks)}")
    
    minutes = parser.generate_minutes(meeting_info, topics, tasks)
    minutes_file = parser.save_minutes(meeting_info, minutes)
    print(f"\n✅ 会议纪要:{minutes_file}")
    
    if tasks:
        tracker_file = parser.create_task_tracker(tasks, meeting_info.date)
        print(f"✅ 任务追踪:{tracker_file}")


if __name__ == "__main__":
    main()

🚀 真实操作演示

6.1 运行会议 解析器

bash 复制代码
python scripts\meeting_parser.py

6.2 查看生成的文件

会议纪要文件 (`workspace/meeting-minutes/2026-03-10-产品迭代规划会议.md`):

任务追踪文件 (`workspace/tasks/2026-03-10-tasks.md`):

6.3 启动JiuwenClaw服务

步骤一:启动服务

bash 复制代码
#进入前端目录 jiuwenclaw/web 安装依赖
cd jiuwenclaw/web
npm install

#静态运行前端服务
npm run build
cd ../../
uv run jiuwenclaw-start

图示:启动JiuwenClaw服务

步骤二:访问Web界面

打开浏览器访问 http://localhost:5173

图示:JiuwenClaw的Web前端界面

6.4 导入技能

步骤一:打开技能面板

图示:打开技能管理面板

步骤二:导入会议纪要技能

点击"导入本地技能",输入路径:

bash 复制代码
D:\ideaworkspace\jiuwenclaw\workspace\agent\skills\meeting-minutes\SKILL.md

点击"确定"按钮,即可导入成功。如下图:

图示:导入会议纪要技能

6.5 测试会议处理

步骤一:输入会议内容

在聊天界面输入:

bash 复制代码
请帮我整理以下会议内容:

会议主题:技术架构评审会议
日期:2026-03-11
时间:10:00 至 11:30
主持人:王经理
参会人员:王经理(技术总监)、张工(架构师)、李工(开发组长)

一、微服务架构方案
讨论了从单体架构迁移到微服务架构的可行性,决定采用渐进式迁移策略。
微服务架构设计由张工负责,截止日期2026-03-20。

二、数据库选型
讨论了MySQL和PostgreSQL的优劣,决定使用PostgreSQL作为主数据库。
数据库迁移方案由李工负责,截止日期2026-03-25。

图示:在聊天界面输入会议内容

步骤二:查看Agent响应

Agent会自动解析会议内容并生成纪要。

图示:Agent自动生成会议纪要

📈 性能优化实践

7.1 使用记忆系统的向量检索

python 复制代码
from jiuwenclaw.agentserver.tools import memory_search

async def search_meeting_content(query: str):
    """搜索会议内容"""
    
    results = await memory_search(
        query=query,
        maxResults=10,
        minScore=0.7
    )
    
    return results

7.2 批量处理会议

python 复制代码
import asyncio

async def process_meetings_batch(meetings: list):
    """批量处理会议"""
    
    parser = MeetingParser()
    
    tasks = [
        asyncio.create_task(
            process_single_meeting(parser, meeting)
        )
        for meeting in meetings
    ]
    
    results = await asyncio.gather(*tasks)
    
    return results

async def process_single_meeting(parser: MeetingParser, content: str):
    """处理单个会议"""
    
    meeting_info, topics, tasks = parser.parse_meeting_content(content)
    minutes = parser.generate_minutes(meeting_info, topics, tasks)
    
    minutes_file = parser.save_minutes(meeting_info, minutes)
    tracker_file = parser.create_task_tracker(tasks, meeting_info.date) if tasks else None
    
    return {
        "meeting": meeting_info.title,
        "minutes": str(minutes_file),
        "tasks": str(tracker_file) if tracker_file else None
    }

🏢 企业级应用场景

8.1 场景一:周例会管理

python 复制代码
async def manage_weekly_meeting(meeting_content: str):
    """管理周例会"""
    
    parser = MeetingParser()
    
    # 解析会议
    meeting_info, topics, tasks = parser.parse_meeting_content(meeting_content)
    
    # 生成纪要
    minutes = parser.generate_minutes(meeting_info, topics, tasks)
    
    # 保存文件
    minutes_file = parser.save_minutes(meeting_info, minutes)
    tracker_file = parser.create_task_tracker(tasks, meeting_info.date)
    
    # 使用记忆系统保存
    await write_memory(
        path=f"meeting-minutes/{meeting_info.date}-{meeting_info.title}.md",
        content=minutes
    )
    
    return {
        "minutes": minutes_file,
        "tasks": tracker_file
    }

8.2 场景二:任务进度查询

python 复制代码
async def query_task_progress(assignee: str = None):
    """查询任务进度"""
    
    query = f"任务 负责人 {assignee}" if assignee else "任务"
    
    results = await memory_search(
        query=query,
        maxResults=20
    )
    
    tasks = []
    for result in results['results']:
        if 'tasks/' in result['path']:
            tasks.append({
                'path': result['path'],
                'snippet': result['text'],
                'citation': result.get('citation', '')
            })
    
    return tasks

🔧 故障排查与 最佳实践

9.1 常见问题

问题1:工具名称错误

错误示例

python 复制代码
allowed_tools: [readFile, writeFile, editFile]

正确写法

python 复制代码
allowed_tools: [read_memory, write_memory, edit_memory]
问题2:文件路径错误

错误示例

python 复制代码
await write_memory(path="meeting-minutes/test.md", content="...")

正确写法

python 复制代码
await write_memory(path="memory/meeting-minutes/test.md", content="...")

9.2 最佳实践

  1. 使用正确的工具名称
  • read_memory - 读取文件

  • write_memory - 写入文件

  • edit_memory - 编辑文件

  • memory_search - 搜索记忆

  • memory_get - 获取文件内容

  1. 文件路径规范
  • 会议纪要:memory/meeting-minutes/{date}-{title}.md

  • 任务追踪:memory/tasks/{date}-tasks.md

  • 当日记忆:memory/{date}.md

  1. 任务ID格式
  • 使用 T001, T002, T003 格式

  • 按顺序编号

  • 保持唯一性


📚 总结

10.1 核心价值回顾

通过JiuwenClaw智能会议纪要系统,我们实现了:

LLM驱动的智能解析 - 基于openjiuwen框架

向量检索支持 - 基于ChromaDB

记忆系统追踪 - 跨会话知识沉淀

多渠道集成 - Web/小艺/飞书

开源自托管 - 数据完全可控

10.2 技术亮点

  • 基于真实API:所有代码都基于项目实际工具

  • LLM能力:利用大语言模型进行语义理解

  • 向量检索:ChromaDB支持的高效语义搜索

  • 记忆系统:SQLite + ChromaDB混合检索

  • 技能扩展:动态加载和权限控制

10.3 未来展望

  • 语音实时转录:会议进行时实时生成纪要

  • 多语言支持:支持中英文混合会议

  • 智能建议:基于历史数据提供决策建议

  • 自动化执行:自动触发后续工作流程


🚀 参考资源

相关推荐
廋到被风吹走1 小时前
【Spring AI】Java 开发者构建企业级大模型应用(RAG/Agent)的官方一站式框架
java·人工智能·spring
輕華1 小时前
OpenCV 图像处理实战(上):阈值、平滑滤波与形态学操作从原理到代码
图像处理·人工智能·opencv
啦啦啦_99991 小时前
9. AI面试题之 功能代码实现
java·人工智能
Saniffer_SH1 小时前
【高清视频】4小时带你了解Saniffer公司针对PCIe Gen6测试的最新白皮书15.X
网络·人工智能·驱动开发·嵌入式硬件·测试工具·计算机外设·压力测试
EnCi Zheng2 小时前
11a. 阿里云大模型API调用基础
人工智能·python·阿里云·云计算
Lunar*2 小时前
用 Codex 在 WSL 里安装并配置 Claude Code:一次真实的 AI 代操作记录
人工智能
GEO_Huang2 小时前
想要排名稳?数谷 GEO 优化助力企业品牌升级
大数据·人工智能·百度·aigc·rpa·geo
说实话起个名字真难啊2 小时前
windows 安装openclaw的优势
人工智能·ai·openclaw
IT观测2 小时前
国内GPU算力服务哪家好——企业AI发展的核心支撑分析
人工智能·gpu算力