您的位置:首页 > 财经 > 产业 > 学校网络营销推广方案_网络服务提供者知道或者应当知道网络用户利用其网络服务侵害他人民事权益_西安网站开发制作公司_推广app的平台

学校网络营销推广方案_网络服务提供者知道或者应当知道网络用户利用其网络服务侵害他人民事权益_西安网站开发制作公司_推广app的平台

2025/2/23 14:58:48 来源:https://blog.csdn.net/zkw54334/article/details/143701343  浏览:    关键词:学校网络营销推广方案_网络服务提供者知道或者应当知道网络用户利用其网络服务侵害他人民事权益_西安网站开发制作公司_推广app的平台
学校网络营销推广方案_网络服务提供者知道或者应当知道网络用户利用其网络服务侵害他人民事权益_西安网站开发制作公司_推广app的平台

1.背景

Langchain是一个开源框架,用于将大型语言模型与外部计算和数据源结合起来,以增强其功能,以下是Langchain库的主要特点和组件:

  • 组件(Components):为LLMs提供接口封装、模板提示和信息检索索引,这些组件是模块化且易于使用的,无论是否使用Langchain框架的其余部分。
  • 链(Chains):将不同的组件组合起来解决特定的任务,例如在大量文本中查找信息或者执行更复杂的工作流程。
  • 代理(Agents):使得LLMs能够与外部环境进行交互,例如通过API请求执行操作,这增强了模型的自主性和实用性。
  • LangServe:这是一个用于将Langchain链部署为REST API的库,使得可以更容易地集成到其他应用程序和服务中。
  • 模板:Langchain提供了一系列的模板,这些是易于部署的参考架构,用于处理各种任务,简化了开发过程。

2.前期工作

2.1 LangChain安装

如果想要在python环境下启动LangChain,那么需要python版本在3.8以上最佳,并且安装LangChain相关的几个官方库

pip install langchain
pip install langchain_openai

2.2 OpenAi账号

  • 以官方的入门教程为例,均使用了openai的api和key进行交互,因此基本上如果想要顺利实现官方教程,均需要注册openai账号,在账号中获取api以及key进行配置才行,但目前openai对国内不开放,存在一定门槛。
  • 为解决这一问题,这里选择第三方的网站,在程序中修改api以及key,以此来实现langchain后续的教程能够成功运行。
  • 在https://api.chatllm.vip/网站可以获取到能够使用的api和key,按照网站指引获取即可

3.项目启动

3.1 配置

这段代码是用于导入langchain_openai库中的ChatOpenAI类,并创建一个名为chat_model的实例。

from langchain_openai import ChatOpenAIchat_model = ChatOpenAI(openai_api_key="sk-你的key值",openai_api_base="https://api.chatllm.vip/v1", model="gpt-3.5-turbo",streaming=True)

chat_model = ChatOpenAI(...):这行代码创建了一个名为 chat_model 的对象,并使用 ChatOpenAI 类的构造函数进行初始化。构造函数接受以下参数:

  • openai_api_key: 这是你的 OpenAI API 密钥
  • openai_api_base: 这是 OpenAI API 的基础 URL址
  • model: 这是 ChatGPT 模型的名称或标识符,指定了要使用的语言模型,在这里使用的是 “gpt-3.5-turbo” 模型。
  • streaming: 这是一个布尔值,指定是否使用流式传输。如果设置为 True,则可以进行长时间运行的对话。

3.2 简单聊天

先直接使用大模型,问一个简单的问题如下:

chat_model.invoke("介绍一下支持向量机")

大模型回复结果如下:

AIMessage(content='支持向量机(Support Vector Machine,SVM)是一种用于分类和回归分析的监督学习模型。其基本原理是通过在特征空间中找到一个最优的超平面,将不同类别的样本分隔开来。\n\nSVM的优势在于能够处理高维数据和非线性数据,并且在处理小样本数据时表现出色。其核心思想是通过寻找最大间隔超平面来实现分类,即最大化不同类别样本之间的间隔,使得分类边界更加鲁棒和泛化能力更强。\n\n在实际应用中,支持向量机可以通过不同的核函数(如线性核、多项式核、高斯核等)来处理不同类型的数据,并且可以通过调节超参数来优化模型的性能。支持向量机在文本分类、图像识别、生物信息学等领域都有广泛的应用。', response_metadata={'finish_reason': 'stop'}, id='run-0e8e91b8-e7f0-4c7a-93b1-4e829f5efe78-0')

3.3 Prompt操作

这是Langchain中的一个重要组成部分,它允许用户通过一个模板来生成一个对应的Prompt。这种方法的好处在于可以根据用户的输入或其他参数动态构建Prompt,从而提供更加个性化和适应性强的交互体验。

将之前的简单提问进行Prompt化如下:

from langchain_core.prompts import ChatPromptTemplateProgrammer = ChatPromptTemplate.from_messages([("system", "你是一名程序专家"),("human", "讲解一下关于{topic}的概念")
])

我们紧接着调用模板来问相同的问题:

Programmer.invoke({"topic": "支持向量机"})

大模型回答的结果如下:

ChatPromptValue(messages=[SystemMessage(content='你是一名程序专家'), HumanMessage(content='讲解一下关于支持向量机的概念')])

以上的代码中我们可以发现:

  • 使用 from_messages​ 进行了模板构建
  • 把 SystemMessages是一种指导输入的方法
  • 提示模板包含大括号中的 {topic}​ 这个是我们将要输入的内容

3.4 Chain操作

在LangChain框架中,“链”是一个非常通用的概念,它允许开发人员将大型语言模型(LLMs)与其他计算和数据源结合起来,以增强模型的功能和应用场景。

现在我们将prompt和chatmodel使用pipe的方式连接成chains,这样就实现了一个简单的chains的应用,代码如下:

chain = Programmer | chat_model
chain.invoke({"topic": "支持向量机"})

返回结果为:

AIMessage(content='支持向量机(Support Vector Machine,SVM)是一种监督学习算法,用于分类和回归分析。其基本思想是找到一个最优的超平面,将不同类别的数据点分隔开来。\n\n在分类问题中,SVM的目标是找到一个超平面,使得两个不同类别的数据点禽最大间隔。这个超平面可以被视为一个决策边界,将数据点分成不同的类别。为了找到最佳的超平面,SVM会考虑到支持向量,即离超平面最近的数据点。这些支持向量决定了超平面的位置和方向。\n\nSVM还可以通过核函数来处理非线性问题,将数据映射到高维空间,使得数据在该空间中可以被线性分隔。常用的核函数包括线性核、多项式核、高斯核等。\n\n总的来说,SVM通过寻找最优的超平面来进行分类或回归分析,具有较强的泛化能力和对小样本数据的处理能力,因此在实际应用中得到了广泛的应用。', response_metadata={'finish_reason': 'stop'}, id='run-1a76770e-025d-4588-806d-d4f7d710a35c-0')

如果只是想简单输出字符串,Langchain 专门提供输出解析Output Parsers | ️ LangChain,并且也可以组合链运行:

from langchain_core.output_parsers import StrOutputParser
str_chain  =  chain | StrOutputParser()
str_chain.invoke({"topic": "支持向量机"})

输出结果为:

'支持向量机(Support Vector Machine, SVM)是一种常用的机器学习算法,主要用于分类和回归任务。其基本思想是在特征空间中找到一个最优的超平面,将不同类别的样本分开,同时最大化分类边界的间隔。\n\n具体来说,支持向量机的目标是找到一个超平面,使得所有样本点距离这个超平面的间隔尽可能大。支持向量机的关键在于支持向量,即离超平面最近的样本点,它们决定了超平面的位置和方向。支持向量机通过最大化支持向量到超平面的距离来实现分类。\n\n支持向量机有多种形式,包括线性支持向量机、非线性支持向量机(通过核函数将数据映射到高维空间进行分类)、多类别支持向量机等。支持向量机在处理高维数据和非线性数据上表现良好,并且具有较强的泛化能力。\n\n在实际应用中,支持向量机通常需要调优参数,如正则化参数、核函数参数等,以达到最佳的分类效果。支持向量机是一种强大的分类器,在许多领域,如文本分类、图像识别、生物信息学等方面都得到了广泛的应用。'

3.5 简单工具构建

接下来,将前几个点综合起来,我们开始编写一个预约提醒的工具,包括了工具函数、prompt、chains,最终将其组合起来,就能够实现简单的大模型工具。

#第一步:编写工具函数
from langchain_core.tools import tool
@tool
def learning_reminder(start_time):"""..."""return "设置成功"#第二步:编写prompt函数
from langchain.tools.render import render_text_description
tools = [learning_reminder]
render_tools = render_text_description(tools)render_prompt = f"""你是一个学习提醒程序,使用这个工具来帮我设置闹钟提醒我学习课程,工具的名字和说明如下:
{render_tools}
用户输入后,返回相应结果,结果使用json形式,包括'name'和'time'和'topic'"""
from datetime import datetime
prompt = ChatPromptTemplate.from_messages([("system", render_prompt),("ai",f"今日日期是:{datetime.now().strftime('%Y-%m-%d')}"),("user", "{input}")]
)#第三步:编写chain过程
import json
def parse_json(response):text = response.contenttext = text.strip()print(text)json_text = json.loads(text)return json_text['time']
reminder_chain=learning_reminder|chat_model
chain = prompt | chat_model | parse_json | reminder_chain#第四步:测试实现
chain.invoke({"input": "今天下午一点钟,提醒我学习支持向量机这门课程"})

返回结果如下:

AIMessage(content='设置成功!您已成功安排了一项任务。有任何其他需要帮忙的吗?', response_metadata={'finish_reason': 'stop'}, id='run-ca0d428c-052b-4f03-845e-9bd8321a006f-0')

4.总结

  1. langchain的官方文档还是以openai作为主要调用api,这点对国内暂时不是很友好,可以暂时使用其他第三方网站进行替代,此外国内的大模型也可以通过改造进行使用。
  2. 针对langchain的几个要点操作进行了简单的介绍以及代码操作,不难发现其实现的结果就是人与大模型的交互,而交互的效果则是可以依赖不同的prompt和chain组件进行改变的,这也是langchain的工程化优点。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com