使用 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-max、Qwen-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 上给我们点星!你的星标帮助其他人发现这个项目,也激励我们继续改进它。