当前位置: 首页 > news >正文

OpenAI智能体框架_Num1

博客参考:datawhale

环境准备

采用的环境镜像:datawhalechina/llm-preview/llm-preview
这里我们采用本地下载模型的方式,由于OpenAI智能体框架只能使用Ollama,且服务器下载Ollama服务较慢,所以将本地下载好的模型暴露成API的方式来提供服务:

from modelscope import snapshot_downloadmodel_dir = snapshot_download('Qwen/Qwen3-0.6B', cache_dir='/root/autodl-tmp/models', revision='master')
vllm serve /root/autodl-tmp/models/Qwen/Qwen3-0.6B \--host 0.0.0.0 \--port 8000 \--enable-auto-tool-choice \--tool-call-parser qwen3_coder

在这里插入图片描述

from litellm import completion# 使用 LiteLLM 调用本地 vLLM 服务
response = completion(model="openai//root/autodl-tmp/models/Qwen/Qwen3-0.6B",   # 使用 openai 格式调用本地模型api_base="http://127.0.0.1:8000/v1", # 指向 vLLM 服务的 v1 端点api_key="EMPTY",                  # vLLM 默认不验证 keymessages=[{"role": "user", "content": "你好,你是谁?"}]
)# 打印模型回复
print(response.choices[0].message.content)

在这里插入图片描述

litellm 提供的 OpenAI 兼容端点

chat_model = "openai//root/autodl-tmp/models/Qwen/Qwen3-0.6B"
base_url = "http://127.0.0.1:8000/v1"
api_key = "EMPTY"from agents import Agent, Runner, set_tracing_disabled
from agents.extensions.models.litellm_model import LitellmModelset_tracing_disabled(disabled=True)llm = LitellmModel(model=chat_model, api_key=api_key, base_url=base_url)
agent = Agent(name="Assistant", model=llm, instructions="You are a helpful assistant")result = Runner.run_sync(agent, "给我讲个程序员相亲的笑话")
print(result.final_output)

在这里插入图片描述

openai 包来配置模型

from agents import Agent, Runner, set_tracing_disabled, set_default_openai_api, set_default_openai_client
from openai import AsyncOpenAI
import os
# from dotenv import load_dotenv# 加载环境变量
# load_dotenv()chat_model = "openai//root/autodl-tmp/models/Qwen/Qwen3-0.6B"
client = AsyncOpenAI(base_url="http://127.0.0.1:8000/v1",api_key="EMPTY",
)
set_default_openai_client(client=client, use_for_tracing=False)
set_default_openai_api("chat_completions")
set_tracing_disabled(disabled=True)agent = Agent(name="Assistant", model=chat_model, instructions="You are a helpful assistant")
result = Runner.run_sync(agent, "给我讲个程序员相亲的笑话")
print(result.final_output)

在这里插入图片描述
以上写法无法并行运行,只能同步运行。可以注意到写法是Runner.run_sync
异步写法:

from agents import Agent, Runner, set_tracing_disabled
from agents.extensions.models.litellm_model import LitellmModel
import os
import asyncio
#from dotenv import load_dotenv# 加载环境变量
# load_dotenv()
# 从环境变量中读取dashscope_api_key
# dashscope_api_key = os.getenv('DASHSCOPE_API_KEY')
dashscope_base_url = 'http://127.0.0.1:8000/v1'
dashscope_model = "openai//root/autodl-tmp/models/Qwen/Qwen3-0.6B"
llm = LitellmModel(model=dashscope_model, api_key="EMPTY", base_url=dashscope_base_url)
agent = Agent(name="Assistant", model=llm, instructions="You are a helpful assistant")
async def main():result = await Runner.run(agent, "给我讲个程序员相亲的笑话")print(result.final_output)
if __name__ == "__main__":asyncio.run(main())

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

初步尝鲜

三部分内容:

Agents(代理):代理是一个被赋予任务并有能力自主执行特定操作的实体。代理通常配备了指令和工具,能根据指令执行复杂的任务。

例子:
假设你有一个“旅行规划助手”代理,它的任务是帮助你规划一次旅行。这个代理可以根据用户的需求,如目的地、预算、旅行日期等,查询航班、酒店、交通信息等,完成旅行计划的制定。

Handoffs(任务交接):任务交接意味着代理在执行过程中,如果遇到某些无法完成的任务,能够将这些任务委托给其他更专门的代理或系统处理。这样可以确保整个工作流顺畅地继续。

例子:
在旅行规划助手的例子中,假设用户要求代理在特定日期找到一个“当地最棒的餐厅”。但是,旅行规划助手并不具备餐厅推荐的能力,于是它可以将这个任务交给一个专门的“餐厅推荐代理”。这个餐厅推荐代理根据用户的偏好来找到合适的餐厅。

Guardrails(护栏):护栏是用于限制或验证代理行为的机制,确保代理不会做出不合适或不符合要求的操作。它通常用于输入验证和结果控制,以避免代理输出错误或不合适的内容。

例子:
在旅行规划助手的例子中,假设用户输入了一个非常不现实的要求,比如“计划在明天就去巴黎,预算500美元”。此时,护栏机制可以检查这个请求,发现它超出了合理的预算范围,并返回一条警告,提醒用户计划不现实,并建议调整预算或旅行时间。

搞定llm

from agents import Agent, Runner, set_tracing_disabled
from agents.extensions.models.litellm_model import LitellmModel
import os
import asyncio
#from dotenv import load_dotenv# 加载环境变量
# load_dotenv()
# 从环境变量中读取dashscope_api_key
# dashscope_api_key = os.getenv('DASHSCOPE_API_KEY')
dashscope_base_url = 'http://127.0.0.1:8000/v1'
dashscope_model = "openai//root/autodl-tmp/models/Qwen/Qwen3-0.6B"
llm = LitellmModel(model=dashscope_model, api_key="EMPTY", base_url=dashscope_base_url)

构建第一个Agent

agent = Agent(name="Math Tutor", model=llm, instructions="You provide help with math problems. Explain your reasoning at each step and include examples",)

增加更多Agents

新增其他Agent,并且为这些Agent设置一个handoff_descriptions参数,用来告诉Agent如何移交任务

from agents import Agenthistory_tutor_agent = Agent(name="History Tutor",handoff_description="Specialist agent for historical questions",instructions="You provide assistance with historical queries. Explain important events and context clearly.",model=llm,
)math_tutor_agent = Agent(name="Math Tutor",handoff_description="Specialist agent for math questions",instructions="You provide help with math problems. Explain your reasoning at each step and include examples",model=llm,
)

handoff_description是用来描述一个代理(Agent)在多代理系统中的角色和它专门处理的任务类型。当一个代理在处理过程中遇到无法解决的任务时,它可以将任务“交接”(handoff)给另一个专门的代理。handoff_description 就是用来指明该代理擅长处理哪些类型的任务,以及它可以处理的内容范围

定义交接

在每个Agent上,可以定义一个传出切换选项的清单,Agent可以从中选择,以决定如何在任务上取得进展。

async def main():result = await Runner.run(triage_agent, "What is the capital of France?")print(result.final_output)
if __name__ == "__main__":asyncio.run(main())

在这里插入图片描述

添加护栏

可以定义在输入或输出上运行的自定义护栏。

class HomeworkOutput(BaseModel):    # 后续要将输出转换为该格式进行返回is_homework: boolreasoning: strguardrail_agent = Agent(      #护栏agentname="Guardrail check",instructions="Check if the user is asking about homework.",output_type=HomeworkOutput,model=llm,
)async def homework_guardrail(ctx, agent, input_data):     # 护栏函数,ctx为上下文,用于获取上下文信息result = await Runner.run(guardrail_agent, input_data, context=ctx.context)final_output = result.final_output_as(HomeworkOutput)return GuardrailFunctionOutput(output_info=final_output,tripwire_triggered=not final_output.is_homework,)

同时,triage_agent也需要添加input_guardrails参数:

triage_agent = Agent(name="Triage Agent",instructions="You determine which agent to use based on the user's homework question",handoffs=[history_tutor_agent, math_tutor_agent],input_guardrails=[InputGuardrail(guardrail_function=homework_guardrail),],model=llm,
)

在 agents 框架(BerriAI/agents SDK)中,ctx 是由 Runner 在运行一个代理(Agent)时自动创建并传入的上下文对象,用于保存和传递本轮运行的状态信息。

ctx说明

# 第1轮:不传 context,Runner 会自动创建
res1 = await Runner.run(triage_agent, "Q1")
ctx = res1.context  # 从结果里取出这轮产生的上下文# 第2轮:复用第1轮的上下文
res2 = await Runner.run(triage_agent, "Q2", context=ctx)

整体代码

from agents.agent import Agent
from agents.run import Runner
from agents.tracing import set_tracing_disabled
from agents.guardrail import GuardrailFunctionOutput, InputGuardrail
from agents.extensions.models.litellm_model import LitellmModel
from pydantic import BaseModel
import os
import asyncio
#from dotenv import load_dotenv# 加载环境变量
# load_dotenv()
# 从环境变量中读取dashscope_api_key
# dashscope_api_key = os.getenv('DASHSCOPE_API_KEY')
dashscope_base_url = 'http://127.0.0.1:8000/v1'
dashscope_model = "openai//root/autodl-tmp/models/Qwen/Qwen3-0.6B"
llm = LitellmModel(model=dashscope_model, api_key="EMPTY", base_url=dashscope_base_url)class HomeworkOutput(BaseModel):    # 后续要将输出转换为该格式进行返回is_homework: boolreasoning: strguardrail_agent = Agent(      #护栏agentname="Guardrail check",instructions="Check if the user is asking about homework.",output_type=HomeworkOutput,model=llm,
)async def homework_guardrail(ctx, agent, input_data):     # 护栏函数,ctx为上下文,用于获取上下文信息result = await Runner.run(guardrail_agent, input_data, context=ctx.context)final_output = result.final_output_as(HomeworkOutput)return GuardrailFunctionOutput(output_info=final_output,tripwire_triggered=not final_output.is_homework,)history_tutor_agent = Agent(name="History Tutor",handoff_description="Specialist agent for historical questions",instructions="You provide assistance with historical queries. Explain important events and context clearly.",model=llm,
)math_tutor_agent = Agent(name="Math Tutor",handoff_description="Specialist agent for math questions",instructions="You provide help with math problems. Explain your reasoning at each step and include examples",model=llm,
)triage_agent = Agent(name="Triage Agent",instructions="You determine which agent to use based on the user's homework question",handoffs=[history_tutor_agent, math_tutor_agent],input_guardrails=[InputGuardrail(guardrail_function=homework_guardrail),],model=llm,
)async def main():result = await Runner.run(triage_agent, "does drinking tee good for the body?")print(result.final_output)
if __name__ == "__main__":asyncio.run(main())

在这里插入图片描述
带有try…except:

async def main():try:#print("开始执行")result = await Runner.run(triage_agent, "如何证明勾股定理?")#print(result.final_output)print("结果:", result.final_output)except InputGuardrailTripwireTriggered as e:print("护栏触发:你的问题不是作业相关")

问题:who was the first president of the united states
在这里插入图片描述
更改几次prompt都失败了,所以我认为是选择的qwen参数量太小了,才0.6B,感觉效果不是很好

http://www.dtcms.com/a/483345.html

相关文章:

  • LLM 论文精读(十)The Landscape of Agentic Reinforcement Learning for LLMs: A Survey
  • 用模板做企业网站防城港市建设工程质量监督站网站
  • 湖南益阳网站建设工作态度和责任心句子
  • 购物网站网页模板制作一个简单的网站
  • Twitter内容分发如何优化?
  • 西安网站建设云速百度登录个人中心官网
  • 哪些行业做网站推广的多网站首页制作代码
  • 汽车HIL测试:电子开发的关键验证环节
  • 小说网站怎么做权重适配网站建设模版
  • 2.1 欧拉集群安装Keystone认证服务
  • pq|二维前缀和
  • 西安商城网站开发品牌营销型网站建设
  • vector,咕咕咕!
  • <数据集>药丸缺陷识别数据集<目标检测>
  • Java 在AWS上使用SDK凭证获取顺序
  • 百度手机网站自助建站青岛硅谷网站建设
  • 做响应式网站的物流微信商城网站案例展示
  • 【java】springboot分库分表 12 种分片算法(下)
  • Java多线程编程实战技巧深度解析:从并发基础到高吞吐架构的艺术
  • Nginx 自动化脚本安装方案
  • 巩义网站建设托管邹平建设项目网站公示
  • ETF网格交易覆盖率缺口与满仓踏空风险量化模型
  • 数据结构入门 (八):寻访节点的“路线图” —— 二叉树的深度与广度遍历
  • 复兴区建设局网站永久免费云储存空间
  • 线程池参数调整
  • Unity学习之Addressables可寻址系统
  • SQL优化手段有哪些
  • 建设银行江苏分行网站一键生成图片
  • php框架做网站的好处福田网站制作
  • 合并多个excel到一个excel中