大模型能力

Task02 大模型能力

目录

  • prompt技巧公式
  • LangChain
    • 什么是LangChain
    • 如何使用LangChain?
    • LangChain的模型
    • LangChain 的主要特点
    • 示例

prompt技巧公式

prompt = (角色) + 任务 + 要求 + 提示

LangChain

什么是LangChain

LangChain是一个强大的框架,旨在帮助开发人员使用语言模型构建端到端的应用程序。它提供了一套工具、组件和接口,可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。LangChain 可以轻松管理与语言模型的交互,将多个组件链接在一起,并集成额外的资源,例如 API 和数据库。

官方文档:https://python.langchain.com/en/latest/
中文文档:https://www.langchain.com.cn/

如何使用LangChain?

要使用 LangChain,开发人员首先要导入必要的组件和工具,例如 LLMs, chat models, agents, chains, 内存功能。这些组件组合起来创建一个可以理解、处理和响应用户输入的应用程序。

LangChain 为特定用例提供了多种组件,例如个人助理、文档问答、聊天机器人、查询表格数据、与 API 交互、提取、评估和汇总。

LangChain的模型

LangChain model 是一种抽象,表示框架中使用的不同类型的模型。LangChain 中的模型主要分为三类:

  1. LLM(大型语言模型):这些模型将文本字符串作为输入并返回文本字符串作为输出。它们是许多语言模型应用程序的支柱。
  2. 聊天模型( Chat Model):聊天模型由语言模型支持,但具有更结构化的 API。他们将聊天消息列表作为输入并返回聊天消息。这使得管理对话历史记录和维护上下文变得容易。
  3. 文本嵌入模型(Text Embedding Models):这些模型将文本作为输入并返回表示文本嵌入的浮点列表。这些嵌入可用于文档检索、聚类和相似性比较等任务。

LangChain 的主要特点

LangChain 旨在为六个主要领域的开发人员提供支持:

  1. LLM 和提示:LangChain 使管理提示、优化它们以及为所有 LLM 创建通用界面变得容易。此外,它还包括一些用于处理 LLM 的便捷实用程序。
  2. 链(Chain):这些是对 LLM 或其他实用程序的调用序列。LangChain 为链提供标准接口,与各种工具集成,为流行应用提供端到端的链
  3. 数据增强生成:LangChain 使链能够与外部数据源交互以收集生成步骤的数据。例如,它可以帮助总结长文本或使用特定数据源回答问题。
  4. Agents:Agents 让 LLM 做出有关行动的决定,采取这些行动,检查结果,并继续前进直到工作完成。LangChain 提供了代理的标准接口,多种代理可供选择,以及端到端的代理示例。
  5. 内存:LangChain 有一个标准的内存接口,有助于维护链或代理调用之间的状态。它还提供了一系列内存实现和使用内存的链或代理的示例。
  6. 评估:很难用传统指标评估生成模型。这就是为什么 LangChain 提供提示和链来帮助开发者自己使用 LLM 评估他们的模型。

示例

  • 构建语言模型应用程序:LLM

    from langchain.llms import OpenAI# 初始化包装器,temperature越高结果越随机llm = OpenAI(temperature=0.9)# 进行调用text = "What would be a good company name for a company that makes colorful socks?"print(llm(text))#生成结果,结果是随机的 例如: Glee Socks. Rainbow Cozy SocksKaleidoscope Socks.
  • Prompt Templates:管理LLMs的Prompt

    一般来说我们不会直接把输入给模型,而是将输入和一些别的句子连在一起,形成prompts之后给模型。
    例如之前根据产品取名的用例,在实际服务中我们可能只想输入"socks",那么"What would be a good company name for a company that makes"就是我们的template。

    from langchain.prompts import PromptTemplate
    prompt = PromptTemplate(input_variables=["product"],template="What is a good name for a company that makes {product}?",
    )
    print(prompt.format(product="colorful socks"))
    # 输出结果 What is a good name for a company that makes colorful socks?
  • 构建语言模型应用程序:Chat Model

    还可以使用聊天模型。这些是语言模型的变体,它们在底层使用语言模型但具有不同的界面。聊天模型使用聊天消息作为输入和输出,而不是“文本输入、文本输出”API。聊天模型 API 的使用还比较新,所以大家都还在寻找最佳抽象使用方式。要完成聊天,您需要将一条或多条消息传递给聊天模型。LangChain 目前支持 AIMessage、HumanMessage、SystemMessage 和 ChatMessage 类型。您将主要使用 HumanMessage、AIMessage 和 SystemMessage。

    from langchain.chat_models import ChatOpenAI
    from langchain.schema import (AIMessage,HumanMessage,SystemMessage
    )chat = ChatOpenAI(temperature=0)
    chat([HumanMessage(content="Translate this sentence from English to French. I love programming.")])
    #输出结果 AIMessage(content="J'aime programmer.", additional_kwargs={})
    
  • 信息抽取

    根据输入的内容抽取关键信息

    from langchain.prompts import PromptTemplate
    from langchain.llms import OpenAIChat
    from langchain.chains import LLMChain
    import os
    import openai
    # #你申请的openai的api key
    os.environ['OPENAI_API_KEY'] = ''
    text="北京市(Beijing),简称“京”,古称燕京、北平,是中华人民共和国首都、直辖市、国家中心城市、超大城市,国务院批复确定的中国政治中心、文化中心、国际交往中心、科技创新中心, \中国历史文化名城和古都之一。 截至2020年,北京市下辖16个区,总面积16410.54平方千米。  2022年末,北京市常住人口2184.3万人。 \
    北京市地处中国北部、华北平原北部,东与天津市毗连,其余均与河北省相邻,中心位于东经116°20′、北纬39°56′,是世界著名古都和现代化国际城市, \也是中国共产党中央委员会、中华人民共和国中央人民政府和中华人民共和国全国人民代表大会常务委员会所在地。\
    北京市地势西北高、东南低。西部、北部和东北部三面环山,东南部是一片缓缓向渤海倾斜的平原。境内流经的主要河流有:永定河、潮白河、北运河、拒马河等,\
    北京市的气候为暖温带半湿润半干旱季风气候,夏季高温多雨,冬季寒冷干燥,春、秋短促。北京被世界城市研究机构GaWC评为世界一线城市,  \
    联合国报告指出北京市人类发展指数居中国城市第二位。 [4] 北京市成功举办夏奥会与冬奥会,成为全世界第一个“双奥之城”。 \
    2022年,北京市实现地区生产总值41610.9亿元,按不变价格计算,比上年增长0.7%。其中,第一产业增加值111.5亿元,下降1.6%;第二产业增加值6605.1亿元,下降11.4%;第三产业增加值34894.3亿元,增长3.4%。"#加载openai的llm
    llm = OpenAIChat(model_name="gpt-3.5-turbo")
    #创建模板
    fact_extraction_prompt = PromptTemplate(input_variables=["text_input"],template="从下面的本文中提取关键事实。尽量使用文本中的统计数据来说明事实:\n\n {text_input}"
    )
    #定义chain
    fact_extraction_chain = LLMChain(llm=llm, prompt=fact_extraction_prompt)
    facts = fact_extraction_chain.run(text)
    print(facts)
  • 文本问答

    import os
    from langchain.embeddings.openai import OpenAIEmbeddings
    from langchain.vectorstores import Chroma
    from langchain.text_splitter import TokenTextSplitter
    from langchain.llms import OpenAI
    from langchain.chains import ChatVectorDBChain
    from langchain.document_loaders import DirectoryLoader
    import jieba as jb
    import openai
    files=['xxx.txt','xxx.txt']
    import time
    start_time = time.time()  
    for file in files:#读取data文件夹中的中文文档my_file=f"./data/{file}"with open(my_file,"r",encoding='utf-8') as f:  data = f.read()#对中文文档进行分词处理cut_data = " ".join([w for w in list(jb.cut(data))])#分词处理后的文档保存到data文件夹中的cut子文件夹中cut_file=f"./data/cut/cut_{file}"with open(cut_file, 'w') as f:   f.write(cut_data)f.close()
    #加载文档
    loader = DirectoryLoader('./data/cut',glob='**/*.txt')
    docs = loader.load()
    #文档切块
    text_splitter = TokenTextSplitter(chunk_size=1000, chunk_overlap=0)
    doc_texts = text_splitter.split_documents(docs)
    #调用openai Embeddings
    a=os.environ["OPENAI_API_KEY"] = ""
    embeddings = OpenAIEmbeddings(openai_api_key=a)
    #向量化
    vectordb = Chroma.from_documents(doc_texts, embeddings, persist_directory="./data/cut")
    vectordb.persist()
    #创建聊天机器人对象chain
    chain = ChatVectorDBChain.from_llm(OpenAI(temperature=0, model_name="gpt-3.5-turbo"), vectordb, return_source_documents=True)def get_answer(question):chat_history = []result = chain({"question": question, "chat_history": chat_history})return result["answer"]
    question = "xxxxxxxxxxx"
    print(get_answer(question))
    end_time = time.time()    # 程序结束时间
    run_time = end_time - start_time    # 程序的运行时间,单位为秒
    print(run_time)
  • 。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/82388.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JDK8新特性

Lembda表达式 lembda表达式是一个简洁、可传递的匿名函数,实现了把代码块赋值给一个变量的功能 是我认为jdk1.8中最让人眼前一亮的特性(我没用过其他函数式的语言) 在了解表达式之前,我们先看两个概念 函数式接口 含有且仅含有一个抽象方法&…

CSS核心使用

CSS核心使用 box-sizingbox-shdowtext-shadowpositionwriting-mode box-sizing 定义计算一个元素的总高度和总宽度. 属性值 content-box 默认值,width 内容宽度,height内容的高度border-box 宽度和高度包含内容,内边距和边框 widthborderpadding内容宽度, heightborderpaddi…

如何减少数据中心出现网络拥塞

随着数据流量的爆发增长,对数据中心的建设标准也在不断提高。作为处理大量数据信息的设施,网络通畅始终是需要关注的问题。而当网络传输超过其处理能力,就会造成网络拥塞,导致数据传输缓慢,数据包丢失甚至网络故障。这…

测试进阶知识之零日攻击的发现和防御

零日攻击是指针对软件或系统中未公开(或未被开发者知晓)的漏洞进行的攻击。这些漏洞被称为零日漏洞,因为在被公开之前,它们对开发者或安全研究人员来说是未知的,所以没有足够的时间进行防御或修复。 发现零日漏洞 发…

启动YOLO进行图片物体识别

查看官方文档YOLO: Real-Time Object Detection 这些是一些模型的对比,显示了YOLO的优势,继续往下面看 CoCoData set 是一个数据库,用来训练模型,这里面有丰富的物体检测,分割数据集,图像经过了精确的segm…

Pikachu Burte Force(暴力破解)

一、Burte Force(暴力破解)概述 ​ “暴力破解”是一攻击具手段,在web攻击中,一般会使用这种手段对应用系统的认证信息进行获取。 其过程就是使用大量的认证信息在认证接口进行尝试登录,直到得到正确的结果。 为了提高…

Jenkins List Git Branches插件 构建选择指定git分支

List Git Branches Parameter | Jenkins pluginAdds ability to choose from git repository revisions or tagshttps://plugins.jenkins.io/list-git-branches-parameter/ 1、安装组件 List Git Branches 2、验证功能 1)新建任务 2)新增构建参数 3&…

dede:arclist标签判断有缩略图则显示否则不显示或显示其他自定义图片

dede:arclist标签判断有缩略图则显示否则不显示或显示其他自定义图片 织梦在首页和栏目列表页,在没有缩略图的时候会显示一张默认的无缩略图的图片,这图片在配合某些dede主题的时候不是很美观,那么我们可以在织梦模板中使用dedecms提供的php判…

优先队列PriorityQueue源码解析

基本信息 实现了队列接口&#xff1a;Queue --> AbstractQueue --> PriorityQueue public class PriorityQueue<E> extends AbstractQueue<E> implements java.io.Serializable {public abstract class AbstractQueue<E> extends AbstractCollection…

JavaSE List

目录 1 预备知识-泛型(Generic)1.1 泛型的引入1.2 泛型类的定义的简单演示 1.3 泛型背后作用时期和背后的简单原理1.4 泛型类的使用1.5 泛型总结 2 预备知识-包装类&#xff08;Wrapper Class&#xff09;2.1 基本数据类型和包装类直接的对应关系2.2 包装类的使用&#xff0c;装…

【教程】微信小程序导入外部字体详细流程

前言 在微信小程序中&#xff0c;我们在wxss文件中通过font-family这一CSS属性来设置文本的字体&#xff0c;并且微信小程序有自身支持的内置字体&#xff0c;可以通过代码提示查看微信小程序支持字体&#xff1a; 这些字体具体是什么样式可以参考&#xff1a; 微信小程序--字…

ATF(TF-A) SPMC威胁模型-安全检测与评估

安全之安全(security)博客目录导读 ATF(TF-A) 威胁模型汇总 目录 一、简介 二、评估目标 1、数据流图 三、威胁分析 1、信任边界 2、资产 3、威胁代理 4、威胁类型 5、威胁评估 5.1 端点在直接请求/响应调用中模拟发送方或接收方FF-A ID 5.2 篡改端点和SPMC之间的…

基于element-ui的年份范围选择器

基于element-ui的年份范围选择器 element-ui官方只有日期范围和月份范围选择器&#xff0c;根据需求场景需要&#xff0c;支持年份选择器&#xff0c;原本使用两个分开的年份选择器实现的&#xff0c;但是往往有些是不能接受的。在网上找了很多都没有合适的&#xff0c;所以打…

【内网穿透】公网远程访问本地硬盘文件

公网远程访问本地硬盘文件【内网穿透】 文章目录 公网远程访问本地硬盘文件【内网穿透】前言1. 下载cpolar和Everything软件3. 设定http服务器端口4. 进入cpolar的设置5. 生成公网连到本地内网穿透数据隧道 总结 前言 随着云概念的流行&#xff0c;不少企业采用云存储技术来保…

QT时间日期定时器类(1.QDate类)【QT基础入门 Demo篇】

一、QT的日期类 QT有三种日期类,QTime、QDate和QDateTime 1、三种日期类的区别 QDate类提供日期函数:QDATE对象包含公历中的日历日期,即年、月和日数。它可以从系统时钟读取当前日期。它提供了比较日期和操作日期的功能。例如,有可能添加和减去日期、月份和年份。 QTIM…

Linux 信号相关

int kill(pid_t pid, int sig); -功能&#xff1a;给某个进程pid 发送某个信号 参数sig可以使用宏值或者和它对应的编号 参数pid&#xff1a; >0 &#xff1b;将信号发给指定的进程 0&#xff1b;将信号发送给当前的进程组 -1&#xff1b;发送给每一个有权限接受这个信号的…

SQL1 查询所有列

描述 题目&#xff1a;现在运营想要查看用户信息表中所有的数据&#xff0c;请你取出相应结果 示例&#xff1a;user_profile iddevice_idgenderageuniversityprovince12138male21北京大学Beijing23214male复旦大学Shanghai36543female20北京大学Beijing42315female23浙江大学…

差异备份详细说明(InsCode AI 创作助手)

差异备份详细说明 差异备份&#xff08;Differential Backup&#xff09;是一种备份策略&#xff0c;它与增量备份类似&#xff0c;但有一些关键区别。差异备份备份的是自上一次完整备份以来的所有更改数据&#xff0c;而不是自上一次备份以来的所有更改。这意味着差异备份文件…

去掉数组中的空数据

// 去掉数组中的空数据 for (let i 0; i < arr.length; i) {if (arr[i] null || arr[i] undefined || arr[i] "") {arr.splice(i, 1);i--;} }

【面试必刷TOP101】删除链表的倒数第n个节点 两个链表的第一个公共结点

目录 题目&#xff1a;删除链表的倒数第n个节点_牛客题霸_牛客网 (nowcoder.com) 题目的接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 过啦&#xff01;&#xff01;&#xff01; 题目&#xff1a;两个链表的第一个公共结点_牛客题霸_牛客网 (nowcoder.com) …