生成AIのAPIサービスがありますが、2つのAIのAPIサービスをそれぞれに登録して会話をさせ、それを観察するためのプログラムをgoで書いてみてください。

emile-perron-xrVDYZRGdw4-unsplash.jpg

質問

生成AIのAPIサービスがありますが、2つのAIのAPIサービスをそれぞれに登録して会話をさせ、それを観察するためのプログラムをgoで書いてみてください。


解答

了解です。
特定の企業名・サービス名は出さず
「2つの生成AI APIにそれぞれ登録して、相互に会話させ、その様子を観察する」
ための設計とGoのサンプルコードを書きます。

※ 実際に動かすには、各API仕様に合わせてエンドポイントやJSONを調整してください。
ここでは思想と構造が分かることを最優先します。


全体設計(考え方)

目的

  • AI-A と AI-B に同じ形式のAPIで話させる

  • 出力をそのまま相手の入力に渡す

  • 人間は「観察者」としてログを見るだけ

構造

[ AI-A ] ←→ [ コントローラ(Golang) ] ←→ [ AI-B ]

コントローラがやること:

  1. 初期プロンプトをAI-Aに送る

  2. AI-Aの返答をAI-Bに送る

  3. AI-Bの返答をAI-Aに送る

  4. これをNターン繰り返す

  5. 全ログを保存・表示


前提となるAPI抽象化

どの生成AIでも、最低限こういう形が多い想定です:

  • POST /chat

  • 入力:prompt(文字列)

  • 出力:response(文字列)


Goコード例(最小構成)

package mainimport (	"bytes"	"encoding/json"	"fmt"	"net/http"	"time")// ===== 汎用AIクライアント =====type AIClient struct {	Name      string	Endpoint  string	APIKey    string}type AIRequest struct {	Prompt string `json:"prompt"`}type AIResponse struct {	Response string `json:"response"`}func (ai *AIClient) Send(prompt string) (string, error) {	reqBody, _ := json.Marshal(AIRequest{Prompt: prompt})	req, err := http.NewRequest("POST", ai.Endpoint, bytes.NewBuffer(reqBody))	if err != nil {		return "", err	}	req.Header.Set("Content-Type", "application/json")	req.Header.Set("Authorization", "Bearer "+ai.APIKey)	client := &http.Client{Timeout: 30 * time.Second}	resp, err := client.Do(req)	if err != nil {		return "", err	}	defer resp.Body.Close()	var aiResp AIResponse	if err := json.NewDecoder(resp.Body).Decode(&aiResp); err != nil {		return "", err	}	return aiResp.Response, nil}// ===== 会話コントローラ =====func main() {	aiA := AIClient{		Name:     "AI-A",		Endpoint: "https://api.ai-a.example/chat",		APIKey:   "API_KEY_A",	}	aiB := AIClient{		Name:     "AI-B",		Endpoint: "https://api.ai-b.example/chat",		APIKey:   "API_KEY_B",	}	turns := 5	message := "あなたは哲学者です。自由とは何かを一文で述べてください。"	fmt.Println("=== AI会話観察開始 ===")	for i := 1; i <= turns; i++ {		fmt.Printf("\n--- Turn %d ---\n", i)		respA, err := aiA.Send(message)		if err != nil {			panic(err)		}		fmt.Printf("[%s] %s\n", aiA.Name, respA)		respB, err := aiB.Send(respA)		if err != nil {			panic(err)		}		fmt.Printf("[%s] %s\n", aiB.Name, respB)		message = respB	}	fmt.Println("\n=== 観察終了 ===")}

このコードで「観察できること」

  • 断定調 vs 慎重調

  • 相手の主張を強化するか、疑うか

  • ループが進むにつれて思想が収束するか発散するか

  • 「もっともらしさ」が自己増殖する瞬間

特に3ターン目以降が面白いです。


発展させるなら(おすすめ)

1. ログ保存

// JSONやCSVで保存して後から分析

2. 役割固定

  • AI-A:常に懐疑的

  • AI-B:常に断定的

3. 自己言及実験

初期プロンプトを:

あなたはAIです。今から別のAIと会話します。相手の誤りを丁寧に指摘してください。

4. 発散防止

  • 最大トークン制限

  • 要約フェーズを挿入


重要な注意点(思想的)

この実験で見えるのは、
**「真理」ではなく「言語モデル同士の共鳴」**です。

  • 合意しても正しいとは限らない

  • 対立しても間違っているとは限らない

  • 自信が増幅されることがある

ここを見誤らないのが一番大事です。




つなげ★月曜日くん! 火曜日が無限ループで大ピンチ⁉ (野いちごジュニア文庫) [ 柊乃なや ]

価格:858円
(2026/2/6 21:59時点)
感想(0件)



 



この記事へのコメント

広告です。クリックいただけると励みになります。