LangChain 基于 Prompts 提示管理 构建特定领域模型

news2024/11/17 11:52:28

一、langChain Prompts

上篇文章对 langChain 进行了简单的介绍与使用,可以知道LangChain 是一个由语言模型LLMs驱动的应用程序框架,使用 LangChain 可以极大的降低开发成本,本篇文章主要基于 LangChain 中的 Prompts 提示管理实现特定领域的问答场景。

下面是上篇文章的地址:

LangChain 介绍及相关组件使用总结

对于Prompts 提示管理,是通过使用模版文本增加提示的方式,进而微调模型的语义理解给出更加准确的信息。因此通过这一特征可以构建非常多特定领域的问答系统,比如在用户输入的前面固定拼接一个 你是一个非常厉害的导游,根据用户内容回答景点介绍方面的信息,这样模型就知道了自己的定位,通过语义分析给出更加精准的回答。

下面通过 LangChain 中不同的 Prompts 实现特定领域的应用。

1. 景点推荐应用

通过使用 LangChain 中的 PromptTemplate ,其可以生成文本模版,通过变量参数的形式拼接成完整的语句。

例如:需要实现一个景点推荐应用,用户输入自己的描述,可以分析并推荐一个国内的景点,并给出推荐的理由:

from langchain.output_parsers import StructuredOutputParser, ResponseSchema
from langchain.prompts import ChatPromptTemplate, HumanMessagePromptTemplate, PromptTemplate
from langchain.llms import OpenAI
import os

openai_api_key = os.environ["OPENAI_API_KEY"]

llm = OpenAI(model_name="text-davinci-003", openai_api_key=openai_api_key)
# 定义结构
response_schemas = [
    ResponseSchema(name="area", description="推荐景点的地区"),
    ResponseSchema(name="reason", description="体检该地区的原因")
]
# 解析输出结构
output_parser = StructuredOutputParser.from_response_schemas(response_schemas)
format_instructions = output_parser.get_format_instructions()
# 模版内容
template = "根据用户输入内容,推荐一个中国的景点名称,并给出推荐原因 {format_instructions}, 用户输入:{value}"
# 构建提示模版
prompt = PromptTemplate(
    input_variables=["value"],
    partial_variables={"format_instructions": format_instructions},
    template=template
)

# 用户输入内容
value="我想去看大海"
# 生成完整输入
final_prompt = prompt.format(value=value)
print("输入内容::", final_prompt)
print("LLM输出:", llm(final_prompt))

在这里插入图片描述

2. 实体提取应用

NLP 领域 ner 实体提取是一个非常常用的方向,现在如果采用 Prompts 进行实现就非常简单了,只需给出准确的实体描述即可。

通过上面演示的 PromptTemplate也可以实现,这里换成 LangChain 提供的 ChatPromptTemplate 进行实现。

例如:根据输入内容提取出公司名地域名信息:

from langchain.schema import HumanMessage
from langchain.prompts import PromptTemplate, ChatPromptTemplate, HumanMessagePromptTemplate
from langchain.chat_models import ChatOpenAI
from langchain.output_parsers import StructuredOutputParser, ResponseSchema
import os

openai_api_key = os.environ["OPENAI_API_KEY"]
chat_model = ChatOpenAI(temperature=0, model_name='gpt-3.5-turbo', openai_api_key=openai_api_key)

response_schemas = [
    ResponseSchema(name="company", description="提取的公司名"),
    ResponseSchema(name="area", description="提取的地域名")
]
output_parser = StructuredOutputParser.from_response_schemas(response_schemas)
format_instructions = output_parser.get_format_instructions()
print(format_instructions)

prompt = ChatPromptTemplate(
    messages=[
        HumanMessagePromptTemplate.from_template("根据用户内容,提取出公司名称和地域名 {format_instructions}, 用户输入: {value}")
    ],
    input_variables=["value"],
    partial_variables={"format_instructions": format_instructions}
)

# 输入内容
value="阿里巴巴公司在江苏南京有分公司吗"

fruit_query = prompt.format_prompt(value=value)
print (fruit_query.messages[0].content)

fruit_output = chat_model(fruit_query.to_messages())
output = output_parser.parse(fruit_output.content)
print (output)

在这里插入图片描述

3. 中国古诗词问答应用

中国文化博大精深,其中在古诗词上颇有体现,通过LLM实现古诗词问答应用也是非常简单。

通过上面演示的 PromptTemplateChatPromptTemplate 也可以实现,这里换成 LangChain 提供的 SemanticSimilarityExampleSelector 选择器示例进行实现,给出一些实例,让模型去理解语义含义进而给出结果。

例如:实现用户输入古诗词的题目,给出其诗词的内容,用户输入诗词的内容,给出其诗词的题目:

from langchain.prompts.example_selector import SemanticSimilarityExampleSelector
from langchain.vectorstores import FAISS
from langchain.embeddings import OpenAIEmbeddings
from langchain.prompts import FewShotPromptTemplate, PromptTemplate
from langchain.llms import OpenAI

openai_api_key = os.environ["OPENAI_API_KEY"]
llm = OpenAI(model_name="gpt-3.5-turbo", openai_api_key=openai_api_key)

# 构建提示模版
example_prompt = PromptTemplate(
    input_variables=["input", "output"],
    template="示例输入:{input}, 示例输出:{output}"
)

# 示例列表
examples = [
    {"input": "春晓", "output": "春眠不觉晓,处处闻啼鸟"},
    {"input": "春夜喜雨", "output": "碧玉妆成一树高,万条垂下绿丝绦"},
    {"input": "故人西辞黄鹤楼,烟花三月下扬州", "output": "黄鹤楼送孟浩然之广陵"},
    {"input": "千山鸟飞绝,万径人踪灭", "output": "江雪"},
]

example_selector = SemanticSimilarityExampleSelector.from_examples(
    examples,
    OpenAIEmbeddings(openai_api_key=openai_api_key),
    FAISS,
    k=4
)
# 选择器示例 prompt
similar_prompt = FewShotPromptTemplate(
    example_selector=example_selector,
    example_prompt=example_prompt,
    prefix="根据下面的示例,写出输出",
    suffix="输入:{value}",
    input_variables=["value"],
)

# 输入内容
value = "春望"
# 模版生成内容
final_prompt = similar_prompt.format(value=value)
print("输入内容::", final_prompt)
print("LLM输出:", llm(final_prompt))

# 输入内容
value = "举头望明月,低头思故乡"
# 模版生成内容
final_prompt = similar_prompt.format(value=value)
print("输入内容::", final_prompt)
print("LLM输出:", llm(final_prompt))

在这里插入图片描述

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

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

相关文章

【软件设计师暴击考点】知识产权高频考点暴击系列

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:软件…

Linux conda 环境迁移 服务器之间在线迁移

网上很多方法语焉不详,本文章主要介绍conda list方式进行Linux系统在线环境迁移,迁移完毕后需要手动安装缺失的python库,负责环境不推荐此种方式迁移。 在Linux系统之间进行单一环境迁移:从服务器A迁移到服务器B 服务器A&#xf…

磷酸铁锂电池应用前景广阔,英集芯响应市场推出IP2366电源管理芯片

正极材料是锂电池的核心材料之一,其性能直接影响锂电池的能量密度、安全性、寿命和应用等,占电池总材料成本中的比例超过30%。目前行业内常见的锂离子电池正极材料主要可分为磷酸铁锂(LFP)、三元材料(NCM、NCA&#xf…

使用全志方案遇到glibc库版本低以及编译报错的解决方法

Glibc 包含了linux一些主要的C库,用于分配内存、搜索目录、打开关闭文件、读写文件、字串处理、模式匹配、数学计算等,在遇到glibc库版本低编译还报错的情况时,遵循以下步骤解决 参考文章:如何编译glibc库 make工具 注意由于AW…

Flask基础及常见问题整理

一、Flask框架介绍 使用python开发后端,目前主流的框架就是Flask和Django。其中,Flask是一款轻量级的Python web框架,有以下主要特点: 1. 简单易用 Flask很简单易用,可以快速上手开发web应用。它只依赖Werkzeug和Jinja2两个库,…

Uniformer 训练心得

这是我配环境进行训练的第一个程序,遇到了很多问题,在这里总结一下 首先是配环境 按照官方代码进行配,我跑的是uniformer中的object detection 官方github 在这里我遇到的问题 配mmdetection时总是代码有标红错误,注意&#xf…

卡萨帝:领跑者的代价和陪跑者的聪明

一台设备可以卖1.2亿欧元,而世界上只有一家公司可以生产;占据市场80%份额,在高端光刻机领域处于垄断地位;看不见任何竞争对手。 看完这几个信息,相信有些人已经猜到是何方神圣了,这正是荷兰的光刻巨人ASML…

为什么单击并按住标题栏,程序运行得更快?

有时候,人们会发现这样一个怪异现象:如果在执行一项长时间运行的任务的时候,在标题栏按下鼠标,这个时候,会发现程序运行的更快了一些。 这件奇怪的事情通常是发生在这样一种场景:当程序花费太多时间更新其…

手机录屏录音不用愁,这些方法无需ROOT就能内录声音!

现在不少人喜欢用视频分享生活,除了外拍视频,或多或少也有需要内录视频的时候,比如录个操作步骤啊、游戏视频啊,或者录个网课、录首歌啥的… 之前也有不少粉丝留言问过我这个问题,所以今天就打算来和大家简单分享一下…

JSP自定义标签【上】

🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于自定义标签的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一.什么是标签 二.什么是自定义标签…

国产骨传导耳机哪个牌子好,分享几款表现不错的国产骨传导耳机

骨传导耳机是一种新兴的耳机技术,其原理是将声音转化为不同频率的机械振动,通过人的颅骨、骨迷路、内耳淋巴液、螺旋器、听觉中枢来传递声波,不通过鼓膜,不入耳,不影响耳朵的听觉。听音乐是人们生活中不可缺少的一部分…

二叉树OJ题:LeetCode--965.单值二叉树

朋友们、伙计们,我们又见面了,本期来给大家解读一下LeetCode中第965道二叉树OJ题,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! 数据结构与算法专栏:数据结构与算法 个 人…

python旅游推荐系统-计算机毕设 附源码82884

旅游推荐系统 摘 要 随着社会的快速发展和人们生活水平的不断提高,旅游已逐渐成为人们生活的重要组成部分,用户能够获取旅游信息的渠道也随信息技术的广泛应用而增加。大量未经过滤的信息在展示给用户的同时,也淹没了用户真正感兴趣的信息。为…

二十三种设计模式第十一篇--桥接模式

好久没写博客了,自从进入6月份,毕业季,全是在忙毕业的事情,都没怎么学习代码软件工程知识了,这二十三种设计模式还是得学完哈!持之以恒,我本来为了学这二十三种设计模式的初衷是为了顺利度过软考…

Azkaban的安装教程

Azkaban的安装教程 文章目录 Azkaban的安装教程写在前面集群模式安装下载安装包上传 **tar** 包解压配置 **MySQL**配置 **Executor Server**编辑 azkaban.properties同步 azkaban-exec到所有节点启动 executor server激活 executor **配置** **Web Server**编辑 azkaban.prope…

短视频seo源码搭建技术分享

一、目录及主要文件说明 bootstrap目录,存放框架引导及启动文件,非底层改动,无需修改。其中的functions.inc中可以定义一些全局函数error目录,存放404、500等常见错误模板文件,非需勿动includes目录,drupal…

SpringBoot 如何使用 JProfiler 进行性能测试

SpringBoot 如何使用 JProfiler 进行性能测试 在 SpringBoot 应用程序中,我们可以使用 JProfiler 进行性能测试。JProfiler 是一款专业的 Java 性能分析工具,可以帮助我们识别和解决应用程序的性能问题。使用 JProfiler 可以让我们更加准确地测试代码的…

C语言进阶教程(字符串深入)

文章目录 前言一、字符数组赋值注意事项二、混淆点三、字符串字面量和字符数组的区别四、字符串长度总结 前言 其实在C语言中是没有真正的字符串的,在C语言中字符串都是使用字符数组来完成的。 一、字符数组赋值注意事项 在C语言中,字符数组&#xff…

[RocketMQ] Producer生产者启动源码 (五)

DefaultMQProducer的关系图: 文章目录 1.创建DefaultMQProducer实例2.start启动生产者2.1 getOrCreateMQClientInstance获取或者创建MQClientInstance2.2 registerProducer注册生产者2.3 start启动MQClientInstance2.4 startScheduledTask启动各种定时任务2.4.1 updateTopicRou…

【Linux】切换内核版本(Centos)

1.查看服务器已安装的所有内核版本 awk -F\ $1"menuentry " {print i " : " $2} /etc/grub2.cfg0 : CentOS Linux (3.10.0-1160.83.1.el7.x86_64) 7 (Core) 1 : CentOS Linux (3.10.0-1160.80.1.el7.x86_64) 7 (Core) 2 : CentOS Linux (3.10.0-1127.el7.…