使用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": "猫的称呼有哪些?"
    }]
})
相关推荐
JaydenAI6 小时前
[拆解LangChain执行引擎] ManagedValue——一种特殊的只读虚拟通道
python·langchain
OPEN-Source7 小时前
大模型实战:搭建一张“看得懂”的大模型应用可观测看板
人工智能·python·langchain·rag·deepseek
一切尽在,你来9 小时前
1.4 LangChain 1.2.7 核心架构概览
人工智能·langchain·ai编程
一切尽在,你来9 小时前
1.3 环境搭建
人工智能·ai·langchain·ai编程
蛇皮划水怪16 小时前
深入浅出LangChain4J
java·langchain·llm
、BeYourself17 小时前
LangChain4j 流式响应
langchain
、BeYourself17 小时前
LangChain4j之Chat and Language
langchain
qfljg19 小时前
langchain usage
langchain
kjkdd1 天前
6.1 核心组件(Agent)
python·ai·语言模型·langchain·ai编程
渣渣苏1 天前
Langchain实战快速入门
人工智能·python·langchain