魔搭 AI 框架开发与 LangChain 的结合

是否还在为处理模型底层配置的复杂性而烦恼?

借助 魔搭(ModelScope) ,可以直接结合 LangChain 进行高效的AI开发。

作为国内领先的 AI 开发平台,魔搭 魔搭Notebook链接 提供了广泛且丰富的开源模型资源,并支持通过 Notebook 快速构建和部署 AI 应用。同时,国际知名的 Hugging Face 模型库也为广大开发者提供了大量的预训练模型和实用工具,使得AI技术的应用变得更加便捷和高效。

为何选择 LangChain?

尽管魔搭和 HuggingFace 提供了丰富的模型资源,但在实际应用中,开发者仍然面临以下问题:

  1. 模型切换的复杂性:不同的模型可能有不同的 API 和调用方式,切换模型时需要修改大量代码。
  2. 业务逻辑与模型的耦合:模型调用和业务逻辑混杂在一起,导致代码难以维护和扩展。
  3. 提示工程(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 就是你的偷懒神器。

相关推荐
大数据追光猿1 分钟前
Python应用算法之贪心算法理解和实践
大数据·开发语言·人工智能·python·深度学习·算法·贪心算法
山河已无恙20 分钟前
基于 DeepSeek LLM 本地知识库搭建开源方案(AnythingLLM、Cherry、Ragflow、Dify)认知
开源·知识库·deepseek
Leuanghing25 分钟前
【Leetcode】11. 盛最多水的容器
python·算法·leetcode
灵感素材坊1 小时前
解锁音乐创作新技能:AI音乐网站的正确使用方式
人工智能·经验分享·音视频
xinxiyinhe2 小时前
如何设置Cursor中.cursorrules文件
人工智能·python
AI服务老曹2 小时前
运用先进的智能算法和优化模型,进行科学合理调度的智慧园区开源了
运维·人工智能·安全·开源·音视频
gz927cool2 小时前
大模型做导师之开源项目学习(lightRAG)
学习·开源·mfc
alphaAIstack2 小时前
大语言模型推理能力从何而来?
人工智能·语言模型·自然语言处理
诸神缄默不语2 小时前
如何用Python 3自动打开exe程序
python·os·subprocess·python 3
zenRRan2 小时前
Qwen2.5-VL Technical Report!!! 操作手机电脑、解析化学公式和乐谱、剪辑电影等,妥妥六边形战士 !...
人工智能