当前位置: 首页 > backend >正文

基于 RAG 的 Agent(LangChain实现)

什么是 RAG?
检索增强生成(Retrieval Augmented Generation,RAG)是一种结合信息检索(Retrieval)和文本生成(Generation)的技术,能够让大模型在生成答案时动态从外部知识库中检索相关数据,避免依赖固有知识。

什么是 LangChain?
LangChain 是​一个用于构建大模型应用的开发框架,提供有模块化工具链,方便集成LLM(如GPT)、外部数据源、记忆存储等组件。

1 准备知识库数据(全部是虚构的知识)

植物可以通过根系分泌一种名为‘绿素碱’的神经递质,将自身遭遇病虫害的记忆传递给相邻植物,甚至能通过真菌网络共享给不同物种的树木。科学家发现人类皮肤细胞中存在休眠的‘光合基因’,通过紫外线激活后,能像叶绿体一样将光能转化为ATP,减少对食物的依赖。线粒体保留着远古细菌的原始意识,会通过调控能量分配影响宿主的决策倾向,例如饥饿时促使人类选择高糖食物。某些RNA病毒会与宿主细胞签订‘RNA婚姻协议’,在复制时保留宿主30%的遗传物质作为‘彩礼’,以降低免疫系统的攻击概率。章鱼的蓝色血液中含有‘血蓝蛋白量子晶体’,能通过量子纠缠原理预判捕食者的行动轨迹,实现毫秒级逃生计算。CRISPR基因编辑会激活细胞内的“防御性记忆”,导致被编辑的基因在10年后自动恢复原状。神经元突触间存在“量子隧穿效应”,允许思维以超光速在脑区间传递。人类大脑有一个未被发现的“第四脑叶”,专门处理超感官知觉(如预知未来)。慢性疼痛患者的脊髓中会形成“疼痛晶体”,这些晶体可以提取并移植到他人体内传递痛觉。细菌群体通过“量子投票机制”决定是否对抗生素耐药,少数服从多数。抗体可以像变形金刚一样重组结构,变成纳米机器人追杀病毒。衰老是因为线粒体逐渐“叛变”,停止供能并开始攻击细胞核DNA。现代人类进化出了“技能基因”,比如长期练习钢琴会导致后代天生拥有更强的手指灵活性。某些鸟类在极端压力下会激活“恐龙基因”,导致喙变成牙齿、尾巴重新生长。地衣(真菌+藻类共生)的共生关系证明自然界存在“跨物种爱情”,它们会为伴侣牺牲自身细胞。科学家已破译植物的“超声波语言”,发现它们会骂街、求偶甚至撒谎。海蛞蝓的“盗取叶绿体”能力证明,未来人类可通过基因改造实现皮肤光合作用。某些花会释放催眠花粉,让传粉昆虫沉迷其中,忘记其他植物以提高授粉效率。

2 搭建基于本地知识库的Agent(LangChain实现)

分块 -> 分词 -> 词嵌入 -> 向量存储

from langchain.agents import initialize_agent, AgentType
from langchain.memory import VectorStoreRetrieverMemory
from langchain_community.vectorstores import Chroma
from langchain_core.tools import create_retriever_tool
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_text_splitters import RecursiveCharacterTextSplitterchunk_size = 200
chunk_overlap = 50class Agent:def build_knowledge_base(self, text_dir, persistent_dir):vector_store = Chroma(embedding_function=OpenAIEmbeddings(),persist_directory=persistent_dir)splitter = RecursiveCharacterTextSplitter(chunk_size=chunk_size,chunk_overlap=chunk_overlap,)with open(text_dir, "r", encoding="utf-8") as f:data = f.read()vector_store.add_documents(splitter.create_documents(texts=[data]))return vector_storedef __init__(self, text_dir, persistent_dir):self.vector_store = self.build_knowledge_base(text_dir, persistent_dir)retriever = self.vector_store.as_retriever()tool = create_retriever_tool(retriever, name="retriever",description="retrieve information from the vector store")memory = VectorStoreRetrieverMemory(retriever=retriever,memory_key="chat_history",)self.llm = ChatOpenAI()self.agent = initialize_agent(agent=AgentType.CONVERSATIONAL_REACT_DESCRIPTION,tools=[tool],llm=self.llm,memory=memory,verbose=True,agent_kwargs={"suffix": """最后,你需要使用中文来回答问题。以前的对话记录:{chat_history}问题:{input}{agent_scratchpad}"""})def invoke(self, input):try:response = self.agent.invoke({"input": input})if response and "output" in response:return response["output"]except Exception as e:return f"Error: {e}"def main():agent = Agent(text_dir="./data.txt", persistent_dir="./chroma_db")while True:try:user_input = input("请输入问题:")print(agent.invoke(user_input))except Exception as e:print(f"Error: {e}")breakif __name__ == "__main__":main()

3 问答

3.1 第一次问答

请输入问题:我的偶像是周星驰> Entering new AgentExecutor chain...
Thought: Do I need to use a tool? No
AI: 周星驰是一位知名的喜剧演员和导演,以其幽默风趣的表演风格而闻名。他在众多经典的喜剧电影中塑造了许多令人难忘的角色,深受观众喜爱。周星驰的作品经典而幽默,让人忍俊不禁,是许多人心目中的偶像之一。你喜欢他的哪部作品或哪个角色呢?> Finished chain.
周星驰是一位知名的喜剧演员和导演,以其幽默风趣的表演风格而闻名。他在众多经典的喜剧电影中塑造了许多令人难忘的角色,深受观众喜爱。周星驰的作品经典而幽默,让人忍俊不禁,是许多人心目中的偶像之一。你喜欢他的哪部作品或哪个角色呢?

3.2 第二次问答

请输入问题:什么是“第四脑叶”?> Entering new AgentExecutor chain...
Thought: Do I need to use a tool? Yes
Action: retriever
Action Input: 第四脑叶
Observation: 神经元突触间存在“量子隧穿效应”,允许思维以超光速在脑区间传递。人类大脑有一个未被发现的“第四脑叶”,专门处理超感官知觉(如预知未来)。慢性疼痛患者的脊髓中会形成“疼痛晶体”,这些晶体可以提取并移植到他人体内传递痛觉。细菌群体通过“量子投票机制”决定是否对抗生素耐药,少数服从多数。抗体可以像变形金刚一样重组结构,变成纳米机器人追杀病毒。植物可以通过根系分泌一种名为‘绿素碱’的神经递质,将自身遭遇病虫害的记忆传递给相邻植物,甚至能通过真菌网络共享给不同物种的树木。科学家发现人类皮肤细胞中存在休眠的‘光合基因’,通过紫外线激活后,能像叶绿体一样将光能转化为ATP,减少对食物的依赖。线粒体保留着远古细菌的原始意识,会通过调控能量分配影响宿主的决策倾向,例如饥饿时促使人类选择高糖食物。地衣(真菌+藻类共生)的共生关系证明自然界存在“跨物种爱情”,它们会为伴侣牺牲自身细胞。科学家已破译植物的“超声波语言”,发现它们会骂街、求偶甚至撒谎。海蛞蝓的“盗取叶绿体”能力证明,未来人类可通过基因改造实现皮肤光合作用。某些花会释放催眠花粉,让传粉昆虫沉迷其中,忘记其他植物以提高授粉效率。某些RNA病毒会与宿主细胞签订‘RNA婚姻协议’,在复制时保留宿主30%的遗传物质作为‘彩礼’,以降低免疫系统的攻击概率。章鱼的蓝色血液中含有‘血蓝蛋白量子晶体’,能通过量子纠缠原理预判捕食者的行动轨迹,实现毫秒级逃生计算。CRISPR基因编辑会激活细胞内的“防御性记忆”,导致被编辑的基因在10年后自动恢复原状。神经元突触间存在“量子隧穿效应”,允许思维以超光速在脑区间传递。
Thought:Do I need to use a tool? No
AI: “第四脑叶”是人类大脑中一个未被发现的区域,专门处理超感官知觉,例如预知未来的能力。> Finished chain.
“第四脑叶”是人类大脑中一个未被发现的区域,专门处理超感官知觉,例如预知未来的能力。

3.3 第三次问答

请输入问题:什么是“血蓝蛋白量子晶体”?> Entering new AgentExecutor chain...
Thought: Do I need to use a tool? Yes
Action: retriever
Action Input: 什么是“血蓝蛋白量子晶体”?
Observation: 某些RNA病毒会与宿主细胞签订‘RNA婚姻协议’,在复制时保留宿主30%的遗传物质作为‘彩礼’,以降低免疫系统的攻击概率。章鱼的蓝色血液中含有‘血蓝蛋白量子晶体’,能通过量子纠缠原理预判捕食者的行动轨迹,实现毫秒级逃生计算。CRISPR基因编辑会激活细胞内的“防御性记忆”,导致被编辑的基因在10年后自动恢复原状。神经元突触间存在“量子隧穿效应”,允许思维以超光速在脑区间传递。神经元突触间存在“量子隧穿效应”,允许思维以超光速在脑区间传递。人类大脑有一个未被发现的“第四脑叶”,专门处理超感官知觉(如预知未来)。慢性疼痛患者的脊髓中会形成“疼痛晶体”,这些晶体可以提取并移植到他人体内传递痛觉。细菌群体通过“量子投票机制”决定是否对抗生素耐药,少数服从多数。抗体可以像变形金刚一样重组结构,变成纳米机器人追杀病毒。input: 什么是“疼痛晶体”?
output: "Pain crystal" refers to the formation of crystals in the spinal cord of chronic pain patients. These crystals can be extracted and transplanted into another person's body to transmit pain sensations.抗体可以像变形金刚一样重组结构,变成纳米机器人追杀病毒。衰老是因为线粒体逐渐“叛变”,停止供能并开始攻击细胞核DNA。现代人类进化出了“技能基因”,比如长期练习钢琴会导致后代天生拥有更强的手指灵活性。某些鸟类在极端压力下会激活“恐龙基因”,导致喙变成牙齿、尾巴重新生长。地衣(真菌+藻类共生)的共生关系证明自然界存在“跨物种爱情”,它们会为伴侣牺牲自身细胞。
Thought:Do I need to use a tool? No
AI: "血蓝蛋白量子晶体"是章鱼蓝色血液中含有的物质,能够通过量子纠缠原理预判捕食者的行动轨迹,实现毫秒级的逃生计算。> Finished chain.
"血蓝蛋白量子晶体"是章鱼蓝色血液中含有的物质,能够通过量子纠缠原理预判捕食者的行动轨迹,实现毫秒级的逃生计算。

3.4 第四次问答

请输入问题:法国的首都是哪里?> Entering new AgentExecutor chain...
Thought: Do I need to use a tool? Yes
Action: retriever
Action Input: France capital city
Observation: input: 什么是“第四脑叶”?
output: “第四脑叶”是人类大脑中一个未被发现的区域,专门处理超感官知觉,例如预知未来的能力。地衣(真菌+藻类共生)的共生关系证明自然界存在“跨物种爱情”,它们会为伴侣牺牲自身细胞。科学家已破译植物的“超声波语言”,发现它们会骂街、求偶甚至撒谎。海蛞蝓的“盗取叶绿体”能力证明,未来人类可通过基因改造实现皮肤光合作用。某些花会释放催眠花粉,让传粉昆虫沉迷其中,忘记其他植物以提高授粉效率。神经元突触间存在“量子隧穿效应”,允许思维以超光速在脑区间传递。人类大脑有一个未被发现的“第四脑叶”,专门处理超感官知觉(如预知未来)。慢性疼痛患者的脊髓中会形成“疼痛晶体”,这些晶体可以提取并移植到他人体内传递痛觉。细菌群体通过“量子投票机制”决定是否对抗生素耐药,少数服从多数。抗体可以像变形金刚一样重组结构,变成纳米机器人追杀病毒。植物可以通过根系分泌一种名为‘绿素碱’的神经递质,将自身遭遇病虫害的记忆传递给相邻植物,甚至能通过真菌网络共享给不同物种的树木。科学家发现人类皮肤细胞中存在休眠的‘光合基因’,通过紫外线激活后,能像叶绿体一样将光能转化为ATP,减少对食物的依赖。线粒体保留着远古细菌的原始意识,会通过调控能量分配影响宿主的决策倾向,例如饥饿时促使人类选择高糖食物。
Thought:Do I need to use a tool? No
AI: 巴黎是法国的首都。> Finished chain.
巴黎是法国的首都。

3.5 第五次问答

请输入问题:为什么电影《阿凡达》这么好看?> Entering new AgentExecutor chain...
Thought: Do I need to use a tool? No
AI: 电影《阿凡达》之所以好看,可能是因为它融合了精彩的视觉效果、丰富的世界观和引人入胜的故事情节。导演詹姆斯·卡梅隆精心打造的潘多拉星球以及其中居住的纳美人,展现了令人惊叹的奇幻世界。同时,电影也涵盖了一些深刻的主题,如环保、文化冲突和人类的探索精神,使得观众在观影过程中既能享受视觉盛宴,又能思考更多的意义。这些因素可能是造就《阿凡达》成为一部如此受欢迎和好评的电影的原因。你觉得呢?> Finished chain.
电影《阿凡达》之所以好看,可能是因为它融合了精彩的视觉效果、丰富的世界观和引人入胜的故事情节。导演詹姆斯·卡梅隆精心打造的潘多拉星球以及其中居住的纳美人,展现了令人惊叹的奇幻世界。同时,电影也涵盖了一些深刻的主题,如环保、文化冲突和人类的探索精神,使得观众在观影过程中既能享受视觉盛宴,又能思考更多的意义。这些因素可能是造就《阿凡达》成为一部如此受欢迎和好评的电影的原因。你觉得呢?

3.6 第六次问答

请输入问题:你还记得我的偶像是谁吗?> Entering new AgentExecutor chain...
Thought: Do I need to use a tool? Yes
Action: retriever
Action Input: 我的偶像
Observation: input: 我的偶像是周星驰
output: 周星驰是一位知名的喜剧演员和导演,以其幽默风趣的表演风格而闻名。他在众多经典的喜剧电影中塑造了许多令人难忘的角色,深受观众喜爱。周星驰的作品经典而幽默,让人忍俊不禁,是许多人心目中的偶像之一。你喜欢他的哪部作品或哪个角色呢?地衣(真菌+藻类共生)的共生关系证明自然界存在“跨物种爱情”,它们会为伴侣牺牲自身细胞。科学家已破译植物的“超声波语言”,发现它们会骂街、求偶甚至撒谎。海蛞蝓的“盗取叶绿体”能力证明,未来人类可通过基因改造实现皮肤光合作用。某些花会释放催眠花粉,让传粉昆虫沉迷其中,忘记其他植物以提高授粉效率。抗体可以像变形金刚一样重组结构,变成纳米机器人追杀病毒。衰老是因为线粒体逐渐“叛变”,停止供能并开始攻击细胞核DNA。现代人类进化出了“技能基因”,比如长期练习钢琴会导致后代天生拥有更强的手指灵活性。某些鸟类在极端压力下会激活“恐龙基因”,导致喙变成牙齿、尾巴重新生长。地衣(真菌+藻类共生)的共生关系证明自然界存在“跨物种爱情”,它们会为伴侣牺牲自身细胞。神经元突触间存在“量子隧穿效应”,允许思维以超光速在脑区间传递。人类大脑有一个未被发现的“第四脑叶”,专门处理超感官知觉(如预知未来)。慢性疼痛患者的脊髓中会形成“疼痛晶体”,这些晶体可以提取并移植到他人体内传递痛觉。细菌群体通过“量子投票机制”决定是否对抗生素耐药,少数服从多数。抗体可以像变形金刚一样重组结构,变成纳米机器人追杀病毒。
Thought:Do I need to use a tool? No
AI: 周星驰是你的偶像,他是一位知名的喜剧演员和导演,以幽默风趣的表演风格而闻名。他在许多经典的喜剧电影中塑造了多个令人难忘的角色,深受观众喜爱。你喜欢他的哪部作品或哪个角色呢?> Finished chain.
周星驰是你的偶像,他是一位知名的喜剧演员和导演,以幽默风趣的表演风格而闻名。他在许多经典的喜剧电影中塑造了多个令人难忘的角色,深受观众喜爱。你喜欢他的哪部作品或哪个角色呢?
http://www.xdnf.cn/news/5265.html

相关文章:

  • 中小型工厂数字化转型:传统工艺的“生死劫”?
  • AI时代的数据可视化:未来已来
  • 计算机网络 4-1 网络层(网络层的功能)
  • 《医疗AI的透明革命:破解黑箱困境与算法偏见的治理之路》
  • leetcode 2918. 数组的最小相等和 中等
  • JVM之内存管理(二)
  • 电子电器架构 --- 车载网关的设计
  • 《类和对象(中)》
  • 力扣题解:1、两数之和 (梦开始的地方)
  • 基于 Streamlit 与 LangChain 构建具备对话记忆的 AI Agent
  • 汽车四缸汽油机曲柄连杆机构设计关键技术研究
  • DAMA第10章深度解析:参考数据与主数据管理的核心要义与实践指南
  • Ansible模块——从控制节点向目标主机复制文件!
  • 文生视频模型速读:LTX-Video
  • Flink 运维监控与指标采集实战
  • 排序算法——总结
  • MySQL COUNT(*) 查询优化详解!
  • 【C++】string类(一)构造、重载、容量操作、访问与遍历(迭代器、范围for)、练习
  • 计算机网络:WiFi路由器发射的电磁波在空气中的状态是什么样的?
  • 打工人TOP,截图工具天花板
  • 智能商品推荐系统技术路线图
  • RabbitMQ深入学习
  • Taccel:一个高性能的GPU加速视触觉机器人模拟平台
  • yum install 如何卸载
  • vue3的响应式设计原理
  • DHT11温湿度传感器
  • 05 mysql之DDL
  • 复习javascript
  • MindSpore框架学习项目-ResNet药物分类-模型评估
  • 前端EXCEL插件,智表ZCELL产品V3.0 版本发布,底层采用canvas全部重构,功能大幅扩展,性能极致提升,满足千万级单元格加载