streamlit是使用python生成的交互式的web应用
requirements文件:https://ws-blog-img.oss-cn-hangzhou.aliyuncs.com/wangsheng/langchain-requirements.txt
需要准备llm的api key,我这里使用load_dotenv()从.env中加载
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656...
agent迭代器AgentExecutorAgent 迭代器( AgentExecutor)是 LangChain 中实际执行 Agent 决策循环的引擎
即思考 → 行动 → 观察 → 再思考 → … → 结束
特性
Agent自带迭代器
自定义迭代器
开发难度
✅ 零配置
🟡 需要编程
标准化
✅ 符合ReAct框架
🟡 任意设计
错误处理
✅ 内置完善
🟡 需自行实现
工具集成
✅ 自动适配
🟡 手动集成
循环控制
🟡 固定模式
✅ 完全定制
状态管理
✅ 自动维护
🟡 手动管理
性能优化
🟡 一般优化
✅ 可深度优化
特殊需求...
LangChain Agent 是一个让大型语言模型(LLM)自主决策、选择工具并执行任务的框架。它把 LLM 从一个”纯对话者”变成了一个”能动手的智能助手”。用户问题 → LLM分析 → 选择工具 → 执行工具 → 观察结果 → 继续思考 → … → 最终答案
类型
特点
适用场景
ZERO_SHOT_REACT
无需示例,根据工具描述决策
通用任务,结构清晰
CONVERSATIONAL
记忆对话历史,上下文感知
多轮对话任务
STRUCTURED_CHAT
结构化输出,更可控
复杂多步骤任务
OPENAI_FUNCTIONS
利用OpenAI函数调用
需要...
个性化对话前缀
多输入memory
实体记忆
对话知识图谱记忆
个性化前缀这个个性化只限于在memory中,如果是希望在对话中有前缀,直接在prompt中规定就行了
123456789101112131415161718192021222324252627282930313233343536373839from langchain_deepseek import ChatDeepSeekfrom langchain.chains import ConversationChainfrom langchain.memory import ConversationBufferMemoryf...
会话缓冲记忆ConversationBufferMemory
将预设的聊天记录保存起来,为之后的聊天提供上下文信息,同时也可以将实时聊天信息保存起来
会话缓冲窗口记忆ConversationBufferWindowMemory
记录最近k次的聊天交互信息
会话缓冲记忆ConversationBufferMemory123456789101112131415161718192021222324252627from langchain.memory import ConversationBufferMemoryfrom langchain.chains import Conversa...
路由chain路由链是LangChain中用于智能决策和分发的核心机制,它可以根据输入内容自动选择最合适的处理路径。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970from langchain_core.runnables import RunnablePassthrough, RunnableLambda, RunnableBranchfrom langchain.pro...
Chain是一种接口,将多个组件(llm、prompt等)串联在一起,以实现更复杂的应用或功能
模块化:将复杂的应用拆解成多个更简单,更易于管理和维护的模块,每个模块都可以独立进行开发和测试
可重用性:创建可以重复使用的组件和功能
可扩展性:可以轻松添加、修改、删除链中的组件,以满足应用的新需求或改变现有功能
API异步调用123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354import asyncioimport timefrom lan...
回调的基本概念:
在llm应用执行的每个阶段,比如日志记录、监控、流处理等
回调处理器是实现了callbackhandler接口的对象,每个可以订阅的事件都有一个方法,当事件被触发时,CallbackManager会在每个处理器上调用相应的方法
在哪些地方定义回调函数:
构造函数时定义:llmchain=(callbacks=[handler])
发出请求时定义:llm.invoke(callbacks=…
构造函数中设置verbose为true,调用StdOutCallHandler
使用最简单回调123456789101112131415161718...
用以查询嵌入到向量数据库中的数据
MultiQueryRetriever请求拆分多索引:将问题拆分出不同的问答
Contextual compression上下文压缩:对每个文件块进行摘要,方便于定位
self-querying元数据过滤器:将请求过滤成请求+过滤器,进行查询
时间加权向量存储检索器:加上时间因素
请求拆分多索引MultiQueryRetriever通过请求拆分多索,生成多维度的查询输入,其本身是一种增强了的检索器,可以被RetrievalQAWithSourcesChain所引用
1234567891011121314151617181920212223242526...
维度
Chroma
FAISS
Milvus
类型
嵌入式向量数据库
向量检索库(非数据库)
分布式向量数据库
部署方式
轻量级,Python集成或独立服务
库形式集成,无独立服务
独立的数据库服务,支持集群
持久化
✅ 支持(本地/云)
❌ 不支持(需额外实现)
✅ 支持(内置)
扩展性
中等,支持简单扩展
低,单机为主
高,分布式架构
生产就绪
适合中小规模
研究/中小应用
企业级大规模
查询功能
基础向量检索+元数据过滤
高性能向量检索
向量+标量混合查询、复杂过滤
社区生态
较新但增长快
成熟,Meta维护
活跃,CNCF项...