LangChain v0.1调用OpenAI接口进行智能问答教程

诸神缄默不语-个人优快云博文目录

LangChain官网:https://www.langchain.com/

LangChain是一个集成性的LLM实现方案,就是可以用它来统一地实现调用各种大模型API实现各种任务。
但是LangChain本身其实并不容易上手……只是集成性确实强,而且很多人用,所以还是得学一下。

这个是我去年需要用v0.1的时候写了一点点,我本来是想写完整的教程的,但今年又需要用langchain,我一看都尼玛更新到v0.3了,遂把本地的langchain和langchain-community也更新到最新版!
但是生产环境的langchain还是老版,所以以后还是可能会用v0.1版,所以干脆两个版本的教程都拆开来随写随发。因为langchain似乎是全面支持向前兼容的,所以估计其实都能用~

1. 安装

pip install langchain

2. OpenAI系的调用

教程网址:https://python.langchain.com/v0.1/docs/get_started/quickstart/

安装:pip install langchain-openai

各种类OpenAI的大模型调用方案都能用,只要改api_base / api_key / model就行。

比如Yi Model:

llm = ChatOpenAI(openai_api_base="https://api.lingyiwanwu.com/v1", openai_api_key="Your-API-key", model="yi-medium")

简单的提问

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(api_key=OPENAI_API_KEY, model="gpt-4-0125-preview")

return_object=llm.invoke("如何用ChatGPT?")
print(return_object.content)

ChatOpenAI的文档:https://api.python.langchain.com/en/latest/chat_models/langchain_openai.chat_models.base.ChatOpenAI.html
invoke()的文档:https://api.python.langchain.com/en/latest/chat_models/langchain_openai.chat_models.base.ChatOpenAI.html#langchain_openai.chat_models.base.ChatOpenAI.invoke

提示工程:结合系统指令或历史来提问 ChatPromptTemplate

from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate

llm = ChatOpenAI(api_key=OPENAI_API_KEY, model="gpt-4-0125-preview")

prompt = ChatPromptTemplate.from_messages([
    ("system", "You are a world technical documentation writer."),
    ("user", "{input}")
])

chain = prompt | llm

return_object=chain.invoke({"input": "如何用ChatGPT?"})

print(return_object.content)

ChatPromptTemplate的文档:https://api.python.langchain.com/en/latest/prompts/langchain_core.prompts.chat.ChatPromptTemplate.html

大概功能就是写模版,更多复杂示例:

  1. 用不同的关键字来区分输入项
    template = ChatPromptTemplate.from_messages([
        ("system", "You are a helpful AI bot. Your name is {name}."),
        ("human", "Hello, how are you doing?"),
        ("ai", "I'm doing well, thanks!"),
        ("human", "{user_input}"),
    ])
    
    prompt_value = template.invoke(
        {
            "name": "Bob",
            "user_input": "What is your name?"
        }
    )
    
  2. 单一关键词时可以直接传入值,不用传入字典对象:
    template = ChatPromptTemplate.from_messages([
        ("system", "You are a helpful AI bot. Your name is Carl."),
        ("human", "{user_input}"),
    ])
    
    prompt_value = template.invoke("Hello, there!")
    
    这个invoke()等价于prompt_value = template.invoke({"user_input": "Hello, there!"})
  3. 留放历史的位置:
    写法1:
    template = ChatPromptTemplate.from_messages([
        ("system", "You are a helpful AI bot."),
        ("placeholder", "{conversation}")
    ])
    
    写法2:
    template = ChatPromptTemplate.from_messages([
        ("system", "You are a helpful AI bot."),
        MessagesPlaceholder(variable_name="conversation", optional=True)
    ])
    
    调用template:
    prompt_value = template.invoke(
        {
            "conversation": [
                ("human", "Hi!"),
                ("ai", "How can I assist you today?"),
                ("human", "Can you make me an ice cream sundae?"),
                ("ai", "No.")
            ]
        }
    )
    

如果不能解析到能用的模型中,就会报ValidationError

LangChain内置解析ChatModel输出为字符串的API:StrOutputParser

from langchain_core.output_parsers import StrOutputParser

output_parser = StrOutputParser()

chain = prompt | llm | output_parser

print(chain.invoke({"input": "如何用ChatGPT?"}))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诸神缄默不语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值