Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/all-in-aigc/chatgpt-webapi
chatgpt go sdk
https://github.com/all-in-aigc/chatgpt-webapi
chatgpt chatgpt-api chatgpt-go chatgpt-sdk
Last synced: about 2 months ago
JSON representation
chatgpt go sdk
- Host: GitHub
- URL: https://github.com/all-in-aigc/chatgpt-webapi
- Owner: all-in-aigc
- License: mit
- Created: 2022-12-11T09:40:17.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2023-04-05T05:08:23.000Z (almost 2 years ago)
- Last Synced: 2024-06-18T20:09:00.986Z (7 months ago)
- Topics: chatgpt, chatgpt-api, chatgpt-go, chatgpt-sdk
- Language: Go
- Homepage: https://gptalk.one
- Size: 1.67 MB
- Stars: 153
- Watchers: 9
- Forks: 22
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
> if you want to use [GPT-3](https://beta.openai.com/docs/api-reference/introduction) apis, look at this one: [GPT-3 SDK](https://github.com/chatgp/gpt3),
# chatgpt-go
chatgpt sdk writen by golang.
## Preparation
you should login into the [ChatGPT Website](https://chat.openai.com/chat) firstly, find the Cookies named `cf_clearance`,`__Secure-next-auth.session-token`, and copy their values.
![](./images/chatgpt_cookies.png)
> `_puid` cookie is required too, while only plus user can find it in their cookies after login ChatGPT official website.
## Quick Start
1. install chatgpt-go sdk
```shell
go get -u github.com/chatgp/chatgpt-go
```2. chat in independent conversation
```go
package mainimport (
"log"
"net/http"
"time"chatgpt "github.com/chatgp/chatgpt-go"
)func main() {
token := `copy-from-cookies`
cfValue := "copy-from-cookies"
puid := "copy-from-cookies"cookies := []*http.Cookie{
{
Name: "__Secure-next-auth.session-token",
Value: token,
},
{
Name: "cf_clearance",
Value: cfValue,
},
{
Name: "_puid",
Value: puid,
},
}cli := chatgpt.NewClient(
chatgpt.WithDebug(true),
chatgpt.WithTimeout(60*time.Second),
chatgpt.WithCookies(cookies),
)// chat in independent conversation
message := "say hello to me"
text, err := cli.GetChatText(message)
if err != nil {
log.Fatalf("get chat text failed: %v", err)
}log.Printf("q: %s, a: %s\n", message, text.Content)
}
```3. chat in continuous conversation
```go
package mainimport (
"log"
"net/http"
"time"chatgpt "github.com/chatgp/chatgpt-go"
)func main() {
// new chatgpt client
token := `copy-from-cookies`
cfValue := "copy-from-cookies"cookies := []*http.Cookie{
{
Name: "__Secure-next-auth.session-token",
Value: token,
},
{
Name: "cf_clearance",
Value: cfValue,
},
}cli := chatgpt.NewClient(
chatgpt.WithDebug(true),
chatgpt.WithTimeout(60*time.Second),
chatgpt.WithCookies(cookies),
)// chat in continuous conversation
// first message
message := "say hello to me"
text, err := cli.GetChatText(message)
if err != nil {
log.Fatalf("get chat text failed: %v", err)
}log.Printf("q: %s, a: %s\n", message, text.Content)
// continue conversation with new message
conversationID := text.ConversationID
parentMessage := text.MessageID
newMessage := "again"newText, err := cli.GetChatText(newMessage, conversationID, parentMessage)
if err != nil {
log.Fatalf("get chat text failed: %v", err)
}log.Printf("q: %s, a: %s\n", newMessage, newText.Content)
}
```> if you want to start a new conversation out of current conversation, you don't need to reset the client. just remove the `conversationID`、`parentMessage` arguments in `GetChatText` method and use it to get a new text reply.
4. get chat content with stream
```go
package mainimport (
"log"
"net/http"
"time"chatgpt "github.com/chatgp/chatgpt-go"
)func main() {
// new chatgpt client
token := `copy-from-cookies`
cfValue := "copy-from-cookies"cookies := []*http.Cookie{
{
Name: "__Secure-next-auth.session-token",
Value: token,
},
{
Name: "cf_clearance",
Value: cfValue,
},
}cli := chatgpt.NewClient(
chatgpt.WithDebug(true),
chatgpt.WithTimeout(60*time.Second),
chatgpt.WithCookies(cookies),
)message := "say hello to me"
stream, err := cli.GetChatStream(message)
if err != nil {
log.Fatalf("get chat stream failed: %v\n", err)
}var answer string
for text := range stream.Stream {
log.Printf("stream text: %s\n", text.Content)
answer = text.Content
}if stream.Err != nil {
log.Fatalf("stream closed with error: %v\n", stream.Err)
}log.Printf("q: %s, a: %s\n", message, answer)
}
```## Tests
under examples folder there are some tests, execute `go test` command and get outputs like below:
- get chat text
![](./images/chat_text.png)
- get chat text in continuous conversation
![](./images/continuous_chat_text.png)
- get chat text from stream
![](./images/chat_stream.png)
## Communication
- Telegram Group: [ChatGPT Creators](https://t.me/+YkEGeRxB5Q0zODY1)
- Discord Server: [ChatGPT Creators](https://discord.gg/qWshJnJs)
- Wechat Group: [ChatGPT Creators](https://work.weixin.qq.com/gm/66944e9bd30628e9270c980bc756663d)
![](./images/wechat_group.jpg)