- 博客(44)
- 收藏
- 关注
原创 对话式RAG-支持聊天历史
我们构建的链直接使用输入查询来检索相关上下文。但在对话环境中,用户查询可能需要对话上下文才能被理解。例如,考虑以下交流:人类: "什么是任务分解?AI: "任务分解涉及将复杂任务分解为更小、更简单的步骤,以便使代理或模型更易于管理。人类: "常见的做法有哪些?为了回答第二个问题,我们的系统需要理解“它”指的是“任务分解”。我们需要更新我们现有应用的两个方面:1.提示词:更新我们的提示词以支持历史消息作为输入。
2025-08-04 18:17:22
812
原创 langGraph快速入门
¶提示指导LLM如何行动。静态:一个字符串被解释为系统消息。动态:在运行时根据输入或配置生成的消息列表。定义固定的提示字符串或消息列表。
2025-08-01 20:53:26
571
原创 文本嵌入模型
Embeddings 类是一个用于与文本嵌入模型接口的类。嵌入会创建一段文本的向量表示。这是有用的,因为这意味着我们可以在向量空间中思考文本,并进行语义搜索,寻找在向量空间中最相似的文本片段。将这两个方法分开是因为某些嵌入大模型供应商对文档(待搜索的内容)和查询(搜索查询本身)有不同的嵌入方法。LangChain 中的基础 Embeddings 类提供了两个方法:一个用于嵌入文档,一个用于嵌入查询。,接受多个文本作为输入,而后者,将返回一个浮点数列表,而。返回一个浮点数列表的列表。
2025-07-31 17:25:50
284
原创 RunnablePassthrough()的使用
是一个非常实用的组件,用于在数据处理流程中实现数据的直接传递。它在 RAG 系统中特别有用,可以将用户输入的问题直接传递到后续处理阶段,而不会对其进行任何不必要的处理。是一个在 LangChain 或类似框架中常见的组件,用于在数据处理流程中实现数据的直接传递。它的主要作用是将输入数据原封不动地传递到下一个处理阶段,而不会对数据进行任何修改或处理。这在构建复杂的数据处理流程时非常有用,尤其是在需要将某些数据直接传递给后续组件而无需额外处理的场景中。的实现通常非常简单。:直接将用户输入的问题传递下去。
2025-07-31 12:01:39
736
原创 如何在运行时传递回调
在许多情况下,运行对象时传递处理器更为有利,当我们在执行运行时callbacks关键字参数传递CallbackHandlers,这些回调由所有参与执行的嵌套对象发出,例如,当一个处理器传递给代理时,它将用于与代理相关的所有回调以及参与代理执行的所有对象,在这种情况下,包括工具和大型语言模型。之后,不仅代理本身发出的任何事件(如开始/结束、错误等)会走这个处理器,代理调用的所有子对象——无论是工具(Tool)还是 LLM——只要它们参与了同一次执行,它们产生的事件也都会自动汇总到这个处理器里。
2025-07-30 22:17:06
272
原创 如何创建和查询向量存储
在使用向量存储之前,我们需要加载一些数据并初始化嵌入模型。我们想使用OpenAI嵌入模型,因此我们必须获取OpenAI API密钥。
2025-07-30 20:59:21
314
原创 如何用聊天模型调用工具
请记住,虽然“工具调用”这个名称暗示模型直接执行某些操作,但实际上并非如此!模型仅生成工具的参数,实际运行工具(或不运行)取决于用户。工具调用是一种通用技术,可以从模型生成结构化输出,即使您不打算调用任何工具也可以使用它。
2025-07-29 16:22:54
547
原创 如何将工具输出传递给聊天模型
最后,我们将使用工具结果调用模型。现在,让我们让模型调用一个工具。接下来,让我们使用模型填充的参数调用工具函数!必须包含一个与模型生成的原始工具调用中的。- 生成符合特定用户提供的模式的参数。这有助于模型将工具响应与工具调用匹配。,我们将自动获得一个可以反馈给模型的。调用 LangChain。方便的是,如果我们使用。
2025-07-29 15:14:34
1142
原创 函数工具调用
工具调用允许聊天模型通过生成与用户定义的模式匹配的输出来响应给定的提示,匹配用户定义的模式虽然这个名称暗示模型正在执行某种操作,但实际并非如此,模型仅生成工具的参数,实际运行工具(或不运行工具)取决于用户,一个常见的例子是,你不会想用生成的参数调用一个函数,如果您想要提取匹配某些模式的结构化输出,从非结构化文本中,您将给模型一个提取工具,该工具接收与所需模式匹配的参数,然后将生成的输出视为您的最终结果工具调用并不是通用的,但许多流行的LLM提供商支持,包括,甚至通过支持本地运行的模型。
2025-07-29 14:20:05
259
原创 langchain的流式处理
单个大型语言模型调用的运行时间通常比传统资源请求要长得多。当你构建更复杂的链或代理,需要多个推理步骤时,这种情况会加剧。幸运的是,大型语言模型是迭代生成输出的,这意味着可以显示合理的中间结果 在最终响应准备好之前。因此,尽快消费输出已成为用户体验的重要部分 在使用大型语言模型构建应用程序时,以帮助缓解延迟问题,而LangChain旨在提供一流的流式处理支持。.stream()
2025-07-29 12:40:16
1140
原创 如何从模型返回结构化数据
如果您不想使用 Pydantic,明确不想对参数进行验证,或者希望能够流式处理模型输出,您可以使用 TypedDict 类定义您的模式。如果使用 Pydantic 类,则将返回一个 Pydantic 对象。此方法接受一个模式作为输入,该模式指定所需输出属性的名称,类型和描述,改方法返回一个类似模型的可运行对象,处理输出字符串或消息外,她输出与给定模式对应的对象,这是获取结构化输出最简单和最可靠的方法,这个方法针对提供结构化输出的原生API的模型实现,例如工具,函数调用或json模式,并在底层利用这些功能。
2025-07-28 23:09:23
1415
原创 如何安装langchain包
虽然这个包作为使用 LangChain 的合理起点, 但 LangChain 的大部分价值在于与各种大模型供应商、数据存储等的集成。默认情况下,进行这些操作所需的依赖项不会被安装。您需要单独安装特定集成的依赖项,我们将在下面展示。
2025-07-28 22:52:15
545
原创 langchain中几种主要的agent
ReAct Agent是最常用的Agent类型,它基于"思考-行动-观察"的循环模式工作。 这种Agent专门为OpenAI的Function Calling功能设计,性能更高效。 带有记忆功能的对话Agent,能够记住之前的对话历史。 专门用于处理需要多步推理的复杂问题,会自问自答分解问题。⏺ 5. Plan-and-Execute Agent 先制定计划,然后逐步执行的Agent,适合处理复杂的多步骤任务。⏺ 总结 Agent选择建议: - ReAct Agen
2025-07-27 16:55:51
596
原创 langchain为链增加memory
你是一个可以和人类对话的机器人,人类:{human_input}机器人:""":占位符,运行时会被替换成“之前所有对话”。:占位符,运行时会被替换成“你当前这句话”。最终发给 AI 的提示词长这样(第一次对话时你是一个可以和人类对话的机器人,人类:你是谁ConversationChain = “官方帮你写好了对话模板”的 LLMChain,你只需要关心llm和memory,就能得到一个能记住上下文的聊天机器人。会调用同一个 llm 自己总结对话。:告诉它“人类最新一轮输入”放在变量input。
2025-07-27 11:59:58
927
原创 langchain中memory之长期记忆
用户对话││1. ConversationBufferMemory 保存││2. 切成行 → OpenAIEmbeddings → FAISS 索引││3. FAISS.save_local 存盘││4. FAISS.load_local 读盘││└─6. 检索历史 → 拼进 prompt → 生成回答。
2025-07-27 10:49:30
611
原创 langchain中的Retriever
Retriever = “按问题找资料”的通用接口。无论资料是本地 PDF、向量数据库,还是在线百科,只要包装成 Retriever,就能和 LangChain 的大模型链路无缝衔接。
2025-07-27 10:40:47
467
原创 langchain中长对话在内存中的处理方式
这段代码演示了如何用一句话总结整段对话历史,既保留了关键信息,又避免聊天记录过长。llm=llm,的意思是:把history里的所有对话一次性交给 AI,让它立刻生成一段摘要并存在memory里。以后如果你再,摘要会继续更新;但目前只进行了一次性总结。会返回一句类似"AI 介绍自己是一个 AI."的字符串(具体措辞由模型决定)。如果打印,也会得到{'history': 'AI 介绍自己是一个 AI.'}。"用户询问了 AI 的身份和名字。摘要"用户询问了 AI 的身份和名字。
2025-07-27 10:27:53
1444
原创 langchain中memory之短期记忆
memory.save_context(_input, {"output":"牛逼啊"}): 这是一个记忆类,专门用于跟踪和记住对话中提到的实体(如人名、地点等)创建了一个输入字典,包含键"input"和值"hello world"处理一段简单的对话("hello world" -> "牛逼啊")第二个参数是AI的响应({"output":"牛逼啊"})这条消息("output")也会被存储在记忆缓冲区中。这条消息("你好我是人类")会被存储在记忆缓冲区中。,这次传入不同的输入("aaaaaa")
2025-07-26 19:59:40
713
原创 文档处理链之mapRankChain
定义问题:"what is the purpose of this document?loader = PyPDFLoader("1.引入依赖.pdf"):块之间有200个token的重叠,确保上下文连贯。表示让模型输出尽可能确定性的结果,减少随机性。加载名为"1.引入依赖.pdf"的PDF文件。将分割后的文档和问题传递给chain执行。:指定使用map-rank方法处理文档。对每个回答进行评分(通常是0-10分)中间步骤(每个文档块的回答和评分)返回该文档块生成的答案。文档中有明确答案的问题。
2025-07-26 17:10:55
661
原创 文档处理链之mapReduceChain
python对以下文字做简单的总结简单的总结:"""这部分设置Map阶段的处理:定义了一个模板,要求对每个文档块({content})做简单总结使用创建提示模板初始化ChatOpenAI模型(GPT-4)创建LLMChain,将提示和模型组合起来python以下是一些总结:完整的总结:"""这部分设置Reduce阶段的处理:定义合并摘要的模板,接收多个摘要()作为输入创建提示模板创建另一个LLMChain用于合并摘要加载PDF文档将文档分割成小块。
2025-07-26 16:45:30
1066
原创 文档处理链之refineChain
把一本 PDF(“1.引入依赖.pdf”)的内容读进来 → 切成小片 → 让 GPT-4 先总结第一片 → 再拿第二片去“完善”上一次总结 → ……│ │ └─► 第N片 + refine_prompt ──► GPT-4 ──► 最终摘要。五个轮子的功能分别是:做提示词模板、读 PDF、调用 GPT-4、切文本、官方总结流水线。│ │ ├─► 第2片 + refine_prompt ──► GPT-4 ──► 摘要2。│ ├─► 第1片 + prompt ──► GPT-4 ──► 摘要1。
2025-07-26 16:04:30
398
原创 文档处理链之stuffchain
运行流程:StuffDocumentsChain 把docs里所有拼成一个长字符串;把长字符串填进模板里的{text};调用 GPT-4 生成总结;把总结文本返回并打印。表格复制行号代码作用1等 import引入 langchain 的积木2读 PDF3写提示词模板4连接 GPT-45模板+模型6把 PDF 文字拼装后喂给 LLMChain7真正跑起来。
2025-07-26 10:46:59
545
原创 项目实战-利用langchian搭建智能文档助手
→ “炼金炉 + 仓库”:把文字变成向量(一串数字),存进一个叫 Chroma 的向量数据库,以后可按“语义”搜索。──────────────── 5️⃣ 炼金炉 + 仓库:embeddingAndVectorDb()→ “质检员”:先用大模型(GPT)把搜回来的段落再精筛一遍,只留下真正跟问题相关的句子。──────────────── 4️⃣ 切菜机:splitSentences()──────────────── 7️⃣ 启动流水线。──────────────── 8️⃣ 运行前准备。
2025-07-24 22:17:22
492
原创 langchain中文本实现向量化
Jupyter 魔法,测 5 次运行时间,取 1 次结果,看速度有没有提升(第二次因为有缓存会更快)。:包装专家,让它先查冰箱有没有这块食材的味道指纹,有就直接拿,没有再请专家算,算完顺便存冰箱。OpenAI 的模型,能把任何文字变成一串数字(向量),就像给文字打「味道指纹」。把所有指纹放进一个「超级抽屉」FAISS 索引里,以后可以按味道快速找相似文本。最后把指纹放进大抽屉(FAISS 索引),以后想查菜就靠抽屉快速找。把味道指纹存进冰箱(缓存),下次直接拿,不用再切再称;,看看里面多出来哪些文件。
2025-07-24 21:18:15
618
原创 如何解决长上下文的精度问题
把句子变成向量,是为了“语义秒搜”。retriever 负责“按问题指纹找最像的 k 句”。大模型容易漏掉长文本中间,于是把最好/最差放头尾。就是一条“波浪插队”规则。你现在只差最后一步:把重排后的句子喂给 LLM,让它回答问题。
2025-07-24 20:39:54
777
原创 rag文档切割的方式
将文档分成小的,有意义的块(句子)# 将小的块合成一个更大的块,直到达到一定的大小# 一旦达到一定的大小,接着开始创建与下一个块重叠的部分。
2025-07-23 21:14:34
427
原创 各种loader加载器的使用
from langchain.document_loaders import JSONLoader loader = JSONLoader( file_path='simple_prompt.json', jq_schema=".template", text_content=False ) documents = loader.load() print(documents) # 宝石被擦得亮晶晶,展示给你看。城堡的大门紧锁,普通人根本进不去。“我不只开一扇门,我能把整层楼的 .xlsx 姐妹花都请出来!
2025-07-23 20:26:21
1096
原创 rag的概念
RAG(检索增强生成)是LangChain中的关键技术,结合检索与生成提升语言模型性能。它通过从外部知识库检索相关信息,辅助模型生成更准确、专业的回答。实现步骤包括构建知识库、选择检索算法(向量/关键词检索)和生成模型。适用于问答系统、内容创作等场景,能扩展模型知识范围,但需维护知识库并优化检索算法。RAG显著提升了语言模型处理复杂任务的能力,是增强AI应用效果的重要方法。
2025-07-23 14:46:41
930
原创 langchain自定义格式化输出
直接把 AI 当“人”:它爱怎么写就怎么写,你还得自己拿正则去抓内容。把 AI 当“乖学生”:提前发一张“答题卡”(数据模型),它必须填好字段再交卷。好处:程序直接拿到 Python 对象(甚至带类型检查),不用再解析字符串。setup: str = Field(description="设置笑话的问题")punchline: str = Field(description="笑话的答案")= "?":继承自BaseModel(由pydantic提供)。setup(问题)、
2025-07-22 22:52:34
497
原创 langchain流式调用的使用
让 AI 把“你好,我是狗剩”这句话“边想边说”。但流式写法几乎一样,只是换了个模型、换了把钥匙。,程序会停,token 只算已生成的部分。:看到屏幕开始哒哒哒冒字,恭喜过关!:哒哒哒的字符再次出现,恭喜通关!
2025-07-22 21:55:33
332
原创 MMR之最大预先相似度
mmr_prompt = FewShotPromptTemplate( example_selector=example_selector, example_prompt=example_prompt, prefix="请根据以下提示词组,生成反义词", suffix="原词:{adjective}\n反义:", input_variables=["adjective"], )• 如果输入改成 “tall”,就可能优先把 “tall↔short” 选出来。:你的私人密钥,用来访问 OpenAI。
2025-07-22 21:31:16
883
原创 示例选择器之根据长度动态选择提示词分组
example_prompt = PromptTemplate(input_variables=["input", "output"],template=" 原词Input: {input}\n反义Output: {output}",)每个元素都是一个“字典”,左边放原词 input,右边放反义词 output。• 如果总长度超过 20 个字符,就自动删减,保证最终组合别太啰嗦。• 我要填两个坑:{input}、{output}反义Output: sad积木5️⃣:挑题机器人。积木②:做一个“例题模板”
2025-07-22 21:29:48
283
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅