AI 大模型企业应用实战(07)-LangChain的Hello World项目

news/2024/9/22 17:38:17

pip install --upgrade langchain==0.0.279 -i https://pypi.org/simple

1 创建一个LLM

  • 自有算力平台+开源大模型(需要有庞大的GPU资源)企业自己训练数据
  • 第三方大模型API(openai/百度文心/阿里通义千问...)数据无所谓

让LLM给孩子起具有中国特色的名字。

在LangChain中最基本的功能就是根据文本提示来生成新的文本

使用方法:predict

生成结果根据你调用的模型不同而会产生非常不同的结果差距,并且你的模型的tempurature参数也会直接影响最终结果(即LLM的灵敏度)。

2 自定义提示词模版

  • 将提问的上下文模版化
  • 支持参数传入

让LLM给孩子起具有美国特色的名字。

将提示词模版化后会产生很多灵活多变的应用,尤其当它支持参数定义时。

使用方法

langchain.prompts

3 输出解释器

  • 将LLM输出的结果各种格式化
  • 支持类似json等结构化数据输出

让LLM给孩子起4个有中国特色的名字,并以数组格式输出而不是文本。

与chatGPT只能输出文本不同,langchain允许用户自定义输出解释器,将生成文本转化为序列数据使用方法:

langchain.schema

第一个实例

让LLM以人机对话的形式输出4个名字

名字和性别可以根据用户输出来相应输出

输出格式定义为数组

4 开始运行

pip install openai==v0.28.1 -i https://pypi.org/simple

引入openai key

import os
os.environ["OPENAI_KEY"] = "xxxxx"
# 为上网,所以需要添加
os.environ["OPENAI_API_BASE"] = "xxxxx"

从环境变量中读取:

import os
openai_api_key = os.getenv("OPENAI_KEY")
openai_api_base = os.getenv("OPENAI_API_BASE")
print("OPENAI_API_KEY:", openai_api_key)
print("OPENAI_PROXY:", openai_api_base)

运行前查看下安装情况

! pip show langchain
! pip show openai

openai 官方SDK

#使用openai的官方sdk
import openai
import osopenai.api_base = os.getenv("OPENAI_API_BASE")
openai.api_key = os.getenv("OPENAI_KEY")messages = [
{"role": "user", "content": "介绍下你自己"}
]res = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=messages,
stream=False,
)print(res['choices'][0]['message']['content'])

使用langchain调用

#hello world
from langchain.llms import OpenAI
import osapi_base = os.getenv("OPENAI_API_BASE")
api_key = os.getenv("OPENAI_KEY")
llm = OpenAI(model="gpt-3.5-turbo-instruct",temperature=0,openai_api_key=api_key,openai_api_base=api_base)
llm.predict("介绍下你自己")

起名大师

#起名大师
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
import os
api_base = os.getenv("OPENAI_API_BASE")
api_key = os.getenv("OPENAI_KEY")
llm = OpenAI(model="gpt-3.5-turbo-instruct",temperature=0,openai_api_key=api_key,openai_api_base=api_base)
prompt = PromptTemplate.from_template("你是一个起名大师,请模仿示例起3个{county}名字,比如男孩经常被叫做{boy},女孩经常被叫做{girl}")
message = prompt.format(county="中国特色的",boy="狗蛋",girl="翠花")
print(message)
llm.predict(message)

输出:

'\n\n男孩: 龙飞、铁柱、小虎\n女孩: 玉兰、梅香、小红梅'

格式化输出

from langchain.schema import BaseOutputParser
#自定义class,继承了BaseOutputParser
class CommaSeparatedListOutputParser(BaseOutputParser):"""Parse the output of an LLM call to a comma-separated list."""def parse(self, text: str):"""Parse the output of an LLM call."""return text.strip().split(", ")CommaSeparatedListOutputParser().parse("hi, bye")
['hi', 'bye']

完整案例

#起名大师,输出格式为一个数组
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
import os
from langchain.schema import BaseOutputParser#自定义类
class CommaSeparatedListOutputParser(BaseOutputParser):"""Parse the output of an LLM call to a comma-separated list."""def parse(self, text: str):"""Parse the output of an LLM call."""print(text)return text.strip().split(",")api_base = os.getenv("OPENAI_API_BASE")
api_key = os.getenv("OPENAI_KEY")
llm = OpenAI(model="gpt-3.5-turbo-instruct",temperature=0,openai_api_key=api_key,openai_api_base=api_base)
prompt = PromptTemplate.from_template("你是一个起名大师,请模仿示例起3个具有{county}特色的名字,示例:男孩常用名{boy},女孩常用名{girl}。请返回以逗号分隔的列表形式。仅返回逗号分隔的列表,不要返回其他内容。")
message = prompt.format(county="美国男孩",boy="sam",girl="lucy")
print(message)
strs = llm.predict(message)
CommaSeparatedListOutputParser().parse(strs)
['jack', ' michael', ' jason']

关注我,紧跟本系列专栏文章,咱们下篇再续!

作者简介:魔都架构师,多家大厂后端一线研发经验,在分布式系统设计、数据平台架构和AI应用开发等领域都有丰富实践经验。

各大技术社区头部专家博主。具有丰富的引领团队经验,深厚业务架构和解决方案的积累。

负责:

  • 中央/分销预订系统性能优化
  • 活动&券等营销中台建设
  • 交易平台及数据中台等架构和开发设计
  • 车联网核心平台-物联网连接平台、大数据平台架构设计及优化
  • LLM应用开发

目前主攻降低软件复杂性设计、构建高可用系统方向。

参考:

  • 编程严选网

本文由博客一文多发平台 OpenWrite 发布!

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

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

相关文章

视野修炼-技术周刊第89期 | 2023 年度 JS 报告

① JavaScript 2023 年度调查报告 - Vite 赢麻了! ② Node.js setTimeout Promise ③ local-web-server ④ 尤大:Vue 10周年演讲 - Vue过去与未来 ⑤ loadership - 纯 CSS loading 动画生成 ⑥ Entity Code - 插件CV符号 ⑦ linaria - 0运行时的 CSS in JS库 ⑧ 镜头模糊效果…

小鲤AI志愿填报助手:一键探索最适合你的大学专业

背景 每年六月,随着高考的落幕,一个新的挑战随之而来——如何在全国范围内的激烈竞争中抢占一席之地。今年,超过1300万的学生参加了这场决定未来命运的考试,每一个人都希望能进入心仪的大学,学习理想的专业。然而,选择的过程并不简单,错综复杂的分数线、众多的院校和专业…

UE 不修改源码实现遮罩控件 (Mask Widget)

本文内容的参考和灵感来自以下链接 GitHub - inkiu0/MaskWidget: UE4 MaskWidget GitHub - JanSeliv/CustomShapeButton: Open-source plugin that allows to make buttons of any shape in UE5.4 在 UE 有一个很麻烦的地方,Slate 事件不是按照堆叠顺序传递的,就会形成以下现…

【服务器】Ubuntu虚拟内存设置

引子 最近服务器内存老是爆掉,64G的内存对于四五个人同时使用还是有点勉强,上网查询了一下虚拟内存的教程,本博客记录一下方法。swap内存设置 假设你想将swap文件放在/mnt/data/mem目录下,以下是详细的步骤: 创建并启用Swap文件创建目录(如果目录不存在): sudo mkdir -…

作业7

task1. 点击查看代码 // 将图书信息写入文本文件data1.txt // 再从文件中读取图书信息,打印输出到屏幕上,并显示行号#include <stdio.h>#define N 80 #define M 100typedef struct {char name[N]; // 书名 char author[N]; // 作者 } Book;// 函数声明 void func1()…

使用cloudflare-works搭建自己docker加速源

在网上看到了许多教程,基本上部署都是手动的,docker镜像都要手动输入选择重新部署。要么都是些基本镜像仓库。 视频地址:【CloudFlare搭建doker加速源。都这么长时间了,你的docker还是跑不通吗?】 https://www.bilibili.com/video/BV1F533eHEsB/?share_source=copy_web&a…

AI 大模型企业应用实战(06)-初识LangChain

LLM大模型与AI应用的粘合剂。 1 langchain是什么以及发展过程 LangChain是一个开源框架,旨在简化使用大型语言模型构建端到端应用程序的过程,也是ReAct(reason+act)论文的落地实现。2022年10月25日开源 54K+ star 种子轮一周1000万美金,A轮2500万美金 11个月里累计发布200多…

创新实现(九)——博客处理

博客部分 当用户需要针对OJ上的比赛以及题目进行相关讨论的时候,OJ平台给大家一个博客平台供大家交流讨论。博客部分中利用blogs.php文件进行最近前10个博客的显示,用户可以利用右上角的按钮查看自己的博客情况以及自己写一个博客。 博客总览blogs.php文件用于生成一个博客总…