构建LangChain应用程序的示例代码:9、使用Anthropic API生成结构化输出的工具教程

本文主要是介绍构建LangChain应用程序的示例代码:9、使用Anthropic API生成结构化输出的工具教程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

使用Anthropic API生成结构化输出的工具

Anthropic API最近增加了工具使用功能。

这对于生成结构化输出非常有用。

! pip install -U langchain-anthropic

可选配置:

import osos.environ['LANGCHAIN_TRACING_V2'] = 'true'  # 启用追踪
os.environ['LANGCHAIN_API_KEY'] =  # 设置你的API密钥

我们如何使用工具来产生结构化输出?

函数调用/工具使用仅生成有效载荷。

有效载荷通常是JSON字符串,可以传递给API,或者在本例中,传递给解析器以产生结构化输出。

LangChain提供了llm.with_structured_output(schema),使得生成符合模式的结构化输出变得非常容易。
在这里插入图片描述

from langchain_anthropic import ChatAnthropic
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.pydantic_v1 import BaseModel, Field# 数据模型
class Code(BaseModel):"""代码输出"""# LLM
llm = ChatAnthropic(model="claude-3-opus-20240229",default_headers={"anthropic-beta": "tools-2024-04-04"},
)# 结构化输出,包括原始内容将捕获原始输出和解析器错误
structured_llm = llm.with_structured_output(Code, include_raw=True)
code_output = structured_llm.invoke("Write a python program that prints the string 'hello world' and tell me how it works in a sentence"
)

初始推理阶段:

code_output["raw"].content[0]

工具调用:

code_output["raw"].content[1]

JSON字符串:

code_output["raw"].content[1]["input"]

错误:

error = code_output["parsing_error"]
error

结果:

parsed_result = code_output["parsed"]

Python:

parsed_result.prefix

Python:

parsed_result.imports

Python:

parsed_result.code

更具挑战性的例子:

动机例子,用于工具使用/结构化输出。
在这里插入图片描述

这里是我们想要回答有关代码问题的一些文档。

from bs4 import BeautifulSoup as Soup
from langchain_community.document_loaders.recursive_url_loader import RecursiveUrlLoaderLCEL文档url = "https://python.langchain.com/docs/expression_language/"
loader = RecursiveUrlLoader(url=url, max_depth=20, extractor=lambda x: Soup(x, "html.parser").text
)
docs = loader.load()根据URL对列表进行排序并获取文本d_sorted = sorted(docs, key=lambda x: x.metadata["source"])
d_reversed = list(reversed(d_sorted))
concatenated_content = "\n\n\n --- \n\n\n".join([doc.page_content for doc in d_reversed]
)

问题:

如果我们想强制使用工具怎么办?

我们可以使用回退策略。

让我们选择一个代码生成提示,根据我的一些测试,它没有正确调用工具。

我们看看是否可以纠正这个问题。

# 此代码生成提示调用工具使用
code_gen_prompt_working = ChatPromptTemplate.from_messages([("system",""" You are a coding assistant with expertise in LCEL, LangChain expression language.
Here is the LCEL documentation:-------
{context}-------
Answer the user question based on the
above provided documentation. Ensure any code you provide can be executed with all required imports and variables
defined. Structure your answer: 1) a prefix describing the code solution, 2) the imports, 3) the functioning code block.
Invoke the code tool to structure the output correctly.Here is the user question:""",),("placeholder", "{messages}"),]
)# 此代码生成提示没有调用工具使用
code_gen_prompt_bad = ChatPromptTemplate.from_messages([("system","""You are a coding assistant with expertise in LCEL, LangChain expression language.
Here is a full set of LCEL documentation:-------
{context}-------
Answer the user question based on the above provided documentation. Ensure any code you provide can be executed
with all required imports and variables defined. Structure your answer with a description of the code solution.Then list the imports. And finally list the functioning code block. Here is the user question:""",),("placeholder", "{messages}"),]
)

数据模型:

class Code(BaseModel):"""代码输出"""

LLM:

llm = ChatAnthropic(model="claude-3-opus-20240229",default_headers={"anthropic-beta": "tools-2024-04-04"},
)

结构化输出:

包括原始内容将捕获原始输出和解析器错误

structured_llm = llm.with_structured_output(Code, include_raw=True)

检查错误:

def check_claude_output(tool_output):"""检查解析错误或未能调用工具"""

带有输出检查的链:

code_chain = code_gen_prompt_bad | structured_llm | check_claude_output

让我们添加检查并重试。

def insert_errors(inputs):"""在消息中插入错误"""

这将作为回退链运行。

fallback_chain = insert_errors | code_chain
N = 3  # 最大重试次数
code_chain_re_try = code_chain.with_fallbacks(fallbacks=[fallback_chain] * N, exception_key="error"
)

测试:

messages = [("user", "How do I build a RAG chain in LCEL?")]
code_output_lcel = code_chain_re_try.invoke({"context": concatenated_content, "messages": messages}
)

Python:

parsed_result_lcel = code_output_lcel["parsed"]

Python:

parsed_result_lcel.prefix

Python:

parsed_result_lcel.imports

Python:

parsed_result_lcel.code

示例跟踪捕获错误并纠正:

跟踪链接


介绍了如何使用Anthropic API来生成结构化输出。它首先建议安装langchain-anthropic库,然后通过设置环境变量启用追踪和API密钥。文件中展示了如何定义数据模型,创建ChatAnthropic实例,并使用with_structured_output方法来生成符合特定模式的结构化输出。接着,通过示例代码演示了如何调用API、处理原始输出、捕获解析错误,并展示了如何通过回退机制和错误检查来增强工具调用的鲁棒性。最后,提供了一个测试用例,展示了如何使用构建的链来回答问题并获取结构化代码输出。

这篇关于构建LangChain应用程序的示例代码:9、使用Anthropic API生成结构化输出的工具教程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1029950

相关文章

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模

解决Maven项目idea找不到本地仓库jar包问题以及使用mvn install:install-file

《解决Maven项目idea找不到本地仓库jar包问题以及使用mvninstall:install-file》:本文主要介绍解决Maven项目idea找不到本地仓库jar包问题以及使用mvnin... 目录Maven项目idea找不到本地仓库jar包以及使用mvn install:install-file基

如何为Yarn配置国内源的详细教程

《如何为Yarn配置国内源的详细教程》在使用Yarn进行项目开发时,由于网络原因,直接使用官方源可能会导致下载速度慢或连接失败,配置国内源可以显著提高包的下载速度和稳定性,本文将详细介绍如何为Yarn... 目录一、查询当前使用的镜像源二、设置国内源1. 设置为淘宝镜像源2. 设置为其他国内源三、还原为官方

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

C 语言中enum枚举的定义和使用小结

《C语言中enum枚举的定义和使用小结》在C语言里,enum(枚举)是一种用户自定义的数据类型,它能够让你创建一组具名的整数常量,下面我会从定义、使用、特性等方面详细介绍enum,感兴趣的朋友一起看... 目录1、引言2、基本定义3、定义枚举变量4、自定义枚举常量的值5、枚举与switch语句结合使用6、枚

Java的栈与队列实现代码解析

《Java的栈与队列实现代码解析》栈是常见的线性数据结构,栈的特点是以先进后出的形式,后进先出,先进后出,分为栈底和栈顶,栈应用于内存的分配,表达式求值,存储临时的数据和方法的调用等,本文给大家介绍J... 目录栈的概念(Stack)栈的实现代码队列(Queue)模拟实现队列(双链表实现)循环队列(循环数组

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl

Mysql用户授权(GRANT)语法及示例解读

《Mysql用户授权(GRANT)语法及示例解读》:本文主要介绍Mysql用户授权(GRANT)语法及示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql用户授权(GRANT)语法授予用户权限语法GRANT语句中的<权限类型>的使用WITH GRANT

Java中Scanner的用法示例小结

《Java中Scanner的用法示例小结》有时候我们在编写代码的时候可能会使用输入和输出,那Java也有自己的输入和输出,今天我们来探究一下,对JavaScanner用法相关知识感兴趣的朋友一起看看吧... 目录前言一 输出二 输入Scanner的使用多组输入三 综合练习:猜数字游戏猜数字前言有时候我们在