LangChain--AI大模型(四)
·
解析器
字符串解析器 StrOutputParser
方式一:content
# 1.获取大模型
from langchain_core.messages import HumanMessage, SystemMessage
from langchain_core.output_parsers import StrOutputParser, JsonOutputParser
import os
import dotenv
from langchain_openai import ChatOpenAI
dotenv.load_dotenv()
os.environ['OPENAI_API_KEY'] = os.getenv("OPENAI_API_KEY1")
os.environ['OPENAI_BASE_URL'] = os.getenv("OPENAI_BASE_URL")
chat_model = ChatOpenAI(model="gpt-4o-mini")
messages = [
SystemMessage(content="将以下内容从英语翻译成中文"),
HumanMessage(content="It's a nice day today"),
]
# 2.调用大模型
result = chat_model.invoke(messages)
print(type(result))
print(result)
# 3.如何获取一个字符串输出结果呢
方式1:自己调用输出结果的content
print(result.content)
方式二:StrOutputParser()
# 1.获取大模型
from langchain_core.messages import HumanMessage, SystemMessage
from langchain_core.output_parsers import StrOutputParser, JsonOutputParser
import os
import dotenv
from langchain_openai import ChatOpenAI
dotenv.load_dotenv()
os.environ['OPENAI_API_KEY'] = os.getenv("OPENAI_API_KEY1")
os.environ['OPENAI_BASE_URL'] = os.getenv("OPENAI_BASE_URL")
chat_model = ChatOpenAI(model="gpt-4o-mini")
messages = [
SystemMessage(content="将以下内容从英语翻译成中文"),
HumanMessage(content="It's a nice day today"),
]
# 2.调用大模型
result = chat_model.invoke(messages)
# 方式2:使用parser处理model返回的结果
parser = StrOutputParser()
response = parser.invoke(result)
print(type(response)) # <class 'str'>
print(response)
JSON解析器 JsonOutputParser
方式一:必须在提示词中明确指定返回格式
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser, JsonOutputParser
import os
import dotenv
from langchain_openai import ChatOpenAI
dotenv.load_dotenv()
os.environ['OPENAI_API_KEY'] = os.getenv("OPENAI_API_KEY1")
os.environ['OPENAI_BASE_URL'] = os.getenv("OPENAI_BASE_URL")
chat_model = ChatOpenAI(model="gpt-4o-mini")
chat_prompt_template = ChatPromptTemplate.from_messages([
("system","你是一个靠谱的{role}"),
("human","{question}")
])
prompt = chat_prompt_template.invoke(input={"role":"人工智能专家","question":"人工智能用英文怎么说?问题用q表示,答案用a表示,返回一个JSON格式的数据"})
result = chat_model.invoke(prompt)
# 获取一个 JsonOutputParser 的实例
parser = JsonOutputParser()
json_result = parser.invoke(result)
print(type(json_result))
print(json_result)
针对方式一的第二种写法:
# 写法二:
chain = chat_prompt_template | chat_model | parser
json_result1 = chain.invoke(input={"role":"人工智能专家","question":"人工智能用英文怎么说?问题用q表示,答案用a表示,返回一个JSON格式的数据"})
方式二:通过get_format_instructions()解决手动描述JSON格式的过程
# 引入依赖包
from langchain_core.output_parsers import JsonOutputParser
from langchain_core.prompts import PromptTemplate
# 初始化语言模型
chat_model = ChatOpenAI(model="gpt-4o-mini")
joke_query = "告诉我一个笑话。"
# 定义Json解析器
parser = JsonOutputParser()
# 以PromptTemplate为例
prompt_template = PromptTemplate.from_template(
template="回答用户的查询\n满足的格式为{format_instructions}\n问题为{question}\n",
partial_variables={"format_instructions":parser.get_format_instructions()}
)
prompt = prompt_template.invoke(input={"question":joke_query})
result = chat_model.invoke(prompt)
json_result = parser.invoke(result)
print(type(json_result))
print(json_result)
针对方式二的第二种写法:
# 写法2:
chain = prompt_template | chat_model | parser
json_result2 = chain.invoke(input={"question":joke_query})
print(json_result2)
XMLOutputParser XML输出解析器的使用
举例1:自己在提示词模板中写明使用XML格式
chat_model = ChatOpenAI(model="gpt-4o-mini")
actor_query = "周星驰的简短电影记录"
response = chat_model.invoke(f"请生成{actor_query},将影片附在<movie></movie>标签中")
print(type(response))
print(response.content)
举例2:使用parser.get_format_instructions()结构实现:
# 1.导入相关包
from langchain_core.output_parsers import XMLOutputParser
from langchain_core.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
# 2. 初始化语言模型
chat_model = ChatOpenAI(model="gpt-4o-mini")
# 3.测试模型的xml解析效果
actor_query = "生成汤姆·汉克斯的简短电影记录,使用中文回复"
# 4.定义XMLOutputParser对象
parser = XMLOutputParser()
# 5.生成提示词模板
prompt_template1 = PromptTemplate.from_template(
template="用户的问题:{query}\n使用的格式:{format_instructions}"
)
prompt_template2 = prompt_template1.partial(format_instructions=parser.get_format_instructions())
response = chat_model.invoke(prompt_template2.invoke(input={"query":actor_query}))
print(type(response))
print(response.content)
LangChain调用本地大模型
第一步:下载并安装ollama
Ollama官方地址:https://ollama.com
第二步:在ollama下部署大模型:deepseek-r1:7b
访问 https://ollama.com/search 可以查看 Ollama 支持的模型。使用命令行可以下载并运行模型,例。
如运行 deepseek-r1:7b 模型:ollama run deepseek-r1:7b
第三步:在LangChain中调用ollama下的大模型
from langchain_community.chat_models import ChatOllama
from langchain_core.messages import HumanMessage
# 此时调用的是本地的大模型。省略base_url、api-key
llm = ChatOllama(
model="deepseek-r1:7b"
)
# llm.invoke("你好!请介绍下你自己")
message = [
HumanMessage(content="你好!请介绍下你自己")
]
response = llm.invoke(message)
print(response.content)
更多推荐

所有评论(0)