今回は以下の続き
前は戻ったjsonをそのまま表示していたが今度は中身のみを表示する
.h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "Http.h"
#include "Json.h"
#include "GameFramework/Actor.h"
#include "CurlApiTest.generated.h"
UCLASS()
class FURCRAEAUEOPENAI_API ACurlApiTest : public AActor
{
GENERATED_BODY()
public:
// Sets default values for this actor's properties
ACurlApiTest();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
UFUNCTION(BlueprintCallable, Category = "Http")
void SendChatCompletionRequest();
void ProcessResponseSimple(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful);
//void ProcessResponse(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful);
};
.cpp
// Fill out your copyright notice in the Description page of Project Settings.
#include "CurlApiTest.h"
#include "CurlRequest.h"
#include "Http.h"
#include "Json.h"
#include "Misc/Paths.h"
#include "Misc/ConfigCacheIni.h"
// Sets default values
ACurlApiTest::ACurlApiTest()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
}
// Called when the game starts or when spawned
void ACurlApiTest::BeginPlay()
{
Super::BeginPlay();
SendChatCompletionRequest();
}
// Called every frame
void ACurlApiTest::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}
void ACurlApiTest::SendChatCompletionRequest()
{
FString ApiKey = TEXT("sk-から始まる秘密鍵");
TSharedRef<IHttpRequest> HttpRequest = FHttpModule::Get().CreateRequest();
HttpRequest->SetURL("https://api.openai.com/v1/chat/completions");
HttpRequest->SetVerb("POST");
HttpRequest->SetHeader("Content-Type", "application/json");
HttpRequest->SetHeader("Authorization", "Bearer " + ApiKey);
// JSON Body
FString Content = TEXT(R"(
{
"model": "gpt-4o-mini",
"messages": [{"role": "user", "content": "Say this is a test!"}],
"temperature": 0.7
}
)");
HttpRequest->SetContentAsString(Content);
HttpRequest->OnProcessRequestComplete().BindUObject(this, &ACurlApiTest::ProcessResponseSimple);
/*
HttpRequest->OnProcessRequestComplete().BindLambda([this](FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful)
{
ProcessResponse(Request, Response, bWasSuccessful);
});
*/
HttpRequest->ProcessRequest();
}
void ACurlApiTest::ProcessResponseSimple(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful)
{
if (bWasSuccessful && Response.IsValid())
{
FString ResponseContent = Response->GetContentAsString();
TSharedPtr<FJsonObject> JsonObject;
TSharedRef<TJsonReader<>> Reader = TJsonReaderFactory<>::Create(ResponseContent);
if (FJsonSerializer::Deserialize(Reader, JsonObject) && JsonObject.IsValid())
{
FString MessageContent = JsonObject->GetArrayField("choices")[0]->AsObject()->GetObjectField("message")->GetStringField("content");
UE_LOG(LogTemp, Warning, TEXT("Response Message: %s"), *MessageContent);
}
else
{
UE_LOG(LogTemp, Error, TEXT("Failed to parse JSON response"));
}
}
else
{
UE_LOG(LogTemp, Error, TEXT("Request failed"));
}
}
WBP_ApiTestにボタン追加して

SendChatCompletionRequest を呼び出した

できた!

“[UE5.3.2][VisualStudio][Cpp]UnrealEngineのCPPプラグインからOpenAI(ChatGPT4o)を呼んで返り値jsonからパースしてメッセージをとる” への1件の返信