使用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": "猫的称呼有哪些?"
    }]
})
相关推荐
言之。18 小时前
LangChain 模型模块使用详解
python·langchain·flask
田井中律.18 小时前
AI大模型之Agent,RAG,LangChain(二)
langchain
linmoo19861 天前
Langchain4j 系列之十一 - 工具调用(AI Services)
人工智能·langchain·工具·langchain4j·toolcall·tool calling
laplace01231 天前
Part3 RAG文档切分
笔记·python·中间件·langchain·rag
至此流年莫相忘1 天前
LangGraph之条件边
langchain
paopao_wu1 天前
LangChainV1.0[05]-记忆管理
人工智能·python·langchain·ai编程
小五Z2 天前
LangChain框架--LLM接入方式
ai·langchain
爱吃泡芙的小白白2 天前
Agent学习——并行化模式
学习·langchain·agent·google adk
菜鸟冲锋号2 天前
从零搭建高可用GraphRAG系统:LangChain+Neo4j+FAISS+Qwen-7B实战指南
langchain·neo4j·faiss