Skip to content

介绍

  • OpenAIChatCompletionClient 是一个用于与 OpenAI 模型(如 GPT-4)交互的工具,支持生成对话式的文本补全。它通过调用 OpenAI 的 ChatCompletion API,提供了灵活的接口来处理用户输入并生成响应。

基本用法

python
from autogen_ext.models.openai import OpenAIChatCompletionClient
from autogen_core.models import UserMessage

# 初始化模型客户端
model_client = OpenAIChatCompletionClient(
    model="gpt-4",
    temperature=0.5 # 控制生成文本的随机性
)

# 创建用户消息
messages = [UserMessage(content="巴黎的首都是哪里?", source="user")]

# 调用模型生成响应
response = await model_client.create(messages)
print(response.content)

流式响应

python
from autogen_ext.models.openai import OpenAIChatCompletionClient
from autogen_core.models import UserMessage

# 初始化模型客户端
model_client = OpenAIChatCompletionClient(
    model="gpt-4",
    temperature=0.5 # 控制生成文本的随机性
)

# 创建用户消息
messages = [UserMessage(content="巴黎的首都是哪里?", source="user")]

stream = model_client.create_stream(messages=messages)
async for chunk in stream:
    if isinstance(chunk, str):
        print(chunk, end="")
    else:
        print("\n完整响应:", chunk.content)

结构化输出(通过定义Pydantic模型)

python
from pydantic import BaseModel
from typing import Literal

class AgentResponse(BaseModel):
    thoughts: str
    response: Literal["happy", "sad", "neutral"]

model_client = OpenAIChatCompletionClient(
    model="gpt-4",
    response_format=AgentResponse
)

# 创建用户消息
messages = [UserMessage(content="巴黎的首都是哪里?", source="user")]

response = await model_client.create(messages)
parsed_response = AgentResponse.model_validate_json(response.content)
print(parsed_response.thoughts, parsed_response.response)

缓存支持

python
from autogen_ext.models.cache import ChatCompletionCache
from autogen_ext.cache_store.diskcache import DiskCacheStore
from diskcache import Cache
import tempfile

# 创建用户消息
messages = [UserMessage(content="巴黎的首都是哪里?", source="user")]

with tempfile.TemporaryDirectory() as tmpdirname:
   cache_store = DiskCacheStore(Cache(tmpdirname))
   cache_client = ChatCompletionCache(model_client, cache_store)
    
   response = await cache_client.create(messages)
   print(response.content)
  • 注意:这种方式是精准匹配,语义相同的问题也会被认成两个不同的问题,如果要实现语义缓存,可以使用嵌入模型(Embedding Model)+ 向量数据库的方式实现

MIT版权,未经许可禁止任何形式的转载