Tạo phản hồi bằng API phản hồi

Đã hoàn thành

API phản hồi OoenAI tập hợp các khả năng từ hai API riêng biệt trước đây (ChatCompletionsAssistants) trong một trải nghiệm thống nhất. Nó cung cấp khả năng tạo phản hồi nhiều lượt, có trạng thái, lý tưởng cho các ứng dụng AI đàm thoại. Bạn có thể truy cập API Phản hồi thông qua ứng dụng khách tương thích với OpenAI bằng cách sử dụng SDK Foundry hoặc SDK OpenAI.

Tìm hiểu về API phản hồi

API Phản hồi cung cấp một số lợi thế so với hoàn thành trò chuyện truyền thống:

  • Cuộc trò chuyện có trạng thái: Duy trì ngữ cảnh cuộc trò chuyện qua nhiều lượt
  • Trải nghiệm hợp nhất: Kết hợp hoàn thành trò chuyện và các mẫu API Trợ lý
  • Foundry direct models: Hoạt động với các mô hình được lưu trữ trực tiếp trong Microsoft Foundry, không chỉ Azure các mô hình OpenAI
  • Tích hợp đơn giản: Access thông qua ứng dụng khách tương thích với OpenAI

Lưu ý

API Phản hồi là cách tiếp cận được đề xuất để tạo phản hồi AI trong các ứng dụng Microsoft Foundry. Nó thay thế API ChatCompletions cũ hơn cho hầu hết các tình huống.

Tạo phản hồi đơn giản

Với ứng dụng khách tương thích với OpenAI, bạn có thể tạo phản hồi bằng phương thức responses.create():

# Generate a response using the OpenAI-compatible client
response = openai_client.responses.create(
    model="gpt-4.1",  # Your model deployment name
    input="What is Microsoft Foundry?"
)

# Display the response
print(response.output_text)

Tham số input chấp nhận một chuỗi văn bản chứa lời nhắc của bạn. Mô hình tạo phản hồi dựa trên đầu vào này.

Hiểu cấu trúc phản hồi

Đối tượng phản hồi chứa một số thuộc tính hữu ích:

  • output_text: Phản hồi văn bản được tạo
  • id: Giá trị nhận dạng duy nhất cho phản hồi này
  • status: Trạng thái phản hồi (ví dụ: "đã hoàn thành")
  • usage: Thông tin sử dụng token (đầu vào, đầu ra và tổng số token)
  • model: Mô hình được sử dụng để tạo phản hồi

Bạn có thể access các thuộc tính này để xử lý phản hồi một cách hiệu quả:

response = openai_client.responses.create(
    model="gpt-4.1",
    input="Explain machine learning in simple terms."
)

print(f"Response: {response.output_text}")
print(f"Response ID: {response.id}")
print(f"Tokens used: {response.usage.total_tokens}")
print(f"Status: {response.status}")

Thêm hướng dẫn

Ngoài đầu vào của người dùng, bạn có thể cung cấp hướng dẫn (thường được gọi là lời nhắc hệ thống) để hướng dẫn hành vi của mô hình:

response = client.responses.create(
    model="gpt-4.1",
    instructions="You are a helpful AI assistant that answers questions clearly and concisely.",
    input="Explain neural networks."
)

print(response.output_text)

Kiểm soát việc tạo phản hồi

Bạn có thể kiểm soát việc tạo phản hồi bằng các thông số bổ sung:

response = openai_client.responses.create(
    model="gpt-4.1",
    instructions="You are a helpful AI assistant that answers questions clearly and concisely.",
    input="Write a creative story about AI.",
    temperature=0.8,  # Higher temperature for more creativity
    max_output_tokens=200  # Limit response length
)

print(response.output_text)
  • nhiệt độ: Kiểm soát tính ngẫu nhiên (0,0-2,0). Giá trị cao hơn làm cho đầu ra sáng tạo và đa dạng hơn
  • max_output_tokens: Giới hạn số lượng token tối đa trong phản hồi
  • top_p: Thay thế cho nhiệt độ để kiểm soát tính ngẫu nhiên

Làm việc với các mô hình trực tiếp của Foundry

Khi sử dụng máy khách FoundrySDK hoặc AzureOpenAI để kết nối với điểm cuối dự án , API Phản hồi hoạt động với cả mô hình Azure OpenAI và mô hình trực tiếp của Foundry (chẳng hạn như Microsoft Phi, DeepSeek hoặc các mô hình khác được lưu trữ trực tiếp trong Microsoft Foundry):

# Using a Foundry direct model
response = openai_client.responses.create(
    model="microsoft-phi-4",  # Example Foundry direct model
    instructions="You are a helpful AI assistant that answers questions clearly and concisely.",
    input="What are the benefits of small language models?"
)

print(response.output_text)

Tạo trải nghiệm trò chuyện

Đối với các tình huống hội thoại phức tạp hơn, bạn có thể cung cấp hướng dẫn hệ thống và xây dựng các cuộc hội thoại nhiều lượt:

# First turn in the conversation
response1 = openai_client.responses.create(
    model="gpt-4.1",
    instructions="You are a helpful AI assistant that explains technology concepts clearly.",
    input="What is machine learning?"
)

print("Assistant:", response1.output_text)

# Continue the conversation
response2 = openai_client.responses.create(
    model="gpt-4.1",
    instructions="You are a helpful AI assistant that explains technology concepts clearly.",
    input="Can you give me an example?",
    previous_response_id=response1.id
)

print("Assistant:", response2.output_text)

Trên thực tế, việc triển khai có thể được xây dựng dưới dạng một vòng lặp trong đó người dùng có thể nhập thông báo tương tác dựa trên mỗi phản hồi nhận được từ mô hình:

# Track responses
last_response_id = None

# Loop until the user wants to quit
print("Assistant: Enter a prompt (or type 'quit' to exit)")
while True:
    input_text = input('\nYou: ')
    if input_text.lower() == "quit":
        print("Assistant: Goodbye!")
        break

    # Get a response
    response = openai_client.responses.create(
                model=model_name,
                instructions="You are a helpful AI assistant that explains technology concepts clearly.",
                input=input_text,
                previous_response_id=last_response_id
    )
    assistant_text = response.output_text
    print("\nAssistant:", assistant_text)
    last_response_id = response.id 

Kết quả từ ví dụ này trông tương tự như sau:

Assistant: Enter a prompt (or type 'quit' to exit)

You: What is machine learning?

Assistant: Machine learning is a type of artificial intelligence (AI) that enables computers to learn from data and improve their performance over time without being explicitly programmed. It involves training algorithms on large datasets to recognize patterns, make predictions, or take actions based on those patterns. This allows machines to become more accurate and efficient in their tasks as they are exposed to more data.

You: Can you give me an example?

Assistant: Certainly! Let's look at a simple example of supervised learning—predicting house prices based on features like size, location, and number of rooms.
Imagine you want to build a machine learning model that can predict the price of a house based on various factors.
...
    { the example provided in the model response may be extensive}
...

You: quit

Assistant: Goodbye!

Khi người dùng nhập đầu vào mới trong mỗi lượt, dữ liệu được gửi đến mô hình bao gồm thông báo hệ thống Hướng dẫn , đầu vào từ người dùng và phản hồi trước đó nhận được từ mô hình. Bằng cách này, đầu vào mới được dựa trên ngữ cảnh được cung cấp bởi phản hồi mà mô hình đã tạo ra cho đầu vào trước đó.

Thay thế: Chuỗi hội thoại thủ công

Bạn có thể quản lý cuộc trò chuyện theo cách thủ công bằng cách tự tạo lịch sử tin nhắn. Cách tiếp cận này cho phép bạn kiểm soát nhiều hơn những ngữ cảnh được bao gồm:

try:
    # Start with initial message
    conversation_history = [
        {
            "type": "message",
            "role": "user",
            "content": "What is machine learning?"
        }
    ]
    
    # First response
    response1 = openai_client.responses.create(
        model="gpt-4.1",
        input=conversation_history
    )
    
    print("Assistant:", response1.output_text)
    
    # Add assistant response to history
    conversation_history += response1.output
    
    # Add new user message
    conversation_history.append({
        "type": "message",
        "role": "user", 
        "content": "Can you give me an example?"
    })
    
    # Second response with full history
    response2 = openai_client.responses.create(
        model="gpt-4.1",
        input=conversation_history
    )
    
    print("Assistant:", response2.output_text)

except Exception as ex:
    print(f"Error: {ex}")

Cách tiếp cận thủ công này hữu ích khi bạn cần:

  • Tùy chỉnh thư nào được đưa vào ngữ cảnh
  • Triển khai cắt xén cuộc hội thoại để quản lý giới hạn mã thông báo
  • Lưu trữ và khôi phục lịch sử hội thoại từ cơ sở dữ liệu

Truy xuất các câu trả lời cụ thể trước đó

API Phản hồi duy trì lịch sử phản hồi, cho phép bạn truy xuất các phản hồi trước đó:

try:   
   
    # Retrieve a previous response
    response_id = "resp_67cb61fa3a448190bcf2c42d96f0d1a8"  # Example ID
    previous_response = openai_client.responses.retrieve(response_id)
    
    print(f"Previous response: {previous_response.output_text}")

except Exception as ex:
    print(f"Error: {ex}")

Cân nhắc về cửa sổ ngữ cảnh

Tham số previous_response_id liên kết các phản hồi với nhau, duy trì ngữ cảnh hội thoại trên nhiều lệnh gọi API.

Điều quan trọng cần lưu ý là lưu giữ lịch sử cuộc trò chuyện có thể làm tăng việc sử dụng token. Đối với một lần chạy, cửa sổ ngữ cảnh đang hoạt động có thể bao gồm:

  • Hướng dẫn hệ thống (hướng dẫn, quy tắc an toàn)
  • Lời nhắc hiện tại của bạn
  • Lịch sử cuộc trò chuyện (người dùng trước đó + tin nhắn trợ lý)
  • Lược đồ công cụ (hàm, thông số kỹ thuật OpenAPI, công cụ MCP, v.v.)
  • Đầu ra công cụ (kết quả tìm kiếm, đầu ra trình thông dịch mã, tệp)
  • Truy xuất bộ nhớ hoặc tài liệu (từ kho lưu trữ bộ nhớ, RAG, tìm kiếm tệp)

Tất cả những thứ này được nối, mã hóa và gửi đến mô hình cùng nhau trên mọi yêu cầu. SDK giúp bạn quản lý trạng thái, nhưng nó không tự động làm cho việc sử dụng token rẻ hơn.

Tạo ứng dụng trò chuyện đáp ứng

Phản hồi từ mô hình có thể mất một chút thời gian để tạo tùy thuộc vào các yếu tố như mô hình cụ thể đang được sử dụng, kích thước cửa sổ ngữ cảnh và kích thước của lời nhắc. Người dùng có thể cảm thấy thất vọng nếu ứng dụng dường như "đóng băng" trong khi chờ phản hồi, vì vậy điều quan trọng là phải xem xét khả năng phản hồi của ứng dụng trong quá trình triển khai của bạn.

Phản hồi trực tuyến

Đối với phản hồi dài, bạn có thể sử dụng tính năng phát trực tuyến để nhận đầu ra tăng dần - để người dùng thấy phản hồi hoàn chỉnh một phần khi có đầu ra:

stream = openai_client.responses.create(
    model="gpt-4.1",
    input="Write a short story about a robot learning to paint.",
    stream=True
)

for event in stream:
    print(event, end="", flush=True)

Nếu đang theo dõi lịch sử cuộc trò chuyện khi phát trực tiếp, bạn có thể lấy ID phản hồi khi sự kiện trực tiếp kết thúc, như sau:

stream = openai_client.responses.create(
    model="gpt-4.1",
    input="Write a short story about a robot learning to paint.",
    stream=True
)
for event in stream:
                if event.type == "response.output_text.delta":
                    print(event.delta, end="")
                elif event.type == "response.completed":
                    response_id = event.response.id

Sử dụng không đồng bộ

Đối với các ứng dụng hiệu suất cao, bạn có thể sử dụng ứng dụng khách không đồng bộ cho phép bạn thực hiện các lệnh gọi API không chặn. Sử dụng không đồng bộ lý tưởng cho các yêu cầu chạy trong thời gian dài hoặc khi bạn muốn xử lý đồng thời nhiều yêu cầu mà không chặn ứng dụng của mình. Để sử dụng, hãy nhập thay vì AsyncOpenAIOpenAI sử dụng await với mỗi lệnh gọi API:

import asyncio
from openai import AsyncOpenAI

client = AsyncOpenAI(
    base_url="https://<resource-name>.openai.azure.com/openai/v1/",
    api_key=token_provider,
)

async def main():
    response = await client.responses.create(
        model="gpt-4.1",
        input="Explain quantum computing briefly."
    )
    print(response.output_text)

asyncio.run(main())

Phát trực tuyến không đồng bộ hoạt động theo cách tương tự:

async def stream_response():
    stream = await client.responses.create(
        model="gpt-4.1",
        input="Write a haiku about coding.",
        stream=True
    )
    
    async for event in stream:
        print(event, end="", flush=True)

asyncio.run(stream_response())

Bằng cách sử dụng API Phản hồi thông qua SDK Microsoft Foundry, bạn có thể xây dựng các ứng dụng AI đàm thoại phức tạp để duy trì ngữ cảnh, hỗ trợ nhiều loại mô hình và cung cấp trải nghiệm người dùng đáp ứng.