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
大概功能就是写模版,更多复杂示例:
- 用不同的关键字来区分输入项
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?" } )
- 单一关键词时可以直接传入值,不用传入字典对象:
这个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!"})
- 留放历史的位置:
写法1:
写法2:template = ChatPromptTemplate.from_messages([ ("system", "You are a helpful AI bot."), ("placeholder", "{conversation}") ])
调用template:template = ChatPromptTemplate.from_messages([ ("system", "You are a helpful AI bot."), MessagesPlaceholder(variable_name="conversation", optional=True) ])
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?"}))