Use multiple tools to answer a question. Basically pass a natural question to
| 31 | |
| 32 | |
| 33 | class MTQuestionAnswerer: |
| 34 | """Use multiple tools to answer a question. Basically pass a natural question to |
| 35 | """ |
| 36 | def __init__(self, openai_api_key, all_tools, stream_output=False, llm='ChatGPT'): |
| 37 | if len(openai_api_key) < 3: # not valid key (TODO: more rigorous checking) |
| 38 | openai_api_key = os.environ.get('OPENAI_API_KEY') |
| 39 | self.openai_api_key = openai_api_key |
| 40 | self.stream_output = stream_output |
| 41 | self.llm_model = llm |
| 42 | self.set_openai_api_key(openai_api_key) |
| 43 | self.load_tools(all_tools) |
| 44 | |
| 45 | def set_openai_api_key(self, key): |
| 46 | logger.info("Using {}".format(self.llm_model)) |
| 47 | if self.llm_model == "GPT-3.5": |
| 48 | self.llm = OpenAI(temperature=0.0, openai_api_key=key) # use text-darvinci |
| 49 | elif self.llm_model == "ChatGPT": |
| 50 | self.llm = OpenAI(model_name="gpt-3.5-turbo", temperature=0.0, openai_api_key=key) # use chatgpt |
| 51 | else: |
| 52 | raise RuntimeError("Your model is not available.") |
| 53 | |
| 54 | def load_tools(self, all_tools): |
| 55 | logger.info("All tools: {}".format(all_tools)) |
| 56 | self.all_tools_map = {} |
| 57 | self.tools_pool = [] |
| 58 | for name in all_tools: |
| 59 | meta_info = all_tools[name] |
| 60 | |
| 61 | question_answer = STQuestionAnswerer(self.openai_api_key, stream_output=self.stream_output, llm=self.llm_model) |
| 62 | subagent = question_answer.load_tools(name, meta_info, prompt_type="react-with-tool-description", return_intermediate_steps=False) |
| 63 | tool_logo_md = f'<img src="{meta_info["logo_url"]}" width="32" height="32" style="display:inline-block">' |
| 64 | for tool in subagent.tools: |
| 65 | tool.tool_logo_md = tool_logo_md |
| 66 | tool = Tool( |
| 67 | name=meta_info['name_for_model'], |
| 68 | description=meta_info['description_for_model'].replace("{", "{{").replace("}", "}}"), |
| 69 | func=subagent, |
| 70 | ) |
| 71 | tool.tool_logo_md = tool_logo_md |
| 72 | self.tools_pool.append(tool) |
| 73 | |
| 74 | def build_runner(self, ): |
| 75 | from langchain.vectorstores import FAISS |
| 76 | from langchain.docstore import InMemoryDocstore |
| 77 | from langchain.embeddings import OpenAIEmbeddings |
| 78 | embeddings_model = OpenAIEmbeddings() |
| 79 | import faiss |
| 80 | embedding_size = 1536 |
| 81 | index = faiss.IndexFlatL2(embedding_size) |
| 82 | vectorstore = FAISS(embeddings_model.embed_query, index, InMemoryDocstore({}), {}) |
| 83 | |
| 84 | from .autogptmulti.agent import AutoGPT |
| 85 | from langchain.chat_models import ChatOpenAI |
| 86 | agent_executor = AutoGPT.from_llm_and_tools( |
| 87 | ai_name="Tom", |
| 88 | ai_role="Assistant", |
| 89 | tools=self.tools_pool, |
| 90 | llm=ChatOpenAI(temperature=0), |
no outgoing calls
no test coverage detected