万字详解:混元大模型+GraphRAG+知识图谱实现永久记忆的专属AI伴侣

开源机器人库orocos KDL 学习笔记(二):Geometric 开源机器人库orocos KDL 学习笔记二:Geometric 如果按照上一篇搭建的VS2015 orocos KDL环境,会出现3个例程:geometry, chainiksolverpos_lma_demo, trajectory_example. 这一篇看一下geometry的例程。 在frames.hpp中,定义了这些class: - class Vector - class R 阅读详情

从混元大模型的连接到知识图谱的搭建,全部自己实现,希望能给大家提供一个思路。
本文将从提出想法、设计架构、搭建系统、完成业务逻辑等方面去完整叙述整个实现过程。

背景

不知道各位新时代农民工的工友们有没有看过一个电视剧《魔幻手机》,剧中的傻妞只能设置几个性格选项,但现在时代不同了,不需要到2060年,虽然现在还不能将傻妞实体化,但虚拟化还是可以的。

大白话逻辑说明

① 用户发起聊天消息。

② 系统将聊天消息交给混元大模型进行结构化解析。比如用户说“我喜欢喝奶茶”,解析后会将主语、谓语、宾语提取出来,比如“我”、

③ 系统拿到结构化数据之后按照格式解析并构建AI伴侣的“记忆”,并将记忆存储到图数据库中。

④ AI回复用户时,将刚刚解析好的用户消息去图数据库中获取记忆,并通过记忆结合当前用户的聊天消息进行回复。

⑤ AI回复完之后,系统将AI的回复也进行结构化解析,并将解析后的结果保存为伴侣的“记忆”,防止伴侣一会说自己喜欢这个,一会喜欢那个。

⑥ 进入下一次循环。

如果需要更加详细执行逻辑,可以参考下图:

时序图

什么是GraphRAG

关于RAG相信各位工友们在各种平台都见过讲它的,但都是感觉很高深、很理论、很虚的东西,我这里就不讲那些虚的了,用大白话给各位工友描述一下。

RAG就是处在数据和大模型之间的一个中间商,通过一些算法从文档中检索相关信息,再将这些信息作为上下文输入给大模型生成回答。

而GraphRAG就是将这些文档,换成了知识图谱,让AI形成能够实时记忆、检索记忆的能力,比如用户问张三和李四为什么打起来了,通过知识图谱就可以去链路他们的人际关系、发生过的事件等等。

技术选型

虽然用Python可以快速的让系统成型,但为了可持续维护这个项目,所以还是使用了SpringBoot搭建了一个工程。

图数据库:Neo4j 5.26.8-community

大模型:混元大模型 hunyuan-turbos-20250716

主体框架:SpringBoot 2.3.x

接口测试:Swagger+Knife4j

产品设计

初始化伴侣

填写、选择AI伴侣的名字、性别、星座、性格等进行初始化。

星座和性格都需要选择,并且这两个都会对当前伴侣回答内容造成影响。

由于现在伴侣的设定是只能存在一个伴侣,所以如果在后续重新初始化伴侣,则之前的所有记忆和信息都将清空。

问题解析

从用户的问题中提取用户想要问的内容,比如可能的人名、事件等去图数据库中进行查询相关的记忆。

通过这些记忆去生成一个回答,当然也可能没有相关记忆,没有相关记忆也要进行回答。

记忆更新

在聊天过程中,将伴侣自己的话以及用户的话要提取关键信息,比如人名、事件等进行记忆,存储到图数据库中。

养成

根据每天交流的内容,每次交流的内容会有一些情绪上的变化值,会对伴侣的情绪值进行影响。

好感度降到60以下,伴侣就不再热情了;高感度越高,越热情。

手把手实现

主体架构

使用Docker部署Neo4j

编写docker-compose.yml文件

version: "3.8"
services:
  neo4j:
    image: neo4j:5.26.8-community
    container_name: neo4j
    restart: unless-stopped
    ports:
      - "7474:7474"   # HTTP (Browser)
      - "7687:7687"   # Bolt
    environment:
      NEO4J_AUTH: "neo4j/Root123.com"
      # 本地测试建议较小内存
      NEO4J_dbms_memory_pagecache_size: "512M"
      NEO4J_dbms_memory_heap_initial__size: "512M"
      NEO4J_dbms_memory_heap_max__size: "1G"
    volumes:
      - ./data:/data
      - ./logs:/logs
      - ./import:/var/lib/neo4j/import
      - ./plugins:/plugins

创建映射目录

创建需要映射到宿主机的目录,并且与刚刚创建的docker-compose文件的目录结构。

img

执行docker-compose命令

在该目录下执行以下命令,运行docker-compose文件

docker-compose up -d

img等待执行完毕,执行完成并成功后会显示:

Container neo4j        Started

访问Neo4j

浏览器访问IP地址:7474进入界面后,输入刚刚在docker-compose中配置的密码即可进入Neo4j自带的可视化界面。

img

在SpringBoot中使用Neo4j

引入依赖
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-neo4j</artifactId>
</dependency>
创建图节点
@EqualsAndHashCode(callSuper = true)
@NodeEntity
@Data
public class Partner extends BaseNode {
    // 省略属性
}
数据访问接口
@Repository
public interface PartnerRepository extends Neo4jRepository<Partner, Long> {
    /**
     * 删除所有伴侣记录
     * 使用Cypher查询直接删除所有Partner节点及其关系
     */
    @Query("MATCH (p:Partner) DETACH DELETE p")
    void deleteAllPartners();
}

混元大模型对话

以下搭建都以我当前的环境:SpringBoot环境为例。

引入依赖

<dependency>
  <groupId>com.tencentcloudapi</groupId>
  <artifactId>tencentcloud-sdk-java</artifactId>
  <version>3.1.1337</version>
</dependency>

创建接口

创建接口是为了如果后续切换大模型或其他操作更加灵活。

public interface ChatBotClient {
    /**
     * 聊天
     * @param question 当前问题
     * @param msg 历史聊天记录,不包含当前最新问题,按照时间早-晚的顺序
     * @return 回复
     */
    String chat(String question, List<ChatMessage> msg);

    /**
     * 获取用户角色标识
     * @return 如果有则返回,没有则返回null
     */
    default String getRoleUser(){
        return null;
    }

    /**
     * 获取助手角色标识
     * @return 如果有则返回,没有则返回null
     */
    default String getRoleAssistant(){
        return null;
    }

    /**
     * 获取系统角色标识
     * @return 如果有则返回,没有则返回null
     */
    default String getRoleSystem(){
        return null;
    }
}

创建实现

@Slf4j
public class TencentClient implements ChatBotClient {

    @Resource
    private ChatBotProperties chatBotProperties;

    private Credential cred;

    @Override
    public String chat(String question, List<ChatMessage> msg) {
        try {
            if (cred == null) {
                cred = new Credential(chatBotProperties.getApiKey(), chatBotProperties.getSecretKey());
            }
            HunyuanClient client = new HunyuanClient(cred, "");
            // 实例化一个请求对象,每个接口都会对应一个request对象
            ChatCompletionsRequest req = this.buildRequest(question, msg);
            // 返回的resp是一个ChatCompletionsResponse的实例,与请求对象对应
            ChatCompletionsResponse resp = client.ChatCompletions(req);
            return resp.getChoices()[0].getMessage().getContent();
        } catch (TencentCloudSDKException e) {
            log.error("腾讯混元大模型异常", e);
        }
        return "";
    }

    @Override
    public String getRoleUser() {
        return Role.USER.getValue();
    }

    @Override
    public String getRoleAssistant() {
        return Role.ASSISTANT.getValue();
    }

    @Override
    public String getRoleSystem() {
        return Role.SYSTEM.getValue();
    }

    private ChatCompletionsRequest buildRequest(String question, List<ChatMessage> msg) {
        ChatCompletionsRequest req = new ChatCompletionsRequest();
        req.setMessages(this.buildMessages(question, msg).toArray(new Message[0]));
        req.setModel(chatBotProperties.getModel());
        req.setStream(false);
        return req;
    }

    /**
     * 构建消息列表
     * @param question 新问题
     * @param msg 消息列表
     * @return 消息列表
     */
    private List<Message> buildMessages(String question, List<ChatMessage> msg) {
        List<Message> messageList = new ArrayList<>();
        for (ChatMessage item : msg) {
            Message message = new Message();
            message.setRole(item.getRole());
            message.setContent(item.getContent());
            messageList.add(message);
        }
        Message message = new Message();
        message.setRole(getRoleUser());
        message.setContent(question);
        messageList.add(message);
        return messageList;
    }
}

初始化伴侣

@Transactional
public Partner createPartner(String name, String gender, String personality, String constellation, int age) {
    // 删除所有现有的伴侣和相关记忆
    memoryService.clearAllMemories();
    
    // 创建新伴侣
    Partner partner = new Partner();
    partner.setName(name);
    partner.setGender(gender);
    partner.setPersonality(personality);
    partner.setConstellation(constellation);
    partner.setAge(age);
    partner.setAffection(100); // 初始好感度
    partner.setEmotion(50); // 初始情绪值

    return partnerRepository.save(partner);
}

测试一下是否正常初始化

img

初始化后查看AI伴侣的状态,一切正常。

img

问一下它还记不记得自己叫啥:

img

提取发言中的关键信息

什么算关键信息?人物、物体、事件、动作、地点等都数据关键信息。“我喜欢喝奶茶”就可以拆分成“我”“喜欢”“喝奶茶”,而“我喜欢XX奶茶”又可以拆分成“我”“喜欢”“奶茶”,表示的场景不同,因为可能有人喜欢看、有人习惯喝。

刚开始我使用NLP模型去分析用户的问题,发现很难做到提取信息的准确率,就比如这个“喝奶茶”和“奶茶”的情景就无法分辨。

于是我又尝试使用大模型去分析一句话,输出这些关键词,并且让大模型将分析到的内容格式化成JSON格式数据,系统拿到数据后再解析。所以最重要的是prompt如何构建,这里给出我的示例:

StringBuilder prompt = new StringBuilder();

prompt.append("任务:从用户问题中识别和提取结构化的记忆信息,包括实体、事件和它们之间的关系\n\n");

prompt.append("规则:\n");
prompt.append("1. 识别所有涉及的实体(人、物、地点等),并标注类型\n");
prompt.append("2. 识别发生的事件或行为\n");
prompt.append("3. 识别实体与事件之间的关系,使用主谓宾结构表示\n");
prompt.append("4. 注意代词的解析,如'我'指代说话者,'你'指代听话者\n");
prompt.append("5. 对于疑问句,识别用户想要查询的信息类型\n\n");

prompt.append("示例:\n");
prompt.append("用户问题:\"我喜欢喝奶茶\"\n");
prompt.append("期望输出:\n");
prompt.append("{\n");
prompt.append("  \"entities\": [\n");
prompt.append("    {\"name\": \"我\", \"type\": \"person\"},\n");
prompt.append("    {\"name\": \"奶茶\", \"type\": \"drink\"}\n");
prompt.append("  ],\n");
prompt.append("  \"events\": [],\n");
prompt.append("  \"relations\": [\n");
prompt.append("    {\"subject\": \"我\", \"relation\": \"喜欢\", \"object\": \"奶茶\"}\n");
prompt.append("  ]\n");
prompt.append("}\n\n");

prompt.append("用户问题:\"我喜欢喝啥\"\n");
prompt.append("期望输出:\n");
prompt.append("{\n");
prompt.append("  \"entities\": [\n");
prompt.append("    {\"name\": \"我\", \"type\": \"person\"}\n");
prompt.append("  ],\n");
prompt.append("  \"events\": [],\n");
prompt.append("  \"relations\": [\n");
prompt.append("    {\"subject\": \"我\", \"relation\": \"喜欢\", \"object\": \"?\"}\n");
prompt.append("  ]\n");
prompt.append("}\n\n");

prompt.append("用户问题:\"").append(query).append("\"\n\n");

prompt.append("请按照上述JSON格式输出结果:\n");
prompt.append("只输出JSON结果,不要添加其他说明。");

记忆能力

这是本次AI伴侣整个应用的核心,想必各位工友有想过,自己让大模型进行角色扮演,也可以实现AI伴侣的能力。但可能忽略了一点,就是记忆,你在跟大模型聊天过程中,可能聊着聊着它就忘记自己是谁了,它只会根据最近的聊天记录去进行当前问题的答复,但比较久远的内容会被抛弃掉。

而这就是本次AI伴侣要解决的问题,让AI大模型拥有自己的大脑,永久记忆,并且是像人类一样实时更新记忆。

记忆功能在两个时间点起作用,一个是用户发起对话时,将用户的话转成记忆;另一个是AI伴侣回复完之后将自己回复的内容再次将关键信息存储到图数据库中形成记忆。

记忆实体如下所示:

public class MemoryStructure {
    private List<Entity> entities = new ArrayList<>();
    private List<Event> events = new ArrayList<>();
    private List<Relation> relations = new ArrayList<>();
}

测试一下记忆功能是否正常,向AI伴侣说我喜欢奶茶后查看Neo4j的图结构,可以看到已经将“我”和“奶茶”进行了关联,并且关联关系是“喜欢”。

img

Neo4j关联关系

在与AI伴侣进行了一番友好的沟通后,我的“刘亦菲”的记忆也越来越多了。

记忆链路

后面我又说被领导批评了,AI伴侣还记得我喜欢奶茶,并且以此安慰我,很棒,也是拥有了一个知心女朋友了。

img

对话能力

除了让AI伴侣记住我的话,还需要让AI伴侣能够像“人”一样跟我对话。既然是人还需要有情绪、有情感、有性格、有特点。

要做到这些特征,至少需要以下内容:

① 设定身份

② 设定情感状态

③ 设定性格

这就借助于先前提到的RAG能力了,让AI伴侣根据知识图谱中现有内容构建prompt让大模型理解当前的语境。

StringBuilder prompt = new StringBuilder();

// 角色设定
prompt.append("角色设定:\n");
prompt.append("你是").append(partner.getName())
      .append(",性别是").append(partner.getGender())
      .append(",星座是").append(partner.getConstellation())
      .append(",性格是").append(partner.getPersonality())
      .append("。\n\n");

// 情感状态
prompt.append("当前状态:\n");
prompt.append("你的好感度是").append(partner.getAffection())
      .append(",当前情绪值是").append(partner.getEmotion())
      .append("。\n")
      .append(emotionService.checkPartnerStatus(partner))
      .append("\n\n");

// 性格特征指导
prompt.append("性格特征指导:\n");
prompt.append(Constellation.getByValue(partner.getConstellation()));

// 星座
prompt.append(Personality.getByValue(partner.getPersonality()));
prompt.append("\n");

AI伴侣的性格由初始化时设定,我将性格和星座这些可能影响对话内容的属性封装成枚举数据,并且不同的星座回答内容方式也会不同,下面是我的枚举:

AQUARIUS("水瓶座","作为水瓶座,你应该表现得独立、创新。"),
PISCES("双鱼座","作为双鱼座,你应该表现得浪漫、富有想象力。"),
ARIES("白羊座", "作为白羊座,你应该表现得积极主动、充满活力"),
TAURUS("金牛座", "作为金牛座,你应该表现得稳重、务实。"),
GEMINI("双子座", "作为双子座,你应该表现得机智、善于交流。"),
CANCER("巨蟹座", "作为巨蟹座,你应该表现得温柔、体贴。"),
LEO("狮子座", "作为狮子座,你应该表现得自信、热情。"),
VIRGO("处女座","作为处女座,你应该表现得细致、有条理。"),
LIBRA("天秤座", "作为天秤座,你应该表现得优雅、追求平衡。"),
SCORPIO("天蝎座", "作为天蝎座,你应该表现得神秘、深情。"),
SAGITTARIUS("射手座", "作为射手座,你应该表现得自由、乐观。"),
CAPRICORN("摩羯座", "作为摩羯座,你应该表现得踏实、有责任感。");

性格也一样,当构建prompt时根据当前AI伴侣的星座、性格取对应的描述,给大模型进行指导答复,这样你在与AI伴侣聊天过程中就不会觉得它一会一个模样了。

introverted("内向", "你性格外向,喜欢与人交流,表达直接。"),
extroverted("外向", "你性格内向,更倾向于深思熟虑后再表达。"),
optimistic("乐观", "你性格乐观,总是看到事物积极的一面。"),
pessimistic("悲观", "你性格比较谨慎,会考虑可能的风险。");

回忆能力

除了要能记住用户的话之外,还得能想起来之前说的话。要做到能够回忆,至少需要两个条件:

① 要回忆什么

② 怎么回忆

要回忆什么

在前文中的记忆能力中,有说到要记忆内容时需要“提取发言中的关键信息”;回忆的时候也是如此,比如用户说“你还记得我喜欢什么吗”,提取关键信息时候就要将“我”“喜欢”“?”提取出来,通过知识图谱很轻易的就可以拿到上文聊过的“奶茶”。

看一下我的“刘亦菲”的回答:

img

怎么回忆

知道了要回忆什么,也需要一些技术手段去取记忆。取记忆的过程也是查库的过程,把人类的记忆比作数据库,人类回忆的时候不也是在查库嘛。

既然要查库,就要构建查库语句,Neo4j图数据库与关系型数据不太一样,无法支持SQL语句,而是使用Cypher查询语句。

还是根据之前进行过的“提取发言中的关键信息”来去构建查询语句。

最重要的是主语,至少需要知道要查哪个对象的相关信息,如果当前用户的发言是问句,那只需要查与主体存在关系的对象、事件即可。

@Transactional(readOnly = true)
public String generateCypherQueryFromStructure(MemoryStructure memoryStructure) {
    StringBuilder cypherBuilder = new StringBuilder();
    
    // 如果有关系信息,查询相关关系
    if (!memoryStructure.getRelations().isEmpty()) {
        cypherBuilder.append("MATCH (e1)-[r]->(e2) WHERE ");
        for (int i = 0; i < memoryStructure.getRelations().size(); i++) {
            if (i > 0) cypherBuilder.append(" OR ");
            MemoryStructure.Relation relation = memoryStructure.getRelations().get(i);
            // 如果关系中的主体是"我",则查询与"我"相关的所有关系
            if ("我".equals(relation.getSubject())) {
                cypherBuilder.append("(e1.name = '我' AND r.type = '").append(relation.getRelation()).append("')");
            } 
            // 如果是查询关系(如"?"),则只匹配关系类型
            else if ("?".equals(relation.getObject())) {
                cypherBuilder.append("(e1.name = '").append(relation.getSubject()).append("' AND r.type = '")
                    .append(relation.getRelation()).append("')");
            } else {
                cypherBuilder.append("(e1.name = '").append(relation.getSubject()).append("' AND r.type = '")
                    .append(relation.getRelation()).append("' AND e2.name = '").append(relation.getObject()).append("')");
            }
        }
        cypherBuilder.append(" RETURN e1.name AS subject, r.type AS relation, e2.name AS object");
    } 
    // 如果有实体信息,查询相关实体
    else if (!memoryStructure.getEntities().isEmpty()) {
        cypherBuilder.append("MATCH (e1)-[r]->(e2) WHERE ");
        for (int i = 0; i < memoryStructure.getEntities().size(); i++) {
            if (i > 0) cypherBuilder.append(" OR ");
            MemoryStructure.Entity entity = memoryStructure.getEntities().get(i);
            // 如果实体是"我",则查询与"我"相关的所有关系
            if ("我".equals(entity.getName())) {
                cypherBuilder.append("e1.name = '我'");
            } else {
                cypherBuilder.append("e1.name = '").append(entity.getName()).append("'");
            }
        }
        cypherBuilder.append(" RETURN e1.name AS subject, r.type AS relation, e2.name AS object");
    } 
    // 默认查询最近的实体关系
    else {
        cypherBuilder.append("MATCH (e1)-[r]->(e2) RETURN e1.name AS subject, r.type AS relation, e2.name AS object ORDER BY r.id DESC LIMIT 5");
    }

    return cypherBuilder.toString();
}

总结与展望

本文从想法的诞生,到将想法构建成产品,再到将产品付诸于行动实现成果的一整个流程,根据本文,相信不怎么懂技术的小白也可以开发属于自己的“刘亦菲”~

后面我会将我的“刘亦菲”进行开源,并设置客户端,目前考虑的是弄一个APP,有想法的工友们可以一起弄。

目前有一些不足之处,现在一个系统只支持一个伴侣,后面考虑重新设计架构能够让不同用户具备不同的伴侣,相互不影响。后面准备开发一个APP,作为客户端,能够让AI伴侣主动给用户发消息,不知道各位工友喜不喜欢一个粘人的AI伴侣。

Autosar PNC网络管理配置-UserData的使用 之前配置的网络管理报文中的data都由ComM管理,后面客户新增了需求,最后两个byte需要发送,本文记录一下相关配置的修改能配置生成的,尽量不手码,毕竟手写一堆bug~ 阅读详情

相关推荐

从零到一:Firefly-RK3399上的Ubuntu镜像构建与GPU加速实战

本文详细介绍了在Firefly-RK3399开发板上从零构建深度优化的Ubuntu系统镜像的全过程,包括交叉编译环境配置、内核定制、GPU加速环境部署(Mesa Panfrost驱动、OpenCL/Vulkan支持)以及深度学习推理优化(TFLite + LinuxNN)。通过实战案例展示了如何充分发挥Mali-T860 GPU的硬件潜力,提升边缘AI应用的性能和能效。

pz8901234的博客 1019

Springboot RAG 一站式混合搜索方案

最近在做一个政策类查询的RAG方案,做成一站式可以快速使用的方案。数据库是PG, PGVector作为向量数据库,采用Hybrid Search方法来同时匹配向量和其他字段。项目采用Springboot 作为后端;大模型相关的,使用到的API有Chatgpt, moonshot, qwen,讯飞星火等不同厂家的方案。该方案从产品方面来考虑,可扩展性,可便利性等没有太多考虑;从单个项目来说,算是一个可用的方案。

rogerlzp的博客 2246

abb机器人指令手册_ABB机器人配置圆形输送链跟踪

更多内容请点击上方ABB机器人实战技巧关注也可点击公众号下方往期经典浏览更多内容转载请先后台留言,大家一起支持原创,推动机器人使用和发展本公众号对各类ABB机器人应用,仿真,毕业设计提供技术支持,详细后台留言本公众号诚挚希望与各机器人培训机构,机器人使用单元合作,提供技术支持,详细后台留言1. 通常的机器人输送链跟踪,均为直线输送链跟踪,例如下图2. 有些情况,输送链为圆形,例如...

weixin_39849894的博客 2042

GraphRAG:基于知识图谱+大模型技术构建的AI知识库系统

AI知识库系统是一款基于大语言模型和RAG技术的知识库管理系统,适用于智能客服、企业内部知识库、学术研究与教育等场景。它支持文档直传、自动文本拆分与向量化,结合RAG减少模型“幻觉”,提供精准智能问答。

DEVELOPERAA的博客 1075

Wiley:International Journal for Numerical Methods in Biomedical Engineering投稿流程

中间过程省略,这个出版社很人性化,投稿的web UI也很好看。上传word之后,一步步跟着走就行,不用填太多东西。不要最后在最后检查阶段,重新上传word文件,这样会导致,之前针对word的操作全部改变。

Everyday try to become better -Kobe Bryant 2542

稳压电源的隐形战场:动态特性如何影响你的嵌入式系统稳定性

本文深入探讨了稳压电源动态特性对嵌入式系统稳定性的关键影响,分析了HT7533和AMS1117等稳压芯片在输入阶跃响应和负载瞬态响应方面的性能差异。通过实测案例展示了不同场景下的动态特性表现,并提供了针对工业控制、IoT设备和射频系统的选型指南与优化策略,帮助工程师解决电源相关的隐蔽故障。

weixin_29204205的博客 609

SpringBoot入门实战:SpringBoot整合GraphQL

GraphQL是一种新的API查询语言,它可以让客户端灵活地请求服务器需要的数据,而不是传统的RESTful API,客户端需要预先知道需要请求的数据结构。SpringBoot是一个用于构建Spring应用程序的框架,它可以简化Spring应用程序的开发,并提供了许多内置的功能,如数据访问、缓存、消息队列等。GraphQL的查询解析器用于解析查询,它可以是一个简单的函数,也可以是一个复杂的算法。GraphQL的查询解析器用于解析查询,它可以是一个简单的函数,也可以是一个复杂的算法。

x1ao_fe1的博客 1151

YOLOv8【第十一章:视频追踪与流处理篇·第16节】一文搞懂,DeepStream 部署入门:NVIDIA 视频分析 SDK 与 YOLOv8 结合!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 838

基于知识图谱(neo4j)和大语言模型(LLM)的图检索增强(GraphRAG)的旅游智能推荐系统(vue+springboot+flask+AI算法)

基于知识图谱(Neo4j)和大语言模型的智能旅游推荐系统。系统采用前后端分离架构,前端使用Vue3+TypeScript+Element Plus,后端采用SpringBoot3+MySQL8,算法端使用Flask+PyTorch+Neo4j+Qwen/DeepSeek等AI技术。主要功能包括用户管理、景点浏览、个性化推荐(协同过滤/内容推荐)、AI对话式推荐、图检索增强(GraphRAG)等,并提供管理后台进行数据统计和知识图谱可视化。项目完整源码和配套文档可通过百度网盘获取。

2301_77366341的博客 735

VS2022编译xlnt库

xlnt是一个用于读写Excel文件的C++库,本文介绍如何用源代码编译静态或动态xlnt库

QQVQQ的博客 7287

路径规划 | 图解Informed RRT*算法(附ROS C++/Python/Matlab仿真)

Informed RRT*算法针对RRT*算法进行了采样优化,用椭圆采样代替全局均匀采样,避免了RRT*算法搜索树上产生过多冗余分支的缺陷。本文图解Informed RRT*原理,并提供ROS C++/Python/Matlab三种实现加深理解

FRIGIDWINTER的博客 7482

GraphQL+SpringBoot入门指南

定义接口返回值类型,一般命名风格:入参为input结尾,返回值payload结尾age: Int,# 定义查询接口Schema这样在其他文件就可以使用extend关键字来继续使用Query和Mutation了,否则schema是不允许定义多个Query和Mutation的,解耦的效果就达不到了# 查询接口# eg:# 增删改接口# eg:# 在另外一个文件就可以这样写:查询接口@Slf4j@Component@Override} else {.build();",

JAVYthon的博客 1566

【WRF工具】WRF Domain Wizard第一期:软件下载及安装

【WRF工具介绍】WRF Domain Wizard-确定模拟区域

WW、forever的博客 2917

3步构建你的专属AI学习伴侣:从零到精通DeepTutor部署指南

想象一下,一个能理解你学习节奏、随时提供个性化辅导、还能在离线环境中保护你数据隐私的AI学习助手。DeepTutor正是这样一个基于Agent原生架构的个性化学习平台,它通过集成聊天、研究、可视化、知识库管理等多种能力,为你打造全方位的AI学习体验。本文将带你从零开始,探索如何快速部署并深度掌握这个强大的学习伴侣。 ## 场景一:在本地环境中激活你的AI学习伴侣 ### 环境准备:打造专属学习

gitblog_00209的博客 1010

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

维基百科向量搜索;简单易用的GraphRAG实现;友好的人工智能助手;AI的音乐多模态

Fish是一个基于变换器(Transformer)的混合多模态模型,专注于音乐信息检索领域,能够生成歌曲的和弦、节拍、歌词、旋律和谱表。GGUF 格式的量化支持主要适用于变换器和 DiT 模型(如 flux),相比传统的 UNET 模型(conv2d),量化带来的影响较小,使得在低端 GPU 上运行低位数的权重变量量化成为可能。该项目是一个AI驱动的多模态音乐项目,旨在为任何歌曲生成对应的信息,包括和弦、节奏、歌词、旋律等。ComfyUI-GGUF支持GGUF格式的模型量化,优化低端GPU上的运行效率。

haleycat的博客 1805

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

DeepTutor:构建你的专属AI原生学习伴侣的完整指南

**核心模块**: - 智能代理系统:[deeptutor/agents/](https://link.gitcode.com/i/dc27df4bb3c6025f0a4ed856e506762f) - 核心架构:[deeptutor/core/](https://link.gitcode.com/i/95f118deb9b276f23787eb20a7906d11) - 服务层:[deeptut

gitblog_01048的博客 472

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

3分钟掌握DeepTutor:打造你的专属AI学习伴侣完整指南

你是否曾幻想过拥有一个能真正理解你学习节奏的智能导师?当你在深夜钻研复杂概念时,是否渴望有个随时待命的专家伙伴?DeepTutor正是为这样的需求而生——一个开源的Agent-Native个性化学习平台,它不只是工具,而是真正懂你的学习伙伴。 ## 传统学习工具的瓶颈与DeepTutor的突破 传统学习工具往往停留在“问答机器”层面,缺乏对学习者长期需求的深度理解。你可能会遇到这些困扰: 1

gitblog_00585的博客 951

从零部署DeepTutor:让AI学习伴侣真正懂你

你收藏夹里那批"必学资料",是不是已经吃灰半年了?想系统学点东西,却被几十个PDF和课程截图堵在起点,完全不知道从哪一篇开始。这个痛点的解法叫DeepTutor——一个基于Agent原生架构的开源个性化AI学习平台,把智能对话、深度研究、可视化演示、知识库管理整合成一套连贯的学习工作流,既能部署在本地离线运行、保护你的数据隐私,又能按你的节奏持续推进学习计划。下面这份DeepTutor部署教程,就

gitblog_00171的博客 479

如何用DeepTutor打造个性化AI学习伴侣:5个实战场景与3个高级技巧

你是否曾想过拥有一个真正理解你学习节奏的AI导师?一个能够记住你的知识盲点、根据你的进度调整教学内容,还能陪你从入门到精通的智能伙伴?DeepTutor正是这样一个革命性的开源项目,它重新定义了AI辅助学习的边界,让个性化教育从概念变为现实。 不同于传统的聊天机器人或简单问答系统,DeepTutor构建了一个完整的学习生态系统。它将智能对话、知识管理、协同创作、可视化学习等模块有机融合,形成了一

gitblog_00614的博客 746

构建有记忆的硅基大脑:AI Agent 记忆方案的理论溯源与工程实践

未来的开发者,将从缝补外部碎片的繁琐工程中解放出来,把真正的精力聚焦于如何塑造 AI 的认知对齐与心智成长。这才是赋予 Agent 真正“灵魂”的终极之路。

瓦罗兰特顶级C位的博客 743

DeepTutor:当AI成为你的终身学习伴侣,教育会发生什么改变?

想象一下,你正在准备一场重要的考试,面对复杂的微积分问题,传统的教科书和视频教程让你感到困惑。或者,作为一名教师,你需要为30个不同学习进度的学生准备个性化教案。又或者,你是一位研究人员,需要在海量文献中快速找到关键信息并形成见解。这些场景中,有一个共同的需求:一个真正理解你、能与你对话、能记住你学习历史的智能伙伴。 这就是DeepTutor要解决的问题。DeepTutor不仅仅是一个AI聊天机

gitblog_00185的博客 239

3步完成DeepTutor部署:快速上手你的终身AI学习伴侣指南

你是不是也有过这样的经历:收藏夹里存了几十个"学习资料",电脑里躺着几十份PDF笔记,可真正要系统掌握一门知识时,却依然不知从何下手?更糟的是,每个AI工具都要单独配模型、单独学操作,聊完一次就"失忆",下次还得从头解释。如果你渴望一个真正懂你、记得你、能陪你长期学习的AI助手,那么本文将带你用3步完成**DeepTutor部署**,把这个开源项目变成你自己的终身学习伴侣。 ## DeepTut

gitblog_00692的博客 315

4步快速部署DeepTutor:从零搭建你的个性化AI学习伴侣完整指南

每天在搜索引擎和十几个学习App之间来回切换,资料越存越多,真正能坚持学下去的内容却越来越少?DeepTutor是一款基于Agent原生架构的个性化AI学习平台,把聊天答疑、深度研究、知识库管理、协同写作和记忆追踪整合在一个系统里,让你的每一次学习都能沉淀成可追溯的个人知识网络。这篇文章会带你从环境准备开始,一步步把这位"AI学习伴侣"部署起来,并解锁它最值得用的几个核心能力。 [![DeepT

gitblog_00760的博客 926

如何用DeepTutor打造你的终极个性化AI学习伴侣:完整指南

你是否厌倦了千篇一律的在线课程?是否希望有一个真正理解你学习节奏、能够24小时陪伴的智能导师?DeepTutor正是这样一个革命性的开源AI学习平台,它不只是聊天机器人,而是一个完整的智能学习生态系统。作为一款Agent-Native(智能代理原生)的个性化学习助手,DeepTutor能够为你提供终身陪伴式的学习体验,支持完全本地化部署,保护你的隐私同时提供强大的学习功能。 ## 问题导向:传统

gitblog_01078的博客 706

开源项目第189期:DeepTutor — Agent 原生的终身个性化学习工作台,三层记忆+多引擎RAG+Partners

港大学数据智能实验室出品的 AI 学习工作台。核心:单一 agent 循环驱动所有模式(Chat/Quiz/Research/Visualize/Solve/Mastery Path)。三层记忆(L1事件追踪/L2曲面摘要/L3跨曲面综合),可视化记忆图谱,每条合成结论可追溯到原始事件。多引擎知识库:LlamaIndex/PageIndex/GraphRAG/LightRAG/Obsidian。Partners:持久 AI 伴侣,带 IM 通道

Cheson的专栏 397

DeepTutor部署全攻略:3步搭好你的AI学习伴侣,不懂代码也能10分钟上手

还在收藏一堆"AI学习工具",最后全都吃灰?与其在各种付费订阅里反复横跳,不如自己部署一个真正属于你的AI学习伴侣——DeepTutor,一个基于Agent原生架构的开源个性化学习平台,把聊天答疑、深度研究、知识库检索、可视化、记忆管理全装进一套系统,本地运行、数据不出门。这篇指南用"新手最常问的6个疑问"带你从零跑通,全程只需10分钟。 ## 疑问一:DeepTutor到底是什么?它和Chat

gitblog_00569的博客 353
上一篇: 一文看完微信小程序开发生命周期
下一篇: Apache POI操作Docx文档时踩坑指南
二饭
博客等级 码龄7年 1806粉丝 152原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二饭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值