MCPcopy Create free account
hub / github.com/OpenBMB/BMTools / MTQuestionAnswerer

Class MTQuestionAnswerer

bmtools/agent/tools_controller.py:33–114  ·  view source on GitHub ↗

Use multiple tools to answer a question. Basically pass a natural question to

Source from the content-addressed store, hash-verified

31
32
33class 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),

Callers 4

multi_test.pyFile · 0.90
test_multi.pyFile · 0.90
answer_by_toolsFunction · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected