| const { ZeroShotAgent } = require('langchain/agents'); |
| const { PromptTemplate, renderTemplate } = require('langchain/prompts'); |
| const { gpt3, gpt4 } = require('./instructions'); |
|
|
| class CustomAgent extends ZeroShotAgent { |
| constructor(input) { |
| super(input); |
| } |
|
|
| _stop() { |
| return ['\nObservation:', '\nObservation 1:']; |
| } |
|
|
| static createPrompt(tools, opts = {}) { |
| const { currentDateString, model } = opts; |
| const inputVariables = ['input', 'chat_history', 'agent_scratchpad']; |
|
|
| let prefix, instructions, suffix; |
| if (model.includes('gpt-3')) { |
| prefix = gpt3.prefix; |
| instructions = gpt3.instructions; |
| suffix = gpt3.suffix; |
| } else if (model.includes('gpt-4')) { |
| prefix = gpt4.prefix; |
| instructions = gpt4.instructions; |
| suffix = gpt4.suffix; |
| } |
|
|
| const toolStrings = tools |
| .filter((tool) => tool.name !== 'self-reflection') |
| .map((tool) => `${tool.name}: ${tool.description}`) |
| .join('\n'); |
| const toolNames = tools.map((tool) => tool.name); |
| const formatInstructions = (0, renderTemplate)(instructions, 'f-string', { |
| tool_names: toolNames, |
| }); |
| const template = [ |
| `Date: ${currentDateString}\n${prefix}`, |
| toolStrings, |
| formatInstructions, |
| suffix, |
| ].join('\n\n'); |
| return new PromptTemplate({ |
| template, |
| inputVariables, |
| }); |
| } |
| } |
|
|
| module.exports = CustomAgent; |
|
|