【创新项目实训个人博客】camel学习笔记(2)

1、多轮对话场景: 使用 BaseMessage 连续发送多条用户消息,模拟多轮对话。比如,先询问 CAMEL 的用途,然后再根据回复提出后续问题,看看 ChatAgent 是否能保持上下文连贯

from camel.agents import ChatAgent
from camel.models import ModelFactory
from camel.types import ModelPlatformType
import os
from dotenv import load_dotenv
from camel.messages import BaseMessage

load_dotenv()
api_key = os.getenv('QWEN_API_KEY')

model = ModelFactory.create(
    model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL,
    model_type="Qwen/Qwen2.5-72B-Instruct",
    url='https://api-inference.modelscope.cn/v1/',
    api_key=api
)

# 创建系统消息,告诉ChatAgent自己的角色定位
system_msg = "You are a helpful assistant that responds to user queries."

# 实例化一个ChatAgent
chat_agent = ChatAgent(model=model, system_message=system_msg, output_language='Chinese')

# 创建用户消息
user_msg = BaseMessage.make_user_message(
    role_name="User_1",
    content="I ate peanuts yesterday and today I'm allergic. What should I do?", #昨天我吃了花生,今天我过敏了,我该怎么办呀?
    meta_dict= {"context_info:": "Users want a clear rejection"}
)
#更新用户消息1
updata_user_msg = user_msg.create_new_instance(
    "Tomorrow I want peanuts. "
    "What do you think, give your reasons?")#明天我还想吃花生,你觉得怎么样,给出你的理由?
# print("Undated User Message:", updata_user_msg)
#更新用户消息2
updata_user_msg_again = updata_user_msg.create_new_instance(
    "如果我打算后天吃炸花生,你觉得怎么样?"
)

# 创建助手消息
assistant_msg = BaseMessage.make_assistant_message(
    role_name="Assistant_1",
    content="I can help you with various tasks."
)

# print("User Message:", user_msg)
# print("Assistant Message:", assistant_msg)

# 将用户消息传给ChatAgent,并获取回复
response = chat_agent.step(user_msg)
response2 = chat_agent.step(updata_user_msg)
response3 = chat_agent.step(updata_user_msg_again)

print("User Response:", response.msgs[0].content)
print("Updated User Response:", response2.msgs[0].content)
print("Updated User Response again:", response3.msgs[0].content)

根据结果可以看出,Agent是能够理解之前的对话,并根据之前的聊天内容给出建议。

2、多模态信息尝试: 尝试传入不同图片或使用 image_detail 等参数,观察 ChatAgent 的回答变化。可以试试让 ChatAgent 对比两张不同的图片,并描述区别

from camel.agents import ChatAgent
from camel.messages import BaseMessage
from camel.models import ModelFactory
from camel.types import ModelPlatformType,RoleType

from io import BytesIO
import requests
from PIL import Image
import os
from dotenv import load_dotenv

load_dotenv()
api_key = os.getenv('QWEN_API_KEY')

model = ModelFactory.create(
    model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL,
    model_type="Qwen/QVQ-72B-Preview",
    url='https://api-inference.modelscope.cn/v1/',
    api_key=api
)

# 创建系统消息,告诉ChatAgent自己的角色定位
# system_msg = "You are a helpful assistant that responds to user queries."
system_msg = "你是一位观察细致的写作专家"

# 实例化ChatAgent
chat_agent = ChatAgent(model=model,output_language='中文')

# 图片URL
url1= "https://www.petitfute.com/medias/mag/35142/originale/24877-10-animaux-magnifiques-en.jpg"
response1 = requests.get(url1)
img1 = Image.open(BytesIO(response1.content))

url2 = "https://img0.baidu.com/it/u=2205376118,3235587920&fm=253&fmt=auto&app=120&f=JPEG?w=846&h=800"
response2 = requests.get(url2)
img2 = Image.open(BytesIO(response2.content))

user_image_msg = BaseMessage.make_user_message(
    role_name="User",
    content="请描述这两张图片的内容的区别",
    image_list=[img1, img2]  # 将图片放入列表中
)

# 将包含图片的消息传给ChatAgent
response_with_image = chat_agent.step(user_image_msg)
print("Assistant's description of the image:", response_with_image.msgs[0].content)

通过实验,设置不同的角色,Agent给出的回答是不一样的,例如: 

system_msg = "You are a helpful assistant that responds to user queries."
system_msg = "你是一位观察细致的写作专家"

这两种角色定位,给出的答案是不一样的。如果设置的角色差距不大或不设置角色定位,或者胡乱设置角色,就会给出跟模板回答一样的结果。例如:

system_msg = "你是一只猫"
#system_msg = "You are a helpful assistant that responds to user queries."

 

角色扮演任务Agent:使用 AISocietyPromptTemplateDict,创建一个角色扮演任务Agent。假设你想让 AI 扮演一个“健康顾问”,为一个“患者”提供饮食和锻炼建议。请用思维链方式分解整个建议过程,逐步提供健康方案

from camel.agents import TaskSpecifyAgent
from camel.models import ModelFactory
from camel.types import ModelPlatformType, TaskType
from camel.prompts import AISocietyPromptTemplateDict
from camel.prompts import TextPrompt
import os
from dotenv import load_dotenv

load_dotenv()
api_key = os.getenv('QWEN_API_KEY')

model = ModelFactory.create(
    model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL,
    model_type="Qwen/Qwen2.5-72B-Instruct",
    url='https://api-inference.modelscope.cn/v1/',
    api_key=api
)

#生成prompt模板
# my_prompt_template = TextPrompt(
#     'Here is a task: you are a {occupation} and you need do {task} for patient. Help me to make this task more specific.'
# )

assistant_role = "health counselor"
user_role = "patient"
task_prompt = "Diet and exercise advice for a patient"

#生成prompt模板,跟前面左右差不多
assistant_prompt = AISocietyPromptTemplateDict.TASK_SPECIFY_PROMPT.format(
    assistant_role=assistant_role,
    task=task_prompt,
    meta_dict=dict(
        assistant_role=assistant_role,
        user_role=user_role,
        word_limit=500
    ),
)
# print(f"Assistant Prompt (健康顾问):\n{assistant_prompt}\n")

task_specify_agent = TaskSpecifyAgent(
    model=model,
    # task_type=TaskType.AI_SOCIETY,
    task_specify_prompt=assistant_prompt,  # 这里assisttant_prompt作用跟上面 my_prompt_template,差不多
    output_language='中文'
)

#根据前面assistant_prompt通过task_specify_agent进行回答,注意区分一个是生成prompt,一个是通过agent进行回答
specified_task_prompt = task_specify_agent.run(
    task_prompt=task_prompt,
    meta_dict=dict(
        assistant_role=assistant_role,
        user_role=user_role,
        word_limit=500
    ),
)
print("specified_task_prompt:", specified_task_prompt)

利用 CodePromptTemplateDict,创建一个任务Agent,帮助用户学习一门新的编程语言(例如 Python)。要求 AI 逐步生成学习计划,包括基本概念、代码示例和练习题目

from camel.agents import TaskSpecifyAgent
from camel.models import ModelFactory
from camel.types import ModelPlatformType, TaskType
from camel.prompts import AISocietyPromptTemplateDict, CodePromptTemplateDict
from camel.prompts import TextPrompt
import os
from dotenv import load_dotenv

load_dotenv()
api_key = os.getenv('QWEN_API_KEY')

model = ModelFactory.create(
    model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL,
    model_type="Qwen/Qwen2.5-72B-Instruct",
    url='https://api-inference.modelscope.cn/v1/',
    api_key=api
)

assistant_role = "Algorithm Engineer"
user_role = "mathematicians"
task_prompt = "Helps users learn a new programming language, Step-by-step learning program generation with code samples and practice questions"

generate_language = CodePromptTemplateDict.GENERATE_LANGUAGES.format(num_language="python")
task_specify_prompt = CodePromptTemplateDict.TASK_SPECIFY_PROMPT.format(
    domain="Provide code sample questions and answers")
generate_domains = CodePromptTemplateDict.GENERATE_DOMAINS.format(num_domains="Mathematics")

assistant_prompt = CodePromptTemplateDict.TASK_SPECIFY_PROMPT.format(
    assistant_role=assistant_role,
    task=task_prompt,
    meta_dict=dict(
        assistant_role=assistant_role,
        user_role=user_role,
        word_limit=500,
        generate_language=generate_language,
        task_specify_prompt=task_specify_prompt,
        generate_domains=generate_domains
    ),
)

task_specify_agent = TaskSpecifyAgent(
    model=model,
    # task_type=TaskType.AI_SOCIETY,
    task_specify_prompt=assistant_prompt,  
    output_language='中文'
)

specified_task_prompt = task_specify_agent.run(
    task_prompt=task_prompt,
    meta_dict=dict(
        assistant_role=assistant_role,
        user_role=user_role,
        word_limit=500
    ),
)
print("specified_task_prompt:", specified_task_prompt)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值