甘肃省建设工程168网站,东营智能网站设计,wordpress 缩减sql,免费手机app制作软件LangChain
LangChain是一个软件开发框架#xff0c;可以更轻松地使用大型语言模型#xff08;LLM#xff09;创建应用程序。它是一个具有 Python 和 JavaScript 代码库的开源工具。LangChain 允许开发人员将 GPT-4 等 LLM 与外部数据相结合#xff0c;为聊天机器人、代码理…
LangChain
LangChain是一个软件开发框架可以更轻松地使用大型语言模型LLM创建应用程序。它是一个具有 Python 和 JavaScript 代码库的开源工具。LangChain 允许开发人员将 GPT-4 等 LLM 与外部数据相结合为聊天机器人、代码理解、摘要等各种应用程序开辟了可能性。
LangChain模块
LangChain将其功能分组到以下模块中
模型提示链代理记忆文档加载程序和索引
提示 提示是指模型输入。在前面的部分中您将提示硬编码为 LLM 和聊天模型。此技术不适用因为在生产环境中不会收到硬编码的完整文本提示。相反您将收到来自用户的简洁输入您将希望将其转换为提示。
模型
LangChain支持三种类型的模型
大型语言模型聊天模型文本嵌入模型 链
链允许您同时运行多个LangChain模块。例如使用链您可以同时运行提示符和 LLM从而避免了首先格式化 LLM 模型的提示然后使用模型在单独的步骤中执行它。
LangChain支持三种主要类型的链
简单的 LLM 链顺序链定制链
代理
LangChain代理涉及LLM来执行以下步骤
根据用户输入或其先前的输出确定要执行的操作。执行操作。观察输出。重复前三个步骤直到它尽其所能完成用户输入中定义的任务。 RAG Architecture
典型的 RAG 应用程序有两个主要组件
索引Indexing
用于从源获取数据并为其建立索引的管道。这通常发生在离线状态。
提取和生成Retriever and generation
实际的 RAG 链它在运行时接受用户查询并从索引中检索相关数据然后将其传递给模型。
索引Indexing
Load
首先需要加载数据通过DocumentLoaders完成
Split
Text splitters将large Documents分成更小的chunks。这对于索引数据和将其传递到模型都很有用因为大块更难搜索并且不适合模型的有限上下文窗口。
Store
存储和索引我们的分割这通常是使用 VectorStore 和 Embeddings 模型来完成的。 矢量数据库
Chroma 是一个用于构建具有嵌入的 AI 应用程序的数据库。 数据量庞大的知识、新闻、文献、语料等先通过嵌入embedding算法转变为向量数据然后存储在Chroma等向量数据库中。当用户在大模型输入问题后将问题本身也embedding转化为向量在向量数据库中查找与之最匹配的相关知识组成大模型的上下文将其输入给大模型最终返回大模型处理后的文本给用户这种方式不仅降低大模型的计算量提高响应速度也降低成本并避免了大模型的tokens限制是一种简单高效的处理手段。
主流的向量数据库对比如下所示
向量数据库URLGitHub StarLanguagechromahttps://github.com/chroma-core/chroma7.4KPythonmilvushttps://github.com/milvus-io/milvus21.5KGo/Python/Cpineconehttps://www.pinecone.io/❌❌qdranthttps://github.com/qdrant/qdrant11.8KRusttypesensehttps://github.com/typesense/typesense12.9KCweaviatehttps://github.com/weaviate/weaviate6.9KGo
在这里我们使用chroma
提取和生成Retrieval and generation
Retrieve给定用户输入使用检索器从存储中检索相关分割。GenerateChatModel / LLM 使用包含问题和检索到的数据的提示生成答案 实例 import os
import bs4
from langchain import hub
from langchain_community.document_loaders import WebBaseLoader
from langchain_community.vectorstores import Chroma
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_community.document_loaders import PyPDFLoader
# Load, chunk and index the contents of the blog.
print(Starting..........)
os.environ[OPENAI_API_KEY] sk-xxxxxxxx
os.environ[OPENAI_BASE_URL] https://api.chatanywhere.tech/v1
print(Loading.....)
#loader WebBaseLoader(
# web_paths(https://lilianweng.github.io/posts/2023-06-23-agent/,),
# bs_kwargsdict(
# parse_onlybs4.SoupStrainer(
# class_(post-content, post-title, post-header)
# )
# ),
#)
loader PyPDFLoader(example_data/计算机信息模型导论2024.pdf)
docs loader.load()
print(Loadded....)
text_splitter RecursiveCharacterTextSplitter(chunk_size1000, chunk_overlap200)
splits text_splitter.split_documents(docs)
vectorstore Chroma.from_documents(documentssplits, embeddingOpenAIEmbeddings(),persist_directory./vector_store)# Retrieve and generate using the relevant snippets of the blog.
retriever vectorstore.as_retriever()
prompt hub.pull(rlm/rag-prompt)
print(RAG....)
llm ChatOpenAI(model_namegpt-3.5-turbo,base_urlhttps://api.chatanywhere.tech/v1, temperature0)def format_docs(docs):return \n\n.join(doc.page_content for doc in docs)rag_chain ({context: retriever | format_docs, question: RunnablePassthrough()}| prompt| llm| StrOutputParser()
)
print(rag_chain.invoke(what is OPCUA 变量类型 请中文回答))
# cleanup
#vectorstore.delete_collection() 计算机信息模型导论2024.pdf是我正在写的一本书。介绍计算机信息模型其中包含了OPCUA 的基本知识。
Chroma 矢量数据库默认是存储在内存中的。如果设置了永久存储目录的位置persist_directory它会存放在指定的目录中。一旦文档的矢量数据存储在文件中提问可以不需要每次读pdf文件程序简化为
import os
from langchain import hubfrom langchain_community.vectorstores import Chroma
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough
from langchain_openai import ChatOpenAI,OpenAIEmbeddings# Load, chunk and index the contents of the blog.os.environ[OPENAI_API_KEY] sk-xxxxxxxxx
os.environ[OPENAI_BASE_URL] https://api.chatanywhere.tech/v1
embedding OpenAIEmbeddings(openai_api_keyos.environ[OPENAI_API_KEY] )
vectorstore Chroma(persist_directory./vector_store,embedding_functionembedding)# Retrieve and generate using the relevant snippets of the blog.
retriever vectorstore.as_retriever()
prompt hub.pull(rlm/rag-prompt)
print(RAG....)
llm ChatOpenAI(model_namegpt-3.5-turbo,base_urlhttps://api.chatanywhere.tech/v1, temperature0)def format_docs(docs):return \n\n.join(doc.page_content for doc in docs)rag_chain ({context: retriever | format_docs, question: RunnablePassthrough()}| prompt| llm| StrOutputParser()
)
print(rag_chain.invoke(what is OPCUA 变量类型 请中文回答))