qwenlm--qwen-agent
84 行
2.7 KiB
Python
84 行
2.7 KiB
Python
import os
|
|
|
|
tools_text = """code_interpreter: Call this tool to interact with the Code Interpreter API.
|
|
What is the Code Interpreter API useful for?
|
|
Code Interpreter is used to execute Python code to deal with the following tasks:
|
|
1. Solving mathematical problems, both quantitative and qualitative
|
|
2. Doing data analysis and visualization
|
|
3. Converting files between formats
|
|
Parameters:
|
|
```py
|
|
code
|
|
```
|
|
Enclose the code within triple backticks (```) at the beginning and end of the code.
|
|
"""
|
|
|
|
REACT_PROMPT = """Answer the following questions as best you can. You have access to the following tools:
|
|
|
|
{tools_text}
|
|
|
|
Use the following format:
|
|
|
|
Question: the input question you must answer
|
|
Thought: you should always think about what to do
|
|
Action: the action to take, should be one of [{tools_name_text}]
|
|
Action Input: the input to the action
|
|
Observation: the result of the action
|
|
... (this Thought/Action/Action Input/Observation can be repeated zero or more times)
|
|
Thought: I now know the final answer
|
|
Final Answer: the final answer to the original input question
|
|
|
|
Begin!
|
|
|
|
Question: {query}"""
|
|
|
|
fname_template = {
|
|
'zh': '文件{fname_str},',
|
|
'en_multi': 'Files {fname_str}. ',
|
|
'en': 'File {fname_str}. ',
|
|
}
|
|
|
|
|
|
class ReAct(object):
|
|
|
|
def __init__(self, query, lang='en', upload_file_paths=[]):
|
|
self.query = query
|
|
self.lang = lang
|
|
self.upload_file_paths = [f'`{os.path.basename(fname)}`' for fname in upload_file_paths]
|
|
|
|
self.fname_template = fname_template
|
|
self.react_template = REACT_PROMPT
|
|
self.prompt = ''
|
|
|
|
def build_prompt(self):
|
|
query = self._format_upload_fname() + self.query
|
|
tools_text = self._build_tools_text()
|
|
tools_name_text = self._build_tools_name_text()
|
|
planning_prompt = self.react_template.format(query=query,
|
|
tools_text=tools_text,
|
|
tools_name_text=tools_name_text)
|
|
|
|
self.prompt = planning_prompt
|
|
return planning_prompt
|
|
|
|
def _format_upload_fname(self):
|
|
prefix = ''
|
|
if self.upload_file_paths:
|
|
fname_str = ', '.join(self.upload_file_paths)
|
|
lang_key = 'en_multi' if self.lang == 'en' and len(self.upload_file_paths) > 1 else self.lang
|
|
fname_template = self.fname_template[lang_key]
|
|
prefix = fname_template.format(fname_str=fname_str)
|
|
return prefix
|
|
|
|
def _build_tools_text(self):
|
|
return tools_text
|
|
|
|
def _build_tools_name_text(self):
|
|
return 'code_interpreter'
|
|
|
|
def build_observation(self, observation):
|
|
return f'\nObservation: {observation}\nThought:'
|
|
|
|
def get_stop_words_list(self):
|
|
return ['Observation:', 'Observation:\n']
|