【RAG】【Data-Processor】【output_parsing11】NVIDIA输出解析

发布时间:2026/7/14 14:24:15

【RAG】【Data-Processor】【output_parsing11】NVIDIA输出解析 1. 案例目标本案例演示如何使用NVIDIA的API和LlamaIndex进行结构化数据提取。主要展示两种方法使用LLMTextCompletionProgram和FunctionCallingProgram从非结构化文本中提取结构化数据以及如何使用Langchain输出解析器进行高级解析。核心目标使用NVIDIA API实现结构化数据提取包括直接指定输出类、使用自定义输出解析器和函数调用程序2. 技术栈与核心依赖llama-index-readers-file- 文件读取器llama-index-embeddings-nvidia- NVIDIA嵌入模型llama-index-llms-nvidia- NVIDIA LLM接口pydantic- 数据验证和设置管理langchain- Langchain输出解析器NVIDIA API- NVIDIA提供的AI模型API服务依赖安装!pip install llama-index-readers-file llama-index-embeddings-nvidia llama-index-llms-nvidia3. 环境配置本案例需要配置NVIDIA API密钥并设置NVIDIA的LLM和嵌入模型作为默认模型# 设置NVIDIA API密钥 os.environ[NVIDIA_API_KEY] nvapi-... # 初始化NVIDIA模型 llm NVIDIA() embedder NVIDIAEmbedding(modelNV-Embed-QA, truncateEND) Settings.embed_model embedder Settings.llm llm模型配置LLM模型NVIDIA默认模型嵌入模型NV-Embed-QA截断策略END从末尾截断4. 案例实现4.1 定义数据模型首先我们定义基于Pydantic的数据模型用于表示歌曲和专辑class Song(BaseModel): Data model for a song. title: str length_seconds: int class Album(BaseModel): Data model for an album. name: str artist: str songs: List[Song]4.2 使用LLMTextCompletionProgram第一种方法是直接指定输出类prompt_template_str \ Generate an example album, with an artist and a list of songs. \ Using the movie {movie_name} as inspiration.\ program LLMTextCompletionProgram.from_defaults( output_clsAlbum, prompt_template_strprompt_template_str, verboseTrue, ) output program(movie_nameThe Shining)4.3 使用PydanticOutputParser第二种方法是使用Pydantic输出解析器from llama_index.core.output_parsers import PydanticOutputParser program LLMTextCompletionProgram.from_defaults( output_parserPydanticOutputParser(output_clsAlbum), prompt_template_strprompt_template_str, verboseTrue, ) output program(movie_nameLord of the Rings)4.4 自定义输出解析器第三种方法是创建自定义输出解析器class CustomAlbumOutputParser(BaseOutputParser): Custom Album output parser. Assume first line is name and artist. Assume each subsequent line is the song. def __init__(self, verbose: bool False): self.verbose verbose def parse(self, output: str) - Album: Parse output. if self.verbose: print(f Raw output: {output}) lines output.split(\n) lines list(filter(None, (line.strip() for line in lines))) name, artist lines[1].split(,) songs [] for i in range(2, len(lines)): title, length_seconds lines[i].split(,) songs.append(Song(titletitle, length_secondslength_seconds)) return Album(namename, artistartist, songssongs)4.5 使用FunctionCallingProgram第四种方法是使用函数调用程序适用于原生支持函数调用的LLMllm NVIDIA(modelmeta/llama-3.1-8b-instruct) program FunctionCallingProgram.from_defaults( output_clsAlbum, prompt_template_strprompt_template_str, verboseTrue, llmllm, ) output program(movie_nameThe Shining)4.6 使用Langchain输出解析器最后我们展示如何使用Langchain输出解析器进行更复杂的结构化提取from llama_index.core.output_parsers import LangchainOutputParser from langchain.output_parsers import StructuredOutputParser, ResponseSchema # 定义响应模式 response_schemas [ ResponseSchema( nameEducation, description( Describes the authors educational experience/background. ), ), ResponseSchema( nameWork, descriptionDescribes the authors work experience/background., ), ] # 创建解析器 lc_output_parser StructuredOutputParser.from_response_schemas(response_schemas) output_parser LangchainOutputParser(lc_output_parser) # 格式化提示模板 fmt_qa_tmpl output_parser.format(DEFAULT_TEXT_QA_PROMPT_TMPL)4.7 查询索引使用配置好的解析器查询索引query_engine index.as_query_engine(llmllm) response query_engine.query( What are a few things the author did growing up?, )5. 案例效果通过本案例的多种方法我们成功地从非结构化文本中提取了结构化数据直接输出类从电影《闪灵》生成了包含艺术家和歌曲列表的专辑对象Pydantic解析器从电影《指环王》提取了专辑信息自定义解析器按照特定格式解析了《蝙蝠侠黑暗骑士》的专辑信息函数调用程序使用函数调用机制生成了结构化数据Langchain解析器从Paul Graham的文章中提取了教育和工作经历示例输出结构Album(nameThe Shining Soundtrack, artistVarious Artists, songs[Song(titleMain Title, length_seconds180),Song(titleRocky Mountains, length_seconds240),...])6. 案例实现思路本案例的实现基于以下核心思路数据模型定义使用Pydantic定义清晰的数据结构为结构化提取提供目标格式。多种解析策略提供多种解析方法适应不同的应用场景和模型能力。提示工程设计有效的提示模板引导模型生成符合预期的结构化数据。API集成通过NVIDIA API访问高性能模型提高提取质量和效率。解析器链组合多个解析器实现复杂的数据提取和转换流程。关键点FunctionCallingProgram仅适用于原生支持函数调用的LLM而LLMTextCompletionProgram适用于所有LLM通过文本提示获取结构化输出。7. 扩展建议复杂嵌套结构尝试处理更复杂的嵌套数据结构如多层嵌套的JSON对象。多模态数据提取扩展到图像、音频等多模态数据的结构化提取。实时数据流处理将解析器应用于实时数据流实现动态结构化提取。错误恢复机制实现更健壮的错误处理和恢复机制提高系统可靠性。模型性能比较比较不同NVIDIA模型在结构化提取任务上的性能差异。领域特定优化针对特定领域如医疗、金融定制数据模型和解析策略。批处理优化优化批处理流程提高大量文档的处理效率。8. 总结本案例全面展示了使用NVIDIA API和LlamaIndex进行结构化数据提取的多种方法。从简单的直接输出类指定到复杂的自定义解析器这些技术为处理非结构化文本提供了强大的工具。通过结合NVIDIA的高性能模型和LlamaIndex的灵活框架开发者可以构建高效、准确的数据提取系统适用于各种应用场景从简单的信息提取到复杂的知识图谱构建。核心价值结构化数据提取技术将非结构化文本转化为可操作的数据为 downstream 应用如数据分析、知识管理和决策支持提供了坚实基础。

相关新闻