月度归档: 2024 年 7 月

  • GeneralAgent:从大型语言模型到智能代理

    引言

    近年来,大型语言模型(LLM)在自然语言处理领域取得了显著的进展。然而,如何将 LLM 的强大能力应用到实际的业务场景中,仍然是一个充满挑战的任务。GeneralAgent 框架应运而生,它旨在将 LLM 与 Python 无缝集成,为构建智能代理提供一个灵活、高效的平台。

    GeneralAgent 框架概述

    GeneralAgent 是一个 Python 原生的代理框架,其核心目标是简化 LLM 在实际应用中的开发流程。与其他代理框架相比,GeneralAgent 具有以下优势:

    • 工具调用: GeneralAgent 不依赖于 LLM 的 function call 功能,而是通过 Python 代码解释器来调用工具,从而实现更灵活、可控的工具调用方式。
    • 序列化: GeneralAgent 支持序列化代理的状态,包括记忆和 Python 执行状态,方便开发者随时保存和恢复代理的状态。
    • 自我调用: GeneralAgent 支持代理的自我调用和堆栈记忆,能够最小化 LLM 的调用次数,从而高效地处理复杂任务。
    • 部署服务: GeneralAgent 可以与 AgentServer 配合使用,快速为大规模用户提供代理服务。

    GeneralAgent 功能介绍

    函数调用

    GeneralAgent 允许开发者将 Python 函数注册到代理中,并通过自然语言指令来调用这些函数。例如,我们可以定义一个获取天气信息的函数:

    def get_weather(city: str) -> str:
        """
        get weather information
        @city: str, city name
        @return: str, weather information
        """
        return f"{city} weather: sunny"

    然后将该函数注册到代理中:

    agent = Agent('你是一个天气小助手', functions=[get_weather])

    当用户询问 “成都天气怎么样?” 时,代理会自动调用 get_weather 函数,并将 “成都” 作为参数传递给该函数,最终返回 “成都天气: 晴朗”。

    知识库

    GeneralAgent 支持将外部知识库集成到代理中,从而增强代理的知识范围。开发者可以将知识库文件路径传递给代理,代理会自动加载并索引知识库内容。

    knowledge_files = ['../docs/paper/General_Agent__Self_Call_And_Stack_Memory.pdf']
    agent = Agent('你是AI助手,用中文回复。', workspace='9_knowledge_files', knowledge_files=knowledge_files)

    当用户提出问题时,代理会先在知识库中搜索相关信息,并将搜索结果作为 LLM 的输入,从而生成更准确、全面的答案。

    序列化

    GeneralAgent 支持序列化代理的状态,包括 LLM 的对话历史和 Python 解释器的状态。开发者可以使用 agent.save() 方法将代理的状态保存到磁盘,并使用 agent.load() 方法从磁盘加载代理的状态。

    # agent序列化位置,运行过程中会自动保存LLM的messages和python解析器的状态
    workspace='./5_serialize'
    
    role = 'You are a helpful agent.'
    agent = Agent(workspace=workspace)
    agent.user_input('My name is Shadow.')
    
    agent = None
    agent = Agent(role, workspace=workspace)
    agent.user_input('What is my name?')

    工作流

    GeneralAgent 支持定义复杂的工作流,并通过多个步骤来完成任务。开发者可以使用 agent.run() 方法执行单个步骤,并使用 Python 代码控制工作流的执行逻辑。

    # 工作流: 写小说
    from GeneralAgent import Agent
    from GeneralAgent import skills
    
    # 步骤0: 定义Agent
    agent = Agent('你是一个小说家')
    
    # 步骤1: 从用户处获取小说的名称和主题
    # topic = skills.input('请输入小说的名称和主题: ')
    topic = '小白兔吃糖不刷牙的故事'
    
    # 步骤2: 小说的概要
    summary = agent.run(f'小说的名称和主题是: {topic},扩展和完善一下小说概要。要求具备文艺性、教育性、娱乐性。')
    
    # 步骤3: 小说的章节名称和概要列表
    chapters = agent.run('输出小说的章节名称和每个章节的概要,返回列表 [(chapter_title, chapter_summary), ....]', return_type=list)

    多代理协作

    GeneralAgent 支持多个代理协作完成任务。开发者可以创建多个代理实例,并为每个代理分配不同的角色和任务。代理之间可以通过消息传递进行通信和协作。

    # 多Agent配合完成任务
    from GeneralAgent import Agent
    story_writer = Agent('你是一个故事创作家,根据大纲要求或者故事梗概,返回一个更加详细的故事内容。')
    humor_enhancer = Agent('你是一个润色作家,将一个故事进行诙谐润色,增加幽默元素。直接输出润色后的故事')

    多模态输入

    GeneralAgent 支持多模态输入,例如文本、图片、音频等。开发者可以将多模态数据封装成数组,并传递给 agent.user_input() 方法或 agent.run() 方法。

    # 支持多模态: 图片输入
    from GeneralAgent import Agent
    
    agent = Agent('You are a helpful assistant.')
    agent.user_input(['what is in the image?', {'image': '../docs/images/self_call.png'}])

    总结

    GeneralAgent 框架为构建智能代理提供了一个强大、灵活的平台,其丰富的功能和易用的 API 可以帮助开发者快速构建各种类型的智能代理应用。随着 LLM 技术的不断发展,GeneralAgent 框架将会在更多领域发挥重要作用。

  • 使用 GPT-4 解析 PDF 为 Markdown 文档:gptpdf 项目解析

    引言

    在信息爆炸的时代,如何高效地处理和提取 PDF 文档中的信息成为了一个普遍的需求。传统的 OCR 技术在处理复杂的排版、数学公式、表格和图片时往往力不从心。而 gptpdf 项目利用强大的视觉大语言模型 GPT-4,为 PDF 解析提供了一种全新的解决方案。

    gptpdf 项目概述

    gptpdf 项目的核心思想是利用 GPT-4 强大的多模态理解能力,将 PDF 文档解析为结构化的 Markdown 格式。项目地址:https://github.com/CosmosShadow/gptpdf

    与传统的 OCR 技术相比,gptpdf 项目具有以下优势:

    • 更精准的识别: gptpdf 能够准确识别复杂的排版、数学公式、表格、图片、图表等内容,而传统的 OCR 技术在处理这些内容时 often 出现错误。
    • 更结构化的输出: gptpdf 将解析结果输出为 Markdown 格式,方便后续编辑和处理,而传统的 OCR 技术只能输出纯文本,丢失了原文档的结构信息。
    • 更低的成本: gptpdf 平均每页的解析成本仅需 0.013 美元,远低于人工解析的成本。

    gptpdf 工作原理

    gptpdf 的工作流程可以概括为以下两个步骤:

    1. 预处理: 使用 PyMuPDF 库对 PDF 文件进行解析,识别并标记出所有非文本区域,例如图片、表格、公式等。 ![][]
    2. GPT-4 解析: 将预处理后的 PDF 页面图片和标记信息发送给 GPT-4o 模型进行解析,GPT-4o 模型会根据页面内容和标记信息,生成相应的 Markdown 文本。

    gptpdf 使用方法

    使用 gptpdf 非常简单,只需安装 gptpdf 包并调用 parse_pdf 函数即可:

    from gptpdf import parse_pdfapi_key = 'Your OpenAI API Key'
    content, image_paths = parse_pdf(pdf_path, api_key=api_key)
    print(content)

    其中:

    • pdf_path: 要解析的 PDF 文件路径。
    • api_key: 您的 OpenAI API 密钥。
    • content: 解析后的 Markdown 文本。
    • image_paths: 解析过程中提取的图片路径列表。

    gptpdf 项目特色

    除了基本的功能之外,gptpdf 还提供了一些额外的功能,例如:

    • 支持多种 OpenAI 模型: 用户可以根据自己的需求选择不同的 OpenAI 模型,例如 gpt-4oqwen-vl-maxGLM-4V 等。
    • 支持 Azure OpenAI: 用户可以使用 Azure OpenAI 服务来运行 gptpdf。
    • 可配置的输出: 用户可以自定义输出目录、文件名等参数。
    • 详细的日志: 用户可以通过设置 verbose=True 来查看详细的解析日志。

    总结

    gptpdf 项目提供了一种高效、准确、低成本的 PDF 解析方案,为处理大量 PDF 文档提供了新的思路。随着 GPT-4 等视觉大语言模型的不断发展,相信 gptpdf 项目会在未来得到更广泛的应用。

    参考文献

人生梦想 - 关注前沿的计算机技术 acejoy.com 🐾 步子哥の博客 🐾 背多分论坛 🐾 借一步网
Page Stats: PV: 1 | UV: 1
Last updated: 2025-07-11 22:35:07
沪ICP备2024052574号-1