前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >大模型开发落地实战-长上下文多模态场景大模型运用实战

大模型开发落地实战-长上下文多模态场景大模型运用实战

原创
作者头像
fanstuck
发布于 2025-01-07 11:09:14
发布于 2025-01-07 11:09:14
79300
代码可运行
举报
运行总次数:0
代码可运行

引言

如何从零开始实现 AI 项目的落地?这是每个开发者和企业在迈向智能化时都会面临的核心问题。在本人创建的《人工智能项目落地实战指南》专栏中,我从实践角度出发,为大家梳理了大模型技术在市场应用中的三大方向,并根据 AI 运用的深浅程度进行分类。

例如,AI 智能问答客服属于较为简单的“浅水区”应用,它主要通过 RAG 知识库调用 API 完成通信,开发和部署相对容易。而像 NL2SQLChatBI 则位于“深水区”应用范畴,这类技术涉及复杂的 AI 集成策略,包括部分场景的模型微调、AWSL 智能体编排,以及 Prompt 调用优化等操作。至于 长上下文多模态场景 的大模型应用,虽然归为“浅水区”方向,但它的复杂度介于两者之间:比智能客服复杂,但又不如深水区需要极高的策略设计能力。其开发中,长上下文处理能力和多模态融合策略的有效结合,成为成功落地的关键。

自 2022 年开始,我已在人工智能应用开发领域深耕四年,亲身经历了技术从概念到落地、从实验室到生产环境的全流程。这一专栏的初衷是聚焦 人工智能技术的实际应用,涵盖从需求分析、模型选择、开发部署到效果评估的完整环节。通过丰富的实战案例和可复用的最佳实践,我希望为开发者提供清晰的操作指引,帮助大家更高效地实现 AI 项目落地。

本文将以Qwen-long 为例,详细展示如何在 长上下文多模态场景 中发挥大模型的潜力。通过深入剖析 Qwen-long 的 API 功能和集成策略,结合实际开发过程中的经验分享,您将学会如何设计、开发并部署一套高效的长上下文多模态解决方案。如果您对 AI 技术的实际应用感兴趣,欢迎订阅本专栏,免费获取更多实战内容。

需求场景

为了深入展示 长上下文多模态大模型 在实际场景中的应用潜力,我们以 招标文档解读 作为示例,探索如何利用大模型高效解析长篇复杂文档并提取核心信息。在招投标领域,文档信息繁杂,内容涉及多个维度,包括项目基本信息、投标要求、评标办法等。这些数据都是供应商十分关注重视的核心数据,具有较大可行性的运用场景。通过 Qwen-long 模型解析后可以实现的主要效果及其实际应用价值比较好作设想:

场景描述:招标文档的解析需求

在招投标活动中,招标文档通常包括项目的详细描述、投标资格要求、评标办法以及合同条款等内容。这些文档不仅篇幅长,而且结构复杂,包含多种信息形式(如文字说明、表格数据、图表等)。手动解读这些文档既耗时又容易遗漏关键信息,特别是在以下情况下:

  1. 快速提取核心信息:企业需要快速获取招标项目的基本信息,如项目名称、编号、开标时间地点、联系方式等。
  2. 投标要求的准确解读:准确理解投标人在资格条件、资质等级、业绩要求等方面的限定,并避免因格式不符合或内容遗漏而被废标。
  3. 评标标准透明化:明确评标办法和权重分配,如商务报价、技术方案、企业信誉的比重。
  4. 合同条款理解:快速提取付款方式、质量验收标准、工期或交货期要求。
  5. 答疑与澄清安排:了解答疑会的时间、方式,以及招标文件修改或澄清的时间节点。

目标效果展示:模型解析结果示例

通过 Qwen-long API,我们希望实现以下自动化效果:

  1. 招标项目基本信息
    • 项目名称与编号:快速提取 "XX 工程项目,编号:XXX"。
    • 开标地点及时间:如 "开标地点:XX 大厦 3 层,时间:2025 年 1 月 10 日上午 10:00"。
    • 项目概况与范围:总结项目主要内容及覆盖范围,如 "本项目包括办公楼建设,面积约 10,000 平方米"。
  2. 投标要求相关内容
    • 资格条件:精准解析投标人在资质等级(如二级施工资质)、业绩(如需完成 3 个类似项目)、财务状况(如资产负债率不高于 70%)方面的具体要求。
    • 投标文件格式:如 "文件需使用 A4 纸,字体为宋体,字号 12,双倍行距";"封面需注明‘投标文件’,且加盖公章"。
    • 废标条款:突出关键条款,如 "未提交营业执照副本的投标文件将直接废标"。
  3. 评标办法
    • 评标标准与权重:
      • 商务报价:40%
      • 技术方案:30%
      • 企业信誉:30%
    • 商务报价方式:如 "采用固定总价报价,报价范围不得超过 500 万元"。
  4. 合同条款
    • 付款方式:如 "分期付款,合同签订后支付 30%,项目验收后支付剩余款项"。
    • 质量验收标准:如 "符合国家建筑工程验收标准 GB50300-2013"。
  5. 答疑及澄清安排
    • 答疑会安排:如 "线上答疑会,时间:2025 年 1 月 8 日,使用腾讯会议"。
    • 信息修改发布:如 "澄清信息将在开标前 3 天通过电子交易平台发布"。

技术背景

1. 长上下文与多模态技术的基本原理

长上下文(Long Context)技术旨在使模型能够处理和理解超长文本序列。传统的自然语言处理模型通常受限于固定的上下文窗口,无法有效捕捉长距离依赖关系。长上下文技术通过优化模型架构和训练方法,扩展模型的上下文窗口,使其能够在处理如长篇文章、技术文档或代码库时,保持对全局信息的理解和连贯性。

多模态(Multimodal)技术涉及处理和融合来自不同模态的数据,如文本、图像、音频等。多模态模型通过学习不同模态之间的关联,能够实现跨模态的信息理解和生成。例如,在图文分析中,模型需要同时理解图像内容和对应的文字描述,以提供更准确的分析结果。

过多理论就先不展开讲解了,要扩展这部分内容可以拿出来的东西太多了,把我们的主要注意力放到实践运用上面,这里笔者一笔带过。

2.长文本Qwen-Long模型

Qwen-Long是阿里云推出的超大规模语言模型,专为处理超长文本和多模态输入而设计。其主要特点包括:

  • 超长上下文支持:Qwen-Long 模型支持最大 10,000,000 个 tokens 的上下文长度,约合 1,500 万字,能够处理超长文档和多文档对话场景,适用于代码审查、论文分析等复杂任务。
  • 多模态能力:模型具备处理多种数据模态的能力,如文本、图像等,能够在多模态场景下进行对话和生成,满足复杂应用需求。
  • OpenAI 兼容 API:Qwen-Long 提供与 OpenAI 兼容的 API 服务,开发者可以通过配置 DashScope 的 API key 以及服务的 base_url,方便地进行调用。

使用腾讯混元hunyuan-large-longcontext大模型也一样,本次就先不使用hunyuan-large-longcontext了,先把阿里云给的tokens用完。一般来说此类长文本模型最大支持 10,000,000 tokens,包括问答历史和上传文档的总 tokens。也支持通过文件服务上传文档获取 fileid,或直接在 system message 中输入文档内容。

实战案例

数据准备

在各地的省政府采购中心里面均可获取到相关的采购信息公告,一般来说公告里面的附件都带有具体的招标文件:

URL:http://gpcgd.gd.gov.cn/bsfw/cgxx/cgxxgg/content/post_4644396.html

Prompt工程:

1.确定任务目标和结构

首先明确智能体的目标是从招标文件中提取关键信息,并且通过合理的结构组织这些信息。任务的具体内容分为几个模块,智能体需要根据不同的模块进行提取和分析。

2. 设计多模块任务

每个模块的任务可以分解为多个子任务:

模块一:招标项目基本信息

智能体需要从招标文件中提取以下内容:

  • 项目获取方式:招标方式,如公开招标、邀请招标等。
  • 开标地点及时间:明确开标的时间和地点。
  • 项目名称与编号:准确识别项目名称与编号。
  • 招标人及联系方式:招标单位名称、联系方式。
  • 项目概况与范围:招标项目的简要介绍及范围。
模块二:投标要求相关内容

包括资格条件、投标文件格式与内容要求,主要关注投标人资格要求、格式要求等内容。可以设计以下几个子任务:

  1. 投标资格条件(资质等级、业绩要求、财务状况、人员配备等)
  2. 投标文件格式与内容要求(字体、字号、页码设置等)
  3. 密封与标记要求
  4. 废标条款(包含技术与商务文件中的特殊要求)
模块三:评标办法

评标办法是招标文件中的一个重要部分,智能体需要提取:

评标标准与权重:各项评审标准及其权重。

评标办法:如综合评标、最低价评标等。

商务报价要求:如固定总价报价或单价报价,报价范围等。

模块四:合同条款

在合同条款部分,重点是付款方式、质量要求、验收标准和工期要求。

  1. 付款方式
  2. 质量要求与验收标准
  3. 工期或交货期要求
模块五:答疑及澄清安排

涉及答疑的安排、答疑方式及澄清信息的发布渠道等

  1. 是否安排了答疑会?答疑会的时间、方式(现场或线上)
  2. 澄清、修改信息发布的渠道和时间节点

综合Prompt 示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
请仔细阅读招标文件,提取以下关键信息:
- 招标项目的基本信息(项目名称、编号、招标人、开标时间等)
- 投标要求(资格条件、文件格式、密封要求等)
- 评标办法(评标标准、商务报价要求等)
- 合同条款(付款方式、工期等)
- 答疑安排及澄清信息(是否有答疑会、澄清修改的发布方式等)
- 识别并列出常见的格式问题、业绩要求标准等潜在问题
​

API 使用

OpenAI文件接口兼容

当使用大模型来分析文档,或使用Batch来推理服务时,需要使用OpenAI文件兼容接口来获取file_id。

装最新版OpenAI SDK

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip3 install -U openai

需要使用上传文件接口获取file_id,通过purpose参数指定上传文件的用途。可以上传Batch任务的单个文件最大为500 MB;当前阿里云账号下可以上传的最大文件数为10000个,上传文件的总量不超过100 GB,文件暂时没有有效期。在选择文档上传方式时,请考虑以下因素:

通过 file-id 上传

  • 推荐:适合需要频繁引用和管理的文档。可以有效减少文本输入错误,操作简便。 文件格式仅限于纯文本文件类型,包括 txt、docx、pdf、xlsx、epub、mobi、md等,目前不支持图片或扫描文档等本质是图片形式的内容。每个文件的大小限制为 150MB,最多可以上传1万个文件,总文件大小不得超过 100GB。

通过纯文本上传

  • 适用场景:适合小规模文档或临时内容。如果文档较短且不需要长期存储,可以选择此方式。受限于API调用请求体大小,如果您的文本内容长度超过1M Tokens,请参考,通过file-id传入。

通过 JSON 字符串上传

  • 适用场景:适合需要传递复杂数据结构的情况。如果您的文档包含多层次信息,使用 JSON 字符串可以确保数据的完整性。

通过file-id传入文档信息

模型可以基于上传的文档进行回复,比如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import os
from pathlib import Path
from openai import OpenAI
​
client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
​
file_object = client.files.create(file=Path("file.docx"), purpose="file-extract")
print(file_object.id)

其中参数可选两种file-extract和batch:

file-extract: 用于qwen-long模型的文档理解;

batch: 用于Batch任务,file格式必须满足输入文件格式

运行能够返回文件ID就算成功:

上传之后这个文件就在你的百炼Client里面了,通过这个文件ID就可以查询到这个文件的具体信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
file = client.files.retrieve(file_id="file-fe-BdiR9gm8lMbiuQRi9RnMtOxl")print(file.model_dump_json())
返回参数

字段

类型

描述

示例值

id

string

文件标识符。

"file-fe-123"

bytes

integer

文件大小,单位为字节。

123456

created_at

integer

文件创建时的 Unix 时间戳(秒)。

1617981067

filename

string

文件名。

"mydata.jsonl"

object

string

对象类型,始终为 file。

"file"

purpose

string

文件的用途,有batch、file-extract、batch_output三种取值。

"batch"

查询文件列表

查询文件列表接口会返回所有文件的信息,包括通过上传文件接口上传的文件,以及batch任务的结果文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
file_stk = client.files.list()
print(file_stk.model_dump_json())
返回示例:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "data": [
        {
            "id": "file-fe-BdiR9gm8lMbiuQRi9RnMtOxl",
            "bytes": 477093,
            "created_at": 1736153730,
            "filename": "file.pdf",
            "object": "file",
            "purpose": "file-extract",
            "status": "processed",
            "status_details": null
        }
    ],
    "object": "list",
    "has_more": false
}

删除文件

若文件的个数或存储空间达到上限,可以通过删除文件接口删除指定file_id的文件。可通过查询文件信息接口获取指定文件信息,或通过查询文件列表接口查询所有文件信息。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
file_object = client.files.delete("file-fe-BdiR9gm8lMbiuQRi9RnMtOxl")
print(file_object.model_dump_json())

多模态融合

在长文本中结合图片、表格等多模态数据的具体实现。

单轮对话

那么我们现在来整体使用一遍大模型的解读功能,这里需要注意的是如果你创建了的应用的话,base_url需要更换:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
POST https://dashscope.aliyuncs.com/api/v1/apps/{YOUR_APP_ID}/completion
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
completion = client.chat.completions.create(
    model="qwen-long",
    messages=[
        {'role': 'system', 'content': prompt},
        {'role': 'system', 'content': 'fileid://file-fe-qyvLSUIswF7Aji4WL9lFOmIp'},
        {'role': 'user', 'content': '请帮我完成文件的解读'}
    ],
)print({full_content})

即可完成初步的对话数据:

多轮对话

要将代码设计成多轮对话格式,你可以通过将每轮对话的消息逐步添加到 messages 列表中,并在每轮对话中加入适当的角色标识(如 userassistant)。每次与模型交互时,你将根据前一轮的消息来更新 messages,并将新的用户输入和模型回应追加到消息列表中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 初始化对话历史
messages = [
    {'role': 'system', 'content': prompt},  # 系统提示,定义对话背景
    {'role': 'system', 'content': 'fileid://file-fe-qyvLSUIswF7Aji4WL9lFOmIp'}  # 文件ID
]
​
# 模拟多轮对话
def chat_conversation():
    while True:
        # 获取用户输入
        user_input = input("用户: ")
        
        if user_input.lower() == "退出":
            print("对话结束")
            break
        
        # 将用户输入添加到消息列表中
        messages.append({'role': 'user', 'content': user_input})
​
        # 调用模型进行对话(非流式输出)
        completion = client.chat.completions.create(
            model="qwen-long",
            messages=messages,  # 传递所有历史消息
            stream=False  # 非流式输出
        )
​
        # 获取模型完整响应
        full_content = completion.choices[0].message.content
        print(f"模型: {full_content}")
​
        # 获取 tokens 使用情况
        prompt_tokens = completion.usage.prompt_tokens  
        completion_tokens = completion.usage.completion_tokens 
        total_tokens = prompt_tokens + completion_tokens
        
        # 打印每轮的 tokens 数量
        print(f"输入 tokens: {prompt_tokens}, 输出 tokens: {completion_tokens}, 总 tokens: {total_tokens}")
​
        # 将模型回应添加到消息列表中,保持对话状态
        messages.append({'role': 'assistant', 'content': full_content})
​
# 启动对话
chat_conversation()

流式对话

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
completion = client.chat.completions.create(
    model="qwen-long",
    messages=[
        {'role': 'system', 'content': prompt},
        {'role': 'system', 'content': 'fileid://file-fe-qyvLSUIswF7Aji4WL9lFOmIp'},
        {'role': 'user', 'content': '请帮我完成文件的解读'}
    ],
    stream=True
)

结构化输出

如果业务需要输出结构化数据,可以通过OpenAI兼容的方式调用qwen模型,来确保生成的字符串符合标准的JSON格式。在调用时,设置response_format{"type": "json_object"},并通过系统消息或用户消息指引模型输出JSON格式即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
completion = client.chat.completions.create(
    model="qwen-plus",
    messages=[
        {'role': 'system', 'content': prompt},
        {'role': 'user', 'content': '请用json格式输出文档内容'}],
    response_format={
        "type": "json_object"
    }
    )
print(completion.choices[0].message.content)

控制生成的常用参数

Temperature 和 top_p

这两个参数都用于控制模型生成文本的多样性。temperature 或 top_p 越高,生成的文本更多样,反之生成的文本更确定。

  • 具有多样性的文本,适用于创意写作(如小说、广告文案)、头脑风暴、聊天应用等场景。
  • 具有确定性的文本,适用于有明确答案(如问题分析、选择题、事实查询)或要求用词准确(如技术文档、法律文本、新闻报导、学术论文)的场景。

如有纰漏之处,请留言指教,非常感谢

以上就是本期全部内容。我是fanstuck ,有问题大家随时留言讨论 ,我们下期大模型微调实战见。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
  • 需求场景
    • 场景描述:招标文档的解析需求
    • 目标效果展示:模型解析结果示例
  • 技术背景
    • 1. 长上下文与多模态技术的基本原理
    • 2.长文本Qwen-Long模型
  • 实战案例
    • 数据准备
    • Prompt工程:
      • 1.确定任务目标和结构
      • 2. 设计多模块任务
    • API 使用
      • OpenAI文件接口兼容
      • 通过file-id传入文档信息
      • 查询文件列表
      • 删除文件
    • 多模态融合
      • 单轮对话
      • 多轮对话
      • 流式对话
      • 结构化输出
      • 控制生成的常用参数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档