Torne seus prompts LLM executáveis e controlados por versão.
No seu servidor Express:
yarn add spellbook-forge
import { spellbookForge } from "spellbook-forge" ;
const app = express ( )
. use ( spellbookForge ( {
gitHost : 'https://github.com'
} ) )
e então:
GET http://localhost:3000/your/repository/prompt?execute
<-- HTTP 200
{
"prompt-content": "Complete this phrase in coders’ language: Hello …",
"model": "gpt3.5",
"result": "Hello, World!"
}
Veja exemplos ao vivo para experimentar!
Este é um middleware ExpressJS que permite criar uma interface API para seus prompts LLM. Ele irá gerar automaticamente um servidor para seus prompts armazenados em um repositório git. Usando o Spellbook, você pode:
Nota: é uma versão inicial. Espere bugs, alterações significativas e desempenho ruim.
Este repositório de prompt: https://github.com/rafalzawadzki/spellbook-prompts/hello-world
Pode ser executado assim: https://book.spell.so/rafalzawadzki/spellbook-prompts/hello-world?execute
➡️ Servidor Spellbook: https://book.spell.so
O servidor usa spellbook-forge
e atualmente está conectado ao Github como um host git. Você pode usar qualquer repositório público com prompts (desde que sigam o formato aceito).
Por exemplo, usando um repositório rafalzawadzki/spellbook-prompts, você pode formar um endpoint (e muitos mais):
https://book.spell.so/rafalzawadzki/spellbook-prompts/hello-world
Documentação completa em breve!
Se quiser usar a consulta execute
em sua própria instância do Spellbook-Forge, você precisará fornecer uma chave de API OpenAI no arquivo .env ou em variáveis env:
OPENAI_API_KEY=your-key
Os arquivos de prompt devem aderir a um formato específico (JSON/YAML). Veja exemplos aqui aqui.
├── prompt1
│ ├── prompt . json
│ └── readme . md
└── collection
└── prompt2
├── prompt . yaml
└── readme . md
A estrutura de arquivo acima resultará na geração dos seguintes endpoints de API:
{host}/prompt1
{host}/collection/prompt2
prompt.json
o arquivo principal com o conteúdo e configuração do prompt.readme.md
informações adicionais sobre uso de prompt, exemplos etc. GET
{host}/path/to/prompt
- obtém conteúdo do prompt
POST
{host}/path/to/prompt
- atualiza o conteúdo do prompt
DELETE
{host}/path/to/prompt
- prompt de exclusão (junto com leia-me e metadados!)
GET
{host}/path/to/prompt?execute
- para prompts simples sem modelos
POST
{host}/path/to/prompt?execute
- para prompts com modelos (recomendado)
// request body
{
"variables": [
"name": "World"
]
}
GET
{host}/path/to/prompt?execute=gpt4
- com modelo diferente (ainda não implementado)Você pode buscar o conteúdo do prompt e executá-lo usando LangChain:
import { PromptTemplate } from "langchain/prompts" ;
export const run = async ( ) => {
const template = await fetch (
"https://book.spell.so/rafalzawadzki/spellbook-prompts/hello-world"
) . then ( ( res ) => res . text ( ) ) ;
const prompt = new PromptTemplate ( { template , inputVariables : [ "product" ] } )
// do something with the prompt ...
}
A solução apresentada faz sentido principalmente no encadeamento, para instruções simples é melhor usar o Spellbook diretamente!
No futuro, posso contribuir para estender a função prompt/load
do LangChain para suportar prompts de carregamento do Spellbook, por exemplo:
import { loadPrompt } from "langchain/prompts/load" ;
const prompt = await loadPrompt ( "{spellbook-host}/hello-world/prompt" ) ;
POST /prompt?execute
com corpo execute=gpt4