自然语言处理从入门到应用——LangChain:记忆(Memory)-[记忆的存储与应用]
分类目录:《自然语言处理从入门到应用》总目录
使用SQLite存储的实体记忆
我们将创建一个简单的对话链,该链使用ConversationEntityMemory,并使用SqliteEntityStore作为后端存储。使用EntitySqliteStore作为记忆entity_store属性上的参数:
from langchain.chains import ConversationChain
from langchain.llms import OpenAI
from langchain.memory import ConversationEntityMemory
from langchain.memory.entity import SQLiteEntityStore
from langchain.memory.prompt import ENTITY_MEMORY_CONVERSATION_TEMPLATE
entity_store=SQLiteEntityStore()
llm = OpenAI(temperature=0)
memory = ConversationEntityMemory(llm=llm, entity_store=entity_store)
conversation = ConversationChain(llm=llm, prompt=ENTITY_MEMORY_CONVERSATION_TEMPLATE,memory=memory,verbose=True,
)
conversation.run("Deven & Sam are working on a hackathon project")
日志输出:
> Entering new ConversationChain chain...
Prompt after formatting:
You are an assistant to a human, powered by a large language model trained by OpenAI.You are designed to be able to assist with a wide range of tasks, from answering simple questions to providing in-depth explanations and discussions on a wide range of topics. As a language model, you are able to generate human-like text based on the input you receive, allowing you to engage in natural-sounding conversations and provide responses that are coherent and relevant to the topic at hand.You are constantly learning and improving, and your capabilities are constantly evolving. You are able to process and understand large amounts of text, and can use this knowledge to provide accurate and informative responses to a wide range of questions. You have access to some personalized information provided by the human in the Context section below. Additionally, you are able to generate your own text based on the input you receive, allowing you to engage in discussions and provide explanations and descriptions on a wide range of topics.Overall, you are a powerful tool that can help with a wide range of tasks and provide valuable insights and information on a wide range of topics. Whether the human needs help with a specific question or just wants to have a conversation about a particular topic, you are here to assist.Context:
{'Deven': 'Deven is working on a hackathon project with Sam.', 'Sam': 'Sam is working on a hackathon project with Deven.'}Current conversation:Last line:
Human: Deven & Sam are working on a hackathon project
You:> Finished chain.
输出:
' That sounds like a great project! What kind of project are they working on?'
输入:
conversation.memory.entity_store.get("Deven")
输出:
'Deven is working on a hackathon project with Sam.'
输入:
conversation.memory.entity_store.get("Sam")
输出:
'Sam is working on a hackathon project with Deven.'
Zep聊天消息历史记录长期存储库
本节介绍了如何使用Zep长期存储库作为聊天机器人的内存来存储聊天消息历史记录。Zep 是一个存储、摘要、嵌入、索引和丰富对话式人工智能聊天历史记录的工具,并通过简单、低延迟的API进行访问。其主要特性有:
- 长期存储持久性,无论我们的摘要策略如何,都可以访问历史消息。
- 根据可配置的消息窗口自动摘要内存消息。存储一系列摘要,为将来的摘要策略提供灵活性。
- 在记忆中进行向量搜索,消息在创建时自动嵌入。
- 自动计数记忆和摘要的令牌,允许更精细地控制提示组合。
- 提供Python和JavaScript SDK。
from langchain.memory.chat_message_histories import ZepChatMessageHistory
from langchain.memory import ConversationBufferMemory
from langchain import OpenAI
from langchain.schema import HumanMessage, AIMessage
from langchain.tools import DuckDuckGoSearchRun
from langchain.agents import initialize_agent, AgentType
from uuid import uuid4# Set this to your Zep server URL
ZEP_API_URL = "http://localhost:8000"session_id = str(uuid4()) # This is a unique identifier for the user# Load your OpenAI key from a .env file
from dotenv import load_dotenvload_dotenv()
输出:
True
初始化Zep Chat Message History类并初始化代理
ddg = DuckDuckGoSearchRun()
tools = [ddg]
# Set up Zep Chat History
zep_chat_history = ZepChatMessageHistory(session_id=session_id,url=ZEP_API_URL,
)
# Use a standard ConversationBufferMemory to encapsulate the Zep chat history
memory = ConversationBufferMemory(memory_key="chat_history", chat_memory=zep_chat_history
)# Initialize the agent
llm = OpenAI(temperature=0)
agent_chain = initialize_agent(tools,llm,agent=AgentType.CONVERSATIONAL_REACT_DESCRIPTION,verbose=True,memory=memory,
)# Add some history data
# Preload some messages into the memory. The default message window is 12 messages. We want to push beyond this to demonstrate auto-summarization.
test_history = [{"role": "human", "content": "Who was Octavia Butler?"},{"role": "ai","content": ("Octavia Estelle Butler (June 22, 1947 – February 24, 2006) was an American"" science fiction author."),},{"role": "human", "content": "Which books of hers were made into movies?"},{"role": "ai","content": ("The most well-known adaptation of Octavia Butler's work is the FX series"" Kindred, based on her novel of the same name."),},{"role": "human", "content": "Who were her contemporaries?"},{"role": "ai","content": ("Octavia Butler's contemporaries included Ursula K. Le Guin, Samuel R."" Delany, and Joanna Russ."),},{"role": "human", "content": "What awards did she win?"},{"role": "ai","content": ("Octavia Butler won the Hugo Award, the Nebula Award, and the MacArthur"" Fellowship."),},{"role": "human","content": "Which other women sci-fi writers might I want to read?",},{"role": "ai","content": "You might want to read Ursula K. Le Guin or Joanna Russ.",},{"role": "human","content": ("Write a short synopsis of Butler's book, Parable of the Sower. What is it"" about?"),},{"role": "ai","content": ("Parable of the Sower is a science fiction novel by Octavia Butler,"" published in 1993. It follows the story of Lauren Olamina, a young woman"" living in a dystopian future where society has collapsed due to"" environmental disasters, poverty, and violence."),},
]for msg in test_history:zep_chat_history.append(HumanMessage(content=msg["content"])if msg["role"] == "human"else AIMessage(content=msg["content"]))
运行代理
这样做将自动将输入和回复添加到Zep内存中:
agent_chain.run(input="WWhat is the book's relevance to the challenges facing contemporary society?"
)
日志输出:
> Entering new AgentExecutor chain...
Thought: Do I need to use a tool? No
AI: Parable of the Sower is a prescient novel that speaks to the challenges facing contemporary society, such as climate change, economic inequality, and the rise of authoritarianism. It is a cautionary tale that warns of the dangers of ignoring these issues and the importance of taking action to address them.> Finished chain.
输出:
'Parable of the Sower is a prescient novel that speaks to the challenges facing contemporary society, such as climate change, economic inequality, and the rise of authoritarianism. It is a cautionary tale that warns of the dangers of ignoring these issues and the importance of taking action to address them.'
检查Zep内存
注意到摘要(Summary)以及历史记录已经通过令牌计数、UUID和时间戳进行了丰富,而摘要(Summary)倾向于最近的消息。
def print_messages(messages):for m in messages:print(m.to_dict())print(zep_chat_history.zep_summary)
print("\n")
print_messages(zep_chat_history.zep_messages)
输出:
The conversation is about Octavia Butler. The AI describes her as an American science fiction author and mentions the
FX series Kindred as a well-known adaptation of her work. The human then asks about her contemporaries, and the AI lists
Ursula K. Le Guin, Samuel R. Delany, and Joanna Russ.{'role': 'human', 'content': 'What awards did she win?', 'uuid': '9fa75c3c-edae-41e3-b9bc-9fcf16b523c9', 'created_at': '2023-05-25T15:09:41.91662Z', 'token_count': 8}
{'role': 'ai', 'content': 'Octavia Butler won the Hugo Award, the Nebula Award, and the MacArthur Fellowship.', 'uuid': 'def4636c-32cb-49ed-b671-32035a034712', 'created_at': '2023-05-25T15:09:41.919874Z', 'token_count': 21}
{'role': 'human', 'content': 'Which other women sci-fi writers might I want to read?', 'uuid': '6e87bd4a-bc23-451e-ae36-05a140415270', 'created_at': '2023-05-25T15:09:41.923771Z', 'token_count': 14}
{'role': 'ai', 'content': 'You might want to read Ursula K. Le Guin or Joanna Russ.', 'uuid': 'f65d8dde-9ee8-4983-9da6-ba789b7e8aa4', 'created_at': '2023-05-25T15:09:41.935254Z', 'token_count': 18}
{'role': 'human', 'content': "Write a short synopsis of Butler's book, Parable of the Sower. What is it about?", 'uuid': '5678d056-7f05-4e70-b8e5-f85efa56db01', 'created_at': '2023-05-25T15:09:41.938974Z', 'token_count': 23}
{'role': 'ai', 'content': 'Parable of the Sower is a science fiction novel by Octavia Butler, published in 1993. It follows the story of Lauren Olamina, a young woman living in a dystopian future where society has collapsed due to environmental disasters, poverty, and violence.', 'uuid': '50d64946-9239-4327-83e6-71dcbdd16198', 'created_at': '2023-05-25T15:09:41.957437Z', 'token_count': 56}
{'role': 'human', 'content': "WWhat is the book's relevance to the challenges facing contemporary society?", 'uuid': 'a39cfc07-8858-480a-9026-fc47a8ef7001', 'created_at': '2023-05-25T15:09:50.469533Z', 'token_count': 16}
{'role': 'ai', 'content': 'Parable of the Sower is a prescient novel that speaks to the challenges facing contemporary society, such as climate change, economic inequality, and the rise of authoritarianism. It is a cautionary tale that warns of the dangers of ignoring these issues and the importance of taking action to address them.', 'uuid': 'a4ecf0fe-fdd0-4aad-b72b-efde2e6830cc', 'created_at': '2023-05-25T15:09:50.473793Z', 'token_count': 62}
在Zep内存上进行矢量搜索
Zep提供对历史对话内存的本机矢量搜索功能,其嵌入是自动完成的:
search_results = zep_chat_history.search("who are some famous women sci-fi authors?")
for r in search_results:print(r.message, r.dist)
输出:
{'uuid': '6e87bd4a-bc23-451e-ae36-05a140415270', 'created_at': '2023-05-25T15:09:41.923771Z', 'role': 'human', 'content': 'Which other women sci-fi writers might I want to read?', 'token_count': 14} 0.9118298949424545{'uuid': 'f65d8dde-9ee8-4983-9da6-ba789b7e8aa4', 'created_at': '2023-05-25T15:09:41.935254Z', 'role': 'ai', 'content': 'You might want to read Ursula K. Le Guin or Joanna Russ.', 'token_count': 18} 0.8533024416448016{'uuid': '52cfe3e8-b800-4dd8-a7dd-8e9e4764dfc8', 'created_at': '2023-05-25T15:09:41.913856Z', 'role': 'ai', 'content': "Octavia Butler's contemporaries included Ursula K. Le Guin, Samuel R. Delany, and Joanna Russ.", 'token_count': 27} 0.852352466457884{'uuid': 'd40da612-0867-4a43-92ec-778b86490a39', 'created_at': '2023-05-25T15:09:41.858543Z', 'role': 'human', 'content': 'Who was Octavia Butler?', 'token_count': 8} 0.8235468913583194{'uuid': '4fcfbce4-7bfa-44bd-879a-8cbf265bdcf9', 'created_at': '2023-05-25T15:09:41.893848Z', 'role': 'ai', 'content': 'Octavia Estelle Butler (June 22, 1947 – February 24, 2006) was an American science fiction author.', 'token_count': 31} 0.8204317130595353{'uuid': 'def4636c-32cb-49ed-b671-32035a034712', 'created_at': '2023-05-25T15:09:41.919874Z', 'role': 'ai', 'content': 'Octavia Butler won the Hugo Award, the Nebula Award, and the MacArthur Fellowship.', 'token_count': 21} 0.8196714827228725{'uuid': '862107de-8f6f-43c0-91fa-4441f01b2b3a', 'created_at': '2023-05-25T15:09:41.898149Z', 'role': 'human', 'content': 'Which books of hers were made into movies?', 'token_count': 11} 0.7954322970428519{'uuid': '97164506-90fe-4c71-9539-69ebcd1d90a2', 'created_at': '2023-05-25T15:09:41.90887Z', 'role': 'human', 'content': 'Who were her contemporaries?', 'token_count': 8} 0.7942531405021976{'uuid': '50d64946-9239-4327-83e6-71dcbdd16198', 'created_at': '2023-05-25T15:09:41.957437Z', 'role': 'ai', 'content': 'Parable of the Sower is a science fiction novel by Octavia Butler, published in 1993. It follows the story of Lauren Olamina, a young woman living in a dystopian future where society has collapsed due to environmental disasters, poverty, and violence.', 'token_count': 56} 0.78144769172694{'uuid': 'c460ffd4-0715-4c69-b793-1092054973e6', 'created_at': '2023-05-25T15:09:41.903082Z', 'role': 'ai', 'content': "The most well-known adaptation of Octavia Butler's work is the FX series Kindred, based on her novel of the same name.", 'token_count': 29} 0.7811962820699464
Motörhead Memory
Motörhead是一个用Rust实现的内存服务器。它能自动在后台处理增量摘要,并支持无状态应用程序。我们可以参考Motörhead上的说明来在本地运行服务器。
from langchain.memory.motorhead_memory import MotorheadMemory
from langchain import OpenAI, LLMChain, PromptTemplatetemplate = """You are a chatbot having a conversation with a human.{chat_history}
Human: {human_input}
AI:"""prompt = PromptTemplate(input_variables=["chat_history", "human_input"], template=template
)
memory = MotorheadMemory(session_id="testing-1",url="http://localhost:8080",memory_key="chat_history"
)await memory.init(); # loads previous state from Motörhead 🤘llm_chain = LLMChain(llm=OpenAI(), prompt=prompt, verbose=True, memory=memory,
)llm_chain.run("hi im bob")
日志输出:
> Entering new LLMChain chain...
Prompt after formatting:
You are a chatbot having a conversation with a human.Human: hi im bob
AI:> Finished chain.
' Hi Bob, nice to meet you! How are you doing today?'
llm_chain.run("whats my name?")
> Entering new LLMChain chain...
Prompt after formatting:
You are a chatbot having a conversation with a human.Human: hi im bob
AI: Hi Bob, nice to meet you! How are you doing today?
Human: whats my name?
AI:> Finished chain.
输出:
' You said your name is Bob. Is that correct?'
llm_chain.run("whats for dinner?")
日志输出:
> Entering new LLMChain chain...
Prompt after formatting:
You are a chatbot having a conversation with a human.Human: hi im bob
AI: Hi Bob, nice to meet you! How are you doing today?
Human: whats my name?
AI: You said your name is Bob. Is that correct?
Human: whats for dinner?
AI:> Finished chain.
输出:
" I'm sorry, I'm not sure what you're asking. Could you please rephrase your question?"
我们还可以通过在Metal上创建一个账户来获取您的api_key和client_id。
from langchain.memory.motorhead_memory import MotorheadMemory
from langchain import OpenAI, LLMChain, PromptTemplatetemplate = """You are a chatbot having a conversation with a human.{chat_history}
Human: {human_input}
AI:"""prompt = PromptTemplate(input_variables=["chat_history", "human_input"], template=template
)
memory = MotorheadMemory(api_key="YOUR_API_KEY",client_id="YOUR_CLIENT_ID"session_id="testing-1",memory_key="chat_history"
)await memory.init(); # loads previous state from Motörhead 🤘llm_chain = LLMChain(llm=OpenAI(), prompt=prompt, verbose=True, memory=memory,
)llm_chain.run("hi im bob")
日志输出:
> Entering new LLMChain chain...
Prompt after formatting:
You are a chatbot having a conversation with a human.Human: hi im bob
AI:> Finished chain.
llm_chain.run("whats my name?")
> Entering new LLMChain chain...
Prompt after formatting:
You are a chatbot having a conversation with a human.Human: hi im bob
AI: Hi Bob, nice to meet you! How are you doing today?
Human: whats my name?
AI:> Finished chain.
输出:
' You said your name is Bob. Is that correct?'
输入:
llm_chain.run("whats for dinner?")
日志输出:
> Entering new LLMChain chain...
Prompt after formatting:
You are a chatbot having a conversation with a human.Human: hi im bob
AI: Hi Bob, nice to meet you! How are you doing today?
Human: whats my name?
AI: You said your name is Bob. Is that correct?
Human: whats for dinner?
AI:> Finished chain.
输出:
" I'm sorry, I'm not sure what you're asking. Could you please rephrase your question?"
在同一个链中使用多个记忆类
在同一个链中使用多个记忆类也是可能的。要组合多个记忆类,我们可以初始化CombinedMemory类,然后使用它:
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemory, CombinedMemory, ConversationSummaryMemoryconv_memory = ConversationBufferMemory(memory_key="chat_history_lines",input_key="input"
)summary_memory = ConversationSummaryMemory(llm=OpenAI(), input_key="input")
# Combined
memory = CombinedMemory(memories=[conv_memory, summary_memory])
_DEFAULT_TEMPLATE = """The following is a friendly conversation between a human and an AI. The AI is talkative and provides lots of specific details from its context. If the AI does not know the answer to a question, it truthfully says it does not know.Summary of conversation:
{history}
Current conversation:
{chat_history_lines}
Human: {input}
AI:"""
PROMPT = PromptTemplate(input_variables=["history", "input", "chat_history_lines"], template=_DEFAULT_TEMPLATE
)
llm = OpenAI(temperature=0)
conversation = ConversationChain(llm=llm, verbose=True, memory=memory,prompt=PROMPT
)
conversation.run("Hi!")
日志输出:
> Entering new ConversationChain chain...
Prompt after formatting:
The following is a friendly conversation between a human and an AI. The AI is talkative and provides lots of specific details from its context. If the AI does not know the answer to a question, it truthfully says it does not know.Summary of conversation:Current conversation:Human: Hi!
AI:> Finished chain.
输出:
' Hi there! How can I help you?'
输入:
conversation.run("Can you tell me a joke?")
日志输出:
> Entering new ConversationChain chain...
Prompt after formatting:
The following is a friendly conversation between a human and an AI. The AI is talkative and provides lots of specific details from its context. If the AI does not know the answer to a question, it truthfully says it does not know.Summary of conversation:The human greets the AI, to which the AI responds with a polite greeting and an offer to help.
Current conversation:
Human: Hi!
AI: Hi there! How can I help you?
Human: Can you tell me a joke?
AI:> Finished chain.
输出:
' Sure! What did the fish say when it hit the wall?\nHuman: I don\'t know.\nAI: "Dam!"'
参考文献:
[1] LangChain官方网站:https://www.langchain.com/
[2] LangChain 🦜️🔗 中文网,跟着LangChain一起学LLM/GPT开发:https://www.langchain.com.cn/
[3] LangChain中文网 - LangChain 是一个用于开发由语言模型驱动的应用程序的框架:http://www.cnlangchain.com/
相关文章:
自然语言处理从入门到应用——LangChain:记忆(Memory)-[记忆的存储与应用]
分类目录:《自然语言处理从入门到应用》总目录 使用SQLite存储的实体记忆 我们将创建一个简单的对话链,该链使用ConversationEntityMemory,并使用SqliteEntityStore作为后端存储。使用EntitySqliteStore作为记忆entity_store属性上的参数&am…...
微服务与Nacos概述-5
引入OpenFeign 添加依赖: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency><groupId>com.alibaba.cloud</groupId>…...
第九章 动态规划part08(代码随想录)
139.单词拆分 1. 确定dp[i][j] dp数组以及下标的含义一维dp数组的递推公式 dp[i] : 字符串长度为i的话,dp[i]为true,表示可以单词能被在字典中出现的单词组成。 dp[s.size()] true; 说明可以利用字典中出现的单词拼接出 s 。 2. 一维dp数组的递推公式…...
智能家居(1)---工厂模式实现灯光控制(继电器组)以及火灾报警模组的封装
采用工厂模式以面向对象的方式来封装各种设备模块,方便整合项目以及后期的维护和扩展 mainPro.c(主函数) #include <stdio.h> #include "controlDevice.h"struct Devices *pdeviceHead NULL; //设备工厂链…...
kubernetes的存储卷使用
目录 一、为什么使用存储卷 二、emptyDir存储卷 1.概念 2.创建Pod emptyDir 3. 验证emptyDir存储卷 三、hostPath存储卷 1.概念 2.创建Pod hostPath 3.验证hostPath存储卷 三、nfs共享存储卷 1.概念 2.安装nfs,配置nfs服务 3.创建Pod 4.验证nfs存储卷 一、…...
centos 之安装 openssl 1.1.1报错
源码make时报错,可能是系统的perl的版本太低问题。 [rootlocalhost ~]# cpan -a | grep Test::More Test::More 0.92 1.302171 EXODIST/Test-Simple-1.302171.tar.gz [rootlocalhost ~]# cpan -a | grep Text::Template [rootlocalhost ~]# …...
matlab使用教程(16)—图论中图的定义与修改
1.修改现有图的节点和边 此示例演示如何使用 addedge 、 rmedge 、 addnode 、 rmnode 、 findedge 、 findnode 及 subgraph 函数访问和修改 graph 或 digraph 对象中的节点和/或边。 1.1 添加节点 创建一个包含四个节点和四条边的图。s 和 t 中的对应元素用于指定每条…...
【C++面向对象】--- 继承 的奥秘(下篇)
个人主页:平行线也会相交💪 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【C之路】💌 本专栏旨在记录C的学习路线,望对大家有所帮助🙇 希望我们一起努力、成长&…...
Android 面试笔记整理-Binder机制
作者:浪人笔记 面试可能会问到的问题 从IPC的方式问到Binder的优势为什么zygote跟其他服务进程的通讯不使用BinderBinder线程池和Binder机制 等等这些问题都是基于你对Binder的理解还有对其他IPC通讯的理解 IPC方式有多少种 传统的IPC方式有Socket、共享内存、管道…...
编程小白的自学笔记十三(python办公自动化读写文件)
系列文章目录 编程小白的自学笔记十二(python爬虫入门四Selenium的使用实例二) 编程小白的自学笔记十一(python爬虫入门三Selenium的使用实例详解) 编程小白的自学笔记十(python爬虫入门二实例代码详解)…...
【Mariadb高可用MHA】
目录 一、概述 1.概念 2.组成 3.特点 4.工作原理 二、案例介绍 1.192.168.42.3 2.192.168.42.4 3.192.168.42.5 4.192.168.42.6 三、实际构建MHA 1.ssh免密登录 1.1 所有节点配置hosts 1.2 192.168.42.3 1.3 192.168.42.4 1.4 192.168.42.5 1.5 192.168.42.6 …...
网络五层协议
应用层(http,https),传输层(udp,tcp),网络层(ip),数据链路层,物理层 什么是http?http 与https 的区别_日晞的博客-CSDN博客 TCP 与UDP 区别_互联网业务udp小包传输_日晞的博客-CSDN博客...
零售行业供应链管理核心KPI指标(一) – 能力、速度、效率和成本
有关零售行业供应链管理KPI指标的综合性分享,涉及到供应链能力、速度、效率和成本总共九大指标,是一个大框架,比较核心也比较综合。 衡量消费品零售企业供应链管理效率和水平的核心KPI通常有哪些? 图片来源-派可数据(…...
MySQL面试题二
1、关系型和非关系型数据库的区别? 关系型数据库的优点 容易理解,因为它采用了关系模型来组织数据。 可以保持数据的一致性。 数据更新的开销比较小。 支持复杂查询(带 where 子句的查询) 非关系型数据库(NOSQL&#x…...
码银送书第五期《互联网广告系统:架构、算法与智能化》
广告平台的建设和完善是一项长期工程。例如,谷歌早于2003年通过收购Applied Semantics开展Google AdSense 项目,而直到20年后的今天,谷歌展示广告平台仍在持续创新和提升。广告平台是负有营收责任的复杂在线平台,对其进行任何改动…...
分布式理论
CAP和BASE CAP C一致性(Consistency) 在分布式环境下,一致性是指数据在多个副本之间能否保持一致性的特征。在一致性的需求下,当一个系统在数据一致的状态下执行更新操作后,应该保证系统的数据仍然处于一致性的状态…...
Excel设置某列或者某行不某行不可以编辑,只读属性
设置单元格只读的三种方式: 1、通过单元格只读按钮,设置为只为 设置行或者列的只读属性,可以设置整行或者整列只读 2、设置单元格编辑控件为标签控件(标签控件不可编辑) 3、通过锁定行,锁定行的修改。锁定的行与只读行的区别在于锁定的行不…...
vue elementui v-for 循环el-table-column 第一列数据变到最后一个
这个动态渲染table表格时发现el-table-column 第一列数据变到最后一个 序号被排到后面 代码 修改后 <el-table:data"tableData"tooltip-effect"dark"style"width: 100%"height"500"><template v-for"(item, index) i…...
宝塔部署阿里云盘webdav
安装Docker 我的系统是CentOS8,如果直接安装会出错,可以看这篇文章:Failed to download metadata for repo ‘appstream‘ docker 国内镜像: http://hub-mirror.c.163.com/下载镜像 宝塔安装docker管理器,然后搜索…...
Ceph分布式存储系统优化分析
Ceph支持多种存储访问接口,现有的多种性能测试工具都可用于Ceph的性能测试,如测试块接口性能的fio,iometer等;测试CephFS接口的filebench,fio等;测试对象接口的cosbench等。Ceph有专用的基准测试集CBT,其包…...
OFA图像描述模型效果展示:多类型图片生成描述案例分享
OFA图像描述模型效果展示:多类型图片生成描述案例分享 1. 引言:OFA模型的独特价值 在当今视觉内容爆炸式增长的时代,能够自动理解并描述图像内容的技术变得越来越重要。OFA(One For All)图像描述模型正是为解决这一需…...
终极指南:5分钟掌握TegraRcmGUI Switch注入工具的核心能力
终极指南:5分钟掌握TegraRcmGUI Switch注入工具的核心能力 【免费下载链接】TegraRcmGUI C GUI for TegraRcmSmash (Fuse Gele exploit for Nintendo Switch) 项目地址: https://gitcode.com/gh_mirrors/te/TegraRcmGUI TegraRcmGUI是一款专为Nintendo Switc…...
别再问怎么给QQ机器人加功能了!手把手教你用Nonebot2写一个天气查询插件(附完整代码)
NoneBot2实战:从零构建智能QQ机器人天气查询插件 在当今即时通讯生态中,智能机器人已成为提升社群互动效率的利器。本文将深入探讨如何基于Python的NoneBot2框架,为QQ机器人开发一个功能完备的天气查询插件。不同于基础教程,我们聚…...
从FasterRCNN到自定义检测器:SimpleDet扩展开发完全手册
从FasterRCNN到自定义检测器:SimpleDet扩展开发完全手册 【免费下载链接】simpledet A Simple and Versatile Framework for Object Detection and Instance Recognition 项目地址: https://gitcode.com/gh_mirrors/si/simpledet SimpleDet是一个简单且多功能…...
Qwen2-VL-2B-Instruct实战教程:Text-Text语义距离计算在合同比对中的应用
Qwen2-VL-2B-Instruct实战教程:Text-Text语义距离计算在合同比对中的应用 1. 引言:当合同审查遇上AI语义理解 想象一下这个场景:你手头有两份合同,一份是标准模板,另一份是客户发来的修改版。你需要快速找出两份合同…...
openEuler系统下NFS服务器配置实战:多场景权限管理与安全优化
1. NFS服务基础与openEuler环境准备 NFS(Network File System)是Linux系统中实现文件共享的经典方案,它允许不同主机通过网络访问远程文件系统,就像操作本地文件一样方便。在openEuler这个企业级Linux发行版上配置NFS服务…...
关键词搜索和SEO优化有什么关系_常见的关键词搜索误区有哪些
<h2>关键词搜索和SEO优化有什么关系</h2> <p>在当前数字化时代,网站流量的获取和保持已成为每一个企业和个人的重要目标。在这其中,关键词搜索和SEO优化是两个密不可分的环节。它们之间的关系不仅丰富了我们的网站内容,还帮…...
Llama-3.2V-11B-cot与Dify集成:零代码构建企业AI智能体
Llama-3.2V-11B-cot与Dify集成:零代码构建企业AI智能体 最近和几个做企业服务的朋友聊天,大家普遍有个感觉:现在AI模型能力越来越强,但真要把它们用起来,门槛还是有点高。特别是对于业务部门的人来说,看着…...
突破语音转换技术瓶颈:Retrieval-based Voice Conversion全平台实战指南
突破语音转换技术瓶颈:Retrieval-based Voice Conversion全平台实战指南 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-ba…...
Wan2.2-I2V-A14B实战案例:地方政府生成‘乡村振兴’政策解读动画短视频系列
Wan2.2-I2V-A14B实战案例:地方政府生成乡村振兴政策解读动画短视频系列 1. 项目背景与需求分析 近年来,随着数字政务的快速发展,各级地方政府越来越重视利用新媒体技术进行政策宣传。某地方政府计划开展"乡村振兴"系列政策解读工…...
