AI Agent系列(三) -Agent实现
AI Agent系列【三】
- 一、CAMEL
- 二、Deep seek的API调用
- 1. Deepseek的AI相关信息如下
- 2. 调用对话 API
- 三、基于Camel和DeepSeek的AI Agent
- 1. 问答机器人
- 2. 角色扮演-汽车市场分析
一、CAMEL
CAMEL(Communicative Agents for “Mind” Exploration of Large Language Model Society)是开源多智能体框架,旨在探索大规模语言模型社会中智能体的协作与扩展规律。
CAMEL通过角色扮演与标准化流程,解决了单智能体在复杂任务中的局限性,其开源特性与模块化设计使其成为多智能体研究的标杆工具。开发者可通过GitHub仓库快速上手,参与社区共建智能体未来。
GitHub地址:https://github.com/camel-ai/camel
二、Deep seek的API调用
DeepSeek API 使用与 OpenAI 兼容的 API 格式,通过修改配置,您可以使用 OpenAI SDK 来访问 DeepSeek API,或使用与 OpenAI API 兼容的软件。
1. Deepseek的AI相关信息如下
- 出于与 OpenAI 兼容考虑,可以将 base_url 设置为 https://api.deepseek.com/v1 来使用,但注意,此处 v1 与模型版本无关。
- deepseek-chat 模型已全面升级为 DeepSeek-V3,接口不变。 通过指定 model=‘deepseek-chat’ 即可调用 DeepSeek-V3。
- deepseek-reasoner 是 DeepSeek 最新推出的推理模型DeepSeek-R1。通过指定 model=‘deepseek-reasoner’,即可调用 DeepSeek-R1。
2. 调用对话 API
在创建 API key 之后,你可以使用以下样例脚本的来访问 DeepSeek API。样例为非流式输出,您可以将 stream 设置为 true 来使用流式输出。
# Please install OpenAI SDK first: `pip3 install openai`
from openai import OpenAI
client = OpenAI(api_key="<DeepSeek API Key>", base_url="https://api.deepseek.com")
response = client.chat.completions.create(
model="deepseek-chat",
messages=[
{"role": "system", "content": "You are a helpful assistant"},
{"role": "user", "content": "Hello"},
],
stream=False
)
print(response.choices[0].message.content)
三、基于Camel和DeepSeek的AI Agent
1. 问答机器人
通过一个简单的问答机器人的搭建,我们即可理解基于智能体的大语言模型的应用。我们只需要通过安装camel-ai的库即可实现对camel的应用。
pip install camel-ai
如下是对应的代码实现。
from camel.agents import ChatAgent
from camel.models import ModelFactory
from camel.types import ModelPlatformType
model = ModelFactory.create(
model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL,
model_type="deepseek-chat",
url="https://api.deepseek.com",
api_key='<DeepSeek API Key>'
)
agent = ChatAgent(
model=model,
output_language='中文'
)
response = agent.step("你好,介绍一下你自己?")
print(response.msgs[0].content)
代码执行后的输出结果如下:
2. 角色扮演-汽车市场分析
通过调用Camel的角色扮演模块,设置任务目标、AI助手角色名以及用户角色,智能体即可自行进行对话思考生成机器人。
-
设置任务目标
task_prompt = “为汽车销售开发一个汽车市场预测机器人”
-
设置AI助手的角色名
assistant_role_name=“Python 程序员”
-
设置用户角色名
user_role_name=“汽车市场分析员”
通过camel框架下的AI代理机器人的代码实现如下:
from colorama import Fore #终端文本颜色库
from camel.societies import RolePlaying #Camel核心模块 角色扮演
from camel.utils import print_text_animated
from camel.models import ModelFactory
from camel.types import ModelPlatformType
from dotenv import load_dotenv
import os
load_dotenv(dotenv_path='.env')
model = ModelFactory.create(
model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL,
model_type="deepseek-chat",
url='https://api.deepseek.com',
api_key='sk-1300fa6937ca443c807d07819df8a817'
)
def main(model=model, chat_turn_limit=50) -> None:
task_prompt = "为汽车开发一个市场分析机器人"#设置任务目标
role_play_session = RolePlaying(
assistant_role_name="Python 程序员",#设置AI助手角色名
assistant_agent_kwargs=dict(model=model),
user_role_name="汽车市场分析员",#设置用户角色名,在roleplay中,user用于指导AI助手完成任务
user_agent_kwargs=dict(model=model),
task_prompt=task_prompt,
with_task_specify=True,
task_specify_agent_kwargs=dict(model=model),
output_language='中文'#设置输出语言
)
print(
Fore.GREEN
+ f"AI 助手系统消息:\n{role_play_session.assistant_sys_msg}\n"
)
print(
Fore.BLUE + f"AI 用户系统消息:\n{role_play_session.user_sys_msg}\n"
)
print(Fore.YELLOW + f"原始任务提示:\n{task_prompt}\n")
print(
Fore.CYAN
+ "指定的任务提示:"
+ f"\n{role_play_session.specified_task_prompt}\n"
)
print(Fore.RED + f"最终任务提示:\n{role_play_session.task_prompt}\n")
n = 0
input_msg = role_play_session.init_chat()
while n < chat_turn_limit:
n += 1
assistant_response, user_response = role_play_session.step(input_msg)
if assistant_response.terminated:
print(
Fore.GREEN
+ (
"AI 助手已终止。原因: "
f"{assistant_response.info['termination_reasons']}."
)
)
break
if user_response.terminated:
print(
Fore.GREEN
+ (
"AI 用户已终止。"
f"原因: {user_response.info['termination_reasons']}."
)
)
break
print_text_animated(
Fore.BLUE + f"AI 用户:\n\n{user_response.msg.content}\n"
)
print_text_animated(
Fore.GREEN + "AI 助手:\n\n"
f"{assistant_response.msg.content}\n"
)
if "CAMEL_TASK_DONE" in user_response.msg.content:
break
input_msg = assistant_response.msg
if __name__ == "__main__":
main()
执行后输出结果如下: