解析器

字符串解析器 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)

更多推荐