做网站赚50万c网站开发案例详解 pdf

张小明 2026/1/3 6:53:29
做网站赚50万,c网站开发案例详解 pdf,专业建设网站多少钱,佛山营销网站开发LangChain 记忆系统深度剖析#xff1a;超越简单对话历史的智能记忆架构 引言#xff1a;记忆在AI应用中的关键作用 在构建大型语言模型(LLM)应用时#xff0c;记忆管理是决定应用智能程度的核心因素之一。传统的对话机器人往往只能记住有限的上下文#xff0c;而LangChain…LangChain 记忆系统深度剖析超越简单对话历史的智能记忆架构引言记忆在AI应用中的关键作用在构建大型语言模型(LLM)应用时记忆管理是决定应用智能程度的核心因素之一。传统的对话机器人往往只能记住有限的上下文而LangChain通过其精妙的记忆系统设计为开发者提供了构建具有长期记忆、个性化体验的智能应用的能力。本文将深入探讨LangChain记忆API的架构设计、实现原理及高级应用场景。记忆系统的核心架构设计记忆系统的分层抽象LangChain的记忆系统采用了经典的分层架构从上至下可分为三个主要层级接口层定义了统一的记忆操作接口存储抽象层封装了不同存储后端的实现细节持久化层对接具体的存储系统内存、数据库、向量库等from langchain.memory import ConversationBufferMemory, ChatMessageHistory from langchain.schema import BaseMessage, HumanMessage, AIMessage # LangChain记忆系统的核心抽象类示例 class BaseMemory(ABC): 所有记忆类的基类 property abstractmethod def memory_variables(self) - List[str]: 返回记忆变量名列表 pass abstractmethod def load_memory_variables(self, inputs: Dict[str, Any]) - Dict[str, Any]: 从记忆存储中加载变量 pass abstractmethod def save_context(self, inputs: Dict[str, Any], outputs: Dict[str, Any]) - None: 保存上下文到记忆存储 pass记忆类型的多维分类LangChain的记忆系统不仅限于简单的对话历史记录而是提供了多种维度的记忆类型会话记忆维护对话的时序历史实体记忆跟踪特定实体人物、地点、概念的信息摘要记忆对长对话进行压缩摘要知识记忆结合向量存储的外部知识结构化记忆将非结构化对话转为结构化存储高级记忆模式深度解析向量增强的记忆系统单纯依赖对话历史的问题在于信息检索效率低下。LangChain通过结合向量存储实现了基于语义相似度的记忆检索from langchain.memory import ConversationBufferWindowMemory from langchain.vectorstores import Chroma from langchain.embeddings import OpenAIEmbeddings from langchain.text_splitter import RecursiveCharacterTextSplitter class VectorEnhancedMemory(ConversationBufferWindowMemory): 向量增强的记忆系统 def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.embeddings OpenAIEmbeddings() self.vector_store None self.text_splitter RecursiveCharacterTextSplitter( chunk_size500, chunk_overlap50 ) def _create_vector_store(self, texts): 创建向量存储 if not self.vector_store: self.vector_store Chroma.from_texts( texts, self.embeddings, metadatas[{source: memory} for _ in range(len(texts))] ) else: self.vector_store.add_texts(texts) def save_context(self, inputs, outputs): 重写保存上下文方法添加向量化 super().save_context(inputs, outputs) # 提取关键信息并向量化 combined_text fHuman: {inputs.get(input, )}\nAI: {outputs.get(output, )} chunks self.text_splitter.split_text(combined_text) self._create_vector_store(chunks) def retrieve_relevant_memories(self, query, k3): 基于语义相似度检索相关记忆 if not self.vector_store: return [] docs self.vector_store.similarity_search(query, kk) return [doc.page_content for doc in docs]基于图结构的记忆网络对于复杂的对话场景简单的线性记忆无法捕捉实体间的复杂关系。我们可以实现基于图结构的记忆系统import networkx as nx from typing import Dict, List, Tuple from dataclasses import dataclass dataclass class MemoryNode: 记忆节点 id: str content: str entity_type: str # person, place, concept, event timestamp: float importance: float # 记忆重要性权重 class GraphBasedMemory: 基于图结构的记忆系统 def __init__(self): self.graph nx.Graph() self.node_counter 0 self.entity_cache {} def add_conversation_turn(self, human_input: str, ai_response: str): 添加对话轮次到记忆图 # 提取实体 human_entities self._extract_entities(human_input) ai_entities self._extract_entities(ai_response) # 创建对话节点 turn_id fturn_{self.node_counter} turn_node MemoryNode( idturn_id, contentfH: {human_input}\nA: {ai_response}, entity_typeconversation_turn, timestamptime.time(), importance0.5 ) self.graph.add_node(turn_id, dataturn_node) self.node_counter 1 # 连接实体节点 for entity in set(human_entities ai_entities): if entity not in self.graph: entity_node MemoryNode( identity, contententity, entity_typeentity, timestamptime.time(), importance0.7 ) self.graph.add_node(entity, dataentity_node) # 添加关系边权重表示关联强度 self.graph.add_edge(turn_id, entity, weight1.0) def get_context_for_query(self, query: str, depth: int 2) - str: 基于图遍历获取相关上下文 query_entities self._extract_entities(query) relevant_nodes set() for entity in query_entities: if entity in self.graph: # 获取指定深度内的邻居节点 neighbors nx.single_source_shortest_path_length( self.graph, entity, cutoffdepth ) relevant_nodes.update(neighbors.keys()) # 按时间戳和重要性排序 nodes_data [] for node_id in relevant_nodes: node_data self.graph.nodes[node_id][data] nodes_data.append(node_data) nodes_data.sort(keylambda x: (x.importance, x.timestamp), reverseTrue) # 构建上下文 context 相关记忆\n for node in nodes_data[:5]: # 取最重要的5个节点 context f- {node.content}\n return context def _extract_entities(self, text: str) - List[str]: 简化版实体提取实际应用中应使用NER模型 # 这里使用简单的关键词提取作为示例 important_words [项目, 会议, 报告, 设计, 代码, 测试] entities [] for word in important_words: if word in text: entities.append(word) return entities记忆压缩与优化策略自适应记忆修剪算法随着对话的进行记忆会不断增长。我们需要智能的压缩策略来保持记忆系统的效率from typing import Dict, Any, List import numpy as np from datetime import datetime, timedelta class AdaptiveMemoryCompressor: 自适应记忆压缩器 def __init__(self, max_tokens: int 4000, time_decay_factor: float 0.95, importance_threshold: float 0.3): self.max_tokens max_tokens self.time_decay_factor time_decay_factor self.importance_threshold importance_threshold self.memory_entries [] def add_memory(self, content: str, metadata: Dict[str, Any], importance_score: float None): 添加记忆条目 if importance_score is None: importance_score self._calculate_importance(content, metadata) # 应用时间衰减 time_aware_score self._apply_time_decay(importance_score, metadata) entry { content: content, metadata: metadata, importance: time_aware_score, tokens: self._count_tokens(content), timestamp: datetime.now() } self.memory_entries.append(entry) # 检查是否需要压缩 if self._total_tokens() self.max_tokens: self._compress_memory() def _calculate_importance(self, content: str, metadata: Dict) - float: 计算记忆重要性 # 基于多个因素计算重要性分数 factors { query_specificity: self._measure_specificity(content), user_feedback: metadata.get(feedback_score, 0.5), conversation_depth: metadata.get(depth, 1), entity_density: self._count_entities(content) / max(len(content.split()), 1) } # 加权平均 weights [0.4, 0.3, 0.2, 0.1] importance sum(f * w for f, w in zip(factors.values(), weights)) return importance def _apply_time_decay(self, score: float, metadata: Dict) - float: 应用时间衰减因子 time_diff datetime.now() - metadata.get(created_at, datetime.now()) days_diff time_diff.days # 指数衰减 decayed_score score * (self.time_decay_factor ** days_diff) return decayed_score def _compress_memory(self): 压缩记忆存储 # 1. 移除重要性低于阈值的条目 self.memory_entries [ entry for entry in self.memory_entries if entry[importance] self.importance_threshold ] # 2. 如果仍然超出限制合并相似条目 if self._total_tokens() self.max_tokens: self._merge_similar_entries() def _merge_similar_entries(self): 合并相似的记忆条目 # 基于内容相似度进行聚类和合并 # 此处简化实现实际应用中应使用文本嵌入和聚类算法 merged_entries [] used_indices set() for i, entry1 in enumerate(self.memory_entries): if i in used_indices: continue similar_group [entry1] for j, entry2 in enumerate(self.memory_entries[i1:], starti1): if j in used_indices: continue similarity self._calculate_similarity( entry1[content], entry2[content] ) if similarity 0.7: # 相似度阈值 similar_group.append(entry2) used_indices.add(j) # 合并组内的记忆条目 if len(similar_group) 1: merged_entry self._merge_entries(similar_group) merged_entries.append(merged_entry) else: merged_entries.append(entry1) used_indices.add(i) self.memory_entries merged_entries def get_relevant_memories(self, query: str, top_k: int 5) - List[str]: 获取与查询相关的记忆 # 计算查询与每个记忆条目的相关性 scored_entries [] for entry in self.memory_entries: relevance self._calculate_relevance(entry[content], query) adjusted_score entry[importance] * 0.7 relevance * 0.3 scored_entries.append((adjusted_score, entry)) # 按分数排序并返回top_k scored_entries.sort(reverseTrue, keylambda x: x[0]) return [entry[content] for _, entry in scored_entries[:top_k]]多模态记忆集成结合文本、图像和结构化数据的记忆系统现代AI应用往往需要处理多模态输入LangChain的记忆系统可以通过扩展支持多模态记忆from typing import Union, Optional from PIL import Image import base64 from io import BytesIO class MultimodalMemory: 多模态记忆系统 def __init__(self, text_memory: BaseMemory, image_processor None, audio_processor None): self.text_memory text_memory self.image_processor image_processor self.audio_processor audio_processor # 多模态存储 self.image_store {} # image_hash - image_data self.audio_store {} # audio_hash - audio_data self.metadata_store {} # 存储跨模态关联信息 def save_multimodal_context(self, inputs: Dict[str, Any], outputs: Dict[str, Any]): 保存多模态上下文 # 处理文本记忆 self.text_memory.save_context(inputs, outputs) # 提取和处理图像 if image in inputs: image_data self._process_image(inputs[image]) image_hash self._hash_image(image_data) self.image_store[image_hash] image_data # 关联图像与对话 conversation_id self._get_current_conversation_id() self.metadata_store.setdefault(conversation_id, {}).setdefault( images, [] ).append(image_hash) # 处理音频类似逻辑 if audio in inputs: audio_data self._process_audio(inputs[audio]) audio_hash self._hash_audio(audio_data) self.audio_store[audio_hash] audio_data def retrieve_multimodal_context(self, query: Union[str, Image.Image], modality: str text) - Dict[str, Any]: 检索多模态上下文 context { text: , images: [], audio: [], metadata: {} } if modality text: # 文本检索 text_context self.text_memory.load_memory_variables({input: query}) context[text] text_context.get(history, ) # 基于文本检索相关图像 related_images self._find_related_images(query) context[images] related_images elif modality image and isinstance(query, Image.Image): # 基于图像的检索 # 使用图像特征查找相似图像和相关对话 image_hash self._hash_image(query) similar_images self._find_similar_images(image_hash) # 找到包含这些图像的对话 for img_hash in similar_images: conversations self._find_conversations_with_image(img_hash) for conv_id in conversations: conv_text self._get_conversation_text(conv_id) context[text] conv_text \n return context def _process_image(self, image_input: Union[str, Image.Image]) - bytes: 处理图像输入 if isinstance(image_input, str): # 假设是base64编码或URL if image_input.startswith(data:image): # 提取base64部分 image_input image_input.split(,)[1] image_data base64.b64decode(image_input) else: # PIL Image对象 buffer BytesIO() image_input.save(buffer, formatPNG) image_data buffer.getvalue() return image_data def _find_related_images(self, text_query: str) - List[bytes]: 基于文本查询查找相关图像 # 这里可以使用CLIP等跨模态模型 # 简化实现返回最近使用的图像 conversation_id self._get_current_conversation_id() image_hashes self.metadata_store.get(conversation_id, {}).get(images, []) return [self.image_store.get(hash) for hash in image_hashes[-3:]] # 返回最近3
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

推荐扬中网站建设网站开发的数据库

如何快速构建Vue电商项目:从零开始的完整指南 【免费下载链接】mall-app-web mall-app-web是一个电商系统的移动端项目,基于uni-app实现。主要包括首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等功能。 项…

张小明 2025/12/30 13:48:18 网站建设

做昆虫类论文网站政务网络及网站建设

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个Jupyter Notebook教程,逐步讲解通道注意力机制。要求:1. 用通俗语言解释原理;2. 使用NumPy实现最简版本的通道注意力;3. 提供…

张小明 2025/12/30 23:40:23 网站建设

肇庆网站建设推广企业门户网站的主要技术指标

小爱音箱音乐播放限制终极解决方案技术深度解析 【免费下载链接】xiaomusic 使用小爱同学播放音乐,音乐使用 yt-dlp 下载。 项目地址: https://gitcode.com/GitHub_Trending/xia/xiaomusic 在智能音箱生态中,小爱音箱凭借其优秀的语音交互能力获得…

张小明 2026/1/2 9:04:39 网站建设

网站二级联菜单怎么做python做直播网站

哈喽各位,我是前端小L。 欢迎来到贪心算法专题第四篇! 力扣上关于“买卖股票”的题目有一整个系列(共 6 道)。其中,第 II 题 是最适合用贪心算法解决的。 规则是:你可以尽可能地完成更多的交易&#xff0…

张小明 2026/1/2 6:40:05 网站建设

移动网站怎么登录短链接生成网址

SQL与应用服务器及分布式数据库解析 1. SQL与应用服务器 在当今的网络环境中,应用服务器在连接万维网和后端企业系统(包括企业数据库)方面发挥着重要作用。 1.1 EJB 3.0的优势 EJB 3.0具有诸多优势,推动了实体开发的发展: - 它简化了实体的更新操作。 - 可以使用注解…

张小明 2025/12/30 2:38:39 网站建设

小榄网站建设公司北京建设网证书查询

分库分表数据分散存储垂直分库:以表为依据,根据业务将不同表拆分到不同库;特点:每个库表结构不同,数据也不同,并集是全量数据;垂直分表:以字段为依据,根据字段属性将一张…

张小明 2026/1/2 22:18:25 网站建设