



时间:2025-05-16 关注公众号 来源:网络
在当今快速发展的AI领域,LangChain作为连接不同语言模型和工具的桥梁,正日益受到开发者的关注。特别地,将Ollama这一智能助手融入JavaScript生态系统,开辟了新的应用可能性。本文旨在深入浅出地探讨如何在JavaScript项目中高效利用Ollama,解锁高级自然语言处理功能。Ollama,以其灵活的接口和强大的语言理解能力著称,让开发者能够轻松构建能够理解和回应复杂人类语言的应用程序。通过细致讲解其集成步骤、示例代码演示以及最佳实践分享,我们不仅揭示Ollama如何无缝嵌入JavaScript环境,还展示了它如何成为提升应用智能交互水平的关键工具。随着JavaScript继续在全球Web开发中占据核心地位,Ollama的集成无疑为前端和全栈开发者打开了通往人工智能应用的大门。
简介本文档介绍了如何在javascript环境中使用ollama与langchain集成,以创建强大的ai应用。ollama是一个开源的大语言模型部署工具,而langchain则是一个用于构建基于语言模型的应用的框架。通过结合这两者,我们可以在本地环境中快速部署和使用先进的ai模型。
注:本文档包含核心代码片段和详细解释。完整代码可在notebook/c5/ollama_langchain_javascript中找到。?
1.环境设置 配置node.js环境首先,确保你的系统已安装Node.js。你可以从?Node.js官网?下载并安装最新版本。
创建项目并安装依赖 切换到运行目录运行: cdnotebook/C5/ollama_langchain_javascript npminit-y 登录后复制 安装必要的依赖: npminstall@langchain/ollama@langchain/core@langchain/commUnityzod 登录后复制 在?package.json?文件中添加?"type":"module"?以启用ES模块支持: { "type":"module", //...其他配置 } 登录后复制?
2.下载所需模型并初始化Ollama 下载llama3.1模型 进入官网?下载并安装Ollama到可用的受支持平台。 查看?了解所有可用的模型。 通过?ollamapull?命令获取可用LLM模型(例如:ollamapullllama3.1)。命令行执行完毕后如图所示:
模型存储位置:
Mac:?~/.ollama/models/ Linux(或WSL):?/usr/share/ollama/.ollama/models windows:?C:UsersAdministrator.ollamamodels下载完毕后,需要确保Ollama服务已经启动:
ollamaps 登录后复制
?
3.基本使用示例 使用ChatOllama进行简单对话可运行?base_chat.js?文件,具体代码如下:
import{Ollama}from"@langchain/community/llms/ollama"; constollama=newOllama({ baseUrl:"//确保Ollama服务已经启动 model:"llama3.1",//替换为实际使用的模型 }); constStream=awaitollama.stream( `你比GPT4厉害吗?` ); constchunks=[]; forawait(constchunkofstream){ chunks.push(chunk); } console.log(chunks.join("")); 登录后复制运行代码:
nodebase_chat.js 登录后复制这段代码做了以下几件事:
导入Ollama类并初始化它,指定模型和基础URL。 使用?stream?方法发送一个问题给模型,这允许我们逐块接收响应。 使用for-await循环收集所有响应块。 将所有块组合并打印出完整响应。 多模态模型使用运行base_mulTIModal.js文件,具体代码如下:
import{Ollama}from"@langchain/community/llms/ollama"; import*asfsfrom"node:fs/promises"; constimageData=awaitfs.readFile("../../../docs/images/C5-1-4.png");//可以替换为你想询问的图片 constmodel=newOllama({ model:"llava", baseUrl:" }).bind({ images:[imageData.toString("Base64")], }); constres=awaitmodel.invoke("图片里是什么动物呀?"); console.log({res}); 登录后复制运行代码:
nodebase_multimodal.js 登录后复制这段代码演示了如何使用多模态模型(如llava)处理图像和文本输入:
读取图像文件并将其转换为base64编码。 初始化Ollama模型,并使用?bind?方法将图像数据绑定到模型。 使用?invoke?方法发送一个关于图像的问题。 打印模型的响应。 工具调用运行?base_tool.js?文件,代码如下:
import{tool}from"@langchain/core/tools"; import{ChatOllama}from"@langchain/ollama"; import{z}from"zod"; //定义简单计算器工具 constsimpleCalculatorTool=tool((args)=>{ const{operation,x,y}=args; switch(operation){ case"add": returnx+y; case"subtract": returnx-y; case"multiply": returnx*y; case"divide": if(y!==0){ returnx/y; }else{ thrownewError("Cannotdividebyzero"); } default: thrownewError("Invalidoperation"); } },{ name:"simple_calculator", description:"Performsimplearithmeticoperations", schema:z.object({ operation:z.enum(["add","subtract","multiply","divide"]), x:z.number(), y:z.number(), }), }); //定义模型 constllm=newChatOllama({ model:"llama3.1", temperature:0, }); //将工具绑定到模型 constllmWithTools=llm.bindTools([simpleCalculatorTool]); //使用模型进行工具调用 constresult=awaitllmWithTools.invoke( "你知道一千万乘二是多少吗?请使用'simple_calculator'工具来计算。" ); console.log(result); 登录后复制运行代码:
nodebase_tool.js 登录后复制这段代码展示了如何定义和使用工具:
使用?tool?函数定义一个简单的计算器工具,包括操作逻辑和参数schema。 初始化ChatOllama模型。 使用?bindTools?方法将工具绑定到模型。 使用?invoke?方法发送一个需要计算的问题,模型会自动调用相应的工具。?
4.进阶用法 自定义提示模板自定义提示模板不仅提高了内容生成的效率,还确保了输出的一致性和针对性。通过精心设计的模板,我们可以充分利用AI模型的能力,同时保持对输出内容的控制和指导:
import{ChatOllama}from"@langchain/ollama"; import{ChatPromptTemplate,SystemMessagePromptTemplate,HumanMessagePromptTemplate}from"@langchain/core/prompts"; //初始化ChatOllama模型 constmodel=newChatOllama({ model:"llama3.1", temperature:0.7, }); constsystemMessageContent=` 你是一位经验丰富的电商文案撰写专家。你的任务是根据给定的产品信息创作吸引人的商品描述。 请确保你的描述简洁、有力,并且突出产品的核心优势。 `; consthumanMessageTemplate=` 请为以下产品创作一段吸引人的商品描述: 产品类型:{product_type} 核心特性:{key_feature} 目标受众:{target_audience} 价格区间:{price_range} 品牌定位:{brand_positioning} 请提供以下三种不同风格的描述,每种大约50字: 1.理性分析型 2.情感诉求型 3.故事化营销型 `; constprompt=ChatPromptTemplate.fromMessages([ SystemMessagePromptTemplate.fromTemplate(systemMessageContent), HumanMessagePromptTemplate.fromTemplate(humanMessageTemplate), ]); constchain=prompt.pipe(model); asyncfunctiongenerateProductDescriptions(productInfo){ constresponse=awaitchain.invoke(productInfo); returnresponse.content; } //示例使用 constproductInfo={ product_type:"智能手表", key_feature:"心率监测和睡眠分析", target_audience:"注重健康的年轻专业人士", price_range:"中高端", brand_positioning:"科技与健康的完美结合" }; generateProductDescriptions(productInfo) .then((result)=>console.log(result)) .catch((error)=>console.error("Error:",error)); 登录后复制运行代码:
nodeadvanced_prompt.js 登录后复制这段代码展示了如何创建和使用自定义提示模板:
定义系统消息和人类消息模板。 使用?ChatPromptTemplate.fromMessages?创建一个完整的提示模板。 使用?pipe?方法将提示模板与模型连接起来,创建一个处理链。 定义一个函数来生成产品描述,该函数使用处理链来处理输入的产品信息。自定义提示模板在实际应用中有着广泛的用途,尤其是在需要生成特定格式或风格的内容时。以下是一些实际应用场景:
电子商务产品描述生成:正如本例所示,可以用于自动生成不同风格的产品描述,提高产品页面的吸引力和转化率。 客户服务回复模板:可以创建各种情景的回复模板,如处理投诉、提供产品信息等,确保客服回复的一致性和专业性。 新闻报道生成:可以设计模板来生成不同类型的新闻报道,如突发新闻、深度分析等,帮助记者快速起草初稿。 个性化营销邮件:根据客户数据和营销目标,生成个性化的营销邮件内容,提高邮件营销的效果。 高级JSON输出与知识图谱生成在这个例子中,我们展示了如何使用Ollama和LangChain生成结构化的JSON输出,特别是用于创建知识图谱。这种方法与Microsoft的开源项目GraphRAG有着密切的联系,尤其是在自动化知识提取和三元组生成方面。
import{ChatOllama}from"@langchain/ollama"; import{PromptTemplate}from"@langchain/core/prompts"; import{HumanMessage,SystemMessage}from"@langchain/core/messages"; constsystemTemplate=` 你是一位医疗领域的专家,擅长创建知识图谱。请将所有响应格式化为具有以下结构的JSON对象: { "节点":[ {"id":"string","标签":"string","类型":"string"} ], "关系":[ {"源":"string","目标":"string","关系":"string"} ] } 确保所有节点id都是唯一的,并且关系引用的是已存在的节点id。 `; consthumanTemplate=` 请为医疗主题"{topic}"创建一个知识图谱。包括以下相关概念:{concepts}。 提供至少5个节点和5个关系。请确保使用中文回答。 `; constsystemMessage=newSystemMessage(systemTemplate); consthumanPrompt=PromptTemplate.fromTemplate(humanTemplate); constllmJsonMode=newChatOllama({ baseUrl:"//默认值 model:"llama3.1", format:"json", }); asyncfunctiongenerateMedicalKnowledgeGraph(topic,concepts){ try{ consthumanMessageContent=awaithumanPrompt.format({ topic:topic, concepts:concepts.join("、"), }); consthumanMessage=newHumanMessage(humanMessageContent); constmessages=[systemMessage,humanMessage]; constresult=awaitllmJsonMode.call(messages); console.log(JSON.stringify(result,null,2)); returnresult; }catch(error){ console.error("生成知识图谱时出错:",error); } } //使用示例 consttopic="糖尿病"; constconcepts=["胰岛素","血糖","并发症","饮食管理","运动疗法"]; generateMedicalKnowledgeGraph(topic,concepts); 登录后复制运行代码:
nodeadvanced_json.js 登录后复制这段代码演示了如何使用Ollama生成结构化的JSON输出:
定义系统模板,指定期望的JSON结构。 创建一个人类提示模板,用于生成知识图谱的请求。 初始化ChatOllama模型,设置?format:"json"?以获取JSON输出。 定义一个函数来生成医疗知识图谱,该函数组合系统消息和人类消息,并调用模型。我们可以窥见到通过json格式的特定输出,可以将其运用到许多方面:
自动化三元组生成:在传统方法中,创建知识图谱通常需要大量的人工标注工作。专家需要仔细阅读文档,识别重要概念和它们之间的关系,然后手动创建三元组(主体-关系-客体)。这个过程不仅耗时,而且容易出错,特别是在处理大量文档时。使用我们的方法,大语言模型可以自动从给定的主题和概念生成相关的节点和关系。这极大地加速了知识图谱的构建过程。 数据增强:这种方法不仅可以用于直接生成知识图谱,还可以用于数据增强。例如: 扩展现有的训练数据集:通过让模型基于已有的三元组生成新的相关三元组。 创建多样化的示例:为不同的医疗条件生成知识图谱,增加数据的多样性。 跨语言数据生成:通过调整提示,可以生成不同语言的知识图谱,支持多语言应用。 提高数据质量:大语言模型可以利用其广泛的知识基础,生成高质量、连贯的知识图谱。通过精心设计的提示,我们可以确保生成的数据符合特定的质量标准和领域规范。 灵活性和可扩展性:这种方法非常灵活,可以轻松适应不同的领域和需求: 通过修改系统提示,我们可以改变输出的JSON结构,以适应不同的知识图谱格式。 可以轻松地将此方法扩展到其他领域,如科技、金融、教育等。?
结论通过这些示例,我们展示了如何使用Ollama和LangChain在JavaScript环境中构建各种AI应用,从简单的对话系统到复杂的知识图谱生成。这些工具和技术为开发强大的AI应用提供了坚实的基础。
Ollama和LangChain的结合为开发者提供了极大的灵活性和可能性。你可以根据具体需求,选择合适的模型和组件,构建出适合你的应用场景的AI系统。
随着技术的不断发展,我们期待看到更多创新的应用出现。希望这个指南能够帮助你开始你的AI开发之旅,并激发你的创造力,去探索AI技术的无限可能。
以上就是Ollama在LangChain中的使用-JavaScript集成的详细内容,更多请关注其它相关文章!
文章内容来源于网络,不代表本站立场,若侵犯到您的权益,可联系我们删除。(本站为非盈利性质网站)
电话:13918309914
QQ:1967830372
邮箱:rjfawu@163.com