魔搭 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 就是你的偷懒神器。

相关推荐
Kagol1 小时前
🎉OpenTiny NEXT-SDK 重磅发布:四步把你的前端应用变成智能应用!
前端·开源·agent
罗西的思考1 小时前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
冬奇Lab2 小时前
OpenClaw 源码精读(2):Channel & Routing——一条消息如何找到它的 Agent?
人工智能·开源·源码阅读
冬奇Lab2 小时前
一天一个开源项目(第38篇):Claude Code Telegram - 用 Telegram 远程用 Claude Code,随时随地聊项目
人工智能·开源·资讯
孟健3 小时前
Karpathy 用 200 行纯 Python 从零实现 GPT:代码逐行解析
python
格砸3 小时前
从入门到辞职|从ChatGPT到OpenClaw,跟上智能时代的进化
前端·人工智能·后端
可观测性用观测云3 小时前
可观测性 4.0:教系统如何思考
人工智能
sunny8654 小时前
Claude Code 跨会话上下文恢复:从 8 次纠正到 0 次的工程实践
人工智能·开源·github
小笼包包仔4 小时前
OpenClaw 多Agent软件开发最佳实践指南
人工智能
smallyoung4 小时前
AgenticRAG:智能体驱动的检索增强生成
人工智能