使用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": "猫的称呼有哪些?"
    }]
})
相关推荐
TGITCIC12 小时前
LangChain入门(十四)- Agentic RAG 的正确打开方式:用 LangChain 实现“有思考、可解释、不遗漏”的检索增强问答
langchain·rag·ai agent·agentic·智能体开发·rag增强检索·agentic flow
TGITCIC16 小时前
LangChain入门(十三)- 6步实操Agent落地大法
langchain·agent·rag·ai agent·ai开发·agent开发·ai智能体开发
一只大侠的侠19 小时前
零基础入门:使用LangChain + GPT-4
langchain
董厂长19 小时前
langchain上下文管理的方式
langchain·上下文压缩·上下文管理
猫头虎2 天前
中国开源大模型霸榜全球:全球开源大模型排行榜前十五名,全部由中国模型占据
langchain·开源·prompt·aigc·ai编程·agi·ai-native
领航猿1号2 天前
Langchain 1.0.2 从入门到精通(含基础、RAG、Milvus、Ollama、MCP、Agents)
langchain·agent·milvus·rag·mcp·langchain 1.0
玄同7652 天前
LangChain v1.0+ Memory 全类型指南:构建上下文感知大模型应用的核心方案
人工智能·语言模型·自然语言处理·langchain·nlp·知识图谱·向量数据库
中草药z2 天前
【Vibe Coding】初步认识LangChain&LangGraph
前端·langchain·html·agent·cursor·langgraph·vibe
花间相见2 天前
【LangChain】—— Prompt、Model、Chain与多模型执行链
前端·langchain·prompt
qq_455760853 天前
Langchain & Langgraph介绍
langchain