LangChain的Hello World项目
共 6226字,需浏览 13分钟
·
2024-06-05 23:38
点击下方“JavaEdge”,选择“设为星标”
免责声明~
任何文章不要过度深思!
万事万物都经不起审视,因为世上没有同样的成长环境,也没有同样的认知水平,更「没有适用于所有人的解决方案」;
不要急着评判文章列出的观点,只需代入其中,适度审视一番自己即可,能「跳脱出来从外人的角度看看现在的自己处在什么样的阶段」才不为俗人。
怎么想、怎么做,全在乎自己「不断实践中寻找适合自己的大道」
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"] = "sk-ss"
# 为了科学上网,所以需要添加
os.environ["OPENAI_API_BASE"] = "https://ai-yyds.com/v1"
从环境变量中读取:
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 os
openai.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 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
)
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'
写在最后
公众号
:JavaEdge
专注分享软件开发全生态相关技术文章
、视频教程
资源、热点资讯等,如果喜欢我的分享,给 🐟🐟 点一个赞
👍 或者 ➕关注
都是对我最大的支持。
欢迎长按图片加好友
,我会第一时间和你分享软件行业趋势
,面试资源
,学习途径
等等。
添加好友备注【技术群交流】拉你进技术交流群
关注公众号后,在后台私信:
-
回复【架构师】,获取架构师学习资源教程 -
回复【面试】,获取最新最全的互联网大厂面试资料 -
回复【简历】,获取各种样式精美、内容丰富的简历模板 -
回复 【路线图】,获取直升Java P7技术管理的全网最全学习路线图 -
回复 【大数据】,获取Java转型大数据研发的全网最全思维导图 -
更多教程资源应有尽有,欢迎 关注并加技术交流群,慢慢获取