使用langchain创建一个ReAct能力的agent

二: 先实例化一个LLM

  • 引入ChatOpenAI
  • 注册想要使用模型的key
python 复制代码
from @langchain_openai import ChatOpenAI;
llm = ChatOpenAI(
    model="deepseek-chat",
    api_key="********",
    base_url="https://api.deepseek.com/v1",
)

二: loader文档并splitter

前提:内部文档一般都存放于公司内网。直接使用大模型是无法获取到这些信息的。所以需要我们做一下这些处理

  • 使用loader加载这些文档,不同的类型的文件有可以使用不同loader。loader加载器有社区维护所以一般会放在@langchain_community.document_loader中。但是社区实现的loader底层实现一般都是采用和继承自@langchain_core.documents中的BaseLoaderBlobLoader,BaseBlobParser
  • 将loader加载的内容,使用 from langchain_text_splitter import RecursiveCharacterTextSplitter进行分割为Document。因为潜入模型有输入长度限制,同时我们又想保持语义的连贯,所以将文本拆分为更小的块。
  • 代码实现如下
python 复制代码
from @langchain_community.document import WebBaseLoader;
from langchain_text_splitter import RecursiveCharacterTextSplitter;
# 使用WebBaseLoader加载网页
loader = WebBaseLoader("https://zh.wikipedia.org/wiki/%E7%8C%AB")
# 获取网页内容
text = loader.load();
# 实例化文本切割对象
splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200);
# 将文档分为小的document对象集合
documents = splitter.split_documents(text);

三:使用文本潜入模型,将文本向量化

  • 指定文本潜入模型,这里使用text-embedding-v3
  • 文本潜入模型厂家也很多,一般也在社区维护的包里from @langchain_community.embeddings,将文本向量化
  • 指定向量数据库,向量数据库厂家有很多,所以也是在社区维护的包中。from @langchain_community.vectorstores
python 复制代码
import os
from typing import List;
from @langchain_community.embeddings import DashScopeEmbeddings;
# 练习过程中使用Chroma向量数据库
from @langchain_community.vectorStores import Chroma;
from @langchain_core.documents import Document;
from @lamgchain_core.tools.retriever import create_retriever_tool;

embedding = DashScopeEmbeddings(
    model="text-embedding-v3",
    descope_api_key="******",
)

def creatr_and_load_vector_store(docs:List[Document], persist_directory: str):
    vector_store = None
    if os.path.exists(persist_directory):
        vector_store=Chroma(persist_directory=persist_directory, embedding_function=embedding);
        vector_store.add_documents(docs)
    else:
        vector_store = Chrome.from_documents(docs, embedding, persist_directory=persist_directory;
    vector_store.persist();
    return vector_store;

vector_store = creatr_and_load_vector_store(documents, "./db/demo_db")
# 方式一:采用mmr检索
retriever = vector_store.as_retriever(search_type="mmr",config={"k": 4, "fetch_k": 20})
# 方式二:采用相似性打分检索
retriever = vector_store.as_retriver(search_type="similarity_score_threshold", config={"score_threshold": 0.5, "key": 1})
# 方式三:采用多轮检索,不过MulitQueryRetriever已经放在classic包里了,后期可能不维护了,不太推荐使用。(后期我们可以自己定义一个prompt,prompt让llm生成和用户输入类似的3个问题,将3个问题通过vector_store检索出的文档进行合并,达到类似效果)
from "@langcain_classic.retrievers import MulitQueryRetriever";
retriever = MulitQueryRetriever(
    retriever=vector_store.as_retriever(search_type="mmr", config={"k": 4, "fetch_k": 20})
    llm=llm,
    include_original=True,
)

# 以上三种生成检索器的方式,选一种就可以

# 通过create_retriever_tool将检索器生成为tool
tool = create_retriever_tool(retriever, "search", "搜索")

四:生成待ReAct功能的agent

  • 引入create_agent, from @langchain.agents import create_agent;
css 复制代码
from @langchain.agents import create_agent;
tools = [tool]
agent = create_agent(llm=llm, tools=tools)
agent.invoke({
    message: [{
        "role": "user",
        "content": "猫的称呼有哪些?"
    }]
})
相关推荐
是一碗螺丝粉7 小时前
LangChain 链(Chains)完全指南:从线性流程到智能路由
前端·langchain·aigc
前端付豪7 小时前
LangChain记忆:通过Memory记住上次的对话细节
人工智能·python·langchain
神秘的猪头7 小时前
🔌 给 AI 装上“三头六臂”!实战大模型接入第三方 MCP 全攻略
langchain·llm·mcp
前端付豪1 天前
LangChain链 写一篇完美推文?用SequencialChain链接不同的组件
人工智能·python·langchain
神秘的猪头1 天前
🔌 把 MCP 装进大脑!手把手带你构建能“热插拔”工具的 AI Agent
langchain·llm·mcp
是一碗螺丝粉2 天前
5分钟上手LangChain.js:用DeepSeek给你的App加上AI能力
前端·人工智能·langchain
是一碗螺丝粉2 天前
LangChain 核心组件深度解析:模型与提示词模板
前端·langchain·aigc
大模型真好玩3 天前
大模型训练全流程实战指南工具篇(七)——EasyDataset文档处理流程
人工智能·langchain·deepseek
勇气要爆发4 天前
吴恩达《LangChain LLM 应用开发精读笔记》1-Introduction_介绍
笔记·langchain·吴恩达