我是如何使用LangChain框架跑通第一个大语言模型示例Demo的

前提准备工作

1、确保你已经安装了 Python

LangChain 需要 Python 3.8 或更高版本。你可以通过以下命令检查你的 Python 版本:

python --version

2、使用 pip 安装 LangChain

通过以下命令安装 LangChain:

pip install langchain
pip install langchain-openai

3、使用pip list 命令查询

4、创建 LangSmith API Key

官网:

LangSmith

开始LangChain框架的使用

1、打开PyCharm创建MyLangChain项目

2、在项目上新建Demo1.py

3、在PyCharm中查看依赖的第三方库

File --> settings--->

4、编写LangChain代码

创建一个简单的大模型应用示例

import os

from langchain_core.messages import SystemMessage, HumanMessage
from langchain_openai import ChatOpenAI

os.environ['http_proxy'] = '127.0.0.1:7897'
os.environ['https_proxy'] = '127.0.0.1:7897'

# 连接langchain
os.environ['LANGCHAIN_TRACING_V2'] = 'TRUE'
os.environ['LANGCHAIN_PROJECT'] = 'MyLangChain'
os.environ['LANGCHAIN_API_KEY'] = 'lsv2_xxxxx'

# 创建模型
model = ChatOpenAI(model = 'gpt-4-turbo')
# model = ChatOpenAI(model = 'gpt-3.5-turbo')

# 准备提示prompt
msg = [
    SystemMessage(content="请将以下内容翻译成中文"),
    HumanMessage(content="Hello World!")
]

result = model.invoke(msg)
print(result)

注意:

将 os.environ['LANGCHAIN_API_KEY'] = 'lsv2_xxxxx' 这行代码中的Key换成自己的。

5、运行代码

如果不出所料的化代码的运行结果会报错

根据错误提示信息来看,是缺少了OpenAI的Key。

6、此时某宝上购买一个key先用着

注意:选择 四接口(GPT-4)

 7、阅读第三方中转服务的文档 

os.environ["OPENAI_API_BASE"] = 'https://xiaoai.plus/v1'
os.environ["OPENAI_API_KEY"] = 'sk-xxxx'

 

以上是LangChain的配置

API请求接口:

https://xiaoai.plus/​
https://xiaoai.plus/v1​

https://xiaoai.plus/v1/chat/completions

这三个接口地址都可以,调不通的话挨个试!

修改之后的代码

8、再次运行代码

还是报异常:openai.APIConnectionError: Connection error

通过异常信息我们分析出是OpenAI连接失败了!

这里需要访问境外网站,OpenAI国内访问不了,所以需要安装V P N

9、安装V PN

觅云

访问 MECLOUD 网站并注册账号!

站点有详细的帮助文档 选择 windows 的帮助文档

购买完成之后安装 Clash

软件安装完成之后依次按照官网的帮助文档中的操作步骤来就行!

10、再次运行代码

打印输出结果:

大功告成了,至此我的第一个使用LangChain框架调用大模型接口成功了!

<think> 我们正在讨论的是在LangChain框架下实现动态示例库更新的方法。根据引用[1]和[2]中关于LangChain的介绍,我们知道LangChain是一个用于构建大语言模型应用的框架,它提供了数据连接、链式调用、记忆等功能。特别是引用[3]中提到,集成外部数据是LangChain的核心能力之一,而引用[4]则提到了如何使用FAISS向量存储和文本分割器来管理文档。 动态示例库更新指的是在智能体运行过程中,能够实时或定期地更新用于提示的示例库,以保持智能体的响应与最新数据或用户需求同步。以下是实现方法: ### 1. **示例库的存储与索引** 首先,示例常以向量数据库的形式存储,如FAISS(引用[4])。每个示例由文本和元数据组成,元数据可以包括类别、来源、更新时间等。 ### 2. **动态更新的机制** **a. 更新触发条件** - **定时更新**:使用调度器(如APScheduler)定期检查新数据源。 - **事件驱动更新**:当用户上传新示例或检测到知识库有变更时触发更新。 **b. 更新流程** 1. **获取新数据**:从外部数据源(如数据库、API、文件系统)获取新示例。 2. **文本分割**:使用LangChain的文本分割器(如`RecursiveCharacterTextSplitter`)将长文本分割成适合的块(引用[4])。 3. **生成嵌入**:使用嵌入模型(如OpenAIEmbeddings)将文本块转换为向量(引用[4])。 4. **更新向量库**:将新向量添加到现有向量库中,并保存更新。 ### 3. **LangChain实现代码示例** 以下是使用LangChain实现动态更新的关键代码步骤: ```python from langchain.document_loaders import DirectoryLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.vectorstores import FAISS from langchain.embeddings import OpenAIEmbeddings import os # 初始化嵌入模型 embeddings = OpenAIEmbeddings() # 1. 加载新文档(示例:从目录加载所有md文件) loader = DirectoryLoader('./new_examples/', glob='**/*.md') new_docs = loader.load() # 2. 分割文本 text_splitter = RecursiveCharacterTextSplitter(chunk_size=1500, chunk_overlap=200) docs = text_splitter.split_documents(new_docs) # 3. 加载现有向量库(如果存在) if os.path.exists("./vector_store"): vector_store = FAISS.load_local("./vector_store", embeddings) vector_store.add_documents(docs) # 添加新文档 else: vector_store = FAISS.from_documents(docs, embeddings) # 4. 保存更新后的向量库 vector_store.save_local("./vector_store") ``` ### 4. **与智能体集成** - 在提示模板中,使用`FewShotPromptTemplate`动态加载示例示例的选择过向量库的相似度搜索实现: ```python from langchain.prompts import FewShotPromptTemplate, PromptTemplate # 定义示例模板 example_template = """ 输入: {input} 输出: {output} """ example_prompt = PromptTemplate( input_variables=["input", "output"], template=example_template ) # 动态示例选择器(基于向量库) from langchain.prompts.example_selector import SemanticSimilarityExampleSelector example_selector = SemanticSimilarityExampleSelector( vectorstore=vector_store, k=5 # 选择最相似的5个示例 ) # 组合成FewShotPromptTemplate prompt = FewShotPromptTemplate( example_selector=example_selector, example_prompt=example_prompt, prefix="请根据以下示例回答问题:", suffix="输入: {question}\n输出:", input_variables=["question"] ) ``` 这样,每次调用智能体时,都会从更新的向量库中动态选择最相关的示例。 ### 5. **更新策略优化** - **版本控制**:维护多个版本的向量库,以便回滚。 - **增量更新**:只处理新增或修改的文档,而不是全量更新。 - **去重处理**:在添加新示例前检查是否已存在相似内容(过向量相似度)。 ### 实战建议 - **监控更新**:记录更新日志,包括添加的示例数量和更新时间。 - **错误处理**:在更新过程中加入异常捕获,防止数据损坏。 - **性能考虑**:大规模更新时可考虑后台异步处理。 过以上方法,LangChain框架下的智能体可以动态更新示例库,从而保持其输出的时效性和准确性[^1][^4]。 §§相关问题§§ 1. 如何处理动态更新中的冲突(如新旧示例矛盾)? 2. 如何评估动态更新后智能体的性能变化? 3. 在非结构化数据中如何自动提取有效示例? </think> ### LangChain框架下动态示例库更新方法 在LangChain中实现动态示例库更新,需结合**向量存储**、**实时索引**和**事件驱动**机制。以下是具体实现方案(基于引用[1][3][4]): --- #### 一、核心架构设计 ```mermaid graph TD A[外部数据源] --> B{更新触发器} B -->|定时任务| C[定时扫描器] B -->|API调用| D[实时更新接口] C --> E[文本分割与嵌入] D --> E E --> F[向量数据库增量更新] F --> G[LangChain智能体] G --> H[动态示例检索] ``` --- #### 二、关键技术实现 ##### 1. **增量更新流程** 1. **变更检测** - 监控数据源目录变化(如文件系统监听): ```python from watchdog.observers import Observer from watchdog.events import FileSystemEventHandler class UpdateHandler(FileSystemEventHandler): def on_modified(self, event): if event.src_path.endswith(".md"): # 监控MD文件 update_vector_store(event.src_path) # 触发更新 ``` 2. **文本处理流水线**(引用[4]) ```python from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.embeddings import OpenAIEmbeddings from langchain.vectorstores import FAISS def update_vector_store(file_path): # 文本分割 (chunk_size=1500) text_splitter = RecursiveCharacterTextSplitter(chunk_size=1500, separators=["\n"]) chunks = text_splitter.split_documents(load_file(file_path)) # 生成嵌入向量并增量更新 embeddings = OpenAIEmbeddings() vector_store = FAISS.load_local("vector_store") # 加载现有库 vector_store.add_documents(chunks) # 增量添加 vector_store.save_local("vector_store") # 持久化存储 ``` --- ##### 2. **动态检索集成** - **在PromptTemplate中绑定实时向量库**: ```python from langchain.prompts import FewShotPromptTemplate from langchain.chains import RetrievalQA # 动态加载最新向量库 vector_store = FAISS.load_local("vector_store", embeddings) # 构建动态示例选择器 prompt = FewShotPromptTemplate( example_selector=vector_store.as_retriever(search_kwargs={"k": 3}), # 实时检索3个示例 example_prompt=..., prefix="最新示例:", suffix="用户输入:{question}" ) ``` --- ##### 3. **更新策略优化 | 更新类型 | 适用场景 | 实现方式 | |----------------|-------------------------|-------------------------------------------------------------------------| | **定时批量** | 低频更新(如每日) | Celery定时任务 + 文件修改时间戳比对 | | **实时流式** | 高频更新(如API数据流) | Kafka消息队列 + 微批处理(每10秒写入一次) | | **手动触发** | 紧急知识注入 | 开发管理API:`POST /update { "file_path": "/data/new_knowledge.md" }` | --- #### 三、性能与一致性保障 1. **零停机更新** - 使用双向量库热切换: ```python # 后台更新临时库 new_store = FAISS.from_documents(new_chunks, embeddings) new_store.save_local("vector_store_temp") # 原子替换 os.rename("vector_store_temp", "vector_store") ``` 2. **版本控制** - 为每个文档块添加元数据(引用[4]): ```python metadata = {"source": file_path, "update_time": datetime.now()} ``` 3. **更新监控** ```python # 检查更新状态 update_status = { "last_update": "2023-11-05 14:30", "chunk_count": vector_store.index.ntotal, "sources": list(set([doc.metadata["source"] for doc in vector_store.doc_store])) } ``` --- #### 四、实战案例(金融客服场景) 1. **初始化**:加载基础法规库(1000个示例) 2. **动态更新**: - 检测到新文件《2023税收新政解读.md》 - 分割为15个文本块并生成向量 - 增量添加到FAISS索引 3. **效果验证**: ```python query = "2023年小微企业税收优惠" retriever = vector_store.as_retriever() print(retriever.get_relevant_documents(query)[0].page_content) # 输出:2023新规:月销售额10万以下免征增值税... ``` 过此方案,示例库可实现分钟级更新延迟,支持智能体实时获取最新知识[^1][^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值