LangChain的核心模块和实战

主要模型

  • LLM:对话模型, 输入和输出都是文本
  • Chat Model: 输入输出都是数据结构

模型IO设计

  • Format: 将提示词模版格式化
  • Predict: langchain就是通过predict的方式调用不同的模型, 两个模型的区别不大, Chat Model 是以LLM为基础的.
  • Parese: langchain还可以对结果进行干预, 得到的文本可以用parse进行格式化, 根据格式化的文本再去对外部系统的操作, 可以做输出的自定义

两种主要的提示模版

PromptTemplate

#字符模板
from langchain.prompts import PromptTemplate

prompt = PromptTemplate.from_template("你是一个{name},帮我起1个具有{county}特色的{sex}名字")
prompt.format(name="算命大师",county="法国",sex="女孩")

ChatPromptTemplate

# 对话模板具有结构,chatmodels
from langchain.prompts import ChatPromptTemplate

chat_template = ChatPromptTemplate.from_messages(
    [
        ("system", "你是一个起名大师. 你的名字叫{name}."),
        ("human", "你好{name},你感觉如何?"),
        ("ai", "你好!我状态非常好!"),
        ("human", "你叫什么名字呢?"),
        ("ai", "你好!我叫{name}"),
        ("human", "{user_input}"),
    ]
)

chat_template.format_messages(name="陈大师", user_input="你的爸爸是谁呢?")

from langchain.schema import SystemMessage
from langchain.schema import HumanMessage
from langchain.schema import AIMessage

# 直接创建消息
sy = SystemMessage(
  content="你是一个起名大师",
  additional_kwargs={"大师姓名": "陈瞎子"}
)

hu = HumanMessage(
  content="请问大师叫什么?"
)
ai = AIMessage(
  content="我叫陈瞎子"
)
[sy,hu,ai]

SystemMessage, HumanMessage, AIMessage 是LangChain内置的三种消息体模版, 分别代表系统内置设置、人类角色消息、Ai回答消息

prompts自定义模版实战


##函数大师:根据函数名称,查找函数代码,并给出中文的代码说明

from langchain.prompts import StringPromptTemplate


# 定义一个简单的函数作为示例效果
def hello_world(abc):
    print("Hello, world!")
    return abc


PROMPT = """\
你是一个非常有经验和天赋的程序员,现在给你如下函数名称,你会按照如下格式,输出这段代码的名称、源代码、中文解释。
函数名称: {function_name}
源代码:
{source_code}
代码解释:
"""

import inspect


def get_source_code(function_name):
    #获得源代码
    return inspect.getsource(function_name)

#自定义的模板class
class CustmPrompt(StringPromptTemplate):

    
    def format(self, **kwargs) -> str:
        # 获得源代码
        source_code = get_source_code(kwargs["function_name"])

        # 生成提示词模板
        prompt = PROMPT.format(
            function_name=kwargs["function_name"].__name__, source_code=source_code
        )
        return prompt

a = CustmPrompt(input_variables=["function_name"])
pm = a.format(function_name=hello_world)

print(pm)

#和LLM连接起来
from langchain.llms import OpenAI
import os
api_base = os.getenv("OPENAI_PROXY")
api_key = os.getenv("OPENAI_API_KEY")

llm = OpenAI(
    model="gpt-3.5-turbo-instruct",
    temperature=0,
    openai_api_key=api_key,
    openai_api_base=api_base
    )
msg = llm.predict(pm)
print(msg)

序列化模版使用

序列化: 使用文件管理提示词

  • 便于共享
  • 便于版本管理
  • 便于存储
  • 支持常见格式(json/yaml/txt)

json:

{
    "_type":"prompt",
    "input_variables":["name","what"],
    "template":"给我讲一个关于{name}的{what}故事"
}

yaml:

_type: prompt
input_variables:
    ["name","what"]
template:
    给我讲一个关于{name}的{what}故事

使用

from langchain.prompts import load_prompt

#加载yaml格式的prompt模版
prompt = load_prompt("simple_prompt.yaml")
print(prompt.format(name="小黑",what="恐怖的"))

#加载json格式的prompt模版
prompt = load_prompt("simple_prompt.json")
print(prompt.format(name="小红",what="搞笑的"))

自定义json解析:

{
    "input_variables": [
        "question",
        "student_answer"
    ],
    "output_parser": {
        "regex": "(.*?)\\nScore: (.*)",
        "output_keys": [
            "answer",
            "score"
        ],
        "default_output_key": null,
        "_type": "regex_parser"
    },
    "partial_variables": {},
    "template": "Given the following question and student answer, provide a correct answer and score the student answer.\nQuestion: {question}\nStudent Answer: {student_answer}\nCorrect Answer:",
    "template_format": "f-string",
    "validate_template": true,
    "_type": "prompt"
}
#支持加载文件格式的模版,并且对prompt的最终解析结果进行自定义格式化
prompt = load_prompt("prompt_with_output_parser.json")
prompt.output_parser.parse(
    "George Washington was born in 1732 and died in 1799.\nScore: 1/2"
)

示例选择器(prompts组件)根据长度动态选择提示词示例组

根据长度要求智能选择示例

示例模版可以根据输入的长度来动态调整示例的长度

#根据输入的提示词长度综合计算最终长度,智能截取或者添加提示词的示例

from langchain.prompts import PromptTemplate
from langchain.prompts import FewShotPromptTemplate
from langchain.prompts.example_selector import LengthBasedExampleSelector

#假设已经有这么多的提示词示例组:
examples = [
    {"input":"happy","output":"sad"},
    {"input":"tall","output":"short"},
    {"input":"sunny","output":"gloomy"},
    {"input":"windy","output":"calm"},
    {"input":"高兴","output":"悲伤"}
]

#构造提示词模板
example_prompt = PromptTemplate(
    input_variables=["input","output"],
    template="原词:{input}\n反义:{output}"
)

#调用长度示例选择器
example_selector = LengthBasedExampleSelector(
    #传入提示词示例组
    examples=examples,
    #传入提示词模板
    example_prompt=example_prompt,
    #设置格式化后的提示词最大长度
    max_length=25,
    #内置的get_text_length,如果默认分词计算方式不满足,可以自己扩展
    #get_text_length:Callable[[str],int] = lambda x:len(re.split(&
### 关于 LangChain LLM 的实战案例 LangChain 提供了一个强大的框架用于开发基于大型语言模型的应用程序。通过该平台,开发者能够更高效地创建复杂的对话系统其他文本处理工具。 #### 使用 LangChain 构建 LLM 驱动应用程序的基础流程 新手教程介绍了如何开始使用 LangChain 来简化与预训练的语言模型之间的交互过程[^2]。这不仅限于简单的 API 调用;还包括了提示工程——即设计有效的输入指令以获取理想的响应结果。为了便于重复利用成功的提示语句,LangChain 还引入了提示模板的概念,允许用户保存并重用经过验证的工作配置。 #### 实际操作指南:编写代码示例 对于想要深入了解具体实现细节的人来说,官方文档提供了一系列详细的实例说明。例如,在表达式语言部分有一个专门针对代码编写的章节[^3],其中包含了完整的 Python 代码片段,展示了怎样运用 LangChain 表达式来执行特定的任务,如自动生成函数定义或解析编程问题。 ```python from langchain import PromptTemplate, LLMChain from langchain.llms import OpenAI # 创建一个带有变量插槽的PromptTemplate对象 template = "你是一个擅长{language}编程的大师,请解释什么是{concept}" prompt = PromptTemplate(input_variables=["language", "concept"], template=template) # 初始化OpenAI LLM链 llm_chain = LLMChain(prompt=prompt, llm=OpenAI()) # 执行查询 response = llm_chain.run({"language": "Python", "concept": "列表推导"}) print(response) ``` 这段代码演示了如何设置一个包含动态参数的提示模板,并通过调用 `run` 方法传入具体的值来进行个性化提问。此方法非常适合用来探索不同领域内的知识点或是解决实际遇到的技术难题。 #### Chain 模块的作用及其重要性 值得注意的是,LangChain 中的核心概念之一就是 Chains(链条),它负责连接各个独立的功能单元形成一条逻辑清晰的操作流水线[^4]。这种结构化的设计使得整个系统的扩展性灵活性大大增强,同时也降低了维护成本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值