【LLM】LangChain基础使用(构建LLM应用)

news2025/1/11 6:50:21

note

  • LangChain应用开发框架,支持python和typescript语言;可以帮助生成prompt模板,并通过代理充当其他组件(如提示模板、其他大语言模型、外部数据和其他工具)的中央接口。
  • LangChain可以直接与 OpenAI 的 text-davinci-003、gpt-3.5-turbo 模型以及 Hugging Face 的各种开源语言模如 Google 的 flan-t5等模型集成。

文章目录

  • note
  • 一、LangChain介绍
  • 二、LangChain的应用
    • 1. 集成LLM
    • 2. Prompts创建
    • 3. 短语模板
  • Reference

一、LangChain介绍

  • 为各种不同基础模型提供统一接口
  • 帮助管理提示的框架
  • 一套中心化接口,用于处理长期记忆(参见Memory)、外部数据(参见Indexes)、其他 LLM(参见Chains)以及 LLM 无法处理的任务的其他代理(例如,计算或搜索)。

总的来说,有六大核心模块:

  • Models:从不同的 LLM 和嵌入模型中进行选择
  • Prompts:管理 LLM 输入
  • Chains:将 LLM 与其他组件相结合
  • Indexes:访问外部数据
  • Memory:记住以前的对话
  • Agents:访问其他工具

二、LangChain的应用

1. 集成LLM

# !/usr/bin/python
# -*- coding: utf-8 -*-
import os
from langchain.schema import HumanMessage
from langchain.chat_models import ChatOpenAI
from langchain.llms import OpenAI
from langchain import PromptTemplate
from langchain.chains import LLMChain
from langchain import PromptTemplate, FewShotPromptTemplate

os.environ["OPENAI_API_KEY"] = "..."
os.environ['HUGGINGFACEHUB_API_TOKEN'] = '...'

# # llm initialization, LangChain集成LLM模型
# pip -q install openai langchain huggingface_hub

# llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)
#
# while True:
#     human_input = input("(human): ")
#     human_input = [HumanMessage(content=human_input)]
#     ai_output = llm(human_input)
#     print(f"(ai): {ai_output.content}")

# 1. model test
llm = OpenAI(model_name='text-davinci-003',
             temperature=0.9,
             max_tokens=1024)

text = "老鼠生病了能吃老鼠药吗?"
print(llm(text)) 
# 不能。老鼠药只能用于驱除和杀死老鼠,不能用于治疗老鼠疾病。如果老鼠生病了,需要求助专业兽医进行治疗。

2. Prompts创建

# 2. prompt generation
restaurant_template = """
我想让你成为一个给新开餐馆命名的顾问。
给我返回一个餐馆名字的名单. 每个餐馆名字要简单, 朗朗上口且容易记住. 它应该和你命名的餐馆类型有关.
关于{restaurant_desription} 这家餐馆好听名字有哪些?
"""
# 创建一个prompt模板
prompt_template = PromptTemplate(
    input_variables=["restaurant_desription"],
    template=restaurant_template
)
description = "一家以婚纱摄影为主题的汉堡店"
description_02 = "一家拉面店,营业员都穿着汉服"
description_03 = "一家能看到海景的烤肉店"
# 查看模板生成的生成的内容。
print(prompt_template.format(restaurant_desription=description))
# 应用prompt模板
chain = LLMChain(llm = llm, prompt = prompt_template)
print(chain.run("一家以婚纱摄影为主题的汉堡店"))

1. 海洋蔚蓝婚纱汉堡
2. 白马婚礼汉堡
3. 幸福煎饼汉堡
4. 唯美烤肉汉堡
5. 爱情芝士汉堡
6. 天使之翼汉堡
7. 星期五婚礼汉堡
8. 情侣奇妙汉堡
9. 时尚恋人汉堡
10. 魅力婚礼汉堡

3. 短语模板

# 3. 短语模板
# 首先创建一个短语示例,该示例包含两组输入和输出,每输入一个词语,LLM就会输出一个对应的反义词
examples = [
    {"输入": "高兴", "输出": "悲伤"},
    {"输入": "高大", "输出": "低矮"},
]
#创建一个prompt模板,
example_prompt = PromptTemplate(
    input_variables=["输入", "输出"],
    template="\n输入: {输入}\n输出: {输出}\n",
)
# 最后我们创建一个短语prompt模板对象
few_shot_prompt = FewShotPromptTemplate(
    # 这些是我们要插入到prompt中的示例
    examples=examples,
    # 将示例插入prompt时,格式化示例的方式。
    example_prompt=example_prompt,
    # 输入变量是用户直接输入的变量
    input_variables=["input"],
    # 前缀变量
    prefix="给出每个输入词语的反义词",
    # 后缀变量
    suffix="输入: {input}\n输出:",
    # 用来连接前缀、示例和后缀的字符串。
    example_separator="\n",
)

# 测试一下短语模板对象
print(few_shot_prompt.format(input="快乐"))

# 在LLM中应用短语模板
from langchain.chains import LLMChain
chain = LLMChain(llm=llm, prompt=few_shot_prompt)

chain.run("善良")
Out[14]: ' 恶毒'
chain.run("肥仔")
Out[15]: ' 瘦子'

在这里插入图片描述

Reference

[1] 用LangChain构建大语言模型应用
[2] https://blog.langchain.dev/announcing-our-10m-seed-round-led-by-benchmark/
[3] Langchain官方文档:https://python.langchain.com/en/latest/
[4] LangChain与大型语言模型(LLMs)应用基础教程:Prompt模板

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

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

相关文章

BGW协议(算数共享)

概述 BGW协议可以用于对域上包含加法、乘法、常数乘法门的算术电路求值,此协议强依赖Shamir秘密分享方案,利用其同态特性对各个秘密份额进行适当的处理,就可以在秘密值上进行安全计算。 加法门 算数加法共享(两方) …

c++ 友元介绍

友元的目的就是让一个函数或类访问另一个函数中的私有成员 友元函数 (1)普通函数作为友元函数 class 类名{friend 函数返回值类型 友元函数名(形参列表);//这个形参一般是此类的对象.... } 经过以上操作后,友元函数就可以访问此类中的私有…

Vue最新快速上手教程(狂神)

文章目录 前端核心分析1. 第一个Vue程序2. Vue基本语法3. Vue绑定事件4. Vue双向绑定5. 组件讲解6. Axios异步通信7. 计算属性8. 插槽slot9. 自定义事件内容分发10. 第一个vue-cli程序11. webpack学习使用12. vue-router路由13. vueelementUI14. 路由嵌套15. 参数传递及重定向1…

【JAVA】黑马程序员JAVA教程笔记 基础篇 Day 1

常用命令行DOS命令 Path环境变量 用途 1. 可以理解为系统中的一个大管家,记录了很多软件的完整路径。 2. 将常用的软件都交给Path环境变量,便于用命令行打开。 设置步骤 复制要使用的软件的存储地址右键点击 此电脑,打开属性点击 高级系统…

【2023最新】几乎涵盖你需要的Android性能优化的所有操作

前言 现如今,Android开发在市面上的需求不再像以前一样一人难求,僧多认识的情况直接导致整个行业对Android开发岗位的要求越来越高,Android 开发越来越规范,间接导致项目对质量要求的提升。启动优化、内存优化、App 崩溃监控等性…

【网络安全CTF】BUUCTF(Basic篇)

Linux Labs 解题思路:已给用户名密码,直接用ssh工具连接即可获取flag 查找flag在跟下 提交完成。 BUU LFI COURSE 1 访问链接:为php代码审计题,看题目要求构造GET请求读取文件 http://9a7d4988-99f9-4c29-88d8-600e19887723.n…

三极管知识大全

一、三极管的使用 一般可以当做开关管来使用,也可以利用三极管的放大特性,来搭建恒流源,恒压源等等, 三极管当做开关管来使用的话,三极管输出的是高、低、高、低的方波信号 BUCK电源的开关频率在65KHz,也…

【刷题笔记】另类加法+走方格的方案数

一、另类加法 题目: 牛客网链接:另类加法_牛客题霸_牛客网 描述 给定两个int A和B。编写一个函数返回AB的值,但不得使用或其他算数运算符。 测试样例:1,3 返回:4 解析: 因为无法使用算数运算符…

网易云音乐开发--完善video模块

解决多个视频同时播放问题 老样子,npm start开启服务器 说一下问题 现在打开多个视频会让他,同时播放,相当的吵闹。我们只需要一次只有一个视频播放 看文档,我们的思路是点击这个视频,关闭上次视频 我们传入这个id …

shell脚本语言

# 编写一个名为myfirstshell.sh的脚本,它包括以下内容。 #!/bin/bash# 1、包含一段注释,列出您的姓名、脚本的名称和编写这个脚本的目的 # 杨轩 # myfirstshell.sh # 脚本命令的练习# 2、和当前用户说“hello 用户名” echo "hello xuan"# 3、…

Vue生命周期函数执行顺序(使用注意事项)

文章目录 beforeCreatecreatedbeforeMountmountedbeforeUpdateupdatedbeforeDestroydestroyed Vue.js 是一个基于 MVVM 模式的前端框架,它的核心是一个响应式的数据绑定系统。在 Vue.js 中,组件是一个可复用的 Vue 实例,它拥有自己的生命周期…

第二章 进程管理

2.1 进程的引入 2.1.1程序的顺序执行 1.程序的顺序执行 程序是人们要计算机完成特定功能的一些指令序列,是一个按严格次序、顺序执行的操作序列,是一个静态的概念。 如:有一个程序,要求先输入数据,再做相应的计算…

platform_get_resource=NULL内核源码分析

platform_get_resourceNULL内核源码分析 文章目录 platform_get_resourceNULL内核源码分析1.第一步,我们看一下什么情况下platform_get_resource函才会返回NULL,也就是没有获取到资源。2.第二步,因为myled这个设节点会转成了platform_device,…

suricata中DPDK收发包线程模型和配置说明

《基于DPDK收包的suricata的安装和运行》中已经讲过基于DPDK收发包的suricata的安装过程,今天我们来看一下,suricata中DPDK的收发包线程模型以及相关的配置。 1、收发包线程模型: 通过分析代码,suricata中DPDK收发包线程模型如下…

C高级 day03

1.编写一个名为myfirstshell.sh的脚本,它包括以下内容。 1、包含一段注释,列出您的姓名、脚本的名称和编写这个脚本的目的 2、和当前用户说“hello 用户名” 3、显示您的机器名 hostname 4、显示上一级目录中的所有文件的列表 5、显示变量PATH和HOM…

采药 DP 裸01背包 java

&#x1f351; 采药 import java.util.*;class Main{static int N 1010;static int[] f new int[N];public static void main(String[] aaa){Scanner sc new Scanner(System.in);int m sc.nextInt();int n sc.nextInt();for(int i 0; i < n; i){int v sc.nextInt()…

s2021ss62找规律

代码&#xff1a; #include<bits/stdc.h> using namespace std; int n,m,ans; int main() {cin>>n>>m;for(int i1;i<n-1;i)ansi;cout<<ansm;return 0; }

一文了解支付卡行业数据安全标准(PCI DSS 4.0)新要求

在接下来不到一年的时间里&#xff0c;将有越来越多的企业要遵守支付卡行业数据安全标准 (PCI DSS) 4.0 版的多项新要求。 关于 PCI DSS PCI DSS 包含 12 项保护支付卡数据的要求&#xff0c;在过去十年中都没有更新。但经过三年的商讨&#xff0c;现在已经进行了重大改革。 …

JavaScript基础语法篇超详解

目录 一. 什么是JavaScript? 概念 JavaScript可以做的事情 JavaScript和HTML, CSS之间的关系 JavaScript运行过程 二. 基础语法篇 第一个JavaScript程序 JS的书写形式 JS的代码注释 输入输出 变量的使用 变量命名 数据类型 变量的声明和使用 理解动态类型 JS变量类型 JS数组…

一百一十一、Hive——从HDFS到Hive的数据导入(静态分区、动态分区)

一、分区的定义 分区表实际上就是对应一个 HDFS 文件系统上的独立的文件夹&#xff0c; Hive 中的分区就是分目录 &#xff0c;把一个大的数据集根据业务需要分割成小的数据集。 在查询时通过 where 子句中的表达式选择查询所需要的指定的分区&#xff0c;这样的查询效率 会…