是否还在为处理模型底层配置的复杂性而烦恼?
借助 魔搭(ModelScope) ,可以直接结合 LangChain 进行高效的AI开发。
作为国内领先的 AI 开发平台,魔搭 魔搭Notebook链接 提供了广泛且丰富的开源模型资源,并支持通过 Notebook 快速构建和部署 AI 应用。同时,国际知名的 Hugging Face 模型库也为广大开发者提供了大量的预训练模型和实用工具,使得AI技术的应用变得更加便捷和高效。
为何选择 LangChain?
尽管魔搭和 HuggingFace 提供了丰富的模型资源,但在实际应用中,开发者仍然面临以下问题:
- 模型切换的复杂性:不同的模型可能有不同的 API 和调用方式,切换模型时需要修改大量代码。
- 业务逻辑与模型的耦合:模型调用和业务逻辑混杂在一起,导致代码难以维护和扩展。
- 提示工程(Prompt Engineering)的复杂性:如何设计高效的提示(Prompt)以充分发挥模型的潜力,是一个需要反复试验的过程。
LangChain 通过以下特性解决了这些问题:(下文分别举例指出这些特性)
- 模型抽象:LangChain 将模型抽象为一个统一的接口,开发者可以在 OpenAI、HuggingFace 或其他模型之间无缝切换,而无需修改业务逻辑。
- 提示模板(PromptTemplate) :通过定义动态的提示模板,开发者可以轻松生成符合业务场景的输入,提升模型的效果。
- 输出解析(Output Parsers) :LangChain 提供了强大的输出解析工具,能够将模型生成的文本转换为结构化的数据格式,方便后续处理。
01 LangChain 与 OpenAI 的结合
LangChain 对 OpenAI 的支持尤为强大。通过 LangChain,开发者可以轻松调用 OpenAI 的 GPT 系列模型,并结合提示模板和输出解析工具,快速构建复杂的 AI 应用。例如,以下代码展示了如何使用 LangChain 调用 OpenAI 模型生成腊八节诗歌:
py
# 导入内置 操作系统模块
import os
# 环境变量
os.environ["OPENAI_API_KEY"] = "you_key" # 替换成你的 API 密钥
os.environ["OPENAI_BASE_URL"] = "https://api.302.ai/v1" # 替换成你的 API 地址
from langchain_openai import OpenAI
# 实例化
llm = OpenAI(
model_name="gpt-3.5-turbo-instruct",
max_tokens=200
)
text = llm.invoke("亲,请给我写一句腊八节的诗歌")
print(text)
在这个示例中,我们首先设置了 OpenAI 的 API 密钥和基础 URL,然后实例化了一个 OpenAI
对象,并通过 invoke
方法生成了腊八节的诗歌。
模型抽象后,升级一下
02 使用 ChatOpenAI 进行对话模拟
LangChain 提供了 ChatOpenAI
类,专门用于处理多轮对话的场景。以下是一个使用 ChatOpenAI
模拟对话的示例:
py
import os
os.environ["OPENAI_API_KEY"] = "you_key" # 替换成你的 API 密钥
os.environ["OPENAI_BASE_URL"] = "https://api.302.ai/v1" # 替换成你的 API 地址
from langchain_openai import ChatOpenAI
from langchain.schema import (
SystemMessage,
HumanMessage
)
chat = ChatOpenAI(
model="gpt-3.5-turbo",
temperature=0.8,
max_tokens=60
)
messages = [
SystemMessage(content="你是一个很棒的作诗歌的诗人"),
HumanMessage(content="请给腊八写首打油诗"),
]
response = chat(messages)
print(response)
print(response.content)
相比以前:
py
messages = [
{role:'system',content:'你是一个很棒的作诗歌的诗人'},
{role:'user',content:'请给腊八写首打油诗'},
# 助手 assitant
]
直接使用SystemMessage和HumanMessage 设定system和user角色。
03 使用 PromptTemplate 动态生成提示
LangChain 的 PromptTemplate
允许开发者定义动态的提示模板,以便在不同的场景中复用。以下是一个使用 PromptTemplate
生成鲜花文案的示例:
py
import os
os.environ["OPENAI_API_KEY"] = 'you_key'
os.environ["OPENAI_BASE_URL"] = 'https://api.302.ai/v1/' #转口
from langchain_openai import OpenAI
from langchain.prompts import PromptTemplate
# 模版字符串 多行 模版+数据编译->字符串
# 各种场景的复用
template = """你是一位专业的鲜花店文案撰写员。\n
对于售价为 {price} 元的 {flower_name}, 你能提供一个
吸引人的简短描述吗?\n
"""
# prompt 实例
prompt = PromptTemplate.from_template(template)
input = prompt.format(flower_name="玫瑰",price="99")
model=OpenAI(model_name="gpt-3.5-turbo-instruct")
output = model.invoke(input)
print(output)
04 使用 Output Parsers 解析输出
LangChain 的 Output Parsers
可以帮助开发者将 LLM 生成的文本输出解析为结构化的数据格式。以下是一个使用 StructuredOutputParser
解析输出的示例:
py
# 格式化输出 程序的需要
from langchain.output_parsers import StructuredOutputParser, ResponseSchema
response_schemas = [
ResponseSchema(name="description", description="鲜花的描述文案"),
ResponseSchema(name="reason", description="为什么要这样写这个文案"),
]
#验证是否符合模板输出
output_parser = StructuredOutputParser.from_response_schemas(
response_schemas)
format_instructions = output_parser.get_format_instructions()
print(format_instructions)
from_response_schemas
方法,该解析器被配置为理解由 response_schemas
列表所定义的结构。
需要格式的{{format_instruction}},来看看type:
现在我们要填充template对应占位内容
py
prompt = PromptTemplate.from_template(template,
partial_variables={"format_instructions": format_instructions})
input = prompt.format(flower_name="玫瑰", price="99")
print(input)
从给的template字符串模版,使用类方法'.format_template'实例化prompt对象,接收第一个为模板变量,第二个是以键值对形式的字典。这意味着在模板中有名为 {format_instructions}
的占位符将会被 format_instructions
的值所替换。
检查问题和输出格式是否符合预期
py
output = model.invoke(input)
print(output)
输出看看效果
这完整代码:
py
import os
os.environ["OPENAI_API_KEY"] = "you_key" # 替换成你的 API 密钥
os.environ["OPENAI_BASE_URL"] = "https://api.302.ai/v1" # 替换成你的 API 地址
from langchain.prompts import PromptTemplate
from langchain_openai import OpenAI
from langchain.output_parsers import StructuredOutputParser,ResponseSchema
template =
"""
你是一位专业的鲜花店文案撰写员。\n
对于售价为 {price} 元的 {flower_name},你能提供一个
吸引人的简短描述吗\n
{format_instructions}
"""
#模版
response_schemas =[
ResponseSchema(name="description",description="鲜花的描述文案"),
ResponseSchema(name="reason",description="为什么要这样写这个文案"),
]
output_parse = StructuredOutputParser.from_response_schemas(
response_schemas
)
format_instructions = output_parse.get_format_instructions()
prompt = PromptTemplate.from_template(
template,
partial_variables={"format_instructions":format_instructions}
)
input = prompt.format(flower_name="玫瑰",price="99")
model = OpenAI(model_name="gpt-3.5-turbo-instruct")
output = model.invoke(input)
print(output)
总结
LangChain 就像是一个"万能适配器",帮你把 OpenAI、HuggingFace 这些大模型轻松接到你的应用里。不用再为每个模型写一堆重复代码,它用统一的接口搞定一切。想写诗?做个文案?LangChain 加个提示模板,分分钟生成你想要的内容。魔搭和 HuggingFace 提供模型,LangChain 帮你用得更顺手。
诗人来也------生活已经够复杂了,写代码就别再折腾了,LangChain 就是你的偷懒神器。