【大赛优秀作品技术分享 Vol.9】基于AgentMem的多智能体仓颉编程助手——CodeLin

举报
华为开发者大赛 发表于 2026/02/12 14:41:36 2026/02/12
【摘要】 CodeLin是全球首个专为华为仓颉语言打造的AI原生编程助手,填补了鸿蒙生态中AI编程工具的空白。作品立足华为"纯血鸿蒙"生态战略,针对仓颉语言开发者工具缺位的核心痛点,构建了完整的企业级AI辅助开发平台。该项目获得2025年华为开发者大赛·企业赛道创新奖。

1. 参赛作品介绍

1.1 项目背景与定位

CodeLin是全球首个专为华为仓颉语言打造的AI原生编程助手,填补了鸿蒙生态中AI编程工具的空白。作品立足华为"纯血鸿蒙"生态战略,针对仓颉语言开发者工具缺位的核心痛点,构建了完整的企业级AI辅助开发平台。

1.1.1 市场定位:

生态独占: 全球唯一的仓颉语言AI编程助手;

技术领先: 基于AgentMem记忆平台的多智能体协作系统;

场景专精: 深度集成华为云、仓颉;     

1.1.2 技术亮点:

172,707行代码: 228个核心源文件,全部使用仓颉语言编写;

10+专业SubAgent: 覆盖开发全流程的多智能体协作系统;

AgentMem集成: 高性能企业级记忆平台,跨会话知识积累;

70%+缓存命中率: 智能上下文引擎,Token使用效率提升50-70%;

       

1.2 核心创新点

1.2.1  AgentMem记忆平台

长期记忆跨会话知识积累,项目模式学习;

语义索引: BM25算法 + 向量检索混合架构;

高性能: 216,000 ops/sec插件吞吐量,<100ms搜索延迟;

企业级: RBAC权限控制,审计日志,多租户支持;

记忆类型项目结构、代码模式、错误修复、用户习惯;

1.2.2  多智能体协作系统

10+专业化SubAgent: 规划/探索/编辑/审查/测试/重构;

并行执行框架: 60%+性能提升,16工具并发;

自动编排依赖图分析,执行顺序优化;

Leader-Group模式基于CangjieMagic的智能协作;

1.2.3  智能上下文引擎

BM25相关性评分: k1=1.5, b=0.75参数优化

5维优先级系统: P0-P4分级,Pin保护机制

Token精确管理: 70%+缓存命中率,50-70%使用效率提升

多级缓存查询级缓存 + 文件级缓存 + 排序结果缓存


1.3 作品架构概览

┌─────────────────────────────────────────────────┐

          Presentation Layer (展示层)             

     Terminal UI + 状态栏 + SubAgent视图           

├─────────────────────────────────────────────────┤

        Application Layer (应用层)                

     CliApp + 会话管理 + Resume模式               

├─────────────────────────────────────────────────┤

         Agent Layer (智能体层)                   

    Agent + 18+ SubAgent + AgentMem集成         

├─────────────────────────────────────────────────┤

         Service Layer (服务层)                   

  ContextService + ConversationService +         

  AgentService + MCP集成                         

├─────────────────────────────────────────────────┤

      Infrastructure Layer (基础设施层)            

   Cangjie LSP + AgentMem API + 华为云           

└─────────────────────────────────────────────────┘

```

2. 技术突破与价值创新

2.1 AgentMem核心架构与实现

2.1.1 AgentMem架构概览

AgentMem是基于Rust开发的高性能企业级记忆管理平台,提供5种搜索引擎和WASM插件系统:

  • 核心特性:

275,000+行生产级Rust代码: 18个专业化crate,清晰的关注点分离;

5种搜索引擎: VectorBM25Full-TextFuzzyHybrid (RRF);

WASM插件系统: 216,000 ops/sec吞吐量,沙箱隔离,热重载;

多语言绑定: PythonJavaScriptGo**Cangjie**;

企业级特性: RBACJWT认证、审计日志、多模态支持;

  •  性能指标:

添加记忆: 5,000 ops/s (P50: 20ms, P99: 50ms)

向量搜索: 10,000 ops/s (P50: 10ms, P99: 30ms)

BM25搜索: 15,000 ops/s (P50: 5ms, P99: 15ms)

插件调用: 216,000 ops/s (P50: 1ms, P99: 5ms)

  • CodeLin集成方式:

CodeLin通过**MCP协议** (Model Context Protocol) AgentMem集成:

```json
{
  "mcpServers": {
    "agentmem": {
      "command": "/path/to/agentmem-mcp-client",
      "args": [],
      "env": {
        "AGENTMEM_API_URL": "http://127.0.0.1:8080",
        "RUST_LOG": "info"
      }
    }
  }
}
```
  • 核心MCP工具:

- `agentmem_add_memory`: 存储记忆条目

- `agentmem_search_memories`: 语义搜索记忆

- `agentmem_chat`: 智能对话(带记忆上下文)

- `agentmem_get_system_prompt`: 获取个性化系统提示

- `agentmem_list_agents`: 列出所有可用Agent

  •  仓颉语言集成示例:
```cangjie
package codelin.core.memory

import std.collection.ArrayList

// AgentMem仓颉SDK(简化示例)
public class AgentMemClient {
    private let apiUrl: String
    private let authToken: String

    public init(apiUrl: String, authToken: String) {
        this.apiUrl = apiUrl
        this.authToken = authToken
    }

    // 添加记忆
    public func addMemory(
        content: String,
        userId: String,
        memoryType: String
    ): Unit {
        let requestBody = HashMap<String, String>()
        requestBody.put("content", content)
        requestBody.put("user_id", userId)
        requestBody.put("memory_type", memoryType)

        // HTTP POST请求实现
        // post("${this.apiUrl}/api/v1/memories", requestBody)
    }

    // 语义搜索记忆
    public func searchMemories(
        query: String,
        userId: String,
        limit
    ): ArrayList<MemoryEntry> {
        let params = HashMap<String, String>()
        params.put("query", query)
        params.put("user_id", userId)
        params.put("limit", limit.toString())

        // HTTP GET请求实现
        // return get("${this.apiUrl}/api/v1/memories/search", params)
        return ArrayList<MemoryEntry>()
    }
}
```
  • 实际应用场景:

(1)项目结构学习

```cangjie
// ExplorerAgent学习项目结构
agentMemClient.addMemory(
    content: "项目采用MVC架构:models/目录存放数据模型,views/目录存放UI组件,controllers/目录存放业务逻辑",
    userId: "explorer_agent",
    memoryType: "ProjectPattern"
)
```

(2)错误修复经验积累

```cangjie
// CangjieFixer记录修复经验
agentMemClient.addMemory(
    content: "错误:类型不匹配。解决方案:使用as关键字进行类型转换,或检查类型定义",
    userId: "cangjie_fixer",
    memoryType: "ErrorFix"
)
```

(3)用户习惯记忆

```cangjie
// 记录用户偏好
agentMemClient.addMemory(
    content: "用户偏好:使用4空格缩进,喜欢函数式编程风格,重视类型安全",
    userId: "user_alice",
    memoryType: "UserHabit"
)
```

2.1.2 CodeLin中的BM25实现

基于真实代码(`src/core/context/context_engine.cj`),CodeLin实现了优化的BM25算法:

```cangjie
package codelin.core.context

import std.collection.{HashMap, ArrayList}
import std.regex.Regex

// BM25评分器接口
public interface IBM25Scorer {
    func calculateScore(query: String, document: String): Float64
}

// BM25实现(基于真实代码简化)
public class BM25Scorer {
    private let k1: Float64 = 1.5  // 词频饱和参数
    private let b: Float64 = 0.75  // 长度归一化参数

    // 文档频率统计
    private var documentFrequency: HashMap<String, Int64> = HashMap<String, Int64>()
    private var totalDocuments: Int64 = 0
    private var avgDocLength: Float64 = 0.0

    public func calculateBM25Score(
        query: String,
        document: String,
        docLength: Int64
    ): Float64 {
        let queryTerms = this.tokenize(query)
        var score = 0.0

        for (term in queryTerms) {
            // 词频计算
            let termFreq = this.getTermFrequency(term, document)

            // 文档频率
            let docFreq = this.documentFrequency.getOrThrow(term)

            // IDF计算
            let idf = this.calculateIDF(docFreq)

            // BM25公式
            let numerator = termFreq * (this.k1 + 1)
            let denominator = termFreq + this.k1 * (
                1 - this.b + this.b * (docLength / this.avgDocLength)
            )

            score += idf * (numerator / denominator)
        }

        return score
    }

    private func calculateIDF(docFreq: Int64): Float64 {
        let numerator = this.totalDocuments - docFreq + 0.5
        let denominator = docFreq + 0.5
        return Math.log(numerator / denominator)
    }

    private func tokenize(text: String): ArrayList<String> {
        // 使用正则表达式分词
        let regex = Regex("\\w+")
        let matches = regex.matches(text)
        var tokens = ArrayList<String>()

        for (match in matches) {
            tokens.add(match.group0())
        }

        return tokens
    }
}
```

2.1.3 Ratatui - 仓颉TUI框架集成

 CodeLin的终端UI基于**Ratatui**仓颉版本实现(https://gitcode.com/Cangjie-SIG/ratatui):

  •  Ratatui核心特性:

- 基于Rust ratatui实现

- 支持布局系统、组件渲染、事件处理

- 高性能终端渲染,支持Unicode和真彩色

- 响应式布局,自动适应终端大小

  •  CodeLin TUI架构:
```cangjie
package codelin.ui

import codelin.ui.theme.*
import codelin.ui.component.*

// UI管理器(基于真实代码)
public class UIManager {
    private let renderEngine: RenderEngine
    private let layoutManager: LayoutManager
    private let statusBar: StatusBarComponent

    public init() {
        this.renderEngine = RenderEngine()
        this.layoutManager = LayoutManager()
        this.statusBar = StatusBarComponent()
    }

    // 渲染主界面
    public func renderMainInterface(): Unit {
        // 清屏
        this.renderEngine.clear()

        // 布局管理
        let layout = this.layoutManager.createLayout()

        // 渲染状态栏
        this.statusBar.render(layout.statusBarArea)

        // 渲染主内容区
        this.renderContentArea(layout.contentArea)

        // 刷新屏幕
        this.renderEngine.flush()
    }

    // 渲染SubAgent视图
    public func renderSubAgentView(agents: ArrayList<SubAgentInfo>): Unit {
        let area = this.layoutManager.getSubAgentArea()

        for ((agent, index) in agents.enumerate()) {
            let y = area.y + index
            this.renderEngine.drawText(
                x = area.x,
                y = y,
                text = "[${agent.name}] ${agent.status}"
            )
        }
    }
}
```
  •  终端UI组件:
```cangjie
// 状态栏组件
public class StatusBarComponent {
    public func render(area: Rect): Unit {
        // 显示当前模式
        drawText(area.x, area.y, "Mode: ${CliConfig.agentMode}")

        // 显示缓存命中率
        let cacheStats = ContextEngine.getCacheStatistics()
        drawText(area.x + 20, area.y, "Cache: ${cacheStats.hitRate}%")

        // 显示活动Agent
        drawText(area.x + 40, area.y, "Agents: ${getActiveAgentCount()}")
    }
}
```
  • TUI特性:

实时流式输出显示AI响应进度

Agent可视化并行执行状态展示

交互式输入支持@mention、文件选择

彩色Markdown: 语法高亮和格式化


2.2 多智能体协作系统

2.2.1 SubAgent生态系统:

CodeLin实现18+专业化SubAgent,基于AgentMem记忆平台协作。

2.2.2 并行执行框架(基于真实代码)

基于`src/core/tools/parallel_tool_executor.cj`的真实实现:

```cangjie
package codelin.core.tools

import std.collection.{HashMap, HashSet, ArrayList}
import std.sync.*
import magic.log.LogUtils

/**
 * v2.31: 工具并行执行器(核心功能)
 *
 * 目标:实现工具并行执行,减少60%+工具执行时间
 *
 * 真实代码位置: src/core/tools/parallel_tool_executor.cj
 */
public class ParallelToolExecutor {
    // 无依赖工具列表(可以并行执行)- 配置化
    private var independentTools = HashSet<String>()

    // 工具依赖关系
    private static let toolDependencies = HashMap<String, ArrayList<String>>()

    // 最大并发度(对标 Claude Code)
    private static let MAX_CONCURRENCY: Int64 = 16

    public init() {
        // 从配置读取可并行执行的工具列表
        if (let Some(configuredTools) <- CliSettingManager.setting.parallelTools) {
            for (toolName in configuredTools) {
                this.independentTools.add(toolName)
            }
            LogUtils.debug("[ParallelToolExecutor] Loaded ${configuredTools.size} parallel tools")
        } else {
            // 默认工具列表
            this.initDefaultParallelTools()
        }

        // 初始化默认依赖关系
        if (ParallelToolExecutor.toolDependencies.isEmpty()) {
            this.initDefaultDependencies()
        }
    }

    /**
     * 初始化默认可并行执行的工具列表
     *
     * 这些工具都是无依赖的,可以安全地并行执行:
     * - 文件读取工具:readFile, headFile, batchReadFiles
     * - LSP 查询工具:getFileSymbols, getSymbolsByKind, findSymbolByName
     * - 搜索工具:grepSearch, globSearch
     */
    private func initDefaultParallelTools(): Unit {
        // 文件读取工具
        this.independentTools.add("readFile")
        this.independentTools.add("headFile")
        this.independentTools.add("batchReadFiles")

        // LSP 查询工具
        this.independentTools.add("getFileSymbols")
        this.independentTools.add("getSymbolsByKind")
        this.independentTools.add("findSymbolByName")
        this.independentTools.add("getSymbolLocation")
        this.independentTools.add("batchGetSymbols")

        // 搜索工具
        this.independentTools.add("grepSearch")
        this.independentTools.add("globSearch")
        this.independentTools.add("search")

        // 目录工具
        this.independentTools.add("listDirectory")
    }

    /**
     * 初始化默认的工具依赖关系
     *
     * 规则:
     * - 写/编辑类工具依赖读取工具
     * - 符号悬停依赖符号获取
     * - 编译/构建工具依赖所有写操作
     */
    private func initDefaultDependencies(): Unit {
        let deps = ParallelToolExecutor.toolDependencies

        // 写操作依赖读取
        let writeDeps = ArrayList<String>()
        writeDeps.add("readFile")
        deps["writeFile"] = writeDeps

        // LSP 悬停依赖符号
        let hoverDeps = ArrayList<String>()
        hoverDeps.add("getFileSymbols")
        deps["getSymbolHoverInfo"] = hoverDeps

        // 编译依赖写操作
        let compileDeps = ArrayList<String>()
        compileDeps.add("writeFile")
        compileDeps.add("editFile")
        deps["compileCangjieFile"] = compileDeps
    }

    /**
     * 并行执行工具(核心方法)
     */
    public func executeToolsParallel(
        tools: ArrayList<ToolCall>
    ): ArrayList<ToolResult> {
        // 1. 分组:可并行 vs 串行
        var parallelGroup = ArrayList<ToolCall>()
        var serialGroup = ArrayList<ToolCall>()

        for (tool in tools) {
            if (this.independentTools.contains(tool.name)) {
                parallelGroup.add(tool)
            } else {
                serialGroup.add(tool)
            }
        }

        var results = ArrayList<ToolResult>()

        // 2. 并行执行无依赖工具
        if (parallelGroup.size > 0) {
            let parallelResults = this.executeParallel(parallelGroup)
            results.appendAll(parallelResults)
        }

        // 3. 串行执行有依赖工具
        for (tool in serialGroup) {
            let result = this.executeTool(tool)
            results.add(result)
        }

        return results
    }

    /**
     * 并行执行工具组(简化实现)
     */
    private func executeParallel(
        tools: ArrayList<ToolCall>
    ): ArrayList<ToolResult> {
        // 使用线程池并行执行
        // 实际实现使用 std.concurrent
        var results = ArrayList<ToolResult>()

        // 创建线程池
        let pool = ThreadPool(MAX_CONCURRENCY)

        // 提交任务
        var futures = ArrayList<Future<ToolResult>>()
        for (tool in tools) {
            let future = pool.submit<ToolResult>({ =>
                this.executeTool(tool)
            })
            futures.add(future)
        }

        // 收集结果
        for (future in futures) {
            let result = future.get()
            results.add(result)
        }

        return results
    }
}
```    
  • 性能指标:

并发度: 16个工具同时执行(MAX_CONCURRENCY

性能提升: 60%+ (相比串行执行)

  •  支持工具:

- 文件读取: `readFile`, `headFile`, `batchReadFiles`

- LSP查询: `getFileSymbols`, `getSymbolsByKind`, `batchGetSymbols`

- 搜索: `grepSearch`, `globSearch`, `search`

  • 依赖管理

- 自动分析工具依赖,确保正确执行顺序


2.3 智能上下文引擎

2.3.1 BM25优先级系统

```cangjie
// 5维优先级评分
public class ContextEngine {
    public func selectRelevantFiles(
        query: String,
        maxTokens: UInt32
    ): Array<FileContext> {
        let files = getAllFiles()

        for (file in files) {
            // 1. BM25相关性评分
            let relevanceScore = calculateBM25Score(
                query,
                file.content
            )

            // 2. 优先级评分 (P0-P4)
            let priorityScore = getPriorityScore(file.priority)

            // 3. 时间衰减评分
            let timeScore = calculateTimeDecay(file.lastModified)

            // 4. 使用频率评分
            let frequencyScore = calculateFrequencyScore(file.accessCount)

            // 5. 依赖关系评分
            let dependencyScore = calculateDependencyScore(file)

            // 综合评分
            file.finalScore = 0.35 * relevanceScore +
                             0.25 * priorityScore +
                             0.15 * timeScore +
                             0.15 * frequencyScore +
                             0.10 * dependencyScore
        }

        // Token预算约束下的最优选择
        return selectTopKWithTokenBudget(files, maxTokens)
    }
}
```

2.3.2 智能缓存管理

```cangjie
// LRU + 优先级混合缓存淘汰策略
public class ContextCache {
    private maxCacheSize: UInt32
    private cache: LinkedHashMap<String, FileContext>

    public func evictIfNeeded() {
        if (cache.size <= maxCacheSize) {
            return
        }

        // 淘汰策略:
        // 1. 优先淘汰P4文件
        // 2. 同优先级淘汰LRU
        // 3. 保护Pin文件

        let evicted = cache.entries
            .filter { !it.value.isPinned }
            .sortedWith(compareBy<FileContext> {
                it.priority
            }.thenBy {
                it.lastAccessTime
            })
            .take(cache.size - maxCacheSize)

        for (entry in evicted) {
            // 写入AgentMem长期记忆
            writeMemory(
                type: MemoryType.ProjectPattern,
                content: entry.value.content,
                metadata: {"evicted": "true"}
            )
            cache.remove(entry.key)
        }
    }
}
```
  • 性能指标:

- 缓存命中率: 70%+

- 上下文精准度: 85%+

- Token使用效率: 提升50-70%

- 响应速度: 5维优先级系统优化

 2.4 仓颉语言专精能力

 2.4.1 CangjieFixer自动修复

```cangjie
// 编译驱动错误修复
public class CangjieFixer {
    // 错误模式库 (从AgentMem学习)
    private errorPatterns: Array<ErrorPattern>

    public func fixCompilationErrors(
        errors: Array<CompilationError>
    ): Array<CodeFix> {
        var fixes = Array<CodeFix>()

        for (error in errors) {
            // 1. 从记忆中搜索类似错误
            let patterns = searchMemory(
                type: MemoryType.ErrorFix,
                query: error.message
            )

            // 2. 匹配错误模式
            for (pattern in patterns) {
                if (isMatch(error, pattern)) {
                    // 3. 应用修复规则
                    let fix = applyFixPattern(error, pattern)
                    fixes.append(fix)

                    // 4. 验证修复
                    if (verifyFix(fix)) {
                        // 5. 记录成功的修复
                        writeMemory(
                            type: MemoryType.ErrorFix,
                            content: "${error.message} -> ${fix.description}",
                            metadata: {"success": "true"}
                        )
                    }
                }
            }
        }

        return fixes
    }
}
  • 性能指标:

- 代码正确率: 95%+

- 错误修复率: 85%+

- 修复时间: 减少50%+

2.4.2 LSP深度集成

```cangjie
// LSP工具集
public class LSPToolset {
    // 符号查询
    public func querySymbol(
        symbolName: String,
        position: Position
    ): SymbolInfo {
        // 从AgentMem读取符号缓存
        let cached = searchMemory(
            type: MemoryType.ProjectPattern,
            query: "symbol: ${symbolName}"
        )

        if (cached.isNotEmpty()) {
            return cached.first()
        }

        // LSP请求
        let result = lspClient.requestSymbol(symbolName, position)

        // 缓存结果
        writeMemory(
            type: MemoryType.ProjectPattern,
            content: result.toJson(),
            metadata: {"symbol": symbolName}
        )

        return result
    }

    // 批量符号查询 (并行)
    public func querySymbolsBatch(
        symbols: Array<SymbolQuery>
    ): Array<SymbolInfo> {
        return symbols.mapParallel { symbol =>
            querySymbol(symbol.name, symbol.position)
        }
    }
}
```

2.5 多模型成本优化

2.5.1 模型调度策略

```cangjie
// 成本优化的模型调度器
public class ModelScheduler {
    // 模型配置
    private models = Map<String, ModelConfig>(
        "gpt-4" => ModelConfig(
            costPer1kTokens: 0.03,
            maxTokens: 8192,
            capabilities: ["planning", "editing", "review"]
        ),
        "glm-4.6" => ModelConfig(
            costPer1kTokens: 0.015,
            maxTokens: 200000,
            capabilities: ["main_agent"]
        ),
        "glm-4.5-air" => ModelConfig(
            costPer1kTokens: 0.005,
            maxTokens: 128000,
            capabilities: ["subagent"]
        ),
        "glm-4.5-flash" => ModelConfig(
            costPer1kTokens: 0.0,
            maxTokens: 128000,
            capabilities: ["tool_execution"]
        )
    )

    public func selectModel(
        task: Task,
        context: Context
    ): String {
        // 基于任务类型选择最优模型
        match (task.type) {
            case "main_planning" => "glm-4.6"
            case "subagent_task" => "glm-4.5-air"
            case "tool_execution" => "glm-4.5-flash"
            case "complex_editing" => "gpt-4"
        }
    }

    // 成本追踪
    public func calculateCost(
        model: String,
        inputTokens: UInt32,
        outputTokens: UInt32
    ): Float64 {
        let config = models[model]!
        return (inputTokens / 1000.0) * config.costPer1kTokens +
               (outputTokens / 1000.0) * config.costPer1kTokens * 2
    }
}
```
  • 成本优化效果:

- 推理成本降低: 60-80%

- Agent: GLM-4.6 (200K上下文)

- SubAgent: GLM-4.5-Air (快速响应)

- 工具执行: GLM-4.5-Flash (免费)

2.6 华为云产品赋能技术创新

华为云MaaS赋能:

多模型调度: MaaS提供统一模型服务接口,CodeLin实现智能模型选择,支持Deepseek、盘古等国产大模型优先

成本优化: 通过MaaS的竞价实例和预留实例,降低推理成本60%+

高可用保障: MaaS多AZ部署,保障99.9%可用性

混合架构: 本地模型+云端模型弹性组合,应对不同场景需求

 CodeLin通过深度集成华为云MaaS,实现了企业级的模型调度和成本优化能力,既保证了系统的稳定性,又显著降低了推理成本,为仓颉开发者提供了高效可靠的AI编程服务。

3. 技术指标与竞争优势

3.1 核心技术指标

|指标|数值|说明|

| --------------| -----------| ----------------------|

|代码规模|172,707|228个核心源文件|

|SubAgent数量|10+|覆盖开发全流程|

|工具集数量|15+|文件、LSPShell|

|缓存命中率|70%+|上下文引擎优化|

|代码正确率|95%+|仓颉代码生成|

|错误修复率|85%+|CangjieFixer自动修复|

|性能提升|60%+|并行执行框架|

|成本降低|60-80%|多模型调度优化|

 3.2 与竞品对比

|产品|仓颉支持|多智能体|记忆平台|本地部署||

| -------------| ----------| ----------| ----------| ----------| --|

|CodeLin| 原生|10+|AgentMem|||

|Copilot||3+||||

|Cursor||8+|基础|||

|Augment||5+|高级|||

|Claude Code||有限|基础|||

3.3 竞争优势总结

          技术优势:

(1)全球唯一仓颉助手填补生态空白

(2)AgentMem记忆平台长期学习和知识积累

(3)10+SubAgent协作: 行业最多专业化Agent

(4)70%+缓存命中率业界领先的上下文引擎

(5)60%+性能提升并行执行框架

 生态优势:

1. 华为深度集成: HarmonyOS、华为云、仓颉LSP

2. 国产模型优先支持华为MaaSGLM、盘古等

3. 本地部署数据安全可控

4. 开源社区技术影响力

---

项目链接:

- AgentMem: https://github.com/louloulin/AgentMem 基于rust实现的记忆平台

- Ratatui: https://gitcode.com/Cangjie-SIG/ratatui 基于cangjie+rust实现 tui

- Magic: https://gitcode.com/louloulin/magic 基于cangjiemagic深度改造支持更多的特性

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。