English | 简体中文
This is the Go language implementation of microsoft/TypeChat.
TypeChat-Go is a library that makes it easy to build natural language interfaces using types.
microsoft/TypeChat: Building natural language interfaces has traditionally been difficult. These apps often relied on complex decision trees to determine intent and collect the required inputs to take action. Large language models (LLMs) have made this easier by enabling us to take natural language input from a user and match to intent. This has introduced its own challenges including the need to constrain the model's reply for safety, structure responses from the model for further processing, and ensuring that the reply from the model is valid. Prompt engineering aims to solve these problems, but comes with a steep learning curve and increased fragility as the prompt increases in size. TypeChat replaces prompt engineering with schema engineering. Simply define types that represent the intents supported in your natural language application. That could be as simple as an interface for categorizing sentiment or more complex examples like types for a shopping cart or music application. For example, to add additional intents to a schema, a developer can add additional types into a discriminated union. To make schemas hierarchical, a developer can use a "meta-schema" to choose one or more sub-schemas based on user input.
After defining your types, TypeChat takes care of the rest by:
- Constructing a prompt to the LLM using types.
- Validating the LLM response conforms to the schema. If the validation fails, repair the non-conforming output through further language model interaction.
- Summarizing succinctly (without use of a LLM) the instance and confirm that it aligns with user intent.
Types are all you need!
⭐️ Star to support our work!
Install TypeChat-Go:
go get github.com/maiqingqiang/typechat-go
Configure environment variables
Currently, the examples are running on OpenAI or Azure OpenAI endpoints. To use an OpenAI endpoint, include the following environment variables:
Variable | Value |
---|---|
OPENAI_MODEL |
The OpenAI model name (e.g. gpt-3.5-turbo or gpt-4 ) |
OPENAI_API_KEY |
Your OpenAI API key |
OPENAI_ENDPOINT |
OpenAI API Endpoint - optional, defaults to "https://api.openai.com/v1/chat/completions" |
OPENAI_ORGANIZATION |
OpenAI Organization - optional, defaults to "" |
To use an Azure OpenAI endpoint, include the following environment variables:
Variable | Value |
---|---|
AZURE_OPENAI_ENDPOINT |
The full URL of the Azure OpenAI REST API (e.g. https://YOUR_RESOURCE_NAME.openai.azure.com/openai/deployments/YOUR_DEPLOYMENT_NAME/chat/completions?api-version=2023-05-15 ) |
AZURE_OPENAI_API_KEY |
Your Azure OpenAI API key |
To see TypeChat-Go in action, check out the examples found in this directory.
Each example shows how TypeChat-Go handles natural language input, and maps to validated JSON as output. Most example inputs run on both GPT 3.5 and GPT 4.
Name | Description |
---|---|
Sentiment | A sentiment classifier which categorizes user input as negative, neutral, or positive. This is TypeChat-Go's "hello world!" |
Coffee Shop | TODO |
Calendar | An intelligent scheduler. This sample translates user intent into a sequence of actions to modify a calendar. |
Restaurant | An intelligent agent for taking orders at a restaurant. Similar to the coffee shop example, but uses a more complex schema to model more complex linguistic input. The prose files illustrate the line between simpler and more advanced language models in handling compound sentences, distractions, and corrections. This example also shows how we can use Go to provide a user intent summary. |
Math | Translate calculations into simple programs given an API that can perform the 4 basic mathematical operators. This example highlights TypeChat-Go's program generation capabilities. |
Music | TODO |
To run an example with one of these input files, run go run . <input-file-path>
.
For example, in the math directory, you can run:
go run . /input.txt