openai-agent如何使用本地模型

开始之前:需要开发人员深刻理解模型的类型
模型:常规推理模型、Cot思维模型、tool、视觉

开发人员要深刻理解模型的作用,避免运行以下代码出错

要让openai-agent支持本地模型需要完成一下编程:

记得引入库名:AsyncOpenAI、OpenAIChatCompletionsModel、set_tracing_disabled

external_client = AsyncOpenAI(
    api_key="ollama", 
    base_url="http://localhost:11434/v1"
)

# 配置模型
model = OpenAIChatCompletionsModel( 
    model="granite3.2",
    openai_client=external_client
)

set_tracing_disabled(disabled=True)

完整的实例:

import asyncio

from openai import AsyncOpenAI

from agents import Agent, ItemHelpers, MessageOutputItem, OpenAIChatCompletionsModel, Runner, set_tracing_disabled, trace

"""
这个示例展示了将agents作为工具的模式。前台agent接收用户消息,
然后选择要调用哪些agents作为工具。在这个例子中,它从一组翻译agent中进行选择。
"""

external_client = AsyncOpenAI(
    api_key="ollama", 
    base_url="http://localhost:11434/v1"
)

# 配置模型
model = OpenAIChatCompletionsModel( 
    model="granite3.2",
    openai_client=external_client
)

set_tracing_disabled(disabled=True)

english_agent = Agent(
    name="english_agent",
    instructions="你负责将用户的消息翻译成英语",
    handoff_description="一个中文到英语的翻译器",
    model=model
)

french_agent = Agent(
    name="french_agent",
    instructions="你负责将用户的消息翻译成法语",
    handoff_description="一个中文到法语的翻译器",
    model=model
)

italian_agent = Agent(
    name="italian_agent",
    instructions="你负责将用户的消息翻译成意大利语",
    handoff_description="一个中文到意大利语的翻译器",
    model=model
)

orchestrator_agent = Agent(
    name="orchestrator_agent",
    instructions=(
        "你是一个翻译协调员。你使用给定的工具来进行翻译。"
        "如果用户要求多种语言的翻译,你需要按顺序调用相关的翻译工具。"
        "你不要自己翻译,必须使用提供的翻译工具。"
    ),
    tools=[
        english_agent.as_tool(
            tool_name="translate_to_english",
            tool_description="将用户的消息翻译成英语",
        ),
        french_agent.as_tool(
            tool_name="translate_to_french",
            tool_description="将用户的消息翻译成法语",
        ),
        italian_agent.as_tool(
            tool_name="translate_to_italian",
            tool_description="将用户的消息翻译成意大利语",
        ),
    ],
    model=model
)

synthesizer_agent = Agent(
    name="synthesizer_agent",
    instructions="你负责检查翻译结果,必要时进行修正,并生成最终的合并响应。最终用中文回复翻译结果。",
    model=model
)


async def main():
    msg = input("你好!你想要翻译什么内容,需要翻译成哪些语言?")

    # 在单个跟踪中运行整个编排过程
    with trace("Orchestrator evaluator"):
        orchestrator_result = await Runner.run(orchestrator_agent, msg)
        print(f"\n\n协调员响应:\n{orchestrator_result.final_output}")
        for item in orchestrator_result.new_items:
            if isinstance(item, MessageOutputItem):
                text = ItemHelpers.text_message_output(item)
                if text:
                    print(f"  - 翻译步骤: {text}")

        synthesizer_result = await Runner.run(synthesizer_agent, orchestrator_result.to_input_list())

    print(f"\n\n最终响应:\n{synthesizer_result.final_output}")


if __name__ == "__main__":
    asyncio.run(main())

基本工作原理:
graph TD
    A[用户输入] --> B{协调员Agent}
    B -->|检测到英语需求| C[英语翻译Agent]
    B -->|检测到法语需求| D[法语翻译Agent]
    B -->|检测到意大利语需求| E[意大利语翻译Agent]
    C --> F[合成Agent]
    D --> F
    E --> F
    F --> G[最终输出]

 

架构特点

  • 控制流与执行流分离:协调员只负责决策,不直接处理翻译逻辑
  • 工具注册机制:通过.as_tool()将agent转换为可调用工具
  • 异步处理模式:使用asyncio实现非阻塞调用
  • 结果验证机制:通过独立合成agent进行最终校验

工作流程解析

1. 用户输入阶段

msg = input("你好!你想要翻译什么内容,需要翻译成哪些语言?")

用户输入要翻译的内容和目标语言(如:"请把'你好'翻译成英语和法语")

  • 协调员调度阶段(核心控制流)
  • orchestrator_result = await Runner.run(orchestrator_agent, msg)

    协调员agent根据用户请求,选择要调用的翻译工具(通过tools参数注册的三个翻译agent)

3. 工具调用阶段(并行处理)

# 在协调员内部通过.as_tool()方法实现工具调用

tools=[

    english_agent.as_tool(...),

    french_agent.as_tool(...),

    italian_agent.as_tool(...)

]

根据用户请求的语言选择,可能触发多个翻译agent的调用(如同时调用英语和法语翻译)

  • 结果合成阶段

    synthesizer_result = await Runner.run(synthesizer_agent, orchestrator_result.to_input_list())

    合成agent接收所有翻译结果,进行格式整理和最终输出
  • 最终输出阶段

    print(f"\n\n最终响应:\n{synthesizer_result.final_output}")

    最终将整理后的多语言翻译结果返回给用户。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值