openai api的go用法

最近openai火爆,研究了一下在go中的用法,采用官方的go-openai库。因为受官方屏蔽影响,需满足以下两点:

1、正确的上网方法

2、需要配置本地代理

package main

import (
	"context"
	"errors"
	"fmt"
	openai "github.com/sashabaranov/go-openai"
	"io"
	"net/http"
	"net/url"
)

func main() {
	token := "your api key"
	ask := "你是第几代模型?"
	ChatCompletion(token, ask)
}

func ChatCompletion(token, ask string) {
    //配置代理
	config := openai.DefaultConfig(token)
	proxy_url, err := url.Parse("http://127.0.0.1:58309") // 你运行该代码时的电脑在使用魔法上网时,在本地对应的代理服务器的映射端口
	if err != nil {
		panic(err)
	}
	transport := &http.Transport{
		Proxy: http.ProxyURL(proxy_url),
	}
	config.HTTPClient = &http.Client{
		Transport: transport,
	}

	client := openai.NewClientWithConfig(config)

	//client := openai.NewClient(token)  //原三方库openai的,改成上面的配代理写法
	resp, err := client.CreateChatCompletion(
		context.Background(),
		openai.ChatCompletionRequest{
			Model: openai.GPT3Dot5Turbo,
			Messages: []openai.ChatCompletionMessage{
				{
					Role:    openai.ChatMessageRoleUser,
					Content: ask,
				},
			},
		},
	)

	if err != nil {
		fmt.Printf("ChatCompletion error: %v\n", err)
		return
	}

	fmt.Println(resp.Choices[0].Message.Content)
}

使用C#代码调用OpenAI API可以通过以下两种常见方式实现: ### 使用Nuget的OpenAI - DotNet库 该方法借助Nuget的OpenAI - DotNet库来调用ChatGPT,示例代码如下: ```csharp static string key = string.Empty; static OpenAIClient api = new OpenAIClient(这里填你的Key); public static event Action<string> OnReceiveReply; public static event Action<string> OnReceivePartial; public static async Task AskAsync(List<Message> messages) { var chatRequest = new ChatRequest(messages, Model.GPT3_5_Turbo); await foreach (var result in api.ChatEndpoint.StreamCompletionEnumerableAsync(chatRequest)) { foreach (var choice in result.Choices.Where(choice => choice.Delta?.Content != null)) { // Partial response content //Debug.WriteLine(choice.Delta.Content); OnReceivePartial?.Invoke(choice.Delta.Content); } foreach (var choice in result.Choices.Where(choice => choice.Message?.Content != null)) { // Completed response content //Debug.WriteLine($"{choice.Message.Role}: {choice.Message.Content}"); OnReceiveReply?.Invoke(choice.Message.Content); } } } ``` 在上述代码中,首先需要将实际的API密钥填入`OpenAIClient`的构造函数中。然后定义了两个事件`OnReceiveReply`和`OnReceivePartial`,分别用于处理完整响应内容和部分响应内容。`AskAsync`方法接收一个消息列表`messages`,创建一个`ChatRequest`对象,并使用`StreamCompletionEnumerableAsync`方法异步获取响应结果,最后根据响应结果触发相应的事件 [^4]。 ### 创建简单的C#类处理API请求 在获取OpenAI API密钥后,要将其存储在配置文件或环境变量中以保证安全性。在示例中可假设将API密钥直接传递给代码,但在生产环境中,需使用环境变量或加密存储。之后创建一个简单的C#类来处理API请求 [^1]。 此外,微软的Azure团队维护的库与OpenAI API和Azure OpenAI服务兼容,可阅读以下库文档,了解如何使用它们与OpenAI API交互: - Azure OpenAI客户端库 for .NET - Azure OpenAI客户端库 for JavaScript - Azure OpenAI客户端库 for Java - Azure OpenAI客户端库 for Go [^2]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值