在今天的文章在本教程中,我们将使用JavaScript与LangChain和Ollama一起学习一些最新的东西。首先,让我们使用LangChain向模型提出一个简单的问题。
为了在JavaScript中做到这一点,我们需要安装LangChain中,我们将使用JavaScript与LangChain和Ollama一起学习一些最新的东西。
npm install @langchain/community
现在就可以开始构建JavaScript了
import { Ollama } from "@langchain/community/llms/ollama";
const ollama = new Ollama({
baseUrl: "http://localhost:11434",
model: "llama3",
});
const answer = await ollama.invoke(`why is the sky blue?`);
console.log(answer);
现在就可以得到与我们在终端中输入“为什么天空是蓝色的”相同的结果。但是如果想要从网络上加载一个文档来提问。那么就要使用Cheerio,它是摄取网页的一个很好的库,LangChain在他们的CheerioWebBaseLoader中使用了它。
npm install cheerio
import { CheerioWebBaseLoader } from "langchain/document_loaders/web/cheerio";
const loader = new CheerioWebBaseLoader("https://en.wikipedia.org/wiki/2023_Hawaii_wildfires");
const data = await loader.load();
现在就可以加载文档。尽管这个页面比Odyssey小,但对于大多数LLM来说,它肯定比上下文大小要大。所以我们需要分成更小的部分,然后选择与我们的问题相关的部分。这就要用用到矢量数据存储。
在下面的例子中,我们将使用MemoryVectorStore,它是LangChain的一部分。但是,要将内容放入数据存储,还需要做一件事。我们必须运行一个嵌入过程,将文本中的符号转换为一系列向量。为此,我们将使用Tensorflow。
npm install @tensorflow/tfjs-core@3.6.0 @tensorflow/tfjs-converter@3.6.0 @tensorflow-models/universal-sentence-encoder@1.3.3 @tensorflow/tfjs-node@4.10.0
如果你只安装那些没有版本号的组件,它会安装最新的版本,但是Tensorflow内部有冲突,所以你需要安装兼容的版本。
import { RecursiveCharacterTextSplitter } from "langchain/text_splitter"
import { MemoryVectorStore } from "langchain/vectorstores/memory";
import "@tensorflow/tfjs-node";
import { TensorFlowEmbeddings } from "langchain/embeddings/tensorflow";
// Split the text into 500 character chunks. And overlap each chunk by 20 characters
const textSplitter = new RecursiveCharacterTextSplitter({
chunkSize: 500,
chunkOverlap: 20
});
const splitDocs = await textSplitter.splitDocuments(data);
// Then use the TensorFlow Embedding to store these chunks in the datastore
const vectorStore = await MemoryVectorStore.fromDocuments(splitDocs, new TensorFlowEmbeddings());
我们需要使用LangChain的核心概念:链。链是一种将许多活动连接在一起以完成特定任务的方法。有许多可用的链类型,但在今天的文章中,我们将使用RetrievalQAChain。
import { RetrievalQAChain } from "langchain/chains";
const retriever = vectorStore.asRetriever();
const chain = RetrievalQAChain.fromLLM(ollama, retriever);
const result = await chain.call({query: "When was Hawaii's request for a major disaster declaration approved?"});
console.log(result.text)
现在你就可以使用LangChain和Ollama来做你想做的事情了。
powered by kaifamiao