agentscope提取msg+llama_index 查询

其实根本不用保存短期记忆,做个方法:会话结束清空上下文保存长期记忆(不清空没法接着保存),一个会话内的长期记忆文件不应该变化,每次回复都查找一下rag

原文保存:

python 复制代码
current_memory=memory.InMemoryMemory()
async def save_memory():
    """
    获取内存中的历史对话记录
    
    从内存中检索之前存储的对话内容,并以工具响应格式返回。
    主要用于让代理能够访问历史对话上下文信息。
    
    Returns:
        ToolResponse: 包含历史对话内容的工具响应对象
    """
    msgs =await current_memory.get_memory()
    texts = [msg.get_text_content() or "" for msg in msgs]  
    combined = "\n".join(texts)  
    print(f"content:\n---\n{combined}\n---\n")
    return ToolResponse(content=[TextBlock(type="text", text=combined)]) 
   

其实应该让ai总结一下直接写入的

python 复制代码
async def save_memory(Summarized_memory):
    """
    保存AI总结后的对话记忆

    Returns:
        ToolResponse: 保存成功的确认响应
    """
    save_longterm_memory_log(Summarized_memory)
    await llm_agent.memory.clear()
    return ToolResponse(content=[TextBlock(type="text", text="保存成功")]) 
toolkit.register_tool_function(save_memory)  

每次对话前搞个rag引擎

python 复制代码
from datetime import datetime
import sys
import os
sys.path.append(os.getcwd())
# 导入 Ollama 相关模块
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settings
from llama_index.llms.ollama import Ollama
from llama_index.embeddings.ollama import OllamaEmbedding
from back.api_key import ollama_llm1,  ollama_embedding_model
# 配置 Ollama 模型
Settings.embed_model = OllamaEmbedding(model_name=ollama_embedding_model)
Settings.llm = Ollama(model=ollama_llm1, request_timeout=60.0)

memory_dir = os.path.join(os.getcwd(), "memory_server", "memory_data")
if not os.path.exists(memory_dir):
    os.makedirs(memory_dir)


def save_longterm_memory_log(content):
    """
    将内容保存到memory文件夹下的日志文件中
    
    Args:
        content (str): 要保存的内容
    """

    # 确保memory_data文件夹存在

    # 构建日志文件路径
    log_file_path = os.path.join(memory_dir, f"longterm_memory.txt")
    
    # 获取当前时间戳
    timestamp = datetime.now().strftime("%H:%M")
    
    # 写入日志文件
    try:
        with open(log_file_path, "a", encoding="utf-8") as f:
            f.write(f"[{timestamp}] {content}\n")
 
    except Exception as e:
        print(f"保存日志失败: {e}")


def query_document_index(query_text="你的问题"):
    """
    使用 Ollama 模型查询文档索引
    
    Args:
        query_text (str): 查询的问题文本
        data_dir (str): 文档数据目录路径
        
    Returns:
        response: 查询结果响应
    """
    try:
        # 加载文档数据
        documents = SimpleDirectoryReader("E:/code/my_python_server/memory_server/memory_data").load_data()
        # 创建向量索引
        index = VectorStoreIndex.from_documents(documents)
        
        # 使用 Ollama 模型进行查询
        query_engine = index.as_query_engine()
        response = query_engine.query(query_text)
        
        print(f"查询结果: {response}")
        return response
        
    except Exception as e:
        print(f"文档查询出错: {e}")
        return None


# 使用示例
if __name__ == "__main__":
    response = query_document_index("我喜欢什么")
    if response:
        print(response)
python 复制代码
def retrieve_document_chunks(query_text="你的问题", top_k=5):
    """
    仅检索文档中的相关文本块,不进行问答生成
    
    Args:
        query_text (str): 查询的问题文本
        top_k (int): 返回最相似的文本块数量,默认5个
        
    Returns:
        str: 格式化的检索结果字符串
    """
    try:
        # 加载文档数据
        documents = SimpleDirectoryReader("E:/code/my_python_server/memory_server/memory_data").load_data()
        # 创建向量索引
        index = VectorStoreIndex.from_documents(documents)
        
        # 创建检索器
        retriever = index.as_retriever(similarity_top_k=top_k)
        # 执行检索
        nodes = retriever.retrieve(query_text)
        
        # 构建格式化的字符串结果
        result_lines = []
        result_lines.append(f"共检索到 {len(nodes)} 个相关文本块:")
        result_lines.append("")
        
        for i, node in enumerate(nodes, 1):
            result_lines.append(f"--- 文本块 {i} ---")
            result_lines.append(node.text)
            # 添加相似度分数(如果存在)
            if hasattr(node, 'score') and node.score is not None:
                result_lines.append(f"相似度分数: {node.score:.4f}")
            result_lines.append("")
            
        result_str = "\n".join(result_lines)
        print(f"检索完成: {result_str}")
        return result_str
        
    except Exception as e:
        error_msg = f"文档检索出错: {e}"
        print(error_msg)
        return error_msg
相关推荐
Hello server2 小时前
DeepSeek Harness 深度体验:把「万物皆插件」做到极致的 AI 编程 Agent
人工智能
驴友花雕6 小时前
【花雕动手做】行空板 K10 系列实验之人工智能语音识别小车的10个参考案例
人工智能·单片机·嵌入式硬件·语音识别·行空板 k10 系列实验·花雕动手做·小车的10个参考案例
火山引擎开发者社区7 小时前
DeepSeek-V4 Pro 发布,veStack Day 0 完成模型适配
人工智能
2501_926978337 小时前
AGI 的四种瓶颈:资源型还是发现型--以及DSH的位置
人工智能·经验分享·笔记·ai写作
Q463913497 小时前
线下销售复盘难落地,AI 会话设备能帮上啥忙
人工智能·自然语言处理
ebok.7 小时前
国产大模型落地业务系统的优选载体:京微智枢信创 AI 业务支撑平台
大数据·人工智能·低代码·ai
wujian83118 小时前
怎么用文心生成word文档?从格式错乱到智能导出,AI导出鸭让创作再无后顾之忧
人工智能·ai·word·豆包·deepseek·ai导出鸭
动物园猫8 小时前
猪危险行为目标检测数据集:3类别、5,000+张图像 | 目标检测
人工智能·目标检测·计算机视觉
ai产品老杨8 小时前
AI视频分析并发优化完整流程:解决多路视频并发不足与高延迟排查指南
人工智能·音视频
why技术9 小时前
AI 写的文章,可能都带着手敲一遍都去不掉的“隐形水印”。
前端·人工智能·后端